<?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>235692</bug_id>
          
          <creation_ts>2022-01-26 23:39:27 -0800</creation_ts>
          <short_desc>Add support for decorating and scrolling to ranges in WebFoundTextRangeController</short_desc>
          <delta_ts>2022-01-28 13:47:41 -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>New Bugs</component>
          <version>Other</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>
          <dependson>235691</dependson>
          <blocked>235830</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Aditya Keerthi">akeerthi</reporter>
          <assigned_to name="Aditya Keerthi">akeerthi</assigned_to>
          <cc>hi</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1834427</commentid>
    <comment_count>0</comment_count>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2022-01-26 23:39:27 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834428</commentid>
    <comment_count>1</comment_count>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2022-01-26 23:39:44 -0800</bug_when>
    <thetext>rdar://88117232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834630</commentid>
    <comment_count>2</comment_count>
      <attachid>450163</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2022-01-27 11:57:07 -0800</bug_when>
    <thetext>Created attachment 450163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834840</commentid>
    <comment_count>3</comment_count>
      <attachid>450209</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2022-01-27 23:42:06 -0800</bug_when>
    <thetext>Created attachment 450209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835042</commentid>
    <comment_count>4</comment_count>
      <attachid>450251</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2022-01-28 10:28:38 -0800</bug_when>
    <thetext>Created attachment 450251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835076</commentid>
    <comment_count>5</comment_count>
      <attachid>450251</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2022-01-28 11:11:35 -0800</bug_when>
    <thetext>Comment on attachment 450251
Patch

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

&gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:109
&gt; +    if (style == FindDecorationStyle::Normal) {
&gt; +        simpleRange-&gt;start.document().markers().removeMarkers(*simpleRange, WebCore::DocumentMarker::TextMatch);
&gt; +    } else if (style == FindDecorationStyle::Found) {
&gt; +        simpleRange-&gt;start.document().markers().addMarker(*simpleRange, WebCore::DocumentMarker::TextMatch);
&gt; +    } else if (style == FindDecorationStyle::Highlighted) {

I think the { } here around single-line if statements should be omitted (unless that rule has changed recently?)

&gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:136
&gt; +    OptionSet&lt;WebCore::TemporarySelectionOption&gt; temporarySelectionOptions { WebCore::TemporarySelectionOption::DelegateMainFrameScroll, WebCore::TemporarySelectionOption::RevealSelectionBounds };

Nit - can you replace &quot;OptionSet&lt;WebCore::TemporarySelectionOption&gt;&quot; with just OptionSet? (I think that type deduction should be sufficient to infer the type here)

&gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:259
&gt; +    auto* mainFrameView = m_webPage-&gt;corePage()-&gt;mainFrame().view();

I think we should be protecting these with RefPtr (especially since the logic below involves more than just simple getters)

&gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:288
&gt; +    for (auto* frame = m_webPage-&gt;corePage()-&gt;mainFrame().document()-&gt;topDocument().frame(); frame; frame = frame-&gt;tree().traverseNext()) {
&gt; +        if (frame-&gt;tree().uniqueName() == range.frameIdentifier)
&gt; +            return frame-&gt;document();
&gt; +    }

Can we simplify this logic a bit using `FrameTree::find()`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835083</commentid>
    <comment_count>6</comment_count>
      <attachid>450263</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2022-01-28 11:50:16 -0800</bug_when>
    <thetext>Created attachment 450263
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835084</commentid>
    <comment_count>7</comment_count>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2022-01-28 11:52:30 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #5)
&gt; Comment on attachment 450251 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450251&amp;action=review

Thanks for the review!
 
&gt; &gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:109
&gt; &gt; +    if (style == FindDecorationStyle::Normal) {
&gt; &gt; +        simpleRange-&gt;start.document().markers().removeMarkers(*simpleRange, WebCore::DocumentMarker::TextMatch);
&gt; &gt; +    } else if (style == FindDecorationStyle::Found) {
&gt; &gt; +        simpleRange-&gt;start.document().markers().addMarker(*simpleRange, WebCore::DocumentMarker::TextMatch);
&gt; &gt; +    } else if (style == FindDecorationStyle::Highlighted) {
&gt; 
&gt; I think the { } here around single-line if statements should be omitted
&gt; (unless that rule has changed recently?)

Removed { }.
 
&gt; &gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:136
&gt; &gt; +    OptionSet&lt;WebCore::TemporarySelectionOption&gt; temporarySelectionOptions { WebCore::TemporarySelectionOption::DelegateMainFrameScroll, WebCore::TemporarySelectionOption::RevealSelectionBounds };
&gt; 
&gt; Nit - can you replace &quot;OptionSet&lt;WebCore::TemporarySelectionOption&gt;&quot; with
&gt; just OptionSet? (I think that type deduction should be sufficient to infer
&gt; the type here)

Type deduction worked. Updated another OptionSet in this patch too.
 
&gt; &gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:259
&gt; &gt; +    auto* mainFrameView = m_webPage-&gt;corePage()-&gt;mainFrame().view();
&gt; 
&gt; I think we should be protecting these with RefPtr (especially since the
&gt; logic below involves more than just simple getters)

Done!
 
&gt; &gt; Source/WebKit/WebProcess/WebPage/WebFoundTextRangeController.cpp:288
&gt; &gt; +    for (auto* frame = m_webPage-&gt;corePage()-&gt;mainFrame().document()-&gt;topDocument().frame(); frame; frame = frame-&gt;tree().traverseNext()) {
&gt; &gt; +        if (frame-&gt;tree().uniqueName() == range.frameIdentifier)
&gt; &gt; +            return frame-&gt;document();
&gt; &gt; +    }
&gt; 
&gt; Can we simplify this logic a bit using `FrameTree::find()`?

Replaced this logic with `FrameTree::find()`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835135</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-28 13:47:39 -0800</bug_when>
    <thetext>Committed r288760 (246548@main): &lt;https://commits.webkit.org/246548@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 450263.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450163</attachid>
            <date>2022-01-27 11:57:07 -0800</date>
            <delta_ts>2022-01-27 23:42:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235692-20220127115705.patch</filename>
            <type>text/plain</type>
            <size>14839</size>
            <attacher name="Aditya Keerthi">akeerthi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJmNDVjNWE1NmVkZWQwOTU0
ZDEyNWRhYThlY2MyMTFiNWU1MjQxYTkuLjU2ZmYyY2NlZTEyMDNkY2Y2YjA2ZTFiZTQ4YjI1NTRh
MzliYjg5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjItMDEtMjcgIEFkaXR5YSBL
ZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBk
ZWNvcmF0aW5nIGFuZCBzY3JvbGxpbmcgdG8gcmFuZ2VzIGluIFdlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM1NjkyCisgICAgICAgIHJkYXI6Ly84ODExNzIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdl
Q29udHJvbGxlcjo6ZmluZFRleHRSYW5nZXNGb3JTdHJpbmdNYXRjaGVzKToKKworICAgICAgICBD
YWNoZSB0aGUgZm91bmQgcmFuZ2VzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIFNpbXBsZVJhbmdl
LCB0byBhdm9pZAorICAgICAgICB1bm5lY2Vzc2FyeSB0cmVlIHRyYXZlcnNhbCBlYWNoIHRpbWUg
d2Ugd2FudCB0byBkZWNvcmF0ZSBvciBzY3JvbGwgdG8KKyAgICAgICAgYSBmb3VuZCByZXN1bHQu
CisKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkZWNvcmF0
ZVRleHRSYW5nZVdpdGhTdHlsZSk6CisKKyAgICAgICAgRm91bmQgcmFuZ2VzIGNhbiBjdXJyZW50
bHkgYmUgZGVjb3JhdGVkIHdpdGggMyBzdHlsZXM6ICJOb3JtYWwiLAorICAgICAgICAiRm91bmQi
LCBhbmQgIkhpZ2hsaWdodGVkIi4gVGhlICJGb3VuZCIgc3R5bGUgaXMgZHJhd24gdXNpbmcKKyAg
ICAgICAgZG9jdW1lbnQgbWFya2Vycy4gVGhlICJIaWdobGlnaHRlZCIgc3R5bGUgaXMgZHJhd24g
dXNpbmcgYQorICAgICAgICBUZXh0SW5kaWNhdG9yLgorCisgICAgICAgIChXZWJLaXQ6OldlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6c2Nyb2xsVGV4dFJhbmdlVG9WaXNpYmxlKToKKworICAg
ICAgICBVc2UgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHRvIG1ha2UgdGhlIHJhbmdlIHZpc2li
bGUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpjbGVh
ckFsbERlY29yYXRlZEZvdW5kVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJh
bmdlQ29udHJvbGxlcjo6ZGlkQmVnaW5UZXh0U2VhcmNoT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkaWRFbmRUZXh0U2VhcmNoT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjp3aWxs
TW92ZVRvUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
cjo6ZGlkTW92ZVRvUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXI6OnJlY3RzRm9yVGV4dE1hdGNoZXNJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRvY3VtZW50Rm9yRm91bmRUZXh0UmFuZ2UgY29u
c3QpOgorCisgICAgICAgIFVzZSB0aGUgZnJhbWUgaWRlbnRpZmVyIG9mIHRoZSBXZWJGb3VuZFRl
eHRSYW5nZSB0byByZXRyaWV2ZSB0aGUKKyAgICAgICAgY29ycmVzcG9uZGluZyBEb2N1bWVudCwg
c28gdGhhdCB0aGUgcmFuZ2UgY2FuIGJlIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgbWFwcGVkIGZv
ciBkZWNvcmF0aW9uL3Njcm9sbGluZy4KKworICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXI6OnNpbXBsZVJhbmdlRnJvbUZvdW5kVGV4dFJhbmdlKToKKworICAgICAg
ICBBIGhlbHBlciBtZXRob2QgdG8gY2FjaGUgV2ViRm91bmRUZXh0UmFuZ2VzIGFuZCBTaW1wbGVS
YW5nZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VD
b250cm9sbGVyLmg6CisKIDIwMjItMDEtMjcgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBw
bGUuY29tPgogCiAgICAgICAgIE1pZ3JhdGUgX1VJVGV4dFNlYXJjaGluZyBpbXBsZW1lbnRhdGlv
biB0byBiZSBiYWNrZWQgYnkgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBjZTkzYWJlYzhlNjBiY2M1YTE4MDFlNmQ0MzJlMTYx
Yzg4N2IzZTZlLi4yYWY4NzA5Y2I0MjU5YTY5Y2Q3YmJjYzMwODZkNjNlN2Q5ZDdkNTYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5n
ZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI5LDEwICsyOSwxNiBAQAogI2luY2x1
ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NoYXJhY3RlclJhbmdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXRoVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KQEAgLTQ5LDYgKzU1LDkgQEAgdm9p
ZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmZpbmRUZXh0UmFuZ2VzRm9yU3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmIHMKICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3Vu
dCwgZmFsc2UpOwogICAgIFZlY3RvcjxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gZmluZE1hdGNoZXMg
PSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMpOwogCisgICAgaWYgKCFmaW5kTWF0Y2hlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1fY2FjaGVkRm91bmRSYW5nZXMuY2xlYXIoKTsKKwogICAgIFN0cmluZyBm
cmFtZU5hbWU7CiAgICAgdWludDY0X3Qgb3JkZXIgPSAwOwogICAgIFZlY3RvcjxXZWJGb3VuZFRl
eHRSYW5nZT4gZm91bmRUZXh0UmFuZ2VzOwpAQCAtNjksNiArNzgsNyBAQCB2b2lkIFdlYkZvdW5k
VGV4dFJhbmdlQ29udHJvbGxlcjo6ZmluZFRleHRSYW5nZXNGb3JTdHJpbmdNYXRjaGVzKGNvbnN0
IFN0cmluZyYgcwogICAgICAgICBhdXRvIHJhbmdlID0gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5k
YXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCBzaW1wbGVSYW5nZSwgV2ViQ29y
ZTo6ZmluZEl0ZXJhdG9yT3B0aW9ucygpKTsKICAgICAgICAgYXV0byBmb3VuZFRleHRSYW5nZSA9
IFdlYkZvdW5kVGV4dFJhbmdlIHsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgZnJhbWVO
YW1lLmxlbmd0aCgpID8gZnJhbWVOYW1lIDogZW1wdHlTdHJpbmcoKSwgb3JkZXIgfTsKIAorICAg
ICAgICBtX2NhY2hlZEZvdW5kUmFuZ2VzLnNldChmb3VuZFRleHRSYW5nZSwgc2ltcGxlUmFuZ2Up
OwogICAgICAgICBmb3VuZFRleHRSYW5nZXMuYXBwZW5kKGZvdW5kVGV4dFJhbmdlKTsKICAgICB9
CiAKQEAgLTc3LDM4ICs4NywxMDIgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6
OmZpbmRUZXh0UmFuZ2VzRm9yU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBX
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRlY29yYXRlVGV4dFJhbmdlV2l0aFN0eWxlKGNv
bnN0IFdlYkZvdW5kVGV4dFJhbmdlJiByYW5nZSwgRmluZERlY29yYXRpb25TdHlsZSBzdHlsZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0ocmFuZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzdHlsZSk7Cisg
ICAgYXV0byBzaW1wbGVSYW5nZSA9IHNpbXBsZVJhbmdlRnJvbUZvdW5kVGV4dFJhbmdlKHJhbmdl
KTsKKyAgICBpZiAoIXNpbXBsZVJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGN1
cnJlbnRTdHlsZUZvclJhbmdlID0gbV9kZWNvcmF0ZWRSYW5nZXMuZ2V0KHJhbmdlKTsKKyAgICBp
ZiAoc3R5bGUgPT0gY3VycmVudFN0eWxlRm9yUmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZGVjb3JhdGVkUmFuZ2VzLnNldChyYW5nZSwgc3R5bGUpOworCisgICAgaWYgKGN1cnJlbnRT
dHlsZUZvclJhbmdlID09IEZpbmREZWNvcmF0aW9uU3R5bGU6OkhpZ2hsaWdodGVkICYmIHJhbmdl
ID09IG1faGlnaGxpZ2h0ZWRSYW5nZSkgeworICAgICAgICBtX3RleHRJbmRpY2F0b3IgPSBudWxs
cHRyOworICAgICAgICBtX2hpZ2hsaWdodGVkUmFuZ2UgPSB7IH07CisgICAgfQorCisgICAgaWYg
KHN0eWxlID09IEZpbmREZWNvcmF0aW9uU3R5bGU6Ok5vcm1hbCkgeworICAgICAgICBzaW1wbGVS
YW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2ltcGxlUmFu
Z2UsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIH0gZWxzZSBpZiAo
c3R5bGUgPT0gRmluZERlY29yYXRpb25TdHlsZTo6Rm91bmQpIHsKKyAgICAgICAgc2ltcGxlUmFu
Z2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqc2ltcGxlUmFuZ2UsIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIH0gZWxzZSBpZiAoc3R5bGUg
PT0gRmluZERlY29yYXRpb25TdHlsZTo6SGlnaGxpZ2h0ZWQpIHsKKyAgICAgICAgbV9oaWdobGln
aHRlZFJhbmdlID0gcmFuZ2U7CisKKyAgICAgICAgY29uc3RleHByIGludCBpbmRpY2F0b3JNYXJn
aW4gPSAxOworCisgICAgICAgIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
PiBvcHRpb25zIHsgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbjo6SW5jbHVkZU1hcmdpbklm
UmFuZ2VNYXRjaGVzU2VsZWN0aW9uLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpEb05v
dENsaXBUb1Zpc2libGVSZWN0IH07CisgICAgICAgIGlmIChXZWJDb3JlOjpJbWFnZU92ZXJsYXk6
OmlzSW5zaWRlT3ZlcmxheSgqc2ltcGxlUmFuZ2UpKQorICAgICAgICAgICAgb3B0aW9ucy5hZGQo
eyBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQsIFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QmFja2dyb3VuZHMgfSk7CisKKyAgICAgICAgbV90
ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpz
aW1wbGVSYW5nZSwgb3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZShpbmRpY2F0b3JNYXJnaW4sIGluZGlj
YXRvck1hcmdpbikpOworICAgIH0KKworICAgIGlmIChtX2ZpbmRQYWdlT3ZlcmxheSkKKyAgICAg
ICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCiB2b2lkIFdlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6c2Nyb2xsVGV4dFJhbmdlVG9WaXNpYmxlKGNvbnN0IFdl
YkZvdW5kVGV4dFJhbmdlJiByYW5nZSkKIHsKLSAgICBVTlVTRURfUEFSQU0ocmFuZ2UpOworICAg
IGF1dG8gc2ltcGxlUmFuZ2UgPSBzaW1wbGVSYW5nZUZyb21Gb3VuZFRleHRSYW5nZShyYW5nZSk7
CisgICAgaWYgKCFzaW1wbGVSYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogZG9j
dW1lbnQgPSBkb2N1bWVudEZvckZvdW5kVGV4dFJhbmdlKHJhbmdlKTsKKyAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHZp
c2libGVTZWxlY3Rpb24oKnNpbXBsZVJhbmdlKTsKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6VGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zIHsgV2ViQ29y
ZTo6VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEZWxlZ2F0ZU1haW5GcmFtZVNjcm9sbCwgV2Vi
Q29yZTo6VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpSZXZlYWxTZWxlY3Rpb25Cb3VuZHMgfTsK
KworICAgIGlmIChkb2N1bWVudC0+aXNUb3BEb2N1bWVudCgpKQorICAgICAgICB0ZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb25zLmFkZChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlNt
b290aFNjcm9sbCk7CisKKyAgICBXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2Vs
ZWN0aW9uQ2hhbmdlKCpkb2N1bWVudCwgdmlzaWJsZVNlbGVjdGlvbiwgdGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9ucyk7CiB9CiAKIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpjbGVh
ckFsbERlY29yYXRlZEZvdW5kVGV4dCgpCiB7CisgICAgbV9jYWNoZWRGb3VuZFJhbmdlcy5jbGVh
cigpOworICAgIG1fZGVjb3JhdGVkUmFuZ2VzLmNsZWFyKCk7CisgICAgbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogCisgICAgbV9oaWdobGlnaHRlZFJhbmdl
ID0geyB9OworICAgIG1fdGV4dEluZGljYXRvciA9IG51bGxwdHI7CisKKyAgICBpZiAobV9maW5k
UGFnZU92ZXJsYXkpCisgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXko
KTsKIH0KIAogdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRpZEJlZ2luVGV4dFNl
YXJjaE9wZXJhdGlvbigpCiB7CisgICAgaWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgeworICAgICAg
ICBtX2ZpbmRQYWdlT3ZlcmxheSA9IFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMs
IFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOworICAgICAgICBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdl
T3ZlcmxheSgqbV9maW5kUGFnZU92ZXJsYXksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RmFkZSk7CisgICAgfQogCisgICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxh
eSgpOwogfQogCiB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZGlkRW5kVGV4dFNl
YXJjaE9wZXJhdGlvbigpCiB7CisgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQorICAgICAgICBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBh
Z2VPdmVybGF5KCptX2ZpbmRQYWdlT3ZlcmxheSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVN
b2RlOjpGYWRlKTsKIAorICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gbnVsbHB0cjsKIH0KIAogdm9p
ZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBh
Z2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSogcGFnZSkKIHsKLSAgICBVTlVTRURfUEFSQU0ocGFn
ZSk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2ZpbmRQ
YWdlT3ZlcmxheSk7CisgICAgbV9maW5kUGFnZU92ZXJsYXkgPSBudWxscHRyOwogfQogCiB2b2lk
IFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdl
T3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKQogewotCiB9CiAKIGJvb2wgV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyOjptb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2Vi
Q29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JikKQEAgLTExOCw4ICsxOTIsMTEzIEBAIGJvb2wgV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjptb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgY29uc3QgV2ViQ29yCiAKIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3
UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpcnR5UmVj
dCk7CisgICAgY29uc3RleHByIGludCBpbmRpY2F0b3JSYWRpdXMgPSAzOworICAgIGNvbnN0ZXhw
ciBpbnQgaW5kaWNhdG9yQm9yZGVyV2lkdGggPSAxOworCisgICAgY29uc3RleHByIGF1dG8gaGln
aGxpZ2h0Q29sb3IgPSBXZWJDb3JlOjpTUkdCQTx1aW50OF90PiB7IDI1NSwgMjI4LCA1NiB9Owor
ICAgIGNvbnN0ZXhwciBhdXRvIGZvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcjo6d2hpdGU7Cisg
ICAgY29uc3RleHByIGF1dG8gb3ZlcmxheUJhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6OlNSR0JB
PHVpbnQ4X3Q+IHsgMjYsIDI2LCAyNiwgNjQgfTsKKyAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dD
b2xvciA9IFdlYkNvcmU6OkNvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMTI4KTsKKwor
ICAgIGNvbnN0ZXhwciBmbG9hdCBzaGFkb3dPZmZzZXRYID0gMDsKKyAgICBjb25zdGV4cHIgZmxv
YXQgc2hhZG93T2Zmc2V0WSA9IDA7CisgICAgY29uc3RleHByIGZsb2F0IHNoYWRvd0JsdXJSYWRp
dXMgPSAxOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBib3JkZXJJbmZsYXRlZERpcnR5UmVjdCA9
IGRpcnR5UmVjdDsKKyAgICBib3JkZXJJbmZsYXRlZERpcnR5UmVjdC5pbmZsYXRlKGluZGljYXRv
ckJvcmRlcldpZHRoKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cyA9IHJl
Y3RzRm9yVGV4dE1hdGNoZXNJblJlY3QoYm9yZGVySW5mbGF0ZWREaXJ0eVJlY3QpOworCisgICAg
Z3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KGRpcnR5UmVjdCwgb3ZlcmxheUJhY2tncm91bmRDb2xv
cik7CisKKyAgICBhdXRvIGZvdW5kRnJhbWVQYXRocyA9IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6
OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhyZWN0cywgaW5kaWNhdG9yUmFkaXVzKTsKKwor
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGlj
c0NvbnRleHQpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9h
dFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNo
YWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xv
cik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3Jk
ZXJXaWR0aCAqIDIpOworICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisKKyAgICBncmFwaGljc0Nv
bnRleHQuY2xlYXJTaGFkb3coKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3I6OkNsZWFyKTsKKyAgICBmb3IgKGF1
dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0aHMpCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxs
UGF0aChwYXRoKTsKKworICAgIGlmIChtX3RleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlT3Zlcik7CisKKyAgICAgICAgYXV0byogaW5kaWNhdG9ySW1hZ2UgPSBtX3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpOworICAgICAgICBpZiAoIWluZGljYXRvckltYWdlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gdGV4dEJvdW5kaW5nUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5nUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBhdXRvIHRleHRSZWN0c0luQm91bmRpbmdSZWN0
Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMoKTsKKworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVj
dHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7CisgICAgICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJl
Y3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgICAgICAgICAgcmVjdC5tb3ZlQnko
dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAg
ICAgICAgIHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcy5hcHBlbmQocmVjdCk7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIHBhdGhzID0gV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0
aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcywg
aW5kaWNhdG9yUmFkaXVzKTsKKworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9y
KGhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogcGF0aHMp
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgocGF0aCk7CisKKyAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW5kaWNhdG9ySW1hZ2UsIHRleHRCb3VuZGluZ1Jl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOworICAgIH0KK30KKworVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4gV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpyZWN0c0ZvclRleHRNYXRjaGVz
SW5SZWN0KFdlYkNvcmU6OkludFJlY3QgY2xpcFJlY3QpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4gcmVjdHM7CisKKyAgICBhdXRvKiBtYWluRnJhbWVWaWV3ID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CisKKyAgICBmb3IgKGF1dG8qIGZyYW1l
ID0gJm1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgYXV0byogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGZvciAoYXV0byByZWN0IDogZG9jdW1lbnQtPm1hcmtlcnMoKS5y
ZW5kZXJlZFJlY3RzRm9yTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNo
KSkgeworICAgICAgICAgICAgaWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAg
ICAgICByZWN0ID0gbWFpbkZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhmcmFtZS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpKTsKKworICAgICAgICAg
ICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFyZWN0LmludGVyc2VjdHMoY2xpcFJlY3QpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVjdHM7Cit9CisKK1dlYkNvcmU6OkRv
Y3VtZW50KiBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRvY3VtZW50Rm9yRm91bmRUZXh0
UmFuZ2UoY29uc3QgV2ViRm91bmRUZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAoreworICAgIGlmIChy
YW5nZS5mcmFtZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpOworCisgICAgZm9yIChhdXRvKiBm
cmFtZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dG9w
RG9jdW1lbnQoKS5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dCgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSByYW5n
ZS5mcmFtZUlkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50KCk7
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6U2ltcGxlUmFuZ2U+IFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6c2ltcGxlUmFuZ2VG
cm9tRm91bmRUZXh0UmFuZ2UoY29uc3QgV2ViRm91bmRUZXh0UmFuZ2UmIHJhbmdlKQoreworICAg
IHJldHVybiBtX2NhY2hlZEZvdW5kUmFuZ2VzLmVuc3VyZShyYW5nZSwgWyZdICgpIC0+IHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+IHsKKyAgICAgICAgYXV0byogZG9jdW1lbnQg
PSBkb2N1bWVudEZvckZvdW5kVGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFkb2N1bWVu
dCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKSksIHsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCB9
LCBXZWJDb3JlOjpmaW5kSXRlcmF0b3JPcHRpb25zKCkpOworICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5o
CmluZGV4IGZmODBiNzk1N2FlMWRiNDExYWIwZGVjMmRjYmI3ZmYzNWQyZTQ4ZWMuLjZiOTEzYTFm
YTJjNTIyNjQ1OWUzYTk5MjljYzQwNWExMjViZmUwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJv
bGxlci5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GaW5kT3B0aW9ucy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92
ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNjcsNyAr
NjksMjAgQEAgcHJpdmF0ZToKICAgICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKIAorICAg
IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXNJblJlY3QoV2Vi
Q29yZTo6SW50UmVjdCBjbGlwUmVjdCk7CisKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1l
bnRGb3JGb3VuZFRleHRSYW5nZShjb25zdCBXZWJGb3VuZFRleHRSYW5nZSYpIGNvbnN0OworICAg
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+IHNpbXBsZVJhbmdlRnJvbUZvdW5k
VGV4dFJhbmdlKGNvbnN0IFdlYkZvdW5kVGV4dFJhbmdlJik7CisKICAgICBXZWFrUHRyPFdlYlBh
Z2U+IG1fd2ViUGFnZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fZmluZFBh
Z2VPdmVybGF5OworCisgICAgV2ViRm91bmRUZXh0UmFuZ2UgbV9oaWdobGlnaHRlZFJhbmdlOwor
CisgICAgSGFzaE1hcDxXZWJGb3VuZFRleHRSYW5nZSwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4+IG1fY2FjaGVkRm91bmRSYW5nZXM7CisgICAgSGFzaE1hcDxXZWJGb3VuZFRl
eHRSYW5nZSwgRmluZERlY29yYXRpb25TdHlsZT4gbV9kZWNvcmF0ZWRSYW5nZXM7CisKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gbV90ZXh0SW5kaWNhdG9yOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450209</attachid>
            <date>2022-01-27 23:42:06 -0800</date>
            <delta_ts>2022-01-28 10:28:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235692-20220127234204.patch</filename>
            <type>text/plain</type>
            <size>14839</size>
            <attacher name="Aditya Keerthi">akeerthi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE0MGYwNDU0NDZhMjMyY2U5
MzlkNzYxMjk2OTRlYWNiMTUwODk5NzUuLjllY2Y0MTljZmZhNGMxNjJjZDJkNDdjNjM1YmE4Yzk0
ZTgyMWIxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjItMDEtMjcgIEFkaXR5YSBL
ZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBk
ZWNvcmF0aW5nIGFuZCBzY3JvbGxpbmcgdG8gcmFuZ2VzIGluIFdlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM1NjkyCisgICAgICAgIHJkYXI6Ly84ODExNzIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdl
Q29udHJvbGxlcjo6ZmluZFRleHRSYW5nZXNGb3JTdHJpbmdNYXRjaGVzKToKKworICAgICAgICBD
YWNoZSB0aGUgZm91bmQgcmFuZ2VzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIFNpbXBsZVJhbmdl
LCB0byBhdm9pZAorICAgICAgICB1bm5lY2Vzc2FyeSB0cmVlIHRyYXZlcnNhbCBlYWNoIHRpbWUg
d2Ugd2FudCB0byBkZWNvcmF0ZSBvciBzY3JvbGwgdG8KKyAgICAgICAgYSBmb3VuZCByZXN1bHQu
CisKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkZWNvcmF0
ZVRleHRSYW5nZVdpdGhTdHlsZSk6CisKKyAgICAgICAgRm91bmQgcmFuZ2VzIGNhbiBjdXJyZW50
bHkgYmUgZGVjb3JhdGVkIHdpdGggMyBzdHlsZXM6ICJOb3JtYWwiLAorICAgICAgICAiRm91bmQi
LCBhbmQgIkhpZ2hsaWdodGVkIi4gVGhlICJGb3VuZCIgc3R5bGUgaXMgZHJhd24gdXNpbmcKKyAg
ICAgICAgZG9jdW1lbnQgbWFya2Vycy4gVGhlICJIaWdobGlnaHRlZCIgc3R5bGUgaXMgZHJhd24g
dXNpbmcgYQorICAgICAgICBUZXh0SW5kaWNhdG9yLgorCisgICAgICAgIChXZWJLaXQ6OldlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6c2Nyb2xsVGV4dFJhbmdlVG9WaXNpYmxlKToKKworICAg
ICAgICBVc2UgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHRvIG1ha2UgdGhlIHJhbmdlIHZpc2li
bGUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpjbGVh
ckFsbERlY29yYXRlZEZvdW5kVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJh
bmdlQ29udHJvbGxlcjo6ZGlkQmVnaW5UZXh0U2VhcmNoT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkaWRFbmRUZXh0U2VhcmNoT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjp3aWxs
TW92ZVRvUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
cjo6ZGlkTW92ZVRvUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXI6OnJlY3RzRm9yVGV4dE1hdGNoZXNJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRvY3VtZW50Rm9yRm91bmRUZXh0UmFuZ2UgY29u
c3QpOgorCisgICAgICAgIFVzZSB0aGUgZnJhbWUgaWRlbnRpZmVyIG9mIHRoZSBXZWJGb3VuZFRl
eHRSYW5nZSB0byByZXRyaWV2ZSB0aGUKKyAgICAgICAgY29ycmVzcG9uZGluZyBEb2N1bWVudCwg
c28gdGhhdCB0aGUgcmFuZ2UgY2FuIGJlIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgbWFwcGVkIGZv
ciBkZWNvcmF0aW9uL3Njcm9sbGluZy4KKworICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXI6OnNpbXBsZVJhbmdlRnJvbUZvdW5kVGV4dFJhbmdlKToKKworICAgICAg
ICBBIGhlbHBlciBtZXRob2QgdG8gY2FjaGUgV2ViRm91bmRUZXh0UmFuZ2VzIGFuZCBTaW1wbGVS
YW5nZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VD
b250cm9sbGVyLmg6CisKIDIwMjItMDEtMjcgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBw
bGUuY29tPgogCiAgICAgICAgIE1pZ3JhdGUgX1VJVGV4dFNlYXJjaGluZyBpbXBsZW1lbnRhdGlv
biB0byBiZSBiYWNrZWQgYnkgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBjMjg3OGQ1NTZlMzg5M2E4ODczOWRhOTliODVlY2Jk
ZTVlN2E2YTgzLi5lZTZmNGVhMjcxYjE5YmFjOTkyZGNjODU3OGIzN2ViOWM1NjdiMjdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5n
ZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI5LDEwICsyOSwxNiBAQAogI2luY2x1
ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NoYXJhY3RlclJhbmdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXRoVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KQEAgLTQ5LDYgKzU1LDkgQEAgdm9p
ZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmZpbmRUZXh0UmFuZ2VzRm9yU3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmIHMKICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3Vu
dCwgZmFsc2UpOwogICAgIFZlY3RvcjxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gZmluZE1hdGNoZXMg
PSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMpOwogCisgICAgaWYgKCFmaW5kTWF0Y2hlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1fY2FjaGVkRm91bmRSYW5nZXMuY2xlYXIoKTsKKwogICAgIFN0cmluZyBm
cmFtZU5hbWU7CiAgICAgdWludDY0X3Qgb3JkZXIgPSAwOwogICAgIFZlY3RvcjxXZWJGb3VuZFRl
eHRSYW5nZT4gZm91bmRUZXh0UmFuZ2VzOwpAQCAtNjksNiArNzgsNyBAQCB2b2lkIFdlYkZvdW5k
VGV4dFJhbmdlQ29udHJvbGxlcjo6ZmluZFRleHRSYW5nZXNGb3JTdHJpbmdNYXRjaGVzKGNvbnN0
IFN0cmluZyYgcwogICAgICAgICBhdXRvIHJhbmdlID0gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5k
YXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCBzaW1wbGVSYW5nZSwgV2ViQ29y
ZTo6ZmluZEl0ZXJhdG9yT3B0aW9ucygpKTsKICAgICAgICAgYXV0byBmb3VuZFRleHRSYW5nZSA9
IFdlYkZvdW5kVGV4dFJhbmdlIHsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgZnJhbWVO
YW1lLmxlbmd0aCgpID8gZnJhbWVOYW1lIDogZW1wdHlTdHJpbmcoKSwgb3JkZXIgfTsKIAorICAg
ICAgICBtX2NhY2hlZEZvdW5kUmFuZ2VzLnNldChmb3VuZFRleHRSYW5nZSwgc2ltcGxlUmFuZ2Up
OwogICAgICAgICBmb3VuZFRleHRSYW5nZXMuYXBwZW5kKGZvdW5kVGV4dFJhbmdlKTsKICAgICB9
CiAKQEAgLTc3LDM4ICs4NywxMDIgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6
OmZpbmRUZXh0UmFuZ2VzRm9yU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBX
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRlY29yYXRlVGV4dFJhbmdlV2l0aFN0eWxlKGNv
bnN0IFdlYkZvdW5kVGV4dFJhbmdlJiByYW5nZSwgRmluZERlY29yYXRpb25TdHlsZSBzdHlsZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0ocmFuZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzdHlsZSk7Cisg
ICAgYXV0byBzaW1wbGVSYW5nZSA9IHNpbXBsZVJhbmdlRnJvbUZvdW5kVGV4dFJhbmdlKHJhbmdl
KTsKKyAgICBpZiAoIXNpbXBsZVJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGN1
cnJlbnRTdHlsZUZvclJhbmdlID0gbV9kZWNvcmF0ZWRSYW5nZXMuZ2V0KHJhbmdlKTsKKyAgICBp
ZiAoc3R5bGUgPT0gY3VycmVudFN0eWxlRm9yUmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZGVjb3JhdGVkUmFuZ2VzLnNldChyYW5nZSwgc3R5bGUpOworCisgICAgaWYgKGN1cnJlbnRT
dHlsZUZvclJhbmdlID09IEZpbmREZWNvcmF0aW9uU3R5bGU6OkhpZ2hsaWdodGVkICYmIHJhbmdl
ID09IG1faGlnaGxpZ2h0ZWRSYW5nZSkgeworICAgICAgICBtX3RleHRJbmRpY2F0b3IgPSBudWxs
cHRyOworICAgICAgICBtX2hpZ2hsaWdodGVkUmFuZ2UgPSB7IH07CisgICAgfQorCisgICAgaWYg
KHN0eWxlID09IEZpbmREZWNvcmF0aW9uU3R5bGU6Ok5vcm1hbCkgeworICAgICAgICBzaW1wbGVS
YW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2ltcGxlUmFu
Z2UsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIH0gZWxzZSBpZiAo
c3R5bGUgPT0gRmluZERlY29yYXRpb25TdHlsZTo6Rm91bmQpIHsKKyAgICAgICAgc2ltcGxlUmFu
Z2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqc2ltcGxlUmFuZ2UsIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIH0gZWxzZSBpZiAoc3R5bGUg
PT0gRmluZERlY29yYXRpb25TdHlsZTo6SGlnaGxpZ2h0ZWQpIHsKKyAgICAgICAgbV9oaWdobGln
aHRlZFJhbmdlID0gcmFuZ2U7CisKKyAgICAgICAgY29uc3RleHByIGludCBpbmRpY2F0b3JNYXJn
aW4gPSAxOworCisgICAgICAgIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
PiBvcHRpb25zIHsgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbjo6SW5jbHVkZU1hcmdpbklm
UmFuZ2VNYXRjaGVzU2VsZWN0aW9uLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpEb05v
dENsaXBUb1Zpc2libGVSZWN0IH07CisgICAgICAgIGlmIChXZWJDb3JlOjpJbWFnZU92ZXJsYXk6
OmlzSW5zaWRlT3ZlcmxheSgqc2ltcGxlUmFuZ2UpKQorICAgICAgICAgICAgb3B0aW9ucy5hZGQo
eyBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQsIFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QmFja2dyb3VuZHMgfSk7CisKKyAgICAgICAgbV90
ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpz
aW1wbGVSYW5nZSwgb3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZShpbmRpY2F0b3JNYXJnaW4sIGluZGlj
YXRvck1hcmdpbikpOworICAgIH0KKworICAgIGlmIChtX2ZpbmRQYWdlT3ZlcmxheSkKKyAgICAg
ICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCiB2b2lkIFdlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6c2Nyb2xsVGV4dFJhbmdlVG9WaXNpYmxlKGNvbnN0IFdl
YkZvdW5kVGV4dFJhbmdlJiByYW5nZSkKIHsKLSAgICBVTlVTRURfUEFSQU0ocmFuZ2UpOworICAg
IGF1dG8gc2ltcGxlUmFuZ2UgPSBzaW1wbGVSYW5nZUZyb21Gb3VuZFRleHRSYW5nZShyYW5nZSk7
CisgICAgaWYgKCFzaW1wbGVSYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogZG9j
dW1lbnQgPSBkb2N1bWVudEZvckZvdW5kVGV4dFJhbmdlKHJhbmdlKTsKKyAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHZp
c2libGVTZWxlY3Rpb24oKnNpbXBsZVJhbmdlKTsKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6VGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zIHsgV2ViQ29y
ZTo6VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEZWxlZ2F0ZU1haW5GcmFtZVNjcm9sbCwgV2Vi
Q29yZTo6VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpSZXZlYWxTZWxlY3Rpb25Cb3VuZHMgfTsK
KworICAgIGlmIChkb2N1bWVudC0+aXNUb3BEb2N1bWVudCgpKQorICAgICAgICB0ZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb25zLmFkZChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlNt
b290aFNjcm9sbCk7CisKKyAgICBXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2Vs
ZWN0aW9uQ2hhbmdlKCpkb2N1bWVudCwgdmlzaWJsZVNlbGVjdGlvbiwgdGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9ucyk7CiB9CiAKIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpjbGVh
ckFsbERlY29yYXRlZEZvdW5kVGV4dCgpCiB7CisgICAgbV9jYWNoZWRGb3VuZFJhbmdlcy5jbGVh
cigpOworICAgIG1fZGVjb3JhdGVkUmFuZ2VzLmNsZWFyKCk7CisgICAgbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogCisgICAgbV9oaWdobGlnaHRlZFJhbmdl
ID0geyB9OworICAgIG1fdGV4dEluZGljYXRvciA9IG51bGxwdHI7CisKKyAgICBpZiAobV9maW5k
UGFnZU92ZXJsYXkpCisgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXko
KTsKIH0KIAogdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRpZEJlZ2luVGV4dFNl
YXJjaE9wZXJhdGlvbigpCiB7CisgICAgaWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgeworICAgICAg
ICBtX2ZpbmRQYWdlT3ZlcmxheSA9IFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMs
IFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOworICAgICAgICBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdl
T3ZlcmxheSgqbV9maW5kUGFnZU92ZXJsYXksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RmFkZSk7CisgICAgfQogCisgICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxh
eSgpOwogfQogCiB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZGlkRW5kVGV4dFNl
YXJjaE9wZXJhdGlvbigpCiB7CisgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQorICAgICAgICBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBh
Z2VPdmVybGF5KCptX2ZpbmRQYWdlT3ZlcmxheSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVN
b2RlOjpGYWRlKTsKIAorICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gbnVsbHB0cjsKIH0KIAogdm9p
ZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBh
Z2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSogcGFnZSkKIHsKLSAgICBVTlVTRURfUEFSQU0ocGFn
ZSk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2ZpbmRQ
YWdlT3ZlcmxheSk7CisgICAgbV9maW5kUGFnZU92ZXJsYXkgPSBudWxscHRyOwogfQogCiB2b2lk
IFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdl
T3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKQogewotCiB9CiAKIGJvb2wgV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyOjptb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2Vi
Q29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JikKQEAgLTExOCw4ICsxOTIsMTEzIEBAIGJvb2wgV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjptb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgY29uc3QgV2ViQ29yCiAKIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3
UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRpcnR5UmVj
dCk7CisgICAgY29uc3RleHByIGludCBpbmRpY2F0b3JSYWRpdXMgPSAzOworICAgIGNvbnN0ZXhw
ciBpbnQgaW5kaWNhdG9yQm9yZGVyV2lkdGggPSAxOworCisgICAgY29uc3RleHByIGF1dG8gaGln
aGxpZ2h0Q29sb3IgPSBXZWJDb3JlOjpTUkdCQTx1aW50OF90PiB7IDI1NSwgMjI4LCA1NiB9Owor
ICAgIGNvbnN0ZXhwciBhdXRvIGZvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcjo6d2hpdGU7Cisg
ICAgY29uc3RleHByIGF1dG8gb3ZlcmxheUJhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6OlNSR0JB
PHVpbnQ4X3Q+IHsgMjYsIDI2LCAyNiwgNjQgfTsKKyAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dD
b2xvciA9IFdlYkNvcmU6OkNvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMTI4KTsKKwor
ICAgIGNvbnN0ZXhwciBmbG9hdCBzaGFkb3dPZmZzZXRYID0gMDsKKyAgICBjb25zdGV4cHIgZmxv
YXQgc2hhZG93T2Zmc2V0WSA9IDA7CisgICAgY29uc3RleHByIGZsb2F0IHNoYWRvd0JsdXJSYWRp
dXMgPSAxOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBib3JkZXJJbmZsYXRlZERpcnR5UmVjdCA9
IGRpcnR5UmVjdDsKKyAgICBib3JkZXJJbmZsYXRlZERpcnR5UmVjdC5pbmZsYXRlKGluZGljYXRv
ckJvcmRlcldpZHRoKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cyA9IHJl
Y3RzRm9yVGV4dE1hdGNoZXNJblJlY3QoYm9yZGVySW5mbGF0ZWREaXJ0eVJlY3QpOworCisgICAg
Z3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KGRpcnR5UmVjdCwgb3ZlcmxheUJhY2tncm91bmRDb2xv
cik7CisKKyAgICBhdXRvIGZvdW5kRnJhbWVQYXRocyA9IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6
OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhyZWN0cywgaW5kaWNhdG9yUmFkaXVzKTsKKwor
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGlj
c0NvbnRleHQpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9h
dFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNo
YWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xv
cik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3Jk
ZXJXaWR0aCAqIDIpOworICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisKKyAgICBncmFwaGljc0Nv
bnRleHQuY2xlYXJTaGFkb3coKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3I6OkNsZWFyKTsKKyAgICBmb3IgKGF1
dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0aHMpCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxs
UGF0aChwYXRoKTsKKworICAgIGlmIChtX3RleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlT3Zlcik7CisKKyAgICAgICAgYXV0byogaW5kaWNhdG9ySW1hZ2UgPSBtX3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpOworICAgICAgICBpZiAoIWluZGljYXRvckltYWdlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gdGV4dEJvdW5kaW5nUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5nUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcygpOworICAgICAgICBhdXRvIHRleHRSZWN0c0luQm91bmRpbmdSZWN0
Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMoKTsKKworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVj
dHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7CisgICAgICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJl
Y3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgICAgICAgICAgcmVjdC5tb3ZlQnko
dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAg
ICAgICAgIHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcy5hcHBlbmQocmVjdCk7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIHBhdGhzID0gV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0
aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcywg
aW5kaWNhdG9yUmFkaXVzKTsKKworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9y
KGhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogcGF0aHMp
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgocGF0aCk7CisKKyAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW5kaWNhdG9ySW1hZ2UsIHRleHRCb3VuZGluZ1Jl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOworICAgIH0KK30KKworVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4gV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpyZWN0c0ZvclRleHRNYXRjaGVz
SW5SZWN0KFdlYkNvcmU6OkludFJlY3QgY2xpcFJlY3QpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4gcmVjdHM7CisKKyAgICBhdXRvKiBtYWluRnJhbWVWaWV3ID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CisKKyAgICBmb3IgKGF1dG8qIGZyYW1l
ID0gJm1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgYXV0byogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGZvciAoYXV0byByZWN0IDogZG9jdW1lbnQtPm1hcmtlcnMoKS5y
ZW5kZXJlZFJlY3RzRm9yTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNo
KSkgeworICAgICAgICAgICAgaWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAg
ICAgICByZWN0ID0gbWFpbkZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhmcmFtZS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpKTsKKworICAgICAgICAg
ICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFyZWN0LmludGVyc2VjdHMoY2xpcFJlY3QpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVjdHM7Cit9CisKK1dlYkNvcmU6OkRv
Y3VtZW50KiBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRvY3VtZW50Rm9yRm91bmRUZXh0
UmFuZ2UoY29uc3QgV2ViRm91bmRUZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAoreworICAgIGlmIChy
YW5nZS5mcmFtZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpOworCisgICAgZm9yIChhdXRvKiBm
cmFtZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dG9w
RG9jdW1lbnQoKS5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dCgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSByYW5n
ZS5mcmFtZUlkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50KCk7
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6U2ltcGxlUmFuZ2U+IFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6c2ltcGxlUmFuZ2VG
cm9tRm91bmRUZXh0UmFuZ2UoY29uc3QgV2ViRm91bmRUZXh0UmFuZ2UmIHJhbmdlKQoreworICAg
IHJldHVybiBtX2NhY2hlZEZvdW5kUmFuZ2VzLmVuc3VyZShyYW5nZSwgWyZdICgpIC0+IHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+IHsKKyAgICAgICAgYXV0byogZG9jdW1lbnQg
PSBkb2N1bWVudEZvckZvdW5kVGV4dFJhbmdlKHJhbmdlKTsKKyAgICAgICAgaWYgKCFkb2N1bWVu
dCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKSksIHsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCB9
LCBXZWJDb3JlOjpmaW5kSXRlcmF0b3JPcHRpb25zKCkpOworICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5o
CmluZGV4IDA3MWQ5ZWM0YzYzZmZiNmE1ZGZhMGJmMjYwNWI0ZjE3ZmIwZmE5YTYuLjU5NTljNGY1
NzY5YTcwZDBlNWEyNjljMjJmZWQ3YjZjM2NlYzkzYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJv
bGxlci5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GaW5kT3B0aW9ucy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92
ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNjcsNyAr
NjksMjAgQEAgcHJpdmF0ZToKICAgICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKIAorICAg
IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXNJblJlY3QoV2Vi
Q29yZTo6SW50UmVjdCBjbGlwUmVjdCk7CisKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1l
bnRGb3JGb3VuZFRleHRSYW5nZShjb25zdCBXZWJGb3VuZFRleHRSYW5nZSYpIGNvbnN0OworICAg
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+IHNpbXBsZVJhbmdlRnJvbUZvdW5k
VGV4dFJhbmdlKGNvbnN0IFdlYkZvdW5kVGV4dFJhbmdlJik7CisKICAgICBXZWFrUHRyPFdlYlBh
Z2U+IG1fd2ViUGFnZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fZmluZFBh
Z2VPdmVybGF5OworCisgICAgV2ViRm91bmRUZXh0UmFuZ2UgbV9oaWdobGlnaHRlZFJhbmdlOwor
CisgICAgSGFzaE1hcDxXZWJGb3VuZFRleHRSYW5nZSwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpT
aW1wbGVSYW5nZT4+IG1fY2FjaGVkRm91bmRSYW5nZXM7CisgICAgSGFzaE1hcDxXZWJGb3VuZFRl
eHRSYW5nZSwgRmluZERlY29yYXRpb25TdHlsZT4gbV9kZWNvcmF0ZWRSYW5nZXM7CisKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4gbV90ZXh0SW5kaWNhdG9yOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450251</attachid>
            <date>2022-01-28 10:28:38 -0800</date>
            <delta_ts>2022-01-28 11:44:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235692-20220128102835.patch</filename>
            <type>text/plain</type>
            <size>16639</size>
            <attacher name="Aditya Keerthi">akeerthi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE0MGYwNDU0NDZhMjMyY2U5
MzlkNzYxMjk2OTRlYWNiMTUwODk5NzUuLjc4N2ZlZTdhMjI5ZTZhYjA1MTdlMTgzYWE4YzA4M2Jh
ZmU0MjA5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMjItMDEtMjcgIEFkaXR5YSBL
ZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBk
ZWNvcmF0aW5nIGFuZCBzY3JvbGxpbmcgdG8gcmFuZ2VzIGluIFdlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM1NjkyCisgICAgICAgIHJkYXI6Ly84ODExNzIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYkZvdW5kVGV4dFJhbmdlLmg6Cisg
ICAgICAgIChXVEY6Okhhc2hUcmFpdHM8V2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZT46OmRlbGV0
ZWRWYWx1ZSk6CisKKyAgICAgICAgVGhlIGVtcHR5IGFuZCBkZWxldGVkIHZhbHVlcyBzaG91bGQg
bm90IGJlIHRoZSBzYW1lLgorCisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8V2ViS2l0OjpXZWJG
b3VuZFRleHRSYW5nZT46OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhh
c2hUcmFpdHM8V2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZT46OmlzRGVsZXRlZFZhbHVlKToKKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmZpbmRU
ZXh0UmFuZ2VzRm9yU3RyaW5nTWF0Y2hlcyk6CisKKyAgICAgICAgQ2FjaGUgdGhlIGZvdW5kIHJh
bmdlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBTaW1wbGVSYW5nZSwgdG8gYXZvaWQKKyAgICAg
ICAgdW5uZWNlc3NhcnkgdHJlZSB0cmF2ZXJzYWwgZWFjaCB0aW1lIHdlIHdhbnQgdG8gZGVjb3Jh
dGUgb3Igc2Nyb2xsIHRvCisgICAgICAgIGEgZm91bmQgcmVzdWx0LgorCisgICAgICAgIChXZWJL
aXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZGVjb3JhdGVUZXh0UmFuZ2VXaXRoU3R5
bGUpOgorCisgICAgICAgIEZvdW5kIHJhbmdlcyBjYW4gY3VycmVudGx5IGJlIGRlY29yYXRlZCB3
aXRoIDMgc3R5bGVzOiAiTm9ybWFsIiwKKyAgICAgICAgIkZvdW5kIiwgYW5kICJIaWdobGlnaHRl
ZCIuIFRoZSAiRm91bmQiIHN0eWxlIGlzIGRyYXduIHVzaW5nCisgICAgICAgIGRvY3VtZW50IG1h
cmtlcnMuIFRoZSAiSGlnaGxpZ2h0ZWQiIHN0eWxlIGlzIGRyYXduIHVzaW5nIGEKKyAgICAgICAg
VGV4dEluZGljYXRvci4KKworICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXI6OnNjcm9sbFRleHRSYW5nZVRvVmlzaWJsZSk6CisKKyAgICAgICAgVXNlIFRlbXBvcmFy
eVNlbGVjdGlvbkNoYW5nZSB0byBtYWtlIHRoZSByYW5nZSB2aXNpYmxlLgorCisgICAgICAgIChX
ZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6Y2xlYXJBbGxEZWNvcmF0ZWRGb3Vu
ZFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRp
ZEJlZ2luVGV4dFNlYXJjaE9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlcjo6ZGlkRW5kVGV4dFNlYXJjaE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6d2lsbE1vdmVUb1BhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpyZWN0c0Zv
clRleHRNYXRjaGVzSW5SZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VD
b250cm9sbGVyOjpkb2N1bWVudEZvckZvdW5kVGV4dFJhbmdlIGNvbnN0KToKKworICAgICAgICBV
c2UgdGhlIGZyYW1lIGlkZW50aWZlciBvZiB0aGUgV2ViRm91bmRUZXh0UmFuZ2UgdG8gcmV0cmll
dmUgdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgRG9jdW1lbnQsIHNvIHRoYXQgdGhlIHJhbmdl
IGNhbiBiZSBhcHByb3ByaWF0ZWx5CisgICAgICAgIG1hcHBlZCBmb3IgZGVjb3JhdGlvbi9zY3Jv
bGxpbmcuCisKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpz
aW1wbGVSYW5nZUZyb21Gb3VuZFRleHRSYW5nZSk6CisKKyAgICAgICAgQSBoZWxwZXIgbWV0aG9k
IHRvIGNhY2hlIFdlYkZvdW5kVGV4dFJhbmdlcyBhbmQgU2ltcGxlUmFuZ2VzLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5oOgorCiAy
MDIyLTAxLTI3ICBBZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBNaWdyYXRlIF9VSVRleHRTZWFyY2hpbmcgaW1wbGVtZW50YXRpb24gdG8gYmUgYmFja2VkIGJ5
IFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViRm91bmRUZXh0UmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkZvdW5k
VGV4dFJhbmdlLmgKaW5kZXggMDU5YjE4ODUzNjdkODM5OWY2OTM2MTJjMDkxYWY4YjBmZDAxNmUw
YS4uYzUzM2JmZDA2MjMxMTBlYjdlNWVlM2VmZDBjM2RiMTY1OWUxZTQ5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViRm91bmRUZXh0UmFuZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJGb3VuZFRleHRSYW5nZS5oCkBAIC01NSw5ICs1NSwxMCBAQCBzdHJ1Y3Qg
V2ViRm91bmRUZXh0UmFuZ2VIYXNoIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxX
ZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYktpdDo6V2Vi
Rm91bmRUZXh0UmFuZ2U+IHsKICAgICBzdGF0aWMgV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZSBl
bXB0eVZhbHVlKCkgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIFdlYktpdDo6V2ViRm91bmRU
ZXh0UmFuZ2UgZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4geyBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCksIDAsIHsgfSwgMCB9OyB9CiAKLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1
Y3REZWxldGVkVmFsdWUoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZSYgcmFuZ2UpIHsgcmFuZ2Ug
PSB7IH07IH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBXZWJLaXQ6Oldl
YkZvdW5kVGV4dFJhbmdlJiByYW5nZSkgeyByZXR1cm4gcmFuZ2UgPT0gV2ViS2l0OjpXZWJGb3Vu
ZFRleHRSYW5nZSB7IH07IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
V2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZSYgcmFuZ2UpIHsgcmFuZ2UgPSBkZWxldGVkVmFsdWUo
KTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYktpdDo6V2ViRm91
bmRUZXh0UmFuZ2UmIHJhbmdlKSB7IHJldHVybiByYW5nZSA9PSBkZWxldGVkVmFsdWUoKTsgfQog
fTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViS2l0OjpXZWJGb3VuZFRleHRS
YW5nZT4gOiBXZWJGb3VuZFRleHRSYW5nZUhhc2ggeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJv
bGxlci5jcHAKaW5kZXggYzI4NzhkNTU2ZTM4OTNhODg3MzlkYTk5Yjg1ZWNiZGU1ZTdhNmE4My4u
N2M1MjdlYTg4YjIxOGM1NDNiNmZjNWUzNGRiYTc5NjEyNTg1NDZiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yOSwxMCArMjksMTYgQEAKICNpbmNsdWRlICJXZWJQYWdl
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DaGFyYWN0ZXJSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
ZW9tZXRyeVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGF0aFV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1N
b3VzZUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CkBAIC00OSw2ICs1NSw5IEBAIHZvaWQgV2ViRm91bmRU
ZXh0UmFuZ2VDb250cm9sbGVyOjpmaW5kVGV4dFJhbmdlc0ZvclN0cmluZ01hdGNoZXMoY29uc3Qg
U3RyaW5nJiBzCiAgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRU
ZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291bnQsIGZhbHNlKTsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+IGZpbmRNYXRjaGVzID0gV1RGTW92ZShy
ZXN1bHQucmFuZ2VzKTsKIAorICAgIGlmICghZmluZE1hdGNoZXMuaXNFbXB0eSgpKQorICAgICAg
ICBtX2NhY2hlZEZvdW5kUmFuZ2VzLmNsZWFyKCk7CisKICAgICBTdHJpbmcgZnJhbWVOYW1lOwog
ICAgIHVpbnQ2NF90IG9yZGVyID0gMDsKICAgICBWZWN0b3I8V2ViRm91bmRUZXh0UmFuZ2U+IGZv
dW5kVGV4dFJhbmdlczsKQEAgLTU3LDcgKzY2LDcgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXI6OmZpbmRUZXh0UmFuZ2VzRm9yU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHMK
IAogICAgICAgICBhdXRvKiBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CiAg
ICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIFN0cmluZyBjdXJyZW50RnJhbWVOYW1lID0gZG9jdW1lbnQuZnJh
bWUoKS0+dHJlZSgpLnVuaXF1ZU5hbWUoKTsKICAgICAgICAgaWYgKGZyYW1lTmFtZSAhPSBjdXJy
ZW50RnJhbWVOYW1lKSB7CkBAIC02OSw2ICs3OCw3IEBAIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VD
b250cm9sbGVyOjpmaW5kVGV4dFJhbmdlc0ZvclN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBz
CiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJl
Zm9yZU5vZGVDb250ZW50cygqZWxlbWVudCksIHNpbXBsZVJhbmdlLCBXZWJDb3JlOjpmaW5kSXRl
cmF0b3JPcHRpb25zKCkpOwogICAgICAgICBhdXRvIGZvdW5kVGV4dFJhbmdlID0gV2ViRm91bmRU
ZXh0UmFuZ2UgeyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCBmcmFtZU5hbWUubGVuZ3Ro
KCkgPyBmcmFtZU5hbWUgOiBlbXB0eVN0cmluZygpLCBvcmRlciB9OwogCisgICAgICAgIG1fY2Fj
aGVkRm91bmRSYW5nZXMuYWRkKGZvdW5kVGV4dFJhbmdlLCBzaW1wbGVSYW5nZSk7CiAgICAgICAg
IGZvdW5kVGV4dFJhbmdlcy5hcHBlbmQoZm91bmRUZXh0UmFuZ2UpOwogICAgIH0KIApAQCAtNzcs
MzggKzg3LDEwMiBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZmluZFRleHRS
YW5nZXNGb3JTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgcwogCiB2b2lkIFdlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlcjo6ZGVjb3JhdGVUZXh0UmFuZ2VXaXRoU3R5bGUoY29uc3QgV2ViRm91
bmRUZXh0UmFuZ2UmIHJhbmdlLCBGaW5kRGVjb3JhdGlvblN0eWxlIHN0eWxlKQogewotICAgIFVO
VVNFRF9QQVJBTShyYW5nZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0eWxlKTsKKyAgICBhdXRvIHNp
bXBsZVJhbmdlID0gc2ltcGxlUmFuZ2VGcm9tRm91bmRUZXh0UmFuZ2UocmFuZ2UpOworICAgIGlm
ICghc2ltcGxlUmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY3VycmVudFN0eWxl
Rm9yUmFuZ2UgPSBtX2RlY29yYXRlZFJhbmdlcy5nZXQocmFuZ2UpOworICAgIGlmIChzdHlsZSA9
PSBjdXJyZW50U3R5bGVGb3JSYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kZWNvcmF0
ZWRSYW5nZXMuc2V0KHJhbmdlLCBzdHlsZSk7CisKKyAgICBpZiAoY3VycmVudFN0eWxlRm9yUmFu
Z2UgPT0gRmluZERlY29yYXRpb25TdHlsZTo6SGlnaGxpZ2h0ZWQgJiYgcmFuZ2UgPT0gbV9oaWdo
bGlnaHRlZFJhbmdlKSB7CisgICAgICAgIG1fdGV4dEluZGljYXRvciA9IG51bGxwdHI7CisgICAg
ICAgIG1faGlnaGxpZ2h0ZWRSYW5nZSA9IHsgfTsKKyAgICB9CisKKyAgICBpZiAoc3R5bGUgPT0g
RmluZERlY29yYXRpb25TdHlsZTo6Tm9ybWFsKSB7CisgICAgICAgIHNpbXBsZVJhbmdlLT5zdGFy
dC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzaW1wbGVSYW5nZSwgV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgfSBlbHNlIGlmIChzdHlsZSA9PSBG
aW5kRGVjb3JhdGlvblN0eWxlOjpGb3VuZCkgeworICAgICAgICBzaW1wbGVSYW5nZS0+c3RhcnQu
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCpzaW1wbGVSYW5nZSwgV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgfSBlbHNlIGlmIChzdHlsZSA9PSBGaW5kRGVj
b3JhdGlvblN0eWxlOjpIaWdobGlnaHRlZCkgeworICAgICAgICBtX2hpZ2hsaWdodGVkUmFuZ2Ug
PSByYW5nZTsKKworICAgICAgICBjb25zdGV4cHIgaW50IGluZGljYXRvck1hcmdpbiA9IDE7CisK
KyAgICAgICAgT3B0aW9uU2V0PFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb24+IG9wdGlvbnMg
eyBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpJbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNo
ZXNTZWxlY3Rpb24sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb246OkRvTm90Q2xpcFRvVmlz
aWJsZVJlY3QgfTsKKyAgICAgICAgaWYgKFdlYkNvcmU6OkltYWdlT3ZlcmxheTo6aXNJbnNpZGVP
dmVybGF5KCpzaW1wbGVSYW5nZSkpCisgICAgICAgICAgICBvcHRpb25zLmFkZCh7IFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxsQ29udGVudCwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvbjo6UGFpbnRCYWNrZ3JvdW5kcyB9KTsKKworICAgICAgICBtX3RleHRJbmRpY2F0
b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKnNpbXBsZVJhbmdl
LCBvcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
Tm9uZSwgV2ViQ29yZTo6RmxvYXRTaXplKGluZGljYXRvck1hcmdpbiwgaW5kaWNhdG9yTWFyZ2lu
KSk7CisgICAgfQorCisgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQorICAgICAgICBtX2ZpbmRQ
YWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyOjpzY3JvbGxUZXh0UmFuZ2VUb1Zpc2libGUoY29uc3QgV2ViRm91bmRUZXh0
UmFuZ2UmIHJhbmdlKQogewotICAgIFVOVVNFRF9QQVJBTShyYW5nZSk7CisgICAgYXV0byBzaW1w
bGVSYW5nZSA9IHNpbXBsZVJhbmdlRnJvbUZvdW5kVGV4dFJhbmdlKHJhbmdlKTsKKyAgICBpZiAo
IXNpbXBsZVJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBkb2N1bWVudCA9IGRv
Y3VtZW50Rm9yRm91bmRUZXh0UmFuZ2UocmFuZ2UpOworICAgIGlmICghZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVj
dGlvbigqc2ltcGxlUmFuZ2UpOworICAgIE9wdGlvblNldDxXZWJDb3JlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMgeyBXZWJDb3JlOjpUZW1wb3Jh
cnlTZWxlY3Rpb25PcHRpb246OkRlbGVnYXRlTWFpbkZyYW1lU2Nyb2xsLCBXZWJDb3JlOjpUZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNlbGVjdGlvbkJvdW5kcyB9OworCisgICAgaWYg
KGRvY3VtZW50LT5pc1RvcERvY3VtZW50KCkpCisgICAgICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9w
dGlvbnMuYWRkKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6U21vb3RoU2Nyb2xs
KTsKKworICAgIFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFu
Z2UoKmRvY3VtZW50LCB2aXNpYmxlU2VsZWN0aW9uLCB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25z
KTsKIH0KIAogdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmNsZWFyQWxsRGVjb3Jh
dGVkRm91bmRUZXh0KCkKIHsKKyAgICBtX2NhY2hlZEZvdW5kUmFuZ2VzLmNsZWFyKCk7CisgICAg
bV9kZWNvcmF0ZWRSYW5nZXMuY2xlYXIoKTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnVu
bWFya0FsbFRleHRNYXRjaGVzKCk7CisKKyAgICBtX2hpZ2hsaWdodGVkUmFuZ2UgPSB7IH07Cisg
ICAgbV90ZXh0SW5kaWNhdG9yID0gbnVsbHB0cjsKIAorICAgIGlmIChtX2ZpbmRQYWdlT3Zlcmxh
eSkKKyAgICAgICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCiB2
b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZGlkQmVnaW5UZXh0U2VhcmNoT3BlcmF0
aW9uKCkKIHsKKyAgICBpZiAoIW1fZmluZFBhZ2VPdmVybGF5KSB7CisgICAgICAgIG1fZmluZFBh
Z2VPdmVybGF5ID0gV2ViQ29yZTo6UGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6
UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CisgICAgICAgIG1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCpt
X2ZpbmRQYWdlT3ZlcmxheSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsK
KyAgICB9CiAKKyAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAK
IHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkaWRFbmRUZXh0U2VhcmNoT3BlcmF0
aW9uKCkKIHsKKyAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkpCisgICAgICAgIG1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXko
Km1fZmluZFBhZ2VPdmVybGF5LCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OwogCisgICAgbV9maW5kUGFnZU92ZXJsYXkgPSBudWxscHRyOwogfQogCiB2b2lkIFdlYkZvdW5k
VGV4dFJhbmdlQ29udHJvbGxlcjo6d2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkm
LCBXZWJDb3JlOjpQYWdlKiBwYWdlKQogewotICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyAgICBp
ZiAocGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZmluZFBhZ2VPdmVybGF5
KTsKKyAgICBtX2ZpbmRQYWdlT3ZlcmxheSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgV2ViRm91bmRU
ZXh0UmFuZ2VDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jiwg
V2ViQ29yZTo6UGFnZSopCiB7Ci0KIH0KIAogYm9vbCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xs
ZXI6Om1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybU1vdXNlRXZlbnQmKQpAQCAtMTE4LDggKzE5MiwxMTMgQEAgYm9vbCBXZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBX
ZWJDb3IKIAogdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNv
cmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oZGlydHlSZWN0KTsKKyAgICBj
b25zdGV4cHIgaW50IGluZGljYXRvclJhZGl1cyA9IDM7CisgICAgY29uc3RleHByIGludCBpbmRp
Y2F0b3JCb3JkZXJXaWR0aCA9IDE7CisKKyAgICBjb25zdGV4cHIgYXV0byBoaWdobGlnaHRDb2xv
ciA9IFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAyMjgsIDU2IH07CisgICAgY29uc3Rl
eHByIGF1dG8gZm91bmRDb2xvciA9IFdlYkNvcmU6OkNvbG9yOjp3aGl0ZTsKKyAgICBjb25zdGV4
cHIgYXV0byBvdmVybGF5QmFja2dyb3VuZENvbG9yID0gV2ViQ29yZTo6U1JHQkE8dWludDhfdD4g
eyAyNiwgMjYsIDI2LCA2NCB9OworICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gV2Vi
Q29yZTo6Q29sb3I6OmJsYWNrLmNvbG9yV2l0aEFscGhhQnl0ZSgxMjgpOworCisgICAgY29uc3Rl
eHByIGZsb2F0IHNoYWRvd09mZnNldFggPSAwOworICAgIGNvbnN0ZXhwciBmbG9hdCBzaGFkb3dP
ZmZzZXRZID0gMDsKKyAgICBjb25zdGV4cHIgZmxvYXQgc2hhZG93Qmx1clJhZGl1cyA9IDE7CisK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IGJvcmRlckluZmxhdGVkRGlydHlSZWN0ID0gZGlydHlSZWN0
OworICAgIGJvcmRlckluZmxhdGVkRGlydHlSZWN0LmluZmxhdGUoaW5kaWNhdG9yQm9yZGVyV2lk
dGgpOworICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzID0gcmVjdHNGb3JUZXh0
TWF0Y2hlc0luUmVjdChib3JkZXJJbmZsYXRlZERpcnR5UmVjdCk7CisKKyAgICBncmFwaGljc0Nv
bnRleHQuZmlsbFJlY3QoZGlydHlSZWN0LCBvdmVybGF5QmFja2dyb3VuZENvbG9yKTsKKworICAg
IGF1dG8gZm91bmRGcmFtZVBhdGhzID0gV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRo
U2hyaW5rV3JhcHBlZFJlY3RzKHJlY3RzLCBpbmRpY2F0b3JSYWRpdXMpOworCisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7
CisKKyAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFk
b3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3Ip
OworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihmb3VuZENvbG9yKTsKKyAgICBn
cmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGluZGljYXRvckJvcmRlcldpZHRoICog
Mik7CisgICAgZm9yIChhdXRvJiBwYXRoIDogZm91bmRGcmFtZVBhdGhzKQorICAgICAgICBncmFw
aGljc0NvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC5jbGVh
clNoYWRvdygpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihX
ZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcjo6Q2xlYXIpOworICAgIGZvciAoYXV0byYgcGF0aCA6
IGZvdW5kRnJhbWVQYXRocykKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRoKHBhdGgp
OworCisgICAgaWYgKG1fdGV4dEluZGljYXRvcikgeworICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyKTsKKworICAgICAgICBhdXRvKiBpbmRpY2F0b3JJbWFnZSA9IG1fdGV4dEluZGljYXRvci0+
Y29udGVudEltYWdlKCk7CisgICAgICAgIGlmICghaW5kaWNhdG9ySW1hZ2UpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYXV0byB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzKCk7CisgICAgICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cyA9IG1fdGV4dEluZGljYXRvci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygp
OworCisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHRleHRSZWN0c0luUm9vdFZp
ZXdDb29yZGluYXRlczsKKyAgICAgICAgZm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJbkJvdW5k
aW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgICAgICAgICByZWN0Lm1vdmVCeSh0ZXh0Qm91bmRp
bmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgdGV4
dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gcGF0aHMgPSBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJp
bmtXcmFwcGVkUmVjdHModGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3JS
YWRpdXMpOworCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoaGlnaGxpZ2h0
Q29sb3IpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBwYXRocykKKyAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aChwYXRoKTsKKworICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0ltYWdlKCppbmRpY2F0b3JJbWFnZSwgdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcyk7CisgICAgfQorfQorCitWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiBX
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OnJlY3RzRm9yVGV4dE1hdGNoZXNJblJlY3QoV2Vi
Q29yZTo6SW50UmVjdCBjbGlwUmVjdCkKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiByZWN0czsKKworICAgIGF1dG8qIG1haW5GcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPm1haW5GcmFtZSgpLnZpZXcoKTsKKworICAgIGZvciAoYXV0byogZnJhbWUgPSAmbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgZm9yIChhdXRvIHJlY3QgOiBkb2N1bWVudC0+bWFya2VycygpLnJlbmRlcmVkUmVj
dHNGb3JNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpKSB7CisgICAg
ICAgICAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgICAgIHJlY3Qg
PSBtYWluRnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdChyZWN0KSkpOworCisgICAgICAgICAgICBpZiAocmVj
dC5pc0VtcHR5KCkgfHwgIXJlY3QuaW50ZXJzZWN0cyhjbGlwUmVjdCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiByZWN0czsKK30KKworV2ViQ29yZTo6RG9jdW1lbnQqIFdl
YkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZG9jdW1lbnRGb3JGb3VuZFRleHRSYW5nZShjb25z
dCBXZWJGb3VuZFRleHRSYW5nZSYgcmFuZ2UpIGNvbnN0Cit7CisgICAgaWYgKHJhbmdlLmZyYW1l
SWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCk7CisKKyAgICBmb3IgKGF1dG8qIGZyYW1lID0gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT50b3BEb2N1bWVudCgp
LmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
KyAgICAgICAgaWYgKGZyYW1lLT50cmVlKCkudW5pcXVlTmFtZSgpID09IHJhbmdlLmZyYW1lSWRl
bnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVS
YW5nZT4gV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpzaW1wbGVSYW5nZUZyb21Gb3VuZFRl
eHRSYW5nZShXZWJGb3VuZFRleHRSYW5nZSByYW5nZSkKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRG
b3VuZFJhbmdlcy5lbnN1cmUocmFuZ2UsIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiB7CisgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZG9jdW1lbnRGb3JGb3Vu
ZFRleHRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudC0+ZG9jdW1lbnRFbGVt
ZW50KCkpLCB7IHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGggfSwgV2ViQ29yZTo6ZmluZEl0
ZXJhdG9yT3B0aW9ucygpKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaAppbmRleCAwNzFkOWVjNGM2
M2ZmYjZhNWRmYTBiZjI2MDViNGYxN2ZiMGZhOWE2Li5kOTJiMWY2NGYxNmExZThiNTFiY2Y3NjQ2
OTYxY2RiZjMyMTQzNjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaApAQCAtMzAsNiAr
MzAsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTY3LDcgKzY5LDIwIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29y
ZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3UmVjdChXZWJD
b3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7CiAKKyAgICBWZWN0b3I8V2ViQ29yZTo6
RmxvYXRSZWN0PiByZWN0c0ZvclRleHRNYXRjaGVzSW5SZWN0KFdlYkNvcmU6OkludFJlY3QgY2xp
cFJlY3QpOworCisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50Rm9yRm91bmRUZXh0UmFu
Z2UoY29uc3QgV2ViRm91bmRUZXh0UmFuZ2UmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlNpbXBsZVJhbmdlPiBzaW1wbGVSYW5nZUZyb21Gb3VuZFRleHRSYW5nZShXZWJGb3Vu
ZFRleHRSYW5nZSk7CisKICAgICBXZWFrUHRyPFdlYlBhZ2U+IG1fd2ViUGFnZTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fZmluZFBhZ2VPdmVybGF5OworCisgICAgV2ViRm91
bmRUZXh0UmFuZ2UgbV9oaWdobGlnaHRlZFJhbmdlOworCisgICAgSGFzaE1hcDxXZWJGb3VuZFRl
eHRSYW5nZSwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4+IG1fY2FjaGVkRm91
bmRSYW5nZXM7CisgICAgSGFzaE1hcDxXZWJGb3VuZFRleHRSYW5nZSwgRmluZERlY29yYXRpb25T
dHlsZT4gbV9kZWNvcmF0ZWRSYW5nZXM7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGlj
YXRvcj4gbV90ZXh0SW5kaWNhdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="476602"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
    <flag name="commit-queue"
          id="476621"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450263</attachid>
            <date>2022-01-28 11:50:16 -0800</date>
            <delta_ts>2022-01-28 13:47:40 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235692-20220128115014.patch</filename>
            <type>text/plain</type>
            <size>16462</size>
            <attacher name="Aditya Keerthi">akeerthi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE0MGYwNDU0NDZhMjMyY2U5
MzlkNzYxMjk2OTRlYWNiMTUwODk5NzUuLjBlOTJlNDY1MTdmMjAwYmFmNWZkNzlkNDRkOTBjMzQ2
MjU3NzA1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMjItMDEtMjcgIEFkaXR5YSBL
ZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBk
ZWNvcmF0aW5nIGFuZCBzY3JvbGxpbmcgdG8gcmFuZ2VzIGluIFdlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM1NjkyCisgICAgICAgIHJkYXI6Ly84ODExNzIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IFdl
bnNvbiBIc2llaC4KKworICAgICAgICAqIFNoYXJlZC9XZWJGb3VuZFRleHRSYW5nZS5oOgorICAg
ICAgICAoV1RGOjpIYXNoVHJhaXRzPFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2U+OjpkZWxldGVk
VmFsdWUpOgorCisgICAgICAgIFRoZSBlbXB0eSBhbmQgZGVsZXRlZCB2YWx1ZXMgc2hvdWxkIG5v
dCBiZSB0aGUgc2FtZS4KKworICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPFdlYktpdDo6V2ViRm91
bmRUZXh0UmFuZ2U+Ojpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpIYXNo
VHJhaXRzPFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2U+Ojppc0RlbGV0ZWRWYWx1ZSk6CisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpmaW5kVGV4
dFJhbmdlc0ZvclN0cmluZ01hdGNoZXMpOgorCisgICAgICAgIENhY2hlIHRoZSBmb3VuZCByYW5n
ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgU2ltcGxlUmFuZ2UsIHRvIGF2b2lkCisgICAgICAg
IHVubmVjZXNzYXJ5IHRyZWUgdHJhdmVyc2FsIGVhY2ggdGltZSB3ZSB3YW50IHRvIGRlY29yYXRl
IG9yIHNjcm9sbCB0bworICAgICAgICBhIGZvdW5kIHJlc3VsdC4KKworICAgICAgICAoV2ViS2l0
OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRlY29yYXRlVGV4dFJhbmdlV2l0aFN0eWxl
KToKKworICAgICAgICBGb3VuZCByYW5nZXMgY2FuIGN1cnJlbnRseSBiZSBkZWNvcmF0ZWQgd2l0
aCAzIHN0eWxlczogIk5vcm1hbCIsCisgICAgICAgICJGb3VuZCIsIGFuZCAiSGlnaGxpZ2h0ZWQi
LiBUaGUgIkZvdW5kIiBzdHlsZSBpcyBkcmF3biB1c2luZworICAgICAgICBkb2N1bWVudCBtYXJr
ZXJzLiBUaGUgIkhpZ2hsaWdodGVkIiBzdHlsZSBpcyBkcmF3biB1c2luZyBhCisgICAgICAgIFRl
eHRJbmRpY2F0b3IuCisKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9s
bGVyOjpzY3JvbGxUZXh0UmFuZ2VUb1Zpc2libGUpOgorCisgICAgICAgIFVzZSBUZW1wb3JhcnlT
ZWxlY3Rpb25DaGFuZ2UgdG8gbWFrZSB0aGUgcmFuZ2UgdmlzaWJsZS4KKworICAgICAgICAoV2Vi
S2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmNsZWFyQWxsRGVjb3JhdGVkRm91bmRU
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkaWRC
ZWdpblRleHRTZWFyY2hPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXI6OmRpZEVuZFRleHRTZWFyY2hPcGVyYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6cmVjdHNGb3JU
ZXh0TWF0Y2hlc0luUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcjo6ZG9jdW1lbnRGb3JGb3VuZFRleHRSYW5nZSBjb25zdCk6CisKKyAgICAgICAgVXNl
IHRoZSBmcmFtZSBpZGVudGlmZXIgb2YgdGhlIFdlYkZvdW5kVGV4dFJhbmdlIHRvIHJldHJpZXZl
IHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIERvY3VtZW50LCBzbyB0aGF0IHRoZSByYW5nZSBj
YW4gYmUgYXBwcm9wcmlhdGVseQorICAgICAgICBtYXBwZWQgZm9yIGRlY29yYXRpb24vc2Nyb2xs
aW5nLgorCisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6c2lt
cGxlUmFuZ2VGcm9tRm91bmRUZXh0UmFuZ2UpOgorCisgICAgICAgIEEgaGVscGVyIG1ldGhvZCB0
byBjYWNoZSBXZWJGb3VuZFRleHRSYW5nZXMgYW5kIFNpbXBsZVJhbmdlcy4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaDoKKwogMjAy
Mi0wMS0yNyAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAg
TWlncmF0ZSBfVUlUZXh0U2VhcmNoaW5nIGltcGxlbWVudGF0aW9uIHRvIGJlIGJhY2tlZCBieSBX
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkZvdW5kVGV4dFJhbmdlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJGb3VuZFRl
eHRSYW5nZS5oCmluZGV4IDA1OWIxODg1MzY3ZDgzOTlmNjkzNjEyYzA5MWFmOGIwZmQwMTZlMGEu
LmM1MzNiZmQwNjIzMTEwZWI3ZTVlZTNlZmQwYzNkYjE2NTllMWU0OTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkZvdW5kVGV4dFJhbmdlLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViRm91bmRUZXh0UmFuZ2UuaApAQCAtNTUsOSArNTUsMTAgQEAgc3RydWN0IFdl
YkZvdW5kVGV4dFJhbmdlSGFzaCB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2Vi
S2l0OjpXZWJGb3VuZFRleHRSYW5nZT4gOiBHZW5lcmljSGFzaFRyYWl0czxXZWJLaXQ6OldlYkZv
dW5kVGV4dFJhbmdlPiB7CiAgICAgc3RhdGljIFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2UgZW1w
dHlWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBXZWJLaXQ6OldlYkZvdW5kVGV4
dFJhbmdlIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpLCAwLCB7IH0sIDAgfTsgfQogCi0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2UmIHJhbmdlKSB7IHJhbmdlID0g
eyB9OyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViS2l0OjpXZWJG
b3VuZFRleHRSYW5nZSYgcmFuZ2UpIHsgcmV0dXJuIHJhbmdlID09IFdlYktpdDo6V2ViRm91bmRU
ZXh0UmFuZ2UgeyB9OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdl
YktpdDo6V2ViRm91bmRUZXh0UmFuZ2UmIHJhbmdlKSB7IHJhbmdlID0gZGVsZXRlZFZhbHVlKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBXZWJLaXQ6OldlYkZvdW5k
VGV4dFJhbmdlJiByYW5nZSkgeyByZXR1cm4gcmFuZ2UgPT0gZGVsZXRlZFZhbHVlKCk7IH0KIH07
CiAKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYktpdDo6V2ViRm91bmRUZXh0UmFu
Z2U+IDogV2ViRm91bmRUZXh0UmFuZ2VIYXNoIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGMyODc4ZDU1NmUzODkzYTg4NzM5ZGE5OWI4NWVjYmRlNWU3YTZhODMuLmRm
YjAyZmU4YzJjZDM3ZTliMTg4NjMxZjBjNDYxMmM1NTg1OTM1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyLmNwcApAQCAtMjksMTAgKzI5LDE2IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hhcmFjdGVyUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR2Vv
bWV0cnlVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1BhdGhVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91
c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1RleHRJdGVyYXRvci5oPgpAQCAtNDksNiArNTUsOSBAQCB2b2lkIFdlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlcjo6ZmluZFRleHRSYW5nZXNGb3JTdHJpbmdNYXRjaGVzKGNvbnN0IFN0
cmluZyYgcwogICAgIGF1dG8gcmVzdWx0ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kVGV4
dE1hdGNoZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50LCBmYWxzZSk7CiAg
ICAgVmVjdG9yPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBmaW5kTWF0Y2hlcyA9IFdURk1vdmUocmVz
dWx0LnJhbmdlcyk7CiAKKyAgICBpZiAoIWZpbmRNYXRjaGVzLmlzRW1wdHkoKSkKKyAgICAgICAg
bV9jYWNoZWRGb3VuZFJhbmdlcy5jbGVhcigpOworCiAgICAgU3RyaW5nIGZyYW1lTmFtZTsKICAg
ICB1aW50NjRfdCBvcmRlciA9IDA7CiAgICAgVmVjdG9yPFdlYkZvdW5kVGV4dFJhbmdlPiBmb3Vu
ZFRleHRSYW5nZXM7CkBAIC01Nyw3ICs2Niw3IEBAIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250
cm9sbGVyOjpmaW5kVGV4dFJhbmdlc0ZvclN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzCiAK
ICAgICAgICAgYXV0byogZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwogICAg
ICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBTdHJpbmcgY3VycmVudEZyYW1lTmFtZSA9IGRvY3VtZW50LmZyYW1l
KCktPnRyZWUoKS51bmlxdWVOYW1lKCk7CiAgICAgICAgIGlmIChmcmFtZU5hbWUgIT0gY3VycmVu
dEZyYW1lTmFtZSkgewpAQCAtNjksNiArNzgsNyBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcjo6ZmluZFRleHRSYW5nZXNGb3JTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgcwog
ICAgICAgICBhdXRvIHJhbmdlID0gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZv
cmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCBzaW1wbGVSYW5nZSwgV2ViQ29yZTo6ZmluZEl0ZXJh
dG9yT3B0aW9ucygpKTsKICAgICAgICAgYXV0byBmb3VuZFRleHRSYW5nZSA9IFdlYkZvdW5kVGV4
dFJhbmdlIHsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgZnJhbWVOYW1lLmxlbmd0aCgp
ID8gZnJhbWVOYW1lIDogZW1wdHlTdHJpbmcoKSwgb3JkZXIgfTsKIAorICAgICAgICBtX2NhY2hl
ZEZvdW5kUmFuZ2VzLmFkZChmb3VuZFRleHRSYW5nZSwgc2ltcGxlUmFuZ2UpOwogICAgICAgICBm
b3VuZFRleHRSYW5nZXMuYXBwZW5kKGZvdW5kVGV4dFJhbmdlKTsKICAgICB9CiAKQEAgLTc3LDM4
ICs4NywxMDIgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmZpbmRUZXh0UmFu
Z2VzRm9yU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBXZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXI6OmRlY29yYXRlVGV4dFJhbmdlV2l0aFN0eWxlKGNvbnN0IFdlYkZvdW5k
VGV4dFJhbmdlJiByYW5nZSwgRmluZERlY29yYXRpb25TdHlsZSBzdHlsZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0ocmFuZ2UpOwotICAgIFVOVVNFRF9QQVJBTShzdHlsZSk7CisgICAgYXV0byBzaW1w
bGVSYW5nZSA9IHNpbXBsZVJhbmdlRnJvbUZvdW5kVGV4dFJhbmdlKHJhbmdlKTsKKyAgICBpZiAo
IXNpbXBsZVJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGN1cnJlbnRTdHlsZUZv
clJhbmdlID0gbV9kZWNvcmF0ZWRSYW5nZXMuZ2V0KHJhbmdlKTsKKyAgICBpZiAoc3R5bGUgPT0g
Y3VycmVudFN0eWxlRm9yUmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVjb3JhdGVk
UmFuZ2VzLnNldChyYW5nZSwgc3R5bGUpOworCisgICAgaWYgKGN1cnJlbnRTdHlsZUZvclJhbmdl
ID09IEZpbmREZWNvcmF0aW9uU3R5bGU6OkhpZ2hsaWdodGVkICYmIHJhbmdlID09IG1faGlnaGxp
Z2h0ZWRSYW5nZSkgeworICAgICAgICBtX3RleHRJbmRpY2F0b3IgPSBudWxscHRyOworICAgICAg
ICBtX2hpZ2hsaWdodGVkUmFuZ2UgPSB7IH07CisgICAgfQorCisgICAgaWYgKHN0eWxlID09IEZp
bmREZWNvcmF0aW9uU3R5bGU6Ok5vcm1hbCkKKyAgICAgICAgc2ltcGxlUmFuZ2UtPnN0YXJ0LmRv
Y3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNpbXBsZVJhbmdlLCBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICBlbHNlIGlmIChzdHlsZSA9PSBGaW5kRGVj
b3JhdGlvblN0eWxlOjpGb3VuZCkKKyAgICAgICAgc2ltcGxlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcigqc2ltcGxlUmFuZ2UsIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyOjpUZXh0TWF0Y2gpOworICAgIGVsc2UgaWYgKHN0eWxlID09IEZpbmREZWNvcmF0aW9uU3R5
bGU6OkhpZ2hsaWdodGVkKSB7CisgICAgICAgIG1faGlnaGxpZ2h0ZWRSYW5nZSA9IHJhbmdlOwor
CisgICAgICAgIGNvbnN0ZXhwciBpbnQgaW5kaWNhdG9yTWFyZ2luID0gMTsKKworICAgICAgICBP
cHRpb25TZXQgb3B0aW9ucyB7IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb246OkluY2x1ZGVN
YXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbiwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlv
bjo6RG9Ob3RDbGlwVG9WaXNpYmxlUmVjdCB9OworICAgICAgICBpZiAoV2ViQ29yZTo6SW1hZ2VP
dmVybGF5Ojppc0luc2lkZU92ZXJsYXkoKnNpbXBsZVJhbmdlKSkKKyAgICAgICAgICAgIG9wdGlv
bnMuYWRkKHsgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRBbGxDb250ZW50LCBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEJhY2tncm91bmRzIH0pOworCisgICAg
ICAgIG1fdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhS
YW5nZSgqc2ltcGxlUmFuZ2UsIG9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpOb25lLCBXZWJDb3JlOjpGbG9hdFNpemUoaW5kaWNhdG9yTWFyZ2lu
LCBpbmRpY2F0b3JNYXJnaW4pKTsKKyAgICB9CisKKyAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkp
CisgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAogdm9p
ZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OnNjcm9sbFRleHRSYW5nZVRvVmlzaWJsZShj
b25zdCBXZWJGb3VuZFRleHRSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHJhbmdl
KTsKKyAgICBhdXRvIHNpbXBsZVJhbmdlID0gc2ltcGxlUmFuZ2VGcm9tRm91bmRUZXh0UmFuZ2Uo
cmFuZ2UpOworICAgIGlmICghc2ltcGxlUmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8qIGRvY3VtZW50ID0gZG9jdW1lbnRGb3JGb3VuZFRleHRSYW5nZShyYW5nZSk7CisgICAgaWYg
KCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6VmlzaWJsZVNlbGVj
dGlvbiB2aXNpYmxlU2VsZWN0aW9uKCpzaW1wbGVSYW5nZSk7CisgICAgT3B0aW9uU2V0IHRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbnMgeyBXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246
OkRlbGVnYXRlTWFpbkZyYW1lU2Nyb2xsLCBXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25PcHRp
b246OlJldmVhbFNlbGVjdGlvbkJvdW5kcyB9OworCisgICAgaWYgKGRvY3VtZW50LT5pc1RvcERv
Y3VtZW50KCkpCisgICAgICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFdlYkNvcmU6
OlRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6U21vb3RoU2Nyb2xsKTsKKworICAgIFdlYkNvcmU6
OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoKmRvY3VtZW50LCB2aXNp
YmxlU2VsZWN0aW9uLCB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zKTsKIH0KIAogdm9pZCBXZWJG
b3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmNsZWFyQWxsRGVjb3JhdGVkRm91bmRUZXh0KCkKIHsK
KyAgICBtX2NhY2hlZEZvdW5kUmFuZ2VzLmNsZWFyKCk7CisgICAgbV9kZWNvcmF0ZWRSYW5nZXMu
Y2xlYXIoKTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnVubWFya0FsbFRleHRNYXRjaGVz
KCk7CisKKyAgICBtX2hpZ2hsaWdodGVkUmFuZ2UgPSB7IH07CisgICAgbV90ZXh0SW5kaWNhdG9y
ID0gbnVsbHB0cjsKIAorICAgIGlmIChtX2ZpbmRQYWdlT3ZlcmxheSkKKyAgICAgICAgbV9maW5k
UGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCiB2b2lkIFdlYkZvdW5kVGV4dFJh
bmdlQ29udHJvbGxlcjo6ZGlkQmVnaW5UZXh0U2VhcmNoT3BlcmF0aW9uKCkKIHsKKyAgICBpZiAo
IW1fZmluZFBhZ2VPdmVybGF5KSB7CisgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJs
YXlUeXBlOjpEb2N1bWVudCk7CisgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCptX2ZpbmRQYWdlT3ZlcmxheSwg
V2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICB9CiAKKyAgICBtX2Zp
bmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyOjpkaWRFbmRUZXh0U2VhcmNoT3BlcmF0aW9uKCkKIHsKKyAgICBpZiAo
bV9maW5kUGFnZU92ZXJsYXkpCisgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fZmluZFBhZ2VPdmVybGF5
LCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogCisgICAgbV9maW5kUGFn
ZU92ZXJsYXkgPSBudWxscHRyOwogfQogCiB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
cjo6d2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKiBw
YWdlKQogewotICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyAgICBpZiAocGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fZmluZFBhZ2VPdmVybGF5KTsKKyAgICBtX2ZpbmRQYWdl
T3ZlcmxheSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVy
OjpkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopCiB7
Ci0KIH0KIAogYm9vbCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKQpA
QCAtMTE4LDggKzE5MiwxMTIgQEAgYm9vbCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6Om1v
dXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3IKIAogdm9pZCBXZWJG
b3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5Jiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ3JhcGhpY3NDb250ZXh0
KTsKLSAgICBVTlVTRURfUEFSQU0oZGlydHlSZWN0KTsKKyAgICBjb25zdGV4cHIgaW50IGluZGlj
YXRvclJhZGl1cyA9IDM7CisgICAgY29uc3RleHByIGludCBpbmRpY2F0b3JCb3JkZXJXaWR0aCA9
IDE7CisKKyAgICBjb25zdGV4cHIgYXV0byBoaWdobGlnaHRDb2xvciA9IFdlYkNvcmU6OlNSR0JB
PHVpbnQ4X3Q+IHsgMjU1LCAyMjgsIDU2IH07CisgICAgY29uc3RleHByIGF1dG8gZm91bmRDb2xv
ciA9IFdlYkNvcmU6OkNvbG9yOjp3aGl0ZTsKKyAgICBjb25zdGV4cHIgYXV0byBvdmVybGF5QmFj
a2dyb3VuZENvbG9yID0gV2ViQ29yZTo6U1JHQkE8dWludDhfdD4geyAyNiwgMjYsIDI2LCA2NCB9
OworICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gV2ViQ29yZTo6Q29sb3I6OmJsYWNr
LmNvbG9yV2l0aEFscGhhQnl0ZSgxMjgpOworCisgICAgY29uc3RleHByIGZsb2F0IHNoYWRvd09m
ZnNldFggPSAwOworICAgIGNvbnN0ZXhwciBmbG9hdCBzaGFkb3dPZmZzZXRZID0gMDsKKyAgICBj
b25zdGV4cHIgZmxvYXQgc2hhZG93Qmx1clJhZGl1cyA9IDE7CisKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IGJvcmRlckluZmxhdGVkRGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgIGJvcmRlckluZmxh
dGVkRGlydHlSZWN0LmluZmxhdGUoaW5kaWNhdG9yQm9yZGVyV2lkdGgpOworICAgIFZlY3RvcjxX
ZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzID0gcmVjdHNGb3JUZXh0TWF0Y2hlc0luUmVjdChib3Jk
ZXJJbmZsYXRlZERpcnR5UmVjdCk7CisKKyAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3QoZGly
dHlSZWN0LCBvdmVybGF5QmFja2dyb3VuZENvbG9yKTsKKworICAgIGF1dG8gZm91bmRGcmFtZVBh
dGhzID0gV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3Rz
KHJlY3RzLCBpbmRpY2F0b3JSYWRpdXMpOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisKKyAgICBncmFwaGljc0Nv
bnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dP
ZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRTdHJva2VDb2xvcihmb3VuZENvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0
U3Ryb2tlVGhpY2tuZXNzKGluZGljYXRvckJvcmRlcldpZHRoICogMik7CisgICAgZm9yIChhdXRv
JiBwYXRoIDogZm91bmRGcmFtZVBhdGhzKQorICAgICAgICBncmFwaGljc0NvbnRleHQuc3Ryb2tl
UGF0aChwYXRoKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOworCisgICAg
Z3JhcGhpY3NDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihXZWJDb3JlOjpDb21wb3NpdGVP
cGVyYXRvcjo6Q2xlYXIpOworICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykK
KyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRoKHBhdGgpOworCisgICAgaWYgKG1fdGV4
dEluZGljYXRvcikgeworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyKTsKKworICAgICAgICBh
dXRvKiBpbmRpY2F0b3JJbWFnZSA9IG1fdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCk7Cisg
ICAgICAgIGlmICghaW5kaWNhdG9ySW1hZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgYXV0byB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV90ZXh0SW5k
aWNhdG9yLT50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CisgICAgICAg
IGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRv
ci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpOworCisgICAgICAgIFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlczsKKyAg
ICAgICAgZm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVz
KSB7CisgICAgICAgICAgICByZWN0Lm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgdGV4dFJlY3RzSW5Sb290Vmlld0Nv
b3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcGF0aHMg
PSBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHModGV4
dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3JSYWRpdXMpOworCisgICAgICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoaGlnaGxpZ2h0Q29sb3IpOworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhdGggOiBwYXRocykKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5maWxsUGF0aChwYXRoKTsKKworICAgICAgICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCpp
bmRpY2F0b3JJbWFnZSwgdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyk7Cisg
ICAgfQorfQorCitWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiBXZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXI6OnJlY3RzRm9yVGV4dE1hdGNoZXNJblJlY3QoV2ViQ29yZTo6SW50UmVjdCBjbGlw
UmVjdCkKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0czsKKworICAgIFJl
ZlB0ciBtYWluRnJhbWVWaWV3ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52
aWV3KCk7CisKKyAgICBmb3IgKGF1dG8qIGZyYW1lID0gJm1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKKyAgICAgICAgUmVmUHRyIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgICAg
IGlmICghZG9jdW1lbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGF1
dG8gcmVjdCA6IGRvY3VtZW50LT5tYXJrZXJzKCkucmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkpIHsKKyAgICAgICAgICAgIGlmICghZnJh
bWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgcmVjdCA9IG1haW5GcmFtZVZpZXct
PndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3Np
bmdJbnRSZWN0KHJlY3QpKSk7CisKKyAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAh
cmVjdC5pbnRlcnNlY3RzKGNsaXBSZWN0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHJlY3RzOworfQorCitXZWJDb3JlOjpEb2N1bWVudCogV2ViRm91bmRUZXh0UmFuZ2VD
b250cm9sbGVyOjpkb2N1bWVudEZvckZvdW5kVGV4dFJhbmdlKGNvbnN0IFdlYkZvdW5kVGV4dFJh
bmdlJiByYW5nZSkgY29uc3QKK3sKKyAgICBhdXRvJiBtYWluRnJhbWUgPSBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPm1haW5GcmFtZSgpOworICAgIGlmIChyYW5nZS5mcmFtZUlkZW50aWZpZXIuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbWFpbkZyYW1lLmRvY3VtZW50KCk7CisKKyAgICBpZiAo
YXV0byogZnJhbWUgPSBtYWluRnJhbWUudHJlZSgpLmZpbmQocmFuZ2UuZnJhbWVJZGVudGlmaWVy
LCBtYWluRnJhbWUpKQorICAgICAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50KCk7CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4g
V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpzaW1wbGVSYW5nZUZyb21Gb3VuZFRleHRSYW5n
ZShXZWJGb3VuZFRleHRSYW5nZSByYW5nZSkKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRGb3VuZFJh
bmdlcy5lbnN1cmUocmFuZ2UsIFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNpbXBs
ZVJhbmdlPiB7CisgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZG9jdW1lbnRGb3JGb3VuZFRleHRS
YW5nZShyYW5nZSk7CisgICAgICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkp
LCB7IHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGggfSwgV2ViQ29yZTo6ZmluZEl0ZXJhdG9y
T3B0aW9ucygpKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaAppbmRleCAwNzFkOWVjNGM2M2ZmYjZh
NWRmYTBiZjI2MDViNGYxN2ZiMGZhOWE2Li5kOTJiMWY2NGYxNmExZThiNTFiY2Y3NjQ2OTYxY2Ri
ZjMyMTQzNjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuaApAQCAtMzAsNiArMzAsOCBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lu
dFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TaW1wbGVSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTY3LDcgKzY5LDIwIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxh
dGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7CiAKKyAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRS
ZWN0PiByZWN0c0ZvclRleHRNYXRjaGVzSW5SZWN0KFdlYkNvcmU6OkludFJlY3QgY2xpcFJlY3Qp
OworCisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50Rm9yRm91bmRUZXh0UmFuZ2UoY29u
c3QgV2ViRm91bmRUZXh0UmFuZ2UmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiBzaW1wbGVSYW5nZUZyb21Gb3VuZFRleHRSYW5nZShXZWJGb3VuZFRleHRS
YW5nZSk7CisKICAgICBXZWFrUHRyPFdlYlBhZ2U+IG1fd2ViUGFnZTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6UGFnZU92ZXJsYXk+IG1fZmluZFBhZ2VPdmVybGF5OworCisgICAgV2ViRm91bmRUZXh0
UmFuZ2UgbV9oaWdobGlnaHRlZFJhbmdlOworCisgICAgSGFzaE1hcDxXZWJGb3VuZFRleHRSYW5n
ZSwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4+IG1fY2FjaGVkRm91bmRSYW5n
ZXM7CisgICAgSGFzaE1hcDxXZWJGb3VuZFRleHRSYW5nZSwgRmluZERlY29yYXRpb25TdHlsZT4g
bV9kZWNvcmF0ZWRSYW5nZXM7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4g
bV90ZXh0SW5kaWNhdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>