<?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>82196</bug_id>
          
          <creation_ts>2012-03-26 06:31:53 -0700</creation_ts>
          <short_desc>Revert RenderTheme paint and layout functions to ints</short_desc>
          <delta_ts>2012-04-03 06:56:16 -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>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>587665</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-26 06:31:53 -0700</bug_when>
    <thetext>While We&apos;re converting WebCore layout to sub-pixels, we continue to paint RenderBoxes on pixel boundaries, and when possible we avoid exposing sub-pixel units to platform code. RenderTheme components are platform-specific, and therefor should be isolated from WebCore&apos;s sub-pixel units.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587689</commentid>
    <comment_count>1</comment_count>
      <attachid>133798</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-26 07:02:55 -0700</bug_when>
    <thetext>Created attachment 133798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588083</commentid>
    <comment_count>2</comment_count>
      <attachid>133798</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-26 13:41:52 -0700</bug_when>
    <thetext>Comment on attachment 133798
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        before passing coordinates to the external code. RenderTheme encompasses a set of objects whose
&gt; +        rendering is influenced by the platform. This change reverts the interface between this platform
&gt; +        code and WebCore to be integers.

It looks like some platforms are not using int for native geometries (Mac for example uses float in NSSize) which makes me wonder if it&apos;s not desirable to keep the sub-pixel precision here. Your take looks like it&apos;s to just use device pixels (thus losing some precision), is it really ridiculous to keep the extended precision here? (I don&apos;t see a technical limitation here as FractionalUnit will be in platform/ so it&apos;s not a layering violation AFAICT)

&gt; Source/WebCore/ChangeLog:22
&gt; +        (WebCore::IntRect::pixelSnappedLocation): Temporary mirrors to the functions of the same name on
&gt; +        FractionalLayoutRect.
&gt; +        (WebCore::IntRect::pixelSnappedSize): Ditto.

Let&apos;s mark those 2 as temporary (ie don&apos;t use and please remove when done with the transition).

&gt; Source/WebCore/ChangeLog:55
&gt; +        * rendering/RenderThemeMac.mm:
&gt; +        (WebCore::RenderThemeMac::adjustRepaintRect):
&gt; +        (WebCore::RenderThemeMac::inflateRect):
&gt; +        (WebCore::RenderThemeMac::setControlSize):
&gt; +        (WebCore::RenderThemeMac::paintCapsLockIndicator):
&gt; +        (WebCore::RenderThemeMac::paintMenuList):
&gt; +        (WebCore::RenderThemeMac::meterSizeForBounds):
&gt; +        (WebCore::RenderThemeMac::setPopupButtonCellState):
&gt; +        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
&gt; +        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton):

How about the other RenderThemes?

&gt; Source/WebCore/rendering/RenderThemeMac.h:48
&gt; +    virtual void adjustRepaintRect(const RenderObject*, IntRect&amp;);

Let&apos;s annotate those functions with OVERRIDE as we go (not repeated in the rest of RenderThemeMac).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589137</commentid>
    <comment_count>3</comment_count>
      <attachid>133798</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-27 12:28:36 -0700</bug_when>
    <thetext>Comment on attachment 133798
Patch

Looks like you have some unanswered questions from Julien.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589244</commentid>
    <comment_count>4</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-27 14:01:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 133798 [details])
&gt; Looks like you have some unanswered questions from Julien.

Totally accurate. I&apos;m working on the best solution here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593429</commentid>
    <comment_count>5</comment_count>
      <attachid>135088</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-04-02 06:54:00 -0700</bug_when>
    <thetext>Created attachment 135088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593942</commentid>
    <comment_count>6</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-04-02 15:49:11 -0700</bug_when>
    <thetext>The updated patch addresses the previous comments and concerns, please take another look when you get a chance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594033</commentid>
    <comment_count>7</comment_count>
      <attachid>135088</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-02 16:57:08 -0700</bug_when>
    <thetext>Comment on attachment 135088
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        Some platforms, such as Mac, use sub-pixel units for layout and rendering, but it&apos;s still not
&gt; +        desirable to pass sub-pixel values to these API&apos;s, because ultimately we&apos;ll render these objects
&gt; +        at whole-pixel values to avoid anti-aliasing.

I like your explanation, thanks for digging this.

&gt; Source/WebCore/rendering/RenderThemeChromiumSkia.cpp:292
&gt; +    IntRect cancelButtonRect(cancelButtonObject-&gt;offsetFromAncestorContainer(inputRenderBox).width(),
&gt; +        inputContentBox.y() + (inputContentBox.height() - cancelButtonSize + 1) / 2,
&gt; +        cancelButtonSize, cancelButtonSize);

I prefer when the arguments on the non-first row are aligned with the argument on the line above but our style guide is silent on that so it&apos;s up to you.

&gt; Source/WebCore/rendering/RenderThemeChromiumSkia.cpp:335
&gt; +    IntRect magnifierRect(magnifierObject-&gt;offsetFromAncestorContainer(inputRenderBox).width(),
&gt; +        inputContentBox.y() + (inputContentBox.height() - magnifierSize + 1) / 2,
&gt; +        magnifierSize, magnifierSize);

Ditto.

&gt; Source/WebCore/rendering/RenderThemeChromiumSkia.cpp:368
&gt; +    IntRect magnifierRect(magnifierObject-&gt;offsetFromAncestorContainer(inputRenderBox).width(),
&gt; +        inputContentBox.y() + (inputContentBox.height() - magnifierHeight + 1) / 2,
&gt; +        magnifierWidth, magnifierHeight);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594035</commentid>
    <comment_count>8</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-04-02 17:00:00 -0700</bug_when>
    <thetext>Thanks Julien!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594353</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-04-03 03:56:44 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 135088 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135088&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        Some platforms, such as Mac, use sub-pixel units for layout and rendering, but it&apos;s still not
&gt; &gt; +        desirable to pass sub-pixel values to these API&apos;s, because ultimately we&apos;ll render these objects
&gt; &gt; +        at whole-pixel values to avoid anti-aliasing.
&gt; 
&gt; I like your explanation, thanks for digging this.

Thank you kindly :)

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderThemeChromiumSkia.cpp:292
&gt; &gt; +    IntRect cancelButtonRect(cancelButtonObject-&gt;offsetFromAncestorContainer(inputRenderBox).width(),
&gt; &gt; +        inputContentBox.y() + (inputContentBox.height() - cancelButtonSize + 1) / 2,
&gt; &gt; +        cancelButtonSize, cancelButtonSize);
&gt; 
&gt; I prefer when the arguments on the non-first row are aligned with the argument on the line above but our style guide is silent on that so it&apos;s up to you.

I actually agree, but have been pressed for the former style in the past. I&apos;ll update the style and land.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderThemeChromiumSkia.cpp:335
&gt; &gt; +    IntRect magnifierRect(magnifierObject-&gt;offsetFromAncestorContainer(inputRenderBox).width(),
&gt; &gt; +        inputContentBox.y() + (inputContentBox.height() - magnifierSize + 1) / 2,
&gt; &gt; +        magnifierSize, magnifierSize);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderThemeChromiumSkia.cpp:368
&gt; &gt; +    IntRect magnifierRect(magnifierObject-&gt;offsetFromAncestorContainer(inputRenderBox).width(),
&gt; &gt; +        inputContentBox.y() + (inputContentBox.height() - magnifierHeight + 1) / 2,
&gt; &gt; +        magnifierWidth, magnifierHeight);
&gt; 
&gt; Ditto.

Thanks Julien!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594358</commentid>
    <comment_count>10</comment_count>
      <attachid>135305</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-04-03 04:05:26 -0700</bug_when>
    <thetext>Created attachment 135305
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594448</commentid>
    <comment_count>11</comment_count>
      <attachid>135305</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-03 06:56:11 -0700</bug_when>
    <thetext>Comment on attachment 135305
Patch for landing

Clearing flags on attachment: 135305

Committed r113030: &lt;http://trac.webkit.org/changeset/113030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594449</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-03 06:56:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133798</attachid>
            <date>2012-03-26 07:02:55 -0700</date>
            <delta_ts>2012-04-02 06:53:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82196-20120326150253.patch</filename>
            <type>text/plain</type>
            <size>23784</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAzLTI2ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZlcnQgUmVuZGVyVGhl
bWUgcGFpbnQgYW5kIGxheW91dCBmdW5jdGlvbnMgdG8gaW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIxOTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGRlYWxpbmcgd2l0aCBvYmplY3QgdGhh
dCBhcmUgcmVuZGVyZWQgb3V0c2lkZSBvZiBXZWJDb3JlLCB3ZSBkbyBhbGwgbmVjZXNzYXJ5IHBp
eGVsIHNuYXBwaW5nCisgICAgICAgIGJlZm9yZSBwYXNzaW5nIGNvb3JkaW5hdGVzIHRvIHRoZSBl
eHRlcm5hbCBjb2RlLiBSZW5kZXJUaGVtZSBlbmNvbXBhc3NlcyBhIHNldCBvZiBvYmplY3RzIHdo
b3NlCisgICAgICAgIHJlbmRlcmluZyBpcyBpbmZsdWVuY2VkIGJ5IHRoZSBwbGF0Zm9ybS4gVGhp
cyBjaGFuZ2UgcmV2ZXJ0cyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhpcyBwbGF0Zm9ybQorICAg
ICAgICBjb2RlIGFuZCBXZWJDb3JlIHRvIGJlIGludGVnZXJzLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRnJhY3Rpb25hbExheW91dFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxM
YXlvdXRSZWN0OjpwaXhlbFNuYXBwZWRMb2NhdGlvbik6IENvbnZlbmllbmNlIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnBpeGVsU25hcHBlZFNpemUp
OiBEaXR0by4KKyAgICAgICAgKEZyYWN0aW9uYWxMYXlvdXRSZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpwaXhl
bFNuYXBwZWRMb2NhdGlvbik6IFRlbXBvcmFyeSBtaXJyb3JzIHRvIHRoZSBmdW5jdGlvbnMgb2Yg
dGhlIHNhbWUgbmFtZSBvbgorICAgICAgICBGcmFjdGlvbmFsTGF5b3V0UmVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OkludFJlY3Q6OnBpeGVsU25hcHBlZFNpemUpOiBEaXR0by4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFp
bnRCb3hEZWNvcmF0aW9ucyk6IEFkZGluZyBhIGxvY2FsIHBpeGVsIHNuYXBwZWQgcGFpbnQgcmVj
dCB0byBhdm9pZAorICAgICAgICByZXBlYXRlZCBwaXhlbCBzbmFwcGluZy4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVs
U25hcHBlZFNpemUpOiBDb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250
cm9sczo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24pOiBUaGlzIHN0YXRpYyBmdW5j
dGlvbiBpcyBvbmx5IGNhbGxlZAorICAgICAgICBmcm9tIFJlbmRlclRoZW1lIHBsYXRmb3JtIGNv
ZGUuIENoYW5naW5nIGl0IHRvIG9wZXJhdGUgb24gcGl4ZWwgc25hcHBlZCB2YWx1ZXMgc2luY2Ug
d2UgZG9uJ3Qgd2FudAorICAgICAgICB0byBwaXBlIExheW91dFVuaXRzIHRocm91Z2ggdGhhdCBj
b2RlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZXRlcjo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCk6IENoYW5naW5nIHRvIGZlZWQg
cGl4ZWwgc25hcHBlZCB2YWx1ZXMgaW50byB0aGUgcGxhdGZvcm0KKyAgICAgICAgY29kZSB0byBw
cm9wZXJseSBkZXRlcm1pbmUgdGhlIHJlc3VsdGluZyBtZXRlciBzaXplLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dm9sdW1lU2xpZGVy
T2Zmc2V0RnJvbU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFk
anVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjptZXRlclNp
emVGb3JCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAg
ICAoUmVuZGVyVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2Fw
c0xvY2tJbmRpY2F0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oOgor
ICAgICAgICAoUmVuZGVyVGhlbWVNYWMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6aW5mbGF0ZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjp2b2x1bWVTbGlkZXJPZmZzZXRG
cm9tTXV0ZUJ1dHRvbik6CisKIDIwMTItMDMtMjYgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbUkVHUkVTU0lPTl0gV29y
a2Fyb3VuZHMgZm9yIHNlY3VyaXR5IGNoZWNrcyB3aGVuIHJldHJpZXZpbmcgc3R5bGVzaGVldCBy
dWxlIGxpc3RzIGFyZSBicm9rZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkocmV2aXNpb24gMTEyMDYy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOSBAQCBwdWJsaWM6CiAgICAgRnJhY3Rp
b25hbExheW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQog
ICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
IAorICAgIEludFBvaW50IHBpeGVsU25hcHBlZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gcm91
bmRlZEludFBvaW50KG1fbG9jYXRpb24pOyB9CisgICAgSW50U2l6ZSBwaXhlbFNuYXBwZWRTaXpl
KCkgY29uc3QgeyByZXR1cm4gcGl4ZWxTbmFwcGVkSW50U2l6ZShtX3NpemUsIG1fbG9jYXRpb24p
OyB9CisKICAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYg
bG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9CiAgICAgdm9pZCBzZXRTaXplKGNv
bnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24g
MTEyMDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDggQEAgcHVibGljOgogICAgIGludCBwaXhlbFNu
YXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KICAgICBpbnQgcGl4
ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQogICAgIGlu
dCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0K
KyAgICBJbnRQb2ludCBwaXhlbFNuYXBwZWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGxvY2F0
aW9uKCk7IH0KKyAgICBJbnRTaXplIHBpeGVsU25hcHBlZFNpemUoKSBjb25zdCB7IHJldHVybiBz
aXplKCk7IH0KIAogICAgIHZvaWQgc2V0WChpbnQgeCkgeyBtX2xvY2F0aW9uLnNldFgoeCk7IH0K
ICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTEyMDYyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5
OSwxNyArOTk5LDE4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW4K
ICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbmF0aXZlIHRoZW1lIGFwcGVhcmFuY2UsIHBhaW50
IHRoYXQgYmVmb3JlIHBhaW50aW5nIG91ciBiYWNrZ3JvdW5kLgogICAgIC8vIFRoZSB0aGVtZSB3
aWxsIHRlbGwgdXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGFsc28gcGFpbnQgdGhlIENTUyBi
YWNrZ3JvdW5kLgotICAgIGJvb2wgdGhlbWVQYWludGVkID0gc3R5bGUoKS0+aGFzQXBwZWFyYW5j
ZSgpICYmICF0aGVtZSgpLT5wYWludCh0aGlzLCBwYWludEluZm8sIHBhaW50UmVjdCk7CisgICAg
SW50UmVjdCBzbmFwcGVkUGFpbnRSZWN0KHBpeGVsU25hcHBlZEludFJlY3QocGFpbnRSZWN0KSk7
CisgICAgYm9vbCB0aGVtZVBhaW50ZWQgPSBzdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkgJiYgIXRo
ZW1lKCktPnBhaW50KHRoaXMsIHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCk7CiAgICAgaWYg
KCF0aGVtZVBhaW50ZWQpIHsKICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mbywgcGFp
bnRSZWN0LCBibGVlZEF2b2lkYW5jZSk7CiAKICAgICAgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgICAgIHRoZW1lKCktPnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFp
bnRJbmZvLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHBhaW50UmVjdCkpOworICAgICAgICAgICAgdGhl
bWUoKS0+cGFpbnREZWNvcmF0aW9ucyh0aGlzLCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3Qp
OwogICAgIH0KICAgICBwYWludEJveFNoYWRvdyhwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUo
KSwgSW5zZXQpOwogCiAgICAgLy8gVGhlIHRoZW1lIHdpbGwgdGVsbCB1cyB3aGV0aGVyIG9yIG5v
dCB3ZSBzaG91bGQgYWxzbyBwYWludCB0aGUgQ1NTIGJvcmRlci4KLSAgICBpZiAoKCFzdHlsZSgp
LT5oYXNBcHBlYXJhbmNlKCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS0+cGFpbnRCb3Jk
ZXJPbmx5KHRoaXMsIHBhaW50SW5mbywgcGl4ZWxTbmFwcGVkSW50UmVjdChwYWludFJlY3QpKSkp
ICYmIHN0eWxlKCktPmhhc0JvcmRlcigpKQorICAgIGlmICgoIXN0eWxlKCktPmhhc0FwcGVhcmFu
Y2UoKSB8fCAoIXRoZW1lUGFpbnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRlck9ubHkodGhpcywg
cGFpbnRJbmZvLCBzbmFwcGVkUGFpbnRSZWN0KSkpICYmIHN0eWxlKCktPmhhc0JvcmRlcigpKQog
ICAgICAgICBwYWludEJvcmRlcihwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgYmxlZWRB
dm9pZGFuY2UpOwogCiAgICAgaWYgKGJsZWVkQXZvaWRhbmNlID09IEJhY2tncm91bmRCbGVlZFVz
ZVRyYW5zcGFyZW5jeUxheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
aAkocmV2aXNpb24gMTEyMDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcgQEAgcHVibGljOgogICAgIExheW91
dFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QubG9jYXRpb24oKTsg
fQogICAgIExheW91dFNpemUgbG9jYXRpb25PZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRT
aXplKHgoKSwgeSgpKTsgfQogICAgIExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWVSZWN0LnNpemUoKTsgfQorICAgIEludFNpemUgcGl4ZWxTbmFwcGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnBpeGVsU25hcHBlZFNpemUoKTsgfQogCiAgICAgdm9pZCBz
ZXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9mcmFtZVJlY3Quc2V0
TG9jYXRpb24obG9jYXRpb24pOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCShyZXZpc2lvbiAxMTIwNjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMiwxMCArMjEyLDEwIEBAIEludFBvaW50IFJlbmRlck1lZGlhQ29udHJvbHM6
OnZvbHVtZVNsaWQKICAgICBzdGF0aWMgY29uc3QgaW50IHlPZmZzZXQgPSA1OwogCiAgICAgZmxv
YXQgem9vbUxldmVsID0gbXV0ZUJ1dHRvbkJveC0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwot
ICAgIGludCB5ID0geU9mZnNldCAqIHpvb21MZXZlbCArIG11dGVCdXR0b25Cb3gtPm9mZnNldEhl
aWdodCgpIC0gc2l6ZS5oZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50IGFic1BvaW50ID0gbXV0ZUJ1
dHRvbkJveC0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0
TGVmdCgpLCB5KSwgdHJ1ZSwgdHJ1ZSk7CisgICAgaW50IHkgPSB5T2Zmc2V0ICogem9vbUxldmVs
ICsgbXV0ZUJ1dHRvbkJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCkgLSBzaXplLmhlaWdo
dCgpOworICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCks
IHkpLCB0cnVlLCB0cnVlKTsKICAgICBpZiAoYWJzUG9pbnQueSgpIDwgMCkKLSAgICAgICAgeSA9
IG11dGVCdXR0b25Cb3gtPmhlaWdodCgpOworICAgICAgICB5ID0gbXV0ZUJ1dHRvbkJveC0+cGl4
ZWxTbmFwcGVkSGVpZ2h0KCk7CiAgICAgcmV0dXJuIEludFBvaW50KHhPZmZzZXQgKiB6b29tTGV2
ZWwsIHkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5j
cHAJKHJldmlzaW9uIDExMjA2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxMyBAQCBSZW5kZXJNZXRlcjo6
flJlbmRlck1ldGVyKCkKIHZvaWQgUmVuZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQog
ewogICAgIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwotICAgIHNldFdpZHRoKHRo
ZW1lKCktPm1ldGVyU2l6ZUZvckJvdW5kcyh0aGlzLCBmcmFtZVJlY3QoKSkud2lkdGgoKSk7Cisg
ICAgc2V0V2lkdGgodGhlbWUoKS0+bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBl
ZEludFJlY3QoZnJhbWVSZWN0KCkpKS53aWR0aCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogewogICAgIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoKTsKLSAgICBzZXRIZWlnaHQodGhlbWUoKS0+bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMs
IGZyYW1lUmVjdCgpKS5oZWlnaHQoKSk7CisgICAgc2V0SGVpZ2h0KHRoZW1lKCktPm1ldGVyU2l6
ZUZvckJvdW5kcyh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVjdCgpKSkuaGVpZ2h0
KCkpOwogfQogCiBkb3VibGUgUmVuZGVyTWV0ZXI6OnZhbHVlUmF0aW8oKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAxMTIwNjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoQ1NT
U3R5bGVTZQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UmVjdCYgcikKK2Jv
b2wgUmVuZGVyVGhlbWU6OnBhaW50KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgLy8gSWYgcGFpbnRpbmcgaXMgZGlz
YWJsZWQsIGJ1dCB3ZSBhcmVuJ3QgdXBkYXRpbmcgY29udHJvbCB0aW50cywgdGhlbiBqdXN0IGJh
aWwuCiAgICAgLy8gSWYgd2UgYXJlIHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIGp1c3Qgc2NoZWR1
bGUgYSByZXBhaW50IGlmIHRoZSB0aGVtZSBzdXBwb3J0cyB0aW50aW5nCkBAIC01MDcsMTMgKzUw
NywxMyBAQCBTdHJpbmcgUmVuZGVyVGhlbWU6OmZvcm1hdE1lZGlhQ29udHJvbHNSCiAgICAgcmV0
dXJuIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1lIC0gZHVyYXRpb24pOwogfQog
Ci1MYXlvdXRQb2ludCBSZW5kZXJUaGVtZTo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0
b24oUmVuZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25zdCBMYXlvdXRTaXplJiBzaXplKSBjb25z
dAorSW50UG9pbnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9u
KFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsK
LSAgICBMYXlvdXRVbml0IHkgPSAtc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgeSA9IC1zaXplLmhl
aWdodCgpOwogICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRv
QWJzb2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0
KCksIHkpLCB0cnVlLCB0cnVlKTsKICAgICBpZiAoYWJzUG9pbnQueSgpIDwgMCkKICAgICAgICAg
eSA9IG11dGVCdXR0b25Cb3gtPmhlaWdodCgpOwotICAgIHJldHVybiBMYXlvdXRQb2ludCgwLCB5
KTsKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgeSk7CiB9CiAKICNlbmRpZgpAQCAtNjY5LDcgKzY2
OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25zdCAKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVj
dCogbywgTGF5b3V0UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0
KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKIHsKICNpZiBVU0UoTkVXX1RIRU1F
KQogICAgIG1fdGhlbWUtPmluZmxhdGVDb250cm9sUGFpbnRSZWN0KG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSwgY29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8pLCByLCBvLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpOwpAQCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dE1ldGVyU3R5bGUoQ1NTU3QKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
Ci1MYXlvdXRTaXplIFJlbmRlclRoZW1lOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVy
TWV0ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRo
ZW1lOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0
JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gMTEyMDYyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBw
YWludCB0aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAgQSB3
aWRnZXQncyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEgYnV0dG9uLCBp
cyBhbHdheXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9vbGVhbiByZXR1
cm4gdmFsdWUgaW5kaWNhdGVzCiAgICAgLy8gd2hldGhlciB0aGUgQ1NTIGJvcmRlci9iYWNrZ3Jv
dW5kIHNob3VsZCBhbHNvIGJlIHBhaW50ZWQuCi0gICAgYm9vbCBwYWludChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgYm9vbCBwYWludChS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgYm9v
bCBwYWludEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIGJvb2wgcGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBTb21lIGNvbnRyb2xzIG1heSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFp
bmVycyAoZS5nLiwgdGhlIGNoZWNrIG9uIGFuIE9TIFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBj
b250cm9scyByZXBhaW50LAogICAgIC8vIHRoZSB0aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0
aGlzIGluZmxhdGVkIHJlY3QgdG8gdGhlIGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRl
IHRoZSB3aG9sZSBjb250cm9sLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChj
b25zdCBSZW5kZXJPYmplY3QqLCBMYXlvdXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKIAogICAgIC8vIFRo
aXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24g
YSBwYXJ0aWN1bGFyIHRoZW1lZCBvYmplY3QsIGUuZy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNz
ZWQKICAgICAvLyBvciBhIGNvbnRyb2wgYmVjb21lcyBkaXNhYmxlZC4KQEAgLTE3Nyw3ICsxNzcs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzY3JvbGxiYXJD
b250cm9sU2l6ZUZvclBhcnQoQ29udHJvbFBhcnQpIHsgcmV0dXJuIFJlZ3VsYXJTY3JvbGxiYXI7
IH0KIAogICAgIC8vIE1ldGhvZCBmb3IgcGFpbnRpbmcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3IK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0JikgeyByZXR1cm4gMDsgfTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gMDsgfTsKIAogI2lmIEVOQUJMRShQ
Uk9HUkVTU19UQUcpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBh
bmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCkBAIC0xOTksMTEgKzE5OSwxMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUo
ZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBS
ZXR1cm5zIHRoZSBtZWRpYSB2b2x1bWUgc2xpZGVyIGNvbnRhaW5lcidzIG9mZnNldCBmcm9tIHRo
ZSBtdXRlIGJ1dHRvbi4KLSAgICB2aXJ0dWFsIExheW91dFBvaW50IHZvbHVtZVNsaWRlck9mZnNl
dEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRl
ckJveCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVS
X1RBRykKLSAgICB2aXJ0dWFsIExheW91dFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJl
bmRlck1ldGVyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6
ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0
OwogI2VuZGlmCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMuaAkocmV2aXNpb24gMTEyMDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgog
ICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMg
c3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWlu
dFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
Qm9yZGVyRGF0YSYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxs
TGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKQEAgLTc0LDEyICs3
NCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3Ao
UmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2
aXJ0dWFsIGJvb2wgcG9wc01lbnVCeUFycm93S2V5cygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9UQUcpCi0gICAgdmlydHVhbCBMYXlvdXRTaXpl
IG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IExheW91dFJlY3Qm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJl
bmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1ldGVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Q7CiAjZW5k
aWYKQEAgLTE3MSw3ICsxNzEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHVzZXNN
ZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCk7CiAgICAgdmlydHVhbCBib29sIHVzZXNNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVkaWFT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFBv
aW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExh
eW91dFNpemUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNl
dEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKICNlbmRp
ZgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNl
ZCgpIGNvbnN0OwpAQCAtMTc5LDE0ICsxNzksMTQgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNv
bnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IE9W
RVJSSURFOwogCi0gICAgTGF5b3V0UmVjdCBpbmZsYXRlUmVjdChjb25zdCBMYXlvdXRSZWN0Jiwg
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsID0gMS4w
ZikgY29uc3Q7CisgICAgSW50UmVjdCBpbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29u
c3Q7CiAKICAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIGNv
bnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JiByKSBjb25zdDsKICAgICAK
ICAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuICBVc2VkIGJ5
IHNvbWUgb2YgdGhlIGNvbnRyb2xzIChsaWtlIGJ1dHRvbnMpLgogICAgIE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2b2lk
IHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBMYXlv
dXRTaXplJiBtaW5TaXplLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKTsKKyAgICB2b2lkIHNldENv
bnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBt
aW5TaXplLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKTsKICAgICB2b2lkIHNldFNpemVGcm9tRm9u
dChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXpl
IHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Owog
ICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXpl
KiBzaXplcykgY29uc3Q7CkBAIC0yMDEsNyArMjAxLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhl
bHBlcnMgZm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKIAotICAgIHZv
aWQgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5
b3V0UmVjdCYpOworICAgIHZvaWQgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVy
T2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFNpemUqIHBvcHVwQnV0dG9u
U2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9uTWFyZ2lucygpIGNvbnN0
OwogICAgIGNvbnN0IGludCogcG9wdXBCdXR0b25QYWRkaW5nKE5TQ29udHJvbFNpemUpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2
aXNpb24gMTEyMDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MDIsNyArNTAyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6aXNDb250cm9sU3R5bGVkKGNvbgogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9s
U3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVj
dCogbywgTGF5b3V0UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRS
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKIHsKICAgICBDb250cm9sUGFy
dCBwYXJ0ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwogICAgIApAQCAtNTMzLDEzICs1MzMs
MTMgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoYwogICAgIH0KIH0K
IAotTGF5b3V0UmVjdCBSZW5kZXJUaGVtZU1hYzo6aW5mbGF0ZVJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29t
TGV2ZWwpIGNvbnN0CitJbnRSZWN0IFJlbmRlclRoZW1lTWFjOjppbmZsYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiByLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0
IHpvb21MZXZlbCkgY29uc3QKIHsKICAgICAvLyBPbmx5IGRvIHRoZSBpbmZsYXRpb24gaWYgdGhl
IGF2YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJlIHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0cnkgdG8K
ICAgICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sgc3BhY2UgaW50byB0aGUgYXZhaWxhYmxlIGJveCdz
IHdpZHRoL2hlaWdodC4KLSAgICBMYXlvdXRVbml0IHdpZHRoRGVsdGEgPSByLndpZHRoKCkgLSAo
c2l6ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNb
cmlnaHRNYXJnaW5dICogem9vbUxldmVsKTsKLSAgICBMYXlvdXRVbml0IGhlaWdodERlbHRhID0g
ci5oZWlnaHQoKSAtIChzaXplLmhlaWdodCgpICsgbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUxl
dmVsICsgbWFyZ2luc1tib3R0b21NYXJnaW5dICogem9vbUxldmVsKTsKLSAgICBMYXlvdXRSZWN0
IHJlc3VsdChyKTsKKyAgICBpbnQgd2lkdGhEZWx0YSA9IHIud2lkdGgoKSAtIChzaXplLndpZHRo
KCkgKyBtYXJnaW5zW2xlZnRNYXJnaW5dICogem9vbUxldmVsICsgbWFyZ2luc1tyaWdodE1hcmdp
bl0gKiB6b29tTGV2ZWwpOworICAgIGludCBoZWlnaHREZWx0YSA9IHIuaGVpZ2h0KCkgLSAoc2l6
ZS5oZWlnaHQoKSArIG1hcmdpbnNbdG9wTWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNbYm90
dG9tTWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAgSW50UmVjdCByZXN1bHQocik7CiAgICAgaWYg
KHdpZHRoRGVsdGEgPCAwKSB7CiAgICAgICAgIHJlc3VsdC5zZXRYKHJlc3VsdC54KCkgLSBtYXJn
aW5zW2xlZnRNYXJnaW5dICogem9vbUxldmVsKTsKICAgICAgICAgcmVzdWx0LnNldFdpZHRoKHJl
c3VsdC53aWR0aCgpIC0gd2lkdGhEZWx0YSk7CkBAIC02NDEsMTQgKzY0MSwxNCBAQCBOU0NvbnRy
b2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6CiAgICAgcmV0dXJuIE5TTWluaUNvbnRy
b2xTaXplOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDb250cm9sU2l6ZShOU0NlbGwq
IGNlbGwsIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBMYXlvdXRTaXplJiBtaW5TaXplLCBm
bG9hdCB6b29tTGV2ZWwpCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDb250cm9sU2l6ZShOU0Nl
bGwqIGNlbGwsIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBm
bG9hdCB6b29tTGV2ZWwpCiB7CiAgICAgTlNDb250cm9sU2l6ZSBzaXplOwotICAgIGlmIChtaW5T
aXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oc2l6ZXNbTlNSZWd1bGFyQ29u
dHJvbFNpemVdLndpZHRoKCkgKiB6b29tTGV2ZWwpICYmCi0gICAgICAgIG1pblNpemUuaGVpZ2h0
KCkgPj0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVd
LmhlaWdodCgpICogem9vbUxldmVsKSkKKyAgICBpZiAobWluU2l6ZS53aWR0aCgpID49IHN0YXRp
Y19jYXN0PGludD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLndpZHRoKCkgKiB6b29tTGV2
ZWwpICYmCisgICAgICAgIG1pblNpemUuaGVpZ2h0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXpl
c1tOU1JlZ3VsYXJDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6b29tTGV2ZWwpKQogICAgICAgICBz
aXplID0gTlNSZWd1bGFyQ29udHJvbFNpemU7Ci0gICAgZWxzZSBpZiAobWluU2l6ZS53aWR0aCgp
ID49IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lk
dGgoKSAqIHpvb21MZXZlbCkgJiYKLSAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0
YXRpY19jYXN0PExheW91dFVuaXQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0uaGVpZ2h0KCkg
KiB6b29tTGV2ZWwpKQorICAgIGVsc2UgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21MZXZlbCkgJiYK
KyAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6ZXNb
TlNTbWFsbENvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkpCiAgICAgICAgIHNpemUg
PSBOU1NtYWxsQ29udHJvbFNpemU7CiAgICAgZWxzZQogICAgICAgICBzaXplID0gTlNNaW5pQ29u
dHJvbFNpemU7CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
VGV4dEZpZWxkU3R5bAogewogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2Nr
SW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGlj
YXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03OTQsNyArNzk0LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZQogICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgp
KTsKIAogICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9yIHRoZSBzaGFkb3cuCi0g
ICAgTGF5b3V0UmVjdCBpbmZsYXRlZFJlY3QgPSByOworICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gcjsKICAgICBpZiAoci53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoby0+c3R5bGUo
KSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6
ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CiAKQEAgLTgxOSwxNiArODE5LDE2
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGUKIAogI2lmIEVOQUJM
RShNRVRFUl9UQUcpCiAKLUxheW91dFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZvckJv
dW5kcyhjb25zdCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIsIGNvbnN0IExheW91dFJlY3QmIGJv
dW5kcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZvckJvdW5kcyhj
b25zdCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29u
c3QKIHsKICAgICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRlci0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpKQogICAgICAgICByZXR1cm4gYm91bmRzLnNpemUoKTsKIAogICAgIE5TTGV2ZWxJ
bmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IocmVuZGVyTWV0ZXIpOwogICAg
IC8vIE1ha2VzIGVub3VnaCByb29tIGZvciBjZWxsJ3MgaW50cmluc2ljIHNpemUuCi0gICAgTlNT
aXplIGNlbGxTaXplID0gW2NlbGwgY2VsbFNpemVGb3JCb3VuZHM6TGF5b3V0UmVjdChMYXlvdXRQ
b2ludCgpLCBib3VuZHMuc2l6ZSgpKV07Ci0gICAgcmV0dXJuIExheW91dFNpemUoYm91bmRzLndp
ZHRoKCkgPCBjZWxsU2l6ZS53aWR0aCA/IGNlbGxTaXplLndpZHRoIDogYm91bmRzLndpZHRoKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmhlaWdodCgpIDwgY2VsbFNpemUuaGVpZ2h0
ID8gY2VsbFNpemUuaGVpZ2h0IDogYm91bmRzLmhlaWdodCgpKTsKKyAgICBOU1NpemUgY2VsbFNp
emUgPSBbY2VsbCBjZWxsU2l6ZUZvckJvdW5kczpJbnRSZWN0KEludFBvaW50KCksIGJvdW5kcy5z
aXplKCkpXTsKKyAgICByZXR1cm4gSW50U2l6ZShib3VuZHMud2lkdGgoKSA8IGNlbGxTaXplLndp
ZHRoID8gY2VsbFNpemUud2lkdGggOiBib3VuZHMud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAg
ICBib3VuZHMuaGVpZ2h0KCkgPCBjZWxsU2l6ZS5oZWlnaHQgPyBjZWxsU2l6ZS5oZWlnaHQgOiBi
b3VuZHMuaGVpZ2h0KCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKQEAgLTEyNzgsNyArMTI3OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdE1lbnVMaXN0QnV0dG8KICAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJT
dHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNl
dFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCogbywgY29uc3QgTGF5b3V0
UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNv
bnN0IFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBOU1BvcFVwQnV0
dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlzLT5wb3B1cEJ1dHRvbigpOwogCkBAIC0xNTQwLDkg
KzE1NDAsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAjaWYg
RU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICAvLyBUYWtlIGNhcmUgb2YgY2FzZXMgd2hlcmUgdGhl
IGNhbmNlbCBidXR0b24gd2FzIG5vdCBhbGlnbmVkIHdpdGggdGhlIHJpZ2h0IGJvcmRlciBvZiB0
aGUgaW5wdXQgZWxlbWVudCAoZm9yIGUuZy4KICAgICAvLyB3aGVuIHNwZWVjaCBpbnB1dCBpcyBl
bmFibGVkIGZvciB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICBMYXlvdXRSZWN0IGFic0JvdW5kaW5n
Qm94ID0gaW5wdXQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7Ci0gICAg
TGF5b3V0VW5pdCBhYnNSaWdodCA9IGFic0JvdW5kaW5nQm94LngoKSArIGFic0JvdW5kaW5nQm94
LndpZHRoKCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPnBhZGRpbmdSaWdodCgpIC0gaW5wdXQtPnJl
bmRlckJveCgpLT5ib3JkZXJSaWdodCgpOwotICAgIExheW91dFVuaXQgc3BhY2VUb1JpZ2h0T2ZD
YW5jZWxCdXR0b24gPSBhYnNSaWdodCAtIChyLngoKSArIHIud2lkdGgoKSk7CisgICAgSW50UmVj
dCBhYnNCb3VuZGluZ0JveCA9IGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgpOworICAgIGludCBhYnNSaWdodCA9IGFic0JvdW5kaW5nQm94LngoKSArIGFic0JvdW5k
aW5nQm94LndpZHRoKCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPnBhZGRpbmdSaWdodCgpIC0gaW5w
dXQtPnJlbmRlckJveCgpLT5ib3JkZXJSaWdodCgpOworICAgIGludCBzcGFjZVRvUmlnaHRPZkNh
bmNlbEJ1dHRvbiA9IGFic1JpZ2h0IC0gKHIueCgpICsgci53aWR0aCgpKTsKICAgICBsb2NhbEJv
dW5kcy5zZXRYKGxvY2FsQm91bmRzLngoKSAtIHNwYWNlVG9SaWdodE9mQ2FuY2VsQnV0dG9uKTsK
ICNlbmRpZgogCkBAIC0yMDYwLDcgKzIwNjAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2Vz
TWVkaWFDb250cm9sVm9sCiAgICAgcmV0dXJuIG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVk
aWFDb250cm9sbGVyVGhlbWVRdWlja1RpbWU7CiB9CiAKLUxheW91dFBvaW50IFJlbmRlclRoZW1l
TWFjOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqIG11dGVCdXR0
b25Cb3gsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJUaGVt
ZU1hYzo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiBtdXRlQnV0
dG9uQm94LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJN
ZWRpYUNvbnRyb2xzOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihtdXRlQnV0dG9u
Qm94LCBzaXplKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135088</attachid>
            <date>2012-04-02 06:54:00 -0700</date>
            <delta_ts>2012-04-03 04:05:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82196-20120402155339.patch</filename>
            <type>text/plain</type>
            <size>40022</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjg3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDEyLTA0LTAyICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZlcnQgUmVuZGVyVGhl
