<?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>254817</bug_id>
          
          <creation_ts>2023-03-31 08:53:46 -0700</creation_ts>
          <short_desc>AX: Move AXTextMarkerRangeForUIElement off of the main thread for those objects caching AttributedStrings.</short_desc>
          <delta_ts>2023-04-01 09:46:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>tyler_w</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1945693</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-03-31 08:53:46 -0700</bug_when>
    <thetext>ITM enhancement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945694</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-03-31 08:53:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/107473776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945700</commentid>
    <comment_count>2</comment_count>
      <attachid>465701</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-03-31 09:12:36 -0700</bug_when>
    <thetext>Created attachment 465701
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945792</commentid>
    <comment_count>3</comment_count>
      <attachid>465701</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-03-31 11:46:14 -0700</bug_when>
    <thetext>Comment on attachment 465701
Patch

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

&gt; Source/WebCore/accessibility/AXTextMarker.cpp:158
&gt; +    bool isInNode = static_cast&lt;unsigned&gt;(characterCount) &lt;= WebCore::characterCount(nodeRange);

Are you confident this cast from int to unsigned is always safe? Should we guard against a negative `characterCount`, or is it possible to make the characterCount parameter an unsigned and move the cast somewhere with more context?

&gt; Source/WebCore/accessibility/AXTextMarker.cpp:172
&gt; +    Node* node = characterOffset.node;

AccessibilityObject::replacedNodeNeedsCharacter can call accessibilityIsIgnored, which can do work that destroys `node`. Do we want to make this a WeakPtr&lt;Node&gt; instead of a raw pointer?

It would be nice if it could be a CheckedPtr (because it&apos;s cheaper than all other smart pointers), but it doesn&apos;t look like you can make CheckedPtr&lt;Node&gt;.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2841
&gt; +        AXTextMarkerRange markerRange { marker, marker };

Just making sure this is correct and not a typo -- the intention here is to make a range starting from and ending at `marker`?

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2843
&gt; +        return range ? makeNSRange(range).location : NSNotFound;

