<?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>79729</bug_id>
          
          <creation_ts>2012-02-27 18:29:33 -0800</creation_ts>
          <short_desc>[BlackBerry] upstream MediaPlayerPrivateBlackBerry.[cpp|h]</short_desc>
          <delta_ts>2012-03-04 09:12:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73144</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jonathan Dong">jonathan.dong.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>charles.wei</cc>
    
    <cc>leo.yang</cc>
    
    <cc>rakuco</cc>
    
    <cc>robin.webkit</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>566231</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Dong">jonathan.dong.webkit</who>
    <bug_when>2012-02-27 18:29:33 -0800</bug_when>
    <thetext>file: Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.[cpp|h]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566246</commentid>
    <comment_count>1</comment_count>
      <attachid>129160</attachid>
    <who name="Jonathan Dong">jonathan.dong.webkit</who>
    <bug_when>2012-02-27 18:38:59 -0800</bug_when>
    <thetext>Created attachment 129160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566289</commentid>
    <comment_count>2</comment_count>
      <attachid>129160</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-27 19:25:52 -0800</bug_when>
    <thetext>Comment on attachment 129160
Patch

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

Looks good, but I think it can be cleaned up some more.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:292
&gt; +    if (bufferLoaded)

CAn combine to if (float bufferLoaded = m_platformPlayer-&gt;bufferLoaded())

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:375
&gt; +        if (ro) {

Can be combined to if (RenderObject* ro = client-&gt;renderer())

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:379
&gt; +            int newWidth = (rect.width() &gt; PLAYBOOK_MIN_AUDIO_ELEMENT_WIDTH) ? rect.width() : PLAYBOOK_MIN_AUDIO_ELEMENT_WIDTH;

Can use max here.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:380
&gt; +            int newHeight = (rect.height() &gt; PLAYBOOK_MIN_AUDIO_ELEMENT_HEIGHT) ? rect.height() : PLAYBOOK_MIN_AUDIO_ELEMENT_HEIGHT;

Ditto.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:395
&gt; +        if (ro) {

Can be combined to if (RenderObject* ro = client-&gt;renderer())

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:610
&gt; +    if (element)

Can be combined to if (HTMLMediaElement* element = static_cast&lt;HTMLMediaElement*&gt;(m_webCorePlayer-&gt;mediaPlayerClient()))

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:617
&gt; +    if (element)

Ditto.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:39
&gt; +#define PLAYBOOK_MIN_AUDIO_ELEMENT_HEIGHT 32

Could be put in the cpp

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:141
&gt; +    virtual BlackBerry::Platform::Graphics::Window* platformWindow();

Should enter empty line here.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:149
&gt; +private:

private can be removed, already is in private section.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566419</commentid>
    <comment_count>3</comment_count>
      <attachid>129195</attachid>
    <who name="Jonathan Dong">jonathan.dong.webkit</who>
    <bug_when>2012-02-27 23:15:56 -0800</bug_when>
    <thetext>Created attachment 129195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570193</commentid>
    <comment_count>4</comment_count>
      <attachid>129195</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-03-03 17:47:54 -0800</bug_when>
    <thetext>Comment on attachment 129195
Patch

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

r=me, but please fix it up before landing.

When you have the revised patch, please re-upload and ask Leo or Charles to cq+ it. No need to r? again :-)

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:53
&gt; +/////////////////////////////////////////////////////////////////////////////

Lets remove this &quot;///*///&quot; line.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:60
&gt; +// static

remove

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:66
&gt; +// static

ditto

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:75
&gt; +// static

ditto

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:92
&gt; +// static

ditto

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:98
&gt; +// static

ditto

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:104
&gt; +/////////////////////////////////////////////////////////////////////////////

ditto

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:172
&gt; +}
&gt; +
&gt; +
&gt; +void MediaPlayerPrivate::prepareToPlay()

extra line

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:178
&gt; +}
&gt; +
&gt; +
&gt; +void MediaPlayerPrivate::play()

ditto

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:389
&gt; +    // If we have an HTMLVideoElement but the source has no video, then we need to resize the media element.
&gt; +    if (client &amp;&amp; client-&gt;isVideo() &amp;&amp; !hasVideo()) {
&gt; +        if (RenderObject* ro = client-&gt;renderer()) {
&gt; +            IntRect rect = ro-&gt;enclosingBox()-&gt;contentBoxRect();
&gt; +
&gt; +            static const int playbookMinAudioElementWidth = 300;
&gt; +            static const int playbookMinAudioElementHeight = 32;
&gt; +            // If the rect dimensions are less than the allowed minimum, use the minimum instead.
&gt; +            int newWidth = max(rect.width(), playbookMinAudioElementWidth);
&gt; +            int newHeight = max(rect.height(), playbookMinAudioElementHeight);
&gt; +
&gt; +            char attrString[12];
&gt; +
&gt; +            sprintf(attrString, &quot;%d&quot;, newWidth);
&gt; +            client-&gt;setAttribute(HTMLNames::widthAttr, attrString);
&gt; +
&gt; +            sprintf(attrString, &quot;%d&quot;, newHeight);
&gt; +            client-&gt;setAttribute(HTMLNames::heightAttr, attrString);
&gt; +        }
&gt; +    }
&gt; +
&gt; +    // If we don&apos;t know what the width and height of the video source is, then we need to set it to something sane.
&gt; +    if (client &amp;&amp; client-&gt;isVideo() &amp;&amp; !(m_platformPlayer-&gt;sourceWidth() &amp;&amp; m_platformPlayer-&gt;sourceHeight())) {
&gt; +        if (RenderObject* ro = client-&gt;renderer()) {
&gt; +            IntRect rect = ro-&gt;enclosingBox()-&gt;contentBoxRect();
&gt; +            m_platformPlayer-&gt;setSourceDimension(rect.width(), rect.height());
&gt; +        }

maybe it would look cleaner this:

if (!client || !client-&gt;isVideo())
    return;

RenderObject* o = client-&gt;renderer();
if (!o)
    return;

....

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:419
&gt; +int MediaPlayerPrivate::windowPositionGet(unsigned&amp; x, unsigned&amp; y, unsigned&amp; width, unsigned&amp; height) const

&quot;Get&quot; as the suffix is not common in WebKit. In fact, &quot;get&quot; is only used in cases exactly like this, where you &quot;getting&quot; values passed as references. However, I think it should be &quot;getWindowPosition&quot;.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:424
&gt; +const char* MediaPlayerPrivate::mmrContextNameGet()

rename it to mmrContextName()? i.e. no &quot;get&quot;..

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:532
&gt; +//////////////////////////////////////////////////////////////////

Drop the &quot;//////*////&quot; line.

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:687
&gt; +}
&gt; +
&gt; +
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +static const double BufferingAnimationDelay = 1.0 / 24;

drop extra blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570230</commentid>
    <comment_count>5</comment_count>
      <attachid>130023</attachid>
    <who name="Jonathan Dong">jonathan.dong.webkit</who>
    <bug_when>2012-03-04 05:47:52 -0800</bug_when>
    <thetext>Created attachment 130023
Patch for cq</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570253</commentid>
    <comment_count>6</comment_count>
      <attachid>130023</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-04 09:12:01 -0800</bug_when>
    <thetext>Comment on attachment 130023
Patch for cq

Clearing flags on attachment: 130023

Committed r109677: &lt;http://trac.webkit.org/changeset/109677&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570254</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-04 09:12:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129160</attachid>
            <date>2012-02-27 18:38:59 -0800</date>
            <delta_ts>2012-02-27 23:15:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79729-20120228103856.patch</filename>
            <type>text/plain</type>
            <size>39288</size>
            <attacher name="Jonathan Dong">jonathan.dong.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc5Y2RkZmM3MGE0M2Ey