bWUgcGFpbnQgYW5kIGxheW91dCBmdW5jdGlvbnMgdG8gaW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIxOTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGRlYWxpbmcgd2l0aCBvYmplY3QgdGhh
dCBhcmUgcmVuZGVyZWQgb3V0c2lkZSBvZiBXZWJDb3JlLCB3ZSBkbyBhbGwgbmVjZXNzYXJ5IHBp
eGVsIHNuYXBwaW5nCisgICAgICAgIGJlZm9yZSBwYXNzaW5nIGNvb3JkaW5hdGVzIHRvIHRoZSBl
eHRlcm5hbCBjb2RlLiBSZW5kZXJUaGVtZSBlbmNvbXBhc3NlcyBhIHNldCBvZiBvYmplY3RzIHdo
b3NlCisgICAgICAgIHJlbmRlcmluZyBpcyBpbmZsdWVuY2VkIGJ5IHRoZSBwbGF0Zm9ybS4gVGhp
cyBjaGFuZ2UgcmV2ZXJ0cyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhpcyBwbGF0Zm9ybQorICAg
ICAgICBjb2RlIGFuZCBXZWJDb3JlIHRvIGJlIGludGVnZXJzLgorCisgICAgICAgIFNvbWUgcGxh
dGZvcm1zLCBzdWNoIGFzIE1hYywgdXNlIHN1Yi1waXhlbCB1bml0cyBmb3IgbGF5b3V0IGFuZCBy
ZW5kZXJpbmcsIGJ1dCBpdCdzIHN0aWxsIG5vdAorICAgICAgICBkZXNpcmFibGUgdG8gcGFzcyBz
dWItcGl4ZWwgdmFsdWVzIHRvIHRoZXNlIEFQSSdzLCBiZWNhdXNlIHVsdGltYXRlbHkgd2UnbGwg
cmVuZGVyIHRoZXNlIG9iamVjdHMKKyAgICAgICAgYXQgd2hvbGUtcGl4ZWwgdmFsdWVzIHRvIGF2
b2lkIGFudGktYWxpYXNpbmcuCisKKyAgICAgICAgTWFya2luZyB0b3VjaGVkIG92ZXJyaWRkZW4g
dmlydHVhbCBmdW5jdGlvbnMgYXMgT1ZFUlJJREUuIFRoZXJlIGFyZSBtYW55IG1vcmUgdG8gdXBk
YXRlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYWN0aW9uYWxMYXlvdXRSZWN0OjpwaXhlbFNuYXBwZWRMb2NhdGlvbik6
IENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91
dFJlY3Q6OnBpeGVsU25hcHBlZFNpemUpOiBEaXR0by4KKyAgICAgICAgKEZyYWN0aW9uYWxMYXlv
dXRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpJbnRSZWN0OjpwaXhlbFNuYXBwZWRMb2NhdGlvbik6IFRlbXBvcmFyeSBtaXJy
b3JzIHRvIHRoZSBmdW5jdGlvbnMgb2YgdGhlIHNhbWUgbmFtZSBvbgorICAgICAgICBGcmFjdGlv
bmFsTGF5b3V0UmVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OnBpeGVsU25hcHBlZFNp
emUpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6IEFkZGluZyBhIGxvY2Fs
IHBpeGVsIHNuYXBwZWQgcGFpbnQgcmVjdCB0byBhdm9pZAorICAgICAgICByZXBlYXRlZCBwaXhl
bCBzbmFwcGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCk6IFJldmVydGluZyB0byBpbnRl
Z2VycyBzaW5jZSB0aGlzIHJlcHJlc2VudHMgb24tc2NyZWVuCisgICAgICAgIGNvb3JkaW5hdGVz
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBpeGVsU25hcHBlZFNpemUpOiBDb252ZW5p
ZW5jZSBtZXRob2QuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250cm9sczo6dm9sdW1lU2xpZGVyT2Zm
c2V0RnJvbU11dGVCdXR0b24pOiBUaGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZAor
ICAgICAgICBmcm9tIFJlbmRlclRoZW1lIHBsYXRmb3JtIGNvZGUuIENoYW5naW5nIGl0IHRvIG9w
ZXJhdGUgb24gcGl4ZWwgc25hcHBlZCB2YWx1ZXMgc2luY2Ugd2UgZG9uJ3Qgd2FudAorICAgICAg
ICB0byBwaXBlIExheW91dFVuaXRzIHRocm91Z2ggdGhhdCBjb2RlLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZXRlcjo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aCk6IENoYW5naW5nIHRvIGZlZWQgcGl4ZWwgc25hcHBlZCB2YWx1ZXMg
aW50byB0aGUgcGxhdGZvcm0KKyAgICAgICAgY29kZSB0byBwcm9wZXJseSBkZXRlcm1pbmUgdGhl
IHJlc3VsdGluZyBtZXRlciBzaXplLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6OmNv
bXB1dGVMb2dpY2FsSGVpZ2h0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjptZXRlclNpemVGb3JCb3VuZHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoUmVuZGVyVGhlbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgIChSZW5k
ZXJUaGVtZUNocm9taXVtTWFjKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6
CisgICAgICAgIChSZW5kZXJUaGVtZU1hYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjppbmZsYXRlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRpbmdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRDb250cm9sU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dm9sdW1lU2xpZGVyT2Zm
c2V0RnJvbU11dGVCdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6dm9sdW1lU2xpZGVyT2Zmc2V0
RnJvbU11dGVCdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oOgor
ICAgICAgICAoUmVuZGVyVGhlbWVXaW4pOgorCiAyMDEyLTA0LTAyICBSb2IgQnVpcyAgPHJidWlz
QHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFRha2UgaW50byBhY2NvdW50IHBvbGlj
eSBjaGVja3MgaW4gQ2xpcGJvYXJkQmxhY2tCZXJyeQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oCShyZXZp
c2lvbiAxMTI4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlv
bmFsTGF5b3V0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHB1YmxpYzoK
ICAgICBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uOyB9CiAgICAgRnJhY3Rpb25hbExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQogCisgICAgSW50UG9pbnQgcGl4ZWxTbmFwcGVkTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiByb3VuZGVkSW50UG9pbnQobV9sb2NhdGlvbik7IH0KKyAgICBJbnRTaXplIHBpeGVs
U25hcHBlZFNpemUoKSBjb25zdCB7IHJldHVybiBwaXhlbFNuYXBwZWRJbnRTaXplKG1fc2l6ZSwg
bV9sb2NhdGlvbik7IH0KKwogICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRnJhY3Rpb25hbExh
eW91dFBvaW50JiBsb2NhdGlvbikgeyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KICAgICB2b2lk
IHNldFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6
ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5o
CShyZXZpc2lvbiAxMTI4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAg
aW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQog
ICAgIGludCBwaXhlbFNuYXBwZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CiAgICAgaW50IHBpeGVsU25hcHBlZEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5o
ZWlnaHQoKTsgfQorICAgIEludFBvaW50IHBpeGVsU25hcHBlZExvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbG9jYXRpb24oKTsgfQorICAgIEludFNpemUgcGl4ZWxTbmFwcGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemUoKTsgfQogCiAgICAgdm9pZCBzZXRYKGludCB4KSB7IG1fbG9jYXRpb24u
c2V0WCh4KTsgfQogICAgIHZvaWQgc2V0WShpbnQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxMTI4
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTU0LDkgKzU1NCw5IEBAIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVMYXllclRyYW5z
Zm9ybSgpCiAgICAgICAgIGxheWVyKCktPnVwZGF0ZVRyYW5zZm9ybSgpOwogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKK0ludFJlY3QgUmVuZGVy
Qm94OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdAogewotICAgIExheW91dFJlY3QgcmVjdCA9
IGNvbnRlbnRCb3hSZWN0KCk7CisgICAgSW50UmVjdCByZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVj
dChjb250ZW50Qm94UmVjdCgpKTsKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNv
bHV0ZShGbG9hdFBvaW50KCkpOwogICAgIHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgp
KTsKICAgICByZXR1cm4gcmVjdDsKQEAgLTEwMDAsMTcgKzEwMDAsMTggQEAgdm9pZCBSZW5kZXJC
b3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbgogICAgIAogICAgIC8vIElmIHdlIGhhdmUgYSBu
YXRpdmUgdGhlbWUgYXBwZWFyYW5jZSwgcGFpbnQgdGhhdCBiZWZvcmUgcGFpbnRpbmcgb3VyIGJh
Y2tncm91bmQuCiAgICAgLy8gVGhlIHRoZW1lIHdpbGwgdGVsbCB1cyB3aGV0aGVyIG9yIG5vdCB3
ZSBzaG91bGQgYWxzbyBwYWludCB0aGUgQ1NTIGJhY2tncm91bmQuCi0gICAgYm9vbCB0aGVtZVBh
aW50ZWQgPSBzdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCktPnBhaW50KHRoaXMs
IHBhaW50SW5mbywgcGFpbnRSZWN0KTsKKyAgICBJbnRSZWN0IHNuYXBwZWRQYWludFJlY3QocGl4
ZWxTbmFwcGVkSW50UmVjdChwYWludFJlY3QpKTsKKyAgICBib29sIHRoZW1lUGFpbnRlZCA9IHN0
eWxlKCktPmhhc0FwcGVhcmFuY2UoKSAmJiAhdGhlbWUoKS0+cGFpbnQodGhpcywgcGFpbnRJbmZv
LCBzbmFwcGVkUGFpbnRSZWN0KTsKICAgICBpZiAoIXRoZW1lUGFpbnRlZCkgewogICAgICAgICBw
YWludEJhY2tncm91bmQocGFpbnRJbmZvLCBwYWludFJlY3QsIGJsZWVkQXZvaWRhbmNlKTsKIAog
ICAgICAgICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgdGhlbWUo
KS0+cGFpbnREZWNvcmF0aW9ucyh0aGlzLCBwYWludEluZm8sIHBpeGVsU25hcHBlZEludFJlY3Qo
cGFpbnRSZWN0KSk7CisgICAgICAgICAgICB0aGVtZSgpLT5wYWludERlY29yYXRpb25zKHRoaXMs
IHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCk7CiAgICAgfQogICAgIHBhaW50Qm94U2hhZG93
KHBhaW50SW5mbywgcGFpbnRSZWN0LCBzdHlsZSgpLCBJbnNldCk7CiAKICAgICAvLyBUaGUgdGhl
bWUgd2lsbCB0ZWxsIHVzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhbHNvIHBhaW50IHRoZSBD
U1MgYm9yZGVyLgotICAgIGlmICgoIXN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCAoIXRoZW1l
UGFpbnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJbmZvLCBwaXhl
bFNuYXBwZWRJbnRSZWN0KHBhaW50UmVjdCkpKSkgJiYgc3R5bGUoKS0+aGFzQm9yZGVyKCkpCisg
ICAgaWYgKCghc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpIHx8ICghdGhlbWVQYWludGVkICYmIHRo
ZW1lKCktPnBhaW50Qm9yZGVyT25seSh0aGlzLCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3Qp
KSkgJiYgc3R5bGUoKS0+aGFzQm9yZGVyKCkpCiAgICAgICAgIHBhaW50Qm9yZGVyKHBhaW50SW5m
bywgcGFpbnRSZWN0LCBzdHlsZSgpLCBibGVlZEF2b2lkYW5jZSk7CiAKICAgICBpZiAoYmxlZWRB
dm9pZGFuY2UgPT0gQmFja2dyb3VuZEJsZWVkVXNlVHJhbnNwYXJlbmN5TGF5ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAxMTI4NDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2
ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lUmVjdC5sb2NhdGlvbigpOyB9CiAgICAgTGF5b3V0U2l6ZSBsb2NhdGlvbk9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFNpemUoeCgpLCB5KCkpOyB9CiAgICAgTGF5b3V0
U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Quc2l6ZSgpOyB9CisgICAgSW50
U2l6ZSBwaXhlbFNuYXBwZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QucGl4ZWxT
bmFwcGVkU2l6ZSgpOyB9CiAKICAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50
JiBsb2NhdGlvbikgeyBtX2ZyYW1lUmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KICAgICAK
QEAgLTEzOSw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGNvbnRlbnQgYXJlYSBvZiB0
aGUgYm94IChleGNsdWRlcyBwYWRkaW5nIGFuZCBib3JkZXIpLgogICAgIExheW91dFJlY3QgY29u
dGVudEJveFJlY3QoUGFkZGluZ09wdGlvbnMgcGFkZGluZ09wdGlvbiA9IEV4Y2x1ZGVJbnRyaW5z
aWNQYWRkaW5nKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KHBhZGRpbmdPcHRpb24pLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AocGFkZGluZ09w
dGlvbiksIGNvbnRlbnRXaWR0aChwYWRkaW5nT3B0aW9uKSwgY29udGVudEhlaWdodChwYWRkaW5n
T3B0aW9uKSk7IH0KICAgICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJ
Z25vcmVzIHRyYW5zZm9ybXMuCi0gICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBj
b25zdDsKKyAgICBJbnRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0OwogICAgIC8vIFRo
ZSBjb250ZW50IGJveCBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgY29vcmRzICh0YWtpbmcgdHJhbnNm
b3JtcyBpbnRvIGFjY291bnQpLgogICAgIEZsb2F0UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRy
b2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5jcHAJKHJldmlzaW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDEwICsy
MTIsMTAgQEAgSW50UG9pbnQgUmVuZGVyTWVkaWFDb250cm9sczo6dm9sdW1lU2xpZAogICAgIHN0
YXRpYyBjb25zdCBpbnQgeU9mZnNldCA9IDU7CiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBtdXRl
QnV0dG9uQm94LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgaW50IHkgPSB5T2Zmc2V0
ICogem9vbUxldmVsICsgbXV0ZUJ1dHRvbkJveC0+b2Zmc2V0SGVpZ2h0KCkgLSBzaXplLmhlaWdo
dCgpOwotICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0
cnVlKTsKKyAgICBpbnQgeSA9IHlPZmZzZXQgKiB6b29tTGV2ZWwgKyBtdXRlQnV0dG9uQm94LT5w
aXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCk7CisgICAgRmxvYXRQb2lu
dCBhYnNQb2ludCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KG11
dGVCdXR0b25Cb3gtPnBpeGVsU25hcHBlZE9mZnNldExlZnQoKSwgeSksIHRydWUsIHRydWUpOwog
ICAgIGlmIChhYnNQb2ludC55KCkgPCAwKQotICAgICAgICB5ID0gbXV0ZUJ1dHRvbkJveC0+aGVp
Z2h0KCk7CisgICAgICAgIHkgPSBtdXRlQnV0dG9uQm94LT5waXhlbFNuYXBwZWRIZWlnaHQoKTsK
ICAgICByZXR1cm4gSW50UG9pbnQoeE9mZnNldCAqIHpvb21MZXZlbCwgeSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkocmV2aXNpb24gMTEyODQ4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsMTMgKzQ2LDEzIEBAIFJlbmRlck1ldGVyOjp+UmVuZGVyTWV0ZXIoKQogdm9p
ZCBSZW5kZXJNZXRlcjo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiB7CiAgICAgUmVuZGVyQm94Ojpj
b21wdXRlTG9naWNhbFdpZHRoKCk7Ci0gICAgc2V0V2lkdGgodGhlbWUoKS0+bWV0ZXJTaXplRm9y
Qm91bmRzKHRoaXMsIGZyYW1lUmVjdCgpKS53aWR0aCgpKTsKKyAgICBzZXRXaWR0aCh0aGVtZSgp
LT5tZXRlclNpemVGb3JCb3VuZHModGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZVJlY3Qo
KSkpLndpZHRoKCkpOwogfQogCiB2b2lkIFJlbmRlck1ldGVyOjpjb21wdXRlTG9naWNhbEhlaWdo
dCgpCiB7CiAgICAgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodCgpOwotICAgIHNldEhl
aWdodCh0aGVtZSgpLT5tZXRlclNpemVGb3JCb3VuZHModGhpcywgZnJhbWVSZWN0KCkpLmhlaWdo
dCgpKTsKKyAgICBzZXRIZWlnaHQodGhlbWUoKS0+bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBp
eGVsU25hcHBlZEludFJlY3QoZnJhbWVSZWN0KCkpKS5oZWlnaHQoKSk7CiB9CiAKIGRvdWJsZSBS
ZW5kZXJNZXRlcjo6dmFsdWVSYXRpbygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw3ICsyNDQs
NyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShDU1NTdHlsZVNlCiAgICAgfQogfQog
Ci1ib29sIFJlbmRlclRoZW1lOjpwYWludChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFp
bnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKIHsKICAgICAvLyBJZiBwYWludGluZyBpcyBkaXNhYmxlZCwgYnV0IHdlIGFyZW4n
dCB1cGRhdGluZyBjb250cm9sIHRpbnRzLCB0aGVuIGp1c3QgYmFpbC4KICAgICAvLyBJZiB3ZSBh
cmUgdXBkYXRpbmcgY29udHJvbCB0aW50cywganVzdCBzY2hlZHVsZSBhIHJlcGFpbnQgaWYgdGhl
IHRoZW1lIHN1cHBvcnRzIHRpbnRpbmcKQEAgLTUwNywxMyArNTA3LDEzIEBAIFN0cmluZyBSZW5k
ZXJUaGVtZTo6Zm9ybWF0TWVkaWFDb250cm9sc1IKICAgICByZXR1cm4gZm9ybWF0TWVkaWFDb250
cm9sc1RpbWUoY3VycmVudFRpbWUgLSBkdXJhdGlvbik7CiB9CiAKLUxheW91dFBvaW50IFJlbmRl
clRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqIG11dGVC
dXR0b25Cb3gsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJU
aGVtZTo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiBtdXRlQnV0
dG9uQm94LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewotICAgIExheW91dFVuaXQgeSA9
IC1zaXplLmhlaWdodCgpOworICAgIGludCB5ID0gLXNpemUuaGVpZ2h0KCk7CiAgICAgRmxvYXRQ
b2ludCBhYnNQb2ludCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50
KG11dGVCdXR0b25Cb3gtPnBpeGVsU25hcHBlZE9mZnNldExlZnQoKSwgeSksIHRydWUsIHRydWUp
OwogICAgIGlmIChhYnNQb2ludC55KCkgPCAwKQogICAgICAgICB5ID0gbXV0ZUJ1dHRvbkJveC0+
aGVpZ2h0KCk7Ci0gICAgcmV0dXJuIExheW91dFBvaW50KDAsIHkpOworICAgIHJldHVybiBJbnRQ
b2ludCgwLCB5KTsKIH0KIAogI2VuZGlmCkBAIC02NjksNyArNjY5LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBMYXlvdXRSZWN0JiBy
KQordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0
KiBvLCBJbnRSZWN0JiByKQogewogI2lmIFVTRShORVdfVEhFTUUpCiAgICAgbV90aGVtZS0+aW5m
bGF0ZUNvbnRyb2xQYWludFJlY3Qoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpLCBjb250cm9sU3Rh
dGVzRm9yUmVuZGVyZXIobyksIHIsIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CkBAIC05
MjYsNyArOTI2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZShDU1NTdAog
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLUxheW91dFNpemUgUmVuZGVy
VGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IExheW91
dFJlY3QmIGJvdW5kcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJv
dW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKIHsK
ICAgICByZXR1cm4gYm91bmRzLnNpemUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxMTI4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJs
aWM6CiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHBhaW50IHRoZSB3aWRnZXQgYXMg
YSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmplY3QuICBBIHdpZGdldCdzIGZvcmVncm91bmQs
IGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBidXR0b24sIGlzIGFsd2F5cyByZW5kZXJlZCBi
eSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29sZWFuIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMK
ICAgICAvLyB3aGV0aGVyIHRoZSBDU1MgYm9yZGVyL2JhY2tncm91bmQgc2hvdWxkIGFsc28gYmUg
cGFpbnRlZC4KLSAgICBib29sIHBhaW50KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFJlY3QmKTsKKyAgICBib29sIHBhaW50KFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICBib29sIHBhaW50Qm9yZGVyT25seShS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgYm9v
bCBwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIApAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFNvbWUg
Y29udHJvbHMgbWF5IHNwaWxsIG91dCBvZiB0aGVpciBjb250YWluZXJzIChlLmcuLCB0aGUgY2hl
Y2sgb24gYW4gT1MgWCBjaGVja2JveCkuICBXaGVuIHRoZXNlIGNvbnRyb2xzIHJlcGFpbnQsCiAg
ICAgLy8gdGhlIHRoZW1lIG5lZWRzIHRvIGNvbW11bmljYXRlIHRoaXMgaW5mbGF0ZWQgcmVjdCB0
byB0aGUgZW5naW5lIHNvIHRoYXQgaXQgY2FuIGludmFsaWRhdGUgdGhlIHdob2xlIGNvbnRyb2wu
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCos
IExheW91dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IHdoZW5ldmVyIGEgcmVsZXZhbnQgc3RhdGUgY2hhbmdlcyBvbiBhIHBhcnRpY3VsYXIgdGhlbWVk
IG9iamVjdCwgZS5nLiwgdGhlIG1vdXNlIGJlY29tZXMgcHJlc3NlZAogICAgIC8vIG9yIGEgY29u
dHJvbCBiZWNvbWVzIGRpc2FibGVkLgpAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChD
b250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJhcjsgfQogCiAgICAgLy8gTWV0aG9k
IGZvciBwYWludGluZyB0aGUgY2FwcyBsb2NrIGluZGljYXRvcgotICAgIHZpcnR1YWwgYm9vbCBw
YWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFJlY3QmKSB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgYm9vbCBwYWludENh
cHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiAwOyB9OwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKICAgICAv
LyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHBy
b2dyZXNzIGJhci4KQEAgLTE5OSwxMSArMTk5LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0
cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwg
ZmxvYXQgZHVyYXRpb24pIGNvbnN0OwogICAgIAogICAgIC8vIFJldHVybnMgdGhlIG1lZGlhIHZv
bHVtZSBzbGlkZXIgY29udGFpbmVyJ3Mgb2Zmc2V0IGZyb20gdGhlIG11dGUgYnV0dG9uLgotICAg
IHZpcnR1YWwgTGF5b3V0UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVu
ZGVyQm94KiwgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQg
dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgSW50U2l6
ZSYpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfVEFHKQotICAgIHZpcnR1YWwg
TGF5b3V0U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBM
YXlvdXRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5k
cyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Q7CiAjZW5kaWYKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1N
YWMuaAkocmV2aXNpb24gMTEyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0
RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0OworICAg
IHZpcnR1YWwgSW50UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVy
Qm94KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCB1
c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24gMTEyODQ4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50TWVkaWFTCiAgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6
cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5m
bywgcmVjdCk7CiB9CiAKLUxheW91dFBvaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnZvbHVt
ZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29u
c3QgTGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKK0ludFBvaW50IFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRv
bkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKG11dGVCdXR0b25Cb3gsIHNpemUp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1T
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWEuY3BwCShyZXZpc2lvbiAxMTI4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjEsMTAgKzI2MSwxMCBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFy
CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsK
IH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y29udmVydFRvUGFpbnRp
bmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBw
YXJ0UmVuZGVyZXIsIExheW91dFJlY3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxvY2FsT2Zm
c2V0KSBjb25zdAorSW50UmVjdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y29udmVydFRvUGFp
bnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0
KiBwYXJ0UmVuZGVyZXIsIEludFJlY3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxvY2FsT2Zm
c2V0KSBjb25zdAogewogICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhlIHBhcnQg
cmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlci4KLSAgICBMYXlvdXRTaXplIG9mZnNldEZy
b21JbnB1dFJlbmRlcmVyID0gLShwYXJ0UmVuZGVyZXItPm9mZnNldEZyb21BbmNlc3RvckNvbnRh
aW5lcihpbnB1dFJlbmRlcmVyKSk7CisgICAgSW50U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJl
ciA9IC0ocGFydFJlbmRlcmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5k
ZXJlcikpOwogICAgIC8vIE1vdmUgdGhlIHJlY3QgaW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMu
CiAgICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CiAgICAgLy8gQWNj
b3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0LgpAQCAtMjgwLDE3ICsyODAsMTcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyYwogICAgIGlmICghaW5wdXQt
PnJlbmRlcmVyKCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJC
b3gqIGlucHV0UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goaW5wdXQtPnJlbmRlcmVyKCkpOwotICAg
IExheW91dFJlY3QgaW5wdXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hS
ZWN0KCk7CisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29u
dGVudEJveFJlY3QoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5
cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCi0gICAgTGF5b3V0VW5p
dCBjYW5jZWxCdXR0b25TaXplID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0
ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkp
OworICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94Lndp
ZHRoKCksIHN0ZDo6bWluPGludD4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgp
KSk7CiAgICAgLy8gQ2FsY3VsYXRlIGNhbmNlbCBidXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2
ZSB0byB0aGUgaW5wdXQgZWxlbWVudC4KICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNh
bGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1j
ZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20g
b2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0Lgot
ICAgIExheW91dFJlY3QgY2FuY2VsQnV0dG9uUmVjdChjYW5jZWxCdXR0b25PYmplY3QtPm9mZnNl
dEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRl
bnRCb3guaGVpZ2h0KCkgLSBjYW5jZWxCdXR0b25TaXplICsgMSkgLyAyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25TaXplLCBjYW5jZWxCdXR0b25TaXplKTsK
LSAgICBMYXlvdXRSZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1
dFJlbmRlckJveCwgY2FuY2VsQnV0dG9uT2JqZWN0LCBjYW5jZWxCdXR0b25SZWN0LCByKTsKKyAg
ICBJbnRSZWN0IGNhbmNlbEJ1dHRvblJlY3QoY2FuY2VsQnV0dG9uT2JqZWN0LT5vZmZzZXRGcm9t
QW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCisgICAgICAgIGlucHV0
Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gY2FuY2VsQnV0dG9u
U2l6ZSArIDEpIC8gMiwKKyAgICAgICAgY2FuY2VsQnV0dG9uU2l6ZSwgY2FuY2VsQnV0dG9uU2l6
ZSk7CisgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5w
dXRSZW5kZXJCb3gsIGNhbmNlbEJ1dHRvbk9iamVjdCwgY2FuY2VsQnV0dG9uUmVjdCwgcik7CiAK
ICAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKCJzZWFyY2hDYW5jZWwiKS5sZWFrUmVmKCk7CiAgICAgc3RhdGljIEltYWdlKiBjYW5jZWxQ
cmVzc2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbFBy
ZXNzZWQiKS5sZWFrUmVmKCk7CkBAIC0zMjMsMTcgKzMyMywxNyBAQCBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpwYWludFNlYXJjCiAgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNC
b3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFJlbmRlckJveCogaW5wdXRSZW5kZXJC
b3ggPSB0b1JlbmRlckJveChpbnB1dC0+cmVuZGVyZXIoKSk7Ci0gICAgTGF5b3V0UmVjdCBpbnB1
dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKyAgICBJbnRS
ZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwog
CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5k
IHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCi0gICAgTGF5b3V0VW5pdCBtYWduaWZpZXJT
aXplID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluPExheW91dFVu
aXQ+KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOworICAgIGludCBtYWdu
aWZpZXJTaXplID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluPGlu
dD4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CiAgICAgLy8gQ2FsY3Vs
YXRlIGRlY29yYXRpb24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVu
dC4KICAgICAvLyBDZW50ZXIgdGhlIGRlY29yYXRpb24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRo
b3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCiAg
ICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRo
aXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBMYXlvdXRSZWN0IG1h
Z25pZmllclJlY3QobWFnbmlmaWVyT2JqZWN0LT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIo
aW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gbWFnbmlmaWVy
U2l6ZSArIDEpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmlmaWVyU2l6
ZSwgbWFnbmlmaWVyU2l6ZSk7Ci0gICAgTGF5b3V0UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0
VG9QYWludGluZ1JlY3QoaW5wdXRSZW5kZXJCb3gsIG1hZ25pZmllck9iamVjdCwgbWFnbmlmaWVy
UmVjdCwgcik7CisgICAgSW50UmVjdCBtYWduaWZpZXJSZWN0KG1hZ25pZmllck9iamVjdC0+b2Zm
c2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyQm94KS53aWR0aCgpLAorICAgICAg
ICBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIG1hZ25p
ZmllclNpemUgKyAxKSAvIDIsCisgICAgICAgIG1hZ25pZmllclNpemUsIG1hZ25pZmllclNpemUp
OworICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0
UmVuZGVyQm94LCBtYWduaWZpZXJPYmplY3QsIG1hZ25pZmllclJlY3QsIHIpOwogCiAgICAgc3Rh
dGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
c2VhcmNoTWFnbmlmaWVyIikubGVha1JlZigpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3
SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG1hZ25pZmllck9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCBwYWludGluZ1JlY3QpOwpAQCAtMzU4LDE1ICszNTgsMTUgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyYwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlz
Qm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJCb3gqIGlucHV0UmVuZGVy
Qm94ID0gdG9SZW5kZXJCb3goaW5wdXQtPnJlbmRlcmVyKCkpOwotICAgIExheW91dFJlY3QgaW5w
dXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgSW50
UmVjdCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gd2lsbCBmaXQgaW4gaXRz
IHBhcmVudCdzIGJveC4KLSAgICBMYXlvdXRVbml0IG1hZ25pZmllckhlaWdodCA9IHN0ZDo6bWlu
PExheW91dFVuaXQ+KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSk7Ci0gICAg
TGF5b3V0VW5pdCBtYWduaWZpZXJXaWR0aCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29u
dGVudEJveC53aWR0aCgpLCBtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUp
OwotICAgIExheW91dFJlY3QgbWFnbmlmaWVyUmVjdChtYWduaWZpZXJPYmplY3QtPm9mZnNldEZy
b21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3gu
aGVpZ2h0KCkgLSBtYWduaWZpZXJIZWlnaHQgKyAxKSAvIDIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hZ25pZmllcldpZHRoLCBtYWduaWZpZXJIZWlnaHQpOwotICAgIExheW91dFJl
Y3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0UmVuZGVyQm94LCBt
YWduaWZpZXJPYmplY3QsIG1hZ25pZmllclJlY3QsIHIpOworICAgIGludCBtYWduaWZpZXJIZWln
aHQgPSBzdGQ6Om1pbjxpbnQ+KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSk7
CisgICAgaW50IG1hZ25pZmllcldpZHRoID0gc3RkOjptaW48aW50PihpbnB1dENvbnRlbnRCb3gu
d2lkdGgoKSwgbWFnbmlmaWVySGVpZ2h0ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKKyAgICBJ
bnRSZWN0IG1hZ25pZmllclJlY3QobWFnbmlmaWVyT2JqZWN0LT5vZmZzZXRGcm9tQW5jZXN0b3JD
b250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCisgICAgICAgIGlucHV0Q29udGVudEJv
eC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gbWFnbmlmaWVySGVpZ2h0ICsgMSkg
LyAyLAorICAgICAgICBtYWduaWZpZXJXaWR0aCwgbWFnbmlmaWVySGVpZ2h0KTsKKyAgICBJbnRS
ZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dFJlbmRlckJveCwg
bWFnbmlmaWVyT2JqZWN0LCBtYWduaWZpZXJSZWN0LCByKTsKIAogICAgIHN0YXRpYyBJbWFnZSog
bWFnbmlmaWVySW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaE1hZ25p
ZmllclJlc3VsdHMiKS5sZWFrUmVmKCk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFn
ZShtYWduaWZpZXJJbWFnZSwgbWFnbmlmaWVyT2JqZWN0LT5zdHlsZSgpLT5jb2xvclNwYWNlKCks
IHBhaW50aW5nUmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAkocmV2aXNpb24gMTEyODQ4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogCiAgICAgaW50IG1lbnVMaXN0SW50ZXJuYWxQ
YWRkaW5nKFJlbmRlclN0eWxlKiwgaW50IHBhZGRpbmdUeXBlKSBjb25zdDsKICAgICBib29sIHBh
aW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jiwg
SW1hZ2UqKTsKLSAgICBMYXlvdXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmpl
Y3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBMYXlv
dXRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3Q7CisgICAg
SW50UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVy
LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgSW50UmVjdCBwYXJ0UmVjdCwgY29u
c3QgSW50UmVjdCYgbG9jYWxPZmZzZXQpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJl
dmlzaW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICAvLyBBIGdl
bmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBh
dCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCosIExheW91dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpIE9WRVJSSURFOwogCiAgICAg
dmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJv
cmRlckRhdGEmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExh
eWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CkBAIC03NCwxMiArNzQs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdC
b3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRD
YXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBM
YXlvdXRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwog
CiAgICAgdmlydHVhbCBib29sIHBvcHNNZW51QnlBcnJvd0tleXMoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoTUVURVJfVEFHKQotICAgIHZpcnR1YWwgTGF5
b3V0U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhj
b25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBh
cnQpIGNvbnN0OwogI2VuZGlmCkBAIC0xNzEsNyArMTcxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgYm9vbCB1c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpOwogICAgIHZpcnR1YWwg
Ym9vbCB1c2VzTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAg
dmlydHVhbCBMYXlvdXRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5k
ZXJCb3gqLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCB2
b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXpl
JikgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
U2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdDsKQEAgLTE3OSwxNCArMTc5LDE0IEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9y
V2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRp
cGxlRmlsZXNBbGxvd2VkKSBjb25zdCBPVkVSUklERTsKIAotICAgIExheW91dFJlY3QgaW5mbGF0
ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdp
bnMsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OworICAgIEludFJlY3QgaW5mbGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZs
b2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1Bh
aW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRl
ck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3Qg
SW50UmVjdCYgcikgY29uc3Q7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFz
ZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0
b25zKS4KICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSop
IGNvbnN0OwogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJ
bnRTaXplKiBzaXplcywgY29uc3QgTGF5b3V0U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVs
ID0gMS4wZik7CisgICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXpl
KiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7
CiAgICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBz
aXplcykgY29uc3Q7CiAgICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0
IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwpAQCAtMjAxLDcgKzIwMSw3
IEBAIHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBh
bmQgZm9yIHBhaW50aW5nCiAKLSAgICB2b2lkIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lkIHNldFBvcHVwQnV0
dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKICAgICBj
b25zdCBJbnRTaXplKiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBw
b3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9uUGFk
ZGluZyhOU0NvbnRyb2xTaXplKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUw
Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb24KICAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5k
LCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBh
aW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIExheW91dFJlY3QmIHIpCit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJl
Y3QmIHIpCiB7CiAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KTsKICAgICAKQEAgLTUzMywxMyArNTMzLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFJlcGFpbnRSZWN0KGMKICAgICB9CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyVGhlbWVNYWM6Omlu
ZmxhdGVSZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0
IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsKSBjb25zdAorSW50UmVjdCBSZW5kZXJUaGVt
ZU1hYzo6aW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwpIGNvbnN0CiB7CiAgICAgLy8gT25s
eSBkbyB0aGUgaW5mbGF0aW9uIGlmIHRoZSBhdmFpbGFibGUgd2lkdGgvaGVpZ2h0IGFyZSB0b28g
c21hbGwuICBPdGhlcndpc2UgdHJ5IHRvCiAgICAgLy8gZml0IHRoZSBnbG93L2NoZWNrIHNwYWNl
IGludG8gdGhlIGF2YWlsYWJsZSBib3gncyB3aWR0aC9oZWlnaHQuCi0gICAgTGF5b3V0VW5pdCB3
aWR0aERlbHRhID0gci53aWR0aCgpIC0gKHNpemUud2lkdGgoKSArIG1hcmdpbnNbbGVmdE1hcmdp
bl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW3JpZ2h0TWFyZ2luXSAqIHpvb21MZXZlbCk7Ci0gICAg
TGF5b3V0VW5pdCBoZWlnaHREZWx0YSA9IHIuaGVpZ2h0KCkgLSAoc2l6ZS5oZWlnaHQoKSArIG1h
cmdpbnNbdG9wTWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNbYm90dG9tTWFyZ2luXSAqIHpv
b21MZXZlbCk7Ci0gICAgTGF5b3V0UmVjdCByZXN1bHQocik7CisgICAgaW50IHdpZHRoRGVsdGEg
PSByLndpZHRoKCkgLSAoc2l6ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21M
ZXZlbCArIG1hcmdpbnNbcmlnaHRNYXJnaW5dICogem9vbUxldmVsKTsKKyAgICBpbnQgaGVpZ2h0
RGVsdGEgPSByLmhlaWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdpbl0g
KiB6b29tTGV2ZWwgKyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6b29tTGV2ZWwpOworICAgIElu
dFJlY3QgcmVzdWx0KHIpOwogICAgIGlmICh3aWR0aERlbHRhIDwgMCkgewogICAgICAgICByZXN1
bHQuc2V0WChyZXN1bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCk7CiAg
ICAgICAgIHJlc3VsdC5zZXRXaWR0aChyZXN1bHQud2lkdGgoKSAtIHdpZHRoRGVsdGEpOwpAQCAt
NTYwLDcgKzU2MCw3IEBAIEZsb2F0UmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnQK
ICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRlcmVyOwogICAgIHdo
aWxlIChyZW5kZXJlciAmJiByZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7CiAgICAgICAgIFJl
bmRlck9iamVjdCogY29udGFpbmluZ1JlbmRlcmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwot
ICAgICAgICBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlciAtPSByZW5kZXJlci0+b2Zmc2V0RnJvbUNv
bnRhaW5lcihjb250YWluaW5nUmVuZGVyZXIsIExheW91dFBvaW50KCkpOworICAgICAgICBvZmZz
ZXRGcm9tSW5wdXRSZW5kZXJlciAtPSByb3VuZGVkSW50U2l6ZShyZW5kZXJlci0+b2Zmc2V0RnJv
bUNvbnRhaW5lcihjb250YWluaW5nUmVuZGVyZXIsIExheW91dFBvaW50KCkpKTsKICAgICAgICAg
cmVuZGVyZXIgPSBjb250YWluaW5nUmVuZGVyZXI7CiAgICAgfQogICAgIC8vIElmIHRoZSBpbnB1
dCByZW5kZXJlciB3YXMgbm90IGEgY29udGFpbmVyLCBzb21ldGhpbmcgd2VudCB3cm9uZwpAQCAt
NjQxLDE0ICs2NDEsMTQgQEAgTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNp
egogICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6c2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxsLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29u
c3QgTGF5b3V0U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsKQordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6c2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxsLCBjb25zdCBJbnRTaXplKiBzaXplcywg
Y29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsKQogewogICAgIE5TQ29udHJv
bFNpemUgc2l6ZTsKLSAgICBpZiAobWluU2l6ZS53aWR0aCgpID49IHN0YXRpY19jYXN0PExheW91
dFVuaXQ+KHNpemVzW05TUmVndWxhckNvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUxldmVsKSAm
JgotICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHNp
emVzW05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkpCisgICAgaWYg
KG1pblNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRy
b2xTaXplXS53aWR0aCgpICogem9vbUxldmVsKSAmJgorICAgICAgICBtaW5TaXplLmhlaWdodCgp
ID49IHN0YXRpY19jYXN0PGludD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLmhlaWdodCgp
ICogem9vbUxldmVsKSkKICAgICAgICAgc2l6ZSA9IE5TUmVndWxhckNvbnRyb2xTaXplOwotICAg
IGVsc2UgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihzaXpl
c1tOU1NtYWxsQ29udHJvbFNpemVdLndpZHRoKCkgKiB6b29tTGV2ZWwpICYmCi0gICAgICAgICAg
ICAgbWluU2l6ZS5oZWlnaHQoKSA+PSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihzaXplc1tOU1Nt
YWxsQ29udHJvbFNpemVdLmhlaWdodCgpICogem9vbUxldmVsKSkKKyAgICBlbHNlIGlmIChtaW5T
aXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1NtYWxsQ29udHJvbFNpemVd
LndpZHRoKCkgKiB6b29tTGV2ZWwpICYmCisgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQoKSA+
PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6
b29tTGV2ZWwpKQogICAgICAgICBzaXplID0gTlNTbWFsbENvbnRyb2xTaXplOwogICAgIGVsc2UK
ICAgICAgICAgc2l6ZSA9IE5TTWluaUNvbnRyb2xTaXplOwpAQCAtNzMxLDcgKzczMSw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWwKIHsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5j
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzk0
LDcgKzc5NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGUKICAg
ICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBh
Y2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgIExheW91dFJlY3QgaW5mbGF0ZWRSZWN0ID0gcjsK
KyAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7CiAgICAgaWYgKHIud2lkdGgoKSA+PSBtaW5p
bXVtTWVudUxpc3RTaXplKG8tPnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZs
YXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2
ZWwpOwogCkBAIC04MTksMTYgKzgxOSwxNiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0KFJlbmRlCiAKICNpZiBFTkFCTEUoTUVURVJfVEFHKQogCi1MYXlvdXRTaXplIFJlbmRl
clRoZW1lTWFjOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqIHJlbmRlck1l
dGVyLCBjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1l
TWFjOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqIHJlbmRlck1ldGVyLCBj
b25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgaWYgKE5vQ29udHJvbFBhcnQgPT0g
cmVuZGVyTWV0ZXItPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkKICAgICAgICAgcmV0dXJuIGJvdW5k
cy5zaXplKCk7CiAKICAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNh
dG9yRm9yKHJlbmRlck1ldGVyKTsKICAgICAvLyBNYWtlcyBlbm91Z2ggcm9vbSBmb3IgY2VsbCdz
IGludHJpbnNpYyBzaXplLgotICAgIE5TU2l6ZSBjZWxsU2l6ZSA9IFtjZWxsIGNlbGxTaXplRm9y
Qm91bmRzOkxheW91dFJlY3QoTGF5b3V0UG9pbnQoKSwgYm91bmRzLnNpemUoKSldOwotICAgIHJl
dHVybiBMYXlvdXRTaXplKGJvdW5kcy53aWR0aCgpIDwgY2VsbFNpemUud2lkdGggPyBjZWxsU2l6
ZS53aWR0aCA6IGJvdW5kcy53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5o
ZWlnaHQoKSA8IGNlbGxTaXplLmhlaWdodCA/IGNlbGxTaXplLmhlaWdodCA6IGJvdW5kcy5oZWln
aHQoKSk7CisgICAgTlNTaXplIGNlbGxTaXplID0gW2NlbGwgY2VsbFNpemVGb3JCb3VuZHM6SW50
UmVjdChJbnRQb2ludCgpLCBib3VuZHMuc2l6ZSgpKV07CisgICAgcmV0dXJuIEludFNpemUoYm91
bmRzLndpZHRoKCkgPCBjZWxsU2l6ZS53aWR0aCA/IGNlbGxTaXplLndpZHRoIDogYm91bmRzLndp
ZHRoKCksCisgICAgICAgICAgICAgICAgICAgYm91bmRzLmhlaWdodCgpIDwgY2VsbFNpemUuaGVp
Z2h0ID8gY2VsbFNpemUuaGVpZ2h0IDogYm91bmRzLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZXRlcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xMjc4LDcgKzEy
NzgsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvCiAgICAgc3R5
bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IExheW91dFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lTWFjOjpz
ZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9uID0gdGhpcy0+cG9w
dXBCdXR0b24oKTsKIApAQCAtMTU0MCw5ICsxNTQwLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTZWFyY2hGaWVsZENhbgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgLy8gVGFr
ZSBjYXJlIG9mIGNhc2VzIHdoZXJlIHRoZSBjYW5jZWwgYnV0dG9uIHdhcyBub3QgYWxpZ25lZCB3
aXRoIHRoZSByaWdodCBib3JkZXIgb2YgdGhlIGlucHV0IGVsZW1lbnQgKGZvciBlLmcuCiAgICAg
Ly8gd2hlbiBzcGVlY2ggaW5wdXQgaXMgZW5hYmxlZCBmb3IgdGhlIGlucHV0IGVsZW1lbnQuCi0g
ICAgTGF5b3V0UmVjdCBhYnNCb3VuZGluZ0JveCA9IGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCgpOwotICAgIExheW91dFVuaXQgYWJzUmlnaHQgPSBhYnNCb3VuZGlu
Z0JveC54KCkgKyBhYnNCb3VuZGluZ0JveC53aWR0aCgpIC0gaW5wdXQtPnJlbmRlckJveCgpLT5w
YWRkaW5nUmlnaHQoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyUmlnaHQoKTsKLSAgICBM
YXlvdXRVbml0IHNwYWNlVG9SaWdodE9mQ2FuY2VsQnV0dG9uID0gYWJzUmlnaHQgLSAoci54KCkg
KyByLndpZHRoKCkpOworICAgIEludFJlY3QgYWJzQm91bmRpbmdCb3ggPSBpbnB1dC0+cmVuZGVy
ZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICBpbnQgYWJzUmlnaHQgPSBhYnNC
b3VuZGluZ0JveC54KCkgKyBhYnNCb3VuZGluZ0JveC53aWR0aCgpIC0gaW5wdXQtPnJlbmRlckJv
eCgpLT5wYWRkaW5nUmlnaHQoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyUmlnaHQoKTsK
KyAgICBpbnQgc3BhY2VUb1JpZ2h0T2ZDYW5jZWxCdXR0b24gPSBhYnNSaWdodCAtIChyLngoKSAr
IHIud2lkdGgoKSk7CiAgICAgbG9jYWxCb3VuZHMuc2V0WChsb2NhbEJvdW5kcy54KCkgLSBzcGFj
ZVRvUmlnaHRPZkNhbmNlbEJ1dHRvbik7CiAjZW5kaWYKIApAQCAtMjA2MCw3ICsyMDYwLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6dXNlc01lZGlhQ29udHJvbFZvbAogICAgIHJldHVybiBtZWRp
YUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lOwogfQog
Ci1MYXlvdXRQb2ludCBSZW5kZXJUaGVtZU1hYzo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVC
dXR0b24oUmVuZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25zdCBMYXlvdXRTaXplJiBzaXplKSBj
b25zdAorSW50UG9pbnQgUmVuZGVyVGhlbWVNYWM6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRl
QnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29u
c3QKIHsKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sczo6dm9sdW1lU2xpZGVyT2Zmc2V0
RnJvbU11dGVCdXR0b24obXV0ZUJ1dHRvbkJveCwgc2l6ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDExMjg0OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg3NiwxNCArODc2LDE0IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJj
aEZpZWxkU3QKIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewotICAgIExheW91dFJlY3QgYm91bmRzID0gcjsKKyAgICBJbnRSZWN0IGJv
dW5kcyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgp
IHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkp
OwogCi0gICAgTGF5b3V0UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRl
Q29udGVudEJveCgpOworICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5h
YnNvbHV0ZUNvbnRlbnRCb3goKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBi
dXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CiAgICAg
Ym91bmRzLnNldEhlaWdodChtaW4ocGFyZW50Qm94LndpZHRoKCksIG1pbihwYXJlbnRCb3guaGVp
Z2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKQEAgLTkyNywxMyArOTI3LDEzIEBAIHZvaWQgUmVu
ZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmUKIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTGF5b3V0UmVj
dCBib3VuZHMgPSByOworICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICBBU1NFUlQoby0+cGFy
ZW50KCkpOwogICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJC
b3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7Ci0gICAgTGF5b3V0UmVjdCBwYXJlbnRCb3gg
PSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIEludFJlY3QgcGFy
ZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKICAgICAKICAg
ICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2ls
bCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAogICAgIGJvdW5kcy5zZXRIZWlnaHQobWluKHBhcmVu
dEJveC53aWR0aCgpLCBtaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7
CkBAIC05NjEsNyArOTYxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmll
bGRSZQogCiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQogewotICAgIExheW91dFJlY3QgYm91bmRzID0gcjsKKyAgICBJbnRSZWN0IGJvdW5k
cyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NjksMTEgKzk2OSwxMSBAQCBib29sIFJlbmRlclRo
ZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgp
KTsKLSAgICBMYXlvdXRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVD
b250ZW50Qm94KCk7CisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFi
c29sdXRlQ29udGVudEJveCgpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRl
Y29yYXRpb24gd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAogICAgIGJvdW5kcy5zZXRIZWln
aHQobWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7Ci0gICAgYm91bmRz
LnNldFdpZHRoKG1pbjxMYXlvdXRVbml0PihwYXJlbnRCb3gud2lkdGgoKSwgYm91bmRzLmhlaWdo
dCgpICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7CisgICAgYm91bmRzLnNldFdpZHRoKG1pbjxp
bnQ+KHBhcmVudEJveC53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkgKiBkZWZhdWx0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blNpemUpKTsKIAogICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1
cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2ls
bAogICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQu
ICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCkBAIC0xMTE5LDcgKzEx
MTksNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lZGlhVm9sdW1lU2xpCiAgICAgcmV0
dXJuIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYiwgbywgcGFpbnRJbmZvLCByKTsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVy
VGhlbWVXaW46OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0
ZUJ1dHRvbkJveCwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKK0ludFBvaW50IFJlbmRl
clRoZW1lV2luOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqIG11
dGVCdXR0b25Cb3gsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJl
bmRlck1lZGlhQ29udHJvbHM6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKG11dGVC
dXR0b25Cb3gsIHNpemUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lV2luLmgJKHJldmlzaW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZy
b21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJv
eCosIGNvbnN0IEludFNpemUmKSBjb25zdCBPVkVSUklERTsKICNlbmRpZgogCiAgICAgdmlydHVh
bCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135305</attachid>
            <date>2012-04-03 04:05:26 -0700</date>
            <delta_ts>2012-04-03 06:56:11 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-82196-20120403130523.patch</filename>
            <type>text/plain</type>
            <size>40149</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjg4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDEyLTA0LTAyICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZlcnQgUmVuZGVyVGhl
