<?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>29161</bug_id>
          
          <creation_ts>2009-09-10 16:51:40 -0700</creation_ts>
          <short_desc>Implement default media UI for mac chromium.</short_desc>
          <delta_ts>2009-09-18 13:24:38 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Albert J. Wong">ajwong</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>brettw</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>146397</commentid>
    <comment_count>0</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 16:51:40 -0700</bug_when>
    <thetext>The render theme code for mac chromium uses native mac widgets for media controls.  This is inconsistent with the chromium UI for other platforms.  Redo the render theme code in the style of the Windows and Linux ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146403</commentid>
    <comment_count>1</comment_count>
      <attachid>39393</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 17:02:54 -0700</bug_when>
    <thetext>Created attachment 39393
Reimplement default media UI for Mac Chromium to match the style

of the Windows and Linux versions.  Also breaks the dependency
on the internal wk* functions that were previously used to
render the media controller widgets.
https://bugs.webkit.org/show_bug.cgi?id=29161

Patch by Albert J. Wong &lt;ajwong@chromium.org&gt; on 2009-09-10
Reviewed by NOBODY (OOPS!).

No media layout tests are currently enabled in Mac Chromium, so
nothing needs rebaselineing, etc.

* css/mediaControlsChromium.css:
* rendering/RenderThemeChromiumMac.h:
* rendering/RenderThemeChromiumMac.mm:
(WebCore::mediaElementParent):
(WebCore::RenderThemeChromiumMac::extraMediaControlsStyleSheet):
(WebCore::mediaSliderThumbImage):
(WebCore::mediaVolumeSliderThumbImage):
(WebCore::RenderThemeChromiumMac::paintSliderTrack):
(WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
(WebCore::RenderThemeChromiumMac::paintMediaButtonInternal):
(WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
(WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
(WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
(WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack):
(WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
(WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb):
(WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
* rendering/RenderThemeChromiumSkia.cpp:
(WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize):
---
 5 files changed, 256 insertions(+), 99 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146404</commentid>
    <comment_count>2</comment_count>
      <attachid>39394</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 17:06:57 -0700</bug_when>
    <thetext>Created attachment 39394
Reimplement default media UI for Mac Chromium to match the style

of the Windows and Linux versions.  Also breaks the dependency
on the internal wk* functions that were previously used to
render the media controller widgets.
https://bugs.webkit.org/show_bug.cgi?id=29161

Patch by Albert J. Wong &lt;ajwong@chromium.org&gt; on 2009-09-10
Reviewed by NOBODY (OOPS!).

No media layout tests are currently enabled in Mac Chromium, so
nothing needs rebaselineing, etc.

* css/mediaControlsChromium.css:
* rendering/RenderThemeChromiumMac.h:
* rendering/RenderThemeChromiumMac.mm:
(WebCore::mediaElementParent):
(WebCore::RenderThemeChromiumMac::extraMediaControlsStyleSheet):
(WebCore::mediaSliderThumbImage):
(WebCore::mediaVolumeSliderThumbImage):
(WebCore::RenderThemeChromiumMac::paintSliderTrack):
(WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
(WebCore::RenderThemeChromiumMac::paintMediaButtonInternal):
(WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
(WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
(WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
(WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack):
(WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
(WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb):
(WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
* rendering/RenderThemeChromiumSkia.cpp:
(WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize):
---
 5 files changed, 255 insertions(+), 98 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146406</commentid>
    <comment_count>3</comment_count>
      <attachid>39395</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 17:09:49 -0700</bug_when>
    <thetext>Created attachment 39395
Screenshot o new UI on white background.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146407</commentid>
    <comment_count>4</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 17:10:38 -0700</bug_when>
    <thetext>If this looks good, please also commit-queue+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146421</commentid>
    <comment_count>5</comment_count>
      <attachid>39401</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 17:49:27 -0700</bug_when>
    <thetext>Created attachment 39401
Reimplement default media UI for Mac Chromium to match the style

of the Windows and Linux versions.  Also breaks the dependency
on the internal wk* functions that were previously used to
render the media controller widgets.
https://bugs.webkit.org/show_bug.cgi?id=29161

Patch by Albert J. Wong &lt;ajwong@chromium.org&gt; on 2009-09-10
Reviewed by NOBODY (OOPS!).

No media layout tests are currently enabled in Mac Chromium, so
nothing needs rebaselineing, etc.

* css/mediaControlsChromium.css:
* rendering/RenderThemeChromiumMac.h:
* rendering/RenderThemeChromiumMac.mm:
(WebCore::mediaElementParent):
(WebCore::RenderThemeChromiumMac::extraMediaControlsStyleSheet):
(WebCore::mediaSliderThumbImage):
(WebCore::mediaVolumeSliderThumbImage):
(WebCore::RenderThemeChromiumMac::paintSliderTrack):
(WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
(WebCore::RenderThemeChromiumMac::paintMediaButtonInternal):
(WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
(WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
(WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
(WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack):
(WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
(WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb):
(WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
* rendering/RenderThemeChromiumSkia.cpp:
(WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize):
---
 5 files changed, 252 insertions(+), 98 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146422</commentid>
    <comment_count>6</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 17:52:07 -0700</bug_when>
    <thetext>FYI, hclam@chromium.org also looked this over and thinks it is sane. He did default UI implementation for Windows/Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146423</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-10 17:52:42 -0700</bug_when>
    <thetext>You can always set cq=? if you want folks to know to cq+ when reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146428</commentid>
    <comment_count>8</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-10 18:10:04 -0700</bug_when>
    <thetext>Ah, didn&apos;t realize that.  cq=? set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146552</commentid>
    <comment_count>9</comment_count>
      <attachid>39401</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-09-11 07:30:28 -0700</bug_when>
    <thetext>Comment on attachment 39401
Reimplement default media UI for Mac Chromium to match the style


Just a few nits to fix up and then commit.

&gt; diff --git a/WebCore/rendering/RenderThemeChromiumMac.mm b/WebCore/rendering/RenderThemeChromiumMac.mm

&gt; +#if ENABLE(VIDEO)
&gt; +// Attempt to retrieve a HTMLMediaElement from a Node. Returns NULL if one cannot be found.

Use 0 instead of NULL. check-webkit-style would have flagged this :)


&gt; +    static Image* soundFull = Image::loadPlatformResource(&quot;mediaSoundFull&quot;).releaseRef();
&gt; +    static Image* soundNone = Image::loadPlatformResource(&quot;mediaSoundNone&quot;).releaseRef();
&gt; +    static Image* soundDisabled = Image::loadPlatformResource(&quot;mediaSoundDisabled&quot;).releaseRef();
&gt; +
&gt; +    if (mediaElement-&gt;networkState() == HTMLMediaElement::NETWORK_NO_SOURCE || !mediaElement-&gt;hasAudio())
&gt; +        return paintMediaButtonInternal(paintInfo.context, rect, soundDisabled);
&gt; +
&gt; +    return paintMediaButtonInternal(paintInfo.context, rect, mediaElement-&gt;muted() ? soundNone: soundFull);

Add a space before the :


&gt; +    if (bufferedRect.width() &gt; 0 &amp;&amp; bufferedRect.height() &gt; 0) {
&gt; +        FloatPoint p0 = bufferedRect.location();
&gt; +        FloatPoint p1 = p0;

Can you think of more meaningful names than p0 and p1? (sliderTop, sliderBottom?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147635</commentid>
    <comment_count>10</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-16 14:46:40 -0700</bug_when>
    <thetext>Committed r48438: &lt;http://trac.webkit.org/changeset/48438&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147718</commentid>
    <comment_count>11</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-09-16 19:35:59 -0700</bug_when>
    <thetext>I rolled back this change because it did not compile.

WebCore/rendering/RenderThemeChromiumMac.mm: In member function &apos;virtual bool WebCore::RenderThemeChromiumMac::paintMediaSliderTrack(WebCore::RenderObject*, const WebCore::RenderObject::PaintInfo&amp;, const WebCore::IntRect&amp;)&apos;:
/b/slave/webkit-rel-mac-webkit-org/build/src/webkit/../third_party/WebKit/WebCore/rendering/RenderThemeChromiumMac.mm:1966: error: &apos;p1&apos; was not declared in this scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148347</commentid>
    <comment_count>12</comment_count>
      <attachid>39401</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-18 13:22:41 -0700</bug_when>
    <thetext>Comment on attachment 39401
Reimplement default media UI for Mac Chromium to match the style

Marking this change as r- since it was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148350</commentid>
    <comment_count>13</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-09-18 13:24:38 -0700</bug_when>
    <thetext>Resolving bug since it has been committed again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39393</attachid>
            <date>2009-09-10 17:02:54 -0700</date>
            <delta_ts>2009-09-10 17:06:52 -0700</delta_ts>
            <desc>Reimplement default media UI for Mac Chromium to match the style</desc>
            <filename>bug-29161-20090910170252.patch</filename>
            <type>text/plain</type>
            <size>23250</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWEyZDE2Zi4uYTE4YmRhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0wOS0xMCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlaW1wbGVtZW50IGRlZmF1bHQgbWVkaWEgVUkgZm9yIE1hYyBD
aHJvbWl1bSB0byBtYXRjaCB0aGUgc3R5bGUKKyAgICAgICAgb2YgdGhlIFdpbmRvd3MgYW5kIExp
bnV4IHZlcnNpb25zLiAgQWxzbyBicmVha3MgdGhlIGRlcGVuZGVuY3kKKyAgICAgICAgb24gdGhl
IGludGVybmFsIHdrKiBmdW5jdGlvbnMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdXNlZCB0bworICAg
ICAgICByZW5kZXIgdGhlIG1lZGlhIGNvbnRyb2xsZXIgd2lkZ2V0cy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MTYxCisKKyAgICAgICAgTm8gbWVk
aWEgbGF5b3V0IHRlc3RzIGFyZSBjdXJyZW50bHkgZW5hYmxlZCBpbiBNYWMgQ2hyb21pdW0sIHNv
CisgICAgICAgIG5vdGhpbmcgbmVlZHMgcmViYXNlbGluZWluZywgZXRjLgorCisgICAgICAgICog
Y3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3M6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhRWxlbWVudFBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhU2xpZGVyVGh1bWJJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjptZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YUJ1dHRvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisKIDIw
MDktMDktMDkgIENhbWVyb24gTWNDb3JtYWNrICA8Y2FtQG1jYy5pZC5hdT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHNDaHJvbWl1bS5jc3MgYi9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Nz
CmluZGV4IDBjMDFkYTIuLjE2ZmYwZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHNDaHJvbWl1bS5jc3MKKysrIGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVt
LmNzcwpAQCAtMTQ3LDYgKzE0Nyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRp
bWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgaGVp
Z2h0OiAxNnB4OwogCiAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7
CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICBib3JkZXItd2lkdGg6IDFweDsKICAgICBi
b3JkZXItcmFkaXVzOiAycHg7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjA4KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1NYWMuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaApp
bmRleCAwYzQxN2EyLi5iNzNjZTA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYy5oCkBAIC00NCw2ICs0NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7
CiAKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFD
b250cm9sc1N0eWxlU2hlZXQoKTsKKyNlbmRpZgorCiAgICAgICAgIC8vIEEgbWV0aG9kIHRvIG9i
dGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdp
bGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAgICAgLy8gcG9zaXRpb24gY2Fubm90
IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94ZXMgYW5k
IHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgICAgIC8vIGNvbnRyb2xzIHRoYXQg
bmVlZCB0byBkbyB0aGlzLgpAQCAtNzIsNyArNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBjc3NWYWx1ZUlkLCBGb250RGVzY3Jp
cHRpb24mKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXpl
KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KKyAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgICAgICAKICAgICAg
ICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29u
c3Q7CkBAIC0xMzMsMTMgKzEzNywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRl
clRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzQmFj
a2dyb3VuZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWMoKTsKQEAgLTIxNCw2ICsyMTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IG11dGFibGUgSGFzaE1hcDxpbnQsIFJHQkEzMj4gbV9zeXN0ZW1Db2xvckNhY2hlOwogCiAgICAg
ICAgIFJldGFpblB0cjxXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcj4gbV9u
b3RpZmljYXRpb25PYnNlcnZlcjsKKyAgICAgICAgYm9vbCBwYWludE1lZGlhQnV0dG9uSW50ZXJu
YWwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIEltYWdlKik7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1NYWMubW0KaW5kZXggNDJlMmFjYS4uNWFiZWJkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCkBAIC0zOSw2ICszOSw3IEBACiAjaW1wb3J0ICJF
bGVtZW50LmgiCiAjaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKKyNpbXBvcnQgIkdyYWRpZW50LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbXBvcnQgIlJlbmRlclNsaWRlci5oIgogI2ltcG9ydCAi
UmVuZGVyVmlldy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJVc2VyQWdl
bnRTdHlsZVNoZWV0cy5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0xMTAsNiArMTEyLDIwIEBAIGVudW0gewogICAg
IExlZnRQYWRkaW5nCiB9OwogCisjaWYgRU5BQkxFKFZJREVPKQorLy8gQXR0ZW1wdCB0byByZXRy
aWV2ZSBhIEhUTUxNZWRpYUVsZW1lbnQgZnJvbSBhIE5vZGUuIFJldHVybnMgTlVMTCBpZiBvbmUg
Y2Fubm90IGJlIGZvdW5kLgorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudFBh
cmVudChOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYg
KCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1Rh
ZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmF1ZGlvVGFnKSkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQq
PihtZWRpYU5vZGUpOworfQorI2VuZGlmCisKIC8vIEluIG91ciBNYWMgcG9ydCwgd2UgZG9uJ3Qg
ZGVmaW5lIFBMQVRGT1JNKE1BQykgYW5kIHRodXMgZG9uJ3QgcGljayB1cCB0aGUKIC8vIHxvcGVy
YXRvciBOU1JlY3QoKXwgb24gV2ViQ29yZTo6SW50UmVjdCBhbmQgRmxvYXRSZWN0LiBUaGlzIHN1
YnN0aXR1ZXMgZm9yCiAvLyB0aGF0IG1pc3NpbmcgY29udmVyc2lvbiBvcGVyYXRvci4KQEAgLTEz
Myw2ICsxNDksMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lQ2hyb21p
dW1NYWMpOwogfQogCisjaWYgRU5BQkxFKFZJREVPKQorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQoreworICAgIHJldHVybiBTdHJp
bmcobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlh
Q29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKK30KKyNlbmRpZgorCiBQYXNz
UmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2Up
CiB7CiAgICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsKQEAgLTE0NTQsOSArMTQ3NywxOCBAQCBpbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBtZW51TGlzdFNpemVz
KCkpLndpZHRoKCk7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDU7Ci1zdGF0
aWMgY29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKLQorc3RhdGljIEltYWdlKiBtZWRpYVNsaWRl
clRodW1iSW1hZ2UoKQoreworICAgIHN0YXRpYyBJbWFnZSogbWVkaWFTbGlkZXJUaHVtYiA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTbGlkZXJUaHVtYiIpLnJlbGVhc2VSZWYo
KTsKKyAgICByZXR1cm4gbWVkaWFTbGlkZXJUaHVtYjsKK30KKyAgCitzdGF0aWMgSW1hZ2UqIG1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpCit7CisgICAgc3RhdGljIEltYWdlKiBtZWRpYVZv
bHVtZVNsaWRlclRodW1iID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVZvbHVt
ZVNsaWRlclRodW1iIikucmVsZWFzZVJlZigpOworICAgIHJldHVybiBtZWRpYVZvbHVtZVNsaWRl
clRodW1iOworfQorICAKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVy
VHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CkBAIC0x
NDY0LDYgKzE0OTYsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLAogCiBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewor
ICAgIHN0YXRpYyBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDU7CisgICAgc3RhdGljIGNvbnN0IGlu
dCB0cmFja1JhZGl1cyA9IDI7CisgIAorICAKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGZsb2F0
IHpvb21lZFRyYWNrV2lkdGggPSB0cmFja1dpZHRoICogem9vbUxldmVsOwpAQCAtMTU3MSw4ICsx
NjA3LDYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlclRodW1iKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWMKIAogY29uc3QgaW50IHNsaWRlclRodW1i
V2lkdGggPSAxNTsKIGNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1OwotY29uc3QgaW50
IG1lZGlhU2xpZGVyVGh1bWJXaWR0aCA9IDEzOwotY29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJI
ZWlnaHQgPSAxNDsKIAogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewpAQCAtMTU4MCwxMCArMTYxNCwyMCBA
QCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5k
ZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewogICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChM
ZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYldpZHRoICogem9vbUxldmVsKSwgRml4
ZWQpKTsKICAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxp
bnQ+KHNsaWRlclRodW1iSGVpZ2h0ICogem9vbUxldmVsKSwgRml4ZWQpKTsKLSAgICB9IGVsc2Ug
aWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclRodW1iUGFydCkgewot
ICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgobWVkaWFTbGlkZXJUaHVtYldpZHRo
LCBGaXhlZCkpOwotICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKG1lZGlhU2xp
ZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQorCisjaWYgRU5BQkxFKFZJREVPKQorICAg
IEltYWdlKiB0aHVtYkltYWdlID0gMDsKKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KQorICAgICAgICB0aHVtYkltYWdlID0gbWVkaWFTbGlk
ZXJUaHVtYkltYWdlKCk7CisgICAgZWxzZSBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KQorICAgICAgICB0aHVtYkltYWdlID0gbWVkaWFW
b2x1bWVTbGlkZXJUaHVtYkltYWdlKCk7CisgIAorICAgIGlmICh0aHVtYkltYWdlKSB7CisgICAg
ICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCh0aHVtYkltYWdlLT53aWR0aCgpLCBGaXhl
ZCkpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1hZ2UtPmhl
aWdodCgpLCBGaXhlZCkpOworICAgIH0KKyNlbmRpZgogfQogCiBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTgyNSwx
MzkgKzE4NjksMjEyIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotLy8gRklYTUU6IFRoaXMgZW51bSBpcyBsaWZ0ZWQg
ZnJvbSBSZW5kZXJUaGVtZU1hYy5tbSAgV2UgbmVlZCB0byBkZWNpZGUgd2hpY2ggdGhlbWUgdG8g
dXNlIGZvciB0aGUgZGVmYXVsdCBjb250cm9scywgb3IgZGVjaWRlIHRvIGF2b2lkIHdrRHJhd01l
ZGlhVUlQYXJ0IGFuZCByZW5kZXIgb3VyIG93bi4KLXR5cGVkZWYgZW51bSB7Ci0gICAgTWVkaWFD
b250cm9sbGVyVGhlbWVDbGFzc2ljICAgPSAxLAotICAgIE1lZGlhQ29udHJvbGxlclRoZW1lUVQg
ICAgICAgID0gMgotfSBNZWRpYUNvbnRyb2xsZXJUaGVtZVN0eWxlOwotCi1lbnVtIFdLTWVkaWFD
b250cm9sbGVyVGhlbWVTdGF0ZSB7Ci0gICAgTWVkaWFVSVBhcnREaXNhYmxlZEZsYWcgPSAxIDw8
IDAsCi0gICAgTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA9IDEgPDwgMSwKLSAgICBNZWRpYVVJUGFy
dERyYXdFbmRDYXBzRmxhZyA9IDEgPDwgMywKLX07Ci0jZW5kaWYKK2Jvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGltYWdlKQoreworICAgIC8vIENyZWF0
ZSBhIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBmb3IgdGhlIGltYWdlIHRoYXQgaXMgY2VudGVyZWQg
aW4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlLCByb3VuZGVkIGxlZnQsIGFuZCBkb3duLgorICAgIElu
dFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJlY3QoKTsKKyAgICBpbWFnZVJlY3Quc2V0WShyZWN0
LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaW1hZ2UtPmhlaWdodCgpICsgMSkgLyAyKTsKKyAgICBp
bWFnZVJlY3Quc2V0WChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBpbWFnZS0+d2lkdGgoKSAr
IDEpIC8gMik7CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUZ1bGxz
Y3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorICAgIGNvbnRleHQtPmRyYXdJbWFnZShp
bWFnZSwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsK
LSAgICBpZiAoIW5vZGUpCisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVk
aWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgpKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQo
TWVkaWFGdWxsc2NyZWVuQnV0dG9uLCBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsICBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIAotICAgICAgICBub2RlLT5hY3Rp
dmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIHN0YXRpYyBJ
bWFnZSogbWVkaWFQbGF5ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBsYXki
KS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBtZWRpYVBhdXNlID0gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBhdXNlIikucmVsZWFzZVJlZigpOworICAgIHN0YXRp
YyBJbWFnZSogbWVkaWFQbGF5RGlzYWJsZWQgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
Im1lZGlhUGxheURpc2FibGVkIikucmVsZWFzZVJlZigpOworCisgICAgaWYgKG1lZGlhRWxlbWVu
dC0+bmV0d29ya1N0YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0Up
CisgICAgICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRl
eHQsIHJlY3QsIG1lZGlhUGxheURpc2FibGVkKTsKKworICAgIHJldHVybiBwYWludE1lZGlhQnV0
dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+cGF1c2Vk
KCkgPyBtZWRpYVBsYXkgOiBtZWRpYVBhdXNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9i
amVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHJl
Y3QpOwogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIE5vZGUqIG5vZGUgPSBv
LT5ub2RlKCk7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpIDogMDsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFzVGFn
TmFtZSh2aWRlb1RhZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShhdWRpb1RhZykpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKKyAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2Rl
KCkpOwogICAgIGlmICghbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8u
Y29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQobWVkaWFFbGVtZW50LT5tdXRlZCgpID8g
TWVkaWFVbk11dGVCdXR0b24gOiBNZWRpYU11dGVCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1l
Q2xhc3NpYywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAg
ICBub2RlLT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgor
CisgICAgc3RhdGljIEltYWdlKiBzb3VuZEZ1bGwgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoIm1lZGlhU291bmRGdWxsIikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogc291
bmROb25lID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kTm9uZSIpLnJl
bGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRGlzYWJsZWQgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmREaXNhYmxlZCIpLnJlbGVhc2VSZWYoKTsKKwor
ICAgIGlmIChtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6
Ok5FVFdPUktfTk9fU09VUkNFIHx8ICFtZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkpCisgICAgICAg
IHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3Qs
IHNvdW5kRGlzYWJsZWQpOworCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChw
YWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gc291bmROb25l
OiBzb3VuZEZ1bGwpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0ocGFpbnRJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7CiAgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Ci0gICAg
Tm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsK
LSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykg
JiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShhdWRpb1RhZykpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwogICAgIGlmICgh
bWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0Ry
YXdNZWRpYVVJUGFydChtZWRpYUVsZW1lbnQtPmNhblBsYXkoKSA/IE1lZGlhUGxheUJ1dHRvbiA6
IE1lZGlhUGF1c2VCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2RlLT5hY3RpdmUoKSA/
IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG9iamVjdC0+c3R5bGUoKTsgICAgCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIAorICAgIGNv
bnRleHQtPnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKworICAgIEludFNpemUgdG9wTGVmdFJh
ZGl1cyA9IHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCk7CisgICAgSW50U2l6ZSB0b3BSaWdo
dFJhZGl1cyA9IHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpOworICAgIEludFNpemUgYm90
dG9tTGVmdFJhZGl1cyA9IHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCk7CisgICAgSW50
U2l6ZSBib3R0b21SaWdodFJhZGl1cyA9IHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygp
OworICAgIGZsb2F0IGJvcmRlcldpZHRoID0gc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpOworCisg
ICAgLy8gRHJhdyB0aGUgYm9yZGVyIG9mIHRoZSB0aW1lIGJhci4KKyAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihzdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCkpOworICAgIGNvbnRleHQtPnNldFN0
cm9rZVRoaWNrbmVzcyhib3JkZXJXaWR0aCk7CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHN0
eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVh
dGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cykpOworICAgIGNvbnRleHQtPmRyYXdQ
YXRoKCk7CisgICAgCisgICAgLy8gRHJhdyB0aGUgYnVmZmVyZWQgcmFuZ2VzLgorICAgIC8vIEZJ
WE1FOiBEcmF3IG11bHRpcGxlIHJhbmdlcyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYnVmZmVyZWQg
cmFuZ2VzLgorICAgIEZsb2F0UmVjdCBidWZmZXJlZFJlY3QgPSByZWN0OworICAgIGJ1ZmZlcmVk
UmVjdC5pbmZsYXRlKC0xLjAgLSBib3JkZXJXaWR0aCk7CisgICAgYnVmZmVyZWRSZWN0LnNldFdp
ZHRoKGJ1ZmZlcmVkUmVjdC53aWR0aCgpICogbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkp
OworICAgIGJ1ZmZlcmVkUmVjdCA9IGNvbnRleHQtPnJvdW5kVG9EZXZpY2VQaXhlbHMoYnVmZmVy
ZWRSZWN0KTsKKyAgIAorICAgIC8vIERvbid0IGJvdGhlciBkcmF3aW5nIGFuIGVtcHR5IGFyZWEu
CisgICAgaWYgKGJ1ZmZlcmVkUmVjdC53aWR0aCgpID4gMCAmJiBidWZmZXJlZFJlY3QuaGVpZ2h0
KCkgPiAwKSB7CisgICAgICAgIEZsb2F0UG9pbnQgcDAgPSBidWZmZXJlZFJlY3QubG9jYXRpb24o
KTsKKyAgICAgICAgRmxvYXRQb2ludCBwMSA9IHAwOworICAgICAgICBwMS5tb3ZlKDAuMGYsIGJ1
ZmZlcmVkUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8R3JhZGllbnQ+
IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShwMCwgcDEpOworICAgICAgICBDb2xvciBzdGFy
dENvbG9yID0gb2JqZWN0LT5zdHlsZSgpLT5jb2xvcigpOworICAgICAgICBncmFkaWVudC0+YWRk
Q29sb3JTdG9wKDAuMCwgc3RhcnRDb2xvcik7CisgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMS4wLCBDb2xvcihzdGFydENvbG9yLnJlZCgpIC8gMiwgc3RhcnRDb2xvci5ncmVlbigpIC8g
Miwgc3RhcnRDb2xvci5ibHVlKCkgLyAyLCBzdGFydENvbG9yLmFscGhhKCkpKTsKKyAKKyAgICAg
ICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KGdyYWRpZW50KTsKKyAgICAgICAgY29udGV4dC0+
YWRkUGF0aChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGJ1ZmZlcmVkUmVjdCwgdG9wTGVm
dFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFk
aXVzKSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7CisgICAgfQorICAgIAorICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsgICAgCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShvYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOworICAgIFVOVVNF
RF9QQVJBTShyZWN0KTsKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1lU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVP
KQotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQorICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5v
ZGUoKSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNv
bnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2Vla0JhY2tCdXR0b24sIE1lZGlh
Q29udHJvbGxlclRoZW1lQ2xhc3NpYywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCByLAotICAgICAgICBub2RlLT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcg
OiAwKTsKLSNlbmRpZgorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0OworICAgIENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250ZXh0LT5zdHJva2VDb2xvcigp
OworICAgIGlmIChvcmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkgeworICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOworICAgIH0KKworICAgIGludCB4ID0g
cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAyOworICAgIGNvbnRleHQtPmRyYXdMaW5lKEludFBv
aW50KHgsIHJlY3QueSgpKSwgIEludFBvaW50KHgsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkp
OworICAgIAorICAgIGlmIChvcmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkgeworICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTShwYWludEluZm8pOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlh
U2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Ci0g
ICAgaWYgKCFub2RlKQorICAgIGlmICghb2JqZWN0LT5wYXJlbnQoKS0+aXNTbGlkZXIoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVk
aWFTZWVrRm9yd2FyZEJ1dHRvbiwgTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsCi0gICAgICAgIG5vZGUtPmFjdGl2ZSgp
ID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAgcmV0dXJuIHBhaW50
TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFTbGlkZXJU
aHVtYkltYWdlKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0ocGFpbnRJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7CiAgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRN
ZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgp
OwotICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KSA6IDA7Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05hbWUodmlk
ZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkKKyAgICBpZiAoIW9i
amVjdC0+cGFyZW50KCktPmlzU2xpZGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVs
ZW1lbnQqPihtZWRpYU5vZGUpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCB0aW1lTG9hZGVkID0gMDsKLSAgICBmbG9hdCBjdXJyZW50
VGltZSA9IDA7Ci0gICAgZmxvYXQgZHVyYXRpb24gPSAwOwotICAgIGlmIChNZWRpYVBsYXllciog
cGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgewotICAgICAgICBkdXJhdGlvbiA9IHBs
YXllci0+ZHVyYXRpb24oKTsKLSAgICAgICAgdGltZUxvYWRlZCA9IHBsYXllci0+bWF4VGltZUJ1
ZmZlcmVkKCk7Ci0gICAgICAgIGN1cnJlbnRUaW1lID0gcGxheWVyLT5jdXJyZW50VGltZSgpOwot
ICAgIH0KLQotICAgIGJvb2wgc2hvdWxkRHJhd0VuZENhcHMgPSAhdG9SZW5kZXJNZWRpYShtZWRp
YUVsZW1lbnQtPnJlbmRlcmVyKCkpLT5zaG91bGRTaG93VGltZURpc3BsYXlDb250cm9scygpOwot
ICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2soTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIHRpbWVMb2FkZWQsIGN1cnJl
bnRUaW1lLCBkdXJhdGlvbiwgc2hvdWxkRHJhd0VuZENhcHMgPyBNZWRpYVVJUGFydERyYXdFbmRD
YXBzRmxhZyA6IDApOwotI2VuZGlmCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5h
bChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFWb2x1bWVTbGlkZXJUaHVtYkltYWdlKCkp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0ocGFp
bnRJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7CiAgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRo
dW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFp
bnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICNpZiBFTkFCTEUoVklERU8pCi0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKLSAgICBpZiAo
IW5vZGUpCisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50
UGFyZW50KG9iamVjdC0+bm9kZSgpKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29u
dGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTbGlk
ZXJUaHVtYiwgTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIHIsCi0gICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBh
cnRQcmVzc2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
OworICAgICAgICBDb2xvciBvcmlnaW5hbENvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsK
KyAKKyAgICAgICAgLy8gRHJhd3MgdGhlIGxlZnQgYm9yZGVyLCBpdCBpcyBhbHdheXMgMXB4IHdp
ZGUuCisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9iamVjdC0+c3R5bGUoKS0+Ym9y
ZGVyTGVmdENvbG9yKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0
LngoKSArIDEsIHJlY3QueSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQo
cmVjdC54KCkgKyAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAKKworICAgICAgICAvLyBEcmF3cyB0aGUgcmlnaHQgYm9yZGVyLCBpdCBpcyBh
bHdheXMgMXB4IHdpZGUuCisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9iamVjdC0+
c3R5bGUoKS0+Ym9yZGVyUmlnaHRDb2xvcigpKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0xpbmUo
SW50UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwg
cmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7CisgICAgICAgIAorICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShwYWludElu
Zm8pOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
IH0KIAogLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB1
bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAppbmRleCA1MTJj
MzBiLi4zN2VlM2E3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEuY3BwCkBAIC02MzksOSArNjM5LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG9iamVjdCkgY29uc3QKICAg
ICBlbHNlIGlmIChvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNs
aWRlclRodW1iUGFydCkKICAgICAgICAgdGh1bWJJbWFnZSA9IG1lZGlhVm9sdW1lU2xpZGVyVGh1
bWJJbWFnZSgpOwogCi0gICAgQVNTRVJUKHRodW1iSW1hZ2UpOwotICAgIG9iamVjdC0+c3R5bGUo
KS0+c2V0V2lkdGgoTGVuZ3RoKHRodW1iSW1hZ2UtPndpZHRoKCksIEZpeGVkKSk7Ci0gICAgb2Jq
ZWN0LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1hZ2UtPmhlaWdodCgpLCBGaXhl
ZCkpOworICAgIGlmICh0aHVtYkltYWdlKSB7CisgICAgICAgIG9iamVjdC0+c3R5bGUoKS0+c2V0
V2lkdGgoTGVuZ3RoKHRodW1iSW1hZ2UtPndpZHRoKCksIEZpeGVkKSk7CisgICAgICAgIG9iamVj
dC0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCh0aHVtYkltYWdlLT5oZWlnaHQoKSwgRml4ZWQp
KTsKKyAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogI2VuZGlm
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39394</attachid>
            <date>2009-09-10 17:06:57 -0700</date>
            <delta_ts>2009-09-10 17:49:23 -0700</delta_ts>
            <desc>Reimplement default media UI for Mac Chromium to match the style</desc>
            <filename>bug-29161-20090910170655.patch</filename>
            <type>text/plain</type>
            <size>22921</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWEyZDE2Zi4uYTE4YmRhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0wOS0xMCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlaW1wbGVtZW50IGRlZmF1bHQgbWVkaWEgVUkgZm9yIE1hYyBD
aHJvbWl1bSB0byBtYXRjaCB0aGUgc3R5bGUKKyAgICAgICAgb2YgdGhlIFdpbmRvd3MgYW5kIExp
bnV4IHZlcnNpb25zLiAgQWxzbyBicmVha3MgdGhlIGRlcGVuZGVuY3kKKyAgICAgICAgb24gdGhl
IGludGVybmFsIHdrKiBmdW5jdGlvbnMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdXNlZCB0bworICAg
ICAgICByZW5kZXIgdGhlIG1lZGlhIGNvbnRyb2xsZXIgd2lkZ2V0cy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MTYxCisKKyAgICAgICAgTm8gbWVk
aWEgbGF5b3V0IHRlc3RzIGFyZSBjdXJyZW50bHkgZW5hYmxlZCBpbiBNYWMgQ2hyb21pdW0sIHNv
CisgICAgICAgIG5vdGhpbmcgbmVlZHMgcmViYXNlbGluZWluZywgZXRjLgorCisgICAgICAgICog
Y3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3M6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhRWxlbWVudFBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhU2xpZGVyVGh1bWJJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjptZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YUJ1dHRvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisKIDIw
MDktMDktMDkgIENhbWVyb24gTWNDb3JtYWNrICA8Y2FtQG1jYy5pZC5hdT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHNDaHJvbWl1bS5jc3MgYi9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Nz
CmluZGV4IDBjMDFkYTIuLjE2ZmYwZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHNDaHJvbWl1bS5jc3MKKysrIGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVt
LmNzcwpAQCAtMTQ3LDYgKzE0Nyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRp
bWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgaGVp
Z2h0OiAxNnB4OwogCiAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7
CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICBib3JkZXItd2lkdGg6IDFweDsKICAgICBi
b3JkZXItcmFkaXVzOiAycHg7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjA4KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1NYWMuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaApp
bmRleCAwYzQxN2EyLi4xY2UyZjllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYy5oCkBAIC00NCw2ICs0NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7
CiAKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFD
b250cm9sc1N0eWxlU2hlZXQoKTsKKyNlbmRpZgorCiAgICAgICAgIC8vIEEgbWV0aG9kIHRvIG9i
dGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdp
bGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAgICAgLy8gcG9zaXRpb24gY2Fubm90
IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94ZXMgYW5k
IHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgICAgIC8vIGNvbnRyb2xzIHRoYXQg
bmVlZCB0byBkbyB0aGlzLgpAQCAtMTMzLDEzICsxMzcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjKCk7CkBAIC0yMTQsNiArMjE4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBtdXRhYmxlIEhhc2hNYXA8aW50LCBSR0JBMzI+IG1fc3lzdGVtQ29sb3JD
YWNoZTsKIAogICAgICAgICBSZXRhaW5QdHI8V2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9u
T2JzZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXI7CisgICAgICAgIGJvb2wgcGFpbnRNZWRp
YUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSop
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0gYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCmluZGV4IDQyZTJhY2EuLjVhYmViZDIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQpAQCAtMzksNiArMzksNyBA
QAogI2ltcG9ydCAiRWxlbWVudC5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2lt
cG9ydCAiRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJHcmFkaWVudC5oIgogI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
TWVkaWFFbGVtZW50LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW1wb3J0ICJSZW5kZXJTbGlkZXIu
aCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgorI2lt
cG9ydCAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtMTEwLDYgKzExMiwyMCBA
QCBlbnVtIHsKICAgICBMZWZ0UGFkZGluZwogfTsKIAorI2lmIEVOQUJMRShWSURFTykKKy8vIEF0
dGVtcHQgdG8gcmV0cmlldmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5z
IE5VTEwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4KK3N0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnRQYXJlbnQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybiAwOworICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpOworICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRp
b1RhZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
TWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKK30KKyNlbmRpZgorCiAvLyBJbiBvdXIgTWFjIHBv
cnQsIHdlIGRvbid0IGRlZmluZSBQTEFURk9STShNQUMpIGFuZCB0aHVzIGRvbid0IHBpY2sgdXAg
dGhlCiAvLyB8b3BlcmF0b3IgTlNSZWN0KCl8IG9uIFdlYkNvcmU6OkludFJlY3QgYW5kIEZsb2F0
UmVjdC4gVGhpcyBzdWJzdGl0dWVzIGZvcgogLy8gdGhhdCBtaXNzaW5nIGNvbnZlcnNpb24gb3Bl
cmF0b3IuCkBAIC0xMzMsNiArMTQ5LDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjKTsKIH0KIAorI2lmIEVOQUJMRShWSURFTykKK1N0cmluZyBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQs
IHNpemVvZihtZWRpYUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7Cit9Cisj
ZW5kaWYKKwogUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFn
ZShQYWdlKiBwYWdlKQogewogICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CkBAIC0xNDU0LDkgKzE0NzcsMTgg
QEAgaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwg
bWVudUxpc3RTaXplcygpKS53aWR0aCgpOwogfQogCi1zdGF0aWMgY29uc3QgaW50IHRyYWNrV2lk
dGggPSA1Owotc3RhdGljIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7Ci0KK3N0YXRpYyBJbWFn
ZSogbWVkaWFTbGlkZXJUaHVtYkltYWdlKCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhU2xp
ZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU2xpZGVyVGh1bWIi
KS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIG1lZGlhU2xpZGVyVGh1bWI7Cit9CisgIAorc3Rh
dGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKQoreworICAgIHN0YXRpYyBJ
bWFnZSogbWVkaWFWb2x1bWVTbGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgibWVkaWFWb2x1bWVTbGlkZXJUaHVtYiIpLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gbWVk
aWFWb2x1bWVTbGlkZXJUaHVtYjsKK30KKyAgCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KDApOwpAQCAtMTQ2NCw2ICsxNDk2LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwKIAog
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IHRyYWNrV2lkdGggPSA1OworICAgIHN0
YXRpYyBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOworICAKKyAgCiAgICAgSW50UmVjdCBib3Vu
ZHMgPSByOwogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KTsKICAgICBmbG9hdCB6b29tZWRUcmFja1dpZHRoID0gdHJhY2tXaWR0aCAqIHpvb21MZXZlbDsK
QEAgLTE1NzEsOCArMTYwNyw2IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjCiAKIGNvbnN0IGlu
dCBzbGlkZXJUaHVtYldpZHRoID0gMTU7CiBjb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAx
NTsKLWNvbnN0IGludCBtZWRpYVNsaWRlclRodW1iV2lkdGggPSAxMzsKLWNvbnN0IGludCBtZWRp
YVNsaWRlclRodW1iSGVpZ2h0ID0gMTQ7CiAKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKIHsKQEAgLTE1ODAs
MTAgKzE2MTQsMjAgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKICAgICAgICAgby0+c3R5bGUo
KS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJXaWR0aCAqIHpv
b21MZXZlbCksIEZpeGVkKSk7CiAgICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgo
c3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYkhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7
Ci0gICAgfSBlbHNlIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJU
aHVtYlBhcnQpIHsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKG1lZGlhU2xp
ZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExl
bmd0aChtZWRpYVNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KKworI2lmIEVOQUJM
RShWSURFTykKKyAgICBJbWFnZSogdGh1bWJJbWFnZSA9IDA7CisgICAgaWYgKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRlclRodW1iUGFydCkKKyAgICAgICAgdGh1bWJJbWFn
ZSA9IG1lZGlhU2xpZGVyVGh1bWJJbWFnZSgpOworICAgIGVsc2UgaWYgKG8tPnN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkKKyAgICAgICAgdGh1bWJJ
bWFnZSA9IG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpOworICAKKyAgICBpZiAodGh1bWJJ
bWFnZSkgeworICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgodGh1bWJJbWFnZS0+
d2lkdGgoKSwgRml4ZWQpKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCh0
aHVtYkltYWdlLT5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICB9CisjZW5kaWYKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKQEAgLTE4MjUsMTM5ICsxODY5LDIxMiBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29ucwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLS8vIEZJWE1FOiBUaGlzIGVu
dW0gaXMgbGlmdGVkIGZyb20gUmVuZGVyVGhlbWVNYWMubW0gIFdlIG5lZWQgdG8gZGVjaWRlIHdo
aWNoIHRoZW1lIHRvIHVzZSBmb3IgdGhlIGRlZmF1bHQgY29udHJvbHMsIG9yIGRlY2lkZSB0byBh
dm9pZCB3a0RyYXdNZWRpYVVJUGFydCBhbmQgcmVuZGVyIG91ciBvd24uCi10eXBlZGVmIGVudW0g
ewotICAgIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYyAgID0gMSwKLSAgICBNZWRpYUNvbnRy
b2xsZXJUaGVtZVFUICAgICAgICA9IDIKLX0gTWVkaWFDb250cm9sbGVyVGhlbWVTdHlsZTsKLQot
ZW51bSBXS01lZGlhQ29udHJvbGxlclRoZW1lU3RhdGUgewotICAgIE1lZGlhVUlQYXJ0RGlzYWJs
ZWRGbGFnID0gMSA8PCAwLAotICAgIE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgPSAxIDw8IDEsCi0g
ICAgTWVkaWFVSVBhcnREcmF3RW5kQ2Fwc0ZsYWcgPSAxIDw8IDMsCi19OwotI2VuZGlmCitib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKK3sK
KyAgICAvLyBDcmVhdGUgYSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgZm9yIHRoZSBpbWFnZSB0aGF0
IGlzIGNlbnRlcmVkIGluIHRoZSBkcmF3aW5nIHJlY3RhbmdsZSwgcm91bmRlZCBsZWZ0LCBhbmQg
ZG93bi4KKyAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KCk7CisgICAgaW1hZ2VS
ZWN0LnNldFkocmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGltYWdlLT5oZWlnaHQoKSArIDEp
IC8gMik7CisgICAgaW1hZ2VSZWN0LnNldFgocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gaW1h
Z2UtPndpZHRoKCkgKyAxKSAvIDIpOwogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKKyAgICBjb250ZXh0
LT5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIE5vZGUqIG5vZGUg
PSBvLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQorICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7CisgICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJh
d01lZGlhVUlQYXJ0KE1lZGlhRnVsbHNjcmVlbkJ1dHRvbiwgTWVkaWFDb250cm9sbGVyVGhlbWVD
bGFzc2ljLCAgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCAKLSAgICAg
ICAgbm9kZS0+YWN0aXZlKCkgPyBNZWRpYVVJUGFydFByZXNzZWRGbGFnIDogMCk7Ci0jZW5kaWYK
KyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgibWVkaWFQbGF5IikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQYXVz
ZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQYXVzZSIpLnJlbGVhc2VSZWYo
KTsKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheURpc2FibGVkID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJtZWRpYVBsYXlEaXNhYmxlZCIpLnJlbGVhc2VSZWYoKTsKKworICAgIGlm
IChtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdP
UktfTk9fU09VUkNFKQorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVBsYXlEaXNhYmxlZCk7CisKKyAgICByZXR1cm4g
cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVs
ZW1lbnQtPnBhdXNlZCgpID8gbWVkaWFQbGF5IDogbWVkaWFQYXVzZSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShvYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOworICAgIFVO
VVNFRF9QQVJBTShyZWN0KTsKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9u
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBO
b2RlKiBub2RlID0gby0+bm9kZSgpOwotICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2Rl
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRp
YU5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoYXVk
aW9UYWcpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7
CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50
KG9iamVjdC0+bm9kZSgpKTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRl
eHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KG1lZGlhRWxlbWVu
dC0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uLCBNZWRpYUNv
bnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgciwKLSAgICAgICAgbm9kZS0+YWN0aXZlKCkgPyBNZWRpYVVJUGFydFByZXNzZWRGbGFnIDog
MCk7Ci0jZW5kaWYKKworICAgIHN0YXRpYyBJbWFnZSogc291bmRGdWxsID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kRnVsbCIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0
aWMgSW1hZ2UqIHNvdW5kTm9uZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFT
b3VuZE5vbmUiKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBzb3VuZERpc2FibGVk
ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kRGlzYWJsZWQiKS5yZWxl
YXNlUmVmKCk7CisKKyAgICBpZiAobWVkaWFFbGVtZW50LT5uZXR3b3JrU3RhdGUoKSA9PSBIVE1M
TWVkaWFFbGVtZW50OjpORVRXT1JLX05PX1NPVVJDRSB8fCAhbWVkaWFFbGVtZW50LT5oYXNBdWRp
bygpKQorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5j
b250ZXh0LCByZWN0LCBzb3VuZERpc2FibGVkKTsKKworICAgIHJldHVybiBwYWludE1lZGlhQnV0
dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQo
KSA/IHNvdW5kTm9uZTogc291bmRGdWxsKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHJlY3Qp
OwogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOwotICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dBbmNlc3Rv
ck5vZGUoKSA6IDA7Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05h
bWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7CisgICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgp
KTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4
dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQobWVkaWFFbGVtZW50LT5jYW5QbGF5KCkgPyBNZWRp
YVBsYXlCdXR0b24gOiBNZWRpYVBhdXNlQnV0dG9uLCBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNz
aWMsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwKLSAgICAgICAgbm9k
ZS0+YWN0aXZlKCkgPyBNZWRpYVVJUGFydFByZXNzZWRGbGFnIDogMCk7Ci0jZW5kaWYKKyAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7ICAgIAorICAgIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICAKKyAgICBjb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisKKyAgICBJbnRT
aXplIHRvcExlZnRSYWRpdXMgPSBzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpOworICAgIElu
dFNpemUgdG9wUmlnaHRSYWRpdXMgPSBzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKTsKKyAg
ICBJbnRTaXplIGJvdHRvbUxlZnRSYWRpdXMgPSBzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1
cygpOworICAgIEludFNpemUgYm90dG9tUmlnaHRSYWRpdXMgPSBzdHlsZS0+Ym9yZGVyQm90dG9t
UmlnaHRSYWRpdXMoKTsKKyAgICBmbG9hdCBib3JkZXJXaWR0aCA9IHN0eWxlLT5ib3JkZXJMZWZ0
V2lkdGgoKTsKKworICAgIC8vIERyYXcgdGhlIGJvcmRlciBvZiB0aGUgdGltZSBiYXIuCisgICAg
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpKTsKKyAgICBj
b250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGgpOworICAgIGNvbnRleHQtPnNl
dEZpbGxDb2xvcihzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgIGNvbnRleHQtPmFkZFBh
dGgoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BS
aWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICBj
b250ZXh0LT5kcmF3UGF0aCgpOworICAgIAorICAgIC8vIERyYXcgdGhlIGJ1ZmZlcmVkIHJhbmdl
cy4KKyAgICAvLyBGSVhNRTogRHJhdyBtdWx0aXBsZSByYW5nZXMgaWYgdGhlcmUgYXJlIG11bHRp
cGxlIGJ1ZmZlcmVkIHJhbmdlcy4KKyAgICBGbG9hdFJlY3QgYnVmZmVyZWRSZWN0ID0gcmVjdDsK
KyAgICBidWZmZXJlZFJlY3QuaW5mbGF0ZSgtMS4wIC0gYm9yZGVyV2lkdGgpOworICAgIGJ1ZmZl
cmVkUmVjdC5zZXRXaWR0aChidWZmZXJlZFJlY3Qud2lkdGgoKSAqIG1lZGlhRWxlbWVudC0+cGVy
Y2VudExvYWRlZCgpKTsKKyAgICBidWZmZXJlZFJlY3QgPSBjb250ZXh0LT5yb3VuZFRvRGV2aWNl
UGl4ZWxzKGJ1ZmZlcmVkUmVjdCk7CisgICAKKyAgICAvLyBEb24ndCBib3RoZXIgZHJhd2luZyBh
biBlbXB0eSBhcmVhLgorICAgIGlmIChidWZmZXJlZFJlY3Qud2lkdGgoKSA+IDAgJiYgYnVmZmVy
ZWRSZWN0LmhlaWdodCgpID4gMCkgeworICAgICAgICBGbG9hdFBvaW50IHAwID0gYnVmZmVyZWRS
ZWN0LmxvY2F0aW9uKCk7CisgICAgICAgIEZsb2F0UG9pbnQgcDEgPSBwMDsKKyAgICAgICAgcDEu
bW92ZSgwLjBmLCBidWZmZXJlZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAKKyAgICAgICAgUmVm
UHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUocDAsIHAxKTsKKyAgICAg
ICAgQ29sb3Igc3RhcnRDb2xvciA9IG9iamVjdC0+c3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAg
Z3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIHN0YXJ0Q29sb3IpOworICAgICAgICBncmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3Ioc3RhcnRDb2xvci5yZWQoKSAvIDIsIHN0YXJ0Q29s
b3IuZ3JlZW4oKSAvIDIsIHN0YXJ0Q29sb3IuYmx1ZSgpIC8gMiwgc3RhcnRDb2xvci5hbHBoYSgp
KSk7CisgCisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7CisgICAg
ICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShidWZmZXJl
ZFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBi
b3R0b21SaWdodFJhZGl1cykpOworICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgIH0K
KyAgICAKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7ICAgIAorICAgIHJldHVybiB0cnVlOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZv
KTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7CiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lm
IEVOQUJMRShWSURFTykKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwotICAgIGlmICghbm9k
ZSkKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJl
bnQob2JqZWN0LT5ub2RlKCkpOworICAgIGlmICghbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNlZWtCYWNr
QnV0dG9uLCBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSwgciwKLSAgICAgICAgbm9kZS0+YWN0aXZlKCkgPyBNZWRpYVVJUGFy
dFByZXNzZWRGbGFnIDogMCk7Ci0jZW5kaWYKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQg
PSBwYWludEluZm8uY29udGV4dDsKKyAgICBDb2xvciBvcmlnaW5hbENvbG9yID0gY29udGV4dC0+
c3Ryb2tlQ29sb3IoKTsKKyAgICBpZiAob3JpZ2luYWxDb2xvciAhPSBDb2xvcjo6d2hpdGUpIHsK
KyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKKyAgICB9CisK
KyAgICBpbnQgeCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMjsKKyAgICBjb250ZXh0LT5k
cmF3TGluZShJbnRQb2ludCh4LCByZWN0LnkoKSksICBJbnRQb2ludCh4LCByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCkpKTsKKyAgICAKKyAgICBpZiAob3JpZ2luYWxDb2xvciAhPSBDb2xvcjo6d2hp
dGUpIHsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob3JpZ2luYWxDb2xvcik7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsK
KyAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7CiAg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBOb2RlKiBub2RlID0g
by0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKKyAgICBpZiAoIW9iamVjdC0+cGFyZW50KCktPmlz
U2xpZGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01l
ZGlhVUlQYXJ0KE1lZGlhU2Vla0ZvcndhcmRCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xh
c3NpYywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBu
b2RlLT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAg
IHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3Qs
IG1lZGlhU2xpZGVyVGh1bWJJbWFnZSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHJlY3Qp
OwogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgTm9kZSogbm9k
ZSA9IG8tPm5vZGUoKTsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+c2hhZG93
QW5jZXN0b3JOb2RlKCkgOiAwOwotICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5o
YXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkp
CisgICAgaWYgKCFvYmplY3QtPnBhcmVudCgpLT5pc1NsaWRlcigpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxvYXQgdGltZUxvYWRlZCA9IDA7Ci0gICAg
ZmxvYXQgY3VycmVudFRpbWUgPSAwOwotICAgIGZsb2F0IGR1cmF0aW9uID0gMDsKLSAgICBpZiAo
TWVkaWFQbGF5ZXIqIHBsYXllciA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCkpIHsKLSAgICAgICAg
ZHVyYXRpb24gPSBwbGF5ZXItPmR1cmF0aW9uKCk7Ci0gICAgICAgIHRpbWVMb2FkZWQgPSBwbGF5
ZXItPm1heFRpbWVCdWZmZXJlZCgpOwotICAgICAgICBjdXJyZW50VGltZSA9IHBsYXllci0+Y3Vy
cmVudFRpbWUoKTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZERyYXdFbmRDYXBzID0gIXRvUmVu
ZGVyTWVkaWEobWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKS0+c2hvdWxkU2hvd1RpbWVEaXNwbGF5
Q29udHJvbHMoKTsKLSAgICB3a0RyYXdNZWRpYVNsaWRlclRyYWNrKE1lZGlhQ29udHJvbGxlclRo
ZW1lQ2xhc3NpYywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCB0aW1l
TG9hZGVkLCBjdXJyZW50VGltZSwgZHVyYXRpb24sIHNob3VsZERyYXdFbmRDYXBzID8gTWVkaWFV
SVBhcnREcmF3RW5kQ2Fwc0ZsYWcgOiAwKTsKLSNlbmRpZgorICAgIHJldHVybiBwYWludE1lZGlh
QnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhVm9sdW1lU2xpZGVy
VGh1bWJJbWFnZSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKHBhaW50SW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHJlY3QpOwogICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2Rl
KCk7Ci0gICAgaWYgKCFub2RlKQorICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7CisgICAgaWYgKCFtZWRpYUVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQ
YXJ0KE1lZGlhU2xpZGVyVGh1bWIsIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgcGFpbnRJ
bmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2RlLT5hY3RpdmUo
KSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIGlmICghcmVjdC5p
c0VtcHR5KCkpCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWlu
dEluZm8uY29udGV4dDsKKyAgICAgICAgQ29sb3Igb3JpZ2luYWxDb2xvciA9IGNvbnRleHQtPnN0
cm9rZUNvbG9yKCk7CisgCisgICAgICAgIC8vIERyYXdzIHRoZSBsZWZ0IGJvcmRlciwgaXQgaXMg
YWx3YXlzIDFweCB3aWRlLgorICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3Qt
PnN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0xpbmUo
SW50UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIEludFBvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgLy8gRHJhd3MgdGhlIHJpZ2h0IGJv
cmRlciwgaXQgaXMgYWx3YXlzIDFweCB3aWRlLgorICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihvYmplY3QtPnN0eWxlKCktPmJvcmRlclJpZ2h0Q29sb3IoKSk7CisgICAgICAgIGNvbnRl
eHQtPmRyYXdMaW5lKEludFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVjdC55
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChyZWN0LngoKSArIHJlY3Qu
d2lkdGgoKSAtIDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOworICAgICAgICAKKyAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob3JpZ2luYWxDb2xvcik7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0ocGFpbnRJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7CiAgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCiB9CiAKIC8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3Ry
ZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBp
biByMzc3MzEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtU2tpYS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5j
cHAKaW5kZXggNTEyYzMwYi4uMzdlZTNhNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhLmNwcApAQCAtNjM5LDkgKzYzOSwxMCBAQCB2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpIGNvbnN0CiAgICAgZWxzZSBpZiAob2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0g
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpCiAgICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVZv
bHVtZVNsaWRlclRodW1iSW1hZ2UoKTsKIAotICAgIEFTU0VSVCh0aHVtYkltYWdlKTsKLSAgICBv
YmplY3QtPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCh0aHVtYkltYWdlLT53aWR0aCgpLCBGaXhl
ZCkpOwotICAgIG9iamVjdC0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCh0aHVtYkltYWdlLT5o
ZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBpZiAodGh1bWJJbWFnZSkgeworICAgICAgICBvYmplY3Qt
PnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCh0aHVtYkltYWdlLT53aWR0aCgpLCBGaXhlZCkpOwor
ICAgICAgICBvYmplY3QtPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgodGh1bWJJbWFnZS0+aGVp
Z2h0KCksIEZpeGVkKSk7CisgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsK
ICNlbmRpZg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>39395</attachid>
            <date>2009-09-10 17:09:49 -0700</date>
            <delta_ts>2009-09-10 17:09:49 -0700</delta_ts>
            <desc>Screenshot o new UI on white background.</desc>
            <filename>NewUI.png</filename>
            <type>image/png</type>
            <size>11345</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">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
Cw0JrQ59EmYRlh/Wu5S2NH5p09K34e7hpeEjEfoR4ojuSOnIuMjGyNkoz6iyqNFos+i10ddjlGP4
MZ2x+NjI2MOxM8u8lu1dNhFnE1cYd2e53vKVy6+uUF6RvuJMvHQ8O/5kAjYhKqEp4SM7mF3Pnkn0
S6xJnOZ4cPZxnnNduXu4UzxnXhlvMsk5qSzpabJz8u7kqRSXlPKUF3wPfhX/Vapvam3qbFpw2pG0
L+lR6a0ZhIyEjFMCOUGaoCdTLXNl5mCWUVZh1mi2Q/be7GlhgPBwDpSzPKdTREd/pvrE+uIt4rHc
xbnVue/yIvNOrpRdKVjZt8pwVdGqydXeq79fg1nDWdOdr5G/MX9srdvaunXQusR13eu11hesn9jg
s+HoRtLGtI2/bDLfVLbpzeaozV0FqgUbCsa3+GxpLpQqFBYOb3XcWrsNs42/rb/Iqqiy6HMxt/ha
iXlJecnH7Zzt176z+K7iuy87knb0l9qWHtiJ2ynYeWeXy66jZbJlq8vGdwftbt/D3FO8583e+L1X
y63La/eR9on3jVYEVnRWalfurPxYlVJ1u9q9urVGpaaoZnY/d//QAdcDLbWqtSW1Hw7yD96t86lr
r9etLz+EO5R76ElDZEPv96zvGw8rHy45/OmI4Mjo0bCjPY12jY1NKk2lzXCzuHnqWNyxGz94/tDZ
YtJS18poLTkOjouPP/sx4cc7JwJOdJ9knWz5SeenmjZaW3E71L6qfbojpWO0M6Zz8JT/qe4ux662
n01/PnJa43T1GfkzpWdJZwvOfjm3+tzM+azzLy4kXxjvju8euRh98VZPaE//pYBLVy57X77Y69Z7
7orzldNXHa6eusa61nHd9np7n01f2y82v7T12/a3D9gNdN6wv9E16DR4dshl6MJNz5uXb/ndun57
ye3BOxF37g7HDY/e5d59ei/93qv7uffnRjY8wD4ofijzsPyRyqP6Xw1+bR21HT0z5jnW93jp45Fx
zvjzf+X86+NEwRPqk/JJ9cnGp5ZPT095T914tuzZxPOs53MvCn+T/a3mpf7Ln353/b1vOnp64pXw
1Zc/tr9Wen3kjfWb7pmQmUdvM97OzRa/U3p39D3rfe+HqA+Tc3kf8R8rPhl86voc8PnBl4wvX/4N
rhX7rMMtNDkAAAAJcEhZcwAACxMAAAsTAQCanBgAACAASURBVHgB7d1NiCxnuQDgmTlzzjE3MZrE
SMKNepXgD0EvavBqRFBREwRBJP5dxIULR3EhuhDBjRtXQtBFwBNwZRaKoqgLvf4GgxGvP5GAmORK
xGii8SdqYsw5Z2Z67lv1zfS81XOqUjNd6Un3PLXoqa566/uqnvrq63mrqquXt7a2lgwECBAgQIAA
AQIECBAgQIDAYwmsPFaA+QQIECBAgAABAgQIECBAgEAlIIXWDggQIECAAAECBAgQIECAQC8BKXQv
JkEECBAgQIAAAQIECBAgQEAKrQ0QIECAAAECBAgQIECAAIFeAlLoXkyCCBAgQIAAAQIECBAgQICA
FFobIECAAAECBAgQIECAAAECvQSk0L2YBBEgQIAAAQIECBAgQIAAASm0NkCAAAECBAgQIECAAAEC
BHoJSKF7MQkiQIAAAQIECBAgQIAAAQJSaG2AAAECBAgQIECAAAECBAj0EpBC92ISRIAAAQIECBAg
QIAAAQIEpNDaAAECBAgQIECAAAECBAgQ6CUghe7FJIgAAQIECBAgQIAAAQIECEihtQECBAgQIECA
AAECBAgQINBLQArdi0kQAQIECBAgQIAAAQIECBCQQmsDBAgQIECAAAECBAgQIECgl4AUuheTIAIE
CBAgQIAAAQIECBAgIIXWBggQIECAAAECBAgQIECAQC8BKXQvJkEECBAgQIAAAQIECBAgQEAKrQ0Q
IECAAAECBAgQIECAAIFeAlLoXkyCCBAgQIAAAQIECBAgQICAFFobIECAAAECBAgQIECAAAECvQSk
0L2YBBEgQIAAAQIECBAgQIAAASm0NkCAAAECBAgQIECAAAECBHoJSKF7MQkiQIAAAQIECBAgQIAA
AQJSaG2AAAECBAgQIECAAAECBAj0EpBC92ISRIAAAQIECBAgQIAAAQIEpNDaAAECBAgQIECAAAEC
BAgQ6CUghe7FJIgAAQIECBAgQIAAAQIECEihtQECBAgQIECAAAECBAgQINBLQArdi0kQAQIECBAg
QIAAAQIECBCQQmsDBAgQIECAAAECBAgQIECgl4AUuheTIAIECBAgQIAAAQIECBAgIIXWBggQIECA
AAECBAgQIECAQC8BKXQvJkEECBAgQIAAAQIECBAgQEAKrQ0QIECAAAECBAgQIECAAIFeAlLoXkyC
CBAgQIAAAQIECBAgQICAFFobIECAAAECBAgQIECAAAECvQSk0L2YBBEgQIAAAQIECBAgQIAAASm0
NkCAAAECBAgQIECAAAECBHoJSKF7MQkiQIAAAQIECBAgQIAAAQJSaG2AAAECBAgQIECAAAECBAj0
EpBC92ISRIAAAQIECBAgQIAAAQIEpNDaAAECBAgQIECAAAECBAgQ6CUghe7FJIgAAQIECBAgQIAA
AQIECEihtQECBAgQIECAAAECBAgQINBLQArdi0kQAQIECBAgQIAAAQIECBCQQmsDBAgQIECAAAEC
BAgQIECgl4AUuheTIAIECBAgQIAAAQIECBAgIIXWBggQIECAAAECBAgQIECAQC8BKXQvJkEECBAg
QIAAAQIECBAgQEAKrQ0QIECAAAECBAgQIECAAIFeAlLoXkyCCBAgQIAAAQIECBAgQICAFFobIECA
AAECBAgQIECAAAECvQSk0L2YBBEgQIAAAQIECBAgQIAAASm0NkCAAAECBAgQIECAAAECBHoJSKF7
MQkiQIAAAQIECBAgQIAAAQJSaG2AAAECBAgQIECAAAECBAj0EpBC92ISRIAAAQIECBAgQIAAAQIE
pNDaAAECBAgQIECAAAECBAgQ6CUghe7FJIgAAQIECBAgQIAAAQIECEihtQECBAgQIECAAAECBAgQ
INBLQArdi0kQAQIECBAgQIAAAQIECBCQQmsDBAgQIECAAAECBAgQIECgl8BqryhBBAgQIECAAAEC
BAgQIEBgJgJra2szqOfUqVMHqMVV6AOgWYQAAQIECBAgQIAAAQIEjqKAFPoo7nXbTIAAAQIECBAg
QIAAAQIHEJBCHwDNIgQIECBAgAABAgQIECBwFAWk0Edxr9tmAgQIECBAgAABAgQIEDiAgBT6AGgW
IUCAAAECBAgQIECAAIGjKCCFPop73TYTIECAAAECBAgQIECAwAEEpNAHQLMIAQIECBAgQIAAAQIE
CBxFASn0UdzrtpkAAQIECBAgQIAAAQIEDiAghT4AmkUIECBAgAABAgQIECBA4CgKSKGP4l63zQQI
ECBAgAABAgQIEFgkgVOnTs1mc6TQs3FWCwECBAgQIECAAAECBAjMvYAUeu53oQ0gQIAAAQIECBAg
QIAAgdkISKFn46wWAgQIECBAgAABAgQIEJh7ASn03O9CG0CAAAECBAgQIECAAAECsxGQQs/GWS0E
CBAgQIAAAQIECBAgMPcCUui534U2gAABAgQIECBAgAABAgRmIyCFno2zWggQIECAAAECBAgQIEBg
7gWk0HO/C20AAQIECBAgQIAAAQIECMxGQAo9G2e1ECBAgAABAgQIECBAgMDcC0ih534X2gACBAgQ
IECAAAECBAgQmI2AFHo2zmohQIAAAQIECBAgQIAAgbkXkELP/S60AQQIECBAgAABAgQIECAwGwEp
9Gyc1UKAAAECBAgQIECAAAECcy8ghZ77XWgDCBAgQIAAAQIECBAgQGA2AlLo2TirhQABAgQIECBA
gAABAgTmXkAKPfe70AYQIECAAAECBAgQIECAwGwEpNCzcVYLAQIECBAgQIAAAQIECMy9gBR67neh
DSBAgAABAgQIECBAgACB2QhIoWfjrBYCBAgQIECAAAECBAgQmHsBKfTc70IbQIAAAQIECBAgQIAA
AQKzEZBCz8ZZLQQIECBAgAABAgQIECAw9wJS6LnfhTaAAAECBAgQIECAAAECBGYjIIWejbNaCBAg
QIAAAQIECBAgQGDuBaTQc78LbQABAgQIECBAgAABAgQIzEZACj0bZ7UQIECAAAECBAgQIECAwNwL
SKHnfhfaAAIECBAgQIAAAQIECBCYjYAUejbOaiFAgAABAgQIECBAgACBuReQQs/9LrQBBAgQIECA
AAECBAgQIDAbASn0bJzVQoAAAQIECBAgQIAAAQJzLyCFnvtdaAMIECBAgAABAgQIECBAYDYCUujZ
OKuFAAECBAgQIECAAAECBOZeQAo997vQBhAgQIAAAQIECBAgQIDAbASk0LNxVgsBAgQIECBAgAAB
AgQIzL2AFHrud6ENIECAAAECBAgQIECAAIHZCEihZ+OsFgIECBAgQIAAAQIECBCYe4HVud8CG0CA
AAECBAgQIECAAAECR0bg1KlT59zWvdPX1tbOGTnNRFehp9GzLAECBAgQIECAAAECBAgcIQEp9BHa
2TaVAAECBAgQIECAAAECBKYRkEJPo2dZAgQIECBAgAABAgQIEDhCAlLoI7SzbSoBAgQIECBAgAAB
AgQITCMghZ5Gz7IECBAgQIAAAQIECBAgcIQEpNBHaGfbVAIECBAgQIAAAQIECBCYRsCPWk2jZ1kC
BAgQIECAAAECBAgQmKnAOX+qKn7R6pzTB18zV6EHJ1UgAQIECBAgQIAAAQIECCymgBR6MferrSJA
gAABAgQIECBAgACBwQWk0IOTKpAAAQIECBAgQIAAAQIEFlNACr2Y+9VWESBAgAABAgQIECBAgMDg
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
6FLfW97ylle96lVxOfrOO++cfg1Oj44tj85E8jzaPLu0sb4UPxK9fiYy6Miidy4l71YSh9aozpdj
Us40Ww+5neQ64idixmlURznnjNldm2aZuZwck8etfwiU4Zy2ffbRTgHV3xzPf2w7Jsom2SoC+Gs/
pUlMOIwbT2kkbTHaz4RbPtayYR4PTJ9fBUT70X7a+pbxIZOPqRIcr2XQfsIhm2SrHaTJvxGv/zk6
7ef00sEfxvzqV7/6da973cUXX3z//fd/6Utfyrlex6yJBtcR2TFropD+b+PRWpE/v/a1r/3d7343
kfnHl4Jf+cpXXnPNNTfccMPErP7lt0XuO4WOgi699NIPfehDP/vZzyKRnvJy9Nb66bjcPIrrz5tn
tzY3qsvPm2eWtjbr69Cb1UqnfqI6/7pzk3buMtrOfsX0UTpz07bsOKaMxGtVbV1RvJahnlaPpopj
zSMXqV535uyOldWO92WkjrH+lcDE6Y+0j/hrP9FCyqFXHTqpbXQcO47f0mzO2Ufpf0ofrv3s7Vt8
fpVDpnQ443ZS3up/Slfc0bdoP9pPHCw+fzuOkcP9/N3u8/f552Uve9k73/nOuJr5t7/97RnPeMYH
P/jBj3/84w888EAU0zFropKOyI5ZE4X0fxv587vf/e641ByLxL3r4wVjenwV/O9///vnP//5+L2n
SN1vueWWYbPog6TQZf3iq9HPf/7z/6cexmu835G4hTuy0HIXd7xWV6HPnllZHcWN3EtbccpsIt/a
eVtXM/6XMf97VJao59fJbUpxy8TtWTtvSiHbRZXg+k1j+k5w9TelxI1L4X1i8rL1ppSFrD//3Hxa
25j2s8O03WB2DiLtZwem/pvbSdCUtzEnT9+hi8n6H+1H+6mOgnrY+ev/h92blXabR+5Dct+yG9Hs
Z3JMXlb/kxrbdpPz/2dpRbmdaD+hsWfYbjA7B1Fb+9mzXK8Jcf054uLi83e/+921tbWXvOQlr3nN
ayIFjYkdsyaK7ojsmDVRyGO+fdaznhUxkRK//vWvj8x8b3z8wNP73//+r33taz/96U+//e1vv+lN
b7r77rvvu2+q+9snajl4Ch0FnX/++XFfd3xHOr4gfe+9904U3eftaP10ddJ3c726ED2Kq9CbVVK9
tLm8FScSqnMJjaMpXaFqztiJi7/p6nF8KI7PKLeuTKOClnJ2J9dttizSUVcqM41W/6rurk9jxm4F
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
YII=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39401</attachid>
            <date>2009-09-10 17:49:27 -0700</date>
            <delta_ts>2009-09-18 13:22:41 -0700</delta_ts>
            <desc>Reimplement default media UI for Mac Chromium to match the style</desc>
            <filename>bug-29161-20090910174926.patch</filename>
            <type>text/plain</type>
            <size>22898</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWEyZDE2Zi4uYTE4YmRhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0wOS0xMCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlaW1wbGVtZW50IGRlZmF1bHQgbWVkaWEgVUkgZm9yIE1hYyBD
aHJvbWl1bSB0byBtYXRjaCB0aGUgc3R5bGUKKyAgICAgICAgb2YgdGhlIFdpbmRvd3MgYW5kIExp
bnV4IHZlcnNpb25zLiAgQWxzbyBicmVha3MgdGhlIGRlcGVuZGVuY3kKKyAgICAgICAgb24gdGhl
IGludGVybmFsIHdrKiBmdW5jdGlvbnMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdXNlZCB0bworICAg
ICAgICByZW5kZXIgdGhlIG1lZGlhIGNvbnRyb2xsZXIgd2lkZ2V0cy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MTYxCisKKyAgICAgICAgTm8gbWVk
aWEgbGF5b3V0IHRlc3RzIGFyZSBjdXJyZW50bHkgZW5hYmxlZCBpbiBNYWMgQ2hyb21pdW0sIHNv
CisgICAgICAgIG5vdGhpbmcgbmVlZHMgcmViYXNlbGluZWluZywgZXRjLgorCisgICAgICAgICog
Y3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3M6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhRWxlbWVudFBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhU2xpZGVyVGh1bWJJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjptZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YUJ1dHRvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisKIDIw
MDktMDktMDkgIENhbWVyb24gTWNDb3JtYWNrICA8Y2FtQG1jYy5pZC5hdT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHNDaHJvbWl1bS5jc3MgYi9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Nz
CmluZGV4IDBjMDFkYTIuLjE2ZmYwZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHNDaHJvbWl1bS5jc3MKKysrIGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVt
LmNzcwpAQCAtMTQ3LDYgKzE0Nyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRp
bWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgaGVp
Z2h0OiAxNnB4OwogCiAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7
CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICBib3JkZXItd2lkdGg6IDFweDsKICAgICBi
b3JkZXItcmFkaXVzOiAycHg7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjA4KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1NYWMuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaApp
bmRleCAwYzQxN2EyLi4xY2UyZjllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYy5oCkBAIC00NCw2ICs0NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7
CiAKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFD
b250cm9sc1N0eWxlU2hlZXQoKTsKKyNlbmRpZgorCiAgICAgICAgIC8vIEEgbWV0aG9kIHRvIG9i
dGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdp
bGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAgICAgLy8gcG9zaXRpb24gY2Fubm90
IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94ZXMgYW5k
IHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgICAgIC8vIGNvbnRyb2xzIHRoYXQg
bmVlZCB0byBkbyB0aGlzLgpAQCAtMTMzLDEzICsxMzcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjKCk7CkBAIC0yMTQsNiArMjE4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBtdXRhYmxlIEhhc2hNYXA8aW50LCBSR0JBMzI+IG1fc3lzdGVtQ29sb3JD
YWNoZTsKIAogICAgICAgICBSZXRhaW5QdHI8V2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9u
T2JzZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXI7CisgICAgICAgIGJvb2wgcGFpbnRNZWRp
YUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSop
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0gYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCmluZGV4IDQyZTJhY2EuLmFkYmFjZmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQpAQCAtMzksNiArMzksNyBA
QAogI2ltcG9ydCAiRWxlbWVudC5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2lt
cG9ydCAiRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJHcmFkaWVudC5oIgogI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
TWVkaWFFbGVtZW50LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW1wb3J0ICJSZW5kZXJTbGlkZXIu
aCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgorI2lt
cG9ydCAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtMTEwLDYgKzExMiwyMCBA
QCBlbnVtIHsKICAgICBMZWZ0UGFkZGluZwogfTsKIAorI2lmIEVOQUJMRShWSURFTykKKy8vIEF0
dGVtcHQgdG8gcmV0cmlldmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5z
IE5VTEwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4KK3N0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnRQYXJlbnQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybiAwOworICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpOworICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRp
b1RhZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
TWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKK30KKyNlbmRpZgorCiAvLyBJbiBvdXIgTWFjIHBv
cnQsIHdlIGRvbid0IGRlZmluZSBQTEFURk9STShNQUMpIGFuZCB0aHVzIGRvbid0IHBpY2sgdXAg
dGhlCiAvLyB8b3BlcmF0b3IgTlNSZWN0KCl8IG9uIFdlYkNvcmU6OkludFJlY3QgYW5kIEZsb2F0
UmVjdC4gVGhpcyBzdWJzdGl0dWVzIGZvcgogLy8gdGhhdCBtaXNzaW5nIGNvbnZlcnNpb24gb3Bl
cmF0b3IuCkBAIC0xMzMsNiArMTQ5LDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjKTsKIH0KIAorI2lmIEVOQUJMRShWSURFTykKK1N0cmluZyBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQs
IHNpemVvZihtZWRpYUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7Cit9Cisj
ZW5kaWYKKwogUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFn
ZShQYWdlKiBwYWdlKQogewogICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CkBAIC0xNDU0LDkgKzE0NzcsMTgg
QEAgaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwg
bWVudUxpc3RTaXplcygpKS53aWR0aCgpOwogfQogCi1zdGF0aWMgY29uc3QgaW50IHRyYWNrV2lk
dGggPSA1Owotc3RhdGljIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7Ci0KK3N0YXRpYyBJbWFn
ZSogbWVkaWFTbGlkZXJUaHVtYkltYWdlKCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhU2xp
ZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU2xpZGVyVGh1bWIi
KS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIG1lZGlhU2xpZGVyVGh1bWI7Cit9CisgIAorc3Rh
dGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKQoreworICAgIHN0YXRpYyBJ
bWFnZSogbWVkaWFWb2x1bWVTbGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgibWVkaWFWb2x1bWVTbGlkZXJUaHVtYiIpLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gbWVk
aWFWb2x1bWVTbGlkZXJUaHVtYjsKK30KKyAgCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KDApOwpAQCAtMTQ2NCw2ICsxNDk2LDkgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLAogCiBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQogeworICAgIHN0YXRpYyBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDU7CisgICAgc3Rh
dGljIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CisgIAogICAgIEludFJlY3QgYm91bmRzID0g
cjsKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAg
ICAgZmxvYXQgem9vbWVkVHJhY2tXaWR0aCA9IHRyYWNrV2lkdGggKiB6b29tTGV2ZWw7CkBAIC0x
NTcxLDggKzE2MDYsNiBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplYwogCiBjb25zdCBpbnQgc2xp
ZGVyVGh1bWJXaWR0aCA9IDE1OwogY29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0gMTU7Ci1j
b25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7Ci1jb25zdCBpbnQgbWVkaWFTbGlk
ZXJUaHVtYkhlaWdodCA9IDE0OwogCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7CkBAIC0xNTgwLDEwICsx
NjEzLDIwIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJT
aXplKFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CiAgICAgICAgIG8tPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6b29tTGV2
ZWwpLCBGaXhlZCkpOwogICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRp
Y19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwotICAg
IH0gZWxzZSBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQ
YXJ0KSB7Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChtZWRpYVNsaWRlclRo
dW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgo
bWVkaWFTbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICB9CisKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgSW1hZ2UqIHRodW1iSW1hZ2UgPSAwOworICAgIGlmIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpCisgICAgICAgIHRodW1iSW1hZ2UgPSBt
ZWRpYVNsaWRlclRodW1iSW1hZ2UoKTsKKyAgICBlbHNlIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpCisgICAgICAgIHRodW1iSW1hZ2Ug
PSBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKTsKKyAgCisgICAgaWYgKHRodW1iSW1hZ2Up
IHsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHRodW1iSW1hZ2UtPndpZHRo
KCksIEZpeGVkKSk7CisgICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgodGh1bWJJ
bWFnZS0+aGVpZ2h0KCksIEZpeGVkKSk7CisgICAgfQorI2VuZGlmCiB9CiAKIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCkBA
IC0xODI1LDEzOSArMTg2OCwyMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnMKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi0vLyBGSVhNRTogVGhpcyBlbnVtIGlz
IGxpZnRlZCBmcm9tIFJlbmRlclRoZW1lTWFjLm1tICBXZSBuZWVkIHRvIGRlY2lkZSB3aGljaCB0
aGVtZSB0byB1c2UgZm9yIHRoZSBkZWZhdWx0IGNvbnRyb2xzLCBvciBkZWNpZGUgdG8gYXZvaWQg
d2tEcmF3TWVkaWFVSVBhcnQgYW5kIHJlbmRlciBvdXIgb3duLgotdHlwZWRlZiBlbnVtIHsKLSAg
ICBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMgICA9IDEsCi0gICAgTWVkaWFDb250cm9sbGVy
VGhlbWVRVCAgICAgICAgPSAyCi19IE1lZGlhQ29udHJvbGxlclRoZW1lU3R5bGU7Ci0KLWVudW0g
V0tNZWRpYUNvbnRyb2xsZXJUaGVtZVN0YXRlIHsKLSAgICBNZWRpYVVJUGFydERpc2FibGVkRmxh
ZyA9IDEgPDwgMCwKLSAgICBNZWRpYVVJUGFydFByZXNzZWRGbGFnID0gMSA8PCAxLAotICAgIE1l
ZGlhVUlQYXJ0RHJhd0VuZENhcHNGbGFnID0gMSA8PCAzLAotfTsKLSNlbmRpZgorYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1hZ2UpCit7CisgICAg
Ly8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBj
ZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRvd24u
CisgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOworICAgIGltYWdlUmVjdC5z
ZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAvIDIp
OworICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdlLT53
aWR0aCgpICsgMSkgLyAyKTsKIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1l
ZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCisgICAgY29udGV4dC0+ZHJh
d0ltYWdlKGltYWdlLCBpbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOwotICAgIGlmICghbm9kZSkKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOworICAgIGlmICghbWVkaWFF
bGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRp
YVVJUGFydChNZWRpYUZ1bGxzY3JlZW5CdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3Np
YywgIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgCi0gICAgICAgIG5v
ZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAg
c3RhdGljIEltYWdlKiBtZWRpYVBsYXkgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1l
ZGlhUGxheSIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGF1c2UgPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGF1c2UiKS5yZWxlYXNlUmVmKCk7Cisg
ICAgc3RhdGljIEltYWdlKiBtZWRpYVBsYXlEaXNhYmxlZCA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgibWVkaWFQbGF5RGlzYWJsZWQiKS5yZWxlYXNlUmVmKCk7CisKKyAgICBpZiAobWVk
aWFFbGVtZW50LT5uZXR3b3JrU3RhdGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpORVRXT1JLX05P
X1NPVVJDRSkKKyAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludElu
Zm8uY29udGV4dCwgcmVjdCwgbWVkaWFQbGF5RGlzYWJsZWQpOworCisgICAgcmV0dXJuIHBhaW50
TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50
LT5wYXVzZWQoKSA/IG1lZGlhUGxheSA6IG1lZGlhUGF1c2UpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ob2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKKyAgICBVTlVTRURf
UEFSQU0ocmVjdCk7CiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5k
ZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgTm9kZSog
bm9kZSA9IG8tPm5vZGUoKTsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkgOiAwOwotICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2Rl
LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFn
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOworICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmpl
Y3QtPm5vZGUoKSk7CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChtZWRpYUVsZW1lbnQtPm11
dGVkKCkgPyBNZWRpYVVuTXV0ZUJ1dHRvbiA6IE1lZGlhTXV0ZUJ1dHRvbiwgTWVkaWFDb250cm9s
bGVyVGhlbWVDbGFzc2ljLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIs
Ci0gICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA6IDApOwot
I2VuZGlmCisKKyAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRnVsbCA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgibWVkaWFTb3VuZEZ1bGwiKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIElt
YWdlKiBzb3VuZE5vbmUgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmRO
b25lIikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogc291bmREaXNhYmxlZCA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZERpc2FibGVkIikucmVsZWFzZVJl
ZigpOworCisgICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0YXRlKCkgPT0gSFRNTE1lZGlh
RWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0UgfHwgIW1lZGlhRWxlbWVudC0+aGFzQXVkaW8oKSkK
KyAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4
dCwgcmVjdCwgc291bmREaXNhYmxlZCk7CisKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbklu
dGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBz
b3VuZE5vbmU6IHNvdW5kRnVsbCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUo
KTsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCkgOiAwOwotICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKHZp
ZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7CiAg
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExvY2Fs
Q3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwot
ICAgIHdrRHJhd01lZGlhVUlQYXJ0KG1lZGlhRWxlbWVudC0+Y2FuUGxheSgpID8gTWVkaWFQbGF5
QnV0dG9uIDogTWVkaWFQYXVzZUJ1dHRvbiwgTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsCi0gICAgICAgIG5vZGUtPmFj
dGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKKyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAg
CisgICAgY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOworCisgICAgSW50U2l6ZSB0
b3BMZWZ0UmFkaXVzID0gc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKTsKKyAgICBJbnRTaXpl
IHRvcFJpZ2h0UmFkaXVzID0gc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCk7CisgICAgSW50
U2l6ZSBib3R0b21MZWZ0UmFkaXVzID0gc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKTsK
KyAgICBJbnRTaXplIGJvdHRvbVJpZ2h0UmFkaXVzID0gc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzKCk7CisgICAgZmxvYXQgYm9yZGVyV2lkdGggPSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRo
KCk7CisKKyAgICAvLyBEcmF3IHRoZSBib3JkZXIgb2YgdGhlIHRpbWUgYmFyLgorICAgIGNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKHN0eWxlLT5ib3JkZXJMZWZ0Q29sb3IoKSk7CisgICAgY29udGV4
dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoKTsKKyAgICBjb250ZXh0LT5zZXRGaWxs
Q29sb3Ioc3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKKyAgICBjb250ZXh0LT5hZGRQYXRoKFBh
dGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRS
YWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgY29udGV4
dC0+ZHJhd1BhdGgoKTsKKyAgICAKKyAgICAvLyBEcmF3IHRoZSBidWZmZXJlZCByYW5nZXMuCisg
ICAgLy8gRklYTUU6IERyYXcgbXVsdGlwbGUgcmFuZ2VzIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBi
dWZmZXJlZCByYW5nZXMuCisgICAgRmxvYXRSZWN0IGJ1ZmZlcmVkUmVjdCA9IHJlY3Q7CisgICAg
YnVmZmVyZWRSZWN0LmluZmxhdGUoLTEuMCAtIGJvcmRlcldpZHRoKTsKKyAgICBidWZmZXJlZFJl
Y3Quc2V0V2lkdGgoYnVmZmVyZWRSZWN0LndpZHRoKCkgKiBtZWRpYUVsZW1lbnQtPnBlcmNlbnRM
b2FkZWQoKSk7CisgICAgYnVmZmVyZWRSZWN0ID0gY29udGV4dC0+cm91bmRUb0RldmljZVBpeGVs
cyhidWZmZXJlZFJlY3QpOworICAgCisgICAgLy8gRG9uJ3QgYm90aGVyIGRyYXdpbmcgYW4gZW1w
dHkgYXJlYS4KKyAgICBpZiAoYnVmZmVyZWRSZWN0LndpZHRoKCkgPiAwICYmIGJ1ZmZlcmVkUmVj
dC5oZWlnaHQoKSA+IDApIHsKKyAgICAgICAgRmxvYXRQb2ludCBwMCA9IGJ1ZmZlcmVkUmVjdC5s
b2NhdGlvbigpOworICAgICAgICBGbG9hdFBvaW50IHAxID0gcDA7CisgICAgICAgIHAxLm1vdmUo
MC4wZiwgYnVmZmVyZWRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHAwLCBwMSk7CisgICAgICAgIENv
bG9yIHN0YXJ0Q29sb3IgPSBvYmplY3QtPnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMC4wLCBzdGFydENvbG9yKTsKKyAgICAgICAgZ3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgxLjAsIENvbG9yKHN0YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFydENvbG9yLmdy
ZWVuKCkgLyAyLCBzdGFydENvbG9yLmJsdWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxwaGEoKSkpOwor
IAorICAgICAgICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOworICAgICAgICBj
b250ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoYnVmZmVyZWRSZWN0
LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9t
UmlnaHRSYWRpdXMpKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICB9CisgICAg
CisgICAgY29udGV4dC0+cmVzdG9yZSgpOyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi1i
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFW
b2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFC
TEUoVklERU8pCi0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisg
ICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9i
amVjdC0+bm9kZSgpKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWlu
dEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrQmFja0J1dHRv
biwgTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCksIHIsCi0gICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVz
c2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQ7CisgICAgQ29sb3Igb3JpZ2luYWxDb2xvciA9IGNvbnRleHQtPnN0cm9r
ZUNvbG9yKCk7CisgICAgaWYgKG9yaWdpbmFsQ29sb3IgIT0gQ29sb3I6OndoaXRlKQorICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOworCisgICAgaW50IHggPSBy
ZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDI7CisgICAgY29udGV4dC0+ZHJhd0xpbmUoSW50UG9p
bnQoeCwgcmVjdC55KCkpLCAgSW50UG9pbnQoeCwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7
CisgICAgCisgICAgaWYgKG9yaWdpbmFsQ29sb3IgIT0gQ29sb3I6OndoaXRlKQorICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHBhaW50
SW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNp
ZiBFTkFCTEUoVklERU8pCi0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUpCisgICAgaWYgKCFvYmplY3QtPnBhcmVudCgpLT5pc1NsaWRlcigpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNlZWtGb3J3
YXJkQnV0dG9uLCBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwKLSAgICAgICAgbm9kZS0+YWN0aXZlKCkgPyBNZWRpYVVJ
UGFydFByZXNzZWRGbGFnIDogMCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRv
bkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVNsaWRlclRodW1iSW1hZ2Uo
KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShw
YWludEluZm8pOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpw
YWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Ci0gICAgTm9k
ZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKLSAg
ICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgJiYg
IW1lZGlhTm9kZS0+aGFzVGFnTmFtZShhdWRpb1RhZykpKQorICAgIGlmICghb2JqZWN0LT5wYXJl
bnQoKS0+aXNTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1l
ZGlhTm9kZSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGZsb2F0IHRpbWVMb2FkZWQgPSAwOwotICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gMDsK
LSAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Ci0gICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBt
ZWRpYUVsZW1lbnQtPnBsYXllcigpKSB7Ci0gICAgICAgIGR1cmF0aW9uID0gcGxheWVyLT5kdXJh
dGlvbigpOwotICAgICAgICB0aW1lTG9hZGVkID0gcGxheWVyLT5tYXhUaW1lQnVmZmVyZWQoKTsK
LSAgICAgICAgY3VycmVudFRpbWUgPSBwbGF5ZXItPmN1cnJlbnRUaW1lKCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBzaG91bGREcmF3RW5kQ2FwcyA9ICF0b1JlbmRlck1lZGlhKG1lZGlhRWxlbWVudC0+
cmVuZGVyZXIoKSktPnNob3VsZFNob3dUaW1lRGlzcGxheUNvbnRyb2xzKCk7Ci0gICAgd2tEcmF3
TWVkaWFTbGlkZXJUcmFjayhNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgdGltZUxvYWRlZCwgY3VycmVudFRpbWUsIGR1
cmF0aW9uLCBzaG91bGREcmF3RW5kQ2FwcyA/IE1lZGlhVUlQYXJ0RHJhd0VuZENhcHNGbGFnIDog
MCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5m
by5jb250ZXh0LCByZWN0LCBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwor
ICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ29u
dHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJM
RShWSURFTykKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKKyAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2Jq
ZWN0LT5ub2RlKCkpOworICAgIGlmICghbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNsaWRlclRodW1iLCBN
ZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgciwKLSAgICAgICAgbm9kZS0+YWN0aXZlKCkgPyBNZWRpYVVJUGFydFByZXNzZWRG
bGFnIDogMCk7Ci0jZW5kaWYKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgICAg
IENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250ZXh0LT5zdHJva2VDb2xvcigpOworIAorICAgICAg
ICAvLyBEcmF3cyB0aGUgbGVmdCBib3JkZXIsIGl0IGlzIGFsd2F5cyAxcHggd2lkZS4KKyAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJMZWZ0Q29s
b3IoKSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHJlY3QueCgpICsgMSwg
cmVjdC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChyZWN0LngoKSAr
IDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
IAorCisgICAgICAgIC8vIERyYXdzIHRoZSByaWdodCBib3JkZXIsIGl0IGlzIGFsd2F5cyAxcHgg
d2lkZS4KKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5i
b3JkZXJSaWdodENvbG9yKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChy
ZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QueSgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKG9yaWdpbmFsQ29sb3IpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKG9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CisgICAg
VU5VU0VEX1BBUkFNKHJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiAvLyBG
SVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdh
cyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCmluZGV4IDUxMmMzMGIuLjM3ZWUz
YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAK
QEAgLTYzOSw5ICs2MzksMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAogICAgIGVsc2UgaWYg
KG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQ
YXJ0KQogICAgICAgICB0aHVtYkltYWdlID0gbWVkaWFWb2x1bWVTbGlkZXJUaHVtYkltYWdlKCk7
CiAKLSAgICBBU1NFUlQodGh1bWJJbWFnZSk7Ci0gICAgb2JqZWN0LT5zdHlsZSgpLT5zZXRXaWR0
aChMZW5ndGgodGh1bWJJbWFnZS0+d2lkdGgoKSwgRml4ZWQpKTsKLSAgICBvYmplY3QtPnN0eWxl
KCktPnNldEhlaWdodChMZW5ndGgodGh1bWJJbWFnZS0+aGVpZ2h0KCksIEZpeGVkKSk7CisgICAg
aWYgKHRodW1iSW1hZ2UpIHsKKyAgICAgICAgb2JqZWN0LT5zdHlsZSgpLT5zZXRXaWR0aChMZW5n
dGgodGh1bWJJbWFnZS0+d2lkdGgoKSwgRml4ZWQpKTsKKyAgICAgICAgb2JqZWN0LT5zdHlsZSgp
LT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1hZ2UtPmhlaWdodCgpLCBGaXhlZCkpOworICAgIH0K
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAjZW5kaWY=
</data>
<flag name="review"
          id="20494"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="20500"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>