<?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>62886</bug_id>
          
          <creation_ts>2011-06-17 11:01:09 -0700</creation_ts>
          <short_desc>Basic display of WebVTT captions</short_desc>
          <delta_ts>2011-12-19 09:26:07 -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>Media</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anna Cavender">annacc</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>macpherson</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>vcarbune</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>422735</commentid>
    <comment_count>0</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-06-17 11:01:09 -0700</bug_when>
    <thetext>This change will enable rendering of text track cues on &lt;video&gt;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523549</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 14:58:59 -0800</bug_when>
    <thetext>Because of the complexity of rendering WebVTT and because the rendering section of the spec is still in flux, I think it makes sense to implement a simple text track renderer using default positioning and style only. 

FWIW, this is the approach that Microsoft has taken for the beta (at least) of IE 10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523557</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 15:52:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/10320025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523561</commentid>
    <comment_count>3</comment_count>
      <attachid>119786</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 16:20:22 -0800</bug_when>
    <thetext>Created attachment 119786
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523562</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-18 16:21:33 -0800</bug_when>
    <thetext>Attachment 119786 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1

Source/WebCore/html/shadow/MediaControlElements.h:500:  The parameter name &quot;arena&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523575</commentid>
    <comment_count>5</comment_count>
      <attachid>119786</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-18 16:42:40 -0800</bug_when>
    <thetext>Comment on attachment 119786
Proposed patch

Attachment 119786 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10933352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523577</commentid>
    <comment_count>6</comment_count>
      <attachid>119786</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-18 16:59:21 -0800</bug_when>
    <thetext>Comment on attachment 119786
Proposed patch

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

r- due to using innerHTML.  We should at the very least have tests which show the effect of using it.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:1007
&gt; +        HTMLTrackElement* trackElement;
&gt; +        for (Node* node = firstChild(); node; node = node-&gt;nextSibling()) {
&gt; +            if (!node-&gt;hasTagName(trackTag))
&gt; +                continue;
&gt; +            trackElement = static_cast&lt;HTMLTrackElement*&gt;(node);
&gt; +            if (trackElement-&gt;track() != track)
&gt; +                continue;

I don&apos;t think it is necessary to have the trackElement outside of the loop.

&gt; Source/WebCore/html/HTMLMediaElement.h:70
&gt; +typedef PODIntervalTree &lt;double, TextTrackCue*&gt; CueIntervalTree;

Don&apos;t want the space after PODIntervalTree.

&gt; Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp:379
&gt; +    StringBuilder cues;
&gt; +    for (size_t i = 0; i &lt; visibleCues.size(); ++i) {
&gt; +        if (i &gt; 0 &amp;&amp; cues.length())
&gt; +            cues.append(&quot;&lt;br&gt;&quot;);
&gt; +
&gt; +        TextTrackCue* cue = visibleCues[i].data();
&gt; +        ASSERT(cue-&gt;isActive());
&gt; +        if (!cue-&gt;track() || cue-&gt;track()-&gt;mode() != TextTrack::SHOWING)
&gt; +            continue;
&gt; +
&gt; +        cues.append(cue-&gt;getCueAsSource());
&gt; +    }
&gt; +
&gt; +    ExceptionCode e; 
&gt; +    m_textTrackDisplay-&gt;setInnerHTML(cues.toString(), e);
&gt; +    if (cues.length())
&gt; +        m_textDisplayContainer-&gt;show();
&gt; +    else
&gt; +        m_textDisplayContainer-&gt;hide();

I think it would be nicer/safer to use programatic DOM APIs (appendChild, etc) instead of building a string and using innerHTML.  If you do need to parse the cues as HTML, I would recommend doing it one cue at a time and not as a concatenated string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523616</commentid>
    <comment_count>7</comment_count>
      <attachid>119795</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 18:34:44 -0800</bug_when>
    <thetext>Created attachment 119795
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523617</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 18:35:26 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 119786 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119786&amp;action=review
&gt; 
&gt; r- due to using innerHTML.  We should at the very least have tests which show the effect of using it.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:1007
&gt; &gt; +        HTMLTrackElement* trackElement;
&gt; &gt; +        for (Node* node = firstChild(); node; node = node-&gt;nextSibling()) {
&gt; &gt; +            if (!node-&gt;hasTagName(trackTag))
&gt; &gt; +                continue;
&gt; &gt; +            trackElement = static_cast&lt;HTMLTrackElement*&gt;(node);
&gt; &gt; +            if (trackElement-&gt;track() != track)
&gt; &gt; +                continue;
&gt; 
&gt; I don&apos;t think it is necessary to have the trackElement outside of the loop.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/html/HTMLMediaElement.h:70
&gt; &gt; +typedef PODIntervalTree &lt;double, TextTrackCue*&gt; CueIntervalTree;
&gt; 
&gt; Don&apos;t want the space after PODIntervalTree.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp:379
&gt; &gt; +    StringBuilder cues;
&gt; &gt; +    for (size_t i = 0; i &lt; visibleCues.size(); ++i) {
&gt; &gt; +        if (i &gt; 0 &amp;&amp; cues.length())
&gt; &gt; +            cues.append(&quot;&lt;br&gt;&quot;);
&gt; &gt; +
&gt; &gt; +        TextTrackCue* cue = visibleCues[i].data();
&gt; &gt; +        ASSERT(cue-&gt;isActive());
&gt; &gt; +        if (!cue-&gt;track() || cue-&gt;track()-&gt;mode() != TextTrack::SHOWING)
&gt; &gt; +            continue;
&gt; &gt; +
&gt; &gt; +        cues.append(cue-&gt;getCueAsSource());
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    ExceptionCode e; 
&gt; &gt; +    m_textTrackDisplay-&gt;setInnerHTML(cues.toString(), e);
&gt; &gt; +    if (cues.length())
&gt; &gt; +        m_textDisplayContainer-&gt;show();
&gt; &gt; +    else
&gt; &gt; +        m_textDisplayContainer-&gt;hide();
&gt; 
&gt; I think it would be nicer/safer to use programatic DOM APIs (appendChild, etc) instead of building a string and using innerHTML.  If you do need to parse the cues as HTML, I would recommend doing it one cue at a time and not as a concatenated string.

Fixed.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523635</commentid>
    <comment_count>9</comment_count>
      <attachid>119795</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-18 18:57:08 -0800</bug_when>
    <thetext>Comment on attachment 119795
Updated patch

Attachment 119795 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10935368</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523680</commentid>
    <comment_count>10</comment_count>
      <attachid>119795</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-18 20:38:56 -0800</bug_when>
    <thetext>Comment on attachment 119795
Updated patch

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

r=me, but please consider adding a test with tags in the content.  (Also, make sure all the parts of the test are there.)

&gt; LayoutTests/media/track/track-cue-rendering.html:65
&gt; +            testTrack = document.querySelectorAll(&apos;track&apos;)[0];

Nit: This could just use querySelector(&apos;track&apos;) if you so felt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523688</commentid>
    <comment_count>11</comment_count>
      <attachid>119806</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 20:55:03 -0800</bug_when>
    <thetext>Created attachment 119806
Updated, one more time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523691</commentid>
    <comment_count>12</comment_count>
      <attachid>119806</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 20:59:35 -0800</bug_when>
    <thetext>Comment on attachment 119806
Updated, one more time.

Remove r? because Sam already r+&apos;d the previous version. This one is just so the ews bots can tell me if the Chromium specific code compiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523695</commentid>
    <comment_count>13</comment_count>
      <attachid>119806</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-18 21:11:35 -0800</bug_when>
    <thetext>Comment on attachment 119806
Updated, one more time.

Attachment 119806 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10932449</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523746</commentid>
    <comment_count>14</comment_count>
      <attachid>119820</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 22:59:59 -0800</bug_when>
    <thetext>Created attachment 119820
One more patch for the EWS bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523753</commentid>
    <comment_count>15</comment_count>
      <attachid>119820</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-18 23:05:26 -0800</bug_when>
    <thetext>Comment on attachment 119820
One more patch for the EWS bot

Attachment 119820 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10921510</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523754</commentid>
    <comment_count>16</comment_count>
      <attachid>119822</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-18 23:10:43 -0800</bug_when>
    <thetext>Created attachment 119822
YAP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523917</commentid>
    <comment_count>17</comment_count>
      <attachid>119822</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 08:23:22 -0800</bug_when>
    <thetext>Comment on attachment 119822
YAP

Attachment 119822 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10942012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523922</commentid>
    <comment_count>18</comment_count>
      <attachid>119867</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-19 08:38:00 -0800</bug_when>
    <thetext>Created attachment 119867
Updated patch

Updated to fix a problem the Chromium EWS bot found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523939</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-19 09:26:07 -0800</bug_when>
    <thetext> http://trac.webkit.org/changeset/103242</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119786</attachid>
            <date>2011-12-18 16:20:22 -0800</date>
            <delta_ts>2011-12-18 18:34:44 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_rendering_10.txt</filename>
            <type>text/plain</type>
            <size>37391</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzE5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDExLTEyLTE4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0IHRy
YWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKKworICAgICAgICAqIGNzcy9t
ZWRpYUNvbnRyb2xzLmNzczoKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJh
Y2stY29udGFpbmVyKToKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2st
ZGlzcGxheSk6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6IEluaXRpYWxp
emUgbV9oYXZlVmlzaWJsZVRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMpOiBUcmlnZ2VyIGFuIHVwZGF0ZSBvZiB0
aGUgdGV4dAorICAgICAgICAgICAgdHJhY2sgZGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKTogY2FsbCBjb25maWd1cmVUZXh0
VHJhY2tEaXNwbGF5KCkgc28gCisgICAgICAgICAgICB0aGUgdGV4dCB0cmFjayBkaXNwbGF5IGlz
IGhpZGRlbiBvciBzaG93biB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJblRoaXNUcmFjayk6IE1pbm9yIGNsZWFudXAu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYUNvbnRyb2xz
KTogY29uZmlndXJlTWVkaWFDb250cm9scygpIGFsd2F5cyBjYWxsZWQKKyAgICAgICAgICAgIHJl
c2V0IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250cm9scywgZG8gaXQgaGVyZSBpbnN0ZWFkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scyk6
IFNpbXBsaWZ5IGFuZCBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSk6IFNob3cgYW5kIGhpZGUgdGV4dCB0cmFjayBk
aXNwbGF5LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudGx5VmlzaWJsZUN1ZXMpOgorCisgICAgICAg
ICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmxheW91dCk6IE5ldy4gQ2FsbCB0aGUgZGlzcGxheSBlbGVtZW50IHNvIGl0
IGNhbgorICAgICAgICAgICAgdXBkYXRlIHRoZSBwb3NpdGlvbiBhbmQgZm9udCBzaXplLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyk6IEtlZXAgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQKKyAgICAgICAgICAgIHBvc2l0
aW9uZWQgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8gYm94LCBhbmQgc2l6ZSB0aGUgZm9u
dCBhY2NvcmRpbmcgdG8gdGhlIHZpZGVvIGhlaWdodC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6ZGlzcGxheVR5cGUpOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50KTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbGxlcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93
VGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Um9vdEVsZW1lbnQ6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Lmg6CisK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06Ok1l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNob3dUZXh0VHJhY2tE
aXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVu
dDo6aGlkZVRleHRUcmFja0Rpc3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoKKwogMjAxMS0xMi0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvbWVk
aWFDb250cm9scy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHMuY3NzCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFD
b250cm9scy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwzICsxODYsMjkgQEAgYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbgogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiB7CiAgICAgZGlzcGxheTogbm9u
ZTsKIH0KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBwYWRkaW5nOiAxMHB4
IDIwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAg
ICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
CisgICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKKyAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsK
KyAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKyAgICB0ZXh0LWluZGVudDogMDsKKyAgICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZTsKK30KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFj
ay1kaXNwbGF5IHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiYSgwLCAwLCAwLCAwLjUpOworICAgIGNvbG9yOiB5ZWxsb3c7CisgICAgcGFkZGluZzogMHB4
IDJweDsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAko
cmV2aXNpb24gMTAzMDYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fcGFyc2luZ0luUHJvZ3Jlc3MoY3JlYXRl
ZEJ5UGFyc2VyKQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAsIG1fdHJhY2tzQXJlUmVh
ZHkodHJ1ZSkKKyAgICAsIG1faGF2ZVZpc2libGVUZXh0VHJhY2soZmFsc2UpCiAgICAgLCBtX3Rl
eHRUcmFja3MoMCkKICNlbmRpZgogI2lmIEVOQUJMRShXRUJfQVVESU8pCkBAIC05NDAsMjMgKzk0
MSwzMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVBY3RpdmVUZXh0
VHJhY2tDdWVzKGZsb2F0IG1vdmllVGltZSkKIHsKLSAgICBWZWN0b3I8Q3VlSW50ZXJ2YWxUcmVl
OjpJbnRlcnZhbFR5cGU+IHByZXZpb3VzbHlWaXNpYmxlQ3VlcyA9IG1fY3VycmVudGx5VmlzaWJs
ZUN1ZXM7CisgICAgQ3VlTGlzdCBwcmV2aW91c2x5QWN0aXZlQ3VlcyA9IG1fY3VycmVudGx5QWN0
aXZlQ3VlczsKKyAgICBib29sIGFjdGl2ZVNldENoYW5nZWQgPSBmYWxzZTsKIAotICAgIG1fY3Vy
cmVudGx5VmlzaWJsZUN1ZXMgPSBtX2N1ZVRyZWUuYWxsT3ZlcmxhcHMobV9jdWVUcmVlLmNyZWF0
ZUludGVydmFsKG1vdmllVGltZSwgbW92aWVUaW1lKSk7CisgICAgbV9jdXJyZW50bHlBY3RpdmVD
dWVzID0gbV9jdWVUcmVlLmFsbE92ZXJsYXBzKG1fY3VlVHJlZS5jcmVhdGVJbnRlcnZhbChtb3Zp
ZVRpbWUsIG1vdmllVGltZSkpOwogICAgIAogICAgIC8vIEZJWE1FKDcyMTcxKTogRXZlbnRzIG5l
ZWQgdG8gYmUgc29ydGVkIGFuZCBmaWx0ZXJlZCBiZWZvcmUgZGlzcGF0Y2hpbmcuCiAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZpb3VzbHlWaXNpYmxlQ3Vlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoIW1fY3VycmVudGx5VmlzaWJsZUN1ZXMuY29udGFpbnMocHJldmlvdXNs
eVZpc2libGVDdWVzW2ldKSkKLSAgICAgICAgICAgIHByZXZpb3VzbHlWaXNpYmxlQ3Vlc1tpXS5k
YXRhKCktPnNldElzQWN0aXZlKGZhbHNlKTsKLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2N1cnJlbnRseVZpc2libGVDdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgh
cHJldmlvdXNseVZpc2libGVDdWVzLmNvbnRhaW5zKG1fY3VycmVudGx5VmlzaWJsZUN1ZXNbaV0p
KQotICAgICAgICAgICAgbV9jdXJyZW50bHlWaXNpYmxlQ3Vlc1tpXS5kYXRhKCktPnNldElzQWN0
aXZlKHRydWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJldmlvdXNseUFjdGl2ZUN1
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRseUFjdGl2ZUN1ZXMuY29u
dGFpbnMocHJldmlvdXNseUFjdGl2ZUN1ZXNbaV0pKSB7CisgICAgICAgICAgICBwcmV2aW91c2x5
QWN0aXZlQ3Vlc1tpXS5kYXRhKCktPnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICAgICAgICAgIGFj
dGl2ZVNldENoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jdXJyZW50bHlBY3RpdmVDdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICghcHJldmlvdXNseUFjdGl2ZUN1ZXMuY29udGFpbnMobV9jdXJyZW50bHlBY3RpdmVDdWVz
W2ldKSkgeworICAgICAgICAgICAgbV9jdXJyZW50bHlBY3RpdmVDdWVzW2ldLmRhdGEoKS0+c2V0
SXNBY3RpdmUodHJ1ZSk7CisgICAgICAgICAgICBhY3RpdmVTZXRDaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRSg3MjE3Myk6IFBhdXNlIHRoZSBtZWRp
YSBlbGVtZW50IGZvciBjdWVzIGdvaW5nIHBhc3QgdGhlaXIgZW5kVGltZQogICAgIC8vIGR1cmlu
ZyBhIG1vbm90b25pYyB0aW1lIGluY3JlYXNlLgorCisgICAgaWYgKGFjdGl2ZVNldENoYW5nZWQg
JiYgaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVRl
eHRUcmFja0Rpc3BsYXkoKTsKIH0KIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tz
QXJlUmVhZHkoKSBjb25zdApAQCAtOTgyLDI5ICs5OTEsMzAgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tSZWFkeVN0YQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a01vZGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiB7Ci0gICAgLy8gNC44LjEwLjEyLjMgU291
cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKLSAgICAvLyAuLi4gd2hlbiBhIHRleHQgdHJh
Y2sgY29ycmVzcG9uZGluZyB0byBhIHRyYWNrIGVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoIHRleHQg
dHJhY2sKLSAgICAvLyBtb2RlIHNldCB0byBkaXNhYmxlZCBhbmQgc3Vic2VxdWVudGx5IGNoYW5n
ZXMgaXRzIHRleHQgdHJhY2sgbW9kZSB0byBoaWRkZW4sIHNob3dpbmcsCi0gICAgLy8gb3Igc2hv
d2luZyBieSBkZWZhdWx0IGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIHVzZXIgYWdlbnQgbXVzdCBp
bW1lZGlhdGVseSBhbmQgc3luY2hyb25vdXNseQotICAgIC8vIHJ1biB0aGUgZm9sbG93aW5nIGFs
Z29yaXRobSAuLi4KLSAgICAKLSAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpICE9IFRleHRUcmFj
azo6VHJhY2tFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSFRNTFRyYWNrRWxl
bWVudCogdHJhY2tFbGVtZW50OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5o
YXNUYWdOYW1lKHRyYWNrVGFnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0cmFj
a0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVHJhY2tFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAg
IGlmICh0cmFja0VsZW1lbnQtPnRyYWNrKCkgIT0gdHJhY2spCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBNYXJrIHRoaXMgdHJhY2sgYXMgImNvbmZpZ3VyZWQiIHNvIGNvbmZp
Z3VyZVRleHRUcmFjayB3b24ndCBjaGFuZ2UgdGhlIG1vZGUgYWdhaW4uCi0gICAgICAgIHRyYWNr
RWxlbWVudC0+c2V0SGFzQmVlbkNvbmZpZ3VyZWQodHJ1ZSk7Ci0gICAgICAgIGlmICh0cmFjay0+
bW9kZSgpICE9IFRleHRUcmFjazo6RElTQUJMRUQgJiYgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRl
KCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6Tk9ORSkKLSAgICAgICAgICAgIHRyYWNrRWxlbWVudC0+
c2NoZWR1bGVMb2FkKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmICh0cmFjay0+dHJhY2tUeXBl
KCkgPT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpIHsKKyAgICAgICAgLy8gNC44LjEwLjEyLjMg
U291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKKyAgICAgICAgLy8gLi4uIHdoZW4gYSB0
ZXh0IHRyYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjayBlbGVtZW50IGlzIGNyZWF0ZWQgd2l0
aCB0ZXh0IHRyYWNrCisgICAgICAgIC8vIG1vZGUgc2V0IHRvIGRpc2FibGVkIGFuZCBzdWJzZXF1
ZW50bHkgY2hhbmdlcyBpdHMgdGV4dCB0cmFjayBtb2RlIHRvIGhpZGRlbiwgc2hvd2luZywKKyAg
ICAgICAgLy8gb3Igc2hvd2luZyBieSBkZWZhdWx0IGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIHVz
ZXIgYWdlbnQgbXVzdCBpbW1lZGlhdGVseSBhbmQgc3luY2hyb25vdXNseQorICAgICAgICAvLyBy
dW4gdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gLi4uCisKKyAgICAgICAgSFRNTFRyYWNrRWxlbWVu
dCogdHJhY2tFbGVtZW50OworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7
IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoIW5v
ZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgdHJhY2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxlbWVudCo+KG5v
ZGUpOworICAgICAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+dHJhY2soKSAhPSB0cmFjaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFy
ayB0aGlzIHRyYWNrIGFzICJjb25maWd1cmVkIiBzbyBjb25maWd1cmVUZXh0VHJhY2sgd29uJ3Qg
Y2hhbmdlIHRoZSBtb2RlIGFnYWluLgorICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRIYXNC
ZWVuQ29uZmlndXJlZCh0cnVlKTsKKyAgICAgICAgICAgIGlmICh0cmFjay0+bW9kZSgpICE9IFRl
eHRUcmFjazo6RElTQUJMRUQgJiYgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRlKCkgPT0gSFRNTFRy
YWNrRWxlbWVudDo6Tk9ORSkKKyAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQtPnNjaGVkdWxl
TG9hZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisKKyAgICBjb25m
aWd1cmVUZXh0VHJhY2tEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4
dFRyYWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKikKQEAgLTIyODksMTAgKzIyOTksMTAgQEAgYm9v
bCBIVE1MTWVkaWFFbGVtZW50Ojp1c2VySXNJbnRlcmVzdGVkSQogCiAgICAgLy8gSWYgLi4uIHRo
ZSB1c2VyIGhhcyBpbmRpY2F0ZWQgYW4gaW50ZXJlc3QgaW4gaGF2aW5nIGEgdHJhY2sgd2l0aCB0
aGlzIHRleHQgdHJhY2sga2luZCwgdGV4dCB0cmFjayBsYW5ndWFnZSwgLi4uIAogICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5n
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpz
dWJ0aXRsZXNLZXl3b3JkKCkgfHwga2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgp
KSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGlmIChraW5kID09IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpICYmICFzZXR0
aW5ncy0+c2hvdWxkRGlzcGxheVN1YnRpdGxlcygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpZiAoa2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgpICYmICFz
ZXR0aW5ncy0+c2hvdWxkRGlzcGxheUNhcHRpb25zKCkpCkBAIC0yMzAxLDcgKzIzMTEsNyBAQCBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJCiAgICAgfQogCiAgICAgaWYg
KGtpbmQgPT0gVGV4dFRyYWNrOjpkZXNjcmlwdGlvbnNLZXl3b3JkKCkpIHsKLSAgICAgICAgaWYg
KCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3JpcHRpb25zKCkp
CisgICAgICAgIGlmICghc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3JpcHRpb25zKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB1c2VySXNJbnRlcmVz
dGVkSW5UaGlzTGFuZ3VhZ2UodHJhY2tFbGVtZW50LT5zcmNsYW5nKCkpOwogICAgIH0KQEAgLTM0
NTIsNiArMzQ2Miw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFDb250cm8K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29udHJvbHMtPnNldE1lZGlhQ29udHJvbGxl
cihtX21lZGlhQ29udHJvbGxlciA/IG1fbWVkaWFDb250cm9sbGVyLmdldCgpIDogc3RhdGljX2Nh
c3Q8TWVkaWFDb250cm9sbGVySW50ZXJmYWNlKj4odGhpcykpOworICAgIGNvbnRyb2xzLT5yZXNl
dCgpOwogCiAgICAgZW5zdXJlU2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChjb250cm9scywgZWMp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMzQ2NiwxMSArMzQ3Nyw5IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghaGFzTWVkaWFDb250cm9scygpKSB7Ci0gICAgICAgIGlmICghY3JlYXRlTWVkaWFDb250
cm9scygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJl
c2V0KCk7Ci0gICAgfQorICAgIGlmICghaGFzTWVkaWFDb250cm9scygpICYmICFjcmVhdGVNZWRp
YUNvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1lZGlhQ29udHJvbHMoKS0+c2hv
dygpOwogI2Vsc2UKICAgICBpZiAobV9wbGF5ZXIpCkBAIC0zNDc4LDYgKzM0ODcsMzUgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbgogI2VuZGlmCiB9CiAKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRU
cmFja0Rpc3BsYXkoKQoreworICAgIEFTU0VSVChtX3RleHRUcmFja3MpOworCisgICAgYm9vbCBo
YXZlVmlzaWJsZVRleHRUcmFjayA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3RleHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdGV4dFRyYWNr
cy0+aXRlbShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6U0hPV0lORykgeworICAgICAgICAgICAg
aGF2ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAobV9oYXZlVmlzaWJsZVRleHRUcmFjayA9IGhhdmVWaXNpYmxl
VGV4dFRyYWNrKQorICAgICAgICByZXR1cm47CisgICAgbV9oYXZlVmlzaWJsZVRleHRUcmFjayA9
IGhhdmVWaXNpYmxlVGV4dFRyYWNrOworCisgICAgaWYgKCFtX2hhdmVWaXNpYmxlVGV4dFRyYWNr
KSB7CisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPmhpZGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMoKSAmJiAhY3JlYXRlTWVkaWFDb250cm9scygp
KQorICAgICAgICByZXR1cm47CisgICAgbWVkaWFDb250cm9scygpLT5zaG93VGV4dFRyYWNrRGlz
cGxheSgpOworfQorI2VuZGlmCisKIHZvaWQqIEhUTUxNZWRpYUVsZW1lbnQ6OnByZURpc3BhdGNo
RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQgJiYgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDEwMzA2MykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw2ICs2NiwxMSBAQCBjbGFzcyBXaWRnZXQ7CiBjbGFzcyBEaXNwbGF5U2xlZXBEaXNhYmxl
cjsKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQordHlwZWRlZiBQT0RJbnRlcnZh
bFRyZWUgPGRvdWJsZSwgVGV4dFRyYWNrQ3VlKj4gQ3VlSW50ZXJ2YWxUcmVlOwordHlwZWRlZiBW
ZWN0b3I8Q3VlSW50ZXJ2YWxUcmVlOjpJbnRlcnZhbFR5cGU+IEN1ZUxpc3Q7CisjZW5kaWYKKwog
Ly8gRklYTUU6IFRoZSBpbmhlcml0YW5jZSBmcm9tIE1lZGlhUGxheWVyQ2xpZW50IGhlcmUgc2hv
dWxkIGJlIHByaXZhdGUgaW5oZXJpdGFuY2UuCiAvLyBCdXQgaXQgY2FuJ3QgYmUgdW50aWwgdGhl
IENocm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCBjbGFzcyBpcyBmaXhlZCBzbyBpdAog
Ly8gbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3RpbmcgYSBNZWRpYVBsYXllckNsaWVudCB0
byBhbiBIVE1MTWVkaWFFbGVtZW50LgpAQCAtMTk2LDYgKzIwMSw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPFRleHRUcmFjaz4gYWRkVHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gYWRkVHJhY2soa2luZCwgZW1wdHlTdHJpbmcoKSwgZW1wdHlT
dHJpbmcoKSwgZWMpOyB9CiAKICAgICBUZXh0VHJhY2tMaXN0KiB0ZXh0VHJhY2tzKCk7CisgICAg
Q3VlTGlzdCBjdXJyZW50bHlBY3RpdmVDdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50bHlB
Y3RpdmVDdWVzOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tXYXNBZGRlZChIVE1MVHJhY2tF
bGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrV2lsbEJlUmVtb3ZlZChIVE1MVHJhY2tF
bGVtZW50Kik7CkBAIC0yMDMsNiArMjA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29uZmlndXJl
VGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqKTsKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFj
a3MoKTsKICAgICBib29sIHRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0OworICAgIHZvaWQgY29u
ZmlndXJlVGV4dFRyYWNrRGlzcGxheSgpOwogCiAgICAgLy8gVGV4dFRyYWNrQ2xpZW50CiAgICAg
dmlydHVhbCB2b2lkIHRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayopOwpAQCAt
NTQ5LDEyICs1NTYsMTIgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAg
ICBib29sIG1fdHJhY2tzQXJlUmVhZHkgOiAxOworICAgIGJvb2wgbV9oYXZlVmlzaWJsZVRleHRU
cmFjayA6IDE7CisKICAgICBSZWZQdHI8VGV4dFRyYWNrTGlzdD4gbV90ZXh0VHJhY2tzOwogICAg
IFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVj
dGlvbkJlZ2FuOwotICAgIAotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlIDxkb3VibGUsIFRl
eHRUcmFja0N1ZSo+IEN1ZUludGVydmFsVHJlZTsKICAgICBDdWVJbnRlcnZhbFRyZWUgbV9jdWVU
cmVlOwotICAgIFZlY3RvcjxDdWVJbnRlcnZhbFRyZWU6OkludGVydmFsVHlwZT4gbV9jdXJyZW50
bHlWaXNpYmxlQ3VlczsKKyAgICBDdWVMaXN0IG1fY3VycmVudGx5QWN0aXZlQ3VlczsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDEwMzA2MykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNp
bmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
ICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTExMTUsNiAr
MTExNiwxMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xDdXJyZW50VAogICAg
IHJldHVybiBpZDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorCitjbGFzcyBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50IDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50KE5vZGUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOworfTsKKworUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVy
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2so
bm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpsYXlv
dXQoKQoreworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKyAgICBpZiAoc3R5bGUoKS0+ZGlz
cGxheSgpID09IE5PTkUpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtZWRpYUNvbnRy
b2xFbGVtZW50VHlwZShub2RlKCkpID09IE1lZGlhVGV4dFRyYWNrRGlzcGxheUNvbnRhaW5lcik7
CisKKyAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmlldygpKTsK
KyAgICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Kj4o
bm9kZSgpKS0+dXBkYXRlU2l6ZXMoKTsKK30KKworaW5saW5lIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChkb2N1bWVudCkK
KyAgICAsIG1fZm9udFNpemUoMCkKKyAgICAsIG1fYm90dG9tKDApCit7Cit9CisKK1Bhc3NSZWZQ
dHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICBSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gZWxlbWVudCA9
IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KGRvY3Vt
ZW50KSk7CisgICAgZWxlbWVudC0+aGlkZSgpOworICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2Uo
KTsKK30KKworUmVuZGVyT2JqZWN0KiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sK
KyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCh0
aGlzKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250
YWluZXIiKSk7CisgICAgcmV0dXJuIGlkOworfQorCitzdGF0aWMgY29uc3QgZmxvYXQgbWltaW11
bUZvbnRTaXplID0gMTY7CitzdGF0aWMgY29uc3QgZmxvYXQgdmlkZW9IZWlnaHRGb250U2l6ZURp
dmlzb3IgPSAyNTsKK3N0YXRpYyBjb25zdCBmbG9hdCB0cmFja0JvdHRvbU11bHRpcGxpZXIgPSAw
Ljk7CisgICAgCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVw
ZGF0ZVNpemVzKCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1Bh
cmVudE1lZGlhRWxlbWVudCh0aGlzKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCB8fCAhbWVkaWFF
bGVtZW50LT5yZW5kZXJlcigpIHx8ICFtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPmlzVmlkZW8o
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEludFJlY3QgdmlkZW9Cb3ggPSB0b1JlbmRl
clZpZGVvKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSktPnZpZGVvQm94KCk7CisgICAgaWYgKG1f
dmlkZW9EaXNwbGF5U2l6ZSA9PSB2aWRlb0JveCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdmlk
ZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94OworCisgICAgZmxvYXQgZm9udFNpemUgPSBtX3ZpZGVv
RGlzcGxheVNpemUuc2l6ZSgpLmhlaWdodCgpIC8gdmlkZW9IZWlnaHRGb250U2l6ZURpdmlzb3I7
CisgICAgaWYgKGZvbnRTaXplIDwgbWltaW11bUZvbnRTaXplKQorICAgICAgICBmb250U2l6ZSA9
IG1pbWltdW1Gb250U2l6ZTsKKyAgICBpZiAoZm9udFNpemUgIT0gbV9mb250U2l6ZSkgeworICAg
ICAgICBtX2ZvbnRTaXplID0gZm9udFNpemU7CisgICAgICAgIGVuc3VyZUlubGluZVN0eWxlRGVj
bCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihmb250
U2l6ZSkgKyAicHgiKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHN0YXRpY19j
YXN0PExheW91dFVuaXQ+KG1fdmlkZW9EaXNwbGF5U2l6ZS55KCkgKyBtX3ZpZGVvRGlzcGxheVNp
emUuaGVpZ2h0KCkgLSAobV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpICogdHJhY2tCb3R0b21N
dWx0aXBsaWVyKSk7CisgICAgaWYgKGJvdHRvbSAhPSBtX2JvdHRvbSkgeworICAgICAgICBtX2Jv
dHRvbSA9IGJvdHRvbTsKKyAgICAgICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihib3R0b20pICsgInB4Iik7Cisg
ICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01lZGlhQ29udHJv
bFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxl
bWVudChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xFbGVtZW50KGRvY3Vt
ZW50KQoreworfQorCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVt
ZW50PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFRleHRU
cmFja0Rpc3BsYXlFbGVtZW50KGRvY3VtZW50KSk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYg
TWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29u
c3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtp
dC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkiKSk7CisgICAgcmV0dXJuIGlkOworfQorCisjZW5k
aWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHJldmlzaW9uIDEwMzA2
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgZW51bSBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSB7CiAgICAgTWVkaWFWb2x1bWVTbGlkZXIsCiAgICAgTWVkaWFWb2x1bWVTbGlkZXJUaHVt
YiwKICAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCisgICAgTWVkaWFUZXh0VHJhY2tE
aXNwbGF5Q29udGFpbmVyLAorICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKIH07CiAKIEhUTUxN
ZWRpYUVsZW1lbnQqIHRvUGFyZW50TWVkaWFFbGVtZW50KE5vZGUqKTsKQEAgLTQ4NCw2ICs0ODYs
NDIgQEAgcHJpdmF0ZToKICAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorI2lm
IEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CitwdWJsaWM6CisgICAgCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgCisgICAgdm9pZCB1cGRhdGVTaXplcygpOworCitw
cml2YXRlOgorICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9jdW1l
bnQqKTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhVGV4dFRyYWNrRGlzcGxh
eUNvbnRhaW5lcjsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1
ZG9JZCgpIGNvbnN0OworCisgICAgSW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7CisgICAgZmxv
YXQgbV9mb250U2l6ZTsKKyAgICBMYXlvdXRVbml0IG1fYm90dG9tOworfTsKKworLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gY3Jl
YXRlKERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlz
cGxheUVsZW1lbnQoRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVu
dFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVRleHRUcmFja0Rpc3BsYXk7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25z
dDsKK307CisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xSb290RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEw
IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlLmgiCisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsOCArNjks
MTIgQEAgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJvbwogICAgICwgbV9m
dWxsU2NyZWVuVm9sdW1lU2xpZGVyKDApCiAgICAgLCBtX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0
b24oMCkKICAgICAsIG1fcGFuZWwoMCkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxz
ZSkKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgLCBtX3RleHREaXNwbGF5Q29udGFpbmVy
KDApCisgICAgLCBtX3RleHRUcmFja0Rpc3BsYXkoMCkKKyNlbmRpZgogICAgICwgbV9oaWRlRnVs
bHNjcmVlbkNvbnRyb2xzVGltZXIodGhpcywgJk1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpoaWRl
RnVsbHNjcmVlbkNvbnRyb2xzVGltZXJGaXJlZCkKKyAgICAsIG1faXNNb3VzZU92ZXJDb250cm9s
cyhmYWxzZSkKIHsKIH0KIApAQCAtMjY0LDYgKzI3MiwxMiBAQCB2b2lkIE1lZGlhQ29udHJvbFJv
b3RFbGVtZW50OjpzZXRNZWRpYUNvCiAgICAgICAgIG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRv
bi0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwogICAgIGlmIChtX3BhbmVsKQogICAg
ICAgICBtX3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBt
X3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Cisg
ICAgaWYgKG1fdGV4dFRyYWNrRGlzcGxheSkKKyAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5z
ZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjZW5kaWYKICAgICByZXNldCgpOwogfQog
CkBAIC01NzYsNiArNTkwLDczIEBAIHZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnN0b3BI
aWRlRnUKICAgICBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpjcmVh
dGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ+IHRleHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXIgPSB0ZXh0RGlzcGxheUNvbnRhaW5lci5nZXQoKTsKKworICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gdGV4dERpc3BsYXkgPSBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4
dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsKKyAgICBtX3RleHRUcmFja0Rpc3BsYXkgPSB0ZXh0
RGlzcGxheS5nZXQoKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGV4dERpc3BsYXlD
b250YWluZXItPmFwcGVuZENoaWxkKHRleHREaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOwor
ICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW5zZXJ0IGl0IGJlZm9yZSB0
aGUgZmlyc3QgY29udHJvbGxlciBlbGVtZW50IHNvIGl0IGFsd2F5cyBkaXNwbGF5cyBiZWhpbmQg
dGhlIGNvbnRyb2xzLgorICAgIGluc2VydEJlZm9yZSh0ZXh0RGlzcGxheUNvbnRhaW5lci5yZWxl
YXNlKCksIG1fcGFuZWwsIGVjLCB0cnVlKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxl
bWVudDo6c2hvd1RleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlzcGxheUNv
bnRhaW5lcikKKyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIG1fdGV4dERp
c3BsYXlDb250YWluZXItPnNob3coKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVu
dDo6aGlkZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRh
aW5lcikKKyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXItPmhpZGUoKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6
dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFp
bmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisKKyAgICBDdWVMaXN0IGFj
dGl2ZUN1ZXMgPSB0b1BhcmVudE1lZGlhRWxlbWVudChtX3RleHREaXNwbGF5Q29udGFpbmVyKS0+
Y3VycmVudGx5QWN0aXZlQ3VlcygpOworICAgIGlmIChhY3RpdmVDdWVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nQnVpbGRlciBjdWVzOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYWN0aXZlQ3Vlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSA+IDAg
JiYgY3Vlcy5sZW5ndGgoKSkKKyAgICAgICAgICAgIGN1ZXMuYXBwZW5kKCI8YnI+Iik7CisKKyAg
ICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSBhY3RpdmVDdWVzW2ldLmRhdGEoKTsKKyAgICAgICAg
QVNTRVJUKGN1ZS0+aXNBY3RpdmUoKSk7CisgICAgICAgIGlmICghY3VlLT50cmFjaygpIHx8IGN1
ZS0+dHJhY2soKS0+bW9kZSgpICE9IFRleHRUcmFjazo6U0hPV0lORykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGN1ZXMuYXBwZW5kKGN1ZS0+Z2V0Q3VlQXNTb3VyY2UoKSk7Cisg
ICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlOyAKKyAgICBtX3RleHRUcmFja0Rpc3BsYXktPnNl
dElubmVySFRNTChjdWVzLnRvU3RyaW5nKCksIGUpOworICAgIGlmIChjdWVzLmxlbmd0aCgpKQor
ICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7CisgICAgZWxzZQorICAgICAg
ICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5oaWRlKCk7Cit9CisjZW5kaWYKKwogY29uc3QgQXRv
bWljU3RyaW5nJiBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25z
dAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0
LW1lZGlhLWNvbnRyb2xzIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5oCShyZXZpc2lvbiAxMDMwNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMSBAQCBjbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lTWF4QnV0CiBjbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ7CiBjbGFzcyBNZWRp
YVBsYXllcjsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudDsKKyNlbmRpZgorCiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJNZWRp
YTsKIApAQCAtOTgsNiArMTAzLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVRpbWVEaXNw
bGF5KCk7CiAgICAgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiAKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgdm9pZCBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdm9pZCBz
aG93VGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZvaWQgaGlkZVRleHRUcmFja0Rpc3BsYXkoKTsK
KyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyNlbmRpZgorCiAgICAgdmlydHVh
bCBib29sIHNob3VsZEhpZGVDb250cm9scygpOwogCiBwcml2YXRlOgpAQCAtMTM0LDggKzE0Niwx
MiBAQCBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVt
ZW50KiBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXI7CiAgICAgTWVkaWFDb250cm9sRnVsbHNjcmVl
blZvbHVtZU1heEJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbjsKICAg
ICBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7Ci0gICAgYm9vbCBtX2lzTW91c2VP
dmVyQ29udHJvbHM7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250YWluZXI7CisgICAgTWVk
aWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQqIG1fdGV4dFRyYWNrRGlzcGxheTsKKyNl
bmRpZgogICAgIFRpbWVyPE1lZGlhQ29udHJvbFJvb3RFbGVtZW50PiBtX2hpZGVGdWxsc2NyZWVu
Q29udHJvbHNUaW1lcjsKKyAgICBib29sIG1faXNNb3VzZU92ZXJDb250cm9sczsKIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTAgQEAgTWVkaWFDb250cm9sUm9vdEVs
ZW1lbnRDaHJvbWl1bTo6TWVkaWFDbwogICAgICwgbV92b2x1bWVTbGlkZXIoMCkKICAgICAsIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyKDApCiAgICAgLCBtX3BhbmVsKDApCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgICwgbV90ZXh0RGlzcGxheUNvbnRhaW5lcigwKQorICAgICwgbV90ZXh0
VHJhY2tEaXNwbGF5KDApCisjZW5kaWYKICAgICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX2lz
TW91c2VPdmVyQ29udHJvbHMoZmFsc2UpCiB7CkBAIC0zMDksNiArMzEzLDczIEBAIHZvaWQgTWVk
aWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bTo6c2gKICAgICBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lci0+c2hvdygpOwogfQogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQordm9pZCBNZWRpYUNv
bnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKG1f
dGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50PiB0ZXh0RGlzcGxheUNvbnRhaW5lciA9
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgp
KTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyID0gdGV4dERpc3BsYXlDb250YWluZXIuZ2V0
KCk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ+IHRl
eHREaXNwbGF5ID0gTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShk
b2N1bWVudCgpKTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5oaWRlKCk7CisgICAgbV90
ZXh0VHJhY2tEaXNwbGF5ID0gdGV4dERpc3BsYXkuZ2V0KCk7CisKKyAgICBFeGNlcHRpb25Db2Rl
IGVjOworICAgIHRleHREaXNwbGF5Q29udGFpbmVyLT5hcHBlbmRDaGlsZCh0ZXh0RGlzcGxheS5y
ZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0IGNvbnRyb2xsZXIgZWxlbWVudCBzbyBpdCBh
bHdheXMgZGlzcGxheXMgYmVoaW5kIHRoZSBjb250cm9scy4KKyAgICBpbnNlcnRCZWZvcmUodGV4
dERpc3BsYXlDb250YWluZXIucmVsZWFzZSgpLCBtX3BhbmVsLCBlYywgdHJ1ZSk7Cit9CisKK3Zv
aWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNob3dUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAg
ICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rp
c3BsYXkoKTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7Cit9CisKK3ZvaWQg
TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBp
ZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3Bs
YXkoKTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5oaWRlKCk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQ6OnVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlm
ICghbV90ZXh0RGlzcGxheUNvbnRhaW5lcikKKyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxh
eSgpOworCisgICAgQ3VlTGlzdCB2aXNpYmxlQ3VlcyA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG1f
dGV4dERpc3BsYXlDb250YWluZXIpLT5jdXJyZW50bHlWaXNpYmxlQ3VlcygpOworICAgIGlmICh2
aXNpYmxlQ3Vlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZ0J1aWxk
ZXIgY3VlczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpc2libGVDdWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChpID4gMCAmJiBjdWVzLmxlbmd0aCgpKQorICAgICAgICAgICAg
Y3Vlcy5hcHBlbmQoIjxicj4iKTsKKworICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9IHZpc2li
bGVDdWVzW2ldLmRhdGEoKTsKKyAgICAgICAgQVNTRVJUKGN1ZS0+aXNBY3RpdmUoKSk7CisgICAg
ICAgIGlmICghY3VlLT50cmFjaygpIHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgpICE9IFRleHRUcmFj
azo6U0hPV0lORykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGN1ZXMuYXBwZW5k
KGN1ZS0+Z2V0Q3VlQXNTb3VyY2UoKSk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlOyAK
KyAgICBtX3RleHRUcmFja0Rpc3BsYXktPnNldElubmVySFRNTChjdWVzLnRvU3RyaW5nKCksIGUp
OworICAgIGlmIChjdWVzLmxlbmd0aCgpKQorICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVy
LT5zaG93KCk7CisgICAgZWxzZQorICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5oaWRl
KCk7Cit9CisjZW5kaWYKKyAgICAKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUm9v
dEVsZW1lbnRDaHJvbWl1bTo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzIikp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1l
bnRDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uaAkocmV2aXNpb24gMTAzMDYzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVUaW1lRGlzcGxheSgpOwogICAgIHZvaWQgdXBkYXRlU3RhdHVzRGlzcGxheSgpOwogCisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZvaWQgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOwor
ICAgIHZvaWQgc2hvd1RleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIGhpZGVUZXh0VHJhY2tE
aXNwbGF5KCk7CisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIaWRlQ29udHJvbHMoKTsKIAogcHJpdmF0ZToKQEAgLTEw
OCw2ICsxMTUsMTAgQEAgcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVt
ZW50KiBtX3ZvbHVtZVNsaWRlcjsKICAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWlu
ZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcjsKICAgICBNZWRpYUNvbnRyb2xQYW5l
bEVsZW1lbnQqIG1fcGFuZWw7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250YWluZXI7Cisg
ICAgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQqIG1fdGV4dFRyYWNrRGlzcGxh
eTsKKyNlbmRpZgogCiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBib29sIG1faXNNb3VzZU92ZXJD
b250cm9sczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xz
LmgJKHJldmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTIgQEAgY2xhc3MgTWVkaWFD
b250cm9scyA6IHB1YmxpYyBIVE1MRGl2RWxlbQogCiAgICAgdmlydHVhbCBib29sIHNob3VsZEhp
ZGVDb250cm9scygpID0gMDsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB2aXJ0dWFs
IHZvaWQgc2hvd1RleHRUcmFja0Rpc3BsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhpZGVU
ZXh0VHJhY2tEaXNwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tE
aXNwbGF5KCkgPSAwOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBNZWRpYUNvbnRyb2xzKERv
Y3VtZW50Kik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzE5MikKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE4ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0
IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjI4ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IG1lZGlhL21lZGlhLWNvbnRyb2xzLmpzOgorICAgICAgICAobWVkaWFDb250cm9sc0VsZW1lbnQp
OiBEb24ndCBhbHdheXMgbG9vayBmb3IgYSBjb250cm9sbGVyIGVsZW1lbnQuCisgICAgICAgICht
ZWRpYUNvbnRyb2xzQnV0dG9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAodGV4dFRyYWNrRGlzcGxh
eUVsZW1lbnQpOiBGaW5kIHRoZSBjdWUgZGlzcGxheSBlbGVtZW50LgorICAgICAgICAqIG1lZGlh
L3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWw6IEFkZGVkLgorCiAyMDExLTEy
LTE4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NTQKSW5kZXg6IExheW91dFRlc3Rz
L21lZGlhL21lZGlhLWNvbnRyb2xzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlh
L21lZGlhLWNvbnRyb2xzLmpzCShyZXZpc2lvbiAxMDMwNjMpCisrKyBMYXlvdXRUZXN0cy9tZWRp
YS9tZWRpYS1jb250cm9scy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwxMyArMSwxMiBAQAogCiBm
dW5jdGlvbiBtZWRpYUNvbnRyb2xzRWxlbWVudChmaXJzdCwgaWQpCiB7Ci0gICAgdmFyIGNvbnRy
b2xJRCA9ICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLSIgKyBpZDsKICAgICBmb3IgKHZhciBlbGVt
ZW50ID0gZmlyc3Q7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm5leHRTaWJsaW5nKSB7CiAK
ICAgICAgICAgLy8gTm90IGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1lZGlhIGNvbnRyb2xzIGhhcyBh
IHNoYWRvdyBwc2V1ZG8gSUQsIGVnLiB0aGUKICAgICAgICAgLy8gdGV4dCBub2RlcyBmb3IgdGhl
IHRpbWUgdmFsdWVzLCBzbyBndWFyZCBhZ2FpbnN0IGV4Y2VwdGlvbnMuCiAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICBpZiAoaW50ZXJuYWxzLnNoYWRvd1BzZXVkb0lkKGVsZW1lbnQpID09IGNv
bnRyb2xJRCkKKyAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuc2hhZG93UHNldWRvSWQoZWxlbWVu
dCkgPT0gaWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0gY2F0
Y2ggKGV4Y2VwdGlvbikgeyB9CiAKQEAgLTIzLDcgKzIyLDggQEAgZnVuY3Rpb24gbWVkaWFDb250
cm9sc0VsZW1lbnQoZmlyc3QsIGlkKQogCiBmdW5jdGlvbiBtZWRpYUNvbnRyb2xzQnV0dG9uQ29v
cmRpbmF0ZXMoZWxlbWVudCwgaWQpCiB7Ci0gICAgdmFyIGJ1dHRvbiA9IG1lZGlhQ29udHJvbHNF
bGVtZW50KGludGVybmFscy5zaGFkb3dSb290KGVsZW1lbnQpLmZpcnN0Q2hpbGQsIGlkKTsKKyAg
ICB2YXIgY29udHJvbElEID0gIi13ZWJraXQtbWVkaWEtY29udHJvbHMtIiArIGlkOworICAgIHZh
ciBidXR0b24gPSBtZWRpYUNvbnRyb2xzRWxlbWVudChpbnRlcm5hbHMuc2hhZG93Um9vdChlbGVt
ZW50KS5maXJzdENoaWxkLCBjb250cm9sSUQpOwogICAgIGlmICghYnV0dG9uKQogICAgICAgICB0
aHJvdyAiRmFpbGVkIHRvIGZpbmQgbWVkaWEgY29udHJvbCBlbGVtZW50IElEICciICsgaWQgKyAi
JyI7CiAKQEAgLTMyLDMgKzMyLDEyIEBAIGZ1bmN0aW9uIG1lZGlhQ29udHJvbHNCdXR0b25Db29y
ZGluYXRlcygKICAgICB2YXIgeSA9IGJ1dHRvbkJvdW5kaW5nUmVjdC50b3AgKyBidXR0b25Cb3Vu
ZGluZ1JlY3QuaGVpZ2h0IC8gMjsKICAgICByZXR1cm4gbmV3IEFycmF5KHgsIHkpOwogfQorCitm
dW5jdGlvbiB0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudChwYXJlbnRFbGVtZW50KQoreworICAgIHZh
ciBjb250cm9sSUQgPSAiLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkiOworICAgIHZh
ciBkaXNwbGF5RWxlbWVudCA9IG1lZGlhQ29udHJvbHNFbGVtZW50KGludGVybmFscy5zaGFkb3dS
b290KHBhcmVudEVsZW1lbnQpLmZpcnN0Q2hpbGQsIGNvbnRyb2xJRCk7CisgICAgaWYgKCFkaXNw
bGF5RWxlbWVudCkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCB0byBmaW5kIG1lZGlhIGNvbnRyb2wg
ZWxlbWVudCBJRCAnIiArIGNvbnRyb2xJRCArICInIjsKKyAgICByZXR1cm4gZGlzcGxheUVsZW1l
bnQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvbWVk
aWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVy
aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorVGVzdCB0aGF0
IFRleHRUcmFjaydzIGN1ZXMgYXJlIHJlbmRlcmVkIGNvcnJlY3RseS4KK0VWRU5UKGNhbnBsYXl0
aHJvdWdoKQorRVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcw
LjUnKSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAn
MScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNT
b3VyY2UoKSA9PSAnTG9yZW0nKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50
KHZpZGVvKS5pbm5lclRleHQgPT0gJ0xvcmVtJykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1l
ID0gMS41KQorRVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcx
LjUnKSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAn
MScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNT
b3VyY2UoKSA9PSAnaXBzdW0nKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50
KHZpZGVvKS5pbm5lclRleHQgPT0gJ2lwc3VtJykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1l
ID0gMi41KQorRVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcy
LjUnKSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAn
MScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNT
b3VyY2UoKSA9PSAnZG9sb3InKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50
KHZpZGVvKS5pbm5lclRleHQgPT0gJ2RvbG9yJykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1l
ID0gMy41KQorRVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcz
LjUnKSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAn
MScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNT
b3VyY2UoKSA9PSAnc2l0JykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2
aWRlbykuaW5uZXJUZXh0ID09ICdzaXQnKSBPSworCitUZXN0IHRoYXQgdGhlIGN1ZSBkaXNwbGF5
IGZvbnQgc2l6ZSBpcyByZXNpemVkIGFzIHRoZSB2aWRlbyBlbGVtZW50IHJlc2l6ZXMuCitSVU4o
dmlkZW8ud2lkdGggPSAzMjApCitSVU4odmlkZW8uaGVpZ2h0ID0gMjQwKQorRVhQRUNURUQgKGdl
dENvbXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSA9
PSAnMTZweCcpIE9LCisKK1JVTih2aWRlby53aWR0aCA9IDY0MCkKK1JVTih2aWRlby5oZWlnaHQg
PSA0ODApCitFWFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dCh2aWRlbykpLmZvbnRTaXplID09ICcxOXB4JykgT0sKKworUlVOKHZpZGVvLndpZHRoID0gMTI4
MCkKK1JVTih2aWRlby5oZWlnaHQgPSA5NjApCitFWFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0
ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXplID09ICczOHB4JykgT0sKKwor
UlVOKHZpZGVvLndpZHRoID0gMjU2MCkKK1JVTih2aWRlby5oZWlnaHQgPSAxNDQwKQorRVhQRUNU
RUQgKGdldENvbXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250
U2l6ZSA9PSAnNThweCcpIE9LCitFTkQgT0YgVEVTVAorCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRp
YS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFk
PgorICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQv
aHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKworICAgICAgICA8c2NyaXB0IHNyYz0uLi9tZWRpYS1m
aWxlLmpzPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0uLi92aWRlby10ZXN0LmpzPjwv
c2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0uLi9tZWRpYS1jb250cm9scy5qcz48L3Njcmlw
dD4KKworICAgICAgICA8c2NyaXB0PiAgICAgICAgICAgIAorCisgICAgICAgIHZhciB0ZXN0VHJh
Y2s7CisgICAgICAgIHZhciBzZWVrZWRDb3VudCA9IDA7CisgICAgICAgIHZhciBpbmZvID0gWyAi
TG9yZW0iLCAiaXBzdW0iLCAiZG9sb3IiLCAic2l0IiBdOworCisgICAgICAgIGZ1bmN0aW9uIHRl
c3RGb250U2l6ZXMoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxicj5U
ZXN0IHRoYXQgdGhlIGN1ZSBkaXNwbGF5IGZvbnQgc2l6ZSBpcyByZXNpemVkIGFzIHRoZSB2aWRl
byBlbGVtZW50IHJlc2l6ZXMuIik7CisgICAgICAgICAgICBydW4oInZpZGVvLndpZHRoID0gMzIw
Iik7CisgICAgICAgICAgICBydW4oInZpZGVvLmhlaWdodCA9IDI0MCIpOworICAgICAgICAgICAg
ZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImdldENv
bXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSIsICIx
NnB4Iik7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICBydW4o
InZpZGVvLndpZHRoID0gNjQwIik7CisgICAgICAgICAgICBydW4oInZpZGVvLmhlaWdodCA9IDQ4
MCIpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoImdldENvbXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlk
ZW8pKS5mb250U2l6ZSIsICIxOXB4Iik7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7
CisgICAgICAgICAgICBydW4oInZpZGVvLndpZHRoID0gMTI4MCIpOworICAgICAgICAgICAgcnVu
KCJ2aWRlby5oZWlnaHQgPSA5NjAiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0
VG9wOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUiLCAiMzhweCIpOworCisgICAgICAgICAg
ICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby53aWR0aCA9IDI1NjAi
KTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8uaGVpZ2h0ID0gMTQ0MCIpOworICAgICAgICAgICAg
ZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImdldENv
bXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSIsICI1
OHB4Iik7CisKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHNlZWtlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlk
ZW8uY3VycmVudFRpbWUiLCBzZWVrZWRDb3VudCArIC41KTsKKyAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgidGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoIiwgMSk7CisgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291
cmNlKCkiLCBpbmZvW3NlZWtlZENvdW50XSk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRl
eHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKS5pbm5lclRleHQiLCBpbmZvW3NlZWtlZENvdW50
XSk7CisKKyAgICAgICAgICAgIGlmICgrK3NlZWtlZENvdW50ID09IGluZm8ubGVuZ3RoKQorICAg
ICAgICAgICAgICAgIHRlc3RGb250U2l6ZXMoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICAgICAgcnVuKCJ2aWRlby5j
dXJyZW50VGltZSA9ICIgKyAodmlkZW8uY3VycmVudFRpbWUgKyAxKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
bG9hZGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc29sZVdyaXRlKCJUZXN0IHRoYXQg
VGV4dFRyYWNrJ3MgY3VlcyBhcmUgcmVuZGVyZWQgY29ycmVjdGx5LiIpOworICAgICAgICAgICAg
ZmluZE1lZGlhRWxlbWVudCgpOworICAgICAgICAgICAgdGVzdFRyYWNrID0gZG9jdW1lbnQucXVl
cnlTZWxlY3RvckFsbCgndHJhY2snKVswXTsKKyAgICAgICAgICAgIHZpZGVvLnNyYyA9IGZpbmRN
ZWRpYUZpbGUoJ3ZpZGVvJywgJy4uL2NvbnRlbnQvdGVzdCcpOworICAgICAgICAgICAgd2FpdEZv
ckV2ZW50KCdzZWVrZWQnLCBzZWVrZWQpOworICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5w
bGF5dGhyb3VnaCcsIGZ1bmN0aW9uKCkgeyB2aWRlby5jdXJyZW50VGltZSA9IC41OyB9KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxi
b2R5IG9ubG9hZD0ibG9hZGVkKCkiPgorICAgICAgICA8dmlkZW8gY29udHJvbHMgPgorICAgICAg
ICAgICAgPHRyYWNrIHNyYz0iY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLnZ0dCIga2luZD0iY2Fw
dGlvbnMiIGRlZmF1bHQ+CisgICAgICAgIDwvdmlkZW8+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="119904"
          type_id="1"
          status="-"
          setter="sam"
    />
    <flag name="commit-queue"
          id="119906"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119795</attachid>
            <date>2011-12-18 18:34:44 -0800</date>
            <delta_ts>2011-12-18 20:55:03 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_rendering_11.txt</filename>
            <type>text/plain</type>
            <size>38294</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzE5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDExLTEyLTE4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0IHRy
YWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKKworICAgICAgICAqIGNzcy9t
ZWRpYUNvbnRyb2xzLmNzczoKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJh
Y2stY29udGFpbmVyKToKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2st
ZGlzcGxheSk6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6IEluaXRpYWxp
emUgbV9oYXZlVmlzaWJsZVRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMpOiBUcmlnZ2VyIGFuIHVwZGF0ZSBvZiB0
aGUgdGV4dAorICAgICAgICAgICAgdHJhY2sgZGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKTogY2FsbCBjb25maWd1cmVUZXh0
VHJhY2tEaXNwbGF5KCkgc28gCisgICAgICAgICAgICB0aGUgdGV4dCB0cmFjayBkaXNwbGF5IGlz
IGhpZGRlbiBvciBzaG93biB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJblRoaXNUcmFjayk6IE1pbm9yIGNsZWFudXAu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYUNvbnRyb2xz
KTogY29uZmlndXJlTWVkaWFDb250cm9scygpIGFsd2F5cyBjYWxsZWQKKyAgICAgICAgICAgIHJl
c2V0IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250cm9scywgZG8gaXQgaGVyZSBpbnN0ZWFkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scyk6
IFNpbXBsaWZ5IGFuZCBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSk6IFNob3cgYW5kIGhpZGUgdGV4dCB0cmFjayBk
aXNwbGF5LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudGx5VmlzaWJsZUN1ZXMpOgorCisgICAgICAg
ICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmxheW91dCk6IE5ldy4gQ2FsbCB0aGUgZGlzcGxheSBlbGVtZW50IHNvIGl0
IGNhbgorICAgICAgICAgICAgdXBkYXRlIHRoZSBwb3NpdGlvbiBhbmQgZm9udCBzaXplLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyk6IEtlZXAgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQKKyAgICAgICAgICAgIHBvc2l0
aW9uZWQgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8gYm94LCBhbmQgc2l6ZSB0aGUgZm9u
dCBhY2NvcmRpbmcgdG8gdGhlIHZpZGVvIGhlaWdodC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6ZGlzcGxheVR5cGUpOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50KTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbGxlcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93
VGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Um9vdEVsZW1lbnQ6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Lmg6CisK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06Ok1l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNob3dUZXh0VHJhY2tE
aXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVu
dDo6aGlkZVRleHRUcmFja0Rpc3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoKKwogMjAxMS0xMi0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvbWVk
aWFDb250cm9scy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHMuY3NzCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFD
b250cm9scy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwzICsxODYsMjkgQEAgYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbgogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiB7CiAgICAgZGlzcGxheTogbm9u
ZTsKIH0KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBwYWRkaW5nOiAxMHB4
IDIwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAg
ICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
CisgICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKKyAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsK
KyAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKyAgICB0ZXh0LWluZGVudDogMDsKKyAgICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZTsKK30KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFj
ay1kaXNwbGF5IHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiYSgwLCAwLCAwLCAwLjUpOworICAgIGNvbG9yOiB5ZWxsb3c7CisgICAgcGFkZGluZzogMHB4
IDJweDsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAko
cmV2aXNpb24gMTAzMDYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fcGFyc2luZ0luUHJvZ3Jlc3MoY3JlYXRl
ZEJ5UGFyc2VyKQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAsIG1fdHJhY2tzQXJlUmVh
ZHkodHJ1ZSkKKyAgICAsIG1faGF2ZVZpc2libGVUZXh0VHJhY2soZmFsc2UpCiAgICAgLCBtX3Rl
eHRUcmFja3MoMCkKICNlbmRpZgogI2lmIEVOQUJMRShXRUJfQVVESU8pCkBAIC05NDAsMjMgKzk0
MSwzMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVBY3RpdmVUZXh0
VHJhY2tDdWVzKGZsb2F0IG1vdmllVGltZSkKIHsKLSAgICBWZWN0b3I8Q3VlSW50ZXJ2YWxUcmVl
OjpJbnRlcnZhbFR5cGU+IHByZXZpb3VzbHlWaXNpYmxlQ3VlcyA9IG1fY3VycmVudGx5VmlzaWJs
ZUN1ZXM7CisgICAgQ3VlTGlzdCBwcmV2aW91c2x5QWN0aXZlQ3VlcyA9IG1fY3VycmVudGx5QWN0
aXZlQ3VlczsKKyAgICBib29sIGFjdGl2ZVNldENoYW5nZWQgPSBmYWxzZTsKIAotICAgIG1fY3Vy
cmVudGx5VmlzaWJsZUN1ZXMgPSBtX2N1ZVRyZWUuYWxsT3ZlcmxhcHMobV9jdWVUcmVlLmNyZWF0
ZUludGVydmFsKG1vdmllVGltZSwgbW92aWVUaW1lKSk7CisgICAgbV9jdXJyZW50bHlBY3RpdmVD
dWVzID0gbV9jdWVUcmVlLmFsbE92ZXJsYXBzKG1fY3VlVHJlZS5jcmVhdGVJbnRlcnZhbChtb3Zp
ZVRpbWUsIG1vdmllVGltZSkpOwogICAgIAogICAgIC8vIEZJWE1FKDcyMTcxKTogRXZlbnRzIG5l
ZWQgdG8gYmUgc29ydGVkIGFuZCBmaWx0ZXJlZCBiZWZvcmUgZGlzcGF0Y2hpbmcuCiAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZpb3VzbHlWaXNpYmxlQ3Vlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoIW1fY3VycmVudGx5VmlzaWJsZUN1ZXMuY29udGFpbnMocHJldmlvdXNs
eVZpc2libGVDdWVzW2ldKSkKLSAgICAgICAgICAgIHByZXZpb3VzbHlWaXNpYmxlQ3Vlc1tpXS5k
YXRhKCktPnNldElzQWN0aXZlKGZhbHNlKTsKLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2N1cnJlbnRseVZpc2libGVDdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgh
cHJldmlvdXNseVZpc2libGVDdWVzLmNvbnRhaW5zKG1fY3VycmVudGx5VmlzaWJsZUN1ZXNbaV0p
KQotICAgICAgICAgICAgbV9jdXJyZW50bHlWaXNpYmxlQ3Vlc1tpXS5kYXRhKCktPnNldElzQWN0
aXZlKHRydWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJldmlvdXNseUFjdGl2ZUN1
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRseUFjdGl2ZUN1ZXMuY29u
dGFpbnMocHJldmlvdXNseUFjdGl2ZUN1ZXNbaV0pKSB7CisgICAgICAgICAgICBwcmV2aW91c2x5
QWN0aXZlQ3Vlc1tpXS5kYXRhKCktPnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICAgICAgICAgIGFj
dGl2ZVNldENoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jdXJyZW50bHlBY3RpdmVDdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICghcHJldmlvdXNseUFjdGl2ZUN1ZXMuY29udGFpbnMobV9jdXJyZW50bHlBY3RpdmVDdWVz
W2ldKSkgeworICAgICAgICAgICAgbV9jdXJyZW50bHlBY3RpdmVDdWVzW2ldLmRhdGEoKS0+c2V0
SXNBY3RpdmUodHJ1ZSk7CisgICAgICAgICAgICBhY3RpdmVTZXRDaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRSg3MjE3Myk6IFBhdXNlIHRoZSBtZWRp
YSBlbGVtZW50IGZvciBjdWVzIGdvaW5nIHBhc3QgdGhlaXIgZW5kVGltZQogICAgIC8vIGR1cmlu
ZyBhIG1vbm90b25pYyB0aW1lIGluY3JlYXNlLgorCisgICAgaWYgKGFjdGl2ZVNldENoYW5nZWQg
JiYgaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVRl
eHRUcmFja0Rpc3BsYXkoKTsKIH0KIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tz
QXJlUmVhZHkoKSBjb25zdApAQCAtOTgyLDI5ICs5OTEsMjkgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tSZWFkeVN0YQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a01vZGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiB7Ci0gICAgLy8gNC44LjEwLjEyLjMgU291
cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKLSAgICAvLyAuLi4gd2hlbiBhIHRleHQgdHJh
Y2sgY29ycmVzcG9uZGluZyB0byBhIHRyYWNrIGVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoIHRleHQg
dHJhY2sKLSAgICAvLyBtb2RlIHNldCB0byBkaXNhYmxlZCBhbmQgc3Vic2VxdWVudGx5IGNoYW5n
ZXMgaXRzIHRleHQgdHJhY2sgbW9kZSB0byBoaWRkZW4sIHNob3dpbmcsCi0gICAgLy8gb3Igc2hv
d2luZyBieSBkZWZhdWx0IGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIHVzZXIgYWdlbnQgbXVzdCBp
bW1lZGlhdGVseSBhbmQgc3luY2hyb25vdXNseQotICAgIC8vIHJ1biB0aGUgZm9sbG93aW5nIGFs
Z29yaXRobSAuLi4KLSAgICAKLSAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpICE9IFRleHRUcmFj
azo6VHJhY2tFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSFRNTFRyYWNrRWxl
bWVudCogdHJhY2tFbGVtZW50OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5o
YXNUYWdOYW1lKHRyYWNrVGFnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0cmFj
a0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVHJhY2tFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAg
IGlmICh0cmFja0VsZW1lbnQtPnRyYWNrKCkgIT0gdHJhY2spCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBNYXJrIHRoaXMgdHJhY2sgYXMgImNvbmZpZ3VyZWQiIHNvIGNvbmZp
Z3VyZVRleHRUcmFjayB3b24ndCBjaGFuZ2UgdGhlIG1vZGUgYWdhaW4uCi0gICAgICAgIHRyYWNr
RWxlbWVudC0+c2V0SGFzQmVlbkNvbmZpZ3VyZWQodHJ1ZSk7Ci0gICAgICAgIGlmICh0cmFjay0+
bW9kZSgpICE9IFRleHRUcmFjazo6RElTQUJMRUQgJiYgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRl
KCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6Tk9ORSkKLSAgICAgICAgICAgIHRyYWNrRWxlbWVudC0+
c2NoZWR1bGVMb2FkKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmICh0cmFjay0+dHJhY2tUeXBl
KCkgPT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpIHsKKyAgICAgICAgLy8gNC44LjEwLjEyLjMg
U291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKKyAgICAgICAgLy8gLi4uIHdoZW4gYSB0
ZXh0IHRyYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjayBlbGVtZW50IGlzIGNyZWF0ZWQgd2l0
aCB0ZXh0IHRyYWNrCisgICAgICAgIC8vIG1vZGUgc2V0IHRvIGRpc2FibGVkIGFuZCBzdWJzZXF1
ZW50bHkgY2hhbmdlcyBpdHMgdGV4dCB0cmFjayBtb2RlIHRvIGhpZGRlbiwgc2hvd2luZywKKyAg
ICAgICAgLy8gb3Igc2hvd2luZyBieSBkZWZhdWx0IGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIHVz
ZXIgYWdlbnQgbXVzdCBpbW1lZGlhdGVseSBhbmQgc3luY2hyb25vdXNseQorICAgICAgICAvLyBy
dW4gdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gLi4uCisKKyAgICAgICAgZm9yIChOb2RlKiBub2Rl
ID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICAgICAgaWYgKCFub2RlLT5oYXNUYWdOYW1lKHRyYWNrVGFnKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxUcmFja0VsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIGlmICh0
cmFja0VsZW1lbnQtPnRyYWNrKCkgIT0gdHJhY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1hcmsgdGhpcyB0cmFjayBhcyAiY29uZmln
dXJlZCIgc28gY29uZmlndXJlVGV4dFRyYWNrIHdvbid0IGNoYW5nZSB0aGUgbW9kZSBhZ2Fpbi4K
KyAgICAgICAgICAgIHRyYWNrRWxlbWVudC0+c2V0SGFzQmVlbkNvbmZpZ3VyZWQodHJ1ZSk7Cisg
ICAgICAgICAgICBpZiAodHJhY2stPm1vZGUoKSAhPSBUZXh0VHJhY2s6OkRJU0FCTEVEICYmIHRy
YWNrRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhUTUxUcmFja0VsZW1lbnQ6Ok5PTkUpCisgICAg
ICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zY2hlZHVsZUxvYWQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgfQorCisgICAgY29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSgp
OwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja0tpbmRDaGFuZ2VkKFRleHRU
cmFjayopCkBAIC0yMjg5LDEwICsyMjk4LDEwIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6dXNl
cklzSW50ZXJlc3RlZEkKIAogICAgIC8vIElmIC4uLiB0aGUgdXNlciBoYXMgaW5kaWNhdGVkIGFu
IGludGVyZXN0IGluIGhhdmluZyBhIHRyYWNrIHdpdGggdGhpcyB0ZXh0IHRyYWNrIGtpbmQsIHRl
eHQgdHJhY2sgbGFuZ3VhZ2UsIC4uLiAKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVu
dCgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChraW5kID09IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpIHx8IGtp
bmQgPT0gVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdvcmQoKSkgewotICAgICAgICBpZiAoIXNldHRp
bmdzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoa2luZCA9PSBUZXh0
VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQoKSAmJiAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlTdWJ0
aXRsZXMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGtpbmQgPT0g
VGV4dFRyYWNrOjpjYXB0aW9uc0tleXdvcmQoKSAmJiAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlD
YXB0aW9ucygpKQpAQCAtMjMwMSw3ICsyMzEwLDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp1
c2VySXNJbnRlcmVzdGVkSQogICAgIH0KIAogICAgIGlmIChraW5kID09IFRleHRUcmFjazo6ZGVz
Y3JpcHRpb25zS2V5d29yZCgpKSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdz
LT5zaG91bGREaXNwbGF5VGV4dERlc2NyaXB0aW9ucygpKQorICAgICAgICBpZiAoIXNldHRpbmdz
LT5zaG91bGREaXNwbGF5VGV4dERlc2NyaXB0aW9ucygpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICByZXR1cm4gdXNlcklzSW50ZXJlc3RlZEluVGhpc0xhbmd1YWdlKHRyYWNr
RWxlbWVudC0+c3JjbGFuZygpKTsKICAgICB9CkBAIC0zNDUyLDYgKzM0NjEsNyBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhQ29udHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGNvbnRyb2xzLT5zZXRNZWRpYUNvbnRyb2xsZXIobV9tZWRpYUNvbnRyb2xsZXIgPyBt
X21lZGlhQ29udHJvbGxlci5nZXQoKSA6IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbGxlckludGVy
ZmFjZSo+KHRoaXMpKTsKKyAgICBjb250cm9scy0+cmVzZXQoKTsKIAogICAgIGVuc3VyZVNoYWRv
d1Jvb3QoKS0+YXBwZW5kQ2hpbGQoY29udHJvbHMsIGVjKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM0NjYsMTEgKzM0NzYsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlh
Q29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMo
KSkgewotICAgICAgICBpZiAoIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXNldCgpOwotICAgIH0KKyAgICBpZiAo
IWhhc01lZGlhQ29udHJvbHMoKSAmJiAhY3JlYXRlTWVkaWFDb250cm9scygpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBtZWRpYUNvbnRyb2xzKCktPnNob3coKTsKICNlbHNlCiAgICAgaWYgKG1f
cGxheWVyKQpAQCAtMzQ3OCw2ICszNDg2LDM1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29u
ZmlndXJlTWVkaWFDb24KICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQordm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBB
U1NFUlQobV90ZXh0VHJhY2tzKTsKKworICAgIGJvb2wgaGF2ZVZpc2libGVUZXh0VHJhY2sgPSBm
YWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChtX3RleHRUcmFja3MtPml0ZW0oaSktPm1vZGUoKSA9PSBU
ZXh0VHJhY2s6OlNIT1dJTkcpIHsKKyAgICAgICAgICAgIGhhdmVWaXNpYmxlVGV4dFRyYWNrID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1f
aGF2ZVZpc2libGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2spCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2hhdmVWaXNpYmxlVGV4dFRyYWNrID0gaGF2ZVZpc2libGVUZXh0VHJhY2s7
CisKKyAgICBpZiAoIW1faGF2ZVZpc2libGVUZXh0VHJhY2spIHsKKyAgICAgICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+aGlkZVRleHRUcmFj
a0Rpc3BsYXkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaGFzTWVkaWFD
b250cm9scygpICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtZWRpYUNvbnRyb2xzKCktPnNob3dUZXh0VHJhY2tEaXNwbGF5KCk7Cit9CisjZW5kaWYKKwog
dm9pZCogSFRNTE1lZGlhRWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogewogICAgIGlmIChldmVudCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53
ZWJraXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTAzMDYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDExIEBAIGNsYXNz
IFdpZGdldDsKIGNsYXNzIERpc3BsYXlTbGVlcERpc2FibGVyOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCit0eXBlZGVmIFBPREludGVydmFsVHJlZTxkb3VibGUsIFRleHRUcmFj
a0N1ZSo+IEN1ZUludGVydmFsVHJlZTsKK3R5cGVkZWYgVmVjdG9yPEN1ZUludGVydmFsVHJlZTo6
SW50ZXJ2YWxUeXBlPiBDdWVMaXN0OworI2VuZGlmCisKIC8vIEZJWE1FOiBUaGUgaW5oZXJpdGFu
Y2UgZnJvbSBNZWRpYVBsYXllckNsaWVudCBoZXJlIHNob3VsZCBiZSBwcml2YXRlIGluaGVyaXRh
bmNlLgogLy8gQnV0IGl0IGNhbid0IGJlIHVudGlsIHRoZSBDaHJvbWl1bSBXZWJNZWRpYVBsYXll
ckNsaWVudEltcGwgY2xhc3MgaXMgZml4ZWQgc28gaXQKIC8vIG5vIGxvbmdlciBkZXBlbmRzIG9u
IHR5cGVjYXN0aW5nIGEgTWVkaWFQbGF5ZXJDbGllbnQgdG8gYW4gSFRNTE1lZGlhRWxlbWVudC4K
QEAgLTE5Niw2ICsyMDEsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2s+IGFk
ZFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFk
ZFRyYWNrKGtpbmQsIGVtcHR5U3RyaW5nKCksIGVtcHR5U3RyaW5nKCksIGVjKTsgfQogCiAgICAg
VGV4dFRyYWNrTGlzdCogdGV4dFRyYWNrcygpOworICAgIEN1ZUxpc3QgY3VycmVudGx5QWN0aXZl
Q3VlcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudGx5QWN0aXZlQ3VlczsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHRyYWNrV2FzQWRkZWQoSFRNTFRyYWNrRWxlbWVudCopOwogICAgIHZpcnR1YWwg
dm9pZCB0cmFja1dpbGxCZVJlbW92ZWQoSFRNTFRyYWNrRWxlbWVudCopOwpAQCAtMjAzLDYgKzIw
OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFjayhIVE1MVHJhY2tFbGVt
ZW50Kik7CiAgICAgdm9pZCBjb25maWd1cmVUZXh0VHJhY2tzKCk7CiAgICAgYm9vbCB0ZXh0VHJh
Y2tzQXJlUmVhZHkoKSBjb25zdDsKKyAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXko
KTsKIAogICAgIC8vIFRleHRUcmFja0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB0ZXh0VHJhY2tS
ZWFkeVN0YXRlQ2hhbmdlZChUZXh0VHJhY2sqKTsKQEAgLTU0OSwxMiArNTU2LDEyIEBAIHByaXZh
dGU6CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgYm9vbCBtX3RyYWNrc0FyZVJlYWR5
IDogMTsKKyAgICBib29sIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgOiAxOworCiAgICAgUmVmUHRy
PFRleHRUcmFja0xpc3Q+IG1fdGV4dFRyYWNrczsKICAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
az4gPiBtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbjsKLSAgICAKLSAgICB0
eXBlZGVmIFBPREludGVydmFsVHJlZSA8ZG91YmxlLCBUZXh0VHJhY2tDdWUqPiBDdWVJbnRlcnZh
bFRyZWU7CiAgICAgQ3VlSW50ZXJ2YWxUcmVlIG1fY3VlVHJlZTsKLSAgICBWZWN0b3I8Q3VlSW50
ZXJ2YWxUcmVlOjpJbnRlcnZhbFR5cGU+IG1fY3VycmVudGx5VmlzaWJsZUN1ZXM7CisgICAgQ3Vl
TGlzdCBtX2N1cnJlbnRseUFjdGl2ZUN1ZXM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRl
ci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xMTE1LDYgKzExMTYsMTEyIEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sQ3VycmVudFQKICAgICByZXR1cm4gaWQ7CiB9CiAKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKwor
Y2xhc3MgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBSZW5kZXJCbG9j
ayB7CitwdWJsaWM6CisgICAgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChOb2RlKik7
CisgICAgCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CisKK1JlbmRl
clRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OlJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQgUmVu
ZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCbG9j
azo6bGF5b3V0KCk7CisgICAgaWYgKHN0eWxlKCktPmRpc3BsYXkoKSA9PSBOT05FKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQobWVkaWFDb250cm9sRWxlbWVudFR5cGUobm9kZSgpKSA9
PSBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXIpOworCisgICAgTGF5b3V0U3RhdGVEaXNh
YmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKSk7CisgICAgc3RhdGljX2Nhc3Q8TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCo+KG5vZGUoKSktPnVwZGF0ZVNpemVzKCk7
Cit9CisKK2lubGluZSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IE1lZGlhQ29udHJvbEVsZW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2ZvbnRTaXplKDApCisg
ICAgLCBtX2JvdHRvbSgwKQoreworfQorCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOworICAgIGVsZW1lbnQtPmhp
ZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7Cit9CisKK1JlbmRlck9iamVjdCog
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQodGhpcyk7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6c2hhZG93UHNl
dWRvSWQoKSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBp
ZCwgKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIikpOworICAgIHJldHVybiBp
ZDsKK30KKworc3RhdGljIGNvbnN0IGZsb2F0IG1pbWltdW1Gb250U2l6ZSA9IDE2Oworc3RhdGlj
IGNvbnN0IGZsb2F0IHZpZGVvSGVpZ2h0Rm9udFNpemVEaXZpc29yID0gMjU7CitzdGF0aWMgY29u
c3QgZmxvYXQgdHJhY2tCb3R0b21NdWx0aXBsaWVyID0gMC45OworICAgIAordm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVTaXplcygpCit7CisgICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQgfHwgIW1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSB8fCAh
bWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5pc1ZpZGVvKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBJbnRSZWN0IHZpZGVvQm94ID0gdG9SZW5kZXJWaWRlbyhtZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCkpLT52aWRlb0JveCgpOworICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlk
ZW9Cb3gpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0Jv
eDsKKworICAgIGZsb2F0IGZvbnRTaXplID0gbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWln
aHQoKSAvIHZpZGVvSGVpZ2h0Rm9udFNpemVEaXZpc29yOworICAgIGlmIChmb250U2l6ZSA8IG1p
bWltdW1Gb250U2l6ZSkKKyAgICAgICAgZm9udFNpemUgPSBtaW1pbXVtRm9udFNpemU7CisgICAg
aWYgKGZvbnRTaXplICE9IG1fZm9udFNpemUpIHsKKyAgICAgICAgbV9mb250U2l6ZSA9IGZvbnRT
aXplOworICAgICAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlGb250U2l6ZSwgU3RyaW5nOjpudW1iZXIoZm9udFNpemUpICsgInB4Iik7CisgICAgfQor
CisgICAgTGF5b3V0VW5pdCBib3R0b20gPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihtX3ZpZGVv
RGlzcGxheVNpemUueSgpICsgbV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpIC0gKG1fdmlkZW9E
aXNwbGF5U2l6ZS5oZWlnaHQoKSAqIHRyYWNrQm90dG9tTXVsdGlwbGllcikpOworICAgIGlmIChi
b3R0b20gIT0gbV9ib3R0b20pIHsKKyAgICAgICAgbV9ib3R0b20gPSBib3R0b207CisgICAgICAg
IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwg
U3RyaW5nOjpudW1iZXIoYm90dG9tKSArICJweCIpOworICAgIH0KK30KKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6TWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChkb2N1bWVudCkKK3sKK30KKworUGFzc1JlZlB0
cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRy
YWNrRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudChkb2N1
bWVudCkpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFRleHRUcmFja0Rp
c3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1kaXNw
bGF5IikpOworICAgIHJldHVybiBpZDsKK30KKworI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xFbGVtZW50cy5oCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2
ICs2OSw4IEBAIGVudW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewogICAgIE1lZGlhVm9sdW1l
U2xpZGVyLAogICAgIE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIsCiAgICAgTWVkaWFWb2x1bWVTbGlk
ZXJNdXRlQnV0dG9uLAorICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheUNvbnRhaW5lciwKKyAgICBN
ZWRpYVRleHRUcmFja0Rpc3BsYXksCiB9OwogCiBIVE1MTWVkaWFFbGVtZW50KiB0b1BhcmVudE1l
ZGlhRWxlbWVudChOb2RlKik7CkBAIC00ODQsNiArNDg2LDQyIEBAIHByaXZhdGU6CiAgCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCitj
bGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlh
Q29udHJvbEVsZW1lbnQgeworcHVibGljOgorICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwor
ICAgIAorICAgIHZvaWQgdXBkYXRlU2l6ZXMoKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwor
ICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCB7
IHJldHVybiBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXI7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKKworICAgIEludFJlY3Qg
bV92aWRlb0Rpc3BsYXlTaXplOworICAgIGZsb2F0IG1fZm9udFNpemU7CisgICAgTGF5b3V0VW5p
dCBtX2JvdHRvbTsKK307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xh
c3MgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250
cm9sRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
VGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworCitwcml2YXRlOgor
ICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50KERvY3VtZW50Kik7CisKKyAg
ICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gTWVkaWFUZXh0VHJhY2tEaXNwbGF5OyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7Cit9OworI2VuZGlmCisKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sUm9vdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTAzMDYzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTYgQEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJU
ZXh0LmgiCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3Vl
LmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNjUsOCArNzEsMTIgQEAg
TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJvbwogICAgICwgbV9mdWxsU2Ny
ZWVuVm9sdW1lU2xpZGVyKDApCiAgICAgLCBtX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24oMCkK
ICAgICAsIG1fcGFuZWwoMCkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxzZSkKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgLCBtX3RleHREaXNwbGF5Q29udGFpbmVyKDApCisg
ICAgLCBtX3RleHRUcmFja0Rpc3BsYXkoMCkKKyNlbmRpZgogICAgICwgbV9oaWRlRnVsbHNjcmVl
bkNvbnRyb2xzVGltZXIodGhpcywgJk1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpoaWRlRnVsbHNj
cmVlbkNvbnRyb2xzVGltZXJGaXJlZCkKKyAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxz
ZSkKIHsKIH0KIApAQCAtMjY0LDYgKzI3NCwxMiBAQCB2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVt
ZW50OjpzZXRNZWRpYUNvCiAgICAgICAgIG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbi0+c2V0
TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwogICAgIGlmIChtX3BhbmVsKQogICAgICAgICBt
X3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBtX3RleHRE
aXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgaWYg
KG1fdGV4dFRyYWNrRGlzcGxheSkKKyAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5zZXRNZWRp
YUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjZW5kaWYKICAgICByZXNldCgpOwogfQogCkBAIC01
NzYsNiArNTkyLDc1IEBAIHZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnN0b3BIaWRlRnUK
ICAgICBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7CiB9CiAKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpjcmVhdGVUZXh0
VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ+IHRleHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4dERpc3BsYXlDb250YWlu
ZXIgPSB0ZXh0RGlzcGxheUNvbnRhaW5lci5nZXQoKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gdGV4dERpc3BsYXkgPSBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXItPmhpZGUoKTsKKyAgICBtX3RleHRUcmFja0Rpc3BsYXkgPSB0ZXh0RGlzcGxh
eS5nZXQoKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGV4dERpc3BsYXlDb250YWlu
ZXItPmFwcGVuZENoaWxkKHRleHREaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW5zZXJ0IGl0IGJlZm9yZSB0aGUgZmly
c3QgY29udHJvbGxlciBlbGVtZW50IHNvIGl0IGFsd2F5cyBkaXNwbGF5cyBiZWhpbmQgdGhlIGNv
bnRyb2xzLgorICAgIGluc2VydEJlZm9yZSh0ZXh0RGlzcGxheUNvbnRhaW5lci5yZWxlYXNlKCks
IG1fcGFuZWwsIGVjLCB0cnVlKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6
c2hvd1RleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRhaW5l
cikKKyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXItPnNob3coKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6aGlk
ZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRhaW5lcikK
KyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIG1fdGV4dERpc3BsYXlDb250
YWluZXItPmhpZGUoKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRl
VGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQor
ICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisKKyAgICBDdWVMaXN0IGFjdGl2ZUN1
ZXMgPSB0b1BhcmVudE1lZGlhRWxlbWVudChtX3RleHREaXNwbGF5Q29udGFpbmVyKS0+Y3VycmVu
dGx5QWN0aXZlQ3VlcygpOworICAgIGlmIChhY3RpdmVDdWVzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5yZW1vdmVDaGlsZHJlbigpOworICAg
IGJvb2wgbm90aGluZ1RvRGlzcGxheSA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhY3RpdmVDdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0g
YWN0aXZlQ3Vlc1tpXS5kYXRhKCk7CisgICAgICAgIEFTU0VSVChjdWUtPmlzQWN0aXZlKCkpOwor
ICAgICAgICBpZiAoIWN1ZS0+dHJhY2soKSB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSAhPSBUZXh0
VHJhY2s6OlNIT1dJTkcpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTdHJpbmcg
Y3VlVGV4dCA9IGN1ZS0+Z2V0Q3VlQXNTb3VyY2UoKTsKKyAgICAgICAgaWYgKCFjdWVUZXh0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFub3RoaW5nVG9EaXNwbGF5KQorICAgICAgICAg
ICAgICAgIG1fdGV4dFRyYWNrRGlzcGxheS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChIVE1MTmFtZXM6OmJyVGFnLCBmYWxzZSksIEFTU0VSVF9OT19FWENFUFRJT04pOwor
ICAgICAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5j
cmVhdGVUZXh0Tm9kZShjdWVUZXh0KSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAg
ICBub3RoaW5nVG9EaXNwbGF5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IW5vdGhpbmdUb0Rpc3BsYXkpCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNob3co
KTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsKK30K
KyNlbmRpZgorCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Ojpz
aGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50LmgJKHJl
dmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bFJvb3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDExIEBAIGNsYXNzIE1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXQKIGNsYXNzIE1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudDsKIGNsYXNzIE1lZGlhUGxheWVyOwogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
Y2xhc3MgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDsKK2NsYXNzIE1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OworI2VuZGlmCisKIGNsYXNzIFJlbmRlckJv
eDsKIGNsYXNzIFJlbmRlck1lZGlhOwogCkBAIC05OCw2ICsxMDMsMTMgQEAgcHVibGljOgogICAg
IHZvaWQgdXBkYXRlVGltZURpc3BsYXkoKTsKICAgICB2b2lkIHVwZGF0ZVN0YXR1c0Rpc3BsYXko
KTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB2b2lkIGNyZWF0ZVRleHRUcmFja0Rp
c3BsYXkoKTsKKyAgICB2b2lkIHNob3dUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdm9pZCBoaWRl
VGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwor
I2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGlkZUNvbnRyb2xzKCk7CiAKIHByaXZh
dGU6CkBAIC0xMzQsOCArMTQ2LDEyIEBAIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sRnVsbHNj
cmVlblZvbHVtZVNsaWRlckVsZW1lbnQqIG1fZnVsbFNjcmVlblZvbHVtZVNsaWRlcjsKICAgICBN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudCogbV9mdWxsU2NyZWVu
TWF4Vm9sdW1lQnV0dG9uOwogICAgIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsK
LSAgICBib29sIG1faXNNb3VzZU92ZXJDb250cm9sczsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCogbV90ZXh0RGlzcGxh
eUNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudCogbV90
ZXh0VHJhY2tEaXNwbGF5OworI2VuZGlmCiAgICAgVGltZXI8TWVkaWFDb250cm9sUm9vdEVsZW1l
bnQ+IG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyOworICAgIGJvb2wgbV9pc01vdXNlT3Zl
ckNvbnRyb2xzOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bFJvb3RFbGVtZW50Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTMg
QEAKICNpZiBFTkFCTEUoVklERU8pCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sUm9vdEVsZW1lbnRD
aHJvbWl1bS5oIgogCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgorI2luY2x1ZGUgIlRleHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDksNiAr
NTIsMTAgQEAgTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bTo6TWVkaWFDbwogICAgICwg
bV92b2x1bWVTbGlkZXIoMCkKICAgICAsIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKDApCiAgICAg
LCBtX3BhbmVsKDApCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgICwgbV90ZXh0RGlzcGxh
eUNvbnRhaW5lcigwKQorICAgICwgbV90ZXh0VHJhY2tEaXNwbGF5KDApCisjZW5kaWYKICAgICAs
IG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX2lzTW91c2VPdmVyQ29udHJvbHMoZmFsc2UpCiB7CkBA
IC0zMDksNiArMzE2LDc1IEBAIHZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bTo6
c2gKICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2hvdygpOwogfQogCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRy
YWNrRGlzcGxheSgpCit7CisgICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50PiB0ZXh0RGlzcGxheUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFpbmVy
ID0gdGV4dERpc3BsYXlDb250YWluZXIuZ2V0KCk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9s
VGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ+IHRleHREaXNwbGF5ID0gTWVkaWFDb250cm9sVGV4dFRy
YWNrRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBtX3RleHREaXNwbGF5
Q29udGFpbmVyLT5oaWRlKCk7CisgICAgbV90ZXh0VHJhY2tEaXNwbGF5ID0gdGV4dERpc3BsYXku
Z2V0KCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIHRleHREaXNwbGF5Q29udGFpbmVy
LT5hcHBlbmRDaGlsZCh0ZXh0RGlzcGxheS5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0
IGNvbnRyb2xsZXIgZWxlbWVudCBzbyBpdCBhbHdheXMgZGlzcGxheXMgYmVoaW5kIHRoZSBjb250
cm9scy4KKyAgICBpbnNlcnRCZWZvcmUodGV4dERpc3BsYXlDb250YWluZXIucmVsZWFzZSgpLCBt
X3BhbmVsLCBlYywgdHJ1ZSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNo
b3dUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIp
CisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICBtX3RleHREaXNwbGF5Q29u
dGFpbmVyLT5zaG93KCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmhpZGVU
ZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCisg
ICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFp
bmVyLT5oaWRlKCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnVwZGF0ZVRl
eHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRhaW5lcikKKyAg
ICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworCisgICAgQ3VlTGlzdCBhY3RpdmVDdWVz
ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobV90ZXh0RGlzcGxheUNvbnRhaW5lciktPmN1cnJlbnRs
eUFjdGl2ZUN1ZXMoKTsKKyAgICBpZiAoYWN0aXZlQ3Vlcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fdGV4dFRyYWNrRGlzcGxheS0+cmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICBi
b29sIG5vdGhpbmdUb0Rpc3BsYXkgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YWN0aXZlQ3Vlcy5zaXplKCk7ICsraSkgeworICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9IGFj
dGl2ZUN1ZXNbaV0uZGF0YSgpOworICAgICAgICBBU1NFUlQoY3VlLT5pc0FjdGl2ZSgpKTsKKyAg
ICAgICAgaWYgKCFjdWUtPnRyYWNrKCkgfHwgY3VlLT50cmFjaygpLT5tb2RlKCkgIT0gVGV4dFRy
YWNrOjpTSE9XSU5HKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU3RyaW5nIGN1
ZVRleHQgPSBjdWUtPmdldEN1ZUFzU291cmNlKCk7CisgICAgICAgIGlmICghY3VlVGV4dC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGlmICghbm90aGluZ1RvRGlzcGxheSkKKyAgICAgICAgICAg
ICAgICBtX3RleHRUcmFja0Rpc3BsYXktPmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZUVs
ZW1lbnQoSFRNTE5hbWVzOjpiclRhZywgZmFsc2UpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICAgICAgICAgIG1fdGV4dFRyYWNrRGlzcGxheS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3Jl
YXRlVGV4dE5vZGUoY3VlVGV4dCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAg
bm90aGluZ1RvRGlzcGxheSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFu
b3RoaW5nVG9EaXNwbGF5KQorICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5zaG93KCk7
CisgICAgZWxzZQorICAgICAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5oaWRlKCk7Cit9Cisj
ZW5kaWYKKyAgICAKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUm9vdEVsZW1lbnRD
aHJvbWl1bTo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzIikpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bFJvb3RFbGVtZW50Q2hyb21pdW0uaAkocmV2aXNpb24gMTAzMDYzKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw2ICs4NywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVUaW1lRGlz
cGxheSgpOwogICAgIHZvaWQgdXBkYXRlU3RhdHVzRGlzcGxheSgpOwogCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHZvaWQgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZvaWQg
c2hvd1RleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIGhpZGVUZXh0VHJhY2tEaXNwbGF5KCk7
CisgICAgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisjZW5kaWYKKwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRIaWRlQ29udHJvbHMoKTsKIAogcHJpdmF0ZToKQEAgLTEwOCw2ICsxMTUs
MTAgQEAgcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KiBtX3Zv
bHVtZVNsaWRlcjsKICAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50
KiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcjsKICAgICBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQq
IG1fcGFuZWw7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIE1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlDb250YWluZXI7CisgICAgTWVkaWFD
b250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQqIG1fdGV4dFRyYWNrRGlzcGxheTsKKyNlbmRp
ZgogCiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBib29sIG1faXNNb3VzZU92ZXJDb250cm9sczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgJKHJldmlz
aW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTIgQEAgY2xhc3MgTWVkaWFDb250cm9scyA6
IHB1YmxpYyBIVE1MRGl2RWxlbQogCiAgICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250cm9s
cygpID0gMDsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d1RleHRUcmFja0Rpc3BsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhpZGVUZXh0VHJhY2tE
aXNwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCkg
PSAwOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBNZWRpYUNvbnRyb2xzKERvY3VtZW50Kik7
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzE5MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE4ICBFcmljIENhcmxzb24g
IDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0IHRyYWNrcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4ODYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1lZGlhL21l
ZGlhLWNvbnRyb2xzLmpzOgorICAgICAgICAobWVkaWFDb250cm9sc0VsZW1lbnQpOiBEb24ndCBh
bHdheXMgbG9vayBmb3IgYSBjb250cm9sbGVyIGVsZW1lbnQuCisgICAgICAgIChtZWRpYUNvbnRy
b2xzQnV0dG9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQp
OiBGaW5kIHRoZSBjdWUgZGlzcGxheSBlbGVtZW50LgorICAgICAgICAqIG1lZGlhL3RyYWNrL3Ry
YWNrLWN1ZS1yZW5kZXJpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS90
cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWw6IEFkZGVkLgorCiAyMDExLTEyLTE4ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NTQKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL21l
ZGlhLWNvbnRyb2xzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL21lZGlhLWNv
bnRyb2xzLmpzCShyZXZpc2lvbiAxMDMwNjMpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1j
b250cm9scy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwxMyArMSwxMiBAQAogCiBmdW5jdGlvbiBt
ZWRpYUNvbnRyb2xzRWxlbWVudChmaXJzdCwgaWQpCiB7Ci0gICAgdmFyIGNvbnRyb2xJRCA9ICIt
d2Via2l0LW1lZGlhLWNvbnRyb2xzLSIgKyBpZDsKICAgICBmb3IgKHZhciBlbGVtZW50ID0gZmly
c3Q7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm5leHRTaWJsaW5nKSB7CiAKICAgICAgICAg
Ly8gTm90IGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1lZGlhIGNvbnRyb2xzIGhhcyBhIHNoYWRvdyBw
c2V1ZG8gSUQsIGVnLiB0aGUKICAgICAgICAgLy8gdGV4dCBub2RlcyBmb3IgdGhlIHRpbWUgdmFs
dWVzLCBzbyBndWFyZCBhZ2FpbnN0IGV4Y2VwdGlvbnMuCiAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICBpZiAoaW50ZXJuYWxzLnNoYWRvd1BzZXVkb0lkKGVsZW1lbnQpID09IGNvbnRyb2xJRCkK
KyAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuc2hhZG93UHNldWRvSWQoZWxlbWVudCkgPT0gaWQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0gY2F0Y2ggKGV4Y2Vw
dGlvbikgeyB9CiAKQEAgLTIzLDcgKzIyLDggQEAgZnVuY3Rpb24gbWVkaWFDb250cm9sc0VsZW1l
bnQoZmlyc3QsIGlkKQogCiBmdW5jdGlvbiBtZWRpYUNvbnRyb2xzQnV0dG9uQ29vcmRpbmF0ZXMo
ZWxlbWVudCwgaWQpCiB7Ci0gICAgdmFyIGJ1dHRvbiA9IG1lZGlhQ29udHJvbHNFbGVtZW50KGlu
dGVybmFscy5zaGFkb3dSb290KGVsZW1lbnQpLmZpcnN0Q2hpbGQsIGlkKTsKKyAgICB2YXIgY29u
dHJvbElEID0gIi13ZWJraXQtbWVkaWEtY29udHJvbHMtIiArIGlkOworICAgIHZhciBidXR0b24g
PSBtZWRpYUNvbnRyb2xzRWxlbWVudChpbnRlcm5hbHMuc2hhZG93Um9vdChlbGVtZW50KS5maXJz
dENoaWxkLCBjb250cm9sSUQpOwogICAgIGlmICghYnV0dG9uKQogICAgICAgICB0aHJvdyAiRmFp
bGVkIHRvIGZpbmQgbWVkaWEgY29udHJvbCBlbGVtZW50IElEICciICsgaWQgKyAiJyI7CiAKQEAg
LTMyLDMgKzMyLDEyIEBAIGZ1bmN0aW9uIG1lZGlhQ29udHJvbHNCdXR0b25Db29yZGluYXRlcygK
ICAgICB2YXIgeSA9IGJ1dHRvbkJvdW5kaW5nUmVjdC50b3AgKyBidXR0b25Cb3VuZGluZ1JlY3Qu
aGVpZ2h0IC8gMjsKICAgICByZXR1cm4gbmV3IEFycmF5KHgsIHkpOwogfQorCitmdW5jdGlvbiB0
ZXh0VHJhY2tEaXNwbGF5RWxlbWVudChwYXJlbnRFbGVtZW50KQoreworICAgIHZhciBjb250cm9s
SUQgPSAiLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkiOworICAgIHZhciBkaXNwbGF5
RWxlbWVudCA9IG1lZGlhQ29udHJvbHNFbGVtZW50KGludGVybmFscy5zaGFkb3dSb290KHBhcmVu
dEVsZW1lbnQpLmZpcnN0Q2hpbGQsIGNvbnRyb2xJRCk7CisgICAgaWYgKCFkaXNwbGF5RWxlbWVu
dCkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCB0byBmaW5kIG1lZGlhIGNvbnRyb2wgZWxlbWVudCBJ
RCAnIiArIGNvbnRyb2xJRCArICInIjsKKyAgICByZXR1cm4gZGlzcGxheUVsZW1lbnQ7Cit9Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2sv
dHJhY2stY3VlLXJlbmRlcmluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorVGVzdCB0aGF0IFRleHRUcmFj
aydzIGN1ZXMgYXJlIHJlbmRlcmVkIGNvcnJlY3RseS4KK0VWRU5UKGNhbnBsYXl0aHJvdWdoKQor
RVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcwLjUnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAnMScpIE9LCitF
WFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNTb3VyY2UoKSA9
PSAnTG9yZW0nKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKS5p
bm5lclRleHQgPT0gJ0xvcmVtJykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1lID0gMS41KQor
RVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcxLjUnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAnMScpIE9LCitF
WFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNTb3VyY2UoKSA9
PSAnaXBzdW0nKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKS5p
bm5lclRleHQgPT0gJ2lwc3VtJykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1lID0gMi41KQor
RVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcyLjUnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAnMScpIE9LCitF
WFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNTb3VyY2UoKSA9
PSAnZG9sb3InKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKS5p
bm5lclRleHQgPT0gJ2RvbG9yJykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1lID0gMy41KQor
RVZFTlQoc2Vla2VkKQorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICczLjUnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAnMScpIE9LCitF
WFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNTb3VyY2UoKSA9
PSAnc2l0JykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykuaW5u
ZXJUZXh0ID09ICdzaXQnKSBPSworCitUZXN0IHRoYXQgdGhlIGN1ZSBkaXNwbGF5IGZvbnQgc2l6
ZSBpcyByZXNpemVkIGFzIHRoZSB2aWRlbyBlbGVtZW50IHJlc2l6ZXMuCitSVU4odmlkZW8ud2lk
dGggPSAzMjApCitSVU4odmlkZW8uaGVpZ2h0ID0gMjQwKQorRVhQRUNURUQgKGdldENvbXB1dGVk
U3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSA9PSAnMTZweCcp
IE9LCisKK1JVTih2aWRlby53aWR0aCA9IDY0MCkKK1JVTih2aWRlby5oZWlnaHQgPSA0ODApCitF
WFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykp
LmZvbnRTaXplID09ICcxOXB4JykgT0sKKworUlVOKHZpZGVvLndpZHRoID0gMTI4MCkKK1JVTih2
aWRlby5oZWlnaHQgPSA5NjApCitFWFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXplID09ICczOHB4JykgT0sKKworUlVOKHZpZGVv
LndpZHRoID0gMjU2MCkKK1JVTih2aWRlby5oZWlnaHQgPSAxNDQwKQorRVhQRUNURUQgKGdldENv
bXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSA9PSAn
NThweCcpIE9LCitFTkQgT0YgVEVTVAorCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90
cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
dHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAg
ICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hh
cnNldD11dGYtOCIgLz4KKworICAgICAgICA8c2NyaXB0IHNyYz0uLi9tZWRpYS1maWxlLmpzPjwv
c2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0uLi92aWRlby10ZXN0LmpzPjwvc2NyaXB0Pgor
ICAgICAgICA8c2NyaXB0IHNyYz0uLi9tZWRpYS1jb250cm9scy5qcz48L3NjcmlwdD4KKworICAg
ICAgICA8c2NyaXB0PiAgICAgICAgICAgIAorCisgICAgICAgIHZhciB0ZXN0VHJhY2s7CisgICAg
ICAgIHZhciBzZWVrZWRDb3VudCA9IDA7CisgICAgICAgIHZhciBpbmZvID0gWyAiTG9yZW0iLCAi
aXBzdW0iLCAiZG9sb3IiLCAic2l0IiBdOworCisgICAgICAgIGZ1bmN0aW9uIHRlc3RGb250U2l6
ZXMoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxicj5UZXN0IHRoYXQg
dGhlIGN1ZSBkaXNwbGF5IGZvbnQgc2l6ZSBpcyByZXNpemVkIGFzIHRoZSB2aWRlbyBlbGVtZW50
IHJlc2l6ZXMuIik7CisgICAgICAgICAgICBydW4oInZpZGVvLndpZHRoID0gMzIwIik7CisgICAg
ICAgICAgICBydW4oInZpZGVvLmhlaWdodCA9IDI0MCIpOworICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5vZmZzZXRUb3A7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImdldENvbXB1dGVkU3R5
bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSIsICIxNnB4Iik7CisK
KyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICBydW4oInZpZGVvLndp
ZHRoID0gNjQwIik7CisgICAgICAgICAgICBydW4oInZpZGVvLmhlaWdodCA9IDQ4MCIpOworICAg
ICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoImdldENvbXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250
U2l6ZSIsICIxOXB4Iik7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAg
ICAgICBydW4oInZpZGVvLndpZHRoID0gMTI4MCIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby5o
ZWlnaHQgPSA5NjAiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlF
bGVtZW50KHZpZGVvKSkuZm9udFNpemUiLCAiMzhweCIpOworCisgICAgICAgICAgICBjb25zb2xl
V3JpdGUoIiIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby53aWR0aCA9IDI1NjAiKTsKKyAgICAg
ICAgICAgIHJ1bigidmlkZW8uaGVpZ2h0ID0gMTQ0MCIpOworICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5vZmZzZXRUb3A7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImdldENvbXB1dGVkU3R5
bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSIsICI1OHB4Iik7CisK
KyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNl
ZWtlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8uY3VycmVu
dFRpbWUiLCBzZWVrZWRDb3VudCArIC41KTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidGVz
dFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoIiwgMSk7CisgICAgICAgICAgICB0ZXN0RXhw
ZWN0ZWQoInRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291cmNlKCkiLCBp
bmZvW3NlZWtlZENvdW50XSk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRleHRUcmFja0Rp
c3BsYXlFbGVtZW50KHZpZGVvKS5pbm5lclRleHQiLCBpbmZvW3NlZWtlZENvdW50XSk7CisKKyAg
ICAgICAgICAgIGlmICgrK3NlZWtlZENvdW50ID09IGluZm8ubGVuZ3RoKQorICAgICAgICAgICAg
ICAgIHRlc3RGb250U2l6ZXMoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICAgICAgcnVuKCJ2aWRlby5jdXJyZW50VGlt
ZSA9ICIgKyAodmlkZW8uY3VycmVudFRpbWUgKyAxKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZGVkKCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc29sZVdyaXRlKCJUZXN0IHRoYXQgVGV4dFRyYWNr
J3MgY3VlcyBhcmUgcmVuZGVyZWQgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgZmluZE1lZGlh
RWxlbWVudCgpOworICAgICAgICAgICAgdGVzdFRyYWNrID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rv
ckFsbCgndHJhY2snKVswXTsKKyAgICAgICAgICAgIHZpZGVvLnNyYyA9IGZpbmRNZWRpYUZpbGUo
J3ZpZGVvJywgJy4uL2NvbnRlbnQvdGVzdCcpOworICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdz
ZWVrZWQnLCBzZWVrZWQpOworICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5wbGF5dGhyb3Vn
aCcsIGZ1bmN0aW9uKCkgeyB2aWRlby5jdXJyZW50VGltZSA9IC41OyB9KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxib2R5IG9ubG9h
ZD0ibG9hZGVkKCkiPgorICAgICAgICA8dmlkZW8gY29udHJvbHMgPgorICAgICAgICAgICAgPHRy
YWNrIHNyYz0iY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLnZ0dCIga2luZD0iY2FwdGlvbnMiIGRl
ZmF1bHQ+CisgICAgICAgIDwvdmlkZW8+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="119913"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="119920"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119806</attachid>
            <date>2011-12-18 20:55:03 -0800</date>
            <delta_ts>2011-12-18 21:11:35 -0800</delta_ts>
            <desc>Updated, one more time.</desc>
            <filename>patch_rendering_12.txt</filename>
            <type>text/plain</type>
            <size>39168</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzE5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDExLTEyLTE4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0IHRy
YWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKKworICAgICAgICAqIGNzcy9t
ZWRpYUNvbnRyb2xzLmNzczoKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJh
Y2stY29udGFpbmVyKToKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2st
ZGlzcGxheSk6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6IEluaXRpYWxp
emUgbV9oYXZlVmlzaWJsZVRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMpOiBUcmlnZ2VyIGFuIHVwZGF0ZSBvZiB0
aGUgdGV4dAorICAgICAgICAgICAgdHJhY2sgZGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKTogY2FsbCBjb25maWd1cmVUZXh0
VHJhY2tEaXNwbGF5KCkgc28gCisgICAgICAgICAgICB0aGUgdGV4dCB0cmFjayBkaXNwbGF5IGlz
IGhpZGRlbiBvciBzaG93biB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJblRoaXNUcmFjayk6IE1pbm9yIGNsZWFudXAu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYUNvbnRyb2xz
KTogY29uZmlndXJlTWVkaWFDb250cm9scygpIGFsd2F5cyBjYWxsZWQKKyAgICAgICAgICAgIHJl
c2V0IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250cm9scywgZG8gaXQgaGVyZSBpbnN0ZWFkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scyk6
IFNpbXBsaWZ5IGFuZCBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSk6IFNob3cgYW5kIGhpZGUgdGV4dCB0cmFjayBk
aXNwbGF5LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudGx5VmlzaWJsZUN1ZXMpOgorCisgICAgICAg
ICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmxheW91dCk6IE5ldy4gQ2FsbCB0aGUgZGlzcGxheSBlbGVtZW50IHNvIGl0
IGNhbgorICAgICAgICAgICAgdXBkYXRlIHRoZSBwb3NpdGlvbiBhbmQgZm9udCBzaXplLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyk6IEtlZXAgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQKKyAgICAgICAgICAgIHBvc2l0
aW9uZWQgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8gYm94LCBhbmQgc2l6ZSB0aGUgZm9u
dCBhY2NvcmRpbmcgdG8gdGhlIHZpZGVvIGhlaWdodC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6ZGlzcGxheVR5cGUpOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50KTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbGxlcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93
VGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Um9vdEVsZW1lbnQ6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Lmg6CisK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06Ok1l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNob3dUZXh0VHJhY2tE
aXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVu
dDo6aGlkZVRleHRUcmFja0Rpc3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoKKwogMjAxMS0xMi0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvbWVk
aWFDb250cm9scy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHMuY3NzCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFD
b250cm9scy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwzICsxODYsMjkgQEAgYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbgogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiB7CiAgICAgZGlzcGxheTogbm9u
ZTsKIH0KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBwYWRkaW5nOiAxMHB4
IDIwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAg
ICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
CisgICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKKyAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsK
KyAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKyAgICB0ZXh0LWluZGVudDogMDsKKyAgICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZTsKK30KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFj
ay1kaXNwbGF5IHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiYSgwLCAwLCAwLCAwLjUpOworICAgIGNvbG9yOiB5ZWxsb3c7CisgICAgcGFkZGluZzogMHB4
IDJweDsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAko
cmV2aXNpb24gMTAzMDYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fcGFyc2luZ0luUHJvZ3Jlc3MoY3JlYXRl
ZEJ5UGFyc2VyKQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAsIG1fdHJhY2tzQXJlUmVh
ZHkodHJ1ZSkKKyAgICAsIG1faGF2ZVZpc2libGVUZXh0VHJhY2soZmFsc2UpCiAgICAgLCBtX3Rl
eHRUcmFja3MoMCkKICNlbmRpZgogI2lmIEVOQUJMRShXRUJfQVVESU8pCkBAIC05NDAsMjMgKzk0
MSwzMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVBY3RpdmVUZXh0
VHJhY2tDdWVzKGZsb2F0IG1vdmllVGltZSkKIHsKLSAgICBWZWN0b3I8Q3VlSW50ZXJ2YWxUcmVl
OjpJbnRlcnZhbFR5cGU+IHByZXZpb3VzbHlWaXNpYmxlQ3VlcyA9IG1fY3VycmVudGx5VmlzaWJs
ZUN1ZXM7CisgICAgQ3VlTGlzdCBwcmV2aW91c2x5QWN0aXZlQ3VlcyA9IG1fY3VycmVudGx5QWN0
aXZlQ3VlczsKKyAgICBib29sIGFjdGl2ZVNldENoYW5nZWQgPSBmYWxzZTsKIAotICAgIG1fY3Vy
cmVudGx5VmlzaWJsZUN1ZXMgPSBtX2N1ZVRyZWUuYWxsT3ZlcmxhcHMobV9jdWVUcmVlLmNyZWF0
ZUludGVydmFsKG1vdmllVGltZSwgbW92aWVUaW1lKSk7CisgICAgbV9jdXJyZW50bHlBY3RpdmVD
dWVzID0gbV9jdWVUcmVlLmFsbE92ZXJsYXBzKG1fY3VlVHJlZS5jcmVhdGVJbnRlcnZhbChtb3Zp
ZVRpbWUsIG1vdmllVGltZSkpOwogICAgIAogICAgIC8vIEZJWE1FKDcyMTcxKTogRXZlbnRzIG5l
ZWQgdG8gYmUgc29ydGVkIGFuZCBmaWx0ZXJlZCBiZWZvcmUgZGlzcGF0Y2hpbmcuCiAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZpb3VzbHlWaXNpYmxlQ3Vlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoIW1fY3VycmVudGx5VmlzaWJsZUN1ZXMuY29udGFpbnMocHJldmlvdXNs
eVZpc2libGVDdWVzW2ldKSkKLSAgICAgICAgICAgIHByZXZpb3VzbHlWaXNpYmxlQ3Vlc1tpXS5k
YXRhKCktPnNldElzQWN0aXZlKGZhbHNlKTsKLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2N1cnJlbnRseVZpc2libGVDdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgh
cHJldmlvdXNseVZpc2libGVDdWVzLmNvbnRhaW5zKG1fY3VycmVudGx5VmlzaWJsZUN1ZXNbaV0p
KQotICAgICAgICAgICAgbV9jdXJyZW50bHlWaXNpYmxlQ3Vlc1tpXS5kYXRhKCktPnNldElzQWN0
aXZlKHRydWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJldmlvdXNseUFjdGl2ZUN1
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRseUFjdGl2ZUN1ZXMuY29u
dGFpbnMocHJldmlvdXNseUFjdGl2ZUN1ZXNbaV0pKSB7CisgICAgICAgICAgICBwcmV2aW91c2x5
QWN0aXZlQ3Vlc1tpXS5kYXRhKCktPnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICAgICAgICAgIGFj
dGl2ZVNldENoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jdXJyZW50bHlBY3RpdmVDdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICghcHJldmlvdXNseUFjdGl2ZUN1ZXMuY29udGFpbnMobV9jdXJyZW50bHlBY3RpdmVDdWVz
W2ldKSkgeworICAgICAgICAgICAgbV9jdXJyZW50bHlBY3RpdmVDdWVzW2ldLmRhdGEoKS0+c2V0
SXNBY3RpdmUodHJ1ZSk7CisgICAgICAgICAgICBhY3RpdmVTZXRDaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRSg3MjE3Myk6IFBhdXNlIHRoZSBtZWRp
YSBlbGVtZW50IGZvciBjdWVzIGdvaW5nIHBhc3QgdGhlaXIgZW5kVGltZQogICAgIC8vIGR1cmlu
ZyBhIG1vbm90b25pYyB0aW1lIGluY3JlYXNlLgorCisgICAgaWYgKGFjdGl2ZVNldENoYW5nZWQg
JiYgaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVRl
eHRUcmFja0Rpc3BsYXkoKTsKIH0KIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tz
QXJlUmVhZHkoKSBjb25zdApAQCAtOTgyLDI5ICs5OTEsMjkgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tSZWFkeVN0YQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFj
a01vZGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiB7Ci0gICAgLy8gNC44LjEwLjEyLjMgU291
cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKLSAgICAvLyAuLi4gd2hlbiBhIHRleHQgdHJh
Y2sgY29ycmVzcG9uZGluZyB0byBhIHRyYWNrIGVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoIHRleHQg
dHJhY2sKLSAgICAvLyBtb2RlIHNldCB0byBkaXNhYmxlZCBhbmQgc3Vic2VxdWVudGx5IGNoYW5n
ZXMgaXRzIHRleHQgdHJhY2sgbW9kZSB0byBoaWRkZW4sIHNob3dpbmcsCi0gICAgLy8gb3Igc2hv
d2luZyBieSBkZWZhdWx0IGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIHVzZXIgYWdlbnQgbXVzdCBp
bW1lZGlhdGVseSBhbmQgc3luY2hyb25vdXNseQotICAgIC8vIHJ1biB0aGUgZm9sbG93aW5nIGFs
Z29yaXRobSAuLi4KLSAgICAKLSAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpICE9IFRleHRUcmFj
azo6VHJhY2tFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSFRNTFRyYWNrRWxl
bWVudCogdHJhY2tFbGVtZW50OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5o
YXNUYWdOYW1lKHRyYWNrVGFnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0cmFj
a0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVHJhY2tFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAg
IGlmICh0cmFja0VsZW1lbnQtPnRyYWNrKCkgIT0gdHJhY2spCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBNYXJrIHRoaXMgdHJhY2sgYXMgImNvbmZpZ3VyZWQiIHNvIGNvbmZp
Z3VyZVRleHRUcmFjayB3b24ndCBjaGFuZ2UgdGhlIG1vZGUgYWdhaW4uCi0gICAgICAgIHRyYWNr
RWxlbWVudC0+c2V0SGFzQmVlbkNvbmZpZ3VyZWQodHJ1ZSk7Ci0gICAgICAgIGlmICh0cmFjay0+
bW9kZSgpICE9IFRleHRUcmFjazo6RElTQUJMRUQgJiYgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRl
KCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6Tk9ORSkKLSAgICAgICAgICAgIHRyYWNrRWxlbWVudC0+
c2NoZWR1bGVMb2FkKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmICh0cmFjay0+dHJhY2tUeXBl
KCkgPT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpIHsKKyAgICAgICAgLy8gNC44LjEwLjEyLjMg
U291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKKyAgICAgICAgLy8gLi4uIHdoZW4gYSB0
ZXh0IHRyYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjayBlbGVtZW50IGlzIGNyZWF0ZWQgd2l0
aCB0ZXh0IHRyYWNrCisgICAgICAgIC8vIG1vZGUgc2V0IHRvIGRpc2FibGVkIGFuZCBzdWJzZXF1
ZW50bHkgY2hhbmdlcyBpdHMgdGV4dCB0cmFjayBtb2RlIHRvIGhpZGRlbiwgc2hvd2luZywKKyAg
ICAgICAgLy8gb3Igc2hvd2luZyBieSBkZWZhdWx0IGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIHVz
ZXIgYWdlbnQgbXVzdCBpbW1lZGlhdGVseSBhbmQgc3luY2hyb25vdXNseQorICAgICAgICAvLyBy
dW4gdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gLi4uCisKKyAgICAgICAgZm9yIChOb2RlKiBub2Rl
ID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICAgICAgaWYgKCFub2RlLT5oYXNUYWdOYW1lKHRyYWNrVGFnKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxUcmFja0VsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIGlmICh0
cmFja0VsZW1lbnQtPnRyYWNrKCkgIT0gdHJhY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1hcmsgdGhpcyB0cmFjayBhcyAiY29uZmln
dXJlZCIgc28gY29uZmlndXJlVGV4dFRyYWNrIHdvbid0IGNoYW5nZSB0aGUgbW9kZSBhZ2Fpbi4K
KyAgICAgICAgICAgIHRyYWNrRWxlbWVudC0+c2V0SGFzQmVlbkNvbmZpZ3VyZWQodHJ1ZSk7Cisg
ICAgICAgICAgICBpZiAodHJhY2stPm1vZGUoKSAhPSBUZXh0VHJhY2s6OkRJU0FCTEVEICYmIHRy
YWNrRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhUTUxUcmFja0VsZW1lbnQ6Ok5PTkUpCisgICAg
ICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zY2hlZHVsZUxvYWQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgfQorCisgICAgY29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSgp
OwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja0tpbmRDaGFuZ2VkKFRleHRU
cmFjayopCkBAIC0yMjg5LDEwICsyMjk4LDEwIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6dXNl
cklzSW50ZXJlc3RlZEkKIAogICAgIC8vIElmIC4uLiB0aGUgdXNlciBoYXMgaW5kaWNhdGVkIGFu
IGludGVyZXN0IGluIGhhdmluZyBhIHRyYWNrIHdpdGggdGhpcyB0ZXh0IHRyYWNrIGtpbmQsIHRl
eHQgdHJhY2sgbGFuZ3VhZ2UsIC4uLiAKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVu
dCgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChraW5kID09IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpIHx8IGtp
bmQgPT0gVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdvcmQoKSkgewotICAgICAgICBpZiAoIXNldHRp
bmdzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoa2luZCA9PSBUZXh0
VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQoKSAmJiAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlTdWJ0
aXRsZXMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGtpbmQgPT0g
VGV4dFRyYWNrOjpjYXB0aW9uc0tleXdvcmQoKSAmJiAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlD
YXB0aW9ucygpKQpAQCAtMjMwMSw3ICsyMzEwLDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp1
c2VySXNJbnRlcmVzdGVkSQogICAgIH0KIAogICAgIGlmIChraW5kID09IFRleHRUcmFjazo6ZGVz
Y3JpcHRpb25zS2V5d29yZCgpKSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdz
LT5zaG91bGREaXNwbGF5VGV4dERlc2NyaXB0aW9ucygpKQorICAgICAgICBpZiAoIXNldHRpbmdz
LT5zaG91bGREaXNwbGF5VGV4dERlc2NyaXB0aW9ucygpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICByZXR1cm4gdXNlcklzSW50ZXJlc3RlZEluVGhpc0xhbmd1YWdlKHRyYWNr
RWxlbWVudC0+c3JjbGFuZygpKTsKICAgICB9CkBAIC0zNDUyLDYgKzM0NjEsNyBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhQ29udHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGNvbnRyb2xzLT5zZXRNZWRpYUNvbnRyb2xsZXIobV9tZWRpYUNvbnRyb2xsZXIgPyBt
X21lZGlhQ29udHJvbGxlci5nZXQoKSA6IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbGxlckludGVy
ZmFjZSo+KHRoaXMpKTsKKyAgICBjb250cm9scy0+cmVzZXQoKTsKIAogICAgIGVuc3VyZVNoYWRv
d1Jvb3QoKS0+YXBwZW5kQ2hpbGQoY29udHJvbHMsIGVjKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM0NjYsMTEgKzM0NzYsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlh
Q29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMo
KSkgewotICAgICAgICBpZiAoIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXNldCgpOwotICAgIH0KKyAgICBpZiAo
IWhhc01lZGlhQ29udHJvbHMoKSAmJiAhY3JlYXRlTWVkaWFDb250cm9scygpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBtZWRpYUNvbnRyb2xzKCktPnNob3coKTsKICNlbHNlCiAgICAgaWYgKG1f
cGxheWVyKQpAQCAtMzQ3OCw2ICszNDg2LDM1IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29u
ZmlndXJlTWVkaWFDb24KICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQordm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBB
U1NFUlQobV90ZXh0VHJhY2tzKTsKKworICAgIGJvb2wgaGF2ZVZpc2libGVUZXh0VHJhY2sgPSBm
YWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChtX3RleHRUcmFja3MtPml0ZW0oaSktPm1vZGUoKSA9PSBU
ZXh0VHJhY2s6OlNIT1dJTkcpIHsKKyAgICAgICAgICAgIGhhdmVWaXNpYmxlVGV4dFRyYWNrID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1f
aGF2ZVZpc2libGVUZXh0VHJhY2sgPT0gaGF2ZVZpc2libGVUZXh0VHJhY2spCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2hhdmVWaXNpYmxlVGV4dFRyYWNrID0gaGF2ZVZpc2libGVUZXh0VHJhY2s7
CisKKyAgICBpZiAoIW1faGF2ZVZpc2libGVUZXh0VHJhY2spIHsKKyAgICAgICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+aGlkZVRleHRUcmFj
a0Rpc3BsYXkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaGFzTWVkaWFD
b250cm9scygpICYmICFjcmVhdGVNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtZWRpYUNvbnRyb2xzKCktPnNob3dUZXh0VHJhY2tEaXNwbGF5KCk7Cit9CisjZW5kaWYKKwog
dm9pZCogSFRNTE1lZGlhRWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogewogICAgIGlmIChldmVudCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53
ZWJraXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTAzMDYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDExIEBAIGNsYXNz
IFdpZGdldDsKIGNsYXNzIERpc3BsYXlTbGVlcERpc2FibGVyOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCit0eXBlZGVmIFBPREludGVydmFsVHJlZTxkb3VibGUsIFRleHRUcmFj
a0N1ZSo+IEN1ZUludGVydmFsVHJlZTsKK3R5cGVkZWYgVmVjdG9yPEN1ZUludGVydmFsVHJlZTo6
SW50ZXJ2YWxUeXBlPiBDdWVMaXN0OworI2VuZGlmCisKIC8vIEZJWE1FOiBUaGUgaW5oZXJpdGFu
Y2UgZnJvbSBNZWRpYVBsYXllckNsaWVudCBoZXJlIHNob3VsZCBiZSBwcml2YXRlIGluaGVyaXRh
bmNlLgogLy8gQnV0IGl0IGNhbid0IGJlIHVudGlsIHRoZSBDaHJvbWl1bSBXZWJNZWRpYVBsYXll
ckNsaWVudEltcGwgY2xhc3MgaXMgZml4ZWQgc28gaXQKIC8vIG5vIGxvbmdlciBkZXBlbmRzIG9u
IHR5cGVjYXN0aW5nIGEgTWVkaWFQbGF5ZXJDbGllbnQgdG8gYW4gSFRNTE1lZGlhRWxlbWVudC4K
QEAgLTE5Niw2ICsyMDEsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2s+IGFk
ZFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFk
ZFRyYWNrKGtpbmQsIGVtcHR5U3RyaW5nKCksIGVtcHR5U3RyaW5nKCksIGVjKTsgfQogCiAgICAg
VGV4dFRyYWNrTGlzdCogdGV4dFRyYWNrcygpOworICAgIEN1ZUxpc3QgY3VycmVudGx5QWN0aXZl
Q3VlcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudGx5QWN0aXZlQ3VlczsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHRyYWNrV2FzQWRkZWQoSFRNTFRyYWNrRWxlbWVudCopOwogICAgIHZpcnR1YWwg
dm9pZCB0cmFja1dpbGxCZVJlbW92ZWQoSFRNTFRyYWNrRWxlbWVudCopOwpAQCAtMjAzLDYgKzIw
OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFjayhIVE1MVHJhY2tFbGVt
ZW50Kik7CiAgICAgdm9pZCBjb25maWd1cmVUZXh0VHJhY2tzKCk7CiAgICAgYm9vbCB0ZXh0VHJh
Y2tzQXJlUmVhZHkoKSBjb25zdDsKKyAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXko
KTsKIAogICAgIC8vIFRleHRUcmFja0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB0ZXh0VHJhY2tS
ZWFkeVN0YXRlQ2hhbmdlZChUZXh0VHJhY2sqKTsKQEAgLTU0OSwxMiArNTU2LDEyIEBAIHByaXZh
dGU6CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgYm9vbCBtX3RyYWNrc0FyZVJlYWR5
IDogMTsKKyAgICBib29sIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgOiAxOworCiAgICAgUmVmUHRy
PFRleHRUcmFja0xpc3Q+IG1fdGV4dFRyYWNrczsKICAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
az4gPiBtX3RleHRUcmFja3NXaGVuUmVzb3VyY2VTZWxlY3Rpb25CZWdhbjsKLSAgICAKLSAgICB0
eXBlZGVmIFBPREludGVydmFsVHJlZSA8ZG91YmxlLCBUZXh0VHJhY2tDdWUqPiBDdWVJbnRlcnZh
bFRyZWU7CiAgICAgQ3VlSW50ZXJ2YWxUcmVlIG1fY3VlVHJlZTsKLSAgICBWZWN0b3I8Q3VlSW50
ZXJ2YWxUcmVlOjpJbnRlcnZhbFR5cGU+IG1fY3VycmVudGx5VmlzaWJsZUN1ZXM7CisgICAgQ3Vl
TGlzdCBtX2N1cnJlbnRseUFjdGl2ZUN1ZXM7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRl
ci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xMTE1LDYgKzExMTYsMTEyIEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sQ3VycmVudFQKICAgICByZXR1cm4gaWQ7CiB9CiAKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKwor
Y2xhc3MgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBSZW5kZXJCbG9j
ayB7CitwdWJsaWM6CisgICAgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChOb2RlKik7
CisgICAgCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CisKK1JlbmRl
clRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OlJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQgUmVu
ZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6bGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCbG9j
azo6bGF5b3V0KCk7CisgICAgaWYgKHN0eWxlKCktPmRpc3BsYXkoKSA9PSBOT05FKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQobWVkaWFDb250cm9sRWxlbWVudFR5cGUobm9kZSgpKSA9
PSBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXIpOworCisgICAgTGF5b3V0U3RhdGVEaXNh
YmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKSk7CisgICAgc3RhdGljX2Nhc3Q8TWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCo+KG5vZGUoKSktPnVwZGF0ZVNpemVzKCk7
Cit9CisKK2lubGluZSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IE1lZGlhQ29udHJvbEVsZW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2ZvbnRTaXplKDApCisg
ICAgLCBtX2JvdHRvbSgwKQoreworfQorCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRl
eHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOworICAgIGVsZW1lbnQtPmhp
ZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7Cit9CisKK1JlbmRlck9iamVjdCog
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlclRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQodGhpcyk7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6c2hhZG93UHNl
dWRvSWQoKSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBp
ZCwgKCItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyIikpOworICAgIHJldHVybiBp
ZDsKK30KKworc3RhdGljIGNvbnN0IGZsb2F0IG1pbWltdW1Gb250U2l6ZSA9IDE2Oworc3RhdGlj
IGNvbnN0IGZsb2F0IHZpZGVvSGVpZ2h0Rm9udFNpemVEaXZpc29yID0gMjU7CitzdGF0aWMgY29u
c3QgZmxvYXQgdHJhY2tCb3R0b21NdWx0aXBsaWVyID0gMC45OworICAgIAordm9pZCBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVTaXplcygpCit7CisgICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQodGhpcyk7
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQgfHwgIW1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSB8fCAh
bWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5pc1ZpZGVvKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBJbnRSZWN0IHZpZGVvQm94ID0gdG9SZW5kZXJWaWRlbyhtZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCkpLT52aWRlb0JveCgpOworICAgIGlmIChtX3ZpZGVvRGlzcGxheVNpemUgPT0gdmlk
ZW9Cb3gpCisgICAgICAgIHJldHVybjsKKyAgICBtX3ZpZGVvRGlzcGxheVNpemUgPSB2aWRlb0Jv
eDsKKworICAgIGZsb2F0IGZvbnRTaXplID0gbV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKS5oZWln
aHQoKSAvIHZpZGVvSGVpZ2h0Rm9udFNpemVEaXZpc29yOworICAgIGlmIChmb250U2l6ZSA8IG1p
bWltdW1Gb250U2l6ZSkKKyAgICAgICAgZm9udFNpemUgPSBtaW1pbXVtRm9udFNpemU7CisgICAg
aWYgKGZvbnRTaXplICE9IG1fZm9udFNpemUpIHsKKyAgICAgICAgbV9mb250U2l6ZSA9IGZvbnRT
aXplOworICAgICAgICBlbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlGb250U2l6ZSwgU3RyaW5nOjpudW1iZXIoZm9udFNpemUpICsgInB4Iik7CisgICAgfQor
CisgICAgTGF5b3V0VW5pdCBib3R0b20gPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihtX3ZpZGVv
RGlzcGxheVNpemUueSgpICsgbV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpIC0gKG1fdmlkZW9E
aXNwbGF5U2l6ZS5oZWlnaHQoKSAqIHRyYWNrQm90dG9tTXVsdGlwbGllcikpOworICAgIGlmIChi
b3R0b20gIT0gbV9ib3R0b20pIHsKKyAgICAgICAgbV9ib3R0b20gPSBib3R0b207CisgICAgICAg
IGVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwg
U3RyaW5nOjpudW1iZXIoYm90dG9tKSArICJweCIpOworICAgIH0KK30KKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6TWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChkb2N1bWVudCkKK3sKK30KKworUGFzc1JlZlB0
cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRy
YWNrRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudChkb2N1
bWVudCkpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFRleHRUcmFja0Rp
c3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1kaXNw
bGF5IikpOworICAgIHJldHVybiBpZDsKK30KKworI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xFbGVtZW50cy5oCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2
ICs2OSw4IEBAIGVudW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewogICAgIE1lZGlhVm9sdW1l
U2xpZGVyLAogICAgIE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIsCiAgICAgTWVkaWFWb2x1bWVTbGlk
ZXJNdXRlQnV0dG9uLAorICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheUNvbnRhaW5lciwKKyAgICBN
ZWRpYVRleHRUcmFja0Rpc3BsYXksCiB9OwogCiBIVE1MTWVkaWFFbGVtZW50KiB0b1BhcmVudE1l
ZGlhRWxlbWVudChOb2RlKik7CkBAIC00ODQsNiArNDg2LDQyIEBAIHByaXZhdGU6CiAgCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCitj
bGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlh
Q29udHJvbEVsZW1lbnQgeworcHVibGljOgorICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwor
ICAgIAorICAgIHZvaWQgdXBkYXRlU2l6ZXMoKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwor
ICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCB7
IHJldHVybiBNZWRpYVRleHRUcmFja0Rpc3BsYXlDb250YWluZXI7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKKworICAgIEludFJlY3Qg
bV92aWRlb0Rpc3BsYXlTaXplOworICAgIGZsb2F0IG1fZm9udFNpemU7CisgICAgTGF5b3V0VW5p
dCBtX2JvdHRvbTsKK307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xh
c3MgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250
cm9sRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
VGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworCitwcml2YXRlOgor
ICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50KERvY3VtZW50Kik7CisKKyAg
ICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gTWVkaWFUZXh0VHJhY2tEaXNwbGF5OyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7Cit9OworI2VuZGlmCisKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sUm9vdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTAzMDYzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTYgQEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJU
ZXh0LmgiCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3Vl
LmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNjUsOCArNzEsMTIgQEAg
TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJvbwogICAgICwgbV9mdWxsU2Ny
ZWVuVm9sdW1lU2xpZGVyKDApCiAgICAgLCBtX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24oMCkK
ICAgICAsIG1fcGFuZWwoMCkKLSAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxzZSkKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgLCBtX3RleHREaXNwbGF5Q29udGFpbmVyKDApCisg
ICAgLCBtX3RleHRUcmFja0Rpc3BsYXkoMCkKKyNlbmRpZgogICAgICwgbV9oaWRlRnVsbHNjcmVl
bkNvbnRyb2xzVGltZXIodGhpcywgJk1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpoaWRlRnVsbHNj
cmVlbkNvbnRyb2xzVGltZXJGaXJlZCkKKyAgICAsIG1faXNNb3VzZU92ZXJDb250cm9scyhmYWxz
ZSkKIHsKIH0KIApAQCAtMjY0LDYgKzI3NCwxMiBAQCB2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVt
ZW50OjpzZXRNZWRpYUNvCiAgICAgICAgIG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbi0+c2V0
TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwogICAgIGlmIChtX3BhbmVsKQogICAgICAgICBt
X3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBtX3RleHRE
aXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgaWYg
KG1fdGV4dFRyYWNrRGlzcGxheSkKKyAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5zZXRNZWRp
YUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjZW5kaWYKICAgICByZXNldCgpOwogfQogCkBAIC01
NzYsNiArNTkyLDc1IEBAIHZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnN0b3BIaWRlRnUK
ICAgICBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lci5zdG9wKCk7CiB9CiAKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpjcmVhdGVUZXh0
VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ+IHRleHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4dERpc3BsYXlDb250YWlu
ZXIgPSB0ZXh0RGlzcGxheUNvbnRhaW5lci5nZXQoKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gdGV4dERpc3BsYXkgPSBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXItPmhpZGUoKTsKKyAgICBtX3RleHRUcmFja0Rpc3BsYXkgPSB0ZXh0RGlzcGxh
eS5nZXQoKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGV4dERpc3BsYXlDb250YWlu
ZXItPmFwcGVuZENoaWxkKHRleHREaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW5zZXJ0IGl0IGJlZm9yZSB0aGUgZmly
c3QgY29udHJvbGxlciBlbGVtZW50IHNvIGl0IGFsd2F5cyBkaXNwbGF5cyBiZWhpbmQgdGhlIGNv
bnRyb2xzLgorICAgIGluc2VydEJlZm9yZSh0ZXh0RGlzcGxheUNvbnRhaW5lci5yZWxlYXNlKCks
IG1fcGFuZWwsIGVjLCB0cnVlKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6
c2hvd1RleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRhaW5l
cikKKyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIG1fdGV4dERpc3BsYXlD
b250YWluZXItPnNob3coKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6aGlk
ZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlzcGxheUNvbnRhaW5lcikK
KyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIG1fdGV4dERpc3BsYXlDb250
YWluZXItPmhpZGUoKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRl
VGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQor
ICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisKKyAgICBDdWVMaXN0IGFjdGl2ZUN1
ZXMgPSB0b1BhcmVudE1lZGlhRWxlbWVudChtX3RleHREaXNwbGF5Q29udGFpbmVyKS0+Y3VycmVu
dGx5QWN0aXZlQ3VlcygpOworICAgIGlmIChhY3RpdmVDdWVzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5yZW1vdmVDaGlsZHJlbigpOworICAg
IGJvb2wgbm90aGluZ1RvRGlzcGxheSA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhY3RpdmVDdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0g
YWN0aXZlQ3Vlc1tpXS5kYXRhKCk7CisgICAgICAgIEFTU0VSVChjdWUtPmlzQWN0aXZlKCkpOwor
ICAgICAgICBpZiAoIWN1ZS0+dHJhY2soKSB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSAhPSBUZXh0
VHJhY2s6OlNIT1dJTkcpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTdHJpbmcg
Y3VlVGV4dCA9IGN1ZS0+Z2V0Q3VlQXNTb3VyY2UoKTsKKyAgICAgICAgaWYgKCFjdWVUZXh0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFub3RoaW5nVG9EaXNwbGF5KQorICAgICAgICAg
ICAgICAgIG1fdGV4dFRyYWNrRGlzcGxheS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChIVE1MTmFtZXM6OmJyVGFnLCBmYWxzZSksIEFTU0VSVF9OT19FWENFUFRJT04pOwor
ICAgICAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5j
cmVhdGVUZXh0Tm9kZShjdWVUZXh0KSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAg
ICBub3RoaW5nVG9EaXNwbGF5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IW5vdGhpbmdUb0Rpc3BsYXkpCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNob3co
KTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsKK30K
KyNlbmRpZgorCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Ojpz
aGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50LmgJKHJl
dmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bFJvb3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDExIEBAIGNsYXNzIE1l
ZGlhUGxheWVyOwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyTWVkaWE7CiAKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ7CisjZW5k
aWYKKwogY2xhc3MgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9s
cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sUm9vdEVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCopOwpAQCAtOTgsNiArMTAzLDEzIEBAIHB1YmxpYzoKICAgICB2
b2lkIHVwZGF0ZVRpbWVEaXNwbGF5KCk7CiAgICAgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCk7
CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdm9pZCBjcmVhdGVUZXh0VHJhY2tEaXNw
bGF5KCk7CisgICAgdm9pZCBzaG93VGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZvaWQgaGlkZVRl
eHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyNl
bmRpZgorCiAgICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250cm9scygpOwogCiBwcml2YXRl
OgpAQCAtMTM0LDggKzE0NiwxMiBAQCBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbEZ1bGxzY3Jl
ZW5Wb2x1bWVTbGlkZXJFbGVtZW50KiBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXI7CiAgICAgTWVk
aWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbk1h
eFZvbHVtZUJ1dHRvbjsKICAgICBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7Ci0g
ICAgYm9vbCBtX2lzTW91c2VPdmVyQ29udHJvbHM7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQqIG1fdGV4dERpc3BsYXlD
b250YWluZXI7CisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQqIG1fdGV4
dFRyYWNrRGlzcGxheTsKKyNlbmRpZgogICAgIFRpbWVyPE1lZGlhQ29udHJvbFJvb3RFbGVtZW50
PiBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcjsKKyAgICBib29sIG1faXNNb3VzZU92ZXJD
b250cm9sczsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uY3BwCShyZXZp
c2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xS
b290RWxlbWVudENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEzIEBA
CiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIk1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hy
b21pdW0uaCIKIAorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIK
KyNpbmNsdWRlICJUZXh0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ5LDYgKzUy
LDEwIEBAIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06Ok1lZGlhQ28KICAgICAsIG1f
dm9sdW1lU2xpZGVyKDApCiAgICAgLCBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcigwKQogICAgICwg
bV9wYW5lbCgwKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAsIG1fdGV4dERpc3BsYXlD
b250YWluZXIoMCkKKyAgICAsIG1fdGV4dFRyYWNrRGlzcGxheSgwKQorI2VuZGlmCiAgICAgLCBt
X29wYXF1ZSh0cnVlKQogICAgICwgbV9pc01vdXNlT3ZlckNvbnRyb2xzKGZhbHNlKQogewpAQCAt
MzA5LDYgKzMxNiw3NSBAQCB2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06OnNo
CiAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNob3coKTsKIH0KIAorI2lmIEVOQUJMRShW
SURFT19UUkFDSykKK3ZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFj
a0Rpc3BsYXkoKQoreworICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dD4gdGV4dERpc3BsYXlDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lciA9
IHRleHREaXNwbGF5Q29udGFpbmVyLmdldCgpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRl
eHRUcmFja0Rpc3BsYXlFbGVtZW50PiB0ZXh0RGlzcGxheSA9IE1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CisgICAgbV90ZXh0RGlzcGxheUNv
bnRhaW5lci0+aGlkZSgpOworICAgIG1fdGV4dFRyYWNrRGlzcGxheSA9IHRleHREaXNwbGF5Lmdl
dCgpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXh0RGlzcGxheUNvbnRhaW5lci0+
YXBwZW5kQ2hpbGQodGV4dERpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVj
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbnNlcnQgaXQgYmVmb3JlIHRoZSBmaXJzdCBj
b250cm9sbGVyIGVsZW1lbnQgc28gaXQgYWx3YXlzIGRpc3BsYXlzIGJlaGluZCB0aGUgY29udHJv
bHMuCisgICAgaW5zZXJ0QmVmb3JlKHRleHREaXNwbGF5Q29udGFpbmVyLnJlbGVhc2UoKSwgbV9w
YW5lbCwgZWMsIHRydWUpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93
VGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQor
ICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRh
aW5lci0+c2hvdygpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpoaWRlVGV4
dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAg
ICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5l
ci0+aGlkZSgpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0
VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAg
ICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKworICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9
IHRvUGFyZW50TWVkaWFFbGVtZW50KG1fdGV4dERpc3BsYXlDb250YWluZXIpLT5jdXJyZW50bHlB
Y3RpdmVDdWVzKCk7CisgICAgaWYgKGFjdGl2ZUN1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3RleHRUcmFja0Rpc3BsYXktPnJlbW92ZUNoaWxkcmVuKCk7CisgICAgYm9v
bCBub3RoaW5nVG9EaXNwbGF5ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFj
dGl2ZUN1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSBhY3Rp
dmVDdWVzW2ldLmRhdGEoKTsKKyAgICAgICAgQVNTRVJUKGN1ZS0+aXNBY3RpdmUoKSk7CisgICAg
ICAgIGlmICghY3VlLT50cmFjaygpIHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgpICE9IFRleHRUcmFj
azo6U0hPV0lORykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0cmluZyBjdWVU
ZXh0ID0gY3VlLT5nZXRDdWVBc1NvdXJjZSgpOworICAgICAgICBpZiAoIWN1ZVRleHQuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAoIW5vdGhpbmdUb0Rpc3BsYXkpCisgICAgICAgICAgICAg
ICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVFbGVt
ZW50KEhUTUxOYW1lczo6YnJUYWcsIGZhbHNlKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICBtX3RleHRUcmFja0Rpc3BsYXktPmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0
ZVRleHROb2RlKGN1ZVRleHQpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIG5v
dGhpbmdUb0Rpc3BsYXkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbm90
aGluZ1RvRGlzcGxheSkKKyAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOwor
ICAgIGVsc2UKKyAgICAgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworfQorI2Vu
ZGlmCisgICAgCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hy
b21pdW06OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scyIpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xS
b290RWxlbWVudENocm9taXVtLmgJKHJldmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uaAkod29ya2luZyBj
b3B5KQpAQCAtNTUsNiArNTUsMTEgQEAgY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBSZW5kZXJC
b3g7CiBjbGFzcyBSZW5kZXJNZWRpYTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNz
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDsKKyNlbmRpZgorCiBjbGFzcyBNZWRpYUNvbnRyb2xS
b290RWxlbWVudENocm9taXVtIDogcHVibGljIE1lZGlhQ29udHJvbHMgewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0+IGNyZWF0
ZShEb2N1bWVudCopOwpAQCAtODcsNiArOTIsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRl
VGltZURpc3BsYXkoKTsKICAgICB2b2lkIHVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKIAorI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICB2b2lkIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAg
ICB2b2lkIHNob3dUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdm9pZCBoaWRlVGV4dFRyYWNrRGlz
cGxheSgpOworICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOworI2VuZGlmCisKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGlkZUNvbnRyb2xzKCk7CiAKIHByaXZhdGU6CkBAIC0xMDgs
NiArMTIwLDEwIEBAIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dCogbV92b2x1bWVTbGlkZXI7CiAgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudCogbV92b2x1bWVTbGlkZXJDb250YWluZXI7CiAgICAgTWVkaWFDb250cm9sUGFuZWxF
bGVtZW50KiBtX3BhbmVsOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KiBtX3RleHREaXNwbGF5Q29udGFpbmVyOworICAg
IE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50KiBtX3RleHRUcmFja0Rpc3BsYXk7
CisjZW5kaWYKIAogICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgYm9vbCBtX2lzTW91c2VPdmVyQ29u
dHJvbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5o
CShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDEyIEBAIGNsYXNzIE1lZGlhQ29u
dHJvbHMgOiBwdWJsaWMgSFRNTERpdkVsZW0KIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIaWRl
Q29udHJvbHMoKSA9IDA7CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdmlydHVhbCB2
b2lkIHNob3dUZXh0VHJhY2tEaXNwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBoaWRlVGV4
dFRyYWNrRGlzcGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlz
cGxheSgpID0gMDsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFDb250cm9scyhEb2N1
bWVudCopOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDMxOTIpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMi0xOCAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5kZXIgdGV4dCB0
cmFja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYy
ODg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBt
ZWRpYS9tZWRpYS1jb250cm9scy5qczoKKyAgICAgICAgKG1lZGlhQ29udHJvbHNFbGVtZW50KTog
RG9uJ3QgYWx3YXlzIGxvb2sgZm9yIGEgY29udHJvbGxlciBlbGVtZW50LgorICAgICAgICAobWVk
aWFDb250cm9sc0J1dHRvbkNvb3JkaW5hdGVzKToKKyAgICAgICAgKHRleHRUcmFja0Rpc3BsYXlF
bGVtZW50KTogRmluZCB0aGUgY3VlIGRpc3BsYXkgZWxlbWVudC4KKyAgICAgICAgKiBtZWRpYS90
cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
bWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy5odG1sOiBBZGRlZC4KKwogMjAxMS0xMi0x
OCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0CkluZGV4OiBMYXlvdXRUZXN0cy9t
ZWRpYS9tZWRpYS1jb250cm9scy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9t
ZWRpYS1jb250cm9scy5qcwkocmV2aXNpb24gMTAzMDYzKQorKysgTGF5b3V0VGVzdHMvbWVkaWEv
bWVkaWEtY29udHJvbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzEsMTIgQEAKIAogZnVu
Y3Rpb24gbWVkaWFDb250cm9sc0VsZW1lbnQoZmlyc3QsIGlkKQogewotICAgIHZhciBjb250cm9s
SUQgPSAiLXdlYmtpdC1tZWRpYS1jb250cm9scy0iICsgaWQ7CiAgICAgZm9yICh2YXIgZWxlbWVu
dCA9IGZpcnN0OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZykgewogCiAg
ICAgICAgIC8vIE5vdCBldmVyeSBlbGVtZW50IGluIHRoZSBtZWRpYSBjb250cm9scyBoYXMgYSBz
aGFkb3cgcHNldWRvIElELCBlZy4gdGhlCiAgICAgICAgIC8vIHRleHQgbm9kZXMgZm9yIHRoZSB0
aW1lIHZhbHVlcywgc28gZ3VhcmQgYWdhaW5zdCBleGNlcHRpb25zLgogICAgICAgICB0cnkgewot
ICAgICAgICAgICAgaWYgKGludGVybmFscy5zaGFkb3dQc2V1ZG9JZChlbGVtZW50KSA9PSBjb250
cm9sSUQpCisgICAgICAgICAgICBpZiAoaW50ZXJuYWxzLnNoYWRvd1BzZXVkb0lkKGVsZW1lbnQp
ID09IGlkKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICB9IGNhdGNo
IChleGNlcHRpb24pIHsgfQogCkBAIC0yMyw3ICsyMiw4IEBAIGZ1bmN0aW9uIG1lZGlhQ29udHJv
bHNFbGVtZW50KGZpcnN0LCBpZCkKIAogZnVuY3Rpb24gbWVkaWFDb250cm9sc0J1dHRvbkNvb3Jk
aW5hdGVzKGVsZW1lbnQsIGlkKQogewotICAgIHZhciBidXR0b24gPSBtZWRpYUNvbnRyb2xzRWxl
bWVudChpbnRlcm5hbHMuc2hhZG93Um9vdChlbGVtZW50KS5maXJzdENoaWxkLCBpZCk7CisgICAg
dmFyIGNvbnRyb2xJRCA9ICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLSIgKyBpZDsKKyAgICB2YXIg
YnV0dG9uID0gbWVkaWFDb250cm9sc0VsZW1lbnQoaW50ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVu
dCkuZmlyc3RDaGlsZCwgY29udHJvbElEKTsKICAgICBpZiAoIWJ1dHRvbikKICAgICAgICAgdGhy
b3cgIkZhaWxlZCB0byBmaW5kIG1lZGlhIGNvbnRyb2wgZWxlbWVudCBJRCAnIiArIGlkICsgIici
OwogCkBAIC0zMiwzICszMiwxMiBAQCBmdW5jdGlvbiBtZWRpYUNvbnRyb2xzQnV0dG9uQ29vcmRp
bmF0ZXMoCiAgICAgdmFyIHkgPSBidXR0b25Cb3VuZGluZ1JlY3QudG9wICsgYnV0dG9uQm91bmRp
bmdSZWN0LmhlaWdodCAvIDI7CiAgICAgcmV0dXJuIG5ldyBBcnJheSh4LCB5KTsKIH0KKworZnVu
Y3Rpb24gdGV4dFRyYWNrRGlzcGxheUVsZW1lbnQocGFyZW50RWxlbWVudCkKK3sKKyAgICB2YXIg
Y29udHJvbElEID0gIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1kaXNwbGF5IjsKKyAgICB2YXIg
ZGlzcGxheUVsZW1lbnQgPSBtZWRpYUNvbnRyb2xzRWxlbWVudChpbnRlcm5hbHMuc2hhZG93Um9v
dChwYXJlbnRFbGVtZW50KS5maXJzdENoaWxkLCBjb250cm9sSUQpOworICAgIGlmICghZGlzcGxh
eUVsZW1lbnQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdG8gZmluZCBtZWRpYSBjb250cm9sIGVs
ZW1lbnQgSUQgJyIgKyBjb250cm9sSUQgKyAiJyI7CisgICAgcmV0dXJuIGRpc3BsYXlFbGVtZW50
OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL21lZGlh
L3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmlu
Zy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKK1Rlc3QgdGhhdCBU
ZXh0VHJhY2sncyBjdWVzIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkuCitFVkVOVChjYW5wbGF5dGhy
b3VnaCkKK0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMC41
JykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEn
KSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291
cmNlKCkgPT0gJ0xvcmVtJykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2
aWRlbykuaW5uZXJUZXh0ID09ICdMb3JlbScpIE9LCisKK1JVTih2aWRlby5jdXJyZW50VGltZSA9
IDEuNSkKK0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMS41
JykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEn
KSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291
cmNlKCkgPT0gJ2lwc3VtJykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2
aWRlbykuaW5uZXJUZXh0ID09ICdpcHN1bScpIE9LCisKK1JVTih2aWRlby5jdXJyZW50VGltZSA9
IDIuNSkKK0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMi41
JykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEn
KSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291
cmNlKCkgPT0gJ2RvbG9yJykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2
aWRlbykuaW5uZXJUZXh0ID09ICdkb2xvcicpIE9LCisKK1JVTih2aWRlby5jdXJyZW50VGltZSA9
IDMuNSkKK0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMy41
JykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEn
KSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291
cmNlKCkgPT0gJ3NpdCcpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlk
ZW8pLmlubmVyVGV4dCA9PSAnc2l0JykgT0sKKworVGVzdCB0aGF0IHRoZSBjdWUgZGlzcGxheSBm
b250IHNpemUgaXMgcmVzaXplZCBhcyB0aGUgdmlkZW8gZWxlbWVudCByZXNpemVzLgorUlVOKHZp
ZGVvLndpZHRoID0gMzIwKQorUlVOKHZpZGVvLmhlaWdodCA9IDI0MCkKK0VYUEVDVEVEIChnZXRD
b21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUgPT0g
JzE2cHgnKSBPSworCitSVU4odmlkZW8ud2lkdGggPSA2NDApCitSVU4odmlkZW8uaGVpZ2h0ID0g
NDgwKQorRVhQRUNURUQgKGdldENvbXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQo
dmlkZW8pKS5mb250U2l6ZSA9PSAnMTlweCcpIE9LCisKK1JVTih2aWRlby53aWR0aCA9IDEyODAp
CitSVU4odmlkZW8uaGVpZ2h0ID0gOTYwKQorRVhQRUNURUQgKGdldENvbXB1dGVkU3R5bGUodGV4
dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSA9PSAnMzhweCcpIE9LCisKK1JV
Tih2aWRlby53aWR0aCA9IDI1NjApCitSVU4odmlkZW8uaGVpZ2h0ID0gMTQ0MCkKK0VYUEVDVEVE
IChnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNp
emUgPT0gJzU4cHgnKSBPSworRU5EIE9GIFRFU1QKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEv
dHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmcuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4K
KyAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0
bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtZmls
ZS5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vdmlkZW8tdGVzdC5qcz48L3Nj
cmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+
CisKKyAgICAgICAgPHNjcmlwdD4gICAgICAgICAgICAKKworICAgICAgICB2YXIgdGVzdFRyYWNr
OworICAgICAgICB2YXIgc2Vla2VkQ291bnQgPSAwOworICAgICAgICB2YXIgaW5mbyA9IFsgIkxv
cmVtIiwgImlwc3VtIiwgImRvbG9yIiwgInNpdCIgXTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0
Rm9udFNpemVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8YnI+VGVz
dCB0aGF0IHRoZSBjdWUgZGlzcGxheSBmb250IHNpemUgaXMgcmVzaXplZCBhcyB0aGUgdmlkZW8g
ZWxlbWVudCByZXNpemVzLiIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby53aWR0aCA9IDMyMCIp
OworICAgICAgICAgICAgcnVuKCJ2aWRlby5oZWlnaHQgPSAyNDAiKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJnZXRDb21w
dXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUiLCAiMTZw
eCIpOworCisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcnVuKCJ2
aWRlby53aWR0aCA9IDY0MCIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby5oZWlnaHQgPSA0ODAi
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVv
KSkuZm9udFNpemUiLCAiMTlweCIpOworCisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOwor
ICAgICAgICAgICAgcnVuKCJ2aWRlby53aWR0aCA9IDEyODAiKTsKKyAgICAgICAgICAgIHJ1bigi
dmlkZW8uaGVpZ2h0ID0gOTYwIik7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRv
cDsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXplIiwgIjM4cHgiKTsKKworICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8ud2lkdGggPSAyNTYwIik7
CisgICAgICAgICAgICBydW4oInZpZGVvLmhlaWdodCA9IDE0NDAiKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJnZXRDb21w
dXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUiLCAiNThw
eCIpOworCisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBzZWVrZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVv
LmN1cnJlbnRUaW1lIiwgc2Vla2VkQ291bnQgKyAuNSk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCIsIDEpOworICAgICAgICAgICAg
dGVzdEV4cGVjdGVkKCJ0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRDdWVBc1NvdXJj
ZSgpIiwgaW5mb1tzZWVrZWRDb3VudF0pOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXh0
VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykuaW5uZXJUZXh0IiwgaW5mb1tzZWVrZWRDb3VudF0p
OworCisgICAgICAgICAgICBpZiAoKytzZWVrZWRDb3VudCA9PSBpbmZvLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICB0ZXN0Rm9udFNpemVzKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgICAgIHJ1bigidmlkZW8uY3Vy
cmVudFRpbWUgPSAiICsgKHZpZGVvLmN1cnJlbnRUaW1lICsgMSkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxv
YWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiVGVzdCB0aGF0IFRl
eHRUcmFjaydzIGN1ZXMgYXJlIHJlbmRlcmVkIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIGZp
bmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHRlc3RUcmFjayA9IGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3JBbGwoJ3RyYWNrJylbMF07CisgICAgICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVk
aWFGaWxlKCd2aWRlbycsICcuLi9jb250ZW50L3Rlc3QnKTsKKyAgICAgICAgICAgIHdhaXRGb3JF
dmVudCgnc2Vla2VkJywgc2Vla2VkKTsKKyAgICAgICAgICAgIHdhaXRGb3JFdmVudCgnY2FucGxh
eXRocm91Z2gnLCBmdW5jdGlvbigpIHsgdmlkZW8uY3VycmVudFRpbWUgPSAuNTsgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9k
eSBvbmxvYWQ9ImxvYWRlZCgpIj4KKyAgICAgICAgPHZpZGVvIGNvbnRyb2xzID4KKyAgICAgICAg
ICAgIDx0cmFjayBzcmM9ImNhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy52dHQiIGtpbmQ9ImNhcHRp
b25zIiBkZWZhdWx0PgorICAgICAgICA8L3ZpZGVvPgorICAgIDwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy52dHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2Nh
cHRpb25zLnZ0dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRp
b25zLXdlYnZ0dC9jYXB0aW9ucy52dHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKK++7
v1dFQlZUVAorCisxCiswMDowMDowMC4wMDAgLS0+IDAwOjAwOjAxLjAwMAorTG9yZW0KKworMgor
MDA6MDA6MDEuMDAwIC0tPiAwMDowMDowMi4wMDAKK2lwc3VtCisKKzMKKzAwOjAwOjAyLjAwMCAt
LT4gMDA6MDA6MDMuMDAwCitkb2xvcgorCis0CiswMDowMDowMy4wMDAgLS0+IDAwOjAwOjA0LjAw
MAorc2l0CisK
</data>
<flag name="review"
          id="119931"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="119934"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119820</attachid>
            <date>2011-12-18 22:59:59 -0800</date>
            <delta_ts>2011-12-18 23:10:43 -0800</delta_ts>
            <desc>One more patch for the EWS bot</desc>
            <filename>patch_rendering_13.txt</filename>
            <type>text/plain</type>
            <size>39276</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzE5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDExLTEyLTE4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0IHRy
YWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKKworICAgICAgICAqIGNzcy9t
ZWRpYUNvbnRyb2xzLmNzczoKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJh
Y2stY29udGFpbmVyKToKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2st
ZGlzcGxheSk6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6IEluaXRpYWxp
emUgbV9oYXZlVmlzaWJsZVRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMpOiBUcmlnZ2VyIGFuIHVwZGF0ZSBvZiB0
aGUgdGV4dAorICAgICAgICAgICAgdHJhY2sgZGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKTogY2FsbCBjb25maWd1cmVUZXh0
VHJhY2tEaXNwbGF5KCkgc28gCisgICAgICAgICAgICB0aGUgdGV4dCB0cmFjayBkaXNwbGF5IGlz
IGhpZGRlbiBvciBzaG93biB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJblRoaXNUcmFjayk6IE1pbm9yIGNsZWFudXAu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYUNvbnRyb2xz
KTogY29uZmlndXJlTWVkaWFDb250cm9scygpIGFsd2F5cyBjYWxsZWQKKyAgICAgICAgICAgIHJl
c2V0IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250cm9scywgZG8gaXQgaGVyZSBpbnN0ZWFkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scyk6
IFNpbXBsaWZ5IGFuZCBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSk6IFNob3cgYW5kIGhpZGUgdGV4dCB0cmFjayBk
aXNwbGF5LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudGx5VmlzaWJsZUN1ZXMpOgorCisgICAgICAg
ICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmxheW91dCk6IE5ldy4gQ2FsbCB0aGUgZGlzcGxheSBlbGVtZW50IHNvIGl0
IGNhbgorICAgICAgICAgICAgdXBkYXRlIHRoZSBwb3NpdGlvbiBhbmQgZm9udCBzaXplLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyk6IEtlZXAgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQKKyAgICAgICAgICAgIHBvc2l0
aW9uZWQgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8gYm94LCBhbmQgc2l6ZSB0aGUgZm9u
dCBhY2NvcmRpbmcgdG8gdGhlIHZpZGVvIGhlaWdodC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6ZGlzcGxheVR5cGUpOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50KTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbGxlcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93
VGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Um9vdEVsZW1lbnQ6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Lmg6CisK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06Ok1l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNob3dUZXh0VHJhY2tE
aXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVu
dDo6aGlkZVRleHRUcmFja0Rpc3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoKKwogMjAxMS0xMi0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvbWVk
aWFDb250cm9scy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHMuY3NzCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFD
b250cm9scy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwzICsxODYsMjggQEAgYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbgogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiB7CiAgICAgZGlzcGxheTogbm9u
ZTsKIH0KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBvdmVyZmxvdzogaGlk
ZGVuOworCisgICAgZm9udC1zaXplOiAyMnB4OworICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlm
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAKKyAgICBsZXR0ZXItc3BhY2luZzogbm9y
bWFsOworICAgIHdvcmQtc3BhY2luZzogbm9ybWFsOworICAgIHRleHQtdHJhbnNmb3JtOiBub25l
OworICAgIHRleHQtaW5kZW50OiAwOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBw
b2ludGVyLWV2ZW50czogbm9uZTsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworfQor
Cit2aWRlbzo6LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkgeworICAgIGRpc3BsYXk6
IGlubGluZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7CisgICAg
Y29sb3I6IHllbGxvdzsKKyAgICBwYWRkaW5nOiAwcHggMnB4OworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzEsNiArMjMxLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAog
ICAgICwgbV9wYXJzaW5nSW5Qcm9ncmVzcyhjcmVhdGVkQnlQYXJzZXIpCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgICwgbV90cmFja3NBcmVSZWFkeSh0cnVlKQorICAgICwgbV9oYXZlVmlz
aWJsZVRleHRUcmFjayhmYWxzZSkKICAgICAsIG1fdGV4dFRyYWNrcygwKQogI2VuZGlmCiAjaWYg
RU5BQkxFKFdFQl9BVURJTykKQEAgLTk0MCwyMyArOTQxLDMxIEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bG9hZFJlc291cmNlKGNvbnMKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoZmxvYXQgbW92aWVUaW1l
KQogewotICAgIFZlY3RvcjxDdWVJbnRlcnZhbFRyZWU6OkludGVydmFsVHlwZT4gcHJldmlvdXNs
eVZpc2libGVDdWVzID0gbV9jdXJyZW50bHlWaXNpYmxlQ3VlczsKKyAgICBDdWVMaXN0IHByZXZp
b3VzbHlBY3RpdmVDdWVzID0gbV9jdXJyZW50bHlBY3RpdmVDdWVzOworICAgIGJvb2wgYWN0aXZl
U2V0Q2hhbmdlZCA9IGZhbHNlOwogCi0gICAgbV9jdXJyZW50bHlWaXNpYmxlQ3VlcyA9IG1fY3Vl
VHJlZS5hbGxPdmVybGFwcyhtX2N1ZVRyZWUuY3JlYXRlSW50ZXJ2YWwobW92aWVUaW1lLCBtb3Zp
ZVRpbWUpKTsKKyAgICBtX2N1cnJlbnRseUFjdGl2ZUN1ZXMgPSBtX2N1ZVRyZWUuYWxsT3Zlcmxh
cHMobV9jdWVUcmVlLmNyZWF0ZUludGVydmFsKG1vdmllVGltZSwgbW92aWVUaW1lKSk7CiAgICAg
CiAgICAgLy8gRklYTUUoNzIxNzEpOiBFdmVudHMgbmVlZCB0byBiZSBzb3J0ZWQgYW5kIGZpbHRl
cmVkIGJlZm9yZSBkaXNwYXRjaGluZy4KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJl
dmlvdXNseVZpc2libGVDdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50
bHlWaXNpYmxlQ3Vlcy5jb250YWlucyhwcmV2aW91c2x5VmlzaWJsZUN1ZXNbaV0pKQotICAgICAg
ICAgICAgcHJldmlvdXNseVZpc2libGVDdWVzW2ldLmRhdGEoKS0+c2V0SXNBY3RpdmUoZmFsc2Up
OwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudGx5VmlzaWJsZUN1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmV2aW91c2x5VmlzaWJsZUN1ZXMuY29u
dGFpbnMobV9jdXJyZW50bHlWaXNpYmxlQ3Vlc1tpXSkpCi0gICAgICAgICAgICBtX2N1cnJlbnRs
eVZpc2libGVDdWVzW2ldLmRhdGEoKS0+c2V0SXNBY3RpdmUodHJ1ZSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcmV2aW91c2x5QWN0aXZlQ3Vlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIW1fY3VycmVudGx5QWN0aXZlQ3Vlcy5jb250YWlucyhwcmV2aW91c2x5QWN0aXZlQ3Vl
c1tpXSkpIHsKKyAgICAgICAgICAgIHByZXZpb3VzbHlBY3RpdmVDdWVzW2ldLmRhdGEoKS0+c2V0
SXNBY3RpdmUoZmFsc2UpOworICAgICAgICAgICAgYWN0aXZlU2V0Q2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRseUFj
dGl2ZUN1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFwcmV2aW91c2x5QWN0aXZlQ3Vl
cy5jb250YWlucyhtX2N1cnJlbnRseUFjdGl2ZUN1ZXNbaV0pKSB7CisgICAgICAgICAgICBtX2N1
cnJlbnRseUFjdGl2ZUN1ZXNbaV0uZGF0YSgpLT5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICAgICAg
ICAgIGFjdGl2ZVNldENoYW5nZWQgPSB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IC8vIEZJWE1FKDcyMTczKTogUGF1c2UgdGhlIG1lZGlhIGVsZW1lbnQgZm9yIGN1ZXMgZ29pbmcg
cGFzdCB0aGVpciBlbmRUaW1lCiAgICAgLy8gZHVyaW5nIGEgbW9ub3RvbmljIHRpbWUgaW5jcmVh
c2UuCisKKyAgICBpZiAoYWN0aXZlU2V0Q2hhbmdlZCAmJiBoYXNNZWRpYUNvbnRyb2xzKCkpCisg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogfQogCiBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0CkBAIC05ODIs
MjkgKzk5MSwyOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhCiAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrKiB0
cmFjaykKIHsKLSAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0IHRy
YWNrcwotICAgIC8vIC4uLiB3aGVuIGEgdGV4dCB0cmFjayBjb3JyZXNwb25kaW5nIHRvIGEgdHJh
Y2sgZWxlbWVudCBpcyBjcmVhdGVkIHdpdGggdGV4dCB0cmFjawotICAgIC8vIG1vZGUgc2V0IHRv
IGRpc2FibGVkIGFuZCBzdWJzZXF1ZW50bHkgY2hhbmdlcyBpdHMgdGV4dCB0cmFjayBtb2RlIHRv
IGhpZGRlbiwgc2hvd2luZywKLSAgICAvLyBvciBzaG93aW5nIGJ5IGRlZmF1bHQgZm9yIHRoZSBm
aXJzdCB0aW1lLCB0aGUgdXNlciBhZ2VudCBtdXN0IGltbWVkaWF0ZWx5IGFuZCBzeW5jaHJvbm91
c2x5Ci0gICAgLy8gcnVuIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIC4uLgotICAgIAotICAgIGlm
ICh0cmFjay0+dHJhY2tUeXBlKCkgIT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQ7Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNp
YmxpbmcoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRyYWNrRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxUcmFja0VsZW1lbnQqPihub2RlKTsKLSAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+dHJhY2so
KSAhPSB0cmFjaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIE1hcmsgdGhp
cyB0cmFjayBhcyAiY29uZmlndXJlZCIgc28gY29uZmlndXJlVGV4dFRyYWNrIHdvbid0IGNoYW5n
ZSB0aGUgbW9kZSBhZ2Fpbi4KLSAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRIYXNCZWVuQ29uZmln
dXJlZCh0cnVlKTsKLSAgICAgICAgaWYgKHRyYWNrLT5tb2RlKCkgIT0gVGV4dFRyYWNrOjpESVNB
QkxFRCAmJiB0cmFja0VsZW1lbnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MVHJhY2tFbGVtZW50OjpO
T05FKQotICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zY2hlZHVsZUxvYWQoKTsKLSAgICAgICAg
YnJlYWs7CisgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OlRyYWNrRWxl
bWVudCkgeworICAgICAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0
IHRyYWNrcworICAgICAgICAvLyAuLi4gd2hlbiBhIHRleHQgdHJhY2sgY29ycmVzcG9uZGluZyB0
byBhIHRyYWNrIGVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoIHRleHQgdHJhY2sKKyAgICAgICAgLy8g
bW9kZSBzZXQgdG8gZGlzYWJsZWQgYW5kIHN1YnNlcXVlbnRseSBjaGFuZ2VzIGl0cyB0ZXh0IHRy
YWNrIG1vZGUgdG8gaGlkZGVuLCBzaG93aW5nLAorICAgICAgICAvLyBvciBzaG93aW5nIGJ5IGRl
ZmF1bHQgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGUgdXNlciBhZ2VudCBtdXN0IGltbWVkaWF0ZWx5
IGFuZCBzeW5jaHJvbm91c2x5CisgICAgICAgIC8vIHJ1biB0aGUgZm9sbG93aW5nIGFsZ29yaXRo
bSAuLi4KKworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1Rh
Z05hbWUodHJhY2tUYWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
SFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxl
bWVudCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+dHJhY2soKSAhPSB0
cmFjaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gTWFyayB0aGlzIHRyYWNrIGFzICJjb25maWd1cmVkIiBzbyBjb25maWd1cmVUZXh0VHJh
Y2sgd29uJ3QgY2hhbmdlIHRoZSBtb2RlIGFnYWluLgorICAgICAgICAgICAgdHJhY2tFbGVtZW50
LT5zZXRIYXNCZWVuQ29uZmlndXJlZCh0cnVlKTsKKyAgICAgICAgICAgIGlmICh0cmFjay0+bW9k
ZSgpICE9IFRleHRUcmFjazo6RElTQUJMRUQgJiYgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRlKCkg
PT0gSFRNTFRyYWNrRWxlbWVudDo6Tk9ORSkKKyAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQt
PnNjaGVkdWxlTG9hZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisK
KyAgICBjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6dGV4dFRyYWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKikKQEAgLTIyODksMTAgKzIyOTgs
MTAgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp1c2VySXNJbnRlcmVzdGVkSQogCiAgICAgLy8g
SWYgLi4uIHRoZSB1c2VyIGhhcyBpbmRpY2F0ZWQgYW4gaW50ZXJlc3QgaW4gaGF2aW5nIGEgdHJh
Y2sgd2l0aCB0aGlzIHRleHQgdHJhY2sga2luZCwgdGV4dCB0cmFjayBsYW5ndWFnZSwgLi4uIAog
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgaWYg
KCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGtpbmQgPT0gVGV4
dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCkgfHwga2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25z
S2V5d29yZCgpKSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmIChraW5kID09IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgp
ICYmICFzZXR0aW5ncy0+c2hvdWxkRGlzcGxheVN1YnRpdGxlcygpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoa2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29y
ZCgpICYmICFzZXR0aW5ncy0+c2hvdWxkRGlzcGxheUNhcHRpb25zKCkpCkBAIC0yMzAxLDcgKzIz
MTAsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJCiAgICAgfQog
CiAgICAgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpkZXNjcmlwdGlvbnNLZXl3b3JkKCkpIHsKLSAg
ICAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3Jp
cHRpb25zKCkpCisgICAgICAgIGlmICghc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3Jp
cHRpb25zKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB1c2Vy
SXNJbnRlcmVzdGVkSW5UaGlzTGFuZ3VhZ2UodHJhY2tFbGVtZW50LT5zcmNsYW5nKCkpOwogICAg
IH0KQEAgLTM0NTIsNiArMzQ2MSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVk
aWFDb250cm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29udHJvbHMtPnNldE1lZGlh
Q29udHJvbGxlcihtX21lZGlhQ29udHJvbGxlciA/IG1fbWVkaWFDb250cm9sbGVyLmdldCgpIDog
c3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sbGVySW50ZXJmYWNlKj4odGhpcykpOworICAgIGNvbnRy
b2xzLT5yZXNldCgpOwogCiAgICAgZW5zdXJlU2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChjb250
cm9scywgZWMpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzQ2NiwxMSArMzQ3Niw5IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb24KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghaGFzTWVkaWFDb250cm9scygpKSB7Ci0gICAgICAgIGlmICghY3JlYXRl
TWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtZWRpYUNvbnRy
b2xzKCktPnJlc2V0KCk7Ci0gICAgfQorICAgIGlmICghaGFzTWVkaWFDb250cm9scygpICYmICFj
cmVhdGVNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1lZGlhQ29udHJv
bHMoKS0+c2hvdygpOwogI2Vsc2UKICAgICBpZiAobV9wbGF5ZXIpCkBAIC0zNDc4LDYgKzM0ODYs
MzUgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbgogI2VuZGlmCiB9
CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZp
Z3VyZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIEFTU0VSVChtX3RleHRUcmFja3MpOworCisg
ICAgYm9vbCBoYXZlVmlzaWJsZVRleHRUcmFjayA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3RleHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
dGV4dFRyYWNrcy0+aXRlbShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6U0hPV0lORykgeworICAg
ICAgICAgICAgaGF2ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9oYXZlVmlzaWJsZVRleHRUcmFjayA9PSBo
YXZlVmlzaWJsZVRleHRUcmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZVZpc2libGVU
ZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRUcmFjazsKKworICAgIGlmICghbV9oYXZlVmlzaWJs
ZVRleHRUcmFjaykgeworICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICAg
ICAgbWVkaWFDb250cm9scygpLT5oaWRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlh
Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvd1Rl
eHRUcmFja0Rpc3BsYXkoKTsKK30KKyNlbmRpZgorCiB2b2lkKiBIVE1MTWVkaWFFbGVtZW50Ojpw
cmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50ICYm
IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVu
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAx
MDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNiArNjYsMTEgQEAgY2xhc3MgV2lkZ2V0OwogY2xhc3MgRGlzcGxheVNs
ZWVwRGlzYWJsZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3R5cGVkZWYg
UE9ESW50ZXJ2YWxUcmVlPGRvdWJsZSwgVGV4dFRyYWNrQ3VlKj4gQ3VlSW50ZXJ2YWxUcmVlOwor
dHlwZWRlZiBWZWN0b3I8Q3VlSW50ZXJ2YWxUcmVlOjpJbnRlcnZhbFR5cGU+IEN1ZUxpc3Q7Cisj
ZW5kaWYKKwogLy8gRklYTUU6IFRoZSBpbmhlcml0YW5jZSBmcm9tIE1lZGlhUGxheWVyQ2xpZW50
IGhlcmUgc2hvdWxkIGJlIHByaXZhdGUgaW5oZXJpdGFuY2UuCiAvLyBCdXQgaXQgY2FuJ3QgYmUg
dW50aWwgdGhlIENocm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCBjbGFzcyBpcyBmaXhl
ZCBzbyBpdAogLy8gbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3RpbmcgYSBNZWRpYVBsYXll
ckNsaWVudCB0byBhbiBIVE1MTWVkaWFFbGVtZW50LgpAQCAtMTk2LDYgKzIwMSw3IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPFRleHRUcmFjaz4gYWRkVHJhY2soY29uc3QgU3RyaW5nJiBraW5k
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkVHJhY2soa2luZCwgZW1wdHlTdHJpbmco
KSwgZW1wdHlTdHJpbmcoKSwgZWMpOyB9CiAKICAgICBUZXh0VHJhY2tMaXN0KiB0ZXh0VHJhY2tz
KCk7CisgICAgQ3VlTGlzdCBjdXJyZW50bHlBY3RpdmVDdWVzKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50bHlBY3RpdmVDdWVzOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tXYXNBZGRlZChI
VE1MVHJhY2tFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrV2lsbEJlUmVtb3ZlZChI
VE1MVHJhY2tFbGVtZW50Kik7CkBAIC0yMDMsNiArMjA5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y29uZmlndXJlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqKTsKICAgICB2b2lkIGNvbmZpZ3Vy
ZVRleHRUcmFja3MoKTsKICAgICBib29sIHRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0OworICAg
IHZvaWQgY29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSgpOwogCiAgICAgLy8gVGV4dFRyYWNrQ2xp
ZW50CiAgICAgdmlydHVhbCB2b2lkIHRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFj
ayopOwpAQCAtNTQ5LDEyICs1NTYsMTIgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKICAgICBib29sIG1fdHJhY2tzQXJlUmVhZHkgOiAxOworICAgIGJvb2wgbV9oYXZlVmlz
aWJsZVRleHRUcmFjayA6IDE7CisKICAgICBSZWZQdHI8VGV4dFRyYWNrTGlzdD4gbV90ZXh0VHJh
Y2tzOwogICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1fdGV4dFRyYWNrc1doZW5SZXNv
dXJjZVNlbGVjdGlvbkJlZ2FuOwotICAgIAotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlIDxk
b3VibGUsIFRleHRUcmFja0N1ZSo+IEN1ZUludGVydmFsVHJlZTsKICAgICBDdWVJbnRlcnZhbFRy
ZWUgbV9jdWVUcmVlOwotICAgIFZlY3RvcjxDdWVJbnRlcnZhbFRyZWU6OkludGVydmFsVHlwZT4g
bV9jdXJyZW50bHlWaXNpYmxlQ3VlczsKKyAgICBDdWVMaXN0IG1fY3VycmVudGx5QWN0aXZlQ3Vl
czsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9u
IDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
ICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAg
LTExMTUsNiArMTExNiwxMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xDdXJy
ZW50VAogICAgIHJldHVybiBpZDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCitjbGFzcyBSZW5kZXJUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50IDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50KE5vZGUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdmly
dHVhbCB2b2lkIGxheW91dCgpOworfTsKKworUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChOb2RlKiBub2RlKQorICAgIDogUmVu
ZGVyQmxvY2sobm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50OjpsYXlvdXQoKQoreworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKyAgICBpZiAoc3R5
bGUoKS0+ZGlzcGxheSgpID09IE5PTkUpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
ZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2RlKCkpID09IE1lZGlhVGV4dFRyYWNrRGlzcGxheUNv
bnRhaW5lcik7CisKKyAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIo
dmlldygpKTsKKyAgICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Kj4obm9kZSgpKS0+dXBkYXRlU2l6ZXMoKTsKK30KKworaW5saW5lIE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChk
b2N1bWVudCkKKyAgICAsIG1fZm9udFNpemUoMCkKKyAgICAsIG1fYm90dG9tKDApCit7Cit9CisK
K1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCkKK3sKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4g
ZWxlbWVudCA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50KGRvY3VtZW50KSk7CisgICAgZWxlbWVudC0+aGlkZSgpOworICAgIHJldHVybiBlbGVtZW50
LnJlbGVhc2UoKTsKK30KKworUmVuZGVyT2JqZWN0KiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKikKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudCh0aGlzKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Cit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtdGV4dC10
cmFjay1jb250YWluZXIiKSk7CisgICAgcmV0dXJuIGlkOworfQorCitzdGF0aWMgY29uc3QgZmxv
YXQgbWltaW11bUZvbnRTaXplID0gMTY7CitzdGF0aWMgY29uc3QgZmxvYXQgdmlkZW9IZWlnaHRG
b250U2l6ZURpdmlzb3IgPSAyNTsKK3N0YXRpYyBjb25zdCBmbG9hdCB0cmFja0JvdHRvbU11bHRp
cGxpZXIgPSAwLjk7CisgICAgCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVNpemVzKCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCB8
fCAhbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpIHx8ICFtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkt
PmlzVmlkZW8oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEludFJlY3QgdmlkZW9Cb3gg
PSB0b1JlbmRlclZpZGVvKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSktPnZpZGVvQm94KCk7Cisg
ICAgaWYgKG1fdmlkZW9EaXNwbGF5U2l6ZSA9PSB2aWRlb0JveCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94OworCisgICAgZmxvYXQgZm9udFNpemUg
PSBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhlaWdodCgpIC8gdmlkZW9IZWlnaHRGb250U2l6
ZURpdmlzb3I7CisgICAgaWYgKGZvbnRTaXplIDwgbWltaW11bUZvbnRTaXplKQorICAgICAgICBm
b250U2l6ZSA9IG1pbWltdW1Gb250U2l6ZTsKKyAgICBpZiAoZm9udFNpemUgIT0gbV9mb250U2l6
ZSkgeworICAgICAgICBtX2ZvbnRTaXplID0gZm9udFNpemU7CisgICAgICAgIGVuc3VyZUlubGlu
ZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51
bWJlcihmb250U2l6ZSkgKyAicHgiKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGJvdHRvbSA9
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KG1fdmlkZW9EaXNwbGF5U2l6ZS55KCkgKyBtX3ZpZGVv
RGlzcGxheVNpemUuaGVpZ2h0KCkgLSAobV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpICogdHJh
Y2tCb3R0b21NdWx0aXBsaWVyKSk7CisgICAgaWYgKGJvdHRvbSAhPSBtX2JvdHRvbSkgeworICAg
ICAgICBtX2JvdHRvbSA9IGJvdHRvbTsKKyAgICAgICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihib3R0b20pICsg
InB4Iik7CisgICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01l
ZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tE
aXNwbGF5RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xFbGVt
ZW50KGRvY3VtZW50KQoreworfQorCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Rp
c3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29u
dHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50KGRvY3VtZW50KSk7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ6OnNoYWRvd1BzZXVk
b0lkKCkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQs
ICgiLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkiKSk7CisgICAgcmV0dXJuIGlkOwor
fQorCisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHJldmlz
aW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgZW51bSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSB7CiAgICAgTWVkaWFWb2x1bWVTbGlkZXIsCiAgICAgTWVkaWFWb2x1bWVT
bGlkZXJUaHVtYiwKICAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCisgICAgTWVkaWFU
ZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyLAorICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKIH07
CiAKIEhUTUxNZWRpYUVsZW1lbnQqIHRvUGFyZW50TWVkaWFFbGVtZW50KE5vZGUqKTsKQEAgLTQ4
NCw2ICs0ODYsNDIgQEAgcHJpdmF0ZToKICAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CitwdWJsaWM6
CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgCisgICAgdm9pZCB1cGRhdGVTaXpl
cygpOworCitwcml2YXRlOgorICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhVGV4dFRyYWNrRGlz
cGxheUNvbnRhaW5lcjsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0OworCisgICAgSW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7CisgICAg
ZmxvYXQgbV9mb250U2l6ZTsKKyAgICBMYXlvdXRVbml0IG1fYm90dG9tOworfTsKKworLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNr
RGlzcGxheUVsZW1lbnQoRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVRleHRUcmFja0Rpc3Bs
YXk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBj
b25zdDsKK307CisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICsz
MSwxNiBAQAogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCkBAIC02NSw4ICs3MSwxMiBAQCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6
TWVkaWFDb250cm9sUm9vCiAgICAgLCBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXIoMCkKICAgICAs
IG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbigwKQogICAgICwgbV9wYW5lbCgwKQotICAgICwg
bV9pc01vdXNlT3ZlckNvbnRyb2xzKGZhbHNlKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICAsIG1fdGV4dERpc3BsYXlDb250YWluZXIoMCkKKyAgICAsIG1fdGV4dFRyYWNrRGlzcGxheSgw
KQorI2VuZGlmCiAgICAgLCBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcih0aGlzLCAmTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQ6OmhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lckZpcmVkKQor
ICAgICwgbV9pc01vdXNlT3ZlckNvbnRyb2xzKGZhbHNlKQogewogfQogCkBAIC0yNjQsNiArMjc0
LDEyIEBAIHZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ28KICAgICAgICAg
bV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxl
cik7CiAgICAgaWYgKG1fcGFuZWwpCiAgICAgICAgIG1fcGFuZWwtPnNldE1lZGlhQ29udHJvbGxl
cihjb250cm9sbGVyKTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgaWYgKG1fdGV4dERp
c3BsYXlDb250YWluZXIpCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICBpZiAobV90ZXh0VHJhY2tEaXNwbGF5KQorICAg
ICAgICBtX3RleHRUcmFja0Rpc3BsYXktPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsK
KyNlbmRpZgogICAgIHJlc2V0KCk7CiB9CiAKQEAgLTU3Niw2ICs1OTIsNzUgQEAgdm9pZCBNZWRp
YUNvbnRyb2xSb290RWxlbWVudDo6c3RvcEhpZGVGdQogICAgIG1faGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyLnN0b3AoKTsKIH0KIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3ZvaWQgTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlm
IChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gdGV4dERpc3BsYXlDb250YWlu
ZXIgPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lciA9IHRleHREaXNwbGF5Q29udGFpbmVy
LmdldCgpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50
PiB0ZXh0RGlzcGxheSA9IE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQoKSk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworICAg
IG1fdGV4dFRyYWNrRGlzcGxheSA9IHRleHREaXNwbGF5LmdldCgpOworCisgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKyAgICB0ZXh0RGlzcGxheUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGV4dERpc3Bs
YXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBJbnNlcnQgaXQgYmVmb3JlIHRoZSBmaXJzdCBjb250cm9sbGVyIGVsZW1lbnQgc28g
aXQgYWx3YXlzIGRpc3BsYXlzIGJlaGluZCB0aGUgY29udHJvbHMuCisgICAgaW5zZXJ0QmVmb3Jl
KHRleHREaXNwbGF5Q29udGFpbmVyLnJlbGVhc2UoKSwgbV9wYW5lbCwgZWMsIHRydWUpOworfQor
Cit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93VGV4dFRyYWNrRGlzcGxheSgpCit7
CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJh
Y2tEaXNwbGF5KCk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOworfQorCit2
b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpoaWRlVGV4dFRyYWNrRGlzcGxheSgpCit7Cisg
ICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tE
aXNwbGF5KCk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworfQorCit2b2lk
IE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAg
ICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rp
c3BsYXkoKTsKKworICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHRvUGFyZW50TWVkaWFFbGVtZW50
KG1fdGV4dERpc3BsYXlDb250YWluZXIpLT5jdXJyZW50bHlBY3RpdmVDdWVzKCk7CisgICAgaWYg
KGFjdGl2ZUN1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RleHRUcmFj
a0Rpc3BsYXktPnJlbW92ZUNoaWxkcmVuKCk7CisgICAgYm9vbCBub3RoaW5nVG9EaXNwbGF5ID0g
dHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUN1ZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSBhY3RpdmVDdWVzW2ldLmRhdGEoKTsKKyAg
ICAgICAgQVNTRVJUKGN1ZS0+aXNBY3RpdmUoKSk7CisgICAgICAgIGlmICghY3VlLT50cmFjaygp
IHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgpICE9IFRleHRUcmFjazo6U0hPV0lORykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0cmluZyBjdWVUZXh0ID0gY3VlLT5nZXRDdWVBc1Nv
dXJjZSgpOworICAgICAgICBpZiAoIWN1ZVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBp
ZiAoIW5vdGhpbmdUb0Rpc3BsYXkpCisgICAgICAgICAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5
LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6YnJUYWcs
IGZhbHNlKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBtX3RleHRUcmFja0Rp
c3BsYXktPmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKGN1ZVRleHQpLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIG5vdGhpbmdUb0Rpc3BsYXkgPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbm90aGluZ1RvRGlzcGxheSkKKyAgICAg
ICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAgbV90
ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworfQorI2VuZGlmCisKIGNvbnN0IEF0b21pY1N0
cmluZyYgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRp
YS1jb250cm9scyIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbFJvb3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuaAkocmV2aXNpb24gMTAzMDYzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNiArNjYsMTEgQEAgY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBSZW5kZXJC
b3g7CiBjbGFzcyBSZW5kZXJNZWRpYTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNz
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDsKKyNlbmRpZgorCiBjbGFzcyBNZWRpYUNvbnRyb2xS
b290RWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xSb290RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CkBA
IC05OCw2ICsxMDMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXkoKTsK
ICAgICB2b2lkIHVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICB2b2lkIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNob3dUZXh0
VHJhY2tEaXNwbGF5KCk7CisgICAgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZv
aWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSGlkZUNvbnRyb2xzKCk7CiAKIHByaXZhdGU6CkBAIC0xMzQsOCArMTQ2LDEyIEBAIHBy
aXZhdGU6CiAgICAgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQqIG1f
ZnVsbFNjcmVlblZvbHVtZVNsaWRlcjsKICAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1l
TWF4QnV0dG9uRWxlbWVudCogbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uOwogICAgIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsKLSAgICBib29sIG1faXNNb3VzZU92ZXJDb250
cm9sczsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudCogbV90ZXh0RGlzcGxheUNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudCogbV90ZXh0VHJhY2tEaXNwbGF5OworI2VuZGlmCiAg
ICAgVGltZXI8TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ+IG1faGlkZUZ1bGxzY3JlZW5Db250cm9s
c1RpbWVyOworICAgIGJvb2wgbV9pc01vdXNlT3ZlckNvbnRyb2xzOwogfTsKIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTMgQEAKICNpZiBFTkFCTEUoVklERU8pCiAjaW5j
bHVkZSAiTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiSFRN
TE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlh
Q29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDksNiArNTIsMTAgQEAgTWVkaWFDb250cm9sUm9vdEVs
ZW1lbnRDaHJvbWl1bTo6TWVkaWFDbwogICAgICwgbV92b2x1bWVTbGlkZXIoMCkKICAgICAsIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyKDApCiAgICAgLCBtX3BhbmVsKDApCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgICwgbV90ZXh0RGlzcGxheUNvbnRhaW5lcigwKQorICAgICwgbV90ZXh0
VHJhY2tEaXNwbGF5KDApCisjZW5kaWYKICAgICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX2lz
TW91c2VPdmVyQ29udHJvbHMoZmFsc2UpCiB7CkBAIC0zMDksNyArMzE2LDc2IEBAIHZvaWQgTWVk
aWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bTo6c2gKICAgICBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lci0+c2hvdygpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFJvb3RF
bGVtZW50Q2hyb21pdW06OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06OmNyZWF0ZVRleHRU
cmFja0Rpc3BsYXkoKQoreworICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudD4gdGV4dERpc3BsYXlDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5l
ciA9IHRleHREaXNwbGF5Q29udGFpbmVyLmdldCgpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJv
bFRleHRUcmFja0Rpc3BsYXlFbGVtZW50PiB0ZXh0RGlzcGxheSA9IE1lZGlhQ29udHJvbFRleHRU
cmFja0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CisgICAgbV90ZXh0RGlzcGxh
eUNvbnRhaW5lci0+aGlkZSgpOworICAgIG1fdGV4dFRyYWNrRGlzcGxheSA9IHRleHREaXNwbGF5
LmdldCgpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXh0RGlzcGxheUNvbnRhaW5l
ci0+YXBwZW5kQ2hpbGQodGV4dERpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbnNlcnQgaXQgYmVmb3JlIHRoZSBmaXJz
dCBjb250cm9sbGVyIGVsZW1lbnQgc28gaXQgYWx3YXlzIGRpc3BsYXlzIGJlaGluZCB0aGUgY29u
dHJvbHMuCisgICAgaW5zZXJ0QmVmb3JlKHRleHREaXNwbGF5Q29udGFpbmVyLnJlbGVhc2UoKSwg
bV9wYW5lbCwgZWMsIHRydWUpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hy
b21pdW06OnNob3dUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1fdGV4dERpc3BsYXlD
b250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICBtX3RleHRE
aXNwbGF5Q29udGFpbmVyLT5zaG93KCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1l
bnRDaHJvbWl1bTo6aGlkZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmICghbV90ZXh0RGlz
cGxheUNvbnRhaW5lcikKKyAgICAgICAgY3JlYXRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIG1f
dGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290
RWxlbWVudENocm9taXVtOjp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1f
dGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsK
KworICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG1fdGV4dERp
c3BsYXlDb250YWluZXIpLT5jdXJyZW50bHlBY3RpdmVDdWVzKCk7CisgICAgaWYgKGFjdGl2ZUN1
ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RleHRUcmFja0Rpc3BsYXkt
PnJlbW92ZUNoaWxkcmVuKCk7CisgICAgYm9vbCBub3RoaW5nVG9EaXNwbGF5ID0gdHJ1ZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUN1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSBhY3RpdmVDdWVzW2ldLmRhdGEoKTsKKyAgICAgICAgQVNT
RVJUKGN1ZS0+aXNBY3RpdmUoKSk7CisgICAgICAgIGlmICghY3VlLT50cmFjaygpIHx8IGN1ZS0+
dHJhY2soKS0+bW9kZSgpICE9IFRleHRUcmFjazo6U0hPV0lORykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIFN0cmluZyBjdWVUZXh0ID0gY3VlLT5nZXRDdWVBc1NvdXJjZSgpOwor
ICAgICAgICBpZiAoIWN1ZVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoIW5vdGhp
bmdUb0Rpc3BsYXkpCisgICAgICAgICAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5hcHBlbmRD
aGlsZChkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6YnJUYWcsIGZhbHNlKSwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBtX3RleHRUcmFja0Rpc3BsYXktPmFw
cGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKGN1ZVRleHQpLCBBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKKyAgICAgICAgICAgIG5vdGhpbmdUb0Rpc3BsYXkgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICghbm90aGluZ1RvRGlzcGxheSkKKyAgICAgICAgbV90ZXh0
RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0RGlzcGxh
eUNvbnRhaW5lci0+aGlkZSgpOworfQorI2VuZGlmCisgICAgCitjb25zdCBBdG9taWNTdHJpbmcm
IE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW1DaHJvbWl1bTo6c2hhZG93UHNldWRvSWQo
KSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCIt
d2Via2l0LW1lZGlhLWNvbnRyb2xzIikpOwogICAgIHJldHVybiBpZDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxl
bWVudENocm9taXVtLmgJKHJldmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsMTEgQEAgY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBSZW5kZXJCb3g7CiBj
bGFzcyBSZW5kZXJNZWRpYTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tEaXNwbGF5RWxlbWVudDsKKyNlbmRpZgorCiBjbGFzcyBNZWRpYUNvbnRyb2xSb290RWxl
bWVudENocm9taXVtIDogcHVibGljIE1lZGlhQ29udHJvbHMgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0+IGNyZWF0ZShEb2N1
bWVudCopOwpAQCAtODcsNiArOTIsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlVGltZURp
c3BsYXkoKTsKICAgICB2b2lkIHVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKIAorI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICB2b2lkIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lk
IHNob3dUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgp
OworICAgIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOworI2VuZGlmCisKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkSGlkZUNvbnRyb2xzKCk7CiAKIHByaXZhdGU6CkBAIC0xMDgsNiArMTIw
LDEwIEBAIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCogbV92
b2x1bWVTbGlkZXI7CiAgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVu
dCogbV92b2x1bWVTbGlkZXJDb250YWluZXI7CiAgICAgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50
KiBtX3BhbmVsOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50KiBtX3RleHREaXNwbGF5Q29udGFpbmVyOworICAgIE1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50KiBtX3RleHRUcmFja0Rpc3BsYXk7CisjZW5k
aWYKIAogICAgIGJvb2wgbV9vcGFxdWU7CiAgICAgYm9vbCBtX2lzTW91c2VPdmVyQ29udHJvbHM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCShyZXZp
c2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDEyIEBAIGNsYXNzIE1lZGlhQ29udHJvbHMg
OiBwdWJsaWMgSFRNTERpdkVsZW0KIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIaWRlQ29udHJv
bHMoKSA9IDA7CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdmlydHVhbCB2b2lkIHNo
b3dUZXh0VHJhY2tEaXNwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBoaWRlVGV4dFRyYWNr
RGlzcGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgp
ID0gMDsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFDb250cm9scyhEb2N1bWVudCop
OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDMxOTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMi0xOCAgRXJpYyBDYXJsc29u
ICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5kZXIgdGV4dCB0cmFja3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyODg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtZWRpYS9t
ZWRpYS1jb250cm9scy5qczoKKyAgICAgICAgKG1lZGlhQ29udHJvbHNFbGVtZW50KTogRG9uJ3Qg
YWx3YXlzIGxvb2sgZm9yIGEgY29udHJvbGxlciBlbGVtZW50LgorICAgICAgICAobWVkaWFDb250
cm9sc0J1dHRvbkNvb3JkaW5hdGVzKToKKyAgICAgICAgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50
KTogRmluZCB0aGUgY3VlIGRpc3BsYXkgZWxlbWVudC4KKyAgICAgICAgKiBtZWRpYS90cmFjay90
cmFjay1jdWUtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEv
dHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy5odG1sOiBBZGRlZC4KKwogMjAxMS0xMi0xOCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0CkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9t
ZWRpYS1jb250cm9scy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1j
b250cm9scy5qcwkocmV2aXNpb24gMTAzMDYzKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEt
Y29udHJvbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzEsMTIgQEAKIAogZnVuY3Rpb24g
bWVkaWFDb250cm9sc0VsZW1lbnQoZmlyc3QsIGlkKQogewotICAgIHZhciBjb250cm9sSUQgPSAi
LXdlYmtpdC1tZWRpYS1jb250cm9scy0iICsgaWQ7CiAgICAgZm9yICh2YXIgZWxlbWVudCA9IGZp
cnN0OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZykgewogCiAgICAgICAg
IC8vIE5vdCBldmVyeSBlbGVtZW50IGluIHRoZSBtZWRpYSBjb250cm9scyBoYXMgYSBzaGFkb3cg
cHNldWRvIElELCBlZy4gdGhlCiAgICAgICAgIC8vIHRleHQgbm9kZXMgZm9yIHRoZSB0aW1lIHZh
bHVlcywgc28gZ3VhcmQgYWdhaW5zdCBleGNlcHRpb25zLgogICAgICAgICB0cnkgewotICAgICAg
ICAgICAgaWYgKGludGVybmFscy5zaGFkb3dQc2V1ZG9JZChlbGVtZW50KSA9PSBjb250cm9sSUQp
CisgICAgICAgICAgICBpZiAoaW50ZXJuYWxzLnNoYWRvd1BzZXVkb0lkKGVsZW1lbnQpID09IGlk
KQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICB9IGNhdGNoIChleGNl
cHRpb24pIHsgfQogCkBAIC0yMyw3ICsyMiw4IEBAIGZ1bmN0aW9uIG1lZGlhQ29udHJvbHNFbGVt
ZW50KGZpcnN0LCBpZCkKIAogZnVuY3Rpb24gbWVkaWFDb250cm9sc0J1dHRvbkNvb3JkaW5hdGVz
KGVsZW1lbnQsIGlkKQogewotICAgIHZhciBidXR0b24gPSBtZWRpYUNvbnRyb2xzRWxlbWVudChp
bnRlcm5hbHMuc2hhZG93Um9vdChlbGVtZW50KS5maXJzdENoaWxkLCBpZCk7CisgICAgdmFyIGNv
bnRyb2xJRCA9ICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLSIgKyBpZDsKKyAgICB2YXIgYnV0dG9u
ID0gbWVkaWFDb250cm9sc0VsZW1lbnQoaW50ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkuZmly
c3RDaGlsZCwgY29udHJvbElEKTsKICAgICBpZiAoIWJ1dHRvbikKICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0byBmaW5kIG1lZGlhIGNvbnRyb2wgZWxlbWVudCBJRCAnIiArIGlkICsgIiciOwogCkBA
IC0zMiwzICszMiwxMiBAQCBmdW5jdGlvbiBtZWRpYUNvbnRyb2xzQnV0dG9uQ29vcmRpbmF0ZXMo
CiAgICAgdmFyIHkgPSBidXR0b25Cb3VuZGluZ1JlY3QudG9wICsgYnV0dG9uQm91bmRpbmdSZWN0
LmhlaWdodCAvIDI7CiAgICAgcmV0dXJuIG5ldyBBcnJheSh4LCB5KTsKIH0KKworZnVuY3Rpb24g
dGV4dFRyYWNrRGlzcGxheUVsZW1lbnQocGFyZW50RWxlbWVudCkKK3sKKyAgICB2YXIgY29udHJv
bElEID0gIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1kaXNwbGF5IjsKKyAgICB2YXIgZGlzcGxh
eUVsZW1lbnQgPSBtZWRpYUNvbnRyb2xzRWxlbWVudChpbnRlcm5hbHMuc2hhZG93Um9vdChwYXJl
bnRFbGVtZW50KS5maXJzdENoaWxkLCBjb250cm9sSUQpOworICAgIGlmICghZGlzcGxheUVsZW1l
bnQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdG8gZmluZCBtZWRpYSBjb250cm9sIGVsZW1lbnQg
SUQgJyIgKyBjb250cm9sSUQgKyAiJyI7CisgICAgcmV0dXJuIGRpc3BsYXlFbGVtZW50OworfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNr
L3RyYWNrLWN1ZS1yZW5kZXJpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKK1Rlc3QgdGhhdCBUZXh0VHJh
Y2sncyBjdWVzIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkuCitFVkVOVChjYW5wbGF5dGhyb3VnaCkK
K0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMC41JykgT0sK
K0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291cmNlKCkg
PT0gJ0xvcmVtJykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbyku
aW5uZXJUZXh0ID09ICdMb3JlbScpIE9LCisKK1JVTih2aWRlby5jdXJyZW50VGltZSA9IDEuNSkK
K0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMS41JykgT0sK
K0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291cmNlKCkg
PT0gJ2lwc3VtJykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbyku
aW5uZXJUZXh0ID09ICdpcHN1bScpIE9LCisKK1JVTih2aWRlby5jdXJyZW50VGltZSA9IDIuNSkK
K0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMi41JykgT0sK
K0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291cmNlKCkg
PT0gJ2RvbG9yJykgT0sKK0VYUEVDVEVEICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbyku
aW5uZXJUZXh0ID09ICdkb2xvcicpIE9LCisKK1JVTih2aWRlby5jdXJyZW50VGltZSA9IDMuNSkK
K0VWRU5UKHNlZWtlZCkKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGltZSA9PSAnMy41JykgT0sK
K0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLmdldEN1ZUFzU291cmNlKCkg
PT0gJ3NpdCcpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pLmlu
bmVyVGV4dCA9PSAnc2l0JykgT0sKKworVGVzdCB0aGF0IHRoZSBjdWUgZGlzcGxheSBmb250IHNp
emUgaXMgcmVzaXplZCBhcyB0aGUgdmlkZW8gZWxlbWVudCByZXNpemVzLgorUlVOKHZpZGVvLndp
ZHRoID0gMzIwKQorUlVOKHZpZGVvLmhlaWdodCA9IDI0MCkKK0VYUEVDVEVEIChnZXRDb21wdXRl
ZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUgPT0gJzE2cHgn
KSBPSworCitSVU4odmlkZW8ud2lkdGggPSA2NDApCitSVU4odmlkZW8uaGVpZ2h0ID0gNDgwKQor
RVhQRUNURUQgKGdldENvbXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8p
KS5mb250U2l6ZSA9PSAnMTlweCcpIE9LCisKK1JVTih2aWRlby53aWR0aCA9IDEyODApCitSVU4o
dmlkZW8uaGVpZ2h0ID0gOTYwKQorRVhQRUNURUQgKGdldENvbXB1dGVkU3R5bGUodGV4dFRyYWNr
RGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSA9PSAnMzhweCcpIE9LCisKK1JVTih2aWRl
by53aWR0aCA9IDI1NjApCitSVU4odmlkZW8uaGVpZ2h0ID0gMTQ0MCkKK0VYUEVDVEVEIChnZXRD
b21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUgPT0g
JzU4cHgnKSBPSworRU5EIE9GIFRFU1QKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2sv
dHJhY2stY3VlLXJlbmRlcmluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlh
L3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAg
ICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNo
YXJzZXQ9dXRmLTgiIC8+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtZmlsZS5qcz48
L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4K
KyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+CisKKyAg
ICAgICAgPHNjcmlwdD4gICAgICAgICAgICAKKworICAgICAgICB2YXIgdGVzdFRyYWNrOworICAg
ICAgICB2YXIgc2Vla2VkQ291bnQgPSAwOworICAgICAgICB2YXIgaW5mbyA9IFsgIkxvcmVtIiwg
Imlwc3VtIiwgImRvbG9yIiwgInNpdCIgXTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0Rm9udFNp
emVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8YnI+VGVzdCB0aGF0
IHRoZSBjdWUgZGlzcGxheSBmb250IHNpemUgaXMgcmVzaXplZCBhcyB0aGUgdmlkZW8gZWxlbWVu
dCByZXNpemVzLiIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby53aWR0aCA9IDMyMCIpOworICAg
ICAgICAgICAgcnVuKCJ2aWRlby5oZWlnaHQgPSAyNDAiKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LmJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJnZXRDb21wdXRlZFN0
eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUiLCAiMTZweCIpOwor
CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby53
aWR0aCA9IDY0MCIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby5oZWlnaHQgPSA0ODAiKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgdGVzdEV4cGVj
dGVkKCJnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9u
dFNpemUiLCAiMTlweCIpOworCisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAg
ICAgICAgcnVuKCJ2aWRlby53aWR0aCA9IDEyODAiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8u
aGVpZ2h0ID0gOTYwIik7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKyAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgiZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5
RWxlbWVudCh2aWRlbykpLmZvbnRTaXplIiwgIjM4cHgiKTsKKworICAgICAgICAgICAgY29uc29s
ZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8ud2lkdGggPSAyNTYwIik7CisgICAg
ICAgICAgICBydW4oInZpZGVvLmhlaWdodCA9IDE0NDAiKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LmJvZHkub2Zmc2V0VG9wOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJnZXRDb21wdXRlZFN0
eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUiLCAiNThweCIpOwor
CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBz
ZWVrZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLmN1cnJl
bnRUaW1lIiwgc2Vla2VkQ291bnQgKyAuNSk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRl
c3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCIsIDEpOworICAgICAgICAgICAgdGVzdEV4
cGVjdGVkKCJ0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRDdWVBc1NvdXJjZSgpIiwg
aW5mb1tzZWVrZWRDb3VudF0pOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCh2aWRlbykuaW5uZXJUZXh0IiwgaW5mb1tzZWVrZWRDb3VudF0pOworCisg
ICAgICAgICAgICBpZiAoKytzZWVrZWRDb3VudCA9PSBpbmZvLmxlbmd0aCkKKyAgICAgICAgICAg
ICAgICB0ZXN0Rm9udFNpemVzKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgICAgIHJ1bigidmlkZW8uY3VycmVudFRp
bWUgPSAiICsgKHZpZGVvLmN1cnJlbnRUaW1lICsgMSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxvYWRlZCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiVGVzdCB0aGF0IFRleHRUcmFj
aydzIGN1ZXMgYXJlIHJlbmRlcmVkIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIGZpbmRNZWRp
YUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHRlc3RUcmFjayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3JBbGwoJ3RyYWNrJylbMF07CisgICAgICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFGaWxl
KCd2aWRlbycsICcuLi9jb250ZW50L3Rlc3QnKTsKKyAgICAgICAgICAgIHdhaXRGb3JFdmVudCgn
c2Vla2VkJywgc2Vla2VkKTsKKyAgICAgICAgICAgIHdhaXRGb3JFdmVudCgnY2FucGxheXRocm91
Z2gnLCBmdW5jdGlvbigpIHsgdmlkZW8uY3VycmVudFRpbWUgPSAuNTsgfSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxv
YWQ9ImxvYWRlZCgpIj4KKyAgICAgICAgPHZpZGVvIGNvbnRyb2xzID4KKyAgICAgICAgICAgIDx0
cmFjayBzcmM9ImNhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy52dHQiIGtpbmQ9ImNhcHRpb25zIiBk
ZWZhdWx0PgorICAgICAgICA8L3ZpZGVvPgorICAgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy52dHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2NhcHRpb25z
LnZ0dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdl
YnZ0dC9jYXB0aW9ucy52dHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKK++7v1dFQlZU
VAorCisxCiswMDowMDowMC4wMDAgLS0+IDAwOjAwOjAxLjAwMAorTG9yZW0KKworMgorMDA6MDA6
MDEuMDAwIC0tPiAwMDowMDowMi4wMDAKK2lwc3VtCisKKzMKKzAwOjAwOjAyLjAwMCAtLT4gMDA6
MDA6MDMuMDAwCitkb2xvcgorCis0CiswMDowMDowMy4wMDAgLS0+IDAwOjAwOjA0LjAwMAorc2l0
CisK
</data>
<flag name="commit-queue"
          id="119951"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119822</attachid>
            <date>2011-12-18 23:10:43 -0800</date>
            <delta_ts>2011-12-19 08:38:00 -0800</delta_ts>
            <desc>YAP</desc>
            <filename>patch_rendering_14.txt</filename>
            <type>text/plain</type>
            <size>39175</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzE5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDExLTEyLTE4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0IHRy
YWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKKworICAgICAgICAqIGNzcy9t
ZWRpYUNvbnRyb2xzLmNzczoKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJh
Y2stY29udGFpbmVyKToKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2st
ZGlzcGxheSk6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6IEluaXRpYWxp
emUgbV9oYXZlVmlzaWJsZVRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMpOiBUcmlnZ2VyIGFuIHVwZGF0ZSBvZiB0
aGUgdGV4dAorICAgICAgICAgICAgdHJhY2sgZGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKTogY2FsbCBjb25maWd1cmVUZXh0
VHJhY2tEaXNwbGF5KCkgc28gCisgICAgICAgICAgICB0aGUgdGV4dCB0cmFjayBkaXNwbGF5IGlz
IGhpZGRlbiBvciBzaG93biB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJblRoaXNUcmFjayk6IE1pbm9yIGNsZWFudXAu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYUNvbnRyb2xz
KTogY29uZmlndXJlTWVkaWFDb250cm9scygpIGFsd2F5cyBjYWxsZWQKKyAgICAgICAgICAgIHJl
c2V0IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250cm9scywgZG8gaXQgaGVyZSBpbnN0ZWFkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scyk6
IFNpbXBsaWZ5IGFuZCBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSk6IFNob3cgYW5kIGhpZGUgdGV4dCB0cmFjayBk
aXNwbGF5LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudGx5VmlzaWJsZUN1ZXMpOgorCisgICAgICAg
ICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmxheW91dCk6IE5ldy4gQ2FsbCB0aGUgZGlzcGxheSBlbGVtZW50IHNvIGl0
IGNhbgorICAgICAgICAgICAgdXBkYXRlIHRoZSBwb3NpdGlvbiBhbmQgZm9udCBzaXplLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyk6IEtlZXAgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQKKyAgICAgICAgICAgIHBvc2l0
aW9uZWQgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8gYm94LCBhbmQgc2l6ZSB0aGUgZm9u
dCBhY2NvcmRpbmcgdG8gdGhlIHZpZGVvIGhlaWdodC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6ZGlzcGxheVR5cGUpOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50KTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbGxlcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93
VGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Um9vdEVsZW1lbnQ6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Lmg6CisK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06Ok1l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNob3dUZXh0VHJhY2tE
aXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVu
dDo6aGlkZVRleHRUcmFja0Rpc3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoKKwogMjAxMS0xMi0xOCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvbWVk
aWFDb250cm9scy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29u
dHJvbHMuY3NzCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFD
b250cm9scy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwzICsxODYsMjggQEAgYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbgogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiB7CiAgICAgZGlzcGxheTogbm9u
ZTsKIH0KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBvdmVyZmxvdzogaGlk
ZGVuOworCisgICAgZm9udC1zaXplOiAyMnB4OworICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlm
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAKKyAgICBsZXR0ZXItc3BhY2luZzogbm9y
bWFsOworICAgIHdvcmQtc3BhY2luZzogbm9ybWFsOworICAgIHRleHQtdHJhbnNmb3JtOiBub25l
OworICAgIHRleHQtaW5kZW50OiAwOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBw
b2ludGVyLWV2ZW50czogbm9uZTsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworfQor
Cit2aWRlbzo6LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkgeworICAgIGRpc3BsYXk6
IGlubGluZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7CisgICAg
Y29sb3I6IHllbGxvdzsKKyAgICBwYWRkaW5nOiAwcHggMnB4OworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzEsNiArMjMxLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAog
ICAgICwgbV9wYXJzaW5nSW5Qcm9ncmVzcyhjcmVhdGVkQnlQYXJzZXIpCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgICwgbV90cmFja3NBcmVSZWFkeSh0cnVlKQorICAgICwgbV9oYXZlVmlz
aWJsZVRleHRUcmFjayhmYWxzZSkKICAgICAsIG1fdGV4dFRyYWNrcygwKQogI2VuZGlmCiAjaWYg
RU5BQkxFKFdFQl9BVURJTykKQEAgLTk0MCwyMyArOTQxLDMxIEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bG9hZFJlc291cmNlKGNvbnMKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoZmxvYXQgbW92aWVUaW1l
KQogewotICAgIFZlY3RvcjxDdWVJbnRlcnZhbFRyZWU6OkludGVydmFsVHlwZT4gcHJldmlvdXNs
eVZpc2libGVDdWVzID0gbV9jdXJyZW50bHlWaXNpYmxlQ3VlczsKKyAgICBDdWVMaXN0IHByZXZp
b3VzbHlBY3RpdmVDdWVzID0gbV9jdXJyZW50bHlBY3RpdmVDdWVzOworICAgIGJvb2wgYWN0aXZl
U2V0Q2hhbmdlZCA9IGZhbHNlOwogCi0gICAgbV9jdXJyZW50bHlWaXNpYmxlQ3VlcyA9IG1fY3Vl
VHJlZS5hbGxPdmVybGFwcyhtX2N1ZVRyZWUuY3JlYXRlSW50ZXJ2YWwobW92aWVUaW1lLCBtb3Zp
ZVRpbWUpKTsKKyAgICBtX2N1cnJlbnRseUFjdGl2ZUN1ZXMgPSBtX2N1ZVRyZWUuYWxsT3Zlcmxh
cHMobV9jdWVUcmVlLmNyZWF0ZUludGVydmFsKG1vdmllVGltZSwgbW92aWVUaW1lKSk7CiAgICAg
CiAgICAgLy8gRklYTUUoNzIxNzEpOiBFdmVudHMgbmVlZCB0byBiZSBzb3J0ZWQgYW5kIGZpbHRl
cmVkIGJlZm9yZSBkaXNwYXRjaGluZy4KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJl
dmlvdXNseVZpc2libGVDdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50
bHlWaXNpYmxlQ3Vlcy5jb250YWlucyhwcmV2aW91c2x5VmlzaWJsZUN1ZXNbaV0pKQotICAgICAg
ICAgICAgcHJldmlvdXNseVZpc2libGVDdWVzW2ldLmRhdGEoKS0+c2V0SXNBY3RpdmUoZmFsc2Up
OwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudGx5VmlzaWJsZUN1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmV2aW91c2x5VmlzaWJsZUN1ZXMuY29u
dGFpbnMobV9jdXJyZW50bHlWaXNpYmxlQ3Vlc1tpXSkpCi0gICAgICAgICAgICBtX2N1cnJlbnRs
eVZpc2libGVDdWVzW2ldLmRhdGEoKS0+c2V0SXNBY3RpdmUodHJ1ZSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcmV2aW91c2x5QWN0aXZlQ3Vlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIW1fY3VycmVudGx5QWN0aXZlQ3Vlcy5jb250YWlucyhwcmV2aW91c2x5QWN0aXZlQ3Vl
c1tpXSkpIHsKKyAgICAgICAgICAgIHByZXZpb3VzbHlBY3RpdmVDdWVzW2ldLmRhdGEoKS0+c2V0
SXNBY3RpdmUoZmFsc2UpOworICAgICAgICAgICAgYWN0aXZlU2V0Q2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRseUFj
dGl2ZUN1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFwcmV2aW91c2x5QWN0aXZlQ3Vl
cy5jb250YWlucyhtX2N1cnJlbnRseUFjdGl2ZUN1ZXNbaV0pKSB7CisgICAgICAgICAgICBtX2N1
cnJlbnRseUFjdGl2ZUN1ZXNbaV0uZGF0YSgpLT5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICAgICAg
ICAgIGFjdGl2ZVNldENoYW5nZWQgPSB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IC8vIEZJWE1FKDcyMTczKTogUGF1c2UgdGhlIG1lZGlhIGVsZW1lbnQgZm9yIGN1ZXMgZ29pbmcg
cGFzdCB0aGVpciBlbmRUaW1lCiAgICAgLy8gZHVyaW5nIGEgbW9ub3RvbmljIHRpbWUgaW5jcmVh
c2UuCisKKyAgICBpZiAoYWN0aXZlU2V0Q2hhbmdlZCAmJiBoYXNNZWRpYUNvbnRyb2xzKCkpCisg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogfQogCiBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0CkBAIC05ODIs
MjkgKzk5MSwyOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhCiAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrKiB0
cmFjaykKIHsKLSAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0IHRy
YWNrcwotICAgIC8vIC4uLiB3aGVuIGEgdGV4dCB0cmFjayBjb3JyZXNwb25kaW5nIHRvIGEgdHJh
Y2sgZWxlbWVudCBpcyBjcmVhdGVkIHdpdGggdGV4dCB0cmFjawotICAgIC8vIG1vZGUgc2V0IHRv
IGRpc2FibGVkIGFuZCBzdWJzZXF1ZW50bHkgY2hhbmdlcyBpdHMgdGV4dCB0cmFjayBtb2RlIHRv
IGhpZGRlbiwgc2hvd2luZywKLSAgICAvLyBvciBzaG93aW5nIGJ5IGRlZmF1bHQgZm9yIHRoZSBm
aXJzdCB0aW1lLCB0aGUgdXNlciBhZ2VudCBtdXN0IGltbWVkaWF0ZWx5IGFuZCBzeW5jaHJvbm91
c2x5Ci0gICAgLy8gcnVuIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIC4uLgotICAgIAotICAgIGlm
ICh0cmFjay0+dHJhY2tUeXBlKCkgIT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQ7Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNp
YmxpbmcoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRyYWNrRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxUcmFja0VsZW1lbnQqPihub2RlKTsKLSAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+dHJhY2so
KSAhPSB0cmFjaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIE1hcmsgdGhp
cyB0cmFjayBhcyAiY29uZmlndXJlZCIgc28gY29uZmlndXJlVGV4dFRyYWNrIHdvbid0IGNoYW5n
ZSB0aGUgbW9kZSBhZ2Fpbi4KLSAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRIYXNCZWVuQ29uZmln
dXJlZCh0cnVlKTsKLSAgICAgICAgaWYgKHRyYWNrLT5tb2RlKCkgIT0gVGV4dFRyYWNrOjpESVNB
QkxFRCAmJiB0cmFja0VsZW1lbnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MVHJhY2tFbGVtZW50OjpO
T05FKQotICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zY2hlZHVsZUxvYWQoKTsKLSAgICAgICAg
YnJlYWs7CisgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OlRyYWNrRWxl
bWVudCkgeworICAgICAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0
IHRyYWNrcworICAgICAgICAvLyAuLi4gd2hlbiBhIHRleHQgdHJhY2sgY29ycmVzcG9uZGluZyB0
byBhIHRyYWNrIGVsZW1lbnQgaXMgY3JlYXRlZCB3aXRoIHRleHQgdHJhY2sKKyAgICAgICAgLy8g
bW9kZSBzZXQgdG8gZGlzYWJsZWQgYW5kIHN1YnNlcXVlbnRseSBjaGFuZ2VzIGl0cyB0ZXh0IHRy
YWNrIG1vZGUgdG8gaGlkZGVuLCBzaG93aW5nLAorICAgICAgICAvLyBvciBzaG93aW5nIGJ5IGRl
ZmF1bHQgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGUgdXNlciBhZ2VudCBtdXN0IGltbWVkaWF0ZWx5
IGFuZCBzeW5jaHJvbm91c2x5CisgICAgICAgIC8vIHJ1biB0aGUgZm9sbG93aW5nIGFsZ29yaXRo
bSAuLi4KKworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1Rh
Z05hbWUodHJhY2tUYWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
SFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxl
bWVudCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+dHJhY2soKSAhPSB0
cmFjaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gTWFyayB0aGlzIHRyYWNrIGFzICJjb25maWd1cmVkIiBzbyBjb25maWd1cmVUZXh0VHJh
Y2sgd29uJ3QgY2hhbmdlIHRoZSBtb2RlIGFnYWluLgorICAgICAgICAgICAgdHJhY2tFbGVtZW50
LT5zZXRIYXNCZWVuQ29uZmlndXJlZCh0cnVlKTsKKyAgICAgICAgICAgIGlmICh0cmFjay0+bW9k
ZSgpICE9IFRleHRUcmFjazo6RElTQUJMRUQgJiYgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRlKCkg
PT0gSFRNTFRyYWNrRWxlbWVudDo6Tk9ORSkKKyAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQt
PnNjaGVkdWxlTG9hZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisK
KyAgICBjb25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6dGV4dFRyYWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKikKQEAgLTIyODksMTAgKzIyOTgs
MTAgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp1c2VySXNJbnRlcmVzdGVkSQogCiAgICAgLy8g
SWYgLi4uIHRoZSB1c2VyIGhhcyBpbmRpY2F0ZWQgYW4gaW50ZXJlc3QgaW4gaGF2aW5nIGEgdHJh
Y2sgd2l0aCB0aGlzIHRleHQgdHJhY2sga2luZCwgdGV4dCB0cmFjayBsYW5ndWFnZSwgLi4uIAog
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgaWYg
KCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGtpbmQgPT0gVGV4
dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCkgfHwga2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25z
S2V5d29yZCgpKSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmIChraW5kID09IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgp
ICYmICFzZXR0aW5ncy0+c2hvdWxkRGlzcGxheVN1YnRpdGxlcygpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoa2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29y
ZCgpICYmICFzZXR0aW5ncy0+c2hvdWxkRGlzcGxheUNhcHRpb25zKCkpCkBAIC0yMzAxLDcgKzIz
MTAsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJCiAgICAgfQog
CiAgICAgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpkZXNjcmlwdGlvbnNLZXl3b3JkKCkpIHsKLSAg
ICAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3Jp
cHRpb25zKCkpCisgICAgICAgIGlmICghc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3Jp
cHRpb25zKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB1c2Vy
SXNJbnRlcmVzdGVkSW5UaGlzTGFuZ3VhZ2UodHJhY2tFbGVtZW50LT5zcmNsYW5nKCkpOwogICAg
IH0KQEAgLTM0NTIsNiArMzQ2MSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVk
aWFDb250cm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29udHJvbHMtPnNldE1lZGlh
Q29udHJvbGxlcihtX21lZGlhQ29udHJvbGxlciA/IG1fbWVkaWFDb250cm9sbGVyLmdldCgpIDog
c3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sbGVySW50ZXJmYWNlKj4odGhpcykpOworICAgIGNvbnRy
b2xzLT5yZXNldCgpOwogCiAgICAgZW5zdXJlU2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChjb250
cm9scywgZWMpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzQ2NiwxMSArMzQ3Niw5IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb24KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghaGFzTWVkaWFDb250cm9scygpKSB7Ci0gICAgICAgIGlmICghY3JlYXRl
TWVkaWFDb250cm9scygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtZWRpYUNvbnRy
b2xzKCktPnJlc2V0KCk7Ci0gICAgfQorICAgIGlmICghaGFzTWVkaWFDb250cm9scygpICYmICFj
cmVhdGVNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1lZGlhQ29udHJv
bHMoKS0+c2hvdygpOwogI2Vsc2UKICAgICBpZiAobV9wbGF5ZXIpCkBAIC0zNDc4LDYgKzM0ODYs
MzUgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbgogI2VuZGlmCiB9
CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZp
Z3VyZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIEFTU0VSVChtX3RleHRUcmFja3MpOworCisg
ICAgYm9vbCBoYXZlVmlzaWJsZVRleHRUcmFjayA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3RleHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
dGV4dFRyYWNrcy0+aXRlbShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6U0hPV0lORykgeworICAg
ICAgICAgICAgaGF2ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9oYXZlVmlzaWJsZVRleHRUcmFjayA9PSBo
YXZlVmlzaWJsZVRleHRUcmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZVZpc2libGVU
ZXh0VHJhY2sgPSBoYXZlVmlzaWJsZVRleHRUcmFjazsKKworICAgIGlmICghbV9oYXZlVmlzaWJs
ZVRleHRUcmFjaykgeworICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICAg
ICAgbWVkaWFDb250cm9scygpLT5oaWRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlh
Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvd1Rl
eHRUcmFja0Rpc3BsYXkoKTsKK30KKyNlbmRpZgorCiB2b2lkKiBIVE1MTWVkaWFFbGVtZW50Ojpw
cmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50ICYm
IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVu
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAx
MDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNiArNjYsMTEgQEAgY2xhc3MgV2lkZ2V0OwogY2xhc3MgRGlzcGxheVNs
ZWVwRGlzYWJsZXI7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3R5cGVkZWYg
UE9ESW50ZXJ2YWxUcmVlPGRvdWJsZSwgVGV4dFRyYWNrQ3VlKj4gQ3VlSW50ZXJ2YWxUcmVlOwor
dHlwZWRlZiBWZWN0b3I8Q3VlSW50ZXJ2YWxUcmVlOjpJbnRlcnZhbFR5cGU+IEN1ZUxpc3Q7Cisj
ZW5kaWYKKwogLy8gRklYTUU6IFRoZSBpbmhlcml0YW5jZSBmcm9tIE1lZGlhUGxheWVyQ2xpZW50
IGhlcmUgc2hvdWxkIGJlIHByaXZhdGUgaW5oZXJpdGFuY2UuCiAvLyBCdXQgaXQgY2FuJ3QgYmUg
dW50aWwgdGhlIENocm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCBjbGFzcyBpcyBmaXhl
ZCBzbyBpdAogLy8gbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3RpbmcgYSBNZWRpYVBsYXll
ckNsaWVudCB0byBhbiBIVE1MTWVkaWFFbGVtZW50LgpAQCAtMTk2LDYgKzIwMSw3IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPFRleHRUcmFjaz4gYWRkVHJhY2soY29uc3QgU3RyaW5nJiBraW5k
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkVHJhY2soa2luZCwgZW1wdHlTdHJpbmco
KSwgZW1wdHlTdHJpbmcoKSwgZWMpOyB9CiAKICAgICBUZXh0VHJhY2tMaXN0KiB0ZXh0VHJhY2tz
KCk7CisgICAgQ3VlTGlzdCBjdXJyZW50bHlBY3RpdmVDdWVzKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50bHlBY3RpdmVDdWVzOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tXYXNBZGRlZChI
VE1MVHJhY2tFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrV2lsbEJlUmVtb3ZlZChI
VE1MVHJhY2tFbGVtZW50Kik7CkBAIC0yMDMsNiArMjA5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y29uZmlndXJlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqKTsKICAgICB2b2lkIGNvbmZpZ3Vy
ZVRleHRUcmFja3MoKTsKICAgICBib29sIHRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0OworICAg
IHZvaWQgY29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSgpOwogCiAgICAgLy8gVGV4dFRyYWNrQ2xp
ZW50CiAgICAgdmlydHVhbCB2b2lkIHRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFj
ayopOwpAQCAtNTQ5LDEyICs1NTYsMTIgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKICAgICBib29sIG1fdHJhY2tzQXJlUmVhZHkgOiAxOworICAgIGJvb2wgbV9oYXZlVmlz
aWJsZVRleHRUcmFjayA6IDE7CisKICAgICBSZWZQdHI8VGV4dFRyYWNrTGlzdD4gbV90ZXh0VHJh
Y2tzOwogICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1fdGV4dFRyYWNrc1doZW5SZXNv
dXJjZVNlbGVjdGlvbkJlZ2FuOwotICAgIAotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlIDxk
b3VibGUsIFRleHRUcmFja0N1ZSo+IEN1ZUludGVydmFsVHJlZTsKICAgICBDdWVJbnRlcnZhbFRy
ZWUgbV9jdWVUcmVlOwotICAgIFZlY3RvcjxDdWVJbnRlcnZhbFRyZWU6OkludGVydmFsVHlwZT4g
bV9jdXJyZW50bHlWaXNpYmxlQ3VlczsKKyAgICBDdWVMaXN0IG1fY3VycmVudGx5QWN0aXZlQ3Vl
czsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9u
IDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
ICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAg
LTExMTUsNiArMTExNiwxMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xDdXJy
ZW50VAogICAgIHJldHVybiBpZDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCitjbGFzcyBSZW5kZXJUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50IDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50KE5vZGUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdmly
dHVhbCB2b2lkIGxheW91dCgpOworfTsKKworUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudChOb2RlKiBub2RlKQorICAgIDogUmVu
ZGVyQmxvY2sobm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50OjpsYXlvdXQoKQoreworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKyAgICBpZiAoc3R5
bGUoKS0+ZGlzcGxheSgpID09IE5PTkUpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
ZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2RlKCkpID09IE1lZGlhVGV4dFRyYWNrRGlzcGxheUNv
bnRhaW5lcik7CisKKyAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIo
dmlldygpKTsKKyAgICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJF
bGVtZW50Kj4obm9kZSgpKS0+dXBkYXRlU2l6ZXMoKTsKK30KKworaW5saW5lIE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5l
ckVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChk
b2N1bWVudCkKKyAgICAsIG1fZm9udFNpemUoMCkKKyAgICAsIG1fYm90dG9tKDApCit7Cit9CisK
K1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCkKK3sKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4g
ZWxlbWVudCA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50KGRvY3VtZW50KSk7CisgICAgZWxlbWVudC0+aGlkZSgpOworICAgIHJldHVybiBlbGVtZW50
LnJlbGVhc2UoKTsKK30KKworUmVuZGVyT2JqZWN0KiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKikKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudCh0aGlzKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Cit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtdGV4dC10
cmFjay1jb250YWluZXIiKSk7CisgICAgcmV0dXJuIGlkOworfQorCitzdGF0aWMgY29uc3QgZmxv
YXQgbWltaW11bUZvbnRTaXplID0gMTY7CitzdGF0aWMgY29uc3QgZmxvYXQgdmlkZW9IZWlnaHRG
b250U2l6ZURpdmlzb3IgPSAyNTsKK3N0YXRpYyBjb25zdCBmbG9hdCB0cmFja0JvdHRvbU11bHRp
cGxpZXIgPSAwLjk7CisgICAgCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OnVwZGF0ZVNpemVzKCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudCh0aGlzKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCB8
fCAhbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpIHx8ICFtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkt
PmlzVmlkZW8oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEludFJlY3QgdmlkZW9Cb3gg
PSB0b1JlbmRlclZpZGVvKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSktPnZpZGVvQm94KCk7Cisg
ICAgaWYgKG1fdmlkZW9EaXNwbGF5U2l6ZSA9PSB2aWRlb0JveCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fdmlkZW9EaXNwbGF5U2l6ZSA9IHZpZGVvQm94OworCisgICAgZmxvYXQgZm9udFNpemUg
PSBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLmhlaWdodCgpIC8gdmlkZW9IZWlnaHRGb250U2l6
ZURpdmlzb3I7CisgICAgaWYgKGZvbnRTaXplIDwgbWltaW11bUZvbnRTaXplKQorICAgICAgICBm
b250U2l6ZSA9IG1pbWltdW1Gb250U2l6ZTsKKyAgICBpZiAoZm9udFNpemUgIT0gbV9mb250U2l6
ZSkgeworICAgICAgICBtX2ZvbnRTaXplID0gZm9udFNpemU7CisgICAgICAgIGVuc3VyZUlubGlu
ZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51
bWJlcihmb250U2l6ZSkgKyAicHgiKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGJvdHRvbSA9
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KG1fdmlkZW9EaXNwbGF5U2l6ZS55KCkgKyBtX3ZpZGVv
RGlzcGxheVNpemUuaGVpZ2h0KCkgLSAobV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpICogdHJh
Y2tCb3R0b21NdWx0aXBsaWVyKSk7CisgICAgaWYgKGJvdHRvbSAhPSBtX2JvdHRvbSkgeworICAg
ICAgICBtX2JvdHRvbSA9IGJvdHRvbTsKKyAgICAgICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihib3R0b20pICsg
InB4Iik7CisgICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01l
ZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tE
aXNwbGF5RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xFbGVt
ZW50KGRvY3VtZW50KQoreworfQorCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Rp
c3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29u
dHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50KGRvY3VtZW50KSk7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ6OnNoYWRvd1BzZXVk
b0lkKCkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQs
ICgiLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkiKSk7CisgICAgcmV0dXJuIGlkOwor
fQorCisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHJldmlz
aW9uIDEwMzA2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgZW51bSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSB7CiAgICAgTWVkaWFWb2x1bWVTbGlkZXIsCiAgICAgTWVkaWFWb2x1bWVT
bGlkZXJUaHVtYiwKICAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCisgICAgTWVkaWFU
ZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyLAorICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKIH07
CiAKIEhUTUxNZWRpYUVsZW1lbnQqIHRvUGFyZW50TWVkaWFFbGVtZW50KE5vZGUqKTsKQEAgLTQ4
NCw2ICs0ODYsNDIgQEAgcHJpdmF0ZToKICAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CitwdWJsaWM6
CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgCisgICAgdm9pZCB1cGRhdGVTaXpl
cygpOworCitwcml2YXRlOgorICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
bnQoRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhVGV4dFRyYWNrRGlz
cGxheUNvbnRhaW5lcjsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0OworCisgICAgSW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7CisgICAg
ZmxvYXQgbV9mb250U2l6ZTsKKyAgICBMYXlvdXRVbml0IG1fYm90dG9tOworfTsKKworLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNr
RGlzcGxheUVsZW1lbnQoRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVRleHRUcmFja0Rpc3Bs
YXk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBj
b25zdDsKK307CisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICsz
MSwxNiBAQAogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCkBAIC02NSw4ICs3MSwxMiBAQCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6
TWVkaWFDb250cm9sUm9vCiAgICAgLCBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXIoMCkKICAgICAs
IG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbigwKQogICAgICwgbV9wYW5lbCgwKQotICAgICwg
bV9pc01vdXNlT3ZlckNvbnRyb2xzKGZhbHNlKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICAsIG1fdGV4dERpc3BsYXlDb250YWluZXIoMCkKKyAgICAsIG1fdGV4dFRyYWNrRGlzcGxheSgw
KQorI2VuZGlmCiAgICAgLCBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcih0aGlzLCAmTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQ6OmhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lckZpcmVkKQor
ICAgICwgbV9pc01vdXNlT3ZlckNvbnRyb2xzKGZhbHNlKQogewogfQogCkBAIC0yNjQsNiArMjc0
LDEyIEBAIHZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ28KICAgICAgICAg
bV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxl
cik7CiAgICAgaWYgKG1fcGFuZWwpCiAgICAgICAgIG1fcGFuZWwtPnNldE1lZGlhQ29udHJvbGxl
cihjb250cm9sbGVyKTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgaWYgKG1fdGV4dERp
c3BsYXlDb250YWluZXIpCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNldE1lZGlh
Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICBpZiAobV90ZXh0VHJhY2tEaXNwbGF5KQorICAg
ICAgICBtX3RleHRUcmFja0Rpc3BsYXktPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsK
KyNlbmRpZgogICAgIHJlc2V0KCk7CiB9CiAKQEAgLTU3Niw2ICs1OTIsNzUgQEAgdm9pZCBNZWRp
YUNvbnRyb2xSb290RWxlbWVudDo6c3RvcEhpZGVGdQogICAgIG1faGlkZUZ1bGxzY3JlZW5Db250
cm9sc1RpbWVyLnN0b3AoKTsKIH0KIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3ZvaWQgTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlm
IChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gdGV4dERpc3BsYXlDb250YWlu
ZXIgPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lciA9IHRleHREaXNwbGF5Q29udGFpbmVy
LmdldCgpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50
PiB0ZXh0RGlzcGxheSA9IE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQoKSk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworICAg
IG1fdGV4dFRyYWNrRGlzcGxheSA9IHRleHREaXNwbGF5LmdldCgpOworCisgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKyAgICB0ZXh0RGlzcGxheUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGV4dERpc3Bs
YXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBJbnNlcnQgaXQgYmVmb3JlIHRoZSBmaXJzdCBjb250cm9sbGVyIGVsZW1lbnQgc28g
aXQgYWx3YXlzIGRpc3BsYXlzIGJlaGluZCB0aGUgY29udHJvbHMuCisgICAgaW5zZXJ0QmVmb3Jl
KHRleHREaXNwbGF5Q29udGFpbmVyLnJlbGVhc2UoKSwgbV9wYW5lbCwgZWMsIHRydWUpOworfQor
Cit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93VGV4dFRyYWNrRGlzcGxheSgpCit7
CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJh
Y2tEaXNwbGF5KCk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOworfQorCit2
b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpoaWRlVGV4dFRyYWNrRGlzcGxheSgpCit7Cisg
ICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tE
aXNwbGF5KCk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworfQorCit2b2lk
IE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAg
ICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rp
c3BsYXkoKTsKKworICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHRvUGFyZW50TWVkaWFFbGVtZW50
KG1fdGV4dERpc3BsYXlDb250YWluZXIpLT5jdXJyZW50bHlBY3RpdmVDdWVzKCk7CisgICAgaWYg
KGFjdGl2ZUN1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RleHRUcmFj
a0Rpc3BsYXktPnJlbW92ZUNoaWxkcmVuKCk7CisgICAgYm9vbCBub3RoaW5nVG9EaXNwbGF5ID0g
dHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUN1ZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSBhY3RpdmVDdWVzW2ldLmRhdGEoKTsKKyAg
ICAgICAgQVNTRVJUKGN1ZS0+aXNBY3RpdmUoKSk7CisgICAgICAgIGlmICghY3VlLT50cmFjaygp
IHx8IGN1ZS0+dHJhY2soKS0+bW9kZSgpICE9IFRleHRUcmFjazo6U0hPV0lORykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0cmluZyBjdWVUZXh0ID0gY3VlLT5nZXRDdWVBc1Nv
dXJjZSgpOworICAgICAgICBpZiAoIWN1ZVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBp
ZiAoIW5vdGhpbmdUb0Rpc3BsYXkpCisgICAgICAgICAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5
LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6YnJUYWcs
IGZhbHNlKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBtX3RleHRUcmFja0Rp
c3BsYXktPmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKGN1ZVRleHQpLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIG5vdGhpbmdUb0Rpc3BsYXkgPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbm90aGluZ1RvRGlzcGxheSkKKyAgICAg
ICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAgbV90
ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworfQorI2VuZGlmCisKIGNvbnN0IEF0b21pY1N0
cmluZyYgTWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRp
YS1jb250cm9scyIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbFJvb3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuaAkocmV2aXNpb24gMTAzMDYzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNiArNjYsMTEgQEAgY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBSZW5kZXJC
b3g7CiBjbGFzcyBSZW5kZXJNZWRpYTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNz
IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDsKKyNlbmRpZgorCiBjbGFzcyBNZWRpYUNvbnRyb2xS
b290RWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xSb290RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CkBA
IC05OCw2ICsxMDMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXkoKTsK
ICAgICB2b2lkIHVwZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICB2b2lkIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNob3dUZXh0
VHJhY2tEaXNwbGF5KCk7CisgICAgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZv
aWQgdXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSGlkZUNvbnRyb2xzKCk7CiAKIHByaXZhdGU6CkBAIC0xMzQsOCArMTQ2LDEyIEBAIHBy
aXZhdGU6CiAgICAgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQqIG1f
ZnVsbFNjcmVlblZvbHVtZVNsaWRlcjsKICAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1l
TWF4QnV0dG9uRWxlbWVudCogbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uOwogICAgIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsKLSAgICBib29sIG1faXNNb3VzZU92ZXJDb250
cm9sczsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNr
Q29udGFpbmVyRWxlbWVudCogbV90ZXh0RGlzcGxheUNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRy
b2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudCogbV90ZXh0VHJhY2tEaXNwbGF5OworI2VuZGlmCiAg
ICAgVGltZXI8TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ+IG1faGlkZUZ1bGxzY3JlZW5Db250cm9s
c1RpbWVyOworICAgIGJvb2wgbV9pc01vdXNlT3ZlckNvbnRyb2xzOwogfTsKIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMzA2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTMgQEAKICNpZiBFTkFCTEUoVklERU8pCiAjaW5j
bHVkZSAiTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiSFRN
TE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlh
Q29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDksNiArNTIsMTAgQEAgTWVkaWFDb250cm9sUm9vdEVs
ZW1lbnRDaHJvbWl1bTo6TWVkaWFDbwogICAgICwgbV92b2x1bWVTbGlkZXIoMCkKICAgICAsIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyKDApCiAgICAgLCBtX3BhbmVsKDApCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgICwgbV90ZXh0RGlzcGxheUNvbnRhaW5lcigwKQorICAgICwgbV90ZXh0
VHJhY2tEaXNwbGF5KDApCisjZW5kaWYKICAgICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBtX2lz
TW91c2VPdmVyQ29udHJvbHMoZmFsc2UpCiB7CkBAIC0zMDksNiArMzE2LDc1IEBAIHZvaWQgTWVk
aWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bTo6c2gKICAgICBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lci0+c2hvdygpOwogfQogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQordm9pZCBNZWRpYUNv
bnRyb2xSb290RWxlbWVudENocm9taXVtOjpjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAg
ICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ+IHRleHREaXNwbGF5Q29u
dGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KCkpOworICAgIG1fdGV4dERpc3BsYXlDb250YWluZXIgPSB0ZXh0RGlzcGxheUNvbnRh
aW5lci5nZXQoKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxl
bWVudD4gdGV4dERpc3BsYXkgPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsK
KyAgICBtX3RleHRUcmFja0Rpc3BsYXkgPSB0ZXh0RGlzcGxheS5nZXQoKTsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CisgICAgdGV4dERpc3BsYXlDb250YWluZXItPmFwcGVuZENoaWxkKHRleHRE
aXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gSW5zZXJ0IGl0IGJlZm9yZSB0aGUgZmlyc3QgY29udHJvbGxlciBlbGVtZW50
IHNvIGl0IGFsd2F5cyBkaXNwbGF5cyBiZWhpbmQgdGhlIGNvbnRyb2xzLgorICAgIGluc2VydEJl
Zm9yZSh0ZXh0RGlzcGxheUNvbnRhaW5lci5yZWxlYXNlKCksIG1fcGFuZWwsIGVjLCB0cnVlKTsK
K30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtOjpzaG93VGV4dFRyYWNr
RGlzcGxheSgpCit7CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBj
cmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hv
dygpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06OmhpZGVUZXh0
VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAg
ICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFpbmVy
LT5oaWRlKCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bTo6dXBk
YXRlVGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVy
KQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisKKyAgICBDdWVMaXN0IGFjdGl2
ZUN1ZXMgPSB0b1BhcmVudE1lZGlhRWxlbWVudChtX3RleHREaXNwbGF5Q29udGFpbmVyKS0+Y3Vy
cmVudGx5QWN0aXZlQ3VlcygpOworICAgIGlmIChhY3RpdmVDdWVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5yZW1vdmVDaGlsZHJlbigpOwor
ICAgIGJvb2wgbm90aGluZ1RvRGlzcGxheSA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhY3RpdmVDdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3Vl
ID0gYWN0aXZlQ3Vlc1tpXS5kYXRhKCk7CisgICAgICAgIEFTU0VSVChjdWUtPmlzQWN0aXZlKCkp
OworICAgICAgICBpZiAoIWN1ZS0+dHJhY2soKSB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSAhPSBU
ZXh0VHJhY2s6OlNIT1dJTkcpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTdHJp
bmcgY3VlVGV4dCA9IGN1ZS0+Z2V0Q3VlQXNTb3VyY2UoKTsKKyAgICAgICAgaWYgKCFjdWVUZXh0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFub3RoaW5nVG9EaXNwbGF5KQorICAgICAg
ICAgICAgICAgIG1fdGV4dFRyYWNrRGlzcGxheS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3Jl
YXRlRWxlbWVudChIVE1MTmFtZXM6OmJyVGFnLCBmYWxzZSksIEFTU0VSVF9OT19FWENFUFRJT04p
OworICAgICAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5hcHBlbmRDaGlsZChkb2N1bWVudCgp
LT5jcmVhdGVUZXh0Tm9kZShjdWVUZXh0KSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAg
ICAgICBub3RoaW5nVG9EaXNwbGF5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIW5vdGhpbmdUb0Rpc3BsYXkpCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNo
b3coKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsK
K30KKyNlbmRpZgorICAgIAogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xSb290RWxl
bWVudENocm9taXVtOjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMiKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENo
cm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDMwNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIGNsYXNzIE1lZGlhUGxheWVyOwogY2xhc3Mg
UmVuZGVyQm94OwogY2xhc3MgUmVuZGVyTWVkaWE7CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OworY2xhc3MgTWVk
aWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ7CisjZW5kaWYKKwogY2xhc3MgTWVkaWFD
b250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bSA6IHB1YmxpYyBNZWRpYUNvbnRyb2xzIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVt
PiBjcmVhdGUoRG9jdW1lbnQqKTsKQEAgLTg3LDYgKzkyLDEzIEBAIHB1YmxpYzoKICAgICB2b2lk
IHVwZGF0ZVRpbWVEaXNwbGF5KCk7CiAgICAgdm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiAK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdm9pZCBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5
KCk7CisgICAgdm9pZCBzaG93VGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZvaWQgaGlkZVRleHRU
cmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyNlbmRp
ZgorCiAgICAgdmlydHVhbCBib29sIHNob3VsZEhpZGVDb250cm9scygpOwogCiBwcml2YXRlOgpA
QCAtMTA4LDYgKzEyMCwxMCBAQCBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyOwogICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNv
bnRhaW5lckVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyOwogICAgIE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudCogbV9wYW5lbDsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgTWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCogbV90ZXh0RGlzcGxheUNvbnRhaW5l
cjsKKyAgICBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudCogbV90ZXh0VHJhY2tE
aXNwbGF5OworI2VuZGlmCiAKICAgICBib29sIG1fb3BhcXVlOwogICAgIGJvb2wgbV9pc01vdXNl
T3ZlckNvbnRyb2xzOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaAkocmV2aXNpb24gMTAzMDYzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9scy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMiBAQCBjbGFzcyBN
ZWRpYUNvbnRyb2xzIDogcHVibGljIEhUTUxEaXZFbGVtCiAKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSGlkZUNvbnRyb2xzKCkgPSAwOwogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZp
cnR1YWwgdm9pZCBzaG93VGV4dFRyYWNrRGlzcGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
aGlkZVRleHRUcmFja0Rpc3BsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRU
cmFja0Rpc3BsYXkoKSA9IDA7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIE1lZGlhQ29udHJv
bHMoRG9jdW1lbnQqKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAzMTkyKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTItMTgg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVy
IHRleHQgdHJhY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02Mjg4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogbWVkaWEvbWVkaWEtY29udHJvbHMuanM6CisgICAgICAgIChtZWRpYUNvbnRyb2xzRWxl
bWVudCk6IERvbid0IGFsd2F5cyBsb29rIGZvciBhIGNvbnRyb2xsZXIgZWxlbWVudC4KKyAgICAg
ICAgKG1lZGlhQ29udHJvbHNCdXR0b25Db29yZGluYXRlcyk6CisgICAgICAgICh0ZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCk6IEZpbmQgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQuCisgICAgICAgICog
bWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmcuaHRtbDogQWRkZWQuCisKIDIw
MTEtMTItMTggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk1NApJbmRleDogTGF5b3V0
VGVzdHMvbWVkaWEvbWVkaWEtY29udHJvbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
bWVkaWEvbWVkaWEtY29udHJvbHMuanMJKHJldmlzaW9uIDEwMzA2MykKKysrIExheW91dFRlc3Rz
L21lZGlhL21lZGlhLWNvbnRyb2xzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICsxLDEyIEBA
CiAKIGZ1bmN0aW9uIG1lZGlhQ29udHJvbHNFbGVtZW50KGZpcnN0LCBpZCkKIHsKLSAgICB2YXIg
Y29udHJvbElEID0gIi13ZWJraXQtbWVkaWEtY29udHJvbHMtIiArIGlkOwogICAgIGZvciAodmFy
IGVsZW1lbnQgPSBmaXJzdDsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmcp
IHsKIAogICAgICAgICAvLyBOb3QgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWVkaWEgY29udHJvbHMg
aGFzIGEgc2hhZG93IHBzZXVkbyBJRCwgZWcuIHRoZQogICAgICAgICAvLyB0ZXh0IG5vZGVzIGZv
ciB0aGUgdGltZSB2YWx1ZXMsIHNvIGd1YXJkIGFnYWluc3QgZXhjZXB0aW9ucy4KICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuc2hhZG93UHNldWRvSWQoZWxlbWVudCkg
PT0gY29udHJvbElEKQorICAgICAgICAgICAgaWYgKGludGVybmFscy5zaGFkb3dQc2V1ZG9JZChl
bGVtZW50KSA9PSBpZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAg
fSBjYXRjaCAoZXhjZXB0aW9uKSB7IH0KIApAQCAtMjMsNyArMjIsOCBAQCBmdW5jdGlvbiBtZWRp
YUNvbnRyb2xzRWxlbWVudChmaXJzdCwgaWQpCiAKIGZ1bmN0aW9uIG1lZGlhQ29udHJvbHNCdXR0
b25Db29yZGluYXRlcyhlbGVtZW50LCBpZCkKIHsKLSAgICB2YXIgYnV0dG9uID0gbWVkaWFDb250
cm9sc0VsZW1lbnQoaW50ZXJuYWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkuZmlyc3RDaGlsZCwgaWQp
OworICAgIHZhciBjb250cm9sSUQgPSAiLXdlYmtpdC1tZWRpYS1jb250cm9scy0iICsgaWQ7Cisg
ICAgdmFyIGJ1dHRvbiA9IG1lZGlhQ29udHJvbHNFbGVtZW50KGludGVybmFscy5zaGFkb3dSb290
KGVsZW1lbnQpLmZpcnN0Q2hpbGQsIGNvbnRyb2xJRCk7CiAgICAgaWYgKCFidXR0b24pCiAgICAg
ICAgIHRocm93ICJGYWlsZWQgdG8gZmluZCBtZWRpYSBjb250cm9sIGVsZW1lbnQgSUQgJyIgKyBp
ZCArICInIjsKIApAQCAtMzIsMyArMzIsMTIgQEAgZnVuY3Rpb24gbWVkaWFDb250cm9sc0J1dHRv
bkNvb3JkaW5hdGVzKAogICAgIHZhciB5ID0gYnV0dG9uQm91bmRpbmdSZWN0LnRvcCArIGJ1dHRv
bkJvdW5kaW5nUmVjdC5oZWlnaHQgLyAyOwogICAgIHJldHVybiBuZXcgQXJyYXkoeCwgeSk7CiB9
CisKK2Z1bmN0aW9uIHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHBhcmVudEVsZW1lbnQpCit7Cisg
ICAgdmFyIGNvbnRyb2xJRCA9ICItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stZGlzcGxheSI7Cisg
ICAgdmFyIGRpc3BsYXlFbGVtZW50ID0gbWVkaWFDb250cm9sc0VsZW1lbnQoaW50ZXJuYWxzLnNo
YWRvd1Jvb3QocGFyZW50RWxlbWVudCkuZmlyc3RDaGlsZCwgY29udHJvbElEKTsKKyAgICBpZiAo
IWRpc3BsYXlFbGVtZW50KQorICAgICAgICB0aHJvdyAiRmFpbGVkIHRvIGZpbmQgbWVkaWEgY29u
dHJvbCBlbGVtZW50IElEICciICsgY29udHJvbElEICsgIiciOworICAgIHJldHVybiBkaXNwbGF5
RWxlbWVudDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0
cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1y
ZW5kZXJpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACitUZXN0
IHRoYXQgVGV4dFRyYWNrJ3MgY3VlcyBhcmUgcmVuZGVyZWQgY29ycmVjdGx5LgorRVZFTlQoY2Fu
cGxheXRocm91Z2gpCitFVkVOVChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUg
PT0gJzAuNScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3Ro
ID09ICcxJykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRD
dWVBc1NvdXJjZSgpID09ICdMb3JlbScpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVs
ZW1lbnQodmlkZW8pLmlubmVyVGV4dCA9PSAnTG9yZW0nKSBPSworCitSVU4odmlkZW8uY3VycmVu
dFRpbWUgPSAxLjUpCitFVkVOVChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUg
PT0gJzEuNScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3Ro
ID09ICcxJykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRD
dWVBc1NvdXJjZSgpID09ICdpcHN1bScpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVs
ZW1lbnQodmlkZW8pLmlubmVyVGV4dCA9PSAnaXBzdW0nKSBPSworCitSVU4odmlkZW8uY3VycmVu
dFRpbWUgPSAyLjUpCitFVkVOVChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUg
PT0gJzIuNScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3Ro
ID09ICcxJykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRD
dWVBc1NvdXJjZSgpID09ICdkb2xvcicpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVs
ZW1lbnQodmlkZW8pLmlubmVyVGV4dCA9PSAnZG9sb3InKSBPSworCitSVU4odmlkZW8uY3VycmVu
dFRpbWUgPSAzLjUpCitFVkVOVChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUg
PT0gJzMuNScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3Ro
ID09ICcxJykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRD
dWVBc1NvdXJjZSgpID09ICdzaXQnKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVt
ZW50KHZpZGVvKS5pbm5lclRleHQgPT0gJ3NpdCcpIE9LCisKK1Rlc3QgdGhhdCB0aGUgY3VlIGRp
c3BsYXkgZm9udCBzaXplIGlzIHJlc2l6ZWQgYXMgdGhlIHZpZGVvIGVsZW1lbnQgcmVzaXplcy4K
K1JVTih2aWRlby53aWR0aCA9IDMyMCkKK1JVTih2aWRlby5oZWlnaHQgPSAyNDApCitFWFBFQ1RF
RCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRT
aXplID09ICcxNnB4JykgT0sKKworUlVOKHZpZGVvLndpZHRoID0gNjQwKQorUlVOKHZpZGVvLmhl
aWdodCA9IDQ4MCkKK0VYUEVDVEVEIChnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlF
bGVtZW50KHZpZGVvKSkuZm9udFNpemUgPT0gJzE5cHgnKSBPSworCitSVU4odmlkZW8ud2lkdGgg
PSAxMjgwKQorUlVOKHZpZGVvLmhlaWdodCA9IDk2MCkKK0VYUEVDVEVEIChnZXRDb21wdXRlZFN0
eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUgPT0gJzM4cHgnKSBP
SworCitSVU4odmlkZW8ud2lkdGggPSAyNTYwKQorUlVOKHZpZGVvLmhlaWdodCA9IDE0NDApCitF
WFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykp
LmZvbnRTaXplID09ICc1OHB4JykgT0sKK0VORCBPRiBURVNUCisKSW5kZXg6IExheW91dFRlc3Rz
L21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgICAg
PGhlYWQ+CisgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCisgICAgICAgIDxzY3JpcHQgc3JjPS4uL21l
ZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPS4uL3ZpZGVvLXRlc3Qu
anM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPS4uL21lZGlhLWNvbnRyb2xzLmpzPjwv
c2NyaXB0PgorCisgICAgICAgIDxzY3JpcHQ+ICAgICAgICAgICAgCisKKyAgICAgICAgdmFyIHRl
c3RUcmFjazsKKyAgICAgICAgdmFyIHNlZWtlZENvdW50ID0gMDsKKyAgICAgICAgdmFyIGluZm8g
PSBbICJMb3JlbSIsICJpcHN1bSIsICJkb2xvciIsICJzaXQiIF07CisKKyAgICAgICAgZnVuY3Rp
b24gdGVzdEZvbnRTaXplcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgi
PGJyPlRlc3QgdGhhdCB0aGUgY3VlIGRpc3BsYXkgZm9udCBzaXplIGlzIHJlc2l6ZWQgYXMgdGhl
IHZpZGVvIGVsZW1lbnQgcmVzaXplcy4iKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8ud2lkdGgg
PSAzMjAiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8uaGVpZ2h0ID0gMjQwIik7CisgICAgICAg
ICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgi
Z2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXpl
IiwgIjE2cHgiKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAg
IHJ1bigidmlkZW8ud2lkdGggPSA2NDAiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8uaGVpZ2h0
ID0gNDgwIik7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKyAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgiZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dCh2aWRlbykpLmZvbnRTaXplIiwgIjE5cHgiKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRl
KCIiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8ud2lkdGggPSAxMjgwIik7CisgICAgICAgICAg
ICBydW4oInZpZGVvLmhlaWdodCA9IDk2MCIpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5v
ZmZzZXRUb3A7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImdldENvbXB1dGVkU3R5bGUodGV4
dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pKS5mb250U2l6ZSIsICIzOHB4Iik7CisKKyAgICAg
ICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICBydW4oInZpZGVvLndpZHRoID0g
MjU2MCIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby5oZWlnaHQgPSAxNDQwIik7CisgICAgICAg
ICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgi
Z2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXpl
IiwgIjU4cHgiKTsKKworICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gc2Vla2VkKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJ2aWRlby5jdXJyZW50VGltZSIsIHNlZWtlZENvdW50ICsgLjUpOworICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJ0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGgiLCAxKTsKKyAgICAg
ICAgICAgIHRlc3RFeHBlY3RlZCgidGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3Vl
QXNTb3VyY2UoKSIsIGluZm9bc2Vla2VkQ291bnRdKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3Rl
ZCgidGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pLmlubmVyVGV4dCIsIGluZm9bc2Vla2Vk
Q291bnRdKTsKKworICAgICAgICAgICAgaWYgKCsrc2Vla2VkQ291bnQgPT0gaW5mby5sZW5ndGgp
CisgICAgICAgICAgICAgICAgdGVzdEZvbnRTaXplcygpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgICAgICBydW4oInZp
ZGVvLmN1cnJlbnRUaW1lID0gIiArICh2aWRlby5jdXJyZW50VGltZSArIDEpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBsb2FkZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIlRlc3Qg
dGhhdCBUZXh0VHJhY2sncyBjdWVzIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkuIik7CisgICAgICAg
ICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisgICAgICAgICAgICB0ZXN0VHJhY2sgPSBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yQWxsKCd0cmFjaycpWzBdOworICAgICAgICAgICAgdmlkZW8uc3JjID0g
ZmluZE1lZGlhRmlsZSgndmlkZW8nLCAnLi4vY29udGVudC90ZXN0Jyk7CisgICAgICAgICAgICB3
YWl0Rm9yRXZlbnQoJ3NlZWtlZCcsIHNlZWtlZCk7CisgICAgICAgICAgICB3YWl0Rm9yRXZlbnQo
J2NhbnBsYXl0aHJvdWdoJywgZnVuY3Rpb24oKSB7IHZpZGVvLmN1cnJlbnRUaW1lID0gLjU7IH0p
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+Cisg
ICAgPGJvZHkgb25sb2FkPSJsb2FkZWQoKSI+CisgICAgICAgIDx2aWRlbyBjb250cm9scyA+Cisg
ICAgICAgICAgICA8dHJhY2sgc3JjPSJjYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMudnR0IiBraW5k
PSJjYXB0aW9ucyIgZGVmYXVsdD4KKyAgICAgICAgPC92aWRlbz4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvY2FwdGlv
bnMudnR0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdl
YnZ0dC9jYXB0aW9ucy52dHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFj
ay9jYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMudnR0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4
IEBACivvu79XRUJWVFQKKworMQorMDA6MDA6MDAuMDAwIC0tPiAwMDowMDowMS4wMDAKK0xvcmVt
CisKKzIKKzAwOjAwOjAxLjAwMCAtLT4gMDA6MDA6MDIuMDAwCitpcHN1bQorCiszCiswMDowMDow
Mi4wMDAgLS0+IDAwOjAwOjAzLjAwMAorZG9sb3IKKworNAorMDA6MDA6MDMuMDAwIC0tPiAwMDow
MDowNC4wMDAKK3NpdAorCg==
</data>
<flag name="commit-queue"
          id="119996"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119867</attachid>
            <date>2011-12-19 08:38:00 -0800</date>
            <delta_ts>2011-12-19 08:38:00 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_rendering_14.txt</filename>
            <type>text/plain</type>
            <size>40810</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDExLTEyLTE5ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlciB0ZXh0IHRy
YWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBtZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwKKworICAgICAgICAqIGNzcy9t
ZWRpYUNvbnRyb2xzLmNzczoKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJh
Y2stY29udGFpbmVyKToKKyAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2st
ZGlzcGxheSk6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6IEluaXRpYWxp
emUgbV9oYXZlVmlzaWJsZVRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMpOiBUcmlnZ2VyIGFuIHVwZGF0ZSBvZiB0
aGUgdGV4dAorICAgICAgICAgICAgdHJhY2sgZGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKTogY2FsbCBjb25maWd1cmVUZXh0
VHJhY2tEaXNwbGF5KCkgc28gCisgICAgICAgICAgICB0aGUgdGV4dCB0cmFjayBkaXNwbGF5IGlz
IGhpZGRlbiBvciBzaG93biB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJblRoaXNUcmFjayk6IE1pbm9yIGNsZWFudXAu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYUNvbnRyb2xz
KTogY29uZmlndXJlTWVkaWFDb250cm9scygpIGFsd2F5cyBjYWxsZWQKKyAgICAgICAgICAgIHJl
c2V0IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250cm9scywgZG8gaXQgaGVyZSBpbnN0ZWFkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scyk6
IFNpbXBsaWZ5IGFuZCBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Y29uZmlndXJlVGV4dFRyYWNrRGlzcGxheSk6IFNob3cgYW5kIGhpZGUgdGV4dCB0cmFjayBk
aXNwbGF5LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudGx5VmlzaWJsZUN1ZXMpOgorCisgICAgICAg
ICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVyVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmxheW91dCk6IE5ldy4gQ2FsbCB0aGUgZGlzcGxheSBlbGVtZW50IHNvIGl0
IGNhbgorICAgICAgICAgICAgdXBkYXRlIHRoZSBwb3NpdGlvbiBhbmQgZm9udCBzaXplLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVTaXplcyk6IEtlZXAgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQKKyAgICAgICAgICAgIHBvc2l0
aW9uZWQgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdmlkZW8gYm94LCBhbmQgc2l6ZSB0aGUgZm9u
dCBhY2NvcmRpbmcgdG8gdGhlIHZpZGVvIGhlaWdodC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNw
bGF5RWxlbWVudCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dDo6ZGlzcGxheVR5cGUpOgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50KTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbGxlcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50OjpzaG93
VGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Um9vdEVsZW1lbnQ6OmhpZGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Lmg6CisK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW06Ok1l
ZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xSb290RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrRGlzcGxheSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNob3dUZXh0VHJhY2tE
aXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSb290RWxlbWVu
dDo6aGlkZVRleHRUcmFja0Rpc3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KTogRGl0dG8uCisgICAg
ICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoKKwogMjAxMS0xMi0xOSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgPHRyYWNr
PiBmb3IgTWFjIGJ1aWxkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5j
c3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHMuY3NzCShy
ZXZpc2lvbiAxMDMyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NiwzICsxODYsMjggQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtZnVsbHNjcmVlbgogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNj
cmVlbi12b2x1bWUtbWF4LWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVs
bHNjcmVlbi12b2x1bWUtbWF4LWJ1dHRvbiB7CiAgICAgZGlzcGxheTogbm9uZTsKIH0KKwordmlk
ZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIgeworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworCisgICAg
Zm9udC1zaXplOiAyMnB4OworICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICAgIHRleHQt
YWxpZ246IGNlbnRlcjsKKyAgICAKKyAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOworICAgIHdv
cmQtc3BhY2luZzogbm9ybWFsOworICAgIHRleHQtdHJhbnNmb3JtOiBub25lOworICAgIHRleHQt
aW5kZW50OiAwOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBwb2ludGVyLWV2ZW50
czogbm9uZTsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworfQorCit2aWRlbzo6LXdl
YmtpdC1tZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkgeworICAgIGRpc3BsYXk6IGlubGluZTsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7CisgICAgY29sb3I6IHllbGxv
dzsKKyAgICBwYWRkaW5nOiAwcHggMnB4OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDMyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDcg
QEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAogICAgICwgbV9wYXJz
aW5nSW5Qcm9ncmVzcyhjcmVhdGVkQnlQYXJzZXIpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQog
ICAgICwgbV90cmFja3NBcmVSZWFkeSh0cnVlKQorICAgICwgbV9oYXZlVmlzaWJsZVRleHRUcmFj
ayhmYWxzZSkKICAgICAsIG1fdGV4dFRyYWNrcygwKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQl9B
VURJTykKQEAgLTk0MCwyMyArOTQxLDMxIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJl
c291cmNlKGNvbnMKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoZmxvYXQgbW92aWVUaW1lKQogewotICAgIFZl
Y3RvcjxDdWVJbnRlcnZhbFRyZWU6OkludGVydmFsVHlwZT4gcHJldmlvdXNseVZpc2libGVDdWVz
ID0gbV9jdXJyZW50bHlWaXNpYmxlQ3VlczsKKyAgICBDdWVMaXN0IHByZXZpb3VzbHlBY3RpdmVD
dWVzID0gbV9jdXJyZW50bHlBY3RpdmVDdWVzOworICAgIGJvb2wgYWN0aXZlU2V0Q2hhbmdlZCA9
IGZhbHNlOwogCi0gICAgbV9jdXJyZW50bHlWaXNpYmxlQ3VlcyA9IG1fY3VlVHJlZS5hbGxPdmVy
bGFwcyhtX2N1ZVRyZWUuY3JlYXRlSW50ZXJ2YWwobW92aWVUaW1lLCBtb3ZpZVRpbWUpKTsKKyAg
ICBtX2N1cnJlbnRseUFjdGl2ZUN1ZXMgPSBtX2N1ZVRyZWUuYWxsT3ZlcmxhcHMobV9jdWVUcmVl
LmNyZWF0ZUludGVydmFsKG1vdmllVGltZSwgbW92aWVUaW1lKSk7CiAgICAgCiAgICAgLy8gRklY
TUUoNzIxNzEpOiBFdmVudHMgbmVlZCB0byBiZSBzb3J0ZWQgYW5kIGZpbHRlcmVkIGJlZm9yZSBk
aXNwYXRjaGluZy4KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJldmlvdXNseVZpc2li
bGVDdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50bHlWaXNpYmxlQ3Vl
cy5jb250YWlucyhwcmV2aW91c2x5VmlzaWJsZUN1ZXNbaV0pKQotICAgICAgICAgICAgcHJldmlv
dXNseVZpc2libGVDdWVzW2ldLmRhdGEoKS0+c2V0SXNBY3RpdmUoZmFsc2UpOwotICAgIH0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudGx5VmlzaWJsZUN1ZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKCFwcmV2aW91c2x5VmlzaWJsZUN1ZXMuY29udGFpbnMobV9jdXJy
ZW50bHlWaXNpYmxlQ3Vlc1tpXSkpCi0gICAgICAgICAgICBtX2N1cnJlbnRseVZpc2libGVDdWVz
W2ldLmRhdGEoKS0+c2V0SXNBY3RpdmUodHJ1ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcmV2aW91c2x5QWN0aXZlQ3Vlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIW1fY3Vy
cmVudGx5QWN0aXZlQ3Vlcy5jb250YWlucyhwcmV2aW91c2x5QWN0aXZlQ3Vlc1tpXSkpIHsKKyAg
ICAgICAgICAgIHByZXZpb3VzbHlBY3RpdmVDdWVzW2ldLmRhdGEoKS0+c2V0SXNBY3RpdmUoZmFs
c2UpOworICAgICAgICAgICAgYWN0aXZlU2V0Q2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRseUFjdGl2ZUN1ZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFwcmV2aW91c2x5QWN0aXZlQ3Vlcy5jb250YWlucyht
X2N1cnJlbnRseUFjdGl2ZUN1ZXNbaV0pKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRseUFjdGl2
ZUN1ZXNbaV0uZGF0YSgpLT5zZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICAgICAgICAgIGFjdGl2ZVNl
dENoYW5nZWQgPSB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIEZJWE1FKDcy
MTczKTogUGF1c2UgdGhlIG1lZGlhIGVsZW1lbnQgZm9yIGN1ZXMgZ29pbmcgcGFzdCB0aGVpciBl
bmRUaW1lCiAgICAgLy8gZHVyaW5nIGEgbW9ub3RvbmljIHRpbWUgaW5jcmVhc2UuCisKKyAgICBp
ZiAoYWN0aXZlU2V0Q2hhbmdlZCAmJiBoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpOwogfQogCiBib29sIEhUTUxNZWRp
YUVsZW1lbnQ6OnRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0CkBAIC05ODIsMjkgKzk5MSwyOSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhCiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKIHsKLSAg
ICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0IHRyYWNrcwotICAgIC8v
IC4uLiB3aGVuIGEgdGV4dCB0cmFjayBjb3JyZXNwb25kaW5nIHRvIGEgdHJhY2sgZWxlbWVudCBp
cyBjcmVhdGVkIHdpdGggdGV4dCB0cmFjawotICAgIC8vIG1vZGUgc2V0IHRvIGRpc2FibGVkIGFu
ZCBzdWJzZXF1ZW50bHkgY2hhbmdlcyBpdHMgdGV4dCB0cmFjayBtb2RlIHRvIGhpZGRlbiwgc2hv
d2luZywKLSAgICAvLyBvciBzaG93aW5nIGJ5IGRlZmF1bHQgZm9yIHRoZSBmaXJzdCB0aW1lLCB0
aGUgdXNlciBhZ2VudCBtdXN0IGltbWVkaWF0ZWx5IGFuZCBzeW5jaHJvbm91c2x5Ci0gICAgLy8g
cnVuIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIC4uLgotICAgIAotICAgIGlmICh0cmFjay0+dHJh
Y2tUeXBlKCkgIT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQ7Ci0gICAgZm9yIChOb2RlKiBu
b2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewot
ICAgICAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHRyYWNrRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxUcmFja0VsZW1l
bnQqPihub2RlKTsKLSAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+dHJhY2soKSAhPSB0cmFjaykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIE1hcmsgdGhpcyB0cmFjayBhcyAi
Y29uZmlndXJlZCIgc28gY29uZmlndXJlVGV4dFRyYWNrIHdvbid0IGNoYW5nZSB0aGUgbW9kZSBh
Z2Fpbi4KLSAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRIYXNCZWVuQ29uZmlndXJlZCh0cnVlKTsK
LSAgICAgICAgaWYgKHRyYWNrLT5tb2RlKCkgIT0gVGV4dFRyYWNrOjpESVNBQkxFRCAmJiB0cmFj
a0VsZW1lbnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MVHJhY2tFbGVtZW50OjpOT05FKQotICAgICAg
ICAgICAgdHJhY2tFbGVtZW50LT5zY2hlZHVsZUxvYWQoKTsKLSAgICAgICAgYnJlYWs7CisgICAg
aWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OlRyYWNrRWxlbWVudCkgeworICAg
ICAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0IHRyYWNrcworICAg
ICAgICAvLyAuLi4gd2hlbiBhIHRleHQgdHJhY2sgY29ycmVzcG9uZGluZyB0byBhIHRyYWNrIGVs
ZW1lbnQgaXMgY3JlYXRlZCB3aXRoIHRleHQgdHJhY2sKKyAgICAgICAgLy8gbW9kZSBzZXQgdG8g
ZGlzYWJsZWQgYW5kIHN1YnNlcXVlbnRseSBjaGFuZ2VzIGl0cyB0ZXh0IHRyYWNrIG1vZGUgdG8g
aGlkZGVuLCBzaG93aW5nLAorICAgICAgICAvLyBvciBzaG93aW5nIGJ5IGRlZmF1bHQgZm9yIHRo
ZSBmaXJzdCB0aW1lLCB0aGUgdXNlciBhZ2VudCBtdXN0IGltbWVkaWF0ZWx5IGFuZCBzeW5jaHJv
bm91c2x5CisgICAgICAgIC8vIHJ1biB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSAuLi4KKworICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUodHJhY2tU
YWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSFRNTFRyYWNrRWxl
bWVudCogdHJhY2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxlbWVudCo+KG5vZGUp
OworICAgICAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+dHJhY2soKSAhPSB0cmFjaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFyayB0
aGlzIHRyYWNrIGFzICJjb25maWd1cmVkIiBzbyBjb25maWd1cmVUZXh0VHJhY2sgd29uJ3QgY2hh
bmdlIHRoZSBtb2RlIGFnYWluLgorICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRIYXNCZWVu
Q29uZmlndXJlZCh0cnVlKTsKKyAgICAgICAgICAgIGlmICh0cmFjay0+bW9kZSgpICE9IFRleHRU
cmFjazo6RElTQUJMRUQgJiYgdHJhY2tFbGVtZW50LT5yZWFkeVN0YXRlKCkgPT0gSFRNTFRyYWNr
RWxlbWVudDo6Tk9ORSkKKyAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQtPnNjaGVkdWxlTG9h
ZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisKKyAgICBjb25maWd1
cmVUZXh0VHJhY2tEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRy
YWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKikKQEAgLTIyODksMTAgKzIyOTgsMTAgQEAgYm9vbCBI
VE1MTWVkaWFFbGVtZW50Ojp1c2VySXNJbnRlcmVzdGVkSQogCiAgICAgLy8gSWYgLi4uIHRoZSB1
c2VyIGhhcyBpbmRpY2F0ZWQgYW4gaW50ZXJlc3QgaW4gaGF2aW5nIGEgdHJhY2sgd2l0aCB0aGlz
IHRleHQgdHJhY2sga2luZCwgdGV4dCB0cmFjayBsYW5ndWFnZSwgLi4uIAogICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpzdWJ0
aXRsZXNLZXl3b3JkKCkgfHwga2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgpKSB7
Ci0gICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmIChraW5kID09IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpICYmICFzZXR0aW5n
cy0+c2hvdWxkRGlzcGxheVN1YnRpdGxlcygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoa2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgpICYmICFzZXR0
aW5ncy0+c2hvdWxkRGlzcGxheUNhcHRpb25zKCkpCkBAIC0yMzAxLDcgKzIzMTAsNyBAQCBib29s
IEhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJCiAgICAgfQogCiAgICAgaWYgKGtp
bmQgPT0gVGV4dFRyYWNrOjpkZXNjcmlwdGlvbnNLZXl3b3JkKCkpIHsKLSAgICAgICAgaWYgKCFz
ZXR0aW5ncyB8fCAhc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3JpcHRpb25zKCkpCisg
ICAgICAgIGlmICghc2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3JpcHRpb25zKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB1c2VySXNJbnRlcmVzdGVk
SW5UaGlzTGFuZ3VhZ2UodHJhY2tFbGVtZW50LT5zcmNsYW5nKCkpOwogICAgIH0KQEAgLTM0NTIs
NiArMzQ2MSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFDb250cm8KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29udHJvbHMtPnNldE1lZGlhQ29udHJvbGxlciht
X21lZGlhQ29udHJvbGxlciA/IG1fbWVkaWFDb250cm9sbGVyLmdldCgpIDogc3RhdGljX2Nhc3Q8
TWVkaWFDb250cm9sbGVySW50ZXJmYWNlKj4odGhpcykpOworICAgIGNvbnRyb2xzLT5yZXNldCgp
OwogCiAgICAgZW5zdXJlU2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChjb250cm9scywgZWMpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzQ2NiwxMSArMzQ3Niw5IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlTWVkaWFDb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghaGFzTWVkaWFDb250cm9scygpKSB7Ci0gICAgICAgIGlmICghY3JlYXRlTWVkaWFDb250cm9s
cygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0
KCk7Ci0gICAgfQorICAgIGlmICghaGFzTWVkaWFDb250cm9scygpICYmICFjcmVhdGVNZWRpYUNv
bnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvdygp
OwogI2Vsc2UKICAgICBpZiAobV9wbGF5ZXIpCkBAIC0zNDc4LDYgKzM0ODYsMzUgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbgogI2VuZGlmCiB9CiAKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFj
a0Rpc3BsYXkoKQoreworICAgIEFTU0VSVChtX3RleHRUcmFja3MpOworCisgICAgYm9vbCBoYXZl
VmlzaWJsZVRleHRUcmFjayA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3RleHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdGV4dFRyYWNrcy0+
aXRlbShpKS0+bW9kZSgpID09IFRleHRUcmFjazo6U0hPV0lORykgeworICAgICAgICAgICAgaGF2
ZVZpc2libGVUZXh0VHJhY2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobV9oYXZlVmlzaWJsZVRleHRUcmFjayA9PSBoYXZlVmlzaWJsZVRl
eHRUcmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgPSBo
YXZlVmlzaWJsZVRleHRUcmFjazsKKworICAgIGlmICghbV9oYXZlVmlzaWJsZVRleHRUcmFjaykg
eworICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICAgICAgbWVkaWFDb250
cm9scygpLT5oaWRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkgJiYgIWNyZWF0ZU1lZGlhQ29udHJvbHMoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvd1RleHRUcmFja0Rpc3Bs
YXkoKTsKK30KKyNlbmRpZgorCiB2b2lkKiBIVE1MTWVkaWFFbGVtZW50OjpwcmVEaXNwYXRjaEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVudCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxMDMyMzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsMTEgQEAgY2xhc3MgV2lkZ2V0OwogY2xhc3MgRGlzcGxheVNsZWVwRGlzYWJsZXI7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3R5cGVkZWYgUE9ESW50ZXJ2YWxU
cmVlPGRvdWJsZSwgVGV4dFRyYWNrQ3VlKj4gQ3VlSW50ZXJ2YWxUcmVlOwordHlwZWRlZiBWZWN0
b3I8Q3VlSW50ZXJ2YWxUcmVlOjpJbnRlcnZhbFR5cGU+IEN1ZUxpc3Q7CisjZW5kaWYKKwogLy8g
RklYTUU6IFRoZSBpbmhlcml0YW5jZSBmcm9tIE1lZGlhUGxheWVyQ2xpZW50IGhlcmUgc2hvdWxk
IGJlIHByaXZhdGUgaW5oZXJpdGFuY2UuCiAvLyBCdXQgaXQgY2FuJ3QgYmUgdW50aWwgdGhlIENo
cm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCBjbGFzcyBpcyBmaXhlZCBzbyBpdAogLy8g
bm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3RpbmcgYSBNZWRpYVBsYXllckNsaWVudCB0byBh
biBIVE1MTWVkaWFFbGVtZW50LgpAQCAtMTk2LDYgKzIwMSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPFRleHRUcmFjaz4gYWRkVHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gYWRkVHJhY2soa2luZCwgZW1wdHlTdHJpbmcoKSwgZW1wdHlTdHJp
bmcoKSwgZWMpOyB9CiAKICAgICBUZXh0VHJhY2tMaXN0KiB0ZXh0VHJhY2tzKCk7CisgICAgQ3Vl
TGlzdCBjdXJyZW50bHlBY3RpdmVDdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50bHlBY3Rp
dmVDdWVzOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tXYXNBZGRlZChIVE1MVHJhY2tFbGVt
ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrV2lsbEJlUmVtb3ZlZChIVE1MVHJhY2tFbGVt
ZW50Kik7CkBAIC0yMDMsNiArMjA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29uZmlndXJlVGV4
dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqKTsKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja3Mo
KTsKICAgICBib29sIHRleHRUcmFja3NBcmVSZWFkeSgpIGNvbnN0OworICAgIHZvaWQgY29uZmln
dXJlVGV4dFRyYWNrRGlzcGxheSgpOwogCiAgICAgLy8gVGV4dFRyYWNrQ2xpZW50CiAgICAgdmly
dHVhbCB2b2lkIHRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayopOwpAQCAtNTQ5
LDEyICs1NTYsMTIgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBi
b29sIG1fdHJhY2tzQXJlUmVhZHkgOiAxOworICAgIGJvb2wgbV9oYXZlVmlzaWJsZVRleHRUcmFj
ayA6IDE7CisKICAgICBSZWZQdHI8VGV4dFRyYWNrTGlzdD4gbV90ZXh0VHJhY2tzOwogICAgIFZl
Y3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlv
bkJlZ2FuOwotICAgIAotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlIDxkb3VibGUsIFRleHRU
cmFja0N1ZSo+IEN1ZUludGVydmFsVHJlZTsKICAgICBDdWVJbnRlcnZhbFRyZWUgbV9jdWVUcmVl
OwotICAgIFZlY3RvcjxDdWVJbnRlcnZhbFRyZWU6OkludGVydmFsVHlwZT4gbV9jdXJyZW50bHlW
aXNpYmxlQ3VlczsKKyAgICBDdWVMaXN0IG1fY3VycmVudGx5QWN0aXZlQ3VlczsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDEwMzIzMikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNs
dWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
Y3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTExMTUsNiArMTEx
NiwxMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xDdXJyZW50VAogICAgIHJl
dHVybiBpZDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorCitjbGFzcyBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
IDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUZXh0VHJhY2tDb250
YWluZXJFbGVtZW50KE5vZGUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOworfTsKKworUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6UmVuZGVyVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudChOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9k
ZSkKK3sKK30KKwordm9pZCBSZW5kZXJUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpsYXlvdXQo
KQoreworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKyAgICBpZiAoc3R5bGUoKS0+ZGlzcGxh
eSgpID09IE5PTkUpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtZWRpYUNvbnRyb2xF
bGVtZW50VHlwZShub2RlKCkpID09IE1lZGlhVGV4dFRyYWNrRGlzcGxheUNvbnRhaW5lcik7CisK
KyAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmlldygpKTsKKyAg
ICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Kj4obm9k
ZSgpKS0+dXBkYXRlU2l6ZXMoKTsKK30KKworaW5saW5lIE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChkb2N1bWVudCkKKyAg
ICAsIG1fZm9udFNpemUoMCkKKyAgICAsIG1fYm90dG9tKDApCit7Cit9CisKK1Bhc3NSZWZQdHI8
TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBS
ZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gZWxlbWVudCA9IGFk
b3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50KGRvY3VtZW50
KSk7CisgICAgZWxlbWVudC0+aGlkZSgpOworICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsK
K30KKworUmVuZGVyT2JqZWN0KiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudCh0aGlz
KTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWlu
ZXIiKSk7CisgICAgcmV0dXJuIGlkOworfQorCitzdGF0aWMgY29uc3QgZmxvYXQgbWltaW11bUZv
bnRTaXplID0gMTY7CitzdGF0aWMgY29uc3QgZmxvYXQgdmlkZW9IZWlnaHRGb250U2l6ZURpdmlz
b3IgPSAyNTsKK3N0YXRpYyBjb25zdCBmbG9hdCB0cmFja0JvdHRvbU11bHRpcGxpZXIgPSAwLjk7
CisgICAgCit2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0
ZVNpemVzKCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVu
dE1lZGlhRWxlbWVudCh0aGlzKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCB8fCAhbWVkaWFFbGVt
ZW50LT5yZW5kZXJlcigpIHx8ICFtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPmlzVmlkZW8oKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEludFJlY3QgdmlkZW9Cb3ggPSB0b1JlbmRlclZp
ZGVvKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSktPnZpZGVvQm94KCk7CisgICAgaWYgKG1fdmlk
ZW9EaXNwbGF5U2l6ZSA9PSB2aWRlb0JveCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdmlkZW9E
aXNwbGF5U2l6ZSA9IHZpZGVvQm94OworCisgICAgZmxvYXQgZm9udFNpemUgPSBtX3ZpZGVvRGlz
cGxheVNpemUuc2l6ZSgpLmhlaWdodCgpIC8gdmlkZW9IZWlnaHRGb250U2l6ZURpdmlzb3I7Cisg
ICAgaWYgKGZvbnRTaXplIDwgbWltaW11bUZvbnRTaXplKQorICAgICAgICBmb250U2l6ZSA9IG1p
bWltdW1Gb250U2l6ZTsKKyAgICBpZiAoZm9udFNpemUgIT0gbV9mb250U2l6ZSkgeworICAgICAg
ICBtX2ZvbnRTaXplID0gZm9udFNpemU7CisgICAgICAgIGVuc3VyZUlubGluZVN0eWxlRGVjbCgp
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihmb250U2l6
ZSkgKyAicHgiKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHN0YXRpY19jYXN0
PExheW91dFVuaXQ+KG1fdmlkZW9EaXNwbGF5U2l6ZS55KCkgKyBtX3ZpZGVvRGlzcGxheVNpemUu
aGVpZ2h0KCkgLSAobV92aWRlb0Rpc3BsYXlTaXplLmhlaWdodCgpICogdHJhY2tCb3R0b21NdWx0
aXBsaWVyKSk7CisgICAgaWYgKGJvdHRvbSAhPSBtX2JvdHRvbSkgeworICAgICAgICBtX2JvdHRv
bSA9IGJvdHRvbTsKKyAgICAgICAgZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5Qm90dG9tLCBTdHJpbmc6Om51bWJlcihib3R0b20pICsgInB4Iik7CisgICAg
fQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01lZGlhQ29udHJvbFRl
eHRUcmFja0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xFbGVtZW50KGRvY3VtZW50
KQoreworfQorCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50
PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFRleHRUcmFj
a0Rpc3BsYXlFbGVtZW50KGRvY3VtZW50KSk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgTWVk
aWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1t
ZWRpYS10ZXh0LXRyYWNrLWRpc3BsYXkiKSk7CisgICAgcmV0dXJuIGlkOworfQorCisjZW5kaWYK
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHJldmlzaW9uIDEwMzIzMikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgZW51bSBNZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSB7CiAgICAgTWVkaWFWb2x1bWVTbGlkZXIsCiAgICAgTWVkaWFWb2x1bWVTbGlkZXJUaHVtYiwK
ICAgICBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b24sCisgICAgTWVkaWFUZXh0VHJhY2tEaXNw
bGF5Q29udGFpbmVyLAorICAgIE1lZGlhVGV4dFRyYWNrRGlzcGxheSwKIH07CiAKIEhUTUxNZWRp
YUVsZW1lbnQqIHRvUGFyZW50TWVkaWFFbGVtZW50KE5vZGUqKTsKQEAgLTQ4NCw2ICs0ODYsNDIg
QEAgcHJpdmF0ZToKICAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorI2lmIEVO
QUJMRShWSURFT19UUkFDSykKK2NsYXNzIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CitwdWJsaWM6CisgICAgCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisgICAgCisgICAgdm9pZCB1cGRhdGVTaXplcygpOworCitwcml2
YXRlOgorICAgIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQq
KTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBk
aXNwbGF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhVGV4dFRyYWNrRGlzcGxheUNvbnRhaW5l
cjsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNv
bnN0OworCisgICAgSW50UmVjdCBtX3ZpZGVvRGlzcGxheVNpemU7CisgICAgZmxvYXQgbV9mb250
U2l6ZTsKKyAgICBMYXlvdXRVbml0IG1fYm90dG9tOworfTsKKworLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVu
dCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gY3JlYXRlKERvY3Vt
ZW50Kik7CisKK3ByaXZhdGU6CisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVsZW1l
bnQoRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlz
cGxheVR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVRleHRUcmFja0Rpc3BsYXk7IH0KKyAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKK307Cisj
ZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMDMyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xSb290RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxNiBAQAogCiAj
aW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5j
bHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNp
bmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CkBAIC02NSw4ICs3MSwxMiBAQCBNZWRpYUNvbnRyb2xSb290RWxlbWVudDo6TWVkaWFDb250cm9s
Um9vCiAgICAgLCBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXIoMCkKICAgICAsIG1fZnVsbFNjcmVl
bk1heFZvbHVtZUJ1dHRvbigwKQogICAgICwgbV9wYW5lbCgwKQotICAgICwgbV9pc01vdXNlT3Zl
ckNvbnRyb2xzKGZhbHNlKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAsIG1fdGV4dERp
c3BsYXlDb250YWluZXIoMCkKKyAgICAsIG1fdGV4dFRyYWNrRGlzcGxheSgwKQorI2VuZGlmCiAg
ICAgLCBtX2hpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcih0aGlzLCAmTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQ6OmhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lckZpcmVkKQorICAgICwgbV9pc01v
dXNlT3ZlckNvbnRyb2xzKGZhbHNlKQogewogfQogCkBAIC0yNjQsNiArMjc0LDEyIEBAIHZvaWQg
TWVkaWFDb250cm9sUm9vdEVsZW1lbnQ6OnNldE1lZGlhQ28KICAgICAgICAgbV9mdWxsU2NyZWVu
TWF4Vm9sdW1lQnV0dG9uLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CiAgICAgaWYg
KG1fcGFuZWwpCiAgICAgICAgIG1fcGFuZWwtPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9sbGVy
KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgaWYgKG1fdGV4dERpc3BsYXlDb250YWlu
ZXIpCisgICAgICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNldE1lZGlhQ29udHJvbGxlcihj
b250cm9sbGVyKTsKKyAgICBpZiAobV90ZXh0VHJhY2tEaXNwbGF5KQorICAgICAgICBtX3RleHRU
cmFja0Rpc3BsYXktPnNldE1lZGlhQ29udHJvbGxlcihjb250cm9sbGVyKTsKKyNlbmRpZgogICAg
IHJlc2V0KCk7CiB9CiAKQEAgLTU3Niw2ICs1OTIsNzUgQEAgdm9pZCBNZWRpYUNvbnRyb2xSb290
RWxlbWVudDo6c3RvcEhpZGVGdQogICAgIG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyLnN0
b3AoKTsKIH0KIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3ZvaWQgTWVkaWFDb250cm9sUm9v
dEVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKQoreworICAgIGlmIChtX3RleHREaXNw
bGF5Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudD4gdGV4dERpc3BsYXlDb250YWluZXIgPSBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CisgICAg
bV90ZXh0RGlzcGxheUNvbnRhaW5lciA9IHRleHREaXNwbGF5Q29udGFpbmVyLmdldCgpOworCisg
ICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50PiB0ZXh0RGlzcGxh
eSA9IE1lZGlhQ29udHJvbFRleHRUcmFja0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSk7CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworICAgIG1fdGV4dFRyYWNr
RGlzcGxheSA9IHRleHREaXNwbGF5LmdldCgpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICB0ZXh0RGlzcGxheUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGV4dERpc3BsYXkucmVsZWFzZSgp
LCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbnNl
cnQgaXQgYmVmb3JlIHRoZSBmaXJzdCBjb250cm9sbGVyIGVsZW1lbnQgc28gaXQgYWx3YXlzIGRp
c3BsYXlzIGJlaGluZCB0aGUgY29udHJvbHMuCisgICAgaW5zZXJ0QmVmb3JlKHRleHREaXNwbGF5
Q29udGFpbmVyLnJlbGVhc2UoKSwgbV9wYW5lbCwgZWMsIHRydWUpOworfQorCit2b2lkIE1lZGlh
Q29udHJvbFJvb3RFbGVtZW50OjpzaG93VGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFt
X3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7
CisgICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOworfQorCit2b2lkIE1lZGlhQ29u
dHJvbFJvb3RFbGVtZW50OjpoaWRlVGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3Rl
eHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Cisg
ICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+aGlkZSgpOworfQorCit2b2lkIE1lZGlhQ29udHJv
bFJvb3RFbGVtZW50Ojp1cGRhdGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1fdGV4
dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKwor
ICAgIEN1ZUxpc3QgYWN0aXZlQ3VlcyA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG1fdGV4dERpc3Bs
YXlDb250YWluZXIpLT5jdXJyZW50bHlBY3RpdmVDdWVzKCk7CisgICAgaWYgKGFjdGl2ZUN1ZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RleHRUcmFja0Rpc3BsYXktPnJl
bW92ZUNoaWxkcmVuKCk7CisgICAgYm9vbCBub3RoaW5nVG9EaXNwbGF5ID0gdHJ1ZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUN1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
VGV4dFRyYWNrQ3VlKiBjdWUgPSBhY3RpdmVDdWVzW2ldLmRhdGEoKTsKKyAgICAgICAgQVNTRVJU
KGN1ZS0+aXNBY3RpdmUoKSk7CisgICAgICAgIGlmICghY3VlLT50cmFjaygpIHx8IGN1ZS0+dHJh
Y2soKS0+bW9kZSgpICE9IFRleHRUcmFjazo6U0hPV0lORykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIFN0cmluZyBjdWVUZXh0ID0gY3VlLT5nZXRDdWVBc1NvdXJjZSgpOworICAg
ICAgICBpZiAoIWN1ZVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoIW5vdGhpbmdU
b0Rpc3BsYXkpCisgICAgICAgICAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5hcHBlbmRDaGls
ZChkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6YnJUYWcsIGZhbHNlKSwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBtX3RleHRUcmFja0Rpc3BsYXktPmFwcGVu
ZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKGN1ZVRleHQpLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICAgICAgICAgIG5vdGhpbmdUb0Rpc3BsYXkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghbm90aGluZ1RvRGlzcGxheSkKKyAgICAgICAgbV90ZXh0RGlz
cGxheUNvbnRhaW5lci0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0RGlzcGxheUNv
bnRhaW5lci0+aGlkZSgpOworfQorI2VuZGlmCisKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFD
b250cm9sUm9vdEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scyIp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sUm9vdEVsZW1lbnQuaAkocmV2aXNpb24gMTAzMjMyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NiArNjYsMTEgQEAgY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBS
ZW5kZXJNZWRpYTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJhY2tE
aXNwbGF5RWxlbWVudDsKKyNlbmRpZgorCiBjbGFzcyBNZWRpYUNvbnRyb2xSb290RWxlbWVudCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxN
ZWRpYUNvbnRyb2xSb290RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CkBAIC05OCw2ICsxMDMs
MTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXkoKTsKICAgICB2b2lkIHVw
ZGF0ZVN0YXR1c0Rpc3BsYXkoKTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB2b2lk
IGNyZWF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNob3dUZXh0VHJhY2tEaXNwbGF5
KCk7CisgICAgdm9pZCBoaWRlVGV4dFRyYWNrRGlzcGxheSgpOworICAgIHZvaWQgdXBkYXRlVGV4
dFRyYWNrRGlzcGxheSgpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGlkZUNv
bnRyb2xzKCk7CiAKIHByaXZhdGU6CkBAIC0xMzQsOCArMTQ2LDEyIEBAIHByaXZhdGU6CiAgICAg
TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZVNsaWRlckVsZW1lbnQqIG1fZnVsbFNjcmVlblZv
bHVtZVNsaWRlcjsKICAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxl
bWVudCogbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uOwogICAgIE1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudCogbV9wYW5lbDsKLSAgICBib29sIG1faXNNb3VzZU92ZXJDb250cm9sczsKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudCogbV90ZXh0RGlzcGxheUNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xUZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCogbV90ZXh0VHJhY2tEaXNwbGF5OworI2VuZGlmCiAgICAgVGltZXI8TWVk
aWFDb250cm9sUm9vdEVsZW1lbnQ+IG1faGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyOworICAg
IGJvb2wgbV9pc01vdXNlT3ZlckNvbnRyb2xzOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1l
bnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMzIzMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbFJvb3RFbGVtZW50Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxMCArMjksMTcgQEAKICNpZiBFTkFCTEUoVklERU8pCiAjaW5jbHVkZSAiTWVkaWFD
b250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCkBAIC00OSw2ICs1NiwxMCBAQCBNZWRpYUNvbnRyb2xSb290RWxlbWVudENo
cm9taXVtOjpNZWRpYUNvCiAgICAgLCBtX3ZvbHVtZVNsaWRlcigwKQogICAgICwgbV92b2x1bWVT
bGlkZXJDb250YWluZXIoMCkKICAgICAsIG1fcGFuZWwoMCkKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgLCBtX3RleHREaXNwbGF5Q29udGFpbmVyKDApCisgICAgLCBtX3RleHRUcmFja0Rp
c3BsYXkoMCkKKyNlbmRpZgogICAgICwgbV9vcGFxdWUodHJ1ZSkKICAgICAsIG1faXNNb3VzZU92
ZXJDb250cm9scyhmYWxzZSkKIHsKQEAgLTE0NCw2ICsxNTUsMTIgQEAgdm9pZCBNZWRpYUNvbnRy
b2xSb290RWxlbWVudENocm9taXVtOjpzZQogICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5l
ci0+c2V0TWVkaWFDb250cm9sbGVyKGNvbnRyb2xsZXIpOwogICAgIGlmIChtX3BhbmVsKQogICAg
ICAgICBtX3BhbmVsLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIGlmIChtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBt
X3RleHREaXNwbGF5Q29udGFpbmVyLT5zZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7Cisg
ICAgaWYgKG1fdGV4dFRyYWNrRGlzcGxheSkKKyAgICAgICAgbV90ZXh0VHJhY2tEaXNwbGF5LT5z
ZXRNZWRpYUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisjZW5kaWYKICAgICByZXNldCgpOwogfQog
CkBAIC0zMDksNiArMzI2LDc1IEBAIHZvaWQgTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1
bTo6c2gKICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2hvdygpOwogfQogCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQordm9pZCBNZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtOjpj
cmVhdGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAobV90ZXh0RGlzcGxheUNvbnRhaW5l
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ+IHRleHREaXNwbGF5Q29udGFpbmVyID0gTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1fdGV4dERpc3Bs
YXlDb250YWluZXIgPSB0ZXh0RGlzcGxheUNvbnRhaW5lci5nZXQoKTsKKworICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudD4gdGV4dERpc3BsYXkgPSBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIG1f
dGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsKKyAgICBtX3RleHRUcmFja0Rpc3BsYXkgPSB0
ZXh0RGlzcGxheS5nZXQoKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGV4dERpc3Bs
YXlDb250YWluZXItPmFwcGVuZENoaWxkKHRleHREaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUp
OworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW5zZXJ0IGl0IGJlZm9y
ZSB0aGUgZmlyc3QgY29udHJvbGxlciBlbGVtZW50IHNvIGl0IGFsd2F5cyBkaXNwbGF5cyBiZWhp
bmQgdGhlIGNvbnRyb2xzLgorICAgIGluc2VydEJlZm9yZSh0ZXh0RGlzcGxheUNvbnRhaW5lci5y
ZWxlYXNlKCksIG1fcGFuZWwsIGVjLCB0cnVlKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xSb290
RWxlbWVudENocm9taXVtOjpzaG93VGV4dFRyYWNrRGlzcGxheSgpCit7CisgICAgaWYgKCFtX3Rl
eHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7Cisg
ICAgbV90ZXh0RGlzcGxheUNvbnRhaW5lci0+c2hvdygpOworfQorCit2b2lkIE1lZGlhQ29udHJv
bFJvb3RFbGVtZW50Q2hyb21pdW06OmhpZGVUZXh0VHJhY2tEaXNwbGF5KCkKK3sKKyAgICBpZiAo
IW1fdGV4dERpc3BsYXlDb250YWluZXIpCisgICAgICAgIGNyZWF0ZVRleHRUcmFja0Rpc3BsYXko
KTsKKyAgICBtX3RleHREaXNwbGF5Q29udGFpbmVyLT5oaWRlKCk7Cit9CisKK3ZvaWQgTWVkaWFD
b250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bTo6dXBkYXRlVGV4dFRyYWNrRGlzcGxheSgpCit7Cisg
ICAgaWYgKCFtX3RleHREaXNwbGF5Q29udGFpbmVyKQorICAgICAgICBjcmVhdGVUZXh0VHJhY2tE
aXNwbGF5KCk7CisKKyAgICBDdWVMaXN0IGFjdGl2ZUN1ZXMgPSB0b1BhcmVudE1lZGlhRWxlbWVu
dChtX3RleHREaXNwbGF5Q29udGFpbmVyKS0+Y3VycmVudGx5QWN0aXZlQ3VlcygpOworICAgIGlm
IChhY3RpdmVDdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90ZXh0VHJh
Y2tEaXNwbGF5LT5yZW1vdmVDaGlsZHJlbigpOworICAgIGJvb2wgbm90aGluZ1RvRGlzcGxheSA9
IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVDdWVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0gYWN0aXZlQ3Vlc1tpXS5kYXRhKCk7Cisg
ICAgICAgIEFTU0VSVChjdWUtPmlzQWN0aXZlKCkpOworICAgICAgICBpZiAoIWN1ZS0+dHJhY2so
KSB8fCBjdWUtPnRyYWNrKCktPm1vZGUoKSAhPSBUZXh0VHJhY2s6OlNIT1dJTkcpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBTdHJpbmcgY3VlVGV4dCA9IGN1ZS0+Z2V0Q3VlQXNT
b3VyY2UoKTsKKyAgICAgICAgaWYgKCFjdWVUZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
aWYgKCFub3RoaW5nVG9EaXNwbGF5KQorICAgICAgICAgICAgICAgIG1fdGV4dFRyYWNrRGlzcGxh
eS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmJyVGFn
LCBmYWxzZSksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgbV90ZXh0VHJhY2tE
aXNwbGF5LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShjdWVUZXh0KSwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgICAgICBub3RoaW5nVG9EaXNwbGF5ID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW5vdGhpbmdUb0Rpc3BsYXkpCisgICAg
ICAgIG1fdGV4dERpc3BsYXlDb250YWluZXItPnNob3coKTsKKyAgICBlbHNlCisgICAgICAgIG1f
dGV4dERpc3BsYXlDb250YWluZXItPmhpZGUoKTsKK30KKyNlbmRpZgorICAgIAogY29uc3QgQXRv
bWljU3RyaW5nJiBNZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtOjpzaGFkb3dQc2V1ZG9J
ZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAo
Ii13ZWJraXQtbWVkaWEtY29udHJvbHMiKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bS5o
CShyZXZpc2lvbiAxMDMyMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xSb290RWxlbWVudENocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEx
IEBAIGNsYXNzIE1lZGlhUGxheWVyOwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyTWVk
aWE7CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCitjbGFzcyBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tDb250YWluZXJFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVGV4dFRyYWNrRGlzcGxheUVs
ZW1lbnQ7CisjZW5kaWYKKwogY2xhc3MgTWVkaWFDb250cm9sUm9vdEVsZW1lbnRDaHJvbWl1bSA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxN
ZWRpYUNvbnRyb2xSb290RWxlbWVudENocm9taXVtPiBjcmVhdGUoRG9jdW1lbnQqKTsKQEAgLTg3
LDYgKzkyLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVRpbWVEaXNwbGF5KCk7CiAgICAg
dm9pZCB1cGRhdGVTdGF0dXNEaXNwbGF5KCk7CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgdm9pZCBjcmVhdGVUZXh0VHJhY2tEaXNwbGF5KCk7CisgICAgdm9pZCBzaG93VGV4dFRyYWNr
RGlzcGxheSgpOworICAgIHZvaWQgaGlkZVRleHRUcmFja0Rpc3BsYXkoKTsKKyAgICB2b2lkIHVw
ZGF0ZVRleHRUcmFja0Rpc3BsYXkoKTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZEhpZGVDb250cm9scygpOwogCiBwcml2YXRlOgpAQCAtMTA4LDYgKzEyMCwxMCBAQCBwcml2YXRl
OgogICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyOwog
ICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQqIG1fdm9sdW1lU2xp
ZGVyQ29udGFpbmVyOwogICAgIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudCogbV90ZXh0RGlzcGxheUNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xUZXh0VHJh
Y2tEaXNwbGF5RWxlbWVudCogbV90ZXh0VHJhY2tEaXNwbGF5OworI2VuZGlmCiAKICAgICBib29s
IG1fb3BhcXVlOwogICAgIGJvb2wgbV9pc01vdXNlT3ZlckNvbnRyb2xzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAkocmV2aXNpb24gMTAzMjMyKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw2ICs3MiwxMiBAQCBjbGFzcyBNZWRpYUNvbnRyb2xzIDogcHVibGljIEhUTUxE
aXZFbGVtCiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGlkZUNvbnRyb2xzKCkgPSAwOwogCisj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZpcnR1YWwgdm9pZCBzaG93VGV4dFRyYWNrRGlz
cGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVRleHRUcmFja0Rpc3BsYXkoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRUcmFja0Rpc3BsYXkoKSA9IDA7CisjZW5kaWYK
KwogcHJvdGVjdGVkOgogICAgIE1lZGlhQ29udHJvbHMoRG9jdW1lbnQqKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAkocmV2
aXNpb24gMTAzMjMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29u
dHJvbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDkgQEAgYm9vbCBSZW5kZXJN
ZWRpYUNvbnRyb2xzOjpwYWludE1lZGlhQ29udAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTWVkaWFDb250cm9sc1BhbmVsOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGNhc2UgTWVkaWFUZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyOgorICAgICAg
ICBjYXNlIE1lZGlhVGV4dFRyYWNrRGlzcGxheToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNw
cAkocmV2aXNpb24gMTAzMjMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
ZGlhQ29udHJvbHNDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsOCBA
QCBib29sIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNCiAgICAgY2FzZSBNZWRp
YVN0YXR1c0Rpc3BsYXk6CiAgICAgY2FzZSBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbjoK
ICAgICBjYXNlIE1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uOgorICAgIGNhc2UgTWVkaWFU
ZXh0VHJhY2tEaXNwbGF5Q29udGFpbmVyOgorICAgIGNhc2UgTWVkaWFUZXh0VHJhY2tEaXNwbGF5
OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMTAzMjMyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTItMTkgIEVyaWMgQ2FybHNvbiAgPGVy
aWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyIHRleHQgdHJhY2tzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjg4NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWVkaWEvbWVkaWEt
Y29udHJvbHMuanM6CisgICAgICAgIChtZWRpYUNvbnRyb2xzRWxlbWVudCk6IERvbid0IGFsd2F5
cyBsb29rIGZvciBhIGNvbnRyb2xsZXIgZWxlbWVudC4KKyAgICAgICAgKG1lZGlhQ29udHJvbHNC
dXR0b25Db29yZGluYXRlcyk6CisgICAgICAgICh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCk6IEZp
bmQgdGhlIGN1ZSBkaXNwbGF5IGVsZW1lbnQuCisgICAgICAgICogbWVkaWEvdHJhY2svdHJhY2st
Y3VlLXJlbmRlcmluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3RyYWNr
L3RyYWNrLWN1ZS1yZW5kZXJpbmcuaHRtbDogQWRkZWQuCisKIDIwMTEtMTItMTkgIE1pa2hhaWwg
TmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJl
bW92aW5nIHN1cHByZXNzaW9ucyBmcm9tOgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEt
Y29udHJvbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtY29udHJv
bHMuanMJKHJldmlzaW9uIDEwMzIzMikKKysrIExheW91dFRlc3RzL21lZGlhL21lZGlhLWNvbnRy
b2xzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICsxLDEyIEBACiAKIGZ1bmN0aW9uIG1lZGlh
Q29udHJvbHNFbGVtZW50KGZpcnN0LCBpZCkKIHsKLSAgICB2YXIgY29udHJvbElEID0gIi13ZWJr
aXQtbWVkaWEtY29udHJvbHMtIiArIGlkOwogICAgIGZvciAodmFyIGVsZW1lbnQgPSBmaXJzdDsg
ZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmcpIHsKIAogICAgICAgICAvLyBO
b3QgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWVkaWEgY29udHJvbHMgaGFzIGEgc2hhZG93IHBzZXVk
byBJRCwgZWcuIHRoZQogICAgICAgICAvLyB0ZXh0IG5vZGVzIGZvciB0aGUgdGltZSB2YWx1ZXMs
IHNvIGd1YXJkIGFnYWluc3QgZXhjZXB0aW9ucy4KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IGlmIChpbnRlcm5hbHMuc2hhZG93UHNldWRvSWQoZWxlbWVudCkgPT0gY29udHJvbElEKQorICAg
ICAgICAgICAgaWYgKGludGVybmFscy5zaGFkb3dQc2V1ZG9JZChlbGVtZW50KSA9PSBpZCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9u
KSB7IH0KIApAQCAtMjMsNyArMjIsOCBAQCBmdW5jdGlvbiBtZWRpYUNvbnRyb2xzRWxlbWVudChm
aXJzdCwgaWQpCiAKIGZ1bmN0aW9uIG1lZGlhQ29udHJvbHNCdXR0b25Db29yZGluYXRlcyhlbGVt
ZW50LCBpZCkKIHsKLSAgICB2YXIgYnV0dG9uID0gbWVkaWFDb250cm9sc0VsZW1lbnQoaW50ZXJu
YWxzLnNoYWRvd1Jvb3QoZWxlbWVudCkuZmlyc3RDaGlsZCwgaWQpOworICAgIHZhciBjb250cm9s
SUQgPSAiLXdlYmtpdC1tZWRpYS1jb250cm9scy0iICsgaWQ7CisgICAgdmFyIGJ1dHRvbiA9IG1l
ZGlhQ29udHJvbHNFbGVtZW50KGludGVybmFscy5zaGFkb3dSb290KGVsZW1lbnQpLmZpcnN0Q2hp
bGQsIGNvbnRyb2xJRCk7CiAgICAgaWYgKCFidXR0b24pCiAgICAgICAgIHRocm93ICJGYWlsZWQg
dG8gZmluZCBtZWRpYSBjb250cm9sIGVsZW1lbnQgSUQgJyIgKyBpZCArICInIjsKIApAQCAtMzIs
MyArMzIsMTIgQEAgZnVuY3Rpb24gbWVkaWFDb250cm9sc0J1dHRvbkNvb3JkaW5hdGVzKAogICAg
IHZhciB5ID0gYnV0dG9uQm91bmRpbmdSZWN0LnRvcCArIGJ1dHRvbkJvdW5kaW5nUmVjdC5oZWln
aHQgLyAyOwogICAgIHJldHVybiBuZXcgQXJyYXkoeCwgeSk7CiB9CisKK2Z1bmN0aW9uIHRleHRU
cmFja0Rpc3BsYXlFbGVtZW50KHBhcmVudEVsZW1lbnQpCit7CisgICAgdmFyIGNvbnRyb2xJRCA9
ICItd2Via2l0LW1lZGlhLXRleHQtdHJhY2stZGlzcGxheSI7CisgICAgdmFyIGRpc3BsYXlFbGVt
ZW50ID0gbWVkaWFDb250cm9sc0VsZW1lbnQoaW50ZXJuYWxzLnNoYWRvd1Jvb3QocGFyZW50RWxl
bWVudCkuZmlyc3RDaGlsZCwgY29udHJvbElEKTsKKyAgICBpZiAoIWRpc3BsYXlFbGVtZW50KQor
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRvIGZpbmQgbWVkaWEgY29udHJvbCBlbGVtZW50IElEICci
ICsgY29udHJvbElEICsgIiciOworICAgIHJldHVybiBkaXNwbGF5RWxlbWVudDsKK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFj
ay1jdWUtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9t
ZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACitUZXN0IHRoYXQgVGV4dFRyYWNrJ3Mg
Y3VlcyBhcmUgcmVuZGVyZWQgY29ycmVjdGx5LgorRVZFTlQoY2FucGxheXRocm91Z2gpCitFVkVO
VChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUgPT0gJzAuNScpIE9LCitFWFBF
Q1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoID09ICcxJykgT0sKK0VYUEVD
VEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRDdWVBc1NvdXJjZSgpID09ICdM
b3JlbScpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pLmlubmVy
VGV4dCA9PSAnTG9yZW0nKSBPSworCitSVU4odmlkZW8uY3VycmVudFRpbWUgPSAxLjUpCitFVkVO
VChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUgPT0gJzEuNScpIE9LCitFWFBF
Q1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoID09ICcxJykgT0sKK0VYUEVD
VEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRDdWVBc1NvdXJjZSgpID09ICdp
cHN1bScpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pLmlubmVy
VGV4dCA9PSAnaXBzdW0nKSBPSworCitSVU4odmlkZW8uY3VycmVudFRpbWUgPSAyLjUpCitFVkVO
VChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUgPT0gJzIuNScpIE9LCitFWFBF
Q1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoID09ICcxJykgT0sKK0VYUEVD
VEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRDdWVBc1NvdXJjZSgpID09ICdk
b2xvcicpIE9LCitFWFBFQ1RFRCAodGV4dFRyYWNrRGlzcGxheUVsZW1lbnQodmlkZW8pLmlubmVy
VGV4dCA9PSAnZG9sb3InKSBPSworCitSVU4odmlkZW8uY3VycmVudFRpbWUgPSAzLjUpCitFVkVO
VChzZWVrZWQpCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUgPT0gJzMuNScpIE9LCitFWFBF
Q1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoID09ICcxJykgT0sKK0VYUEVD
VEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS5nZXRDdWVBc1NvdXJjZSgpID09ICdz
aXQnKSBPSworRVhQRUNURUQgKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKS5pbm5lclRl
eHQgPT0gJ3NpdCcpIE9LCisKK1Rlc3QgdGhhdCB0aGUgY3VlIGRpc3BsYXkgZm9udCBzaXplIGlz
IHJlc2l6ZWQgYXMgdGhlIHZpZGVvIGVsZW1lbnQgcmVzaXplcy4KK1JVTih2aWRlby53aWR0aCA9
IDMyMCkKK1JVTih2aWRlby5oZWlnaHQgPSAyNDApCitFWFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHls
ZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXplID09ICcxNnB4JykgT0sK
KworUlVOKHZpZGVvLndpZHRoID0gNjQwKQorUlVOKHZpZGVvLmhlaWdodCA9IDQ4MCkKK0VYUEVD
VEVEIChnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvKSkuZm9u
dFNpemUgPT0gJzE5cHgnKSBPSworCitSVU4odmlkZW8ud2lkdGggPSAxMjgwKQorUlVOKHZpZGVv
LmhlaWdodCA9IDk2MCkKK0VYUEVDVEVEIChnZXRDb21wdXRlZFN0eWxlKHRleHRUcmFja0Rpc3Bs
YXlFbGVtZW50KHZpZGVvKSkuZm9udFNpemUgPT0gJzM4cHgnKSBPSworCitSVU4odmlkZW8ud2lk
dGggPSAyNTYwKQorUlVOKHZpZGVvLmhlaWdodCA9IDE0NDApCitFWFBFQ1RFRCAoZ2V0Q29tcHV0
ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXplID09ICc1OHB4
JykgT0sKK0VORCBPRiBURVNUCisKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNr
LWN1ZS1yZW5kZXJpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFj
ay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9t
ZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxt
ZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0
PXV0Zi04IiAvPgorCisgICAgICAgIDxzY3JpcHQgc3JjPS4uL21lZGlhLWZpbGUuanM+PC9zY3Jp
cHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPS4uL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAg
ICAgIDxzY3JpcHQgc3JjPS4uL21lZGlhLWNvbnRyb2xzLmpzPjwvc2NyaXB0PgorCisgICAgICAg
IDxzY3JpcHQ+ICAgICAgICAgICAgCisKKyAgICAgICAgdmFyIHRlc3RUcmFjazsKKyAgICAgICAg
dmFyIHNlZWtlZENvdW50ID0gMDsKKyAgICAgICAgdmFyIGluZm8gPSBbICJMb3JlbSIsICJpcHN1
bSIsICJkb2xvciIsICJzaXQiIF07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEZvbnRTaXplcygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGJyPlRlc3QgdGhhdCB0aGUg
Y3VlIGRpc3BsYXkgZm9udCBzaXplIGlzIHJlc2l6ZWQgYXMgdGhlIHZpZGVvIGVsZW1lbnQgcmVz
aXplcy4iKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8ud2lkdGggPSAzMjAiKTsKKyAgICAgICAg
ICAgIHJ1bigidmlkZW8uaGVpZ2h0ID0gMjQwIik7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5
Lm9mZnNldFRvcDsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiZ2V0Q29tcHV0ZWRTdHlsZSh0
ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXplIiwgIjE2cHgiKTsKKworICAg
ICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8ud2lkdGgg
PSA2NDAiKTsKKyAgICAgICAgICAgIHJ1bigidmlkZW8uaGVpZ2h0ID0gNDgwIik7CisgICAgICAg
ICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgi
Z2V0Q29tcHV0ZWRTdHlsZSh0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXpl
IiwgIjE5cHgiKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAg
IHJ1bigidmlkZW8ud2lkdGggPSAxMjgwIik7CisgICAgICAgICAgICBydW4oInZpZGVvLmhlaWdo
dCA9IDk2MCIpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoImdldENvbXB1dGVkU3R5bGUodGV4dFRyYWNrRGlzcGxheUVsZW1l
bnQodmlkZW8pKS5mb250U2l6ZSIsICIzOHB4Iik7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0
ZSgiIik7CisgICAgICAgICAgICBydW4oInZpZGVvLndpZHRoID0gMjU2MCIpOworICAgICAgICAg
ICAgcnVuKCJ2aWRlby5oZWlnaHQgPSAxNDQwIik7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5
Lm9mZnNldFRvcDsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiZ2V0Q29tcHV0ZWRTdHlsZSh0
ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbykpLmZvbnRTaXplIiwgIjU4cHgiKTsKKworICAg
ICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2Vla2Vk
KCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5jdXJyZW50VGlt
ZSIsIHNlZWtlZENvdW50ICsgLjUpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXN0VHJh
Y2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGgiLCAxKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3Rl
ZCgidGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0uZ2V0Q3VlQXNTb3VyY2UoKSIsIGluZm9b
c2Vla2VkQ291bnRdKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidGV4dFRyYWNrRGlzcGxh
eUVsZW1lbnQodmlkZW8pLmlubmVyVGV4dCIsIGluZm9bc2Vla2VkQ291bnRdKTsKKworICAgICAg
ICAgICAgaWYgKCsrc2Vla2VkQ291bnQgPT0gaW5mby5sZW5ndGgpCisgICAgICAgICAgICAgICAg
dGVzdEZvbnRTaXplcygpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29u
c29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgICAgICBydW4oInZpZGVvLmN1cnJlbnRUaW1lID0g
IiArICh2aWRlby5jdXJyZW50VGltZSArIDEpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIlRlc3QgdGhhdCBUZXh0VHJhY2sncyBj
dWVzIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBmaW5kTWVkaWFFbGVt
ZW50KCk7CisgICAgICAgICAgICB0ZXN0VHJhY2sgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
KCd0cmFjaycpWzBdOworICAgICAgICAgICAgdmlkZW8uc3JjID0gZmluZE1lZGlhRmlsZSgndmlk
ZW8nLCAnLi4vY29udGVudC90ZXN0Jyk7CisgICAgICAgICAgICB3YWl0Rm9yRXZlbnQoJ3NlZWtl
ZCcsIHNlZWtlZCk7CisgICAgICAgICAgICB3YWl0Rm9yRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJywg
ZnVuY3Rpb24oKSB7IHZpZGVvLmN1cnJlbnRUaW1lID0gLjU7IH0pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHkgb25sb2FkPSJs
b2FkZWQoKSI+CisgICAgICAgIDx2aWRlbyBjb250cm9scyA+CisgICAgICAgICAgICA8dHJhY2sg
c3JjPSJjYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMudnR0IiBraW5kPSJjYXB0aW9ucyIgZGVmYXVs
dD4KKyAgICAgICAgPC92aWRlbz4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMudnR0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy52dHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQv
Y2FwdGlvbnMudnR0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACivvu79XRUJWVFQKKwor
MQorMDA6MDA6MDAuMDAwIC0tPiAwMDowMDowMS4wMDAKK0xvcmVtCisKKzIKKzAwOjAwOjAxLjAw
MCAtLT4gMDA6MDA6MDIuMDAwCitpcHN1bQorCiszCiswMDowMDowMi4wMDAgLS0+IDAwOjAwOjAz
LjAwMAorZG9sb3IKKworNAorMDA6MDA6MDMuMDAwIC0tPiAwMDowMDowNC4wMDAKK3NpdAorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>