ZWU3NzgyOGVmZWY1YTJiYWI1ZGEwZmVkMC4uNTk2MzYwNGE0ODc4YThlMzM0MzY3MGRhOGNkYzM2
ODE3Yjc2ZGQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAyLTI3ICBKb25h
dGhhbiBEb25nICA8am9uYXRoYW4uZG9uZ0B0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAg
W0JsYWNrQmVycnldIHVwc3RyZWFtIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuW2NwcHxo
XQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3MjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnRhdGlvbiBvZiBNZWRpYVBsYXllclByaXZhdGUgZm9yIEJsYWNrQmVycnkgcG9ydGluZy4KKyAg
ICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogUGxhdGZv
cm1CbGFja0JlcnJ5LmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBl
cyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om5vdGlmeUFwcEFjdGl2YXRl
ZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Q2VydGlm
aWNhdGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6fk1l
ZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cHJlcGFyZVRvUGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpk
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRU
aW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnVzZXJEcml2ZW5TZWVrVGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0
ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzU2luZ2xlU2VjdXJpdHlP
cmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dXNlckFnZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVzaXplU291cmNlRGltZW5z
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldEZ1bGxzY3Jl
ZW5XZWJQYWdlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
d2luZG93R2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0UGVl
cldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OndpbmRvd1Bv
c2l0aW9uR2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bW1yQ29u
dGV4dE5hbWVHZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwZXJj
ZW50TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c291cmNl
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzb3VyY2VIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRBbGxvd1BQU1Zv
bHVtZVVwZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRh
dGVTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvblN0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uTWVkaWFT
dGF0dXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25F
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uRHVyYXRpb25D
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25UaW1lQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uUGF1c2VTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvblJhdGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25Wb2x1bWVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25SZXBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25TaXplQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uUGxheU5vdGlmaWVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25QYXVzZU5vdGlmaWVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25CdWZmZXJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzaG93RXJyb3JEaWFsb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpmcmFtZVZpZXcpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybVdpbmRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmxvYWRCdWZmZXJpbmdJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpidWZmZXJpbmdUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0QnVmZmVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFsbG9jYXRlVGV4
dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHJhd0J1ZmZl
cmluZ0FuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9N
ZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRl
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmFjY2VsZXJhdGVk
UmVuZGVyaW5nU3RhdGVDaGFuZ2VkKToKKwogMjAxMi0wMi0yNyAgS2VudGFybyBIYXJhICA8aGFy
YWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVuYW1lIHJlc29sdmUtc3VwcGxlbWVudGFs
LnBsIHRvIHByZXByb2Nlc3MtaWRscy5wbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5
LmNtYWtlCmluZGV4IDAxNzU1YTg4ZjQ4NDU3ZTcyOTY4M2UwMWMxZWIxNzcyYTZkZDMzNjAuLjNi
ZWM0ZWJiZDJmNjk2YzIyNTA4ODY0ZjU2Zjc5Y2FlYzZiNGM0MDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTE3MCw4ICsxNzAsNyBAQCBMSVNUKEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFBvaW50
QmxhY2tCZXJyeS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFJlY3RC
bGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50U2l6ZUJs
YWNrQmVycnkuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NTXJlbmRlcmVy
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRl
TU1yZW5kZXJlci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxh
eWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0
cmluZ0JsYWNrQmVycnkuY3BwCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVy
UHJpdmF0ZUJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjZjhmZmRiOGYyOTFlMzcwYzY0YmVm
YThmNmY2M2M4YTUyZjMxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3Bw
CkBAIC0wLDAgKzEsODIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKy8vIEZJWE1FOiBUSElTIEZJTEUgU0hPVUxEIFJFUExBQ0UgTWVkaWFQbGF5ZXJQcml2YXRl
TU1yZW5kZXJlci5jcHAgV0hFTgorLy8gUkVGQUNUT1IgQ09NUExFVEUuCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVCbGFja0JlcnJ5LmgiCisKKyNpbmNsdWRlICJDb29raWVNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5o
IgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlQ2xpZW50LmgiCisK
KyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1DbGllbnQuaD4KKyNpbmNsdWRlIDxzZXQ+Cisj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIK
KyNpbmNsdWRlICJWaWRlb0xheWVyV2ViS2l0VGhyZWFkLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8gU3RhdGljIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgZmFjdG9yeQorUGFzc093
blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3Jl
YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRp
YVBsYXllclByaXZhdGUocGxheWVyKSk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0
cmFyKQoreworICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0
c1R5cGUsIDAsIDAsIDApOworfQorCisvLyBzdGF0aWMKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHNldDxz
dHJpbmc+IHN1cHBvcnRlZCA9IE1NUlBsYXllcjo6YWxsU3VwcG9ydGVkTWltZVR5cGVzKCk7Cisg
ICAgc2V0PHN0cmluZz46Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWQuYmVnaW4oKTsKKyAgICBmb3Ig
KDsgaSAhPSBzdXBwb3J0ZWQuZW5kKCk7IGkrKykKKyAgICAgICAgdHlwZXMuYWRkKGktPmNfc3Ry
KCkpOworfQorCisvLyBzdGF0aWMKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGNvZGVjcykKK3sKKyAgICBpZiAodHlwZS5pc051bGwoKSB8fCB0eXBlLmlzRW1wdHkoKSkgewor
ICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllciBkb2VzIG5vdCBzdXBwb3J0IHR5cGU7IHR5
cGUgaXMgbnVsbCBvciBlbXB0eS4iKTsKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05v
dFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICAvLyBzcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1
cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eQorICAgIGlmIChNTVJQ
bGF5ZXI6Om1pbWVUeXBlU3VwcG9ydGVkKHR5cGUuYXNjaWkoKS5kYXRhKCkpKSB7CisgICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyIHN1cHBvcnRzIHR5cGU7IGNhY2hlIGNvbnRhaW5zIHR5
cGUgJyVzJy4iLCB0eXBlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5p
c0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNT
dXBwb3J0ZWQ7CisgICAgfQorICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyIGRvZXMgbm90IHN1
cHBvcnQgdHlwZTsgY2FjaGUgZG9lc24ndCBjb250YWluIHR5cGUgJyVzJy4iLCB0eXBlLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQor
CisvLyBzdGF0aWMKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpub3RpZnlBcHBBY3RpdmF0ZWRF
dmVudChib29sIGFjdGl2YXRlZCkKK3sKKyAgICBNTVJQbGF5ZXI6Om5vdGlmeUFwcEFjdGl2YXRl
ZEV2ZW50KGFjdGl2YXRlZCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldENlcnRpZmljYXRlUGF0aChjb25zdCBTdHJpbmcmIGNhUGF0aCkKK3sKKyAgICBNTVJQ
bGF5ZXI6OnNldENlcnRpZmljYXRlUGF0aChzdHJpbmcoY2FQYXRoLnV0ZjgoKS5kYXRhKCkpKTsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK01lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5
ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3dlYkNvcmVQbGF5ZXIocGxh
eWVyKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAsIG1fcGxhdGZvcm1Q
bGF5ZXIobmV3IE1NUlBsYXllcih0aGlzLCB0cnVlKSkKKyNlbHNlCisgICAgLCBtX3BsYXRmb3Jt
UGxheWVyKG5ldyBNTVJQbGF5ZXIodGhpcywgZmFsc2UpKQorI2VuZGlmCisgICAgLCBtX25ldHdv
cmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5
ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVudCgwKQorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAsIG1fYnVmZmVyaW5nVGltZXIodGhp
cywgJk1lZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyaW5nVGltZXJGaXJlZCkKKyAgICAsIG1fc2hv
d0J1ZmZlcmluZ0ltYWdlKGZhbHNlKQorICAgICwgbV9tZWRpYUlzQnVmZmVyaW5nKGZhbHNlKQor
I2VuZGlmCisgICAgLCBtX3VzZXJEcml2ZW5TZWVrVGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJp
dmF0ZTo6dXNlckRyaXZlblNlZWtUaW1lckZpcmVkKQorICAgICwgbV9sYXN0U2Vla1RpbWUoMCkK
K3sKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK3sKKyAg
ICBpZiAoaXNGdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5ZXItPm1lZGlh
UGxheWVyQ2xpZW50KCkpOworICAgICAgICBlbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAg
IH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gcmVtb3ZlIG1lZGlh
IHBsYXllciBmcm9tIHBsYXRmb3JtIGxheWVyCisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8VmlkZW9MYXllcldlYktpdFRocmVhZCo+KG1fcGxhdGZvcm1MYXll
ci5nZXQoKSktPnNldE1lZGlhUGxheWVyKDApOworI2VuZGlmCisKKyAgICBkZWxldGUgbV9wbGF0
Zm9ybVBsYXllcjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpCit7CisgICAgU3RyaW5nIG1vZGlmaWVkVXJsKHVybCk7CisKKyAgICBpZiAobW9k
aWZpZWRVcmwuc3RhcnRzV2l0aCgibG9jYWw6Ly8iKSkgeworICAgICAgICBLVVJMIGt1cmwgPSBL
VVJMKEtVUkwoKSwgbW9kaWZpZWRVcmwpOworICAgICAgICBrdXJsLnNldFByb3RvY29sKCJmaWxl
Iik7CisgICAgICAgIFN0cmluZyB0ZW1wUGF0aChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpZW50
OjpnZXQoKS0+Z2V0QXBwbGljYXRpb25Mb2NhbERpcmVjdG9yeSgpLmNfc3RyKCkpOworICAgICAg
ICB0ZW1wUGF0aC5hcHBlbmQoa3VybC5wYXRoKCkpOworICAgICAgICBrdXJsLnNldFBhdGgodGVt
cFBhdGgpOworICAgICAgICBtb2RpZmllZFVybCA9IGt1cmwuc3RyaW5nKCk7CisgICAgfQorICAg
IGlmIChtb2RpZmllZFVybC5zdGFydHNXaXRoKCJmaWxlOi8vIikpIHsKKyAgICAgICAgLy8gVGhl
IFFOWCBNdWx0aW1lZGlhIEZyYW1ld29yayBjYW5ub3QgaGFuZGxlIGZpbGVuYW1lcyBjb250YWlu
aW5nCisgICAgICAgIC8vIFVSTCBlc2NhcGUgc2VxdWVuY2VzLgorICAgICAgICBtb2RpZmllZFVy
bCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtb2RpZmllZFVybCk7CisgICAgfQorCisgICAg
U3RyaW5nIGNvb2tpZVBhaXJzOworICAgIGlmICghdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgY29v
a2llUGFpcnMgPSBjb29raWVNYW5hZ2VyKCkuZ2V0Q29va2llKEtVUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwudXRmOCgpLmRhdGEoKSksIFdpdGhIdHRwT25seUNvb2tpZXMpOworICAgIGlmICghY29v
a2llUGFpcnMuaXNFbXB0eSgpICYmIGNvb2tpZVBhaXJzLnV0ZjgoKS5kYXRhKCkpCisgICAgICAg
IG1fcGxhdGZvcm1QbGF5ZXItPmxvYWQobW9kaWZpZWRVcmwudXRmOCgpLmRhdGEoKSwgdXNlckFn
ZW50KG1vZGlmaWVkVXJsKS51dGY4KCkuZGF0YSgpLCBjb29raWVQYWlycy51dGY4KCkuZGF0YSgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPmxvYWQobW9kaWZpZWRVcmwu
dXRmOCgpLmRhdGEoKSwgdXNlckFnZW50KG1vZGlmaWVkVXJsKS51dGY4KCkuZGF0YSgpLCAwKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQoKQoreworICAgIG1fcGxh
dGZvcm1QbGF5ZXItPmNhbmNlbExvYWQoKTsKK30KKworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cHJlcGFyZVRvUGxheSgpCit7CisgICAgbV9wbGF0Zm9ybVBsYXllci0+cHJlcGFyZVRvUGxh
eSgpOworfQorCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKK3sKKyAgICBtX3Bs
YXRmb3JtUGxheWVyLT5wbGF5KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVz
ZSgpCit7CisgICAgbV9wbGF0Zm9ybVBsYXllci0+cGF1c2UoKTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0ludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0
Cit7CisgICAgLy8gQ2Fubm90IHJldHVybiBlbXB0eSBzaXplLCBvdGhlcndpc2UgcGFpbnQoKSB3
aWxsIG5ldmVyIGdldCBjYWxsZWQuCisgICAgLy8gQWxzbywgdGhlIHZhbHVlcyBoZXJlIHdpbGwg
YWZmZWN0IHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIG91dHB1dCByZWN0YW5nbGUgdGhhdCB3aWxs
CisgICAgLy8gYmUgdXNlZCBmb3IgcmVuZGVyZXJpbmcgdGhlIHZpZGVvLCBzbyB3ZSBtdXN0IHRh
a2UgUEFSIGludG8gYWNjb3VudC4KKyAgICAvLyBOb3csIGhvcGUgdGhhdCBtZXRhZGF0YSBoYXMg
YmVlbiBwcm92aWRlZCBiZWZvcmUgdGhpcyBnZXRzIGNhbGxlZCBpZiB0aGlzIGlzIGEgdmlkZW8u
CisgICAgZG91YmxlIHBpeGVsV2lkdGggPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fcGxhdGZvcm1Q
bGF5ZXItPnBpeGVsV2lkdGgoKSk7CisgICAgZG91YmxlIHBpeGVsSGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX3BsYXRmb3JtUGxheWVyLT5waXhlbEhlaWdodCgpKTsKKyAgICBpZiAoIW1f
cGxhdGZvcm1QbGF5ZXItPnBpeGVsV2lkdGgoKSB8fCAhbV9wbGF0Zm9ybVBsYXllci0+cGl4ZWxI
ZWlnaHQoKSkKKyAgICAgICAgcGl4ZWxXaWR0aCA9IHBpeGVsSGVpZ2h0ID0gMS4wOworCisgICAg
Ly8gVXNlIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgdG8gZWxpbWluYXRlIHRoZSBjaGFuY2Ug
b2YgaW50ZWdlcgorICAgIC8vIG92ZXJmbG93LiBQQVIgbnVtYmVycyBjYW4gYmUgNSBkaWdpdHMg
b3IgbW9yZS4KKyAgICBkb3VibGUgYWRqdXN0ZWRTb3VyY2VXaWR0aCA9IHN0YXRpY19jYXN0PGRv
dWJsZT4obV9wbGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKSkgKiBwaXhlbFdpZHRoIC8gcGl4
ZWxIZWlnaHQ7CisgICAgcmV0dXJuIEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZFNv
dXJjZVdpZHRoICsgMC41KSwgbV9wbGF0Zm9ybVBsYXllci0+c291cmNlSGVpZ2h0KCkpOworfQor
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIHJldHVy
biBtX3BsYXRmb3JtUGxheWVyLT5oYXNWaWRlbygpOworfQorCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZTo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5o
YXNBdWRpbygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5kdXJh
dGlvbigpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV91c2VyRHJpdmVuU2Vla1RpbWVyLmlzQWN0aXZlKCkgPyBtX2xh
c3RTZWVrVGltZTogbV9wbGF0Zm9ybVBsYXllci0+Y3VycmVudFRpbWUoKTsKK30KKworc3RhdGlj
IGNvbnN0IGRvdWJsZSBTZWVrU3VibWlzc2lvbkRlbGF5ID0gMC4xOyAvLyBSZWFzb25hYmxlIHRo
cm90dGxpbmcgdmFsdWUuCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrKGZsb2F0IHRp
bWUpCit7CisgICAgbV9sYXN0U2Vla1RpbWUgPSB0aW1lOworICAgIGlmICghbV91c2VyRHJpdmVu
U2Vla1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdXNlckRyaXZlblNlZWtUaW1lci5zdGFy
dE9uZVNob3QoU2Vla1N1Ym1pc3Npb25EZWxheSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjp1c2VyRHJpdmVuU2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiop
Cit7CisgICAgbV9wbGF0Zm9ybVBsYXllci0+c2VlayhtX2xhc3RTZWVrVGltZSk7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit7
CisgICAgbV9wbGF0Zm9ybVBsYXllci0+c2V0UmF0ZShyYXRlKTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5
ZXItPnBhdXNlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKGZs
b2F0IHZvbHVtZSkKK3sKKyAgICBtX3BsYXRmb3JtUGxheWVyLT5zZXRWb2x1bWUodm9sdW1lKTsK
K30KKworTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGU6Om5ldHdv
cmtTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOworfQorCitNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGU6OnJlYWR5U3RhdGUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJp
dmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBs
YXllci0+bWF4VGltZVNlZWthYmxlKCk7Cit9CisKK1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVk
aWFQbGF5ZXJQcml2YXRlOjpidWZmZXJlZCgpIGNvbnN0Cit7CisgICAgUmVmUHRyPFRpbWVSYW5n
ZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBmbG9hdCBidWZmZXJM
b2FkZWQgPSBtX3BsYXRmb3JtUGxheWVyLT5idWZmZXJMb2FkZWQoKTsKKyAgICBpZiAoYnVmZmVy
TG9hZGVkKQorICAgICAgICB0aW1lUmFuZ2VzLT5hZGQoMCwgYnVmZmVyTG9hZGVkKTsKKyAgICBy
ZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKGNvbnN0IElu
dFNpemUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vCisgICAgLy8g
T25seSBwcm9jZXNzIHBhaW50IGNhbGxzIGNvbWluZyB2aWEgdGhlIGFjY2VsZXJhdGVkIGNvbXBv
c2l0aW5nIGNvZGUKKyAgICAvLyBwYXRoLCB3aGVyZSB3ZSBnZXQgY2FsbGVkIHdpdGggYSBudWxs
IGdyYXBoaWNzIGNvbnRleHQuIFNlZQorICAgIC8vIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRy
YXdUZXh0dXJlcygpLiBJZ25vcmUgY2FsbHMgZnJvbSB0aGUgcmVndWxhcgorICAgIC8vIHJlbmRl
cmluZyBwYXRoLgorICAgIC8vCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBtX3BsYXRmb3Jt
UGxheWVyLT5ub3RpZnlPdXRwdXRVcGRhdGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3Qo
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBy
ZXR1cm47CisjZW5kaWYKKworICAgIGlmICghaGFzVmlkZW8oKSB8fCBjb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkgfHwgIW1fd2ViQ29yZVBsYXllci0+dmlzaWJsZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3MgPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQoZ3JhcGhpY3MpOworCisgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkludFJlY3QgcGxhdGZvcm1SZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBJbnRSZWN0IGNsaXBwZWRSZWN0ID0gZnJh
bWVWaWV3KCktPndpbmRvd0NsaXBSZWN0KCk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Oklu
dFJlY3QgcGxhdGZvcm1XaW5kb3dDbGlwUmVjdChjbGlwcGVkUmVjdC54KCksIGNsaXBwZWRSZWN0
LnkoKSwgY2xpcHBlZFJlY3Qud2lkdGgoKSwgY2xpcHBlZFJlY3QuaGVpZ2h0KCkpOworICAgIG1f
cGxhdGZvcm1QbGF5ZXItPnBhaW50KGdyYXBoaWNzLT5jYW52YXMoKSwgcGxhdGZvcm1SZWN0LCBw
bGF0Zm9ybVdpbmRvd0NsaXBSZWN0KTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhh
c0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxh
eWVyLT5oYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGU6Om1v
dmllTG9hZFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXll
cjo6TW92aWVMb2FkVHlwZT4obV9wbGF0Zm9ybVBsYXllci0+bW92aWVMb2FkVHlwZSgpKTsKK30K
KworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXNlciBhZ2VudCBzdHJpbmcgYXNz
b2NpYXRlZCB3aXRoIHRoZQorLy8gZnJhbWUgbG9hZGVyIGNsaWVudCBvZiBvdXIgSFRNTE1lZGlh
RWxlbWVudC4gVGhlIGNhbGwgYmVsb3cgd2lsbAorLy8gZW5kIHVwIGluIEZyYW1lTG9hZGVyQ2xp
ZW50QmxhY2tCZXJyeTo6dXNlckFnZW50KCkuCisvLworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0
ZTo6dXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAgIEhUTUxNZWRpYUVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obV93ZWJDb3Jl
UGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpKTsKKyAgICBEb2N1bWVudCogdG9wZG9jID0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dG9wRG9jdW1lbnQoKTsKKyAgICBBU1NFUlQodG9wZG9jLT5mcmFt
ZSgpKTsKKyAgICBBU1NFUlQodG9wZG9jLT5mcmFtZSgpLT5sb2FkZXIoKSk7CisgICAgaWYgKHRv
cGRvYy0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHRvcGRvYy0+ZnJhbWUoKS0+bG9hZGVyKCkt
PnVzZXJBZ2VudChLVVJMKEtVUkwoKSwgdXJsKSk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVzaXplU291cmNlRGltZW5zaW9ucygpCit7Cisg
ICAgaWYgKCFtX3dlYkNvcmVQbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEhUTUxNZWRp
YUVsZW1lbnQqIGNsaWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNv
cmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOworCisgICAgLy8gSWYgd2UgaGF2ZSBhbiBI
VE1MVmlkZW9FbGVtZW50IGJ1dCB0aGUgc291cmNlIGhhcyBubyB2aWRlbywgdGhlbiB3ZSBuZWVk
IHRvIHJlc2l6ZSB0aGUgbWVkaWEgZWxlbWVudC4KKyAgICBpZiAoY2xpZW50ICYmIGNsaWVudC0+
aXNWaWRlbygpICYmICFoYXNWaWRlbygpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcm8gPSBj
bGllbnQtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChybykgeworICAgICAgICAgICAgSW50UmVj
dCByZWN0ID0gcm8tPmVuY2xvc2luZ0JveCgpLT5jb250ZW50Qm94UmVjdCgpOworCisgICAgICAg
ICAgICAvLyBJZiB0aGUgcmVjdCBkaW1lbnNpb25zIGFyZSBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSwgdXNlIHRoZSBtaW5pbXVtIGluc3RlYWQuCisgICAgICAgICAgICBpbnQgbmV3V2lk
dGggPSAocmVjdC53aWR0aCgpID4gUExBWUJPT0tfTUlOX0FVRElPX0VMRU1FTlRfV0lEVEgpID8g
cmVjdC53aWR0aCgpIDogUExBWUJPT0tfTUlOX0FVRElPX0VMRU1FTlRfV0lEVEg7CisgICAgICAg
ICAgICBpbnQgbmV3SGVpZ2h0ID0gKHJlY3QuaGVpZ2h0KCkgPiBQTEFZQk9PS19NSU5fQVVESU9f
RUxFTUVOVF9IRUlHSFQpID8gcmVjdC5oZWlnaHQoKSA6IFBMQVlCT09LX01JTl9BVURJT19FTEVN
RU5UX0hFSUdIVDsKKworICAgICAgICAgICAgY2hhciBhdHRyU3RyaW5nWzEyXTsKKworICAgICAg
ICAgICAgc3ByaW50ZihhdHRyU3RyaW5nLCAiJWQiLCBuZXdXaWR0aCk7CisgICAgICAgICAgICBj
bGllbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OndpZHRoQXR0ciwgYXR0clN0cmluZyk7CisK
KyAgICAgICAgICAgIHNwcmludGYoYXR0clN0cmluZywgIiVkIiwgbmV3SGVpZ2h0KTsKKyAgICAg
ICAgICAgIGNsaWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aGVpZ2h0QXR0ciwgYXR0clN0
cmluZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBkb24ndCBrbm93IHdoYXQg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHZpZGVvIHNvdXJjZSBpcywgdGhlbiB3ZSBuZWVk
IHRvIHNldCBpdCB0byBzb21ldGhpbmcgc2FuZS4KKyAgICBpZiAoY2xpZW50ICYmIGNsaWVudC0+
aXNWaWRlbygpICYmICEobV9wbGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKSAmJiBtX3BsYXRm
b3JtUGxheWVyLT5zb3VyY2VIZWlnaHQoKSkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBybyA9
IGNsaWVudC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJvKSB7CisgICAgICAgICAgICBJbnRS
ZWN0IHJlY3QgPSByby0+ZW5jbG9zaW5nQm94KCktPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgICAg
ICAgICBtX3BsYXRmb3JtUGxheWVyLT5zZXRTb3VyY2VEaW1lbnNpb24ocmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnNldEZ1bGxzY3JlZW5XZWJQYWdlQ2xpZW50KEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZUNsaWVudCogY2xpZW50KQoreworICAgIGlmIChtX2Z1bGxzY3JlZW5XZWJQYWdlQ2xpZW50
ID09IGNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mdWxsc2NyZWVuV2ViUGFnZUNs
aWVudCA9IGNsaWVudDsKKyAgICBtX3BsYXRmb3JtUGxheWVyLT50b2dnbGVGdWxsc2NyZWVuKGNs
aWVudCk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIHJlcGFpbnQgaXMgbmVlZGVkIGVzcGVjaWFs
bHkgaWYgdmlkZW8gaXMgcGF1c2VkIGFuZAorICAgIC8vIGZ1bGxzY3JlZW4gaXMgZXhpdGluZywg
c28gdGhhdCBhIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoKSBpcworICAgIC8vIHRyaWdnZXJl
ZCBhbmQgdGhlIGNvZGUgaW4gb3V0cHV0VXBkYXRlKCkgc2V0cyB0aGUgY29ycmVjdCB3aW5kb3cK
KyAgICAvLyByZWN0YW5nbGUuCisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIG1fd2ViQ29yZVBs
YXllci0+cmVwYWludCgpOworfQorCitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6Oldp
bmRvdyogTWVkaWFQbGF5ZXJQcml2YXRlOjp3aW5kb3dHZXQoKQoreworICAgIHJldHVybiBtX3Bs
YXRmb3JtUGxheWVyLT53aW5kb3dHZXQoKTsKK30KKworQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpXaW5kb3cqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0UGVlcldpbmRvdyhjb25zdCBj
aGFyKiB1bmlxdWVJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+Z2V0
UGVlcldpbmRvdyh1bmlxdWVJRCk7Cit9CisKK2ludCBNZWRpYVBsYXllclByaXZhdGU6OndpbmRv
d1Bvc2l0aW9uR2V0KHVuc2lnbmVkJiB4LCB1bnNpZ25lZCYgeSwgdW5zaWduZWQmIHdpZHRoLCB1
bnNpZ25lZCYgaGVpZ2h0KSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT53
aW5kb3dQb3NpdGlvbkdldCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworY29uc3QgY2hhciog
TWVkaWFQbGF5ZXJQcml2YXRlOjptbXJDb250ZXh0TmFtZUdldCgpCit7CisgICAgcmV0dXJuIG1f
cGxhdGZvcm1QbGF5ZXItPm1tckNvbnRleHROYW1lR2V0KCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGVyY2VudExvYWRlZCgpCit7CisgICAgaWYgKCFtX3BsYXRmb3JtUGxheWVy
LT5kdXJhdGlvbigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IGJ1ZmZlcmVkID0g
MDsKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IHRoaXMtPmJ1ZmZlcmVkKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2kp
IHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOworICAgICAgICBmbG9h
dCBzdGFydCA9IHRpbWVSYW5nZXMtPnN0YXJ0KGksIGlnbm9yZWRFeGNlcHRpb24pOworICAgICAg
ICBmbG9hdCBlbmQgPSB0aW1lUmFuZ2VzLT5lbmQoaSwgaWdub3JlZEV4Y2VwdGlvbik7CisgICAg
ICAgIGJ1ZmZlcmVkICs9IGVuZCAtIHN0YXJ0OworICAgIH0KKworICAgIGZsb2F0IGxvYWRlZCA9
IGJ1ZmZlcmVkIC8gbV9wbGF0Zm9ybVBsYXllci0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gbG9h
ZGVkOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnNvdXJjZVdpZHRoKCkKK3sK
KyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKTsKK30KKwordW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzb3VyY2VIZWlnaHQoKQoreworICAgIHJldHVybiBtX3Bs
YXRmb3JtUGxheWVyLT5zb3VyY2VIZWlnaHQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldEFsbG93UFBTVm9sdW1lVXBkYXRlcyhib29sIGFsbG93KQoreworICAgIHJldHVybiBt
X3BsYXRmb3JtUGxheWVyLT5zZXRBbGxvd1BQU1ZvbHVtZVVwZGF0ZXMoYWxsb3cpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sKKyAgICBNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisKKyAg
ICBNTVJQbGF5ZXI6OkVycm9yIGN1cnJlbnRFcnJvciA9IG1fcGxhdGZvcm1QbGF5ZXItPmVycm9y
KCk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1l
ZGlhRWxlbWVudCo+KG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisKKyAg
ICBpZiAoY3VycmVudEVycm9yICE9IE1NUlBsYXllcjo6TWVkaWFPSykgeworICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIGlmIChjdXJyZW50
RXJyb3IgPT0gTU1SUGxheWVyOjpNZWRpYURlY29kZUVycm9yKQorICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RGVjb2RlRXJyb3I7CisgICAgICAgIGVsc2UgaWYgKGN1
cnJlbnRFcnJvciA9PSBNTVJQbGF5ZXI6Ok1lZGlhTWV0YURhdGFFcnJvcgorICAgICAgICAgICAg
fHwgY3VycmVudEVycm9yID09IE1NUlBsYXllcjo6TWVkaWFBdWRpb1JlY2VpdmVFcnJvcgorICAg
ICAgICAgICAgfHwgY3VycmVudEVycm9yID09IE1NUlBsYXllcjo6TWVkaWFWaWRlb1JlY2VpdmVF
cnJvcikKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtF
cnJvcjsKKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKG1fcGxhdGZvcm1QbGF5ZXItPm1l
ZGlhU3RhdGUoKSkgeworICAgICAgICBjYXNlIE1NUlBsYXllcjo6TU1SUGxheVN0YXRlSWRsZToK
KyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNTVJQbGF5ZXI6Ok1NUlBsYXlTdGF0ZVBsYXlpbmc6
CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU1SUGxheWVyOjpNTVJQbGF5U3RhdGVTdG9w
cGVkOgorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1NUlBsYXllcjo6TU1SUGxheVN0YXRlVW5r
bm93bjoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgc3dpdGNoIChtX3BsYXRmb3JtUGxheWVyLT5zdGF0ZSgpKSB7CisgICAgICAgIGNh
c2UgTU1SUGxheWVyOjpNUF9TVEFURV9JRExFOgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICAgICAgICAgIHNldEJ1ZmZlcmluZyhmYWxzZSk7CisgICAgICAgICAgICBtX21l
ZGlhSXNCdWZmZXJpbmcgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGlzRnVsbHNj
cmVlbigpKQorICAgICAgICAgICAgICAgIGVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNTVJQbGF5ZXI6Ok1QX1NUQVRFX0FDVElWRToK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICBtX3Nob3dCdWZm
ZXJpbmdJbWFnZSA9IGZhbHNlOworICAgICAgICAgICAgbV9tZWRpYUlzQnVmZmVyaW5nID0gZmFs
c2U7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1NUlBsYXllcjo6
TVBfU1RBVEVfVU5TVVBQT1JURUQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZHVyYXRpb24o
KSB8fCBtb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW0pCisgICAgICAg
ICAgICAmJiBtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKQorICAg
ICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAg
IH0KKworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBt
X3dlYkNvcmVQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgICAgICAvLyBjcmVhdGUgcGxhdGZvcm0gbGF5ZXIgZm9yIHZpZGVv
CisgICAgICAgIGlmICghbV9wbGF0Zm9ybUxheWVyKQorICAgICAgICAgICAgbV9wbGF0Zm9ybUxh
eWVyID0gVmlkZW9MYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKG1fd2ViQ29yZVBsYXllcik7Cisj
ZW5kaWYKKyAgICB9CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkK
KyAgICAgICAgbV93ZWJDb3JlUGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cit9CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8gSU1NUlBsYXllckxpc3RlbmVyIGNhbGxiYWNrcyBpbXBsZW1lbnRhdGlvbgor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uU3RhdGVDaGFuZ2VkKE1NUlBsYXllcjo6TXBTdGF0
ZSkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
Om9uTWVkaWFTdGF0dXNDaGFuZ2VkKE1NUlBsYXllcjo6TU1SUGxheVN0YXRlKQoreworICAgIHVw
ZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25FcnJvcihNTVJQ
bGF5ZXI6OkVycm9yIHR5cGUpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpvbkR1cmF0aW9uQ2hhbmdlZChmbG9hdCBkdXJhdGlvbikKK3sKKyAg
ICB1cGRhdGVTdGF0ZXMoKTsKKyAgICBtX3dlYkNvcmVQbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25UaW1lQ2hhbmdlZChmbG9hdCkKK3sK
KyAgICBtX3dlYkNvcmVQbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpvblBhdXNlU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoaXNGdWxsc2NyZWVu
KCkpIHsKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOwor
ICAgICAgICAvLyBQYXVzZWQgc3RhdGUgY2hhbmdlIG5vdCBkdWUgdG8gbG9jYWwgY29udHJvbGxl
ci4uLgorICAgICAgICBpZiAobV9wbGF0Zm9ybVBsYXllci0+aXNQYXVzZWQoKSkKKyAgICAgICAg
ICAgIGVsZW1lbnQtPnBhdXNlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gVGhl
IEhNSSBmdWxsc2NyZWVuIHdpZGdldCBoYXMgcmVzdW1lZCBwbGF5LiBDaGVjayBpZiB0aGUKKyAg
ICAgICAgICAgIC8vIHBhdXNlIHRpbWVvdXQgb2NjdXJyZWQuCisgICAgICAgICAgICBtX3BsYXRm
b3JtUGxheWVyLT5wcm9jZXNzUGF1c2VUaW1lb3V0SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAg
IGVsZW1lbnQtPnBsYXkoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6Om9uUmF0ZUNoYW5nZWQoZmxvYXQpCit7CisgICAgbV93ZWJDb3JlUGxheWVyLT5y
YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25Wb2x1bWVDaGFu
Z2VkKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBtX3dlYkNvcmVQbGF5ZXItPnZvbHVtZUNoYW5nZWQo
dm9sdW1lKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uUmVwYWludCgpCit7Cisg
ICAgbV93ZWJDb3JlUGxheWVyLT5yZXBhaW50KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpvblNpemVDaGFuZ2VkKCkKK3sKKyAgICByZXNpemVTb3VyY2VEaW1lbnNpb25zKCk7Cisg
ICAgaWYgKGhhc1ZpZGVvKCkpCisgICAgICAgIG1fd2ViQ29yZVBsYXllci0+c2l6ZUNoYW5nZWQo
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uUGxheU5vdGlmaWVkKCkKK3sKKyAg
ICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVu
dCo+KG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisgICAgaWYgKGVsZW1l
bnQpCisgICAgICAgIGVsZW1lbnQtPnBsYXkoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6Om9uUGF1c2VOb3RpZmllZCgpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxh
eWVyQ2xpZW50KCkpOworICAgIGlmIChlbGVtZW50KQorICAgICAgICBlbGVtZW50LT5wYXVzZSgp
OworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6Om9uQnVmZmVyaW5nKGJvb2wgZmxhZykKK3sKKyAgICBzZXRCdWZmZXJpbmcoZmxh
Zyk7Cit9CisjZW5kaWYKKworaW50IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2hvd0Vycm9yRGlhbG9n
KE1NUlBsYXllcjo6RXJyb3IgdHlwZSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJy
eTo6V2ViS2l0OworCisgICAgV2ViUGFnZUNsaWVudDo6QWxlcnRUeXBlIGF0eXBlOworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgTU1SUGxheWVyOjpNZWRpYU9LOgorICAgICAgICBhdHlw
ZSA9IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhT0s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1S
UGxheWVyOjpNZWRpYURlY29kZUVycm9yOgorICAgICAgICBhdHlwZSA9IFdlYlBhZ2VDbGllbnQ6
Ok1lZGlhRGVjb2RlRXJyb3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxheWVyOjpN
ZWRpYU1ldGFEYXRhRXJyb3I6CisgICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFN
ZXRhRGF0YUVycm9yOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1NUlBsYXllcjo6TWVkaWFN
ZXRhRGF0YVRpbWVvdXRFcnJvcjoKKyAgICAgICAgYXR5cGUgPSBXZWJQYWdlQ2xpZW50OjpNZWRp
YU1ldGFEYXRhVGltZW91dEVycm9yOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1NUlBsYXll
cjo6TWVkaWFOb01ldGFEYXRhRXJyb3I6CisgICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6
TWVkaWFOb01ldGFEYXRhRXJyb3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxheWVy
OjpNZWRpYVZpZGVvUmVjZWl2ZUVycm9yOgorICAgICAgICBhdHlwZSA9IFdlYlBhZ2VDbGllbnQ6
Ok1lZGlhVmlkZW9SZWNlaXZlRXJyb3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxh
eWVyOjpNZWRpYUF1ZGlvUmVjZWl2ZUVycm9yOgorICAgICAgICBhdHlwZSA9IFdlYlBhZ2VDbGll
bnQ6Ok1lZGlhQXVkaW9SZWNlaXZlRXJyb3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1S
UGxheWVyOjpNZWRpYUludmFsaWRFcnJvcjoKKyAgICAgICAgYXR5cGUgPSBXZWJQYWdlQ2xpZW50
OjpNZWRpYUludmFsaWRFcnJvcjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgTE9HKE1lZGlhLCAiQWxlcnQgdHlwZSBkb2VzIG5vdCBleGlzdC4iKTsKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIH0KKworICAgIGludCByYyA9IDA7CisgICAgSFRNTE1lZGlhRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5ZXIt
Pm1lZGlhUGxheWVyQ2xpZW50KCkpOworICAgIERvY3VtZW50KiB0b3Bkb2MgPSBlbGVtZW50LT5k
b2N1bWVudCgpLT50b3BEb2N1bWVudCgpOworICAgIGlmICh0b3Bkb2MtPnZpZXcoKSAmJiB0b3Bk
b2MtPnZpZXcoKS0+aG9zdFdpbmRvdygpKQorICAgICAgICByYyA9IHRvcGRvYy0+dmlldygpLT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5zaG93QWxlcnREaWFsb2coYXR5cGUp
OworICAgIHJldHVybiByYzsKK30KKworRnJhbWVWaWV3KiBNZWRpYVBsYXllclByaXZhdGU6OmZy
YW1lVmlldygpIGNvbnN0Cit7CisgICAgLy8gV2UgcHJldmlvdXNseSB1c2VkIG1fd2ViQ29yZVBs
YXllci0+ZnJhbWVWaWV3KCksIGJ1dCB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgLy8gYSBudWxs
IGZyYW1lVmlldyB1bnRpbCBxdWl0ZSBsYXRlIGluIHRoZSBtZWRpYSBwbGF5ZXIgaW5pdGlhbGl6
YXRpb24sCisgICAgLy8gYW5kIHN0YXJ0aW5nIHF1aXRlIGVhcmx5IGluIHRoZSBtZWRpYSBwbGF5
ZXIgZGVzdHJ1Y3Rpb24gKGJlY2F1c2UKKyAgICAvLyBpdCBtYXkgYmUgc2V0IHRvIHplcm8gYnkg
dGhlIGRlc3RydWN0b3IgaW4gUmVuZGVyVmlkZW8uY3BwIGJlZm9yZQorICAgIC8vIG91ciBkZXN0
cnVjdG9yIGlzIGNhbGxlZCwgbGVhdmluZyB1cyB1bmFibGUgdG8gY2xlYW4gdXAgY2hpbGQgd2lu
ZG93cworICAgIC8vIGluIG1tckRpc2Nvbm5lY3QpLgorICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obV93ZWJDb3JlUGxheWVyLT5t
ZWRpYVBsYXllckNsaWVudCgpKTsKKyAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmll
dygpOworfQorCitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwbGF0Zm9ybVdpbmRvdygpCit7CisgICAgaWYgKGZyYW1lVmlldygpICYm
IGZyYW1lVmlldygpLT5ob3N0V2luZG93KCkpCisgICAgICAgIHJldHVybiBmcmFtZVZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+cGxhdGZvcm1XaW5kb3coKTsKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnVsbHNjcmVlbldlYlBhZ2VDbGllbnQ7Cit9CisKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3N0YXRpYyBjb25zdCBkb3VibGUgQnVm
ZmVyaW5nQW5pbWF0aW9uRGVsYXkgPSAxLjAgLyAyNDsKKworc3RhdGljIGNoYXIqIHNfYnVmZmVy
aW5nSW1hZ2VEYXRhID0gMDsKK3N0YXRpYyBpbnQgc19idWZmZXJpbmdJbWFnZVdpZHRoID0gMDsK
K3N0YXRpYyBpbnQgc19idWZmZXJpbmdJbWFnZUhlaWdodCA9IDA7CisKK1BsYXRmb3JtTWVkaWEg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sKKyAgICBQbGF0Zm9y
bU1lZGlhIHBtOworICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpRTlhNZWRpYVBsYXllclR5
cGU7CisgICAgcG0ubWVkaWEucW54TWVkaWFQbGF5ZXIgPSBjb25zdF9jYXN0PE1lZGlhUGxheWVy
UHJpdmF0ZSo+KHRoaXMpOworICAgIHJldHVybiBwbTsKK30KKworUGxhdGZvcm1MYXllciogTWVk
aWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9wbGF0
Zm9ybUxheWVyKQorICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyLmdldCgpOworICAgIHJl
dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsb2FkQnVmZmVyaW5nSW1hZ2VEYXRhKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBsb2FkZWQgPSBmYWxzZTsKKyAgICBpZiAoIWxvYWRlZCkgeworICAgICAg
ICBzdGF0aWMgSW1hZ2UqIGJ1ZmZlcmluZ0ljb24gPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoInZpZGJ1ZmZlciIpLmxlYWtSZWYoKTsKKyAgICAgICAgTmF0aXZlSW1hZ2VTa2lhKiBuYXRp
dmVJbWFnZSA9IGJ1ZmZlcmluZ0ljb24tPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cisg
ICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKCFuYXRpdmVJbWFnZS0+aXNEYXRhQ29tcGxldGUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBsb2FkZWQgPSB0cnVlOworICAgICAgICBuYXRpdmVJbWFnZS0+bG9ja1BpeGVs
cygpOworCisgICAgICAgIGludCBidWZTaXplID0gbmF0aXZlSW1hZ2UtPndpZHRoKCkgKiBuYXRp
dmVJbWFnZS0+aGVpZ2h0KCkgKiA0OworICAgICAgICBzX2J1ZmZlcmluZ0ltYWdlV2lkdGggPSBu
YXRpdmVJbWFnZS0+d2lkdGgoKTsKKyAgICAgICAgc19idWZmZXJpbmdJbWFnZUhlaWdodCA9IG5h
dGl2ZUltYWdlLT5oZWlnaHQoKTsKKyAgICAgICAgc19idWZmZXJpbmdJbWFnZURhdGEgPSBzdGF0
aWNfY2FzdDxjaGFyKj4obWFsbG9jKGJ1ZlNpemUpKTsKKyAgICAgICAgbWVtY3B5KHNfYnVmZmVy
aW5nSW1hZ2VEYXRhLCBuYXRpdmVJbWFnZS0+Z2V0UGl4ZWxzKCksIGJ1ZlNpemUpOworCisgICAg
ICAgIG5hdGl2ZUltYWdlLT51bmxvY2tQaXhlbHMoKTsKKyAgICAgICAgYnVmZmVyaW5nSWNvbi0+
ZGVyZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpidWZmZXJpbmdU
aW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQoreworICAgIGlmIChtX3Nob3dC
dWZmZXJpbmdJbWFnZSkgeworICAgICAgICBpZiAoIWlzRnVsbHNjcmVlbigpICYmIG1fcGxhdGZv
cm1MYXllcikKKyAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7
CisgICAgICAgIG1fYnVmZmVyaW5nVGltZXIuc3RhcnRPbmVTaG90KEJ1ZmZlcmluZ0FuaW1hdGlv
bkRlbGF5KTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRCdWZmZXJp
bmcoYm9vbCBidWZmZXJpbmcpCit7CisgICAgaWYgKCFoYXNWaWRlbygpKQorICAgICAgICBidWZm
ZXJpbmcgPSBmYWxzZTsgLy8gQnVmZmVyaW5nIGFuaW1hdGlvbiBub3QgdmlzaWJsZSBmb3IgYXVk
aW8KKyAgICBpZiAoYnVmZmVyaW5nICE9IG1fc2hvd0J1ZmZlcmluZ0ltYWdlKSB7CisgICAgICAg
IG1fc2hvd0J1ZmZlcmluZ0ltYWdlID0gYnVmZmVyaW5nOworICAgICAgICBpZiAoYnVmZmVyaW5n
KSB7CisgICAgICAgICAgICBsb2FkQnVmZmVyaW5nSW1hZ2VEYXRhKCk7CisgICAgICAgICAgICBt
X2J1ZmZlcmluZ1RpbWVyLnN0YXJ0T25lU2hvdChCdWZmZXJpbmdBbmltYXRpb25EZWxheSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9idWZmZXJpbmdUaW1lci5zdG9wKCk7CisKKyAg
ICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG9j
YXRlVGV4dHVyZUlkKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdGV4aWQ7CisgICAgZ2xHZW5UZXh0
dXJlcygxLCAmdGV4aWQpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4aWQp
OworICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24gcmVzaXplLgorICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICAvLyBOUE9UIHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29y
ayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdMX0NMQU1QX1RPX0VER0UuCisgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIHJldHVybiB0ZXhpZDsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OmRyYXdCdWZmZXJpbmdBbmltYXRpb24oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExv
Y2F0aW9uKQoreworICAgIGlmIChtX3Nob3dCdWZmZXJpbmdJbWFnZSAmJiBzX2J1ZmZlcmluZ0lt
YWdlRGF0YSAmJiAhaXNGdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcmVuZGVyTWF0cml4ID0gbWF0cml4OworCisgICAgICAgIC8vIHJvdGF0ZSB0aGUgYnVmZmVy
aW5nIGluZGljYXRvciBzbyB0aGF0IGl0IHRha2VzIDEgc2Vjb25kIHRvIGRvIDEgcmV2b2x1dGlv
bgorICAgICAgICB0aW1lc3BlYyB0aW1lOworICAgICAgICBjbG9ja19nZXR0aW1lKENMT0NLX1JF
QUxUSU1FLCAmdGltZSk7CisgICAgICAgIHJlbmRlck1hdHJpeC5yb3RhdGUodGltZS50dl9uc2Vj
IC8gMTAwMDAwMDAwMC4wICogMzYwLjApOworCisgICAgICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGV4SWQgPSBhbGxvY2F0
ZVRleHR1cmVJZCgpOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleElk
KTsKKyAgICAgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLypsZXZl
bCovLCBHTF9SR0JBIC8qaW50ZXJuYWwqLywKKyAgICAgICAgICAgICAgICBzX2J1ZmZlcmluZ0lt
YWdlV2lkdGgsIHNfYnVmZmVyaW5nSW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwIC8qYm9yZGVyKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHNfYnVm
ZmVyaW5nSW1hZ2VEYXRhKTsKKyAgICAgICAgICAgIGZyZWUoc19idWZmZXJpbmdJbWFnZURhdGEp
OworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgdGV4Y29vcmRzW10gPSB7IDAsIDAsICAwLCAx
LCAgMSwgMSwgIDEsIDAgfTsKKyAgICAgICAgRmxvYXRQb2ludCB2ZXJ0aWNlc1s0XTsKKyAgICAg
ICAgZmxvYXQgYnggPSBzX2J1ZmZlcmluZ0ltYWdlV2lkdGggLyAyLjA7CisgICAgICAgIGZsb2F0
IGJ5ID0gc19idWZmZXJpbmdJbWFnZUhlaWdodCAvIDIuMDsKKyAgICAgICAgdmVydGljZXNbMF0g
PSByZW5kZXJNYXRyaXgubWFwUG9pbnQoRmxvYXRQb2ludCgtYngsIC1ieSkpOworICAgICAgICB2
ZXJ0aWNlc1sxXSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50KC1ieCwgYnkpKTsK
KyAgICAgICAgdmVydGljZXNbMl0gPSByZW5kZXJNYXRyaXgubWFwUG9pbnQoRmxvYXRQb2ludChi
eCwgYnkpKTsKKyAgICAgICAgdmVydGljZXNbM10gPSByZW5kZXJNYXRyaXgubWFwUG9pbnQoRmxv
YXRQb2ludChieCwgLWJ5KSk7CisKKyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0
aW9uTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdmVydGljZXMpOworICAgICAg
ICBnbFZlcnRleEF0dHJpYlBvaW50ZXIodGV4Q29vcmRMb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVf
RkFOLCAwLCA0KTsKKyAgICB9Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVy
UHJpdmF0ZUJsYWNrQmVycnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjg1NzQ3NzVmY2E0N2E5NDUzYWZkNmZh
MzZhMDcwY2YzNTIzYmE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgKQEAg
LTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
Ly8gRklYTUU6IFRISVMgRklMRSBTSE9VTEQgUkVQTEFDRSBNZWRpYVBsYXllclByaXZhdGVNTXJl
bmRlcmVyLmggV0hFTgorLy8gUkVGQUNUT1IgQ09NUExFVEUuCisKKyNpZm5kZWYgTWVkaWFQbGF5
ZXJQcml2YXRlQmxhY2tCZXJyeV9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVy
cnlfaAorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5o
IgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTU1SUGxheWVyLmg+CisKK25hbWVzcGFj
ZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZUNsaWVudDsK
K30KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVmaW5lIFBMQVlCT09LX01JTl9BVURJ
T19FTEVNRU5UX1dJRFRIIDMwMAorI2RlZmluZSBQTEFZQk9PS19NSU5fQVVESU9fRUxFTUVOVF9I
RUlHSFQgMzIKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZSwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJTU1SUGxheWVy
TGlzdGVuZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOwor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVh
dGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1l
ZGlhRW5naW5lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZv
aWQgbm90aWZ5QXBwQWN0aXZhdGVkRXZlbnQoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0Q2Vy
dGlmaWNhdGVQYXRoKGNvbnN0IFN0cmluZyYpOworCisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29u
c3QgU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvUGxheSgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZv
aWQgZHJhd0J1ZmZlcmluZ0FuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGlu
dCBwb3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7CisjZW5kaWYKKworICAg
IHZpcnR1YWwgdm9pZCBwbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIElu
dFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIHNldFZpc2libGUoYm9vbCk7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNlZWsoZmxvYXQgdGltZSk7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKworICAgIHZpcnR1YWwg
Ym9vbCBwYXVzZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQp
OworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgp
IGNvbnN0OworCisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQXZh
aWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgIC8vIHdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGlzIHN1cHBvcnRlZCBi
eSB0aGUgbWVkaWEgZW5naW5lIGZvciB0aGUgY3VycmVudCBtZWRpYS4KKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICAvLyBjYWxsZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUgaW50byBv
ciBvdXQgb2YgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGFj
Y2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgeyB9CisjZW5kaWYKKworICAgIHZpcnR1
YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0OworCisgICAgdmlydHVhbCBN
ZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Q7CisKKyAgICB2
b2lkIHJlc2l6ZVNvdXJjZURpbWVuc2lvbnMoKTsKKyAgICB2b2lkIHNldEZ1bGxzY3JlZW5XZWJQ
YWdlQ2xpZW50KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNsaWVudCopOworICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiB3aW5kb3dHZXQoKTsKKyAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogZ2V0UGVlcldpbmRvdyhjb25zdCBj
aGFyKikgY29uc3Q7CisgICAgaW50IHdpbmRvd1Bvc2l0aW9uR2V0KHVuc2lnbmVkJiB4LCB1bnNp
Z25lZCYgeSwgdW5zaWduZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KSBjb25zdDsKKyAgICBj
b25zdCBjaGFyKiBtbXJDb250ZXh0TmFtZUdldCgpOworICAgIGZsb2F0IHBlcmNlbnRMb2FkZWQo
KTsKKyAgICB1bnNpZ25lZCBzb3VyY2VXaWR0aCgpOworICAgIHVuc2lnbmVkIHNvdXJjZUhlaWdo
dCgpOworICAgIHZvaWQgc2V0QWxsb3dQUFNWb2x1bWVVcGRhdGVzKGJvb2wpOworCisgICAgLy8g
SU1NUlBsYXllckxpc3RlbmVyIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBvblN0
YXRlQ2hhbmdlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TU1SUGxheWVyOjpNcFN0YXRlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb25NZWRpYVN0YXR1c0NoYW5nZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06
Ok1NUlBsYXllcjo6TU1SUGxheVN0YXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6TU1SUGxheWVyOjpFcnJvcik7CisgICAgdmlydHVhbCB2b2lkIG9u
RHVyYXRpb25DaGFuZ2VkKGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25UaW1lQ2hhbmdlZChm
bG9hdCk7CisgICAgdmlydHVhbCB2b2lkIG9uUmF0ZUNoYW5nZWQoZmxvYXQpOworICAgIHZpcnR1
YWwgdm9pZCBvblZvbHVtZUNoYW5nZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBvblBhdXNl
U3RhdGVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIG9uUmVwYWludCgpOworICAgIHZpcnR1
YWwgdm9pZCBvblNpemVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIG9uUGxheU5vdGlmaWVk
KCk7CisgICAgdmlydHVhbCB2b2lkIG9uUGF1c2VOb3RpZmllZCgpOworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgb25CdWZmZXJpbmcoYm9vbCk7Cisj
ZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxzY3JlZW4oKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGludCBzaG93RXJyb3JEaWFsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUlBsYXllcjo6
RXJyb3IpOworICAgIHZpcnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5k
b3cqIHBsYXRmb3JtV2luZG93KCk7Citwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZShN
ZWRpYVBsYXllciopOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSBjb25zdDsKKyAgICB2
b2lkIHVwZGF0ZVN0YXRlcygpOworICAgIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgU3RyaW5nJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXIqIG1fd2ViQ29yZVBsYXllcjsKKyAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TU1SUGxheWVyKiBtX3BsYXRmb3JtUGxheWVyOworCisg
ICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAg
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKworICAgIEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZUNsaWVudCogbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVudDsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdm9pZCBidWZmZXJpbmdUaW1lckZpcmVk
KFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKKyAgICB2b2lkIHNldEJ1ZmZlcmluZyhib29s
KTsKKworICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9idWZmZXJpbmdUaW1lcjsKKyAg
ICBSZWZQdHI8UGxhdGZvcm1MYXllcj4gbV9wbGF0Zm9ybUxheWVyOworICAgIGJvb2wgbV9zaG93
QnVmZmVyaW5nSW1hZ2U7CisgICAgYm9vbCBtX21lZGlhSXNCdWZmZXJpbmc7CisjZW5kaWYKKwor
ICAgIHZvaWQgdXNlckRyaXZlblNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0
ZT4qKTsKKyAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fdXNlckRyaXZlblNlZWtUaW1l
cjsKKyAgICBmbG9hdCBtX2xhc3RTZWVrVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKyNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZh
dGVCbGFja0JlcnJ5X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129195</attachid>
            <date>2012-02-27 23:15:56 -0800</date>
            <delta_ts>2012-03-04 05:47:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79729-20120228151553.patch</filename>
            <type>text/plain</type>
            <size>38806</size>
            <attacher name="Jonathan Dong">jonathan.dong.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc5Y2RkZmM3MGE0M2Ey
