<?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>71254</bug_id>
          
          <creation_ts>2011-10-31 17:00:26 -0700</creation_ts>
          <short_desc>Amend missing uses of LayoutUnit in RenderBlock</short_desc>
          <delta_ts>2011-11-02 10:28:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>493634</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-10-31 17:00:26 -0700</bug_when>
    <thetext>There are still numerous places in RenderBlock we&apos;re using ints where we should be using LayoutUnits. Correcting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493665</commentid>
    <comment_count>1</comment_count>
      <attachid>113114</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-10-31 17:31:13 -0700</bug_when>
    <thetext>Created attachment 113114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493669</commentid>
    <comment_count>2</comment_count>
      <attachid>113114</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-10-31 17:37:20 -0700</bug_when>
    <thetext>Comment on attachment 113114
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:115
&gt; +    m_positiveMargin = m_canCollapseMarginBeforeWithChildren ? block-&gt;maxPositiveMarginBefore() : LayoutUnit(0);

Explicit wrapping of zero makes me sad-faced. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494224</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-11-01 15:39:40 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 113114 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113114&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:115
&gt; &gt; +    m_positiveMargin = m_canCollapseMarginBeforeWithChildren ? block-&gt;maxPositiveMarginBefore() : LayoutUnit(0);
&gt; 
&gt; Explicit wrapping of zero makes me sad-faced. :(

Sadly it&apos;s needed for the ternary operator. Would a constant (something like LAYOUT_ZERO) be less ugly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494244</commentid>
    <comment_count>4</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 15:52:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 113114 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113114&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:115
&gt; &gt; +    m_positiveMargin = m_canCollapseMarginBeforeWithChildren ? block-&gt;maxPositiveMarginBefore() : LayoutUnit(0);
&gt; 
&gt; Explicit wrapping of zero makes me sad-faced. :(

We can also save these for our final patch, where we can just use LayoutUnit() if you prefer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494252</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-01 16:01:43 -0700</bug_when>
    <thetext>LayoutUnit::zero would probably read better to my eyes, even though that&apos;s more characters.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494257</commentid>
    <comment_count>6</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 16:05:05 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; LayoutUnit::zero would probably read better to my eyes, even though that&apos;s more characters.  :(

We can&apos;t do that with our typedef, unfortunately, but we can once we&apos;ve switched from ints. In the meantime, I think I&apos;ll just remove the wrapping and leave it for our branch integration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494262</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-01 16:10:20 -0700</bug_when>
    <thetext>I mean, it&apos;s trivial to convert from a typedef to a class if you feel that&apos;s holding you back. :)  But OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494265</commentid>
    <comment_count>8</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 16:12:43 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I mean, it&apos;s trivial to convert from a typedef to a class if you feel that&apos;s holding you back. :)  But OK.

I&apos;d much rather postpone this than switch to a class to represent the int base type :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494314</commentid>
    <comment_count>9</comment_count>
      <attachid>113259</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 17:01:19 -0700</bug_when>
    <thetext>Created attachment 113259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494340</commentid>
    <comment_count>10</comment_count>
      <attachid>113259</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-01 17:26:05 -0700</bug_when>
    <thetext>Comment on attachment 113259
Patch

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

Is numeric_limits&lt;LayoutUnit&gt;::max() ever actually the right/helpful value for LayoutUnit other than int?

&gt; Source/WebCore/rendering/RenderBlock.cpp:2503
&gt; +    // We don&apos;t want to had off painting in the line box tree with the accumulated error of the render tree, as this will cause

&quot;had off&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494342</commentid>
    <comment_count>11</comment_count>
      <attachid>113259</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 17:27:09 -0700</bug_when>
    <thetext>Comment on attachment 113259
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:2503
&gt;&gt; +    // We don&apos;t want to had off painting in the line box tree with the accumulated error of the render tree, as this will cause
&gt; 
&gt; &quot;had off&quot;?

&quot;hand off&quot;, thanks for the catch and the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494345</commentid>
    <comment_count>12</comment_count>
      <attachid>113263</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 17:29:29 -0700</bug_when>
    <thetext>Created attachment 113263
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494393</commentid>
    <comment_count>13</comment_count>
      <attachid>113263</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 18:33:31 -0700</bug_when>
    <thetext>Comment on attachment 113263
Patch for landing

Clearing flags on attachment: 113263

Committed r99024: &lt;http://trac.webkit.org/changeset/99024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494394</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 18:33:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494447</commentid>
    <comment_count>15</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-11-01 23:09:43 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 113259 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113259&amp;action=review
&gt; 
&gt; Is numeric_limits&lt;LayoutUnit&gt;::max() ever actually the right/helpful value for LayoutUnit other than int?


I missed your first comment about numeric_limits&lt;LayoutUnit&gt;. If you look at the subpixellayout branch or the patch on bug 71143, you&apos;ll see I actually implemented the numeric_limits struct for AppUnit, which is what we&apos;re aiming to replace ints with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494707</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 10:28:03 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #10)
&gt; &gt; Is numeric_limits&lt;LayoutUnit&gt;::max() ever actually the right/helpful value for LayoutUnit other than int?
&gt; 
&gt; I missed your first comment about numeric_limits&lt;LayoutUnit&gt;. If you look at the subpixellayout branch or the patch on bug 71143, you&apos;ll see I actually implemented the numeric_limits struct for AppUnit, which is what we&apos;re aiming to replace ints with.

I don’t think the standard allows specializing numeric_limits for non-built-in types, but it might work with most compilers we deal with now. There are other solutions that don’t require non-standard code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113114</attachid>
            <date>2011-10-31 17:31:13 -0700</date>
            <delta_ts>2011-11-01 17:01:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71254-20111031173112.patch</filename>
            <type>text/plain</type>
            <size>30436</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTIwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMTAtMzEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFtZW5kIG1pc3NpbmcgdXNl
cyBvZiBMYXlvdXRVbml0IGluIFJlbmRlckJsb2NrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaGluZyByZWxldmFudCB1c2VzIG9mIGludGVnZXJz
IGluIFJlbmRlckJsb2NrIHRvIExheW91dFVuaXRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAt
LSBubyBjaGFuZ2VzIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJn
aW5JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjbGlwT3V0UG9z
aXRpb25lZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZs
b2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0RmxvYXRM
b2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmdldENs
ZWFyRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdF
ZGl0aW5nQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2FsY0Nv
bHVtbldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGVpZ2h0Rm9yTGluZUNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBh
Z2luYXRpb25TdHJ1dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxl
TG9naWNhbFdpZHRoRm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
RmxvYXRXaXRoUmVjdDo6RmxvYXRXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6TWFyZ2luSW5mbzo6c2V0UG9zaXRpdmVNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86OnNldE5lZ2F0aXZlTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpzZXRQb3NpdGl2ZU1hcmdpbklmTGFyZ2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpzZXROZWdhdGl2
ZU1hcmdpbklmTGFyZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5J
bmZvOjpzZXRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0SW50
ZXJ2YWxTZWFyY2hBZGFwdGVyOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6Omxvd1Zh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNo
QWRhcHRlcjo6aGlnaFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5k
ZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2lu
QmVmb3JlRGVmYXVsdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6UmVuZGVyQmxv
Y2tSYXJlRGF0YTo6cG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJE
ZWZhdWx0KToKKwogMjAxMS0xMC0yOCAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBDb25uZWN0IENDVGhyZWFkUHJveHkgdG8gRnJhbWVSYXRlQ29u
dHJvbGxlciBhbmQgU2NoZWR1bGVyU3RhdGVNYWNoaW5lIHZpYSBDQ1NjaGVkdWxlcgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5ODg5MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiw4ICsxMTIsOCBAQCBSZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5m
byhSZW5kCiAgICAgbV9xdWlya0NvbnRhaW5lciA9IGJsb2NrLT5pc1RhYmxlQ2VsbCgpIHx8IGJs
b2NrLT5pc0JvZHkoKSB8fCBibG9jay0+c3R5bGUoKS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9
PSBNRElTQ0FSRCB8fCAKICAgICAgICAgYmxvY2stPnN0eWxlKCktPm1hcmdpbkFmdGVyQ29sbGFw
c2UoKSA9PSBNRElTQ0FSRDsKIAotICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNl
TWFyZ2luQmVmb3JlV2l0aENoaWxkcmVuID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3Jl
KCkgOiAwOwotICAgIG1fbmVnYXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3Jl
V2l0aENoaWxkcmVuID8gYmxvY2stPm1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiAwOworICAg
IG1fcG9zaXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVu
ID8gYmxvY2stPm1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRVbml0KDApOworICAg
IG1fbmVnYXRpdmVNYXJnaW4gPSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVu
ID8gYmxvY2stPm1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBMYXlvdXRVbml0KDApOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0x
MjQxLDcgKzEyNDEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
CiAgICAgICAgIC8vIGVmZmVjdGl2ZWx5IGNsYW1wZWQgdG8gb3VyIHJlZ2lvbiByYW5nZS4KICAg
ICAgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSAgbG9naWNhbEhlaWdodCgpOwogICAgICAgICBM
YXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wKCk7Ci0gICAgICAgIHNldExvZ2lj
YWxIZWlnaHQoSU5UX01BWCAvIDIpOyAKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodChudW1lcmlj
X2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCkgLyAyKTsgCiAgICAgICAgIGNvbXB1dGVMb2dpY2Fs
SGVpZ2h0KCk7CiAgICAgICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+c2V0UmVnaW9u
UmFuZ2VGb3JCb3godGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKICAg
ICAgICAgc2V0TG9naWNhbEhlaWdodChvbGRIZWlnaHQpOwpAQCAtMTUyOSw3ICsxNTI5LDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayhjbwogICAgIC8vIGZvciBieSBz
aW1wbHkgY2FsbGluZyBjYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUuICBTZWUKICAgICAvLyBo
dHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxvY2svbWFyZ2luLWNvbGxh
cHNlLzA0Ni5odG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhpcyBzY2VuYXJpby4KLSAg
ICBMYXlvdXRVbml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFy
Z2luQmVmb3JlKCkgPyAwIDogbWFyZ2luSW5mby5tYXJnaW4oKTsKKyAgICBMYXlvdXRVbml0IG1h
cmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgPyBM
YXlvdXRVbml0KDApIDogbWFyZ2luSW5mby5tYXJnaW4oKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0
KGxvZ2ljYWxIZWlnaHQoKSArIG1hcmdpbk9mZnNldCk7CiAgICAgcG9zaXRpb25OZXdGbG9hdHMo
KTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSAtIG1hcmdpbk9mZnNldCk7
CkBAIC0xNzI0LDcgKzE3MjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1h
cmdpbnMoCiAgICAgcmV0dXJuIGxvZ2ljYWxUb3A7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbywgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbiwgaW50IHlQ
b3MpCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJv
eCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVuaXQgb2xkVG9wUG9zTWFy
Z2luLCBMYXlvdXRVbml0IG9sZFRvcE5lZ01hcmdpbiwgTGF5b3V0VW5pdCB5UG9zKQogewogICAg
IExheW91dFVuaXQgaGVpZ2h0SW5jcmVhc2UgPSBnZXRDbGVhckRlbHRhKGNoaWxkLCB5UG9zKTsK
ICAgICBpZiAoIWhlaWdodEluY3JlYXNlKQpAQCAtMjEzNSw4ICsyMTM1LDYgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICAgICAgc2V0TG9naWNhbEhl
aWdodChuZXdIZWlnaHQpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdG8gdXNlIHJv
dWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LgotICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICBBU1NFUlQob2xkTGF5b3V0
RGVsdGEgPT0gdmlldygpLT5sYXlvdXREZWx0YSgpKTsKIH0KIApAQCAtMjM4OCwxMiArMjM4Niwx
MyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKFBhaW50CiAKICAgICBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwogICAgIHVuc2lnbmVkIGNvbENvdW50ID0g
Y29sdW1uQ291bnQoY29sSW5mbyk7CisKICAgICBib29sIGFudGlhbGlhcyA9IHNob3VsZEFudGlh
bGlhc0xpbmVzKHBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIGlmIChjb2xJbmZvLT5wcm9ncmVz
c2lvbkF4aXMoKSA9PSBDb2x1bW5JbmZvOjpJbmxpbmVBeGlzKSB7Ci0gICAgICAgIExheW91dFVu
aXQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gMCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjdXJy
TG9naWNhbExlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBM
YXlvdXRVbml0KDApIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0
IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBydWxlTG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyAwIDogY29udGVudExvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHJ1bGVMb2dp
Y2FsTGVmdCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExheW91dFVuaXQo
MCkgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgaW5saW5lRGly
ZWN0aW9uU2l6ZSA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOwogICAgICAgICBCb3hT
aWRlIGJveFNpZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpCiAgICAgICAgICAgICA/IHN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJTTGVmdCA6IEJTUmlnaHQKQEAgLTI1
MDEsMTAgKzI1MDAsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludElu
ZgogICAgIGlmIChkb2N1bWVudCgpLT5kaWRMYXlvdXRXaXRoUGVuZGluZ1N0eWxlc2hlZXRzKCkg
JiYgIWlzUmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBXZSBkb24ndCB3
YW50IHRvIGhhZCBvZmYgcGFpbnRpbmcgaW4gdGhlIGxpbmUgYm94IHRyZWUgd2l0aCB0aGUgYWNj
dW11bGF0ZWQgZXJyb3Igb2YgdGhlIHJlbmRlciB0cmVlLCBhcyB0aGlzIHdpbGwgY2F1c2UKKyAg
ICAvLyB1cyB0byBtZXNzIHVwIHBhaW50aW5nIGFsaWduZWQgdGhpbmdzIChzdWNoIGFzIHVuZGVy
bGluZXMgaW4gdGV4dCkgd2l0aCBib3RoIHRoZSByZW5kZXIgdHJlZSBhbmQgbGluZSBib3ggdHJl
ZSdzIGVycm9yLgorICAgIExheW91dFBvaW50IHJvdW5kZWRQYWludE9mZnNldCA9IHJvdW5kZWRJ
bnRQb2ludChwYWludE9mZnNldCk7CiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAg
IG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgICAg
ICBtX2xpbmVCb3hlcy5wYWludCh0aGlzLCBwYWludEluZm8sIHJvdW5kZWRQYWludE9mZnNldCk7
CiAgICAgZWxzZQotICAgICAgICBwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OworICAgICAgICBwYWludENoaWxkcmVuKHBhaW50SW5mbywgcm91bmRlZFBhaW50T2Zmc2V0KTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMjg5NCw3ICsyODk2LDcgQEAg
c3RhdGljIHZvaWQgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKGNvbgogICAgIFJlbmRlckJsb2Nr
OjpQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwb3Np
dGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJCbG9jazo6UG9zaXRpb25lZE9i
amVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJlbmRlckJveCogciA9ICppdDsK
LSAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KExheW91dFJlY3Qob2Zmc2V0Lngo
KSArIHItPngoKSwgb2Zmc2V0LnkoKSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkp
KTsKKyAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KEludFJlY3Qob2Zmc2V0Lngo
KSArIHItPngoKSwgb2Zmc2V0LnkoKSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkp
KTsKICAgICB9CiB9CiAKQEAgLTMyOTYsMTIgKzMyOTgsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cmVtb3ZlRmxvYXRpbmdPYmplY3QoUgogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCkpIHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAg
ICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChyKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKTsKKyAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQocik7CisgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpOwog
CiAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQ5OTUuCi0gICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b20gPCAw
IHx8IGxvZ2ljYWxCb3R0b20gPCBsb2dpY2FsVG9wIHx8IGxvZ2ljYWxUb3AgPT0gbnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJv
dHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNhbFRvcCA9PSBu
dW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCkpCisgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCk7CiAgICAgICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSB6ZXJv
LSBhbmQgbGVzcy10aGFuLXplcm8taGVpZ2h0IGZsb2F0czogdGhvc2UgZG9uJ3QgdG91Y2gKICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpbmUgdGhhdCB0aGV5J3JlIG9uLCBidXQgaXQgc3Rp
bGwgbmVlZHMgdG8gYmUgZGlydGllZC4gVGhpcyBpcwpAQCAtMzY5MCw3ICszNjkyLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbAogICAgICAgICAgICAgYm90dG9t
ID0gbWluKGZsb2F0Qm90dG9tLCBib3R0b20pOwogICAgIH0KIAotICAgIHJldHVybiBib3R0b20g
PT0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpID8gbG9naWNhbEhlaWdodCA6IGJv
dHRvbTsKKyAgICByZXR1cm4gYm90dG9tID09IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+Ojpt
YXgoKSA/IExheW91dFVuaXQoMCkgOiBib3R0b207CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5
cGUpIGNvbnN0CkBAIC00MDc1LDcgKzQwNzcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpn
ZXRDbGVhckRlbHRhKFJlCiAgICAgfQogCiAgICAgLy8gV2UgYWxzbyBjbGVhciBmbG9hdHMgaWYg
d2UgYXJlIHRvbyBiaWcgdG8gc2l0IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBmbG9hdCAoYW5kIHdp
c2ggdG8gYXZvaWQgZmxvYXRzIGJ5IGRlZmF1bHQpLgotICAgIExheW91dFVuaXQgcmVzdWx0ID0g
Y2xlYXJTZXQgPyBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbEJvdHRvbSAtIGxvZ2ljYWxUb3Ap
IDogMDsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4PExheW91dFVuaXQ+
KDAsIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6IExheW91dFVuaXQoMCk7CiAgICAgaWYg
KCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7CiAgICAgICAgIExheW91dFVuaXQg
bmV3TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3A7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CkBAIC00
MzEyLDcgKzQzMTQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRS
CiAgICAgaWYgKGNoaWxkLT5pc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgY2hpbGRMb2NhdGlv
biArPSBjaGlsZC0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHdyb25nIGlmIHRoZSBjaGlsZCdzIHdyaXRpbmctbW9kZSBpcyBkaWZmZXJlbnQgZnJvbSB0
aGUgcGFyZW50J3MuCi0gICAgTGF5b3V0UG9pbnQgcG9pbnRJbkNoaWxkQ29vcmRpbmF0ZXMocG9p
bnRJblBhcmVudENvb3JkaW5hdGVzIC0gY2hpbGRMb2NhdGlvbik7CisgICAgTGF5b3V0UG9pbnQg
cG9pbnRJbkNoaWxkQ29vcmRpbmF0ZXModG9MYXlvdXRQb2ludChwb2ludEluUGFyZW50Q29vcmRp
bmF0ZXMgLSBjaGlsZExvY2F0aW9uKSk7CiAKICAgICAvLyBJZiB0aGlzIGlzIGFuIGFub255bW91
cyByZW5kZXJlciwgd2UganVzdCByZWN1ciBub3JtYWxseQogICAgIE5vZGUqIGNoaWxkTm9kZSA9
IGNoaWxkLT5ub2RlKCk7CkBAIC00NDc2LDggKzQ0NzgsOSBAQCBpbnQgUmVuZGVyQmxvY2s6OmNv
bHVtbkdhcCgpIGNvbnN0CiB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQ29sdW1uV2lkdGgoKQogeyAg
ICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGNvbHVtbiB3aWR0aCBhbmQgY29sdW1uIGNvdW50Lgor
ICAgIC8vIEZJWE1FOiBDYW4gb3ZlcmZsb3cgb24gZmFzdC9ibG9jay9mbG9hdC9mbG9hdC1ub3Qt
cmVtb3ZlZC1mcm9tLW5leHQtc2libGluZzQuaHRtbCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODc0NAogICAgIHVuc2lnbmVkIGRlc2lyZWRDb2x1bW5Db3Vu
dCA9IDE7Ci0gICAgaW50IGRlc2lyZWRDb2x1bW5XaWR0aCA9IGNvbnRlbnRMb2dpY2FsV2lkdGgo
KTsKKyAgICBMYXlvdXRVbml0IGRlc2lyZWRDb2x1bW5XaWR0aCA9IGNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKICAgICAKICAgICAvLyBGb3Igbm93LCB3ZSBkb24ndCBzdXBwb3J0IG11bHRpLWNvbHVt
biBsYXlvdXRzIHdoZW4gcHJpbnRpbmcsIHNpbmNlIHdlIGhhdmUgdG8gZG8gYSBsb3Qgb2Ygd29y
ayBmb3IgcHJvcGVyIHBhZ2luYXRpb24uCiAgICAgaWYgKGRvY3VtZW50KCktPnBhZ2luYXRlZCgp
IHx8IChzdHlsZSgpLT5oYXNBdXRvQ29sdW1uQ291bnQoKSAmJiBzdHlsZSgpLT5oYXNBdXRvQ29s
dW1uV2lkdGgoKSkgfHwgIXN0eWxlKCktPmhhc0lubGluZUNvbHVtbkF4aXMoKSkgewpAQCAtNDQ4
NSwxOSArNDQ4OCwxOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQ29sdW1uV2lkdGgoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBpbnQgYXZhaWxXaWR0aCA9IGRlc2ly
ZWRDb2x1bW5XaWR0aDsKLSAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7Ci0gICAgaW50IGNv
bFdpZHRoID0gbWF4KDEsIHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Y29sdW1uV2lkdGgoKSkp
OwotICAgIGludCBjb2xDb3VudCA9IG1heCgxLCBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlKCktPmNv
bHVtbkNvdW50KCkpKTsKKyAgICBMYXlvdXRVbml0IGF2YWlsV2lkdGggPSBkZXNpcmVkQ29sdW1u
V2lkdGg7CisgICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKKyAgICBMYXlvdXRV
bml0IGNvbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDEsIExheW91dFVuaXQoc3R5bGUoKS0+Y29s
dW1uV2lkdGgoKSkpOworICAgIGludCBjb2xDb3VudCA9IG1heDxpbnQ+KDEsIHN0eWxlKCktPmNv
bHVtbkNvdW50KCkpOwogCiAgICAgaWYgKHN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgpICYm
ICFzdHlsZSgpLT5oYXNBdXRvQ29sdW1uQ291bnQoKSkgewogICAgICAgICBkZXNpcmVkQ29sdW1u
Q291bnQgPSBjb2xDb3VudDsKLSAgICAgICAgZGVzaXJlZENvbHVtbldpZHRoID0gbWF4PGludD4o
MCwgKGF2YWlsV2lkdGggLSAoKGRlc2lyZWRDb2x1bW5Db3VudCAtIDEpICogY29sR2FwKSkgLyBk
ZXNpcmVkQ29sdW1uQ291bnQpOworICAgICAgICBkZXNpcmVkQ29sdW1uV2lkdGggPSBtYXg8TGF5
b3V0VW5pdD4oMCwgKGF2YWlsV2lkdGggLSAoKGRlc2lyZWRDb2x1bW5Db3VudCAtIDEpICogY29s
R2FwKSkgLyBkZXNpcmVkQ29sdW1uQ291bnQpOwogICAgIH0gZWxzZSBpZiAoIXN0eWxlKCktPmhh
c0F1dG9Db2x1bW5XaWR0aCgpICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5Db3VudCgpKSB7Ci0g
ICAgICAgIGRlc2lyZWRDb2x1bW5Db3VudCA9IG1heDxpbnQ+KDEsIChmbG9hdCkoYXZhaWxXaWR0
aCArIGNvbEdhcCkgLyAoY29sV2lkdGggKyBjb2xHYXApKTsKKyAgICAgICAgZGVzaXJlZENvbHVt
bkNvdW50ID0gbWF4PExheW91dFVuaXQ+KDEsIChhdmFpbFdpZHRoICsgY29sR2FwKSAvIChjb2xX
aWR0aCArIGNvbEdhcCkpOwogICAgICAgICBkZXNpcmVkQ29sdW1uV2lkdGggPSAoKGF2YWlsV2lk
dGggKyBjb2xHYXApIC8gZGVzaXJlZENvbHVtbkNvdW50KSAtIGNvbEdhcDsKICAgICB9IGVsc2Ug
ewotICAgICAgICBkZXNpcmVkQ29sdW1uQ291bnQgPSBtYXgobWluPGludD4oY29sQ291bnQsIChm
bG9hdCkoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyAoY29sV2lkdGggKyBjb2xHYXApKSwgMSk7Cisg
ICAgICAgIGRlc2lyZWRDb2x1bW5Db3VudCA9IG1heDxMYXlvdXRVbml0PihtaW48TGF5b3V0VW5p
dD4oY29sQ291bnQsIChhdmFpbFdpZHRoICsgY29sR2FwKSAvIChjb2xXaWR0aCArIGNvbEdhcCkp
LCAxKTsKICAgICAgICAgZGVzaXJlZENvbHVtbldpZHRoID0gKChhdmFpbFdpZHRoICsgY29sR2Fw
KSAvIGRlc2lyZWRDb2x1bW5Db3VudCkgLSBjb2xHYXA7CiAgICAgfQogICAgIHNldERlc2lyZWRD
b2x1bW5Db3VudEFuZFdpZHRoKGRlc2lyZWRDb2x1bW5Db3VudCwgZGVzaXJlZENvbHVtbldpZHRo
KTsKQEAgLTQ1ODIsNyArNDU4NSw3IEBAIExheW91dFJlY3QgUmVuZGVyQmxvY2s6OmNvbHVtblJl
Y3RBdChDb2wKICAgICByZXR1cm4gTGF5b3V0UmVjdChjb2xMb2dpY2FsVG9wLCBjb2xMb2dpY2Fs
TGVmdCwgY29sTG9naWNhbEhlaWdodCwgY29sTG9naWNhbFdpZHRoKTsKIH0KIAotYm9vbCBSZW5k
ZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0
LCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYgc3RhdGVQdXNo
ZXIpCitib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFn
ZUxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0YXRl
TWFpbnRhaW5lciYgc3RhdGVQdXNoZXIpCiB7CiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1OTgsMTMgKzQ2MDEsMTMgQEAgYm9vbCBSZW5kZXJCbG9j
azo6bGF5b3V0Q29sdW1ucyhib29sIGhhcwogICAgICAgICAgICAgLy8gVGhlIGZvcmNlZCBwYWdl
IGJyZWFrcyBhcmUgaW4gY29udHJvbCBvZiB0aGUgYmFsYW5jaW5nLiAgSnVzdCBzZXQgdGhlIGNv
bHVtbiBoZWlnaHQgdG8gdGhlCiAgICAgICAgICAgICAvLyBtYXhpbXVtIHBhZ2UgYnJlYWsgZGlz
dGFuY2UuCiAgICAgICAgICAgICBpZiAoIXBhZ2VMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXgoY29sSW5mby0+bWF4
aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9n
aWNhbE9mZnNldChib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCkpIC0gY29sSW5mby0+Zm9yY2VkQnJlYWtPZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXg8TGF5b3V0VW5pdD4o
Y29sSW5mby0+bWF4aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxPZmZzZXQoYm9yZGVyQmVmb3JlKCkg
KyBwYWRkaW5nQmVmb3JlKCkgKyBjb250ZW50TG9naWNhbEhlaWdodCgpKSAtIGNvbEluZm8tPmZv
cmNlZEJyZWFrT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGNvbHVtbkhlaWdodCA9IG1heChj
b2xJbmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0KCksIGRpc3RhbmNlQmV0d2VlbkJyZWFrcyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudExvZ2ljYWxIZWlnaHQoKSA+
IHBhZ2VMb2dpY2FsSGVpZ2h0ICogZGVzaXJlZENvbHVtbkNvdW50KSB7CiAgICAgICAgICAgICAv
LyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLCB3
ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVtLgotICAgICAgICAgICAgY29sdW1uSGVpZ2h0ID0gbWF4
KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgY2VpbGVkTGF5b3V0VW5pdCgoZmxvYXQp
Y29udGVudExvZ2ljYWxIZWlnaHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOworICAgICAgICAg
ICAgY29sdW1uSGVpZ2h0ID0gbWF4PExheW91dFVuaXQ+KGNvbEluZm8tPm1pbmltdW1Db2x1bW5I
ZWlnaHQoKSwgY2VpbGYoKGZsb2F0KWNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgLyBkZXNpcmVkQ29s
dW1uQ291bnQpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbHVtbkhlaWdo
dCAmJiBjb2x1bW5IZWlnaHQgIT0gcGFnZUxvZ2ljYWxIZWlnaHQpIHsKQEAgLTQ3MjMsNyArNDcy
Niw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1bW5zKEwKIAogICAgIExh
eW91dFVuaXQgc3RhcnRPZmZzZXQgPSBtYXgoaXNIb3Jpem9udGFsID8gci55KCkgOiByLngoKSwg
YmVmb3JlQm9yZGVyUGFkZGluZyk7CiAgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXQgPSBtaW48TGF5
b3V0VW5pdD4oaXNIb3Jpem9udGFsID8gci5tYXhZKCkgOiByLm1heFgoKSwgYmVmb3JlQm9yZGVy
UGFkZGluZyArIGNvbENvdW50ICogY29sSGVpZ2h0KTsKLSAgICAKKworICAgIC8vIEZJWE1FOiBD
YW4gb3ZlcmZsb3cgb24gZmFzdC9ibG9jay9mbG9hdC9mbG9hdC1ub3QtcmVtb3ZlZC1mcm9tLW5l
eHQtc2libGluZzQuaHRtbCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODc0NAogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gKHN0YXJ0T2Zmc2V0IC0gYmVm
b3JlQm9yZGVyUGFkZGluZykgLyBjb2xIZWlnaHQ7CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0g
KGVuZE9mZnNldCAtIGJlZm9yZUJvcmRlclBhZGRpbmcpIC8gY29sSGVpZ2h0OwogCkBAIC00NzMz
LDYgKzQ3MzcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhMCiAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSBsb2dpY2FsTGVmdE9mZnNldEZv
ckNvbnRlbnQoKTsKICAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNv
bEluZm8sIHN0YXJ0Q29sdW1uKTsKICAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHI7
CisKICAgICAgICAgaWYgKGNvbEluZm8tPnByb2dyZXNzaW9uQXhpcygpID09IENvbHVtbkluZm86
OklubGluZUF4aXMpIHsKICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCiAgICAgICAgICAg
ICAgICAgcmVwYWludFJlY3QubW92ZShjb2xSZWN0LngoKSAtIGxvZ2ljYWxMZWZ0T2Zmc2V0LCAt
IHN0YXRpY19jYXN0PGludD4oc3RhcnRDb2x1bW4pICogY29sSGVpZ2h0KTsKQEAgLTQ5OTgsNyAr
NTAwMyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWQKICAgICBm
bG9hdCBpbmxpbmVNaW4gPSAwOwogCiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9
IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIExheW91dFVuaXQgY3cgPSBjb250YWluaW5n
QmxvY2sgPyBjb250YWluaW5nQmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IDA7CisgICAg
TGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9jay0+Y29udGVu
dExvZ2ljYWxXaWR0aCgpIDogTGF5b3V0VW5pdCgwKTsKIAogICAgIC8vIElmIHdlIGFyZSBhdCB0
aGUgc3RhcnQgb2YgYSBsaW5lLCB3ZSB3YW50IHRvIGlnbm9yZSBhbGwgd2hpdGUtc3BhY2UuCiAg
ICAgLy8gQWxzbyBzdHJpcCBzcGFjZXMgaWYgd2UgcHJldmlvdXNseSBoYWQgdGV4dCB0aGF0IGVu
ZGVkIGluIGEgdHJhaWxpbmcgc3BhY2UuCkBAIC01NDM3LDcgKzU0NDIsNyBAQCBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uCiAgICAgICAgIGJvb2wgaWdub3JlQmFzZWxp
bmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9y
aXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5z
Y3JvbGxZT2Zmc2V0KCkgIT0gMCkKICAgICAgICAgICAgIDogKGxheWVyKCktPmhvcml6b250YWxT
Y3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxYT2Zmc2V0KCkgIT0gMCkpKSkgfHwgKGlzV3Jp
dGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKICAgICAgICAgCi0gICAgICAgIGludCBi
YXNlbGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gLTEgOiBsYXN0TGluZUJveEJhc2VsaW5lKCk7
CisgICAgICAgIGludCBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gTGF5b3V0VW5pdCgt
MSkgOiBsYXN0TGluZUJveEJhc2VsaW5lKCk7CiAgICAgICAgIAogICAgICAgICBpbnQgYm90dG9t
T2ZDb250ZW50ID0gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gYm9yZGVyVG9wKCkgKyBw
YWRkaW5nVG9wKCkgKyBjb250ZW50SGVpZ2h0KCkgOiBib3JkZXJSaWdodCgpICsgcGFkZGluZ1Jp
Z2h0KCkgKyBjb250ZW50V2lkdGgoKTsKICAgICAgICAgaWYgKGJhc2VsaW5lUG9zICE9IC0xICYm
IGJhc2VsaW5lUG9zIDw9IGJvdHRvbU9mQ29udGVudCkKQEAgLTU3OTQsNyArNTc5OSw3IEBAIHN0
YXRpYyBpbnQgZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KFJlbmRlckIKICAgICAgICAgaWYgKGJsb2Nr
LT5jaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGJv
eCA9IGJsb2NrLT5maXJzdFJvb3RCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRSb290Qm94KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoKytjb3VudCA9PSBsKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYm94LT5saW5lQm90dG9tKCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9y
ZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IDApOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYm94LT5saW5lQm90dG9tKCkgKyAoaW5jbHVkZUJvdHRvbSA/IChibG9j
ay0+Ym9yZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0JvdHRvbSgpKSA6IExheW91dFVuaXQo
MCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtNTgwMyw3
ICs1ODA4LDcgQEAgc3RhdGljIGludCBnZXRIZWlnaHRGb3JMaW5lQ291bnQoUmVuZGVyQgogICAg
ICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja0xpbmVzKG9iaikpIHsKICAgICAgICAgICAgICAg
ICAgICAgaW50IHJlc3VsdCA9IGdldEhlaWdodEZvckxpbmVDb3VudCh0b1JlbmRlckJsb2NrKG9i
aiksIGwsIGZhbHNlLCBjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0g
LTEpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgb2JqLT55KCkgKyAo
aW5jbHVkZUJvdHRvbSA/IChibG9jay0+Ym9yZGVyQm90dG9tKCkgKyBibG9jay0+cGFkZGluZ0Jv
dHRvbSgpKSA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9i
ai0+eSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsgYmxvY2st
PnBhZGRpbmdCb3R0b20oKSkgOiBMYXlvdXRVbml0KDApKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoIW9iai0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYm
ICFvYmotPmlzUnVuSW4oKSkKICAgICAgICAgICAgICAgICAgICAgbm9ybWFsRmxvd0NoaWxkV2l0
aG91dExpbmVzID0gb2JqOwpAQCAtNTk1Myw3ICs1OTU4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
c2V0TWF4TWFyZ2luQWZ0ZXJWYWx1ZQogICAgIG1fcmFyZURhdGEtPm1fbWFyZ2lucy5zZXROZWdh
dGl2ZU1hcmdpbkFmdGVyKG5lZyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNldFBhZ2luYXRp
b25TdHJ1dChpbnQgc3RydXQpCit2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQo
TGF5b3V0VW5pdCBzdHJ1dCkKIHsKICAgICBpZiAoIW1fcmFyZURhdGEpIHsKICAgICAgICAgaWYg
KCFzdHJ1dCkKQEAgLTYyODQsNyArNjI4OSw3IEBAIHN0YXRpYyBib29sIGluTm9ybWFsRmxvdyhS
ZW5kZXJCb3gqIGNoaWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjph
cHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCBsb2dpY2FsT2Zmc2V0KQorTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6YXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBM
YXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpCiB7CiAgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFr
IGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tD
b2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMo
KTsKQEAgLTYzMDAsNyArNjMwNSw3IEBAIGludCBSZW5kZXJCbG9jazo6YXBwbHlCZWZvcmVCcmVh
ayhSZW5kZXIKICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsKIH0KIAotaW50IFJlbmRlckJsb2Nr
OjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQsIE1h
cmdpbkluZm8mIG1hcmdpbkluZm8pCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUFmdGVy
QnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBNYXJnaW5J
bmZvJiBtYXJnaW5JbmZvKQogewogICAgIC8vIEZJWE1FOiBBZGQgcGFnZSBicmVhayBjaGVja2lu
ZyBoZXJlIHdoZW4gd2Ugc3VwcG9ydCBwcmludGluZy4KICAgICBib29sIGNoZWNrQ29sdW1uQnJl
YWtzID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRpbmdDb2x1bW5zKCk7CkBAIC02
MzUwLDcgKzYzNTUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0
CiAgICAgICAgIHx8IGNoaWxkLT5zdHlsZSgpLT5yZWdpb25CcmVha0luc2lkZSgpID09IFBCQVZP
SUQ7CiAgICAgaWYgKCFpc1Vuc3BsaXR0YWJsZSkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZz
ZXQ7Ci0gICAgTGF5b3V0VW5pdCBjaGlsZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Rm9y
Q2hpbGQoY2hpbGQpICsgKGluY2x1ZGVNYXJnaW5zID8gbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hp
bGQpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChjaGlsZCkgOiAwKTsKKyAgICBMYXlvdXRVbml0IGNo
aWxkTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkgKyAoaW5jbHVk
ZU1hcmdpbnMgPyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgKyBtYXJnaW5BZnRlckZvckNo
aWxkKGNoaWxkKSA6IExheW91dFVuaXQoMCkpOwogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0
ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKICAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1u
SW5mbykKICAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNv
bHVtbkhlaWdodChjaGlsZExvZ2ljYWxIZWlnaHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDk4ODkxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBw
dWJsaWM6CiAgICAgLy8gY29tcHV0ZSB0aGUgcmVnaW9uIGFsbCBvdmVyIGFnYWluIHdoZW4geW91
IGFscmVhZHkga25vdyBpdC4KICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZv
ckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUsIFJlbmRlclJlZ2lvbiog
cmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gbWF4KDAsIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUo
cG9zaXRpb24sIGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlKQorICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNl
dEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRmlyc3RQYWdlKQogICAgICAgICAgICAgLSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9z
aXRpb24sIGZpcnN0TGluZSwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlv
dXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QgCkBAIC0yMzAs
OCArMjMwLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KENvbHVtbkluZm8q
KSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiwgdW5zaWdu
ZWQpIGNvbnN0OwogCi0gICAgaW50IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA6IDA7IH0KLSAgICB2b2lk
IHNldFBhZ2luYXRpb25TdHJ1dChpbnQpOworICAgIExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0
cnV0IDogMDsgfQorICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KExheW91dFVuaXQpOwogICAg
IAogICAgIC8vIFRoZSBwYWdlIGxvZ2ljYWwgb2Zmc2V0IGlzIHRoZSBvYmplY3QncyBvZmZzZXQg
ZnJvbSB0aGUgdG9wIG9mIHRoZSBwYWdlIGluIHRoZSBwYWdlIHByb2dyZXNzaW9uCiAgICAgLy8g
ZGlyZWN0aW9uIChzbyBhbiB4LW9mZnNldCBpbiB2ZXJ0aWNhbCB0ZXh0IGFuZCBhIHktb2Zmc2V0
IGZvciBob3Jpem9udGFsIHRleHQpLgpAQCAtMjk2LDcgKzI5Niw3IEBAIHB1YmxpYzoKICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5
b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdp
b24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKICAg
ICB7IAotICAgICAgICByZXR1cm4gbWF4KDAsIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQo
cmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSAtCisgICAgICAgIHJldHVy
biBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24s
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0KICAgICAgICAgICAgIGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UpKTsgfQogICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lv
biogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNv
bnN0CiAgICAgewpAQCAtNDc2LDEzICs0NzYsMTMgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgRmxv
YXRXaXRoUmVjdCB7CiAgICAgICAgIEZsb2F0V2l0aFJlY3QoUmVuZGVyQm94KiBmKQogICAgICAg
ICAgICAgOiBvYmplY3QoZikKLSAgICAgICAgICAgICwgcmVjdChJbnRSZWN0KGYtPngoKSAtIGYt
Pm1hcmdpbkxlZnQoKSwgZi0+eSgpIC0gZi0+bWFyZ2luVG9wKCksIGYtPndpZHRoKCkgKyBmLT5t
YXJnaW5MZWZ0KCkgKyBmLT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRv
cCgpICsgZi0+bWFyZ2luQm90dG9tKCkpKQorICAgICAgICAgICAgLCByZWN0KExheW91dFJlY3Qo
Zi0+eCgpIC0gZi0+bWFyZ2luTGVmdCgpLCBmLT55KCkgLSBmLT5tYXJnaW5Ub3AoKSwgZi0+d2lk
dGgoKSArIGYtPm1hcmdpbkxlZnQoKSArIGYtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsg
Zi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSkpCiAgICAgICAgICAgICAsIGV2ZXJI
YWRMYXlvdXQoZi0+bV9ldmVySGFkTGF5b3V0KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAg
ICAgICBSZW5kZXJCb3gqIG9iamVjdDsKLSAgICAgICAgSW50UmVjdCByZWN0OworICAgICAgICBM
YXlvdXRSZWN0IHJlY3Q7CiAgICAgICAgIGJvb2wgZXZlckhhZExheW91dDsKICAgICB9OwogCkBA
IC01NzQsNiArNTc0LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0Rm9y
RmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPngoKSA6IGNoaWxkLT55KCk7IH0KICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkg
Y29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5tYXhYKCkg
OiBjaGlsZC0+bWF4WSgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhGb3JGbG9hdChj
b25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQorCiAgICAg
dm9pZCBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGNoaWxkLCBMYXlvdXRV
bml0IGxvZ2ljYWxUb3ApCiAgICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKQEAgLTc2OSw3ICs3NzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgb2Zmc2V0Rm9yQ29u
dGVudHMoTGF5b3V0UG9pbnQmKSBjb25zdDsKIAogICAgIHZvaWQgY2FsY0NvbHVtbldpZHRoKCk7
Ci0gICAgYm9vbCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWln
aHQsIGludCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJik7CisgICAg
Ym9vbCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIExh
eW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYpOwogICAg
IHZvaWQgbWFrZUNoaWxkcmVuQW5vbnltb3VzQ29sdW1uQmxvY2tzKFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwgUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCk7CiAKICAgICBib29sIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0
OwpAQCAtODI1LDEyICs4MjYsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXRNYXJnaW5C
ZWZvcmVRdWlyayhib29sIGIpIHsgbV9tYXJnaW5CZWZvcmVRdWlyayA9IGI7IH0KICAgICAgICAg
dm9pZCBzZXRNYXJnaW5BZnRlclF1aXJrKGJvb2wgYikgeyBtX21hcmdpbkFmdGVyUXVpcmsgPSBi
OyB9CiAgICAgICAgIHZvaWQgc2V0RGV0ZXJtaW5lZE1hcmdpbkJlZm9yZVF1aXJrKGJvb2wgYikg
eyBtX2RldGVybWluZWRNYXJnaW5CZWZvcmVRdWlyayA9IGI7IH0KLSAgICAgICAgdm9pZCBzZXRQ
b3NpdGl2ZU1hcmdpbihpbnQgcCkgeyBtX3Bvc2l0aXZlTWFyZ2luID0gcDsgfQotICAgICAgICB2
b2lkIHNldE5lZ2F0aXZlTWFyZ2luKGludCBuKSB7IG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9Ci0g
ICAgICAgIHZvaWQgc2V0UG9zaXRpdmVNYXJnaW5JZkxhcmdlcihpbnQgcCkgeyBpZiAocCA+IG1f
cG9zaXRpdmVNYXJnaW4pIG1fcG9zaXRpdmVNYXJnaW4gPSBwOyB9Ci0gICAgICAgIHZvaWQgc2V0
TmVnYXRpdmVNYXJnaW5JZkxhcmdlcihpbnQgbikgeyBpZiAobiA+IG1fbmVnYXRpdmVNYXJnaW4p
IG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9CisgICAgICAgIHZvaWQgc2V0UG9zaXRpdmVNYXJnaW4o
TGF5b3V0VW5pdCBwKSB7IG1fcG9zaXRpdmVNYXJnaW4gPSBwOyB9CisgICAgICAgIHZvaWQgc2V0
TmVnYXRpdmVNYXJnaW4oTGF5b3V0VW5pdCBuKSB7IG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9Cisg
ICAgICAgIHZvaWQgc2V0UG9zaXRpdmVNYXJnaW5JZkxhcmdlcihMYXlvdXRVbml0IHApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChwID4gbV9wb3NpdGl2ZU1hcmdpbikKKyAgICAgICAgICAg
ICAgICBtX3Bvc2l0aXZlTWFyZ2luID0gcDsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldE5l
Z2F0aXZlTWFyZ2luSWZMYXJnZXIoTGF5b3V0VW5pdCBuKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobiA+IG1fbmVnYXRpdmVNYXJnaW4pCisgICAgICAgICAgICAgICAgbV9uZWdhdGl2ZU1h
cmdpbiA9IG47CisgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldE1hcmdpbihpbnQgcCwgaW50
IG4pIHsgbV9wb3NpdGl2ZU1hcmdpbiA9IHA7IG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9CisgICAg
ICAgIHZvaWQgc2V0TWFyZ2luKExheW91dFVuaXQgcCwgTGF5b3V0VW5pdCBuKSB7IG1fcG9zaXRp
dmVNYXJnaW4gPSBwOyBtX25lZ2F0aXZlTWFyZ2luID0gbjsgfQogCiAgICAgICAgIGJvb2wgYXRC
ZWZvcmVTaWRlT2ZCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYXRCZWZvcmVTaWRlT2ZCbG9jazsg
fQogICAgICAgICBib29sIGNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXRCZWZvcmVTaWRlT2ZCbG9jayAmJiBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0
aENoaWxkcmVuOyB9CkBAIC04NTQsNyArODYzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRs
ZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAg
ICAgYm9vbCBoYW5kbGVSdW5JbkNoaWxkKFJlbmRlckJveCogY2hpbGQpOwogICAgIExheW91dFVu
aXQgY29sbGFwc2VNYXJnaW5zKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mKTsKLSAgICBM
YXlvdXRVbml0IGNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5m
byYsIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4sIGludCB5UG9zKTsK
KyAgICBMYXlvdXRVbml0IGNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFy
Z2luSW5mbyYsIExheW91dFVuaXQgb2xkVG9wUG9zTWFyZ2luLCBMYXlvdXRVbml0IG9sZFRvcE5l
Z01hcmdpbiwgTGF5b3V0VW5pdCB5UG9zKTsKICAgICBMYXlvdXRVbml0IGVzdGltYXRlTG9naWNh
bFRvcFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBMYXlvdXRV
bml0JiBlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0aW9uKTsKICAgICB2b2lkIGRldGVybWluZUxvZ2lj
YWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKTsKICAgICB2b2lkIGhhbmRs
ZUFmdGVyU2lkZU9mQmxvY2soTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgYm90dG9tLCBNYXJn
aW5JbmZvJik7CkBAIC04ODAsOCArODg5LDggQEAgcHJvdGVjdGVkOgogICAgIExheW91dFVuaXQg
bmV4dFBhZ2VMb2dpY2FsVG9wKExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgUGFnZUJvdW5kYXJ5
UnVsZSA9IEV4Y2x1ZGVQYWdlQm91bmRhcnkpIGNvbnN0OwogICAgIGJvb2wgaGFzTmV4dFBhZ2Uo
TGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBQYWdlQm91bmRhcnlSdWxlID0gRXhjbHVkZVBhZ2VC
b3VuZGFyeSkgY29uc3Q7CiAKLSAgICBpbnQgYXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNo
aWxkLCBpbnQgbG9naWNhbE9mZnNldCk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYSBiZWZvcmUgYnJl
YWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUg
bmV4dCBwYWdlL2NvbHVtbi4KLSAgICBpbnQgYXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCogY2hp
bGQsIGludCBsb2dpY2FsT2Zmc2V0LCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKTsgLy8gSWYgdGhl
IGNoaWxkIGhhcyBhbiBhZnRlciBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgb2Zmc2V0IHRoYXQg
c2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgTGF5b3V0VW5p
dCBhcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbE9m
ZnNldCk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYSBiZWZvcmUgYnJlYWssIHRoZW4gcmV0dXJuIGEg
bmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4K
KyAgICBMYXlvdXRVbml0IGFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRV
bml0IGxvZ2ljYWxPZmZzZXQsIE1hcmdpbkluZm8mKTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhbiBh
ZnRlciBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgb2Zmc2V0IHRoYXQgc2hpZnRzIHRvIHRoZSB0
b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCiAKICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2Fs
SGVpZ2h0Rm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdDsKICAgICBMYXlvdXRVbml0
IHBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0LCBQ
YWdlQm91bmRhcnlSdWxlID0gSW5jbHVkZVBhZ2VCb3VuZGFyeSkgY29uc3Q7CkBAIC05MTUsMTUg
KzkyNCwxNSBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGbG9h
dGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRpbmdPYmpl
Y3RTZXQ7CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKLSAgICB0eXBlZGVmIFBPREludGVydmFsPExheW91dFVu
aXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKLSAgICB0eXBlZGVm
IFBPREludGVydmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2Jq
ZWN0VHJlZTsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPGludCwgRmxvYXRpbmdPYmplY3QqPiBG
bG9hdGluZ09iamVjdEludGVydmFsOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGludCwg
RmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdFRyZWU7CiAgICAgCiAgICAgdGVtcGxhdGUg
PEZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgogICAgIGNsYXNzIEZsb2F0SW50
ZXJ2YWxTZWFyY2hBZGFwdGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgRmxvYXRp
bmdPYmplY3RJbnRlcnZhbCBJbnRlcnZhbFR5cGU7CiAgICAgICAgIAotICAgICAgICBGbG9hdElu
dGVydmFsU2VhcmNoQWRhcHRlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIExheW91dFVu
aXQgdmFsdWUsIExheW91dFVuaXQmIG9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5n
KQorICAgICAgICBGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcihjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIsIGludCB2YWx1ZSwgTGF5b3V0VW5pdCYgb2Zmc2V0LCBMYXlvdXRVbml0KiBoZWln
aHRSZW1haW5pbmcpCiAgICAgICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKQEAg
LTkzMSwxMyArOTQwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaW5saW5lIExheW91dFVuaXQgbG93VmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlOyB9Ci0gICAgICAgIGlubGluZSBMYXlvdXRVbml0IGhpZ2hWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgaW5saW5lIGludCBsb3dWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgaW5saW5lIGludCBoaWdoVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgICAgIHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IElu
dGVydmFsVHlwZSYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgUmVuZGVy
QmxvY2sqIG1fcmVuZGVyZXI7Ci0gICAgICAgIExheW91dFVuaXQgbV92YWx1ZTsKKyAgICAgICAg
aW50IG1fdmFsdWU7CiAgICAgICAgIExheW91dFVuaXQmIG1fb2Zmc2V0OwogICAgICAgICBMYXlv
dXRVbml0KiBtX2hlaWdodFJlbWFpbmluZzsKICAgICB9OwpAQCAtMTAwMywyMCArMTAxMiwyMCBA
QCBwcml2YXRlOgogICAgICAgICB7IAogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGludCBw
b3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQorICAg
ICAgICBzdGF0aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAgICB7IAogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4PExheW91dFVuaXQ+KGJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgMCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBpbnQgbmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGNv
bnN0IFJlbmRlckJsb2NrKiBibG9jaykKKyAgICAgICAgc3RhdGljIExheW91dFVuaXQgbmVnYXRp
dmVNYXJnaW5CZWZvcmVEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAg
eyAKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigtYmxvY2stPm1hcmdp
bkJlZm9yZSgpLCAwKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgaW50IHBvc2l0aXZlTWFy
Z2luQWZ0ZXJEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKKyAgICAgICAgc3RhdGlj
IExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5p
dD4oYmxvY2stPm1hcmdpbkFmdGVyKCksIDApOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBp
bnQgbmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQor
ICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25z
dCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1heDxMYXlvdXRVbml0PigtYmxvY2stPm1hcmdpbkFmdGVyKCksIDApOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113259</attachid>
            <date>2011-11-01 17:01:19 -0700</date>
            <delta_ts>2011-11-01 17:29:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71254-20111101170118.patch</filename>
            <type>text/plain</type>
            <size>25481</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MDA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMTAtMzEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFtZW5kIG1pc3NpbmcgdXNl
cyBvZiBMYXlvdXRVbml0IGluIFJlbmRlckJsb2NrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaGluZyByZWxldmFudCB1c2VzIG9mIGludGVnZXJz
IGluIFJlbmRlckJsb2NrIHRvIExheW91dFVuaXRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAt
LSBubyBjaGFuZ2VzIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJn
aW5JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjbGlwT3V0UG9z
aXRpb25lZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZs
b2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0RmxvYXRM
b2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmdldENs
ZWFyRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdF
ZGl0aW5nQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2FsY0Nv
bHVtbldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGVpZ2h0Rm9yTGluZUNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBh
Z2luYXRpb25TdHJ1dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxl
TG9naWNhbFdpZHRoRm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
RmxvYXRXaXRoUmVjdDo6RmxvYXRXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6TWFyZ2luSW5mbzo6c2V0UG9zaXRpdmVNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86OnNldE5lZ2F0aXZlTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpzZXRQb3NpdGl2ZU1hcmdpbklmTGFyZ2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpzZXROZWdhdGl2
ZU1hcmdpbklmTGFyZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5J
bmZvOjpzZXRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0SW50
ZXJ2YWxTZWFyY2hBZGFwdGVyOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6Omxvd1Zh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNo
QWRhcHRlcjo6aGlnaFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5k
ZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2lu
QmVmb3JlRGVmYXVsdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6UmVuZGVyQmxv
Y2tSYXJlRGF0YTo6cG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJE
ZWZhdWx0KToKKwogMjAxMS0xMS0wMSAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmVmYWN0b3I6IGNoYW5nZSBTY3JvbGxhYmxlOjptX3Njcm9sbE9yaWdpbiBmcm9t
IHByb3RlY3RlZCB0byBwcml2YXRlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5OTAwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgLy8gZWZmZWN0
aXZlbHkgY2xhbXBlZCB0byBvdXIgcmVnaW9uIHJhbmdlLgogICAgICAgICBMYXlvdXRVbml0IG9s
ZEhlaWdodCA9ICBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNh
bFRvcCA9IGxvZ2ljYWxUb3AoKTsKLSAgICAgICAgc2V0TG9naWNhbEhlaWdodChJTlRfTUFYIC8g
Mik7IAorICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+
OjptYXgoKSAvIDIpOyAKICAgICAgICAgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAg
ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5zZXRSZWdpb25SYW5nZUZvckJveCh0aGlzLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOwogICAgICAgICBzZXRMb2dpY2FsSGVp
Z2h0KG9sZEhlaWdodCk7CkBAIC0xNzI0LDcgKzE3MjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpjb2xsYXBzZU1hcmdpbnMoCiAgICAgcmV0dXJuIGxvZ2ljYWxUb3A7CiB9CiAKLUxheW91
dFVuaXQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwg
TWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5l
Z01hcmdpbiwgaW50IHlQb3MpCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lm
TmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVu
aXQgb2xkVG9wUG9zTWFyZ2luLCBMYXlvdXRVbml0IG9sZFRvcE5lZ01hcmdpbiwgTGF5b3V0VW5p
dCB5UG9zKQogewogICAgIExheW91dFVuaXQgaGVpZ2h0SW5jcmVhc2UgPSBnZXRDbGVhckRlbHRh
KGNoaWxkLCB5UG9zKTsKICAgICBpZiAoIWhlaWdodEluY3JlYXNlKQpAQCAtMjEzNSw4ICsyMTM1
LDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICAg
ICAgc2V0TG9naWNhbEhlaWdodChuZXdIZWlnaHQpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBD
aGFuZ2UgdG8gdXNlIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LgotICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICBB
U1NFUlQob2xkTGF5b3V0RGVsdGEgPT0gdmlldygpLT5sYXlvdXREZWx0YSgpKTsKIH0KIApAQCAt
MjM4OCw2ICsyMzg2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWlu
dAogCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKICAgICB1bnNpZ25l
ZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworCiAgICAgYm9vbCBhbnRpYWxpYXMg
PSBzaG91bGRBbnRpYWxpYXNMaW5lcyhwYWludEluZm8uY29udGV4dCk7CiAKICAgICBpZiAoY29s
SW5mby0+cHJvZ3Jlc3Npb25BeGlzKCkgPT0gQ29sdW1uSW5mbzo6SW5saW5lQXhpcykgewpAQCAt
MjUwMSwxMCArMjUwMCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKFBhaW50
SW5mCiAgICAgaWYgKGRvY3VtZW50KCktPmRpZExheW91dFdpdGhQZW5kaW5nU3R5bGVzaGVldHMo
KSAmJiAhaXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gaGFkIG9mZiBwYWludGluZyBpbiB0aGUgbGluZSBib3ggdHJlZSB3aXRoIHRoZSBh
Y2N1bXVsYXRlZCBlcnJvciBvZiB0aGUgcmVuZGVyIHRyZWUsIGFzIHRoaXMgd2lsbCBjYXVzZQor
ICAgIC8vIHVzIHRvIG1lc3MgdXAgcGFpbnRpbmcgYWxpZ25lZCB0aGluZ3MgKHN1Y2ggYXMgdW5k
ZXJsaW5lcyBpbiB0ZXh0KSB3aXRoIGJvdGggdGhlIHJlbmRlciB0cmVlIGFuZCBsaW5lIGJveCB0
cmVlJ3MgZXJyb3IuCisgICAgTGF5b3V0UG9pbnQgcm91bmRlZFBhaW50T2Zmc2V0ID0gcm91bmRl
ZEludFBvaW50KHBhaW50T2Zmc2V0KTsKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAgICAg
ICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAg
ICAgIG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcm91bmRlZFBhaW50T2Zmc2V0
KTsKICAgICBlbHNlCi0gICAgICAgIHBhaW50Q2hpbGRyZW4ocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CisgICAgICAgIHBhaW50Q2hpbGRyZW4ocGFpbnRJbmZvLCByb3VuZGVkUGFpbnRPZmZzZXQp
OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0yODk0LDcgKzI4OTYsNyBA
QCBzdGF0aWMgdm9pZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uCiAgICAgUmVuZGVyQmxv
Y2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBv
c2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICBmb3IgKFJlbmRlckJsb2NrOjpQb3NpdGlvbmVk
T2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBvc2l0aW9uZWRPYmplY3Rz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUmVuZGVyQm94KiByID0gKml0
OwotICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmNsaXBPdXQoTGF5b3V0UmVjdChvZmZzZXQu
eCgpICsgci0+eCgpLCBvZmZzZXQueSgpICsgci0+eSgpLCByLT53aWR0aCgpLCByLT5oZWlnaHQo
KSkpOworICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmNsaXBPdXQoSW50UmVjdChvZmZzZXQu
eCgpICsgci0+eCgpLCBvZmZzZXQueSgpICsgci0+eSgpLCByLT53aWR0aCgpLCByLT5oZWlnaHQo
KSkpOwogICAgIH0KIH0KIApAQCAtMzI5NiwxMiArMzI5OCwxMiBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVGbG9hdGluZ09iamVjdChSCiAgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKSkgewogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAg
ICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KHIpOwotICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpOworICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChyKTsKKyAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7
CiAKICAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDk5NS4KLSAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbSA8
IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNhbFRvcCA9PSBudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbEJvdHRvbSA9
IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICAgICAgICAgIGlmIChsb2dpY2Fs
Qm90dG9tIDwgMCB8fCBsb2dpY2FsQm90dG9tIDwgbG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09
IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSkKKyAgICAgICAgICAgICAgICAgICAg
bG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKTsKICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIHpl
cm8tIGFuZCBsZXNzLXRoYW4temVyby1oZWlnaHQgZmxvYXRzOiB0aG9zZSBkb24ndCB0b3VjaAog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1dCBpdCBz
dGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCkBAIC0zNjkwLDcgKzM2OTIsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsCiAgICAgICAgICAgICBib3R0
b20gPSBtaW4oZmxvYXRCb3R0b20sIGJvdHRvbSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGJvdHRv
bSA9PSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCkgPyBsb2dpY2FsSGVpZ2h0IDog
Ym90dG9tOworICAgIHJldHVybiBib3R0b20gPT0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46
Om1heCgpID8gMCA6IGJvdHRvbTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkgY29uc3QK
QEAgLTQzMTIsNyArNDMxNCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludFIKICAgICBpZiAoY2hpbGQtPmlzUmVsUG9zaXRpb25lZCgpKQogICAgICAgICBjaGlsZExv
Y2F0aW9uICs9IGNoaWxkLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgd3JvbmcgaWYgdGhlIGNoaWxkJ3Mgd3JpdGluZy1tb2RlIGlzIGRpZmZlcmVudCBm
cm9tIHRoZSBwYXJlbnQncy4KLSAgICBMYXlvdXRQb2ludCBwb2ludEluQ2hpbGRDb29yZGluYXRl
cyhwb2ludEluUGFyZW50Q29vcmRpbmF0ZXMgLSBjaGlsZExvY2F0aW9uKTsKKyAgICBMYXlvdXRQ
b2ludCBwb2ludEluQ2hpbGRDb29yZGluYXRlcyh0b0xheW91dFBvaW50KHBvaW50SW5QYXJlbnRD
b29yZGluYXRlcyAtIGNoaWxkTG9jYXRpb24pKTsKIAogICAgIC8vIElmIHRoaXMgaXMgYW4gYW5v
bnltb3VzIHJlbmRlcmVyLCB3ZSBqdXN0IHJlY3VyIG5vcm1hbGx5CiAgICAgTm9kZSogY2hpbGRO
b2RlID0gY2hpbGQtPm5vZGUoKTsKQEAgLTQ0NzYsOCArNDQ3OCw5IEBAIGludCBSZW5kZXJCbG9j
azo6Y29sdW1uR2FwKCkgY29uc3QKIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNDb2x1bW5XaWR0aCgp
CiB7ICAgIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgY29sdW1uIHdpZHRoIGFuZCBjb2x1bW4gY291
bnQuCisgICAgLy8gRklYTUU6IENhbiBvdmVyZmxvdyBvbiBmYXN0L2Jsb2NrL2Zsb2F0L2Zsb2F0
LW5vdC1yZW1vdmVkLWZyb20tbmV4dC1zaWJsaW5nNC5odG1sLCBzZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzQ0CiAgICAgdW5zaWduZWQgZGVzaXJlZENvbHVt
bkNvdW50ID0gMTsKLSAgICBpbnQgZGVzaXJlZENvbHVtbldpZHRoID0gY29udGVudExvZ2ljYWxX
aWR0aCgpOworICAgIExheW91dFVuaXQgZGVzaXJlZENvbHVtbldpZHRoID0gY29udGVudExvZ2lj
YWxXaWR0aCgpOwogICAgIAogICAgIC8vIEZvciBub3csIHdlIGRvbid0IHN1cHBvcnQgbXVsdGkt
Y29sdW1uIGxheW91dHMgd2hlbiBwcmludGluZywgc2luY2Ugd2UgaGF2ZSB0byBkbyBhIGxvdCBv
ZiB3b3JrIGZvciBwcm9wZXIgcGFnaW5hdGlvbi4KICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnaW5h
dGVkKCkgfHwgKHN0eWxlKCktPmhhc0F1dG9Db2x1bW5Db3VudCgpICYmIHN0eWxlKCktPmhhc0F1
dG9Db2x1bW5XaWR0aCgpKSB8fCAhc3R5bGUoKS0+aGFzSW5saW5lQ29sdW1uQXhpcygpKSB7CkBA
IC00NDg1LDE5ICs0NDg4LDE5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNDb2x1bW5XaWR0aCgp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGludCBhdmFpbFdpZHRoID0g
ZGVzaXJlZENvbHVtbldpZHRoOwotICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKLSAgICBp
bnQgY29sV2lkdGggPSBtYXgoMSwgc3RhdGljX2Nhc3Q8aW50PihzdHlsZSgpLT5jb2x1bW5XaWR0
aCgpKSk7Ci0gICAgaW50IGNvbENvdW50ID0gbWF4KDEsIHN0YXRpY19jYXN0PGludD4oc3R5bGUo
KS0+Y29sdW1uQ291bnQoKSkpOworICAgIExheW91dFVuaXQgYXZhaWxXaWR0aCA9IGRlc2lyZWRD
b2x1bW5XaWR0aDsKKyAgICBMYXlvdXRVbml0IGNvbEdhcCA9IGNvbHVtbkdhcCgpOworICAgIExh
eW91dFVuaXQgY29sV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMSwgTGF5b3V0VW5pdChzdHlsZSgp
LT5jb2x1bW5XaWR0aCgpKSk7CisgICAgaW50IGNvbENvdW50ID0gbWF4PGludD4oMSwgc3R5bGUo
KS0+Y29sdW1uQ291bnQoKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+aGFzQXV0b0NvbHVtbldpZHRo
KCkgJiYgIXN0eWxlKCktPmhhc0F1dG9Db2x1bW5Db3VudCgpKSB7CiAgICAgICAgIGRlc2lyZWRD
b2x1bW5Db3VudCA9IGNvbENvdW50OwotICAgICAgICBkZXNpcmVkQ29sdW1uV2lkdGggPSBtYXg8
aW50PigwLCAoYXZhaWxXaWR0aCAtICgoZGVzaXJlZENvbHVtbkNvdW50IC0gMSkgKiBjb2xHYXAp
KSAvIGRlc2lyZWRDb2x1bW5Db3VudCk7CisgICAgICAgIGRlc2lyZWRDb2x1bW5XaWR0aCA9IG1h
eDxMYXlvdXRVbml0PigwLCAoYXZhaWxXaWR0aCAtICgoZGVzaXJlZENvbHVtbkNvdW50IC0gMSkg
KiBjb2xHYXApKSAvIGRlc2lyZWRDb2x1bW5Db3VudCk7CiAgICAgfSBlbHNlIGlmICghc3R5bGUo
KS0+aGFzQXV0b0NvbHVtbldpZHRoKCkgJiYgc3R5bGUoKS0+aGFzQXV0b0NvbHVtbkNvdW50KCkp
IHsKLSAgICAgICAgZGVzaXJlZENvbHVtbkNvdW50ID0gbWF4PGludD4oMSwgKGZsb2F0KShhdmFp
bFdpZHRoICsgY29sR2FwKSAvIChjb2xXaWR0aCArIGNvbEdhcCkpOworICAgICAgICBkZXNpcmVk
Q29sdW1uQ291bnQgPSBtYXg8TGF5b3V0VW5pdD4oMSwgKGF2YWlsV2lkdGggKyBjb2xHYXApIC8g
KGNvbFdpZHRoICsgY29sR2FwKSk7CiAgICAgICAgIGRlc2lyZWRDb2x1bW5XaWR0aCA9ICgoYXZh
aWxXaWR0aCArIGNvbEdhcCkgLyBkZXNpcmVkQ29sdW1uQ291bnQpIC0gY29sR2FwOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGRlc2lyZWRDb2x1bW5Db3VudCA9IG1heChtaW48aW50Pihjb2xDb3Vu
dCwgKGZsb2F0KShhdmFpbFdpZHRoICsgY29sR2FwKSAvIChjb2xXaWR0aCArIGNvbEdhcCkpLCAx
KTsKKyAgICAgICAgZGVzaXJlZENvbHVtbkNvdW50ID0gbWF4PExheW91dFVuaXQ+KG1pbjxMYXlv
dXRVbml0Pihjb2xDb3VudCwgKGF2YWlsV2lkdGggKyBjb2xHYXApIC8gKGNvbFdpZHRoICsgY29s
R2FwKSksIDEpOwogICAgICAgICBkZXNpcmVkQ29sdW1uV2lkdGggPSAoKGF2YWlsV2lkdGggKyBj
b2xHYXApIC8gZGVzaXJlZENvbHVtbkNvdW50KSAtIGNvbEdhcDsKICAgICB9CiAgICAgc2V0RGVz
aXJlZENvbHVtbkNvdW50QW5kV2lkdGgoZGVzaXJlZENvbHVtbkNvdW50LCBkZXNpcmVkQ29sdW1u
V2lkdGgpOwpAQCAtNDU4Miw3ICs0NTg1LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6Y29s
dW1uUmVjdEF0KENvbAogICAgIHJldHVybiBMYXlvdXRSZWN0KGNvbExvZ2ljYWxUb3AsIGNvbExv
Z2ljYWxMZWZ0LCBjb2xMb2dpY2FsSGVpZ2h0LCBjb2xMb2dpY2FsV2lkdGgpOwogfQogCi1ib29s
IFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxI
ZWlnaHQsIGludCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJiBzdGF0
ZVB1c2hlcikKK2Jvb2wgUmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZp
ZWRQYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0
U3RhdGVNYWludGFpbmVyJiBzdGF0ZVB1c2hlcikKIHsKICAgICBpZiAoIWhhc0NvbHVtbnMoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU5OCwxMyArNDYwMSwxMyBAQCBib29sIFJlbmRl
ckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzCiAgICAgICAgICAgICAvLyBUaGUgZm9yY2Vk
IHBhZ2UgYnJlYWtzIGFyZSBpbiBjb250cm9sIG9mIHRoZSBiYWxhbmNpbmcuICBKdXN0IHNldCB0
aGUgY29sdW1uIGhlaWdodCB0byB0aGUKICAgICAgICAgICAgIC8vIG1heGltdW0gcGFnZSBicmVh
ayBkaXN0YW5jZS4KICAgICAgICAgICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQpIHsKLSAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGRpc3RhbmNlQmV0d2VlbkJyZWFrcyA9IG1heChjb2xJbmZv
LT5tYXhpbXVtRGlzdGFuY2VCZXR3ZWVuRm9yY2VkQnJlYWtzKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2VMb2dpY2FsT2Zmc2V0KGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29udGVu
dExvZ2ljYWxIZWlnaHQoKSkgLSBjb2xJbmZvLT5mb3JjZWRCcmVha09mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGRpc3RhbmNlQmV0d2VlbkJyZWFrcyA9IG1heDxMYXlvdXRV
bml0Pihjb2xJbmZvLT5tYXhpbXVtRGlzdGFuY2VCZXR3ZWVuRm9yY2VkQnJlYWtzKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbE9mZnNldChib3JkZXJCZWZv
cmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpIC0gY29sSW5m
by0+Zm9yY2VkQnJlYWtPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgY29sdW1uSGVpZ2h0ID0g
bWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgZGlzdGFuY2VCZXR3ZWVuQnJlYWtz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50TG9naWNhbEhlaWdo
dCgpID4gcGFnZUxvZ2ljYWxIZWlnaHQgKiBkZXNpcmVkQ29sdW1uQ291bnQpIHsKICAgICAgICAg
ICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgdGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGNvbHVt
bnMsIHdlIGhhdmUgdG8gcmViYWxhbmNlIHRoZW0uCi0gICAgICAgICAgICBjb2x1bW5IZWlnaHQg
PSBtYXgoY29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCBjZWlsZWRMYXlvdXRVbml0KChm
bG9hdCljb250ZW50TG9naWNhbEhlaWdodCgpIC8gZGVzaXJlZENvbHVtbkNvdW50KSk7CisgICAg
ICAgICAgICBjb2x1bW5IZWlnaHQgPSBtYXg8TGF5b3V0VW5pdD4oY29sSW5mby0+bWluaW11bUNv
bHVtbkhlaWdodCgpLCBjZWlsZigoZmxvYXQpY29udGVudExvZ2ljYWxIZWlnaHQoKSAvIGRlc2ly
ZWRDb2x1bW5Db3VudCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29sdW1u
SGVpZ2h0ICYmIGNvbHVtbkhlaWdodCAhPSBwYWdlTG9naWNhbEhlaWdodCkgewpAQCAtNDcyMyw3
ICs0NzI2LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UmVjdEZvckNvbHVtbnMoTAogCiAg
ICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldCA9IG1heChpc0hvcml6b250YWwgPyByLnkoKSA6IHIu
eCgpLCBiZWZvcmVCb3JkZXJQYWRkaW5nKTsKICAgICBMYXlvdXRVbml0IGVuZE9mZnNldCA9IG1p
bjxMYXlvdXRVbml0Pihpc0hvcml6b250YWwgPyByLm1heFkoKSA6IHIubWF4WCgpLCBiZWZvcmVC
b3JkZXJQYWRkaW5nICsgY29sQ291bnQgKiBjb2xIZWlnaHQpOwotICAgIAorCisgICAgLy8gRklY
TUU6IENhbiBvdmVyZmxvdyBvbiBmYXN0L2Jsb2NrL2Zsb2F0L2Zsb2F0LW5vdC1yZW1vdmVkLWZy
b20tbmV4dC1zaWJsaW5nNC5odG1sLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY4NzQ0CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSAoc3RhcnRPZmZzZXQg
LSBiZWZvcmVCb3JkZXJQYWRkaW5nKSAvIGNvbEhlaWdodDsKICAgICB1bnNpZ25lZCBlbmRDb2x1
bW4gPSAoZW5kT2Zmc2V0IC0gYmVmb3JlQm9yZGVyUGFkZGluZykgLyBjb2xIZWlnaHQ7CiAKQEAg
LTQ3MzMsNiArNDczNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1bW5z
KEwKICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudCgpOwogICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0
QXQoY29sSW5mbywgc3RhcnRDb2x1bW4pOwogICAgICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
ID0gcjsKKwogICAgICAgICBpZiAoY29sSW5mby0+cHJvZ3Jlc3Npb25BeGlzKCkgPT0gQ29sdW1u
SW5mbzo6SW5saW5lQXhpcykgewogICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAg
ICAgICAgICAgICByZXBhaW50UmVjdC5tb3ZlKGNvbFJlY3QueCgpIC0gbG9naWNhbExlZnRPZmZz
ZXQsIC0gc3RhdGljX2Nhc3Q8aW50PihzdGFydENvbHVtbikgKiBjb2xIZWlnaHQpOwpAQCAtNTQz
Nyw3ICs1NDQyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbgog
ICAgICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0gKGxheWVyKCkgJiYgKGxheWVyKCktPm1hcnF1
ZWUoKSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gKGxheWVyKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpICE9IDApCiAgICAgICAgICAg
ICA6IChsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsWE9m
ZnNldCgpICE9IDApKSkpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7
CiAgICAgICAgIAotICAgICAgICBpbnQgYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IC0x
IDogbGFzdExpbmVCb3hCYXNlbGluZSgpOworICAgICAgICBpbnQgYmFzZWxpbmVQb3MgPSBpZ25v
cmVCYXNlbGluZSA/IExheW91dFVuaXQoLTEpIDogbGFzdExpbmVCb3hCYXNlbGluZSgpOwogICAg
ICAgICAKICAgICAgICAgaW50IGJvdHRvbU9mQ29udGVudCA9IGRpcmVjdGlvbiA9PSBIb3Jpem9u
dGFsTGluZSA/IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29udGVudEhlaWdodCgpIDog
Ym9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpICsgY29udGVudFdpZHRoKCk7CiAgICAgICAg
IGlmIChiYXNlbGluZVBvcyAhPSAtMSAmJiBiYXNlbGluZVBvcyA8PSBib3R0b21PZkNvbnRlbnQp
CkBAIC01OTUzLDcgKzU5NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhNYXJnaW5BZnRl
clZhbHVlCiAgICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnNldE5lZ2F0aXZlTWFyZ2luQWZ0ZXIo
bmVnKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1
dCkKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldFBhZ2luYXRpb25TdHJ1dChMYXlvdXRVbml0IHN0cnV0
KQogewogICAgIGlmICghbV9yYXJlRGF0YSkgewogICAgICAgICBpZiAoIXN0cnV0KQpAQCAtNjI4
NCw3ICs2Mjg5LDcgQEAgc3RhdGljIGJvb2wgaW5Ob3JtYWxGbG93KFJlbmRlckJveCogY2hpbAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWso
UmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQpCitMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjphcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNh
bE9mZnNldCkKIHsKICAgICAvLyBGSVhNRTogQWRkIHBhZ2UgYnJlYWsgY2hlY2tpbmcgaGVyZSB3
aGVuIHdlIHN1cHBvcnQgcHJpbnRpbmcuCiAgICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9IHZp
ZXcoKS0+bGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0aW5nQ29sdW1ucygpOwpAQCAtNjMwMCw3ICs2
MzA1LDcgQEAgaW50IFJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrKFJlbmRlcgogICAgIHJl
dHVybiBsb2dpY2FsT2Zmc2V0OwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVh
ayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYgbWFyZ2lu
SW5mbykKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gq
IGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8p
CiB7CiAgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBz
dXBwb3J0IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxh
eW91dFN0YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA5OTAwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcg
QEAgcHVibGljOgogICAgIC8vIGNvbXB1dGUgdGhlIHJlZ2lvbiBhbGwgb3ZlciBhZ2FpbiB3aGVu
IHlvdSBhbHJlYWR5IGtub3cgaXQuCiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lk
dGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lLCBSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1heCgwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JM
aW5lKHBvc2l0aW9uLCBmaXJzdExpbmUsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSkKKyAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSkKICAgICAgICAgICAgIC0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5l
KHBvc2l0aW9uLCBmaXJzdExpbmUsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUo
TGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUsIFJlbmRlclJlZ2lvbiogcmVnaW9u
LCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0IApAQCAt
MjMwLDggKzIzMCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjb2x1bW5Db3VudChDb2x1bW5J
bmZvKikgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyosIHVu
c2lnbmVkKSBjb25zdDsKIAotICAgIGludCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgOiAwOyB9Ci0gICAg
dm9pZCBzZXRQYWdpbmF0aW9uU3RydXQoaW50KTsKKyAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25T
dHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRp
b25TdHJ1dCA6IDA7IH0KKyAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChMYXlvdXRVbml0KTsK
ICAgICAKICAgICAvLyBUaGUgcGFnZSBsb2dpY2FsIG9mZnNldCBpcyB0aGUgb2JqZWN0J3Mgb2Zm
c2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgcGFnZSBpbiB0aGUgcGFnZSBwcm9ncmVzc2lvbgogICAg
IC8vIGRpcmVjdGlvbiAoc28gYW4geC1vZmZzZXQgaW4gdmVydGljYWwgdGV4dCBhbmQgYSB5LW9m
ZnNldCBmb3IgaG9yaXpvbnRhbCB0ZXh0KS4KQEAgLTI5Niw3ICsyOTYsNyBAQCBwdWJsaWM6CiAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbios
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3Q7CiAgICAg
TGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlclJlZ2lvbiog
cmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0
CiAgICAgeyAKLSAgICAgICAgcmV0dXJuIG1heCgwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250
ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgLQorICAgICAgICBy
ZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSAtCiAgICAgICAgICAgICBsb2dp
Y2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlKSk7IH0KICAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJS
ZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KSBjb25zdAogICAgIHsKQEAgLTQ3NiwxMyArNDc2LDEzIEBAIHByaXZhdGU6CiAgICAgc3RydWN0
IEZsb2F0V2l0aFJlY3QgewogICAgICAgICBGbG9hdFdpdGhSZWN0KFJlbmRlckJveCogZikKICAg
ICAgICAgICAgIDogb2JqZWN0KGYpCi0gICAgICAgICAgICAsIHJlY3QoSW50UmVjdChmLT54KCkg
LSBmLT5tYXJnaW5MZWZ0KCksIGYtPnkoKSAtIGYtPm1hcmdpblRvcCgpLCBmLT53aWR0aCgpICsg
Zi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJn
aW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKSkKKyAgICAgICAgICAgICwgcmVjdChMYXlvdXRS
ZWN0KGYtPngoKSAtIGYtPm1hcmdpbkxlZnQoKSwgZi0+eSgpIC0gZi0+bWFyZ2luVG9wKCksIGYt
PndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgKyBmLT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQo
KSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpKQogICAgICAgICAgICAgLCBl
dmVySGFkTGF5b3V0KGYtPm1fZXZlckhhZExheW91dCkKICAgICAgICAgewogICAgICAgICB9CiAK
ICAgICAgICAgUmVuZGVyQm94KiBvYmplY3Q7Ci0gICAgICAgIEludFJlY3QgcmVjdDsKKyAgICAg
ICAgTGF5b3V0UmVjdCByZWN0OwogICAgICAgICBib29sIGV2ZXJIYWRMYXlvdXQ7CiAgICAgfTsK
IApAQCAtNTc0LDYgKzU3NCw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT54KCkgOiBjaGlsZC0+eSgpOyB9CiAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hp
bGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+bWF4
WCgpIDogY2hpbGQtPm1heFkoKTsgfQogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoRm9yRmxv
YXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPndpZHRoKCkgOiBjaGlsZC0+aGVpZ2h0KCk7IH0KKwog
ICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wKQogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCkBAIC03NjksNyArNzcwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG9mZnNldEZv
ckNvbnRlbnRzKExheW91dFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lkIGNhbGNDb2x1bW5XaWR0
aCgpOwotICAgIGJvb2wgbGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2Fs
SGVpZ2h0LCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYpOwor
ICAgIGJvb2wgbGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0
LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKTsK
ICAgICB2b2lkIG1ha2VDaGlsZHJlbkFub255bW91c0NvbHVtbkJsb2NrcyhSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkLCBSZW5kZXJCbG9jayogbmV3QmxvY2tCb3gsIFJlbmRlck9iamVjdCogbmV3
Q2hpbGQpOwogCiAgICAgYm9vbCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSBj
b25zdDsKQEAgLTgyNSwxMiArODI2LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0TWFy
Z2luQmVmb3JlUXVpcmsoYm9vbCBiKSB7IG1fbWFyZ2luQmVmb3JlUXVpcmsgPSBiOyB9CiAgICAg
ICAgIHZvaWQgc2V0TWFyZ2luQWZ0ZXJRdWlyayhib29sIGIpIHsgbV9tYXJnaW5BZnRlclF1aXJr
ID0gYjsgfQogICAgICAgICB2b2lkIHNldERldGVybWluZWRNYXJnaW5CZWZvcmVRdWlyayhib29s
IGIpIHsgbV9kZXRlcm1pbmVkTWFyZ2luQmVmb3JlUXVpcmsgPSBiOyB9Ci0gICAgICAgIHZvaWQg
c2V0UG9zaXRpdmVNYXJnaW4oaW50IHApIHsgbV9wb3NpdGl2ZU1hcmdpbiA9IHA7IH0KLSAgICAg
ICAgdm9pZCBzZXROZWdhdGl2ZU1hcmdpbihpbnQgbikgeyBtX25lZ2F0aXZlTWFyZ2luID0gbjsg
fQotICAgICAgICB2b2lkIHNldFBvc2l0aXZlTWFyZ2luSWZMYXJnZXIoaW50IHApIHsgaWYgKHAg
PiBtX3Bvc2l0aXZlTWFyZ2luKSBtX3Bvc2l0aXZlTWFyZ2luID0gcDsgfQotICAgICAgICB2b2lk
IHNldE5lZ2F0aXZlTWFyZ2luSWZMYXJnZXIoaW50IG4pIHsgaWYgKG4gPiBtX25lZ2F0aXZlTWFy
Z2luKSBtX25lZ2F0aXZlTWFyZ2luID0gbjsgfQorICAgICAgICB2b2lkIHNldFBvc2l0aXZlTWFy
Z2luKExheW91dFVuaXQgcCkgeyBtX3Bvc2l0aXZlTWFyZ2luID0gcDsgfQorICAgICAgICB2b2lk
IHNldE5lZ2F0aXZlTWFyZ2luKExheW91dFVuaXQgbikgeyBtX25lZ2F0aXZlTWFyZ2luID0gbjsg
fQorICAgICAgICB2b2lkIHNldFBvc2l0aXZlTWFyZ2luSWZMYXJnZXIoTGF5b3V0VW5pdCBwKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAocCA+IG1fcG9zaXRpdmVNYXJnaW4pCisgICAgICAg
ICAgICAgICAgbV9wb3NpdGl2ZU1hcmdpbiA9IHA7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBz
ZXROZWdhdGl2ZU1hcmdpbklmTGFyZ2VyKExheW91dFVuaXQgbikKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG4gPiBtX25lZ2F0aXZlTWFyZ2luKQorICAgICAgICAgICAgICAgIG1fbmVnYXRp
dmVNYXJnaW4gPSBuOworICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRNYXJnaW4oaW50IHAs
IGludCBuKSB7IG1fcG9zaXRpdmVNYXJnaW4gPSBwOyBtX25lZ2F0aXZlTWFyZ2luID0gbjsgfQor
ICAgICAgICB2b2lkIHNldE1hcmdpbihMYXlvdXRVbml0IHAsIExheW91dFVuaXQgbikgeyBtX3Bv
c2l0aXZlTWFyZ2luID0gcDsgbV9uZWdhdGl2ZU1hcmdpbiA9IG47IH0KIAogICAgICAgICBib29s
IGF0QmVmb3JlU2lkZU9mQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2F0QmVmb3JlU2lkZU9mQmxv
Y2s7IH0KICAgICAgICAgYm9vbCBjYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSBjb25zdCB7
IHJldHVybiBtX2F0QmVmb3JlU2lkZU9mQmxvY2sgJiYgbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9y
ZVdpdGhDaGlsZHJlbjsgfQpAQCAtODU0LDcgKzg2Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBo
YW5kbGVQb3NpdGlvbmVkQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYp
OwogICAgIGJvb2wgaGFuZGxlUnVuSW5DaGlsZChSZW5kZXJCb3gqIGNoaWxkKTsKICAgICBMYXlv
dXRVbml0IGNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5JbmZvJik7Ci0g
ICAgTGF5b3V0VW5pdCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdp
bkluZm8mLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFyZ2luLCBpbnQgeVBv
cyk7CisgICAgTGF5b3V0VW5pdCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQs
IE1hcmdpbkluZm8mLCBMYXlvdXRVbml0IG9sZFRvcFBvc01hcmdpbiwgTGF5b3V0VW5pdCBvbGRU
b3BOZWdNYXJnaW4sIExheW91dFVuaXQgeVBvcyk7CiAgICAgTGF5b3V0VW5pdCBlc3RpbWF0ZUxv
Z2ljYWxUb3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgTGF5
b3V0VW5pdCYgZXN0aW1hdGVXaXRob3V0UGFnaW5hdGlvbik7CiAgICAgdm9pZCBkZXRlcm1pbmVM
b2dpY2FsTGVmdFBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7CiAgICAgdm9pZCBo
YW5kbGVBZnRlclNpZGVPZkJsb2NrKExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGJvdHRvbSwg
TWFyZ2luSW5mbyYpOwpAQCAtODgwLDggKzg4OSw4IEBAIHByb3RlY3RlZDoKICAgICBMYXlvdXRV
bml0IG5leHRQYWdlTG9naWNhbFRvcChMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIFBhZ2VCb3Vu
ZGFyeVJ1bGUgPSBFeGNsdWRlUGFnZUJvdW5kYXJ5KSBjb25zdDsKICAgICBib29sIGhhc05leHRQ
YWdlKExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgUGFnZUJvdW5kYXJ5UnVsZSA9IEV4Y2x1ZGVQ
YWdlQm91bmRhcnkpIGNvbnN0OwogCi0gICAgaW50IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94
KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3Jl
IGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2Yg
dGhlIG5leHQgcGFnZS9jb2x1bW4uCi0gICAgaW50IGFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gq
IGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7IC8vIElm
IHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IG9mZnNldCB0
aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIExheW91
dFVuaXQgYXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2lj
YWxPZmZzZXQpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0aGVuIHJldHVy
biBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1
bW4uCisgICAgTGF5b3V0VW5pdCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBNYXJnaW5JbmZvJik7IC8vIElmIHRoZSBjaGlsZCBoYXMg
YW4gYWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IG9mZnNldCB0aGF0IHNoaWZ0cyB0byB0
aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgogCiAgICAgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3Q7CiAgICAgTGF5b3V0
VW5pdCBwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNl
dCwgUGFnZUJvdW5kYXJ5UnVsZSA9IEluY2x1ZGVQYWdlQm91bmRhcnkpIGNvbnN0OwpAQCAtOTE1
LDE1ICs5MjQsMTUgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8
RmxvYXRpbmdPYmplY3QqLCA0LCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM+IEZsb2F0aW5n
T2JqZWN0U2V0OwogICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0X2l0ZXJhdG9y
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxMYXlv
dXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWw7Ci0gICAgdHlw
ZWRlZiBQT0RJbnRlcnZhbFRyZWU8TGF5b3V0VW5pdCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGlu
Z09iamVjdFRyZWU7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxpbnQsIEZsb2F0aW5nT2JqZWN0
Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKKyAgICB0eXBlZGVmIFBPREludGVydmFsVHJlZTxp
bnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RUcmVlOwogICAgIAogICAgIHRlbXBs
YXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KICAgICBjbGFzcyBGbG9h
dEludGVydmFsU2VhcmNoQWRhcHRlciB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEZs
b2F0aW5nT2JqZWN0SW50ZXJ2YWwgSW50ZXJ2YWxUeXBlOwogICAgICAgICAKLSAgICAgICAgRmxv
YXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBMYXlv
dXRVbml0IHZhbHVlLCBMYXlvdXRVbml0JiBvZmZzZXQsIExheW91dFVuaXQqIGhlaWdodFJlbWFp
bmluZykKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyLCBpbnQgdmFsdWUsIExheW91dFVuaXQmIG9mZnNldCwgTGF5b3V0VW5pdCog
aGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQogICAg
ICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CkBAIC05MzEsMTMgKzk0MCwxMyBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlubGluZSBMYXlvdXRVbml0IGxvd1ZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQotICAgICAgICBpbmxpbmUgTGF5b3V0VW5pdCBoaWdoVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIGlubGluZSBpbnQgbG93VmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIGlubGluZSBpbnQgaGlnaFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgICAgICB2b2lkIGNvbGxlY3RJZk5lZWRlZChjb25z
dCBJbnRlcnZhbFR5cGUmKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBtX3JlbmRlcmVyOwotICAgICAgICBMYXlvdXRVbml0IG1fdmFsdWU7CisgICAg
ICAgIGludCBtX3ZhbHVlOwogICAgICAgICBMYXlvdXRVbml0JiBtX29mZnNldDsKICAgICAgICAg
TGF5b3V0VW5pdCogbV9oZWlnaHRSZW1haW5pbmc7CiAgICAgfTsKQEAgLTEwMDMsMjAgKzEwMTIs
MjAgQEAgcHJpdmF0ZToKICAgICAgICAgeyAKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBp
bnQgcG9zaXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykK
KyAgICAgICAgc3RhdGljIExheW91dFVuaXQgcG9zaXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGNv
bnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1heDxMYXlvdXRVbml0PihibG9jay0+bWFyZ2luQmVmb3JlKCksIDApOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgaW50IG5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVs
dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCisgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG5l
Z2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAg
ICAgIHsgCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oLWJsb2NrLT5t
YXJnaW5CZWZvcmUoKSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIGludCBwb3NpdGl2
ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCisgICAgICAgIHN0
YXRpYyBMYXlvdXRVbml0IHBvc2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNvbnN0IFJlbmRlckJs
b2NrKiBibG9jaykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91
dFVuaXQ+KGJsb2NrLT5tYXJnaW5BZnRlcigpLCAwKTsKICAgICAgICAgfQotICAgICAgICBzdGF0
aWMgaW50IG5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
aykKKyAgICAgICAgc3RhdGljIExheW91dFVuaXQgbmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQo
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYXg8TGF5b3V0VW5pdD4oLWJsb2NrLT5tYXJnaW5BZnRlcigpLCAwKTsKICAgICAgICAg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113263</attachid>
            <date>2011-11-01 17:29:29 -0700</date>
            <delta_ts>2011-11-01 18:33:31 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71254-20111101172927.patch</filename>
            <type>text/plain</type>
            <size>25479</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MDA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMTAtMzEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFtZW5kIG1pc3NpbmcgdXNl
cyBvZiBMYXlvdXRVbml0IGluIFJlbmRlckJsb2NrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI1NAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgIFN3aXRjaGluZyByZWxldmFudCB1c2VzIG9mIGludGVnZXJzIGlu
IFJlbmRlckJsb2NrIHRvIExheW91dFVuaXRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBu
byBjaGFuZ2VzIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5J
bmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjbGlwT3V0UG9zaXRp
b25lZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0
aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dp
Y2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmdldENsZWFy
RGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0
aW5nQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2FsY0NvbHVt
bldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGVpZ2h0Rm9yTGluZUNvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJsZUxv
Z2ljYWxXaWR0aEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhZ2lu
YXRpb25TdHJ1dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxlTG9n
aWNhbFdpZHRoRm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRXaXRoUmVjdDo6RmxvYXRXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6TWFyZ2luSW5mbzo6c2V0UG9zaXRpdmVNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6Ok1hcmdpbkluZm86OnNldE5lZ2F0aXZlTWFyZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpzZXRQb3NpdGl2ZU1hcmdpbklmTGFyZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpzZXROZWdhdGl2ZU1h
cmdpbklmTGFyZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZv
OjpzZXRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0SW50ZXJ2
YWxTZWFyY2hBZGFwdGVyOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6Omxvd1ZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRh
cHRlcjo6aGlnaFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5kZXJC
bG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQmVm
b3JlRGVmYXVsdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2tS
YXJlRGF0YTo6cG9zaXRpdmVNYXJnaW5BZnRlckRlZmF1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZh
dWx0KToKKwogMjAxMS0xMS0wMSAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmVmYWN0b3I6IGNoYW5nZSBTY3JvbGxhYmxlOjptX3Njcm9sbE9yaWdpbiBmcm9tIHBy
b3RlY3RlZCB0byBwcml2YXRlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCShyZXZpc2lvbiA5OTAwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgLy8gZWZmZWN0aXZl
bHkgY2xhbXBlZCB0byBvdXIgcmVnaW9uIHJhbmdlLgogICAgICAgICBMYXlvdXRVbml0IG9sZEhl
aWdodCA9ICBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRv
cCA9IGxvZ2ljYWxUb3AoKTsKLSAgICAgICAgc2V0TG9naWNhbEhlaWdodChJTlRfTUFYIC8gMik7
IAorICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+Ojpt
YXgoKSAvIDIpOyAKICAgICAgICAgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgZW5j
bG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5zZXRSZWdpb25SYW5nZUZvckJveCh0aGlzLCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOwogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
KG9sZEhlaWdodCk7CkBAIC0xNzI0LDcgKzE3MjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2Nr
Ojpjb2xsYXBzZU1hcmdpbnMoCiAgICAgcmV0dXJuIGxvZ2ljYWxUb3A7CiB9CiAKLUxheW91dFVu
aXQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFy
Z2luSW5mbyYgbWFyZ2luSW5mbywgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01h
cmdpbiwgaW50IHlQb3MpCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVl
ZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVuaXQg
b2xkVG9wUG9zTWFyZ2luLCBMYXlvdXRVbml0IG9sZFRvcE5lZ01hcmdpbiwgTGF5b3V0VW5pdCB5
UG9zKQogewogICAgIExheW91dFVuaXQgaGVpZ2h0SW5jcmVhc2UgPSBnZXRDbGVhckRlbHRhKGNo
aWxkLCB5UG9zKTsKICAgICBpZiAoIWhlaWdodEluY3JlYXNlKQpAQCAtMjEzNSw4ICsyMTM1LDYg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICAgICAg
c2V0TG9naWNhbEhlaWdodChuZXdIZWlnaHQpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBDaGFu
Z2UgdG8gdXNlIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LgotICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICBBU1NF
UlQob2xkTGF5b3V0RGVsdGEgPT0gdmlldygpLT5sYXlvdXREZWx0YSgpKTsKIH0KIApAQCAtMjM4
OCw2ICsyMzg2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAog
CiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKICAgICB1bnNpZ25lZCBj
b2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworCiAgICAgYm9vbCBhbnRpYWxpYXMgPSBz
aG91bGRBbnRpYWxpYXNMaW5lcyhwYWludEluZm8uY29udGV4dCk7CiAKICAgICBpZiAoY29sSW5m
by0+cHJvZ3Jlc3Npb25BeGlzKCkgPT0gQ29sdW1uSW5mbzo6SW5saW5lQXhpcykgewpAQCAtMjUw
MSwxMCArMjUwMCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKFBhaW50SW5m
CiAgICAgaWYgKGRvY3VtZW50KCktPmRpZExheW91dFdpdGhQZW5kaW5nU3R5bGVzaGVldHMoKSAm
JiAhaXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gaGFuZCBvZmYgcGFpbnRpbmcgaW4gdGhlIGxpbmUgYm94IHRyZWUgd2l0aCB0aGUgYWNj
dW11bGF0ZWQgZXJyb3Igb2YgdGhlIHJlbmRlciB0cmVlLCBhcyB0aGlzIHdpbGwgY2F1c2UKKyAg
ICAvLyB1cyB0byBtZXNzIHVwIHBhaW50aW5nIGFsaWduZWQgdGhpbmdzIChzdWNoIGFzIHVuZGVy
bGluZXMgaW4gdGV4dCkgd2l0aCBib3RoIHRoZSByZW5kZXIgdHJlZSBhbmQgbGluZSBib3ggdHJl
ZSdzIGVycm9yLgorICAgIExheW91dFBvaW50IHJvdW5kZWRQYWludE9mZnNldCA9IHJvdW5kZWRJ
bnRQb2ludChwYWludE9mZnNldCk7CiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAg
IG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgICAg
ICBtX2xpbmVCb3hlcy5wYWludCh0aGlzLCBwYWludEluZm8sIHJvdW5kZWRQYWludE9mZnNldCk7
CiAgICAgZWxzZQotICAgICAgICBwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OworICAgICAgICBwYWludENoaWxkcmVuKHBhaW50SW5mbywgcm91bmRlZFBhaW50T2Zmc2V0KTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMjg5NCw3ICsyODk2LDcgQEAg
c3RhdGljIHZvaWQgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKGNvbgogICAgIFJlbmRlckJsb2Nr
OjpQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwb3Np
dGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJCbG9jazo6UG9zaXRpb25lZE9i
amVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJlbmRlckJveCogciA9ICppdDsK
LSAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KExheW91dFJlY3Qob2Zmc2V0Lngo
KSArIHItPngoKSwgb2Zmc2V0LnkoKSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkp
KTsKKyAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KEludFJlY3Qob2Zmc2V0Lngo
KSArIHItPngoKSwgb2Zmc2V0LnkoKSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkp
KTsKICAgICB9CiB9CiAKQEAgLTMyOTYsMTIgKzMyOTgsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cmVtb3ZlRmxvYXRpbmdPYmplY3QoUgogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCkpIHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAg
ICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChyKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKTsKKyAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQocik7CisgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpOwog
CiAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQ5OTUuCi0gICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b20gPCAw
IHx8IGxvZ2ljYWxCb3R0b20gPCBsb2dpY2FsVG9wIHx8IGxvZ2ljYWxUb3AgPT0gbnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJv
dHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNhbFRvcCA9PSBu
dW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCkpCisgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCk7CiAgICAgICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSB6ZXJv
LSBhbmQgbGVzcy10aGFuLXplcm8taGVpZ2h0IGZsb2F0czogdGhvc2UgZG9uJ3QgdG91Y2gKICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpbmUgdGhhdCB0aGV5J3JlIG9uLCBidXQgaXQgc3Rp
bGwgbmVlZHMgdG8gYmUgZGlydGllZC4gVGhpcyBpcwpAQCAtMzY5MCw3ICszNjkyLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbAogICAgICAgICAgICAgYm90dG9t
ID0gbWluKGZsb2F0Qm90dG9tLCBib3R0b20pOwogICAgIH0KIAotICAgIHJldHVybiBib3R0b20g
PT0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpID8gbG9naWNhbEhlaWdodCA6IGJv
dHRvbTsKKyAgICByZXR1cm4gYm90dG9tID09IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+Ojpt
YXgoKSA/IDAgOiBib3R0b207CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxvd2VzdEZs
b2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpIGNvbnN0CkBA
IC00MzEyLDcgKzQzMTQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnRSCiAgICAgaWYgKGNoaWxkLT5pc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgY2hpbGRMb2Nh
dGlvbiArPSBjaGlsZC0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwogICAgIC8vIEZJWE1FOiBU
aGlzIGlzIHdyb25nIGlmIHRoZSBjaGlsZCdzIHdyaXRpbmctbW9kZSBpcyBkaWZmZXJlbnQgZnJv
bSB0aGUgcGFyZW50J3MuCi0gICAgTGF5b3V0UG9pbnQgcG9pbnRJbkNoaWxkQ29vcmRpbmF0ZXMo
cG9pbnRJblBhcmVudENvb3JkaW5hdGVzIC0gY2hpbGRMb2NhdGlvbik7CisgICAgTGF5b3V0UG9p
bnQgcG9pbnRJbkNoaWxkQ29vcmRpbmF0ZXModG9MYXlvdXRQb2ludChwb2ludEluUGFyZW50Q29v
cmRpbmF0ZXMgLSBjaGlsZExvY2F0aW9uKSk7CiAKICAgICAvLyBJZiB0aGlzIGlzIGFuIGFub255
bW91cyByZW5kZXJlciwgd2UganVzdCByZWN1ciBub3JtYWxseQogICAgIE5vZGUqIGNoaWxkTm9k
ZSA9IGNoaWxkLT5ub2RlKCk7CkBAIC00NDc2LDggKzQ0NzgsOSBAQCBpbnQgUmVuZGVyQmxvY2s6
OmNvbHVtbkdhcCgpIGNvbnN0CiB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQ29sdW1uV2lkdGgoKQog
eyAgICAKICAgICAvLyBDYWxjdWxhdGUgb3VyIGNvbHVtbiB3aWR0aCBhbmQgY29sdW1uIGNvdW50
LgorICAgIC8vIEZJWE1FOiBDYW4gb3ZlcmZsb3cgb24gZmFzdC9ibG9jay9mbG9hdC9mbG9hdC1u
b3QtcmVtb3ZlZC1mcm9tLW5leHQtc2libGluZzQuaHRtbCwgc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc0NAogICAgIHVuc2lnbmVkIGRlc2lyZWRDb2x1bW5D
b3VudCA9IDE7Ci0gICAgaW50IGRlc2lyZWRDb2x1bW5XaWR0aCA9IGNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKKyAgICBMYXlvdXRVbml0IGRlc2lyZWRDb2x1bW5XaWR0aCA9IGNvbnRlbnRMb2dpY2Fs
V2lkdGgoKTsKICAgICAKICAgICAvLyBGb3Igbm93LCB3ZSBkb24ndCBzdXBwb3J0IG11bHRpLWNv
bHVtbiBsYXlvdXRzIHdoZW4gcHJpbnRpbmcsIHNpbmNlIHdlIGhhdmUgdG8gZG8gYSBsb3Qgb2Yg
d29yayBmb3IgcHJvcGVyIHBhZ2luYXRpb24uCiAgICAgaWYgKGRvY3VtZW50KCktPnBhZ2luYXRl
ZCgpIHx8IChzdHlsZSgpLT5oYXNBdXRvQ29sdW1uQ291bnQoKSAmJiBzdHlsZSgpLT5oYXNBdXRv
Q29sdW1uV2lkdGgoKSkgfHwgIXN0eWxlKCktPmhhc0lubGluZUNvbHVtbkF4aXMoKSkgewpAQCAt
NDQ4NSwxOSArNDQ4OCwxOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQ29sdW1uV2lkdGgoKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBpbnQgYXZhaWxXaWR0aCA9IGRl
c2lyZWRDb2x1bW5XaWR0aDsKLSAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7Ci0gICAgaW50
IGNvbFdpZHRoID0gbWF4KDEsIHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Y29sdW1uV2lkdGgo
KSkpOwotICAgIGludCBjb2xDb3VudCA9IG1heCgxLCBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlKCkt
PmNvbHVtbkNvdW50KCkpKTsKKyAgICBMYXlvdXRVbml0IGF2YWlsV2lkdGggPSBkZXNpcmVkQ29s
dW1uV2lkdGg7CisgICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKKyAgICBMYXlv
dXRVbml0IGNvbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDEsIExheW91dFVuaXQoc3R5bGUoKS0+
Y29sdW1uV2lkdGgoKSkpOworICAgIGludCBjb2xDb3VudCA9IG1heDxpbnQ+KDEsIHN0eWxlKCkt
PmNvbHVtbkNvdW50KCkpOwogCiAgICAgaWYgKHN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgp
ICYmICFzdHlsZSgpLT5oYXNBdXRvQ29sdW1uQ291bnQoKSkgewogICAgICAgICBkZXNpcmVkQ29s
dW1uQ291bnQgPSBjb2xDb3VudDsKLSAgICAgICAgZGVzaXJlZENvbHVtbldpZHRoID0gbWF4PGlu
dD4oMCwgKGF2YWlsV2lkdGggLSAoKGRlc2lyZWRDb2x1bW5Db3VudCAtIDEpICogY29sR2FwKSkg
LyBkZXNpcmVkQ29sdW1uQ291bnQpOworICAgICAgICBkZXNpcmVkQ29sdW1uV2lkdGggPSBtYXg8
TGF5b3V0VW5pdD4oMCwgKGF2YWlsV2lkdGggLSAoKGRlc2lyZWRDb2x1bW5Db3VudCAtIDEpICog
Y29sR2FwKSkgLyBkZXNpcmVkQ29sdW1uQ291bnQpOwogICAgIH0gZWxzZSBpZiAoIXN0eWxlKCkt
Pmhhc0F1dG9Db2x1bW5XaWR0aCgpICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5Db3VudCgpKSB7
Ci0gICAgICAgIGRlc2lyZWRDb2x1bW5Db3VudCA9IG1heDxpbnQ+KDEsIChmbG9hdCkoYXZhaWxX
aWR0aCArIGNvbEdhcCkgLyAoY29sV2lkdGggKyBjb2xHYXApKTsKKyAgICAgICAgZGVzaXJlZENv
bHVtbkNvdW50ID0gbWF4PExheW91dFVuaXQ+KDEsIChhdmFpbFdpZHRoICsgY29sR2FwKSAvIChj
b2xXaWR0aCArIGNvbEdhcCkpOwogICAgICAgICBkZXNpcmVkQ29sdW1uV2lkdGggPSAoKGF2YWls
V2lkdGggKyBjb2xHYXApIC8gZGVzaXJlZENvbHVtbkNvdW50KSAtIGNvbEdhcDsKICAgICB9IGVs
c2UgewotICAgICAgICBkZXNpcmVkQ29sdW1uQ291bnQgPSBtYXgobWluPGludD4oY29sQ291bnQs
IChmbG9hdCkoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyAoY29sV2lkdGggKyBjb2xHYXApKSwgMSk7
CisgICAgICAgIGRlc2lyZWRDb2x1bW5Db3VudCA9IG1heDxMYXlvdXRVbml0PihtaW48TGF5b3V0
VW5pdD4oY29sQ291bnQsIChhdmFpbFdpZHRoICsgY29sR2FwKSAvIChjb2xXaWR0aCArIGNvbEdh
cCkpLCAxKTsKICAgICAgICAgZGVzaXJlZENvbHVtbldpZHRoID0gKChhdmFpbFdpZHRoICsgY29s
R2FwKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkgLSBjb2xHYXA7CiAgICAgfQogICAgIHNldERlc2ly
ZWRDb2x1bW5Db3VudEFuZFdpZHRoKGRlc2lyZWRDb2x1bW5Db3VudCwgZGVzaXJlZENvbHVtbldp
ZHRoKTsKQEAgLTQ1ODIsNyArNDU4NSw3IEBAIExheW91dFJlY3QgUmVuZGVyQmxvY2s6OmNvbHVt
blJlY3RBdChDb2wKICAgICByZXR1cm4gTGF5b3V0UmVjdChjb2xMb2dpY2FsVG9wLCBjb2xMb2dp
Y2FsTGVmdCwgY29sTG9naWNhbEhlaWdodCwgY29sTG9naWNhbFdpZHRoKTsKIH0KIAotYm9vbCBS
ZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVp
Z2h0LCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYgc3RhdGVQ
dXNoZXIpCitib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVk
UGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0
YXRlTWFpbnRhaW5lciYgc3RhdGVQdXNoZXIpCiB7CiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1OTgsMTMgKzQ2MDEsMTMgQEAgYm9vbCBSZW5kZXJC
bG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhcwogICAgICAgICAgICAgLy8gVGhlIGZvcmNlZCBw
YWdlIGJyZWFrcyBhcmUgaW4gY29udHJvbCBvZiB0aGUgYmFsYW5jaW5nLiAgSnVzdCBzZXQgdGhl
IGNvbHVtbiBoZWlnaHQgdG8gdGhlCiAgICAgICAgICAgICAvLyBtYXhpbXVtIHBhZ2UgYnJlYWsg
ZGlzdGFuY2UuCiAgICAgICAgICAgICBpZiAoIXBhZ2VMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXgoY29sSW5mby0+
bWF4aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdl
TG9naWNhbE9mZnNldChib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbnRlbnRM
b2dpY2FsSGVpZ2h0KCkpIC0gY29sSW5mby0+Zm9yY2VkQnJlYWtPZmZzZXQoKSk7CisgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXg8TGF5b3V0VW5p
dD4oY29sSW5mby0+bWF4aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxPZmZzZXQoYm9yZGVyQmVmb3Jl
KCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb250ZW50TG9naWNhbEhlaWdodCgpKSAtIGNvbEluZm8t
PmZvcmNlZEJyZWFrT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGNvbHVtbkhlaWdodCA9IG1h
eChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0KCksIGRpc3RhbmNlQmV0d2VlbkJyZWFrcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudExvZ2ljYWxIZWlnaHQo
KSA+IHBhZ2VMb2dpY2FsSGVpZ2h0ICogZGVzaXJlZENvbHVtbkNvdW50KSB7CiAgICAgICAgICAg
ICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBjb2x1bW5z
LCB3ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVtLgotICAgICAgICAgICAgY29sdW1uSGVpZ2h0ID0g
bWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgY2VpbGVkTGF5b3V0VW5pdCgoZmxv
YXQpY29udGVudExvZ2ljYWxIZWlnaHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOworICAgICAg
ICAgICAgY29sdW1uSGVpZ2h0ID0gbWF4PExheW91dFVuaXQ+KGNvbEluZm8tPm1pbmltdW1Db2x1
bW5IZWlnaHQoKSwgY2VpbGYoKGZsb2F0KWNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgLyBkZXNpcmVk
Q29sdW1uQ291bnQpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvbHVtbkhl
aWdodCAmJiBjb2x1bW5IZWlnaHQgIT0gcGFnZUxvZ2ljYWxIZWlnaHQpIHsKQEAgLTQ3MjMsNyAr
NDcyNiw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1bW5zKEwKIAogICAg
IExheW91dFVuaXQgc3RhcnRPZmZzZXQgPSBtYXgoaXNIb3Jpem9udGFsID8gci55KCkgOiByLngo
KSwgYmVmb3JlQm9yZGVyUGFkZGluZyk7CiAgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXQgPSBtaW48
TGF5b3V0VW5pdD4oaXNIb3Jpem9udGFsID8gci5tYXhZKCkgOiByLm1heFgoKSwgYmVmb3JlQm9y
ZGVyUGFkZGluZyArIGNvbENvdW50ICogY29sSGVpZ2h0KTsKLSAgICAKKworICAgIC8vIEZJWE1F
OiBDYW4gb3ZlcmZsb3cgb24gZmFzdC9ibG9jay9mbG9hdC9mbG9hdC1ub3QtcmVtb3ZlZC1mcm9t
LW5leHQtc2libGluZzQuaHRtbCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODc0NAogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gKHN0YXJ0T2Zmc2V0IC0g
YmVmb3JlQm9yZGVyUGFkZGluZykgLyBjb2xIZWlnaHQ7CiAgICAgdW5zaWduZWQgZW5kQ29sdW1u
ID0gKGVuZE9mZnNldCAtIGJlZm9yZUJvcmRlclBhZGRpbmcpIC8gY29sSGVpZ2h0OwogCkBAIC00
NzMzLDYgKzQ3MzcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhM
CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSBsb2dpY2FsTGVmdE9mZnNl
dEZvckNvbnRlbnQoKTsKICAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0
KGNvbEluZm8sIHN0YXJ0Q29sdW1uKTsKICAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9
IHI7CisKICAgICAgICAgaWYgKGNvbEluZm8tPnByb2dyZXNzaW9uQXhpcygpID09IENvbHVtbklu
Zm86OklubGluZUF4aXMpIHsKICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCiAgICAgICAg
ICAgICAgICAgcmVwYWludFJlY3QubW92ZShjb2xSZWN0LngoKSAtIGxvZ2ljYWxMZWZ0T2Zmc2V0
LCAtIHN0YXRpY19jYXN0PGludD4oc3RhcnRDb2x1bW4pICogY29sSGVpZ2h0KTsKQEAgLTU0Mzcs
NyArNTQ0Miw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24KICAg
ICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXllcigpICYmIChsYXllcigpLT5tYXJxdWVl
KCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNhbFNj
cm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSAhPSAwKQogICAgICAgICAgICAg
OiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbFhPZmZz
ZXQoKSAhPSAwKSkpKSB8fCAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOwog
ICAgICAgICAKLSAgICAgICAgaW50IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUgPyAtMSA6
IGxhc3RMaW5lQm94QmFzZWxpbmUoKTsKKyAgICAgICAgaW50IGJhc2VsaW5lUG9zID0gaWdub3Jl
QmFzZWxpbmUgPyBMYXlvdXRVbml0KC0xKSA6IGxhc3RMaW5lQm94QmFzZWxpbmUoKTsKICAgICAg
ICAgCiAgICAgICAgIGludCBib3R0b21PZkNvbnRlbnQgPSBkaXJlY3Rpb24gPT0gSG9yaXpvbnRh
bExpbmUgPyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGNvbnRlbnRIZWlnaHQoKSA6IGJv
cmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSArIGNvbnRlbnRXaWR0aCgpOwogICAgICAgICBp
ZiAoYmFzZWxpbmVQb3MgIT0gLTEgJiYgYmFzZWxpbmVQb3MgPD0gYm90dG9tT2ZDb250ZW50KQpA
QCAtNTk1Myw3ICs1OTU4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4TWFyZ2luQWZ0ZXJW
YWx1ZQogICAgIG1fcmFyZURhdGEtPm1fbWFyZ2lucy5zZXROZWdhdGl2ZU1hcmdpbkFmdGVyKG5l
Zyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQp
Cit2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQoTGF5b3V0VW5pdCBzdHJ1dCkK
IHsKICAgICBpZiAoIW1fcmFyZURhdGEpIHsKICAgICAgICAgaWYgKCFzdHJ1dCkKQEAgLTYyODQs
NyArNjI4OSw3IEBAIHN0YXRpYyBib29sIGluTm9ybWFsRmxvdyhSZW5kZXJCb3gqIGNoaWwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrKFJl
bmRlckJveCogY2hpbGQsIGludCBsb2dpY2FsT2Zmc2V0KQorTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6YXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxP
ZmZzZXQpCiB7CiAgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hl
biB3ZSBzdXBwb3J0IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3
KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKQEAgLTYzMDAsNyArNjMw
NSw3IEBAIGludCBSZW5kZXJCbG9jazo6YXBwbHlCZWZvcmVCcmVhayhSZW5kZXIKICAgICByZXR1
cm4gbG9naWNhbE9mZnNldDsKIH0KIAotaW50IFJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWso
UmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQsIE1hcmdpbkluZm8mIG1hcmdpbklu
Zm8pCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQog
ewogICAgIC8vIEZJWE1FOiBBZGQgcGFnZSBicmVhayBjaGVja2luZyBoZXJlIHdoZW4gd2Ugc3Vw
cG9ydCBwcmludGluZy4KICAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gdmlldygpLT5sYXlv
dXRTdGF0ZSgpLT5pc1BhZ2luYXRpbmdDb2x1bW5zKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gOTkwMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBA
IHB1YmxpYzoKICAgICAvLyBjb21wdXRlIHRoZSByZWdpb24gYWxsIG92ZXIgYWdhaW4gd2hlbiB5
b3UgYWxyZWFkeSBrbm93IGl0LgogICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRo
Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSwgUmVuZGVyUmVnaW9u
KiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtYXgoMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShwb3NpdGlvbiwgZmlyc3RMaW5lLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UpCisgICAgICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UpCiAgICAgICAgICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShw
b3NpdGlvbiwgZmlyc3RMaW5lLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UpKTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExh
eW91dFVuaXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwg
TGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdCAKQEAgLTIz
MCw4ICsyMzAsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY29sdW1uQ291bnQoQ29sdW1uSW5m
byopIGNvbnN0OwogICAgIExheW91dFJlY3QgY29sdW1uUmVjdEF0KENvbHVtbkluZm8qLCB1bnNp
Z25lZCkgY29uc3Q7CiAKLSAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogMDsgfQotICAgIHZv
aWQgc2V0UGFnaW5hdGlvblN0cnV0KGludCk7CisgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3Ry
dXQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9u
U3RydXQgOiAwOyB9CisgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3RydXQoTGF5b3V0VW5pdCk7CiAg
ICAgCiAgICAgLy8gVGhlIHBhZ2UgbG9naWNhbCBvZmZzZXQgaXMgdGhlIG9iamVjdCdzIG9mZnNl
dCBmcm9tIHRoZSB0b3Agb2YgdGhlIHBhZ2UgaW4gdGhlIHBhZ2UgcHJvZ3Jlc3Npb24KICAgICAv
LyBkaXJlY3Rpb24gKHNvIGFuIHgtb2Zmc2V0IGluIHZlcnRpY2FsIHRleHQgYW5kIGEgeS1vZmZz
ZXQgZm9yIGhvcml6b250YWwgdGV4dCkuCkBAIC0yOTYsNyArMjk2LDcgQEAgcHVibGljOgogICAg
IExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qLCBM
YXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0OwogICAgIExh
eW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJl
Z2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdAog
ICAgIHsgCi0gICAgICAgIHJldHVybiBtYXgoMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVu
dChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0KKyAgICAgICAgcmV0
dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lv
biwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgLQogICAgICAgICAgICAgbG9naWNh
bExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSkpOyB9CiAgICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVn
aW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkg
Y29uc3QKICAgICB7CkBAIC00NzYsMTMgKzQ3NiwxMyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBG
bG9hdFdpdGhSZWN0IHsKICAgICAgICAgRmxvYXRXaXRoUmVjdChSZW5kZXJCb3gqIGYpCiAgICAg
ICAgICAgICA6IG9iamVjdChmKQotICAgICAgICAgICAgLCByZWN0KEludFJlY3QoZi0+eCgpIC0g
Zi0+bWFyZ2luTGVmdCgpLCBmLT55KCkgLSBmLT5tYXJnaW5Ub3AoKSwgZi0+d2lkdGgoKSArIGYt
Pm1hcmdpbkxlZnQoKSArIGYtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2lu
VG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSkpCisgICAgICAgICAgICAsIHJlY3QoTGF5b3V0UmVj
dChmLT54KCkgLSBmLT5tYXJnaW5MZWZ0KCksIGYtPnkoKSAtIGYtPm1hcmdpblRvcCgpLCBmLT53
aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkg
KyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKSkKICAgICAgICAgICAgICwgZXZl
ckhhZExheW91dChmLT5tX2V2ZXJIYWRMYXlvdXQpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAg
ICAgICAgIFJlbmRlckJveCogb2JqZWN0OwotICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAg
IExheW91dFJlY3QgcmVjdDsKICAgICAgICAgYm9vbCBldmVySGFkTGF5b3V0OwogICAgIH07CiAK
QEAgLTU3NCw2ICs1NzQsNyBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRG
b3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eCgpIDogY2hpbGQtPnkoKTsgfQogICAgIExh
eW91dFVuaXQgbG9naWNhbFJpZ2h0Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxk
KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPm1heFgo
KSA6IGNoaWxkLT5tYXhZKCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aEZvckZsb2F0
KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGNoaWxkLT53aWR0aCgpIDogY2hpbGQtPmhlaWdodCgpOyB9CisKICAg
ICB2b2lkIHNldExvZ2ljYWxUb3BGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIExheW91
dFVuaXQgbG9naWNhbFRvcCkKICAgICB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQpAQCAtNzY5LDcgKzc3MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBvZmZzZXRGb3JD
b250ZW50cyhMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgdm9pZCBjYWxjQ29sdW1uV2lkdGgo
KTsKLSAgICBib29sIGxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhl
aWdodCwgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKTsKKyAg
ICBib29sIGxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCwg
TGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJik7CiAg
ICAgdm9pZCBtYWtlQ2hpbGRyZW5Bbm9ueW1vdXNDb2x1bW5CbG9ja3MoUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94LCBSZW5kZXJPYmplY3QqIG5ld0No
aWxkKTsKIAogICAgIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29u
c3Q7CkBAIC04MjUsMTIgKzgyNiwyMCBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNldE1hcmdp
bkJlZm9yZVF1aXJrKGJvb2wgYikgeyBtX21hcmdpbkJlZm9yZVF1aXJrID0gYjsgfQogICAgICAg
ICB2b2lkIHNldE1hcmdpbkFmdGVyUXVpcmsoYm9vbCBiKSB7IG1fbWFyZ2luQWZ0ZXJRdWlyayA9
IGI7IH0KICAgICAgICAgdm9pZCBzZXREZXRlcm1pbmVkTWFyZ2luQmVmb3JlUXVpcmsoYm9vbCBi
KSB7IG1fZGV0ZXJtaW5lZE1hcmdpbkJlZm9yZVF1aXJrID0gYjsgfQotICAgICAgICB2b2lkIHNl
dFBvc2l0aXZlTWFyZ2luKGludCBwKSB7IG1fcG9zaXRpdmVNYXJnaW4gPSBwOyB9Ci0gICAgICAg
IHZvaWQgc2V0TmVnYXRpdmVNYXJnaW4oaW50IG4pIHsgbV9uZWdhdGl2ZU1hcmdpbiA9IG47IH0K
LSAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbklmTGFyZ2VyKGludCBwKSB7IGlmIChwID4g
bV9wb3NpdGl2ZU1hcmdpbikgbV9wb3NpdGl2ZU1hcmdpbiA9IHA7IH0KLSAgICAgICAgdm9pZCBz
ZXROZWdhdGl2ZU1hcmdpbklmTGFyZ2VyKGludCBuKSB7IGlmIChuID4gbV9uZWdhdGl2ZU1hcmdp
bikgbV9uZWdhdGl2ZU1hcmdpbiA9IG47IH0KKyAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdp
bihMYXlvdXRVbml0IHApIHsgbV9wb3NpdGl2ZU1hcmdpbiA9IHA7IH0KKyAgICAgICAgdm9pZCBz
ZXROZWdhdGl2ZU1hcmdpbihMYXlvdXRVbml0IG4pIHsgbV9uZWdhdGl2ZU1hcmdpbiA9IG47IH0K
KyAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbklmTGFyZ2VyKExheW91dFVuaXQgcCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHAgPiBtX3Bvc2l0aXZlTWFyZ2luKQorICAgICAgICAg
ICAgICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBwOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0
TmVnYXRpdmVNYXJnaW5JZkxhcmdlcihMYXlvdXRVbml0IG4pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChuID4gbV9uZWdhdGl2ZU1hcmdpbikKKyAgICAgICAgICAgICAgICBtX25lZ2F0aXZl
TWFyZ2luID0gbjsKKyAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0TWFyZ2luKGludCBwLCBp
bnQgbikgeyBtX3Bvc2l0aXZlTWFyZ2luID0gcDsgbV9uZWdhdGl2ZU1hcmdpbiA9IG47IH0KKyAg
ICAgICAgdm9pZCBzZXRNYXJnaW4oTGF5b3V0VW5pdCBwLCBMYXlvdXRVbml0IG4pIHsgbV9wb3Np
dGl2ZU1hcmdpbiA9IHA7IG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9CiAKICAgICAgICAgYm9vbCBh
dEJlZm9yZVNpZGVPZkJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9hdEJlZm9yZVNpZGVPZkJsb2Nr
OyB9CiAgICAgICAgIGJvb2wgY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdEJlZm9yZVNpZGVPZkJsb2NrICYmIG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVX
aXRoQ2hpbGRyZW47IH0KQEAgLTg1NCw3ICs4NjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFu
ZGxlUG9zaXRpb25lZENoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsK
ICAgICBib29sIGhhbmRsZVJ1bkluQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7CiAgICAgTGF5b3V0
VW5pdCBjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYpOwotICAg
IExheW91dFVuaXQgY2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5J
bmZvJiwgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbiwgaW50IHlQb3Mp
OworICAgIExheW91dFVuaXQgY2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBN
YXJnaW5JbmZvJiwgTGF5b3V0VW5pdCBvbGRUb3BQb3NNYXJnaW4sIExheW91dFVuaXQgb2xkVG9w
TmVnTWFyZ2luLCBMYXlvdXRVbml0IHlQb3MpOwogICAgIExheW91dFVuaXQgZXN0aW1hdGVMb2dp
Y2FsVG9wUG9zaXRpb24oUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIExheW91
dFVuaXQmIGVzdGltYXRlV2l0aG91dFBhZ2luYXRpb24pOwogICAgIHZvaWQgZGV0ZXJtaW5lTG9n
aWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpOwogICAgIHZvaWQgaGFu
ZGxlQWZ0ZXJTaWRlT2ZCbG9jayhMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBib3R0b20sIE1h
cmdpbkluZm8mKTsKQEAgLTg4MCw4ICs4ODksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgTGF5b3V0VW5p
dCBuZXh0UGFnZUxvZ2ljYWxUb3AoTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBQYWdlQm91bmRh
cnlSdWxlID0gRXhjbHVkZVBhZ2VCb3VuZGFyeSkgY29uc3Q7CiAgICAgYm9vbCBoYXNOZXh0UGFn
ZShMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUgPSBFeGNsdWRlUGFn
ZUJvdW5kYXJ5KSBjb25zdDsKIAotICAgIGludCBhcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCog
Y2hpbGQsIGludCBsb2dpY2FsT2Zmc2V0KTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBi
cmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRo
ZSBuZXh0IHBhZ2UvY29sdW1uLgotICAgIGludCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBj
aGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOyAvLyBJZiB0
aGUgY2hpbGQgaGFzIGFuIGFmdGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyBvZmZzZXQgdGhh
dCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBMYXlvdXRV
bml0IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2Fs
T2Zmc2V0KTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhlbiByZXR1cm4g
YSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1u
LgorICAgIExheW91dFVuaXQgYXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCogY2hpbGQsIExheW91
dFVuaXQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFu
IGFmdGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyBvZmZzZXQgdGhhdCBzaGlmdHMgdG8gdGhl
IHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KIAogICAgIExheW91dFVuaXQgcGFnZUxvZ2lj
YWxIZWlnaHRGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0OwogICAgIExheW91dFVu
aXQgcGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQs
IFBhZ2VCb3VuZGFyeVJ1bGUgPSBJbmNsdWRlUGFnZUJvdW5kYXJ5KSBjb25zdDsKQEAgLTkxNSwx
NSArOTI0LDE1IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZs
b2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09i
amVjdFNldDsKICAgICB0eXBlZGVmIEZsb2F0aW5nT2JqZWN0U2V0Ojpjb25zdF9pdGVyYXRvciBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yOwotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8TGF5b3V0
VW5pdCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVydmFsOwotICAgIHR5cGVk
ZWYgUE9ESW50ZXJ2YWxUcmVlPExheW91dFVuaXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdP
YmplY3RUcmVlOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8aW50LCBGbG9hdGluZ09iamVjdCo+
IEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWw7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8aW50
LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0VHJlZTsKICAgICAKICAgICB0ZW1wbGF0
ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+CiAgICAgY2xhc3MgRmxvYXRJ
bnRlcnZhbFNlYXJjaEFkYXB0ZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBGbG9h
dGluZ09iamVjdEludGVydmFsIEludGVydmFsVHlwZTsKICAgICAgICAgCi0gICAgICAgIEZsb2F0
SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgTGF5b3V0
VW5pdCB2YWx1ZSwgTGF5b3V0VW5pdCYgb2Zmc2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5p
bmcpCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlciwgaW50IHZhbHVlLCBMYXlvdXRVbml0JiBvZmZzZXQsIExheW91dFVuaXQqIGhl
aWdodFJlbWFpbmluZykKICAgICAgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKICAgICAg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQpA
QCAtOTMxLDEzICs5NDAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpbmxpbmUgTGF5b3V0VW5pdCBsb3dWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWU7IH0KLSAgICAgICAgaW5saW5lIExheW91dFVuaXQgaGlnaFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBpbmxpbmUgaW50IGxvd1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBpbmxpbmUgaW50IGhpZ2hWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICAgICAgdm9pZCBjb2xsZWN0SWZOZWVkZWQoY29uc3Qg
SW50ZXJ2YWxUeXBlJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBSZW5k
ZXJCbG9jayogbV9yZW5kZXJlcjsKLSAgICAgICAgTGF5b3V0VW5pdCBtX3ZhbHVlOworICAgICAg
ICBpbnQgbV92YWx1ZTsKICAgICAgICAgTGF5b3V0VW5pdCYgbV9vZmZzZXQ7CiAgICAgICAgIExh
eW91dFVuaXQqIG1faGVpZ2h0UmVtYWluaW5nOwogICAgIH07CkBAIC0xMDAzLDIwICsxMDEyLDIw
IEBAIHByaXZhdGU6CiAgICAgICAgIHsgCiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgaW50
IHBvc2l0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCisg
ICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IHBvc2l0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25z
dCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAgIHsgCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYXg8TGF5b3V0VW5pdD4oYmxvY2stPm1hcmdpbkJlZm9yZSgpLCAwKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgc3RhdGljIGludCBuZWdhdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQo
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQorICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBuZWdh
dGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAg
ICB7IAogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KC1ibG9jay0+bWFy
Z2luQmVmb3JlKCksIDApOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBpbnQgcG9zaXRpdmVN
YXJnaW5BZnRlckRlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQorICAgICAgICBzdGF0
aWMgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRV
bml0PihibG9jay0+bWFyZ2luQWZ0ZXIoKSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGlj
IGludCBuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2sp
CisgICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IG5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGNv
bnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWF4PExheW91dFVuaXQ+KC1ibG9jay0+bWFyZ2luQWZ0ZXIoKSwgMCk7CiAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>