bWUgcGFpbnQgYW5kIGxheW91dCBmdW5jdGlvbnMgdG8gaW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIxOTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBKdWxpZW4gQ2hhZmZyYWl4LgorCisgICAgICAgIFdoZW4gZGVhbGluZyB3aXRoIG9iamVjdCB0
aGF0IGFyZSByZW5kZXJlZCBvdXRzaWRlIG9mIFdlYkNvcmUsIHdlIGRvIGFsbCBuZWNlc3Nhcnkg
cGl4ZWwgc25hcHBpbmcKKyAgICAgICAgYmVmb3JlIHBhc3NpbmcgY29vcmRpbmF0ZXMgdG8gdGhl
IGV4dGVybmFsIGNvZGUuIFJlbmRlclRoZW1lIGVuY29tcGFzc2VzIGEgc2V0IG9mIG9iamVjdHMg
d2hvc2UKKyAgICAgICAgcmVuZGVyaW5nIGlzIGluZmx1ZW5jZWQgYnkgdGhlIHBsYXRmb3JtLiBU
aGlzIGNoYW5nZSByZXZlcnRzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGlzIHBsYXRmb3JtCisg
ICAgICAgIGNvZGUgYW5kIFdlYkNvcmUgdG8gYmUgaW50ZWdlcnMuCisKKyAgICAgICAgU29tZSBw
bGF0Zm9ybXMsIHN1Y2ggYXMgTWFjLCB1c2Ugc3ViLXBpeGVsIHVuaXRzIGZvciBsYXlvdXQgYW5k
IHJlbmRlcmluZywgYnV0IGl0J3Mgc3RpbGwgbm90CisgICAgICAgIGRlc2lyYWJsZSB0byBwYXNz
IHN1Yi1waXhlbCB2YWx1ZXMgdG8gdGhlc2UgQVBJJ3MsIGJlY2F1c2UgdWx0aW1hdGVseSB3ZSds
bCByZW5kZXIgdGhlc2Ugb2JqZWN0cworICAgICAgICBhdCB3aG9sZS1waXhlbCB2YWx1ZXMgdG8g
YXZvaWQgYW50aS1hbGlhc2luZy4KKworICAgICAgICBNYXJraW5nIHRvdWNoZWQgb3ZlcnJpZGRl
biB2aXJ0dWFsIGZ1bmN0aW9ucyBhcyBPVkVSUklERS4gVGhlcmUgYXJlIG1hbnkgbW9yZSB0byB1
cGRhdGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhY3Rpb25hbExheW91dFJlY3Q6OnBpeGVsU25hcHBlZExvY2F0aW9u
KTogQ29udmVuaWVuY2UgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFjdGlvbmFsTGF5
b3V0UmVjdDo6cGl4ZWxTbmFwcGVkU2l6ZSk6IERpdHRvLgorICAgICAgICAoRnJhY3Rpb25hbExh
eW91dFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludFJlY3Q6OnBpeGVsU25hcHBlZExvY2F0aW9uKTogVGVtcG9yYXJ5IG1p
cnJvcnMgdG8gdGhlIGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lIG9uCisgICAgICAgIEZyYWN0
aW9uYWxMYXlvdXRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6cGl4ZWxTbmFwcGVk
U2l6ZSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKTogQWRkaW5nIGEgbG9j
YWwgcGl4ZWwgc25hcHBlZCBwYWludCByZWN0IHRvIGF2b2lkCisgICAgICAgIHJlcGVhdGVkIHBp
eGVsIHNuYXBwaW5nLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KTogUmV2ZXJ0aW5nIHRvIGlu
dGVnZXJzIHNpbmNlIHRoaXMgcmVwcmVzZW50cyBvbi1zY3JlZW4KKyAgICAgICAgY29vcmRpbmF0
ZXMKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGl4ZWxTbmFwcGVkU2l6ZSk6IENvbnZl
bmllbmNlIG1ldGhvZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzOjp2b2x1bWVTbGlkZXJP
ZmZzZXRGcm9tTXV0ZUJ1dHRvbik6IFRoaXMgc3RhdGljIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVk
CisgICAgICAgIGZyb20gUmVuZGVyVGhlbWUgcGxhdGZvcm0gY29kZS4gQ2hhbmdpbmcgaXQgdG8g
b3BlcmF0ZSBvbiBwaXhlbCBzbmFwcGVkIHZhbHVlcyBzaW5jZSB3ZSBkb24ndCB3YW50CisgICAg
ICAgIHRvIHBpcGUgTGF5b3V0VW5pdHMgdGhyb3VnaCB0aGF0IGNvZGUuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1ldGVyOjpj
b21wdXRlTG9naWNhbFdpZHRoKTogQ2hhbmdpbmcgdG8gZmVlZCBwaXhlbCBzbmFwcGVkIHZhbHVl
cyBpbnRvIHRoZSBwbGF0Zm9ybQorICAgICAgICBjb2RlIHRvIHByb3Blcmx5IGRldGVybWluZSB0
aGUgcmVzdWx0aW5nIG1ldGVyIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZXRlcjo6
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6CisgICAgICAgIChSZW5kZXJUaGVtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRDYXBzTG9ja0luZGljYXRvcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKFJl
bmRlclRoZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6Y29udmVydFRvUGFpbnRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
aDoKKyAgICAgICAgKFJlbmRlclRoZW1lTWFjKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVw
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjp2b2x1bWVTbGlkZXJP
ZmZzZXRGcm9tTXV0ZUJ1dHRvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjp2b2x1bWVTbGlkZXJPZmZz
ZXRGcm9tTXV0ZUJ1dHRvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmg6
CisgICAgICAgIChSZW5kZXJUaGVtZVdpbik6CisKIDIwMTItMDQtMDIgIEFsZXhpcyBNZW5hcmQg
IDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmVuYW1lIENTU1Byb3Bl
cnR5TG9uZ2hhbmQgY2xhc3MgdG8gU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25hbExheW91
dFJlY3QuaAkocmV2aXNpb24gMTEyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRnJhY3Rpb25hbExheW91dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUs
OSBAQCBwdWJsaWM6CiAgICAgRnJhY3Rpb25hbExheW91dFBvaW50IGxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIEZyYWN0aW9uYWxMYXlvdXRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KIAorICAgIEludFBvaW50IHBpeGVsU25hcHBlZExvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gcm91bmRlZEludFBvaW50KG1fbG9jYXRpb24pOyB9CisgICAg
SW50U2l6ZSBwaXhlbFNuYXBwZWRTaXplKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxTbmFwcGVkSW50
U2l6ZShtX3NpemUsIG1fbG9jYXRpb24pOyB9CisKICAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9u
OyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzaXplKSB7
IG1fc2l6ZSA9IHNpemU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaAkocmV2aXNpb24gMTEyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDggQEAg
cHVibGljOgogICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsg
aGVpZ2h0KCk7IH0KICAgICBpbnQgcGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQogICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKyAgICBJbnRQb2ludCBwaXhlbFNuYXBwZWRMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uKCk7IH0KKyAgICBJbnRTaXplIHBpeGVsU25hcHBl
ZFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KIAogICAgIHZvaWQgc2V0WChpbnQgeCkg
eyBtX2xvY2F0aW9uLnNldFgoeCk7IH0KICAgICB2b2lkIHNldFkoaW50IHkpIHsgbV9sb2NhdGlv
bi5zZXRZKHkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gMTEyODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NCw5ICs1NTQsOSBAQCB2b2lkIFJlbmRlckJveDo6dXBk
YXRlTGF5ZXJUcmFuc2Zvcm0oKQogICAgICAgICBsYXllcigpLT51cGRhdGVUcmFuc2Zvcm0oKTsK
IH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0CitJ
bnRSZWN0IFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKIHsKLSAgICBMYXlv
dXRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIEludFJlY3QgcmVjdCA9IHBpeGVs
U25hcHBlZEludFJlY3QoY29udGVudEJveFJlY3QoKSk7CiAgICAgRmxvYXRQb2ludCBhYnNQb3Mg
PSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKICAgICByZWN0Lm1vdmUoYWJzUG9zLngo
KSwgYWJzUG9zLnkoKSk7CiAgICAgcmV0dXJuIHJlY3Q7CkBAIC0xMDAwLDE3ICsxMDAwLDE4IEBA
IHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW4KICAgICAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgbmF0aXZlIHRoZW1lIGFwcGVhcmFuY2UsIHBhaW50IHRoYXQgYmVmb3JlIHBh
aW50aW5nIG91ciBiYWNrZ3JvdW5kLgogICAgIC8vIFRoZSB0aGVtZSB3aWxsIHRlbGwgdXMgd2hl
dGhlciBvciBub3Qgd2Ugc2hvdWxkIGFsc28gcGFpbnQgdGhlIENTUyBiYWNrZ3JvdW5kLgotICAg
IGJvb2wgdGhlbWVQYWludGVkID0gc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpICYmICF0aGVtZSgp
LT5wYWludCh0aGlzLCBwYWludEluZm8sIHBhaW50UmVjdCk7CisgICAgSW50UmVjdCBzbmFwcGVk
UGFpbnRSZWN0KHBpeGVsU25hcHBlZEludFJlY3QocGFpbnRSZWN0KSk7CisgICAgYm9vbCB0aGVt
ZVBhaW50ZWQgPSBzdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCktPnBhaW50KHRo
aXMsIHBhaW50SW5mbywgc25hcHBlZFBhaW50UmVjdCk7CiAgICAgaWYgKCF0aGVtZVBhaW50ZWQp
IHsKICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mbywgcGFpbnRSZWN0LCBibGVlZEF2
b2lkYW5jZSk7CiAKICAgICAgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAg
ICAgICAgIHRoZW1lKCktPnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZvLCBwaXhlbFNu
YXBwZWRJbnRSZWN0KHBhaW50UmVjdCkpOworICAgICAgICAgICAgdGhlbWUoKS0+cGFpbnREZWNv
cmF0aW9ucyh0aGlzLCBwYWludEluZm8sIHNuYXBwZWRQYWludFJlY3QpOwogICAgIH0KICAgICBw
YWludEJveFNoYWRvdyhwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgSW5zZXQpOwogCiAg
ICAgLy8gVGhlIHRoZW1lIHdpbGwgdGVsbCB1cyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgYWxz
byBwYWludCB0aGUgQ1NTIGJvcmRlci4KLSAgICBpZiAoKCFzdHlsZSgpLT5oYXNBcHBlYXJhbmNl
KCkgfHwgKCF0aGVtZVBhaW50ZWQgJiYgdGhlbWUoKS0+cGFpbnRCb3JkZXJPbmx5KHRoaXMsIHBh
aW50SW5mbywgcGl4ZWxTbmFwcGVkSW50UmVjdChwYWludFJlY3QpKSkpICYmIHN0eWxlKCktPmhh
c0JvcmRlcigpKQorICAgIGlmICgoIXN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCAoIXRoZW1l
UGFpbnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJbmZvLCBzbmFw
cGVkUGFpbnRSZWN0KSkpICYmIHN0eWxlKCktPmhhc0JvcmRlcigpKQogICAgICAgICBwYWludEJv
cmRlcihwYWludEluZm8sIHBhaW50UmVjdCwgc3R5bGUoKSwgYmxlZWRBdm9pZGFuY2UpOwogCiAg
ICAgaWYgKGJsZWVkQXZvaWRhbmNlID09IEJhY2tncm91bmRCbGVlZFVzZVRyYW5zcGFyZW5jeUxh
eWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTEy
ODQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjMsNiArMTIzLDcgQEAgcHVibGljOgogICAgIExheW91dFBvaW50IGxvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QubG9jYXRpb24oKTsgfQogICAgIExheW91dFNp
emUgbG9jYXRpb25PZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKHgoKSwgeSgpKTsg
fQogICAgIExheW91dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnNpemUo
KTsgfQorICAgIEludFNpemUgcGl4ZWxTbmFwcGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWVSZWN0LnBpeGVsU25hcHBlZFNpemUoKTsgfQogCiAgICAgdm9pZCBzZXRMb2NhdGlvbihjb25z
dCBMYXlvdXRQb2ludCYgbG9jYXRpb24pIHsgbV9mcmFtZVJlY3Quc2V0TG9jYXRpb24obG9jYXRp
b24pOyB9CiAgICAgCkBAIC0xMzksNyArMTQwLDcgQEAgcHVibGljOgogICAgIC8vIFRoZSBjb250
ZW50IGFyZWEgb2YgdGhlIGJveCAoZXhjbHVkZXMgcGFkZGluZyBhbmQgYm9yZGVyKS4KICAgICBM
YXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KFBhZGRpbmdPcHRpb25zIHBhZGRpbmdPcHRpb24gPSBF
eGNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChib3JkZXJM
ZWZ0KCkgKyBwYWRkaW5nTGVmdChwYWRkaW5nT3B0aW9uKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKHBhZGRpbmdPcHRpb24pLCBjb250ZW50V2lkdGgocGFkZGluZ09wdGlvbiksIGNvbnRlbnRI
ZWlnaHQocGFkZGluZ09wdGlvbikpOyB9CiAgICAgLy8gVGhlIGNvbnRlbnQgYm94IGluIGFic29s
dXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFuc2Zvcm1zLgotICAgIExheW91dFJlY3QgYWJzb2x1dGVD
b250ZW50Qm94KCkgY29uc3Q7CisgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25z
dDsKICAgICAvLyBUaGUgY29udGVudCBib3ggY29udmVydGVkIHRvIGFic29sdXRlIGNvb3JkcyAo
dGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50KS4KICAgICBGbG9hdFF1YWQgYWJzb2x1dGVD
b250ZW50UXVhZCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCShyZXZpc2lvbiAxMTI4NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMiwxMCArMjEyLDEwIEBAIEludFBvaW50IFJlbmRlck1lZGlhQ29udHJvbHM6OnZvbHVt
ZVNsaWQKICAgICBzdGF0aWMgY29uc3QgaW50IHlPZmZzZXQgPSA1OwogCiAgICAgZmxvYXQgem9v
bUxldmVsID0gbXV0ZUJ1dHRvbkJveC0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlu
dCB5ID0geU9mZnNldCAqIHpvb21MZXZlbCArIG11dGVCdXR0b25Cb3gtPm9mZnNldEhlaWdodCgp
IC0gc2l6ZS5oZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJv
eC0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgp
LCB5KSwgdHJ1ZSwgdHJ1ZSk7CisgICAgaW50IHkgPSB5T2Zmc2V0ICogem9vbUxldmVsICsgbXV0
ZUJ1dHRvbkJveC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpOwor
ICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1dGUo
RmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCksIHkpLCB0
cnVlLCB0cnVlKTsKICAgICBpZiAoYWJzUG9pbnQueSgpIDwgMCkKLSAgICAgICAgeSA9IG11dGVC
dXR0b25Cb3gtPmhlaWdodCgpOworICAgICAgICB5ID0gbXV0ZUJ1dHRvbkJveC0+cGl4ZWxTbmFw
cGVkSGVpZ2h0KCk7CiAgICAgcmV0dXJuIEludFBvaW50KHhPZmZzZXQgKiB6b29tTGV2ZWwsIHkp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAJKHJl
dmlzaW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxMyBAQCBSZW5kZXJNZXRlcjo6flJlbmRl
ck1ldGVyKCkKIHZvaWQgUmVuZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQogewogICAg
IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwotICAgIHNldFdpZHRoKHRoZW1lKCkt
Pm1ldGVyU2l6ZUZvckJvdW5kcyh0aGlzLCBmcmFtZVJlY3QoKSkud2lkdGgoKSk7CisgICAgc2V0
V2lkdGgodGhlbWUoKS0+bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJl
Y3QoZnJhbWVSZWN0KCkpKS53aWR0aCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6Y29tcHV0
ZUxvZ2ljYWxIZWlnaHQoKQogewogICAgIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQo
KTsKLSAgICBzZXRIZWlnaHQodGhlbWUoKS0+bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIGZyYW1l
UmVjdCgpKS5oZWlnaHQoKSk7CisgICAgc2V0SGVpZ2h0KHRoZW1lKCktPm1ldGVyU2l6ZUZvckJv
dW5kcyh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVjdCgpKSkuaGVpZ2h0KCkpOwog
fQogCiBkb3VibGUgUmVuZGVyTWV0ZXI6OnZhbHVlUmF0aW8oKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAxMTI4NDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoQ1NTU3R5bGVT
ZQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UmVjdCYgcikKK2Jvb2wgUmVu
ZGVyVGhlbWU6OnBhaW50KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgLy8gSWYgcGFpbnRpbmcgaXMgZGlzYWJsZWQs
IGJ1dCB3ZSBhcmVuJ3QgdXBkYXRpbmcgY29udHJvbCB0aW50cywgdGhlbiBqdXN0IGJhaWwuCiAg
ICAgLy8gSWYgd2UgYXJlIHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIGp1c3Qgc2NoZWR1bGUgYSBy
ZXBhaW50IGlmIHRoZSB0aGVtZSBzdXBwb3J0cyB0aW50aW5nCkBAIC01MDcsMTMgKzUwNywxMyBA
QCBTdHJpbmcgUmVuZGVyVGhlbWU6OmZvcm1hdE1lZGlhQ29udHJvbHNSCiAgICAgcmV0dXJuIGZv
cm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1lIC0gZHVyYXRpb24pOwogfQogCi1MYXlv
dXRQb2ludCBSZW5kZXJUaGVtZTo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVu
ZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25zdCBMYXlvdXRTaXplJiBzaXplKSBjb25zdAorSW50
UG9pbnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRl
ckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKLSAgICBM
YXlvdXRVbml0IHkgPSAtc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgeSA9IC1zaXplLmhlaWdodCgp
OwogICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1
dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5waXhlbFNuYXBwZWRPZmZzZXRMZWZ0KCksIHkp
LCB0cnVlLCB0cnVlKTsKICAgICBpZiAoYWJzUG9pbnQueSgpIDwgMCkKICAgICAgICAgeSA9IG11
dGVCdXR0b25Cb3gtPmhlaWdodCgpOwotICAgIHJldHVybiBMYXlvdXRQb2ludCgwLCB5KTsKKyAg
ICByZXR1cm4gSW50UG9pbnQoMCwgeSk7CiB9CiAKICNlbmRpZgpAQCAtNjY5LDcgKzY2OSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25zdCAKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywg
TGF5b3V0UmVjdCYgcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKIHsKICNpZiBVU0UoTkVXX1RIRU1FKQogICAg
IG1fdGhlbWUtPmluZmxhdGVDb250cm9sUGFpbnRSZWN0KG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KSwgY29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8pLCByLCBvLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpOwpAQCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1ldGVy
U3R5bGUoQ1NTU3QKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1MYXlv
dXRTaXplIFJlbmRlclRoZW1lOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIq
LCBjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lOjpt
ZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBib3Vu
ZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gMTEyODQ4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcg
Kzc3LDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwYWludCB0
aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAgQSB3aWRnZXQn
cyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEgYnV0dG9uLCBpcyBhbHdh
eXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9vbGVhbiByZXR1cm4gdmFs
dWUgaW5kaWNhdGVzCiAgICAgLy8gd2hldGhlciB0aGUgQ1NTIGJvcmRlci9iYWNrZ3JvdW5kIHNo
b3VsZCBhbHNvIGJlIHBhaW50ZWQuCi0gICAgYm9vbCBwYWludChSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgYm9vbCBwYWludChSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgYm9vbCBwYWlu
dEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogICAgIGJvb2wgcGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBTb21lIGNvbnRyb2xzIG1heSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFpbmVycyAo
ZS5nLiwgdGhlIGNoZWNrIG9uIGFuIE9TIFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBjb250cm9s
cyByZXBhaW50LAogICAgIC8vIHRoZSB0aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0aGlzIGlu
ZmxhdGVkIHJlY3QgdG8gdGhlIGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRlIHRoZSB3
aG9sZSBjb250cm9sLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBS
ZW5kZXJPYmplY3QqLCBMYXlvdXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFp
bnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKIAogICAgIC8vIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24gYSBwYXJ0
aWN1bGFyIHRoZW1lZCBvYmplY3QsIGUuZy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNzZWQKICAg
ICAvLyBvciBhIGNvbnRyb2wgYmVjb21lcyBkaXNhYmxlZC4KQEAgLTE3Nyw3ICsxNzcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzY3JvbGxiYXJDb250cm9s
U2l6ZUZvclBhcnQoQ29udHJvbFBhcnQpIHsgcmV0dXJuIFJlZ3VsYXJTY3JvbGxiYXI7IH0KIAog
ICAgIC8vIE1ldGhvZCBmb3IgcGFpbnRpbmcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3IKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0JikgeyByZXR1cm4gMDsgfTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gMDsgfTsKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19UQUcpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRp
b24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCkBAIC0xOTksMTEgKzE5OSwxMSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQg
Y3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm5z
IHRoZSBtZWRpYSB2b2x1bWUgc2xpZGVyIGNvbnRhaW5lcidzIG9mZnNldCBmcm9tIHRoZSBtdXRl
IGJ1dHRvbi4KLSAgICB2aXJ0dWFsIExheW91dFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21N
dXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCos
IGNvbnN0IEludFNpemUmKSBjb25zdDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX1RBRykK
LSAgICB2aXJ0dWFsIExheW91dFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1l
dGVyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRl
clNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0OwogI2Vu
ZGlmCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTWFjLmgJKHJldmlzaW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcg
KzQ5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIExheW91dFBvaW50IHZvbHVt
ZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExheW91dFNpemUm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRl
QnV0dG9uKFJlbmRlckJveCosIGNvbnN0IEludFNpemUmKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29u
dHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlz
aW9uIDExMjg0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUwogICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFTbGlkZXJUaHVtYiwgb2Jq
ZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqIG11dGVC
dXR0b25Cb3gsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CitJbnRQb2ludCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJC
b3gqIG11dGVCdXR0b25Cb3gsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIFJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihtdXRlQnV0
dG9uQm94LCBzaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAkocmV2aXNpb24gMTEyODQ4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYxLDEwICsyNjEsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6YWRqdXN0U2VhcgogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNp
emUsIEZpeGVkKSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNv
bnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJl
bmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBMYXlvdXRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRS
ZWN0JiBsb2NhbE9mZnNldCkgY29uc3QKK0ludFJlY3QgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OmNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0
IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRS
ZWN0JiBsb2NhbE9mZnNldCkgY29uc3QKIHsKICAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3
ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVyZXIuCi0gICAgTGF5b3V0
U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlciA9IC0ocGFydFJlbmRlcmVyLT5vZmZzZXRGcm9t
QW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJlcikpOworICAgIEludFNpemUgb2Zmc2V0RnJv
bUlucHV0UmVuZGVyZXIgPSAtKHBhcnRSZW5kZXJlci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFp
bmVyKGlucHV0UmVuZGVyZXIpKTsKICAgICAvLyBNb3ZlIHRoZSByZWN0IGludG8gcGFydFJlbmRl
cmVyJ3MgY29vcmRzLgogICAgIHBhcnRSZWN0Lm1vdmUob2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIp
OwogICAgIC8vIEFjY291bnQgZm9yIHRoZSBsb2NhbCBkcmF3aW5nIG9mZnNldC4KQEAgLTI4MCwx
NyArMjgwLDE3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAg
ICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgUmVuZGVyQm94KiBpbnB1dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KGlucHV0LT5yZW5k
ZXJlcigpKTsKLSAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94
LT5jb250ZW50Qm94UmVjdCgpOworICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0gaW5wdXRS
ZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxl
ZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94Lgot
ICAgIExheW91dFVuaXQgY2FuY2VsQnV0dG9uU2l6ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJv
eC53aWR0aCgpLCBzdGQ6Om1pbjxMYXlvdXRVbml0PihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCks
IHIuaGVpZ2h0KCkpKTsKKyAgICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IHN0ZDo6bWluKGlucHV0
Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxpbnQ+KGlucHV0Q29udGVudEJveC5oZWlnaHQo
KSwgci5oZWlnaHQoKSkpOwogICAgIC8vIENhbGN1bGF0ZSBjYW5jZWwgYnV0dG9uJ3MgY29vcmRp
bmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IGVsZW1lbnQuCiAgICAgLy8gQ2VudGVyIHRoZSBi
dXR0b24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9u
ZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCiAgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0
byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0
aCB0aGUgdGV4dC4KLSAgICBMYXlvdXRSZWN0IGNhbmNlbEJ1dHRvblJlY3QoY2FuY2VsQnV0dG9u
T2JqZWN0LT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRo
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29udGVudEJveC55KCkg
KyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gY2FuY2VsQnV0dG9uU2l6ZSArIDEpIC8gMiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uU2l6ZSwgY2FuY2Vs
QnV0dG9uU2l6ZSk7Ci0gICAgTGF5b3V0UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWlu
dGluZ1JlY3QoaW5wdXRSZW5kZXJCb3gsIGNhbmNlbEJ1dHRvbk9iamVjdCwgY2FuY2VsQnV0dG9u
UmVjdCwgcik7CisgICAgSW50UmVjdCBjYW5jZWxCdXR0b25SZWN0KGNhbmNlbEJ1dHRvbk9iamVj
dC0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyQm94KS53aWR0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0
Q29udGVudEJveC5oZWlnaHQoKSAtIGNhbmNlbEJ1dHRvblNpemUgKyAxKSAvIDIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblNpemUsIGNhbmNlbEJ1dHRvblNpemUp
OworICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0
UmVuZGVyQm94LCBjYW5jZWxCdXR0b25PYmplY3QsIGNhbmNlbEJ1dHRvblJlY3QsIHIpOwogCiAg
ICAgc3RhdGljIEltYWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsIikubGVha1JlZigpOwogICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJl
c3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQcmVz
c2VkIikubGVha1JlZigpOwpAQCAtMzIzLDE3ICszMjMsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRTZWFyYwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJCb3gqIGlucHV0UmVuZGVyQm94
ID0gdG9SZW5kZXJCb3goaW5wdXQtPnJlbmRlcmVyKCkpOwotICAgIExheW91dFJlY3QgaW5wdXRD
b250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgSW50UmVj
dCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKIAog
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3
aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIExheW91dFVuaXQgbWFnbmlmaWVyU2l6
ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxMYXlvdXRVbml0
PihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKKyAgICBpbnQgbWFnbmlm
aWVyU2l6ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxpbnQ+
KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOwogICAgIC8vIENhbGN1bGF0
ZSBkZWNvcmF0aW9uJ3MgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IGVsZW1lbnQu
CiAgICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91
Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAogICAg
IC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlz
IHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCi0gICAgTGF5b3V0UmVjdCBtYWdu
aWZpZXJSZWN0KG1hZ25pZmllck9iamVjdC0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlu
cHV0UmVuZGVyQm94KS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIG1hZ25pZmllclNp
emUgKyAxKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ25pZmllclNpemUs
IG1hZ25pZmllclNpemUpOwotICAgIExheW91dFJlY3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRv
UGFpbnRpbmdSZWN0KGlucHV0UmVuZGVyQm94LCBtYWduaWZpZXJPYmplY3QsIG1hZ25pZmllclJl
Y3QsIHIpOworICAgIEludFJlY3QgbWFnbmlmaWVyUmVjdChtYWduaWZpZXJPYmplY3QtPm9mZnNl
dEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3gu
aGVpZ2h0KCkgLSBtYWduaWZpZXJTaXplICsgMSkgLyAyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWduaWZpZXJTaXplLCBtYWduaWZpZXJTaXplKTsKKyAgICBJbnRSZWN0IHBhaW50aW5n
UmVjdCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dFJlbmRlckJveCwgbWFnbmlmaWVyT2Jq
ZWN0LCBtYWduaWZpZXJSZWN0LCByKTsKIAogICAgIHN0YXRpYyBJbWFnZSogbWFnbmlmaWVySW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaE1hZ25pZmllciIpLmxlYWtS
ZWYoKTsKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBt
YWduaWZpZXJPYmplY3QtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcGFpbnRpbmdSZWN0KTsKQEAg
LTM1OCwxNSArMzU4LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2Vh
cmMKICAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgUmVuZGVyQm94KiBpbnB1dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KGlucHV0
LT5yZW5kZXJlcigpKTsKLSAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVu
ZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOworICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0g
aW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhl
IHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCi0gICAgTGF5
b3V0VW5pdCBtYWduaWZpZXJIZWlnaHQgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PihpbnB1dENvbnRl
bnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpOwotICAgIExheW91dFVuaXQgbWFnbmlmaWVyV2lk
dGggPSBzdGQ6Om1pbjxMYXlvdXRVbml0PihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgbWFnbmlm
aWVySGVpZ2h0ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVs
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKLSAgICBMYXlvdXRSZWN0IG1hZ25p
ZmllclJlY3QobWFnbmlmaWVyT2JqZWN0LT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5w
dXRSZW5kZXJCb3gpLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0
Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gbWFnbmlmaWVySGVp
Z2h0ICsgMSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWduaWZpZXJXaWR0
aCwgbWFnbmlmaWVySGVpZ2h0KTsKLSAgICBMYXlvdXRSZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZl
cnRUb1BhaW50aW5nUmVjdChpbnB1dFJlbmRlckJveCwgbWFnbmlmaWVyT2JqZWN0LCBtYWduaWZp
ZXJSZWN0LCByKTsKKyAgICBpbnQgbWFnbmlmaWVySGVpZ2h0ID0gc3RkOjptaW48aW50PihpbnB1
dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpOworICAgIGludCBtYWduaWZpZXJXaWR0
aCA9IHN0ZDo6bWluPGludD4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIG1hZ25pZmllckhlaWdo
dCAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSk7CisgICAgSW50UmVjdCBtYWduaWZpZXJSZWN0KG1h
Z25pZmllck9iamVjdC0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyQm94
KS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbnRlbnRCb3gueSgp
ICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIG1hZ25pZmllckhlaWdodCArIDEpIC8gMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmlmaWVyV2lkdGgsIG1hZ25pZmllckhlaWdo
dCk7CisgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5w
dXRSZW5kZXJCb3gsIG1hZ25pZmllck9iamVjdCwgbWFnbmlmaWVyUmVjdCwgcik7CiAKICAgICBz
dGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJzZWFyY2hNYWduaWZpZXJSZXN1bHRzIikubGVha1JlZigpOwogICAgIHBhaW50SW5mby5jb250
ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIG1hZ25pZmllck9iamVjdC0+c3R5bGUoKS0+
Y29sb3JTcGFjZSgpLCBwYWludGluZ1JlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgJKHJldmlzaW9uIDExMjg0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKIAogICAgIGludCBtZW51
TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29uc3Q7
CiAgICAgYm9vbCBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYsIEltYWdlKik7Ci0gICAgTGF5b3V0UmVjdCBjb252ZXJ0VG9QYWludGluZ1Jl
Y3QoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRS
ZW5kZXJlciwgTGF5b3V0UmVjdCBwYXJ0UmVjdCwgY29uc3QgSW50UmVjdCYgbG9jYWxPZmZzZXQp
IGNvbnN0OworICAgIEludFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCog
aW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJlY3Qg
cGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oCShyZXZpc2lvbiAxMTI4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6
CiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBp
cyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50
cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBh
aW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBMYXlvdXRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKSBPVkVS
UklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5
bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwpA
QCAtNzQsMTIgKzc0LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgCi0gICAgdmlydHVh
bCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2Nr
SW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5QXJyb3dLZXlzKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX1RBRykKLSAg
ICB2aXJ0dWFsIExheW91dFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVy
KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNp
emVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01l
dGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNlbmRpZgpAQCAtMTcxLDcgKzE3MSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKTsK
ICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFZvbHVtZVNsaWRlcigpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11
dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1
YWwgSW50UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94Kiwg
Y29uc3QgSW50U2l6ZSYpIGNvbnN0IE9WRVJSSURFOwogI2VuZGlmCiAgICAgCiAgICAgdmlydHVh
bCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3Q7CkBAIC0xNzks
MTQgKzE3OSwxNCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0
aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICBMYXlv
dXRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29u
c3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsKKyAgICBJbnRS
ZWN0IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50
KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsKIAogICAgIEZsb2F0UmVj
dCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVy
LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1
dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0aGUgY29u
dHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udC4gIFVzZWQgYnkgc29tZSBvZiB0aGUgY29udHJv
bHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQo
UmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yU3lz
dGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udHJvbFNpemUoTlND
ZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMsIGNvbnN0IExheW91dFNpemUmIG1pblNpemUsIGZs
b2F0IHpvb21MZXZlbCA9IDEuMGYpOworICAgIHZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiwg
Y29uc3QgSW50U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21M
ZXZlbCA9IDEuMGYpOwogICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiwgY29u
c3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVy
U3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CiAgICAgSW50U2l6ZSBzaXplRm9y
U3lzdGVtRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKQEAg
LTIwMSw3ICsyMDEsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gSGVscGVycyBmb3IgYWRqdXN0aW5n
IGFwcGVhcmFuY2UgYW5kIGZvciBwYWludGluZwogCi0gICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNl
bGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9p
ZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRS
ZWN0Jik7CiAgICAgY29uc3QgSW50U2l6ZSogcG9wdXBCdXR0b25TaXplcygpIGNvbnN0OwogICAg
IGNvbnN0IGludCogcG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBw
b3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxMTI4NDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTUwMiw3ICs1MDIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQo
Y29uCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRl
ciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBMYXlvdXRSZWN0JiBy
KQordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvLCBJbnRSZWN0JiByKQogewogICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgp
LT5hcHBlYXJhbmNlKCk7CiAgICAgCkBAIC01MzMsMTMgKzUzMywxMyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjCiAgICAgfQogfQogCi1MYXlvdXRSZWN0IFJlbmRl
clRoZW1lTWFjOjppbmZsYXRlUmVjdChjb25zdCBMYXlvdXRSZWN0JiByLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZlbCkgY29uc3QKK0ludFJl
Y3QgUmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IElu
dFNpemUmIHNpemUsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsKSBjb25zdAog
ewogICAgIC8vIE9ubHkgZG8gdGhlIGluZmxhdGlvbiBpZiB0aGUgYXZhaWxhYmxlIHdpZHRoL2hl
aWdodCBhcmUgdG9vIHNtYWxsLiAgT3RoZXJ3aXNlIHRyeSB0bwogICAgIC8vIGZpdCB0aGUgZ2xv
dy9jaGVjayBzcGFjZSBpbnRvIHRoZSBhdmFpbGFibGUgYm94J3Mgd2lkdGgvaGVpZ2h0LgotICAg
IExheW91dFVuaXQgd2lkdGhEZWx0YSA9IHIud2lkdGgoKSAtIChzaXplLndpZHRoKCkgKyBtYXJn
aW5zW2xlZnRNYXJnaW5dICogem9vbUxldmVsICsgbWFyZ2luc1tyaWdodE1hcmdpbl0gKiB6b29t
TGV2ZWwpOwotICAgIExheW91dFVuaXQgaGVpZ2h0RGVsdGEgPSByLmhlaWdodCgpIC0gKHNpemUu
aGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW2JvdHRv
bU1hcmdpbl0gKiB6b29tTGV2ZWwpOwotICAgIExheW91dFJlY3QgcmVzdWx0KHIpOworICAgIGlu
dCB3aWR0aERlbHRhID0gci53aWR0aCgpIC0gKHNpemUud2lkdGgoKSArIG1hcmdpbnNbbGVmdE1h
cmdpbl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW3JpZ2h0TWFyZ2luXSAqIHpvb21MZXZlbCk7Cisg
ICAgaW50IGhlaWdodERlbHRhID0gci5oZWlnaHQoKSAtIChzaXplLmhlaWdodCgpICsgbWFyZ2lu
c1t0b3BNYXJnaW5dICogem9vbUxldmVsICsgbWFyZ2luc1tib3R0b21NYXJnaW5dICogem9vbUxl
dmVsKTsKKyAgICBJbnRSZWN0IHJlc3VsdChyKTsKICAgICBpZiAod2lkdGhEZWx0YSA8IDApIHsK
ICAgICAgICAgcmVzdWx0LnNldFgocmVzdWx0LngoKSAtIG1hcmdpbnNbbGVmdE1hcmdpbl0gKiB6
b29tTGV2ZWwpOwogICAgICAgICByZXN1bHQuc2V0V2lkdGgocmVzdWx0LndpZHRoKCkgLSB3aWR0
aERlbHRhKTsKQEAgLTU2MCw3ICs1NjAsNyBAQCBGbG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNv
bnZlcnRUb1BhaW50CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHBhcnRSZW5k
ZXJlcjsKICAgICB3aGlsZSAocmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gaW5wdXRSZW5kZXJlcikg
ewogICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdSZW5kZXJlciA9IHJlbmRlcmVyLT5j
b250YWluZXIoKTsKLSAgICAgICAgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgLT0gcmVuZGVyZXIt
Pm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmluZ1JlbmRlcmVyLCBMYXlvdXRQb2ludCgpKTsK
KyAgICAgICAgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgLT0gcm91bmRlZEludFNpemUocmVuZGVy
ZXItPm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmluZ1JlbmRlcmVyLCBMYXlvdXRQb2ludCgp
KSk7CiAgICAgICAgIHJlbmRlcmVyID0gY29udGFpbmluZ1JlbmRlcmVyOwogICAgIH0KICAgICAv
LyBJZiB0aGUgaW5wdXQgcmVuZGVyZXIgd2FzIG5vdCBhIGNvbnRhaW5lciwgc29tZXRoaW5nIHdl
bnQgd3JvbmcKQEAgLTY0MSwxNCArNjQxLDE0IEBAIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVN
YWM6OmNvbnRyb2xTaXoKICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2VsbCogY2VsbCwgY29uc3QgSW50U2l6
ZSogc2l6ZXMsIGNvbnN0IExheW91dFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCkKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2VsbCogY2VsbCwgY29uc3QgSW50
U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCkKIHsK
ICAgICBOU0NvbnRyb2xTaXplIHNpemU7Ci0gICAgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0
aWNfY2FzdDxMYXlvdXRVbml0PihzaXplc1tOU1JlZ3VsYXJDb250cm9sU2l6ZV0ud2lkdGgoKSAq
IHpvb21MZXZlbCkgJiYKLSAgICAgICAgbWluU2l6ZS5oZWlnaHQoKSA+PSBzdGF0aWNfY2FzdDxM
YXlvdXRVbml0PihzaXplc1tOU1JlZ3VsYXJDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6b29tTGV2
ZWwpKQorICAgIGlmIChtaW5TaXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tO
U1JlZ3VsYXJDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21MZXZlbCkgJiYKKyAgICAgICAgbWlu
U2l6ZS5oZWlnaHQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRyb2xT
aXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkpCiAgICAgICAgIHNpemUgPSBOU1JlZ3VsYXJDb250
cm9sU2l6ZTsKLSAgICBlbHNlIGlmIChtaW5TaXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8TGF5
b3V0VW5pdD4oc2l6ZXNbTlNTbWFsbENvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUxldmVsKSAm
JgotICAgICAgICAgICAgIG1pblNpemUuaGVpZ2h0KCkgPj0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5p
dD4oc2l6ZXNbTlNTbWFsbENvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkpCisgICAg
ZWxzZSBpZiAobWluU2l6ZS53aWR0aCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6ZXNbTlNTbWFs
bENvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUxldmVsKSAmJgorICAgICAgICAgICAgIG1pblNp
emUuaGVpZ2h0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1NtYWxsQ29udHJvbFNpemVd
LmhlaWdodCgpICogem9vbUxldmVsKSkKICAgICAgICAgc2l6ZSA9IE5TU21hbGxDb250cm9sU2l6
ZTsKICAgICBlbHNlCiAgICAgICAgIHNpemUgPSBOU01pbmlDb250cm9sU2l6ZTsKQEAgLTczMSw3
ICs3MzEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsCiB7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFJlY3QmIHIpCiti
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGlm
IChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTc5NCw3ICs3OTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVM
aXN0KFJlbmRlCiAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGlu
ZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KLSAgICBMYXlvdXRSZWN0IGluZmxh
dGVkUmVjdCA9IHI7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSByOwogICAgIGlmIChyLndp
ZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZShvLT5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0
ZWRSZWN0ID0gaW5mbGF0ZVJlY3QoaW5mbGF0ZWRSZWN0LCBzaXplLCBwb3B1cEJ1dHRvbk1hcmdp
bnMoKSwgem9vbUxldmVsKTsKIApAQCAtODE5LDE2ICs4MTksMTYgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZQogCiAjaWYgRU5BQkxFKE1FVEVSX1RBRykKIAotTGF5
b3V0U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1l
dGVyKiByZW5kZXJNZXRlciwgY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6
ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiBy
ZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIGlmIChOb0Nv
bnRyb2xQYXJ0ID09IHJlbmRlck1ldGVyLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpCiAgICAgICAg
IHJldHVybiBib3VuZHMuc2l6ZSgpOwogCiAgICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwg
PSBsZXZlbEluZGljYXRvckZvcihyZW5kZXJNZXRlcik7CiAgICAgLy8gTWFrZXMgZW5vdWdoIHJv
b20gZm9yIGNlbGwncyBpbnRyaW5zaWMgc2l6ZS4KLSAgICBOU1NpemUgY2VsbFNpemUgPSBbY2Vs
bCBjZWxsU2l6ZUZvckJvdW5kczpMYXlvdXRSZWN0KExheW91dFBvaW50KCksIGJvdW5kcy5zaXpl
KCkpXTsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZShib3VuZHMud2lkdGgoKSA8IGNlbGxTaXplLndp
ZHRoID8gY2VsbFNpemUud2lkdGggOiBib3VuZHMud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICBib3VuZHMuaGVpZ2h0KCkgPCBjZWxsU2l6ZS5oZWlnaHQgPyBjZWxsU2l6ZS5oZWlnaHQg
OiBib3VuZHMuaGVpZ2h0KCkpOworICAgIE5TU2l6ZSBjZWxsU2l6ZSA9IFtjZWxsIGNlbGxTaXpl
Rm9yQm91bmRzOkludFJlY3QoSW50UG9pbnQoKSwgYm91bmRzLnNpemUoKSldOworICAgIHJldHVy
biBJbnRTaXplKGJvdW5kcy53aWR0aCgpIDwgY2VsbFNpemUud2lkdGggPyBjZWxsU2l6ZS53aWR0
aCA6IGJvdW5kcy53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgIGJvdW5kcy5oZWlnaHQoKSA8
IGNlbGxTaXplLmhlaWdodCA/IGNlbGxTaXplLmhlaWdodCA6IGJvdW5kcy5oZWlnaHQoKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpA
QCAtMTI3OCw3ICsxMjc4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RC
dXR0bwogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3Rh
dGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBMYXlvdXRSZWN0JiByKQordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRv
biA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7CiAKQEAgLTE1NDAsOSArMTU0MCw5IEBAIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW4KICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNI
KQogICAgIC8vIFRha2UgY2FyZSBvZiBjYXNlcyB3aGVyZSB0aGUgY2FuY2VsIGJ1dHRvbiB3YXMg
bm90IGFsaWduZWQgd2l0aCB0aGUgcmlnaHQgYm9yZGVyIG9mIHRoZSBpbnB1dCBlbGVtZW50IChm
b3IgZS5nLgogICAgIC8vIHdoZW4gc3BlZWNoIGlucHV0IGlzIGVuYWJsZWQgZm9yIHRoZSBpbnB1
dCBlbGVtZW50LgotICAgIExheW91dFJlY3QgYWJzQm91bmRpbmdCb3ggPSBpbnB1dC0+cmVuZGVy
ZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKLSAgICBMYXlvdXRVbml0IGFic1JpZ2h0
ID0gYWJzQm91bmRpbmdCb3gueCgpICsgYWJzQm91bmRpbmdCb3gud2lkdGgoKSAtIGlucHV0LT5y
ZW5kZXJCb3goKS0+cGFkZGluZ1JpZ2h0KCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlclJp
Z2h0KCk7Ci0gICAgTGF5b3V0VW5pdCBzcGFjZVRvUmlnaHRPZkNhbmNlbEJ1dHRvbiA9IGFic1Jp
Z2h0IC0gKHIueCgpICsgci53aWR0aCgpKTsKKyAgICBJbnRSZWN0IGFic0JvdW5kaW5nQm94ID0g
aW5wdXQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7CisgICAgaW50IGFi
c1JpZ2h0ID0gYWJzQm91bmRpbmdCb3gueCgpICsgYWJzQm91bmRpbmdCb3gud2lkdGgoKSAtIGlu
cHV0LT5yZW5kZXJCb3goKS0+cGFkZGluZ1JpZ2h0KCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPmJv
cmRlclJpZ2h0KCk7CisgICAgaW50IHNwYWNlVG9SaWdodE9mQ2FuY2VsQnV0dG9uID0gYWJzUmln
aHQgLSAoci54KCkgKyByLndpZHRoKCkpOwogICAgIGxvY2FsQm91bmRzLnNldFgobG9jYWxCb3Vu
ZHMueCgpIC0gc3BhY2VUb1JpZ2h0T2ZDYW5jZWxCdXR0b24pOwogI2VuZGlmCiAKQEAgLTIwNjAs
NyArMjA2MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnVzZXNNZWRpYUNvbnRyb2xWb2wKICAg
ICByZXR1cm4gbWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVtZVF1
aWNrVGltZTsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyVGhlbWVNYWM6OnZvbHVtZVNsaWRlck9m
ZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkgY29uc3QKK0ludFBvaW50IFJlbmRlclRoZW1lTWFjOjp2b2x1bWVTbGlkZXJP
ZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqIG11dGVCdXR0b25Cb3gsIGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHM6OnZvbHVt
ZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKG11dGVCdXR0b25Cb3gsIHNpemUpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lv
biAxMTI4NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzYsMTQgKzg3NiwxNCBAQCB2b2lkIFJlbmRlclRoZW1lV2lu
OjphZGp1c3RTZWFyY2hGaWVsZFN0CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHI7Cisg
ICAgSW50UmVjdCBib3VuZHMgPSByOwogICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CiAgICAgaWYg
KCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94
KG8tPnBhcmVudCgpKTsKIAotICAgIExheW91dFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVy
Qm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKKyAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVu
dFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJl
IHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVu
dCdzIGJveAogICAgIGJvdW5kcy5zZXRIZWlnaHQobWluKHBhcmVudEJveC53aWR0aCgpLCBtaW4o
cGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CkBAIC05MjcsMTMgKzkyNywx
MyBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlCiAKIGJvb2wgUmVu
ZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewot
ICAgIExheW91dFJlY3QgYm91bmRzID0gcjsKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAg
QVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQo
KS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIFJlbmRlckJveCog
cGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwotICAgIExheW91dFJl
Y3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKKyAg
ICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94
KCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBz
cXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMuc2V0SGVp
Z2h0KG1pbihwYXJlbnRCb3gud2lkdGgoKSwgbWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRz
LmhlaWdodCgpKSkpOwpAQCAtOTYxLDcgKzk2MSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46OmFk
anVzdFNlYXJjaEZpZWxkUmUKIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHI7CisgICAg
SW50UmVjdCBib3VuZHMgPSByOwogICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CiAgICAgaWYgKCFv
LT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTY5LDExICs5NjksMTEgQEAg
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJv
eChvLT5wYXJlbnQoKSk7Ci0gICAgTGF5b3V0UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJC
b3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50
UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUg
dGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAgICBi
b3VuZHMuc2V0SGVpZ2h0KG1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkp
OwotICAgIGJvdW5kcy5zZXRXaWR0aChtaW48TGF5b3V0VW5pdD4ocGFyZW50Qm94LndpZHRoKCks
IGJvdW5kcy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAv
IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOworICAgIGJvdW5kcy5z
ZXRXaWR0aChtaW48aW50PihwYXJlbnRCb3gud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpICogZGVm
YXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25TaXplKSk7CiAKICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNh
bGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1j
ZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20g
b2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgpA
QCAtMTExOSw3ICsxMTE5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZWRpYVZvbHVt
ZVNsaQogICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzOjpwYWludE1lZGlhQ29udHJvbHNQ
YXJ0KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIsIG8sIHBhaW50SW5mbywgcik7CiB9CiAKLUxheW91
dFBvaW50IFJlbmRlclRoZW1lV2luOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihS
ZW5kZXJCb3gqIG11dGVCdXR0b25Cb3gsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CitJ
bnRQb2ludCBSZW5kZXJUaGVtZVdpbjo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24o
UmVuZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewog
ICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0
ZUJ1dHRvbihtdXRlQnV0dG9uQm94LCBzaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCShyZXZpc2lvbiAxMTI4NDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcg
KzE0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRl
ckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBMYXlvdXRQb2ludCB2b2x1bWVT
bGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRTaXplJikg
Y29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1
dHRvbihSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYK
IAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>