ZWU3NzgyOGVmZWY1YTJiYWI1ZGEwZmVkMC4uMGZmOTQwMDljYjQzNDhhNGQ4Y2YzYTM5MzAzNDgy
NDVhZDcwNTk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAyLTI3ICBKb25h
dGhhbiBEb25nICA8am9uYXRoYW4uZG9uZ0B0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAg
W0JsYWNrQmVycnldIHVwc3RyZWFtIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuW2NwcHxo
XQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3MjkK
KworICAgICAgICBSZXZpZXdlZCBieSBSb2IgQnVpcy4KKworICAgICAgICBJbXBsZW1lbnRhdGlv
biBvZiBNZWRpYVBsYXllclByaXZhdGUgZm9yIEJsYWNrQmVycnkgcG9ydGluZy4KKyAgICAgICAg
SW5pdGlhbCB1cHN0cmVhbSwgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogUGxhdGZvcm1CbGFj
a0JlcnJ5LmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVk
aWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om5vdGlmeUFwcEFjdGl2YXRlZEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Q2VydGlmaWNhdGVQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxh
eWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmxvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cHJlcGFyZVRvUGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNl
dFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnVzZXJEcml2ZW5TZWVrVGltZXJGaXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6bmV0d29ya1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1h
eFRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmJ1
ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2Fk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dXNlckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVzaXplU291cmNlRGltZW5zaW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldEZ1bGxzY3JlZW5XZWJQ
YWdlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6d2luZG93
R2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0UGVlcldpbmRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OndpbmRvd1Bvc2l0aW9u
R2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bW1yQ29udGV4dE5h
bWVHZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwZXJjZW50TG9h
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c291cmNlV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzb3VyY2VIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRBbGxvd1BQU1ZvbHVtZVVw
ZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvblN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uTWVkaWFTdGF0dXND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25FcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uRHVyYXRpb25DaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25UaW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uUGF1c2VTdGF0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvblJhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25Wb2x1bWVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25SZXBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25TaXplQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uUGxheU5vdGlmaWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25QYXVzZU5vdGlmaWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25CdWZmZXJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzaG93RXJyb3JEaWFsb2cpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpmcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybVdpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRC
dWZmZXJpbmdJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpidWZmZXJpbmdUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6c2V0QnVmZmVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFsbG9jYXRlVGV4dHVyZUlk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHJhd0J1ZmZlcmluZ0Fu
aW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBs
YXllclByaXZhdGVCbGFja0JlcnJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmFjY2VsZXJhdGVkUmVuZGVy
aW5nU3RhdGVDaGFuZ2VkKToKKwogMjAxMi0wMi0yNyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVuYW1lIHJlc29sdmUtc3VwcGxlbWVudGFsLnBsIHRv
IHByZXByb2Nlc3MtaWRscy5wbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtl
CmluZGV4IDAxNzU1YTg4ZjQ4NDU3ZTcyOTY4M2UwMWMxZWIxNzcyYTZkZDMzNjAuLjNiZWM0ZWJi
ZDJmNjk2YzIyNTA4ODY0ZjU2Zjc5Y2FlYzZiNGM0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUJsYWNrQmVycnkuY21ha2UKQEAgLTE3MCw4ICsxNzAsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFBvaW50QmxhY2tC
ZXJyeS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0ludFJlY3RCbGFja0Jl
cnJ5LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvSW50U2l6ZUJsYWNrQmVy
cnkuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NTXJlbmRlcmVyLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlTU1yZW5k
ZXJlci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJp
dmF0ZUJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0cmluZ0Js
YWNrQmVycnkuY3BwCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0
ZUJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3YTMwOGE1NGM2ZTRlM2IyMDlhMjhjYmU4ZGZi
YjhlYTc4Y2U1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwCkBAIC0w
LDAgKzEsODEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVCbGFja0JlcnJ5LmgiCisKKyNpbmNsdWRlICJDb29raWVNYW5hZ2VyLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlJl
bmRlckJveC5oIgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlQ2xp
ZW50LmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1DbGllbnQuaD4KKyNpbmNsdWRl
IDxzZXQ+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJOYXRpdmVJbWFn
ZVNraWEuaCIKKyNpbmNsdWRlICJWaWRlb0xheWVyV2ViS2l0VGhyZWFkLmgiCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVz
cGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gU3RhdGljIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgZmFjdG9y
eQorUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IE1lZGlhUGxheWVyUHJp
dmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKSk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3Ry
YXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVz
LCBzdXBwb3J0c1R5cGUsIDAsIDAsIDApOworfQorCisvLyBzdGF0aWMKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQorewor
ICAgIHNldDxzdHJpbmc+IHN1cHBvcnRlZCA9IE1NUlBsYXllcjo6YWxsU3VwcG9ydGVkTWltZVR5
cGVzKCk7CisgICAgc2V0PHN0cmluZz46Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWQuYmVnaW4oKTsK
KyAgICBmb3IgKDsgaSAhPSBzdXBwb3J0ZWQuZW5kKCk7IGkrKykKKyAgICAgICAgdHlwZXMuYWRk
KGktPmNfc3RyKCkpOworfQorCisvLyBzdGF0aWMKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICBpZiAodHlwZS5pc051bGwoKSB8fCB0eXBlLmlzRW1w
dHkoKSkgeworICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllciBkb2VzIG5vdCBzdXBwb3J0
IHR5cGU7IHR5cGUgaXMgbnVsbCBvciBlbXB0eS4iKTsKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyOjpJc05vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICAvLyBzcGVjIHNheXMgd2Ugc2hvdWxk
IG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eQorICAg
IGlmIChNTVJQbGF5ZXI6Om1pbWVUeXBlU3VwcG9ydGVkKHR5cGUuYXNjaWkoKS5kYXRhKCkpKSB7
CisgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyIHN1cHBvcnRzIHR5cGU7IGNhY2hlIGNv
bnRhaW5zIHR5cGUgJyVzJy4iLCB0eXBlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IGNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBs
YXllcjo6SXNTdXBwb3J0ZWQ7CisgICAgfQorICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyIGRv
ZXMgbm90IHN1cHBvcnQgdHlwZTsgY2FjaGUgZG9lc24ndCBjb250YWluIHR5cGUgJyVzJy4iLCB0
eXBlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9y
dGVkOworfQorCisvLyBzdGF0aWMKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpub3RpZnlBcHBB
Y3RpdmF0ZWRFdmVudChib29sIGFjdGl2YXRlZCkKK3sKKyAgICBNTVJQbGF5ZXI6Om5vdGlmeUFw
cEFjdGl2YXRlZEV2ZW50KGFjdGl2YXRlZCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldENlcnRpZmljYXRlUGF0aChjb25zdCBTdHJpbmcmIGNhUGF0aCkKK3sK
KyAgICBNTVJQbGF5ZXI6OnNldENlcnRpZmljYXRlUGF0aChzdHJpbmcoY2FQYXRoLnV0ZjgoKS5k
YXRhKCkpKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK01lZGlhUGxheWVyUHJpdmF0ZTo6
TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3dlYkNvcmVQ
bGF5ZXIocGxheWVyKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAsIG1f
cGxhdGZvcm1QbGF5ZXIobmV3IE1NUlBsYXllcih0aGlzLCB0cnVlKSkKKyNlbHNlCisgICAgLCBt
X3BsYXRmb3JtUGxheWVyKG5ldyBNTVJQbGF5ZXIodGhpcywgZmFsc2UpKQorI2VuZGlmCisgICAg
LCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5U3RhdGUo
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVu
dCgwKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAsIG1fYnVmZmVyaW5n
VGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyaW5nVGltZXJGaXJlZCkKKyAg
ICAsIG1fc2hvd0J1ZmZlcmluZ0ltYWdlKGZhbHNlKQorICAgICwgbV9tZWRpYUlzQnVmZmVyaW5n
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3VzZXJEcml2ZW5TZWVrVGltZXIodGhpcywgJk1lZGlh
UGxheWVyUHJpdmF0ZTo6dXNlckRyaXZlblNlZWtUaW1lckZpcmVkKQorICAgICwgbV9sYXN0U2Vl
a1RpbWUoMCkKK3sKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRl
KCkKK3sKKyAgICBpZiAoaXNGdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5
ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOworICAgICAgICBlbGVtZW50LT5leGl0RnVsbHNjcmVl
bigpOworICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gUmVt
b3ZlIG1lZGlhIHBsYXllciBmcm9tIHBsYXRmb3JtIGxheWVyLgorICAgIGlmIChtX3BsYXRmb3Jt
TGF5ZXIpCisgICAgICAgIHN0YXRpY19jYXN0PFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQqPihtX3Bs
YXRmb3JtTGF5ZXIuZ2V0KCkpLT5zZXRNZWRpYVBsYXllcigwKTsKKyNlbmRpZgorCisgICAgZGVs
ZXRlIG1fcGxhdGZvcm1QbGF5ZXI7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2Fk
KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFN0cmluZyBtb2RpZmllZFVybCh1cmwpOworCisg
ICAgaWYgKG1vZGlmaWVkVXJsLnN0YXJ0c1dpdGgoImxvY2FsOi8vIikpIHsKKyAgICAgICAgS1VS
TCBrdXJsID0gS1VSTChLVVJMKCksIG1vZGlmaWVkVXJsKTsKKyAgICAgICAga3VybC5zZXRQcm90
b2NvbCgiZmlsZSIpOworICAgICAgICBTdHJpbmcgdGVtcFBhdGgoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkNsaWVudDo6Z2V0KCktPmdldEFwcGxpY2F0aW9uTG9jYWxEaXJlY3RvcnkoKS5jX3N0cigp
KTsKKyAgICAgICAgdGVtcFBhdGguYXBwZW5kKGt1cmwucGF0aCgpKTsKKyAgICAgICAga3VybC5z
ZXRQYXRoKHRlbXBQYXRoKTsKKyAgICAgICAgbW9kaWZpZWRVcmwgPSBrdXJsLnN0cmluZygpOwor
ICAgIH0KKyAgICBpZiAobW9kaWZpZWRVcmwuc3RhcnRzV2l0aCgiZmlsZTovLyIpKSB7CisgICAg
ICAgIC8vIFRoZSBRTlggTXVsdGltZWRpYSBGcmFtZXdvcmsgY2Fubm90IGhhbmRsZSBmaWxlbmFt
ZXMgY29udGFpbmluZyBVUkwgZXNjYXBlIHNlcXVlbmNlcy4KKyAgICAgICAgbW9kaWZpZWRVcmwg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobW9kaWZpZWRVcmwpOworICAgIH0KKworICAgIFN0
cmluZyBjb29raWVQYWlyczsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvb2tp
ZVBhaXJzID0gY29va2llTWFuYWdlcigpLmdldENvb2tpZShLVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsLnV0ZjgoKS5kYXRhKCkpLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKKyAgICBpZiAoIWNvb2tp
ZVBhaXJzLmlzRW1wdHkoKSAmJiBjb29raWVQYWlycy51dGY4KCkuZGF0YSgpKQorICAgICAgICBt
X3BsYXRmb3JtUGxheWVyLT5sb2FkKG1vZGlmaWVkVXJsLnV0ZjgoKS5kYXRhKCksIHVzZXJBZ2Vu
dChtb2RpZmllZFVybCkudXRmOCgpLmRhdGEoKSwgY29va2llUGFpcnMudXRmOCgpLmRhdGEoKSk7
CisgICAgZWxzZQorICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5sb2FkKG1vZGlmaWVkVXJsLnV0
ZjgoKS5kYXRhKCksIHVzZXJBZ2VudChtb2RpZmllZFVybCkudXRmOCgpLmRhdGEoKSwgMCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKK3sKKyAgICBtX3BsYXRm
b3JtUGxheWVyLT5jYW5jZWxMb2FkKCk7Cit9CisKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnByZXBhcmVUb1BsYXkoKQoreworICAgIG1fcGxhdGZvcm1QbGF5ZXItPnByZXBhcmVUb1BsYXko
KTsKK30KKworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit7CisgICAgbV9wbGF0
Zm9ybVBsYXllci0+cGxheSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2Uo
KQoreworICAgIG1fcGxhdGZvcm1QbGF5ZXItPnBhdXNlKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAoreworICAgIHJldHVybiB0cnVl
OworfQorCitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAor
eworICAgIC8vIENhbm5vdCByZXR1cm4gZW1wdHkgc2l6ZSwgb3RoZXJ3aXNlIHBhaW50KCkgd2ls
bCBuZXZlciBnZXQgY2FsbGVkLgorICAgIC8vIEFsc28sIHRoZSB2YWx1ZXMgaGVyZSB3aWxsIGFm
ZmVjdCB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBvdXRwdXQgcmVjdGFuZ2xlIHRoYXQgd2lsbAor
ICAgIC8vIGJlIHVzZWQgZm9yIHJlbmRlcmVyaW5nIHRoZSB2aWRlbywgc28gd2UgbXVzdCB0YWtl
IFBBUiBpbnRvIGFjY291bnQuCisgICAgLy8gTm93LCBob3BlIHRoYXQgbWV0YWRhdGEgaGFzIGJl
ZW4gcHJvdmlkZWQgYmVmb3JlIHRoaXMgZ2V0cyBjYWxsZWQgaWYgdGhpcyBpcyBhIHZpZGVvLgor
ICAgIGRvdWJsZSBwaXhlbFdpZHRoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3BsYXRmb3JtUGxh
eWVyLT5waXhlbFdpZHRoKCkpOworICAgIGRvdWJsZSBwaXhlbEhlaWdodCA9IHN0YXRpY19jYXN0
PGRvdWJsZT4obV9wbGF0Zm9ybVBsYXllci0+cGl4ZWxIZWlnaHQoKSk7CisgICAgaWYgKCFtX3Bs
YXRmb3JtUGxheWVyLT5waXhlbFdpZHRoKCkgfHwgIW1fcGxhdGZvcm1QbGF5ZXItPnBpeGVsSGVp
Z2h0KCkpCisgICAgICAgIHBpeGVsV2lkdGggPSBwaXhlbEhlaWdodCA9IDEuMDsKKworICAgIC8v
IFVzZSBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIHRvIGVsaW1pbmF0ZSB0aGUgY2hhbmNlIG9m
IGludGVnZXIKKyAgICAvLyBvdmVyZmxvdy4gUEFSIG51bWJlcnMgY2FuIGJlIDUgZGlnaXRzIG9y
IG1vcmUuCisgICAgZG91YmxlIGFkanVzdGVkU291cmNlV2lkdGggPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1fcGxhdGZvcm1QbGF5ZXItPnNvdXJjZVdpZHRoKCkpICogcGl4ZWxXaWR0aCAvIHBpeGVs
SGVpZ2h0OworICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWRTb3Vy
Y2VXaWR0aCArIDAuNSksIG1fcGxhdGZvcm1QbGF5ZXItPnNvdXJjZUhlaWdodCgpKTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF0Zm9ybVBsYXllci0+aGFzVmlkZW8oKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGU6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+aGFz
QXVkaW8oKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6
OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+ZHVyYXRp
b24oKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjdXJyZW50VGltZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdXNlckRyaXZlblNlZWtUaW1lci5pc0FjdGl2ZSgpID8gbV9sYXN0
U2Vla1RpbWU6IG1fcGxhdGZvcm1QbGF5ZXItPmN1cnJlbnRUaW1lKCk7Cit9CisKK3N0YXRpYyBj
b25zdCBkb3VibGUgU2Vla1N1Ym1pc3Npb25EZWxheSA9IDAuMTsgLy8gUmVhc29uYWJsZSB0aHJv
dHRsaW5nIHZhbHVlLgorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0aW1l
KQoreworICAgIG1fbGFzdFNlZWtUaW1lID0gdGltZTsKKyAgICBpZiAoIW1fdXNlckRyaXZlblNl
ZWtUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3VzZXJEcml2ZW5TZWVrVGltZXIuc3RhcnRP
bmVTaG90KFNlZWtTdWJtaXNzaW9uRGVsYXkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6dXNlckRyaXZlblNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQor
eworICAgIG1fcGxhdGZvcm1QbGF5ZXItPnNlZWsobV9sYXN0U2Vla1RpbWUpOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQorewor
ICAgIG1fcGxhdGZvcm1QbGF5ZXItPnNldFJhdGUocmF0ZSk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlOjpwYXVzZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVy
LT5wYXVzZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZShmbG9h
dCB2b2x1bWUpCit7CisgICAgbV9wbGF0Zm9ybVBsYXllci0+c2V0Vm9sdW1lKHZvbHVtZSk7Cit9
CisKK01lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3Jr
U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZh
dGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5
ZXItPm1heFRpbWVTZWVrYWJsZSgpOworfQorCitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlh
UGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAoreworICAgIFJlZlB0cjxUaW1lUmFuZ2Vz
PiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CisgICAgaWYgKGZsb2F0IGJ1ZmZl
ckxvYWRlZCA9IG1fcGxhdGZvcm1QbGF5ZXItPmJ1ZmZlckxvYWRlZCgpKQorICAgICAgICB0aW1l
UmFuZ2VzLT5hZGQoMCwgYnVmZmVyTG9hZGVkKTsKKyAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxl
YXNlKCk7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRTaXplKGNvbnN0IEludFNpemUmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIE9ubHkgcHJvY2VzcyBwYWludCBjYWxscyBjb21p
bmcgdmlhIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBjb2RlCisgICAgLy8gcGF0aCwgd2hl
cmUgd2UgZ2V0IGNhbGxlZCB3aXRoIGEgbnVsbCBncmFwaGljcyBjb250ZXh0LiBTZWUKKyAgICAv
LyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpkcmF3VGV4dHVyZXMoKS4gSWdub3JlIGNhbGxzIGZy
b20gdGhlIHJlZ3VsYXIKKyAgICAvLyByZW5kZXJpbmcgcGF0aC4KKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXItPm5vdGlmeU91dHB1dFVwZGF0ZShCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6SW50UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkpOworICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgaWYgKCFoYXNWaWRlbygp
IHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhbV93ZWJDb3JlUGxheWVyLT52aXNp
YmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEFTU0VSVChncmFwaGlj
cyk7CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCBwbGF0Zm9ybVJlY3QocmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIEludFJl
Y3QgY2xpcHBlZFJlY3QgPSBmcmFtZVZpZXcoKS0+d2luZG93Q2xpcFJlY3QoKTsKKyAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCBwbGF0Zm9ybVdpbmRvd0NsaXBSZWN0KGNsaXBwZWRS
ZWN0LngoKSwgY2xpcHBlZFJlY3QueSgpLCBjbGlwcGVkUmVjdC53aWR0aCgpLCBjbGlwcGVkUmVj
dC5oZWlnaHQoKSk7CisgICAgbV9wbGF0Zm9ybVBsYXllci0+cGFpbnQoZ3JhcGhpY3MtPmNhbnZh
cygpLCBwbGF0Zm9ybVJlY3QsIHBsYXRmb3JtV2luZG93Q2xpcFJlY3QpOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPmhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK01lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVMb2FkVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlPihtX3BsYXRmb3JtUGxheWVyLT5t
b3ZpZUxvYWRUeXBlKCkpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVzZXIg
YWdlbnQgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUKKy8vIGZyYW1lIGxvYWRlciBjbGllbnQg
b2Ygb3VyIEhUTUxNZWRpYUVsZW1lbnQuIFRoZSBjYWxsIGJlbG93IHdpbGwKKy8vIGVuZCB1cCBp
biBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OnVzZXJBZ2VudCgpLgorU3RyaW5nIE1lZGlh
UGxheWVyUHJpdmF0ZTo6dXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAg
IEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50
Kj4obV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpKTsKKyAgICBEb2N1bWVudCog
dG9wZG9jID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+dG9wRG9jdW1lbnQoKTsKKyAgICBBU1NFUlQo
dG9wZG9jLT5mcmFtZSgpKTsKKyAgICBBU1NFUlQodG9wZG9jLT5mcmFtZSgpLT5sb2FkZXIoKSk7
CisgICAgaWYgKHRvcGRvYy0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHRvcGRvYy0+ZnJhbWUo
KS0+bG9hZGVyKCktPnVzZXJBZ2VudChLVVJMKEtVUkwoKSwgdXJsKSk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVzaXplU291cmNlRGltZW5z
aW9ucygpCit7CisgICAgaWYgKCFtX3dlYkNvcmVQbGF5ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEhUTUxNZWRpYUVsZW1lbnQqIGNsaWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1l
bnQqPihtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOworCisgICAgLy8gSWYg
d2UgaGF2ZSBhbiBIVE1MVmlkZW9FbGVtZW50IGJ1dCB0aGUgc291cmNlIGhhcyBubyB2aWRlbywg
dGhlbiB3ZSBuZWVkIHRvIHJlc2l6ZSB0aGUgbWVkaWEgZWxlbWVudC4KKyAgICBpZiAoY2xpZW50
ICYmIGNsaWVudC0+aXNWaWRlbygpICYmICFoYXNWaWRlbygpKSB7CisgICAgICAgIGlmIChSZW5k
ZXJPYmplY3QqIHJvID0gY2xpZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBJbnRSZWN0
IHJlY3QgPSByby0+ZW5jbG9zaW5nQm94KCktPmNvbnRlbnRCb3hSZWN0KCk7CisKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGxheWJvb2tNaW5BdWRpb0VsZW1lbnRXaWR0aCA9IDMwMDsK
KyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGxheWJvb2tNaW5BdWRpb0VsZW1lbnRIZWln
aHQgPSAzMjsKKyAgICAgICAgICAgIC8vIElmIHRoZSByZWN0IGRpbWVuc2lvbnMgYXJlIGxlc3Mg
dGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtLCB1c2UgdGhlIG1pbmltdW0gaW5zdGVhZC4KKyAgICAg
ICAgICAgIGludCBuZXdXaWR0aCA9IG1heChyZWN0LndpZHRoKCksIHBsYXlib29rTWluQXVkaW9F
bGVtZW50V2lkdGgpOworICAgICAgICAgICAgaW50IG5ld0hlaWdodCA9IG1heChyZWN0LmhlaWdo
dCgpLCBwbGF5Ym9va01pbkF1ZGlvRWxlbWVudEhlaWdodCk7CisKKyAgICAgICAgICAgIGNoYXIg
YXR0clN0cmluZ1sxMl07CisKKyAgICAgICAgICAgIHNwcmludGYoYXR0clN0cmluZywgIiVkIiwg
bmV3V2lkdGgpOworICAgICAgICAgICAgY2xpZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp3
aWR0aEF0dHIsIGF0dHJTdHJpbmcpOworCisgICAgICAgICAgICBzcHJpbnRmKGF0dHJTdHJpbmcs
ICIlZCIsIG5ld0hlaWdodCk7CisgICAgICAgICAgICBjbGllbnQtPnNldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhlaWdodEF0dHIsIGF0dHJTdHJpbmcpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB2aWRl
byBzb3VyY2UgaXMsIHRoZW4gd2UgbmVlZCB0byBzZXQgaXQgdG8gc29tZXRoaW5nIHNhbmUuCisg
ICAgaWYgKGNsaWVudCAmJiBjbGllbnQtPmlzVmlkZW8oKSAmJiAhKG1fcGxhdGZvcm1QbGF5ZXIt
PnNvdXJjZVdpZHRoKCkgJiYgbV9wbGF0Zm9ybVBsYXllci0+c291cmNlSGVpZ2h0KCkpKSB7Cisg
ICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJvID0gY2xpZW50LT5yZW5kZXJlcigpKSB7CisgICAg
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByby0+ZW5jbG9zaW5nQm94KCktPmNvbnRlbnRCb3hSZWN0
KCk7CisgICAgICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5zZXRTb3VyY2VEaW1lbnNpb24ocmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnNldEZ1bGxzY3JlZW5XZWJQYWdlQ2xpZW50KEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZUNsaWVudCogY2xpZW50KQoreworICAgIGlmIChtX2Z1bGxzY3JlZW5X
ZWJQYWdlQ2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mdWxsc2Ny
ZWVuV2ViUGFnZUNsaWVudCA9IGNsaWVudDsKKyAgICBtX3BsYXRmb3JtUGxheWVyLT50b2dnbGVG
dWxsc2NyZWVuKGNsaWVudCk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIHJlcGFpbnQgaXMgbmVl
ZGVkIGVzcGVjaWFsbHkgaWYgdmlkZW8gaXMgcGF1c2VkIGFuZAorICAgIC8vIGZ1bGxzY3JlZW4g
aXMgZXhpdGluZywgc28gdGhhdCBhIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoKSBpcworICAg
IC8vIHRyaWdnZXJlZCBhbmQgdGhlIGNvZGUgaW4gb3V0cHV0VXBkYXRlKCkgc2V0cyB0aGUgY29y
cmVjdCB3aW5kb3cKKyAgICAvLyByZWN0YW5nbGUuCisgICAgaWYgKCFjbGllbnQpCisgICAgICAg
IG1fd2ViQ29yZVBsYXllci0+cmVwYWludCgpOworfQorCitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OldpbmRvdyogTWVkaWFQbGF5ZXJQcml2YXRlOjp3aW5kb3dHZXQoKQoreworICAg
IHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT53aW5kb3dHZXQoKTsKK30KKworQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kb3cqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0UGVlcldp
bmRvdyhjb25zdCBjaGFyKiB1bmlxdWVJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9y
bVBsYXllci0+Z2V0UGVlcldpbmRvdyh1bmlxdWVJRCk7Cit9CisKK2ludCBNZWRpYVBsYXllclBy
aXZhdGU6OndpbmRvd1Bvc2l0aW9uR2V0KHVuc2lnbmVkJiB4LCB1bnNpZ25lZCYgeSwgdW5zaWdu
ZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRm
b3JtUGxheWVyLT53aW5kb3dQb3NpdGlvbkdldCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwor
Y29uc3QgY2hhciogTWVkaWFQbGF5ZXJQcml2YXRlOjptbXJDb250ZXh0TmFtZUdldCgpCit7Cisg
ICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPm1tckNvbnRleHROYW1lR2V0KCk7Cit9CisKK2Zs
b2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6cGVyY2VudExvYWRlZCgpCit7CisgICAgaWYgKCFtX3Bs
YXRmb3JtUGxheWVyLT5kdXJhdGlvbigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0
IGJ1ZmZlcmVkID0gMDsKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IHRoaXMt
PmJ1ZmZlcmVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMtPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOwor
ICAgICAgICBmbG9hdCBzdGFydCA9IHRpbWVSYW5nZXMtPnN0YXJ0KGksIGlnbm9yZWRFeGNlcHRp
b24pOworICAgICAgICBmbG9hdCBlbmQgPSB0aW1lUmFuZ2VzLT5lbmQoaSwgaWdub3JlZEV4Y2Vw
dGlvbik7CisgICAgICAgIGJ1ZmZlcmVkICs9IGVuZCAtIHN0YXJ0OworICAgIH0KKworICAgIGZs
b2F0IGxvYWRlZCA9IGJ1ZmZlcmVkIC8gbV9wbGF0Zm9ybVBsYXllci0+ZHVyYXRpb24oKTsKKyAg
ICByZXR1cm4gbG9hZGVkOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnNvdXJj
ZVdpZHRoKCkKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKTsK
K30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzb3VyY2VIZWlnaHQoKQoreworICAg
IHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5zb3VyY2VIZWlnaHQoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnNldEFsbG93UFBTVm9sdW1lVXBkYXRlcyhib29sIGFsbG93KQorewor
ICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5zZXRBbGxvd1BQU1ZvbHVtZVVwZGF0ZXMoYWxs
b3cpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sKKyAg
ICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0
YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5
U3RhdGU7CisKKyAgICBNTVJQbGF5ZXI6OkVycm9yIGN1cnJlbnRFcnJvciA9IG1fcGxhdGZvcm1Q
bGF5ZXItPmVycm9yKCk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGll
bnQoKSk7CisKKyAgICBpZiAoY3VycmVudEVycm9yICE9IE1NUlBsYXllcjo6TWVkaWFPSykgewor
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAg
IGlmIChjdXJyZW50RXJyb3IgPT0gTU1SUGxheWVyOjpNZWRpYURlY29kZUVycm9yKQorICAgICAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RGVjb2RlRXJyb3I7CisgICAgICAg
IGVsc2UgaWYgKGN1cnJlbnRFcnJvciA9PSBNTVJQbGF5ZXI6Ok1lZGlhTWV0YURhdGFFcnJvcgor
ICAgICAgICAgICAgfHwgY3VycmVudEVycm9yID09IE1NUlBsYXllcjo6TWVkaWFBdWRpb1JlY2Vp
dmVFcnJvcgorICAgICAgICAgICAgfHwgY3VycmVudEVycm9yID09IE1NUlBsYXllcjo6TWVkaWFW
aWRlb1JlY2VpdmVFcnJvcikKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKG1fcGxhdGZv
cm1QbGF5ZXItPm1lZGlhU3RhdGUoKSkgeworICAgICAgICBjYXNlIE1NUlBsYXllcjo6TU1SUGxh
eVN0YXRlSWRsZToKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Oklk
bGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNTVJQbGF5ZXI6Ok1NUlBsYXlT
dGF0ZVBsYXlpbmc6CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpM
b2FkaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU1SUGxheWVyOjpNTVJQ
bGF5U3RhdGVTdG9wcGVkOgorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6SWRsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1NUlBsYXllcjo6TU1S
UGxheVN0YXRlVW5rbm93bjoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChtX3BsYXRmb3JtUGxheWVyLT5zdGF0ZSgpKSB7
CisgICAgICAgIGNhc2UgTU1SUGxheWVyOjpNUF9TVEFURV9JRExFOgorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgIHNldEJ1ZmZlcmluZyhmYWxzZSk7CisgICAg
ICAgICAgICBtX21lZGlhSXNCdWZmZXJpbmcgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAg
aWYgKGlzRnVsbHNjcmVlbigpKQorICAgICAgICAgICAgICAgIGVsZW1lbnQtPmV4aXRGdWxsc2Ny
ZWVuKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNTVJQbGF5ZXI6Ok1QX1NU
QVRFX0FDVElWRToKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICAg
ICBtX3Nob3dCdWZmZXJpbmdJbWFnZSA9IGZhbHNlOworICAgICAgICAgICAgbV9tZWRpYUlzQnVm
ZmVyaW5nID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1NUlBsYXllcjo6TVBfU1RBVEVfVU5TVVBQT1JURUQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm
ICgoZHVyYXRpb24oKSB8fCBtb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJl
YW0pCisgICAgICAgICAgICAmJiBtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91
Z2hEYXRhKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91
Z2hEYXRhOworICAgIH0KKworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkg
eworICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICAvLyBDcmVhdGUgcGxhdGZvcm0gbGF5
ZXIgZm9yIHZpZGVvLgorICAgICAgICBpZiAoIW1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgICAg
IG1fcGxhdGZvcm1MYXllciA9IFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZShtX3dlYkNv
cmVQbGF5ZXIpOworI2VuZGlmCisgICAgfQorICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGRO
ZXR3b3JrU3RhdGUpCisgICAgICAgIG1fd2ViQ29yZVBsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdl
ZCgpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIElNTVJQbGF5ZXJMaXN0ZW5lciBjYWxsYmFja3MgaW1w
bGVtZW50YXRpb24KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblN0YXRlQ2hhbmdlZChNTVJQ
bGF5ZXI6Ok1wU3RhdGUpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpvbk1lZGlhU3RhdHVzQ2hhbmdlZChNTVJQbGF5ZXI6Ok1NUlBsYXlTdGF0
ZSkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
Om9uRXJyb3IoTU1SUGxheWVyOjpFcnJvciB0eXBlKQoreworICAgIHVwZGF0ZVN0YXRlcygpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25EdXJhdGlvbkNoYW5nZWQoZmxvYXQgZHVy
YXRpb24pCit7CisgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgbV93ZWJDb3JlUGxheWVyLT5kdXJh
dGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uVGltZUNoYW5n
ZWQoZmxvYXQpCit7CisgICAgbV93ZWJDb3JlUGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25QYXVzZVN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYg
KCFpc0Z1bGxzY3JlZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSFRNTE1lZGlhRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5
ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOworICAgIC8vIFBhdXNlZCBzdGF0ZSBjaGFuZ2Ugbm90
IGR1ZSB0byBsb2NhbCBjb250cm9sbGVyLgorICAgIGlmIChtX3BsYXRmb3JtUGxheWVyLT5pc1Bh
dXNlZCgpKQorICAgICAgICBlbGVtZW50LT5wYXVzZSgpOworICAgIGVsc2UgeworICAgICAgICAv
LyBUaGUgSE1JIGZ1bGxzY3JlZW4gd2lkZ2V0IGhhcyByZXN1bWVkIHBsYXkuIENoZWNrIGlmIHRo
ZQorICAgICAgICAvLyBwYXVzZSB0aW1lb3V0IG9jY3VycmVkLgorICAgICAgICBtX3BsYXRmb3Jt
UGxheWVyLT5wcm9jZXNzUGF1c2VUaW1lb3V0SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgZWxlbWVu
dC0+cGxheSgpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uUmF0ZUNo
YW5nZWQoZmxvYXQpCit7CisgICAgbV93ZWJDb3JlUGxheWVyLT5yYXRlQ2hhbmdlZCgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25Wb2x1bWVDaGFuZ2VkKGZsb2F0IHZvbHVtZSkK
K3sKKyAgICBtX3dlYkNvcmVQbGF5ZXItPnZvbHVtZUNoYW5nZWQodm9sdW1lKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6Om9uUmVwYWludCgpCit7CisgICAgbV93ZWJDb3JlUGxheWVy
LT5yZXBhaW50KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblNpemVDaGFuZ2Vk
KCkKK3sKKyAgICByZXNpemVTb3VyY2VEaW1lbnNpb25zKCk7CisgICAgaWYgKGhhc1ZpZGVvKCkp
CisgICAgICAgIG1fd2ViQ29yZVBsYXllci0+c2l6ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6Om9uUGxheU5vdGlmaWVkKCkKK3sKKyAgICBpZiAoSFRNTE1lZGlhRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQ
bGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpKQorICAgICAgICBlbGVtZW50LT5wbGF5KCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblBhdXNlTm90aWZpZWQoKQoreworICAgIGlm
IChIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVu
dCo+KG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSkpCisgICAgICAgIGVsZW1l
bnQtPnBhdXNlKCk7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6b25CdWZmZXJpbmcoYm9vbCBmbGFnKQoreworICAgIHNldEJ1
ZmZlcmluZyhmbGFnKTsKK30KKyNlbmRpZgorCitpbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzaG93
RXJyb3JEaWFsb2coTU1SUGxheWVyOjpFcnJvciB0eXBlKQoreworICAgIHVzaW5nIG5hbWVzcGFj
ZSBCbGFja0JlcnJ5OjpXZWJLaXQ7CisKKyAgICBXZWJQYWdlQ2xpZW50OjpBbGVydFR5cGUgYXR5
cGU7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNTVJQbGF5ZXI6Ok1lZGlhT0s6Cisg
ICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFPSzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNTVJQbGF5ZXI6Ok1lZGlhRGVjb2RlRXJyb3I6CisgICAgICAgIGF0eXBlID0gV2Vi
UGFnZUNsaWVudDo6TWVkaWFEZWNvZGVFcnJvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
TVJQbGF5ZXI6Ok1lZGlhTWV0YURhdGFFcnJvcjoKKyAgICAgICAgYXR5cGUgPSBXZWJQYWdlQ2xp
ZW50OjpNZWRpYU1ldGFEYXRhRXJyb3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxh
eWVyOjpNZWRpYU1ldGFEYXRhVGltZW91dEVycm9yOgorICAgICAgICBhdHlwZSA9IFdlYlBhZ2VD
bGllbnQ6Ok1lZGlhTWV0YURhdGFUaW1lb3V0RXJyb3I7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTU1SUGxheWVyOjpNZWRpYU5vTWV0YURhdGFFcnJvcjoKKyAgICAgICAgYXR5cGUgPSBXZWJQ
YWdlQ2xpZW50OjpNZWRpYU5vTWV0YURhdGFFcnJvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNTVJQbGF5ZXI6Ok1lZGlhVmlkZW9SZWNlaXZlRXJyb3I6CisgICAgICAgIGF0eXBlID0gV2Vi
UGFnZUNsaWVudDo6TWVkaWFWaWRlb1JlY2VpdmVFcnJvcjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNTVJQbGF5ZXI6Ok1lZGlhQXVkaW9SZWNlaXZlRXJyb3I6CisgICAgICAgIGF0eXBlID0g
V2ViUGFnZUNsaWVudDo6TWVkaWFBdWRpb1JlY2VpdmVFcnJvcjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNTVJQbGF5ZXI6Ok1lZGlhSW52YWxpZEVycm9yOgorICAgICAgICBhdHlwZSA9IFdl
YlBhZ2VDbGllbnQ6Ok1lZGlhSW52YWxpZEVycm9yOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBMT0coTWVkaWEsICJBbGVydCB0eXBlIGRvZXMgbm90IGV4aXN0LiIpOwor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaW50IHJjID0gMDsKKyAgICBIVE1MTWVk
aWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1fd2Vi
Q29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisgICAgRG9jdW1lbnQqIHRvcGRvYyA9
IGVsZW1lbnQtPmRvY3VtZW50KCktPnRvcERvY3VtZW50KCk7CisgICAgaWYgKHRvcGRvYy0+dmll
dygpICYmIHRvcGRvYy0+dmlldygpLT5ob3N0V2luZG93KCkpCisgICAgICAgIHJjID0gdG9wZG9j
LT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPnNob3dBbGVydERp
YWxvZyhhdHlwZSk7CisgICAgcmV0dXJuIHJjOworfQorCitGcmFtZVZpZXcqIE1lZGlhUGxheWVy
UHJpdmF0ZTo6ZnJhbWVWaWV3KCkgY29uc3QKK3sKKyAgICAvLyBXZSBwcmV2aW91c2x5IHVzZWQg
bV93ZWJDb3JlUGxheWVyLT5mcmFtZVZpZXcoKSwgYnV0IHRoaXMgbWV0aG9kIHJldHVybnMKKyAg
ICAvLyBhIG51bGwgZnJhbWVWaWV3IHVudGlsIHF1aXRlIGxhdGUgaW4gdGhlIG1lZGlhIHBsYXll
ciBpbml0aWFsaXphdGlvbiwKKyAgICAvLyBhbmQgc3RhcnRpbmcgcXVpdGUgZWFybHkgaW4gdGhl
IG1lZGlhIHBsYXllciBkZXN0cnVjdGlvbiAoYmVjYXVzZQorICAgIC8vIGl0IG1heSBiZSBzZXQg
dG8gemVybyBieSB0aGUgZGVzdHJ1Y3RvciBpbiBSZW5kZXJWaWRlby5jcHAgYmVmb3JlCisgICAg
Ly8gb3VyIGRlc3RydWN0b3IgaXMgY2FsbGVkLCBsZWF2aW5nIHVzIHVuYWJsZSB0byBjbGVhbiB1
cCBjaGlsZCB3aW5kb3dzCisgICAgLy8gaW4gbW1yRGlzY29ubmVjdCkuCisgICAgSFRNTE1lZGlh
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNv
cmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOworICAgIHJldHVybiBlbGVtZW50LT5kb2N1
bWVudCgpLT52aWV3KCk7Cit9CisKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2lu
ZG93KiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtV2luZG93KCkKK3sKKyAgICBpZiAoZnJh
bWVWaWV3KCkgJiYgZnJhbWVWaWV3KCktPmhvc3RXaW5kb3coKSkKKyAgICAgICAgcmV0dXJuIGZy
YW1lVmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5wbGF0Zm9ybVdp
bmRvdygpOworICAgIHJldHVybiAwOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNG
dWxsc2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVu
dDsKK30KKworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorc3RhdGljIGNvbnN0
IGRvdWJsZSBCdWZmZXJpbmdBbmltYXRpb25EZWxheSA9IDEuMCAvIDI0OworCitzdGF0aWMgY2hh
ciogc19idWZmZXJpbmdJbWFnZURhdGEgPSAwOworc3RhdGljIGludCBzX2J1ZmZlcmluZ0ltYWdl
V2lkdGggPSAwOworc3RhdGljIGludCBzX2J1ZmZlcmluZ0ltYWdlSGVpZ2h0ID0gMDsKKworUGxh
dGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAorewor
ICAgIFBsYXRmb3JtTWVkaWEgcG07CisgICAgcG0udHlwZSA9IFBsYXRmb3JtTWVkaWE6OlFOWE1l
ZGlhUGxheWVyVHlwZTsKKyAgICBwbS5tZWRpYS5xbnhNZWRpYVBsYXllciA9IGNvbnN0X2Nhc3Q8
TWVkaWFQbGF5ZXJQcml2YXRlKj4odGhpcyk7CisgICAgcmV0dXJuIHBtOworfQorCitQbGF0Zm9y
bUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAg
IGlmIChtX3BsYXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRCdWZmZXJpbmdJbWFnZURh
dGEoKQoreworICAgIHN0YXRpYyBib29sIGxvYWRlZCA9IGZhbHNlOworICAgIGlmICghbG9hZGVk
KSB7CisgICAgICAgIHN0YXRpYyBJbWFnZSogYnVmZmVyaW5nSWNvbiA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgidmlkYnVmZmVyIikubGVha1JlZigpOworICAgICAgICBOYXRpdmVJbWFn
ZVNraWEqIG5hdGl2ZUltYWdlID0gYnVmZmVyaW5nSWNvbi0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICAgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAoIW5hdGl2ZUltYWdlLT5pc0RhdGFDb21wbGV0ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGxvYWRlZCA9IHRydWU7CisgICAgICAgIG5hdGl2ZUltYWdl
LT5sb2NrUGl4ZWxzKCk7CisKKyAgICAgICAgaW50IGJ1ZlNpemUgPSBuYXRpdmVJbWFnZS0+d2lk
dGgoKSAqIG5hdGl2ZUltYWdlLT5oZWlnaHQoKSAqIDQ7CisgICAgICAgIHNfYnVmZmVyaW5nSW1h
Z2VXaWR0aCA9IG5hdGl2ZUltYWdlLT53aWR0aCgpOworICAgICAgICBzX2J1ZmZlcmluZ0ltYWdl
SGVpZ2h0ID0gbmF0aXZlSW1hZ2UtPmhlaWdodCgpOworICAgICAgICBzX2J1ZmZlcmluZ0ltYWdl
RGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MoYnVmU2l6ZSkpOworICAgICAgICBtZW1j
cHkoc19idWZmZXJpbmdJbWFnZURhdGEsIG5hdGl2ZUltYWdlLT5nZXRQaXhlbHMoKSwgYnVmU2l6
ZSk7CisKKyAgICAgICAgbmF0aXZlSW1hZ2UtPnVubG9ja1BpeGVscygpOworICAgICAgICBidWZm
ZXJpbmdJY29uLT5kZXJlZigpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmJ1ZmZlcmluZ1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopCit7CisgICAg
aWYgKG1fc2hvd0J1ZmZlcmluZ0ltYWdlKSB7CisgICAgICAgIGlmICghaXNGdWxsc2NyZWVuKCkg
JiYgbV9wbGF0Zm9ybUxheWVyKQorICAgICAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5zZXROZWVk
c0Rpc3BsYXkoKTsKKyAgICAgICAgbV9idWZmZXJpbmdUaW1lci5zdGFydE9uZVNob3QoQnVmZmVy
aW5nQW5pbWF0aW9uRGVsYXkpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnNldEJ1ZmZlcmluZyhib29sIGJ1ZmZlcmluZykKK3sKKyAgICBpZiAoIWhhc1ZpZGVvKCkpCisg
ICAgICAgIGJ1ZmZlcmluZyA9IGZhbHNlOyAvLyBCdWZmZXJpbmcgYW5pbWF0aW9uIG5vdCB2aXNp
YmxlIGZvciBhdWRpby4KKyAgICBpZiAoYnVmZmVyaW5nICE9IG1fc2hvd0J1ZmZlcmluZ0ltYWdl
KSB7CisgICAgICAgIG1fc2hvd0J1ZmZlcmluZ0ltYWdlID0gYnVmZmVyaW5nOworICAgICAgICBp
ZiAoYnVmZmVyaW5nKSB7CisgICAgICAgICAgICBsb2FkQnVmZmVyaW5nSW1hZ2VEYXRhKCk7Cisg
ICAgICAgICAgICBtX2J1ZmZlcmluZ1RpbWVyLnN0YXJ0T25lU2hvdChCdWZmZXJpbmdBbmltYXRp
b25EZWxheSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9idWZmZXJpbmdUaW1lci5z
dG9wKCk7CisKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIG1fcGxh
dGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWdu
ZWQgaW50IGFsbG9jYXRlVGV4dHVyZUlkKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdGV4aWQ7Cisg
ICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4aWQpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgdGV4aWQpOworICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24gcmVzaXpl
LgorICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAvLyBOUE9UIHRleHR1cmVzIGluIEdM
IEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdMX0NMQU1QX1RPX0VE
R0UuCisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIHJldHVybiB0ZXhpZDsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRyYXdCdWZmZXJpbmdBbmltYXRpb24oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgaW50IHBvc2l0aW9uTG9jYXRpb24sIGlu
dCB0ZXhDb29yZExvY2F0aW9uKQoreworICAgIGlmIChtX3Nob3dCdWZmZXJpbmdJbWFnZSAmJiBz
X2J1ZmZlcmluZ0ltYWdlRGF0YSAmJiAhaXNGdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gbWF0cml4OworCisgICAgICAgIC8vIFJvdGF0
ZSB0aGUgYnVmZmVyaW5nIGluZGljYXRvciBzbyB0aGF0IGl0IHRha2VzIDEgc2Vjb25kIHRvIGRv
IDEgcmV2b2x1dGlvbi4KKyAgICAgICAgdGltZXNwZWMgdGltZTsKKyAgICAgICAgY2xvY2tfZ2V0
dGltZShDTE9DS19SRUFMVElNRSwgJnRpbWUpOworICAgICAgICByZW5kZXJNYXRyaXgucm90YXRl
KHRpbWUudHZfbnNlYyAvIDEwMDAwMDAwMDAuMCAqIDM2MC4wKTsKKworICAgICAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHRl
eElkID0gYWxsb2NhdGVUZXh0dXJlSWQoKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCB0ZXhJZCk7CisgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBHTF9SR0JBLCBzX2J1ZmZlcmluZ0ltYWdlV2lkdGgsIHNfYnVmZmVyaW5nSW1hZ2VI
ZWlnaHQsCisgICAgICAgICAgICAgICAgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgc19i
dWZmZXJpbmdJbWFnZURhdGEpOworICAgICAgICAgICAgZnJlZShzX2J1ZmZlcmluZ0ltYWdlRGF0
YSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCB0ZXhjb29yZHNbXSA9IHsgMCwgMCwgIDAs
IDEsICAxLCAxLCAgMSwgMCB9OworICAgICAgICBGbG9hdFBvaW50IHZlcnRpY2VzWzRdOworICAg
ICAgICBmbG9hdCBieCA9IHNfYnVmZmVyaW5nSW1hZ2VXaWR0aCAvIDIuMDsKKyAgICAgICAgZmxv
YXQgYnkgPSBzX2J1ZmZlcmluZ0ltYWdlSGVpZ2h0IC8gMi4wOworICAgICAgICB2ZXJ0aWNlc1sw
XSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50KC1ieCwgLWJ5KSk7CisgICAgICAg
IHZlcnRpY2VzWzFdID0gcmVuZGVyTWF0cml4Lm1hcFBvaW50KEZsb2F0UG9pbnQoLWJ4LCBieSkp
OworICAgICAgICB2ZXJ0aWNlc1syXSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50
KGJ4LCBieSkpOworICAgICAgICB2ZXJ0aWNlc1szXSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChG
bG9hdFBvaW50KGJ4LCAtYnkpKTsKKworICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocG9z
aXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB2ZXJ0aWNlcyk7CisgICAg
ICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcih0ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwg
R0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CisgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdM
RV9GQU4sIDAsIDQpOworICAgIH0KK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5
ZXJQcml2YXRlQmxhY2tCZXJyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3MjUyYWY1ZGI5N2JmNjVmYWMyNGFj
MWRhYTYzMTJkODJlZTQxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaApA
QCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnlfaAorI2RlZmluZSBNZWRpYVBs
YXllclByaXZhdGVCbGFja0JlcnJ5X2gKKworI2lmIEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1NUlBs
YXllci5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYlBhZ2VDbGllbnQ7Cit9Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwg
cHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJTU1SUGxheWVyTGlzdGVuZXIgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsK
KyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFy
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsK
KyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgbm90aWZ5QXBwQWN0aXZh
dGVkRXZlbnQoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0Q2VydGlmaWNhdGVQYXRoKGNvbnN0
IFN0cmluZyYpOworCisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpOwor
ICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZVRvUGxheSgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZvaWQgZHJhd0J1ZmZlcmluZ0Fu
aW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGludCBwb3NpdGlvbkxvY2F0aW9u
LCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGdWxsc2NyZWVuKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUo
Ym9vbCk7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNlZWsoZmxv
YXQgdGltZSk7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKworICAgIHZpcnR1YWwgYm9vbCBwYXVzZWQoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOworCisgICAgdmlydHVhbCBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgdmly
dHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQg
Ynl0ZXNMb2FkZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IElu
dFNpemUmKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgp
IGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFdoZXRo
ZXIgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgbWVkaWEgZW5naW5l
IGZvciB0aGUgY3VycmVudCBtZWRpYS4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVy
YXRlZFJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAvLyBDYWxsZWQgd2hl
biB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUgaW50byBvciBvdXQgb2YgYWNjZWxlcmF0
ZWQgcmVuZGVyaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5n
U3RhdGVDaGFuZ2VkKCkgeyB9CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0OworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TW92aWVM
b2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlc2l6ZVNvdXJjZURp
bWVuc2lvbnMoKTsKKyAgICB2b2lkIHNldEZ1bGxzY3JlZW5XZWJQYWdlQ2xpZW50KEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZUNsaWVudCopOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpH
cmFwaGljczo6V2luZG93KiB3aW5kb3dHZXQoKTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
R3JhcGhpY3M6OldpbmRvdyogZ2V0UGVlcldpbmRvdyhjb25zdCBjaGFyKikgY29uc3Q7CisgICAg
aW50IHdpbmRvd1Bvc2l0aW9uR2V0KHVuc2lnbmVkJiB4LCB1bnNpZ25lZCYgeSwgdW5zaWduZWQm
IHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KSBjb25zdDsKKyAgICBjb25zdCBjaGFyKiBtbXJDb250
ZXh0TmFtZUdldCgpOworICAgIGZsb2F0IHBlcmNlbnRMb2FkZWQoKTsKKyAgICB1bnNpZ25lZCBz
b3VyY2VXaWR0aCgpOworICAgIHVuc2lnbmVkIHNvdXJjZUhlaWdodCgpOworICAgIHZvaWQgc2V0
QWxsb3dQUFNWb2x1bWVVcGRhdGVzKGJvb2wpOworCisgICAgLy8gSU1NUlBsYXllckxpc3RlbmVy
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBvblN0YXRlQ2hhbmdlZChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TU1SUGxheWVyOjpNcFN0YXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25N
ZWRpYVN0YXR1c0NoYW5nZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUlBsYXllcjo6TU1SUGxh
eVN0YXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
TU1SUGxheWVyOjpFcnJvcik7CisgICAgdmlydHVhbCB2b2lkIG9uRHVyYXRpb25DaGFuZ2VkKGZs
b2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25UaW1lQ2hhbmdlZChmbG9hdCk7CisgICAgdmlydHVh
bCB2b2lkIG9uUmF0ZUNoYW5nZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBvblZvbHVtZUNo
YW5nZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBvblBhdXNlU3RhdGVDaGFuZ2VkKCk7Cisg
ICAgdmlydHVhbCB2b2lkIG9uUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBvblNpemVDaGFu
Z2VkKCk7CisgICAgdmlydHVhbCB2b2lkIG9uUGxheU5vdGlmaWVkKCk7CisgICAgdmlydHVhbCB2
b2lkIG9uUGF1c2VOb3RpZmllZCgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICB2aXJ0dWFsIHZvaWQgb25CdWZmZXJpbmcoYm9vbCk7CisjZW5kaWYKKworICAgIHZpcnR1
YWwgYm9vbCBpc0Z1bGxzY3JlZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzaG93RXJyb3JE
aWFsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUlBsYXllcjo6RXJyb3IpOworICAgIHZpcnR1
YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kb3cqIHBsYXRmb3JtV2luZG93
KCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldygpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RhdGVz
KCk7CisgICAgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAgIE1l
ZGlhUGxheWVyKiBtX3dlYkNvcmVQbGF5ZXI7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1N
UlBsYXllciogbV9wbGF0Zm9ybVBsYXllcjsKKworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBt
X3JlYWR5U3RhdGU7CisKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDbGllbnQqIG1f
ZnVsbHNjcmVlbldlYlBhZ2VDbGllbnQ7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIHZvaWQgYnVmZmVyaW5nVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+
Kik7CisgICAgdm9pZCBzZXRCdWZmZXJpbmcoYm9vbCk7CisKKyAgICBUaW1lcjxNZWRpYVBsYXll
clByaXZhdGU+IG1fYnVmZmVyaW5nVGltZXI7CisgICAgUmVmUHRyPFBsYXRmb3JtTGF5ZXI+IG1f
cGxhdGZvcm1MYXllcjsKKyAgICBib29sIG1fc2hvd0J1ZmZlcmluZ0ltYWdlOworICAgIGJvb2wg
bV9tZWRpYUlzQnVmZmVyaW5nOworI2VuZGlmCisKKyAgICB2b2lkIHVzZXJEcml2ZW5TZWVrVGlt
ZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7CisgICAgVGltZXI8TWVkaWFQbGF5
ZXJQcml2YXRlPiBtX3VzZXJEcml2ZW5TZWVrVGltZXI7CisgICAgZmxvYXQgbV9sYXN0U2Vla1Rp
bWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130023</attachid>
            <date>2012-03-04 05:47:52 -0800</date>
            <delta_ts>2012-03-04 09:12:01 -0800</delta_ts>
            <desc>Patch for cq</desc>
            <filename>bug-79729-20120304214745.patch</filename>
            <type>text/plain</type>
            <size>38419</size>
            <attacher name="Jonathan Dong">jonathan.dong.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiMTc3MWQ4MDRlZTg3
