<?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>44788</bug_id>
          
          <creation_ts>2010-08-27 12:40:34 -0700</creation_ts>
          <short_desc>Implement HTML5-compliant doctype switching</short_desc>
          <delta_ts>2010-08-28 17:17:43 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270669</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-27 12:40:34 -0700</bug_when>
    <thetext>This bug is about bringing our crufty old doctype switching code up to the HTML5 standard.  The forthcoming patch will rename all the modes to match the HTML5 specification and let the HTML5 parsing algorithm actually drive the mode setting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270684</commentid>
    <comment_count>1</comment_count>
      <attachid>65754</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-27 13:00:30 -0700</bug_when>
    <thetext>Created attachment 65754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270685</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 13:02:59 -0700</bug_when>
    <thetext>Attachment 65754 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/RenderListItem.cpp:167:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/dom/Element.cpp:371:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/dom/Element.cpp:392:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBlock.cpp:4910:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/InlineFlowBox.cpp:925:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 5 in 50 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270695</commentid>
    <comment_count>3</comment_count>
      <attachid>65754</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-27 13:19:26 -0700</bug_when>
    <thetext>Comment on attachment 65754
Patch

&gt; +    // Check for Quirks Mode.
&gt; +    if (docType-&gt;name() != &quot;html&quot;
&gt; +        || docType-&gt;publicId().startsWith(&quot;+//Silmaril//dtd html Pro v0r11 19970101//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//AS//DTD HTML 3.0 asWedit + extensions//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 2.0 Level 1//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 2.0 Level 2//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 2.0 Strict Level 1//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 2.0 Strict Level 2//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 2.0 Strict//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 2.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 2.1E//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 3.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 3.2 Final//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 3.2//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML 3//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Level 0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Level 1//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Level 2//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Level 3//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Strict Level 0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Strict Level 1//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Strict Level 2//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Strict Level 3//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML Strict//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//IETF//DTD HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Metrius//DTD Metrius Presentational//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Microsoft//DTD Internet Explorer 2.0 HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Microsoft//DTD Internet Explorer 2.0 Tables//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Microsoft//DTD Internet Explorer 3.0 HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Microsoft//DTD Internet Explorer 3.0 Tables//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Netscape Comm. Corp.//DTD HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Netscape Comm. Corp.//DTD Strict HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//O&apos;Reilly and Associates//DTD HTML 2.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//O&apos;Reilly and Associates//DTD HTML Extended 1.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//O&apos;Reilly and Associates//DTD HTML Extended Relaxed 1.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Spyglass//DTD HTML 2.0 Extended//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//SQ//DTD HTML 2.0 HoTMetaL + extensions//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Sun Microsystems Corp.//DTD HotJava HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//Sun Microsystems Corp.//DTD HotJava Strict HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 3 1995-03-24//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 3.2 Draft//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 3.2 Final//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 3.2//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 3.2S Draft//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 4.0 Frameset//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 4.0 Transitional//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML Experimental 19960712//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML Experimental 970421//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3C//DTD W3 HTML//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//W3O//DTD W3 HTML 3.0//&quot;, false)
&gt; +        || equalIgnoringCase(docType-&gt;publicId(), &quot;-//W3O//DTD W3 HTML Strict 3.0//EN//&quot;)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//WebTechs//DTD Mozilla HTML 2.0//&quot;, false)
&gt; +        || docType-&gt;publicId().startsWith(&quot;-//WebTechs//DTD Mozilla HTML//&quot;, false)
&gt; +        || equalIgnoringCase(docType-&gt;publicId(), &quot;-/W3C/DTD HTML 4.0 Transitional/EN&quot;)
&gt; +        || equalIgnoringCase(docType-&gt;publicId(), &quot;HTML&quot;)
&gt; +        || equalIgnoringCase(docType-&gt;systemId(), &quot;http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd&quot;)
&gt; +        || (docType-&gt;systemId().isEmpty() &amp;&amp; docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 4.01 Frameset//&quot;, false))
&gt; +        || (docType-&gt;systemId().isEmpty() &amp;&amp; docType-&gt;publicId().startsWith(&quot;-//W3C//DTD HTML 4.01 Transitional//&quot;, false))) {
&gt; +        setCompatibilityMode(QuirksMode);
&gt; +        return;

Ick.Can we at least pull docType-&gt;publicId() into a local variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270703</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-27 13:29:47 -0700</bug_when>
    <thetext>Fixed in r66247.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270721</commentid>
    <comment_count>5</comment_count>
      <attachid>65754</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-27 13:55:53 -0700</bug_when>
    <thetext>Comment on attachment 65754
Patch

&gt; @@ -1394,6 +1404,7 @@ void Document::unscheduleStyleRecalc()
&gt;          documentsThatNeedStyleRecalc-&gt;remove(this);
&gt;  
&gt;      m_styleRecalcTimer.stop();
&gt; +    m_pendingStyleRecalcShouldForce = false;
&gt;  }
&gt;  
&gt;  void Document::styleRecalcTimerFired(Timer&lt;Document&gt;*)
&gt; @@ -1431,6 +1442,9 @@ void Document::recalcStyle(StyleChange c
&gt;      ASSERT(!renderer() || renderArena());
&gt;      if (!renderer() || !renderArena())
&gt;          goto bail_out;
&gt; +    
&gt; +    if (m_pendingStyleRecalcShouldForce)
&gt; +        change = Force;
&gt;  
&gt;      if (change == Force) {
&gt;          // style selector may set this again during recalc
&gt; @@ -1488,9 +1502,7 @@ void Document::updateStyleIfNeeded()
&gt;      if (m_frame)
&gt;          m_frame-&gt;animation()-&gt;beginAnimationUpdate();
&gt;          
&gt; -    recalcStyle(m_pendingStyleRecalcShouldForce ? Force : NoChange);
&gt; -    
&gt; -    m_pendingStyleRecalcShouldForce = false;
&gt; +    recalcStyle(NoChange);
&gt;  
&gt;      // Tell the animation controller that updateStyleIfNeeded is finished and it can do any post-processing
&gt;      if (m_frame)

These changes seem good, but separate from the doctype changes. Can you land them separately? Can you test them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270745</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 14:19:39 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66247 might have broken Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/66248
http://trac.webkit.org/changeset/66246
http://trac.webkit.org/changeset/66247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270749</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-27 14:22:21 -0700</bug_when>
    <thetext>So this was landed I take it?

Very strange that this all happened &quot;in secret&quot; w/o any r+ on bugzilla, or the original authors of this code CC&apos;d. :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270751</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-27 14:23:17 -0700</bug_when>
    <thetext>By &quot;this code&quot; I meant, the parser, which was an overstatement, since most of this code doesn&apos;t affect the parser. :)

Regardless, thanks for fixing.  Still seemed to happen kinda strangely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270753</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-27 14:26:59 -0700</bug_when>
    <thetext>It&apos;s unclear to me why HTMLDocument::setCompatibilityModeFromDoctype() part of HTMLDocument instead of part of HTMLTreeBuilder, which is where this logic is in the spec...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270755</commentid>
    <comment_count>10</comment_count>
      <attachid>65754</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-27 14:30:49 -0700</bug_when>
    <thetext>Comment on attachment 65754
Patch

WebCore/dom/Document.cpp:592
 +          // All user stylesheets have to reparse using the different mode.
You mentioned that the renderers have to update too (over irc).  Or is that no longer the case?

WebCore/dom/Document.h:586
 +      bool inNoQuirksMode() const { return m_compatibilityMode == NoQuirksMode; }
The new names are much better. :)

WebCore/html/HTMLDocument.cpp:359
 +          || docType-&gt;publicId().startsWith(&quot;-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//&quot;, false)
I agree with simon. :)  This seems to want a helper function. :)

WebCore/html/HTMLTreeBuilder.cpp:434
 +      m_dummyDocumentForFragmentParsing-&gt;setCompatibilityMode(fragment-&gt;document()-&gt;compatibilityMode());
Do we have tests for this?

I retract my earlier comments.  I lept to judgement.

Fantastic patch.  Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270760</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-27 14:35:08 -0700</bug_when>
    <thetext>I think these tests started to fail after http://trac.webkit.org/changeset/66247:
  tables/mozilla_expected_failures/bugs/bug56024.html
  fast/multicol/span/span-as-nested-columns-child.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271069</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-28 15:56:17 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think these tests started to fail after http://trac.webkit.org/changeset/66247:
&gt;   tables/mozilla_expected_failures/bugs/bug56024.html
&gt;   fast/multicol/span/span-as-nested-columns-child.html

Hyatt, will you be fixing this? Do we need a bug report?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271077</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-28 17:17:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think these tests started to fail after http://trac.webkit.org/changeset/66247:
&gt;   tables/mozilla_expected_failures/bugs/bug56024.html
&gt;   fast/multicol/span/span-as-nested-columns-child.html

I believe these tests no longer fails after rebaselined in http://trac.webkit.org/changeset/66274 and http://trac.webkit.org/changeset/66278.  The rational for rebaseline being their getting the old beahvior back after rebaselines in http://trac.webkit.org/changeset/66154 and http://trac.webkit.org/changeset/66147.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65754</attachid>
            <date>2010-08-27 13:00:30 -0700</date>
            <delta_ts>2010-08-27 14:30:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>76295</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjI0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTY0IEBACisyMDEwLTA4LTI3ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3ODgsIGltcGxlbWVudCBIVE1M
NS1jb21wbGlhbnQgZG9jdHlwZSBzd2l0Y2hpbmcuCisKKyAgICAgICAgUmVuYW1lIHRoZSB2YXJp
b3VzIG1vZGVzIHRvIG1hdGNoIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uOgorICAgICAgICAgICAg
UGFyc2VNb2RlIC0+IENvbXBhdGliaWxpdHlNb2RlCisgICAgICAgICAgICBDb21wYXRNb2RlIC0+
IFF1aXJrc01vZGUKKyAgICAgICAgICAgIEFsbW9zdFN0cmljdE1vZGUgLT4gTGltaXRlZFF1aXJr
c01vZGUKKyAgICAgICAgICAgIFN0cmljdE1vZGUgLT4gTm9RdWlya3NNb2RlCisgICAgICAgICAg
ICAKKyAgICAgICAgUmVtb3ZlIHRoZSBodG1sSGFja3MoKSBhY2Nlc3NvciBmcm9tIFJlbmRlclN0
eWxlIGFuZCBtYWtlIHJlbmRlcmluZyBjb2RlIGp1c3QgZ28gdG8gdGhlIGRvY3VtZW50CisgICAg
ICAgIGluc3RlYWQuICBUaGlzIG1ha2VzIHN3aXRjaGluZyBtb2RlcyBhdm9pZCBmb3JjaW5nIGFs
bCBSZW5kZXJTdHlsZXMgdG8gZGV0ZWN0IGFzIGNoYW5nZWQuCisgICAgICAgIAorICAgICAgICBD
bGVhbiB1cCB1c2VyIHN0eWxlc2hlZXRzIHRvIG1pbmltaXplIHN0eWxlIHJlY2FsY3VsYXRpb24g
d2hlbiB0aGUgbW9kZSBpcyBzd2l0Y2hlZC4KKyAgICAgICAgCisgICAgICAgIEZpeCBidWdzIHdp
dGggdGhlIHByb3BhZ2F0aW9uIG9mIGNvcnJlY3QgbW9kZXMgaW4gdGhlIEhUTUw1IHBhcnNlci4g
IE1ha2Ugc3VyZSB0aGUKKyAgICAgICAgZHVtbXkgZG9jdW1lbnQgY3JlYXRlZCBmb3IgZnJhZ21l
bnQgcGFyc2luZyBwcm9wZXJseSBpbmhlcml0cyB0aGUgcmVhbCBkb2N1bWVudCdzIENvbXBhdGli
aWxpdHlNb2RlLgorICAgICAgICBNYWtlIHN1cmUgdGhlIHRyZWUgYnVpbGRlciBwcm9wZXJseSBj
aGFuZ2VzIHRoZSBpbnNlcnRpb24gbW9kZSB0byAiQmVmb3JlSFRNTCIgYWZ0ZXIgaGFuZGxpbmcK
KyAgICAgICAgYSBkb2N0eXBlIHRva2VuLgorICAgICAgICAKKyAgICAgICAgZGV0ZXJtaW5lUGFy
c2VNb2RlIC0+IHNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUsIGFuZCBpdCBub3cgaW1w
bGVtZW50cyB0aGUgSFRNTDUgYWxnb3JpdGhtCisgICAgICAgIHByZWNpc2VseS4KKyAgICAgICAg
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JEb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmZvbnRTaXplRm9yS2V5d29y
ZCk6CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdCk6CisgICAgICAgICogZG9tL0RlY29kZWREYXRh
RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RlZERhdGFEb2N1bWVu
dFBhcnNlcjo6YXBwZW5kQnl0ZXMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnNldENvbXBhdGliaWxpdHlNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZXREb2NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnNjaGVkdWxlU3R5
bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVTdHlsZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjppbXBsaWNpdE9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNsZWFyUGFnZVVz
ZXJTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlUGFnZVVzZXJTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cGFnZUdyb3VwVXNlclNoZWV0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2xlYXJQYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVQYWdlR3JvdXBVc2VyU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5kQW5jaG9yKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjopOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmxvY2tDb21wYXRpYmlsaXR5TW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Y29tcGF0aWJpbGl0eU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmluUXVpcmtzTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5MaW1p
dGVkUXVpcmtzTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5Ob1F1aXJrc01v
ZGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmNsaWVudFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNsaWVudEhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3ZWJraXRNYXRjaGVzU2VsZWN0b3IpOgor
ICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRO
b2RlTWFwOjpzZXRDbGFzcyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6cXVlcnlTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpxdWVy
eVNlbGVjdG9yQWxsKToKKyAgICAgICAgKiBkb20vT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpPcHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQpOgorICAg
ICAgICAqIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNlbGVjdG9yTm9kZUxpc3QpOgorICAgICAgICAqIGRvbS9TdHlsZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjpjcmVhdGVTaGVldCk6CisgICAgICAgICogZG9t
L1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6Y3Jl
YXRlSW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpz
aG91bGRSZW1vdmVFbmRCUik6CisgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpjcmVhdGVMaW5rRGVjbCk6CisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgICogaHRtbC9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0RG9jdHlwZSk6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERvY3VtZW50OjpIVE1MRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTERvY3VtZW50Ojpjb21wYXRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVu
dDo6c2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZSk6CisgICAgICAgICogaHRtbC9IVE1M
RG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnNldENTU1N0eWxlU2hlZXQpOgorICAgICAgICAq
IGh0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVp
bGRlcjo6SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5pdGlhbCk6
CisgICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQpOgor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFdyaXRlcjo6cmVwbGFjZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50V3JpdGVyOjpyZXBvcnREYXRhUmVjZWl2ZWQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dFdyaXRlci5oOgorICAgICAgICAqIGxvYWRlci9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OkltYWdlRG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRl
ci9NZWRpYURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6Ok1l
ZGlhRG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5Eb2N1bWVudDo6UGx1Z2luRG9jdW1lbnQpOgorICAgICAgICAq
IGxvYWRlci9TaW5rRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lua0RvY3VtZW50
OjpTaW5rRG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRlci9UZXh0RG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dERvY3VtZW50OjpUZXh0RG9jdW1lbnQpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0
aW9uQ2hhbmdlZCk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUdyb3VwOjpyZXNldFVzZXJTdHlsZUNhY2hlSW5BbGxGcmFtZXMpOgorICAgICAg
ICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRp
bmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRFbmZvcmNlQ1NTTUlNRVR5cGVJ
bk5vUXVpcmtzTW9kZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0dGluZ3M6OmVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKToKKyAgICAgICAgKiByZW5kZXJpbmcvRml4ZWRU
YWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRhYmxlTGF5b3V0OjpjYWxj
UHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lRmxvd0JveDo6cGFpbnRUZXh0RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6
OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmlzU2VsZkNvbGxhcHNpbmdCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpoYW5kbGVCb3R0b21PZkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y2FsY0Jsb2NrUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbmxpbmVCb3hG
b3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5l
QnJlYWspOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpjYWxjUGVyY2VudGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmVwbGFjZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3RyZXRj
aGVzVG9WaWV3SGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGFyZW50T2ZGaXJzdExpbmVCb3gpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Um9vdElubGluZUJveDo6dmVydGljYWxseUFsaWduQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6
ZGlmZik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnNldEJpdERl
ZmF1bHRzKToKKwogMjAxMC0wOC0yNyAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBA
IC03MzMsNyArNzMzLDcgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMzFzZXRTaHJpbmtzU3RhbmRh
bAogX19aTjdXZWJDb3JlOFNldHRpbmdzMzJzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MzMnNldE5lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1
aXJrRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczMzc2V0RG93bmxvYWRhYmxlQmluYXJ5Rm9udHNF
bmFibGVkRWIKLV9fWk43V2ViQ29yZThTZXR0aW5nczMzc2V0RW5mb3JjZUNTU01JTUVUeXBlSW5T
dHJpY3RNb2RlRWIKK19fWk43V2ViQ29yZThTZXR0aW5nczM1c2V0RW5mb3JjZUNTU01JTUVUeXBl
SW5Ob1F1aXJrc01vZGVFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMzRzZXRMb2NhbEZpbGVDb250
ZW50U25pZmZpbmdFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczM1c2V0QWxsb3dVbml2
ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMzVzZXRFeHBl
cmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZEViCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzNSw4ICsxMTM1LDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogCiAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0
ZSgwKTsKLSAgICBpZiAoZG9jdW1lbnQtPmluQ29tcGF0TW9kZSgpKQotICAgICAgICBkb2N1bWVu
dFN0eWxlLT5zZXRIdG1sSGFja3ModHJ1ZSk7IC8vIGVuYWJsZSBodG1sIHNwZWNpZmljIHJlbmRl
cmluZyB0cmlja3MKICAgICAgICAgCiAgICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgp
OwogfQpAQCAtNDA2NywxMCArNDA2NSwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50CiAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3
b3JkU2l6ZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSAtIENTU1ZhbHVlWHhTbWFsbCArIDEp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTGFyZ2VyOgotICAgICAgICAgICAgICAgICAgICBzaXplID0gbGFyZ2VyRm9udFNpemUob2xk
U2l6ZSwgbV9zdHlsZS0+aHRtbEhhY2tzKCkpOworICAgICAgICAgICAgICAgICAgICBzaXplID0g
bGFyZ2VyRm9udFNpemUob2xkU2l6ZSwgbV9jaGVja2VyLm1fZG9jdW1lbnQtPmluUXVpcmtzTW9k
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVNtYWxsZXI6Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBzbWFsbGVyRm9udFNp
emUob2xkU2l6ZSwgbV9zdHlsZS0+aHRtbEhhY2tzKCkpOworICAgICAgICAgICAgICAgICAgICBz
aXplID0gc21hbGxlckZvbnRTaXplKG9sZFNpemUsIG1fY2hlY2tlci5tX2RvY3VtZW50LT5pblF1
aXJrc01vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTYyODcsNyArNjI4NSw3
IEBAIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmZvbnRTaXplRm9yS2V5d28KICAgICBpZiAoIXNl
dHRpbmdzKQogICAgICAgICByZXR1cm4gMS4wZjsKIAotICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRv
Y3VtZW50LT5pbkNvbXBhdE1vZGUoKTsKKyAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+
aW5RdWlya3NNb2RlKCk7CiAgICAgaW50IG1lZGl1bVNpemUgPSBmaXhlZCA/IHNldHRpbmdzLT5k
ZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOwogICAg
IGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250
U2l6ZVRhYmxlTWF4KSB7CiAgICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5IGluIHRoZSB0YWJs
ZS4KSW5kZXg6IFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCShyZXZpc2lvbiA2NjExMykKKysrIFdlYkNvcmUv
ZG9tL0NsYXNzTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCiAgICAgOiBEeW5h
bWljTm9kZUxpc3Qocm9vdE5vZGUpCi0gICAgLCBtX2NsYXNzTmFtZXMoY2xhc3NOYW1lcywgbV9y
b290Tm9kZS0+ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpCisgICAgLCBtX2NsYXNzTmFtZXMo
Y2xhc3NOYW1lcywgbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiAgICAg
LCBtX29yaWdpbmFsQ2xhc3NOYW1lcyhjbGFzc05hbWVzKQogewogfQpJbmRleDogV2ViQ29yZS9k
b20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2Vi
Q29yZS9kb20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgdm9pZCBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyOjphcHBlbmRCeQog
ICAgIGlmIChkZWNvZGVkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd3JpdGVy
LT5yZXBvcnREYXRhUmVjaWV2ZWQoKTsKKyAgICB3cml0ZXItPnJlcG9ydERhdGFSZWNlaXZlZCgp
OwogCiAgICAgYXBwZW5kKGRlY29kZWQpOwogfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjYx
MjIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2
ICszNTMsOCBAQCBwcml2YXRlOgogCiBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBj
b25zdCBLVVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAgICAgOiBDb250YWlu
ZXJOb2RlKDApCisgICAgLCBtX2NvbXBhdGliaWxpdHlNb2RlKE5vUXVpcmtzTW9kZSkKKyAgICAs
IG1fY29tcGF0aWJpbGl0eU1vZGVMb2NrZWQoZmFsc2UpCiAgICAgLCBtX2RvbVRyZWVWZXJzaW9u
KDApCiAgICAgLCBtX3N0eWxlU2hlZXRzKFN0eWxlU2hlZXRMaXN0OjpjcmVhdGUodGhpcykpCiAg
ICAgLCBtX3N0eWxlUmVjYWxjVGltZXIodGhpcywgJkRvY3VtZW50OjpzdHlsZVJlY2FsY1RpbWVy
RmlyZWQpCkBAIC00MjQsOCArNDI2LDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFt
ZSwgY29uc3QgSwogICAgIG1fYlBhcnNpbmcgPSBmYWxzZTsKICAgICBtX3dlbGxGb3JtZWQgPSBm
YWxzZTsKIAotICAgIHNldFBhcnNlTW9kZShTdHJpY3QpOwotCiAgICAgbV90ZXh0Q29sb3IgPSBD
b2xvcjo6YmxhY2s7CiAgICAgbV9saXN0ZW5lclR5cGVzID0gMDsKICAgICBzZXRJbkRvY3VtZW50
KCk7CkBAIC01ODEsNiArNTgxLDIwIEBAIHZvaWQgRG9jdW1lbnQ6OmRlc3Ryb3lBbGxXcmFwcGVy
Q2FjaGVzKCkKIH0KICNlbmRpZgogCit2b2lkIERvY3VtZW50OjpzZXRDb21wYXRpYmlsaXR5TW9k
ZShDb21wYXRpYmlsaXR5TW9kZSBtb2RlKQoreworICAgIGlmIChtX2NvbXBhdGliaWxpdHlNb2Rl
TG9ja2VkIHx8IG1vZGUgPT0gbV9jb21wYXRpYmlsaXR5TW9kZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEFTU0VSVCghZG9jdW1lbnRFbGVtZW50KCkgJiYgIW1fc3R5bGVTaGVldHMtPmxlbmd0aCgp
KTsKKyAgICBib29sIHdhc0luUXVpcmtzTW9kZSA9IGluUXVpcmtzTW9kZSgpOworICAgIG1fY29t
cGF0aWJpbGl0eU1vZGUgPSBtb2RlOworICAgIGlmIChpblF1aXJrc01vZGUoKSAhPSB3YXNJblF1
aXJrc01vZGUpIHsKKyAgICAgICAgLy8gQWxsIHVzZXIgc3R5bGVzaGVldHMgaGF2ZSB0byByZXBh
cnNlIHVzaW5nIHRoZSBkaWZmZXJlbnQgbW9kZS4KKyAgICAgICAgY2xlYXJQYWdlVXNlclNoZWV0
KCk7CisgICAgICAgIGNsZWFyUGFnZUdyb3VwVXNlclNoZWV0cygpOworICAgIH0KK30KKwogdm9p
ZCBEb2N1bWVudDo6cmVzZXRMaW5rQ29sb3IoKQogewogICAgIG1fbGlua0NvbG9yID0gQ29sb3Io
MCwgMCwgMjM4KTsKQEAgLTU5OSwxNCArNjEzLDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnJlc2V0QWN0
aXZlTGlua0NvbG9yKCkKIHZvaWQgRG9jdW1lbnQ6OnNldERvY1R5cGUoUGFzc1JlZlB0cjxEb2N1
bWVudFR5cGU+IGRvY1R5cGUpCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk
IG1vcmUgdGhhbiBvbmNlLgotICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IGEgcHVibGljIERPTSBt
ZXRob2QgYW5kIGNhbiBvbmx5IGJlIGNhbGxlZCBieSB0aGUgcGFyc2VyLgogICAgIEFTU0VSVCgh
bV9kb2NUeXBlIHx8ICFkb2NUeXBlKTsKLSAgICBpZiAobV9kb2NUeXBlICYmIGRvY1R5cGUpCi0g
ICAgICAgIHJldHVybjsKICAgICBtX2RvY1R5cGUgPSBkb2NUeXBlOwogICAgIGlmIChtX2RvY1R5
cGUpCiAgICAgICAgIG1fZG9jVHlwZS0+c2V0RG9jdW1lbnQodGhpcyk7Ci0gICAgZGV0ZXJtaW5l
UGFyc2VNb2RlKCk7CiB9CiAKIERPTUltcGxlbWVudGF0aW9uKiBEb2N1bWVudDo6aW1wbGVtZW50
YXRpb24oKSBjb25zdApAQCAtMTM5NCw2ICsxNDA0LDcgQEAgdm9pZCBEb2N1bWVudDo6dW5zY2hl
ZHVsZVN0eWxlUmVjYWxjKCkKICAgICAgICAgZG9jdW1lbnRzVGhhdE5lZWRTdHlsZVJlY2FsYy0+
cmVtb3ZlKHRoaXMpOwogCiAgICAgbV9zdHlsZVJlY2FsY1RpbWVyLnN0b3AoKTsKKyAgICBtX3Bl
bmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZvcmNlID0gZmFsc2U7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OnN0eWxlUmVjYWxjVGltZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKQpAQCAtMTQzMSw2ICsxNDQy
LDkgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgYwogICAgIEFTU0VS
VCghcmVuZGVyZXIoKSB8fCByZW5kZXJBcmVuYSgpKTsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwg
IXJlbmRlckFyZW5hKCkpCiAgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgCisgICAgaWYgKG1f
cGVuZGluZ1N0eWxlUmVjYWxjU2hvdWxkRm9yY2UpCisgICAgICAgIGNoYW5nZSA9IEZvcmNlOwog
CiAgICAgaWYgKGNoYW5nZSA9PSBGb3JjZSkgewogICAgICAgICAvLyBzdHlsZSBzZWxlY3RvciBt
YXkgc2V0IHRoaXMgYWdhaW4gZHVyaW5nIHJlY2FsYwpAQCAtMTQ4OCw5ICsxNTAyLDcgQEAgdm9p
ZCBEb2N1bWVudDo6dXBkYXRlU3R5bGVJZk5lZWRlZCgpCiAgICAgaWYgKG1fZnJhbWUpCiAgICAg
ICAgIG1fZnJhbWUtPmFuaW1hdGlvbigpLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwogICAgICAg
ICAKLSAgICByZWNhbGNTdHlsZShtX3BlbmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZvcmNlID8gRm9y
Y2UgOiBOb0NoYW5nZSk7Ci0gICAgCi0gICAgbV9wZW5kaW5nU3R5bGVSZWNhbGNTaG91bGRGb3Jj
ZSA9IGZhbHNlOworICAgIHJlY2FsY1N0eWxlKE5vQ2hhbmdlKTsKIAogICAgIC8vIFRlbGwgdGhl
IGFuaW1hdGlvbiBjb250cm9sbGVyIHRoYXQgdXBkYXRlU3R5bGVJZk5lZWRlZCBpcyBmaW5pc2hl
ZCBhbmQgaXQgY2FuIGRvIGFueSBwb3N0LXByb2Nlc3NpbmcKICAgICBpZiAobV9mcmFtZSkKQEAg
LTE2MjMsNyArMTYzNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNyZWF0ZVN0eWxlU2VsZWN0b3IoKQog
ICAgIGlmIChTZXR0aW5ncyogZG9jU2V0dGluZ3MgPSBzZXR0aW5ncygpKQogICAgICAgICBtYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMgPSBkb2NTZXR0aW5ncy0+YXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQoKTsKICAgICBtX3N0eWxlU2VsZWN0b3Iuc2V0KG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRo
aXMsIG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgpLCBwYWdl
VXNlclNoZWV0KCksIHBhZ2VHcm91cFVzZXJTaGVldHMoKSwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAhaW5Db21wYXRNb2RlKCksIG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIWluUXVpcmtzTW9kZSgpLCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpKTsKIH0KIAogdm9p
ZCBEb2N1bWVudDo6YXR0YWNoKCkKQEAgLTE4NDYsNiArMTg1OCw4IEBAIHZvaWQgRG9jdW1lbnQ6
OmltcGxpY2l0T3BlbigpCiAKICAgICByZW1vdmVDaGlsZHJlbigpOwogCisgICAgc2V0Q29tcGF0
aWJpbGl0eU1vZGUoTm9RdWlya3NNb2RlKTsKKwogICAgIG1fcGFyc2VyID0gY3JlYXRlUGFyc2Vy
KCk7CiAgICAgc2V0UGFyc2luZyh0cnVlKTsKIApAQCAtMjIyMiwxNCArMjIzNiwyMyBAQCBDU1NT
dHlsZVNoZWV0KiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgpCiAgICAgLy8gUGFyc2UgdGhlIHNo
ZWV0IGFuZCBjYWNoZSBpdC4KICAgICBtX3BhZ2VVc2VyU2hlZXQgPSBDU1NTdHlsZVNoZWV0Ojpj
cmVhdGVJbmxpbmUodGhpcywgc2V0dGluZ3MoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpKTsK
ICAgICBtX3BhZ2VVc2VyU2hlZXQtPnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7Ci0gICAgbV9w
YWdlVXNlclNoZWV0LT5wYXJzZVN0cmluZyh1c2VyU2hlZXRUZXh0LCAhaW5Db21wYXRNb2RlKCkp
OworICAgIG1fcGFnZVVzZXJTaGVldC0+cGFyc2VTdHJpbmcodXNlclNoZWV0VGV4dCwgIWluUXVp
cmtzTW9kZSgpKTsKICAgICByZXR1cm4gbV9wYWdlVXNlclNoZWV0LmdldCgpOwogfQogCiB2b2lk
IERvY3VtZW50OjpjbGVhclBhZ2VVc2VyU2hlZXQoKQogewotICAgIG1fcGFnZVVzZXJTaGVldCA9
IDA7Ci0gICAgc3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CisgICAgaWYg
KG1fcGFnZVVzZXJTaGVldCkgeworICAgICAgICBtX3BhZ2VVc2VyU2hlZXQgPSAwOworICAgICAg
ICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9Cit9CisKK3Zv
aWQgRG9jdW1lbnQ6OnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKQoreworICAgIGNsZWFyUGFnZVVzZXJT
aGVldCgpOworICAgIGlmIChwYWdlVXNlclNoZWV0KCkpCisgICAgICAgIHN0eWxlU2VsZWN0b3JD
aGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQogCiBjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+ID4qIERvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3QK
QEAgLTIyNTksNyArMjI4Miw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
PiogRG8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiBwYXJzZWRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShjb25z
dF9jYXN0PERvY3VtZW50Kj4odGhpcyksIHNoZWV0LT51cmwoKSk7CiAgICAgICAgICAgICBwYXJz
ZWRTaGVldC0+c2V0SXNVc2VyU3R5bGVTaGVldChzaGVldC0+bGV2ZWwoKSA9PSBVc2VyU3R5bGVT
aGVldDo6VXNlckxldmVsKTsKLSAgICAgICAgICAgIHBhcnNlZFNoZWV0LT5wYXJzZVN0cmluZyhz
aGVldC0+c291cmNlKCksICFpbkNvbXBhdE1vZGUoKSk7CisgICAgICAgICAgICBwYXJzZWRTaGVl
dC0+cGFyc2VTdHJpbmcoc2hlZXQtPnNvdXJjZSgpLCAhaW5RdWlya3NNb2RlKCkpOwogICAgICAg
ICAgICAgaWYgKCFtX3BhZ2VHcm91cFVzZXJTaGVldHMpCiAgICAgICAgICAgICAgICAgbV9wYWdl
R3JvdXBVc2VyU2hlZXRzLnNldChuZXcgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KTsK
ICAgICAgICAgICAgIG1fcGFnZUdyb3VwVXNlclNoZWV0cy0+YXBwZW5kKHBhcnNlZFNoZWV0LnJl
bGVhc2UoKSk7CkBAIC0yMjcxLDkgKzIyOTQsMTggQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiA+KiBEbwogCiB2b2lkIERvY3VtZW50OjpjbGVhclBhZ2VHcm91cFVzZXJTaGVl
dHMoKQogewotICAgIG1fcGFnZUdyb3VwVXNlclNoZWV0cy5jbGVhcigpOwogICAgIG1fcGFnZUdy
b3VwVXNlclNoZWV0Q2FjaGVWYWxpZCA9IGZhbHNlOwotICAgIHN0eWxlU2VsZWN0b3JDaGFuZ2Vk
KERlZmVyUmVjYWxjU3R5bGUpOworICAgIGlmIChtX3BhZ2VHcm91cFVzZXJTaGVldHMgJiYgbV9w
YWdlR3JvdXBVc2VyU2hlZXRzLT5zaXplKCkpIHsKKyAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hl
ZXRzLT5jbGVhcigpOworICAgICAgICBzdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0
eWxlKTsKKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVBhZ2VHcm91cFVzZXJTaGVl
dHMoKQoreworICAgIGNsZWFyUGFnZUdyb3VwVXNlclNoZWV0cygpOworICAgIGlmIChwYWdlR3Jv
dXBVc2VyU2hlZXRzKCkgJiYgcGFnZUdyb3VwVXNlclNoZWV0cygpLT5zaXplKCkpCisgICAgICAg
IHN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQogCiBDU1NT
dHlsZVNoZWV0KiBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKQEAgLTQ1MTcsNyArNDU0OSw3IEBA
IEVsZW1lbnQqIERvY3VtZW50OjpmaW5kQW5jaG9yKGNvbnN0IFN0cmkKICAgICBmb3IgKE5vZGUq
IG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGFUYWcpKSB7CiAgICAgICAgICAgICBIVE1MQW5j
aG9yRWxlbWVudCogYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2Rl
KTsKLSAgICAgICAgICAgIGlmIChpbkNvbXBhdE1vZGUoKSkgeworICAgICAgICAgICAgaWYgKGlu
UXVpcmtzTW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gUXVpcmtzIG1vZGUsIGNhc2UgaW5z
ZW5zaXRpdmUgY29tcGFyaXNvbiBvZiBuYW1lcy4KICAgICAgICAgICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYW5jaG9yLT5uYW1lKCksIG5hbWUpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYW5jaG9yOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA2NjEyMikKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw5ICs1NTMsMTEgQEAgcHVibGljOgog
CiAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCgpOwogICAgIHZvaWQgY2xlYXJQYWdl
VXNlclNoZWV0KCk7CisgICAgdm9pZCB1cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAKICAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMoKSBj
b25zdDsKICAgICB2b2lkIGNsZWFyUGFnZUdyb3VwVXNlclNoZWV0cygpOworICAgIHZvaWQgdXBk
YXRlUGFnZUdyb3VwVXNlclNoZWV0cygpOwogCiAgICAgQ1NTU3R5bGVTaGVldCogZWxlbWVudFNo
ZWV0KCk7CiAgICAgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0KCk7CkBAIC01NzIs
MTQgKzU3NCwxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBwYWdpbmF0ZWQoKSBjb25zdCB7
IHJldHVybiBwcmludGluZygpIHx8IHBhZ2luYXRlZEZvclNjcmVlbigpOyB9CiAKLSAgICBlbnVt
IFBhcnNlTW9kZSB7IENvbXBhdCwgQWxtb3N0U3RyaWN0LCBTdHJpY3QgfTsKKyAgICBlbnVtIENv
bXBhdGliaWxpdHlNb2RlIHsgUXVpcmtzTW9kZSwgTGltaXRlZFF1aXJrc01vZGUsIE5vUXVpcmtz
TW9kZSB9OwogCi0gICAgdm9pZCBzZXRQYXJzZU1vZGUoUGFyc2VNb2RlIG0pIHsgbV9wYXJzZU1v
ZGUgPSBtOyB9Ci0gICAgUGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
c2VNb2RlOyB9Ci0KLSAgICBib29sIGluQ29tcGF0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
c2VNb2RlID09IENvbXBhdDsgfQotICAgIGJvb2wgaW5BbG1vc3RTdHJpY3RNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJzZU1vZGUgPT0gQWxtb3N0U3RyaWN0OyB9Ci0gICAgYm9vbCBpblN0cmlj
dE1vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlTW9kZSA9PSBTdHJpY3Q7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZSgpIHsgfQorICAgIHZvaWQg
c2V0Q29tcGF0aWJpbGl0eU1vZGUoQ29tcGF0aWJpbGl0eU1vZGUgbSk7CisgICAgdm9pZCBsb2Nr
Q29tcGF0aWJpbGl0eU1vZGUoKSB7IG1fY29tcGF0aWJpbGl0eU1vZGVMb2NrZWQgPSB0cnVlOyB9
CisgICAgQ29tcGF0aWJpbGl0eU1vZGUgY29tcGF0aWJpbGl0eU1vZGUoKSBjb25zdCB7IHJldHVy
biBtX2NvbXBhdGliaWxpdHlNb2RlOyB9CisKKyAgICBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcGF0aWJpbGl0eU1vZGUgPT0gUXVpcmtzTW9kZTsgfQorICAgIGJvb2wg
aW5MaW1pdGVkUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGF0aWJpbGl0eU1vZGUg
PT0gTGltaXRlZFF1aXJrc01vZGU7IH0KKyAgICBib29sIGluTm9RdWlya3NNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21wYXRpYmlsaXR5TW9kZSA9PSBOb1F1aXJrc01vZGU7IH0KICAgICAKICAg
ICB2b2lkIHNldFBhcnNpbmcoYm9vbCk7CiAgICAgYm9vbCBwYXJzaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9iUGFyc2luZzsgfQpAQCAtMTAxNSw3ICsxMDE5LDYgQEAgcHJpdmF0ZToKIAogICAgIHZp
cnR1YWwgYm9vbCBpc0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVkTGFzdFJlZigpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVQYXJz
ZU1vZGUoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFu
Z2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJD
aGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKQEAgLTExMDMsNyArMTEwNiw4
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faWdub3JlQXV0b2ZvY3VzOwogCi0gICAgUGFyc2VN
b2RlIG1fcGFyc2VNb2RlOworICAgIENvbXBhdGliaWxpdHlNb2RlIG1fY29tcGF0aWJpbGl0eU1v
ZGU7CisgICAgYm9vbCBtX2NvbXBhdGliaWxpdHlNb2RlTG9ja2VkOyAvLyBUaGlzIGlzIGNoZWFw
ZXIgdGhhbiBtYWtpbmcgc2V0Q29tcGF0aWJpbGl0eU1vZGUgdmlydHVhbC4KIAogICAgIENvbG9y
IG1fdGV4dENvbG9yOwogCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDkgKzM2Nyw5IEBAIGludCBF
bGVtZW50OjpjbGllbnRXaWR0aCgpCiAKICAgICAvLyBXaGVuIGluIHN0cmljdCBtb2RlLCBjbGll
bnRXaWR0aCBmb3IgdGhlIGRvY3VtZW50IGVsZW1lbnQgc2hvdWxkIHJldHVybiB0aGUgd2lkdGgg
b2YgdGhlIGNvbnRhaW5pbmcgZnJhbWUuCiAgICAgLy8gV2hlbiBpbiBxdWlya3MgbW9kZSwgY2xp
ZW50V2lkdGggZm9yIHRoZSBib2R5IGVsZW1lbnQgc2hvdWxkIHJldHVybiB0aGUgd2lkdGggb2Yg
dGhlIGNvbnRhaW5pbmcgZnJhbWUuCi0gICAgYm9vbCBpbkNvbXBhdE1vZGUgPSBkb2N1bWVudCgp
LT5pbkNvbXBhdE1vZGUoKTsKLSAgICBpZiAoKCFpbkNvbXBhdE1vZGUgJiYgZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwKLSAgICAgICAgKGluQ29tcGF0TW9kZSAmJiBp
c0hUTUxFbGVtZW50KCkgJiYgZG9jdW1lbnQoKS0+Ym9keSgpID09IHRoaXMpKSB7CisgICAgYm9v
bCBpblF1aXJrc01vZGUgPSBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKTsKKyAgICBpZiAoKCFp
blF1aXJrc01vZGUgJiYgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwK
KyAgICAgICAgKGluUXVpcmtzTW9kZSAmJiBpc0hUTUxFbGVtZW50KCkgJiYgZG9jdW1lbnQoKS0+
Ym9keSgpID09IHRoaXMpKSB7CiAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVu
dCgpLT52aWV3KCkpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0g
ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKQogICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RG
b3JBYnNvbHV0ZVpvb20odmlldy0+bGF5b3V0V2lkdGgoKSwgcmVuZGVyVmlldyk7CkBAIC0zODcs
MTAgKzM4NywxMCBAQCBpbnQgRWxlbWVudDo6Y2xpZW50SGVpZ2h0KCkKIAogICAgIC8vIFdoZW4g
aW4gc3RyaWN0IG1vZGUsIGNsaWVudEhlaWdodCBmb3IgdGhlIGRvY3VtZW50IGVsZW1lbnQgc2hv
dWxkIHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluaW5nIGZyYW1lLgogICAgIC8vIFdo
ZW4gaW4gcXVpcmtzIG1vZGUsIGNsaWVudEhlaWdodCBmb3IgdGhlIGJvZHkgZWxlbWVudCBzaG91
bGQgcmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgZnJhbWUuCi0gICAgYm9vbCBp
bkNvbXBhdE1vZGUgPSBkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKTsgICAgIAorICAgIGJvb2wg
aW5RdWlya3NNb2RlID0gZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCk7ICAgICAKIAotICAgIGlm
ICgoIWluQ29tcGF0TW9kZSAmJiBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlz
KSB8fAotICAgICAgICAoaW5Db21wYXRNb2RlICYmIGlzSFRNTEVsZW1lbnQoKSAmJiBkb2N1bWVu
dCgpLT5ib2R5KCkgPT0gdGhpcykpIHsKKyAgICBpZiAoKCFpblF1aXJrc01vZGUgJiYgZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwKKyAgICAgICAgKGluUXVpcmtzTW9k
ZSAmJiBpc0hUTUxFbGVtZW50KCkgJiYgZG9jdW1lbnQoKS0+Ym9keSgpID09IHRoaXMpKSB7CiAg
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpIHsKICAgICAg
ICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQoKS0+cmVuZGVyVmll
dygpKQogICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20odmlldy0+
bGF5b3V0SGVpZ2h0KCksIHJlbmRlclZpZXcpOwpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAgYm9vbCBF
bGVtZW50Ojp3ZWJraXRNYXRjaGVzU2VsZWN0b3IoY29ucwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmluQ29tcGF0
TW9kZSgpOworICAgIGJvb2wgc3RyaWN0UGFyc2luZyA9ICFkb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKTsKICAgICBDU1NQYXJzZXIgcChzdHJpY3RQYXJzaW5nKTsKIAogICAgIENTU1NlbGVjdG9y
TGlzdCBzZWxlY3Rvckxpc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAJKHJldmlzaW9uIDY2MTEz
KQorKysgV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5
LDcgKzMwOSw3IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpzZXRDbGFzcyhjb25zdCBTdHJpbmcKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2xhc3NOYW1lcy5zZXQoY2xhc3NTdHIsIGVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOyAKKyAgICBtX2NsYXNzTmFtZXMu
c2V0KGNsYXNzU3RyLCBlbGVtZW50KCktPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsgCiB9
CiAKIGludCBOYW1lZE5vZGVNYXA6OmRlY2xDb3VudCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24g
NjYxMTMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0MSw3
ICsxNjQxLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKAogICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBib29s
IHN0cmljdFBhcnNpbmcgPSAhZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCk7CisgICAgYm9vbCBz
dHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpOwogICAgIENTU1BhcnNl
ciBwKHN0cmljdFBhcnNpbmcpOwogCiAgICAgQ1NTU2VsZWN0b3JMaXN0IHF1ZXJ5U2VsZWN0b3JM
aXN0OwpAQCAtMTY4OCw3ICsxNjg4LDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6cXVl
cnlTZWxlY3RvcgogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICBib29sIHN0cmljdFBhcnNpbmcgPSAhZG9jdW1lbnQoKS0+aW5Db21wYXRNb2Rl
KCk7CisgICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgp
OwogICAgIENTU1BhcnNlciBwKHN0cmljdFBhcnNpbmcpOwogCiAgICAgQ1NTU2VsZWN0b3JMaXN0
IHF1ZXJ5U2VsZWN0b3JMaXN0OwpJbmRleDogV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2
MTEzKQorKysgV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25MYWJlbAog
ICAgIFN0cmluZyB0ZXh0OwogCiAgICAgLy8gV2luSUUgZG9lcyBub3QgdXNlIHRoZSBsYWJlbCBh
dHRyaWJ1dGUsIHNvIGFzIGEgcXVpcmssIHdlIGlnbm9yZSBpdC4KLSAgICBpZiAoIWRvY3VtZW50
LT5pbkNvbXBhdE1vZGUoKSkKKyAgICBpZiAoIWRvY3VtZW50LT5pblF1aXJrc01vZGUoKSkKICAg
ICAgICAgdGV4dCA9IGRhdGEubGFiZWwoKTsKICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCiAgICAg
ICAgIHRleHQgPSBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KGVsZW1lbnQpOwpJbmRleDogV2ViQ29y
ZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2Vs
ZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9kb20vU2VsZWN0
b3JOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgUGFzc1JlZlB0
cjxTdGF0aWNOb2RlTGlzdD4gY3JlYXRlU2VsZWN0bwogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiBub2RlczsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByb290Tm9kZS0+ZG9jdW1lbnQoKTsK
ICAgICBDU1NTZWxlY3Rvciogb25seVNlbGVjdG9yID0gcXVlcnlTZWxlY3Rvckxpc3QuaGFzT25l
U2VsZWN0b3IoKSA/IHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCkgOiAwOwotICAgIGJvb2wgc3Ry
aWN0UGFyc2luZyA9ICFkb2N1bWVudC0+aW5Db21wYXRNb2RlKCk7CisgICAgYm9vbCBzdHJpY3RQ
YXJzaW5nID0gIWRvY3VtZW50LT5pblF1aXJrc01vZGUoKTsKIAogICAgIENTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBhcnNp
bmcpOwogCkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2MTE1KQorKysgV2ViQ29y
ZS9kb20vU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBA
IHZvaWQgU3R5bGVFbGVtZW50OjpjcmVhdGVTaGVldChFbGVtZW50KiAKICAgICAgICAgICAgIGRv
Y3VtZW50LT5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7
CiAgICAgICAgICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKGUsIFN0cmluZygp
LCBLVVJMKCksIGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCkpOwotICAgICAgICAgICAgbV9zaGVl
dC0+cGFyc2VTdHJpbmdBdExpbmUodGV4dCwgIWRvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSwgc3Rh
cnRMaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nQXRMaW5lKHRl
eHQsICFkb2N1bWVudC0+aW5RdWlya3NNb2RlKCksIHN0YXJ0TGluZU51bWJlcik7CiAgICAgICAg
ICAgICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYUxpc3QuZ2V0KCkpOwogICAgICAgICAgICAgbV9z
aGVldC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7CiAgICAgICAgICAgICBtX2xvYWRpbmcgPSBmYWxz
ZTsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjExMykKKysrIFdlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAg
dm9pZCBTdHlsZWRFbGVtZW50OjpjcmVhdGVJbmxpbmVTdHlsZURlYwogICAgIG1faW5saW5lU3R5
bGVEZWNsID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIG1faW5s
aW5lU3R5bGVEZWNsLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwogICAg
IG1faW5saW5lU3R5bGVEZWNsLT5zZXROb2RlKHRoaXMpOwotICAgIG1faW5saW5lU3R5bGVEZWNs
LT5zZXRTdHJpY3RQYXJzaW5nKGlzSFRNTEVsZW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+aW5Db21w
YXRNb2RlKCkpOworICAgIG1faW5saW5lU3R5bGVEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKGlzSFRN
TEVsZW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwogfQogCiB2b2lkIFN0
eWxlZEVsZW1lbnQ6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQpAQCAtMjM0LDcgKzIzNCw3IEBA
IHZvaWQgU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUKICAgICAgICAgaWYgKGF0
dHJpYnV0ZU1hcCgpKSB7CiAgICAgICAgICAgICBpZiAoYXR0ci0+aXNOdWxsKCkpCiAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlTWFwKCktPnNldElkRm9yU3R5bGVSZXNvbHV0aW9uKG51bGxBdG9t
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKQorICAg
ICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlTWFwKCktPnNldElkRm9yU3R5bGVSZXNvbHV0aW9uKGF0dHItPnZhbHVl
KCkubG93ZXIoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYXR0cmlidXRl
TWFwKCktPnNldElkRm9yU3R5bGVSZXNvbHV0aW9uKGF0dHItPnZhbHVlKCkpOwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NjEx
MykKKysrIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMTUsNyArMTExNSw3IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OnNob3VsZFJlbW8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFJlbW92
ZSB0aGUgYnIgaWYgaXQgaXMgY29sbGFwc2VkIGF3YXkgYW5kIHNvIGlzIHVubmVjZXNzYXJ5Lgot
ICAgIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkgJiYgaXNFbmRPZkJsb2NrKHZpc2li
bGVQb3MpICYmICFpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykpCisgICAgaWYgKCFkb2N1
bWVudCgpLT5pbk5vUXVpcmtzTW9kZSgpICYmIGlzRW5kT2ZCbG9jayh2aXNpYmxlUG9zKSAmJiAh
aXNTdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgCiAgICAgLy8gQSBiciB0aGF0IHdhcyBvcmlnaW5hbGx5IGhvbGRpbmcgYSBsaW5lIG9w
ZW4gc2hvdWxkIGJlIGRpc3BsYWNlZCBieSBpbnNlcnRlZCBjb250ZW50IG9yIHR1cm5lZCBpbnRv
IGEgbGluZSBicmVhay4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2
NjExMykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpjcmVhdGVMaW5rRGVjbCgp
CiAgICAgbV9saW5rRGVjbCA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsK
ICAgICBtX2xpbmtEZWNsLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwog
ICAgIG1fbGlua0RlY2wtPnNldE5vZGUodGhpcyk7Ci0gICAgbV9saW5rRGVjbC0+c2V0U3RyaWN0
UGFyc2luZyghZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOworICAgIG1fbGlua0RlY2wtPnNl
dFN0cmljdFBhcnNpbmcoIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKIH0KIAogYm9vbCBI
VE1MQm9keUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUs
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgIGlmIChTZXR0aW5n
cyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpKQogICAgICAgICAgICAgICAgIHVz
ZXNEYXNoYmFyZENvbXBhdGliaWxpdHlNb2RlID0gc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNr
d2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CiAjZW5kaWYKLSAgICAgICAgICAgIG1fY29udGV4dCA9
IGFkb3B0UHRyKG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQodGhpcywgZG9jdW1lbnQoKS0+
aW5Db21wYXRNb2RlKCksIHVzZXNEYXNoYmFyZENvbXBhdGliaWxpdHlNb2RlKSk7CisgICAgICAg
ICAgICBtX2NvbnRleHQgPSBhZG9wdFB0cihuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKHRo
aXMsIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCB1c2VzRGFzaGJhcmRDb21wYXRpYmlsaXR5
TW9kZSkpOwogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICAgICAgICAgICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAg
ICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGlu
ZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENv
bnN0cnVjdGlvblNpdGUuY3BwCShyZXZpc2lvbiA2NjExMykKKysrIFdlYkNvcmUvaHRtbC9IVE1M
Q29uc3RydWN0aW9uU2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMywxMCArMjAzLDExIEBA
IHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUKIHsKICAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RE9DVFlQRSk7CiAgICAgYXR0YWNoKG1fZG9jdW1l
bnQsIERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLm5hbWUoKSwgU3RyaW5n
OjphZG9wdCh0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkpLCBTdHJpbmc6OmFkb3B0KHRva2VuLnN5
c3RlbUlkZW50aWZpZXIoKSkpKTsKLSAgICAvLyBGSVhNRTogTW92ZSBxdWlya3MgbW9kZSBkZXRl
Y3Rpb24gZnJvbSBEb2N1bWVudFR5cGUgZWxlbWVudCB0byBoZXJlLgotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgCiAgICAgaWYgKHRva2VuLmZvcmNlUXVpcmtzKCkpCi0gICAgICAgIG1fZG9j
dW1lbnQtPnNldFBhcnNlTW9kZShEb2N1bWVudDo6Q29tcGF0KTsKKyAgICAgICAgbV9kb2N1bWVu
dC0+c2V0Q29tcGF0aWJpbGl0eU1vZGUoRG9jdW1lbnQ6OlF1aXJrc01vZGUpOworICAgIGVsc2UK
KyAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZSgpOwog
fQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkocmV2aXNpb24gNjYxMTUpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNiBAQCBIVE1MRG9jdW1lbnQ6OkhUTUxEb2N1bWVudChGcmFtZSogZnJhbWUsCiAgICAgOiBE
b2N1bWVudChmcmFtZSwgdXJsLCBmYWxzZSwgdHJ1ZSkKIHsKICAgICBjbGVhclhNTFZlcnNpb24o
KTsKLSAgICBzZXRQYXJzZU1vZGUoQ29tcGF0KTsKIH0KIAogSFRNTERvY3VtZW50Ojp+SFRNTERv
Y3VtZW50KCkKQEAgLTEzOSw3ICsxMzgsNyBAQCB2b2lkIEhUTUxEb2N1bWVudDo6c2V0RGVzaWdu
TW9kZShjb25zdCBTCiAKIFN0cmluZyBIVE1MRG9jdW1lbnQ6OmNvbXBhdE1vZGUoKSBjb25zdAog
ewotICAgIHJldHVybiBpbkNvbXBhdE1vZGUoKSA/ICJCYWNrQ29tcGF0IiA6ICJDU1MxQ29tcGF0
IjsKKyAgICByZXR1cm4gaW5RdWlya3NNb2RlKCkgPyAiQmFja0NvbXBhdCIgOiAiQ1NTMUNvbXBh
dCI7CiB9CiAKIEVsZW1lbnQqIEhUTUxEb2N1bWVudDo6YWN0aXZlRWxlbWVudCgpCkBAIC0zNDMs
NjUgKzM0Miw5NiBAQCB2b2lkIEhUTUxEb2N1bWVudDo6cmVtb3ZlRXh0cmFOYW1lZEl0ZW0oCiAg
ICAgcmVtb3ZlSXRlbUZyb21NYXAobV9leHRyYU5hbWVkSXRlbUNvdW50cywgbmFtZSk7CiB9CiAK
LXZvaWQgSFRNTERvY3VtZW50OjpkZXRlcm1pbmVQYXJzZU1vZGUoKQordm9pZCBIVE1MRG9jdW1l
bnQ6OnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUoKQogewotICAgIC8vIEZJWE1FOiBJ
dCdzIHRlcnJpYmxlIHRoYXQgdGhpcyBjb2RlIHJ1bnMgc2VwYXJhdGVseSBhbmQgaXNuJ3QganVz
dCBidWlsdCBpbiB0byB0aGUKLSAgICAvLyBIVE1MIHRva2VuaXplci9wYXJzZXIuCi0KLSAgICAv
LyBUaGlzIGNvZGUgbW9yZSBvciBsZXNzIG1pbWljcyBNb3ppbGxhJ3MgaW1wbGVtZW50YXRpb24g
KHNwZWNpZmljYWxseSB0aGUKLSAgICAvLyBkb2N0eXBlIHBhcnNpbmcgaW1wbGVtZW50ZWQgYnkg
RGF2aWQgQmFyb24gaW4gTW96aWxsYSdzIG5zUGFyc2VyLmNwcCkuCi0gICAgLy8KLSAgICAvLyBU
aGVyZSBhcmUgdGhyZWUgcG9zc2libGUgcGFyc2UgbW9kZXM6Ci0gICAgLy8gQ09NUEFUIC0gcXVp
cmtzIG1vZGUgZW11bGF0ZXMgV2luSUUgYW5kIE5TNC4gIENTUyBwYXJzaW5nIGlzIGFsc28gcmVs
YXhlZCBpbiB0aGlzIG1vZGUsIGUuZy4sIHVuaXQgdHlwZXMgY2FuCisgICAgLy8gVGhlcmUgYXJl
IHRocmVlIHBvc3NpYmxlIGNvbXBhdGliaWxpdHkgbW9kZXM6CisgICAgLy8gUXVpcmtzIC0gcXVp
cmtzIG1vZGUgZW11bGF0ZXMgV2luSUUgYW5kIE5TNC4gIENTUyBwYXJzaW5nIGlzIGFsc28gcmVs
YXhlZCBpbiB0aGlzIG1vZGUsIGUuZy4sIHVuaXQgdHlwZXMgY2FuCiAgICAgLy8gYmUgb21pdHRl
ZCBmcm9tIG51bWJlcnMuCi0gICAgLy8gQUxNT1NUIFNUUklDVCAtIFRoaXMgbW9kZSBpcyBpZGVu
dGljYWwgdG8gc3RyaWN0IG1vZGUgZXhjZXB0IGZvciBpdHMgdHJlYXRtZW50IG9mIGxpbmUtaGVp
Z2h0IGluIHRoZSBpbmxpbmUgYm94IG1vZGVsLiAgRm9yCi0gICAgLy8gbm93ICh1bnRpbCB0aGUg
aW5saW5lIGJveCBtb2RlbCBpcyByZS13cml0dGVuKSwgdGhpcyBtb2RlIGlzIGlkZW50aWNhbCB0
byBTVEFOREFSRFMgbW9kZS4KLSAgICAvLyBTVFJJQ1QgLSBubyBxdWlya3MgYXBwbHkuICBXZWIg
cGFnZXMgd2lsbCBvYmV5IHRoZSBzcGVjaWZpY2F0aW9ucyB0byB0aGUgbGV0dGVyLgotICAgIGJv
b2wgd2FzSW5Db21wYXRNb2RlID0gaW5Db21wYXRNb2RlKCk7CisgICAgLy8gTGltaXRlZCBRdWly
a3MgLSBUaGlzIG1vZGUgaXMgaWRlbnRpY2FsIHRvIG5vLXF1aXJrcyBtb2RlIGV4Y2VwdCBmb3Ig
aXRzIHRyZWF0bWVudCBvZiBsaW5lLWhlaWdodCBpbiB0aGUgaW5saW5lIGJveCBtb2RlbC4gIAor
ICAgIC8vIE5vIFF1aXJrcyAtIG5vIHF1aXJrcyBhcHBseS4gIFdlYiBwYWdlcyB3aWxsIG9iZXkg
dGhlIHNwZWNpZmljYXRpb25zIHRvIHRoZSBsZXR0ZXIuCiAgICAgRG9jdW1lbnRUeXBlKiBkb2NU
eXBlID0gZG9jdHlwZSgpOwotICAgIGlmICghZG9jVHlwZSB8fCAhZXF1YWxJZ25vcmluZ0Nhc2Uo
ZG9jVHlwZS0+bmFtZSgpLCAiaHRtbCIpKQotICAgICAgICAvLyBObyBkb2N0eXBlIGZvdW5kIGF0
IGFsbCBvciB0aGUgZG9jdHlwZSBpcyBub3QgSFRNTC4gIERlZmF1bHQgdG8gcXVpcmtzIG1vZGUg
YW5kIEh0bWw0LgotICAgICAgICBzZXRQYXJzZU1vZGUoQ29tcGF0KTsKLSAgICBlbHNlIGlmICgh
ZG9jdHlwZSgpLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShkb2NU
eXBlLT5zeXN0ZW1JZCgpLCAiaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRt
bDEtdHJhbnNpdGlvbmFsLmR0ZCIpKQotICAgICAgICAvLyBBc3N1bWUgcXVpcmtzIG1vZGUgZm9y
IHRoaXMgcGFydGljdWxhciBzeXN0ZW0gSUQuICBJbiB0aGUgSFRNTDUgc3BlYywgdGhpcyBpcyB0
aGUgb25seQotICAgICAgICAvLyBzeXN0ZW0gaWRlbnRpZmllciB0aGF0IGlzIGV4YW1pbmVkLgot
ICAgICAgICBzZXRQYXJzZU1vZGUoQ29tcGF0KTsKLSAgICBlbHNlIGlmIChkb2NUeXBlLT5wdWJs
aWNJZCgpLmlzRW1wdHkoKSkKLSAgICAgICAgLy8gQSBkb2N0eXBlIHdpdGhvdXQgYSBwdWJsaWMg
SUQgbWVhbnMgdXNlIHN0cmljdCBtb2RlLgotICAgICAgICBzZXRQYXJzZU1vZGUoU3RyaWN0KTsK
LSAgICBlbHNlIHsKLSAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBhIGxpc3Qgb2YgcHVibGlj
IElEcyB0byBzZWUgd2hhdCB3ZQotICAgICAgICAvLyBzaG91bGQgZG8uCi0gICAgICAgIFN0cmlu
ZyBsb3dlclB1YklEID0gZG9jVHlwZS0+cHVibGljSWQoKS5sb3dlcigpOwotICAgICAgICBDU3Ry
aW5nIHB1YklEU3RyID0gbG93ZXJQdWJJRC5sYXRpbjEoKTsKLSAgICAgICAKLSAgICAgICAgLy8g
TG9vayB1cCB0aGUgZW50cnkgaW4gb3VyIGdwZXJmLWdlbmVyYXRlZCB0YWJsZS4KLSAgICAgICAg
Y29uc3QgUHViSURJbmZvKiBkb2N0eXBlRW50cnkgPSBmaW5kRG9jdHlwZUVudHJ5KHB1YklEU3Ry
LmRhdGEoKSwgcHViSURTdHIubGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWRvY3R5cGVFbnRyeSkK
LSAgICAgICAgICAgIC8vIFRoZSBET0NUWVBFIGlzIG5vdCBpbiB0aGUgbGlzdC4gIEFzc3VtZSBz
dHJpY3QgbW9kZS4KLSAgICAgICAgICAgIHNldFBhcnNlTW9kZShTdHJpY3QpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZG9jVHlwZS0+c3lzdGVtSWQoKS5pc0VtcHR5KCkg
PwotICAgICAgICAgICAgICAgICAgICBkb2N0eXBlRW50cnktPm1vZGVfaWZfbm9fc3lzaWQgOgot
ICAgICAgICAgICAgICAgICAgICBkb2N0eXBlRW50cnktPm1vZGVfaWZfc3lzaWQpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIFB1YklESW5mbzo6ZVF1aXJrczM6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBQdWJJREluZm86OmVRdWlya3M6Ci0gICAgICAgICAgICAgICAgICAgIHNldFBhcnNlTW9kZShD
b21wYXQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IFB1YklESW5mbzo6ZUFsbW9zdFN0YW5kYXJkczoKLSAgICAgICAgICAgICAgICAgICAgc2V0UGFy
c2VNb2RlKEFsbW9zdFN0cmljdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKCFkb2NUeXBlKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBDaGVjayBmb3IgUXVpcmtzIE1vZGUuCisgICAgaWYgKGRvY1R5cGUtPm5h
bWUoKSAhPSAiaHRtbCIKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRo
KCIrLy9TaWxtYXJpbC8vZHRkIGh0bWwgUHJvIHYwcjExIDE5OTcwMTAxLy8iLCBmYWxzZSkKKyAg
ICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9BZHZhU29mdCBMdGQv
L0RURCBIVE1MIDMuMCBhc1dlZGl0ICsgZXh0ZW5zaW9ucy8vIiwgZmFsc2UpCisgICAgICAgIHx8
IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vQVMvL0RURCBIVE1MIDMuMCBhc1dl
ZGl0ICsgZXh0ZW5zaW9ucy8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lk
KCkuc3RhcnRzV2l0aCgiLS8vSUVURi8vRFREIEhUTUwgMi4wIExldmVsIDEvLyIsIGZhbHNlKQor
ICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL0lFVEYvL0RURCBI
VE1MIDIuMCBMZXZlbCAyLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQo
KS5zdGFydHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTCAyLjAgU3RyaWN0IExldmVsIDEvLyIsIGZh
bHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL0lFVEYv
L0RURCBIVE1MIDIuMCBTdHJpY3QgTGV2ZWwgMi8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5
cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vSUVURi8vRFREIEhUTUwgMi4wIFN0cmljdC8v
IiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8v
SUVURi8vRFREIEhUTUwgMi4wLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGlj
SWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTCAyLjFFLy8iLCBmYWxzZSkKKyAgICAg
ICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTCAz
LjAvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgo
Ii0vL0lFVEYvL0RURCBIVE1MIDMuMiBGaW5hbC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5
cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vSUVURi8vRFREIEhUTUwgMy4yLy8iLCBmYWxz
ZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9E
VEQgSFRNTCAzLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFy
dHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTCBMZXZlbCAwLy8iLCBmYWxzZSkKKyAgICAgICAgfHwg
ZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTCBMZXZlbCAx
Ly8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCIt
Ly9JRVRGLy9EVEQgSFRNTCBMZXZlbCAyLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+
cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTCBMZXZlbCAzLy8iLCBmYWxz
ZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9E
VEQgSFRNTCBTdHJpY3QgTGV2ZWwgMC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1
YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vSUVURi8vRFREIEhUTUwgU3RyaWN0IExldmVsIDEvLyIs
IGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL0lF
VEYvL0RURCBIVE1MIFN0cmljdCBMZXZlbCAyLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlw
ZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTCBTdHJpY3QgTGV2ZWwg
My8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgi
LS8vSUVURi8vRFREIEhUTUwgU3RyaWN0Ly8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+
cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9JRVRGLy9EVEQgSFRNTC8vIiwgZmFsc2UpCisgICAg
ICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vTWV0cml1cy8vRFREIE1l
dHJpdXMgUHJlc2VudGF0aW9uYWwvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJs
aWNJZCgpLnN0YXJ0c1dpdGgoIi0vL01pY3Jvc29mdC8vRFREIEludGVybmV0IEV4cGxvcmVyIDIu
MCBIVE1MIFN0cmljdC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCku
c3RhcnRzV2l0aCgiLS8vTWljcm9zb2Z0Ly9EVEQgSW50ZXJuZXQgRXhwbG9yZXIgMi4wIEhUTUwv
LyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0v
L01pY3Jvc29mdC8vRFREIEludGVybmV0IEV4cGxvcmVyIDIuMCBUYWJsZXMvLyIsIGZhbHNlKQor
ICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL01pY3Jvc29mdC8v
RFREIEludGVybmV0IEV4cGxvcmVyIDMuMCBIVE1MIFN0cmljdC8vIiwgZmFsc2UpCisgICAgICAg
IHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vTWljcm9zb2Z0Ly9EVEQgSW50
ZXJuZXQgRXhwbG9yZXIgMy4wIEhUTUwvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5w
dWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL01pY3Jvc29mdC8vRFREIEludGVybmV0IEV4cGxvcmVy
IDMuMCBUYWJsZXMvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0
YXJ0c1dpdGgoIi0vL05ldHNjYXBlIENvbW0uIENvcnAuLy9EVEQgSFRNTC8vIiwgZmFsc2UpCisg
ICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vTmV0c2NhcGUgQ29t
bS4gQ29ycC4vL0RURCBTdHJpY3QgSFRNTC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUt
PnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vTydSZWlsbHkgYW5kIEFzc29jaWF0ZXMvL0RURCBI
VE1MIDIuMC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRz
V2l0aCgiLS8vTydSZWlsbHkgYW5kIEFzc29jaWF0ZXMvL0RURCBIVE1MIEV4dGVuZGVkIDEuMC8v
IiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8v
TydSZWlsbHkgYW5kIEFzc29jaWF0ZXMvL0RURCBIVE1MIEV4dGVuZGVkIFJlbGF4ZWQgMS4wLy8i
LCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9T
b2Z0UXVhZCBTb2Z0d2FyZS8vRFREIEhvVE1ldGFMIFBSTyA2LjA6OjE5OTkwNjAxOjpleHRlbnNp
b25zIHRvIEhUTUwgNC4wLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQo
KS5zdGFydHNXaXRoKCItLy9Tb2Z0UXVhZC8vRFREIEhvVE1ldGFMIFBSTyA0LjA6OjE5OTcxMDEw
OjpleHRlbnNpb25zIHRvIEhUTUwgNC4wLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+
cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9TcHlnbGFzcy8vRFREIEhUTUwgMi4wIEV4dGVuZGVk
Ly8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCIt
Ly9TUS8vRFREIEhUTUwgMi4wIEhvVE1ldGFMICsgZXh0ZW5zaW9ucy8vIiwgZmFsc2UpCisgICAg
ICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vU3VuIE1pY3Jvc3lzdGVt
cyBDb3JwLi8vRFREIEhvdEphdmEgSFRNTC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUt
PnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vU3VuIE1pY3Jvc3lzdGVtcyBDb3JwLi8vRFREIEhv
dEphdmEgU3RyaWN0IEhUTUwvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJ
ZCgpLnN0YXJ0c1dpdGgoIi0vL1czQy8vRFREIEhUTUwgMyAxOTk1LTAzLTI0Ly8iLCBmYWxzZSkK
KyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9XM0MvL0RURCBI
VE1MIDMuMiBEcmFmdC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCku
c3RhcnRzV2l0aCgiLS8vVzNDLy9EVEQgSFRNTCAzLjIgRmluYWwvLyIsIGZhbHNlKQorICAgICAg
ICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL1czQy8vRFREIEhUTUwgMy4y
Ly8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCIt
Ly9XM0MvL0RURCBIVE1MIDMuMlMgRHJhZnQvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBl
LT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL1czQy8vRFREIEhUTUwgNC4wIEZyYW1lc2V0Ly8i
LCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9X
M0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NU
eXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL1czQy8vRFREIEhUTUwgRXhwZXJpbWVudGFs
IDE5OTYwNzEyLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFy
dHNXaXRoKCItLy9XM0MvL0RURCBIVE1MIEV4cGVyaW1lbnRhbCA5NzA0MjEvLyIsIGZhbHNlKQor
ICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL1czQy8vRFREIFcz
IEhUTUwvLyIsIGZhbHNlKQorICAgICAgICB8fCBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dp
dGgoIi0vL1czTy8vRFREIFczIEhUTUwgMy4wLy8iLCBmYWxzZSkKKyAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZG9jVHlwZS0+cHVibGljSWQoKSwgIi0vL1czTy8vRFREIFczIEhUTUwgU3Ry
aWN0IDMuMC8vRU4vLyIpCisgICAgICAgIHx8IGRvY1R5cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0
aCgiLS8vV2ViVGVjaHMvL0RURCBNb3ppbGxhIEhUTUwgMi4wLy8iLCBmYWxzZSkKKyAgICAgICAg
fHwgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9XZWJUZWNocy8vRFREIE1vemls
bGEgSFRNTC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGRvY1R5cGUt
PnB1YmxpY0lkKCksICItL1czQy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsL0VOIikKKyAgICAg
ICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZG9jVHlwZS0+cHVibGljSWQoKSwgIkhUTUwiKQorICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShkb2NUeXBlLT5zeXN0ZW1JZCgpLCAiaHR0cDovL3d3
dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCIpCisgICAg
ICAgIHx8IChkb2NUeXBlLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSAmJiBkb2NUeXBlLT5wdWJsaWNJ
ZCgpLnN0YXJ0c1dpdGgoIi0vL1czQy8vRFREIEhUTUwgNC4wMSBGcmFtZXNldC8vIiwgZmFsc2Up
KQorICAgICAgICB8fCAoZG9jVHlwZS0+c3lzdGVtSWQoKS5pc0VtcHR5KCkgJiYgZG9jVHlwZS0+
cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly8iLCBmYWxzZSkpKSB7CisgICAgICAgIHNldENvbXBhdGliaWxpdHlNb2RlKFF1aXJrc01vZGUp
OworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGlmIChpbkNvbXBhdE1vZGUoKSAh
PSB3YXNJbkNvbXBhdE1vZGUpIHsKLSAgICAgICAgY2xlYXJQYWdlVXNlclNoZWV0KCk7Ci0gICAg
ICAgIGNsZWFyUGFnZUdyb3VwVXNlclNoZWV0cygpOwotICAgICAgICBzdHlsZVNlbGVjdG9yQ2hh
bmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKKworICAgIC8vIENoZWNrIGZvciBMaW1pdGVk
IFF1aXJrcyBNb2RlLgorICAgIGlmIChkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0v
L1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vIiwgZmFsc2UpCisgICAgICAgIHx8IGRvY1R5
cGUtPnB1YmxpY0lkKCkuc3RhcnRzV2l0aCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRp
b25hbC8vIiwgZmFsc2UpCisgICAgICAgIHx8ICghZG9jVHlwZS0+c3lzdGVtSWQoKS5pc0VtcHR5
KCkgJiYgZG9jVHlwZS0+cHVibGljSWQoKS5zdGFydHNXaXRoKCItLy9XM0MvL0RURCBIVE1MIDQu
MDEgRnJhbWVzZXQvLyIsIGZhbHNlKSkKKyAgICAgICAgfHwgKCFkb2NUeXBlLT5zeXN0ZW1JZCgp
LmlzRW1wdHkoKSAmJiBkb2NUeXBlLT5wdWJsaWNJZCgpLnN0YXJ0c1dpdGgoIi0vL1czQy8vRFRE
IEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvLyIsIGZhbHNlKSkpIHsKKyAgICAgICAgc2V0Q29tcGF0
aWJpbGl0eU1vZGUoTGltaXRlZFF1aXJrc01vZGUpOworICAgICAgICByZXR1cm47CiAgICAgfQor
CisgICAgLy8gT3RoZXJ3aXNlIHdlIGFyZSBObyBRdWlya3MgTW9kZS4KKyAgICBzZXRDb21wYXRp
YmlsaXR5TW9kZShOb1F1aXJrc01vZGUpOworICAgIHJldHVybjsKIH0KIAogdm9pZCBIVE1MRG9j
dW1lbnQ6OmNsZWFyKCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHJldmlzaW9uIDY2MTEzKQorKysg
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlc2lnbk1vZGUoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBTdHJpbmcgY29tcGF0TW9kZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wYXRp
YmlsaXR5TW9kZUZyb21Eb2N0eXBlKCk7CiAKICAgICBFbGVtZW50KiBhY3RpdmVFbGVtZW50KCk7
CiAgICAgYm9vbCBoYXNGb2N1cygpOwpAQCAtODcsNyArODgsNiBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCBib29sIGlzRnJhbWVTZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RG9jdW1lbnRQYXJzZXI+IGNyZWF0ZVBhcnNlcigpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1p
bmVQYXJzZU1vZGUoKTsKIAogICAgIHZvaWQgYWRkSXRlbVRvTWFwKEhhc2hDb3VudGVkU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIHZvaWQgcmVtb3Zl
SXRlbUZyb21NYXAoSGFzaENvdW50ZWRTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiwgY29uc3QgQXRv
bWljU3RyaW5nJik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gNjYx
MTUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0
KGMKIHsKICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJh
c2VVUkwsIGNoYXJzZXQpOwogCi0gICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCkt
PmluQ29tcGF0TW9kZSgpOworICAgIGJvb2wgc3RyaWN0UGFyc2luZyA9ICFkb2N1bWVudCgpLT5p
blF1aXJrc01vZGUoKTsKICAgICBib29sIGVuZm9yY2VNSU1FVHlwZSA9IHN0cmljdFBhcnNpbmc7
CiAgICAgYm9vbCBjcm9zc09yaWdpbkNTUyA9IGZhbHNlOwogICAgIGJvb2wgdmFsaWRNSU1FVHlw
ZSA9IGZhbHNlOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KGMKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgZW5mb3Jj
ZSB0aGUgTUlNRSB0eXBlIG9mIHRoZSBDU1MgcmVzb3VyY2UgaW4gc3RyaWN0IG1vZGUuCiAgICAg
Ly8gUnVubmluZyBpbiBpV2ViIDIgaXMgb25lIGV4YW1wbGUgb2Ygd2hlcmUgd2UgZG9uJ3Qgd2Fu
dCB0byAtIDxyZGFyOi8vcHJvYmxlbS82MDk5NzQ4PgotICAgIGlmIChlbmZvcmNlTUlNRVR5cGUg
JiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmICFkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCkt
PmVuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZSgpKQorICAgIGlmIChlbmZvcmNlTUlNRVR5
cGUgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmICFkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdz
KCktPmVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKCkpCiAgICAgICAgIGVuZm9yY2VN
SU1FVHlwZSA9IGZhbHNlOwogCiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVp
bGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAJ
KHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5Nyw3ICszOTcsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVl
QnVpbGRlcihIVE1MVG9rCiAgICAgaWYgKGNvbnRleHRFbGVtZW50KSB7CiAgICAgICAgIC8vIFN0
ZXBzIDQuMi00LjYgb2YgdGhlIEhUTUw1IEZyYWdtZW50IENhc2UgcGFyc2luZyBhbGdvcml0aG06
CiAgICAgICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvbXVsdGlwYWdlL3RoZS1lbmQuaHRtbCNmcmFnbWVudC1jYXNlCi0gICAgICAgIG1fZG9j
dW1lbnQtPnNldFBhcnNlTW9kZShjb250ZXh0RWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFyc2VNb2Rl
KCkpOworICAgICAgICBtX2RvY3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZShjb250ZXh0RWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y29tcGF0aWJpbGl0eU1vZGUoKSk7CiAgICAgICAgIHByb2Nlc3NG
YWtlU3RhcnRUYWcoaHRtbFRhZyk7CiAgICAgICAgIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJp
YXRlbHkoKTsKICAgICAgICAgbV90cmVlLnNldEZvcm0oY2xvc2VzdEZvcm1BbmNlc3Rvcihjb250
ZXh0RWxlbWVudCkpOwpAQCAtNDMxLDYgKzQzMSw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21l
bnRQYXJzaW5nQ29udGV4dDoKICAgICAsIG1fY29udGV4dEVsZW1lbnQoY29udGV4dEVsZW1lbnQp
CiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKKyAg
ICBtX2R1bW15RG9jdW1lbnRGb3JGcmFnbWVudFBhcnNpbmctPnNldENvbXBhdGliaWxpdHlNb2Rl
KGZyYWdtZW50LT5kb2N1bWVudCgpLT5jb21wYXRpYmlsaXR5TW9kZSgpKTsKIH0KIAogRG9jdW1l
bnQqIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6ZG9jdW1lbnQoKSBj
b25zdApAQCAtNTM0LDYgKzUzNSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9j
dHlwZVRva2UKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RE9DVFlQRSk7
CiAgICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbml0aWFsTW9kZSkgewogICAgICAgICBtX3Ry
ZWUuaW5zZXJ0RG9jdHlwZSh0b2tlbik7CisgICAgICAgIHNldEluc2VydGlvbk1vZGUoQmVmb3Jl
SFRNTE1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2luc2VydGlvbk1v
ZGUgPT0gSW5UYWJsZVRleHRNb2RlKSB7CkBAIC05MjMsNyArOTI1LDcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvcgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKLSAgICAgICAgaWYgKG1fZG9jdW1lbnQt
PnBhcnNlTW9kZSgpICE9IERvY3VtZW50OjpDb21wYXQgJiYgbV90cmVlLm9wZW5FbGVtZW50cygp
LT5pbkJ1dHRvblNjb3BlKHBUYWcpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmluUXVpcmtz
TW9kZSgpICYmIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5CdXR0b25TY29wZShwVGFnKSkKICAg
ICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKHBUYWcpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKQEAgLTI2
OTIsNiArMjY5NCw4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEEK
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5pdGlhbCgpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBpZiAoIW1fZnJhZ21lbnRDb250ZXh0LmZyYWdtZW50KCkpCisgICAg
ICAgIG1fZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50OjpRdWlya3NNb2Rl
KTsKICAgICAvLyBGSVhNRTogcGFyc2UgZXJyb3IKICAgICBzZXRJbnNlcnRpb25Nb2RlKEJlZm9y
ZUhUTUxNb2RlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5j
cHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIEhUTUxWaWV3U291cmNlRG9j
dW1lbnQ6OkhUTUxWaWV3U291cmNlRG8KICAgICAsIG1fdHlwZShtaW1lVHlwZSkKIHsKICAgICBz
ZXRVc2VzQmVmb3JlQWZ0ZXJSdWxlcyh0cnVlKTsKKyAgICBzZXRDb21wYXRpYmlsaXR5TW9kZShR
dWlya3NNb2RlKTsKKyAgICBsb2NrQ29tcGF0aWJpbGl0eU1vZGUoKTsKIH0KIAogUGFzc1JlZlB0
cjxEb2N1bWVudFBhcnNlcj4gSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKCkK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3
Miw3IEBAIHZvaWQgRG9jdW1lbnRXcml0ZXI6OnJlcGxhY2VEb2N1bWVudChjb24KICAgICBpZiAo
IXNvdXJjZS5pc051bGwoKSkgewogICAgICAgICBpZiAoIW1fcmVjZWl2ZWREYXRhKSB7CiAgICAg
ICAgICAgICBtX3JlY2VpdmVkRGF0YSA9IHRydWU7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5zZXRQYXJzZU1vZGUoRG9jdW1lbnQ6OlN0cmljdCk7CisgICAgICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5zZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1bWVudDo6Tm9RdWlya3NN
b2RlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjYWxsIERv
Y3VtZW50UGFyc2VyOjphcHBlbmRCeXRlcyBpbnN0ZWFkIG9mIGFwcGVuZApAQCAtMTc5LDcgKzE3
OSw3IEBAIFRleHRSZXNvdXJjZURlY29kZXIqIERvY3VtZW50V3JpdGVyOjpjcmUKICAgICByZXR1
cm4gbV9kZWNvZGVyLmdldCgpOwogfQogCi12b2lkIERvY3VtZW50V3JpdGVyOjpyZXBvcnREYXRh
UmVjaWV2ZWQoKQordm9pZCBEb2N1bWVudFdyaXRlcjo6cmVwb3J0RGF0YVJlY2VpdmVkKCkKIHsK
ICAgICBBU1NFUlQobV9kZWNvZGVyKTsKICAgICBpZiAoIW1fcmVjZWl2ZWREYXRhKSB7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50V3JpdGVyLmgJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRXcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBFeHBvc2VkIGZvciBEb3VjbWVudFBhcnNlcjo6YXBwZW5kQnl0ZXMKICAg
ICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBjcmVhdGVEZWNvZGVySWZOZWVkZWQoKTsKLSAgICB2b2lk
IHJlcG9ydERhdGFSZWNpZXZlZCgpOworICAgIHZvaWQgcmVwb3J0RGF0YVJlY2VpdmVkKCk7CiAK
IHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoY29uc3Qg
S1VSTCYpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDY2MTEzKQor
KysgV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
Nyw3ICsxNzcsOCBAQCBJbWFnZURvY3VtZW50OjpJbWFnZURvY3VtZW50KEZyYW1lKiBmcmFtCiAg
ICAgLCBtX2RpZFNocmlua0ltYWdlKGZhbHNlKQogICAgICwgbV9zaG91bGRTaHJpbmtJbWFnZShz
aG91bGRTaHJpbmtUb0ZpdCgpKQogewotICAgIHNldFBhcnNlTW9kZShDb21wYXQpOworICAgIHNl
dENvbXBhdGliaWxpdHlNb2RlKFF1aXJrc01vZGUpOworICAgIGxvY2tDb21wYXRpYmlsaXR5TW9k
ZSgpOwogfQogICAgIAogUGFzc1JlZlB0cjxEb2N1bWVudFBhcnNlcj4gSW1hZ2VEb2N1bWVudDo6
Y3JlYXRlUGFyc2VyKCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2
NjExMykKKysrIFdlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsNyArMTEwLDggQEAgTWVkaWFEb2N1bWVudDo6TWVkaWFEb2N1bWVudChGcmFtZSog
ZnJhbQogICAgIDogSFRNTERvY3VtZW50KGZyYW1lLCB1cmwpCiAgICAgLCBtX3JlcGxhY2VNZWRp
YUVsZW1lbnRUaW1lcih0aGlzLCAmTWVkaWFEb2N1bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRp
bWVyRmlyZWQpCiB7Ci0gICAgc2V0UGFyc2VNb2RlKENvbXBhdCk7CisgICAgc2V0Q29tcGF0aWJp
bGl0eU1vZGUoUXVpcmtzTW9kZSk7CisgICAgbG9ja0NvbXBhdGliaWxpdHlNb2RlKCk7CiB9CiAK
IE1lZGlhRG9jdW1lbnQ6On5NZWRpYURvY3VtZW50KCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Bs
dWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDggQEAgdm9pZCBQbHVnaW5Eb2N1
bWVudFBhcnNlcjo6YXBwZW5kQnl0ZXMoRAogUGx1Z2luRG9jdW1lbnQ6OlBsdWdpbkRvY3VtZW50
KEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQogICAgIDogSFRNTERvY3VtZW50KGZyYW1l
LCB1cmwpCiB7Ci0gICAgc2V0UGFyc2VNb2RlKENvbXBhdCk7CisgICAgc2V0Q29tcGF0aWJpbGl0
eU1vZGUoUXVpcmtzTW9kZSk7CisgICAgbG9ja0NvbXBhdGliaWxpdHlNb2RlKCk7CiB9CiAgICAg
CiBQYXNzUmVmUHRyPERvY3VtZW50UGFyc2VyPiBQbHVnaW5Eb2N1bWVudDo6Y3JlYXRlUGFyc2Vy
KCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvU2lua0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJD
b3JlL2xvYWRlci9TaW5rRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4
IEBAIHByaXZhdGU6CiBTaW5rRG9jdW1lbnQ6OlNpbmtEb2N1bWVudChGcmFtZSogZnJhbWUsIGNv
bnN0IEtVUkwmIHVybCkKICAgICA6IEhUTUxEb2N1bWVudChmcmFtZSwgdXJsKQogewotICAgIHNl
dFBhcnNlTW9kZShDb21wYXQpOworICAgIHNldENvbXBhdGliaWxpdHlNb2RlKFF1aXJrc01vZGUp
OworICAgIGxvY2tDb21wYXRpYmlsaXR5TW9kZSgpOwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50
UGFyc2VyPiBTaW5rRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9UZXh0RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RleHREb2N1
bWVudC5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dERvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiw4IEBAIGJvb2wgVGV4dERvY3VtZW50
UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQKIFRleHREb2N1bWVudDo6VGV4dERvY3VtZW50KEZyYW1l
KiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQogICAgIDogSFRNTERvY3VtZW50KGZyYW1lLCB1cmwp
CiB7CisgICAgc2V0Q29tcGF0aWJpbGl0eU1vZGUoUXVpcmtzTW9kZSk7CisgICAgbG9ja0NvbXBh
dGliaWxpdHlNb2RlKCk7CiB9CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRQYXJzZXI+IFRleHREb2N1
bWVudDo6Y3JlYXRlUGFyc2VyKCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDY2MTE1KQorKysgV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzksNyArNjM5LDcgQEAgdm9pZCBQ
YWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZAogICAgIAogICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dCgpKSB7CiAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IGZyYW1lLT5kb2N1bWVudCgpLT5jbGVhclBhZ2VVc2VyU2hlZXQoKTsKKyAgICAgICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAgICAgfQogfQogCkluZGV4
OiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwLmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgUGFnZUdyb3VwOjpy
ZXNldFVzZXJTdHlsZUNhY2hlSW5BbGwKICAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wYWdlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVu
dCgpLT5jbGVhclBhZ2VHcm91cFVzZXJTaGVldHMoKTsKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1
bWVudCgpLT51cGRhdGVQYWdlR3JvdXBVc2VyU2hlZXRzKCk7CiAgICAgfQogI2VuZGlmCiB9Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIFNldHRpbmdzOjpTZXR0aW5n
cyhQYWdlKiBwYWdlKQogICAgICwgbV9pbkFwcGxpY2F0aW9uQ2hyb21lTW9kZShmYWxzZSkKICAg
ICAsIG1fb2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGZhbHNlKQogICAgICwgbV9z
aG91bGRQYWludEN1c3RvbVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBtX2VuZm9yY2VDU1NNSU1F
VHlwZUluU3RyaWN0TW9kZSh0cnVlKQorICAgICwgbV9lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSh0cnVlKQogICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSkKICAgICAs
IG1fYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoZmFsc2UpCiAgICAgLCBtX2VkaXRpbmdCZWhh
dmlvclR5cGUoCkBAIC01MDQsOSArNTA0LDkgQEAgdm9pZCBTZXR0aW5nczo6c2V0Wm9vbU1vZGUo
Wm9vbU1vZGUgbW9kZQogICAgIHNldE5lZWRzUmVhcHBseVN0eWxlc0luQWxsRnJhbWVzKG1fcGFn
ZSk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldEVuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9k
ZShib29sIGVuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZSkKK3ZvaWQgU2V0dGluZ3M6OnNl
dEVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKGJvb2wgZW5mb3JjZUNTU01JTUVUeXBl
SW5Ob1F1aXJrc01vZGUpCiB7Ci0gICAgbV9lbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUg
PSBlbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGU7CisgICAgbV9lbmZvcmNlQ1NTTUlNRVR5
cGVJbk5vUXVpcmtzTW9kZSA9IGVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlOwogfQog
CiAjaWYgVVNFKFNBRkFSSV9USEVNRSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA2NjExMykKKysr
IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsOCArMjUyLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFpvb21Nb2RlKFpvb21Nb2Rl
KTsKICAgICAgICAgWm9vbU1vZGUgem9vbU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3pvb21Nb2Rl
OyB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldEVuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0
TW9kZShib29sKTsKLSAgICAgICAgYm9vbCBlbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUo
KSB7IHJldHVybiBtX2VuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZTsgfQorICAgICAgICB2
b2lkIHNldEVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKGJvb2wpOworICAgICAgICBi
b29sIGVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKCkgeyByZXR1cm4gbV9lbmZvcmNl
Q1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZTsgfQogCiAgICAgICAgIHZvaWQgc2V0TWF4aW11bURl
Y29kZWRJbWFnZVNpemUoc2l6ZV90IHNpemUpIHsgbV9tYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSA9
IHNpemU7IH0KICAgICAgICAgc2l6ZV90IG1heGltdW1EZWNvZGVkSW1hZ2VTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhpbXVtRGVjb2RlZEltYWdlU2l6ZTsgfQpAQCAtMzg2LDcgKzM4Niw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2luQXBwbGljYXRpb25DaHJvbWVN
b2RlIDogMTsKICAgICAgICAgYm9vbCBtX29mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxl
ZCA6IDE7CiAgICAgICAgIGJvb2wgbV9zaG91bGRQYWludEN1c3RvbVNjcm9sbGJhcnMgOiAxOwot
ICAgICAgICBib29sIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlIDogMTsKKyAgICAg
ICAgYm9vbCBtX2VuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIDogMTsKICAgICAgICAg
Ym9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yIDogMTsKICAgICAgICAgYm9vbCBtX2FsbG93U2Ny
aXB0c1RvQ2xvc2VXaW5kb3dzIDogMTsKICAgICAgICAgdW5zaWduZWQgbV9lZGl0aW5nQmVoYXZp
b3JUeXBlIDogMTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2
aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJl
Y2FsY0NvbHVtbihpbnQgZQogCiAgICAgLy8gTmF2L0lFIHdlaXJkbmVzcwogICAgIGlmIChsLndp
ZHRoLmlzRml4ZWQoKSkgewotICAgICAgICBpZiAobV90YWJsZS0+c3R5bGUoKS0+aHRtbEhhY2tz
KCkgJiYgbC5tYXhXaWR0aCA+IGwud2lkdGgudmFsdWUoKSAmJiBmaXhlZENvbnRyaWJ1dG9yICE9
IG1heENvbnRyaWJ1dG9yKSB7CisgICAgICAgIGlmIChtX3RhYmxlLT5kb2N1bWVudCgpLT5pblF1
aXJrc01vZGUoKSAmJiBsLm1heFdpZHRoID4gbC53aWR0aC52YWx1ZSgpICYmIGZpeGVkQ29udHJp
YnV0b3IgIT0gbWF4Q29udHJpYnV0b3IpIHsKICAgICAgICAgICAgIGwud2lkdGggPSBMZW5ndGgo
KTsKICAgICAgICAgICAgIGZpeGVkQ29udHJpYnV0b3IgPSAwOwogICAgICAgICB9CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIzLDcgKzIyMyw3IEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1ByZWZXaWR0aHMoaW4K
ICAgICAvLyBJbiB0aGlzIGV4YW1wbGUsIHRoZSB0d28gaW5uZXIgdGFibGVzIHNob3VsZCBiZSBh
cyBsYXJnZSBhcyB0aGUgb3V0ZXIgdGFibGUuIAogICAgIC8vIFdlIGNhbiBhY2hpZXZlIHRoaXMg
ZWZmZWN0IGJ5IG1ha2luZyB0aGUgbWF4d2lkdGggb2YgZml4ZWQgdGFibGVzIHdpdGggcGVyY2Vu
dGFnZQogICAgIC8vIHdpZHRocyBiZSBpbmZpbml0ZS4KLSAgICBpZiAobV90YWJsZS0+c3R5bGUo
KS0+aHRtbEhhY2tzKCkgJiYgbV90YWJsZS0+c3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSAK
KyAgICBpZiAobV90YWJsZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkgJiYgbV90YWJsZS0+
c3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSAKICAgICAgICAgJiYgbWF4V2lkdGggPCBUQUJM
RV9NQVhfV0lEVEgpCiAgICAgICAgIG1heFdpZHRoID0gVEFCTEVfTUFYX1dJRFRIOwogfQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2MSw4
ICs3NjEsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoCiAgICAg
aW50IGggPSBoZWlnaHQoKTsKIAogICAgIC8vIENvbnN0cmFpbiBvdXIgYmFja2dyb3VuZC9ib3Jk
ZXIgcGFpbnRpbmcgdG8gdGhlIGxpbmUgdG9wIGFuZCBib3R0b20gaWYgbmVjZXNzYXJ5LgotICAg
IGJvb2wgc3RyaWN0TW9kZSA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgp
OwotICAgIGlmICghaGFzVGV4dENoaWxkcmVuKCkgJiYgIXN0cmljdE1vZGUpIHsKKyAgICBib29s
IG5vUXVpcmtzTW9kZSA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluTm9RdWlya3NNb2RlKCk7
CisgICAgaWYgKCFoYXNUZXh0Q2hpbGRyZW4oKSAmJiAhbm9RdWlya3NNb2RlKSB7CiAgICAgICAg
IFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSByb290KCk7CiAgICAgICAgIGludCBib3R0b20gPSBt
aW4ocm9vdEJveC0+bGluZUJvdHRvbSgpLCB5ICsgaCk7CiAgICAgICAgIHkgPSBtYXgocm9vdEJv
eC0+bGluZVRvcCgpLCB5KTsKQEAgLTgzNyw4ICs4MzcsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6
OnBhaW50TWFzayhQYWludEluZm8mCiAgICAgaW50IGggPSBoZWlnaHQoKTsKIAogICAgIC8vIENv
bnN0cmFpbiBvdXIgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnRpbmcgdG8gdGhlIGxpbmUgdG9wIGFu
ZCBib3R0b20gaWYgbmVjZXNzYXJ5LgotICAgIGJvb2wgc3RyaWN0TW9kZSA9IHJlbmRlcmVyKCkt
PmRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpOwotICAgIGlmICghaGFzVGV4dENoaWxkcmVuKCkg
JiYgIXN0cmljdE1vZGUpIHsKKyAgICBib29sIG5vUXVpcmtzTW9kZSA9IHJlbmRlcmVyKCktPmRv
Y3VtZW50KCktPmluTm9RdWlya3NNb2RlKCk7CisgICAgaWYgKCFoYXNUZXh0Q2hpbGRyZW4oKSAm
JiAhbm9RdWlya3NNb2RlKSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSByb290
KCk7CiAgICAgICAgIGludCBib3R0b20gPSBtaW4ocm9vdEJveC0+bGluZUJvdHRvbSgpLCB5ICsg
aCk7CiAgICAgICAgIHkgPSBtYXgocm9vdEJveC0+bGluZVRvcCgpLCB5KTsKQEAgLTkyMiw3ICs5
MjIsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50VGV4dERlY29yYXRpb25zCiB7CiAgICAg
Ly8gUGFpbnQgdGV4dCBkZWNvcmF0aW9ucyBsaWtlIHVuZGVybGluZXMvb3ZlcmxpbmVzLiBXZSBv
bmx5IGRvIHRoaXMgaWYgd2UgYXJlbid0IGluIHF1aXJrcyBtb2RlIChpLmUuLCBpbgogICAgIC8v
IGFsbW9zdC1zdHJpY3QgbW9kZSBvciBzdHJpY3QgbW9kZSkuCi0gICAgaWYgKHJlbmRlcmVyKCkt
PnN0eWxlKCktPmh0bWxIYWNrcygpIHx8ICFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290
KHJlbmRlcmVyKCkpIHx8CisgICAgaWYgKHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluUXVpcmtz
TW9kZSgpIHx8ICFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8
CiAgICAgICAgIHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQog
ICAgICAgICByZXR1cm47CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICB9CiAKICAgICAvLyBQYWludCBkZWNvcmF0aW9ucwot
ICAgIGlmIChkICE9IFRETk9ORSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVj
dGlvbiAmJiBzdHlsZVRvVXNlLT5odG1sSGFja3MoKSkgeworICAgIGlmIChkICE9IFRETk9ORSAm
JiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiByZW5kZXJlcigpLT5k
b2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgewogICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihzdHlsZVRvVXNlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciks
IHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIHBhaW50RGVjb3JhdGlvbihjb250
ZXh0LCB0eCwgdHksIGQsIHRleHRTaGFkb3cpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM4LDcgKzEwMzgsNyBAQCBib29sIFJlbmRl
ckJsb2NrOjppc1NlbGZDb2xsYXBzaW5nQmxvY2soCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGJvb2wgaGFzQXV0b0hlaWdodCA9IHN0eWxlKCktPmhlaWdodCgpLmlzQXV0bygpOwotICAg
IGlmIChzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSAmJiAhc3R5bGUoKS0+aHRtbEhhY2tz
KCkpIHsKKyAgICBpZiAoc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkgJiYgIWRvY3VtZW50
KCktPmluUXVpcmtzTW9kZSgpKSB7CiAgICAgICAgIGhhc0F1dG9IZWlnaHQgPSB0cnVlOwogICAg
ICAgICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOyAhY2ItPmlzUmVu
ZGVyVmlldygpOyBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKSkgewogICAgICAgICAgICAgaWYg
KGNiLT5zdHlsZSgpLT5oZWlnaHQoKS5pc0ZpeGVkKCkgfHwgY2ItPmlzVGFibGVDZWxsKCkpCkBA
IC0xNDcwLDcgKzE0NzAsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5k
ZXJCCiAgICAgICAgIC8vIFRoaXMgY2hpbGQgaXMgY29sbGFwc2luZyB3aXRoIHRoZSB0b3Agb2Yg
dGhlCiAgICAgICAgIC8vIGJsb2NrLiAgSWYgaXQgaGFzIGxhcmdlciBtYXJnaW4gdmFsdWVzLCB0
aGVuIHdlIG5lZWQgdG8gdXBkYXRlCiAgICAgICAgIC8vIG91ciBvd24gbWF4aW1hbCB2YWx1ZXMu
Ci0gICAgICAgIGlmICghc3R5bGUoKS0+aHRtbEhhY2tzKCkgfHwgIW1hcmdpbkluZm8ucXVpcmtD
b250YWluZXIoKSB8fCAhdG9wUXVpcmspCisgICAgICAgIGlmICghZG9jdW1lbnQoKS0+aW5RdWly
a3NNb2RlKCkgfHwgIW1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSB8fCAhdG9wUXVpcmspCiAg
ICAgICAgICAgICBzZXRNYXhUb3BNYXJnaW5zKG1heChwb3NUb3AsIG1heFRvcFBvc01hcmdpbigp
KSwgbWF4KG5lZ1RvcCwgbWF4VG9wTmVnTWFyZ2luKCkpKTsKIAogICAgICAgICAvLyBUaGUgbWlu
dXRlIGFueSBvZiB0aGUgbWFyZ2lucyBpbnZvbHZlZCBpc24ndCBhIHF1aXJrLCBkb24ndApAQCAt
MTUyMiw3ICsxNTIyLDcgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVy
QgogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCFtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygp
IHx8CiAgICAgICAgICAgICAoIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VUb3BXaXRoQ2hpbGRyZW4o
KQotICAgICAgICAgICAgICYmICghc3R5bGUoKS0+aHRtbEhhY2tzKCkgfHwgIW1hcmdpbkluZm8u
cXVpcmtDb250YWluZXIoKSB8fCAhbWFyZ2luSW5mby50b3BRdWlyaygpKSkpIHsKKyAgICAgICAg
ICAgICAmJiAoIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpIHx8ICFtYXJnaW5JbmZvLnF1aXJr
Q29udGFpbmVyKCkgfHwgIW1hcmdpbkluZm8udG9wUXVpcmsoKSkpKSB7CiAgICAgICAgICAgICAv
LyBXZSdyZSBjb2xsYXBzaW5nIHdpdGggYSBwcmV2aW91cyBzaWJsaW5nJ3MgbWFyZ2lucyBhbmQg
bm90CiAgICAgICAgICAgICAvLyB3aXRoIHRoZSB0b3Agb2YgdGhlIGJsb2NrLgogICAgICAgICAg
ICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbWF4KG1hcmdpbkluZm8ucG9zTWFyZ2luKCksIHBvc1Rv
cCkgLSBtYXgobWFyZ2luSW5mby5uZWdNYXJnaW4oKSwgbmVnVG9wKSk7CkBAIC0xNjc1LDcgKzE2
NzUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpoYW5kbGVCb3R0b21PZkJsb2NrKGluCiAKICAgICAv
LyBJZiB3ZSBjYW4ndCBjb2xsYXBzZSB3aXRoIGNoaWxkcmVuIHRoZW4gZ28gYWhlYWQgYW5kIGFk
ZCBpbiB0aGUgYm90dG9tIG1hcmdpbi4KICAgICBpZiAoIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VX
aXRoQm90dG9tKCkgJiYgIW1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoVG9wKCkKLSAgICAgICAg
JiYgKCFzdHlsZSgpLT5odG1sSGFja3MoKSB8fCAhbWFyZ2luSW5mby5xdWlya0NvbnRhaW5lcigp
IHx8ICFtYXJnaW5JbmZvLmJvdHRvbVF1aXJrKCkpKQorICAgICAgICAmJiAoIWRvY3VtZW50KCkt
PmluUXVpcmtzTW9kZSgpIHx8ICFtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgfHwgIW1hcmdp
bkluZm8uYm90dG9tUXVpcmsoKSkpCiAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIG1hcmdp
bkluZm8ubWFyZ2luKCkpOwogICAgICAgICAKICAgICAvLyBOb3cgYWRkIGluIG91ciBib3R0b20g
Ym9yZGVyL3BhZGRpbmcuCkBAIC00NTc4LDcgKzQ1NzgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
YWxjSW5saW5lUHJlZldpZHRocygpCiAgICAgLy8gRmlyZWZveCBhbmQgT3BlcmEgd2lsbCBhbGxv
dyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAg
ICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJ1Y3Vtc3RhbmNlcyAoaW4gb3JkZXIgdG8gbWF0Y2ggY29t
bW9uIFdpbklFIHJlbmRlcmluZ3MpLiAKICAgICAvLyBOb3Qgc3VwcG9ydGluZyB0aGUgcXVpcmsg
aGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVhbCBzaXRlcy4gKFNlZSBCdWd6aWxs
YSAxMDUxNy4pIAotICAgIGJvb2wgYWxsb3dJbWFnZXNUb0JyZWFrID0gIXN0eWxlKCktPmh0bWxI
YWNrcygpIHx8ICFpc1RhYmxlQ2VsbCgpIHx8ICFzdHlsZSgpLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCk7CisgICAgYm9vbCBhbGxvd0ltYWdlc1RvQnJlYWsgPSAhZG9jdW1lbnQoKS0+aW5R
dWlya3NNb2RlKCkgfHwgIWlzVGFibGVDZWxsKCkgfHwgIXN0eWxlKCktPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKTsKIAogICAgIGJvb2wgYXV0b1dyYXAsIG9sZEF1dG9XcmFwOwogICAgIGF1
dG9XcmFwID0gb2xkQXV0b1dyYXAgPSBzdHlsZSgpLT5hdXRvV3JhcCgpOwpAQCAtNDkwNyw3ICs0
OTA3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0Jsb2NrUHJlZldpZHRocygpCiAgICAgICAg
IC8vIG9mIDEwMHB4IGJlY2F1c2Ugb2YgdGhlIHRhYmxlLgogICAgICAgICAvLyBXZSBjYW4gYWNo
aWV2ZSB0aGlzIGVmZmVjdCBieSBtYWtpbmcgdGhlIG1heHdpZHRoIG9mIGJsb2NrcyB0aGF0IGNv
bnRhaW4gdGFibGVzCiAgICAgICAgIC8vIHdpdGggcGVyY2VudGFnZSB3aWR0aHMgYmUgaW5maW5p
dGUgKGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGluc2lkZSBhIHRhYmxlIGNlbGwpLgotICAgICAg
ICBpZiAoc3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgY2hpbGQtPnN0eWxlKCktPndpZHRoKCkuaXNQ
ZXJjZW50KCkgJiYKKyAgICAgICAgaWYgKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpICYmIGNo
aWxkLT5zdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpICYmCiAgICAgICAgICAgICAhaXNUYWJs
ZUNlbGwoKSAmJiBjaGlsZC0+aXNUYWJsZSgpICYmIG1fbWF4UHJlZldpZHRoIDwgQkxPQ0tfTUFY
X1dJRFRIKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2so
KTsKICAgICAgICAgICAgIHdoaWxlICghY2ItPmlzUmVuZGVyVmlldygpICYmICFjYi0+aXNUYWJs
ZUNlbGwoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIGlu
bGluZSBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveAogICAgICAgICAvLyBXZSBvbmx5IHRyZWF0
IGEgYm94IGFzIHRleHQgZm9yIGEgPGJyPiBpZiB3ZSBhcmUgb24gYSBsaW5lIGJ5IG91cnNlbGYg
b3IgaW4gc3RyaWN0IG1vZGUKICAgICAgICAgLy8gKE5vdGUgdGhlIHVzZSBvZiBzdHJpY3QgbW9k
ZS4gIEluICJhbG1vc3Qgc3RyaWN0IiBtb2RlLCB3ZSBkb24ndCB0cmVhdCB0aGUgYm94IGZvciA8
YnI+IGFzIHRleHQuKQogICAgICAgICBpZiAob2JqLT5pc0JSKCkpCi0gICAgICAgICAgICB0ZXh0
Qm94LT5zZXRJc1RleHQoaXNPbmx5UnVuIHx8IG9iai0+ZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2Rl
KCkpOworICAgICAgICAgICAgdGV4dEJveC0+c2V0SXNUZXh0KGlzT25seVJ1biB8fCBvYmotPmRv
Y3VtZW50KCktPmluTm9RdWlya3NNb2RlKCkpOwogICAgICAgICByZXR1cm4gdGV4dEJveDsKICAg
ICB9CiAgICAgCkBAIC0xMzk1LDcgKzEzOTUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9j
azo6ZmluZE5leHRMaW5lCiAgICAgLy8gRmlyZWZveCBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRh
YmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAgICAgLy8g
dmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIChpbiBvcmRlciB0byBtYXRjaCBjb21tb24gV2lu
SUUgcmVuZGVyaW5ncykuIAogICAgIC8vIE5vdCBzdXBwb3J0aW5nIHRoZSBxdWlyayBoYXMgY2F1
c2VkIHVzIHRvIG1pcy1yZW5kZXIgc29tZSByZWFsIHNpdGVzLiAoU2VlIEJ1Z3ppbGxhIDEwNTE3
LikgCi0gICAgYm9vbCBhbGxvd0ltYWdlc1RvQnJlYWsgPSAhc3R5bGUoKS0+aHRtbEhhY2tzKCkg
fHwgIWlzVGFibGVDZWxsKCkgfHwgIXN0eWxlKCktPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KTsKKyAgICBib29sIGFsbG93SW1hZ2VzVG9CcmVhayA9ICFkb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKSB8fCAhaXNUYWJsZUNlbGwoKSB8fCAhc3R5bGUoKS0+d2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpOwogCiAgICAgRVdoaXRlU3BhY2UgY3VycldTID0gc3R5bGUoKS0+d2hpdGVTcGFjZSgp
OwogICAgIEVXaGl0ZVNwYWNlIGxhc3RXUyA9IGN1cnJXUzsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUwLDcgKzE1NTAsNyBAQCBpbnQgUmVuZGVyQm94Ojpj
YWxjUGVyY2VudGFnZUhlaWdodChjb25zCiAgICAgaW50IHJlc3VsdCA9IC0xOwogICAgIGJvb2wg
c2tpcHBlZEF1dG9IZWlnaHRDb250YWluaW5nQmxvY2sgPSBmYWxzZTsKICAgICBSZW5kZXJCbG9j
ayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoc3R5bGUoKS0+aHRtbEhhY2tzKCkp
IHsKKyAgICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpIHsKICAgICAgICAgLy8gSW4g
cXVpcmtzIG1vZGUsIGJsb2NrcyB3aXRoIGF1dG8gaGVpZ2h0IGFyZSBza2lwcGVkLCBhbmQgd2Ug
a2VlcCBsb29raW5nIGZvciBhbiBlbmNsb3NpbmcKICAgICAgICAgLy8gYmxvY2sgdGhhdCBtYXkg
aGF2ZSBhIHNwZWNpZmllZCBoZWlnaHQgYW5kIHRoZW4gdXNlIGl0LiAgSW4gc3RyaWN0IG1vZGUs
IHRoaXMgdmlvbGF0ZXMgdGhlCiAgICAgICAgIC8vIHNwZWNpZmljYXRpb24sIHdoaWNoIHN0YXRl
cyB0aGF0IHBlcmNlbnRhZ2UgaGVpZ2h0cyBqdXN0IHJldmVydCB0byBhdXRvIGlmIHRoZSBjb250
YWluaW5nCkBAIC0xNTk5LDcgKzE1OTksNyBAQCBpbnQgUmVuZGVyQm94OjpjYWxjUGVyY2VudGFn
ZUhlaWdodChjb25zCiAgICAgICAgIHJlc3VsdCA9IGNiLT5jYWxjUGVyY2VudGFnZUhlaWdodChj
Yi0+c3R5bGUoKS0+aGVpZ2h0KCkpOwogICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQogICAgICAg
ICAgICAgcmVzdWx0ID0gY2ItPmNhbGNDb250ZW50Qm94SGVpZ2h0KHJlc3VsdCk7Ci0gICAgfSBl
bHNlIGlmIChjYi0+aXNSZW5kZXJWaWV3KCkgfHwgKGNiLT5pc0JvZHkoKSAmJiBzdHlsZSgpLT5o
dG1sSGFja3MoKSkgfHwgaXNQb3NpdGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCkgeworICAgIH0g
ZWxzZSBpZiAoY2ItPmlzUmVuZGVyVmlldygpIHx8IChjYi0+aXNCb2R5KCkgJiYgZG9jdW1lbnQo
KS0+aW5RdWlya3NNb2RlKCkpIHx8IGlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsK
ICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3QgdGhlIGJsb2NrJyBoZWlnaHQo
KSBtZW1iZXIgdmFyaWFibGUsIHNpbmNlIHRoaXMKICAgICAgICAgLy8gY2FuIGdldCBjYWxsZWQg
d2hpbGUgdGhlIGJsb2NrIGlzIHN0aWxsIGxheWluZyBvdXQgaXRzIGtpZHMuCiAgICAgICAgIGlu
dCBvbGRIZWlnaHQgPSBjYi0+aGVpZ2h0KCk7CkBAIC0xODMyLDcgKzE4MzIsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiAKICAgICAvLyBUbyBtYXRjaCBXaW5J
RSwgaW4gcXVpcmtzIG1vZGUgdXNlIHRoZSBwYXJlbnQncyAnZGlyZWN0aW9uJyBwcm9wZXJ0eQog
ICAgIC8vIGluc3RlYWQgb2YgdGhlIHRoZSBjb250YWluZXIgYmxvY2sncy4KLSAgICBUZXh0RGly
ZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IChzdHlsZSgpLT5odG1sSGFja3MoKSkgPyBwYXJl
bnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgOiBjb250YWluZXJCbG9jay0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCk7CisgICAgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSAoZG9jdW1l
bnQoKS0+aW5RdWlya3NNb2RlKCkpID8gcGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpIDog
Y29udGFpbmVyQmxvY2stPnN0eWxlKCktPmRpcmVjdGlvbigpOwogCiAgICAgY29uc3QgaW50IGJv
cmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwogICAgIGNvbnN0IExl
bmd0aCBtYXJnaW5MZWZ0ID0gc3R5bGUoKS0+bWFyZ2luTGVmdCgpOwpAQCAtMjM2OCw3ICsyMzY4
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZQogCiAgICAgLy8g
VG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2RlIHVzZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlv
bicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9mIHRoZSB0aGUgY29udGFpbmVyIGJsb2NrJ3Mu
Ci0gICAgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSAoc3R5bGUoKS0+aHRtbEhh
Y2tzKCkpID8gcGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpIDogY29udGFpbmVyQmxvY2st
PnN0eWxlKCktPmRpcmVjdGlvbigpOworICAgIFRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0
aW9uID0gKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSA/IHBhcmVudCgpLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSA6IGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5kaXJlY3Rpb24oKTsKIAogICAg
IC8vIFZhcmlhYmxlcyB0byBzb2x2ZS4KICAgICBMZW5ndGggbGVmdCA9IHN0eWxlKCktPmxlZnQo
KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA2NjExMykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBzdHJldGNoZXNUb1ZpZXdIZWlnaHQoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIHN0eWxlKCktPmh0bWxIYWNrcygpICYmIHN0eWxlKCktPmhlaWdodCgp
LmlzQXV0bygpICYmICFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgKGlzUm9vdCgpIHx8IGlz
Qm9keSgpKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpICYmIHN0
eWxlKCktPmhlaWdodCgpLmlzQXV0bygpICYmICFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYg
KGlzUm9vdCgpIHx8IGlzQm9keSgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgaW50
cmluc2ljU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsNyBA
QCBzdGF0aWMgUmVuZGVyT2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluCiAgICAgaWYgKCFmaXJz
dENoaWxkKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGJvb2wgaW5RdWlya3NNb2RlID0gY3Vy
ci0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnJDaGlsZCA9IGZpcnN0Q2hpbGQ7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjdXJyQ2hpbGQgPT0gbWFya2VyKQogICAgICAg
ICAgICAgY29udGludWU7CkBAIC0xNjMsNyArMTY0LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCog
Z2V0UGFyZW50T2ZGaXJzdExpbgogICAgICAgICBpZiAoY3VyckNoaWxkLT5pc1RhYmxlKCkgfHwg
IWN1cnJDaGlsZC0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgaWYgKGN1cnItPmlzTGlzdEl0ZW0oKSAmJiBjdXJyQ2hpbGQtPnN0eWxlKCktPmh0bWxIYWNr
cygpICYmIGN1cnJDaGlsZC0+bm9kZSgpICYmCisgICAgICAgIGlmIChjdXJyLT5pc0xpc3RJdGVt
KCkgJiYgaW5RdWlya3NNb2RlICYmIGN1cnJDaGlsZC0+bm9kZSgpICYmCiAgICAgICAgICAgICAo
Y3VyckNoaWxkLT5ub2RlKCktPmhhc1RhZ05hbWUodWxUYWcpfHwgY3VyckNoaWxkLT5ub2RlKCkt
Pmhhc1RhZ05hbWUob2xUYWcpKSkKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA2NjExMykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQg
UmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgICAgICB0b1JlbmRlclRhYmxlU2VjdGlvbihj
aGlsZCktPmxheW91dFJvd3MoY2hpbGQgPT0gbV9maXJzdEJvZHkgPyBtYXgoMCwgdGggLSBjYWxj
dWxhdGVkSGVpZ2h0KSA6IDApOwogICAgIH0KIAotICAgIGlmICghbV9maXJzdEJvZHkgJiYgdGgg
PiBjYWxjdWxhdGVkSGVpZ2h0ICYmICFzdHlsZSgpLT5odG1sSGFja3MoKSkgeworICAgIGlmICgh
bV9maXJzdEJvZHkgJiYgdGggPiBjYWxjdWxhdGVkSGVpZ2h0ICYmICFkb2N1bWVudCgpLT5pblF1
aXJrc01vZGUoKSkgewogICAgICAgICAvLyBDb21wbGV0ZWx5IGVtcHR5IHRhYmxlcyAod2l0aCBu
byBzZWN0aW9ucyBvciBhbnl0aGluZykgc2hvdWxkIGF0IGxlYXN0IGhvbm9yIHNwZWNpZmllZCBo
ZWlnaHQKICAgICAgICAgLy8gaW4gc3RyaWN0IG1vZGUuCiAgICAgICAgIHNldEhlaWdodChoZWln
aHQoKSArIHRoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAkocmV2aXNpb24gNjYxMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNyArMzQ5LDcgQEAgaW50IFJlbmRlclRhYmxl
U2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCgpCiAgICAgICAgICAgICAvLyBFeHBsaWNpdCBoZWlnaHRz
IHVzZSB0aGUgYm9yZGVyIGJveCBpbiBxdWlya3MgbW9kZS4gIEluIHN0cmljdCBtb2RlIGRvIHRo
ZSByaWdodAogICAgICAgICAgICAgLy8gdGhpbmcgYW5kIGFjdHVhbGx5IGFkZCBpbiB0aGUgYm9y
ZGVyIGFuZCBwYWRkaW5nLgogICAgICAgICAgICAgY2ggPSBjZWxsLT5zdHlsZSgpLT5oZWlnaHQo
KS5jYWxjVmFsdWUoMCkgKyAKLSAgICAgICAgICAgICAgICAoY2VsbC0+c3R5bGUoKS0+aHRtbEhh
Y2tzKCkgPyAwIDogKGFkanVzdGVkUGFkZGluZ1RvcCArIGFkanVzdGVkUGFkZGluZ0JvdHRvbSAr
CisgICAgICAgICAgICAgICAgKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpID8gMCA6IChhZGp1
c3RlZFBhZGRpbmdUb3AgKyBhZGp1c3RlZFBhZGRpbmdCb3R0b20gKwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+Ym9yZGVyVG9wKCkgKyBj
ZWxsLT5ib3JkZXJCb3R0b20oKSkpOwogICAgICAgICAgICAgY2ggPSBtYXgoY2gsIGFkanVzdGVk
SGVpZ2h0KTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9u
IDY2MTEzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNSwxNCArMjE1LDEwIEBAIGludCBSb290SW5saW5lQm94Ojp2ZXJ0aWNhbGx5
QWxpZ25Cb3hlcygKICAgICBpbnQgbWF4QXNjZW50ID0gMDsKICAgICBpbnQgbWF4RGVzY2VudCA9
IDA7CiAKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlJ3JlIGluIHN0cmljdCBtb2RlLiAgTm90ZSB0
aGF0IHdlIGNhbid0IHNpbXBseSB1c2UgIXN0eWxlKCktPmh0bWxIYWNrcygpLAotICAgIC8vIGJl
Y2F1c2UgdGhhdCB3b3VsZCBtYXRjaCBhbG1vc3Qgc3RyaWN0IG1vZGUgYXMgd2VsbC4KLSAgICBS
ZW5kZXJPYmplY3QqIGN1cnIgPSByZW5kZXJlcigpOwotICAgIHdoaWxlIChjdXJyICYmICFjdXJy
LT5ub2RlKCkpCi0gICAgICAgIGN1cnIgPSBjdXJyLT5jb250YWluZXIoKTsKLSAgICBib29sIHN0
cmljdE1vZGUgPSAoY3VyciAmJiBjdXJyLT5kb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSk7Cisg
ICAgLy8gRmlndXJlIG91dCBpZiB3ZSdyZSBpbiBuby1xdWlya3MgbW9kZS4KKyAgICBib29sIG5v
UXVpcmtzTW9kZSA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluTm9RdWlya3NNb2RlKCk7CiAK
LSAgICBjb21wdXRlTG9naWNhbEJveEhlaWdodHMobWF4UG9zaXRpb25Ub3AsIG1heFBvc2l0aW9u
Qm90dG9tLCBtYXhBc2NlbnQsIG1heERlc2NlbnQsIHN0cmljdE1vZGUsIHRleHRCb3hEYXRhTWFw
KTsKKyAgICBjb21wdXRlTG9naWNhbEJveEhlaWdodHMobWF4UG9zaXRpb25Ub3AsIG1heFBvc2l0
aW9uQm90dG9tLCBtYXhBc2NlbnQsIG1heERlc2NlbnQsIG5vUXVpcmtzTW9kZSwgdGV4dEJveERh
dGFNYXApOwogCiAgICAgaWYgKG1heEFzY2VudCArIG1heERlc2NlbnQgPCBtYXgobWF4UG9zaXRp
b25Ub3AsIG1heFBvc2l0aW9uQm90dG9tKSkKICAgICAgICAgYWRqdXN0TWF4QXNjZW50QW5kRGVz
Y2VudChtYXhBc2NlbnQsIG1heERlc2NlbnQsIG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJv
dHRvbSk7CkBAIC0yMzAsOCArMjI2LDggQEAgaW50IFJvb3RJbmxpbmVCb3g6OnZlcnRpY2FsbHlB
bGlnbkJveGVzKAogICAgIGludCBtYXhIZWlnaHQgPSBtYXhBc2NlbnQgKyBtYXhEZXNjZW50Owog
ICAgIGludCBsaW5lVG9wID0gaGVpZ2h0T2ZCbG9jazsKICAgICBpbnQgbGluZUJvdHRvbSA9IGhl
aWdodE9mQmxvY2s7Ci0gICAgcGxhY2VCb3hlc1ZlcnRpY2FsbHkoaGVpZ2h0T2ZCbG9jaywgbWF4
SGVpZ2h0LCBtYXhBc2NlbnQsIHN0cmljdE1vZGUsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwotICAg
IGNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93KGxpbmVUb3AsIGxpbmVCb3R0b20sIHN0cmljdE1vZGUs
IHRleHRCb3hEYXRhTWFwKTsKKyAgICBwbGFjZUJveGVzVmVydGljYWxseShoZWlnaHRPZkJsb2Nr
LCBtYXhIZWlnaHQsIG1heEFzY2VudCwgbm9RdWlya3NNb2RlLCBsaW5lVG9wLCBsaW5lQm90dG9t
KTsKKyAgICBjb21wdXRlVmVydGljYWxPdmVyZmxvdyhsaW5lVG9wLCBsaW5lQm90dG9tLCBub1F1
aXJrc01vZGUsIHRleHRCb3hEYXRhTWFwKTsKICAgICBzZXRMaW5lVG9wQm90dG9tUG9zaXRpb25z
KGxpbmVUb3AsIGxpbmVCb3R0b20pOwogICAgIAogICAgIGhlaWdodE9mQmxvY2sgKz0gbWF4SGVp
Z2h0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNp
b24gNjYxMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwMyw3ICs0MDMsNiBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5
bGU6OmRpZmYoY29uc3QgCiAgICAgICAgIGluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNp
bmcgIT0gb3RoZXItPmluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgfHwKICAgICAg
ICAgaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uICE9IG90aGVyLT5pbmhlcml0ZWRfZmxh
Z3MuX2JveF9kaXJlY3Rpb24gfHwKICAgICAgICAgaW5oZXJpdGVkX2ZsYWdzLl92aXN1YWxseU9y
ZGVyZWQgIT0gb3RoZXItPmluaGVyaXRlZF9mbGFncy5fdmlzdWFsbHlPcmRlcmVkIHx8Ci0gICAg
ICAgIGluaGVyaXRlZF9mbGFncy5faHRtbEhhY2tzICE9IG90aGVyLT5pbmhlcml0ZWRfZmxhZ3Mu
X2h0bWxIYWNrcyB8fAogICAgICAgICBub25pbmhlcml0ZWRfZmxhZ3MuX3Bvc2l0aW9uICE9IG90
aGVyLT5ub25pbmhlcml0ZWRfZmxhZ3MuX3Bvc2l0aW9uIHx8CiAgICAgICAgIG5vbmluaGVyaXRl
ZF9mbGFncy5fZmxvYXRpbmcgIT0gb3RoZXItPm5vbmluaGVyaXRlZF9mbGFncy5fZmxvYXRpbmcg
fHwKICAgICAgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLl9vcmlnaW5hbERpc3BsYXkgIT0gb3RoZXIt
Pm5vbmluaGVyaXRlZF9mbGFncy5fb3JpZ2luYWxEaXNwbGF5KQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA2NjExMykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgKF93aGl0ZV9zcGFjZSA9PSBvdGhlci5f
d2hpdGVfc3BhY2UpICYmCiAgICAgICAgICAgICAgICAgICAgKF9ib3hfZGlyZWN0aW9uID09IG90
aGVyLl9ib3hfZGlyZWN0aW9uKSAmJgogICAgICAgICAgICAgICAgICAgIChfdmlzdWFsbHlPcmRl
cmVkID09IG90aGVyLl92aXN1YWxseU9yZGVyZWQpICYmCi0gICAgICAgICAgICAgICAgICAgKF9o
dG1sSGFja3MgPT0gb3RoZXIuX2h0bWxIYWNrcykgJiYKICAgICAgICAgICAgICAgICAgICAoX2Zv
cmNlX2JhY2tncm91bmRzX3RvX3doaXRlID09IG90aGVyLl9mb3JjZV9iYWNrZ3JvdW5kc190b193
aGl0ZSkgJiYKICAgICAgICAgICAgICAgICAgICAoX3BvaW50ZXJFdmVudHMgPT0gb3RoZXIuX3Bv
aW50ZXJFdmVudHMpICYmCiAgICAgICAgICAgICAgICAgICAgKF9pbnNpZGVMaW5rID09IG90aGVy
Ll9pbnNpZGVMaW5rKTsKQEAgLTIwMyw3ICsyMDIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAog
ICAgICAgICAvLyBub24gQ1NTMiBpbmhlcml0ZWQKICAgICAgICAgYm9vbCBfdmlzdWFsbHlPcmRl
cmVkIDogMTsKLSAgICAgICAgYm9vbCBfaHRtbEhhY2tzIDogMTsKICAgICAgICAgYm9vbCBfZm9y
Y2VfYmFja2dyb3VuZHNfdG9fd2hpdGUgOiAxOwogICAgICAgICB1bnNpZ25lZCBfcG9pbnRlckV2
ZW50cyA6IDQ7IC8vIEVQb2ludGVyRXZlbnRzCiAgICAgICAgIHVuc2lnbmVkIF9pbnNpZGVMaW5r
IDogMjsgLy8gRUluc2lkZUxpbmsKQEAgLTI3OSw3ICsyNzcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGluaGVyaXRlZF9mbGFncy5fYm9yZGVyX2NvbGxhcHNlID0gaW5pdGlhbEJvcmRlckNvbGxh
cHNlKCk7CiAgICAgICAgIGluaGVyaXRlZF9mbGFncy5fd2hpdGVfc3BhY2UgPSBpbml0aWFsV2hp
dGVTcGFjZSgpOwogICAgICAgICBpbmhlcml0ZWRfZmxhZ3MuX3Zpc3VhbGx5T3JkZXJlZCA9IGlu
aXRpYWxWaXN1YWxseU9yZGVyZWQoKTsKLSAgICAgICAgaW5oZXJpdGVkX2ZsYWdzLl9odG1sSGFj
a3M9ZmFsc2U7CiAgICAgICAgIGluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbiA9IGluaXRp
YWxCb3hEaXJlY3Rpb24oKTsKICAgICAgICAgaW5oZXJpdGVkX2ZsYWdzLl9mb3JjZV9iYWNrZ3Jv
dW5kc190b193aGl0ZSA9IGZhbHNlOwogICAgICAgICBpbmhlcml0ZWRfZmxhZ3MuX3BvaW50ZXJF
dmVudHMgPSBpbml0aWFsUG9pbnRlckV2ZW50cygpOwpAQCAtOTI0LDkgKzkyMSw2IEBAIHB1Ymxp
YzoKICAgICBib29sIGZvcmNlQmFja2dyb3VuZHNUb1doaXRlKCkgY29uc3QgeyByZXR1cm4gaW5o
ZXJpdGVkX2ZsYWdzLl9mb3JjZV9iYWNrZ3JvdW5kc190b193aGl0ZTsgfQogICAgIHZvaWQgc2V0
Rm9yY2VCYWNrZ3JvdW5kc1RvV2hpdGUoYm9vbCBiPXRydWUpIHsgaW5oZXJpdGVkX2ZsYWdzLl9m
b3JjZV9iYWNrZ3JvdW5kc190b193aGl0ZSA9IGI7IH0KIAotICAgIGJvb2wgaHRtbEhhY2tzKCkg
Y29uc3QgeyByZXR1cm4gaW5oZXJpdGVkX2ZsYWdzLl9odG1sSGFja3M7IH0KLSAgICB2b2lkIHNl
dEh0bWxIYWNrcyhib29sIGI9dHJ1ZSkgeyBpbmhlcml0ZWRfZmxhZ3MuX2h0bWxIYWNrcyA9IGI7
IH0KLQogICAgIGJvb2wgaGFzQXV0b1pJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYm94LT5oYXNB
dXRvWkluZGV4KCk7IH0KICAgICB2b2lkIHNldEhhc0F1dG9aSW5kZXgoKSB7IFNFVF9WQVIobV9i
b3gsIG1faGFzQXV0b1pJbmRleCwgdHJ1ZSk7IFNFVF9WQVIobV9ib3gsIG1fekluZGV4LCAwKSB9
CiAgICAgaW50IHpJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYm94LT56SW5kZXgoKTsgfQpJbmRl
eDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY2MjQzKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0yNyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzg4LCBpbXBsZW1lbnQg
SFRNTDUtY29tcGxpYW50IGRvY3R5cGUgc3dpdGNoaW5nLgorCisgICAgICAgIFJlbmFtZSB0aGUg
dmFyaW91cyBtb2RlcyB0byBtYXRjaCB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbjoKKyAgICAgICAg
ICAgIFBhcnNlTW9kZSAtPiBDb21wYXRpYmlsaXR5TW9kZQorICAgICAgICAgICAgQ29tcGF0TW9k
ZSAtPiBRdWlya3NNb2RlCisgICAgICAgICAgICBBbG1vc3RTdHJpY3RNb2RlIC0+IExpbWl0ZWRR
dWlya3NNb2RlCisgICAgICAgICAgICBTdHJpY3RNb2RlIC0+IE5vUXVpcmtzTW9kZQorICAgICAg
ICAgICAgCisgICAgICAgIFJlbW92ZSB0aGUgaHRtbEhhY2tzKCkgYWNjZXNzb3IgZnJvbSBSZW5k
ZXJTdHlsZSBhbmQgbWFrZSByZW5kZXJpbmcgY29kZSBqdXN0IGdvIHRvIHRoZSBkb2N1bWVudAor
ICAgICAgICBpbnN0ZWFkLiAgVGhpcyBtYWtlcyBzd2l0Y2hpbmcgbW9kZXMgYXZvaWQgZm9yY2lu
ZyBhbGwgUmVuZGVyU3R5bGVzIHRvIGRldGVjdCBhcyBjaGFuZ2VkLgorICAgICAgICAKKyAgICAg
ICAgQ2xlYW4gdXAgdXNlciBzdHlsZXNoZWV0cyB0byBtaW5pbWl6ZSBzdHlsZSByZWNhbGN1bGF0
aW9uIHdoZW4gdGhlIG1vZGUgaXMgc3dpdGNoZWQuCisgICAgICAgIAorICAgICAgICBGaXggYnVn
cyB3aXRoIHRoZSBwcm9wYWdhdGlvbiBvZiBjb3JyZWN0IG1vZGVzIGluIHRoZSBIVE1MNSBwYXJz
ZXIuICBNYWtlIHN1cmUgdGhlCisgICAgICAgIGR1bW15IGRvY3VtZW50IGNyZWF0ZWQgZm9yIGZy
YWdtZW50IHBhcnNpbmcgcHJvcGVybHkgaW5oZXJpdHMgdGhlIHJlYWwgZG9jdW1lbnQncyBDb21w
YXRpYmlsaXR5TW9kZS4KKyAgICAgICAgTWFrZSBzdXJlIHRoZSB0cmVlIGJ1aWxkZXIgcHJvcGVy
bHkgY2hhbmdlcyB0aGUgaW5zZXJ0aW9uIG1vZGUgdG8gIkJlZm9yZUhUTUwiIGFmdGVyIGhhbmRs
aW5nCisgICAgICAgIGEgZG9jdHlwZSB0b2tlbi4KKyAgICAgICAgCisgICAgICAgIGRldGVybWlu
ZVBhcnNlTW9kZSAtPiBzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlLCBhbmQgaXQgbm93
IGltcGxlbWVudHMgdGhlIEhUTUw1IGFsZ29yaXRobQorICAgICAgICBwcmVjaXNlbHkuCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVu
Y2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToKKwogMjAxMC0wOC0yNyAgWXVyeSBTZW1pa2hhdHNr
eSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxk
bWFuLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDY2MTEzKQorKysgV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MjUsNyArMTQyNSw3
IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjoKICAgICBzZXR0aW5n
cy0+c2V0Wm9vbU1vZGUoW3ByZWZlcmVuY2VzIHpvb21zVGV4dE9ubHldID8gWm9vbVRleHRPbmx5
IDogWm9vbVBhZ2UpOwogICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkKFtwcmVmZXJlbmNlcyBqYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkXSk7CiAgICAgc2V0
dGluZ3MtPnNldFhTU0F1ZGl0b3JFbmFibGVkKFtwcmVmZXJlbmNlcyBpc1hTU0F1ZGl0b3JFbmFi
bGVkXSk7Ci0gICAgc2V0dGluZ3MtPnNldEVuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZSgh
V0tBcHBWZXJzaW9uQ2hlY2tMZXNzVGhhbihAImNvbS5hcHBsZS5pV2ViIiwgLTEsIDIuMSkpOwor
ICAgIHNldHRpbmdzLT5zZXRFbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSghV0tBcHBW
ZXJzaW9uQ2hlY2tMZXNzVGhhbihAImNvbS5hcHBsZS5pV2ViIiwgLTEsIDIuMSkpOwogICAgIHNl
dHRpbmdzLT5zZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoW3ByZWZlcmVuY2VzIGlzRE5TUHJlZmV0
Y2hpbmdFbmFibGVkXSk7CiAgICAgCiAgICAgLy8gRklYTUU6IEVuYWJsaW5nIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHdoZW4gV2ViR0wgaXMgZW5hYmxlZCBjYXVzZXMgdGVzdHMgdG8gZmFpbCBv
biBMZW9wYXJkIHdoaWNoIGV4cGVjdCBIVyBjb21wb3NpdGluZyB0byBiZSBkaXNhYmxlZC4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXdyaXRlLWRvY3R5cGUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50
L2RvY3VtZW50LXdyaXRlLWRvY3R5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NjExMykKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXdyaXRlLWRvY3R5cGUtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw5IEBAIGVuc3VyZSB0aGF0IGRv
Y3VtZW50Lm9wZW4gY2xlYXJzIHRoZSBkb2MKIFBBU1MgaWZyYW1lRG9jdW1lbnQgaXMgaWZyYW1l
LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQKIGRvY3VtZW50Lm9wZW4gc2hvdWxkIGFsc28gY2xlYXIg
dGhlIGRvY3VtZW50IGFuZCByZXNldCB0aGUgZG9jdHlwZSkKIFBBU1MgdHJlZUFzU3RyaW5nKGlm
cmFtZURvY3VtZW50KSBpcyAiI2RvY3VtZW50IgotUEFTUyBpZnJhbWVEb2N1bWVudC5jb21wYXRN
b2RlIGlzICJCYWNrQ29tcGF0IgotZG9jdW1lbnQud3JpdGUgb2YgIiIgc2hvdWxkIGxlYXZlIHRo
ZSBkb2N1bWVudCBpbiBxdWlya3Ntb2RlIGFuZCBhZGQgbm8gY29udGVudCB0byB0aGUgZG9jdW1l
bnQKLVBBU1MgaWZyYW1lRG9jdW1lbnQuY29tcGF0TW9kZSBpcyAiQmFja0NvbXBhdCIKK1BBU1Mg
aWZyYW1lRG9jdW1lbnQuY29tcGF0TW9kZSBpcyAiQ1NTMUNvbXBhdCIKK2RvY3VtZW50LndyaXRl
IG9mICIiIHNob3VsZCBsZWF2ZSB0aGUgZG9jdW1lbnQgaW4gbm8tcXVpcmtzIG1vZGUgYW5kIGFk
ZCBubyBjb250ZW50IHRvIHRoZSBkb2N1bWVudAorUEFTUyBpZnJhbWVEb2N1bWVudC5jb21wYXRN
b2RlIGlzICJDU1MxQ29tcGF0IgogUEFTUyB0cmVlQXNTdHJpbmcoaWZyYW1lRG9jdW1lbnQpIGlz
ICIjZG9jdW1lbnQiCiBkb2N1bWVudC53cml0ZSBjYWxscyBjYW4gY2hhbmdlIHRoZSBkb2N0eXBl
IHVudGlsIGFuIDxodG1sPiBpcyBjcmVhdGVkCiBQQVNTIGlmcmFtZURvY3VtZW50LmNvbXBhdE1v
ZGUgaXMgIkNTUzFDb21wYXQiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9z
Y3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtZG9jdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtZG9j
dHlwZS5qcwkocmV2aXNpb24gNjYxMTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVu
dC9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtZG9jdHlwZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtNDksMTEgKzQ5LDExIEBAIGRlYnVnKCJlbnN1cmUgdGhhdCBkb2N1bWVudC5vcGVuIGNsZWFy
cyAKIHNob3VsZEJlKCJpZnJhbWVEb2N1bWVudCIsICJpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1
bWVudCIpOwogZGVidWcoImRvY3VtZW50Lm9wZW4gc2hvdWxkIGFsc28gY2xlYXIgdGhlIGRvY3Vt
ZW50IGFuZCByZXNldCB0aGUgZG9jdHlwZSkiKQogc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0cmVl
QXNTdHJpbmcoaWZyYW1lRG9jdW1lbnQpIiwgIiNkb2N1bWVudCIpOwotc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJpZnJhbWVEb2N1bWVudC5jb21wYXRNb2RlIiwgIkJhY2tDb21wYXQiKTsKK3Nob3Vs
ZEJlRXF1YWxUb1N0cmluZygiaWZyYW1lRG9jdW1lbnQuY29tcGF0TW9kZSIsICJDU1MxQ29tcGF0
Iik7CiAKLWRlYnVnKCJkb2N1bWVudC53cml0ZSBvZiBcIlwiIHNob3VsZCBsZWF2ZSB0aGUgZG9j
dW1lbnQgaW4gcXVpcmtzbW9kZSBhbmQgYWRkIG5vIGNvbnRlbnQgdG8gdGhlIGRvY3VtZW50IikK
K2RlYnVnKCJkb2N1bWVudC53cml0ZSBvZiBcIlwiIHNob3VsZCBsZWF2ZSB0aGUgZG9jdW1lbnQg
aW4gbm8tcXVpcmtzIG1vZGUgYW5kIGFkZCBubyBjb250ZW50IHRvIHRoZSBkb2N1bWVudCIpCiBp
ZnJhbWVEb2N1bWVudC53cml0ZSgiIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoImlmcmFtZURv
Y3VtZW50LmNvbXBhdE1vZGUiLCAiQmFja0NvbXBhdCIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJpZnJhbWVEb2N1bWVudC5jb21wYXRNb2RlIiwgIkNTUzFDb21wYXQiKTsKIHNob3VsZEJlRXF1
YWxUb1N0cmluZygidHJlZUFzU3RyaW5nKGlmcmFtZURvY3VtZW50KSIsICIjZG9jdW1lbnQiKTsK
IAogZGVidWcoImRvY3VtZW50LndyaXRlIGNhbGxzIGNhbiBjaGFuZ2UgdGhlIGRvY3R5cGUgdW50
aWwgYW4gJmx0O2h0bWw+IGlzIGNyZWF0ZWQiKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>