<?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>239412</bug_id>
          
          <creation_ts>2022-04-15 17:13:24 -0700</creation_ts>
          <short_desc>Drop String::truncate() and use String::left() instead</short_desc>
          <delta_ts>2022-04-16 20:58:14 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1861988</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 17:13:24 -0700</bug_when>
    <thetext>String::truncate() and String::left() have identical behavior. The only difference is that truncate() modifies the String in place (which is a bit confusing), while left() returns a new String, without modifying the original.
To simplify our API, I am dropping String::truncate().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861989</commentid>
    <comment_count>1</comment_count>
      <attachid>457737</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 17:16:44 -0700</bug_when>
    <thetext>Created attachment 457737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862083</commentid>
    <comment_count>2</comment_count>
      <attachid>457737</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-16 14:11:05 -0700</bug_when>
    <thetext>Comment on attachment 457737
Patch

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

&gt; Source/WebCore/dom/FragmentDirectiveParser.cpp:105
&gt; +            firstToken = firstToken.left(tokens.first().length() - 2);
&gt;              
&gt;              if (auto prefix = WTF::URLParser::formURLDecode(tokens.takeFirst()))

It’s unnecessary to truncate in place. Instead it can be more like this:

    auto takenFirstToken = tokens.takeFirst();
    if (auto prefix = URLParser::formURLDecode(StringView(takenFirstToken).left(firstToken.length() - 2)))

Notice that this means we don’t have to call String::left, which allocates memory!

&gt; Source/WebCore/html/HTMLImageElement.cpp:216
&gt;              String type = typeAttribute.string();
&gt; -            type.truncate(type.find(&apos;;&apos;));
&gt; -            type = stripLeadingAndTrailingHTMLSpaces(type);
&gt; +            type = stripLeadingAndTrailingHTMLSpaces(type.left(type.find(&apos;;&apos;)));
&gt;              if (!type.isEmpty() &amp;&amp; !MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType(type))
&gt;                  continue;

This allocates an intermediate string after finding the &quot;;&quot;, but before stripping the spaces, so it can allocate two strings. We can do this without double allocation.

    StringView typeView = typeAttribute;
    typeView = typeView.left(typeView.find(&apos;;)).stripLeadingAndTrailingMatchedCharacters(isHTMLSpace&lt;UChar&gt;);
    if (!typeView.isEmpty()) {
        auto typeString = typeView == typeAttribute ? typeAttribute.string() : typeView.toString();
        if (!MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType(typeString))
            continue;
    }

But unfortunately it’s longer code. Not sure how you feel about this.

&gt; Source/WebCore/html/TextFieldInputType.cpp:627
&gt; +    eventText = eventText.left(textLength).replace(&quot;\r\n&quot;, &quot; &quot;).replace(&apos;\r&apos;, &apos; &apos;).replace(&apos;\n&apos;, &apos; &apos;);

New code is no worse, but so inefficient to make so many buffers! This operation could be written to use a maximum of one buffer by working on a copy of the string in place, but instead way this code works, we can have up to 3 intermediate String objects plus the final String object passed into limitText, which might create one more. A worst case of 5 malloc/free pairs instead of 1. Probably doesn’t matter, though.

&gt; Source/WebCore/loader/FrameLoader.cpp:760
&gt; +            headerContentLanguage = stripLeadingAndTrailingHTMLSpaces(headerContentLanguage.left(headerContentLanguage.find(&apos;,&apos;))); // notFound == -1 == don&apos;t truncate.

This can allocate two strings instead of 1. This is the exact same operation as HTMLImageElement::bestFitSourceFromPictureElement, but with &quot;,&quot; instead of &quot;;&quot;, with the same opportunity for a better algorithm.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:49
&gt; +            auto codecStringView = StringView(codecString).left(codecString.find(&apos;.&apos;));
&gt; +            auto codecIdentifier = FourCC::fromString(codecStringView.left(4));

How about a one liner:

    if (auto identifier = FourCC::fromString(StringView(codecString).left(codecString.find(&apos;.&apos;)).left(4)))

&gt; Source/WebKitLegacy/win/WebDownloadCFNet.cpp:195
&gt; +        m_destination = StringView(m_bundlePath).left(m_destination.length() - DownloadBundle::fileExtension().length()).toString();

I’m not sure I understand why isolatedCopy is needed. If it’s not, then we should use String::left instead of StringView::left.

If it is needed, then not thrilled that it’s now hidden in the use of StringView::toString. It good for efficiency that we don’t make an extra copy, though, if we do need it!

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1342
&gt; +    messageString = messageString.left(messageString.find(UChar(0)));