NDc5Mjg3ZmVkNDg5ZTAxYjQzMDEzNzM2NC4uYjA5OWZjYWZmZGY1NzRhMTU1NmQzNDQ3MzkyM2M3
NTNiNWMxNGY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAzLTA0ICBKb25h
dGhhbiBEb25nICA8am9uYXRoYW4uZG9uZ0B0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAg
W0JsYWNrQmVycnldIHVwc3RyZWFtIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuW2NwcHxo
XQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3MjkK
KworICAgICAgICBSZXZpZXdlZCBieSBSb2IgQnVpcyBhbmQgQW50b25pbyBHb21lcy4KKworICAg
ICAgICBJbXBsZW1lbnRhdGlvbiBvZiBNZWRpYVBsYXllclByaXZhdGUgZm9yIEJsYWNrQmVycnkg
cG9ydGluZy4KKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgTm8gbmV3IHRlc3RzLgorCisgICAg
ICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVy
TWVkaWFFbmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRT
dXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1
cHBvcnRzVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om5vdGlm
eUFwcEFjdGl2YXRlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6c2V0Q2VydGlmaWNhdGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cHJl
cGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzRnVsbHNjcmVlbik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnVzZXJEcml2ZW5T
ZWVrVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNl
ZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdmFpbGFibGVW
aWRlb0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzU2lu
Z2xlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
Ojptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
dXNlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVzaXpl
U291cmNlRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OnNldEZ1bGxzY3JlZW5XZWJQYWdlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6Z2V0V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6Z2V0UGVlcldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmdldFdpbmRvd1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6bW1yQ29udGV4dE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlOjpwZXJjZW50TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6c291cmNlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpz
b3VyY2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRB
bGxvd1BQU1ZvbHVtZVVwZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpvblN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
Om9uTWVkaWFTdGF0dXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9u
RHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
b25UaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9u
UGF1c2VTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpvblJhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
b25Wb2x1bWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
b25SZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25TaXpl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uUGxheU5v
dGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25QYXVzZU5v
dGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6b25CdWZmZXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzaG93RXJyb3JEaWFs
b2cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpmcmFtZVZpZXcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybVdpbmRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmxvYWRCdWZmZXJpbmdJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpidWZmZXJpbmdUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0QnVmZmVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFs
bG9jYXRlVGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
ZHJhd0J1ZmZlcmluZ0FuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFQbGF5ZXJQcml2YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNBY2NlbGVy
YXRlZFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmFj
Y2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKToKKwogMjAxMi0wMy0wMyAgQmVuamFtaW4g
UG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHRoZSB1bnVz
ZWQgZnVuY3Rpb24gV2ViQ29yZTo6cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggMDE3NTVhODhmNDg0NTdlNzI5NjgzZTAx
YzFlYjE3NzJhNmRkMzM2MC4uM2JlYzRlYmJkMmY2OTZjMjI1MDg4NjRmNTZmNzljYWVjNmI0YzQw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtMTcwLDggKzE3
MCw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvSW50UG9pbnRCbGFja0JlcnJ5LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvSW50UmVjdEJsYWNrQmVycnkuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9JbnRTaXplQmxhY2tCZXJyeS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L01NcmVuZGVyZXIuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9NZWRpYVBsYXllclByaXZhdGVNTXJlbmRlcmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAKICAgICBwbGF0Zm9y
bS90ZXh0L2JsYWNrYmVycnkvU3RyaW5nQmxhY2tCZXJyeS5jcHAKICkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclBy
aXZhdGVCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ4
YmQzYWY1ZDM0YjEzYzMyNTVkZWM1YzliZjJkN2Q1NDhlOTA5NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQ
cml2YXRlQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSw4MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFZJREVPKQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCIKKworI2lu
Y2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIb3N0V2lu
ZG93LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiVGltZVJhbmdl
cy5oIgorI2luY2x1ZGUgIldlYlBhZ2VDbGllbnQuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybUNsaWVudC5oPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlZpZGVvTGF5ZXJX
ZWJLaXRUaHJlYWQuaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNlbmRpZgorCit1c2luZyBu
YW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFN0YXRpYyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIGZh
Y3RvcnkKK1Bhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBNZWRpYVBsYXll
clByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBsYXllcikpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdp
c3RyYXIpCit7CisgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBv
cnRzVHlwZSwgMCwgMCwgMCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBw
b3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHNldDxzdHJpbmc+IHN1
cHBvcnRlZCA9IE1NUlBsYXllcjo6YWxsU3VwcG9ydGVkTWltZVR5cGVzKCk7CisgICAgc2V0PHN0
cmluZz46Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWQuYmVnaW4oKTsKKyAgICBmb3IgKDsgaSAhPSBz
dXBwb3J0ZWQuZW5kKCk7IGkrKykKKyAgICAgICAgdHlwZXMuYWRkKGktPmNfc3RyKCkpOworfQor
CitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCit7CisgICAgaWYg
KHR5cGUuaXNOdWxsKCkgfHwgdHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlOyB0eXBlIGlzIG51bGwgb3IgZW1wdHku
Iik7CisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisgICAgfQor
CisgICAgLy8gc3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhl
IGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkKKyAgICBpZiAoTU1SUGxheWVyOjptaW1lVHlwZVN1cHBv
cnRlZCh0eXBlLmFzY2lpKCkuZGF0YSgpKSkgeworICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllciBzdXBwb3J0cyB0eXBlOyBjYWNoZSBjb250YWlucyB0eXBlICclcycuIiwgdHlwZS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5
ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOworICAgIH0KKyAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllciBkb2VzIG5vdCBzdXBwb3J0IHR5cGU7IGNhY2hlIGRv
ZXNuJ3QgY29udGFpbiB0eXBlICclcycuIiwgdHlwZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgcmV0
dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6Om5vdGlmeUFwcEFjdGl2YXRlZEV2ZW50KGJvb2wgYWN0aXZhdGVkKQoreworICAgIE1N
UlBsYXllcjo6bm90aWZ5QXBwQWN0aXZhdGVkRXZlbnQoYWN0aXZhdGVkKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnNldENlcnRpZmljYXRlUGF0aChjb25zdCBTdHJpbmcmIGNhUGF0
aCkKK3sKKyAgICBNTVJQbGF5ZXI6OnNldENlcnRpZmljYXRlUGF0aChzdHJpbmcoY2FQYXRoLnV0
ZjgoKS5kYXRhKCkpKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZh
dGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IG1fd2ViQ29yZVBsYXllcihwbGF5ZXIpCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICwgbV9wbGF0Zm9ybVBsYXllcihu
ZXcgTU1SUGxheWVyKHRoaXMsIHRydWUpKQorI2Vsc2UKKyAgICAsIG1fcGxhdGZvcm1QbGF5ZXIo
bmV3IE1NUlBsYXllcih0aGlzLCBmYWxzZSkpCisjZW5kaWYKKyAgICAsIG1fbmV0d29ya1N0YXRl
KE1lZGlhUGxheWVyOjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmcpCisgICAgLCBtX2Z1bGxzY3JlZW5XZWJQYWdlQ2xpZW50KDApCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICwgbV9idWZmZXJpbmdUaW1lcih0aGlzLCAmTWVk
aWFQbGF5ZXJQcml2YXRlOjpidWZmZXJpbmdUaW1lckZpcmVkKQorICAgICwgbV9zaG93QnVmZmVy
aW5nSW1hZ2UoZmFsc2UpCisgICAgLCBtX21lZGlhSXNCdWZmZXJpbmcoZmFsc2UpCisjZW5kaWYK
KyAgICAsIG1fdXNlckRyaXZlblNlZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlOjp1
c2VyRHJpdmVuU2Vla1RpbWVyRmlyZWQpCisgICAgLCBtX2xhc3RTZWVrVGltZSgwKQoreworfQor
CitNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQoreworICAgIGlmIChp
c0Z1bGxzY3JlZW4oKSkgeworICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1fd2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJD
bGllbnQoKSk7CisgICAgICAgIGVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAvLyBSZW1vdmUgbWVkaWEgcGxheWVy
IGZyb20gcGxhdGZvcm0gbGF5ZXIuCisgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAgICAgICAg
c3RhdGljX2Nhc3Q8VmlkZW9MYXllcldlYktpdFRocmVhZCo+KG1fcGxhdGZvcm1MYXllci5nZXQo
KSktPnNldE1lZGlhUGxheWVyKDApOworI2VuZGlmCisKKyAgICBkZWxldGUgbV9wbGF0Zm9ybVBs
YXllcjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1
cmwpCit7CisgICAgU3RyaW5nIG1vZGlmaWVkVXJsKHVybCk7CisKKyAgICBpZiAobW9kaWZpZWRV
cmwuc3RhcnRzV2l0aCgibG9jYWw6Ly8iKSkgeworICAgICAgICBLVVJMIGt1cmwgPSBLVVJMKEtV
UkwoKSwgbW9kaWZpZWRVcmwpOworICAgICAgICBrdXJsLnNldFByb3RvY29sKCJmaWxlIik7Cisg
ICAgICAgIFN0cmluZyB0ZW1wUGF0aChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpZW50OjpnZXQo
KS0+Z2V0QXBwbGljYXRpb25Mb2NhbERpcmVjdG9yeSgpLmNfc3RyKCkpOworICAgICAgICB0ZW1w
UGF0aC5hcHBlbmQoa3VybC5wYXRoKCkpOworICAgICAgICBrdXJsLnNldFBhdGgodGVtcFBhdGgp
OworICAgICAgICBtb2RpZmllZFVybCA9IGt1cmwuc3RyaW5nKCk7CisgICAgfQorICAgIGlmICht
b2RpZmllZFVybC5zdGFydHNXaXRoKCJmaWxlOi8vIikpIHsKKyAgICAgICAgLy8gVGhlIFFOWCBN
dWx0aW1lZGlhIEZyYW1ld29yayBjYW5ub3QgaGFuZGxlIGZpbGVuYW1lcyBjb250YWluaW5nIFVS
TCBlc2NhcGUgc2VxdWVuY2VzLgorICAgICAgICBtb2RpZmllZFVybCA9IGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyhtb2RpZmllZFVybCk7CisgICAgfQorCisgICAgU3RyaW5nIGNvb2tpZVBhaXJz
OworICAgIGlmICghdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgY29va2llUGFpcnMgPSBjb29raWVN
YW5hZ2VyKCkuZ2V0Q29va2llKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwudXRmOCgpLmRhdGEo
KSksIFdpdGhIdHRwT25seUNvb2tpZXMpOworICAgIGlmICghY29va2llUGFpcnMuaXNFbXB0eSgp
ICYmIGNvb2tpZVBhaXJzLnV0ZjgoKS5kYXRhKCkpCisgICAgICAgIG1fcGxhdGZvcm1QbGF5ZXIt
PmxvYWQobW9kaWZpZWRVcmwudXRmOCgpLmRhdGEoKSwgdXNlckFnZW50KG1vZGlmaWVkVXJsKS51
dGY4KCkuZGF0YSgpLCBjb29raWVQYWlycy51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fcGxhdGZvcm1QbGF5ZXItPmxvYWQobW9kaWZpZWRVcmwudXRmOCgpLmRhdGEoKSwgdXNl
ckFnZW50KG1vZGlmaWVkVXJsKS51dGY4KCkuZGF0YSgpLCAwKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmNhbmNlbExvYWQoKQoreworICAgIG1fcGxhdGZvcm1QbGF5ZXItPmNhbmNl
bExvYWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnByZXBhcmVUb1BsYXkoKQor
eworICAgIG1fcGxhdGZvcm1QbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnBsYXkoKQoreworICAgIG1fcGxhdGZvcm1QbGF5ZXItPnBsYXkoKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKK3sKKyAgICBtX3BsYXRmb3Jt
UGxheWVyLT5wYXVzZSgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBNZWRp
YVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICAvLyBDYW5ub3QgcmV0
dXJuIGVtcHR5IHNpemUsIG90aGVyd2lzZSBwYWludCgpIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZC4K
KyAgICAvLyBBbHNvLCB0aGUgdmFsdWVzIGhlcmUgd2lsbCBhZmZlY3QgdGhlIGFzcGVjdCByYXRp
byBvZiB0aGUgb3V0cHV0IHJlY3RhbmdsZSB0aGF0IHdpbGwKKyAgICAvLyBiZSB1c2VkIGZvciBy
ZW5kZXJlcmluZyB0aGUgdmlkZW8sIHNvIHdlIG11c3QgdGFrZSBQQVIgaW50byBhY2NvdW50Lgor
ICAgIC8vIE5vdywgaG9wZSB0aGF0IG1ldGFkYXRhIGhhcyBiZWVuIHByb3ZpZGVkIGJlZm9yZSB0
aGlzIGdldHMgY2FsbGVkIGlmIHRoaXMgaXMgYSB2aWRlby4KKyAgICBkb3VibGUgcGl4ZWxXaWR0
aCA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9wbGF0Zm9ybVBsYXllci0+cGl4ZWxXaWR0aCgpKTsK
KyAgICBkb3VibGUgcGl4ZWxIZWlnaHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fcGxhdGZvcm1Q
bGF5ZXItPnBpeGVsSGVpZ2h0KCkpOworICAgIGlmICghbV9wbGF0Zm9ybVBsYXllci0+cGl4ZWxX
aWR0aCgpIHx8ICFtX3BsYXRmb3JtUGxheWVyLT5waXhlbEhlaWdodCgpKQorICAgICAgICBwaXhl
bFdpZHRoID0gcGl4ZWxIZWlnaHQgPSAxLjA7CisKKyAgICAvLyBVc2UgZmxvYXRpbmcgcG9pbnQg
YXJpdGhtZXRpYyB0byBlbGltaW5hdGUgdGhlIGNoYW5jZSBvZiBpbnRlZ2VyCisgICAgLy8gb3Zl
cmZsb3cuIFBBUiBudW1iZXJzIGNhbiBiZSA1IGRpZ2l0cyBvciBtb3JlLgorICAgIGRvdWJsZSBh
ZGp1c3RlZFNvdXJjZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3BsYXRmb3JtUGxheWVy
LT5zb3VyY2VXaWR0aCgpKSAqIHBpeGVsV2lkdGggLyBwaXhlbEhlaWdodDsKKyAgICByZXR1cm4g
SW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkU291cmNlV2lkdGggKyAwLjUpLCBtX3Bs
YXRmb3JtUGxheWVyLT5zb3VyY2VIZWlnaHQoKSk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPmhh
c1ZpZGVvKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPmhhc0F1ZGlvKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5ZXItPmR1cmF0aW9uKCk7Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Vz
ZXJEcml2ZW5TZWVrVGltZXIuaXNBY3RpdmUoKSA/IG1fbGFzdFNlZWtUaW1lOiBtX3BsYXRmb3Jt
UGxheWVyLT5jdXJyZW50VGltZSgpOworfQorCitzdGF0aWMgY29uc3QgZG91YmxlIFNlZWtTdWJt
aXNzaW9uRGVsYXkgPSAwLjE7IC8vIFJlYXNvbmFibGUgdGhyb3R0bGluZyB2YWx1ZS4KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZSkKK3sKKyAgICBtX2xhc3RTZWVr
VGltZSA9IHRpbWU7CisgICAgaWYgKCFtX3VzZXJEcml2ZW5TZWVrVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgbV91c2VyRHJpdmVuU2Vla1RpbWVyLnN0YXJ0T25lU2hvdChTZWVrU3VibWlzc2lv
bkRlbGF5KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnVzZXJEcml2ZW5TZWVrVGlt
ZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+KikKK3sKKyAgICBtX3BsYXRmb3JtUGxh
eWVyLT5zZWVrKG1fbGFzdFNlZWtUaW1lKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6
OnNlZWtpbmcoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcmF0ZSkKK3sKKyAgICBtX3BsYXRmb3JtUGxheWVy
LT5zZXRSYXRlKHJhdGUpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+cGF1c2VkKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQoreworICAgIG1f
cGxhdGZvcm1QbGF5ZXItPnNldFZvbHVtZSh2b2x1bWUpOworfQorCitNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVh
ZHlTdGF0ZTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5tYXhUaW1lU2Vla2FibGUo
KTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZl
cmVkKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVS
YW5nZXM6OmNyZWF0ZSgpOworICAgIGlmIChmbG9hdCBidWZmZXJMb2FkZWQgPSBtX3BsYXRmb3Jt
UGxheWVyLT5idWZmZXJMb2FkZWQoKSkKKyAgICAgICAgdGltZVJhbmdlcy0+YWRkKDAsIGJ1ZmZl
ckxvYWRlZCk7CisgICAgcmV0dXJuIHRpbWVSYW5nZXMucmVsZWFzZSgpOworfQorCit1bnNpZ25l
ZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICAvLyBPbmx5IHByb2Nlc3MgcGFpbnQgY2FsbHMgY29taW5nIHZpYSB0aGUgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgY29kZQorICAgIC8vIHBhdGgsIHdoZXJlIHdlIGdldCBjYWxsZWQgd2l0
aCBhIG51bGwgZ3JhcGhpY3MgY29udGV4dC4gU2VlCisgICAgLy8gTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZDo6ZHJhd1RleHR1cmVzKCkuIElnbm9yZSBjYWxscyBmcm9tIHRoZSByZWd1bGFyCisgICAg
Ly8gcmVuZGVyaW5nIHBhdGguCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBtX3BsYXRmb3Jt
UGxheWVyLT5ub3RpZnlPdXRwdXRVcGRhdGUoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3Qo
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBy
ZXR1cm47CisjZW5kaWYKKworICAgIGlmICghaGFzVmlkZW8oKSB8fCBjb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkgfHwgIW1fd2ViQ29yZVBsYXllci0+dmlzaWJsZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3MgPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQoZ3JhcGhpY3MpOworCisgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkludFJlY3QgcGxhdGZvcm1SZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBJbnRSZWN0IGNsaXBwZWRSZWN0ID0gZnJh
bWVWaWV3KCktPndpbmRvd0NsaXBSZWN0KCk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Oklu
dFJlY3QgcGxhdGZvcm1XaW5kb3dDbGlwUmVjdChjbGlwcGVkUmVjdC54KCksIGNsaXBwZWRSZWN0
LnkoKSwgY2xpcHBlZFJlY3Qud2lkdGgoKSwgY2xpcHBlZFJlY3QuaGVpZ2h0KCkpOworICAgIG1f
cGxhdGZvcm1QbGF5ZXItPnBhaW50KGdyYXBoaWNzLT5jYW52YXMoKSwgcGxhdGZvcm1SZWN0LCBw
bGF0Zm9ybVdpbmRvd0NsaXBSZWN0KTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhh
c0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxh
eWVyLT5oYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGU6Om1v
dmllTG9hZFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXll
cjo6TW92aWVMb2FkVHlwZT4obV9wbGF0Zm9ybVBsYXllci0+bW92aWVMb2FkVHlwZSgpKTsKK30K
KworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB1c2VyIGFnZW50IHN0cmluZyBhc3NvY2lh
dGVkIHdpdGggdGhlCisvLyBmcmFtZSBsb2FkZXIgY2xpZW50IG9mIG91ciBIVE1MTWVkaWFFbGVt
ZW50LiBUaGUgY2FsbCBiZWxvdyB3aWxsCisvLyBlbmQgdXAgaW4gRnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5Ojp1c2VyQWdlbnQoKS4KK1N0cmluZyBNZWRpYVBsYXllclByaXZhdGU6OnVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1fd2ViQ29yZVBsYXllci0+
bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisgICAgRG9jdW1lbnQqIHRvcGRvYyA9IGVsZW1lbnQtPmRv
Y3VtZW50KCktPnRvcERvY3VtZW50KCk7CisgICAgQVNTRVJUKHRvcGRvYy0+ZnJhbWUoKSk7Cisg
ICAgQVNTRVJUKHRvcGRvYy0+ZnJhbWUoKS0+bG9hZGVyKCkpOworICAgIGlmICh0b3Bkb2MtPmZy
YW1lKCkpCisgICAgICAgIHJldHVybiB0b3Bkb2MtPmZyYW1lKCktPmxvYWRlcigpLT51c2VyQWdl
bnQoS1VSTChLVVJMKCksIHVybCkpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnJlc2l6ZVNvdXJjZURpbWVuc2lvbnMoKQoreworICAgIGlmICgh
bV93ZWJDb3JlUGxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBIVE1MTWVkaWFFbGVtZW50
KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obV93ZWJDb3JlUGxheWVy
LT5tZWRpYVBsYXllckNsaWVudCgpKTsKKworICAgIGlmICghY2xpZW50IHx8ICFjbGllbnQtPmlz
VmlkZW8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0KiBvID0gY2xpZW50
LT5yZW5kZXJlcigpOworICAgIGlmICghbykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYg
d2UgaGF2ZSBhbiBIVE1MVmlkZW9FbGVtZW50IGJ1dCB0aGUgc291cmNlIGhhcyBubyB2aWRlbywg
dGhlbiB3ZSBuZWVkIHRvIHJlc2l6ZSB0aGUgbWVkaWEgZWxlbWVudC4KKyAgICBpZiAoIWhhc1Zp
ZGVvKCkpIHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gby0+ZW5jbG9zaW5nQm94KCktPmNvbnRl
bnRCb3hSZWN0KCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwbGF5Ym9va01pbkF1ZGlv
RWxlbWVudFdpZHRoID0gMzAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBsYXlib29rTWlu
QXVkaW9FbGVtZW50SGVpZ2h0ID0gMzI7CisgICAgICAgIC8vIElmIHRoZSByZWN0IGRpbWVuc2lv
bnMgYXJlIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtLCB1c2UgdGhlIG1pbmltdW0gaW5z
dGVhZC4KKyAgICAgICAgaW50IG5ld1dpZHRoID0gbWF4KHJlY3Qud2lkdGgoKSwgcGxheWJvb2tN
aW5BdWRpb0VsZW1lbnRXaWR0aCk7CisgICAgICAgIGludCBuZXdIZWlnaHQgPSBtYXgocmVjdC5o
ZWlnaHQoKSwgcGxheWJvb2tNaW5BdWRpb0VsZW1lbnRIZWlnaHQpOworCisgICAgICAgIGNoYXIg
YXR0clN0cmluZ1sxMl07CisKKyAgICAgICAgc3ByaW50ZihhdHRyU3RyaW5nLCAiJWQiLCBuZXdX
aWR0aCk7CisgICAgICAgIGNsaWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6d2lkdGhBdHRy
LCBhdHRyU3RyaW5nKTsKKworICAgICAgICBzcHJpbnRmKGF0dHJTdHJpbmcsICIlZCIsIG5ld0hl
aWdodCk7CisgICAgICAgIGNsaWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aGVpZ2h0QXR0
ciwgYXR0clN0cmluZyk7CisgICAgfQorCisgICAgLy8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB2aWRlbyBzb3VyY2UgaXMsIHRoZW4gd2UgbmVlZCB0
byBzZXQgaXQgdG8gc29tZXRoaW5nIHNhbmUuCisgICAgaWYgKG1fcGxhdGZvcm1QbGF5ZXItPnNv
dXJjZVdpZHRoKCkgJiYgbV9wbGF0Zm9ybVBsYXllci0+c291cmNlSGVpZ2h0KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBJbnRSZWN0IHJlY3QgPSBvLT5lbmNsb3NpbmdCb3goKS0+Y29udGVudEJv
eFJlY3QoKTsKKyAgICBtX3BsYXRmb3JtUGxheWVyLT5zZXRTb3VyY2VEaW1lbnNpb24ocmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNl
dEZ1bGxzY3JlZW5XZWJQYWdlQ2xpZW50KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNsaWVu
dCogY2xpZW50KQoreworICAgIGlmIChtX2Z1bGxzY3JlZW5XZWJQYWdlQ2xpZW50ID09IGNsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mdWxsc2NyZWVuV2ViUGFnZUNsaWVudCA9IGNs
aWVudDsKKyAgICBtX3BsYXRmb3JtUGxheWVyLT50b2dnbGVGdWxsc2NyZWVuKGNsaWVudCk7CisK
KyAgICAvLyBUaGUgZm9sbG93aW5nIHJlcGFpbnQgaXMgbmVlZGVkIGVzcGVjaWFsbHkgaWYgdmlk
ZW8gaXMgcGF1c2VkIGFuZAorICAgIC8vIGZ1bGxzY3JlZW4gaXMgZXhpdGluZywgc28gdGhhdCBh
IE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoKSBpcworICAgIC8vIHRyaWdnZXJlZCBhbmQgdGhl
IGNvZGUgaW4gb3V0cHV0VXBkYXRlKCkgc2V0cyB0aGUgY29ycmVjdCB3aW5kb3cKKyAgICAvLyBy
ZWN0YW5nbGUuCisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIG1fd2ViQ29yZVBsYXllci0+cmVw
YWludCgpOworfQorCitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogTWVk
aWFQbGF5ZXJQcml2YXRlOjpnZXRXaW5kb3coKQoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxh
eWVyLT5nZXRXaW5kb3coKTsKK30KKworQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpX
aW5kb3cqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0UGVlcldpbmRvdyhjb25zdCBjaGFyKiB1bmlx
dWVJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+Z2V0UGVlcldpbmRv
dyh1bmlxdWVJRCk7Cit9CisKK2ludCBNZWRpYVBsYXllclByaXZhdGU6OmdldFdpbmRvd1Bvc2l0
aW9uKHVuc2lnbmVkJiB4LCB1bnNpZ25lZCYgeSwgdW5zaWduZWQmIHdpZHRoLCB1bnNpZ25lZCYg
aGVpZ2h0KSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5nZXRXaW5kb3dQ
b3NpdGlvbih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworY29uc3QgY2hhciogTWVkaWFQbGF5
ZXJQcml2YXRlOjptbXJDb250ZXh0TmFtZSgpCit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1QbGF5
ZXItPm1tckNvbnRleHROYW1lKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6cGVy
Y2VudExvYWRlZCgpCit7CisgICAgaWYgKCFtX3BsYXRmb3JtUGxheWVyLT5kdXJhdGlvbigpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IGJ1ZmZlcmVkID0gMDsKKyAgICBSZWZQdHI8
VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IHRoaXMtPmJ1ZmZlcmVkKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgRXhj
ZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOworICAgICAgICBmbG9hdCBzdGFydCA9IHRpbWVS
YW5nZXMtPnN0YXJ0KGksIGlnbm9yZWRFeGNlcHRpb24pOworICAgICAgICBmbG9hdCBlbmQgPSB0
aW1lUmFuZ2VzLT5lbmQoaSwgaWdub3JlZEV4Y2VwdGlvbik7CisgICAgICAgIGJ1ZmZlcmVkICs9
IGVuZCAtIHN0YXJ0OworICAgIH0KKworICAgIGZsb2F0IGxvYWRlZCA9IGJ1ZmZlcmVkIC8gbV9w
bGF0Zm9ybVBsYXllci0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gbG9hZGVkOworfQorCit1bnNp
Z25lZCBNZWRpYVBsYXllclByaXZhdGU6OnNvdXJjZVdpZHRoKCkKK3sKKyAgICByZXR1cm4gbV9w
bGF0Zm9ybVBsYXllci0+c291cmNlV2lkdGgoKTsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzb3VyY2VIZWlnaHQoKQoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5z
b3VyY2VIZWlnaHQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldEFsbG93UFBT
Vm9sdW1lVXBkYXRlcyhib29sIGFsbG93KQoreworICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVy
LT5zZXRBbGxvd1BQU1ZvbHVtZVVwZGF0ZXMoYWxsb3cpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRl
IG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisKKyAgICBNTVJQbGF5ZXI6OkVy
cm9yIGN1cnJlbnRFcnJvciA9IG1fcGxhdGZvcm1QbGF5ZXItPmVycm9yKCk7CisKKyAgICBIVE1M
TWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1f
d2ViQ29yZVBsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisKKyAgICBpZiAoY3VycmVudEVy
cm9yICE9IE1NUlBsYXllcjo6TWVkaWFPSykgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIGlmIChjdXJyZW50RXJyb3IgPT0gTU1SUGxh
eWVyOjpNZWRpYURlY29kZUVycm9yKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6RGVjb2RlRXJyb3I7CisgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRFcnJvciA9PSBN
TVJQbGF5ZXI6Ok1lZGlhTWV0YURhdGFFcnJvcgorICAgICAgICAgICAgfHwgY3VycmVudEVycm9y
ID09IE1NUlBsYXllcjo6TWVkaWFBdWRpb1JlY2VpdmVFcnJvcgorICAgICAgICAgICAgfHwgY3Vy
cmVudEVycm9yID09IE1NUlBsYXllcjo6TWVkaWFWaWRlb1JlY2VpdmVFcnJvcikKKyAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICB9IGVs
c2UgeworICAgICAgICBzd2l0Y2ggKG1fcGxhdGZvcm1QbGF5ZXItPm1lZGlhU3RhdGUoKSkgewor
ICAgICAgICBjYXNlIE1NUlBsYXllcjo6TU1SUGxheVN0YXRlSWRsZToKKyAgICAgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBNTVJQbGF5ZXI6Ok1NUlBsYXlTdGF0ZVBsYXlpbmc6CisgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTU1SUGxheWVyOjpNTVJQbGF5U3RhdGVTdG9wcGVkOgorICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1NUlBsYXllcjo6TU1SUGxheVN0YXRlVW5rbm93bjoKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNo
IChtX3BsYXRmb3JtUGxheWVyLT5zdGF0ZSgpKSB7CisgICAgICAgIGNhc2UgTU1SUGxheWVyOjpN
UF9TVEFURV9JRExFOgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAg
ICAgIHNldEJ1ZmZlcmluZyhmYWxzZSk7CisgICAgICAgICAgICBtX21lZGlhSXNCdWZmZXJpbmcg
PSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGlzRnVsbHNjcmVlbigpKQorICAgICAg
ICAgICAgICAgIGVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNTVJQbGF5ZXI6Ok1QX1NUQVRFX0FDVElWRToKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICBtX3Nob3dCdWZmZXJpbmdJbWFnZSA9IGZh
bHNlOworICAgICAgICAgICAgbV9tZWRpYUlzQnVmZmVyaW5nID0gZmFsc2U7CisjZW5kaWYKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1NUlBsYXllcjo6TVBfU1RBVEVfVU5TVVBQ
T1JURUQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZHVyYXRpb24oKSB8fCBtb3ZpZUxvYWRU
eXBlKCkgPT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW0pCisgICAgICAgICAgICAmJiBtX3JlYWR5
U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKQorICAgICAgICAgICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgIH0KKworICAgIGlmICht
X3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBtX3dlYkNvcmVQbGF5ZXIt
PnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgICAgICAvLyBDcmVhdGUgcGxhdGZvcm0gbGF5ZXIgZm9yIHZpZGVvLgorICAgICAgICBpZiAo
IW1fcGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllciA9IFZpZGVvTGF5
ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZShtX3dlYkNvcmVQbGF5ZXIpOworI2VuZGlmCisgICAgfQor
ICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpCisgICAgICAgIG1fd2Vi
Q29yZVBsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworfQorCisvLyBJTU1SUGxheWVyTGlz
dGVuZXIgY2FsbGJhY2tzIGltcGxlbWVudGF0aW9uCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
b25TdGF0ZUNoYW5nZWQoTU1SUGxheWVyOjpNcFN0YXRlKQoreworICAgIHVwZGF0ZVN0YXRlcygp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25NZWRpYVN0YXR1c0NoYW5nZWQoTU1S
UGxheWVyOjpNTVJQbGF5U3RhdGUpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkVycm9yKE1NUlBsYXllcjo6RXJyb3IgdHlwZSkKK3sKKyAg
ICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uRHVyYXRp
b25DaGFuZ2VkKGZsb2F0IGR1cmF0aW9uKQoreworICAgIHVwZGF0ZVN0YXRlcygpOworICAgIG1f
d2ViQ29yZVBsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpvblRpbWVDaGFuZ2VkKGZsb2F0KQoreworICAgIG1fd2ViQ29yZVBsYXllci0+dGlt
ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uUGF1c2VTdGF0ZUNo
YW5nZWQoKQoreworICAgIGlmICghaXNGdWxsc2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVt
ZW50Kj4obV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpKTsKKyAgICAvLyBQYXVz
ZWQgc3RhdGUgY2hhbmdlIG5vdCBkdWUgdG8gbG9jYWwgY29udHJvbGxlci4KKyAgICBpZiAobV9w
bGF0Zm9ybVBsYXllci0+aXNQYXVzZWQoKSkKKyAgICAgICAgZWxlbWVudC0+cGF1c2UoKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gVGhlIEhNSSBmdWxsc2NyZWVuIHdpZGdldCBoYXMgcmVzdW1l
ZCBwbGF5LiBDaGVjayBpZiB0aGUKKyAgICAgICAgLy8gcGF1c2UgdGltZW91dCBvY2N1cnJlZC4K
KyAgICAgICAgbV9wbGF0Zm9ybVBsYXllci0+cHJvY2Vzc1BhdXNlVGltZW91dElmTmVjZXNzYXJ5
KCk7CisgICAgICAgIGVsZW1lbnQtPnBsYXkoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpvblJhdGVDaGFuZ2VkKGZsb2F0KQoreworICAgIG1fd2ViQ29yZVBsYXllci0+
cmF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uVm9sdW1lQ2hh
bmdlZChmbG9hdCB2b2x1bWUpCit7CisgICAgbV93ZWJDb3JlUGxheWVyLT52b2x1bWVDaGFuZ2Vk
KHZvbHVtZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblJlcGFpbnQoKQorewor
ICAgIG1fd2ViQ29yZVBsYXllci0+cmVwYWludCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6b25TaXplQ2hhbmdlZCgpCit7CisgICAgcmVzaXplU291cmNlRGltZW5zaW9ucygpOwor
ICAgIGlmIChoYXNWaWRlbygpKQorICAgICAgICBtX3dlYkNvcmVQbGF5ZXItPnNpemVDaGFuZ2Vk
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvblBsYXlOb3RpZmllZCgpCit7Cisg
ICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFF
bGVtZW50Kj4obV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpKSkKKyAgICAgICAg
ZWxlbWVudC0+cGxheSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6b25QYXVzZU5v
dGlmaWVkKCkKK3sKKyAgICBpZiAoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50
KCkpKQorICAgICAgICBlbGVtZW50LT5wYXVzZSgpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om9uQnVmZmVyaW5nKGJvb2wg
ZmxhZykKK3sKKyAgICBzZXRCdWZmZXJpbmcoZmxhZyk7Cit9CisjZW5kaWYKKworaW50IE1lZGlh
UGxheWVyUHJpdmF0ZTo6c2hvd0Vycm9yRGlhbG9nKE1NUlBsYXllcjo6RXJyb3IgdHlwZSkKK3sK
KyAgICB1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6V2ViS2l0OworCisgICAgV2ViUGFnZUNs
aWVudDo6QWxlcnRUeXBlIGF0eXBlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTU1S
UGxheWVyOjpNZWRpYU9LOgorICAgICAgICBhdHlwZSA9IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhT0s7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxheWVyOjpNZWRpYURlY29kZUVycm9yOgor
ICAgICAgICBhdHlwZSA9IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhRGVjb2RlRXJyb3I7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTU1SUGxheWVyOjpNZWRpYU1ldGFEYXRhRXJyb3I6CisgICAgICAg
IGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFNZXRhRGF0YUVycm9yOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE1NUlBsYXllcjo6TWVkaWFNZXRhRGF0YVRpbWVvdXRFcnJvcjoKKyAgICAg
ICAgYXR5cGUgPSBXZWJQYWdlQ2xpZW50OjpNZWRpYU1ldGFEYXRhVGltZW91dEVycm9yOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE1NUlBsYXllcjo6TWVkaWFOb01ldGFEYXRhRXJyb3I6Cisg
ICAgICAgIGF0eXBlID0gV2ViUGFnZUNsaWVudDo6TWVkaWFOb01ldGFEYXRhRXJyb3I7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxheWVyOjpNZWRpYVZpZGVvUmVjZWl2ZUVycm9yOgor
ICAgICAgICBhdHlwZSA9IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhVmlkZW9SZWNlaXZlRXJyb3I7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxheWVyOjpNZWRpYUF1ZGlvUmVjZWl2ZUVycm9y
OgorICAgICAgICBhdHlwZSA9IFdlYlBhZ2VDbGllbnQ6Ok1lZGlhQXVkaW9SZWNlaXZlRXJyb3I7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1SUGxheWVyOjpNZWRpYUludmFsaWRFcnJvcjoK
KyAgICAgICAgYXR5cGUgPSBXZWJQYWdlQ2xpZW50OjpNZWRpYUludmFsaWRFcnJvcjsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HKE1lZGlhLCAiQWxlcnQgdHlwZSBk
b2VzIG5vdCBleGlzdC4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGludCBy
YyA9IDA7CisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxN
ZWRpYUVsZW1lbnQqPihtX3dlYkNvcmVQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpOworICAg
IERvY3VtZW50KiB0b3Bkb2MgPSBlbGVtZW50LT5kb2N1bWVudCgpLT50b3BEb2N1bWVudCgpOwor
ICAgIGlmICh0b3Bkb2MtPnZpZXcoKSAmJiB0b3Bkb2MtPnZpZXcoKS0+aG9zdFdpbmRvdygpKQor
ICAgICAgICByYyA9IHRvcGRvYy0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpLT5zaG93QWxlcnREaWFsb2coYXR5cGUpOworICAgIHJldHVybiByYzsKK30KKworRnJh
bWVWaWV3KiBNZWRpYVBsYXllclByaXZhdGU6OmZyYW1lVmlldygpIGNvbnN0Cit7CisgICAgLy8g
V2UgcHJldmlvdXNseSB1c2VkIG1fd2ViQ29yZVBsYXllci0+ZnJhbWVWaWV3KCksIGJ1dCB0aGlz
IG1ldGhvZCByZXR1cm5zCisgICAgLy8gYSBudWxsIGZyYW1lVmlldyB1bnRpbCBxdWl0ZSBsYXRl
IGluIHRoZSBtZWRpYSBwbGF5ZXIgaW5pdGlhbGl6YXRpb24sCisgICAgLy8gYW5kIHN0YXJ0aW5n
IHF1aXRlIGVhcmx5IGluIHRoZSBtZWRpYSBwbGF5ZXIgZGVzdHJ1Y3Rpb24gKGJlY2F1c2UKKyAg
ICAvLyBpdCBtYXkgYmUgc2V0IHRvIHplcm8gYnkgdGhlIGRlc3RydWN0b3IgaW4gUmVuZGVyVmlk
ZW8uY3BwIGJlZm9yZQorICAgIC8vIG91ciBkZXN0cnVjdG9yIGlzIGNhbGxlZCwgbGVhdmluZyB1
cyB1bmFibGUgdG8gY2xlYW4gdXAgY2hpbGQgd2luZG93cworICAgIC8vIGluIG1tckRpc2Nvbm5l
Y3QpLgorICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVk
aWFFbGVtZW50Kj4obV93ZWJDb3JlUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpKTsKKyAgICBy
ZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlldygpOworfQorCitCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF0Zm9ybVdpbmRv
dygpCit7CisgICAgaWYgKGZyYW1lVmlldygpICYmIGZyYW1lVmlldygpLT5ob3N0V2luZG93KCkp
CisgICAgICAgIHJldHVybiBmcmFtZVZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKS0+cGxhdGZvcm1XaW5kb3coKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6OmlzRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnVs
bHNjcmVlbldlYlBhZ2VDbGllbnQ7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCitzdGF0aWMgY29uc3QgZG91YmxlIEJ1ZmZlcmluZ0FuaW1hdGlvbkRlbGF5ID0gMS4wIC8g
MjQ7CitzdGF0aWMgY2hhciogc19idWZmZXJpbmdJbWFnZURhdGEgPSAwOworc3RhdGljIGludCBz
X2J1ZmZlcmluZ0ltYWdlV2lkdGggPSAwOworc3RhdGljIGludCBzX2J1ZmZlcmluZ0ltYWdlSGVp
Z2h0ID0gMDsKKworUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTWVk
aWEoKSBjb25zdAoreworICAgIFBsYXRmb3JtTWVkaWEgcG07CisgICAgcG0udHlwZSA9IFBsYXRm
b3JtTWVkaWE6OlFOWE1lZGlhUGxheWVyVHlwZTsKKyAgICBwbS5tZWRpYS5xbnhNZWRpYVBsYXll
ciA9IGNvbnN0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4odGhpcyk7CisgICAgcmV0dXJuIHBt
OworfQorCitQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGU6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAoreworICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybiBtX3Bs
YXRmb3JtTGF5ZXIuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRC
dWZmZXJpbmdJbWFnZURhdGEoKQoreworICAgIHN0YXRpYyBib29sIGxvYWRlZCA9IGZhbHNlOwor
ICAgIGlmICghbG9hZGVkKSB7CisgICAgICAgIHN0YXRpYyBJbWFnZSogYnVmZmVyaW5nSWNvbiA9
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidmlkYnVmZmVyIikubGVha1JlZigpOworICAg
ICAgICBOYXRpdmVJbWFnZVNraWEqIG5hdGl2ZUltYWdlID0gYnVmZmVyaW5nSWNvbi0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW5hdGl2ZUltYWdlLT5pc0RhdGFDb21wbGV0
ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxvYWRlZCA9IHRydWU7CisgICAg
ICAgIG5hdGl2ZUltYWdlLT5sb2NrUGl4ZWxzKCk7CisKKyAgICAgICAgaW50IGJ1ZlNpemUgPSBu
YXRpdmVJbWFnZS0+d2lkdGgoKSAqIG5hdGl2ZUltYWdlLT5oZWlnaHQoKSAqIDQ7CisgICAgICAg
IHNfYnVmZmVyaW5nSW1hZ2VXaWR0aCA9IG5hdGl2ZUltYWdlLT53aWR0aCgpOworICAgICAgICBz
X2J1ZmZlcmluZ0ltYWdlSGVpZ2h0ID0gbmF0aXZlSW1hZ2UtPmhlaWdodCgpOworICAgICAgICBz
X2J1ZmZlcmluZ0ltYWdlRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MoYnVmU2l6ZSkp
OworICAgICAgICBtZW1jcHkoc19idWZmZXJpbmdJbWFnZURhdGEsIG5hdGl2ZUltYWdlLT5nZXRQ
aXhlbHMoKSwgYnVmU2l6ZSk7CisKKyAgICAgICAgbmF0aXZlSW1hZ2UtPnVubG9ja1BpeGVscygp
OworICAgICAgICBidWZmZXJpbmdJY29uLT5kZXJlZigpOworICAgIH0KK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmJ1ZmZlcmluZ1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2
YXRlPiopCit7CisgICAgaWYgKG1fc2hvd0J1ZmZlcmluZ0ltYWdlKSB7CisgICAgICAgIGlmICgh
aXNGdWxsc2NyZWVuKCkgJiYgbV9wbGF0Zm9ybUxheWVyKQorICAgICAgICAgICAgbV9wbGF0Zm9y
bUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9idWZmZXJpbmdUaW1lci5zdGFy
dE9uZVNob3QoQnVmZmVyaW5nQW5pbWF0aW9uRGVsYXkpOworICAgIH0KK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnNldEJ1ZmZlcmluZyhib29sIGJ1ZmZlcmluZykKK3sKKyAgICBpZiAo
IWhhc1ZpZGVvKCkpCisgICAgICAgIGJ1ZmZlcmluZyA9IGZhbHNlOyAvLyBCdWZmZXJpbmcgYW5p
bWF0aW9uIG5vdCB2aXNpYmxlIGZvciBhdWRpby4KKyAgICBpZiAoYnVmZmVyaW5nICE9IG1fc2hv
d0J1ZmZlcmluZ0ltYWdlKSB7CisgICAgICAgIG1fc2hvd0J1ZmZlcmluZ0ltYWdlID0gYnVmZmVy
aW5nOworICAgICAgICBpZiAoYnVmZmVyaW5nKSB7CisgICAgICAgICAgICBsb2FkQnVmZmVyaW5n
SW1hZ2VEYXRhKCk7CisgICAgICAgICAgICBtX2J1ZmZlcmluZ1RpbWVyLnN0YXJ0T25lU2hvdChC
dWZmZXJpbmdBbmltYXRpb25EZWxheSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9i
dWZmZXJpbmdUaW1lci5zdG9wKCk7CisKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgfQorfQor
CitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jYXRlVGV4dHVyZUlkKCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgdGV4aWQ7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4aWQpOworICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4aWQpOworICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0
ZXJpbmcgb24gcmVzaXplLgorICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAvLyBOUE9U
IHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRv
IEdMX0NMQU1QX1RPX0VER0UuCisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAg
IHJldHVybiB0ZXhpZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRyYXdCdWZmZXJp
bmdBbmltYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgaW50IHBvc2l0
aW9uTG9jYXRpb24sIGludCB0ZXhDb29yZExvY2F0aW9uKQoreworICAgIGlmIChtX3Nob3dCdWZm
ZXJpbmdJbWFnZSAmJiBzX2J1ZmZlcmluZ0ltYWdlRGF0YSAmJiAhaXNGdWxsc2NyZWVuKCkpIHsK
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gbWF0cml4OworCisg
ICAgICAgIC8vIFJvdGF0ZSB0aGUgYnVmZmVyaW5nIGluZGljYXRvciBzbyB0aGF0IGl0IHRha2Vz
IDEgc2Vjb25kIHRvIGRvIDEgcmV2b2x1dGlvbi4KKyAgICAgICAgdGltZXNwZWMgdGltZTsKKyAg
ICAgICAgY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRpbWUpOworICAgICAgICByZW5k
ZXJNYXRyaXgucm90YXRlKHRpbWUudHZfbnNlYyAvIDEwMDAwMDAwMDAuMCAqIDM2MC4wKTsKKwor
ICAgICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaW50IHRleElkID0gYWxsb2NhdGVUZXh0dXJlSWQoKTsKKyAgICAgICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXhJZCk7CisgICAgICAgIGlmICghaW5pdGlhbGl6ZWQp
IHsKKyAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBzX2J1ZmZlcmluZ0ltYWdlV2lkdGgsIHNf
YnVmZmVyaW5nSW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgMCwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgc19idWZmZXJpbmdJbWFnZURhdGEpOworICAgICAgICAgICAgZnJlZShzX2J1
ZmZlcmluZ0ltYWdlRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCB0ZXhjb29yZHNb
XSA9IHsgMCwgMCwgIDAsIDEsICAxLCAxLCAgMSwgMCB9OworICAgICAgICBGbG9hdFBvaW50IHZl
cnRpY2VzWzRdOworICAgICAgICBmbG9hdCBieCA9IHNfYnVmZmVyaW5nSW1hZ2VXaWR0aCAvIDIu
MDsKKyAgICAgICAgZmxvYXQgYnkgPSBzX2J1ZmZlcmluZ0ltYWdlSGVpZ2h0IC8gMi4wOworICAg
ICAgICB2ZXJ0aWNlc1swXSA9IHJlbmRlck1hdHJpeC5tYXBQb2ludChGbG9hdFBvaW50KC1ieCwg
LWJ5KSk7CisgICAgICAgIHZlcnRpY2VzWzFdID0gcmVuZGVyTWF0cml4Lm1hcFBvaW50KEZsb2F0
UG9pbnQoLWJ4LCBieSkpOworICAgICAgICB2ZXJ0aWNlc1syXSA9IHJlbmRlck1hdHJpeC5tYXBQ
b2ludChGbG9hdFBvaW50KGJ4LCBieSkpOworICAgICAgICB2ZXJ0aWNlc1szXSA9IHJlbmRlck1h
dHJpeC5tYXBQb2ludChGbG9hdFBvaW50KGJ4LCAtYnkpKTsKKworICAgICAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB2
ZXJ0aWNlcyk7CisgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcih0ZXhDb29yZExvY2F0aW9u
LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7CisgICAgICAgIGdsRHJhd0Fy
cmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOworICAgIH0KK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJp
dmF0ZUJsYWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViN2Y0MzI5
OTI4NmVlNTllNWQwNjE0NWExZDdmZmI5NmZhYTQ4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0
ZUJsYWNrQmVycnkuaApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnlfaAor
I2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5X2gKKworI2lmIEVOQUJMRShWSURF
TykKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybU1NUlBsYXllci5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3Bh
Y2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VDbGllbnQ7Cit9Cit9CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJTU1SUGxheWVyTGlz
dGVuZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOworCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUo
TWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlh
RW5naW5lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQg
bm90aWZ5QXBwQWN0aXZhdGVkRXZlbnQoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0Q2VydGlm
aWNhdGVQYXRoKGNvbnN0IFN0cmluZyYpOworCisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3Qg
U3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJlcGFyZVRvUGxheSgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OworICAg
IHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZvaWQg
ZHJhd0J1ZmZlcmluZ0FuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGludCBw
b3NpdGlvbkxvY2F0aW9uLCBpbnQgdGV4Q29vcmRMb2NhdGlvbik7CisjZW5kaWYKKworICAgIHZp
cnR1YWwgdm9pZCBwbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEludFNp
emUgbmF0dXJhbFNpemUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdmlydHVhbCB2
b2lkIHNldFZpc2libGUoYm9vbCk7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNlZWsoZmxvYXQgdGltZSk7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKworICAgIHZpcnR1YWwgYm9v
bCBwYXVzZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOwor
CisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNv
bnN0OworCisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQXZhaWxh
YmxlVmlkZW9GcmFtZSgpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIC8vIFdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGlzIHN1cHBvcnRlZCBieSB0
aGUgbWVkaWEgZW5naW5lIGZvciB0aGUgY3VycmVudCBtZWRpYS4KKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICAvLyBDYWxsZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUgaW50byBvciBv
dXQgb2YgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGFjY2Vs
ZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgeyB9CisjZW5kaWYKKworICAgIHZpcnR1YWwg
Ym9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0OworCisgICAgdmlydHVhbCBNZWRp
YVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Q7CisKKyAgICB2b2lk
IHJlc2l6ZVNvdXJjZURpbWVuc2lvbnMoKTsKKyAgICB2b2lkIHNldEZ1bGxzY3JlZW5XZWJQYWdl
Q2xpZW50KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNsaWVudCopOworICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBnZXRXaW5kb3coKTsKKyAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogZ2V0UGVlcldpbmRvdyhjb25zdCBjaGFy
KikgY29uc3Q7CisgICAgaW50IGdldFdpbmRvd1Bvc2l0aW9uKHVuc2lnbmVkJiB4LCB1bnNpZ25l
ZCYgeSwgdW5zaWduZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KSBjb25zdDsKKyAgICBjb25z
dCBjaGFyKiBtbXJDb250ZXh0TmFtZSgpOworICAgIGZsb2F0IHBlcmNlbnRMb2FkZWQoKTsKKyAg
ICB1bnNpZ25lZCBzb3VyY2VXaWR0aCgpOworICAgIHVuc2lnbmVkIHNvdXJjZUhlaWdodCgpOwor
ICAgIHZvaWQgc2V0QWxsb3dQUFNWb2x1bWVVcGRhdGVzKGJvb2wpOworCisgICAgLy8gSU1NUlBs
YXllckxpc3RlbmVyIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBvblN0YXRlQ2hh
bmdlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TU1SUGxheWVyOjpNcFN0YXRlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgb25NZWRpYVN0YXR1c0NoYW5nZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUlBs
YXllcjo6TU1SUGxheVN0YXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6TU1SUGxheWVyOjpFcnJvcik7CisgICAgdmlydHVhbCB2b2lkIG9uRHVyYXRp
b25DaGFuZ2VkKGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25UaW1lQ2hhbmdlZChmbG9hdCk7
CisgICAgdmlydHVhbCB2b2lkIG9uUmF0ZUNoYW5nZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdm9p
ZCBvblZvbHVtZUNoYW5nZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBvblBhdXNlU3RhdGVD
aGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIG9uUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9p
ZCBvblNpemVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIG9uUGxheU5vdGlmaWVkKCk7Cisg
ICAgdmlydHVhbCB2b2lkIG9uUGF1c2VOb3RpZmllZCgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgb25CdWZmZXJpbmcoYm9vbCk7CisjZW5kaWYK
KworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxzY3JlZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBzaG93RXJyb3JEaWFsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1NUlBsYXllcjo6RXJyb3Ip
OworICAgIHZpcnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kb3cqIHBs
YXRmb3JtV2luZG93KCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlh
UGxheWVyKik7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldygpIGNvbnN0OworICAgIHZvaWQg
dXBkYXRlU3RhdGVzKCk7CisgICAgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBTdHJpbmcmKSBjb25z
dDsKKworICAgIE1lZGlhUGxheWVyKiBtX3dlYkNvcmVQbGF5ZXI7CisgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06Ok1NUlBsYXllciogbV9wbGF0Zm9ybVBsYXllcjsKKworICAgIG11dGFibGUgTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBh
Z2VDbGllbnQqIG1fZnVsbHNjcmVlbldlYlBhZ2VDbGllbnQ7CisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIHZvaWQgYnVmZmVyaW5nVGltZXJGaXJlZChUaW1lcjxNZWRpYVBs
YXllclByaXZhdGU+Kik7CisgICAgdm9pZCBzZXRCdWZmZXJpbmcoYm9vbCk7CisKKyAgICBUaW1l
cjxNZWRpYVBsYXllclByaXZhdGU+IG1fYnVmZmVyaW5nVGltZXI7CisgICAgUmVmUHRyPFBsYXRm
b3JtTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKKyAgICBib29sIG1fc2hvd0J1ZmZlcmluZ0ltYWdl
OworICAgIGJvb2wgbV9tZWRpYUlzQnVmZmVyaW5nOworI2VuZGlmCisKKyAgICB2b2lkIHVzZXJE
cml2ZW5TZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7CisgICAgVGlt
ZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX3VzZXJEcml2ZW5TZWVrVGltZXI7CisgICAgZmxvYXQg
bV9sYXN0U2Vla1RpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU8pCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeV9o
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>