Is it necessary to null-check range? makeNSRange takes a std::optional already.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3259
&gt; +        return (id)Accessibility::retrieveAutoreleasedValueFromMainThread&lt;AXTextMarkerRangeRef&gt;([&amp;dictionary, protectedSelf = retainPtr(self)] () -&gt; RetainPtr&lt;AXTextMarkerRangeRef&gt; {

This lambda claims:

-&gt; RetainPtr&lt;AXTextMarkerRangeRef&gt;

But doesn&apos;t have RetainPtr in the first type-specifier:

accessibility::retrieveAutoreleasedValueFromMainThread&lt;AXTextMarkerRangeRef&gt;

Is that OK?

&gt; LayoutTests/accessibility/text-marker/text-marker-previous-next.html:232
&gt; +        markerRange = text.textMarkerRangeForMarkers(currentMarker,previousMarker);

Missing a space after the comma.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945818</commentid>
    <comment_count>4</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-03-31 13:31:29 -0700</bug_when>
    <thetext>(In reply to Tyler Wilcock from comment #3)
&gt; Comment on attachment 465701 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=465701&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AXTextMarker.cpp:158
&gt; &gt; +    bool isInNode = static_cast&lt;unsigned&gt;(characterCount) &lt;= WebCore::characterCount(nodeRange);
&gt; 
&gt; Are you confident this cast from int to unsigned is always safe? Should we
&gt; guard against a negative `characterCount`, or is it possible to make the
&gt; characterCount parameter an unsigned and move the cast somewhere with more
&gt; context?

Not safe, this is old, eerie CharacterOffset code copied from AXObjectCache.cpp, see resetNodeAndOffsetForReplacedNode. The goal is to get rid off all the CharacterOffset stuff, but it has to be one step at a time to keep things working. I&apos;ll address these issues with the CharacterOffset implementation in subsequent patches.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AXTextMarker.cpp:172
&gt; &gt; +    Node* node = characterOffset.node;
&gt; 
&gt; AccessibilityObject::replacedNodeNeedsCharacter can call
&gt; accessibilityIsIgnored, which can do work that destroys `node`. Do we want
&gt; to make this a WeakPtr&lt;Node&gt; instead of a raw pointer?
&gt; 
&gt; It would be nice if it could be a CheckedPtr (because it&apos;s cheaper than all
&gt; other smart pointers), but it doesn&apos;t look like you can make
&gt; CheckedPtr&lt;Node&gt;.

Fixed.
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2841
&gt; &gt; +        AXTextMarkerRange markerRange { marker, marker };
&gt; 
&gt; Just making sure this is correct and not a typo -- the intention here is to
&gt; make a range starting from and ending at `marker`?

Yes, it is a collapsed range, start = end.
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2843
&gt; &gt; +        return range ? makeNSRange(range).location : NSNotFound;
&gt; 
&gt; Is it necessary to null-check range? makeNSRange takes a std::optional
&gt; already.

Fixed, made it more concise.
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3259
&gt; &gt; +        return (id)Accessibility::retrieveAutoreleasedValueFromMainThread&lt;AXTextMarkerRangeRef&gt;([&amp;dictionary, protectedSelf = retainPtr(self)] () -&gt; RetainPtr&lt;AXTextMarkerRangeRef&gt; {
&gt; 
&gt; This lambda claims:
&gt; 
&gt; -&gt; RetainPtr&lt;AXTextMarkerRangeRef&gt;
&gt; 
&gt; But doesn&apos;t have RetainPtr in the first type-specifier:
&gt; 
&gt; accessibility::retrieveAutoreleasedValueFromMainThread&lt;AXTextMarkerRangeRef&gt;
&gt; 
&gt; Is that OK?

Yes, it is correct, the returned value of retrieveAutoreleased... is T* but the return value of the lambda argument has to be RetainPtr&lt;T&gt; so that it can be autoreleased.
&gt; 
&gt; &gt; LayoutTests/accessibility/text-marker/text-marker-previous-next.html:232
&gt; &gt; +        markerRange = text.textMarkerRangeForMarkers(currentMarker,previousMarker);
&gt; 
&gt; Missing a space after the comma.

Fixed. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945819</commentid>
    <comment_count>5</comment_count>
      <attachid>465712</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-03-31 13:33:08 -0700</bug_when>
    <thetext>Created attachment 465712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1945964</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-04-01 09:46:45 -0700</bug_when>
    <thetext>Committed 262480@main (5ffe861ef145): &lt;https://commits.webkit.org/262480@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 465712.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>465701</attachid>
            <date>2023-03-31 09:12:36 -0700</date>
            <delta_ts>2023-03-31 13:33:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-254817-20230331121235.patch</filename>
            <type>text/plain</type>
            <size>39497</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">RnJvbSBiOTYzNjFiYTUxZDZhMTdiZDg1OTg0ZWNjMzRiNDI3MzEyMzdiOTI3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgR29uemFsZXogPGFuZHJlc2dfMjJAYXBwbGUuY29t
PgpEYXRlOiBUdWUsIDI4IE1hciAyMDIzIDEwOjI4OjAzIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0g
QVg6IE1vdmUgQVhUZXh0TWFya2VyUmFuZ2VGb3JVSUVsZW1lbnQgb2ZmIG9mIHRoZSBtYWluIHRo
cmVhZAogZm9yIHRob3NlIG9iamVjdHMgY2FjaGluZyBBdHRyaWJ1dGVkU3RyaW5ncy4KIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTQ4MTcgPHJkYXI6Ly9wcm9ibGVt
LzEwNzQ3Mzc3Nj4KClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKSWYgYW4gSXNvbGF0ZWRP
YmplY3QgaGFzIGEgY2FjaGVkIEF0dHJpYnV0ZWRTdHJpbmcsIHRoaXMgc3RyaW5nIHJlcHJlc2Vu
dHMgdGhlIG9iamVjdCBhbmQgdGhlIFRleHRNYXJrZXJSYW5nZSBmb3IgdGhlIG9iamVjdCBpcyBu
b3cgY3JlYXRlZCBhcyBvZmZzZXRzIGludG8gdGhhdCBzdHJpbmcgd2l0aG91dCBoYXZpbmcgdG8g
aGl0IHRoZSBtYWluIHRocmVhZC4gQXMgYSBjb25zZXF1ZW5jZSwgIHRoZSBUZXh0TWFya2VycyBj
cmVhdGVkIHRoaXMgd2F5IHdpbGwgaGF2ZSBubyByZWZlcmVuY2UgdG8gRE9NIE5vZGVzLiBUbyBr
ZWVwICB0aGVzZSBUZXh0TWFya2VycyBhbmQgVGV4dE1hcmtlclJhbmdlcyB3b3JraW5nIGluIHRo
b3NlIGZ1bmN0aW9ucyB3aGVyZSB3ZSBzdGlsbCBnbyB0byB0aGUgbWFpbiB0aHJlYWQgYW5kIHJl
bHkgb24gdGhlIE5vZGUgcmVmZXJlbmNlcywgd2UgYWRkZWQgdGhlIEFYVGV4dE1hcmtlcjo6c2V0
Tm9kZSBtZXRob2QgdG8gc2V0IHRoZSBOb2RlIHJlZmVyZW5jZSBpbiBhIFRleHRNYXJrZXIgdGhh
dCBjbG9uZXMgb25lIHRoYXQgd2FzIGNyZWF0ZWQgb24gdGhlIEFYIHRocmVhZC4KCkFsbCB0aGUg
QVBJIG1ldGhvZHMgaW1wbGVtZW50ZWQgaW4gW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSB0aGF0IHRha2UgYSBU
ZXh0TWFya2VyIG9yIGEgVGV4dE1hcmtlclJhbmdlIGFzIGEgcGFyYW1ldGVyIGhhZCB0byBiZSBt
b2RpZmllZCBhY2NvcmRpbmdseS4KClNldmVyYWwgdGVzdHMgd2VyZSBjbGVhbmVkIHVwIGFuZCBi
cm91Z2h0IHVwIHRvIG91ciBjdXJyZW50IGNvZGluZyBjb252ZW50aW9ucy4KLS0tCiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCAgfCAgIDEgKwogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIHwgIDU2ICsrKysrKy0KIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmggICB8ICAxNiArLQogLi4uL2Fj
Y2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2EubW0gIHwgICAzICsKIC4uLi9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgICAgICAgICB8ICAxMCAtLQogLi4uL2lzb2xh
dGVkdHJlZS9tYWMvQVhJc29sYXRlZE9iamVjdE1hYy5tbSAgIHwgIDI1ICsrKwogLi4uL21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSAgIHwgMTUwICsrKysrKysrLS0tLS0t
LS0tLQogLi4ub2Zmc2V0LWZyb20tdXBzdHJlYW0tcG9zaXRpb24tZXhwZWN0ZWQudHh0IHwgICA3
ICstCiAuLi5hcmFjdGVyLW9mZnNldC1mcm9tLXVwc3RyZWFtLXBvc2l0aW9uLmh0bWwgfCAgNTgg
KysrLS0tLQogLi4ub3NpdGlvbi1jb252ZXJzaW9uLXdpdGgtZW1vamktZXhwZWN0ZWQudHh0IHwg
ICA3ICstCiAuLi5pc2libGUtcG9zaXRpb24tY29udmVyc2lvbi13aXRoLWVtb2ppLmh0bWwgfCAg
NzUgKysrKy0tLS0tCiAuLi4vbWFjL2xpc3RtYXJrZXItc3VmZml4LWV4cGVjdGVkLnR4dCAgICAg
ICAgfCAgMTEgKy0KIC4uLi9hY2Nlc3NpYmlsaXR5L21hYy9saXN0bWFya2VyLXN1ZmZpeC5odG1s
ICB8ICAzNyArKy0tLQogLi4uL3RleHQtbWFya2VyLXByZXZpb3VzLW5leHQuaHRtbCAgICAgICAg
ICAgIHwgICA0ICstCiAxNCBmaWxlcyBjaGFuZ2VkLCAyNDAgaW5zZXJ0aW9ucygrKSwgMjIwIGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgKaW5kZXggOGNhMzk1Mzg3Zjc1Li43NTU3MGQ4ZTJiMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0xMzcsNiArMTM3LDcgQEAgY2xhc3Mg
QVhPYmplY3RDYWNoZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxBWE9iamVjdENhY2hlPgogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEFYT2JqZWN0Q2FjaGUpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIGZyaWVuZCBjbGFzcyBBWElzb2xhdGVkVHJlZTsKKyAgICBmcmllbmQg
Y2xhc3MgQVhUZXh0TWFya2VyOwogICAgIGZyaWVuZCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgQVhPYmplY3RDYWNoZSYpOwogcHVibGljOgogICAgIGV4cGxp
Y2l0IEFYT2JqZWN0Q2FjaGUoRG9jdW1lbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhUZXh0TWFya2VyLmNwcAppbmRleCBlMTZiYzc0YjJiZjguLjRkOThiYjQyZTg0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcApAQCAt
MTA1LDYgKzEwNSwyNyBAQCBBWFRleHRNYXJrZXI6OkFYVGV4dE1hcmtlcihjb25zdCBDaGFyYWN0
ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKICAgICAgICAgbV9kYXRhID0gY2FjaGUtPnRleHRN
YXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7CiB9CiAKK3ZvaWQg
QVhUZXh0TWFya2VyOjpzZXROb2RlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghbV9kYXRhLm5vZGUpOworCisgICAgV2Vha1B0ciBjYWNoZSA9IHN0ZDo6Z2V0
PFdlYWtQdHI8QVhPYmplY3RDYWNoZT4+KGF4VHJlZUZvcklEKHRyZWVJRCgpKSk7CisgICAgaWYg
KCFjYWNoZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogb2JqZWN0ID0gY2FjaGUtPm9i
amVjdEZvcklEKG9iamVjdElEKCkpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWFrUHRyIG5vZGUgPSBvYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS5ub2RlID0gbm9kZS5nZXQoKTsKKyAgICBjYWNo
ZS0+c2V0Tm9kZUluVXNlKG5vZGUuZ2V0KCkpOworfQorCiBBWFRleHRNYXJrZXI6Om9wZXJhdG9y
IFZpc2libGVQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
QEAgLTEzMCw2ICsxNTEsMzMgQEAgQVhUZXh0TWFya2VyOjpvcGVyYXRvciBDaGFyYWN0ZXJPZmZz
ZXQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBOb2RlKiBub2RlQW5k
T2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5vZGUmIHJlcGxhY2VkTm9kZSwgaW50JiBvZmZzZXQsIGlu
dCBjaGFyYWN0ZXJDb3VudCkKK3sKKyAgICAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBpbmNsdWRl
IHRoZSByZXBsYWNlZCBub2RlIGl0c2VsZiBpbiB0aGUgcmFuZ2Ugd2UgYXJlIGNyZWF0aW5nLgor
ICAgIGF1dG8gbm9kZVJhbmdlID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMo
cmVwbGFjZWROb2RlKTsKKyAgICBib29sIGlzSW5Ob2RlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNoYXJhY3RlckNvdW50KSA8PSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudChub2RlUmFuZ2UpOwor
ICAgIG9mZnNldCA9IHJlcGxhY2VkTm9kZS5jb21wdXRlTm9kZUluZGV4KCkgKyAoaXNJbk5vZGUg
PyAwIDogMSk7CisgICAgcmV0dXJuIHJlcGxhY2VkTm9kZS5wYXJlbnROb2RlKCk7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gQVhUZXh0TWFya2VyOjpib3VuZGFyeVBvaW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgQ2hhcmFjdGVyT2Zm
c2V0IGNoYXJhY3Rlck9mZnNldCA9ICp0aGlzOworICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbnQgb2Zmc2V0ID0g
Y2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0OworICAg
IE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9kZTsKKyAgICBBU1NFUlQobm9kZSk7Cisg
ICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKG5v
ZGUpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgICAgICBub2RlID0gbm9kZUFuZE9m
ZnNldEZvclJlcGxhY2VkTm9kZSgqbm9kZSwgb2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHsgeyAqbm9kZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9mZnNldCkgfSB9OworfQorCiBS
ZWZQdHI8QVhDb3JlT2JqZWN0PiBBWFRleHRNYXJrZXI6Om9iamVjdCgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzTnVsbCgpKQpAQCAtMjAyLDkgKzI1MCwxMSBAQCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6c2ltcGxlUmFuZ2UoKSBjb25zdAogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBhdXRvIHN0YXJ0Qm91bmRhcnlQb2ludCA9IG1ha2VC
b3VuZGFyeVBvaW50KG1fc3RhcnQpOwotICAgIGF1dG8gZW5kQm91bmRhcnlQb2ludCA9IG1ha2VC
b3VuZGFyeVBvaW50KG1fZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5k
Qm91bmRhcnlQb2ludCkKKyAgICBhdXRvIHN0YXJ0Qm91bmRhcnlQb2ludCA9IG1fc3RhcnQuYm91
bmRhcnlQb2ludCgpOworICAgIGlmICghc3RhcnRCb3VuZGFyeVBvaW50KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGF1dG8gZW5kQm91bmRhcnlQb2ludCA9IG1fZW5kLmJvdW5k
YXJ5UG9pbnQoKTsKKyAgICBpZiAoIWVuZEJvdW5kYXJ5UG9pbnQpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHsgeyAqc3RhcnRCb3VuZGFyeVBvaW50LCAqZW5kQm91
bmRhcnlQb2ludCB9IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYVGV4dE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRN
YXJrZXIuaAppbmRleCBkZGQ2ZjlmNjkxOTIuLjMwMzY5YTgzZDZhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVi
bGljOgogICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhaXNOdWxsKCk7IH0KICAg
ICBvcGVyYXRvciBWaXNpYmxlUG9zaXRpb24oKSBjb25zdDsKICAgICBvcGVyYXRvciBDaGFyYWN0
ZXJPZmZzZXQoKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IGJvdW5k
YXJ5UG9pbnQoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0cjxQ
bGF0Zm9ybVRleHRNYXJrZXJEYXRhPiBwbGF0Zm9ybURhdGEoKSBjb25zdDsKQEAgLTEyNCwxMSAr
MTI1LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxBWENvcmVPYmplY3Q+IG9iamVjdCgpIGNvbnN0
OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpOyB9CiAKLSAgICBO
b2RlKiBub2RlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgICAgIHJldHVybiBtX2RhdGEubm9kZTsKLSAgICB9CisgICAgTm9kZSogbm9kZSgpIGNv
bnN0OwogICAgIGJvb2wgaXNJZ25vcmVkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlnbm9yZWQ7
IH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKQEAgLTEzNiw2ICsxMzMsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICAvLyBTZXRzIG1fZGF0YS5ub2RlIHdoZW4gdGhl
IG1hcmtlciBpcyBiZWluZyBjcmVhdGVkIHdpdGggYSBQbGF0Zm9ybVRleHRNYXJrZXJEYXRhIHRo
YXQgbGFja3MgdGhlIG5vZGUgcG9pbnRlciBiZWNhdXNlIGl0IHdhcyBjcmVhdGVkIG9mZiB0aGUg
bWFpbiB0aHJlYWQuCisgICAgdm9pZCBzZXROb2RlKCk7CiAgICAgVGV4dE1hcmtlckRhdGEgbV9k
YXRhOwogfTsKIApAQCAtMTY2LDkgKzE2NSwxNiBAQCBwdWJsaWM6CiAKICAgICBBWFRleHRNYXJr
ZXIgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CiAgICAgQVhUZXh0TWFya2VyIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKIHByaXZhdGU6CiAgICAgQVhUZXh0TWFya2Vy
IG1fc3RhcnQ7CiAgICAgQVhUZXh0TWFya2VyIG1fZW5kOwogfTsKIAoraW5saW5lIE5vZGUqIEFY
VGV4dE1hcmtlcjo6bm9kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICByZXR1cm4gbV9kYXRhLm5vZGU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2Vy
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FYVGV4dE1hcmtl
ckNvY29hLm1tCmluZGV4IDZjMGMxYjg0NGRlZC4uMDg0ZDJkNWFmNWY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FYVGV4dE1hcmtlckNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2EvQVhUZXh0TWFya2VyQ29jb2Eu
bW0KQEAgLTUzLDYgKzUzLDkgQEAgQVhUZXh0TWFya2VyOjpBWFRleHRNYXJrZXIoUGxhdGZvcm1U
ZXh0TWFya2VyRGF0YSBwbGF0Zm9ybURhdGEpCiAjZWxzZSAvLyBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIFtwbGF0Zm9ybURhdGEgZ2V0Qnl0ZXM6Jm1fZGF0YSBsZW5ndGg6c2l6ZW9mKG1fZGF0
YSldOwogI2VuZGlmCisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkgJiYgIW1fZGF0YS5ub2RlKQor
ICAgICAgICBzZXROb2RlKCk7CiB9CiAKIFJldGFpblB0cjxQbGF0Zm9ybVRleHRNYXJrZXJEYXRh
PiBBWFRleHRNYXJrZXI6OnBsYXRmb3JtRGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmpl
Y3QuY3BwCmluZGV4IDUwMGNjYjM3YjJkYS4uNDUwZjEyMjQ2OWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcApAQCAtMTM0NiwxNiArMTM0Niw2IEBAIFZpc2libGVQb3NpdGlvblJhbmdl
IEFYSXNvbGF0ZWRPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3QKICAgICByZXR1
cm4gYXhPYmplY3QgPyBheE9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSA6IFZpc2libGVQ
b3NpdGlvblJhbmdlKCk7CiB9CiAKLUFYVGV4dE1hcmtlclJhbmdlIEFYSXNvbGF0ZWRPYmplY3Q6
OnRleHRNYXJrZXJSYW5nZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGNyZWF0ZSBBWFRleHRN
YXJrZXJSYW5nZSB3aXRob3V0IGhpdHRpbmcgdGhlIG1haW4gdGhyZWFkLgotCi0gICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxBWFRleHRNYXJrZXJS
YW5nZT4oW3RoaXNdICgpIHsKLSAgICAgICAgYXV0byogYXhPYmplY3QgPSBhc3NvY2lhdGVkQVhP
YmplY3QoKTsKLSAgICAgICAgcmV0dXJuIGF4T2JqZWN0ID8gYXhPYmplY3QtPnRleHRNYXJrZXJS
YW5nZSgpIDogQVhUZXh0TWFya2VyUmFuZ2UoKTsKLSAgICB9KTsKLX0KLQogVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgQVhJc29sYXRlZE9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKHVu
c2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9tYWMvQVhJ
c29sYXRlZE9iamVjdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL21hYy9BWElzb2xhdGVkT2JqZWN0TWFjLm1tCmluZGV4IGM2YmQxMjk3NTcwZS4uODhj
YmZlOWE3YmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9tYWMvQVhJc29sYXRlZE9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9tYWMvQVhJc29sYXRlZE9iamVjdE1hYy5tbQpAQCAt
MTAzLDYgKzEwMywzMSBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3Jh
cHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobQogICAgIFt3cmFwcGVyKCkg
ZGV0YWNoSXNvbGF0ZWRPYmplY3Q6ZGV0YWNobWVudFR5cGVdOwogfQogCitBWFRleHRNYXJrZXJS
YW5nZSBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0TWFya2VyUmFuZ2UoKSBjb25zdAoreworICAgIGlm
IChhdXRvIGF0dHJpYnV0ZWRUZXh0ID0gcHJvcGVydHlWYWx1ZTxSZXRhaW5QdHI8TlNBdHRyaWJ1
dGVkU3RyaW5nPj4oQVhQcm9wZXJ0eU5hbWU6OkF0dHJpYnV0ZWRUZXh0KSkgeworICAgICAgICAv
LyBGSVhNRTogcmV0dXJuIGEgbnVsbCByYW5nZSB0byBtYXRjaCBub24gSVRNIGJlaGF2aW9yLCBi
dXQgdGhpcyBzaG91bGQgYmUgcmV2aXNpdGVkIHNpbmNlIHdlIHNob3VsZCByZXR1cm4gcmFuZ2Vz
IGZvciBzZWN1cmUgZmllbGRzLgorICAgICAgICBpZiAoaXNTZWN1cmVGaWVsZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBTdHJpbmcgdGV4dCB7IFthdHRyaWJ1dGVkVGV4
dCBzdHJpbmddIH07CisgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICBU
ZXh0TWFya2VyRGF0YSBzdGFydCh0cmVlKCktPnRyZWVJRCgpLCBvYmplY3RJRCgpLAorICAgICAg
ICAgICAgICAgIG51bGxwdHIsIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Is
IEFmZmluaXR5OjpEb3duc3RyZWFtLAorICAgICAgICAgICAgICAgIDAsIDApOworICAgICAgICAg
ICAgVGV4dE1hcmtlckRhdGEgZW5kKHRyZWUoKS0+dHJlZUlEKCksIG9iamVjdElEKCksCisgICAg
ICAgICAgICAgICAgbnVsbHB0ciwgdGV4dC5sZW5ndGgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciwgQWZmaW5pdHk6OkRvd25zdHJlYW0sCisgICAgICAgICAgICAgICAgMCwg
dGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICByZXR1cm4geyB7IHN0YXJ0IH0sIHsgZW5kIH0g
fTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZVZhbHVlRnJvbU1haW5UaHJlYWQ8QVhUZXh0TWFya2VyUmFuZ2U+KFt0aGlzXSAoKSB7CisgICAg
ICAgIGF1dG8qIGF4T2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCk7CisgICAgICAgIHJldHVy
biBheE9iamVjdCA/IGF4T2JqZWN0LT50ZXh0TWFya2VyUmFuZ2UoKSA6IEFYVGV4dE1hcmtlclJh
bmdlKCk7CisgICAgfSk7Cit9CisKIEFYVGV4dE1hcmtlclJhbmdlUmVmIEFYSXNvbGF0ZWRPYmpl
Y3Q6OnRleHRNYXJrZXJSYW5nZUZvck5TUmFuZ2UoY29uc3QgTlNSYW5nZSYgcmFuZ2UpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVG
cm9tTWFpblRocmVhZDxBWFRleHRNYXJrZXJSYW5nZVJlZj4oWyZyYW5nZSwgdGhpc10gKCkgLT4g
UmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCmluZGV4IDRiYWZiMTdjOTUzMi4uNTdjNTBkN2QyOTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtNjU3LDE0ICs2NTcsMTQgQEAg
c3RhdGljIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0
aW9uRm9yUGFyYW1ldGVyaXplZEF0dHIKICAgICByZXR1cm4gb3BlcmF0aW9uOwogfQogCi1zdGF0
aWMgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2Vh
cmNoRGlyZWN0aW9uPiBhY2Nlc3NpYmlsaXR5TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGUoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSwgY29uc3Qg
TlNEaWN0aW9uYXJ5ICpwYXJhbXMpCitzdGF0aWMgc3RkOjpwYWlyPEFYVGV4dE1hcmtlclJhbmdl
LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBtaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlh
Rm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShjb25zdCBOU0RpY3Rpb25hcnkgKnBhcmFtcykKIHsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9u
YWw8U2ltcGxlUmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBjcml0ZXJpYTsK
KyAgICBpZCBtYXJrZXJSYW5nZVJlZiA9IFtwYXJhbXMgb2JqZWN0Rm9yS2V5OkAiQVhTdGFydFRl
eHRNYXJrZXJSYW5nZSJdOworICAgIGlmICghQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZShtYXJr
ZXJSYW5nZVJlZikpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBBU1NFUlQoQVhPYmplY3RJ
c1RleHRNYXJrZXJSYW5nZShbcGFyYW1zIG9iamVjdEZvcktleTpAIkFYU3RhcnRUZXh0TWFya2Vy
UmFuZ2UiXSkpOwotICAgIGNyaXRlcmlhLmZpcnN0ID0gcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2Uo
YXhPYmplY3RDYWNoZSwgKEFYVGV4dE1hcmtlclJhbmdlUmVmKVtwYXJhbXMgb2JqZWN0Rm9yS2V5
OkAiQVhTdGFydFRleHRNYXJrZXJSYW5nZSJdKTsKKyAgICBzdGQ6OnBhaXI8QVhUZXh0TWFya2Vy
UmFuZ2UsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24+IGNyaXRlcmlhOworICAgIGNyaXRl
cmlhLmZpcnN0ID0gQVhUZXh0TWFya2VyUmFuZ2UgeyAoQVhUZXh0TWFya2VyUmFuZ2VSZWYpbWFy
a2VyUmFuZ2VSZWYgfTsKIAogICAgIE5TTnVtYmVyICpmb3J3YXJkID0gW3BhcmFtcyBvYmplY3RG
b3JLZXk6TlNBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbl07CiAgICAgaWYgKFtmb3J3
YXJkIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCkBAIC0yNzMzLDggKzI3MzMsOCBA
QCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZhbHVlIGZvckF0dHJpYnV0ZToo
TlNTdHJpbmcgKilhdHRyaWJ1dGVOYW1lCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlXSkgewogICAgICAgICBB
U1NFUlQodGV4dE1hcmtlclJhbmdlKTsKICAgICAgICAgQWNjZXNzaWJpbGl0eTo6cGVyZm9ybUZ1
bmN0aW9uT25NYWluVGhyZWFkKFt0ZXh0TWFya2VyUmFuZ2UgPSByZXRhaW5QdHIodGV4dE1hcmtl
clJhbmdlKSwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gewotICAgICAgICAgICAg
aWYgKGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09i
amVjdCkKLSAgICAgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQ
b3NpdGlvblJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlKGJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdlLmdldCgpKSk7CisgICAg
ICAgICAgICBpZiAoUmVmUHRyPEFYQ29yZU9iamVjdD4gYmFja2luZ09iamVjdCA9IHByb3RlY3Rl
ZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIGJhY2tpbmdPYmpl
Y3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoQVhUZXh0TWFya2VyUmFuZ2UgeyB0
ZXh0TWFya2VyUmFuZ2UuZ2V0KCkgfSk7CiAgICAgICAgIH0pOwogICAgIH0gZWxzZSBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmli
dXRlXSkgewogICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRGb2N1c2VkKFtudW1iZXIgYm9vbFZh
bHVlXSk7CkBAIC0yODI4LDI2ICsyODI4LDE5IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWRv
QVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKICAgICB9KTsKIH0KIAot
LSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZiltYXJrZXIK
Ky0gKE5TSW50ZWdlcilfaW5kZXhGb3JUZXh0TWFya2VyOihBWFRleHRNYXJrZXJSZWYpbWFya2Vy
UmVmCiB7Ci0gICAgaWYgKCFtYXJrZXIpCisgICAgaWYgKCFtYXJrZXJSZWYpCiAgICAgICAgIHJl
dHVybiBOU05vdEZvdW5kOwogCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFs
dWVGcm9tTWFpblRocmVhZDxOU0ludGVnZXI+KFttYXJrZXIgPSByZXRhaW5QdHIobWFya2VyKSwg
cHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gTlNJbnRlZ2VyIHsKLSAgICAg
ICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2Jq
ZWN0OwotICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxOU0ludGVnZXI+KFttYXJrZXJSZWYgPSBy
ZXRhaW5QdHIobWFya2VyUmVmKV0gKCkgLT4gTlNJbnRlZ2VyIHsKKyAgICAgICAgQVhUZXh0TWFy
a2VyIG1hcmtlciB7IG1hcmtlclJlZi5nZXQoKSB9OworICAgICAgICBpZiAoIW1hcmtlci5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKIAotICAgICAgICBpZiAoYXV0
byogY2FjaGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAg
IGF1dG8gY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNo
ZSwgbWFya2VyLmdldCgpKTsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VG
b3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zm
c2V0KTsKLSAgICAgICAgICAgIGlmICghcmFuZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5T
Tm90Rm91bmQ7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYWtlTlNSYW5nZShyYW5nZSkubG9jYXRp
b247Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKKyAgICAgICAgQVhU
ZXh0TWFya2VyUmFuZ2UgbWFya2VyUmFuZ2UgeyBtYXJrZXIsIG1hcmtlciB9OworICAgICAgICBh
dXRvIHJhbmdlID0gbWFya2VyUmFuZ2Uuc2ltcGxlUmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIHJh
bmdlID8gbWFrZU5TUmFuZ2UocmFuZ2UpLmxvY2F0aW9uIDogTlNOb3RGb3VuZDsKICAgICB9KTsK
IH0KIApAQCAtMjk2MSwyMCArMjk1NCwyMCBAQCAtIChBWFRleHRNYXJrZXJSYW5nZVJlZil0ZXh0
TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyCiAgICAg
ICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIGF1dG8g
Y2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNoZSwgdGV4
dE1hcmtlci5nZXQoKSk7CisgICAgICAgIEFYVGV4dE1hcmtlciBtYXJrZXIgeyB0ZXh0TWFya2Vy
LmdldCgpIH07CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAg
ICAgICBzd2l0Y2ggKHRleHRVbml0KSB7CiAgICAgICAgIGNhc2UgVGV4dFVuaXQ6OkxlZnRXb3Jk
OgotICAgICAgICAgICAgcmFuZ2UgPSBjYWNoZS0+bGVmdFdvcmRSYW5nZShjaGFyYWN0ZXJPZmZz
ZXQpOworICAgICAgICAgICAgcmFuZ2UgPSBjYWNoZS0+bGVmdFdvcmRSYW5nZShtYXJrZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVGV4dFVuaXQ6OlJpZ2h0V29yZDoKLSAg
ICAgICAgICAgIHJhbmdlID0gY2FjaGUtPnJpZ2h0V29yZFJhbmdlKGNoYXJhY3Rlck9mZnNldCk7
CisgICAgICAgICAgICByYW5nZSA9IGNhY2hlLT5yaWdodFdvcmRSYW5nZShtYXJrZXIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVGV4dFVuaXQ6OlNlbnRlbmNlOgotICAgICAg
ICAgICAgcmFuZ2UgPSBjYWNoZS0+c2VudGVuY2VGb3JDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVy
T2Zmc2V0KTsKKyAgICAgICAgICAgIHJhbmdlID0gY2FjaGUtPnNlbnRlbmNlRm9yQ2hhcmFjdGVy
T2Zmc2V0KG1hcmtlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUZXh0VW5p
dDo6UGFyYWdyYXBoOgotICAgICAgICAgICAgcmFuZ2UgPSBjYWNoZS0+cGFyYWdyYXBoRm9yQ2hh
cmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7CisgICAgICAgICAgICByYW5nZSA9IGNhY2hl
LT5wYXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQobWFya2VyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0yOTkyLDExICsyOTg1LDcgQEAgLSAoQVhUZXh0TWFya2VyUmFuZ2VSZWYpbGluZVRleHRNYXJr
ZXJSYW5nZUZvclRleHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZil0ZXh0TWEKICAgICAgICAgaWYg
KCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBhdXRv
KiBjYWNoZSA9IGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFj
YWNoZSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAgICAgQVhUZXh0TWFya2VyIG1h
cmtlcih0ZXh0TWFya2VyLmdldCgpKTsKKyAgICAgICAgQVhUZXh0TWFya2VyIG1hcmtlciB7IHRl
eHRNYXJrZXIuZ2V0KCkgfTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBv
c2l0aW9uUmFuZ2U7CiAgICAgICAgIHN3aXRjaCAodGV4dFVuaXQpIHsKICAgICAgICAgY2FzZSBU
ZXh0VW5pdDo6TGluZToKQEAgLTMwMTcsOSArMzAwNiw5IEBAIC0gKEFYVGV4dE1hcmtlclJhbmdl
UmVmKWxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyOihBWFRleHRNYXJrZXJSZWYpdGV4
dE1hCiAgICAgfSk7CiB9CiAKLS0gKEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyRm9yVGV4dE1h
cmtlcjooQVhUZXh0TWFya2VyUmVmKXRleHRNYXJrZXIgYXRVbml0OihUZXh0VW5pdCl0ZXh0VW5p
dAorLSAoQVhUZXh0TWFya2VyUmVmKXRleHRNYXJrZXJGb3JUZXh0TWFya2VyOihBWFRleHRNYXJr
ZXJSZWYpdGV4dE1hcmtlclJlZiBhdFVuaXQ6KFRleHRVbml0KXRleHRVbml0CiB7Ci0gICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVh
ZDxBWFRleHRNYXJrZXJSZWY+KFt0ZXh0TWFya2VyID0gcmV0YWluUHRyKHRleHRNYXJrZXIpLCAm
dGV4dFVuaXQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0
cjxBWFRleHRNYXJrZXJSZWY+IHsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPEFYVGV4dE1hcmtlclJlZj4oW3RleHRNYXJr
ZXJSZWYgPSByZXRhaW5QdHIodGV4dE1hcmtlclJlZiksICZ0ZXh0VW5pdCwgcHJvdGVjdGVkU2Vs
ZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPEFYVGV4dE1hcmtlclJlZj4gewog
ICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3Q7CiAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgIHJldHVy
biBuaWw7CkBAIC0zMDI4LDQxICszMDE3LDM3IEBAIC0gKEFYVGV4dE1hcmtlclJlZil0ZXh0TWFy
a2VyRm9yVGV4dE1hcmtlcjooQVhUZXh0TWFya2VyUmVmKXRleHRNYXJrZXIgYXRVbml0OihUCiAg
ICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIGF1
dG8gb2xkT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNoZSwgdGV4dE1h
cmtlci5nZXQoKSk7Ci0gICAgICAgIENoYXJhY3Rlck9mZnNldCBuZXdPZmZzZXQ7CisgICAgICAg
IEFYVGV4dE1hcmtlciBvbGRNYXJrZXIgeyB0ZXh0TWFya2VyUmVmLmdldCgpIH07CisgICAgICAg
IEFYVGV4dE1hcmtlciBuZXdNYXJrZXI7CiAgICAgICAgIHN3aXRjaCAodGV4dFVuaXQpIHsKICAg
ICAgICAgY2FzZSBUZXh0VW5pdDo6TmV4dFdvcmRFbmQ6Ci0gICAgICAgICAgICBuZXdPZmZzZXQg
PSBjYWNoZS0+bmV4dFdvcmRFbmRDaGFyYWN0ZXJPZmZzZXQob2xkT2Zmc2V0KTsKKyAgICAgICAg
ICAgIG5ld01hcmtlciA9IGNhY2hlLT5uZXh0V29yZEVuZENoYXJhY3Rlck9mZnNldChvbGRNYXJr
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVGV4dFVuaXQ6OlByZXZpb3Vz
V29yZFN0YXJ0OgotICAgICAgICAgICAgbmV3T2Zmc2V0ID0gY2FjaGUtPnByZXZpb3VzV29yZFN0
YXJ0Q2hhcmFjdGVyT2Zmc2V0KG9sZE9mZnNldCk7CisgICAgICAgICAgICBuZXdNYXJrZXIgPSBj
YWNoZS0+cHJldmlvdXNXb3JkU3RhcnRDaGFyYWN0ZXJPZmZzZXQob2xkTWFya2VyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRleHRVbml0OjpOZXh0U2VudGVuY2VFbmQ6Ci0g
ICAgICAgICAgICBuZXdPZmZzZXQgPSBjYWNoZS0+bmV4dFNlbnRlbmNlRW5kQ2hhcmFjdGVyT2Zm
c2V0KG9sZE9mZnNldCk7CisgICAgICAgICAgICBuZXdNYXJrZXIgPSBjYWNoZS0+bmV4dFNlbnRl
bmNlRW5kQ2hhcmFjdGVyT2Zmc2V0KG9sZE1hcmtlcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBUZXh0VW5pdDo6UHJldmlvdXNTZW50ZW5jZVN0YXJ0OgotICAgICAgICAgICAg
bmV3T2Zmc2V0ID0gY2FjaGUtPnByZXZpb3VzU2VudGVuY2VTdGFydENoYXJhY3Rlck9mZnNldChv
bGRPZmZzZXQpOworICAgICAgICAgICAgbmV3TWFya2VyID0gY2FjaGUtPnByZXZpb3VzU2VudGVu
Y2VTdGFydENoYXJhY3Rlck9mZnNldChvbGRNYXJrZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVGV4dFVuaXQ6Ok5leHRQYXJhZ3JhcGhFbmQ6Ci0gICAgICAgICAgICBuZXdP
ZmZzZXQgPSBjYWNoZS0+bmV4dFBhcmFncmFwaEVuZENoYXJhY3Rlck9mZnNldChvbGRPZmZzZXQp
OworICAgICAgICAgICAgbmV3TWFya2VyID0gY2FjaGUtPm5leHRQYXJhZ3JhcGhFbmRDaGFyYWN0
ZXJPZmZzZXQob2xkTWFya2VyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRl
eHRVbml0OjpQcmV2aW91c1BhcmFncmFwaFN0YXJ0OgotICAgICAgICAgICAgbmV3T2Zmc2V0ID0g
Y2FjaGUtPnByZXZpb3VzUGFyYWdyYXBoU3RhcnRDaGFyYWN0ZXJPZmZzZXQob2xkT2Zmc2V0KTsK
KyAgICAgICAgICAgIG5ld01hcmtlciA9IGNhY2hlLT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hh
cmFjdGVyT2Zmc2V0KG9sZE1hcmtlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBUZXh0VW5pdDo6TmV4dExpbmVFbmQ6IHsKLSAgICAgICAgICAgIGF1dG8gdmlzaWJsZVBvc2l0
aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgdGV4dE1hcmtlci5nZXQo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNo
ZSwgYmFja2luZ09iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pKTsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFRleHRVbml0OjpQcmV2aW91c0xpbmVTdGFydDogewot
ICAgICAgICAgICAgYXV0byB2aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyKGNhY2hlLCB0ZXh0TWFya2VyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNhY2hlLCBiYWNraW5nT2JqZWN0LT5wcmV2aW91c0xp
bmVTdGFydFBvc2l0aW9uKHZpc2libGVQb3NpdGlvbikpOwotICAgICAgICB9CisgICAgICAgIGNh
c2UgVGV4dFVuaXQ6Ok5leHRMaW5lRW5kOgorICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJG
b3JWaXNpYmxlUG9zaXRpb24oY2FjaGUsIGJhY2tpbmdPYmplY3QtPm5leHRMaW5lRW5kUG9zaXRp
b24ob2xkTWFya2VyKSk7CisgICAgICAgIGNhc2UgVGV4dFVuaXQ6OlByZXZpb3VzTGluZVN0YXJ0
OgorICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oY2FjaGUs
IGJhY2tpbmdPYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24ob2xkTWFya2VyKSk7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JD
aGFyYWN0ZXJPZmZzZXQoY2FjaGUsIG5ld09mZnNldCk7CisgICAgICAgIHJldHVybiBuZXdNYXJr
ZXIucGxhdGZvcm1EYXRhKCk7CiAgICAgfSk7CiB9CiAKQEAgLTMwOTYsOSArMzA4MSw5IEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgQVhUZXh0TWFya2VyUmVm
IHRleHRNYXJrZXIgPSBuaWw7CiAgICAgQVhUZXh0TWFya2VyUmFuZ2VSZWYgdGV4dE1hcmtlclJh
bmdlID0gbmlsOwotICAgIE5TTnVtYmVyKiBudW1iZXIgPSBuaWw7Ci0gICAgTlNBcnJheSogYXJy
YXkgPSBuaWw7Ci0gICAgTlNEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5ID0gbmlsOworICAgIE5TTnVt
YmVyICpudW1iZXIgPSBuaWw7CisgICAgTlNBcnJheSAqYXJyYXkgPSBuaWw7CisgICAgTlNEaWN0
aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gbmlsOwogICAgIFJlZlB0cjxBWENvcmVPYmplY3Q+IHVpRWxl
bWVudDsKICAgICBOU1BvaW50IHBvaW50ID0gTlNaZXJvUG9pbnQ7CiAgICAgYm9vbCBwb2ludFNl
dCA9IGZhbHNlOwpAQCAtMzI3MSwxOSArMzI1NiwyMSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0dXJuIChpZClbc2VsZiBsaW5lVGV4dE1hcmtlclJh
bmdlRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OkxpbmVdOwogCiAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkFYTWlzc3BlbGxpbmdUZXh0TWFya2Vy
UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmZGljdGlvbmFyeSwgcHJvdGVj
dGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CisgICAgICAg
IHJldHVybiAoaWQpQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21N
YWluVGhyZWFkPEFYVGV4dE1hcmtlclJhbmdlUmVmPihbJmRpY3Rpb25hcnksIHByb3RlY3RlZFNl
bGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxBWFRleHRNYXJrZXJSYW5nZVJl
Zj4gewogICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0
KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAg
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gYmFj
a2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwotICAgICAgICAgICAgaWYgKCFjYWNoZSkKKyAg
ICAgICAgICAgIGF1dG8gY3JpdGVyaWEgPSBtaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZShkaWN0aW9uYXJ5KTsKKyAgICAgICAgICAgIGlmICghY3JpdGVy
aWEuZmlyc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICAgICAgYXV0
byBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZShjYWNoZSwgZGljdGlvbmFyeSk7Ci0gICAgICAgICAgICBpZiAo
YXV0byBtaXNzcGVsbGluZ1JhbmdlID0gYmFja2luZ09iamVjdC0+bWlzc3BlbGxpbmdSYW5nZSgq
Y3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlhLnNlY29uZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoY2FjaGUsICptaXNzcGVsbGluZ1JhbmdlKTsK
KyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjcml0ZXJpYS5maXJzdC5zaW1wbGVSYW5nZSgpOwor
ICAgICAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCisg
ICAgICAgICAgICBpZiAoYXV0byBtaXNzcGVsbFJhbmdlID0gYmFja2luZ09iamVjdC0+bWlzc3Bl
bGxpbmdSYW5nZSgqcmFuZ2UsIGNyaXRlcmlhLnNlY29uZCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEFYVGV4dE1hcmtlclJhbmdlKCptaXNzcGVsbFJhbmdlKS5wbGF0Zm9ybURhdGEoKTsKICAg
ICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTMzMDEsNyArMzI4
OCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXR1
cm4gKGlkKVtzZWxmIF90ZXh0TWFya2VyRm9ySW5kZXg6W251bWJlciBpbnRlZ2VyVmFsdWVdXTsK
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpBWFVJRWxlbWVudEZvclRleHRN
YXJrZXJBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYVGV4dE1hcmtlciBtYXJrZXIodGV4dE1hcmtl
cik7CisgICAgICAgIEFYVGV4dE1hcmtlciBtYXJrZXIgeyB0ZXh0TWFya2VyIH07CiAgICAgICAg
IFJlZlB0ciBvYmplY3QgPSBtYXJrZXIub2JqZWN0KCk7CiAgICAgICAgIGlmICghb2JqZWN0KQog
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTMzMzAsOSArMzMxNyw3IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVj
dCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICAgICAgaWYg
KCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAg
ICAgYXV0byB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihiYWNraW5n
T2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIuZ2V0KCkpOwotICAgICAgICAgICAg
cmV0dXJuIGJhY2tpbmdPYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5saW5lRm9yUG9zaXRpb24oQVhUZXh0TWFya2Vy
IHsgdGV4dE1hcmtlci5nZXQoKSB9KTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBAKHJl
c3VsdCk7CiAgICAgfQpAQCAtMzM1Nyw3ICszMzQyLDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgICAgICAgICBhdXRvIHJhbmdlID0gcmFu
Z2VGb3JUZXh0TWFya2VyUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0
TWFya2VyUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgQVhUZXh0TWFya2VyUmFuZ2UgbWFya2Vy
UmFuZ2UgeyB0ZXh0TWFya2VyUmFuZ2UuZ2V0KCkgfTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2Ug
PSBtYXJrZXJSYW5nZS5zaW1wbGVSYW5nZSgpOwogICAgICAgICAgICAgcmV0dXJuIHJhbmdlID8g
YmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoKnJhbmdlKSA6IFN0cmluZygpOwogICAgICAg
ICB9KTsKICAgICB9CkBAIC0zMzgyLDcgKzMzNjgsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKIAotICAgICAgICAgICAgYXV0byByYW5nZSA9IHJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4
dE1hcmtlclJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIEFYVGV4dE1hcmtlclJhbmdlIG1hcmtl
clJhbmdlIHsgdGV4dE1hcmtlclJhbmdlLmdldCgpIH07CisgICAgICAgICAgICBhdXRvIHJhbmdl
ID0gbWFya2VyUmFuZ2Uuc2ltcGxlUmFuZ2UoKTsKICAgICAgICAgICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CiAKQEAgLTM0OTksOSArMzQ4Niw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0byog
Y2FjaGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAo
IWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAgICAgICAgIEFYVGV4
dE1hcmtlciBtYXJrZXIodGV4dE1hcmtlci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV4
dFRleHRNYXJrZXIoY2FjaGUsIG1hcmtlcikuYnJpZGdpbmdBdXRvcmVsZWFzZSgpOworICAgICAg
ICAgICAgcmV0dXJuIG5leHRUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXIgeyB0ZXh0TWFy
a2VyLmdldCgpIH0pLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsKICAgICAgICAgfSk7CiAgICAgfQog
CkBAIC0zNTE0LDkgKzM0OTksNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19F
TkQKICAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNo
ZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgICAgICAgICBBWFRleHRNYXJrZXIgbWFya2VyKHRleHRNYXJrZXIuZ2V0KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzVGV4dE1hcmtlcihjYWNoZSwgbWFya2VyKS5icmlk
Z2luZ0F1dG9yZWxlYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNUZXh0TWFya2Vy
KGNhY2hlLCBBWFRleHRNYXJrZXIgeyB0ZXh0TWFya2VyLmdldCgpIH0pLmJyaWRnaW5nQXV0b3Jl
bGVhc2UoKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTY3LDE1ICszNTUwLDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBhdXRvKiBiYWNr
aW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAgICAgICAg
ICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgICAgICAgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7
Ci0gICAgICAgICAgICBpZiAoIWNhY2hlKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICAgICAgICAgIGF1dG8gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJr
ZXIoY2FjaGUsIHRleHRNYXJrZXIuZ2V0KCkpOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgdnBSYW5nZSA9IGJhY2tpbmdPYmplY3QtPnN0eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNp
YmxlUG9zKTsKLQotICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlz
aWJsZVBvc2l0aW9ucyhjYWNoZSwgdnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOworICAgICAg
ICAgICAgcmV0dXJuIEFYVGV4dE1hcmtlclJhbmdlIHsgYmFja2luZ09iamVjdC0+c3R5bGVSYW5n
ZUZvclBvc2l0aW9uKEFYVGV4dE1hcmtlciB7IHRleHRNYXJrZXIuZ2V0KCkgfSkgfS5wbGF0Zm9y
bURhdGEoKS5icmlkZ2luZ0F1dG9yZWxlYXNlKCk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAt
MzU4NSw3ICszNTYwLDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5nZShiYWNr
aW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZS5nZXQoKSk7CisgICAg
ICAgICAgICBBWFRleHRNYXJrZXJSYW5nZSBtYXJrZXJSYW5nZSB7IHRleHRNYXJrZXJSYW5nZS5n
ZXQoKSB9OworICAgICAgICAgICAgYXV0byByYW5nZSA9IG1hcmtlclJhbmdlLnNpbXBsZVJhbmdl
KCk7CiAgICAgICAgICAgICByZXR1cm4gcmFuZ2UgPyBBWE9iamVjdENhY2hlOjpsZW5ndGhGb3JS
YW5nZSgqcmFuZ2UpIDogMDsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBAKGxlbmd0aCk7
CkBAIC0zNTkzLDEzICszNTY5LDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogCiAgICAgLy8gVXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIChzbyBmYXIpLgogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRN
YXJrZXJSYW5nZUF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQVhUZXh0TWFya2VyUmFuZ2UgYXhUZXh0
TWFya2VyUmFuZ2UgeyB0ZXh0TWFya2VyUmFuZ2UgfTsKLSAgICAgICAgcmV0dXJuIGF4VGV4dE1h
cmtlclJhbmdlLnN0YXJ0KCkucGxhdGZvcm1EYXRhKCkuYnJpZGdpbmdBdXRvcmVsZWFzZSgpOwor
ICAgICAgICBBWFRleHRNYXJrZXJSYW5nZSBtYXJrZXJSYW5nZSB7IHRleHRNYXJrZXJSYW5nZSB9
OworICAgICAgICByZXR1cm4gbWFya2VyUmFuZ2Uuc3RhcnQoKS5wbGF0Zm9ybURhdGEoKS5icmlk
Z2luZ0F1dG9yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZV0pIHsKLSAg
ICAgICAgQVhUZXh0TWFya2VyUmFuZ2UgYXhUZXh0TWFya2VyUmFuZ2UgeyB0ZXh0TWFya2VyUmFu
Z2UgfTsKLSAgICAgICAgcmV0dXJuIGF4VGV4dE1hcmtlclJhbmdlLmVuZCgpLnBsYXRmb3JtRGF0
YSgpLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsKKyAgICAgICAgQVhUZXh0TWFya2VyUmFuZ2UgbWFy
a2VyUmFuZ2UgeyB0ZXh0TWFya2VyUmFuZ2UgfTsKKyAgICAgICAgcmV0dXJuIG1hcmtlclJhbmdl
LmVuZCgpLnBsYXRmb3JtRGF0YSgpLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zmc2V0LWZyb20tdXBzdHJlYW0tcG9zaXRpb24tZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvY2hhcmFjdGVyLW9mZnNldC1m
cm9tLXVwc3RyZWFtLXBvc2l0aW9uLWV4cGVjdGVkLnR4dAppbmRleCA3NDk5ODY3MjFkMGYuLjA5
N2UwYjA2NjJiNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvY2hh
cmFjdGVyLW9mZnNldC1mcm9tLXVwc3RyZWFtLXBvc2l0aW9uLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zmc2V0LWZyb20tdXBzdHJl
YW0tcG9zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0xLDEzICsxLDEwIEBACi1Mb3JlbSBpcHN1bSB2
aXZhbXVzIG5pYmggdXJuYSBtb2xsaXMgYXQgYWxpcXVhbSB0YWNpdGksIGV0aWFtIGFyY3UgbWkg
c2VtcGVyIG5vc3RyYSB0YWNpdGkgbnVsbGEgZG9sb3IKIFRoaXMgdGVzdHMgdGhhdCBDaGFyYWN0
ZXJPZmZzZXQgdGhhdCBjb21lcyBmcm9tIGFuIHVwc3RyZWFtIFZpc2libGVQb3NpdGlvbiBpcyBj
b3JyZWN0LgogCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLQogRmlyc3QgTGluZTogTG9y
ZW0gaXBzdW0gdml2YW11cyBuaWJoCiBTZWNvbmQgTGluZTogdXJuYSBtb2xsaXMgYXQgYWxpcXVh
bSB0YWNpdGksCiBbZmlyc3RFbmQsIHNlY29uZFN0YXJ0XTogJ3NwYWNlJworCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKLQorTG9yZW0gaXBzdW0gdml2
YW11cyBuaWJoIHVybmEgbW9sbGlzIGF0IGFsaXF1YW0gdGFjaXRpLCBldGlhbSBhcmN1IG1pIHNl
bXBlciBub3N0cmEgdGFjaXRpIG51bGxhIGRvbG9yCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zmc2V0LWZyb20tdXBzdHJlYW0tcG9zaXRpb24u
aHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2NoYXJhY3Rlci1vZmZzZXQtZnJv
bS11cHN0cmVhbS1wb3NpdGlvbi5odG1sCmluZGV4IDc1YmFhOGNiM2Q2OS4uOGNjYzUwMThkMGFk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zm
c2V0LWZyb20tdXBzdHJlYW0tcG9zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zmc2V0LWZyb20tdXBzdHJlYW0tcG9zaXRpb24uaHRtbApA
QCAtMSw0NSArMSwzOSBAQAogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgotPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJv
ZHk+CiAKIDxkaXYgaWQ9ImNvbnRhaW5lciI+Ci0KIDxkaXYgaWQ9InRleHQiICBzdHlsZT0id2lk
dGg6MjAwcHg7IiBjb250ZW50ZWRpdGFibGU9InRydWUiPkxvcmVtIGlwc3VtIHZpdmFtdXMgbmli
aCB1cm5hIG1vbGxpcyBhdCBhbGlxdWFtIHRhY2l0aSwgZXRpYW0gYXJjdSBtaSBzZW1wZXIgbm9z
dHJhIHRhY2l0aSBudWxsYSBkb2xvcjwvZGl2PgotCi08cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
LTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9kaXY+CiAKIDxzY3JpcHQ+Ci0gICAgZGVzY3Jp
cHRpb24oIlRoaXMgdGVzdHMgdGhhdCBDaGFyYWN0ZXJPZmZzZXQgdGhhdCBjb21lcyBmcm9tIGFu
IHVwc3RyZWFtIFZpc2libGVQb3NpdGlvbiBpcyBjb3JyZWN0LiIpOwotICAgIAotICAgIGlmICh3
aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKLSAgICAgICAgCi0gICAgICAgIHZhciBk
aXYgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQi
KTsKLSAgICAgICAgdmFyIHRleHQgPSBkaXYuY2hpbGRBdEluZGV4KDApOwotICAgICAgICB2YXIg
dGV4dFJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOwotICAgICAg
ICAKLSAgICAgICAgdmFyIHN0YXJ0ID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dFJhbmdlKTsKLSAgICAgICAgdmFyIGZpcnN0TGluZSA9IHRleHQubGluZVRleHRN
YXJrZXJSYW5nZUZvclRleHRNYXJrZXIoc3RhcnQpOwotICAgICAgICB2YXIgZmlyc3RFbmQgPSB0
ZXh0LmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoZmlyc3RMaW5lKTsKLSAgICAgICAg
ZGVidWcoIkZpcnN0IExpbmU6ICIgKyB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShmaXJz
dExpbmUpKTsKLSAgICAgICAgCi0gICAgICAgIHZhciBuZXh0ID0gdGV4dC5uZXh0VGV4dE1hcmtl
cihmaXJzdEVuZCk7Ci0gICAgICAgIHZhciBzZWNvbmRMaW5lID0gdGV4dC5saW5lVGV4dE1hcmtl
clJhbmdlRm9yVGV4dE1hcmtlcihuZXh0KTsKLSAgICAgICAgdmFyIHNlY29uZFN0YXJ0ID0gdGV4
dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2Uoc2Vjb25kTGluZSk7Ci0gICAgICAg
IGRlYnVnKCJTZWNvbmQgTGluZTogIiArIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHNl
Y29uZExpbmUpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgZmlyc3RFbmQgc2hvdWxkIGNv
bnRhaW4gYSB1cHN0cmVhbSBwb3NpdGlvbi4KLSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgZmlyc3RFbmQgZG9lcyBub3QgZXF1YWwgdG8gc2Vjb25kU3RhcnQgYWZ0ZXIKLSAgICAgICAg
Ly8gY29udmVydGluZyB0byBDaGFyYWN0ZXJPZmZzZXQuCi0gICAgICAgIHZhciBtYXJrZXJSYW5n
ZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhzZWNvbmRTdGFydCwgZmlyc3RFbmQp
OwotICAgICAgICB2YXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGRlYnVnKCJbZmlyc3RFbmQsIHNl
Y29uZFN0YXJ0XTogIiArIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdl
KS5yZXBsYWNlKHNwYWNlLCAiJ3NwYWNlJyIpKTsgICAgICAgIAotICAgIH0KLTwvc2NyaXB0Pgor
bGV0IG91dHB1dCA9ICJUaGlzIHRlc3RzIHRoYXQgQ2hhcmFjdGVyT2Zmc2V0IHRoYXQgY29tZXMg
ZnJvbSBhbiB1cHN0cmVhbSBWaXNpYmxlUG9zaXRpb24gaXMgY29ycmVjdC5cblxuIjsKKworaWYg
KHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIGxldCB0ZXh0ID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0IikuY2hpbGRBdElu
ZGV4KDApOworICAgIGxldCB0ZXh0UmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1l
bnQodGV4dCk7CiAKLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKyAgICBsZXQgc3RhcnQgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRN
YXJrZXJSYW5nZSh0ZXh0UmFuZ2UpOworICAgIGxldCBmaXJzdExpbmUgPSB0ZXh0LmxpbmVUZXh0
TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKHN0YXJ0KTsKKyAgICBsZXQgZmlyc3RFbmQgPSB0ZXh0
LmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoZmlyc3RMaW5lKTsKKyAgICBvdXRwdXQg
Kz0gYEZpcnN0IExpbmU6ICR7dGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZmlyc3RMaW5l
KX1cbmA7CisKKyAgICBsZXQgbmV4dCA9IHRleHQubmV4dFRleHRNYXJrZXIoZmlyc3RFbmQpOwor
ICAgIGxldCBzZWNvbmRMaW5lID0gdGV4dC5saW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
cihuZXh0KTsKKyAgICBsZXQgc2Vjb25kU3RhcnQgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZShzZWNvbmRMaW5lKTsKKyAgICBvdXRwdXQgKz0gYFNlY29uZCBMaW5lOiAk
e3RleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHNlY29uZExpbmUpfVxuYDsKKworICAgIC8v
IEhlcmUgZmlyc3RFbmQgc2hvdWxkIGNvbnRhaW4gYSB1cHN0cmVhbSBwb3NpdGlvbi4KKyAgICAv
LyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBmaXJzdEVuZCBkb2VzIG5vdCBlcXVhbCB0byBzZWNvbmRT
dGFydCBhZnRlcgorICAgIC8vIGNvbnZlcnRpbmcgdG8gQ2hhcmFjdGVyT2Zmc2V0LgorICAgIGxl
dCBtYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhmaXJzdEVuZCwg
c2Vjb25kU3RhcnQpOworICAgIG91dHB1dCArPSBgW2ZpcnN0RW5kLCBzZWNvbmRTdGFydF06ICR7
dGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpLnJlcGxhY2UoJyAnLCAi
J3NwYWNlJyIpfVxuYDsKKworICAgIGRlYnVnKG91dHB1dCk7Cit9Cis8L3NjcmlwdD4KIDwvYm9k
eT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2No
YXJhY3Rlci1vZmZzZXQtdmlzaWJsZS1wb3NpdGlvbi1jb252ZXJzaW9uLXdpdGgtZW1vamktZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvY2hhcmFjdGVyLW9mZnNl
dC12aXNpYmxlLXBvc2l0aW9uLWNvbnZlcnNpb24td2l0aC1lbW9qaS1leHBlY3RlZC50eHQKaW5k
ZXggYzIzNzI5ZjJiNzU0Li4zMmQyYjA2NWJlNzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL2NoYXJhY3Rlci1vZmZzZXQtdmlzaWJsZS1wb3NpdGlvbi1jb252ZXJz
aW9uLXdpdGgtZW1vamktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL2NoYXJhY3Rlci1vZmZzZXQtdmlzaWJsZS1wb3NpdGlvbi1jb252ZXJzaW9uLXdpdGgt
ZW1vamktZXhwZWN0ZWQudHh0CkBAIC0xLDExICsxLDggQEAKLUhpIPCfmI4KIFRoaXMgdGVzdHMg
dGhhdCBDaGFyYWN0ZXJPZmZzZXQgYW5kIFZpc2libGVQb3NpdGlvbiBjb252ZXJ0IGNvcnJlY3Rs
eSB3aGVuIHRoZXJlIGFyZSBjb21wb3NlZCBjaGFyYWN0ZXJzLgogCi1PbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCitQQVNTOiB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRleHRN
YXJrZXJSYW5nZUZvck1hcmtlcnMoc3RhcnRNYXJrZXIsIGVuZE1hcmtlcikpID09PSAnSGkg8J+Y
jicKIAotCi1IaSDwn5iOCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1Qg
Q09NUExFVEUKLQorSGkg8J+YjiB3b3JsZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvY2hhcmFjdGVyLW9mZnNldC12aXNpYmxlLXBvc2l0aW9uLWNvbnZlcnNpb24t
d2l0aC1lbW9qaS5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvY2hhcmFjdGVy
LW9mZnNldC12aXNpYmxlLXBvc2l0aW9uLWNvbnZlcnNpb24td2l0aC1lbW9qaS5odG1sCmluZGV4
IDQwMzU5M2Y5YzY3OC4uOGEyOTEyMjcyY2QxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zmc2V0LXZpc2libGUtcG9zaXRpb24tY29udmVyc2lv
bi13aXRoLWVtb2ppLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvY2hh
cmFjdGVyLW9mZnNldC12aXNpYmxlLXBvc2l0aW9uLWNvbnZlcnNpb24td2l0aC1lbW9qaS5odG1s
CkBAIC0xLDQzICsxLDM4IEBACiA8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+CiA8aHRtbD4KLSAgICA8aGVhZD48bWV0YSBjaGFyc2V0PSJVVEYtOCI+PC9oZWFk
PgotICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgotICAgIDxib2R5IGlkPSJib2R5IiB0YWJpbmRleD0iMCI+Ci0gICAgICAgIDxkaXYgdGFi
aW5kZXg9IjAiIGlkPSJ0ZXh0IiBjb250ZW50ZWRpdGFibGU9dHJ1ZT4KLSAgICAgICAgSGkg8J+Y
jgotICAgICAgICA8L2Rpdj4KLQotICAgICAgICA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KLSAg
ICAgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci0KLSAgICAgICAgPHNjcmlwdD4KLQotICAg
ICAgICAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBDaGFyYWN0ZXJPZmZzZXQgYW5k
IFZpc2libGVQb3NpdGlvbiBjb252ZXJ0IGNvcnJlY3RseSB3aGVuIHRoZXJlIGFyZSBjb21wb3Nl
ZCBjaGFyYWN0ZXJzLiIpOwotCi0gICAgICAgICAgICB2YXIgaW5kZXggPSAwOwotICAgICAgICAg
ICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgewotICAgICAgICAgICAgICAg
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSh0cnVl
KTsKLSAgICAgICAgICAgICAgICB2YXIgd2ViQXJlYSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LnJvb3RFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgICAgICAgICB3ZWJBcmVhLnNl
dEJvb2xBdHRyaWJ1dGVWYWx1ZSgiQVhDYXJldEJyb3dzaW5nRW5hYmxlZCIsIHRydWUpOwotCi0g
ICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKS5mb2N1cygpOwot
ICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJ0ZXh0Iik7Ci0KLSAgICAgICAgICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCJyaWdodEFycm93Iik7Ci0gICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93
bigicmlnaHRBcnJvdyIpOwotICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oInJp
Z2h0QXJyb3ciKTsKLSAgICAgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJyaWdodEFy
cm93Iik7Ci0gICAgICAgICAgICAgICAgdmFyIHRleHRNYXJrZXJSYW5nZSA9IHRleHQuc2VsZWN0
ZWRUZXh0TWFya2VyUmFuZ2UoKTsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudFJhbmdlID0g
dGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOwotICAgICAgICAgICAgICAgIHZh
ciBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKGVs
ZW1lbnRSYW5nZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGVuZE1hcmtlciA9IHRleHQuZW5kVGV4
dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOwotICAgICAgICAgICAg
ICAgIGRlYnVnKHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRleHQudGV4dE1hcmtlclJh
bmdlRm9yTWFya2VycyhlbmRNYXJrZXIsIHN0YXJ0TWFya2VyKSkpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICA8L3NjcmlwdD4KLQotICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci0KLSAgICA8L2JvZHk+Cis8aGVhZD4K
KzxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvYWNj
ZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IHRhYmlu
ZGV4PSIwIiBpZD0idGV4dCIgY29udGVudGVkaXRhYmxlPXRydWU+CitIaSDwn5iOIHdvcmxkCis8
L2Rpdj4KKworPHNjcmlwdD4KK2xldCBvdXRwdXQgPSAiVGhpcyB0ZXN0cyB0aGF0IENoYXJhY3Rl
ck9mZnNldCBhbmQgVmlzaWJsZVBvc2l0aW9uIGNvbnZlcnQgY29ycmVjdGx5IHdoZW4gdGhlcmUg
YXJlIGNvbXBvc2VkIGNoYXJhY3RlcnMuXG5cbiI7CisKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dCIpLmZvY3Vz
KCk7CisgICAgdmFyIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInRleHQiKTsKKworICAgIC8vIFNlbmQgNCByaWdodEFycm93cyB0byBtb3ZlIHRo
ZSBpbnNlcnRpb24gcG9pbnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0IHRvIHBhc3Nl
ZCB0aGUgZW1vamkuCisgICAgZXZlbnRTZW5kZXIua2V5RG93bigicmlnaHRBcnJvdyIpOworICAg
IGV2ZW50U2VuZGVyLmtleURvd24oInJpZ2h0QXJyb3ciKTsKKyAgICBldmVudFNlbmRlci5rZXlE
b3duKCJyaWdodEFycm93Iik7CisgICAgZXZlbnRTZW5kZXIua2V5RG93bigicmlnaHRBcnJvdyIp
OworCisgICAgbGV0IHNlbGVjdGlvblJhbmdlID0gdGV4dC5zZWxlY3RlZFRleHRNYXJrZXJSYW5n
ZSgpOworICAgIGxldCBlbGVtZW50UmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1l
bnQodGV4dCk7CisgICAgdmFyIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyUmFuZ2UoZWxlbWVudFJhbmdlKTsKKyAgICB2YXIgZW5kTWFya2VyID0gdGV4dC5l
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHNlbGVjdGlvblJhbmdlKTsKKyAgICAvLyBU
aGUgcmFuZ2UgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBlbGVtZW50IHRvIHRoZSBpbnNlcnRp
b24gcG9pbnQgbXVzdCBiZSAnSGkg8J+YjicuCisgICAgb3V0cHV0ICs9IGV4cGVjdCgidGV4dC5z
dHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0
YXJ0TWFya2VyLCBlbmRNYXJrZXIpKSIsICInSGkg8J+YjiciKTsKKworICAgIGRlYnVnKG91dHB1
dCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KIDwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvbGlzdG1hcmtlci1zdWZmaXgtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvbGlzdG1hcmtlci1zdWZmaXgtZXhwZWN0ZWQu
dHh0CmluZGV4IDMzNzA0ODUzZTM5Mi4uYmUzNTFkMzFmYTQ0IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9saXN0bWFya2VyLXN1ZmZpeC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvbGlzdG1hcmtlci1zdWZmaXgtZXhwZWN0
ZWQudHh0CkBAIC0xLDEzICsxLDEwIEBACi1pdGVtIDEKLWl0ZW0gMgogVGhpcyB0ZXN0IG1ha2Vz
IHN1cmUgdGhlIHJpZ2h0IHN1ZmZpeCBpcyByZXR1cm5lZCB3aGVuIGZldGNoaW5nIHRleHQgbWFy
a2VyIHN0cmluZ3MgZm9yIGxpc3QgaXRlbXMuCiAKLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
LQorUEFTUzogbGlzdDEuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRleHRSYW5nZSkgPT09IGAk
e2J1bGxldFN0cmluZ30gaXRlbSAxYAorUEFTUzogbGlzdDIuc3RyaW5nRm9yVGV4dE1hcmtlclJh
bmdlKHRleHRSYW5nZSkgPT09ICcxLiBpdGVtIDInCiAKLVBBU1MgbGlzdDEuc3RyaW5nRm9yVGV4
dE1hcmtlclJhbmdlKHRleHRSYW5nZSkgaXMgYnVsbGV0U3RyaW5nICsgJyBpdGVtIDEnCi1QQVNT
IGxpc3QyLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0UmFuZ2UpIGlzICcxLiBpdGVtIDIn
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKLQoraXRl
bSAxCitpdGVtIDIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2xp
c3RtYXJrZXItc3VmZml4Lmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9saXN0
bWFya2VyLXN1ZmZpeC5odG1sCmluZGV4IDRiZTNmNWJmZGM2Yy4uOWNhZDI2ODhmZjcxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9saXN0bWFya2VyLXN1ZmZpeC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2xpc3RtYXJrZXItc3VmZml4
Lmh0bWwKQEAgLTEsMTEgKzEsOCBAQAogPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgogPGh0bWw+CiA8aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotPC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+
CiA8Ym9keT4KIApAQCAtMTcsMjkgKzE0LDIxIEBAIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKIDxs
aSBpZD0ibGlzdGl0ZW0yIj5pdGVtIDI8L2xpPgogPC9vbD4KIAotCi08cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotCiA8c2NyaXB0PgorbGV0IG91dHB1
dCA9ICJUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGUgcmlnaHQgc3VmZml4IGlzIHJldHVybmVkIHdo
ZW4gZmV0Y2hpbmcgdGV4dCBtYXJrZXIgc3RyaW5ncyBmb3IgbGlzdCBpdGVtcy5cblxuIjsKIAot
ICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGUgcmlnaHQgc3VmZml4IGlz
IHJldHVybmVkIHdoZW4gZmV0Y2hpbmcgdGV4dCBtYXJrZXIgc3RyaW5ncyBmb3IgbGlzdCBpdGVt
cy4iKTsKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB2YXIgbGlz
dDEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImxpc3Rp
dGVtMSIpOworICAgIHZhciB0ZXh0UmFuZ2UgPSBsaXN0MS50ZXh0TWFya2VyUmFuZ2VGb3JFbGVt
ZW50KGxpc3QxKTsKKyAgICB2YXIgYnVsbGV0U3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZSgw
eDIwMjIpOworICAgIG91dHB1dCArPSBleHBlY3QoImxpc3QxLnN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZSh0ZXh0UmFuZ2UpIiwgImAke2J1bGxldFN0cmluZ30gaXRlbSAxYCIpOwogCi0gICAgaWYg
KHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgewotICAgICAgICB2YXIgbGlzdDEgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImxpc3RpdGVtMSIp
OwotICAgICAgICB2YXIgdGV4dFJhbmdlID0gbGlzdDEudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVu
dChsaXN0MSk7Ci0gICAgICAgIHZhciBidWxsZXRTdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2Rl
KDB4MjAyMik7Ci0gICAgICAgIHNob3VsZEJlKCJsaXN0MS5zdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2UodGV4dFJhbmdlKSIsICJidWxsZXRTdHJpbmcgKyAnIGl0ZW0gMSciKTsKLQotICAgICAgICB2
YXIgbGlzdDIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQo
Imxpc3RpdGVtMiIpOwotICAgICAgICB2YXIgdGV4dFJhbmdlID0gbGlzdDIudGV4dE1hcmtlclJh
bmdlRm9yRWxlbWVudChsaXN0Mik7Ci0gICAgICAgIHNob3VsZEJlKCJsaXN0Mi5zdHJpbmdGb3JU
ZXh0TWFya2VyUmFuZ2UodGV4dFJhbmdlKSIsICInMS4gaXRlbSAyJyIpOwotICAgIH0KKyAgICB2
YXIgbGlzdDIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQo
Imxpc3RpdGVtMiIpOworICAgIHRleHRSYW5nZSA9IGxpc3QyLnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQobGlzdDIpOworICAgIG91dHB1dCArPSBleHBlY3QoImxpc3QyLnN0cmluZ0ZvclRleHRN
YXJrZXJSYW5nZSh0ZXh0UmFuZ2UpIiwgIicxLiBpdGVtIDInIik7CiAKKyAgICBkZWJ1ZyhvdXRw
dXQpOworfQogPC9zY3JpcHQ+Ci0KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KLQogPC9ib2R5PgogPC9odG1sPgotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyL3RleHQtbWFya2VyLXByZXZpb3Vz
LW5leHQuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4dC1t
YXJrZXItcHJldmlvdXMtbmV4dC5odG1sCmluZGV4IDM4ZjEzZWQ3YTNlYy4uODYwOTYyNjFmZmQ5
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyL3RleHQt
bWFya2VyLXByZXZpb3VzLW5leHQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3RleHQtbWFya2VyL3RleHQtbWFya2VyLXByZXZpb3VzLW5leHQuaHRtbApAQCAtMTQ3LDcgKzE0
Nyw3IEBAIGYKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspCiAgICAgICAgICAg
ICBjdXJyZW50TWFya2VyID0gdGV4dDMucHJldmlvdXNUZXh0TWFya2VyKGN1cnJlbnRNYXJrZXIp
OwogICAgICAgICBtYXJrZXIyID0gY3VycmVudE1hcmtlcjsKLSAgICAgICAgbWFya2VyUmFuZ2Ug
PSB0ZXh0My50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKG1hcmtlcjEsIG1hcmtlcjIpOworICAg
ICAgICBtYXJrZXJSYW5nZSA9IHRleHQzLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMobWFya2Vy
MiwgbWFya2VyMSk7CiAgICAgICAgIG91dHB1dCArPSBleHBlY3QoInRleHQzLnN0cmluZ0ZvclRl
eHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkiLCAiJ3NlbCciKTsKIAogICAgICAgICAvLyBDaGVj
ayB0aGUgY2FzZSB3aXRoIHBhc3N3b3JkIGZpZWxkLgpAQCAtMjI5LDcgKzIyOSw3IEBAIGYKICAg
ICAgICAgICAgIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1hcmtlcjsKICAgICAgICAgICAgIGN1
cnJlbnRNYXJrZXIgPSB0ZXh0LnByZXZpb3VzVGV4dE1hcmtlcihjdXJyZW50TWFya2VyKTsKICAg
ICAgICAgfQotICAgICAgICBtYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFy
a2VycyhwcmV2aW91c01hcmtlciwgY3VycmVudE1hcmtlcikKKyAgICAgICAgbWFya2VyUmFuZ2Ug
PSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoY3VycmVudE1hcmtlcixwcmV2aW91c01h
cmtlcik7CiAgICAgICAgIG91dHB1dCArPSBleHBlY3QoInRleHQuc3RyaW5nRm9yVGV4dE1hcmtl
clJhbmdlKG1hcmtlclJhbmdlKSIsICInXHVGRkZDJyIpOwogCiAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjb250ZW50Iikuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>465712</attachid>
            <date>2023-03-31 13:33:08 -0700</date>
            <delta_ts>2023-04-01 09:46:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-254817-20230331163307.patch</filename>
            <type>text/plain</type>
            <size>39550</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">RnJvbSA2ZmE3Zjg0OTg1OTBlYTZiMDY5M2FhNDFmNTE2MzkxODQyMTdiOTM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgR29uemFsZXogPGFuZHJlc2dfMjJAYXBwbGUuY29t
PgpEYXRlOiBUdWUsIDI4IE1hciAyMDIzIDEwOjI4OjAzIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0g
QVg6IE1vdmUgQVhUZXh0TWFya2VyUmFuZ2VGb3JVSUVsZW1lbnQgb2ZmIG9mIHRoZSBtYWluIHRo
cmVhZAogZm9yIHRob3NlIG9iamVjdHMgY2FjaGluZyBBdHRyaWJ1dGVkU3RyaW5ncy4KIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTQ4MTcgPHJkYXI6Ly9wcm9ibGVt
LzEwNzQ3Mzc3Nj4KClJldmlld2VkIGJ5IFR5bGVyIFdpbGNvY2suCgpJZiBhbiBJc29sYXRlZE9i
amVjdCBoYXMgYSBjYWNoZWQgQXR0cmlidXRlZFN0cmluZywgdGhpcyBzdHJpbmcgcmVwcmVzZW50
cyB0aGUgb2JqZWN0IGFuZCB0aGUgVGV4dE1hcmtlclJhbmdlIGZvciB0aGUgb2JqZWN0IGlzIG5v
dyBjcmVhdGVkIGFzIG9mZnNldHMgaW50byB0aGF0IHN0cmluZyB3aXRob3V0IGhhdmluZyB0byBo
aXQgdGhlIG1haW4gdGhyZWFkLiBBcyBhIGNvbnNlcXVlbmNlLCAgdGhlIFRleHRNYXJrZXJzIGNy
ZWF0ZWQgdGhpcyB3YXkgd2lsbCBoYXZlIG5vIHJlZmVyZW5jZSB0byBET00gTm9kZXMuIFRvIGtl
ZXAgIHRoZXNlIFRleHRNYXJrZXJzIGFuZCBUZXh0TWFya2VyUmFuZ2VzIHdvcmtpbmcgaW4gdGhv
c2UgZnVuY3Rpb25zIHdoZXJlIHdlIHN0aWxsIGdvIHRvIHRoZSBtYWluIHRocmVhZCBhbmQgcmVs
eSBvbiB0aGUgTm9kZSByZWZlcmVuY2VzLCB3ZSBhZGRlZCB0aGUgQVhUZXh0TWFya2VyOjpzZXRO
b2RlIG1ldGhvZCB0byBzZXQgdGhlIE5vZGUgcmVmZXJlbmNlIGluIGEgVGV4dE1hcmtlciB0aGF0
IGNsb25lcyBvbmUgdGhhdCB3YXMgY3JlYXRlZCBvbiB0aGUgQVggdGhyZWFkLgoKRml4ZWQgQVhU
ZXh0TWFya2VyLnNpbXBsZVJhbmdlKCkgYnkgY3JlYXRpbmcgdGhlIEJvdW5kYXJ5UG9pbnRzIGZy
b20gdGhlIENoYXJhY3Rlck9mZnNldHMgaW5zdGVhZCBvZiBmcm9tIHRoZSBWaXNpYmxlUG9zaXRp
b25zLgoKQWxsIHRoZSBBUEkgbWV0aG9kcyBpbXBsZW1lbnRlZCBpbiBbV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpd
IHRoYXQgdGFrZSBhIFRleHRNYXJrZXIgb3IgYSBUZXh0TWFya2VyUmFuZ2UgYXMgYSBwYXJhbWV0
ZXIgaGFkIHRvIGJlIG1vZGlmaWVkIGFjY29yZGluZ2x5LgoKU2V2ZXJhbCB0ZXN0cyB3ZXJlIGNs
ZWFuZWQgdXAgYW5kIGJyb3VnaHQgdXAgdG8gb3VyIGN1cnJlbnQgY29kaW5nIGNvbnZlbnRpb25z
LgotLS0KIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oICB8ICAg
MSArCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAgfCAgNTYg
KysrKysrLQogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaCAgIHwg
IDE2ICstCiAuLi4vYWNjZXNzaWJpbGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbSAgfCAg
IDMgKwogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcCAgICAgICAgIHwgIDEw
IC0tCiAuLi4vaXNvbGF0ZWR0cmVlL21hYy9BWElzb2xhdGVkT2JqZWN0TWFjLm1tICAgfCAgMjUg
KysrCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tICAgfCAxNDkg
KysrKysrKy0tLS0tLS0tLS0tCiAuLi5vZmZzZXQtZnJvbS11cHN0cmVhbS1wb3NpdGlvbi1leHBl
Y3RlZC50eHQgfCAgIDcgKy0KIC4uLmFyYWN0ZXItb2Zmc2V0LWZyb20tdXBzdHJlYW0tcG9zaXRp
b24uaHRtbCB8ICA1OCArKystLS0tCiAuLi5vc2l0aW9uLWNvbnZlcnNpb24td2l0aC1lbW9qaS1l
eHBlY3RlZC50eHQgfCAgIDcgKy0KIC4uLmlzaWJsZS1wb3NpdGlvbi1jb252ZXJzaW9uLXdpdGgt
ZW1vamkuaHRtbCB8ICA3NSArKysrLS0tLS0KIC4uLi9tYWMvbGlzdG1hcmtlci1zdWZmaXgtZXhw
ZWN0ZWQudHh0ICAgICAgICB8ICAxMSArLQogLi4uL2FjY2Vzc2liaWxpdHkvbWFjL2xpc3RtYXJr
ZXItc3VmZml4Lmh0bWwgIHwgIDM3ICsrLS0tCiAuLi4vdGV4dC1tYXJrZXItcHJldmlvdXMtbmV4
dC5odG1sICAgICAgICAgICAgfCAgIDQgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDIzOCBpbnNlcnRp
b25zKCspLCAyMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaAppbmRleCA4Y2EzOTUzODdmNzUuLjc1NTcwZDhlMmIxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTEzNyw2ICsx
MzcsNyBAQCBjbGFzcyBBWE9iamVjdENhY2hlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPEFYT2Jq
ZWN0Q2FjaGU+CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQVhPYmplY3RDYWNoZSk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgZnJpZW5kIGNsYXNzIEFYSXNvbGF0ZWRUcmVl
OworICAgIGZyaWVuZCBjbGFzcyBBWFRleHRNYXJrZXI7CiAgICAgZnJpZW5kIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBWE9iamVjdENhY2hlJik7CiBwdWJs
aWM6CiAgICAgZXhwbGljaXQgQVhPYmplY3RDYWNoZShEb2N1bWVudCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCmluZGV4IGUxNmJjNzRiMmJmOC4u
MmI5ZmMxMGRmNWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
VGV4dE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRN
YXJrZXIuY3BwCkBAIC0xMDUsNiArMTA1LDI3IEBAIEFYVGV4dE1hcmtlcjo6QVhUZXh0TWFya2Vy
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQogICAgICAgICBtX2RhdGEg
PSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0
KTsKIH0KIAordm9pZCBBWFRleHRNYXJrZXI6OnNldE5vZGUoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2RhdGEubm9kZSk7CisKKyAgICBXZWFrUHRyIGNh
Y2hlID0gc3RkOjpnZXQ8V2Vha1B0cjxBWE9iamVjdENhY2hlPj4oYXhUcmVlRm9ySUQodHJlZUlE
KCkpKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBvYmpl
Y3QgPSBjYWNoZS0+b2JqZWN0Rm9ySUQob2JqZWN0SUQoKSk7CisgICAgaWYgKCFvYmplY3QpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYWtQdHIgbm9kZSA9IG9iamVjdC0+bm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLm5vZGUgPSBub2RlLmdl
dCgpOworICAgIGNhY2hlLT5zZXROb2RlSW5Vc2Uobm9kZS5nZXQoKSk7Cit9CisKIEFYVGV4dE1h
cmtlcjo6b3BlcmF0b3IgVmlzaWJsZVBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwpAQCAtMTMwLDYgKzE1MSwzMyBAQCBBWFRleHRNYXJrZXI6Om9wZXJhdG9y
IENoYXJhY3Rlck9mZnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGlj
IE5vZGUqIG5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUoTm9kZSYgcmVwbGFjZWROb2RlLCBp
bnQmIG9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KQoreworICAgIC8vIFVzZSB0aGlzIGZ1bmN0
aW9uIHRvIGluY2x1ZGUgdGhlIHJlcGxhY2VkIG5vZGUgaXRzZWxmIGluIHRoZSByYW5nZSB3ZSBh
cmUgY3JlYXRpbmcuCisgICAgYXV0byBub2RlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyhyZXBsYWNlZE5vZGUpOworICAgIGJvb2wgaXNJbk5vZGUgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVyQ291bnQpIDw9IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50
KG5vZGVSYW5nZSk7CisgICAgb2Zmc2V0ID0gcmVwbGFjZWROb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KSArIChpc0luTm9kZSA/IDAgOiAxKTsKKyAgICByZXR1cm4gcmVwbGFjZWROb2RlLnBhcmVudE5v
ZGUoKTsKK30KKworc3RkOjpvcHRpb25hbDxCb3VuZGFyeVBvaW50PiBBWFRleHRNYXJrZXI6OmJv
dW5kYXJ5UG9pbnQoKSBjb25zdAoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gKnRoaXM7CisgICAgaWYgKGNoYXJh
Y3Rlck9mZnNldC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IGludCBvZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXQuc3RhcnRJbmRleCArIGNoYXJhY3Rlck9mZnNl
dC5vZmZzZXQ7CisgICAgV2Vha1B0ciBub2RlID0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGU7CisgICAg
QVNTRVJUKG5vZGUpOworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVO
ZWVkc0NoYXJhY3Rlcihub2RlLmdldCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkKKyAg
ICAgICAgbm9kZSA9IG5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUoKm5vZGUsIG9mZnNldCwg
Y2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgKm5vZGUsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihvZmZzZXQpIH0gfTsKK30KKwogUmVmUHRyPEFYQ29yZU9iamVjdD4gQVhUZXh0TWFya2VyOjpv
YmplY3QoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKQEAgLTIwMiw5ICsyNTAsMTEgQEAg
c3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gQVhUZXh0TWFya2VyUmFuZ2U6OnNpbXBsZVJhbmdl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgYXV0byBzdGFy
dEJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludChtX3N0YXJ0KTsKLSAgICBhdXRvIGVu
ZEJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludChtX2VuZCk7Ci0gICAgaWYgKCFzdGFy
dEJvdW5kYXJ5UG9pbnQgfHwgIWVuZEJvdW5kYXJ5UG9pbnQpCisgICAgYXV0byBzdGFydEJvdW5k
YXJ5UG9pbnQgPSBtX3N0YXJ0LmJvdW5kYXJ5UG9pbnQoKTsKKyAgICBpZiAoIXN0YXJ0Qm91bmRh
cnlQb2ludCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBhdXRvIGVuZEJvdW5k
YXJ5UG9pbnQgPSBtX2VuZC5ib3VuZGFyeVBvaW50KCk7CisgICAgaWYgKCFlbmRCb3VuZGFyeVBv
aW50KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiB7IHsgKnN0YXJ0
Qm91bmRhcnlQb2ludCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSB9OwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgKaW5kZXggZGRkNmY5ZjY5MTkyLi4zMDM2OWE4
M2Q2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFy
a2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApA
QCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gIWlzTnVsbCgpOyB9CiAgICAgb3BlcmF0b3IgVmlzaWJsZVBvc2l0aW9uKCkgY29uc3Q7
CiAgICAgb3BlcmF0b3IgQ2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25h
bDxCb3VuZGFyeVBvaW50PiBib3VuZGFyeVBvaW50KCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICBSZXRhaW5QdHI8UGxhdGZvcm1UZXh0TWFya2VyRGF0YT4gcGxhdGZvcm1EYXRh
KCkgY29uc3Q7CkBAIC0xMjQsMTEgKzEyNSw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8QVhDb3Jl
T2JqZWN0PiBvYmplY3QoKSBjb25zdDsKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBvYmplY3QoKTsgfQogCi0gICAgTm9kZSogbm9kZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICByZXR1cm4gbV9kYXRhLm5vZGU7Ci0gICAg
fQorICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKICAgICBib29sIGlzSWdub3JlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YS5pZ25vcmVkOyB9CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCkBA
IC0xMzYsNiArMTMzLDggQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgLy8gU2V0
cyBtX2RhdGEubm9kZSB3aGVuIHRoZSBtYXJrZXIgaXMgYmVpbmcgY3JlYXRlZCB3aXRoIGEgUGxh
dGZvcm1UZXh0TWFya2VyRGF0YSB0aGF0IGxhY2tzIHRoZSBub2RlIHBvaW50ZXIgYmVjYXVzZSBp
dCB3YXMgY3JlYXRlZCBvZmYgdGhlIG1haW4gdGhyZWFkLgorICAgIHZvaWQgc2V0Tm9kZSgpOwog
ICAgIFRleHRNYXJrZXJEYXRhIG1fZGF0YTsKIH07CiAKQEAgLTE2Niw5ICsxNjUsMTYgQEAgcHVi
bGljOgogCiAgICAgQVhUZXh0TWFya2VyIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsg
fQogICAgIEFYVGV4dE1hcmtlciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorCiBwcml2
YXRlOgogICAgIEFYVGV4dE1hcmtlciBtX3N0YXJ0OwogICAgIEFYVGV4dE1hcmtlciBtX2VuZDsK
IH07CiAKK2lubGluZSBOb2RlKiBBWFRleHRNYXJrZXI6Om5vZGUoKSBjb25zdAoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fZGF0YS5ub2RlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2NvY29hL0FYVGV4dE1hcmtlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9jb2NvYS9BWFRleHRNYXJrZXJDb2NvYS5tbQppbmRleCA2YzBjMWI4NDRkZWQuLjA4NGQy
ZDVhZjVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9B
WFRleHRNYXJrZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2Nv
Y29hL0FYVGV4dE1hcmtlckNvY29hLm1tCkBAIC01Myw2ICs1Myw5IEBAIEFYVGV4dE1hcmtlcjo6
QVhUZXh0TWFya2VyKFBsYXRmb3JtVGV4dE1hcmtlckRhdGEgcGxhdGZvcm1EYXRhKQogI2Vsc2Ug
Ly8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBbcGxhdGZvcm1EYXRhIGdldEJ5dGVzOiZtX2Rh
dGEgbGVuZ3RoOnNpemVvZihtX2RhdGEpXTsKICNlbmRpZgorCisgICAgaWYgKGlzTWFpblRocmVh
ZCgpICYmICFtX2RhdGEubm9kZSkKKyAgICAgICAgc2V0Tm9kZSgpOwogfQogCiBSZXRhaW5QdHI8
UGxhdGZvcm1UZXh0TWFya2VyRGF0YT4gQVhUZXh0TWFya2VyOjpwbGF0Zm9ybURhdGEoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCA1MDBjY2IzN2IyZGEuLjQ1MGYxMjI0
NjlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTEzNDYsMTYgKzEzNDYsNiBA
QCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBWElzb2xhdGVkT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25S
YW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIGF4T2JqZWN0ID8gYXhPYmplY3QtPnZpc2libGVQb3Np
dGlvblJhbmdlKCkgOiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogfQogCi1BWFRleHRNYXJrZXJS
YW5nZSBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0TWFya2VyUmFuZ2UoKSBjb25zdAotewotICAgIC8v
IEZJWE1FOiBjcmVhdGUgQVhUZXh0TWFya2VyUmFuZ2Ugd2l0aG91dCBoaXR0aW5nIHRoZSBtYWlu
IHRocmVhZC4KLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1h
aW5UaHJlYWQ8QVhUZXh0TWFya2VyUmFuZ2U+KFt0aGlzXSAoKSB7Ci0gICAgICAgIGF1dG8qIGF4
T2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiBheE9iamVjdCA/
IGF4T2JqZWN0LT50ZXh0TWFya2VyUmFuZ2UoKSA6IEFYVGV4dE1hcmtlclJhbmdlKCk7Ci0gICAg
fSk7Ci19Ci0KIFZpc2libGVQb3NpdGlvblJhbmdlIEFYSXNvbGF0ZWRPYmplY3Q6OnZpc2libGVQ
b3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvbWFjL0FYSXNvbGF0ZWRPYmplY3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9tYWMvQVhJc29sYXRlZE9iamVjdE1hYy5tbQpp
bmRleCBjNmJkMTI5NzU3MGUuLjg4Y2JmZTlhN2JkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvbWFjL0FYSXNvbGF0ZWRPYmplY3RNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvbWFjL0FYSXNv
bGF0ZWRPYmplY3RNYWMubW0KQEAgLTEwMyw2ICsxMDMsMzEgQEAgdm9pZCBBWElzb2xhdGVkT2Jq
ZWN0OjpkZXRhY2hQbGF0Zm9ybVdyYXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlIGRl
dGFjaG0KICAgICBbd3JhcHBlcigpIGRldGFjaElzb2xhdGVkT2JqZWN0OmRldGFjaG1lbnRUeXBl
XTsKIH0KIAorQVhUZXh0TWFya2VyUmFuZ2UgQVhJc29sYXRlZE9iamVjdDo6dGV4dE1hcmtlclJh
bmdlKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBhdHRyaWJ1dGVkVGV4dCA9IHByb3BlcnR5VmFs
dWU8UmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4+KEFYUHJvcGVydHlOYW1lOjpBdHRyaWJ1
dGVkVGV4dCkpIHsKKyAgICAgICAgLy8gRklYTUU6IHJldHVybiBhIG51bGwgcmFuZ2UgdG8gbWF0
Y2ggbm9uIElUTSBiZWhhdmlvciwgYnV0IHRoaXMgc2hvdWxkIGJlIHJldmlzaXRlZCBzaW5jZSB3
ZSBzaG91bGQgcmV0dXJuIHJhbmdlcyBmb3Igc2VjdXJlIGZpZWxkcy4KKyAgICAgICAgaWYgKGlz
U2VjdXJlRmllbGQoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgU3RyaW5n
IHRleHQgeyBbYXR0cmlidXRlZFRleHQgc3RyaW5nXSB9OworICAgICAgICBpZiAodGV4dC5sZW5n
dGgoKSkgeworICAgICAgICAgICAgVGV4dE1hcmtlckRhdGEgc3RhcnQodHJlZSgpLT50cmVlSUQo
KSwgb2JqZWN0SUQoKSwKKyAgICAgICAgICAgICAgICBudWxscHRyLCAwLCBQb3NpdGlvbjo6UG9z
aXRpb25Jc09mZnNldEluQW5jaG9yLCBBZmZpbml0eTo6RG93bnN0cmVhbSwKKyAgICAgICAgICAg
ICAgICAwLCAwKTsKKyAgICAgICAgICAgIFRleHRNYXJrZXJEYXRhIGVuZCh0cmVlKCktPnRyZWVJ
RCgpLCBvYmplY3RJRCgpLAorICAgICAgICAgICAgICAgIG51bGxwdHIsIHRleHQubGVuZ3RoKCks
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IsIEFmZmluaXR5OjpEb3duc3RyZWFt
LAorICAgICAgICAgICAgICAgIDAsIHRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgcmV0dXJu
IHsgeyBzdGFydCB9LCB7IGVuZCB9IH07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEFYVGV4dE1hcmtlclJh
bmdlPihbdGhpc10gKCkgeworICAgICAgICBhdXRvKiBheE9iamVjdCA9IGFzc29jaWF0ZWRBWE9i
amVjdCgpOworICAgICAgICByZXR1cm4gYXhPYmplY3QgPyBheE9iamVjdC0+dGV4dE1hcmtlclJh
bmdlKCkgOiBBWFRleHRNYXJrZXJSYW5nZSgpOworICAgIH0pOworfQorCiBBWFRleHRNYXJrZXJS
YW5nZVJlZiBBWElzb2xhdGVkT2JqZWN0Ojp0ZXh0TWFya2VyUmFuZ2VGb3JOU1JhbmdlKGNvbnN0
IE5TUmFuZ2UmIHJhbmdlKSBjb25zdAogewogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8QVhUZXh0TWFya2VyUmFuZ2VSZWY+
KFsmcmFuZ2UsIHRoaXNdICgpIC0+IFJldGFpblB0cjxBWFRleHRNYXJrZXJSYW5nZVJlZj4gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA0YmFmYjE3Yzk1MzIu
LmRjM2ZlN2U4YmFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0K
QEAgLTY1NywxNCArNjU3LDE0IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiBh
Y2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyCiAgICAgcmV0dXJu
IG9wZXJhdGlvbjsKIH0KIAotc3RhdGljIHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPFNpbXBsZVJh
bmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gYWNjZXNzaWJpbGl0eU1pc3NwZWxs
aW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKEFYT2JqZWN0Q2FjaGUq
IGF4T2JqZWN0Q2FjaGUsIGNvbnN0IE5TRGljdGlvbmFyeSAqcGFyYW1zKQorc3RhdGljIHN0ZDo6
cGFpcjxBWFRleHRNYXJrZXJSYW5nZSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gbWlz
c3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoY29uc3QgTlNE
aWN0aW9uYXJ5ICpwYXJhbXMpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJj
aERpcmVjdGlvbj4gY3JpdGVyaWE7CisgICAgaWQgbWFya2VyUmFuZ2VSZWYgPSBbcGFyYW1zIG9i
amVjdEZvcktleTpAIkFYU3RhcnRUZXh0TWFya2VyUmFuZ2UiXTsKKyAgICBpZiAoIUFYT2JqZWN0
SXNUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2VSZWYpKQorICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgQVNTRVJUKEFYT2JqZWN0SXNUZXh0TWFya2VyUmFuZ2UoW3BhcmFtcyBvYmplY3RGb3JL
ZXk6QCJBWFN0YXJ0VGV4dE1hcmtlclJhbmdlIl0pKTsKLSAgICBjcml0ZXJpYS5maXJzdCA9IHJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlKGF4T2JqZWN0Q2FjaGUsIChBWFRleHRNYXJrZXJSYW5nZVJl
ZilbcGFyYW1zIG9iamVjdEZvcktleTpAIkFYU3RhcnRUZXh0TWFya2VyUmFuZ2UiXSk7CisgICAg
c3RkOjpwYWlyPEFYVGV4dE1hcmtlclJhbmdlLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9u
PiBjcml0ZXJpYTsKKyAgICBjcml0ZXJpYS5maXJzdCA9IEFYVGV4dE1hcmtlclJhbmdlIHsgKEFY
VGV4dE1hcmtlclJhbmdlUmVmKW1hcmtlclJhbmdlUmVmIH07CiAKICAgICBOU051bWJlciAqZm9y
d2FyZCA9IFtwYXJhbXMgb2JqZWN0Rm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJl
Y3Rpb25dOwogICAgIGlmIChbZm9yd2FyZCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11d
KQpAQCAtMjczMyw4ICsyNzMzLDggQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNldFZhbHVlOihp
ZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nICopYXR0cmlidXRlTmFtZQogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZUF0
dHJpYnV0ZV0pIHsKICAgICAgICAgQVNTRVJUKHRleHRNYXJrZXJSYW5nZSk7CiAgICAgICAgIEFj
Y2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbdGV4dE1hcmtlclJhbmdl
ID0gcmV0YWluUHRyKHRleHRNYXJrZXJSYW5nZSksIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIo
c2VsZildIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QpCi0gICAgICAgICAgICAgICAgYmFja2luZ09iamVj
dC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZUZv
clRleHRNYXJrZXJSYW5nZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJr
ZXJSYW5nZS5nZXQoKSkpOworICAgICAgICAgICAgaWYgKFJlZlB0cjxBWENvcmVPYmplY3Q+IGJh
Y2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCkKKyAgICAg
ICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdl
KEFYVGV4dE1hcmtlclJhbmdlIHsgdGV4dE1hcmtlclJhbmdlLmdldCgpIH0pOwogICAgICAgICB9
KTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgYmFja2luZ09iamVjdC0+c2V0
Rm9jdXNlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwpAQCAtMjgyOCwyNiArMjgyOCwxNiBAQCAtIChO
U0F0dHJpYnV0ZWRTdHJpbmcgKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOihOU1Jhbmdl
KXJhbmdlCiAgICAgfSk7CiB9CiAKLS0gKE5TSW50ZWdlcilfaW5kZXhGb3JUZXh0TWFya2VyOihB
WFRleHRNYXJrZXJSZWYpbWFya2VyCistIChOU0ludGVnZXIpX2luZGV4Rm9yVGV4dE1hcmtlcjoo
QVhUZXh0TWFya2VyUmVmKW1hcmtlclJlZgogewotICAgIGlmICghbWFya2VyKQorICAgIGlmICgh
bWFya2VyUmVmKQogICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKIAotICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNJbnRlZ2VyPihbbWFya2Vy
ID0gcmV0YWluUHRyKG1hcmtlciksIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgp
IC0+IE5TSW50ZWdlciB7Ci0gICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRT
ZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKLSAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQor
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNJ
bnRlZ2VyPihbbWFya2VyUmVmID0gcmV0YWluUHRyKG1hcmtlclJlZildICgpIC0+IE5TSW50ZWdl
ciB7CisgICAgICAgIEFYVGV4dE1hcmtlciBtYXJrZXIgeyBtYXJrZXJSZWYuZ2V0KCkgfTsKKyAg
ICAgICAgaWYgKCFtYXJrZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5TTm90Rm91
bmQ7Ci0KLSAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RD
YWNoZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9m
ZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIG1hcmtlci5nZXQoKSk7Ci0gICAgICAgICAgICBhdXRv
IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0
ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIXJhbmdlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBOU05vdEZvdW5kOwotCi0gICAgICAgICAgICByZXR1cm4gbWFr
ZU5TUmFuZ2UocmFuZ2UpLmxvY2F0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIE5T
Tm90Rm91bmQ7CisgICAgICAgIHJldHVybiBtYWtlTlNSYW5nZShBWFRleHRNYXJrZXJSYW5nZSB7
IG1hcmtlciwgbWFya2VyIH0uc2ltcGxlUmFuZ2UoKSkubG9jYXRpb247CiAgICAgfSk7CiB9CiAK
QEAgLTI5NjEsMjAgKzI5NTEsMjAgQEAgLSAoQVhUZXh0TWFya2VyUmFuZ2VSZWYpdGV4dE1hcmtl
clJhbmdlQXRUZXh0TWFya2VyOihBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlcgogICAgICAgICBp
ZiAoIWNhY2hlKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBhdXRvIGNoYXJh
Y3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJr
ZXIuZ2V0KCkpOworICAgICAgICBBWFRleHRNYXJrZXIgbWFya2VyIHsgdGV4dE1hcmtlci5nZXQo
KSB9OwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICAgICAg
c3dpdGNoICh0ZXh0VW5pdCkgewogICAgICAgICBjYXNlIFRleHRVbml0OjpMZWZ0V29yZDoKLSAg
ICAgICAgICAgIHJhbmdlID0gY2FjaGUtPmxlZnRXb3JkUmFuZ2UoY2hhcmFjdGVyT2Zmc2V0KTsK
KyAgICAgICAgICAgIHJhbmdlID0gY2FjaGUtPmxlZnRXb3JkUmFuZ2UobWFya2VyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRleHRVbml0OjpSaWdodFdvcmQ6Ci0gICAgICAg
ICAgICByYW5nZSA9IGNhY2hlLT5yaWdodFdvcmRSYW5nZShjaGFyYWN0ZXJPZmZzZXQpOworICAg
ICAgICAgICAgcmFuZ2UgPSBjYWNoZS0+cmlnaHRXb3JkUmFuZ2UobWFya2VyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRleHRVbml0OjpTZW50ZW5jZToKLSAgICAgICAgICAg
IHJhbmdlID0gY2FjaGUtPnNlbnRlbmNlRm9yQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNl
dCk7CisgICAgICAgICAgICByYW5nZSA9IGNhY2hlLT5zZW50ZW5jZUZvckNoYXJhY3Rlck9mZnNl
dChtYXJrZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVGV4dFVuaXQ6OlBh
cmFncmFwaDoKLSAgICAgICAgICAgIHJhbmdlID0gY2FjaGUtPnBhcmFncmFwaEZvckNoYXJhY3Rl
ck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgICAgICAgICAgcmFuZ2UgPSBjYWNoZS0+cGFy
YWdyYXBoRm9yQ2hhcmFjdGVyT2Zmc2V0KG1hcmtlcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk5
MiwxMSArMjk4Miw3IEBAIC0gKEFYVGV4dE1hcmtlclJhbmdlUmVmKWxpbmVUZXh0TWFya2VyUmFu
Z2VGb3JUZXh0TWFya2VyOihBWFRleHRNYXJrZXJSZWYpdGV4dE1hCiAgICAgICAgIGlmICghYmFj
a2luZ09iamVjdCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgYXV0byogY2Fj
aGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7Ci0gICAgICAgIGlmICghY2FjaGUp
Ci0gICAgICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgICAgIEFYVGV4dE1hcmtlciBtYXJrZXIo
dGV4dE1hcmtlci5nZXQoKSk7CisgICAgICAgIEFYVGV4dE1hcmtlciBtYXJrZXIgeyB0ZXh0TWFy
a2VyLmdldCgpIH07CiAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlv
blJhbmdlOwogICAgICAgICBzd2l0Y2ggKHRleHRVbml0KSB7CiAgICAgICAgIGNhc2UgVGV4dFVu
aXQ6OkxpbmU6CkBAIC0zMDE3LDkgKzMwMDMsOSBAQCAtIChBWFRleHRNYXJrZXJSYW5nZVJlZils
aW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjooQVhUZXh0TWFya2VyUmVmKXRleHRNYQog
ICAgIH0pOwogfQogCi0tIChBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlckZvclRleHRNYXJrZXI6
KEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyIGF0VW5pdDooVGV4dFVuaXQpdGV4dFVuaXQKKy0g
KEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjooQVhUZXh0TWFya2VyUmVm
KXRleHRNYXJrZXJSZWYgYXRVbml0OihUZXh0VW5pdCl0ZXh0VW5pdAogewotICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8QVhU
ZXh0TWFya2VyUmVmPihbdGV4dE1hcmtlciA9IHJldGFpblB0cih0ZXh0TWFya2VyKSwgJnRleHRV
bml0LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8QVhU
ZXh0TWFya2VyUmVmPiB7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3Jl
bGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxBWFRleHRNYXJrZXJSZWY+KFt0ZXh0TWFya2VyUmVm
ID0gcmV0YWluUHRyKHRleHRNYXJrZXJSZWYpLCAmdGV4dFVuaXQsIHByb3RlY3RlZFNlbGYgPSBy
ZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxBWFRleHRNYXJrZXJSZWY+IHsKICAgICAg
ICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2Jq
ZWN0OwogICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gbmls
OwpAQCAtMzAyOCw0MSArMzAxNCwzNyBAQCAtIChBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlckZv
clRleHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyIGF0VW5pdDooVAogICAgICAg
ICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBhdXRvIG9s
ZE9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJrZXIu
Z2V0KCkpOwotICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV3T2Zmc2V0OworICAgICAgICBBWFRl
eHRNYXJrZXIgb2xkTWFya2VyIHsgdGV4dE1hcmtlclJlZi5nZXQoKSB9OworICAgICAgICBBWFRl
eHRNYXJrZXIgbmV3TWFya2VyOwogICAgICAgICBzd2l0Y2ggKHRleHRVbml0KSB7CiAgICAgICAg
IGNhc2UgVGV4dFVuaXQ6Ok5leHRXb3JkRW5kOgotICAgICAgICAgICAgbmV3T2Zmc2V0ID0gY2Fj
aGUtPm5leHRXb3JkRW5kQ2hhcmFjdGVyT2Zmc2V0KG9sZE9mZnNldCk7CisgICAgICAgICAgICBu
ZXdNYXJrZXIgPSBjYWNoZS0+bmV4dFdvcmRFbmRDaGFyYWN0ZXJPZmZzZXQob2xkTWFya2VyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRleHRVbml0OjpQcmV2aW91c1dvcmRT
dGFydDoKLSAgICAgICAgICAgIG5ld09mZnNldCA9IGNhY2hlLT5wcmV2aW91c1dvcmRTdGFydENo
YXJhY3Rlck9mZnNldChvbGRPZmZzZXQpOworICAgICAgICAgICAgbmV3TWFya2VyID0gY2FjaGUt
PnByZXZpb3VzV29yZFN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KG9sZE1hcmtlcik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBUZXh0VW5pdDo6TmV4dFNlbnRlbmNlRW5kOgotICAgICAg
ICAgICAgbmV3T2Zmc2V0ID0gY2FjaGUtPm5leHRTZW50ZW5jZUVuZENoYXJhY3Rlck9mZnNldChv
bGRPZmZzZXQpOworICAgICAgICAgICAgbmV3TWFya2VyID0gY2FjaGUtPm5leHRTZW50ZW5jZUVu
ZENoYXJhY3Rlck9mZnNldChvbGRNYXJrZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgVGV4dFVuaXQ6OlByZXZpb3VzU2VudGVuY2VTdGFydDoKLSAgICAgICAgICAgIG5ld09m
ZnNldCA9IGNhY2hlLT5wcmV2aW91c1NlbnRlbmNlU3RhcnRDaGFyYWN0ZXJPZmZzZXQob2xkT2Zm
c2V0KTsKKyAgICAgICAgICAgIG5ld01hcmtlciA9IGNhY2hlLT5wcmV2aW91c1NlbnRlbmNlU3Rh
cnRDaGFyYWN0ZXJPZmZzZXQob2xkTWFya2VyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFRleHRVbml0OjpOZXh0UGFyYWdyYXBoRW5kOgotICAgICAgICAgICAgbmV3T2Zmc2V0
ID0gY2FjaGUtPm5leHRQYXJhZ3JhcGhFbmRDaGFyYWN0ZXJPZmZzZXQob2xkT2Zmc2V0KTsKKyAg
ICAgICAgICAgIG5ld01hcmtlciA9IGNhY2hlLT5uZXh0UGFyYWdyYXBoRW5kQ2hhcmFjdGVyT2Zm
c2V0KG9sZE1hcmtlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUZXh0VW5p
dDo6UHJldmlvdXNQYXJhZ3JhcGhTdGFydDoKLSAgICAgICAgICAgIG5ld09mZnNldCA9IGNhY2hl
LT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KG9sZE9mZnNldCk7CisgICAg
ICAgICAgICBuZXdNYXJrZXIgPSBjYWNoZS0+cHJldmlvdXNQYXJhZ3JhcGhTdGFydENoYXJhY3Rl
ck9mZnNldChvbGRNYXJrZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGV4
dFVuaXQ6Ok5leHRMaW5lRW5kOiB7Ci0gICAgICAgICAgICBhdXRvIHZpc2libGVQb3NpdGlvbiA9
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJrZXIuZ2V0KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oY2FjaGUsIGJh
Y2tpbmdPYmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvc2l0aW9uKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUZXh0VW5pdDo6UHJldmlvdXNMaW5lU3RhcnQ6IHsKLSAgICAg
ICAgICAgIGF1dG8gdmlzaWJsZVBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cihjYWNoZSwgdGV4dE1hcmtlci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dE1hcmtl
ckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgYmFja2luZ09iamVjdC0+cHJldmlvdXNMaW5lU3Rh
cnRQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pKTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIFRl
eHRVbml0OjpOZXh0TGluZUVuZDoKKyAgICAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKGNhY2hlLCBiYWNraW5nT2JqZWN0LT5uZXh0TGluZUVuZFBvc2l0aW9uKG9s
ZE1hcmtlcikpOworICAgICAgICBjYXNlIFRleHRVbml0OjpQcmV2aW91c0xpbmVTdGFydDoKKyAg
ICAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNhY2hlLCBiYWNr
aW5nT2JqZWN0LT5wcmV2aW91c0xpbmVTdGFydFBvc2l0aW9uKG9sZE1hcmtlcikpOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yQ2hhcmFj
dGVyT2Zmc2V0KGNhY2hlLCBuZXdPZmZzZXQpOworICAgICAgICByZXR1cm4gbmV3TWFya2VyLnBs
YXRmb3JtRGF0YSgpOwogICAgIH0pOwogfQogCkBAIC0zMDk2LDkgKzMwNzgsOSBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIEFYVGV4dE1hcmtlclJlZiB0ZXh0
TWFya2VyID0gbmlsOwogICAgIEFYVGV4dE1hcmtlclJhbmdlUmVmIHRleHRNYXJrZXJSYW5nZSA9
IG5pbDsKLSAgICBOU051bWJlciogbnVtYmVyID0gbmlsOwotICAgIE5TQXJyYXkqIGFycmF5ID0g
bmlsOwotICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IG5pbDsKKyAgICBOU051bWJlciAq
bnVtYmVyID0gbmlsOworICAgIE5TQXJyYXkgKmFycmF5ID0gbmlsOworICAgIE5TRGljdGlvbmFy
eSAqZGljdGlvbmFyeSA9IG5pbDsKICAgICBSZWZQdHI8QVhDb3JlT2JqZWN0PiB1aUVsZW1lbnQ7
CiAgICAgTlNQb2ludCBwb2ludCA9IE5TWmVyb1BvaW50OwogICAgIGJvb2wgcG9pbnRTZXQgPSBm
YWxzZTsKQEAgLTMyNzEsMTkgKzMyNTMsMjEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgICAgIHJldHVybiAoaWQpW3NlbGYgbGluZVRleHRNYXJrZXJSYW5nZUZv
clRleHRNYXJrZXI6dGV4dE1hcmtlciBmb3JVbml0OlRleHRVbml0OjpMaW5lXTsKIAogICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpBWE1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdl
QXR0cmlidXRlXSkgewotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRv
cmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJmRpY3Rpb25hcnksIHByb3RlY3RlZFNl
bGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgICAgICByZXR1
cm4gKGlkKUFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRo
cmVhZDxBWFRleHRNYXJrZXJSYW5nZVJlZj4oWyZkaWN0aW9uYXJ5LCBwcm90ZWN0ZWRTZWxmID0g
cmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8QVhUZXh0TWFya2VyUmFuZ2VSZWY+IHsK
ICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4
QmFja2luZ09iamVjdDsKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgICAgIGlmICghY2FjaGUpCisgICAgICAg
ICAgICBhdXRvIGNyaXRlcmlhID0gbWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUoZGljdGlvbmFyeSk7CisgICAgICAgICAgICBpZiAoIWNyaXRlcmlhLmZp
cnN0KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgICAgIGF1dG8gY3Jp
dGVyaWEgPSBhY2Nlc3NpYmlsaXR5TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUoY2FjaGUsIGRpY3Rpb25hcnkpOwotICAgICAgICAgICAgaWYgKGF1dG8g
bWlzc3BlbGxpbmdSYW5nZSA9IGJhY2tpbmdPYmplY3QtPm1pc3NwZWxsaW5nUmFuZ2UoKmNyaXRl
cmlhLmZpcnN0LCBjcml0ZXJpYS5zZWNvbmQpKQotICAgICAgICAgICAgICAgIHJldHVybiAoaWQp
dGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGNhY2hlLCAqbWlzc3BlbGxpbmdSYW5nZSk7CisgICAg
ICAgICAgICBhdXRvIHJhbmdlID0gY3JpdGVyaWEuZmlyc3Quc2ltcGxlUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAorICAgICAg
ICAgICAgaWYgKGF1dG8gbWlzc3BlbGxSYW5nZSA9IGJhY2tpbmdPYmplY3QtPm1pc3NwZWxsaW5n
UmFuZ2UoKnJhbmdlLCBjcml0ZXJpYS5zZWNvbmQpKQorICAgICAgICAgICAgICAgIHJldHVybiBB
WFRleHRNYXJrZXJSYW5nZSgqbWlzc3BlbGxSYW5nZSkucGxhdGZvcm1EYXRhKCk7CiAgICAgICAg
ICAgICByZXR1cm4gbmlsOwogICAgICAgICB9KTsKICAgICB9CkBAIC0zMzAxLDcgKzMyODUsNyBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0dXJuIChp
ZClbc2VsZiBfdGV4dE1hcmtlckZvckluZGV4OltudW1iZXIgaW50ZWdlclZhbHVlXV07CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QVhVSUVsZW1lbnRGb3JUZXh0TWFya2Vy
QXR0cmlidXRlXSkgewotICAgICAgICBBWFRleHRNYXJrZXIgbWFya2VyKHRleHRNYXJrZXIpOwor
ICAgICAgICBBWFRleHRNYXJrZXIgbWFya2VyIHsgdGV4dE1hcmtlciB9OwogICAgICAgICBSZWZQ
dHIgb2JqZWN0ID0gbWFya2VyLm9iamVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkKICAgICAg
ICAgICAgIHJldHVybiBuaWw7CkBAIC0zMzMwLDkgKzMzMTQsNyBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBw
cm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgICAgIGlmICghYmFj
a2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgICAgIGF1
dG8gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoYmFja2luZ09iamVj
dC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVy
biBiYWNraW5nT2JqZWN0LT5saW5lRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgICAgICAg
ICByZXR1cm4gYmFja2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKEFYVGV4dE1hcmtlciB7IHRl
eHRNYXJrZXIuZ2V0KCkgfSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gQChyZXN1bHQp
OwogICAgIH0KQEAgLTMzNTcsNyArMzMzOSw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgICAgICAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtl
clJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIEFYVGV4dE1hcmtlclJhbmdlIG1hcmtlclJhbmdl
IHsgdGV4dE1hcmtlclJhbmdlLmdldCgpIH07CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gbWFy
a2VyUmFuZ2Uuc2ltcGxlUmFuZ2UoKTsKICAgICAgICAgICAgIHJldHVybiByYW5nZSA/IGJhY2tp
bmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKCpyYW5nZSkgOiBTdHJpbmcoKTsKICAgICAgICAgfSk7
CiAgICAgfQpAQCAtMzM4Miw3ICszMzY1LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIENHUmVjdFplcm87CiAKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZv
clRleHRNYXJrZXJSYW5nZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJr
ZXJSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBBWFRleHRNYXJrZXJSYW5nZSBtYXJrZXJSYW5n
ZSB7IHRleHRNYXJrZXJSYW5nZS5nZXQoKSB9OworICAgICAgICAgICAgYXV0byByYW5nZSA9IG1h
cmtlclJhbmdlLnNpbXBsZVJhbmdlKCk7CiAgICAgICAgICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwogCkBAIC0zNDk5LDkgKzM0ODMsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGF1dG8qIGNhY2hl
ID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgICAgICAgICAgaWYgKCFjYWNo
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgICAgICAgICBBWFRleHRNYXJr
ZXIgbWFya2VyKHRleHRNYXJrZXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIG5leHRUZXh0
TWFya2VyKGNhY2hlLCBtYXJrZXIpLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXh0VGV4dE1hcmtlcihjYWNoZSwgQVhUZXh0TWFya2VyIHsgdGV4dE1hcmtlci5n
ZXQoKSB9KS5icmlkZ2luZ0F1dG9yZWxlYXNlKCk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAt
MzUxNCw5ICszNDk2LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
ICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgICAgICAgICAgQVhUZXh0TWFya2VyIG1hcmtlcih0ZXh0TWFya2VyLmdldCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBwcmV2aW91c1RleHRNYXJrZXIoY2FjaGUsIG1hcmtlcikuYnJpZGdpbmdB
dXRvcmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzVGV4dE1hcmtlcihjYWNo
ZSwgQVhUZXh0TWFya2VyIHsgdGV4dE1hcmtlci5nZXQoKSB9KS5icmlkZ2luZ0F1dG9yZWxlYXNl
KCk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzU2NywxNSArMzU0Nyw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0byogYmFja2luZ09i
amVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICAgICAg
aWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAg
ICAgICAgIGF1dG8qIGNhY2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwotICAg
ICAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
ICAgICAgICBhdXRvIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNh
Y2hlLCB0ZXh0TWFya2VyLmdldCgpKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHZwUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5zdHlsZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBv
cyk7Ci0KLSAgICAgICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQ
b3NpdGlvbnMoY2FjaGUsIHZwUmFuZ2Uuc3RhcnQsIHZwUmFuZ2UuZW5kKTsKKyAgICAgICAgICAg
IHJldHVybiBBWFRleHRNYXJrZXJSYW5nZSB7IGJhY2tpbmdPYmplY3QtPnN0eWxlUmFuZ2VGb3JQ
b3NpdGlvbihBWFRleHRNYXJrZXIgeyB0ZXh0TWFya2VyLmdldCgpIH0pIH0ucGxhdGZvcm1EYXRh
KCkuYnJpZGdpbmdBdXRvcmVsZWFzZSgpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1ODUs
NyArMzU1Nyw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAg
ICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgICAgICAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoYmFja2luZ09i
amVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UuZ2V0KCkpOworICAgICAgICAg
ICAgQVhUZXh0TWFya2VyUmFuZ2UgbWFya2VyUmFuZ2UgeyB0ZXh0TWFya2VyUmFuZ2UuZ2V0KCkg
fTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBtYXJrZXJSYW5nZS5zaW1wbGVSYW5nZSgpOwog
ICAgICAgICAgICAgcmV0dXJuIHJhbmdlID8gQVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9yUmFuZ2Uo
KnJhbmdlKSA6IDA7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gQChsZW5ndGgpOwpAQCAt
MzU5MywxMyArMzU2NiwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
IAogICAgIC8vIFVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSAoc28gZmFyKS4KICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
UmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIEFYVGV4dE1hcmtlclJhbmdlIGF4VGV4dE1hcmtl
clJhbmdlIHsgdGV4dE1hcmtlclJhbmdlIH07Ci0gICAgICAgIHJldHVybiBheFRleHRNYXJrZXJS
YW5nZS5zdGFydCgpLnBsYXRmb3JtRGF0YSgpLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsKKyAgICAg
ICAgQVhUZXh0TWFya2VyUmFuZ2UgbWFya2VyUmFuZ2UgeyB0ZXh0TWFya2VyUmFuZ2UgfTsKKyAg
ICAgICAgcmV0dXJuIG1hcmtlclJhbmdlLnN0YXJ0KCkucGxhdGZvcm1EYXRhKCkuYnJpZGdpbmdB
dXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
IEFYVGV4dE1hcmtlclJhbmdlIGF4VGV4dE1hcmtlclJhbmdlIHsgdGV4dE1hcmtlclJhbmdlIH07
Ci0gICAgICAgIHJldHVybiBheFRleHRNYXJrZXJSYW5nZS5lbmQoKS5wbGF0Zm9ybURhdGEoKS5i
cmlkZ2luZ0F1dG9yZWxlYXNlKCk7CisgICAgICAgIEFYVGV4dE1hcmtlclJhbmdlIG1hcmtlclJh
bmdlIHsgdGV4dE1hcmtlclJhbmdlIH07CisgICAgICAgIHJldHVybiBtYXJrZXJSYW5nZS5lbmQo
KS5wbGF0Zm9ybURhdGEoKS5icmlkZ2luZ0F1dG9yZWxlYXNlKCk7CiAgICAgfQogCiAjaWYgRU5B
QkxFKFRSRUVfREVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvY2hhcmFjdGVyLW9mZnNldC1mcm9tLXVwc3RyZWFtLXBvc2l0aW9uLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2NoYXJhY3Rlci1vZmZzZXQtZnJvbS11
cHN0cmVhbS1wb3NpdGlvbi1leHBlY3RlZC50eHQKaW5kZXggNzQ5OTg2NzIxZDBmLi4wOTdlMGIw
NjYyYjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2NoYXJhY3Rl
ci1vZmZzZXQtZnJvbS11cHN0cmVhbS1wb3NpdGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvY2hhcmFjdGVyLW9mZnNldC1mcm9tLXVwc3RyZWFtLXBv
c2l0aW9uLWV4cGVjdGVkLnR4dApAQCAtMSwxMyArMSwxMCBAQAotTG9yZW0gaXBzdW0gdml2YW11
cyBuaWJoIHVybmEgbW9sbGlzIGF0IGFsaXF1YW0gdGFjaXRpLCBldGlhbSBhcmN1IG1pIHNlbXBl
ciBub3N0cmEgdGFjaXRpIG51bGxhIGRvbG9yCiBUaGlzIHRlc3RzIHRoYXQgQ2hhcmFjdGVyT2Zm
c2V0IHRoYXQgY29tZXMgZnJvbSBhbiB1cHN0cmVhbSBWaXNpYmxlUG9zaXRpb24gaXMgY29ycmVj
dC4KIAotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KIEZpcnN0IExpbmU6IExvcmVtIGlw
c3VtIHZpdmFtdXMgbmliaAogU2Vjb25kIExpbmU6IHVybmEgbW9sbGlzIGF0IGFsaXF1YW0gdGFj
aXRpLAogW2ZpcnN0RW5kLCBzZWNvbmRTdGFydF06ICdzcGFjZScKKwogUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCi0KK0xvcmVtIGlwc3VtIHZpdmFtdXMg
bmliaCB1cm5hIG1vbGxpcyBhdCBhbGlxdWFtIHRhY2l0aSwgZXRpYW0gYXJjdSBtaSBzZW1wZXIg
bm9zdHJhIHRhY2l0aSBudWxsYSBkb2xvcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvY2hhcmFjdGVyLW9mZnNldC1mcm9tLXVwc3RyZWFtLXBvc2l0aW9uLmh0bWwg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zmc2V0LWZyb20tdXBz
dHJlYW0tcG9zaXRpb24uaHRtbAppbmRleCA3NWJhYThjYjNkNjkuLjhjY2M1MDE4ZDBhZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvY2hhcmFjdGVyLW9mZnNldC1m
cm9tLXVwc3RyZWFtLXBvc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvY2hhcmFjdGVyLW9mZnNldC1mcm9tLXVwc3RyZWFtLXBvc2l0aW9uLmh0bWwKQEAgLTEs
NDUgKzEsMzkgQEAKIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KLTxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5Pgog
CiA8ZGl2IGlkPSJjb250YWluZXIiPgotCiA8ZGl2IGlkPSJ0ZXh0IiAgc3R5bGU9IndpZHRoOjIw
MHB4OyIgY29udGVudGVkaXRhYmxlPSJ0cnVlIj5Mb3JlbSBpcHN1bSB2aXZhbXVzIG5pYmggdXJu
YSBtb2xsaXMgYXQgYWxpcXVhbSB0YWNpdGksIGV0aWFtIGFyY3UgbWkgc2VtcGVyIG5vc3RyYSB0
YWNpdGkgbnVsbGEgZG9sb3I8L2Rpdj4KLQotPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Ci08ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvZGl2PgogCiA8c2NyaXB0PgotICAgIGRlc2NyaXB0aW9u
KCJUaGlzIHRlc3RzIHRoYXQgQ2hhcmFjdGVyT2Zmc2V0IHRoYXQgY29tZXMgZnJvbSBhbiB1cHN0
cmVhbSBWaXNpYmxlUG9zaXRpb24gaXMgY29ycmVjdC4iKTsKLSAgICAKLSAgICBpZiAod2luZG93
LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Ci0gICAgICAgIAotICAgICAgICB2YXIgZGl2ID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0Iik7Ci0g
ICAgICAgIHZhciB0ZXh0ID0gZGl2LmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgdmFyIHRleHRS
YW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKLSAgICAgICAgCi0g
ICAgICAgIHZhciBzdGFydCA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdl
KHRleHRSYW5nZSk7Ci0gICAgICAgIHZhciBmaXJzdExpbmUgPSB0ZXh0LmxpbmVUZXh0TWFya2Vy
UmFuZ2VGb3JUZXh0TWFya2VyKHN0YXJ0KTsKLSAgICAgICAgdmFyIGZpcnN0RW5kID0gdGV4dC5l
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKGZpcnN0TGluZSk7Ci0gICAgICAgIGRlYnVn
KCJGaXJzdCBMaW5lOiAiICsgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoZmlyc3RMaW5l
KSk7Ci0gICAgICAgIAotICAgICAgICB2YXIgbmV4dCA9IHRleHQubmV4dFRleHRNYXJrZXIoZmly
c3RFbmQpOwotICAgICAgICB2YXIgc2Vjb25kTGluZSA9IHRleHQubGluZVRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIobmV4dCk7Ci0gICAgICAgIHZhciBzZWNvbmRTdGFydCA9IHRleHQuc3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHNlY29uZExpbmUpOwotICAgICAgICBkZWJ1
ZygiU2Vjb25kIExpbmU6ICIgKyB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShzZWNvbmRM
aW5lKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBIZXJlIGZpcnN0RW5kIHNob3VsZCBjb250YWlu
IGEgdXBzdHJlYW0gcG9zaXRpb24uCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIGZp
cnN0RW5kIGRvZXMgbm90IGVxdWFsIHRvIHNlY29uZFN0YXJ0IGFmdGVyCi0gICAgICAgIC8vIGNv
bnZlcnRpbmcgdG8gQ2hhcmFjdGVyT2Zmc2V0LgotICAgICAgICB2YXIgbWFya2VyUmFuZ2UgPSB0
ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoc2Vjb25kU3RhcnQsIGZpcnN0RW5kKTsKLSAg
ICAgICAgdmFyIHNwYWNlID0gJyAnOwotICAgICAgICBkZWJ1ZygiW2ZpcnN0RW5kLCBzZWNvbmRT
dGFydF06ICIgKyB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkucmVw
bGFjZShzcGFjZSwgIidzcGFjZSciKSk7ICAgICAgICAKLSAgICB9Ci08L3NjcmlwdD4KK2xldCBv
dXRwdXQgPSAiVGhpcyB0ZXN0cyB0aGF0IENoYXJhY3Rlck9mZnNldCB0aGF0IGNvbWVzIGZyb20g
YW4gdXBzdHJlYW0gVmlzaWJsZVBvc2l0aW9uIGlzIGNvcnJlY3QuXG5cbiI7CisKK2lmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICBsZXQgdGV4dCA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dCIpLmNoaWxkQXRJbmRleCgw
KTsKKyAgICBsZXQgdGV4dFJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRl
eHQpOwogCi08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+CisgICAgbGV0IHN0YXJ0ID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dFJhbmdlKTsKKyAgICBsZXQgZmlyc3RMaW5lID0gdGV4dC5saW5lVGV4dE1hcmtl
clJhbmdlRm9yVGV4dE1hcmtlcihzdGFydCk7CisgICAgbGV0IGZpcnN0RW5kID0gdGV4dC5lbmRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKGZpcnN0TGluZSk7CisgICAgb3V0cHV0ICs9IGBG
aXJzdCBMaW5lOiAke3RleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKGZpcnN0TGluZSl9XG5g
OworCisgICAgbGV0IG5leHQgPSB0ZXh0Lm5leHRUZXh0TWFya2VyKGZpcnN0RW5kKTsKKyAgICBs
ZXQgc2Vjb25kTGluZSA9IHRleHQubGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIobmV4
dCk7CisgICAgbGV0IHNlY29uZFN0YXJ0ID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2Uoc2Vjb25kTGluZSk7CisgICAgb3V0cHV0ICs9IGBTZWNvbmQgTGluZTogJHt0ZXh0
LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShzZWNvbmRMaW5lKX1cbmA7CisKKyAgICAvLyBIZXJl
IGZpcnN0RW5kIHNob3VsZCBjb250YWluIGEgdXBzdHJlYW0gcG9zaXRpb24uCisgICAgLy8gV2Ug
bmVlZCB0byBtYWtlIHN1cmUgZmlyc3RFbmQgZG9lcyBub3QgZXF1YWwgdG8gc2Vjb25kU3RhcnQg
YWZ0ZXIKKyAgICAvLyBjb252ZXJ0aW5nIHRvIENoYXJhY3Rlck9mZnNldC4KKyAgICBsZXQgbWFy
a2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoZmlyc3RFbmQsIHNlY29u
ZFN0YXJ0KTsKKyAgICBvdXRwdXQgKz0gYFtmaXJzdEVuZCwgc2Vjb25kU3RhcnRdOiAke3RleHQu
c3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKS5yZXBsYWNlKCcgJywgIidzcGFj
ZSciKX1cbmA7CisKKyAgICBkZWJ1ZyhvdXRwdXQpOworfQorPC9zY3JpcHQ+CiA8L2JvZHk+CiA8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9jaGFyYWN0
ZXItb2Zmc2V0LXZpc2libGUtcG9zaXRpb24tY29udmVyc2lvbi13aXRoLWVtb2ppLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2NoYXJhY3Rlci1vZmZzZXQtdmlz
aWJsZS1wb3NpdGlvbi1jb252ZXJzaW9uLXdpdGgtZW1vamktZXhwZWN0ZWQudHh0CmluZGV4IGMy
MzcyOWYyYjc1NC4uMzJkMmIwNjViZTczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy9jaGFyYWN0ZXItb2Zmc2V0LXZpc2libGUtcG9zaXRpb24tY29udmVyc2lvbi13
aXRoLWVtb2ppLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy9jaGFyYWN0ZXItb2Zmc2V0LXZpc2libGUtcG9zaXRpb24tY29udmVyc2lvbi13aXRoLWVtb2pp
LWV4cGVjdGVkLnR4dApAQCAtMSwxMSArMSw4IEBACi1IaSDwn5iOCiBUaGlzIHRlc3RzIHRoYXQg
Q2hhcmFjdGVyT2Zmc2V0IGFuZCBWaXNpYmxlUG9zaXRpb24gY29udmVydCBjb3JyZWN0bHkgd2hl
biB0aGVyZSBhcmUgY29tcG9zZWQgY2hhcmFjdGVycy4KIAotT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorUEFTUzogdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFya2Vy
UmFuZ2VGb3JNYXJrZXJzKHN0YXJ0TWFya2VyLCBlbmRNYXJrZXIpKSA9PT0gJ0hpIPCfmI4nCiAK
LQotSGkg8J+YjgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBM
RVRFCi0KK0hpIPCfmI4gd29ybGQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL2NoYXJhY3Rlci1vZmZzZXQtdmlzaWJsZS1wb3NpdGlvbi1jb252ZXJzaW9uLXdpdGgt
ZW1vamkuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2NoYXJhY3Rlci1vZmZz
ZXQtdmlzaWJsZS1wb3NpdGlvbi1jb252ZXJzaW9uLXdpdGgtZW1vamkuaHRtbAppbmRleCA0MDM1
OTNmOWM2NzguLjhhMjkxMjI3MmNkMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvY2hhcmFjdGVyLW9mZnNldC12aXNpYmxlLXBvc2l0aW9uLWNvbnZlcnNpb24td2l0
aC1lbW9qaS5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2NoYXJhY3Rl
ci1vZmZzZXQtdmlzaWJsZS1wb3NpdGlvbi1jb252ZXJzaW9uLXdpdGgtZW1vamkuaHRtbApAQCAt
MSw0MyArMSwzOCBAQAogPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgogPGh0bWw+Ci0gICAgPGhlYWQ+PG1ldGEgY2hhcnNldD0iVVRGLTgiPjwvaGVhZD4KLSAg
ICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
LSAgICA8Ym9keSBpZD0iYm9keSIgdGFiaW5kZXg9IjAiPgotICAgICAgICA8ZGl2IHRhYmluZGV4
PSIwIiBpZD0idGV4dCIgY29udGVudGVkaXRhYmxlPXRydWU+Ci0gICAgICAgIEhpIPCfmI4KLSAg
ICAgICAgPC9kaXY+Ci0KLSAgICAgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Ci0gICAgICAg
IDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotCi0gICAgICAgIDxzY3JpcHQ+Ci0KLSAgICAgICAg
ICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgQ2hhcmFjdGVyT2Zmc2V0IGFuZCBWaXNp
YmxlUG9zaXRpb24gY29udmVydCBjb3JyZWN0bHkgd2hlbiB0aGVyZSBhcmUgY29tcG9zZWQgY2hh
cmFjdGVycy4iKTsKLQotICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsKLSAgICAgICAgICAgIGlm
ICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgICAgICBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5lbmFibGVFbmhhbmNlZEFjY2Vzc2liaWxpdHkodHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgdmFyIHdlYkFyZWEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5yb290
RWxlbWVudC5jaGlsZEF0SW5kZXgoMCk7Ci0gICAgICAgICAgICAgICAgd2ViQXJlYS5zZXRCb29s
QXR0cmlidXRlVmFsdWUoIkFYQ2FyZXRCcm93c2luZ0VuYWJsZWQiLCB0cnVlKTsKLQotICAgICAg
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0IikuZm9jdXMoKTsKLSAgICAg
ICAgICAgICAgICB2YXIgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVF
bGVtZW50QnlJZCgidGV4dCIpOwotCi0gICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93
bigicmlnaHRBcnJvdyIpOwotICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oInJp
Z2h0QXJyb3ciKTsKLSAgICAgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJyaWdodEFy
cm93Iik7Ci0gICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bigicmlnaHRBcnJvdyIp
OwotICAgICAgICAgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnNlbGVjdGVkVGV4
dE1hcmtlclJhbmdlKCk7Ci0gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRSYW5nZSA9IHRleHQu
dGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKLSAgICAgICAgICAgICAgICB2YXIgc3Rh
cnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShlbGVtZW50
UmFuZ2UpOwotICAgICAgICAgICAgICAgIHZhciBlbmRNYXJrZXIgPSB0ZXh0LmVuZFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKLSAgICAgICAgICAgICAgICBk
ZWJ1Zyh0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRleHRNYXJrZXJSYW5nZUZv
ck1hcmtlcnMoZW5kTWFya2VyLCBzdGFydE1hcmtlcikpKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgPC9zY3JpcHQ+Ci0KLSAgICAgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotCi0gICAgPC9ib2R5PgorPGhlYWQ+Cis8bWV0
YSBjaGFyc2V0PSJVVEYtOCI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2FjY2Vzc2li
aWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiB0YWJpbmRleD0i
MCIgaWQ9InRleHQiIGNvbnRlbnRlZGl0YWJsZT10cnVlPgorSGkg8J+YjiB3b3JsZAorPC9kaXY+
CisKKzxzY3JpcHQ+CitsZXQgb3V0cHV0ID0gIlRoaXMgdGVzdHMgdGhhdCBDaGFyYWN0ZXJPZmZz
ZXQgYW5kIFZpc2libGVQb3NpdGlvbiBjb252ZXJ0IGNvcnJlY3RseSB3aGVuIHRoZXJlIGFyZSBj
b21wb3NlZCBjaGFyYWN0ZXJzLlxuXG4iOworCitpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKS5mb2N1cygpOwor
ICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJ0ZXh0Iik7CisKKyAgICAvLyBTZW5kIDQgcmlnaHRBcnJvd3MgdG8gbW92ZSB0aGUgaW5z
ZXJ0aW9uIHBvaW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCB0byBwYXNzZWQgdGhl
IGVtb2ppLgorICAgIGV2ZW50U2VuZGVyLmtleURvd24oInJpZ2h0QXJyb3ciKTsKKyAgICBldmVu
dFNlbmRlci5rZXlEb3duKCJyaWdodEFycm93Iik7CisgICAgZXZlbnRTZW5kZXIua2V5RG93bigi
cmlnaHRBcnJvdyIpOworICAgIGV2ZW50U2VuZGVyLmtleURvd24oInJpZ2h0QXJyb3ciKTsKKwor
ICAgIGxldCBzZWxlY3Rpb25SYW5nZSA9IHRleHQuc2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsK
KyAgICBsZXQgZWxlbWVudFJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRl
eHQpOworICAgIHZhciBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlclJhbmdlKGVsZW1lbnRSYW5nZSk7CisgICAgdmFyIGVuZE1hcmtlciA9IHRleHQuZW5kVGV4
dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShzZWxlY3Rpb25SYW5nZSk7CisgICAgLy8gVGhlIHJh
bmdlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZWxlbWVudCB0byB0aGUgaW5zZXJ0aW9uIHBv
aW50IG11c3QgYmUgJ0hpIPCfmI4nLgorICAgIG91dHB1dCArPSBleHBlY3QoInRleHQuc3RyaW5n
Rm9yVGV4dE1hcmtlclJhbmdlKHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhzdGFydE1h
cmtlciwgZW5kTWFya2VyKSkiLCAiJ0hpIPCfmI4nIik7CisKKyAgICBkZWJ1ZyhvdXRwdXQpOwor
fQorPC9zY3JpcHQ+Cis8L2JvZHk+CiA8L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL2xpc3RtYXJrZXItc3VmZml4LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2xpc3RtYXJrZXItc3VmZml4LWV4cGVjdGVkLnR4dApp
bmRleCAzMzcwNDg1M2UzOTIuLmJlMzUxZDMxZmE0NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvbGlzdG1hcmtlci1zdWZmaXgtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2xpc3RtYXJrZXItc3VmZml4LWV4cGVjdGVkLnR4
dApAQCAtMSwxMyArMSwxMCBAQAotaXRlbSAxCi1pdGVtIDIKIFRoaXMgdGVzdCBtYWtlcyBzdXJl
IHRoZSByaWdodCBzdWZmaXggaXMgcmV0dXJuZWQgd2hlbiBmZXRjaGluZyB0ZXh0IG1hcmtlciBz
dHJpbmdzIGZvciBsaXN0IGl0ZW1zLgogCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KK1BB
U1M6IGxpc3QxLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0UmFuZ2UpID09PSBgJHtidWxs
ZXRTdHJpbmd9IGl0ZW0gMWAKK1BBU1M6IGxpc3QyLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0
ZXh0UmFuZ2UpID09PSAnMS4gaXRlbSAyJwogCi1QQVNTIGxpc3QxLnN0cmluZ0ZvclRleHRNYXJr
ZXJSYW5nZSh0ZXh0UmFuZ2UpIGlzIGJ1bGxldFN0cmluZyArICcgaXRlbSAxJwotUEFTUyBsaXN0
Mi5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dFJhbmdlKSBpcyAnMS4gaXRlbSAyJwogUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCi0KK2l0ZW0gMQor
aXRlbSAyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9saXN0bWFy
a2VyLXN1ZmZpeC5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvbGlzdG1hcmtl
ci1zdWZmaXguaHRtbAppbmRleCA0YmUzZjViZmRjNmMuLjljYWQyNjg4ZmY3MSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvbGlzdG1hcmtlci1zdWZmaXguaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9saXN0bWFya2VyLXN1ZmZpeC5odG1s
CkBAIC0xLDExICsxLDggQEAKIDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KIDxodG1sPgogPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci1pZiAod2luZG93LnRlc3RSdW5uZXIp
Ci0gICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLTwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJv
ZHk+CiAKQEAgLTE3LDI5ICsxNCwyMSBAQCBpZiAod2luZG93LnRlc3RSdW5uZXIpCiA8bGkgaWQ9
Imxpc3RpdGVtMiI+aXRlbSAyPC9saT4KIDwvb2w+CiAKLQotPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLQogPHNjcmlwdD4KK2xldCBvdXRwdXQgPSAi
VGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhlIHJpZ2h0IHN1ZmZpeCBpcyByZXR1cm5lZCB3aGVuIGZl
dGNoaW5nIHRleHQgbWFya2VyIHN0cmluZ3MgZm9yIGxpc3QgaXRlbXMuXG5cbiI7CiAKLSAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhlIHJpZ2h0IHN1ZmZpeCBpcyByZXR1
cm5lZCB3aGVuIGZldGNoaW5nIHRleHQgbWFya2VyIHN0cmluZ3MgZm9yIGxpc3QgaXRlbXMuIik7
CitpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgdmFyIGxpc3QxID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsaXN0aXRlbTEi
KTsKKyAgICB2YXIgdGV4dFJhbmdlID0gbGlzdDEudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudChs
aXN0MSk7CisgICAgdmFyIGJ1bGxldFN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMDIy
KTsKKyAgICBvdXRwdXQgKz0gZXhwZWN0KCJsaXN0MS5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uo
dGV4dFJhbmdlKSIsICJgJHtidWxsZXRTdHJpbmd9IGl0ZW0gMWAiKTsKIAotICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKLSAgICAgICAgdmFyIGxpc3QxID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsaXN0aXRlbTEiKTsKLSAg
ICAgICAgdmFyIHRleHRSYW5nZSA9IGxpc3QxLnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQobGlz
dDEpOwotICAgICAgICB2YXIgYnVsbGV0U3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDIw
MjIpOwotICAgICAgICBzaG91bGRCZSgibGlzdDEuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRl
eHRSYW5nZSkiLCAiYnVsbGV0U3RyaW5nICsgJyBpdGVtIDEnIik7Ci0KLSAgICAgICAgdmFyIGxp
c3QyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsaXN0
aXRlbTIiKTsKLSAgICAgICAgdmFyIHRleHRSYW5nZSA9IGxpc3QyLnRleHRNYXJrZXJSYW5nZUZv
ckVsZW1lbnQobGlzdDIpOwotICAgICAgICBzaG91bGRCZSgibGlzdDIuc3RyaW5nRm9yVGV4dE1h
cmtlclJhbmdlKHRleHRSYW5nZSkiLCAiJzEuIGl0ZW0gMiciKTsKLSAgICB9CisgICAgdmFyIGxp
c3QyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsaXN0
aXRlbTIiKTsKKyAgICB0ZXh0UmFuZ2UgPSBsaXN0Mi50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50
KGxpc3QyKTsKKyAgICBvdXRwdXQgKz0gZXhwZWN0KCJsaXN0Mi5zdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dFJhbmdlKSIsICInMS4gaXRlbSAyJyIpOwogCisgICAgZGVidWcob3V0cHV0KTsK
K30KIDwvc2NyaXB0PgotCi08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Ci0KIDwvYm9keT4KIDwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyL3RleHQtbWFya2Vy
LXByZXZpb3VzLW5leHQuaHRtbAppbmRleCAzOGYxM2VkN2EzZWMuLjY2Mzk3NDZjOWRmYSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtl
ci1wcmV2aW91cy1uZXh0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90ZXh0
LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0Lmh0bWwKQEAgLTE0Nyw3ICsxNDcsNyBA
QCBmCiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKQogICAgICAgICAgICAgY3Vy
cmVudE1hcmtlciA9IHRleHQzLnByZXZpb3VzVGV4dE1hcmtlcihjdXJyZW50TWFya2VyKTsKICAg
ICAgICAgbWFya2VyMiA9IGN1cnJlbnRNYXJrZXI7Ci0gICAgICAgIG1hcmtlclJhbmdlID0gdGV4
dDMudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhtYXJrZXIxLCBtYXJrZXIyKTsKKyAgICAgICAg
bWFya2VyUmFuZ2UgPSB0ZXh0My50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKG1hcmtlcjIsIG1h
cmtlcjEpOwogICAgICAgICBvdXRwdXQgKz0gZXhwZWN0KCJ0ZXh0My5zdHJpbmdGb3JUZXh0TWFy
a2VyUmFuZ2UobWFya2VyUmFuZ2UpIiwgIidzZWwnIik7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhl
IGNhc2Ugd2l0aCBwYXNzd29yZCBmaWVsZC4KQEAgLTIyOSw3ICsyMjksNyBAQCBmCiAgICAgICAg
ICAgICBwcmV2aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7CiAgICAgICAgICAgICBjdXJyZW50
TWFya2VyID0gdGV4dC5wcmV2aW91c1RleHRNYXJrZXIoY3VycmVudE1hcmtlcik7CiAgICAgICAg
IH0KLSAgICAgICAgbWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMo
cHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIpCisgICAgICAgIG1hcmtlclJhbmdlID0gdGV4
dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKGN1cnJlbnRNYXJrZXIsIHByZXZpb3VzTWFya2Vy
KTsKICAgICAgICAgb3V0cHV0ICs9IGV4cGVjdCgidGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2UobWFya2VyUmFuZ2UpIiwgIidcdUZGRkMnIik7CiAKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbnRlbnQiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>