Could use nullCharacter from CharacterNames.h instead of UChar(0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862086</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-16 15:36:52 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 457737 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457737&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/FragmentDirectiveParser.cpp:105
&gt; &gt; +            firstToken = firstToken.left(tokens.first().length() - 2);
&gt; &gt;              
&gt; &gt;              if (auto prefix = WTF::URLParser::formURLDecode(tokens.takeFirst()))
&gt; 
&gt; It’s unnecessary to truncate in place. Instead it can be more like this:
&gt; 
&gt;     auto takenFirstToken = tokens.takeFirst();
&gt;     if (auto prefix =
&gt; URLParser::formURLDecode(StringView(takenFirstToken).left(firstToken.
&gt; length() - 2)))
&gt; 
&gt; Notice that this means we don’t have to call String::left, which allocates
&gt; memory!
&gt; 
&gt; &gt; Source/WebCore/html/HTMLImageElement.cpp:216
&gt; &gt;              String type = typeAttribute.string();
&gt; &gt; -            type.truncate(type.find(&apos;;&apos;));
&gt; &gt; -            type = stripLeadingAndTrailingHTMLSpaces(type);
&gt; &gt; +            type = stripLeadingAndTrailingHTMLSpaces(type.left(type.find(&apos;;&apos;)));
&gt; &gt;              if (!type.isEmpty() &amp;&amp; !MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType(type))
&gt; &gt;                  continue;
&gt; 
&gt; This allocates an intermediate string after finding the &quot;;&quot;, but before
&gt; stripping the spaces, so it can allocate two strings. We can do this without
&gt; double allocation.
&gt; 
&gt;     StringView typeView = typeAttribute;
&gt;     typeView =
&gt; typeView.left(typeView.find(&apos;;)).
&gt; stripLeadingAndTrailingMatchedCharacters(isHTMLSpace&lt;UChar&gt;);
&gt;     if (!typeView.isEmpty()) {
&gt;         auto typeString = typeView == typeAttribute ? typeAttribute.string()
&gt; : typeView.toString();
&gt;         if
&gt; (!MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType(typeString))
&gt;             continue;
&gt;     }
&gt; 
&gt; But unfortunately it’s longer code. Not sure how you feel about this.
&gt; 
&gt; &gt; Source/WebCore/html/TextFieldInputType.cpp:627
&gt; &gt; +    eventText = eventText.left(textLength).replace(&quot;\r\n&quot;, &quot; &quot;).replace(&apos;\r&apos;, &apos; &apos;).replace(&apos;\n&apos;, &apos; &apos;);
&gt; 
&gt; New code is no worse, but so inefficient to make so many buffers! This
&gt; operation could be written to use a maximum of one buffer by working on a
&gt; copy of the string in place, but instead way this code works, we can have up
&gt; to 3 intermediate String objects plus the final String object passed into
&gt; limitText, which might create one more. A worst case of 5 malloc/free pairs
&gt; instead of 1. Probably doesn’t matter, though.
&gt; 
&gt; &gt; Source/WebCore/loader/FrameLoader.cpp:760
&gt; &gt; +            headerContentLanguage = stripLeadingAndTrailingHTMLSpaces(headerContentLanguage.left(headerContentLanguage.find(&apos;,&apos;))); // notFound == -1 == don&apos;t truncate.
&gt; 
&gt; This can allocate two strings instead of 1. This is the exact same operation
&gt; as HTMLImageElement::bestFitSourceFromPictureElement, but with &quot;,&quot; instead
&gt; of &quot;;&quot;, with the same opportunity for a better algorithm.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:49
&gt; &gt; +            auto codecStringView = StringView(codecString).left(codecString.find(&apos;.&apos;));
&gt; &gt; +            auto codecIdentifier = FourCC::fromString(codecStringView.left(4));
&gt; 
&gt; How about a one liner:
&gt; 
&gt;     if (auto identifier =
&gt; FourCC::fromString(StringView(codecString).left(codecString.find(&apos;.&apos;)).
&gt; left(4)))
&gt; 
&gt; &gt; Source/WebKitLegacy/win/WebDownloadCFNet.cpp:195
&gt; &gt; +        m_destination = StringView(m_bundlePath).left(m_destination.length() - DownloadBundle::fileExtension().length()).toString();
&gt; 
&gt; I’m not sure I understand why isolatedCopy is needed. If it’s not, then we
&gt; should use String::left instead of StringView::left.
&gt; 
&gt; If it is needed, then not thrilled that it’s now hidden in the use of
&gt; StringView::toString. It good for efficiency that we don’t make an extra
&gt; copy, though, if we do need it!

I only dropped it because StringView().toString() was going to create a fresh (thus isolated) String anyway. That said, you are right that it is a bit obscure. I am going to use StringView().toString().isolatedCopy() for clarity. There should be no cost in perf anyway because isolatedCopy() will get optimized out since this is an r-value reference with a refcount of 1.

&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1342
&gt; &gt; +    messageString = messageString.left(messageString.find(UChar(0)));
&gt; 
&gt; Could use nullCharacter from CharacterNames.h instead of UChar(0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862089</commentid>
    <comment_count>4</comment_count>
      <attachid>457757</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-16 15:43:11 -0700</bug_when>
    <thetext>Created attachment 457757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862106</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-16 20:57:43 -0700</bug_when>
    <thetext>Committed r292945 (249710@main): &lt;https://commits.webkit.org/249710@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457757.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862107</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-16 20:58:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/91856687&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457737</attachid>
            <date>2022-04-15 17:16:44 -0700</date>
            <delta_ts>2022-04-16 15:43:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239412-20220415171643.patch</filename>
            <type>text/plain</type>
            <size>19908</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQwN2ZjOWNjMGRmMjNmNTMxNTFiZWQ0
YzkxNjViYWE3NjFkZmJhZmQuLjIwYzg2YmIwYmM5NTkxMDc2ZGQ1ZTI1MzgyMDczYzdiMWViOGVj
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjItMDQtMTUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZzo6dHJ1bmNhdGUoKSBhbmQgdXNlIFN0
cmluZzo6bGVmdCgpIGluc3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzOTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFN0cmluZzo6dHJ1bmNhdGUoKSBhbmQgU3RyaW5nOjpsZWZ0KCkgaGF2ZSBp
ZGVudGljYWwgYmVoYXZpb3IuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0cnVuY2F0ZSgp
CisgICAgICAgIG1vZGlmaWVzIHRoZSBTdHJpbmcgaW4gcGxhY2UgKHdoaWNoIGlzIGEgYml0IGNv
bmZ1c2luZyksIHdoaWxlIGxlZnQoKSByZXR1cm5zIGEgbmV3IFN0cmluZywgd2l0aG91dAorICAg
ICAgICBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLiBUbyBzaW1wbGlmeSBvdXIgQVBJLCBJIGFtIGRy
b3BwaW5nIFN0cmluZzo6dHJ1bmNhdGUoKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmlu
Zy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6dHJ1bmNhdGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAqIHd0Zi91bml4L0xhbmd1YWdlVW5p
eC5jcHA6CisgICAgICAgIChXVEY6OnBsYXRmb3JtTGFuZ3VhZ2UpOgorICAgICAgICAqIHd0Zi93
aW4vTGFuZ3VhZ2VXaW4uY3BwOgorICAgICAgICAoV1RGOjpsb2NhbGVJbmZvKToKKwogMjAyMi0w
NC0xNSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S11bV1BFXSBSZW1vdmUgZXhjbHVzaXZlIGJ1aWxkIGd1YXJkcyBhcm91bmQgR1BVIHByb2Nlc3Mg
cHJlZmVyZW5jZXMsIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNTlhOThjZjlmODg1OWE0NDJiYzhkZmJj
ZTY4M2E3NGQ3ZDg2ZjU1Li5kMWE3NDI4NmFmYzExZWNlM2FkNWY4MTAzMDRhMDJkN2U3NTA3Y2U0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjItMDQtMTUgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZzo6dHJ1bmNhdGUoKSBhbmQg
dXNlIFN0cmluZzo6bGVmdCgpIGluc3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzOTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBcHBIaWdobGlnaHRSYW5nZURhdGEpOgor
ICAgICAgICAqIGRvbS9GcmFnbWVudERpcmVjdGl2ZVBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGcmFnbWVudERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VGcmFnbWVudERpcmVjdGl2ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OmJlc3RGaXRTb3VyY2VGcm9tUGljdHVyZUVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRG
aWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICAq
IGxvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RSZXN1
bHQ6OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZEJlZ2luRG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2Uv
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGFu
Z3VhZ2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9BVkFzc2V0VHJhY2tVdGlsaXRpZXMubW06CisgICAgICAgIChXZWJDb3JlOjpjb250
ZW50VHlwZXNUb0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9oeXBoZW4vSHlwaGVu
YXRpb25MaWJIeXBoZW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkRpcmVjdG9yeUZvckRp
Y3Rpb25hcmllcyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0VVJMKToKKwogMjAyMi0wNC0xNSAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFdLV2ViVmlldyBmYWxz
ZSBwb3NpdGl2ZSB3aGVuIHRlc3RpbmcgYS5yZWxMaXN0LnN1cHBvcnRzKCJhciIpLCBmYWlscyB0
byBvcGVuIFVTRFogaW4gQVIgUXVpY2tMb29rCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM4NWYxMzNkZDYyYWNmMjAz
MzkzNmY4ODI0MTc0ZjVmYWJiOTU1M2QuLmQxZDQzNjVhYWQ0NDRjM2YxOTgwMzAyNDQyY2M5MmUy
MjJhYTVlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDQtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZzo6dHJ1bmNhdGUo
KSBhbmQgdXNlIFN0cmluZzo6bGVmdCgpIGluc3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRVc2VyRGlyZWN0b3J5U3VmZml4KToKKwogMjAyMi0w
NC0xNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
bmV3IGR5bGQgc3VwcG9ydCBzYW5kYm94IHJ1bGVzIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9n
CmluZGV4IDU4NjhmZDUwMmE5MmUzMWY4YjM3MDNmMDMxNTBiODAxN2QxNDQwN2QuLmFkZDYwNGYw
NzdlMThhZGUxODY0ZWMxOTg2YjU0NTA4ZjI3MWE1NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wNC0xNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIERyb3AgU3RyaW5nOjp0cnVuY2F0ZSgpIGFuZCB1c2UgU3Ry
aW5nOjpsZWZ0KCkgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM5NDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJEb3dubG9hZENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkRvd25sb2Fk
Ojppbml0VG9SZXN1bWVXaXRoQnVuZGxlKToKKwogMjAyMi0wNC0xNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgaW5lZmZpY2llbnQgU3RyaW5nOjphcHBl
bmQoKSBvdmVybG9hZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCBkYzk0MTA0YjU5
MmQxMDhkMDBiODI1ODA3NjJiMTE1MThmMDdjZGQ5Li5iMjI5MDdmYzg5M2ViNWFkM2MyY2YyZTIz
OGUwMThkZjljYTgyOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC0xOTUsMTIg
KzE5NSw2IEBAIFVDaGFyMzIgU3RyaW5nOjpjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkIGkp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyU3RhcnRpbmdBdChpKTsKIH0KIAot
dm9pZCBTdHJpbmc6OnRydW5jYXRlKHVuc2lnbmVkIHBvc2l0aW9uKQotewotICAgIGlmIChtX2lt
cGwpCi0gICAgICAgIG1faW1wbCA9IG1faW1wbC0+c3Vic3RyaW5nKDAsIHBvc2l0aW9uKTsKLX0K
LQogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIHZvaWQgU3RyaW5nOjpy
ZW1vdmVJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBw
b3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoVG9SZW1vdmUpCiB7CiAgICAgQ2hhcmFjdGVyVHlwZSog
ZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDllNjM5NGE5YjNlZmIwZmU2Njg1Yjg5
MTAwNGRkZWM4YmNlMDVjNjAuLjZkZGU0M2UwODBlNzc3ZDg4NTUzMzY5ZWNhNGUzZjZhZTg5NmZl
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMTk4LDkgKzE5OCw2IEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcmIHJlcGxhY2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgU3Ry
aW5nVmlldyByZXBsYWNlbWVudCk7CiAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291
bnQ+IFN0cmluZyYgcmVwbGFjZVdpdGhMaXRlcmFsKFVDaGFyIHRhcmdldCwgY29uc3QgY2hhciAo
JnJlcGxhY2VtZW50KVtjaGFyYWN0ZXJDb3VudF0pOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMg
aWRlbnRpZmljYWwgdG8gbGVmdCgpIGFuZCBzaG91bGQgcHJvYmFibHkgYmUgZHJvcHBlZC4KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB0cnVuY2F0ZSh1bnNpZ25lZCBsZW5ndGgpOwotCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNp
Z25lZCBsZW5ndGggPSAxKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3Vic3Ry
aW5nKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGggPSBNYXhMZW5ndGgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5peC9MYW5ndWFnZVVuaXguY3BwIGIvU291
cmNlL1dURi93dGYvdW5peC9MYW5ndWFnZVVuaXguY3BwCmluZGV4IDhiZTJmNjFmNzliNWM1YTk3
NWNjNTExOThkMWI4ZWUwMjQ3MjNhMTcuLmZlZDIwZmM1MDY0NDMwNWM5ODA3MjgzNDdkMmJkYjNl
ZDRhNzdhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaXgvTGFuZ3VhZ2VVbml4LmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bml4L0xhbmd1YWdlVW5peC5jcHAKQEAgLTM4LDggKzM4
LDcgQEAgc3RhdGljIFN0cmluZyBwbGF0Zm9ybUxhbmd1YWdlKCkKIAogICAgIFN0cmluZyBub3Jt
YWxpemVkRGVmYXVsdCA9IGxvY2FsZURlZmF1bHQ7CiAgICAgbm9ybWFsaXplZERlZmF1bHQucmVw
bGFjZSgnXycsICctJyk7Ci0gICAgbm9ybWFsaXplZERlZmF1bHQudHJ1bmNhdGUobm9ybWFsaXpl
ZERlZmF1bHQuZmluZCgnLicpKTsKLSAgICByZXR1cm4gbm9ybWFsaXplZERlZmF1bHQ7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZWREZWZhdWx0LmxlZnQobm9ybWFsaXplZERlZmF1bHQuZmluZCgnLicp
KTsKIH0KIAogVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKFNo
b3VsZE1pbmltaXplTGFuZ3VhZ2VzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL0xh
bmd1YWdlV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9MYW5ndWFnZVdpbi5jcHAKaW5kZXgg
YzkyYTc3YThjMTY0MjllMGZkNjI0NDI0MTIwMWIzZTk2NTMzMGRkNy4uZjA4YjY1MmMwZTlhMzVm
MzBlYzU1MDczOGVhYTIyN2IzMjhkMDQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2lu
L0xhbmd1YWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vTGFuZ3VhZ2VXaW4uY3Bw
CkBAIC01MSw4ICs1MSw3IEBAIHN0YXRpYyBTdHJpbmcgbG9jYWxlSW5mbyhMQ1RZUEUgbG9jYWxl
VHlwZSwgY29uc3QgU3RyaW5nJiBmYWxsYmFjaykKICAgICBpZiAobG9jYWxlTmFtZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxsYmFjazsKIAotICAgIGxvY2FsZU5hbWUudHJ1bmNhdGUo
bG9jYWxlTmFtZS5sZW5ndGgoKSAtIDEpOwotICAgIHJldHVybiBsb2NhbGVOYW1lOworICAgIHJl
dHVybiBsb2NhbGVOYW1lLmxlZnQobG9jYWxlTmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCiBzdGF0
aWMgU3RyaW5nIHBsYXRmb3JtTGFuZ3VhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmNwcAppbmRleCA3YjJlMTVi
MGJhYzZiNWVlZGU2YWZhZmY2OWQ0ZmJkZjJmZjgzNDE2Li4yNGY2NTUyYjNmMTQ2MWUwMGUwNDI2
ODQ2MzU1OGE1Njg5NjZkNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hp
Z2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2hpZ2hsaWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmNwcApAQCAtMjAzLDggKzIwMyw3IEBA
IHN0YXRpYyBBcHBIaWdobGlnaHRSYW5nZURhdGE6Ok5vZGVQYXRoIG1ha2VOb2RlUGF0aChSZWZQ
dHI8Tm9kZT4mJiBub2RlKQogCiBzdGF0aWMgQXBwSGlnaGxpZ2h0UmFuZ2VEYXRhIGNyZWF0ZUFw
cEhpZ2hsaWdodFJhbmdlRGF0YShjb25zdCBTdGF0aWNSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgYXV0
byB0ZXh0ID0gcGxhaW5UZXh0KHJhbmdlKTsKLSAgICB0ZXh0LnRydW5jYXRlKHRleHRQcmV2aWV3
TGVuZ3RoKTsKKyAgICBhdXRvIHRleHQgPSBwbGFpblRleHQocmFuZ2UpLmxlZnQodGV4dFByZXZp
ZXdMZW5ndGgpOwogICAgIGF1dG8gaWRlbnRpZmllciA9IGNyZWF0ZVZlcnNpb240VVVJRFN0cmlu
ZygpOwogCiAgICAgcmV0dXJuIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GcmFn
bWVudERpcmVjdGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnJhZ21lbnREaXJl
Y3RpdmVQYXJzZXIuY3BwCmluZGV4IDJhNDQ0MmFjZGNkOGZhN2VlMWM5NDJmMjhlMGNmMzQ0YTdm
N2RhYzMuLjc2NjJlMTMxNjcwZmIwYjE5M2NiZGU3YTlkMTRkYjY3MzNjMTNmMDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GcmFnbWVudERpcmVjdGl2ZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0ZyYWdtZW50RGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtOTksOCAr
OTksOCBAQCB2b2lkIEZyYWdtZW50RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUZyYWdtZW50RGlyZWN0
aXZlKFN0cmluZ1ZpZXcgZnJhZ21lbnREaXJlY3RpdgogICAgICAgICAKICAgICAgICAgUGFyc2Vk
VGV4dERpcmVjdGl2ZSBwYXJzZWRUZXh0RGlyZWN0aXZlOwogICAgICAgICAKLSAgICAgICAgaWYg
KHRva2Vucy5maXJzdCgpLmVuZHNXaXRoKCctJykgJiYgdG9rZW5zLmZpcnN0KCkubGVuZ3RoKCkg
PiAxKSB7Ci0gICAgICAgICAgICB0b2tlbnMuZmlyc3QoKS50cnVuY2F0ZSh0b2tlbnMuZmlyc3Qo
KS5sZW5ndGgoKSAtIDIpOworICAgICAgICBpZiAoYXV0byYgZmlyc3RUb2tlbiA9IHRva2Vucy5m
aXJzdCgpOyBmaXJzdFRva2VuLmVuZHNXaXRoKCctJykgJiYgZmlyc3RUb2tlbi5sZW5ndGgoKSA+
IDEpIHsKKyAgICAgICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFRva2VuLmxlZnQodG9rZW5zLmZp
cnN0KCkubGVuZ3RoKCkgLSAyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGF1dG8g
cHJlZml4ID0gV1RGOjpVUkxQYXJzZXI6OmZvcm1VUkxEZWNvZGUodG9rZW5zLnRha2VGaXJzdCgp
KSkKICAgICAgICAgICAgICAgICBwYXJzZWRUZXh0RGlyZWN0aXZlLnByZWZpeCA9IFdURk1vdmUo
KnByZWZpeCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAppbmRleCA4
MDcwYWYwM2IyYTJiYWJhMTk5YzYzYzA3YWQzOGM2YzQ3MGYzNTNkLi5iNmI3YmY1NWQ4ZTA5ZGU1
OGVlY2Y1N2MwZWJmMzA0OTkzYzE3MzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHAKQEAgLTIxMSw4ICsyMTEsNyBAQCBJbWFnZUNhbmRpZGF0ZSBIVE1MSW1hZ2VF
bGVtZW50OjpiZXN0Rml0U291cmNlRnJvbVBpY3R1cmVFbGVtZW50KCkKICAgICAgICAgYXV0byYg
dHlwZUF0dHJpYnV0ZSA9IHNvdXJjZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHR5
cGVBdHRyKTsKICAgICAgICAgaWYgKCF0eXBlQXR0cmlidXRlLmlzTnVsbCgpKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgdHlwZSA9IHR5cGVBdHRyaWJ1dGUuc3RyaW5nKCk7Ci0gICAgICAgICAgICB0
eXBlLnRydW5jYXRlKHR5cGUuZmluZCgnOycpKTsKLSAgICAgICAgICAgIHR5cGUgPSBzdHJpcExl
YWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModHlwZSk7CisgICAgICAgICAgICB0eXBlID0gc3Ry
aXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHR5cGUubGVmdCh0eXBlLmZpbmQoJzsnKSkp
OwogICAgICAgICAgICAgaWYgKCF0eXBlLmlzRW1wdHkoKSAmJiAhTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZVZpZGVvT3JTVkdNSU1FVHlwZSh0eXBlKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9U
ZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuY3BwCmluZGV4IDAxYjc0ZjcyNzIyYjA2MjI1YTI2NmE0MjQzYWFjYWJhMDExMDZkM2Mu
LjdjMTBiN2FiZTdhYzBiYjNlNTg3NGMwMjNkODJjZjQyZDVhMzIyMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTYyNCwxMCArNjI0LDcgQEAgdm9p
ZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50JgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBldmVudFRleHQu
bGVuZ3RoKCk7CiAgICAgd2hpbGUgKHRleHRMZW5ndGggPiAwICYmIGlzSFRNTExpbmVCcmVhayhl
dmVudFRleHRbdGV4dExlbmd0aCAtIDFdKSkKICAgICAgICAgdGV4dExlbmd0aC0tOwotICAgIGV2
ZW50VGV4dC50cnVuY2F0ZSh0ZXh0TGVuZ3RoKTsKLSAgICBldmVudFRleHQucmVwbGFjZSgiXHJc
biIsICIgIik7Ci0gICAgZXZlbnRUZXh0LnJlcGxhY2UoJ1xyJywgJyAnKTsKLSAgICBldmVudFRl
eHQucmVwbGFjZSgnXG4nLCAnICcpOworICAgIGV2ZW50VGV4dCA9IGV2ZW50VGV4dC5sZWZ0KHRl
eHRMZW5ndGgpLnJlcGxhY2UoIlxyXG4iLCAiICIpLnJlcGxhY2UoJ1xyJywgJyAnKS5yZXBsYWNl
KCdcbicsICcgJyk7CiAgICAgZXZlbnQuc2V0VGV4dChsaW1pdExlbmd0aChldmVudFRleHQsIGFw
cGVuZGFibGVMZW5ndGgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZUUERpcmVjdG9yeVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9y
eVBhcnNlci5oCmluZGV4IDMyNWIzN2E2ZjdjNGViNGE5MGEwMWIyM2FmZjdiY2Y1ZjU3YzFiZjIu
Ljk5ZTdhYmFkNzk0M2UyMWJjNzQ1OTM4NGI3MDUzNDZlNTVkNmVkMGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5UGFyc2VyLmgKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdHJ1
Y3QgTGlzdFJlc3VsdAogICAgICAgICBmaWxlbmFtZUxlbmd0aCA9IDA7CiAgICAgICAgIGxpbmtu
YW1lID0gbnVsbHB0cjsKICAgICAgICAgbGlua25hbWVMZW5ndGggPSAwOwotICAgICAgICBmaWxl
U2l6ZS50cnVuY2F0ZSgwKTsKKyAgICAgICAgZmlsZVNpemUgPSB7IH07CiAgICAgICAgIGNhc2VT
ZW5zaXRpdmUgPSBmYWxzZTsKICAgICAgICAgbWVtc2V0KCZtb2RpZmllZFRpbWUsIDAsIHNpemVv
ZihGVFBUaW1lKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5k
ZXggNWM0MjcwNWE1MmZlNGI2YTViN2I5MTc3MTMwYzFjM2ZjOWE2MThjMy4uZDY3ODBiNzIwYTBh
MTc3ZTI5YWRkMTljMTEyYzBlMTRhMGIzZTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCkBAIC03NTcsOSArNzU3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGlkQmVnaW5E
b2N1bWVudChib29sIGRpc3BhdGNoKQogCiAgICAgICAgIFN0cmluZyBoZWFkZXJDb250ZW50TGFu
Z3VhZ2UgPSBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZTo6Q29udGVudExhbmd1YWdlKTsKICAgICAgICAgaWYgKCFoZWFkZXJDb250ZW50
TGFuZ3VhZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzaXplX3QgY29tbWFJbmRleCA9IGhl
YWRlckNvbnRlbnRMYW5ndWFnZS5maW5kKCcsJyk7Ci0gICAgICAgICAgICBoZWFkZXJDb250ZW50
TGFuZ3VhZ2UudHJ1bmNhdGUoY29tbWFJbmRleCk7IC8vIG5vdEZvdW5kID09IC0xID09IGRvbid0
IHRydW5jYXRlCi0gICAgICAgICAgICBoZWFkZXJDb250ZW50TGFuZ3VhZ2UgPSBzdHJpcExlYWRp
bmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoaGVhZGVyQ29udGVudExhbmd1YWdlKTsKKyAgICAgICAg
ICAgIGhlYWRlckNvbnRlbnRMYW5ndWFnZSA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyhoZWFkZXJDb250ZW50TGFuZ3VhZ2UubGVmdChoZWFkZXJDb250ZW50TGFuZ3VhZ2UuZmlu
ZCgnLCcpKSk7IC8vIG5vdEZvdW5kID09IC0xID09IGRvbid0IHRydW5jYXRlLgogICAgICAgICAg
ICAgaWYgKCFoZWFkZXJDb250ZW50TGFuZ3VhZ2UuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
IG1fZnJhbWUuZG9jdW1lbnQoKS0+c2V0Q29udGVudExhbmd1YWdlKGhlYWRlckNvbnRlbnRMYW5n
dWFnZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKaW5kZXggYTc1ZjcwY2U1YjI5N2Y4YWU2YThjMTU0
NTUzM2I3YjcxMjk4MWZhMC4uMTI1M2I1ODAwNWI1MmZiYTI0MTA4Mjg2MTI3YzRkMTMyZjBkMDQ1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5jcHAKQEAgLTY2Miw3ICs2NjIsNyBAQCBzdGF0aWMgU3RyaW5nIGxhbmd1YWdl
SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGxhbmd1YWdlQ29kZSkKIAogICAgIC8vIE5lZWQgMlUg
aGVyZSB0byBkaXNhbWJpZ3VhdGUgU3RyaW5nOjpvcGVyYXRvcltdIGZyb20gb3BlcmF0b3IoTlNT
dHJpbmcqLCBpbnQpW10gaW4gYSBwcm9kdWN0aW9uIGJ1aWxkLgogICAgIGlmIChsb3dlcmNhc2VM
YW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiAobG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJVXSA9
PSAnXycgfHwgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJVXSA9PSAnLScpKQotICAgICAgICBsb3dl
cmNhc2VMYW5ndWFnZUNvZGUudHJ1bmNhdGUoMik7CisgICAgICAgIGxvd2VyY2FzZUxhbmd1YWdl
Q29kZSA9IGxvd2VyY2FzZUxhbmd1YWdlQ29kZS5sZWZ0KDIpOwogCiAgICAgcmV0dXJuIGxvd2Vy
Y2FzZUxhbmd1YWdlQ29kZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0FWQXNzZXRUcmFja1V0aWxpdGllcy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0FWQXNzZXRU
cmFja1V0aWxpdGllcy5tbQppbmRleCAwZGFmYzhiZmQ0MWJkMDRiOTc4YzQ5ODQxZmFlYTAwOGY4
MmI0NGMyLi4zOTliMDljZDI2Njg0OTI1Y2ViNTU2YTBlMGUwNjI4MTViNzQyNzRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9B
VkFzc2V0VHJhY2tVdGlsaXRpZXMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQVZBc3NldFRyYWNrVXRpbGl0aWVzLm1tCkBAIC00NSwx
MSArNDUsOCBAQCBzdGF0aWMgVmVjdG9yPEZvdXJDQz4gY29udGVudFR5cGVzVG9Db2RlY3MoY29u
c3QgVmVjdG9yPENvbnRlbnRUeXBlPiYgY29udGVudFR5cAogICAgICAgICBmb3IgKGF1dG8mIGNv
ZGVjU3RyaW5nIDogY29kZWNTdHJpbmdzKSB7CiAgICAgICAgICAgICAvLyBodHRwczovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNjM4MQogICAgICAgICAgICAgLy8gV2l0aGluIGEgJ2NvZGVjcycg
cGFyYW1ldGVyIHZhbHVlLCAiLiIgaXMgcmVzZXJ2ZWQgYXMgYSBoaWVyYXJjaHkgZGVsaW1pdGVy
Ci0gICAgICAgICAgICBhdXRvIGZpcnN0UGVyaW9kID0gY29kZWNTdHJpbmcuZmluZCgnLicpOwot
ICAgICAgICAgICAgaWYgKGZpcnN0UGVyaW9kICE9IG5vdEZvdW5kKQotICAgICAgICAgICAgICAg
IGNvZGVjU3RyaW5nLnRydW5jYXRlKGZpcnN0UGVyaW9kKTsKLQotICAgICAgICAgICAgYXV0byBj
b2RlY0lkZW50aWZpZXIgPSBGb3VyQ0M6OmZyb21TdHJpbmcoU3RyaW5nVmlldyB7IGNvZGVjU3Ry
aW5nIH0ubGVmdCg0KSk7CisgICAgICAgICAgICBhdXRvIGNvZGVjU3RyaW5nVmlldyA9IFN0cmlu
Z1ZpZXcoY29kZWNTdHJpbmcpLmxlZnQoY29kZWNTdHJpbmcuZmluZCgnLicpKTsKKyAgICAgICAg
ICAgIGF1dG8gY29kZWNJZGVudGlmaWVyID0gRm91ckNDOjpmcm9tU3RyaW5nKGNvZGVjU3RyaW5n
Vmlldy5sZWZ0KDQpKTsKICAgICAgICAgICAgIGlmIChjb2RlY0lkZW50aWZpZXIpCiAgICAgICAg
ICAgICAgICAgY29kZWNzLmFwcGVuZChjb2RlY0lkZW50aWZpZXIudmFsdWUoKSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaHlwaGVuL0h5cGhl
bmF0aW9uTGliSHlwaGVuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaHlwaGVu
L0h5cGhlbmF0aW9uTGliSHlwaGVuLmNwcAppbmRleCBhMmYwYzk1NDcyOGM5ZTZkNmIzNjA4NmI5
NjU4ZGMzOTQ0Y2MyYWMzLi4wZDU4OTY1NTkxNDBiMjYzNzg5OTVhYWQ1OTQxOTIwOTEyMTk4YmZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2h5cGhlbi9IeXBoZW5h
dGlvbkxpYkh5cGhlbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oeXBo
ZW4vSHlwaGVuYXRpb25MaWJIeXBoZW4uY3BwCkBAIC03OSwxNiArNzksMTQgQEAgc3RhdGljIHZv
aWQgc2NhbkRpcmVjdG9yeUZvckRpY3Rpb25hcmllcyhjb25zdCBjaGFyKiBkaXJlY3RvcnlQYXRo
LCBIYXNoTWFwPEF0b20KICAgICAgICAgZmlsZVBhdGggPSBGaWxlU3lzdGVtOjpzdHJpbmdGcm9t
RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG5vcm1hbGl6ZWRQYXRoKTsKICAgICAgICAgYXZhaWxh
YmxlTG9jYWxlcy5hZGQobG9jYWxlLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKGZpbGVQYXRoKTsKIAotICAgICAgICBTdHJpbmcgbG9jYWxlUmVwbGFjaW5nVW5kZXJz
Y29yZXMgPSBTdHJpbmcobG9jYWxlKTsKKyAgICAgICAgU3RyaW5nIGxvY2FsZVJlcGxhY2luZ1Vu
ZGVyc2NvcmVzID0gbG9jYWxlOwogICAgICAgICBsb2NhbGVSZXBsYWNpbmdVbmRlcnNjb3Jlcy5y
ZXBsYWNlKCdfJywgJy0nKTsKICAgICAgICAgaWYgKGxvY2FsZSAhPSBsb2NhbGVSZXBsYWNpbmdV
bmRlcnNjb3JlcykKICAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKGxvY2FsZVJlcGxh
Y2luZ1VuZGVyc2NvcmVzLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KGZpbGVQYXRoKTsKIAogICAgICAgICBzaXplX3QgZGl2aWRlclBvc2l0aW9uID0gbG9jYWxlUmVw
bGFjaW5nVW5kZXJzY29yZXMuZmluZCgnLScpOwotICAgICAgICBpZiAoZGl2aWRlclBvc2l0aW9u
ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICBsb2NhbGVSZXBsYWNpbmdVbmRlcnNjb3Jlcy50
cnVuY2F0ZShkaXZpZGVyUG9zaXRpb24pOwotICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy5h
ZGQobG9jYWxlUmVwbGFjaW5nVW5kZXJzY29yZXMsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQoZmlsZVBhdGgpOwotICAgICAgICB9CisgICAgICAgIGlmIChkaXZpZGVy
UG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmFkZChs
b2NhbGVSZXBsYWNpbmdVbmRlcnNjb3Jlcy5sZWZ0KGRpdmlkZXJQb3NpdGlvbiksIFZlY3RvcjxT
dHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZmlsZVBhdGgpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGll
c1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVz
V2luLmNwcAppbmRleCBlZmI0YzUxZjY2N2UyMDMwYjBkZDExOWI0ODU0MmY1MGQ2NjBlZGUzLi5i
YzgxOWJmZGE0ZDA3Y2YwNGYwZDEwYjdlYmY0MDEyNjFjNzVlM2VhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmNwcApAQCAt
MTE5LDE1ICsxMTksMTUgQEAgc3RhdGljIGJvb2wgZ2V0V2ViTG9jRGF0YShjb25zdCBEcmFnRGF0
YU1hcCogZGF0YU9iamVjdCwgU3RyaW5nJiB1cmwsIFN0cmluZyogdGkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIFN0cmluZyBleHRyYWN0VVJMKGNvbnN0IFN0cmluZyAmaW5VUkwsIFN0
cmluZyogdGl0bGUpCitzdGF0aWMgU3RyaW5nIGV4dHJhY3RVUkwoY29uc3QgU3RyaW5nJiB1cmws
IFN0cmluZyogdGl0bGUpCiB7Ci0gICAgU3RyaW5nIHVybCA9IGluVVJMOwotICAgIGludCBzcGxp
dExvYyA9IHVybC5maW5kKCdcbicpOwotICAgIGlmIChzcGxpdExvYyA+IDApIHsKKyAgICBhdXRv
IHNwbGl0SW5kZXggPSB1cmwuZmluZCgnXG4nKTsKKyAgICBpZiAoc3BsaXRJbmRleCAhPSBub3RG
b3VuZCkgewogICAgICAgICBpZiAodGl0bGUpCi0gICAgICAgICAgICAqdGl0bGUgPSB1cmwuc3Vi
c3RyaW5nKHNwbGl0TG9jKzEpOwotICAgICAgICB1cmwudHJ1bmNhdGUoc3BsaXRMb2MpOwotICAg
IH0gZWxzZSBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0bGUgPSB1cmwuc3Vic3RyaW5nKHNw
bGl0SW5kZXggKyAxKTsKKyAgICAgICAgcmV0dXJuIHVybC5sZWZ0KHNwbGl0SW5kZXgpOworICAg
IH0KKyAgICBpZiAodGl0bGUpCiAgICAgICAgICp0aXRsZSA9IHVybDsKICAgICByZXR1cm4gdXJs
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nl
c3NNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5t
bQppbmRleCA1YzRlNzFkNmI3M2ZjNGZhNjAyNDlhOGQyMDViOWMxMDU2YWNlZTMxLi42ZmZjNjIz
MWViZDA3YWQ4NzgyNDVlMTFmODJlMTVjNjM4NDMwZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbQpAQCAtNjM2LDEwICs2MzYsNyBAQCBz
dGF0aWMgU3RyaW5nIGdldFVzZXJEaXJlY3RvcnlTdWZmaXgoY29uc3QgQXV4aWxpYXJ5UHJvY2Vz
c0luaXRpYWxpemF0aW9uUGFyYW1ldAogICAgIGF1dG8gdXNlckRpcmVjdG9yeVN1ZmZpeCA9IHBh
cmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZmluZDxIYXNoVHJhbnNsYXRvckFTQ0lJ
TGl0ZXJhbD4oInVzZXItZGlyZWN0b3J5LXN1ZmZpeCJfcyk7CiAgICAgaWYgKHVzZXJEaXJlY3Rv
cnlTdWZmaXggIT0gcGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5lbmQoKSkgewog
ICAgICAgICBTdHJpbmcgc3VmZml4ID0gdXNlckRpcmVjdG9yeVN1ZmZpeC0+dmFsdWU7Ci0gICAg
ICAgIGF1dG8gZmlyc3RQYXRoU2VwYXJhdG9yID0gc3VmZml4LmZpbmQoJy8nKTsKLSAgICAgICAg
aWYgKGZpcnN0UGF0aFNlcGFyYXRvciAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIHN1ZmZpeC50
cnVuY2F0ZShmaXJzdFBhdGhTZXBhcmF0b3IpOwotICAgICAgICByZXR1cm4gc3VmZml4OworICAg
ICAgICByZXR1cm4gc3VmZml4LmxlZnQoc3VmZml4LmZpbmQoJy8nKSk7CiAgICAgfQogCiAgICAg
U3RyaW5nIGNsaWVudElkZW50aWZpZXIgPSBjb2RlU2lnbmluZ0lkZW50aWZpZXIocGFyYW1ldGVy
cy5jb25uZWN0aW9uSWRlbnRpZmllci54cGNDb25uZWN0aW9uLmdldCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRvd25sb2FkQ0ZOZXQuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViRG93bmxvYWRDRk5ldC5jcHAKaW5kZXggZmM2NGI5YmM5OTk3ZDg0
MjBhYjVjMTcwOWMzMTlmOTI1MmMxODc1OS4uM2VkMjE3MzIyMGUyMjg2Y2Y4Y2U2OGE1Mjk0Mzc1
ZTYxN2Y4MWY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRG93bmxv
YWRDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRG93bmxvYWRDRk5l
dC5jcHAKQEAgLTE5Miw4ICsxOTIsNyBAQCBIUkVTVUxUIFdlYkRvd25sb2FkOjppbml0VG9SZXN1
bWVXaXRoQnVuZGxlKF9Jbl8gQlNUUiBidW5kbGVQYXRoLCBfSW5fb3B0XyBJV2ViRAogICAgIC8v
IEF0dGVtcHQgdG8gcmVtb3ZlIHRoZSAiLmRvd25sb2FkIiBleHRlbnNpb24gZnJvbSB0aGUgYnVu
ZGxlIGZvciB0aGUgZmluYWwgZmlsZSBkZXN0aW5hdGlvbgogICAgIC8vIEZhaWxpbmcgdGhhdCwg
d2UgY2xlYXIgbV9kZXN0aW5hdGlvbiBhbmQgd2lsbCBhc2sgdGhlIGRlbGVnYXRlIGxhdGVyIG9u
Y2UgdGhlIGRvd25sb2FkIHN0YXJ0cwogICAgIGlmIChtX2J1bmRsZVBhdGguZW5kc1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZShEb3dubG9hZEJ1bmRsZTo6ZmlsZUV4dGVuc2lvbigpKSkgewotICAgICAg
ICBtX2Rlc3RpbmF0aW9uID0gbV9idW5kbGVQYXRoLmlzb2xhdGVkQ29weSgpOwotICAgICAgICBt
X2Rlc3RpbmF0aW9uLnRydW5jYXRlKG1fZGVzdGluYXRpb24ubGVuZ3RoKCkgLSBEb3dubG9hZEJ1
bmRsZTo6ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpKTsKKyAgICAgICAgbV9kZXN0aW5hdGlvbiA9
IFN0cmluZ1ZpZXcobV9idW5kbGVQYXRoKS5sZWZ0KG1fZGVzdGluYXRpb24ubGVuZ3RoKCkgLSBE
b3dubG9hZEJ1bmRsZTo6ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpKS50b1N0cmluZygpOwogICAg
IH0gZWxzZQogICAgICAgICBtX2Rlc3RpbmF0aW9uID0gU3RyaW5nKCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjM5ZDM0YmY2MDVk
OGI0YzVlYjJhMDIwMjY5M2Q5NWFkZDNhODAwNS4uYzBiMDQ5YWY5MzNjNjc1ZWIxNDUwZWY2YmUy
YTJkYzhkZWYzZmQ4OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTA0LTE1ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgRHJvcCBTdHJpbmc6OnRydW5jYXRlKCkgYW5kIHVzZSBT
dHJpbmc6OmxlZnQoKSBpbnN0ZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzk0MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRk
TWVzc2FnZVRvQ29uc29sZSk6CisKIDIwMjItMDQtMTUgIFJvc3MgS2lyc2xpbmcgIDxya2lyc2xp
bmdAZ21haWwuY29tPgogCiAgICAgICAgIEZpeCBwYXJzZVBsYXRmb3JtRmFtaWx5IG9uIGJvdCB3
YXRjaGVyJ3MgZGFzaGJvYXJkLgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IDlmMDEyOWM3
ZWE5MGZhNmJjYzU4YThhNDZkYzVhN2I0Y2FhYjVhNTcuLjU4ZjI3NjczYjZiY2Y4ODg5ZDNiYzRk
ZmE5YTk1ZDM5MGNmNDJmYjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTEzMzksOSAr
MTMzOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRvQ29uc29s
ZShXS1N0cmluZ1JlZiBtZXNzYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIG1lc3Nh
Z2VTdHJpbmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKLSAgICBzaXplX3QgbnVsbENoYXJQb3Mg
PSBtZXNzYWdlU3RyaW5nLmZpbmQoVUNoYXIoMCkpOwotICAgIGlmIChudWxsQ2hhclBvcyAhPSBX
VEY6Om5vdEZvdW5kKQotICAgICAgICBtZXNzYWdlU3RyaW5nLnRydW5jYXRlKG51bGxDaGFyUG9z
KTsKKyAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZVN0cmluZy5sZWZ0KG1lc3NhZ2VTdHJpbmcu
ZmluZChVQ2hhcigwKSkpOwogCiAgICAgc2l6ZV90IGZpbGVQcm90b2NvbFN0YXJ0ID0gbWVzc2Fn
ZVN0cmluZy5maW5kKCJmaWxlOi8vIik7CiAgICAgaWYgKGZpbGVQcm90b2NvbFN0YXJ0ICE9IFdU
Rjo6bm90Rm91bmQpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457757</attachid>
            <date>2022-04-16 15:43:11 -0700</date>
            <delta_ts>2022-04-16 20:57:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239412-20220416154310.patch</filename>
            <type>text/plain</type>
            <size>21739</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVkOWFkYTNmNDY0MDk3OTM5MmY1YzEy
YmU3YjkxZjNhM2NkZTk4MTEuLmZmY2FmNzUzZTg1YzU1NTcxMWJmYzU2NDg2ZDJjZGFhOGIyZTdm
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjItMDQtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZzo6dHJ1bmNhdGUoKSBhbmQgdXNlIFN0
cmluZzo6bGVmdCgpIGluc3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzOTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIFN0cmluZzo6dHJ1bmNhdGUoKSBhbmQgU3RyaW5nOjpsZWZ0KCkgaGF2ZSBpZGVu
dGljYWwgYmVoYXZpb3IuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0cnVuY2F0ZSgpCisg
ICAgICAgIG1vZGlmaWVzIHRoZSBTdHJpbmcgaW4gcGxhY2UgKHdoaWNoIGlzIGEgYml0IGNvbmZ1
c2luZyksIHdoaWxlIGxlZnQoKSByZXR1cm5zIGEgbmV3IFN0cmluZywgd2l0aG91dAorICAgICAg
ICBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLiBUbyBzaW1wbGlmeSBvdXIgQVBJLCBJIGFtIGRyb3Bw
aW5nIFN0cmluZzo6dHJ1bmNhdGUoKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5j
cHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6dHJ1bmNhdGUpOiBEZWxldGVkLgorICAgICAgICAq
IHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAqIHd0Zi91bml4L0xhbmd1YWdlVW5peC5j
cHA6CisgICAgICAgIChXVEY6OnBsYXRmb3JtTGFuZ3VhZ2UpOgorICAgICAgICAqIHd0Zi93aW4v
TGFuZ3VhZ2VXaW4uY3BwOgorICAgICAgICAoV1RGOjpsb2NhbGVJbmZvKToKKwogMjAyMi0wNC0x
NiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgY29t
cGxleCBTdHJpbmc6Omluc2VydCgpIHdpdGggYSBzaW1wbGlmaWVkIG1ha2VTdHJpbmdCeUluc2Vy
dGluZygpIGZyZWUgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MTBiMWE5ODhjYjk4MTE0YzNmYmM3
ZWQ5ODJiYjI2YzgwMmIyNmViLi41MzdmNjk3Y2NmNmZiOGU0NTBhMTU0MzRiYTA0ZGNmZjliMDA4
YjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjItMDQtMTYgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZzo6dHJ1bmNhdGUoKSBh
bmQgdXNlIFN0cmluZzo6bGVmdCgpIGluc3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvQXBwSGlnaGxpZ2h0U3RvcmFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBcHBIaWdobGlnaHRSYW5nZURhdGEpOgor
ICAgICAgICAqIGRvbS9GcmFnbWVudERpcmVjdGl2ZVBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGcmFnbWVudERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VGcmFnbWVudERpcmVjdGl2ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OmJlc3RGaXRTb3VyY2VGcm9tUGljdHVyZUVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRG
aWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICAq
IGxvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RSZXN1
bHQ6OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZEJlZ2luRG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2Uv
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGFu
Z3VhZ2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9BVkFzc2V0VHJhY2tVdGlsaXRpZXMubW06CisgICAgICAgIChXZWJDb3JlOjpjb250
ZW50VHlwZXNUb0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9oeXBoZW4vSHlwaGVu
YXRpb25MaWJIeXBoZW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkRpcmVjdG9yeUZvckRp
Y3Rpb25hcmllcyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0VVJMKToKKwogMjAyMi0wNC0xNiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgY29tcGxleCBT
dHJpbmc6Omluc2VydCgpIHdpdGggYSBzaW1wbGlmaWVkIG1ha2VTdHJpbmdCeUluc2VydGluZygp
IGZyZWUgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDdlZGEzZWQxZDY1YTY0NzQwYzRhNDNhNjc4NWM2
MTI3ZWVlNDQ5Ny4uZGRiZmQ1NzNhMzA2NmFiZjc4ZjkxNzIzZWE2NTM3OTRkYWE1ZDljMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wNC0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIERyb3AgU3RyaW5nOjp0cnVuY2F0ZSgpIGFuZCB1c2UgU3Ry
aW5nOjpsZWZ0KCkgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM5NDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgKiBTaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OmdldFVzZXJEaXJlY3RvcnlTdWZmaXgpOgorCiAyMDIyLTA0LTE1ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTGV2ZXJhZ2UgU3RyaW5nVmlldyBpbiBt
b3JlIHBsYWNlcyB0byBhdm9pZCBzb21lIFN0cmluZyBhbGxvY2F0aW9ucwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vQ2hhbmdlTG9nCmluZGV4IDA5M2EwNjY5ZDVjODc0YjM5NDJjMWIxYmEzODJmZjg3Y2I4ZGE4
MDguLmEyMDc5ZjNhYjVmNmE4ZThhODViYjUxNjk4YmYxY2U0MjdlMGQ5MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wNC0xNiAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgU3RyaW5nOjp0cnVuY2F0ZSgp
IGFuZCB1c2UgU3RyaW5nOjpsZWZ0KCkgaW5zdGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5NDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgKiBXZWJEb3dubG9hZENGTmV0LmNwcDoKKyAgICAgICAgKFdl
YkRvd25sb2FkOjppbml0VG9SZXN1bWVXaXRoQnVuZGxlKToKKwogMjAyMi0wNC0xNSAgWXVzdWtl
IFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBWTSYg
cGFyYW1ldGVyIGZyb20gc3RydWN0dXJlIHJlbGF0ZWQgY29kZSBpbmNsdWRpbmcganNEeWFtaWND
YXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKaW5kZXggYTQ3OTBiODdlM2I2MWE5MTc3Yzlh
MTRiY2FlZTBlMDcxZWQ3NGI1Yi4uYTEwMjliNDg4MjMxOTZhM2IwM2Q4NmY0OGRhZGU1NjM3MzY1
OWMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApAQCAtODUsMTIgKzg1LDYgQEAgVUNo
YXIzMiBTdHJpbmc6OmNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQgaSkgY29uc3QKICAgICBy
ZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJTdGFydGluZ0F0KGkpOwogfQogCi12b2lkIFN0cmluZzo6
dHJ1bmNhdGUodW5zaWduZWQgcG9zaXRpb24pCi17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsID0gbV9pbXBsLT5zdWJzdHJpbmcoMCwgcG9zaXRpb24pOwotfQotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgdm9pZCBTdHJpbmc6OnJlbW92ZUludGVybmFs
KGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNp
Z25lZCBsZW5ndGhUb1JlbW92ZSkKIHsKICAgICBDaGFyYWN0ZXJUeXBlKiBkYXRhOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmgKaW5kZXggNTRkMGJiZWZlMDdjYmQ1OWE1NzM4ZTk0NTRhMTgxZTIxYjAx
ZGYzZC4uZmFiZWY2OTJmMmFiZmEzMTIwYWNmYTc3OTk2YTNmOTlkODFmNzU0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5oCkBAIC0xOTYsOSArMTk2LDYgQEAgcHVibGljOgogICAgIFN0cmluZyYg
cmVwbGFjZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdWaWV3IHJlcGxh
Y2VtZW50KTsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4gU3RyaW5nJiBy
ZXBsYWNlV2l0aExpdGVyYWwoVUNoYXIgdGFyZ2V0LCBjb25zdCBjaGFyICgmcmVwbGFjZW1lbnQp
W2NoYXJhY3RlckNvdW50XSk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBpZGVudGlmaWNhbCB0
byBsZWZ0KCkgYW5kIHNob3VsZCBwcm9iYWJseSBiZSBkcm9wcGVkLgotICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIHRydW5jYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0KICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCByZW1vdmUodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCA9
IDEpOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzdWJzdHJpbmcodW5zaWduZWQg
cG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCA9IE1heExlbmd0aCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi91bml4L0xhbmd1YWdlVW5peC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91
bml4L0xhbmd1YWdlVW5peC5jcHAKaW5kZXggOGJlMmY2MWY3OWI1YzVhOTc1Y2M1MTE5OGQxYjhl
ZTAyNDcyM2ExNy4uZmVkMjBmYzUwNjQ0MzA1Yzk4MDcyODM0N2QyYmRiM2VkNGE3N2FkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5peC9MYW5ndWFnZVVuaXguY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3VuaXgvTGFuZ3VhZ2VVbml4LmNwcApAQCAtMzgsOCArMzgsNyBAQCBzdGF0aWMg
U3RyaW5nIHBsYXRmb3JtTGFuZ3VhZ2UoKQogCiAgICAgU3RyaW5nIG5vcm1hbGl6ZWREZWZhdWx0
ID0gbG9jYWxlRGVmYXVsdDsKICAgICBub3JtYWxpemVkRGVmYXVsdC5yZXBsYWNlKCdfJywgJy0n
KTsKLSAgICBub3JtYWxpemVkRGVmYXVsdC50cnVuY2F0ZShub3JtYWxpemVkRGVmYXVsdC5maW5k
KCcuJykpOwotICAgIHJldHVybiBub3JtYWxpemVkRGVmYXVsdDsKKyAgICByZXR1cm4gbm9ybWFs
aXplZERlZmF1bHQubGVmdChub3JtYWxpemVkRGVmYXVsdC5maW5kKCcuJykpOwogfQogCiBWZWN0
b3I8U3RyaW5nPiBwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoU2hvdWxkTWluaW1pemVM
YW5ndWFnZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vTGFuZ3VhZ2VXaW4uY3Bw
IGIvU291cmNlL1dURi93dGYvd2luL0xhbmd1YWdlV2luLmNwcAppbmRleCBjOTJhNzdhOGMxNjQy
OWUwZmQ2MjQ0MjQxMjAxYjNlOTY1MzMwZGQ3Li5mMDhiNjUyYzBlOWEzNWYzMGVjNTUwNzM4ZWFh
MjI3YjMyOGQwNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vTGFuZ3VhZ2VXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9MYW5ndWFnZVdpbi5jcHAKQEAgLTUxLDggKzUx
LDcgQEAgc3RhdGljIFN0cmluZyBsb2NhbGVJbmZvKExDVFlQRSBsb2NhbGVUeXBlLCBjb25zdCBT
dHJpbmcmIGZhbGxiYWNrKQogICAgIGlmIChsb2NhbGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbGxiYWNrOwogCi0gICAgbG9jYWxlTmFtZS50cnVuY2F0ZShsb2NhbGVOYW1lLmxl
bmd0aCgpIC0gMSk7Ci0gICAgcmV0dXJuIGxvY2FsZU5hbWU7CisgICAgcmV0dXJuIGxvY2FsZU5h
bWUubGVmdChsb2NhbGVOYW1lLmxlbmd0aCgpIC0gMSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgcGxh
dGZvcm1MYW5ndWFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hs
aWdodC9BcHBIaWdobGlnaHRTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0FwcEhpZ2hsaWdodFN0b3JhZ2UuY3BwCmluZGV4IDdiMmUxNWIwYmFjNmI1ZWVkZTZh
ZmFmZjY5ZDRmYmRmMmZmODM0MTYuLjI0ZjY1NTJiM2YxNDYxZTAwZTA0MjY4NDYzNTU4YTU2ODk2
NmQ2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0FwcEhp
Z2hsaWdodFN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0
L0FwcEhpZ2hsaWdodFN0b3JhZ2UuY3BwCkBAIC0yMDMsOCArMjAzLDcgQEAgc3RhdGljIEFwcEhp
Z2hsaWdodFJhbmdlRGF0YTo6Tm9kZVBhdGggbWFrZU5vZGVQYXRoKFJlZlB0cjxOb2RlPiYmIG5v
ZGUpCiAKIHN0YXRpYyBBcHBIaWdobGlnaHRSYW5nZURhdGEgY3JlYXRlQXBwSGlnaGxpZ2h0UmFu
Z2VEYXRhKGNvbnN0IFN0YXRpY1JhbmdlJiByYW5nZSkKIHsKLSAgICBhdXRvIHRleHQgPSBwbGFp
blRleHQocmFuZ2UpOwotICAgIHRleHQudHJ1bmNhdGUodGV4dFByZXZpZXdMZW5ndGgpOworICAg
IGF1dG8gdGV4dCA9IHBsYWluVGV4dChyYW5nZSkubGVmdCh0ZXh0UHJldmlld0xlbmd0aCk7CiAg
ICAgYXV0byBpZGVudGlmaWVyID0gY3JlYXRlVmVyc2lvbjRVVUlEU3RyaW5nKCk7CiAKICAgICBy
ZXR1cm4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0ZyYWdtZW50RGlyZWN0aXZl
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GcmFnbWVudERpcmVjdGl2ZVBhcnNlci5j
cHAKaW5kZXggMmE0NDQyYWNkY2Q4ZmE3ZWUxYzk0MmYyOGUwY2YzNDRhN2Y3ZGFjMy4uY2RmZjg5
YTRmNmQyNDUwMDY0MzFjMjVlMGRkNDNmNzdjNzJmYjY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0ZyYWdtZW50RGlyZWN0aXZlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRnJhZ21lbnREaXJlY3RpdmVQYXJzZXIuY3BwCkBAIC0xMDAsOSArMTAwLDggQEAgdm9p
ZCBGcmFnbWVudERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VGcmFnbWVudERpcmVjdGl2ZShTdHJpbmdW
aWV3IGZyYWdtZW50RGlyZWN0aXYKICAgICAgICAgUGFyc2VkVGV4dERpcmVjdGl2ZSBwYXJzZWRU
ZXh0RGlyZWN0aXZlOwogICAgICAgICAKICAgICAgICAgaWYgKHRva2Vucy5maXJzdCgpLmVuZHNX
aXRoKCctJykgJiYgdG9rZW5zLmZpcnN0KCkubGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICB0
b2tlbnMuZmlyc3QoKS50cnVuY2F0ZSh0b2tlbnMuZmlyc3QoKS5sZW5ndGgoKSAtIDIpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYXV0byBwcmVmaXggPSBXVEY6OlVSTFBhcnNlcjo6
Zm9ybVVSTERlY29kZSh0b2tlbnMudGFrZUZpcnN0KCkpKQorICAgICAgICAgICAgYXV0byB0YWtl
bkZpcnN0VG9rZW4gPSB0b2tlbnMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBpZiAoYXV0byBw
cmVmaXggPSBXVEY6OlVSTFBhcnNlcjo6Zm9ybVVSTERlY29kZShTdHJpbmdWaWV3KHRha2VuRmly
c3RUb2tlbikubGVmdCh0YWtlbkZpcnN0VG9rZW4ubGVuZ3RoKCkgLSAyKSkpCiAgICAgICAgICAg
ICAgICAgcGFyc2VkVGV4dERpcmVjdGl2ZS5wcmVmaXggPSBXVEZNb3ZlKCpwcmVmaXgpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShUZXh0RnJhZ21l
bnQsIHN0cmVhbSA8PCAiIGNvdWxkIG5vdCBkZWNvZGUgcHJlZml4ICIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggODA3MGFmMDNiMmEyYmFiYTE5OWM2M2Mw
N2FkMzhjNmM0NzBmMzUzZC4uMjU3MjBkYmMwY2FkOTRhZjhjYTM2ZDQwYzhmZmY0YTdiM2ZhYjdm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0xOTEsNiAr
MTkxLDE0IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0QmVzdEZpdFVSTEFuZERQUkZyb21J
bWFnZUNhbmRpZGF0ZShjb25zdCBJbWFnZUNhbmRpZGF0CiAgICAgICAgIGRvd25jYXN0PFJlbmRl
ckltYWdlPigqcmVuZGVyZXIoKSkuc2V0SW1hZ2VEZXZpY2VQaXhlbFJhdGlvKG1faW1hZ2VEZXZp
Y2VQaXhlbFJhdGlvKTsKIH0KIAorc3RhdGljIFN0cmluZyBleHRyYWN0TUlNRVR5cGVGcm9tVHlw
ZUF0dHJpYnV0ZUZvckxvb2t1cChjb25zdCBTdHJpbmcmIHR5cGVBdHRyaWJ1dGUpCit7CisgICAg
YXV0byBzZW1pY29sb25JbmRleCA9IHR5cGVBdHRyaWJ1dGUuZmluZCgnOycpOworICAgIGlmIChz
ZW1pY29sb25JbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRNTFNwYWNlcyh0eXBlQXR0cmlidXRlKTsKKyAgICByZXR1cm4gU3RyaW5nVmll
dyh0eXBlQXR0cmlidXRlKS5sZWZ0KHNlbWljb2xvbkluZGV4KS5zdHJpcExlYWRpbmdBbmRUcmFp
bGluZ01hdGNoZWRDaGFyYWN0ZXJzKGlzSFRNTFNwYWNlPFVDaGFyPikudG9TdHJpbmdXaXRob3V0
Q29weWluZygpOworfQorCiBJbWFnZUNhbmRpZGF0ZSBIVE1MSW1hZ2VFbGVtZW50OjpiZXN0Rml0
U291cmNlRnJvbVBpY3R1cmVFbGVtZW50KCkKIHsKICAgICBSZWZQdHIgcGljdHVyZSA9IHBpY3R1
cmVFbGVtZW50KCk7CkBAIC0yMTAsOSArMjE4LDcgQEAgSW1hZ2VDYW5kaWRhdGUgSFRNTEltYWdl
RWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCgpCiAKICAgICAgICAgYXV0
byYgdHlwZUF0dHJpYnV0ZSA9IHNvdXJjZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KHR5cGVBdHRyKTsKICAgICAgICAgaWYgKCF0eXBlQXR0cmlidXRlLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVBdHRyaWJ1dGUuc3RyaW5nKCk7Ci0gICAgICAgICAg
ICB0eXBlLnRydW5jYXRlKHR5cGUuZmluZCgnOycpKTsKLSAgICAgICAgICAgIHR5cGUgPSBzdHJp
cExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModHlwZSk7CisgICAgICAgICAgICBhdXRvIHR5
cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tVHlwZUF0dHJpYnV0ZUZvckxvb2t1cCh0eXBlQXR0cmli
dXRlKTsKICAgICAgICAgICAgIGlmICghdHlwZS5pc0VtcHR5KCkgJiYgIU1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VWaWRlb09yU1ZHTUlNRVR5cGUodHlwZSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmNwcAppbmRleCAwMWI3NGY3MjcyMmIwNjIyNWEyNjZhNDI0M2FhY2FiYTAxMTA2
ZDNjLi40Y2Q0MjEwMDc5NGNiYTJkNGM0MzcwNGY3MDJiMGQ5NDcyM2FmODlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC02MjAsMTQgKzYyMCwxMiBA
QCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQmCiAgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9
IG1heExlbmd0aCA+IGJhc2VMZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKIAog
ICAgIC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUg
bWF4TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50cy4KKyAgICAvLyBGSVhNRTogVGhpcyBtYXkg
Y2F1c2UgYSBsb3Qgb2YgU3RyaW5nIGFsbG9jYXRpb25zIGluIHRoZSB3b3JzdCBjYXNlIHNjZW5h
cmlvLgogICAgIFN0cmluZyBldmVudFRleHQgPSBldmVudC50ZXh0KCk7CiAgICAgdW5zaWduZWQg
dGV4dExlbmd0aCA9IGV2ZW50VGV4dC5sZW5ndGgoKTsKICAgICB3aGlsZSAodGV4dExlbmd0aCA+
IDAgJiYgaXNIVE1MTGluZUJyZWFrKGV2ZW50VGV4dFt0ZXh0TGVuZ3RoIC0gMV0pKQogICAgICAg
ICB0ZXh0TGVuZ3RoLS07Ci0gICAgZXZlbnRUZXh0LnRydW5jYXRlKHRleHRMZW5ndGgpOwotICAg
IGV2ZW50VGV4dC5yZXBsYWNlKCJcclxuIiwgIiAiKTsKLSAgICBldmVudFRleHQucmVwbGFjZSgn
XHInLCAnICcpOwotICAgIGV2ZW50VGV4dC5yZXBsYWNlKCdcbicsICcgJyk7CisgICAgZXZlbnRU
ZXh0ID0gZXZlbnRUZXh0LmxlZnQodGV4dExlbmd0aCkucmVwbGFjZSgiXHJcbiIsICIgIikucmVw
bGFjZSgnXHInLCAnICcpLnJlcGxhY2UoJ1xuJywgJyAnKTsKICAgICBldmVudC5zZXRUZXh0KGxp
bWl0TGVuZ3RoKGV2ZW50VGV4dCwgYXBwZW5kYWJsZUxlbmd0aCkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5UGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5UGFyc2VyLmgKaW5kZXggMzI1YjM3YTZmN2M0ZWI0YTkw
YTAxYjIzYWZmN2JjZjVmNTdjMWJmMi4uOTllN2FiYWQ3OTQzZTIxYmM3NDU5Mzg0YjcwNTM0NmU1
NWQ2ZWQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeVBh
cnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuaApA
QCAtMTMwLDcgKzEzMCw3IEBAIHN0cnVjdCBMaXN0UmVzdWx0CiAgICAgICAgIGZpbGVuYW1lTGVu
Z3RoID0gMDsKICAgICAgICAgbGlua25hbWUgPSBudWxscHRyOwogICAgICAgICBsaW5rbmFtZUxl
bmd0aCA9IDA7Ci0gICAgICAgIGZpbGVTaXplLnRydW5jYXRlKDApOworICAgICAgICBmaWxlU2l6
ZSA9IHsgfTsKICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlOwogICAgICAgICBtZW1zZXQo
Jm1vZGlmaWVkVGltZSwgMCwgc2l6ZW9mKEZUUFRpbWUpKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA1YzQyNzA1YTUyZmU0YjZhNWI3YjkxNzcxMzBjMWMz
ZmM5YTYxOGMzLi42OGM2YzUyZGQ3NzgxMWQ1YjBlZGU5N2IzNjkxMDE3MTU5OTBlMTgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTcxNSw2ICs3MTUsMTQgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0T3V0Z29pbmdSZWZlcnJlcihjb25zdCBVUkwmIHVybCkKICAgICBt
X291dGdvaW5nUmVmZXJyZXIgPSB1cmwuc3RyaXBwZWRGb3JVc2VBc1JlZmVycmVyKCk7CiB9CiAK
K3N0YXRpYyBTdHJpbmcgZXh0cmFjdENvbnRlbnRMYW5ndWFnZUZyb21IZWFkZXIoY29uc3QgU3Ry
aW5nJiBoZWFkZXIpCit7CisgICAgYXV0byBjb21tYUluZGV4ID0gaGVhZGVyLmZpbmQoJywnKTsK
KyAgICBpZiAoY29tbWFJbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHN0cmlwTGVh
ZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhoZWFkZXIpOworICAgIHJldHVybiBTdHJpbmdWaWV3
KGhlYWRlcikubGVmdChjb21tYUluZGV4KS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRD
aGFyYWN0ZXJzKGlzSFRNTFNwYWNlPFVDaGFyPikudG9TdHJpbmcoKTsKK30KKwogdm9pZCBGcmFt
ZUxvYWRlcjo6ZGlkQmVnaW5Eb2N1bWVudChib29sIGRpc3BhdGNoKQogewogICAgIG1fbmVlZHND
bGVhciA9IHRydWU7CkBAIC03NTcsOSArNzY1LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGlkQmVn
aW5Eb2N1bWVudChib29sIGRpc3BhdGNoKQogCiAgICAgICAgIFN0cmluZyBoZWFkZXJDb250ZW50
TGFuZ3VhZ2UgPSBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6Q29udGVudExhbmd1YWdlKTsKICAgICAgICAgaWYgKCFoZWFkZXJDb250
ZW50TGFuZ3VhZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzaXplX3QgY29tbWFJbmRleCA9
IGhlYWRlckNvbnRlbnRMYW5ndWFnZS5maW5kKCcsJyk7Ci0gICAgICAgICAgICBoZWFkZXJDb250
ZW50TGFuZ3VhZ2UudHJ1bmNhdGUoY29tbWFJbmRleCk7IC8vIG5vdEZvdW5kID09IC0xID09IGRv
bid0IHRydW5jYXRlCi0gICAgICAgICAgICBoZWFkZXJDb250ZW50TGFuZ3VhZ2UgPSBzdHJpcExl
YWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoaGVhZGVyQ29udGVudExhbmd1YWdlKTsKKyAgICAg
ICAgICAgIGhlYWRlckNvbnRlbnRMYW5ndWFnZSA9IGV4dHJhY3RDb250ZW50TGFuZ3VhZ2VGcm9t
SGVhZGVyKGhlYWRlckNvbnRlbnRMYW5ndWFnZSk7CiAgICAgICAgICAgICBpZiAoIWhlYWRlckNv
bnRlbnRMYW5ndWFnZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT5zZXRDb250ZW50TGFuZ3VhZ2UoaGVhZGVyQ29udGVudExhbmd1YWdlKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcAppbmRleCBhNzVmNzBjZTViMjk3ZjhhZTZhOGMxNTQ1NTMzYjdiNzEyOTgxZmEw
Li4xMjUzYjU4MDA1YjUyZmJhMjQxMDgyODYxMjdjNGQxMzJmMGQwNDVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcApA
QCAtNjYyLDcgKzY2Miw3IEBAIHN0YXRpYyBTdHJpbmcgbGFuZ3VhZ2VJZGVudGlmaWVyKGNvbnN0
IFN0cmluZyYgbGFuZ3VhZ2VDb2RlKQogCiAgICAgLy8gTmVlZCAyVSBoZXJlIHRvIGRpc2FtYmln
dWF0ZSBTdHJpbmc6Om9wZXJhdG9yW10gZnJvbSBvcGVyYXRvcihOU1N0cmluZyosIGludClbXSBp
biBhIHByb2R1Y3Rpb24gYnVpbGQuCiAgICAgaWYgKGxvd2VyY2FzZUxhbmd1YWdlQ29kZS5sZW5n
dGgoKSA+PSAzICYmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGVbMlVdID09ICdfJyB8fCBsb3dlcmNh
c2VMYW5ndWFnZUNvZGVbMlVdID09ICctJykpCi0gICAgICAgIGxvd2VyY2FzZUxhbmd1YWdlQ29k
ZS50cnVuY2F0ZSgyKTsKKyAgICAgICAgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlID0gbG93ZXJjYXNl
TGFuZ3VhZ2VDb2RlLmxlZnQoMik7CiAKICAgICByZXR1cm4gbG93ZXJjYXNlTGFuZ3VhZ2VDb2Rl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvQVZBc3NldFRyYWNrVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQVZBc3NldFRyYWNrVXRpbGl0aWVzLm1t
CmluZGV4IDBkYWZjOGJmZDQxYmQwNGI5NzhjNDk4NDFmYWVhMDA4ZjgyYjQ0YzIuLmI3OTQ3MGMy
NDU1NzI3MDVmMzZjYjU0MDA0NjcxYjI2ZDU2ZDZhMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0FWQXNzZXRUcmFja1V0aWxp
dGllcy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9BVkFzc2V0VHJhY2tVdGlsaXRpZXMubW0KQEAgLTQ1LDEyICs0NSw3IEBAIHN0YXRp
YyBWZWN0b3I8Rm91ckNDPiBjb250ZW50VHlwZXNUb0NvZGVjcyhjb25zdCBWZWN0b3I8Q29udGVu
dFR5cGU+JiBjb250ZW50VHlwCiAgICAgICAgIGZvciAoYXV0byYgY29kZWNTdHJpbmcgOiBjb2Rl
Y1N0cmluZ3MpIHsKICAgICAgICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9y
ZmM2MzgxCiAgICAgICAgICAgICAvLyBXaXRoaW4gYSAnY29kZWNzJyBwYXJhbWV0ZXIgdmFsdWUs
ICIuIiBpcyByZXNlcnZlZCBhcyBhIGhpZXJhcmNoeSBkZWxpbWl0ZXIKLSAgICAgICAgICAgIGF1
dG8gZmlyc3RQZXJpb2QgPSBjb2RlY1N0cmluZy5maW5kKCcuJyk7Ci0gICAgICAgICAgICBpZiAo
Zmlyc3RQZXJpb2QgIT0gbm90Rm91bmQpCi0gICAgICAgICAgICAgICAgY29kZWNTdHJpbmcudHJ1
bmNhdGUoZmlyc3RQZXJpb2QpOwotCi0gICAgICAgICAgICBhdXRvIGNvZGVjSWRlbnRpZmllciA9
IEZvdXJDQzo6ZnJvbVN0cmluZyhTdHJpbmdWaWV3IHsgY29kZWNTdHJpbmcgfS5sZWZ0KDQpKTsK
LSAgICAgICAgICAgIGlmIChjb2RlY0lkZW50aWZpZXIpCisgICAgICAgICAgICBpZiAoYXV0byBj
b2RlY0lkZW50aWZpZXIgPSBGb3VyQ0M6OmZyb21TdHJpbmcoU3RyaW5nVmlldyhjb2RlY1N0cmlu
ZykubGVmdChjb2RlY1N0cmluZy5maW5kKCcuJykpLmxlZnQoNCkpKQogICAgICAgICAgICAgICAg
IGNvZGVjcy5hcHBlbmQoY29kZWNJZGVudGlmaWVyLnZhbHVlKCkpOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oeXBoZW4vSHlwaGVu
YXRpb25MaWJIeXBoZW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oeXBoZW4v
SHlwaGVuYXRpb25MaWJIeXBoZW4uY3BwCmluZGV4IGEyZjBjOTU0NzI4YzllNmQ2YjM2MDg2Yjk2
NThkYzM5NDRjYzJhYzMuLjBkNTg5NjU1OTE0MGIyNjM3ODk5NWFhZDU5NDE5MjA5MTIxOThiZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaHlwaGVuL0h5cGhlbmF0
aW9uTGliSHlwaGVuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2h5cGhl
bi9IeXBoZW5hdGlvbkxpYkh5cGhlbi5jcHAKQEAgLTc5LDE2ICs3OSwxNCBAQCBzdGF0aWMgdm9p
ZCBzY2FuRGlyZWN0b3J5Rm9yRGljdGlvbmFyaWVzKGNvbnN0IGNoYXIqIGRpcmVjdG9yeVBhdGgs
IEhhc2hNYXA8QXRvbQogICAgICAgICBmaWxlUGF0aCA9IEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21G
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24obm9ybWFsaXplZFBhdGgpOwogICAgICAgICBhdmFpbGFi
bGVMb2NhbGVzLmFkZChsb2NhbGUsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQoZmlsZVBhdGgpOwogCi0gICAgICAgIFN0cmluZyBsb2NhbGVSZXBsYWNpbmdVbmRlcnNj
b3JlcyA9IFN0cmluZyhsb2NhbGUpOworICAgICAgICBTdHJpbmcgbG9jYWxlUmVwbGFjaW5nVW5k
ZXJzY29yZXMgPSBsb2NhbGU7CiAgICAgICAgIGxvY2FsZVJlcGxhY2luZ1VuZGVyc2NvcmVzLnJl
cGxhY2UoJ18nLCAnLScpOwogICAgICAgICBpZiAobG9jYWxlICE9IGxvY2FsZVJlcGxhY2luZ1Vu
ZGVyc2NvcmVzKQogICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQobG9jYWxlUmVwbGFj
aW5nVW5kZXJzY29yZXMsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
ZmlsZVBhdGgpOwogCiAgICAgICAgIHNpemVfdCBkaXZpZGVyUG9zaXRpb24gPSBsb2NhbGVSZXBs
YWNpbmdVbmRlcnNjb3Jlcy5maW5kKCctJyk7Ci0gICAgICAgIGlmIChkaXZpZGVyUG9zaXRpb24g
IT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgIGxvY2FsZVJlcGxhY2luZ1VuZGVyc2NvcmVzLnRy
dW5jYXRlKGRpdmlkZXJQb3NpdGlvbik7Ci0gICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmFk
ZChsb2NhbGVSZXBsYWNpbmdVbmRlcnNjb3JlcywgVmVjdG9yPFN0cmluZz4oKSkuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChmaWxlUGF0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGRpdmlkZXJQ
b3NpdGlvbiAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKGxv
Y2FsZVJlcGxhY2luZ1VuZGVyc2NvcmVzLmxlZnQoZGl2aWRlclBvc2l0aW9uKSwgVmVjdG9yPFN0
cmluZz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChmaWxlUGF0aCk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRpbGl0aWVz
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNX
aW4uY3BwCmluZGV4IGVmYjRjNTFmNjY3ZTIwMzBiMGRkMTE5YjQ4NTQyZjUwZDY2MGVkZTMuLmJj
ODE5YmZkYTRkMDdjZjA0ZjBkMTBiN2ViZjQwMTI2MWM3NWUzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCkBAIC0x
MTksMTUgKzExOSwxNSBAQCBzdGF0aWMgYm9vbCBnZXRXZWJMb2NEYXRhKGNvbnN0IERyYWdEYXRh
TWFwKiBkYXRhT2JqZWN0LCBTdHJpbmcmIHVybCwgU3RyaW5nKiB0aQogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgU3RyaW5nIGV4dHJhY3RVUkwoY29uc3QgU3RyaW5nICZpblVSTCwgU3Ry
aW5nKiB0aXRsZSkKK3N0YXRpYyBTdHJpbmcgZXh0cmFjdFVSTChjb25zdCBTdHJpbmcmIHVybCwg
U3RyaW5nKiB0aXRsZSkKIHsKLSAgICBTdHJpbmcgdXJsID0gaW5VUkw7Ci0gICAgaW50IHNwbGl0
TG9jID0gdXJsLmZpbmQoJ1xuJyk7Ci0gICAgaWYgKHNwbGl0TG9jID4gMCkgeworICAgIGF1dG8g
c3BsaXRJbmRleCA9IHVybC5maW5kKCdcbicpOworICAgIGlmIChzcGxpdEluZGV4ICE9IG5vdEZv
dW5kKSB7CiAgICAgICAgIGlmICh0aXRsZSkKLSAgICAgICAgICAgICp0aXRsZSA9IHVybC5zdWJz
dHJpbmcoc3BsaXRMb2MrMSk7Ci0gICAgICAgIHVybC50cnVuY2F0ZShzcGxpdExvYyk7Ci0gICAg
fSBlbHNlIGlmICh0aXRsZSkKKyAgICAgICAgICAgICp0aXRsZSA9IHVybC5zdWJzdHJpbmcoc3Bs
aXRJbmRleCArIDEpOworICAgICAgICByZXR1cm4gdXJsLmxlZnQoc3BsaXRJbmRleCk7CisgICAg
fQorICAgIGlmICh0aXRsZSkKICAgICAgICAgKnRpdGxlID0gdXJsOwogICAgIHJldHVybiB1cmw7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vz
c01hYy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1t
CmluZGV4IDVjNGU3MWQ2YjczZmM0ZmE2MDI0OWE4ZDIwNWI5YzEwNTZhY2VlMzEuLjZmZmM2MjMx
ZWJkMDdhZDg3ODI0NWUxMWY4MmUxNWM2Mzg0MzBmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCkBAIC02MzYsMTAgKzYzNiw3IEBAIHN0
YXRpYyBTdHJpbmcgZ2V0VXNlckRpcmVjdG9yeVN1ZmZpeChjb25zdCBBdXhpbGlhcnlQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0CiAgICAgYXV0byB1c2VyRGlyZWN0b3J5U3VmZml4ID0gcGFy
YW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5maW5kPEhhc2hUcmFuc2xhdG9yQVNDSUlM
aXRlcmFsPigidXNlci1kaXJlY3Rvcnktc3VmZml4Il9zKTsKICAgICBpZiAodXNlckRpcmVjdG9y
eVN1ZmZpeCAhPSBwYXJhbWV0ZXJzLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmVuZCgpKSB7CiAg
ICAgICAgIFN0cmluZyBzdWZmaXggPSB1c2VyRGlyZWN0b3J5U3VmZml4LT52YWx1ZTsKLSAgICAg
ICAgYXV0byBmaXJzdFBhdGhTZXBhcmF0b3IgPSBzdWZmaXguZmluZCgnLycpOwotICAgICAgICBp
ZiAoZmlyc3RQYXRoU2VwYXJhdG9yICE9IG5vdEZvdW5kKQotICAgICAgICAgICAgc3VmZml4LnRy
dW5jYXRlKGZpcnN0UGF0aFNlcGFyYXRvcik7Ci0gICAgICAgIHJldHVybiBzdWZmaXg7CisgICAg
ICAgIHJldHVybiBzdWZmaXgubGVmdChzdWZmaXguZmluZCgnLycpKTsKICAgICB9CiAKICAgICBT
dHJpbmcgY2xpZW50SWRlbnRpZmllciA9IGNvZGVTaWduaW5nSWRlbnRpZmllcihwYXJhbWV0ZXJz
LmNvbm5lY3Rpb25JZGVudGlmaWVyLnhwY0Nvbm5lY3Rpb24uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRG93bmxvYWRDRk5ldC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJEb3dubG9hZENGTmV0LmNwcAppbmRleCBmYzY0YjliYzk5OTdkODQy
MGFiNWMxNzA5YzMxOWY5MjUyYzE4NzU5Li4zNTQ1ODVlODJkNGJiNDc1YWYxZmFjMjYwNTk2OTBk
YzI3NDUyMzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEb3dubG9h
ZENGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEb3dubG9hZENGTmV0
LmNwcApAQCAtMTkyLDggKzE5Miw3IEBAIEhSRVNVTFQgV2ViRG93bmxvYWQ6OmluaXRUb1Jlc3Vt
ZVdpdGhCdW5kbGUoX0luXyBCU1RSIGJ1bmRsZVBhdGgsIF9Jbl9vcHRfIElXZWJECiAgICAgLy8g
QXR0ZW1wdCB0byByZW1vdmUgdGhlICIuZG93bmxvYWQiIGV4dGVuc2lvbiBmcm9tIHRoZSBidW5k
bGUgZm9yIHRoZSBmaW5hbCBmaWxlIGRlc3RpbmF0aW9uCiAgICAgLy8gRmFpbGluZyB0aGF0LCB3
ZSBjbGVhciBtX2Rlc3RpbmF0aW9uIGFuZCB3aWxsIGFzayB0aGUgZGVsZWdhdGUgbGF0ZXIgb25j
ZSB0aGUgZG93bmxvYWQgc3RhcnRzCiAgICAgaWYgKG1fYnVuZGxlUGF0aC5lbmRzV2l0aElnbm9y
aW5nQVNDSUlDYXNlKERvd25sb2FkQnVuZGxlOjpmaWxlRXh0ZW5zaW9uKCkpKSB7Ci0gICAgICAg
IG1fZGVzdGluYXRpb24gPSBtX2J1bmRsZVBhdGguaXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgIG1f
ZGVzdGluYXRpb24udHJ1bmNhdGUobV9kZXN0aW5hdGlvbi5sZW5ndGgoKSAtIERvd25sb2FkQnVu
ZGxlOjpmaWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkpOworICAgICAgICBtX2Rlc3RpbmF0aW9uID0g
U3RyaW5nVmlldyhtX2J1bmRsZVBhdGgpLmxlZnQobV9kZXN0aW5hdGlvbi5sZW5ndGgoKSAtIERv
d25sb2FkQnVuZGxlOjpmaWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkpLnRvU3RyaW5nKCkuaXNvbGF0
ZWRDb3B5KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fZGVzdGluYXRpb24gPSBTdHJpbmcoKTsK
ICAgICAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBjNzcyNDI4MDEyZGExMzJlOWYzZTVjZjczZGQ4NzZjMWJlYzA5NjJmLi5hNTVjNTdkODU0ZmFl
ZDU2MzA1OTJmMTViZjFjMmJhNjNjZDBmNDhiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDQtMTYgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFN0cmluZzo6dHJ1bmNh
dGUoKSBhbmQgdXNlIFN0cmluZzo6bGVmdCgpIGluc3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBh
Z2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKToKKwogMjAyMi0wNC0xMiAgSm9uYXRoYW4gQmVk
YXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2dpdC13ZWJraXRdIEFsbG93IHBy
b2plY3RzIHRvIGRlY2xhcmUgYWx0ZXJuYXRlIHJlbW90ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNw
cAppbmRleCA5ZjAxMjljN2VhOTBmYTZiY2M1OGE4YTQ2ZGM1YTdiNGNhYWI1YTU3Li5lYTdmOGE3
ZGVhN2Y2MjM0MzY5Yjk5ODg4NDhjYTg2MjcxYTUxMTZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKICNpZiBVU0UoQ0Yp
CiAjaW5jbHVkZSA8d3RmL3RleHQvY2YvU3RyaW5nQ29uY2F0ZW5hdGVDRi5oPgpAQCAtMTMzOSw5
ICsxMzQwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25z
b2xlKFdLU3RyaW5nUmVmIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gbWVz
c2FnZVN0cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOwotICAgIHNpemVfdCBudWxsQ2hhclBv
cyA9IG1lc3NhZ2VTdHJpbmcuZmluZChVQ2hhcigwKSk7Ci0gICAgaWYgKG51bGxDaGFyUG9zICE9
IFdURjo6bm90Rm91bmQpCi0gICAgICAgIG1lc3NhZ2VTdHJpbmcudHJ1bmNhdGUobnVsbENoYXJQ
b3MpOworICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLmxlZnQobWVzc2FnZVN0cmlu
Zy5maW5kKG51bGxDaGFyYWN0ZXIpKTsKIAogICAgIHNpemVfdCBmaWxlUHJvdG9jb2xTdGFydCA9
IG1lc3NhZ2VTdHJpbmcuZmluZCgiZmlsZTovLyIpOwogICAgIGlmIChmaWxlUHJvdG9jb2xTdGFy
dCAhPSBXVEY6Om5vdEZvdW5kKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>