<?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>62883</bug_id>
          
          <creation_ts>2011-06-17 10:57:51 -0700</creation_ts>
          <short_desc>Implement storage and retrieval for text track cues.</short_desc>
          <delta_ts>2011-11-14 13:49:00 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>70451</dependson>
    
    <dependson>70452</dependson>
          <blocked>43668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anna Cavender">annacc</reporter>
          <assigned_to name="Anna Cavender">annacc</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>mike</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>422730</commentid>
    <comment_count>0</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-06-17 10:57:51 -0700</bug_when>
    <thetext>Track track cues that are parsed from out-of-band or in-band caption/subtitles need to be stored for efficient retrieval during playback.  Implement CueIndex, CueSet, and CueRange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440758</commentid>
    <comment_count>1</comment_count>
      <attachid>101679</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-21 17:51:02 -0700</bug_when>
    <thetext>Created attachment 101679
storage and retrieval for TextTrackCues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445901</commentid>
    <comment_count>2</comment_count>
      <attachid>101679</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-03 09:18:04 -0700</bug_when>
    <thetext>Comment on attachment 101679
storage and retrieval for TextTrackCues

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

&gt; Source/WebCore/html/TextTrack.h:81
&gt; +    Vector&lt;TextTrackCue*&gt; m_newestCues;

What keeps the TextTrackCue* alive in this Vector.  Are they owned (refed) by something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445919</commentid>
    <comment_count>3</comment_count>
      <attachid>101679</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-03 10:00:52 -0700</bug_when>
    <thetext>Comment on attachment 101679
storage and retrieval for TextTrackCues

Hi Sam, thanks for taking a look!  It occurred to me that you might not have the big-picture context that would make the review easier.  I&apos;ll send you more info in a separate email.
-Anna

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

&gt;&gt; Source/WebCore/html/TextTrack.h:81
&gt;&gt; +    Vector&lt;TextTrackCue*&gt; m_newestCues;
&gt; 
&gt; What keeps the TextTrackCue* alive in this Vector.  Are they owned (refed) by something else?

TextTrackCues are ultimately owned by TextTrackCueList (and each TextTrack has a TextTrackCueList).  In this case, m_newestCues is just a temporary storage used when notifying CueIndex that new cues have been loaded and need to be accounted for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447761</commentid>
    <comment_count>4</comment_count>
      <attachid>101679</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-07 11:41:26 -0700</bug_when>
    <thetext>Comment on attachment 101679
storage and retrieval for TextTrackCues

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests because feature is hidden behind VIDEO_TRACK feature
&gt; +        define, which is turned off.

This isn&apos;t accurate because you have tests for some features now. This comment should either point to existing tests that cover this functionality, or you should add new tests with this patch.


&gt; Source/WebCore/html/CueIndex.cpp:108
&gt; -void CueIndex::fetchNewCuesFromLoader(CueLoader*)
&gt; +void CueIndex::fetchNewCuesFromLoader(CueLoader* loader)
&gt;  {
&gt; -    // FIXME(62883): Implement.
&gt; +    Vector&lt;TextTrackCue*&gt; newCues;
&gt; +    loader-&gt;fetchNewestCues(newCues);
&gt; +    for (size_t i = 0; i &lt; newCues.size(); ++i)
&gt; +        add(newCues[i]);
&gt;  }

Is the client *required* to pull the cues from the loader at this point? If not, this name is misleading. Maybe newCuesAvailable?


&gt; Source/WebCore/html/LoadableTextTrack.cpp:85
&gt;  void LoadableTextTrack::newCuesLoaded()
&gt;  {
&gt; -    // FIXME(62885): Tell the client to fetch the latest cues.
&gt; +    m_client-&gt;fetchNewCuesFromLoader(this);
&gt;  }

Is there any reason to have a separate function for this? Why not call the client function directly from newCuesParsed?


&gt;&gt;&gt; Source/WebCore/html/TextTrack.h:81
&gt;&gt;&gt; +    Vector&lt;TextTrackCue*&gt; m_newestCues;
&gt;&gt; 
&gt;&gt; What keeps the TextTrackCue* alive in this Vector.  Are they owned (refed) by something else?
&gt; 
&gt; TextTrackCues are ultimately owned by TextTrackCueList (and each TextTrack has a TextTrackCueList).  In this case, m_newestCues is just a temporary storage used when notifying CueIndex that new cues have been loaded and need to be accounted for.

Here you have a vector of TextTrackCue raw pointers, but in the parser you have a vector of TextTrackCue ref pointers (from &quot;WebVTTParser.h: Vector&lt;RefPtr&lt;TextTrackCue&gt; &gt; m_cuelist&quot;). Why the difference?  You get the cues from the parser via fetchParsedCues which returns a vector of ref ptrs, but LoadableTextTrack::fetchNewestCues returns a vector of raw pointers. Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448452</commentid>
    <comment_count>5</comment_count>
      <attachid>103331</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-08 23:22:24 -0700</bug_when>
    <thetext>Created attachment 103331
addressing comments and adding check for TextTrackCue chrono order</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448454</commentid>
    <comment_count>6</comment_count>
      <attachid>101679</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-08 23:27:08 -0700</bug_when>
    <thetext>Comment on attachment 101679
storage and retrieval for TextTrackCues

Thanks for the feedback!

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

&gt;&gt; Source/WebCore/html/CueIndex.cpp:108
&gt;&gt;  }
&gt; 
&gt; Is the client *required* to pull the cues from the loader at this point? If not, this name is misleading. Maybe newCuesAvailable?

Done.

&gt;&gt; Source/WebCore/html/LoadableTextTrack.cpp:85
&gt;&gt;  }
&gt; 
&gt; Is there any reason to have a separate function for this? Why not call the client function directly from newCuesParsed?

Done.  Good call.

&gt;&gt;&gt;&gt; Source/WebCore/html/TextTrack.h:81
&gt;&gt;&gt;&gt; +    Vector&lt;TextTrackCue*&gt; m_newestCues;
&gt;&gt;&gt; 
&gt;&gt;&gt; What keeps the TextTrackCue* alive in this Vector.  Are they owned (refed) by something else?
&gt;&gt; 
&gt;&gt; TextTrackCues are ultimately owned by TextTrackCueList (and each TextTrack has a TextTrackCueList).  In this case, m_newestCues is just a temporary storage used when notifying CueIndex that new cues have been loaded and need to be accounted for.
&gt; 
&gt; Here you have a vector of TextTrackCue raw pointers, but in the parser you have a vector of TextTrackCue ref pointers (from &quot;WebVTTParser.h: Vector&lt;RefPtr&lt;TextTrackCue&gt; &gt; m_cuelist&quot;). Why the difference?  You get the cues from the parser via fetchParsedCues which returns a vector of ref ptrs, but LoadableTextTrack::fetchNewestCues returns a vector of raw pointers. Why?

Uh, yeah.  That was a mistake.  Changed to Vector&lt;RefPtr&lt;TextTrackCue&gt; &gt; m_newestCues;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448651</commentid>
    <comment_count>7</comment_count>
      <attachid>103331</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-09 10:15:56 -0700</bug_when>
    <thetext>Comment on attachment 103331
addressing comments and adding check for TextTrackCue chrono order

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

&gt; Source/WebCore/ChangeLog:26
&gt; +        * html/CueIndex.cpp:
&gt; +        * html/CueIndex.h:
&gt; +        * html/HTMLMediaElement.cpp:
&gt; +        * html/HTMLMediaElement.h:
&gt; +        * html/HTMLTrackElement.cpp:
&gt; +        * html/HTMLTrackElement.h:
&gt; +        * html/LoadableTextTrack.cpp:
&gt; +        * html/LoadableTextTrack.h:
&gt; +        * html/MutableTextTrack.cpp:
&gt; +        * html/MutableTextTrack.h:
&gt; +        * html/TextTrack.h:
&gt; +        * html/TextTrackCueList.cpp:
&gt; +        * html/TextTrackCueList.h:
&gt; +        * loader/CueLoader.h:
&gt; +        * platform/track/CueParser.cpp:
&gt; +        * platform/track/CueParser.h:

It would be great to have more comments in the change log about the changes you are making.

&gt; Source/WebCore/html/CueIndex.h:57
&gt;      HashSet&lt;TextTrackCue*&gt; m_set;

It would be good to add a comment about the lifetime of the objects in this set as well.

&gt; Source/WebCore/html/CueIndex.h:74
&gt; +    Vector&lt;TextTrackCue*&gt; m_cuesByStartTime;

Either you should be using a smart pointer for these TextTrackCues, or you should have a comment explaining the ownership/lifetime of the objects contained by the Vector.

&gt; Source/WebCore/html/HTMLTrackElement.cpp:138
&gt; +        if (hasAttribute(srcAttr)) {
&gt; +            m_track = LoadableTextTrack::create(kind(), label(), srclang(), isDefault());
&gt; +            m_track-&gt;load(getNonEmptyURLAttribute(srcAttr), context, cueClient);
&gt; +        }

It seems a shame to lookup the attribute twice here (once for hasAttribute, once for getNonEmptyURLAttribute).  It might also read better with an early return.

&gt; Source/WebCore/html/TextTrackCueList.h:57
&gt; +    void add(const PassRefPtr&lt;TextTrackCue&gt;);

There is no reason to pass a const PassRefPtr.

&gt; Source/WebCore/html/TextTrackCueList.h:59
&gt; +    void remove(const PassRefPtr&lt;TextTrackCue&gt;);

It seems unlikely that remove would hand over ownership of the TextTrackCue, so this should probably be a raw pointer.

&gt; Source/WebCore/html/TextTrackCueList.h:67
&gt; +    Vector &lt;RefPtr&lt;TextTrackCue&gt; &gt; m_list;

There should not be a space after the Vector and before the &lt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448996</commentid>
    <comment_count>8</comment_count>
      <attachid>103331</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-09 23:38:32 -0700</bug_when>
    <thetext>Comment on attachment 103331
addressing comments and adding check for TextTrackCue chrono order

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

&gt;&gt; Source/WebCore/ChangeLog:26
&gt;&gt; +        * platform/track/CueParser.h:
&gt; 
&gt; It would be great to have more comments in the change log about the changes you are making.

Done.

&gt;&gt; Source/WebCore/html/CueIndex.h:57

&gt; 
&gt; It would be good to add a comment about the lifetime of the objects in this set as well.

Done.  Added a comment describing CueSet and the lifetime of TextTrackCue objects.

&gt;&gt; Source/WebCore/html/CueIndex.h:74

&gt; 
&gt; Either you should be using a smart pointer for these TextTrackCues, or you should have a comment explaining the ownership/lifetime of the objects contained by the Vector.

Done.  Added a comment describing CueIndex and the lifetime responsibilities of TextTrackCues.  I hope it is clear.

&gt;&gt; Source/WebCore/html/HTMLTrackElement.cpp:138
&gt;&gt; +        }
&gt; 
&gt; It seems a shame to lookup the attribute twice here (once for hasAttribute, once for getNonEmptyURLAttribute).  It might also read better with an early return.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCueList.h:57
&gt;&gt; +    void add(const PassRefPtr&lt;TextTrackCue&gt;);
&gt; 
&gt; There is no reason to pass a const PassRefPtr.

Done.

&gt;&gt; Source/WebCore/html/TextTrackCueList.h:59
&gt;&gt; +    void remove(const PassRefPtr&lt;TextTrackCue&gt;);
&gt; 
&gt; It seems unlikely that remove would hand over ownership of the TextTrackCue, so this should probably be a raw pointer.

Done. Thanks.

&gt;&gt; Source/WebCore/html/TextTrackCueList.h:67
&gt;&gt; +    Vector &lt;RefPtr&lt;TextTrackCue&gt; &gt; m_list;
&gt; 
&gt; There should not be a space after the Vector and before the &lt;.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448997</commentid>
    <comment_count>9</comment_count>
      <attachid>103446</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-09 23:41:14 -0700</bug_when>
    <thetext>Created attachment 103446
addressing Sam&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457189</commentid>
    <comment_count>10</comment_count>
      <attachid>105263</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-25 15:35:48 -0700</bug_when>
    <thetext>Created attachment 105263
updating to ToT

I believe I&apos;ve addressed all concerns with this patch and it should be ready to go.  It just got a bit stale while I was on vacation, sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458666</commentid>
    <comment_count>11</comment_count>
      <attachid>105263</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-29 20:28:15 -0700</bug_when>
    <thetext>Comment on attachment 105263
updating to ToT

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Test: any tests in media/track, but especially
&gt; +        media/track/track-webvtt-tc012-outoforder.html

I don&apos;t get how this is being tested by these.  Do their results change?

&gt; Source/WebCore/ChangeLog:28
&gt; +        * html/CueIndex.cpp:
&gt; +        * html/CueIndex.h:
&gt; +        * html/HTMLMediaElement.cpp:
&gt; +        * html/HTMLMediaElement.h:
&gt; +        * html/HTMLTrackElement.cpp:
&gt; +        * html/HTMLTrackElement.h:
&gt; +        * html/LoadableTextTrack.cpp:
&gt; +        * html/LoadableTextTrack.h:
&gt; +        * html/MutableTextTrack.cpp:
&gt; +        * html/MutableTextTrack.h:
&gt; +        * html/TextTrack.h:
&gt; +        * html/TextTrackCueList.cpp:
&gt; +        * html/TextTrackCueList.h:
&gt; +        * loader/CueLoader.h:
&gt; +        * platform/track/CueParser.cpp:
&gt; +        * platform/track/CueParser.h:

It would be helpful to have function by function explanation in your changelog.

&gt; Source/WebCore/html/TextTrackCueList.cpp:56
&gt; +    return m_list[index].get();

This probably needs to handle the case that the index is out of range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459050</commentid>
    <comment_count>12</comment_count>
      <attachid>105658</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-30 11:44:36 -0700</bug_when>
    <thetext>Created attachment 105658
addressing Sam&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459053</commentid>
    <comment_count>13</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-30 11:49:11 -0700</bug_when>
    <thetext>Thanks Sam for the review!

(In reply to comment #11)
&gt; (From update of attachment 105263 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105263&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        Test: any tests in media/track, but especially
&gt; &gt; +        media/track/track-webvtt-tc012-outoforder.html
&gt; 
&gt; I don&apos;t get how this is being tested by these.  Do their results change?

You&apos;re right it&apos;s not clear since not all the code for the &lt;track&gt; feature is up.  All the tests will store and retrieve TextTrackCues to/from the TextTrackCueList, so that part is being tested.  The CueIndex is not being tested because the code that will use it in HTMLMediaElement is not submitted yet.  I think it would be best to include tests with that patch (coming soon).  Sound ok?

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:28
&gt; &gt; +        * html/CueIndex.cpp:
&gt; &gt; +        * html/CueIndex.h:
&gt; &gt; +        * html/HTMLMediaElement.cpp:
&gt; &gt; +        * html/HTMLMediaElement.h:
&gt; &gt; +        * html/HTMLTrackElement.cpp:
&gt; &gt; +        * html/HTMLTrackElement.h:
&gt; &gt; +        * html/LoadableTextTrack.cpp:
&gt; &gt; +        * html/LoadableTextTrack.h:
&gt; &gt; +        * html/MutableTextTrack.cpp:
&gt; &gt; +        * html/MutableTextTrack.h:
&gt; &gt; +        * html/TextTrack.h:
&gt; &gt; +        * html/TextTrackCueList.cpp:
&gt; &gt; +        * html/TextTrackCueList.h:
&gt; &gt; +        * loader/CueLoader.h:
&gt; &gt; +        * platform/track/CueParser.cpp:
&gt; &gt; +        * platform/track/CueParser.h:
&gt; 
&gt; It would be helpful to have function by function explanation in your changelog.

Done.

&gt; 
&gt; &gt; Source/WebCore/html/TextTrackCueList.cpp:56
&gt; &gt; +    return m_list[index].get();
&gt; 
&gt; This probably needs to handle the case that the index is out of range.

Good catch, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486980</commentid>
    <comment_count>14</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-10-19 13:58:56 -0700</bug_when>
    <thetext>Loading and caching of TextTrackCue has been revamped - thanks eric.carlson!
http://trac.webkit.org/changeset/97773
http://trac.webkit.org/changeset/97637

I&apos;m going to split this bug up in to two patches: one for CueIndex and one for TextTrackCueList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502276</commentid>
    <comment_count>15</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-11-14 13:49:00 -0800</bug_when>
    <thetext>*** Bug 62885 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101679</attachid>
            <date>2011-07-21 17:51:02 -0700</date>
            <delta_ts>2011-08-08 23:27:08 -0700</delta_ts>
            <desc>storage and retrieval for TextTrackCues</desc>
            <filename>bug-62883-20110721175100.patch</filename>
            <type>text/plain</type>
            <size>19044</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE0NzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OTQwZTI1YTYyMjdiNjY4
MWVkMzQzNzQxMjdkYjk2OGMzZWRkZWEwLi4zNTZlMGVhNjliNmJhMDdkMDUzYTk4N2Y0NmY4ODU2
OTg1YjczNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDctMjEgIEFubmEg
Q2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN0b3JhZ2Ugb2YgVGV4
dFRyYWNrQ3VlcyBmb3IgZWZmaWNpZW50IHJldHJpZXZhbCBkdXJpbmcgcGxheWJhY2suCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjg4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBi
ZWNhdXNlIGZlYXR1cmUgaXMgaGlkZGVuIGJlaGluZCBWSURFT19UUkFDSyBmZWF0dXJlCisgICAg
ICAgIGRlZmluZSwgd2hpY2ggaXMgdHVybmVkIG9mZi4KKworICAgICAgICAqIGh0bWwvQ3VlSW5k
ZXguY3BwOgorICAgICAgICAqIGh0bWwvQ3VlSW5kZXguaDoKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVHJh
Y2tFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHA6CisgICAg
ICAgICogaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5oOgorICAgICAgICAqIGh0bWwvVGV4dFRyYWNr
Lmg6CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmNwcDoKKyAgICAgICAgKiBodG1s
L1RleHRUcmFja0N1ZUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oOgorICAgICAgICAqIHBs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaDoKKwogMjAxMS0wNy0yMSAgUGF2ZWwgRmVs
ZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkOiBvbmUg
bGluZXIgdHlwbyBmaXggaW4gSW5zcGVjdG9yLmpzb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0N1ZUluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VlSW5kZXguY3Bw
CmluZGV4IDMzY2Y5MmU1YzE1MDY5ZmQzYjNlZWQyNzM0MjI5Y2JkY2RmNmM5M2IuLmMwZWFkZmQ2
M2Q1NDQ3ZTRjNDVjZGUzMTEyY2VjZDg5MWY0MmRkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQ3VlSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VlSW5kZXgu
Y3BwCkBAIC0zNCw1NCArMzQsODMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DdWVTZXQg
Q3VlU2V0OjpkaWZmZXJlbmNlKGNvbnN0IEN1ZVNldCYpIGNvbnN0CitDdWVTZXQgQ3VlU2V0Ojpk
aWZmZXJlbmNlKGNvbnN0IEN1ZVNldCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUoNjI4
ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIEN1ZVNldCgpOworICAgIEN1ZVNldCBuZXdTZXQ7
CisgICAgZm9yIChDdWVTZXQ6Okl0ZXJhdG9yIGl0ID0gb3RoZXIubV9zZXQuYmVnaW4oKTsgaXQg
IT0gb3RoZXIubV9zZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUg
PSAqaXQ7CisgICAgICAgIGlmICghbV9zZXQuY29udGFpbnMoY3VlKSkKKyAgICAgICAgICAgIG5l
d1NldC5hZGQoKmN1ZSk7CisgICAgfQorICAgIHJldHVybiBuZXdTZXQ7CiB9CiAKLUN1ZVNldCBD
dWVTZXQ6OnVuaW9uU2V0KGNvbnN0IEN1ZVNldCYpIGNvbnN0CitDdWVTZXQgQ3VlU2V0Ojp1bmlv
blNldChjb25zdCBDdWVTZXQmIG90aGVyKSBjb25zdAogewotICAgIC8vIEZJWE1FKDYyODgzKTog
SW1wbGVtZW50LgotICAgIHJldHVybiBDdWVTZXQoKTsKKyAgICBDdWVTZXQgbmV3U2V0OworICAg
IGZvciAoQ3VlU2V0OjpJdGVyYXRvciBpdCA9IG90aGVyLm1fc2V0LmJlZ2luKCk7IGl0ICE9IG90
aGVyLm1fc2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0gKml0
OworICAgICAgICBuZXdTZXQuYWRkKCpjdWUpOworICAgIH0KKyAgICBmb3IgKEN1ZVNldDo6SXRl
cmF0b3IgaXQgPSBtX3NldC5iZWdpbigpOyBpdCAhPSBtX3NldC5lbmQoKTsgKytpdCkgeworICAg
ICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9ICppdDsKKyAgICAgICAgbmV3U2V0LmFkZCgqY3VlKTsK
KyAgICB9CisgICAgcmV0dXJuIG5ld1NldDsKIH0KIAotdm9pZCBDdWVTZXQ6OmFkZChjb25zdCBU
ZXh0VHJhY2tDdWUmKQordm9pZCBDdWVTZXQ6OmFkZChjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkK
IHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAgICBtX3NldC5hZGQoY29uc3Rf
Y2FzdDxUZXh0VHJhY2tDdWUqPigmY3VlKSk7CiB9CiAKLWJvb2wgQ3VlU2V0Ojpjb250YWlucyhj
b25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdAorYm9vbCBDdWVTZXQ6OmNvbnRhaW5zKGNvbnN0IFRl
eHRUcmFja0N1ZSYgY3VlKSBjb25zdAogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50
LgotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zZXQuY29udGFpbnMoY29uc3RfY2Fz
dDxUZXh0VHJhY2tDdWUqPigmY3VlKSk7CiB9CiAKLXZvaWQgQ3VlU2V0OjpyZW1vdmUoY29uc3Qg
VGV4dFRyYWNrQ3VlJikKK3ZvaWQgQ3VlU2V0OjpyZW1vdmUoY29uc3QgVGV4dFRyYWNrQ3VlJiBj
dWUpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCisgICAgbV9zZXQucmVtb3Zl
KGNvbnN0X2Nhc3Q8VGV4dFRyYWNrQ3VlKj4oJmN1ZSkpOworfQorCit2b2lkIEN1ZVNldDo6Y2xl
YXIoKQoreworICAgIG1fc2V0LmNsZWFyKCk7CiB9CiAKIGJvb2wgQ3VlU2V0Ojppc0VtcHR5KCkg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1fc2V0LmlzRW1wdHkoKTsKIH0KIAogaW50IEN1ZVNldDo6c2l6ZSgp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG1fc2V0LnNpemUoKTsKK30KKworQ3VlU2V0OjpJdGVyYXRvciBDdWVTZXQ6
OmJlZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZXQuYmVnaW4oKTsKK30KKworQ3VlU2V0
OjpJdGVyYXRvciBDdWVTZXQ6OmVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2V0LmVuZCgp
OwogfQogCi12b2lkIEN1ZUluZGV4OjpmZXRjaE5ld0N1ZXNGcm9tTG9hZGVyKEN1ZUxvYWRlciop
Cit2b2lkIEN1ZUluZGV4OjpmZXRjaE5ld0N1ZXNGcm9tTG9hZGVyKEN1ZUxvYWRlciogbG9hZGVy
KQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIFZlY3RvcjxUZXh0VHJh
Y2tDdWUqPiBuZXdDdWVzOworICAgIGxvYWRlci0+ZmV0Y2hOZXdlc3RDdWVzKG5ld0N1ZXMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3Q3Vlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
YWRkKG5ld0N1ZXNbaV0pOwogfQogCi12b2lkIEN1ZUluZGV4OjpyZW1vdmVDdWVzRnJvbUluZGV4
KGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqKQordm9pZCBDdWVJbmRleDo6cmVtb3ZlQ3Vlc0Zyb21J
bmRleChjb25zdCBUZXh0VHJhY2tDdWVMaXN0KiBjdWVMaXN0KQogewotICAgIC8vIEZJWE1FKDYy
ODgzKTogSW1wbGVtZW50LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VlTGlzdC0+bGVu
Z3RoKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGN1ZUxpc3QtPml0ZW0oaSkpOwogfQogCiBDdWVT
ZXQgQ3VlSW5kZXg6OnZpc2libGVDdWVzQXRUaW1lKGRvdWJsZSkgY29uc3QKQEAgLTkwLDE0ICsx
MTksMzIgQEAgQ3VlU2V0IEN1ZUluZGV4Ojp2aXNpYmxlQ3Vlc0F0VGltZShkb3VibGUpIGNvbnN0
CiAgICAgcmV0dXJuIEN1ZVNldCgpOwogfQogCi12b2lkIEN1ZUluZGV4OjphZGQoVGV4dFRyYWNr
Q3VlKikKK3ZvaWQgQ3VlSW5kZXg6OmFkZChUZXh0VHJhY2tDdWUqIGN1ZSkKK3sKKyAgICBhZGQo
Y3VlLCAwLCBtX2N1ZXNCeVN0YXJ0VGltZS5zaXplKCkpOworfQorCit2b2lkIEN1ZUluZGV4Ojph
ZGQoVGV4dFRyYWNrQ3VlKiBjdWUsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkKIHsKLSAgICAv
LyBGSVhNRSg2Mjg5MCk6IEltcGxlbWVudC4KKyAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CisgICAg
ICAgbV9jdWVzQnlTdGFydFRpbWUuaW5zZXJ0KHN0YXJ0LCBjdWUpOworICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzaXplX3QgaW5kZXggPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICBpZiAo
Y3VlLT5zdGFydFRpbWUoKSA8IG1fY3Vlc0J5U3RhcnRUaW1lW2luZGV4XS0+c3RhcnRUaW1lKCkK
KyAgICAgICAgfHwgKGN1ZS0+c3RhcnRUaW1lKCkgPT0gbV9jdWVzQnlTdGFydFRpbWVbaW5kZXhd
LT5zdGFydFRpbWUoKQorICAgICAgICAmJiBjdWUtPmVuZFRpbWUoKSA8IG1fY3Vlc0J5U3RhcnRU
aW1lW2luZGV4XS0+ZW5kVGltZSgpKSkKKyAgICAgICAgYWRkKGN1ZSwgc3RhcnQsIGluZGV4KTsK
KyAgICBlbHNlCisgICAgICAgIGFkZChjdWUsIGluZGV4ICsgMSwgZW5kKTsKIH0KIAotdm9pZCBD
dWVJbmRleDo6cmVtb3ZlKFRleHRUcmFja0N1ZSopCit2b2lkIEN1ZUluZGV4OjpyZW1vdmUoVGV4
dFRyYWNrQ3VlKiBjdWUpCiB7Ci0gICAgLy8gRklYTUUoNjI4OTApOiBJbXBsZW1lbnQuCisgICAg
c2l6ZV90IGluZGV4ID0gbV9jdWVzQnlTdGFydFRpbWUuZmluZChjdWUpOworICAgIGlmIChpbmRl
eCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9jdWVzQnlTdGFydFRpbWUucmVtb3ZlKGluZGV4KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9DdWVJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJbmRleC5oCmluZGV4IDg2
MmUyZGE0OWMyYzkzMjZmYTk1OGEwZGNhMzFlNWM0MTgwOWEwY2QuLmM3YzhjODdmZmY3MzdmOGFk
YjVlOTY5NWU0ZWU2YTBhNmM1ODdlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q3VlSW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNpbmNsdWRlICJDdWVMb2FkZXIu
aCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICszOSw3IEBAIGNsYXNzIFRleHRUcmFja0N1
ZUxpc3Q7CiAKIGNsYXNzIEN1ZVNldCB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoU2V0PFRl
eHRUcmFja0N1ZSo+OjppdGVyYXRvciBJdGVyYXRvcjsKICAgICBDdWVTZXQoKSB7IH0KICAgICB+
Q3VlU2V0KCkgeyB9CiAgICAgQ3VlU2V0IGRpZmZlcmVuY2UoY29uc3QgQ3VlU2V0JikgY29uc3Q7
CkBAIC00NSw4ICs0NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoY29uc3QgVGV4dFRyYWNr
Q3VlJik7CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdDsKICAg
ICB2b2lkIHJlbW92ZShjb25zdCBUZXh0VHJhY2tDdWUmKTsKKyAgICB2b2lkIGNsZWFyKCk7CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgaW50IHNpemUoKSBjb25zdDsKKyAgICBJdGVy
YXRvciBiZWdpbigpIGNvbnN0OworICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCiBwcml2YXRl
OgogICAgIEhhc2hTZXQ8VGV4dFRyYWNrQ3VlKj4gbV9zZXQ7CiB9OwpAQCAtNjEsNiArNjcsMTEg
QEAgcHVibGljOgogICAgIEN1ZVNldCB2aXNpYmxlQ3Vlc0F0VGltZShkb3VibGUpIGNvbnN0Owog
ICAgIHZvaWQgYWRkKFRleHRUcmFja0N1ZSopOwogICAgIHZvaWQgcmVtb3ZlKFRleHRUcmFja0N1
ZSopOworCitwcml2YXRlOgorICAgIHZvaWQgYWRkKFRleHRUcmFja0N1ZSosIHNpemVfdCBzdGFy
dCwgc2l6ZV90IGVuZCk7CisgICAgICAgIAorICAgIFZlY3RvcjxUZXh0VHJhY2tDdWUqPiBtX2N1
ZXNCeVN0YXJ0VGltZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDA0YzYwODk1NWMxZmZmZjJmZGJmZmU2
MjBjYjJhMWFlZGFiMGU5MTIuLjAyODJhNGQxYmRjYTEwM2NjZmZlNDFkNGMyNDcwMjNlMDNlODI3
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNzkzLDcg
Kzc5Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFRleHRUcmFja3MoKQogICAgIGZv
ciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKSB7CiAgICAg
ICAgICAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFjayA9IHN0YXRpY19jYXN0PEhUTUxUcmFja0Vs
ZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIHRyYWNrLT5sb2FkKEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgICAgIHRyYWNrLT5sb2FkKEFjdGl2
ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAmbV9jdWVJbmRleCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4
IGJjN2JmMzY3Nzk5NjMwMDIxMjhlY2RmNTlmZmVmZTlkMjFjMDRmZDYuLjM3ZDlmZDM5OTQxODE5
MDc5YTIyNjIyZjVjYmJiMjg2NTQyMWU3NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJveHku
aCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorI2luY2x1ZGUgIkN1ZUluZGV4
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKQEAgLTQz
MCw2ICs0MzQsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdl
c3R1cmUgOiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKICAgICBib29sIG1f
aGF2ZVByZXBhcmVkVG9QbGF5IDogMTsKKyAgICAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgQ3VlSW5kZXggbV9jdWVJbmRleDsKKyNlbmRpZgogfTsKIAogfSAvL25hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKaW5kZXggM2FhYmFjYzM1ZWM2YTZm
MzA1ZGY3ZGU1MzJkZGMxZDRjNzg1ZTQzNS4uMDhkM2QzODlhYWY2MjI5MGRhNDMwNmViZWIwNGU5
NzNhOWRiMTg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCkBA
IC0xMjcsMTIgKzEyNywxNCBAQCBib29sIEhUTUxUcmFja0VsZW1lbnQ6OmlzVVJMQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cmlidXRlKSBjb25zdAogICAgIHJldHVybiBhdHRyaWJ1dGUtPm5hbWUo
KSA9PSBzcmNBdHRyOwogfQogCi12b2lkIEhUTUxUcmFja0VsZW1lbnQ6OmxvYWQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKK3ZvaWQgSFRNTFRyYWNrRWxlbWVudDo6bG9hZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDdWVMb2FkZXJDbGllbnQqIGN1ZUNsaWVudCkK
IHsKLSAgICBtX3RyYWNrID0gTG9hZGFibGVUZXh0VHJhY2s6OmNyZWF0ZShraW5kKCksIGxhYmVs
KCksIHNyY2xhbmcoKSwgaXNEZWZhdWx0KCkpOwotCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShzcmNB
dHRyKSkKLSAgICAgICAgbV90cmFjay0+bG9hZChnZXROb25FbXB0eVVSTEF0dHJpYnV0ZShzcmNB
dHRyKSwgY29udGV4dCk7CisgICAgaWYgKCFtX3RyYWNrKSB7CisgICAgICAgIGlmIChoYXNBdHRy
aWJ1dGUoc3JjQXR0cikpIHsKKyAgICAgICAgICAgIG1fdHJhY2sgPSBMb2FkYWJsZVRleHRUcmFj
azo6Y3JlYXRlKGtpbmQoKSwgbGFiZWwoKSwgc3JjbGFuZygpLCBpc0RlZmF1bHQoKSk7CisgICAg
ICAgICAgICBtX3RyYWNrLT5sb2FkKGdldE5vbkVtcHR5VVJMQXR0cmlidXRlKHNyY0F0dHIpLCBj
b250ZXh0LCBjdWVDbGllbnQpOworICAgICAgICB9CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCmluZGV4IDk0NjU2NDJlNTY3NTc1NjA4YTY0NjhkMzAz
Zjg0ZGFkNjhiNzVjOWIuLjcyM2I4MmJlMzMxZmExNzc2YmJkODFiYjBmYTlmM2FiZmY3ODVlZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCkBAIC0zMyw2ICszMyw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3VlTG9hZGVyQ2xpZW50OworCiBjbGFz
cyBIVE1MVHJhY2tFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxIVE1MVHJhY2tFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CkBAIC00OSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExhYmVsKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SXNEZWZhdWx0KGJvb2wpOwogICAg
IAotICAgIHZvaWQgbG9hZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdm9pZCBsb2Fk
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVMb2FkZXJDbGllbnQqKTsKIAogcHJpdmF0ZToK
ICAgICBIVE1MVHJhY2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCA0ZWIyNDg1YzRi
NTA2ZGJlODgxMTJhMjczODlmZjlmZTM0YTk4MzE5Li5jNzVkYzMzMzBjN2FkMmI5MDIxMmUxZmQ1
MTQ2N2Y5OTcxOTk5MGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxl
VGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNr
LmNwcApAQCAtMzUsMjUgKzM1LDMzIEBAIExvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRU
cmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvCiAgICAgOiBU
ZXh0VHJhY2soa2luZCwgbGFiZWwsIGxhbmd1YWdlKQogICAgICwgbV9pc0RlZmF1bHQoaXNEZWZh
dWx0KQogeworICAgIG1fY3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0ZSgpOwogfQogCiBM
b2FkYWJsZVRleHRUcmFjazo6fkxvYWRhYmxlVGV4dFRyYWNrKCkKIHsKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVDdWVzRnJvbUluZGV4KG1fY3Vlcy5nZXQoKSk7
CiB9CiAKLXZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjps
b2FkKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBD
dWVMb2FkZXJDbGllbnQqIGNsaWVudCkKIHsKKyAgICBzZXRDdWVMb2FkZXJDbGllbnQoY2xpZW50
KTsKICAgICByZXR1cm4gbV9wYXJzZXIubG9hZCh1cmwsIGNvbnRleHQsIHRoaXMpOwogfQogCi1i
b29sIExvYWRhYmxlVGV4dFRyYWNrOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB1cmwpCi17
Ci0gICAgcmV0dXJuIG1fcGFyc2VyLnN1cHBvcnRzVHlwZSh1cmwpOwotfQotCiB2b2lkIExvYWRh
YmxlVGV4dFRyYWNrOjpuZXdDdWVzUGFyc2VkKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEZl
dGNoIG5ldyBjdWVzIGZyb20gcGFyc2VyIGFuZCB0ZW1wb3JhcmlseSBzdG9yZSB0byBnaXZlIHRv
IEN1ZUxvYWRlckNsaWVudCB3aGVuIGZldGNoTmV3Q3Vlc0Zyb21Mb2FkZXIgaXMgY2FsbGVkLgor
ICAgIC8vIEZldGNoIG5ldyBjdWVzIGZyb20gcGFyc2VyIGFuZCB0ZW1wb3JhcmlseSBzdG9yZSB0
byBnaXZlIHRvIEN1ZUxvYWRlckNsaWVudCB3aGVuIGZldGNoTmV3Q3Vlc0Zyb21Mb2FkZXIgaXMg
Y2FsbGVkLgorICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+IG5ld0N1ZXM7CisgICAg
bV9wYXJzZXIuZmV0Y2hQYXJzZWRDdWVzKG5ld0N1ZXMpOworICAgIGZvciAoVmVjdG9yPFJlZlB0
cjxUZXh0VHJhY2tDdWU+ID46Oml0ZXJhdG9yIGl0ID0gbmV3Q3Vlcy5iZWdpbigpOyBpdCA8IG5l
d0N1ZXMuZW5kKCk7IGl0KyspIHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0g
Kml0OworICAgICAgICBjdWUtPnNldFRyYWNrKHRoaXMpOworICAgICAgICBtX25ld2VzdEN1ZXMu
YXBwZW5kKGN1ZS5nZXQoKSk7CisgICAgfQorICAgIG1fY3Vlcy0+YWRkKG5ld0N1ZXMpOworICAg
IG5ld0N1ZXNMb2FkZWQoKTsKIH0KIAogdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6dHJhY2tMb2Fk
U3RhcnRlZCgpCkBAIC03MywxMiArODEsMTQgQEAgdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6dHJh
Y2tMb2FkQ29tcGxldGVkKCkKIAogdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6bmV3Q3Vlc0xvYWRl
ZCgpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODUpOiBUZWxsIHRoZSBjbGllbnQgdG8gZmV0Y2ggdGhl
IGxhdGVzdCBjdWVzLgorICAgIG1fY2xpZW50LT5mZXRjaE5ld0N1ZXNGcm9tTG9hZGVyKHRoaXMp
OwogfQogCi12b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpmZXRjaE5ld2VzdEN1ZXMoVmVjdG9yPFRl
eHRUcmFja0N1ZSo+JikKK3ZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmZldGNoTmV3ZXN0Q3VlcyhW
ZWN0b3I8VGV4dFRyYWNrQ3VlKj4mIG91dHB1dCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4NSk6IElt
cGxlbWVudC4KKyAgICBmb3IgKFZlY3RvcjxUZXh0VHJhY2tDdWUqPjo6aXRlcmF0b3IgaXQgPSBt
X25ld2VzdEN1ZXMuYmVnaW4oKTsgaXQgPCBtX25ld2VzdEN1ZXMuZW5kKCk7IGl0KyspCisgICAg
ICAgIG91dHB1dC5hcHBlbmQoKml0KTsKKyAgICBtX25ld2VzdEN1ZXMuY2xlYXIoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9M
b2FkYWJsZVRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFj
ay5oCmluZGV4IGM1NWVkMjZhNmEyYTA1MjY0ZDI0N2YwMTUwNmJhZjA4MzFiNTk4ZjAuLjEwYmEx
Zjc1ZTM1NTIwYTY2NTFlY2E4NTYxOGVkNWJhMDExNzA4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTG9hZGFibGVUZXh0VHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0xvYWRhYmxlVGV4dFRyYWNrLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIH0KICAg
ICB2aXJ0dWFsIH5Mb2FkYWJsZVRleHRUcmFjaygpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0
cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB2b2lkIGxvYWQoY29uc3QgU3Ry
aW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEN1ZUxvYWRlckNsaWVudCopOwogICAgIGJv
b2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdmlydHVhbCB2b2lkIG5ld0N1
ZXNQYXJzZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oCmluZGV4IDlhODJmODNlZTFmNzJkYWVk
NmM2MmMxMDBiNWI1NDA3MzgxMGZmYTIuLmExYjYwZjBiZDUwOWU2NmMwNmIwNzYwY2QwYjViYjQ0
MzgxMDFhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2suaApAQCAtMzYsNiArMzYsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0VHJhY2s7CitjbGFzcyBUZXh0VHJhY2tDdWU7
CiBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0OwogCiBjbGFzcyBUZXh0VHJhY2tDbGllbnQgewpAQCAt
NzcsNiArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRSZWFkeVN0YXRlKFJlYWR5U3Rh
dGUpOwogCiAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IG1fY3VlczsKKyAgICBWZWN0b3I8
VGV4dFRyYWNrQ3VlKj4gbV9uZXdlc3RDdWVzOwogCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2tp
bmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmNwcAppbmRleCA5YTA2YmQ1
MTZjOWZlMDlmYWMwNjhjMzVkN2QyNWYwYmVkMjk5ZjZjLi45OTNjNjJmODdhNGU2NzBmZTNlZjJj
MDkyNTQ2YjBkZjkxZTQ3ZDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRU
cmFja0N1ZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlz
dC5jcHAKQEAgLTMzLDI4ICszMyw3MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRleHRUcmFj
a0N1ZUxpc3Q6OlRleHRUcmFja0N1ZUxpc3QoKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1w
bGVtZW50LgogfQogCi1UZXh0VHJhY2tDdWUqIFRleHRUcmFja0N1ZUxpc3Q6OmdldEN1ZUJ5SWQo
Y29uc3QgU3RyaW5nJikgY29uc3QKK3Vuc2lnbmVkIGxvbmcgVGV4dFRyYWNrQ3VlTGlzdDo6bGVu
Z3RoKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAgICByZXR1
cm4gbV9saXN0LnNpemUoKTsKK30KKworVGV4dFRyYWNrQ3VlKiBUZXh0VHJhY2tDdWVMaXN0Ojpn
ZXRDdWVCeUlkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7CisgICAgZm9yIChWZWN0b3I8UmVm
UHRyPFRleHRUcmFja0N1ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xpc3QuYmVnaW4oKTsg
aXQgIT0gbV9saXN0LmVuZCgpOyBpdCsrKSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0g
aXQtPmdldCgpOworICAgICAgICBpZiAoY3VlLT5pZCgpID09IGlkKQorICAgICAgICAgICAgcmV0
dXJuIGN1ZTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlTGlz
dDo6YXBwZW5kKFZlY3RvcjxQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpCitUZXh0VHJhY2tD
dWUqIFRleHRUcmFja0N1ZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGlzdFtpbmRleF0uZ2V0KCk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6
YWRkKGNvbnN0IFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBuZXdDdWVzKQoreworICAg
IGZvciAoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bmV3Q3Vlcy5iZWdpbigpOyBpdCAhPSBuZXdDdWVzLmVuZCgpOyBpdCsrKQorICAgICAgICBhZGQo
Kml0KTsKK30KKwordm9pZCBUZXh0VHJhY2tDdWVMaXN0OjphZGQoY29uc3QgUGFzc1JlZlB0cjxU
ZXh0VHJhY2tDdWU+IGN1ZSkKK3sKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBuZXdDdWUgPSBj
dWU7CisgICAgYWRkKG5ld0N1ZSwgMCwgbV9saXN0LnNpemUoKSk7Cit9CisKK3ZvaWQgVGV4dFRy
YWNrQ3VlTGlzdDo6YWRkKGNvbnN0IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUsIHNpemVf
dCBzdGFydCwgc2l6ZV90IGVuZCkKK3sKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBuZXdDdWUg
PSBjdWU7CisgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgIG1fbGlzdC5pbnNlcnQoc3Rh
cnQsIG5ld0N1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBpbmRleCA9
IChzdGFydCArIGVuZCkgLyAyOworICAgIGlmIChuZXdDdWUtPnN0YXJ0VGltZSgpIDwgbV9saXN0
W2luZGV4XS0+c3RhcnRUaW1lKCkKKyAgICAgICAgfHwgKG5ld0N1ZS0+c3RhcnRUaW1lKCkgPT0g
bV9saXN0W2luZGV4XS0+c3RhcnRUaW1lKCkKKyAgICAgICAgJiYgbmV3Q3VlLT5lbmRUaW1lKCkg
PCBtX2xpc3RbaW5kZXhdLT5lbmRUaW1lKCkpKQorICAgICAgICBhZGQobmV3Q3VlLCBzdGFydCwg
aW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgYWRkKG5ld0N1ZSwgaW5kZXggKyAxLCBlbmQpOwor
fQorCit2b2lkIFRleHRUcmFja0N1ZUxpc3Q6OnJlbW92ZShjb25zdCBQYXNzUmVmUHRyPFRleHRU
cmFja0N1ZT4gY3VlKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIFJl
ZlB0cjxUZXh0VHJhY2tDdWU+IHJlbW92ZUN1ZSA9IGN1ZTsKKyAgICByZW1vdmVDdWUtPnNldElz
QWN0aXZlKGZhbHNlKTsKKyAgICBtX2xpc3QucmVtb3ZlKG1fbGlzdC5maW5kKHJlbW92ZUN1ZSkp
OwogfQogCi12b2lkIFRleHRUcmFja0N1ZUxpc3Q6OmFwcGVuZChjb25zdCBQYXNzUmVmUHRyPFRl
eHRUcmFja0N1ZT4mKQorVGV4dFRyYWNrQ3VlTGlzdDo6SXRlcmF0b3IgVGV4dFRyYWNrQ3VlTGlz
dDo6YmVnaW4oKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIHJldHVy
biBtX2xpc3QuYmVnaW4oKTsKIH0KIAotdm9pZCBUZXh0VHJhY2tDdWVMaXN0OjpyZW1vdmUoY29u
c3QgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+JikKK1RleHRUcmFja0N1ZUxpc3Q6Okl0ZXJhdG9y
IFRleHRUcmFja0N1ZUxpc3Q6OmVuZCgpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1l
bnQuCisgICAgcmV0dXJuIG1fbGlzdC5lbmQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuaAppbmRleCAzYjM3ZTQ0ZjVjNGFk
ZjYwZDc4OGMxMjE5NzY3ZTVlMzk2YzU5YzFlLi42NjYxNTM5ZmRkZDc4NjY1MWY5MGQ3YmExNmZj
ZTEwNTRhNGI2Mjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1
ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuaApAQCAt
MzcsMjEgKzM3LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGV4dFRyYWNrQ3Vl
TGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRUcmFja0N1ZUxpc3Q+IHsKIHB1YmxpYzoKKyAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+OjppdGVyYXRvciBJdGVyYXRv
cjsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IGNyZWF0ZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZUxpc3QpOwogICAg
IH0KKyAgICAKKyAgICB+VGV4dFRyYWNrQ3VlTGlzdCgpIHsgfQogCiAgICAgdW5zaWduZWQgbG9u
ZyBsZW5ndGgoKSBjb25zdDsKKyAgICBUZXh0VHJhY2tDdWUqIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OwogICAgIFRleHRUcmFja0N1ZSogZ2V0Q3VlQnlJZChjb25zdCBTdHJpbmcmKSBjb25z
dDsKICAgICBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IGFjdGl2ZUN1ZXMoKTsKIAotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiYpOwotICAgIHZvaWQg
YXBwZW5kKFZlY3RvcjxQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOwotICAgIHZvaWQgcmVt
b3ZlKGNvbnN0IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiYpOworICAgIHZvaWQgYWRkKGNvbnN0
IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CisgICAgdm9pZCBhZGQoY29uc3QgVmVjdG9yPFJl
ZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBQYXNzUmVmUHRy
PFRleHRUcmFja0N1ZT4pOworICAgIAorICAgIHZpcnR1YWwgSXRlcmF0b3IgYmVnaW4oKTsKKyAg
ICB2aXJ0dWFsIEl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRlOgogICAgIFRleHRUcmFja0N1ZUxp
c3QoKTsKKyAgICB2b2lkIGFkZChjb25zdCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4sIHNpemVf
dCwgc2l6ZV90KTsKKyAgICBWZWN0b3IgPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4gbV9saXN0Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHAKaW5kZXggM2IzNTNlN2M4YzM1ZGVmMjM1NDg3ZmI5Yjc2MmEyOWFk
NDA3NWExNi4uMDVlMmE0ZmIwZDI0YzI1YzRhYzFiZDNkZDdmNmY4NDZmMjU2NmE4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC02NCwxMiArNjQs
NiBAQCB2b2lkIEN1ZVBhcnNlcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgQ3VlUGFycwogICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxv
YWRlcjo6Y3JlYXRlKGNvbnRleHQsIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOwogfQogCi1ib29s
IEN1ZVBhcnNlcjo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIC8vIEZJ
WE1FKDYyODkzKTogY2hlY2sgYWdhaW5zdCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHR5cGVzCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVu
c2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQogewog
ICAgIC8vIEZJWE1FKDYyODkzKTogQ3JlYXRlIG1fcHJpdmF0ZSBiYXNlZCBvbiBNSU1FIHR5cGUu
CkBAIC05MSw5ICs4NSw5IEBAIHZvaWQgQ3VlUGFyc2VyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNl
RXJyb3ImKQogICAgIG1fY2xpZW50LT50cmFja0xvYWRFcnJvcigpOwogfQogCi12b2lkIEN1ZVBh
cnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikKK3Zv
aWQgQ3VlUGFyc2VyOjpmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+
ID4mIG91dHB1dEN1ZXMpCiB7Ci0gICAgLy8gRklYTUUoNjI4OTMpOiBJbXBsZW1lbnQuCisgICAg
bV9wcml2YXRlLT5mZXRjaFBhcnNlZEN1ZXMob3V0cHV0Q3Vlcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgKaW5k
ZXggNzQ0Y2MzMjI3OGM1ZjRjZjllNGY4MmNhN2M1M2FiMTdiZDg5ZDhjZi4uYzdmZGFjOGFlYjdh
ZjYwOTBmZTZjZDkyZmQyNTQ0YzQ3YmRmODA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svQ3VlUGFyc2VyLmgKQEAgLTY0LDcgKzY0LDYgQEAgcHVibGljOgogICAgIHZvaWQgZGlk
RmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKICAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5n
JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEN1ZVBhcnNlckNsaWVudCopOwotICAgIGJvb2wg
c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBmZXRjaFBhcnNlZEN1ZXMo
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oCmluZGV4IGJjM2U0ZmJjMDk1MWJlMzRj
YmYwMTA3MWVkMjg2OWE5OWEyZjgzMGUuLmNlNjMzN2Q5MWU1MGUzYmIxZWQyZmI4YWIyZTQyYmNm
ZWUxNzEzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJz
ZXJQcml2YXRlLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZUJ5dGVzKGNvbnN0IGNoYXIqLCBpbnQpID0gMDsKIAogICAgIC8vIFRyYW5zZmVycyBvd25l
cnNoaXAgb2YgbGFzdCBwYXJzZWQgY3VlcyB0byBjYWxsZXIuCi0gICAgdmlydHVhbCB2b2lkIGZl
dGNoUGFyc2VkQ3VlcyhWZWN0b3I8UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1
ZT4gPiYpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIEN1ZVBhcnNlclByaXZhdGVJbnRlcmZhY2Uo
KSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103331</attachid>
            <date>2011-08-08 23:22:24 -0700</date>
            <delta_ts>2011-08-09 23:41:10 -0700</delta_ts>
            <desc>addressing comments and adding check for TextTrackCue chrono order</desc>
            <filename>bug-62883-20110808232223.patch</filename>
            <type>text/plain</type>
            <size>21881</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2NDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxOTgzZWYzMmEwMTVhMTBl
MGQ4MjZiN2Q0ODM0NzQ1Mjk2NzM5NjI1Li40YWY2Yzg3OWRiZmVmNjI2YTMxZDMwZTFmODhjMGM2
NDEwYmQ0ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDgtMDggIEFubmEg
Q2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN0b3JhZ2Ugb2YgVGV4
dFRyYWNrQ3VlcyBmb3IgZWZmaWNpZW50IHJldHJpZXZhbCBkdXJpbmcgcGxheWJhY2suCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjg4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGFueSB0ZXN0
cyBpbiBtZWRpYS90cmFjaywgYnV0IGVzcGVjaWFsbHkKKyAgICAgICAgbWVkaWEvdHJhY2svdHJh
Y2std2VidnR0LXRjMDEyLW91dG9mb3JkZXIuaHRtbAorCisgICAgICAgICogaHRtbC9DdWVJbmRl
eC5jcHA6CisgICAgICAgICogaHRtbC9DdWVJbmRleC5oOgorICAgICAgICAqIGh0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxUcmFj
a0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcDoKKyAgICAg
ICAgKiBodG1sL0xvYWRhYmxlVGV4dFRyYWNrLmg6CisgICAgICAgICogaHRtbC9NdXRhYmxlVGV4
dFRyYWNrLmNwcDoKKyAgICAgICAgKiBodG1sL011dGFibGVUZXh0VHJhY2suaDoKKyAgICAgICAg
KiBodG1sL1RleHRUcmFjay5oOgorICAgICAgICAqIGh0bWwvVGV4dFRyYWNrQ3VlTGlzdC5jcHA6
CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWVMaXN0Lmg6CisgICAgICAgICogbG9hZGVyL0N1
ZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmg6CisKIDIwMTEtMDgtMDggIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI5MjYxOS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vl
SW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJbmRleC5jcHAKaW5kZXggMzNjZjky
ZTVjMTUwNjlmZDNiM2VlZDI3MzQyMjljYmRjZGY2YzkzYi4uMThjMGJhOWJmM2ZjNDRlZDAwYjYz
OTdhYWQ2MzhhNWU0MzFmNTQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJ
bmRleC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJbmRleC5jcHAKQEAgLTM0LDU0
ICszNCw4MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUN1ZVNldCBDdWVTZXQ6OmRpZmZl
cmVuY2UoY29uc3QgQ3VlU2V0JikgY29uc3QKK0N1ZVNldCBDdWVTZXQ6OmRpZmZlcmVuY2UoY29u
c3QgQ3VlU2V0JiBvdGhlcikgY29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVu
dC4KLSAgICByZXR1cm4gQ3VlU2V0KCk7CisgICAgQ3VlU2V0IG5ld1NldDsKKyAgICBmb3IgKEN1
ZVNldDo6SXRlcmF0b3IgaXQgPSBvdGhlci5tX3NldC5iZWdpbigpOyBpdCAhPSBvdGhlci5tX3Nl
dC5lbmQoKTsgKytpdCkgeworICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9ICppdDsKKyAgICAg
ICAgaWYgKCFtX3NldC5jb250YWlucyhjdWUpKQorICAgICAgICAgICAgbmV3U2V0LmFkZCgqY3Vl
KTsKKyAgICB9CisgICAgcmV0dXJuIG5ld1NldDsKIH0KIAotQ3VlU2V0IEN1ZVNldDo6dW5pb25T
ZXQoY29uc3QgQ3VlU2V0JikgY29uc3QKK0N1ZVNldCBDdWVTZXQ6OnVuaW9uU2V0KGNvbnN0IEN1
ZVNldCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0g
ICAgcmV0dXJuIEN1ZVNldCgpOworICAgIEN1ZVNldCBuZXdTZXQ7CisgICAgZm9yIChDdWVTZXQ6
Okl0ZXJhdG9yIGl0ID0gb3RoZXIubV9zZXQuYmVnaW4oKTsgaXQgIT0gb3RoZXIubV9zZXQuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSAqaXQ7CisgICAgICAgIG5l
d1NldC5hZGQoKmN1ZSk7CisgICAgfQorICAgIGZvciAoQ3VlU2V0OjpJdGVyYXRvciBpdCA9IG1f
c2V0LmJlZ2luKCk7IGl0ICE9IG1fc2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRleHRUcmFj
a0N1ZSogY3VlID0gKml0OworICAgICAgICBuZXdTZXQuYWRkKCpjdWUpOworICAgIH0KKyAgICBy
ZXR1cm4gbmV3U2V0OwogfQogCi12b2lkIEN1ZVNldDo6YWRkKGNvbnN0IFRleHRUcmFja0N1ZSYp
Cit2b2lkIEN1ZVNldDo6YWRkKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKQogewotICAgIC8vIEZJ
WE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIG1fc2V0LmFkZChjb25zdF9jYXN0PFRleHRUcmFj
a0N1ZSo+KCZjdWUpKTsKIH0KIAotYm9vbCBDdWVTZXQ6OmNvbnRhaW5zKGNvbnN0IFRleHRUcmFj
a0N1ZSYpIGNvbnN0Citib29sIEN1ZVNldDo6Y29udGFpbnMoY29uc3QgVGV4dFRyYWNrQ3VlJiBj
dWUpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3NldC5jb250YWlucyhjb25zdF9jYXN0PFRleHRUcmFja0N1
ZSo+KCZjdWUpKTsKIH0KIAotdm9pZCBDdWVTZXQ6OnJlbW92ZShjb25zdCBUZXh0VHJhY2tDdWUm
KQordm9pZCBDdWVTZXQ6OnJlbW92ZShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkKIHsKLSAgICAv
LyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAgICBtX3NldC5yZW1vdmUoY29uc3RfY2FzdDxU
ZXh0VHJhY2tDdWUqPigmY3VlKSk7Cit9CisKK3ZvaWQgQ3VlU2V0OjpjbGVhcigpCit7CisgICAg
bV9zZXQuY2xlYXIoKTsKIH0KIAogYm9vbCBDdWVTZXQ6OmlzRW1wdHkoKSBjb25zdAogewotICAg
IC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gbV9zZXQuaXNFbXB0eSgpOwogfQogCiBpbnQgQ3VlU2V0OjpzaXplKCkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV9zZXQuc2l6ZSgpOworfQorCitDdWVTZXQ6Okl0ZXJhdG9yIEN1ZVNldDo6YmVnaW4oKSBjb25z
dAoreworICAgIHJldHVybiBtX3NldC5iZWdpbigpOworfQorCitDdWVTZXQ6Okl0ZXJhdG9yIEN1
ZVNldDo6ZW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZXQuZW5kKCk7CiB9CiAKLXZvaWQg
Q3VlSW5kZXg6OmZldGNoTmV3Q3Vlc0Zyb21Mb2FkZXIoQ3VlTG9hZGVyKikKK3ZvaWQgQ3VlSW5k
ZXg6Om5ld0N1ZXNBdmFpbGFibGUoQ3VlTG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgLy8gRklYTUUo
NjI4ODMpOiBJbXBsZW1lbnQuCisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4gbmV3
Q3VlczsKKyAgICBsb2FkZXItPmZldGNoTmV3ZXN0Q3VlcyhuZXdDdWVzKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5ld0N1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFkZChuZXdDdWVz
W2ldLmdldCgpKTsKIH0KIAotdm9pZCBDdWVJbmRleDo6cmVtb3ZlQ3Vlc0Zyb21JbmRleChjb25z
dCBUZXh0VHJhY2tDdWVMaXN0KikKK3ZvaWQgQ3VlSW5kZXg6OnJlbW92ZUN1ZXNGcm9tSW5kZXgo
Y29uc3QgVGV4dFRyYWNrQ3VlTGlzdCogY3VlTGlzdCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6
IEltcGxlbWVudC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1ZUxpc3QtPmxlbmd0aCgp
OyArK2kpCisgICAgICAgIHJlbW92ZShjdWVMaXN0LT5pdGVtKGkpKTsKIH0KIAogQ3VlU2V0IEN1
ZUluZGV4Ojp2aXNpYmxlQ3Vlc0F0VGltZShkb3VibGUpIGNvbnN0CkBAIC05MCwxNCArMTE5LDMy
IEBAIEN1ZVNldCBDdWVJbmRleDo6dmlzaWJsZUN1ZXNBdFRpbWUoZG91YmxlKSBjb25zdAogICAg
IHJldHVybiBDdWVTZXQoKTsKIH0KIAotdm9pZCBDdWVJbmRleDo6YWRkKFRleHRUcmFja0N1ZSop
Cit2b2lkIEN1ZUluZGV4OjphZGQoVGV4dFRyYWNrQ3VlKiBjdWUpCit7CisgICAgYWRkKGN1ZSwg
MCwgbV9jdWVzQnlTdGFydFRpbWUuc2l6ZSgpKTsKK30KKwordm9pZCBDdWVJbmRleDo6YWRkKFRl
eHRUcmFja0N1ZSogY3VlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCiB7Ci0gICAgLy8gRklY
TUUoNjI4OTApOiBJbXBsZW1lbnQuCisgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgIG1f
Y3Vlc0J5U3RhcnRUaW1lLmluc2VydChzdGFydCwgY3VlKTsKKyAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc2l6ZV90IGluZGV4ID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisgICAgaWYgKGN1ZS0+
c3RhcnRUaW1lKCkgPCBtX2N1ZXNCeVN0YXJ0VGltZVtpbmRleF0tPnN0YXJ0VGltZSgpCisgICAg
ICAgIHx8IChjdWUtPnN0YXJ0VGltZSgpID09IG1fY3Vlc0J5U3RhcnRUaW1lW2luZGV4XS0+c3Rh
cnRUaW1lKCkKKyAgICAgICAgJiYgY3VlLT5lbmRUaW1lKCkgPCBtX2N1ZXNCeVN0YXJ0VGltZVtp
bmRleF0tPmVuZFRpbWUoKSkpCisgICAgICAgIGFkZChjdWUsIHN0YXJ0LCBpbmRleCk7CisgICAg
ZWxzZQorICAgICAgICBhZGQoY3VlLCBpbmRleCArIDEsIGVuZCk7CiB9CiAKLXZvaWQgQ3VlSW5k
ZXg6OnJlbW92ZShUZXh0VHJhY2tDdWUqKQordm9pZCBDdWVJbmRleDo6cmVtb3ZlKFRleHRUcmFj
a0N1ZSogY3VlKQogewotICAgIC8vIEZJWE1FKDYyODkwKTogSW1wbGVtZW50LgorICAgIHNpemVf
dCBpbmRleCA9IG1fY3Vlc0J5U3RhcnRUaW1lLmZpbmQoY3VlKTsKKyAgICBpZiAoaW5kZXggIT0g
bm90Rm91bmQpCisgICAgICAgIG1fY3Vlc0J5U3RhcnRUaW1lLnJlbW92ZShpbmRleCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q3VlSW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VlSW5kZXguaAppbmRleCA4NjJlMmRh
NDljMmM5MzI2ZmE5NThhMGRjYTMxZTVjNDE4MDlhMGNkLi4yNDE1NmQzNWM2ZTkwNDQ3M2Y4NWI0
ZmMwZDA3NjQzZGQ5ZGVjOTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUlu
ZGV4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJbmRleC5oCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCiAjaW5jbHVkZSAiQ3VlTG9hZGVyLmgiCisj
aW5jbHVkZSAiVGV4dFRyYWNrQ3VlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArMzksNyBAQCBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0
OwogCiBjbGFzcyBDdWVTZXQgewogcHVibGljOgorICAgIHR5cGVkZWYgSGFzaFNldDxUZXh0VHJh
Y2tDdWUqPjo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgQ3VlU2V0KCkgeyB9CiAgICAgfkN1ZVNl
dCgpIHsgfQogICAgIEN1ZVNldCBkaWZmZXJlbmNlKGNvbnN0IEN1ZVNldCYpIGNvbnN0OwpAQCAt
NDUsOCArNDcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKGNvbnN0IFRleHRUcmFja0N1ZSYp
OwogICAgIGJvb2wgY29udGFpbnMoY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Q7CiAgICAgdm9p
ZCByZW1vdmUoY29uc3QgVGV4dFRyYWNrQ3VlJik7CisgICAgdm9pZCBjbGVhcigpOwogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGludCBzaXplKCkgY29uc3Q7CisgICAgSXRlcmF0b3Ig
YmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRvciBlbmQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAg
ICBIYXNoU2V0PFRleHRUcmFja0N1ZSo+IG1fc2V0OwogfTsKQEAgLTU0LDEzICs2MCwxOCBAQCBw
cml2YXRlOgogY2xhc3MgQ3VlSW5kZXggOiBwdWJsaWMgQ3VlTG9hZGVyQ2xpZW50IHsKIHB1Ymxp
YzoKICAgICAvLyBDdWVMb2FkZXJDbGllbnQgbWV0aG9kcy4KLSAgICB2b2lkIGZldGNoTmV3Q3Vl
c0Zyb21Mb2FkZXIoQ3VlTG9hZGVyKik7CisgICAgdm9pZCBuZXdDdWVzQXZhaWxhYmxlKEN1ZUxv
YWRlciopOwogICAgIHZvaWQgcmVtb3ZlQ3Vlc0Zyb21JbmRleChjb25zdCBUZXh0VHJhY2tDdWVM
aXN0Kik7CiAKICAgICAvLyBSZXR1cm5zIHNldCBvZiBjdWVzIHZpc2libGUgYXQgYSB0aW1lIGlu
IHNlY29uZHMuCiAgICAgQ3VlU2V0IHZpc2libGVDdWVzQXRUaW1lKGRvdWJsZSkgY29uc3Q7CiAg
ICAgdm9pZCBhZGQoVGV4dFRyYWNrQ3VlKik7CiAgICAgdm9pZCByZW1vdmUoVGV4dFRyYWNrQ3Vl
Kik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGQoVGV4dFRyYWNrQ3VlKiwgc2l6ZV90IHN0YXJ0
LCBzaXplX3QgZW5kKTsKKyAgICAgICAgCisgICAgVmVjdG9yPFRleHRUcmFja0N1ZSo+IG1fY3Vl
c0J5U3RhcnRUaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggMDRjNjA4OTU1YzFmZmZmMmZkYmZmZTYy
MGNiMmExYWVkYWIwZTkxMi4uMDI4MmE0ZDFiZGNhMTAzY2NmZmU0MWQ0YzI0NzAyM2UwM2U4Mjdl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC03OTMsNyAr
NzkzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkVGV4dFRyYWNrcygpCiAgICAgZm9y
IChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZSh0cmFja1RhZykpIHsKICAgICAg
ICAgICAgIEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxl
bWVudCo+KG5vZGUpOwotICAgICAgICAgICAgdHJhY2stPmxvYWQoQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICAgICAgdHJhY2stPmxvYWQoQWN0aXZl
RE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICZtX2N1ZUluZGV4KTsKICAgICAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXgg
YmM3YmYzNjc3OTk2MzAwMjEyOGVjZGY1OWZmZWZlOWQyMWMwNGZkNi4uYjdjY2Y2NmExNTU1YWFm
NWY5YjZiODc1OGY3ZDkyMTBhOTg3NWU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgKQEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5o
IgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiQ3VlSW5kZXgu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwpAQCAtNDMw
LDYgKzQzNCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9sb2FkSW5pdGlhdGVkQnlVc2VyR2Vz
dHVyZSA6IDE7CiAgICAgYm9vbCBtX2NvbXBsZXRlbHlMb2FkZWQgOiAxOwogICAgIGJvb2wgbV9o
YXZlUHJlcGFyZWRUb1BsYXkgOiAxOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIEN1
ZUluZGV4IG1fY3VlSW5kZXg7CisjZW5kaWYKIH07CiAKIH0gLy9uYW1lc3BhY2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCmluZGV4IDA0M2YwOGIzNmY3MDQ1NjU4OTk4
OGNmMmE4MTRkYTBmMzE0YWFmOGMuLjdjYmNiZGQwMzY3NjExZjEzOWQ3MWEwY2QyODQxNTBlYmI2
NjEyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcApAQCAtMTI5
LDEyICsxMjksMTQgQEAgYm9vbCBIVE1MVHJhY2tFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSkgY29uc3QKICAgICByZXR1cm4gYXR0cmlidXRlLT5uYW1lKCkgPT0g
c3JjQXR0cjsKIH0KIAotdm9pZCBIVE1MVHJhY2tFbGVtZW50Ojpsb2FkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCit2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OmxvYWQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgQ3VlTG9hZGVyQ2xpZW50KiBjdWVDbGllbnQpCiB7Ci0g
ICAgbV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNrOjpjcmVhdGUoa2luZCgpLCBsYWJlbCgpLCBz
cmNsYW5nKCksIGlzRGVmYXVsdCgpKTsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoc3JjQXR0cikp
Ci0gICAgICAgIG1fdHJhY2stPmxvYWQoZ2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0ciks
IGNvbnRleHQpOworICAgIGlmICghbV90cmFjaykgeworICAgICAgICBpZiAoaGFzQXR0cmlidXRl
KHNyY0F0dHIpKSB7CisgICAgICAgICAgICBtX3RyYWNrID0gTG9hZGFibGVUZXh0VHJhY2s6OmNy
ZWF0ZShraW5kKCksIGxhYmVsKCksIHNyY2xhbmcoKSwgaXNEZWZhdWx0KCkpOworICAgICAgICAg
ICAgbV90cmFjay0+bG9hZChnZXROb25FbXB0eVVSTEF0dHJpYnV0ZShzcmNBdHRyKSwgY29udGV4
dCwgY3VlQ2xpZW50KTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUcmFja0VsZW1lbnQuaAppbmRleCA5NDY1NjQyZTU2NzU3NTYwOGE2NDY4ZDMwM2Y4NGRh
ZDY4Yjc1YzliLi43MjNiODJiZTMzMWZhMTc3NmJiZDgxYmIwZmE5ZjNhYmZmNzg1ZWQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaApAQCAtMzMsNiArMzMsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEN1ZUxvYWRlckNsaWVudDsKKwogY2xhc3MgSFRN
TFRyYWNrRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTFRyYWNrRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwpAQCAtNDksNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYWJl
bChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldElzRGVmYXVsdChib29sKTsKICAgICAKLSAg
ICB2b2lkIGxvYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZvaWQgbG9hZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgQ3VlTG9hZGVyQ2xpZW50Kik7CiAKIHByaXZhdGU6CiAgICAg
SFRNTFRyYWNrRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTG9hZGFibGVUZXh0VHJhY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHAKaW5kZXggNGViMjQ4NWM0YjUwNmRi
ZTg4MTEyYTI3Mzg5ZmY5ZmUzNGE5ODMxOS4uNzk0YTE5ZDU1OWQyYjY5NzgyMzI2YTE4ODNiMTdm
MDljNzgwYWY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRU
cmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHAK
QEAgLTM1LDI1ICszNSwzNCBAQCBMb2FkYWJsZVRleHRUcmFjazo6TG9hZGFibGVUZXh0VHJhY2so
Y29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjbwogICAgIDogVGV4dFRy
YWNrKGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkKICAgICAsIG1faXNEZWZhdWx0KGlzRGVmYXVsdCkK
IHsKKyAgICBtX2N1ZXMgPSBUZXh0VHJhY2tDdWVMaXN0OjpjcmVhdGUoKTsKKyAgICBtX2N1ZXMt
PnNldEN1ZU9yZGVyKFRleHRUcmFja0N1ZUxpc3Q6OkNocm9ub2xvZ2ljYWwpOwogfQogCiBMb2Fk
YWJsZVRleHRUcmFjazo6fkxvYWRhYmxlVGV4dFRyYWNrKCkKIHsKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVDdWVzRnJvbUluZGV4KG1fY3Vlcy5nZXQoKSk7CiB9
CiAKLXZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpsb2Fk
KGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDdWVM
b2FkZXJDbGllbnQqIGNsaWVudCkKIHsKKyAgICBzZXRDdWVMb2FkZXJDbGllbnQoY2xpZW50KTsK
ICAgICByZXR1cm4gbV9wYXJzZXIubG9hZCh1cmwsIGNvbnRleHQsIHRoaXMpOwogfQogCi1ib29s
IExvYWRhYmxlVGV4dFRyYWNrOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0g
ICAgcmV0dXJuIG1fcGFyc2VyLnN1cHBvcnRzVHlwZSh1cmwpOwotfQotCiB2b2lkIExvYWRhYmxl
VGV4dFRyYWNrOjpuZXdDdWVzUGFyc2VkKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEZldGNo
IG5ldyBjdWVzIGZyb20gcGFyc2VyIGFuZCB0ZW1wb3JhcmlseSBzdG9yZSB0byBnaXZlIHRvIEN1
ZUxvYWRlckNsaWVudCB3aGVuIGZldGNoTmV3Q3Vlc0Zyb21Mb2FkZXIgaXMgY2FsbGVkLgorICAg
IC8vIEZldGNoIG5ldyBjdWVzIGZyb20gcGFyc2VyIGFuZCB0ZW1wb3JhcmlseSBzdG9yZSB0byBn
aXZlIHRvIEN1ZUxvYWRlckNsaWVudCB3aGVuIGZldGNoTmV3Q3Vlc0Zyb21Mb2FkZXIgaXMgY2Fs
bGVkLgorICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+IG5ld0N1ZXM7CisgICAgbV9w
YXJzZXIuZmV0Y2hQYXJzZWRDdWVzKG5ld0N1ZXMpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxU
ZXh0VHJhY2tDdWU+ID46Oml0ZXJhdG9yIGl0ID0gbmV3Q3Vlcy5iZWdpbigpOyBpdCA8IG5ld0N1
ZXMuZW5kKCk7IGl0KyspIHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gKml0
OworICAgICAgICBjdWUtPnNldFRyYWNrKHRoaXMpOworICAgICAgICBtX25ld2VzdEN1ZXMuYXBw
ZW5kKGN1ZSk7CisgICAgfQorICAgIG1fY3Vlcy0+YWRkKG5ld0N1ZXMpOworICAgIG1fY2xpZW50
LT5uZXdDdWVzQXZhaWxhYmxlKHRoaXMpOwogfQogCiB2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjp0
cmFja0xvYWRTdGFydGVkKCkKQEAgLTcxLDE0ICs4MCwxMSBAQCB2b2lkIExvYWRhYmxlVGV4dFRy
YWNrOjp0cmFja0xvYWRDb21wbGV0ZWQoKQogICAgIHNldFJlYWR5U3RhdGUoVGV4dFRyYWNrOjpM
T0FERUQpOwogfQogCi12b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpuZXdDdWVzTG9hZGVkKCkKLXsK
LSAgICAvLyBGSVhNRSg2Mjg4NSk6IFRlbGwgdGhlIGNsaWVudCB0byBmZXRjaCB0aGUgbGF0ZXN0
IGN1ZXMuCi19Ci0KLXZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmZldGNoTmV3ZXN0Q3VlcyhWZWN0
b3I8VGV4dFRyYWNrQ3VlKj4mKQordm9pZCBMb2FkYWJsZVRleHRUcmFjazo6ZmV0Y2hOZXdlc3RD
dWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXQpCiB7Ci0gICAgLy8gRklY
TUUoNjI4ODUpOiBJbXBsZW1lbnQuCisgICAgZm9yIChWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1
ZT4gPjo6aXRlcmF0b3IgaXQgPSBtX25ld2VzdEN1ZXMuYmVnaW4oKTsgaXQgPCBtX25ld2VzdEN1
ZXMuZW5kKCk7IGl0KyspCisgICAgICAgIG91dHB1dC5hcHBlbmQoKml0KTsKKyAgICBtX25ld2Vz
dEN1ZXMuY2xlYXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9Mb2FkYWJsZVRleHRUcmFjay5oCmluZGV4IGM1NWVkMjZhNmEyYTA1MjY0ZDI0N2YwMTUw
NmJhZjA4MzFiNTk4ZjAuLmE5ZDQ4OGU0OGI4YzU3Y2I3YjZmODNkMjFhODZmZWNiMDE2MWM1OGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTG9hZGFibGVUZXh0VHJhY2suaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmgKQEAgLTQ5LDE2ICs0OSwx
NCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkxvYWRhYmxlVGV4dFRyYWNrKCk7CiAK
LSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwot
ICAgIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ3VlTG9hZGVyQ2xpZW50Kik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc1BhcnNlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB0cmFj
a0xvYWRTdGFydGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrTG9hZEVycm9yKCk7CiAgICAg
dmlydHVhbCB2b2lkIHRyYWNrTG9hZENvbXBsZXRlZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIG5l
d0N1ZXNMb2FkZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxU
ZXh0VHJhY2tDdWUqPiYpOworICAgIHZpcnR1YWwgdm9pZCBmZXRjaE5ld2VzdEN1ZXMoVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKIAogcHJpdmF0ZToKICAgICBMb2FkYWJsZVRleHRU
cmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmlu
ZyYgbGFuZ3VhZ2UsIGJvb2wgaXNEZWZhdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTXV0YWJsZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL011dGFibGVU
ZXh0VHJhY2suY3BwCmluZGV4IDRkNjgzNTQ2OTY2NjQ2OWQ5Y2ZmZjgyNjNhMmYyYzUwYTM0YmY0
MTEuLjU1Y2Q5NjFkYzI1Y2JkYTQwYWJkMjUxZjU2ZjhlNzU0NDA0MGJmZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9NdXRhYmxlVGV4dFRyYWNrLmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lkIE11
dGFibGVUZXh0VHJhY2s6Om5ld0N1ZXNMb2FkZWQoKQogICAgIC8vIEZJWE1FKDYyODkwKTogSW1w
bGVtZW50LgogfQogCi12b2lkIE11dGFibGVUZXh0VHJhY2s6OmZldGNoTmV3ZXN0Q3VlcyhWZWN0
b3I8VGV4dFRyYWNrQ3VlKj4mKQordm9pZCBNdXRhYmxlVGV4dFRyYWNrOjpmZXRjaE5ld2VzdEN1
ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKQogewogICAgIC8vIEZJWE1FKDYyODkw
KTogSW1wbGVtZW50LgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NdXRhYmxl
VGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL011dGFibGVUZXh0VHJhY2suaAppbmRl
eCA2MThjMjcyMmQ1YzMyNThjYTZiMTdkYzI3NjEwZDczNTI4OTAzMWRkLi5hMGI3N2RiM2YwMGVj
MjQxZjlmNWQzNGZjOWNjMjdlMzYxOWZlYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL011dGFibGVUZXh0VHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL011dGFibGVU
ZXh0VHJhY2suaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDdWUo
UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+KTsKIAogICAgIHZpcnR1YWwgdm9pZCBuZXdDdWVzTG9h
ZGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8VGV4dFRyYWNr
Q3VlKj4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrQ3VlPiA+Jik7CiAKIHByaXZhdGU6CiAgICAgTXV0YWJsZVRleHRUcmFjayhjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2suaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrLmgKaW5kZXggOWE4MmY4M2VlMWY3MmRhZWQ2YzYyYzEw
MGI1YjU0MDczODEwZmZhMi4uYThmOTc4YmU0MjUzY2M0MTY4ZjlkNDJkY2MxNzY2MGM0MDQzYTI3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2suaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oCkBAIC0zNiw2ICszNiw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRleHRUcmFjazsKK2NsYXNzIFRleHRUcmFja0N1ZTsKIGNsYXNz
IFRleHRUcmFja0N1ZUxpc3Q7CiAKIGNsYXNzIFRleHRUcmFja0NsaWVudCB7CkBAIC03Nyw2ICs3
OCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFJlYWR5U3RhdGUoUmVhZHlTdGF0ZSk7CiAK
ICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlTGlzdD4gbV9jdWVzOworICAgIFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrQ3VlPiA+IG1fbmV3ZXN0Q3VlczsKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9r
aW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5jcHAKaW5kZXggOWEwNmJk
NTE2YzlmZTA5ZmFjMDY4YzM1ZDdkMjVmMGJlZDI5OWY2Yy4uZGJiZGNlNGY2NmY4MzQ2ODIzZDQw
Y2JhMzAyNjU2YTVmNGViOTk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
VHJhY2tDdWVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxp
c3QuY3BwCkBAIC0zMiwyOSArMzIsNzcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVGV4dFRy
YWNrQ3VlTGlzdDo6VGV4dFRyYWNrQ3VlTGlzdCgpCisgICAgOiBtX29yZGVyKE5vT3JkZXJSZXF1
aXJlbWVudHMpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCiB9CiAKLVRleHRU
cmFja0N1ZSogVGV4dFRyYWNrQ3VlTGlzdDo6Z2V0Q3VlQnlJZChjb25zdCBTdHJpbmcmKSBjb25z
dAordW5zaWduZWQgbG9uZyBUZXh0VHJhY2tDdWVMaXN0OjpsZW5ndGgoKSBjb25zdAogewotICAg
IC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIHJldHVybiBtX2xpc3Quc2l6ZSgpOwor
fQorCitUZXh0VHJhY2tDdWUqIFRleHRUcmFja0N1ZUxpc3Q6OmdldEN1ZUJ5SWQoY29uc3QgU3Ry
aW5nJiBpZCkgY29uc3QKK3sKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbGlzdC5iZWdpbigpOyBpdCAhPSBtX2xpc3QuZW5kKCk7
IGl0KyspIHsKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSBpdC0+Z2V0KCk7CisgICAgICAg
IGlmIChjdWUtPmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gY3VlOworICAgIH0KICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBUZXh0VHJhY2tDdWVMaXN0OjphcHBlbmQoVmVjdG9yPFBh
c3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikKK1RleHRUcmFja0N1ZSogVGV4dFRyYWNrQ3VlTGlz
dDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXN0W2luZGV4
XS5nZXQoKTsKK30KKwordm9pZCBUZXh0VHJhY2tDdWVMaXN0OjphZGQoY29uc3QgVmVjdG9yPFJl
ZlB0cjxUZXh0VHJhY2tDdWU+ID4mIG5ld0N1ZXMpCit7CisgICAgZm9yIChWZWN0b3I8UmVmUHRy
PFRleHRUcmFja0N1ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdDdWVzLmJlZ2luKCk7IGl0
ICE9IG5ld0N1ZXMuZW5kKCk7IGl0KyspCisgICAgICAgIGFkZCgqaXQpOworfQorCit2b2lkIFRl
eHRUcmFja0N1ZUxpc3Q6OmFkZChjb25zdCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlKQor
eworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IG5ld0N1ZSA9IGN1ZTsKKyAgICBpZiAobV9vcmRl
ciA9PSBDaHJvbm9sb2dpY2FsICYmIG5ld0N1ZS0+c3RhcnRUaW1lKCkgPCBtX2xpc3QubGFzdCgp
LT5zdGFydFRpbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZChuZXdDdWUsIDAsIG1fbGlz
dC5zaXplKCkpOworfQorCit2b2lkIFRleHRUcmFja0N1ZUxpc3Q6OmFkZChjb25zdCBQYXNzUmVm
UHRyPFRleHRUcmFja0N1ZT4gY3VlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCit7CisgICAg
UmVmUHRyPFRleHRUcmFja0N1ZT4gbmV3Q3VlID0gY3VlOworICAgIGlmIChzdGFydCA9PSBlbmQp
IHsKKyAgICAgICBtX2xpc3QuaW5zZXJ0KHN0YXJ0LCBuZXdDdWUpOworICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzaXplX3QgaW5kZXggPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICBpZiAo
bmV3Q3VlLT5zdGFydFRpbWUoKSA8IG1fbGlzdFtpbmRleF0tPnN0YXJ0VGltZSgpCisgICAgICAg
IHx8IChuZXdDdWUtPnN0YXJ0VGltZSgpID09IG1fbGlzdFtpbmRleF0tPnN0YXJ0VGltZSgpCisg
ICAgICAgICYmIG5ld0N1ZS0+ZW5kVGltZSgpIDwgbV9saXN0W2luZGV4XS0+ZW5kVGltZSgpKSkK
KyAgICAgICAgYWRkKG5ld0N1ZSwgc3RhcnQsIGluZGV4KTsKKyAgICBlbHNlCisgICAgICAgIGFk
ZChuZXdDdWUsIGluZGV4ICsgMSwgZW5kKTsKK30KKworCit2b2lkIFRleHRUcmFja0N1ZUxpc3Q6
OnJlbW92ZShjb25zdCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlKQogewotICAgIC8vIEZJ
WE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IHJlbW92ZUN1
ZSA9IGN1ZTsKKyAgICByZW1vdmVDdWUtPnNldElzQWN0aXZlKGZhbHNlKTsKKyAgICBtX2xpc3Qu
cmVtb3ZlKG1fbGlzdC5maW5kKHJlbW92ZUN1ZSkpOwogfQogCi12b2lkIFRleHRUcmFja0N1ZUxp
c3Q6OmFwcGVuZChjb25zdCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4mKQorVGV4dFRyYWNrQ3Vl
TGlzdDo6SXRlcmF0b3IgVGV4dFRyYWNrQ3VlTGlzdDo6YmVnaW4oKQogewotICAgIC8vIEZJWE1F
KDYyODgzKTogSW1wbGVtZW50LgorICAgIHJldHVybiBtX2xpc3QuYmVnaW4oKTsKIH0KIAotdm9p
ZCBUZXh0VHJhY2tDdWVMaXN0OjpyZW1vdmUoY29uc3QgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+
JikKK1RleHRUcmFja0N1ZUxpc3Q6Okl0ZXJhdG9yIFRleHRUcmFja0N1ZUxpc3Q6OmVuZCgpCiB7
Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIG1fbGlzdC5lbmQo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFj
a0N1ZUxpc3QuaAppbmRleCAzYjM3ZTQ0ZjVjNGFkZjYwZDc4OGMxMjE5NzY3ZTVlMzk2YzU5YzFl
Li5jZjk2M2MyN2YyYzdlMGE3ZmYxZmEwNmExMDBmNmMzY2VlODYwZjIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuaApAQCAtMzcsMjEgKzM3LDM1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGV4dFRyYWNrQ3VlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFRl
eHRUcmFja0N1ZUxpc3Q+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrQ3VlPiA+OjppdGVyYXRvciBJdGVyYXRvcjsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHRUcmFja0N1ZUxpc3Q+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHRUcmFja0N1ZUxpc3QpOwogICAgIH0KKyAgICAKKyAgICB+VGV4dFRyYWNrQ3Vl
TGlzdCgpIHsgfQogCiAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICBUZXh0
VHJhY2tDdWUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIFRleHRUcmFja0N1ZSog
Z2V0Q3VlQnlJZChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFRleHRUcmFj
a0N1ZUxpc3Q+IGFjdGl2ZUN1ZXMoKTsKIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFBhc3NSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiYpOwotICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxQYXNzUmVmUHRyPFRl
eHRUcmFja0N1ZT4gPiYpOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFBhc3NSZWZQdHI8VGV4dFRy
YWNrQ3VlPiYpOworICAgIGVudW0gQ3VlT3JkZXJSZXF1aXJlbWVudHMgeyBOb09yZGVyUmVxdWly
ZW1lbnRzLCBDaHJvbm9sb2dpY2FsIH07CisgICAgdm9pZCBzZXRDdWVPcmRlcihDdWVPcmRlclJl
cXVpcmVtZW50cyByZXF1aXJlbWVudHMpIHsgbV9vcmRlciA9IHJlcXVpcmVtZW50czsgfQorICAg
IAorICAgIHZvaWQgYWRkKGNvbnN0IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CisgICAgdm9p
ZCBhZGQoY29uc3QgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKKyAgICB2b2lkIHJl
bW92ZShjb25zdCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4pOworICAgIAorICAgIHZpcnR1YWwg
SXRlcmF0b3IgYmVnaW4oKTsKKyAgICB2aXJ0dWFsIEl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRl
OgogICAgIFRleHRUcmFja0N1ZUxpc3QoKTsKKyAgICB2b2lkIGFkZChjb25zdCBQYXNzUmVmUHRy
PFRleHRUcmFja0N1ZT4sIHNpemVfdCwgc2l6ZV90KTsKKyAgICBWZWN0b3IgPFJlZlB0cjxUZXh0
VHJhY2tDdWU+ID4gbV9saXN0OworICAgIEN1ZU9yZGVyUmVxdWlyZW1lbnRzIG1fb3JkZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3VlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3VlTG9hZGVyLmgKaW5k
ZXggMGJmN2I5MjY1MmI4OGMxZjYzYjc5Yzg5MmE5M2I3YzUyMmQ0NWYxMi4uZmY3NTRhYmZkMDdj
ODcyYWFmN2VlYWE5NWRmMjdiNzg5MTJkNDM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0N1ZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9DdWVMb2FkZXIu
aApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0OwogY2xhc3MgQ3VlTG9h
ZGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICAvLyBRdWVyaWVzIEN1ZUxvYWRlciBmb3IgbmV3ZXN0
IGN1ZXMuCi0gICAgdmlydHVhbCB2b2lkIGZldGNoTmV3Q3Vlc0Zyb21Mb2FkZXIoQ3VlTG9hZGVy
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBuZXdDdWVzQXZhaWxhYmxlKEN1ZUxvYWRlciopID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ3Vlc0Zyb21JbmRleChjb25zdCBUZXh0VHJhY2tD
dWVMaXN0KikgPSAwOwogfTsKIApAQCAtNDgsMTEgKzQ4LDggQEAgY2xhc3MgQ3VlTG9hZGVyIHsK
IHB1YmxpYzoKICAgICB2b2lkIHNldEN1ZUxvYWRlckNsaWVudChDdWVMb2FkZXJDbGllbnQqKTsK
IAotICAgIC8vIEluZm9ybXMgY2xpZW50IHRoYXQgbmV3IGN1ZXMgaGF2ZSBiZWVuIGxvYWRlZC4K
LSAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc0xvYWRlZCgpID0gMDsKLQogICAgIC8vIFRyYW5zZmVy
cyBvd25lcnNoaXAgb2YgY3VycmVudGx5IGxvYWRlZCBjdWVzLgotICAgIHZpcnR1YWwgdm9pZCBm
ZXRjaE5ld2VzdEN1ZXMoVmVjdG9yPFRleHRUcmFja0N1ZSo+JiBjdWVzKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYg
Y3VlcykgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ3VlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCmluZGV4IDRhNjg2
OWJhOWRiNDcxYzQ2NGZjNDBkYjQwYzgyMTBjZTk2NGQyMzMuLjg0YzZjZTA5MGU4NjJhMTM5NzE3
YTUxNmJlMmNjNGVjNWRjZGUyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL0N1ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sv
Q3VlUGFyc2VyLmNwcApAQCAtNDIsNyArNDIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEN1
ZVBhcnNlcjo6Q3VlUGFyc2VyKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4K
IH0KIAogQ3VlUGFyc2VyOjp+Q3VlUGFyc2VyKCkKQEAgLTY1LDEyICs2NCw2IEBAIHZvaWQgQ3Vl
UGFyc2VyOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBDdWVQYXJzCiAgICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUo
Y29udGV4dCwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CiB9CiAKLWJvb2wgQ3VlUGFyc2VyOjpz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgLy8gRklYTUUoNjI4OTMpOiBj
aGVjayBhZ2FpbnN0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgdHlwZXMKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIHZvaWQgQ3VlUGFyc2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyAv
KmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAg
aWYgKHJlc3BvbnNlLm1pbWVUeXBlKCkgPT0gInRleHQvdnR0IikKQEAgLTk3LDkgKzkwLDkgQEAg
dm9pZCBDdWVQYXJzZXI6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCiAgICAgbV9jbGll
bnQtPnRyYWNrTG9hZEVycm9yKCk7CiB9CiAKLXZvaWQgQ3VlUGFyc2VyOjpmZXRjaFBhcnNlZEN1
ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKQordm9pZCBDdWVQYXJzZXI6OmZldGNo
UGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgb3V0cHV0Q3VlcykKIHsK
LSAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KKyAgICBtX3ByaXZhdGUtPmZldGNoUGFy
c2VkQ3VlcyhvdXRwdXRDdWVzKTsKIH0KIAogdm9pZCBDdWVQYXJzZXI6Om5ld0N1ZXNQYXJzZWQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaAppbmRleCA3YzZjNjMx
NzRlNTc4MzY5NjA2ZWRhMjVmNDhhZDU0OThkMDg1ZjA4Li45NTBjMmY2ZWNhNDBhMGQ2M2ZkYzc1
YWMzNTYwMWExMDk1ZGQ5OGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
cmFjay9DdWVQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuaApAQCAtNjQsNyArNjQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGYWlsKGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKIAogICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgQ3VlUGFyc2VyQ2xpZW50Kik7Ci0gICAgYm9vbCBzdXBwb3J0c1R5
cGUoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVm
UHRyPFRleHRUcmFja0N1ZT4gPiYpOwogICAgIHZvaWQgbmV3Q3Vlc1BhcnNlZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103446</attachid>
            <date>2011-08-09 23:41:14 -0700</date>
            <delta_ts>2011-08-25 15:35:44 -0700</delta_ts>
            <desc>addressing Sam&apos;s comments</desc>
            <filename>bug-62883-20110809234112.patch</filename>
            <type>text/plain</type>
            <size>22441</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI3NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NDNmMzY4OTk0ZmJmMTA2
ZDAyYmQwZTAwYTQwYjg0NmE3ZGNhNzUxLi44N2EwOTBjNTk5MmYwNTA1YzE1YTdhOWNjMGU2ZTNm
ZGU2ODAyYjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDgtMDkgIEFubmEg
Q2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBzdG9y
YWdlIGFuZCByZXRyaWV2YWwgb2YgVGV4dFRyYWNrQ3Vlcy4KKyAgICAgICAgVGV4dFRyYWNrQ3Vl
TGlzdHMgYXJlIHVzZWQgYnkgVGV4dFRyYWNrcyBmb3Igc3RvcmFnZSBvZiBUZXh0VHJhY2tDdWVz
LgorICAgICAgICBDdWVJbmRleCBrZWVwcyBwb2ludGVycyB0byBleGlzdGluZyBUZXh0VHJhY2tD
dWVzIGZvciBmYXN0IGxvb2stdXAgZHVyaW5nIHZpZGVvIHBsYXliYWNrLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4ODMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBhbnkgdGVzdHMgaW4gbWVk
aWEvdHJhY2ssIGJ1dCBlc3BlY2lhbGx5CisgICAgICAgIG1lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0
dC10YzAxMi1vdXRvZm9yZGVyLmh0bWwKKworICAgICAgICAqIGh0bWwvQ3VlSW5kZXguY3BwOgor
ICAgICAgICAqIGh0bWwvQ3VlSW5kZXguaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTFRyYWNrRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVHJhY2tFbGVtZW50
Lmg6CisgICAgICAgICogaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHA6CisgICAgICAgICogaHRt
bC9Mb2FkYWJsZVRleHRUcmFjay5oOgorICAgICAgICAqIGh0bWwvTXV0YWJsZVRleHRUcmFjay5j
cHA6CisgICAgICAgICogaHRtbC9NdXRhYmxlVGV4dFRyYWNrLmg6CisgICAgICAgICogaHRtbC9U
ZXh0VHJhY2suaDoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZUxpc3QuY3BwOgorICAgICAg
ICAqIGh0bWwvVGV4dFRyYWNrQ3VlTGlzdC5oOgorICAgICAgICAqIGxvYWRlci9DdWVMb2FkZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oOgorCiAyMDExLTA4LTA5ICBMdWtlIE1hY3BoZXJzb24g
ICA8bWFjcGhlcnNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXNlIHNldEZvbnREZXNjcmlw
dGlvbiBoZWxwZXIgdG8gc2V0IG1fZm9udERpcnR5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdWVJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmNwcApp
bmRleCAzM2NmOTJlNWMxNTA2OWZkM2IzZWVkMjczNDIyOWNiZGNkZjZjOTNiLi4xOGMwYmE5YmYz
ZmM0NGVkMDBiNjM5N2FhZDYzOGE1ZTQzMWY1NDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0N1ZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmNw
cApAQCAtMzQsNTQgKzM0LDgzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3VlU2V0IEN1
ZVNldDo6ZGlmZmVyZW5jZShjb25zdCBDdWVTZXQmKSBjb25zdAorQ3VlU2V0IEN1ZVNldDo6ZGlm
ZmVyZW5jZShjb25zdCBDdWVTZXQmIG90aGVyKSBjb25zdAogewotICAgIC8vIEZJWE1FKDYyODgz
KTogSW1wbGVtZW50LgotICAgIHJldHVybiBDdWVTZXQoKTsKKyAgICBDdWVTZXQgbmV3U2V0Owor
ICAgIGZvciAoQ3VlU2V0OjpJdGVyYXRvciBpdCA9IG90aGVyLm1fc2V0LmJlZ2luKCk7IGl0ICE9
IG90aGVyLm1fc2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0g
Kml0OworICAgICAgICBpZiAoIW1fc2V0LmNvbnRhaW5zKGN1ZSkpCisgICAgICAgICAgICBuZXdT
ZXQuYWRkKCpjdWUpOworICAgIH0KKyAgICByZXR1cm4gbmV3U2V0OwogfQogCi1DdWVTZXQgQ3Vl
U2V0Ojp1bmlvblNldChjb25zdCBDdWVTZXQmKSBjb25zdAorQ3VlU2V0IEN1ZVNldDo6dW5pb25T
ZXQoY29uc3QgQ3VlU2V0JiBvdGhlcikgY29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IElt
cGxlbWVudC4KLSAgICByZXR1cm4gQ3VlU2V0KCk7CisgICAgQ3VlU2V0IG5ld1NldDsKKyAgICBm
b3IgKEN1ZVNldDo6SXRlcmF0b3IgaXQgPSBvdGhlci5tX3NldC5iZWdpbigpOyBpdCAhPSBvdGhl
ci5tX3NldC5lbmQoKTsgKytpdCkgeworICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9ICppdDsK
KyAgICAgICAgbmV3U2V0LmFkZCgqY3VlKTsKKyAgICB9CisgICAgZm9yIChDdWVTZXQ6Okl0ZXJh
dG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsgaXQgIT0gbV9zZXQuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSAqaXQ7CisgICAgICAgIG5ld1NldC5hZGQoKmN1ZSk7Cisg
ICAgfQorICAgIHJldHVybiBuZXdTZXQ7CiB9CiAKLXZvaWQgQ3VlU2V0OjphZGQoY29uc3QgVGV4
dFRyYWNrQ3VlJikKK3ZvaWQgQ3VlU2V0OjphZGQoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpCiB7
Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCisgICAgbV9zZXQuYWRkKGNvbnN0X2Nh
c3Q8VGV4dFRyYWNrQ3VlKj4oJmN1ZSkpOwogfQogCi1ib29sIEN1ZVNldDo6Y29udGFpbnMoY29u
c3QgVGV4dFRyYWNrQ3VlJikgY29uc3QKK2Jvb2wgQ3VlU2V0Ojpjb250YWlucyhjb25zdCBUZXh0
VHJhY2tDdWUmIGN1ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKGNvbnN0X2Nhc3Q8
VGV4dFRyYWNrQ3VlKj4oJmN1ZSkpOwogfQogCi12b2lkIEN1ZVNldDo6cmVtb3ZlKGNvbnN0IFRl
eHRUcmFja0N1ZSYpCit2b2lkIEN1ZVNldDo6cmVtb3ZlKGNvbnN0IFRleHRUcmFja0N1ZSYgY3Vl
KQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIG1fc2V0LnJlbW92ZShj
b25zdF9jYXN0PFRleHRUcmFja0N1ZSo+KCZjdWUpKTsKK30KKwordm9pZCBDdWVTZXQ6OmNsZWFy
KCkKK3sKKyAgICBtX3NldC5jbGVhcigpOwogfQogCiBib29sIEN1ZVNldDo6aXNFbXB0eSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBtX3NldC5pc0VtcHR5KCk7CiB9CiAKIGludCBDdWVTZXQ6OnNpemUoKSBj
b25zdAogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBtX3NldC5zaXplKCk7Cit9CisKK0N1ZVNldDo6SXRlcmF0b3IgQ3VlU2V0Ojpi
ZWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2V0LmJlZ2luKCk7Cit9CisKK0N1ZVNldDo6
SXRlcmF0b3IgQ3VlU2V0OjplbmQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NldC5lbmQoKTsK
IH0KIAotdm9pZCBDdWVJbmRleDo6ZmV0Y2hOZXdDdWVzRnJvbUxvYWRlcihDdWVMb2FkZXIqKQor
dm9pZCBDdWVJbmRleDo6bmV3Q3Vlc0F2YWlsYWJsZShDdWVMb2FkZXIqIGxvYWRlcikKIHsKLSAg
ICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiBuZXdDdWVzOworICAgIGxvYWRlci0+ZmV0Y2hOZXdlc3RDdWVzKG5ld0N1ZXMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3Q3Vlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
YWRkKG5ld0N1ZXNbaV0uZ2V0KCkpOwogfQogCi12b2lkIEN1ZUluZGV4OjpyZW1vdmVDdWVzRnJv
bUluZGV4KGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqKQordm9pZCBDdWVJbmRleDo6cmVtb3ZlQ3Vl
c0Zyb21JbmRleChjb25zdCBUZXh0VHJhY2tDdWVMaXN0KiBjdWVMaXN0KQogewotICAgIC8vIEZJ
WE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VlTGlz
dC0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGN1ZUxpc3QtPml0ZW0oaSkpOwogfQog
CiBDdWVTZXQgQ3VlSW5kZXg6OnZpc2libGVDdWVzQXRUaW1lKGRvdWJsZSkgY29uc3QKQEAgLTkw
LDE0ICsxMTksMzIgQEAgQ3VlU2V0IEN1ZUluZGV4Ojp2aXNpYmxlQ3Vlc0F0VGltZShkb3VibGUp
IGNvbnN0CiAgICAgcmV0dXJuIEN1ZVNldCgpOwogfQogCi12b2lkIEN1ZUluZGV4OjphZGQoVGV4
dFRyYWNrQ3VlKikKK3ZvaWQgQ3VlSW5kZXg6OmFkZChUZXh0VHJhY2tDdWUqIGN1ZSkKK3sKKyAg
ICBhZGQoY3VlLCAwLCBtX2N1ZXNCeVN0YXJ0VGltZS5zaXplKCkpOworfQorCit2b2lkIEN1ZUlu
ZGV4OjphZGQoVGV4dFRyYWNrQ3VlKiBjdWUsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkKIHsK
LSAgICAvLyBGSVhNRSg2Mjg5MCk6IEltcGxlbWVudC4KKyAgICBpZiAoc3RhcnQgPT0gZW5kKSB7
CisgICAgICAgbV9jdWVzQnlTdGFydFRpbWUuaW5zZXJ0KHN0YXJ0LCBjdWUpOworICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgaW5kZXggPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAg
ICBpZiAoY3VlLT5zdGFydFRpbWUoKSA8IG1fY3Vlc0J5U3RhcnRUaW1lW2luZGV4XS0+c3RhcnRU
aW1lKCkKKyAgICAgICAgfHwgKGN1ZS0+c3RhcnRUaW1lKCkgPT0gbV9jdWVzQnlTdGFydFRpbWVb
aW5kZXhdLT5zdGFydFRpbWUoKQorICAgICAgICAmJiBjdWUtPmVuZFRpbWUoKSA8IG1fY3Vlc0J5
U3RhcnRUaW1lW2luZGV4XS0+ZW5kVGltZSgpKSkKKyAgICAgICAgYWRkKGN1ZSwgc3RhcnQsIGlu
ZGV4KTsKKyAgICBlbHNlCisgICAgICAgIGFkZChjdWUsIGluZGV4ICsgMSwgZW5kKTsKIH0KIAot
dm9pZCBDdWVJbmRleDo6cmVtb3ZlKFRleHRUcmFja0N1ZSopCit2b2lkIEN1ZUluZGV4OjpyZW1v
dmUoVGV4dFRyYWNrQ3VlKiBjdWUpCiB7Ci0gICAgLy8gRklYTUUoNjI4OTApOiBJbXBsZW1lbnQu
CisgICAgc2l6ZV90IGluZGV4ID0gbV9jdWVzQnlTdGFydFRpbWUuZmluZChjdWUpOworICAgIGlm
IChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9jdWVzQnlTdGFydFRpbWUucmVtb3ZlKGlu
ZGV4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DdWVJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJbmRleC5oCmlu
ZGV4IDg2MmUyZGE0OWMyYzkzMjZmYTk1OGEwZGNhMzFlNWM0MTgwOWEwY2QuLjgxMjJmYjQzMzQ4
YTZjNjI1Mzc2Y2ZhY2M5NDM2NjRiMDU4Mzg0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ3VlSW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmgKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNpbmNsdWRlICJDdWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw4ICszNywxMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBUZXh0VHJhY2tDdWU7CiBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0Owog
CisvLyBDdWVTZXQgaXMgdXNlZCBhcyBhIHN0cnVjdHVyZSBmb3IgY29tbW9uIG9wZXJhdGlvbnMg
b24gc2V0cyBvZiBUZXh0VHJhY2tDdWVzLgorLy8gSXQgcG9pbnRzIHRvIGV4aXN0aW5nIFRleHRU
cmFja0N1ZXMgYnV0IGRvZXMgbm90IG93biwgbWFpbnRhaW4sIG9yIG1vZGlmeSB0aGVtLgorCiBj
bGFzcyBDdWVTZXQgewogcHVibGljOgorICAgIHR5cGVkZWYgSGFzaFNldDxUZXh0VHJhY2tDdWUq
Pjo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgQ3VlU2V0KCkgeyB9CiAgICAgfkN1ZVNldCgpIHsg
fQogICAgIEN1ZVNldCBkaWZmZXJlbmNlKGNvbnN0IEN1ZVNldCYpIGNvbnN0OwpAQCAtNDUsMjIg
KzUwLDM3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZChjb25zdCBUZXh0VHJhY2tDdWUmKTsKICAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0OwogICAgIHZvaWQgcmVt
b3ZlKGNvbnN0IFRleHRUcmFja0N1ZSYpOworICAgIHZvaWQgY2xlYXIoKTsKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKICAgICBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgSGFz
aFNldDxUZXh0VHJhY2tDdWUqPiBtX3NldDsKIH07CiAKKy8vIEN1ZUluZGV4IGlzIHVzZWQgYXMg
YSBmYXN0IGxvb2stdXAgZm9yIFRleHRUcmFja0N1ZXMgZHVyaW5nIHZpZGVvIHBsYXliYWNrLgor
Ly8gSXQga2VlcHMgcmVmZXJlbmNlcyB0byBUZXh0VHJhY2tDdWVzLCBidXQgZG9lcyBub3Qgb3du
LCBtYWludGFpbiwgb3IgbW9kaWZ5IHRoZW0uCisvLyBUZXh0VHJhY2tDdWVzIGFyZSBvd25lZCBi
eSB0aGUgVGV4dFRyYWNrQ3VlTGlzdHMgb2YgdGhlaXIgcmVzcGVjdGl2ZSBUZXh0VHJhY2tzLAor
Ly8gd2hpY2ggYXJlIHJlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgQ3VlSW5kZXggb2YgbGlmZXRp
bWUgY2hhbmdlcyBvZiBUZXh0VHJhY2tDdWVzLAorLy8gdGhyb3VnaCB0aGUgQ3VlTG9hZGVyQ2xp
ZW50IGludGVyZmFjZS4KKwogY2xhc3MgQ3VlSW5kZXggOiBwdWJsaWMgQ3VlTG9hZGVyQ2xpZW50
IHsKIHB1YmxpYzoKICAgICAvLyBDdWVMb2FkZXJDbGllbnQgbWV0aG9kcy4KLSAgICB2b2lkIGZl
dGNoTmV3Q3Vlc0Zyb21Mb2FkZXIoQ3VlTG9hZGVyKik7CisgICAgdm9pZCBuZXdDdWVzQXZhaWxh
YmxlKEN1ZUxvYWRlciopOwogICAgIHZvaWQgcmVtb3ZlQ3Vlc0Zyb21JbmRleChjb25zdCBUZXh0
VHJhY2tDdWVMaXN0Kik7CiAKICAgICAvLyBSZXR1cm5zIHNldCBvZiBjdWVzIHZpc2libGUgYXQg
YSB0aW1lIGluIHNlY29uZHMuCiAgICAgQ3VlU2V0IHZpc2libGVDdWVzQXRUaW1lKGRvdWJsZSkg
Y29uc3Q7CiAgICAgdm9pZCBhZGQoVGV4dFRyYWNrQ3VlKik7CiAgICAgdm9pZCByZW1vdmUoVGV4
dFRyYWNrQ3VlKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGQoVGV4dFRyYWNrQ3VlKiwgc2l6
ZV90IHN0YXJ0LCBzaXplX3QgZW5kKTsKKworICAgIFZlY3RvcjxUZXh0VHJhY2tDdWUqPiBtX2N1
ZXNCeVN0YXJ0VGltZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDA0YzYwODk1NWMxZmZmZjJmZGJmZmU2
MjBjYjJhMWFlZGFiMGU5MTIuLjAyODJhNGQxYmRjYTEwM2NjZmZlNDFkNGMyNDcwMjNlMDNlODI3
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNzkzLDcg
Kzc5Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFRleHRUcmFja3MoKQogICAgIGZv
ciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKSB7CiAgICAg
ICAgICAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFjayA9IHN0YXRpY19jYXN0PEhUTUxUcmFja0Vs
ZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIHRyYWNrLT5sb2FkKEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgICAgIHRyYWNrLT5sb2FkKEFjdGl2
ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAmbV9jdWVJbmRleCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4
IGJjN2JmMzY3Nzk5NjMwMDIxMjhlY2RmNTlmZmVmZTlkMjFjMDRmZDYuLmI3Y2NmNjZhMTU1NWFh
ZjVmOWI2Yjg3NThmN2Q5MjEwYTk4NzVlOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJveHku
aCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorI2luY2x1ZGUgIkN1ZUluZGV4
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKQEAgLTQz
MCw2ICs0MzQsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdl
c3R1cmUgOiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKICAgICBib29sIG1f
aGF2ZVByZXBhcmVkVG9QbGF5IDogMTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBD
dWVJbmRleCBtX2N1ZUluZGV4OworI2VuZGlmCiB9OwogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcAppbmRleCAwNDNmMDhiMzZmNzA0NTY1ODk5
ODhjZjJhODE0ZGEwZjMxNGFhZjhjLi4zMWUxZTI2YzkwNDY5YzMxMzFiOGY2MzQ0Njc4OWNkYTYy
ZWQ4NzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTEy
OSwxMiArMTI5LDE1IEBAIGJvb2wgSFRNTFRyYWNrRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyaWJ1dGUpIGNvbnN0CiAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+bmFtZSgpID09
IHNyY0F0dHI7CiB9CiAKLXZvaWQgSFRNTFRyYWNrRWxlbWVudDo6bG9hZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQordm9pZCBIVE1MVHJhY2tFbGVtZW50Ojpsb2FkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEN1ZUxvYWRlckNsaWVudCogY3VlQ2xpZW50KQogewor
ICAgIGlmIChtX3RyYWNrKQorICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIHNvdXJjZSA9IGdl
dE5vbkVtcHR5VVJMQXR0cmlidXRlKHNyY0F0dHIpOworICAgIGlmIChzb3VyY2UuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CiAgICAgbV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNrOjpjcmVh
dGUoa2luZCgpLCBsYWJlbCgpLCBzcmNsYW5nKCksIGlzRGVmYXVsdCgpKTsKLQotICAgIGlmICho
YXNBdHRyaWJ1dGUoc3JjQXR0cikpCi0gICAgICAgIG1fdHJhY2stPmxvYWQoZ2V0Tm9uRW1wdHlV
UkxBdHRyaWJ1dGUoc3JjQXR0ciksIGNvbnRleHQpOworICAgIG1fdHJhY2stPmxvYWQoc291cmNl
LCBjb250ZXh0LCBjdWVDbGllbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNr
RWxlbWVudC5oCmluZGV4IDk0NjU2NDJlNTY3NTc1NjA4YTY0NjhkMzAzZjg0ZGFkNjhiNzVjOWIu
LjcyM2I4MmJlMzMxZmExNzc2YmJkODFiYjBmYTlmM2FiZmY3ODVlZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQ3VlTG9hZGVyQ2xpZW50OworCiBjbGFzcyBIVE1MVHJhY2tFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MVHJhY2tFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkBAIC00OSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExhYmVsKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgc2V0SXNEZWZhdWx0KGJvb2wpOwogICAgIAotICAgIHZvaWQgbG9h
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdm9pZCBsb2FkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBDdWVMb2FkZXJDbGllbnQqKTsKIAogcHJpdmF0ZToKICAgICBIVE1MVHJhY2tF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCA0ZWIyNDg1YzRiNTA2ZGJlODgxMTJhMjcz
ODlmZjlmZTM0YTk4MzE5Li43OTRhMTlkNTU5ZDJiNjk3ODIzMjZhMTg4M2IxN2YwOWM3ODBhZjc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAtMzUsMjUg
KzM1LDM0IEBAIExvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayhjb25zdCBTdHJp
bmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvCiAgICAgOiBUZXh0VHJhY2soa2luZCwg
bGFiZWwsIGxhbmd1YWdlKQogICAgICwgbV9pc0RlZmF1bHQoaXNEZWZhdWx0KQogeworICAgIG1f
Y3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0ZSgpOworICAgIG1fY3Vlcy0+c2V0Q3VlT3Jk
ZXIoVGV4dFRyYWNrQ3VlTGlzdDo6Q2hyb25vbG9naWNhbCk7CiB9CiAKIExvYWRhYmxlVGV4dFRy
YWNrOjp+TG9hZGFibGVUZXh0VHJhY2soKQogeworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPnJlbW92ZUN1ZXNGcm9tSW5kZXgobV9jdWVzLmdldCgpKTsKIH0KIAotdm9pZCBM
b2FkYWJsZVRleHRUcmFjazo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKK3ZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEN1ZUxvYWRlckNsaWVu
dCogY2xpZW50KQogeworICAgIHNldEN1ZUxvYWRlckNsaWVudChjbGllbnQpOwogICAgIHJldHVy
biBtX3BhcnNlci5sb2FkKHVybCwgY29udGV4dCwgdGhpcyk7CiB9CiAKLWJvb2wgTG9hZGFibGVU
ZXh0VHJhY2s6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICByZXR1cm4g
bV9wYXJzZXIuc3VwcG9ydHNUeXBlKHVybCk7Ci19Ci0KIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6
Om5ld0N1ZXNQYXJzZWQoKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogRmV0Y2ggbmV3IGN1ZXMg
ZnJvbSBwYXJzZXIgYW5kIHRlbXBvcmFyaWx5IHN0b3JlIHRvIGdpdmUgdG8gQ3VlTG9hZGVyQ2xp
ZW50IHdoZW4gZmV0Y2hOZXdDdWVzRnJvbUxvYWRlciBpcyBjYWxsZWQuCisgICAgLy8gRmV0Y2gg
bmV3IGN1ZXMgZnJvbSBwYXJzZXIgYW5kIHRlbXBvcmFyaWx5IHN0b3JlIHRvIGdpdmUgdG8gQ3Vl
TG9hZGVyQ2xpZW50IHdoZW4gZmV0Y2hOZXdDdWVzRnJvbUxvYWRlciBpcyBjYWxsZWQuCisgICAg
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4gbmV3Q3VlczsKKyAgICBtX3BhcnNlci5mZXRj
aFBhcnNlZEN1ZXMobmV3Q3Vlcyk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1
ZT4gPjo6aXRlcmF0b3IgaXQgPSBuZXdDdWVzLmJlZ2luKCk7IGl0IDwgbmV3Q3Vlcy5lbmQoKTsg
aXQrKykgeworICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSAqaXQ7CisgICAgICAg
IGN1ZS0+c2V0VHJhY2sodGhpcyk7CisgICAgICAgIG1fbmV3ZXN0Q3Vlcy5hcHBlbmQoY3VlKTsK
KyAgICB9CisgICAgbV9jdWVzLT5hZGQobmV3Q3Vlcyk7CisgICAgbV9jbGllbnQtPm5ld0N1ZXNB
dmFpbGFibGUodGhpcyk7CiB9CiAKIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OnRyYWNrTG9hZFN0
YXJ0ZWQoKQpAQCAtNzEsMTQgKzgwLDExIEBAIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OnRyYWNr
TG9hZENvbXBsZXRlZCgpCiAgICAgc2V0UmVhZHlTdGF0ZShUZXh0VHJhY2s6OkxPQURFRCk7CiB9
CiAKLXZvaWQgTG9hZGFibGVUZXh0VHJhY2s6Om5ld0N1ZXNMb2FkZWQoKQotewotICAgIC8vIEZJ
WE1FKDYyODg1KTogVGVsbCB0aGUgY2xpZW50IHRvIGZldGNoIHRoZSBsYXRlc3QgY3Vlcy4KLX0K
LQotdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6ZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxUZXh0VHJh
Y2tDdWUqPiYpCit2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpmZXRjaE5ld2VzdEN1ZXMoVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mIG91dHB1dCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4NSk6
IEltcGxlbWVudC4KKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+OjppdGVy
YXRvciBpdCA9IG1fbmV3ZXN0Q3Vlcy5iZWdpbigpOyBpdCA8IG1fbmV3ZXN0Q3Vlcy5lbmQoKTsg
aXQrKykKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgqaXQpOworICAgIG1fbmV3ZXN0Q3Vlcy5jbGVh
cigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRh
YmxlVGV4dFRyYWNrLmgKaW5kZXggYzU1ZWQyNmE2YTJhMDUyNjRkMjQ3ZjAxNTA2YmFmMDgzMWI1
OThmMC4uYTlkNDg4ZTQ4YjhjNTdjYjdiNmY4M2QyMWE4NmZlY2IwMTYxYzU4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTG9hZGFibGVUZXh0VHJhY2suaApAQCAtNDksMTYgKzQ5LDE0IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgdmlydHVhbCB+TG9hZGFibGVUZXh0VHJhY2soKTsKIAotICAgIHZvaWQg
bG9hZChjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgYm9vbCBz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVMb2FkZXJDbGllbnQqKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrTG9hZFN0YXJ0
ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tMb2FkRXJyb3IoKTsKICAgICB2aXJ0dWFsIHZv
aWQgdHJhY2tMb2FkQ29tcGxldGVkKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc0xvYWRl
ZCgpOwotICAgIHZpcnR1YWwgdm9pZCBmZXRjaE5ld2VzdEN1ZXMoVmVjdG9yPFRleHRUcmFja0N1
ZSo+Jik7CisgICAgdmlydHVhbCB2b2lkIGZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8UmVmUHRyPFRl
eHRUcmFja0N1ZT4gPiYpOwogCiBwcml2YXRlOgogICAgIExvYWRhYmxlVGV4dFRyYWNrKGNvbnN0
IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFn
ZSwgYm9vbCBpc0RlZmF1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NdXRh
YmxlVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5j
cHAKaW5kZXggNGQ2ODM1NDY5NjY2NDY5ZDljZmZmODI2M2EyZjJjNTBhMzRiZjQxMS4uNTVjZDk2
MWRjMjVjYmRhNDBhYmQyNTFmNTZmOGU3NTQ0MDQwYmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9NdXRhYmxlVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L011dGFibGVUZXh0VHJhY2suY3BwCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgTXV0YWJsZVRleHRU
cmFjazo6bmV3Q3Vlc0xvYWRlZCgpCiAgICAgLy8gRklYTUUoNjI4OTApOiBJbXBsZW1lbnQuCiB9
CiAKLXZvaWQgTXV0YWJsZVRleHRUcmFjazo6ZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxUZXh0VHJh
Y2tDdWUqPiYpCit2b2lkIE11dGFibGVUZXh0VHJhY2s6OmZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8
UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpCiB7CiAgICAgLy8gRklYTUUoNjI4OTApOiBJbXBsZW1l
bnQuCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL011dGFibGVUZXh0VHJhY2su
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5oCmluZGV4IDYxOGMyNzIy
ZDVjMzI1OGNhNmIxN2RjMjc2MTBkNzM1Mjg5MDMxZGQuLmEwYjc3ZGIzZjAwZWMyNDFmOWY1ZDM0
ZmM5Y2MyN2UzNjE5ZmViZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJs
ZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5o
CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUN1ZShQYXNzUmVmUHRy
PFRleHRUcmFja0N1ZT4pOwogCiAgICAgdmlydHVhbCB2b2lkIG5ld0N1ZXNMb2FkZWQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxUZXh0VHJhY2tDdWUqPiYpOwor
ICAgIHZpcnR1YWwgdm9pZCBmZXRjaE5ld2VzdEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tD
dWU+ID4mKTsKIAogcHJpdmF0ZToKICAgICBNdXRhYmxlVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYg
a2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0VHJhY2suaAppbmRleCA5YTgyZjgzZWUxZjcyZGFlZDZjNjJjMTAwYjViNTQwNzM4
MTBmZmEyLi5hOGY5NzhiZTQyNTNjYzQxNjhmOWQ0MmRjYzE3NjYwYzQwNDNhMjdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dFRyYWNrLmgKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgVGV4dFRyYWNrOworY2xhc3MgVGV4dFRyYWNrQ3VlOwogY2xhc3MgVGV4dFRyYWNr
Q3VlTGlzdDsKIAogY2xhc3MgVGV4dFRyYWNrQ2xpZW50IHsKQEAgLTc3LDYgKzc4LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKIAogICAgIFJlZlB0
cjxUZXh0VHJhY2tDdWVMaXN0PiBtX2N1ZXM7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tD
dWU+ID4gbV9uZXdlc3RDdWVzOwogCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2tpbmQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmNwcAppbmRleCA5YTA2YmQ1MTZjOWZlMDlm
YWMwNjhjMzVkN2QyNWYwYmVkMjk5ZjZjLi4zOTI4MTU1M2EwMGFhYTJiOTA5ODM0MmE3NGY0Mzc2
OWExMTMzYzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxp
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5jcHAKQEAg
LTMyLDI5ICszMiw3NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUZXh0VHJhY2tDdWVMaXN0
OjpUZXh0VHJhY2tDdWVMaXN0KCkKKyAgICA6IG1fb3JkZXIoTm9PcmRlclJlcXVpcmVtZW50cykK
IHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KIH0KIAotVGV4dFRyYWNrQ3VlKiBU
ZXh0VHJhY2tDdWVMaXN0OjpnZXRDdWVCeUlkKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit1bnNpZ25l
ZCBsb25nIFRleHRUcmFja0N1ZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUo
NjI4ODMpOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIG1fbGlzdC5zaXplKCk7Cit9CisKK1RleHRU
cmFja0N1ZSogVGV4dFRyYWNrQ3VlTGlzdDo6Z2V0Q3VlQnlJZChjb25zdCBTdHJpbmcmIGlkKSBj
b25zdAoreworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9saXN0LmJlZ2luKCk7IGl0ICE9IG1fbGlzdC5lbmQoKTsgaXQrKykgewor
ICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYgKGN1ZS0+
aWQoKSA9PSBpZCkKKyAgICAgICAgICAgIHJldHVybiBjdWU7CisgICAgfQogICAgIHJldHVybiAw
OwogfQogCi12b2lkIFRleHRUcmFja0N1ZUxpc3Q6OmFwcGVuZChWZWN0b3I8UGFzc1JlZlB0cjxU
ZXh0VHJhY2tDdWU+ID4mKQorVGV4dFRyYWNrQ3VlKiBUZXh0VHJhY2tDdWVMaXN0OjppdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwor
fQorCit2b2lkIFRleHRUcmFja0N1ZUxpc3Q6OmFkZChjb25zdCBWZWN0b3I8UmVmUHRyPFRleHRU
cmFja0N1ZT4gPiYgbmV3Q3VlcykKK3sKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNr
Q3VlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0N1ZXMuYmVnaW4oKTsgaXQgIT0gbmV3Q3Vl
cy5lbmQoKTsgaXQrKykKKyAgICAgICAgYWRkKCppdCk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3Vl
TGlzdDo6YWRkKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUpCit7CisgICAgUmVmUHRyPFRl
eHRUcmFja0N1ZT4gbmV3Q3VlID0gY3VlOworICAgIGlmIChtX29yZGVyID09IENocm9ub2xvZ2lj
YWwgJiYgbmV3Q3VlLT5zdGFydFRpbWUoKSA8IG1fbGlzdC5sYXN0KCktPnN0YXJ0VGltZSgpKQor
ICAgICAgICByZXR1cm47CisgICAgYWRkKG5ld0N1ZSwgMCwgbV9saXN0LnNpemUoKSk7Cit9CisK
K3ZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6YWRkKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUs
IHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkKK3sKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBu
ZXdDdWUgPSBjdWU7CisgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgIG1fbGlzdC5pbnNl
cnQoc3RhcnQsIG5ld0N1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBp
bmRleCA9IChzdGFydCArIGVuZCkgLyAyOworICAgIGlmIChuZXdDdWUtPnN0YXJ0VGltZSgpIDwg
bV9saXN0W2luZGV4XS0+c3RhcnRUaW1lKCkKKyAgICAgICAgfHwgKG5ld0N1ZS0+c3RhcnRUaW1l
KCkgPT0gbV9saXN0W2luZGV4XS0+c3RhcnRUaW1lKCkKKyAgICAgICAgJiYgbmV3Q3VlLT5lbmRU
aW1lKCkgPCBtX2xpc3RbaW5kZXhdLT5lbmRUaW1lKCkpKQorICAgICAgICBhZGQobmV3Q3VlLCBz
dGFydCwgaW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgYWRkKG5ld0N1ZSwgaW5kZXggKyAxLCBl
bmQpOworfQorCisKK3ZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6cmVtb3ZlKFRleHRUcmFja0N1ZSog
Y3VlKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIGN1ZS0+c2V0SXNB
Y3RpdmUoZmFsc2UpOworICAgIG1fbGlzdC5yZW1vdmUobV9saXN0LmZpbmQoY3VlKSk7CiB9CiAK
LXZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6YXBwZW5kKGNvbnN0IFBhc3NSZWZQdHI8VGV4dFRyYWNr
Q3VlPiYpCitUZXh0VHJhY2tDdWVMaXN0OjpJdGVyYXRvciBUZXh0VHJhY2tDdWVMaXN0OjpiZWdp
bigpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIG1fbGlz
dC5iZWdpbigpOwogfQogCi12b2lkIFRleHRUcmFja0N1ZUxpc3Q6OnJlbW92ZShjb25zdCBQYXNz
UmVmUHRyPFRleHRUcmFja0N1ZT4mKQorVGV4dFRyYWNrQ3VlTGlzdDo6SXRlcmF0b3IgVGV4dFRy
YWNrQ3VlTGlzdDo6ZW5kKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAg
ICByZXR1cm4gbV9saXN0LmVuZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5oCmluZGV4IDNiMzdlNDRmNWM0YWRmNjBkNzg4
YzEyMTk3NjdlNWUzOTZjNTljMWUuLmEwODdiZTc4MTQ5YjQ5MmFkNGJjYmY5NjcwZTI2ZGQ1MjEx
NGU4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5oCkBAIC0zNywyMSAr
MzcsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0IDog
cHVibGljIFJlZkNvdW50ZWQ8VGV4dFRyYWNrQ3VlTGlzdD4gewogcHVibGljOgorICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID46Oml0ZXJhdG9yIEl0ZXJhdG9yOworCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlTGlzdD4gY3JlYXRlKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3VlTGlzdCk7CiAgICAgfQorICAg
IAorICAgIH5UZXh0VHJhY2tDdWVMaXN0KCkgeyB9CiAKICAgICB1bnNpZ25lZCBsb25nIGxlbmd0
aCgpIGNvbnN0OworICAgIFRleHRUcmFja0N1ZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CiAgICAgVGV4dFRyYWNrQ3VlKiBnZXRDdWVCeUlkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAg
IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlTGlzdD4gYWN0aXZlQ3VlcygpOwogCi0gICAgdm9pZCBh
cHBlbmQoY29uc3QgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+Jik7Ci0gICAgdm9pZCBhcHBlbmQo
VmVjdG9yPFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7Ci0gICAgdm9pZCByZW1vdmUoY29u
c3QgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+Jik7CisgICAgZW51bSBDdWVPcmRlclJlcXVpcmVt
ZW50cyB7IE5vT3JkZXJSZXF1aXJlbWVudHMsIENocm9ub2xvZ2ljYWwgfTsKKyAgICB2b2lkIHNl
dEN1ZU9yZGVyKEN1ZU9yZGVyUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cykgeyBtX29yZGVyID0g
cmVxdWlyZW1lbnRzOyB9CisgICAgCisgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxUZXh0VHJhY2tD
dWU+KTsKKyAgICB2b2lkIGFkZChjb25zdCBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYp
OworICAgIHZvaWQgcmVtb3ZlKFRleHRUcmFja0N1ZSopOworICAgIAorICAgIHZpcnR1YWwgSXRl
cmF0b3IgYmVnaW4oKTsKKyAgICB2aXJ0dWFsIEl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRlOgog
ICAgIFRleHRUcmFja0N1ZUxpc3QoKTsKKyAgICB2b2lkIGFkZChQYXNzUmVmUHRyPFRleHRUcmFj
a0N1ZT4sIHNpemVfdCwgc2l6ZV90KTsKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4g
PiBtX2xpc3Q7CisgICAgQ3VlT3JkZXJSZXF1aXJlbWVudHMgbV9vcmRlcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9DdWVM
b2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9DdWVMb2FkZXIuaAppbmRleCAwYmY3Yjky
NjUyYjg4YzFmNjNiNzljODkyYTkzYjdjNTIyZDQ1ZjEyLi5mZjc1NGFiZmQwN2M4NzJhYWY3ZWVh
YTk1ZGYyN2I3ODkxMmQ0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Vl
TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0N1ZUxvYWRlci5oCkBAIC00MCw3
ICs0MCw3IEBAIGNsYXNzIFRleHRUcmFja0N1ZUxpc3Q7CiBjbGFzcyBDdWVMb2FkZXJDbGllbnQg
ewogcHVibGljOgogICAgIC8vIFF1ZXJpZXMgQ3VlTG9hZGVyIGZvciBuZXdlc3QgY3Vlcy4KLSAg
ICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdDdWVzRnJvbUxvYWRlcihDdWVMb2FkZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIG5ld0N1ZXNBdmFpbGFibGUoQ3VlTG9hZGVyKikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVDdWVzRnJvbUluZGV4KGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqKSA9
IDA7CiB9OwogCkBAIC00OCwxMSArNDgsOCBAQCBjbGFzcyBDdWVMb2FkZXIgewogcHVibGljOgog
ICAgIHZvaWQgc2V0Q3VlTG9hZGVyQ2xpZW50KEN1ZUxvYWRlckNsaWVudCopOwogCi0gICAgLy8g
SW5mb3JtcyBjbGllbnQgdGhhdCBuZXcgY3VlcyBoYXZlIGJlZW4gbG9hZGVkLgotICAgIHZpcnR1
YWwgdm9pZCBuZXdDdWVzTG9hZGVkKCkgPSAwOwotCiAgICAgLy8gVHJhbnNmZXJzIG93bmVyc2hp
cCBvZiBjdXJyZW50bHkgbG9hZGVkIGN1ZXMuCi0gICAgdmlydHVhbCB2b2lkIGZldGNoTmV3ZXN0
Q3VlcyhWZWN0b3I8VGV4dFRyYWNrQ3VlKj4mIGN1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBjdWVzKSA9IDA7
CiAKIHByb3RlY3RlZDoKICAgICBDdWVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKaW5kZXggNGE2ODY5YmE5ZGI0NzFj
NDY0ZmM0MGRiNDBjODIxMGNlOTY0ZDIzMy4uODRjNmNlMDkwZTg2MmExMzk3MTdhNTE2YmUyY2M0
ZWM1ZGNkZTJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3Vl
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIu
Y3BwCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ3VlUGFyc2VyOjpD
dWVQYXJzZXIoKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogSW1wbGVtZW50LgogfQogCiBDdWVQ
YXJzZXI6On5DdWVQYXJzZXIoKQpAQCAtNjUsMTIgKzY0LDYgQEAgdm9pZCBDdWVQYXJzZXI6Omxv
YWQoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEN1
ZVBhcnMKICAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShjb250ZXh0LCB0
aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKIH0KIAotYm9vbCBDdWVQYXJzZXI6OnN1cHBvcnRzVHlw
ZShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IGNoZWNrIGFnYWlu
c3QgYSBsaXN0IG9mIHN1cHBvcnRlZCB0eXBlcwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9p
ZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmll
ciovLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAocmVzcG9u
c2UubWltZVR5cGUoKSA9PSAidGV4dC92dHQiKQpAQCAtOTcsOSArOTAsOSBAQCB2b2lkIEN1ZVBh
cnNlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikKICAgICBtX2NsaWVudC0+dHJhY2tM
b2FkRXJyb3IoKTsKIH0KIAotdm9pZCBDdWVQYXJzZXI6OmZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8
UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpCit2b2lkIEN1ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVz
KFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKQogewotICAgIC8vIEZJ
WE1FKDYyODkzKTogSW1wbGVtZW50LgorICAgIG1fcHJpdmF0ZS0+ZmV0Y2hQYXJzZWRDdWVzKG91
dHB1dEN1ZXMpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6bmV3Q3Vlc1BhcnNlZCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDdjNmM2MzE3NGU1NzgzNjk2
MDZlZGEyNWY0OGFkNTQ5OGQwODVmMDguLjk1MGMyZjZlY2E0MGEwZDYzZmRjNzVhYzM1NjAxYTEw
OTVkZDk4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCkBA
IC02NCw3ICs2NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYpOwogCiAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBDdWVQYXJzZXJDbGllbnQqKTsKLSAgICBib29sIHN1cHBvcnRzVHlwZShjb25zdCBT
dHJpbmcmKTsKIAogICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRy
YWNrQ3VlPiA+Jik7CiAgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105263</attachid>
            <date>2011-08-25 15:35:48 -0700</date>
            <delta_ts>2011-08-30 11:45:26 -0700</delta_ts>
            <desc>updating to ToT</desc>
            <filename>bug-62883-20110825153547.patch</filename>
            <type>text/plain</type>
            <size>22462</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM4MTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3YTExZDVhMDc4M2Y0NGEx
NjM4ZDY5NzU5OTY1ZWM1YTZlZjQ3YzBkLi43NzIxOTBjYjVkYzNhOTZlZDVmMWQzZmYzNGI4YzRj
ZTRiYTY3YjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDgtMDkgIEFubmEg
Q2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBzdG9y
YWdlIGFuZCByZXRyaWV2YWwgb2YgVGV4dFRyYWNrQ3Vlcy4KKyAgICAgICAgVGV4dFRyYWNrQ3Vl
TGlzdHMgYXJlIHVzZWQgYnkgVGV4dFRyYWNrcyBmb3Igc3RvcmFnZSBvZiBUZXh0VHJhY2tDdWVz
LgorICAgICAgICBDdWVJbmRleCBrZWVwcyBwb2ludGVycyB0byBleGlzdGluZyBUZXh0VHJhY2tD
dWVzIGZvciBmYXN0IGxvb2stdXAgZHVyaW5nIHZpZGVvIHBsYXliYWNrLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4ODMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBhbnkgdGVzdHMgaW4gbWVk
aWEvdHJhY2ssIGJ1dCBlc3BlY2lhbGx5CisgICAgICAgIG1lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0
dC10YzAxMi1vdXRvZm9yZGVyLmh0bWwKKworICAgICAgICAqIGh0bWwvQ3VlSW5kZXguY3BwOgor
ICAgICAgICAqIGh0bWwvQ3VlSW5kZXguaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTFRyYWNrRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVHJhY2tFbGVtZW50
Lmg6CisgICAgICAgICogaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHA6CisgICAgICAgICogaHRt
bC9Mb2FkYWJsZVRleHRUcmFjay5oOgorICAgICAgICAqIGh0bWwvTXV0YWJsZVRleHRUcmFjay5j
cHA6CisgICAgICAgICogaHRtbC9NdXRhYmxlVGV4dFRyYWNrLmg6CisgICAgICAgICogaHRtbC9U
ZXh0VHJhY2suaDoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZUxpc3QuY3BwOgorICAgICAg
ICAqIGh0bWwvVGV4dFRyYWNrQ3VlTGlzdC5oOgorICAgICAgICAqIGxvYWRlci9DdWVMb2FkZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oOgorCiAyMDExLTA4LTI1ICBOYXRlIENoYXBpbiAgPGph
cGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BsaXQgc29tZSBvZiB0aGUgdmFyaWFibGVz
IG91dCBvZiBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdWVJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmNwcApp
bmRleCAzM2NmOTJlNWMxNTA2OWZkM2IzZWVkMjczNDIyOWNiZGNkZjZjOTNiLi4xOGMwYmE5YmYz
ZmM0NGVkMDBiNjM5N2FhZDYzOGE1ZTQzMWY1NDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0N1ZUluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmNw
cApAQCAtMzQsNTQgKzM0LDgzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3VlU2V0IEN1
ZVNldDo6ZGlmZmVyZW5jZShjb25zdCBDdWVTZXQmKSBjb25zdAorQ3VlU2V0IEN1ZVNldDo6ZGlm
ZmVyZW5jZShjb25zdCBDdWVTZXQmIG90aGVyKSBjb25zdAogewotICAgIC8vIEZJWE1FKDYyODgz
KTogSW1wbGVtZW50LgotICAgIHJldHVybiBDdWVTZXQoKTsKKyAgICBDdWVTZXQgbmV3U2V0Owor
ICAgIGZvciAoQ3VlU2V0OjpJdGVyYXRvciBpdCA9IG90aGVyLm1fc2V0LmJlZ2luKCk7IGl0ICE9
IG90aGVyLm1fc2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0g
Kml0OworICAgICAgICBpZiAoIW1fc2V0LmNvbnRhaW5zKGN1ZSkpCisgICAgICAgICAgICBuZXdT
ZXQuYWRkKCpjdWUpOworICAgIH0KKyAgICByZXR1cm4gbmV3U2V0OwogfQogCi1DdWVTZXQgQ3Vl
U2V0Ojp1bmlvblNldChjb25zdCBDdWVTZXQmKSBjb25zdAorQ3VlU2V0IEN1ZVNldDo6dW5pb25T
ZXQoY29uc3QgQ3VlU2V0JiBvdGhlcikgY29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IElt
cGxlbWVudC4KLSAgICByZXR1cm4gQ3VlU2V0KCk7CisgICAgQ3VlU2V0IG5ld1NldDsKKyAgICBm
b3IgKEN1ZVNldDo6SXRlcmF0b3IgaXQgPSBvdGhlci5tX3NldC5iZWdpbigpOyBpdCAhPSBvdGhl
ci5tX3NldC5lbmQoKTsgKytpdCkgeworICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9ICppdDsK
KyAgICAgICAgbmV3U2V0LmFkZCgqY3VlKTsKKyAgICB9CisgICAgZm9yIChDdWVTZXQ6Okl0ZXJh
dG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsgaXQgIT0gbV9zZXQuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSAqaXQ7CisgICAgICAgIG5ld1NldC5hZGQoKmN1ZSk7Cisg
ICAgfQorICAgIHJldHVybiBuZXdTZXQ7CiB9CiAKLXZvaWQgQ3VlU2V0OjphZGQoY29uc3QgVGV4
dFRyYWNrQ3VlJikKK3ZvaWQgQ3VlU2V0OjphZGQoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpCiB7
Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCisgICAgbV9zZXQuYWRkKGNvbnN0X2Nh
c3Q8VGV4dFRyYWNrQ3VlKj4oJmN1ZSkpOwogfQogCi1ib29sIEN1ZVNldDo6Y29udGFpbnMoY29u
c3QgVGV4dFRyYWNrQ3VlJikgY29uc3QKK2Jvb2wgQ3VlU2V0Ojpjb250YWlucyhjb25zdCBUZXh0
VHJhY2tDdWUmIGN1ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKGNvbnN0X2Nhc3Q8
VGV4dFRyYWNrQ3VlKj4oJmN1ZSkpOwogfQogCi12b2lkIEN1ZVNldDo6cmVtb3ZlKGNvbnN0IFRl
eHRUcmFja0N1ZSYpCit2b2lkIEN1ZVNldDo6cmVtb3ZlKGNvbnN0IFRleHRUcmFja0N1ZSYgY3Vl
KQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIG1fc2V0LnJlbW92ZShj
b25zdF9jYXN0PFRleHRUcmFja0N1ZSo+KCZjdWUpKTsKK30KKwordm9pZCBDdWVTZXQ6OmNsZWFy
KCkKK3sKKyAgICBtX3NldC5jbGVhcigpOwogfQogCiBib29sIEN1ZVNldDo6aXNFbXB0eSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBtX3NldC5pc0VtcHR5KCk7CiB9CiAKIGludCBDdWVTZXQ6OnNpemUoKSBj
b25zdAogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBtX3NldC5zaXplKCk7Cit9CisKK0N1ZVNldDo6SXRlcmF0b3IgQ3VlU2V0Ojpi
ZWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2V0LmJlZ2luKCk7Cit9CisKK0N1ZVNldDo6
SXRlcmF0b3IgQ3VlU2V0OjplbmQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NldC5lbmQoKTsK
IH0KIAotdm9pZCBDdWVJbmRleDo6ZmV0Y2hOZXdDdWVzRnJvbUxvYWRlcihDdWVMb2FkZXIqKQor
dm9pZCBDdWVJbmRleDo6bmV3Q3Vlc0F2YWlsYWJsZShDdWVMb2FkZXIqIGxvYWRlcikKIHsKLSAg
ICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiBuZXdDdWVzOworICAgIGxvYWRlci0+ZmV0Y2hOZXdlc3RDdWVzKG5ld0N1ZXMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3Q3Vlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
YWRkKG5ld0N1ZXNbaV0uZ2V0KCkpOwogfQogCi12b2lkIEN1ZUluZGV4OjpyZW1vdmVDdWVzRnJv
bUluZGV4KGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqKQordm9pZCBDdWVJbmRleDo6cmVtb3ZlQ3Vl
c0Zyb21JbmRleChjb25zdCBUZXh0VHJhY2tDdWVMaXN0KiBjdWVMaXN0KQogewotICAgIC8vIEZJ
WE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VlTGlz
dC0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGN1ZUxpc3QtPml0ZW0oaSkpOwogfQog
CiBDdWVTZXQgQ3VlSW5kZXg6OnZpc2libGVDdWVzQXRUaW1lKGRvdWJsZSkgY29uc3QKQEAgLTkw
LDE0ICsxMTksMzIgQEAgQ3VlU2V0IEN1ZUluZGV4Ojp2aXNpYmxlQ3Vlc0F0VGltZShkb3VibGUp
IGNvbnN0CiAgICAgcmV0dXJuIEN1ZVNldCgpOwogfQogCi12b2lkIEN1ZUluZGV4OjphZGQoVGV4
dFRyYWNrQ3VlKikKK3ZvaWQgQ3VlSW5kZXg6OmFkZChUZXh0VHJhY2tDdWUqIGN1ZSkKK3sKKyAg
ICBhZGQoY3VlLCAwLCBtX2N1ZXNCeVN0YXJ0VGltZS5zaXplKCkpOworfQorCit2b2lkIEN1ZUlu
ZGV4OjphZGQoVGV4dFRyYWNrQ3VlKiBjdWUsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkKIHsK
LSAgICAvLyBGSVhNRSg2Mjg5MCk6IEltcGxlbWVudC4KKyAgICBpZiAoc3RhcnQgPT0gZW5kKSB7
CisgICAgICAgbV9jdWVzQnlTdGFydFRpbWUuaW5zZXJ0KHN0YXJ0LCBjdWUpOworICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgaW5kZXggPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAg
ICBpZiAoY3VlLT5zdGFydFRpbWUoKSA8IG1fY3Vlc0J5U3RhcnRUaW1lW2luZGV4XS0+c3RhcnRU
aW1lKCkKKyAgICAgICAgfHwgKGN1ZS0+c3RhcnRUaW1lKCkgPT0gbV9jdWVzQnlTdGFydFRpbWVb
aW5kZXhdLT5zdGFydFRpbWUoKQorICAgICAgICAmJiBjdWUtPmVuZFRpbWUoKSA8IG1fY3Vlc0J5
U3RhcnRUaW1lW2luZGV4XS0+ZW5kVGltZSgpKSkKKyAgICAgICAgYWRkKGN1ZSwgc3RhcnQsIGlu
ZGV4KTsKKyAgICBlbHNlCisgICAgICAgIGFkZChjdWUsIGluZGV4ICsgMSwgZW5kKTsKIH0KIAot
dm9pZCBDdWVJbmRleDo6cmVtb3ZlKFRleHRUcmFja0N1ZSopCit2b2lkIEN1ZUluZGV4OjpyZW1v
dmUoVGV4dFRyYWNrQ3VlKiBjdWUpCiB7Ci0gICAgLy8gRklYTUUoNjI4OTApOiBJbXBsZW1lbnQu
CisgICAgc2l6ZV90IGluZGV4ID0gbV9jdWVzQnlTdGFydFRpbWUuZmluZChjdWUpOworICAgIGlm
IChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9jdWVzQnlTdGFydFRpbWUucmVtb3ZlKGlu
ZGV4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DdWVJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJbmRleC5oCmlu
ZGV4IDg2MmUyZGE0OWMyYzkzMjZmYTk1OGEwZGNhMzFlNWM0MTgwOWEwY2QuLjgxMjJmYjQzMzQ4
YTZjNjI1Mzc2Y2ZhY2M5NDM2NjRiMDU4Mzg0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ3VlSW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmgKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNpbmNsdWRlICJDdWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw4ICszNywxMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBUZXh0VHJhY2tDdWU7CiBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0Owog
CisvLyBDdWVTZXQgaXMgdXNlZCBhcyBhIHN0cnVjdHVyZSBmb3IgY29tbW9uIG9wZXJhdGlvbnMg
b24gc2V0cyBvZiBUZXh0VHJhY2tDdWVzLgorLy8gSXQgcG9pbnRzIHRvIGV4aXN0aW5nIFRleHRU
cmFja0N1ZXMgYnV0IGRvZXMgbm90IG93biwgbWFpbnRhaW4sIG9yIG1vZGlmeSB0aGVtLgorCiBj
bGFzcyBDdWVTZXQgewogcHVibGljOgorICAgIHR5cGVkZWYgSGFzaFNldDxUZXh0VHJhY2tDdWUq
Pjo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgQ3VlU2V0KCkgeyB9CiAgICAgfkN1ZVNldCgpIHsg
fQogICAgIEN1ZVNldCBkaWZmZXJlbmNlKGNvbnN0IEN1ZVNldCYpIGNvbnN0OwpAQCAtNDUsMjIg
KzUwLDM3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZChjb25zdCBUZXh0VHJhY2tDdWUmKTsKICAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0OwogICAgIHZvaWQgcmVt
b3ZlKGNvbnN0IFRleHRUcmFja0N1ZSYpOworICAgIHZvaWQgY2xlYXIoKTsKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKICAgICBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgSGFz
aFNldDxUZXh0VHJhY2tDdWUqPiBtX3NldDsKIH07CiAKKy8vIEN1ZUluZGV4IGlzIHVzZWQgYXMg
YSBmYXN0IGxvb2stdXAgZm9yIFRleHRUcmFja0N1ZXMgZHVyaW5nIHZpZGVvIHBsYXliYWNrLgor
Ly8gSXQga2VlcHMgcmVmZXJlbmNlcyB0byBUZXh0VHJhY2tDdWVzLCBidXQgZG9lcyBub3Qgb3du
LCBtYWludGFpbiwgb3IgbW9kaWZ5IHRoZW0uCisvLyBUZXh0VHJhY2tDdWVzIGFyZSBvd25lZCBi
eSB0aGUgVGV4dFRyYWNrQ3VlTGlzdHMgb2YgdGhlaXIgcmVzcGVjdGl2ZSBUZXh0VHJhY2tzLAor
Ly8gd2hpY2ggYXJlIHJlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgQ3VlSW5kZXggb2YgbGlmZXRp
bWUgY2hhbmdlcyBvZiBUZXh0VHJhY2tDdWVzLAorLy8gdGhyb3VnaCB0aGUgQ3VlTG9hZGVyQ2xp
ZW50IGludGVyZmFjZS4KKwogY2xhc3MgQ3VlSW5kZXggOiBwdWJsaWMgQ3VlTG9hZGVyQ2xpZW50
IHsKIHB1YmxpYzoKICAgICAvLyBDdWVMb2FkZXJDbGllbnQgbWV0aG9kcy4KLSAgICB2b2lkIGZl
dGNoTmV3Q3Vlc0Zyb21Mb2FkZXIoQ3VlTG9hZGVyKik7CisgICAgdm9pZCBuZXdDdWVzQXZhaWxh
YmxlKEN1ZUxvYWRlciopOwogICAgIHZvaWQgcmVtb3ZlQ3Vlc0Zyb21JbmRleChjb25zdCBUZXh0
VHJhY2tDdWVMaXN0Kik7CiAKICAgICAvLyBSZXR1cm5zIHNldCBvZiBjdWVzIHZpc2libGUgYXQg
YSB0aW1lIGluIHNlY29uZHMuCiAgICAgQ3VlU2V0IHZpc2libGVDdWVzQXRUaW1lKGRvdWJsZSkg
Y29uc3Q7CiAgICAgdm9pZCBhZGQoVGV4dFRyYWNrQ3VlKik7CiAgICAgdm9pZCByZW1vdmUoVGV4
dFRyYWNrQ3VlKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGQoVGV4dFRyYWNrQ3VlKiwgc2l6
ZV90IHN0YXJ0LCBzaXplX3QgZW5kKTsKKworICAgIFZlY3RvcjxUZXh0VHJhY2tDdWUqPiBtX2N1
ZXNCeVN0YXJ0VGltZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDI5Mzg4YjY2YjIwZGQzN2E2MTBjZThh
NjIzYWJmOTQ1ZTBkMjdlNDcuLjQyMjQ0MzAwYmRlMjc2ZjMwMmI3NjUzYzJhNTZhNmI0Yzc1MGVk
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNzg3LDcg
Kzc4Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFRleHRUcmFja3MoKQogICAgIGZv
ciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKSB7CiAgICAg
ICAgICAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFjayA9IHN0YXRpY19jYXN0PEhUTUxUcmFja0Vs
ZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIHRyYWNrLT5sb2FkKEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgICAgIHRyYWNrLT5sb2FkKEFjdGl2
ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAmbV9jdWVJbmRleCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4
IGFjZTViMDZlOTY2NjQ1YzVhMDQ4YjBjMzc3ZTQ5ZWIyOWUxMTI3YTQuLjM1ODBkOWVjOTk2ZmZk
OTk0M2Y2NWM5ZGJmY2E0YjdlNjYyNzQ1MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJveHku
aCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorI2luY2x1ZGUgIkN1ZUluZGV4
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKQEAgLTQz
MSw2ICs0MzUsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdl
c3R1cmUgOiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKICAgICBib29sIG1f
aGF2ZVByZXBhcmVkVG9QbGF5IDogMTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBD
dWVJbmRleCBtX2N1ZUluZGV4OworI2VuZGlmCiB9OwogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcAppbmRleCAwNDNmMDhiMzZmNzA0NTY1ODk5
ODhjZjJhODE0ZGEwZjMxNGFhZjhjLi4zMWUxZTI2YzkwNDY5YzMxMzFiOGY2MzQ0Njc4OWNkYTYy
ZWQ4NzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTEy
OSwxMiArMTI5LDE1IEBAIGJvb2wgSFRNTFRyYWNrRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyaWJ1dGUpIGNvbnN0CiAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+bmFtZSgpID09
IHNyY0F0dHI7CiB9CiAKLXZvaWQgSFRNTFRyYWNrRWxlbWVudDo6bG9hZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQordm9pZCBIVE1MVHJhY2tFbGVtZW50Ojpsb2FkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEN1ZUxvYWRlckNsaWVudCogY3VlQ2xpZW50KQogewor
ICAgIGlmIChtX3RyYWNrKQorICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIHNvdXJjZSA9IGdl
dE5vbkVtcHR5VVJMQXR0cmlidXRlKHNyY0F0dHIpOworICAgIGlmIChzb3VyY2UuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CiAgICAgbV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNrOjpjcmVh
dGUoa2luZCgpLCBsYWJlbCgpLCBzcmNsYW5nKCksIGlzRGVmYXVsdCgpKTsKLQotICAgIGlmICho
YXNBdHRyaWJ1dGUoc3JjQXR0cikpCi0gICAgICAgIG1fdHJhY2stPmxvYWQoZ2V0Tm9uRW1wdHlV
UkxBdHRyaWJ1dGUoc3JjQXR0ciksIGNvbnRleHQpOworICAgIG1fdHJhY2stPmxvYWQoc291cmNl
LCBjb250ZXh0LCBjdWVDbGllbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNr
RWxlbWVudC5oCmluZGV4IDk0NjU2NDJlNTY3NTc1NjA4YTY0NjhkMzAzZjg0ZGFkNjhiNzVjOWIu
LjcyM2I4MmJlMzMxZmExNzc2YmJkODFiYjBmYTlmM2FiZmY3ODVlZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQ3VlTG9hZGVyQ2xpZW50OworCiBjbGFzcyBIVE1MVHJhY2tFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MVHJhY2tFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkBAIC00OSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExhYmVsKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgc2V0SXNEZWZhdWx0KGJvb2wpOwogICAgIAotICAgIHZvaWQgbG9h
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdm9pZCBsb2FkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBDdWVMb2FkZXJDbGllbnQqKTsKIAogcHJpdmF0ZToKICAgICBIVE1MVHJhY2tF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCA0ZWIyNDg1YzRiNTA2ZGJlODgxMTJhMjcz
ODlmZjlmZTM0YTk4MzE5Li43OTRhMTlkNTU5ZDJiNjk3ODIzMjZhMTg4M2IxN2YwOWM3ODBhZjc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAtMzUsMjUg
KzM1LDM0IEBAIExvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayhjb25zdCBTdHJp
bmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvCiAgICAgOiBUZXh0VHJhY2soa2luZCwg
bGFiZWwsIGxhbmd1YWdlKQogICAgICwgbV9pc0RlZmF1bHQoaXNEZWZhdWx0KQogeworICAgIG1f
Y3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0ZSgpOworICAgIG1fY3Vlcy0+c2V0Q3VlT3Jk
ZXIoVGV4dFRyYWNrQ3VlTGlzdDo6Q2hyb25vbG9naWNhbCk7CiB9CiAKIExvYWRhYmxlVGV4dFRy
YWNrOjp+TG9hZGFibGVUZXh0VHJhY2soKQogeworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPnJlbW92ZUN1ZXNGcm9tSW5kZXgobV9jdWVzLmdldCgpKTsKIH0KIAotdm9pZCBM
b2FkYWJsZVRleHRUcmFjazo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKK3ZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEN1ZUxvYWRlckNsaWVu
dCogY2xpZW50KQogeworICAgIHNldEN1ZUxvYWRlckNsaWVudChjbGllbnQpOwogICAgIHJldHVy
biBtX3BhcnNlci5sb2FkKHVybCwgY29udGV4dCwgdGhpcyk7CiB9CiAKLWJvb2wgTG9hZGFibGVU
ZXh0VHJhY2s6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICByZXR1cm4g
bV9wYXJzZXIuc3VwcG9ydHNUeXBlKHVybCk7Ci19Ci0KIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6
Om5ld0N1ZXNQYXJzZWQoKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogRmV0Y2ggbmV3IGN1ZXMg
ZnJvbSBwYXJzZXIgYW5kIHRlbXBvcmFyaWx5IHN0b3JlIHRvIGdpdmUgdG8gQ3VlTG9hZGVyQ2xp
ZW50IHdoZW4gZmV0Y2hOZXdDdWVzRnJvbUxvYWRlciBpcyBjYWxsZWQuCisgICAgLy8gRmV0Y2gg
bmV3IGN1ZXMgZnJvbSBwYXJzZXIgYW5kIHRlbXBvcmFyaWx5IHN0b3JlIHRvIGdpdmUgdG8gQ3Vl
TG9hZGVyQ2xpZW50IHdoZW4gZmV0Y2hOZXdDdWVzRnJvbUxvYWRlciBpcyBjYWxsZWQuCisgICAg
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4gbmV3Q3VlczsKKyAgICBtX3BhcnNlci5mZXRj
aFBhcnNlZEN1ZXMobmV3Q3Vlcyk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1
ZT4gPjo6aXRlcmF0b3IgaXQgPSBuZXdDdWVzLmJlZ2luKCk7IGl0IDwgbmV3Q3Vlcy5lbmQoKTsg
aXQrKykgeworICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSAqaXQ7CisgICAgICAg
IGN1ZS0+c2V0VHJhY2sodGhpcyk7CisgICAgICAgIG1fbmV3ZXN0Q3Vlcy5hcHBlbmQoY3VlKTsK
KyAgICB9CisgICAgbV9jdWVzLT5hZGQobmV3Q3Vlcyk7CisgICAgbV9jbGllbnQtPm5ld0N1ZXNB
dmFpbGFibGUodGhpcyk7CiB9CiAKIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OnRyYWNrTG9hZFN0
YXJ0ZWQoKQpAQCAtNzEsMTQgKzgwLDExIEBAIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OnRyYWNr
TG9hZENvbXBsZXRlZCgpCiAgICAgc2V0UmVhZHlTdGF0ZShUZXh0VHJhY2s6OkxPQURFRCk7CiB9
CiAKLXZvaWQgTG9hZGFibGVUZXh0VHJhY2s6Om5ld0N1ZXNMb2FkZWQoKQotewotICAgIC8vIEZJ
WE1FKDYyODg1KTogVGVsbCB0aGUgY2xpZW50IHRvIGZldGNoIHRoZSBsYXRlc3QgY3Vlcy4KLX0K
LQotdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6ZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxUZXh0VHJh
Y2tDdWUqPiYpCit2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpmZXRjaE5ld2VzdEN1ZXMoVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mIG91dHB1dCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4NSk6
IEltcGxlbWVudC4KKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+OjppdGVy
YXRvciBpdCA9IG1fbmV3ZXN0Q3Vlcy5iZWdpbigpOyBpdCA8IG1fbmV3ZXN0Q3Vlcy5lbmQoKTsg
aXQrKykKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgqaXQpOworICAgIG1fbmV3ZXN0Q3Vlcy5jbGVh
cigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRh
YmxlVGV4dFRyYWNrLmgKaW5kZXggYzU1ZWQyNmE2YTJhMDUyNjRkMjQ3ZjAxNTA2YmFmMDgzMWI1
OThmMC4uYTlkNDg4ZTQ4YjhjNTdjYjdiNmY4M2QyMWE4NmZlY2IwMTYxYzU4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTG9hZGFibGVUZXh0VHJhY2suaApAQCAtNDksMTYgKzQ5LDE0IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgdmlydHVhbCB+TG9hZGFibGVUZXh0VHJhY2soKTsKIAotICAgIHZvaWQg
bG9hZChjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgYm9vbCBz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVMb2FkZXJDbGllbnQqKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrTG9hZFN0YXJ0
ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tMb2FkRXJyb3IoKTsKICAgICB2aXJ0dWFsIHZv
aWQgdHJhY2tMb2FkQ29tcGxldGVkKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc0xvYWRl
ZCgpOwotICAgIHZpcnR1YWwgdm9pZCBmZXRjaE5ld2VzdEN1ZXMoVmVjdG9yPFRleHRUcmFja0N1
ZSo+Jik7CisgICAgdmlydHVhbCB2b2lkIGZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8UmVmUHRyPFRl
eHRUcmFja0N1ZT4gPiYpOwogCiBwcml2YXRlOgogICAgIExvYWRhYmxlVGV4dFRyYWNrKGNvbnN0
IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFn
ZSwgYm9vbCBpc0RlZmF1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NdXRh
YmxlVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5j
cHAKaW5kZXggNGQ2ODM1NDY5NjY2NDY5ZDljZmZmODI2M2EyZjJjNTBhMzRiZjQxMS4uNTVjZDk2
MWRjMjVjYmRhNDBhYmQyNTFmNTZmOGU3NTQ0MDQwYmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9NdXRhYmxlVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L011dGFibGVUZXh0VHJhY2suY3BwCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgTXV0YWJsZVRleHRU
cmFjazo6bmV3Q3Vlc0xvYWRlZCgpCiAgICAgLy8gRklYTUUoNjI4OTApOiBJbXBsZW1lbnQuCiB9
CiAKLXZvaWQgTXV0YWJsZVRleHRUcmFjazo6ZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxUZXh0VHJh
Y2tDdWUqPiYpCit2b2lkIE11dGFibGVUZXh0VHJhY2s6OmZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8
UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpCiB7CiAgICAgLy8gRklYTUUoNjI4OTApOiBJbXBsZW1l
bnQuCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL011dGFibGVUZXh0VHJhY2su
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5oCmluZGV4IDYxOGMyNzIy
ZDVjMzI1OGNhNmIxN2RjMjc2MTBkNzM1Mjg5MDMxZGQuLmEwYjc3ZGIzZjAwZWMyNDFmOWY1ZDM0
ZmM5Y2MyN2UzNjE5ZmViZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJs
ZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5o
CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUN1ZShQYXNzUmVmUHRy
PFRleHRUcmFja0N1ZT4pOwogCiAgICAgdmlydHVhbCB2b2lkIG5ld0N1ZXNMb2FkZWQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxUZXh0VHJhY2tDdWUqPiYpOwor
ICAgIHZpcnR1YWwgdm9pZCBmZXRjaE5ld2VzdEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tD
dWU+ID4mKTsKIAogcHJpdmF0ZToKICAgICBNdXRhYmxlVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYg
a2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0VHJhY2suaAppbmRleCA5YTgyZjgzZWUxZjcyZGFlZDZjNjJjMTAwYjViNTQwNzM4
MTBmZmEyLi5hOGY5NzhiZTQyNTNjYzQxNjhmOWQ0MmRjYzE3NjYwYzQwNDNhMjdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dFRyYWNrLmgKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgVGV4dFRyYWNrOworY2xhc3MgVGV4dFRyYWNrQ3VlOwogY2xhc3MgVGV4dFRyYWNr
Q3VlTGlzdDsKIAogY2xhc3MgVGV4dFRyYWNrQ2xpZW50IHsKQEAgLTc3LDYgKzc4LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKIAogICAgIFJlZlB0
cjxUZXh0VHJhY2tDdWVMaXN0PiBtX2N1ZXM7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tD
dWU+ID4gbV9uZXdlc3RDdWVzOwogCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2tpbmQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmNwcAppbmRleCA5YTA2YmQ1MTZjOWZlMDlm
YWMwNjhjMzVkN2QyNWYwYmVkMjk5ZjZjLi43NWI4N2ZiMmJjN2ZkMmNhNGUxM2FiM2VkMjU0N2Ex
ZmMyYzExNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxp
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5jcHAKQEAg
LTMyLDI5ICszMiw3NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUZXh0VHJhY2tDdWVMaXN0
OjpUZXh0VHJhY2tDdWVMaXN0KCkKKyAgICA6IG1fb3JkZXIoTm9PcmRlclJlcXVpcmVtZW50cykK
IHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KIH0KIAotVGV4dFRyYWNrQ3VlKiBU
ZXh0VHJhY2tDdWVMaXN0OjpnZXRDdWVCeUlkKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit1bnNpZ25l
ZCBsb25nIFRleHRUcmFja0N1ZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUo
NjI4ODMpOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIG1fbGlzdC5zaXplKCk7Cit9CisKK1RleHRU
cmFja0N1ZSogVGV4dFRyYWNrQ3VlTGlzdDo6Z2V0Q3VlQnlJZChjb25zdCBTdHJpbmcmIGlkKSBj
b25zdAoreworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9saXN0LmJlZ2luKCk7IGl0ICE9IG1fbGlzdC5lbmQoKTsgaXQrKykgewor
ICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZSA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYgKGN1ZS0+
aWQoKSA9PSBpZCkKKyAgICAgICAgICAgIHJldHVybiBjdWU7CisgICAgfQogICAgIHJldHVybiAw
OwogfQogCi12b2lkIFRleHRUcmFja0N1ZUxpc3Q6OmFwcGVuZChWZWN0b3I8UGFzc1JlZlB0cjxU
ZXh0VHJhY2tDdWU+ID4mKQorVGV4dFRyYWNrQ3VlKiBUZXh0VHJhY2tDdWVMaXN0OjppdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwor
fQorCit2b2lkIFRleHRUcmFja0N1ZUxpc3Q6OmFkZChjb25zdCBWZWN0b3I8UmVmUHRyPFRleHRU
cmFja0N1ZT4gPiYgbmV3Q3VlcykKK3sKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNr
Q3VlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0N1ZXMuYmVnaW4oKTsgaXQgIT0gbmV3Q3Vl
cy5lbmQoKTsgaXQrKykKKyAgICAgICAgYWRkKCppdCk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3Vl
TGlzdDo6YWRkKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUpCit7CisgICAgUmVmUHRyPFRl
eHRUcmFja0N1ZT4gbmV3Q3VlID0gY3VlOworICAgIGlmIChtX29yZGVyID09IENocm9ub2xvZ2lj
YWwgJiYgIW1fbGlzdC5pc0VtcHR5KCkgJiYgbmV3Q3VlLT5zdGFydFRpbWUoKSA8IG1fbGlzdC5s
YXN0KCktPnN0YXJ0VGltZSgpKQorICAgICAgICByZXR1cm47CisgICAgYWRkKG5ld0N1ZSwgMCwg
bV9saXN0LnNpemUoKSk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6YWRkKFBhc3NSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiBjdWUsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkKK3sKKyAgICBS
ZWZQdHI8VGV4dFRyYWNrQ3VlPiBuZXdDdWUgPSBjdWU7CisgICAgaWYgKHN0YXJ0ID09IGVuZCkg
eworICAgICAgIG1fbGlzdC5pbnNlcnQoc3RhcnQsIG5ld0N1ZSk7CisgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHNpemVfdCBpbmRleCA9IChzdGFydCArIGVuZCkgLyAyOworICAgIGlmIChu
ZXdDdWUtPnN0YXJ0VGltZSgpIDwgbV9saXN0W2luZGV4XS0+c3RhcnRUaW1lKCkKKyAgICAgICAg
fHwgKG5ld0N1ZS0+c3RhcnRUaW1lKCkgPT0gbV9saXN0W2luZGV4XS0+c3RhcnRUaW1lKCkKKyAg
ICAgICAgJiYgbmV3Q3VlLT5lbmRUaW1lKCkgPCBtX2xpc3RbaW5kZXhdLT5lbmRUaW1lKCkpKQor
ICAgICAgICBhZGQobmV3Q3VlLCBzdGFydCwgaW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgYWRk
KG5ld0N1ZSwgaW5kZXggKyAxLCBlbmQpOworfQorCisKK3ZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6
cmVtb3ZlKFRleHRUcmFja0N1ZSogY3VlKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVt
ZW50LgorICAgIGN1ZS0+c2V0SXNBY3RpdmUoZmFsc2UpOworICAgIG1fbGlzdC5yZW1vdmUobV9s
aXN0LmZpbmQoY3VlKSk7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6YXBwZW5kKGNvbnN0
IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiYpCitUZXh0VHJhY2tDdWVMaXN0OjpJdGVyYXRvciBU
ZXh0VHJhY2tDdWVMaXN0OjpiZWdpbigpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1l
bnQuCisgICAgcmV0dXJuIG1fbGlzdC5iZWdpbigpOwogfQogCi12b2lkIFRleHRUcmFja0N1ZUxp
c3Q6OnJlbW92ZShjb25zdCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4mKQorVGV4dFRyYWNrQ3Vl
TGlzdDo6SXRlcmF0b3IgVGV4dFRyYWNrQ3VlTGlzdDo6ZW5kKCkKIHsKLSAgICAvLyBGSVhNRSg2
Mjg4Myk6IEltcGxlbWVudC4KKyAgICByZXR1cm4gbV9saXN0LmVuZCgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFj
a0N1ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5oCmluZGV4
IDNiMzdlNDRmNWM0YWRmNjBkNzg4YzEyMTk3NjdlNWUzOTZjNTljMWUuLmEwODdiZTc4MTQ5YjQ5
MmFkNGJjYmY5NjcwZTI2ZGQ1MjExNGU4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dFRyYWNrQ3VlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNr
Q3VlTGlzdC5oCkBAIC0zNywyMSArMzcsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBUZXh0VHJhY2tDdWVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dFRyYWNrQ3VlTGlzdD4g
ewogcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID46Oml0
ZXJhdG9yIEl0ZXJhdG9yOworCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlTGlz
dD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNr
Q3VlTGlzdCk7CiAgICAgfQorICAgIAorICAgIH5UZXh0VHJhY2tDdWVMaXN0KCkgeyB9CiAKICAg
ICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OworICAgIFRleHRUcmFja0N1ZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAgVGV4dFRyYWNrQ3VlKiBnZXRDdWVCeUlkKGNvbnN0
IFN0cmluZyYpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlTGlzdD4gYWN0aXZl
Q3VlcygpOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+
Jik7Ci0gICAgdm9pZCBhcHBlbmQoVmVjdG9yPFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7
Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+Jik7CisgICAg
ZW51bSBDdWVPcmRlclJlcXVpcmVtZW50cyB7IE5vT3JkZXJSZXF1aXJlbWVudHMsIENocm9ub2xv
Z2ljYWwgfTsKKyAgICB2b2lkIHNldEN1ZU9yZGVyKEN1ZU9yZGVyUmVxdWlyZW1lbnRzIHJlcXVp
cmVtZW50cykgeyBtX29yZGVyID0gcmVxdWlyZW1lbnRzOyB9CisgICAgCisgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+KTsKKyAgICB2b2lkIGFkZChjb25zdCBWZWN0b3I8UmVm
UHRyPFRleHRUcmFja0N1ZT4gPiYpOworICAgIHZvaWQgcmVtb3ZlKFRleHRUcmFja0N1ZSopOwor
ICAgIAorICAgIHZpcnR1YWwgSXRlcmF0b3IgYmVnaW4oKTsKKyAgICB2aXJ0dWFsIEl0ZXJhdG9y
IGVuZCgpOwogCiBwcml2YXRlOgogICAgIFRleHRUcmFja0N1ZUxpc3QoKTsKKyAgICB2b2lkIGFk
ZChQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4sIHNpemVfdCwgc2l6ZV90KTsKKyAgICBWZWN0b3I8
UmVmUHRyPFRleHRUcmFja0N1ZT4gPiBtX2xpc3Q7CisgICAgQ3VlT3JkZXJSZXF1aXJlbWVudHMg
bV9vcmRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9DdWVMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9DdWVM
b2FkZXIuaAppbmRleCAwYmY3YjkyNjUyYjg4YzFmNjNiNzljODkyYTkzYjdjNTIyZDQ1ZjEyLi5m
Zjc1NGFiZmQwN2M4NzJhYWY3ZWVhYTk1ZGYyN2I3ODkxMmQ0MzgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvQ3VlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0N1ZUxvYWRlci5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFRleHRUcmFja0N1ZUxpc3Q7CiBj
bGFzcyBDdWVMb2FkZXJDbGllbnQgewogcHVibGljOgogICAgIC8vIFF1ZXJpZXMgQ3VlTG9hZGVy
IGZvciBuZXdlc3QgY3Vlcy4KLSAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdDdWVzRnJvbUxvYWRl
cihDdWVMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5ld0N1ZXNBdmFpbGFibGUoQ3Vl
TG9hZGVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDdWVzRnJvbUluZGV4KGNvbnN0
IFRleHRUcmFja0N1ZUxpc3QqKSA9IDA7CiB9OwogCkBAIC00OCwxMSArNDgsOCBAQCBjbGFzcyBD
dWVMb2FkZXIgewogcHVibGljOgogICAgIHZvaWQgc2V0Q3VlTG9hZGVyQ2xpZW50KEN1ZUxvYWRl
ckNsaWVudCopOwogCi0gICAgLy8gSW5mb3JtcyBjbGllbnQgdGhhdCBuZXcgY3VlcyBoYXZlIGJl
ZW4gbG9hZGVkLgotICAgIHZpcnR1YWwgdm9pZCBuZXdDdWVzTG9hZGVkKCkgPSAwOwotCiAgICAg
Ly8gVHJhbnNmZXJzIG93bmVyc2hpcCBvZiBjdXJyZW50bHkgbG9hZGVkIGN1ZXMuCi0gICAgdmly
dHVhbCB2b2lkIGZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8VGV4dFRyYWNrQ3VlKj4mIGN1ZXMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRy
YWNrQ3VlPiA+JiBjdWVzKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICBDdWVMb2FkZXJDbGllbnQq
IG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3Vl
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAK
aW5kZXggNGE2ODY5YmE5ZGI0NzFjNDY0ZmM0MGRiNDBjODIxMGNlOTY0ZDIzMy4uODRjNmNlMDkw
ZTg2MmExMzk3MTdhNTE2YmUyY2M0ZWM1ZGNkZTJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogQ3VlUGFyc2VyOjpDdWVQYXJzZXIoKQogewotICAgIC8vIEZJWE1FKDYyODkzKTog
SW1wbGVtZW50LgogfQogCiBDdWVQYXJzZXI6On5DdWVQYXJzZXIoKQpAQCAtNjUsMTIgKzY0LDYg
QEAgdm9pZCBDdWVQYXJzZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEN1ZVBhcnMKICAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2Fk
ZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKIH0KIAotYm9vbCBD
dWVQYXJzZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICAvLyBGSVhN
RSg2Mjg5Myk6IGNoZWNrIGFnYWluc3QgYSBsaXN0IG9mIHN1cHBvcnRlZCB0eXBlcwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogdm9pZCBDdWVQYXJzZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNp
Z25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKIHsKICAgICBpZiAocmVzcG9uc2UubWltZVR5cGUoKSA9PSAidGV4dC92dHQiKQpAQCAtOTcs
OSArOTAsOSBAQCB2b2lkIEN1ZVBhcnNlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikK
ICAgICBtX2NsaWVudC0+dHJhY2tMb2FkRXJyb3IoKTsKIH0KIAotdm9pZCBDdWVQYXJzZXI6OmZl
dGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpCit2b2lkIEN1ZVBh
cnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRw
dXRDdWVzKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogSW1wbGVtZW50LgorICAgIG1fcHJpdmF0
ZS0+ZmV0Y2hQYXJzZWRDdWVzKG91dHB1dEN1ZXMpOwogfQogCiB2b2lkIEN1ZVBhcnNlcjo6bmV3
Q3Vlc1BhcnNlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmlu
ZGV4IDdjNmM2MzE3NGU1NzgzNjk2MDZlZGEyNWY0OGFkNTQ5OGQwODVmMDguLjk1MGMyZjZlY2E0
MGEwZDYzZmRjNzVhYzM1NjAxYTEwOTVkZDk4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL0N1ZVBhcnNlci5oCkBAIC02NCw3ICs2NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmlu
ZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVQYXJzZXJDbGllbnQqKTsKLSAgICBib29s
IHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVz
KFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CiAgICAgdm9pZCBuZXdDdWVzUGFyc2Vk
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105658</attachid>
            <date>2011-08-30 11:44:36 -0700</date>
            <delta_ts>2011-10-21 17:21:14 -0700</delta_ts>
            <desc>addressing Sam&apos;s comments</desc>
            <filename>bug-62883-20110830114435.patch</filename>
            <type>text/plain</type>
            <size>26413</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQwOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZjQxYjI1NzljZmYyNzI4
ODgyNGQ1MjhmMzRjMTliYzMwYmU5ZmI4Li41YjFkOTU4N2RjYTBmMmY0NGM2Nzk4ZmI5OTg2NWQ5
Yzc1OTUxNjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDgtMzAgIEFubmEg
Q2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBzdG9y
YWdlIGFuZCByZXRyaWV2YWwgb2YgVGV4dFRyYWNrQ3Vlcy4KKyAgICAgICAgVGV4dFRyYWNrQ3Vl
TGlzdHMgYXJlIHVzZWQgYnkgVGV4dFRyYWNrcyBmb3Igc3RvcmFnZSBvZiBUZXh0VHJhY2tDdWVz
LgorICAgICAgICBDdWVJbmRleCBrZWVwcyBwb2ludGVycyB0byBleGlzdGluZyBUZXh0VHJhY2tD
dWVzIGZvciBmYXN0IGxvb2stdXAKKyAgICAgICAgZHVyaW5nIHZpZGVvIHBsYXliYWNrLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4ODMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBhbnkgdGVz
dHMgaW4gbWVkaWEvdHJhY2ssIGJ1dCBlc3BlY2lhbGx5CisgICAgICAgIG1lZGlhL3RyYWNrL3Ry
YWNrLXdlYnZ0dC10YzAxMi1vdXRvZm9yZGVyLmh0bWwKKworICAgICAgICAqIGh0bWwvQ3VlSW5k
ZXguY3BwOiBDdWVJbmRleCBpcyB1c2VkIGFzIGEgZmFzdCBsb29rLXVwIG9mIFRleHRUcmFja0N1
ZXMKKyAgICAgICAgICAgIGR1cmluZyB2aWRlbyBwbGF5YmFjay4KKyAgICAgICAgICAgIEN1ZVNl
dCBpcyBhIHN0cnVjdHVyZSBmb3IgY29tbW9uIG9wZXJhdGlvbnMgb24gc2V0cyBvZiBUZXh0VHJh
Y2tDdWVzLgorICAgICAgICAoV2ViQ29yZTo6Q3VlU2V0OjpkaWZmZXJlbmNlKTogQ2FsY3VsYXRl
cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3bworICAgICAgICAgICAgQ3VlU2V0cy5Vc2VkIHRv
IGRldGVybWluZSBjaGFuZ2VzIGluIFRleHRUcmFja0N1ZXMgZHVyaW5nIHBsYXliYWNrLgorICAg
ICAgICAoV2ViQ29yZTo6Q3VlU2V0Ojp1bmlvblNldCk6IENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9m
IHR3byBDdWVTZXRzLiAgVXNlZAorICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIGNoYW5nZXMgaW4g
VGV4dFRyYWNrQ3VlcyBkdXJpbmcgcGxheWJhY2suCisgICAgICAgIChXZWJDb3JlOjpDdWVTZXQ6
OmFkZCk6IEFkZHMgVGV4dFRyYWNrQ3VlcyB0byBhIEN1ZVNldC4KKyAgICAgICAgKFdlYkNvcmU6
OkN1ZVNldDo6Y29udGFpbnMpOiBDaGVja3Mgd2hldGhlciBhIFRleHRUcmFja0N1ZSBpcyBjb250
YWluZWQKKyAgICAgICAgICAgIGluIGEgQ3VlU2V0LgorICAgICAgICAoV2ViQ29yZTo6Q3VlU2V0
OjpyZW1vdmUpOiBSZW1vdmVzIGEgVGV4dFRyYWNrQ3VlIGZyb20gYSBDdWVTZXQuCisgICAgICAg
IChXZWJDb3JlOjpDdWVTZXQ6OmNsZWFyKTogUmVtb3ZlcyBhbGwgVGV4dFRyYWNrQ3VlcyBmcm9t
IGEgQ3VlU2V0LgorICAgICAgICAoV2ViQ29yZTo6Q3VlU2V0Ojppc0VtcHR5KTogQ2hlY2tzIHdo
ZXRoZXIgYSBDdWVTZXQgaXMgZW1wdHkuCisgICAgICAgIChXZWJDb3JlOjpDdWVTZXQ6OnNpemUp
OiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgVGV4dFRyYWNrQ3VlcyBpbiBhIEN1ZVNldC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1ZVNldDo6YmVnaW4pOiBJdGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6
OkN1ZVNldDo6ZW5kKTogSXRlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpDdWVJbmRleDo6bmV3
Q3Vlc0F2YWlsYWJsZSk6IEN1ZUxvYWRlckNsaWVudCBtZXRob2QgdG8gbm90aWZ5CisgICAgICAg
ICAgICB0aGUgQ3VlSW5kZXggd2hlbiBuZXcgVGV4dFRyYWNrQ3VlcyBhcmUgYXZhaWxhYmxlICh2
aWEgdGhlIHBhcnNlciBvcgorICAgICAgICAgICAgb3RoZXIgbWVhbnMpLiAgQ3VlSW5kZXggY2Fu
IHRoZW4gbG9hZCB0aGUgbmV3IGN1ZXMuCisgICAgICAgIChXZWJDb3JlOjpDdWVJbmRleDo6cmVt
b3ZlQ3Vlc0Zyb21JbmRleCk6IEN1ZUxvYWRlckNsaWVudCBtZXRob2QgdG8KKyAgICAgICAgICAg
IG5vdGlmeSB0aGUgQ3VlSW5kZXggd2hlbiBUZXh0VHJhY2tDdWVzIGFyZSBubyBsb25nZXIgYXZh
aWxhYmxlIGFuZAorICAgICAgICAgICAgdGh1cyBzaG91bGQgYmUgcmVtb3ZlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkN1ZUluZGV4OjphZGQpOiBBZGRzIFRleHRUcmFja0N1ZXMgdG8gdGhlIEN1ZUlu
ZGV4LiAgTWFpbnRhaW5zCisgICAgICAgICAgICBjaHJvbm9sb2dpY2FsIG9yZGVyIGlmIGRlc2ly
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdWVJbmRleDo6cmVtb3ZlKTogUmVtb3ZlcyBUZXh0VHJh
Y2tDdWVzIGZyb20gdGhlIEN1ZUluZGV4LgorICAgICAgICAqIGh0bWwvQ3VlSW5kZXguaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6bG9hZFRleHRUcmFja3MpOiBBZGRzIGEgQ3VlSW5kZXggYXMgYQorICAg
ICAgICAgICAgQ3VlTG9hZGVyQ2xpZW50IHNvIHRoYXQgdGhlIGxvYWRlciBjYW4gbm90aWZ5IGl0
IG9mIGNoYW5nZXMgYXMgCisgICAgICAgICAgICBUZXh0VHJhY2tDdWVzIGJlY29tZSBhdmFpbGFi
bGUuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6
OmxvYWQpOiBBZGRzIGEgQ3VlSW5kZXggYXMgYSBDdWVMb2FkZXJDbGllbnQKKyAgICAgICAgICAg
IHNvIHRoYXQgdGhlIGxvYWRlciBjYW4gbm90aWZ5IGl0IG9mIGNoYW5nZXMgYXMgVGV4dFRyYWNr
Q3VlcyBiZWNvbWUKKyAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAgICAgICAgKiBodG1sL0hUTUxU
cmFja0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayk6IENy
ZWF0ZXMgYQorICAgICAgICAgICAgVGV4dFRyYWNrQ3VlTGlzdCBmb3IgdGhpcyBUZXh0VHJhY2sg
YW5kIHJlcXVlc3RzIHRoYXQgY3VlcyBtYWludGFpbiAKKyAgICAgICAgICAgIGNocm9ub2xvZ2lj
YWwgb3JkZXIgYXMgdGhleSBhcmUgbG9hZGVkLgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVU
ZXh0VHJhY2s6On5Mb2FkYWJsZVRleHRUcmFjayk6IEVuc3VyZXMgYW55IHJlbWFpbmluZworICAg
ICAgICAgICAgVGV4dFRyYWNrQ3VlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBDdWVJbmRleC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlVGV4dFRyYWNrOjpsb2FkKTogQWRkcyBhIEN1ZUxvYWRl
ckNsaWVudCB0byBub3RpZnkKKyAgICAgICAgICAgIGFib3V0IGNvbWluZ3MgYW5kIGdvaW5ncyBv
ZiBUZXh0VHJhY2tDdWVzLgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVUZXh0VHJhY2s6Om5l
d0N1ZXNQYXJzZWQpOiBGZXRjaGVzIG5ldyBjdWVzIGZyb20gdGhlCisgICAgICAgICAgICBwYXJz
ZXIgYW5kIHRlbXBvcmFyaWx5IHN0b3JlcyB0aGVtIHRvIGdpdmUgdG8gdGhlIEN1ZUxvYWRlckNs
aWVudAorICAgICAgICAgICAgd2hlbiBmZXRjaE5ld0N1ZXMgaXMgY2FsbGVkLgorICAgICAgICAo
V2ViQ29yZTo6TG9hZGFibGVUZXh0VHJhY2s6OmZldGNoTmV3ZXN0Q3Vlcyk6IENhbGxlZCBieSB0
aGUKKyAgICAgICAgICAgIEN1ZUxvYWRlckNsaWVudCAoaW4gdGhpcyBjYXNlIEN1ZUluZGV4KSB0
byBnZXQgYWxsIHRoZSBuZXdlc3QgY3Vlcy4KKyAgICAgICAgKiBodG1sL0xvYWRhYmxlVGV4dFRy
YWNrLmg6CisgICAgICAgICogaHRtbC9NdXRhYmxlVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok11dGFibGVUZXh0VHJhY2s6OmZldGNoTmV3ZXN0Q3Vlcyk6IFJlbmFtZWQgbWV0aG9k
LgorICAgICAgICAqIGh0bWwvTXV0YWJsZVRleHRUcmFjay5oOgorICAgICAgICAqIGh0bWwvVGV4
dFRyYWNrLmg6CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q6OlRleHRUcmFja0N1ZUxpc3QpOiBBZGRpbmcKKyAg
ICAgICAgICAgIEN1ZU9yZGVyUmVxdWlyZW1lbnRzIGVudW0uCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0VHJhY2tDdWVMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3Vl
TGlzdDo6Z2V0Q3VlQnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0Ojpp
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q6OmFkZCk6IFJlc3BlY3Rz
IEN1ZU9yZGVyUmVxdWlyZW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlz
dDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q6OmJlZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q6OmVuZCk6CisgICAgICAgICogaHRt
bC9UZXh0VHJhY2tDdWVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0
Ojp+VGV4dFRyYWNrQ3VlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0
OjpzZXRDdWVPcmRlcik6IFNldHMgQ3VlT3JkZXJSZXF1aXJlbWVudHMuCisgICAgICAgICAgICBG
b3IgZXhhbXBsZSwgV2ViVlRUIHJlcXVpcmVzIHRoYXQgYWxsIGN1ZXMgYXBwZWFyIGluIGNocm9u
b2xvZ2ljYWwKKyAgICAgICAgICAgIG9yZGVyIGluIHRoZSBXZWJWVFQgZmlsZS4KKyAgICAgICAg
KiBsb2FkZXIvQ3VlTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1ZVBhcnNlcjo6Q3VlUGFyc2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKTogRmV0Y2hlcyBuZXdseSBwYXJz
ZWQKKyAgICAgICAgICAgIFRleHRUcmFja0N1ZXMgZnJvbSB0aGUgQ3VlUGFyc2VyJ3MgcHJpdmF0
ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaDoK
KwogMjAxMS0wOC0zMCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgcXVlcnlTZWxlY3Rvci9xdWVyeVNlbGVjdG9yQWxsIHNob3VsZCB1c2Ugc2VsZWN0b3IgY2hl
Y2tlciBmYXN0IHBhdGggCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VlSW5kZXguY3BwCmluZGV4IDMzY2Y5MmU1YzE1
MDY5ZmQzYjNlZWQyNzM0MjI5Y2JkY2RmNmM5M2IuLjE4YzBiYTliZjNmYzQ0ZWQwMGI2Mzk3YWFk
NjM4YTVlNDMxZjU0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VlSW5kZXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VlSW5kZXguY3BwCkBAIC0zNCw1NCArMzQs
ODMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DdWVTZXQgQ3VlU2V0OjpkaWZmZXJlbmNl
KGNvbnN0IEN1ZVNldCYpIGNvbnN0CitDdWVTZXQgQ3VlU2V0OjpkaWZmZXJlbmNlKGNvbnN0IEN1
ZVNldCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0g
ICAgcmV0dXJuIEN1ZVNldCgpOworICAgIEN1ZVNldCBuZXdTZXQ7CisgICAgZm9yIChDdWVTZXQ6
Okl0ZXJhdG9yIGl0ID0gb3RoZXIubV9zZXQuYmVnaW4oKTsgaXQgIT0gb3RoZXIubV9zZXQuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSAqaXQ7CisgICAgICAgIGlm
ICghbV9zZXQuY29udGFpbnMoY3VlKSkKKyAgICAgICAgICAgIG5ld1NldC5hZGQoKmN1ZSk7Cisg
ICAgfQorICAgIHJldHVybiBuZXdTZXQ7CiB9CiAKLUN1ZVNldCBDdWVTZXQ6OnVuaW9uU2V0KGNv
bnN0IEN1ZVNldCYpIGNvbnN0CitDdWVTZXQgQ3VlU2V0Ojp1bmlvblNldChjb25zdCBDdWVTZXQm
IG90aGVyKSBjb25zdAogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgotICAgIHJl
dHVybiBDdWVTZXQoKTsKKyAgICBDdWVTZXQgbmV3U2V0OworICAgIGZvciAoQ3VlU2V0OjpJdGVy
YXRvciBpdCA9IG90aGVyLm1fc2V0LmJlZ2luKCk7IGl0ICE9IG90aGVyLm1fc2V0LmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0gKml0OworICAgICAgICBuZXdTZXQu
YWRkKCpjdWUpOworICAgIH0KKyAgICBmb3IgKEN1ZVNldDo6SXRlcmF0b3IgaXQgPSBtX3NldC5i
ZWdpbigpOyBpdCAhPSBtX3NldC5lbmQoKTsgKytpdCkgeworICAgICAgICBUZXh0VHJhY2tDdWUq
IGN1ZSA9ICppdDsKKyAgICAgICAgbmV3U2V0LmFkZCgqY3VlKTsKKyAgICB9CisgICAgcmV0dXJu
IG5ld1NldDsKIH0KIAotdm9pZCBDdWVTZXQ6OmFkZChjb25zdCBUZXh0VHJhY2tDdWUmKQordm9p
ZCBDdWVTZXQ6OmFkZChjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkKIHsKLSAgICAvLyBGSVhNRSg2
Mjg4Myk6IEltcGxlbWVudC4KKyAgICBtX3NldC5hZGQoY29uc3RfY2FzdDxUZXh0VHJhY2tDdWUq
PigmY3VlKSk7CiB9CiAKLWJvb2wgQ3VlU2V0Ojpjb250YWlucyhjb25zdCBUZXh0VHJhY2tDdWUm
KSBjb25zdAorYm9vbCBDdWVTZXQ6OmNvbnRhaW5zKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBj
b25zdAogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV9zZXQuY29udGFpbnMoY29uc3RfY2FzdDxUZXh0VHJhY2tDdWUqPigm
Y3VlKSk7CiB9CiAKLXZvaWQgQ3VlU2V0OjpyZW1vdmUoY29uc3QgVGV4dFRyYWNrQ3VlJikKK3Zv
aWQgQ3VlU2V0OjpyZW1vdmUoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpCiB7Ci0gICAgLy8gRklY
TUUoNjI4ODMpOiBJbXBsZW1lbnQuCisgICAgbV9zZXQucmVtb3ZlKGNvbnN0X2Nhc3Q8VGV4dFRy
YWNrQ3VlKj4oJmN1ZSkpOworfQorCit2b2lkIEN1ZVNldDo6Y2xlYXIoKQoreworICAgIG1fc2V0
LmNsZWFyKCk7CiB9CiAKIGJvb2wgQ3VlU2V0Ojppc0VtcHR5KCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1f
c2V0LmlzRW1wdHkoKTsKIH0KIAogaW50IEN1ZVNldDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUUoNjI4ODMpOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fc2V0
LnNpemUoKTsKK30KKworQ3VlU2V0OjpJdGVyYXRvciBDdWVTZXQ6OmJlZ2luKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zZXQuYmVnaW4oKTsKK30KKworQ3VlU2V0OjpJdGVyYXRvciBDdWVTZXQ6
OmVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2V0LmVuZCgpOwogfQogCi12b2lkIEN1ZUlu
ZGV4OjpmZXRjaE5ld0N1ZXNGcm9tTG9hZGVyKEN1ZUxvYWRlciopCit2b2lkIEN1ZUluZGV4Ojpu
ZXdDdWVzQXZhaWxhYmxlKEN1ZUxvYWRlciogbG9hZGVyKQogewotICAgIC8vIEZJWE1FKDYyODgz
KTogSW1wbGVtZW50LgorICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+IG5ld0N1ZXM7
CisgICAgbG9hZGVyLT5mZXRjaE5ld2VzdEN1ZXMobmV3Q3Vlcyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBuZXdDdWVzLnNpemUoKTsgKytpKQorICAgICAgICBhZGQobmV3Q3Vlc1tpXS5n
ZXQoKSk7CiB9CiAKLXZvaWQgQ3VlSW5kZXg6OnJlbW92ZUN1ZXNGcm9tSW5kZXgoY29uc3QgVGV4
dFRyYWNrQ3VlTGlzdCopCit2b2lkIEN1ZUluZGV4OjpyZW1vdmVDdWVzRnJvbUluZGV4KGNvbnN0
IFRleHRUcmFja0N1ZUxpc3QqIGN1ZUxpc3QpCiB7Ci0gICAgLy8gRklYTUUoNjI4ODMpOiBJbXBs
ZW1lbnQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdWVMaXN0LT5sZW5ndGgoKTsgKytp
KQorICAgICAgICByZW1vdmUoY3VlTGlzdC0+aXRlbShpKSk7CiB9CiAKIEN1ZVNldCBDdWVJbmRl
eDo6dmlzaWJsZUN1ZXNBdFRpbWUoZG91YmxlKSBjb25zdApAQCAtOTAsMTQgKzExOSwzMiBAQCBD
dWVTZXQgQ3VlSW5kZXg6OnZpc2libGVDdWVzQXRUaW1lKGRvdWJsZSkgY29uc3QKICAgICByZXR1
cm4gQ3VlU2V0KCk7CiB9CiAKLXZvaWQgQ3VlSW5kZXg6OmFkZChUZXh0VHJhY2tDdWUqKQordm9p
ZCBDdWVJbmRleDo6YWRkKFRleHRUcmFja0N1ZSogY3VlKQoreworICAgIGFkZChjdWUsIDAsIG1f
Y3Vlc0J5U3RhcnRUaW1lLnNpemUoKSk7Cit9CisKK3ZvaWQgQ3VlSW5kZXg6OmFkZChUZXh0VHJh
Y2tDdWUqIGN1ZSwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKQogewotICAgIC8vIEZJWE1FKDYy
ODkwKTogSW1wbGVtZW50LgorICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICBtX2N1ZXNC
eVN0YXJ0VGltZS5pbnNlcnQoc3RhcnQsIGN1ZSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNpemVfdCBpbmRleCA9IChzdGFydCArIGVuZCkgLyAyOworICAgIGlmIChjdWUtPnN0YXJ0
VGltZSgpIDwgbV9jdWVzQnlTdGFydFRpbWVbaW5kZXhdLT5zdGFydFRpbWUoKQorICAgICAgICB8
fCAoY3VlLT5zdGFydFRpbWUoKSA9PSBtX2N1ZXNCeVN0YXJ0VGltZVtpbmRleF0tPnN0YXJ0VGlt
ZSgpCisgICAgICAgICYmIGN1ZS0+ZW5kVGltZSgpIDwgbV9jdWVzQnlTdGFydFRpbWVbaW5kZXhd
LT5lbmRUaW1lKCkpKQorICAgICAgICBhZGQoY3VlLCBzdGFydCwgaW5kZXgpOworICAgIGVsc2UK
KyAgICAgICAgYWRkKGN1ZSwgaW5kZXggKyAxLCBlbmQpOwogfQogCi12b2lkIEN1ZUluZGV4Ojpy
ZW1vdmUoVGV4dFRyYWNrQ3VlKikKK3ZvaWQgQ3VlSW5kZXg6OnJlbW92ZShUZXh0VHJhY2tDdWUq
IGN1ZSkKIHsKLSAgICAvLyBGSVhNRSg2Mjg5MCk6IEltcGxlbWVudC4KKyAgICBzaXplX3QgaW5k
ZXggPSBtX2N1ZXNCeVN0YXJ0VGltZS5maW5kKGN1ZSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZv
dW5kKQorICAgICAgICBtX2N1ZXNCeVN0YXJ0VGltZS5yZW1vdmUoaW5kZXgpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUlu
ZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1ZUluZGV4LmgKaW5kZXggODYyZTJkYTQ5YzJj
OTMyNmZhOTU4YTBkY2EzMWU1YzQxODA5YTBjZC4uODEyMmZiNDMzNDhhNmM2MjUzNzZjZmFjYzk0
MzY2NGIwNTgzODQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdWVJbmRleC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VlSW5kZXguaApAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKIAogI2luY2x1ZGUgIkN1ZUxvYWRlci5oIgorI2luY2x1
ZGUgIlRleHRUcmFja0N1ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM2LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IFRleHRUcmFja0N1ZTsKIGNsYXNzIFRleHRUcmFja0N1ZUxpc3Q7CiAKKy8vIEN1ZVNldCBpcyB1
c2VkIGFzIGEgc3RydWN0dXJlIGZvciBjb21tb24gb3BlcmF0aW9ucyBvbiBzZXRzIG9mIFRleHRU
cmFja0N1ZXMuCisvLyBJdCBwb2ludHMgdG8gZXhpc3RpbmcgVGV4dFRyYWNrQ3VlcyBidXQgZG9l
cyBub3Qgb3duLCBtYWludGFpbiwgb3IgbW9kaWZ5IHRoZW0uCisKIGNsYXNzIEN1ZVNldCB7CiBw
dWJsaWM6CisgICAgdHlwZWRlZiBIYXNoU2V0PFRleHRUcmFja0N1ZSo+OjppdGVyYXRvciBJdGVy
YXRvcjsKICAgICBDdWVTZXQoKSB7IH0KICAgICB+Q3VlU2V0KCkgeyB9CiAgICAgQ3VlU2V0IGRp
ZmZlcmVuY2UoY29uc3QgQ3VlU2V0JikgY29uc3Q7CkBAIC00NSwyMiArNTAsMzcgQEAgcHVibGlj
OgogICAgIHZvaWQgYWRkKGNvbnN0IFRleHRUcmFja0N1ZSYpOwogICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Q7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgVGV4dFRy
YWNrQ3VlJik7CisgICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Owog
ICAgIGludCBzaXplKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJ
dGVyYXRvciBlbmQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBIYXNoU2V0PFRleHRUcmFja0N1
ZSo+IG1fc2V0OwogfTsKIAorLy8gQ3VlSW5kZXggaXMgdXNlZCBhcyBhIGZhc3QgbG9vay11cCBm
b3IgVGV4dFRyYWNrQ3VlcyBkdXJpbmcgdmlkZW8gcGxheWJhY2suCisvLyBJdCBrZWVwcyByZWZl
cmVuY2VzIHRvIFRleHRUcmFja0N1ZXMsIGJ1dCBkb2VzIG5vdCBvd24sIG1haW50YWluLCBvciBt
b2RpZnkgdGhlbS4KKy8vIFRleHRUcmFja0N1ZXMgYXJlIG93bmVkIGJ5IHRoZSBUZXh0VHJhY2tD
dWVMaXN0cyBvZiB0aGVpciByZXNwZWN0aXZlIFRleHRUcmFja3MsCisvLyB3aGljaCBhcmUgcmVz
cG9uc2libGUgZm9yIG5vdGlmeWluZyBDdWVJbmRleCBvZiBsaWZldGltZSBjaGFuZ2VzIG9mIFRl
eHRUcmFja0N1ZXMsCisvLyB0aHJvdWdoIHRoZSBDdWVMb2FkZXJDbGllbnQgaW50ZXJmYWNlLgor
CiBjbGFzcyBDdWVJbmRleCA6IHB1YmxpYyBDdWVMb2FkZXJDbGllbnQgewogcHVibGljOgogICAg
IC8vIEN1ZUxvYWRlckNsaWVudCBtZXRob2RzLgotICAgIHZvaWQgZmV0Y2hOZXdDdWVzRnJvbUxv
YWRlcihDdWVMb2FkZXIqKTsKKyAgICB2b2lkIG5ld0N1ZXNBdmFpbGFibGUoQ3VlTG9hZGVyKik7
CiAgICAgdm9pZCByZW1vdmVDdWVzRnJvbUluZGV4KGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqKTsK
IAogICAgIC8vIFJldHVybnMgc2V0IG9mIGN1ZXMgdmlzaWJsZSBhdCBhIHRpbWUgaW4gc2Vjb25k
cy4KICAgICBDdWVTZXQgdmlzaWJsZUN1ZXNBdFRpbWUoZG91YmxlKSBjb25zdDsKICAgICB2b2lk
IGFkZChUZXh0VHJhY2tDdWUqKTsKICAgICB2b2lkIHJlbW92ZShUZXh0VHJhY2tDdWUqKTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGFkZChUZXh0VHJhY2tDdWUqLCBzaXplX3Qgc3RhcnQsIHNpemVf
dCBlbmQpOworCisgICAgVmVjdG9yPFRleHRUcmFja0N1ZSo+IG1fY3Vlc0J5U3RhcnRUaW1lOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKaW5kZXggOGQ3NTNiNmJmNjkxMjEwYmRmNGUzM2NmOWRjZmQwYmM4Mzc3NDQx
YS4uYTQ2NWNjMmFkMzZjMjM0NjFjMWM5ODliZmEwMjg3M2YzN2I1YWZkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC03OTksNyArNzk5LDcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojpsb2FkVGV4dFRyYWNrcygpCiAgICAgZm9yIChOb2RlKiBub2RlID0g
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBpZiAobm9kZS0+aGFzVGFnTmFtZSh0cmFja1RhZykpIHsKICAgICAgICAgICAgIEhUTUxUcmFj
a0VsZW1lbnQqIHRyYWNrID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxlbWVudCo+KG5vZGUpOwot
ICAgICAgICAgICAgdHJhY2stPmxvYWQoQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgICAgICAgICAgdHJhY2stPmxvYWQoQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksICZtX2N1ZUluZGV4KTsKICAgICAgICAgfQogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggYmNmNjMyZTViNzVjYWUy
NzkwOWQxNWRmMTU0MzVlMWE1Njk0NjAzYy4uZDUxMjM5Nzg4ZjJlMmUwZmE4NmUyMDA2MjVkZjQy
NGQxNDhkY2NiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTM3
LDYgKzM3LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5oIgogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiQ3VlSW5kZXguaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQpAQCAtNDU1LDYgKzQ1
OSwxMCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSB2YWx1ZSBpcyBjbGVhcmVkIGluIE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpLgogICAg
IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSogbV9hdWRpb1NvdXJjZU5vZGU7CiAjZW5kaWYK
KworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBDdWVJbmRleCBtX2N1ZUluZGV4OworI2Vu
ZGlmCiB9OwogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVt
ZW50LmNwcAppbmRleCAwNDNmMDhiMzZmNzA0NTY1ODk5ODhjZjJhODE0ZGEwZjMxNGFhZjhjLi4z
MWUxZTI2YzkwNDY5YzMxMzFiOGY2MzQ0Njc4OWNkYTYyZWQ4NzI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTEyOSwxMiArMTI5LDE1IEBAIGJvb2wgSFRN
TFRyYWNrRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyaWJ1dGUpIGNvbnN0
CiAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+bmFtZSgpID09IHNyY0F0dHI7CiB9CiAKLXZvaWQgSFRN
TFRyYWNrRWxlbWVudDo6bG9hZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQordm9p
ZCBIVE1MVHJhY2tFbGVtZW50Ojpsb2FkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEN1ZUxvYWRlckNsaWVudCogY3VlQ2xpZW50KQogeworICAgIGlmIChtX3RyYWNrKQorICAgICAg
ICByZXR1cm47CisgICAgU3RyaW5nIHNvdXJjZSA9IGdldE5vbkVtcHR5VVJMQXR0cmlidXRlKHNy
Y0F0dHIpOworICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAgICAg
bV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNrOjpjcmVhdGUoa2luZCgpLCBsYWJlbCgpLCBzcmNs
YW5nKCksIGlzRGVmYXVsdCgpKTsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoc3JjQXR0cikpCi0g
ICAgICAgIG1fdHJhY2stPmxvYWQoZ2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoc3JjQXR0ciksIGNv
bnRleHQpOworICAgIG1fdHJhY2stPmxvYWQoc291cmNlLCBjb250ZXh0LCBjdWVDbGllbnQpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCmluZGV4IDk0NjU2NDJl
NTY3NTc1NjA4YTY0NjhkMzAzZjg0ZGFkNjhiNzVjOWIuLjcyM2I4MmJlMzMxZmExNzc2YmJkODFi
YjBmYTlmM2FiZmY3ODVlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRy
YWNrRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5o
CkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3VlTG9h
ZGVyQ2xpZW50OworCiBjbGFzcyBIVE1MVHJhY2tFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVHJhY2tFbGVtZW50PiBjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC00OSw3ICs1MSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldExhYmVsKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SXNE
ZWZhdWx0KGJvb2wpOwogICAgIAotICAgIHZvaWQgbG9hZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kik7CisgICAgdm9pZCBsb2FkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVMb2FkZXJDbGll
bnQqKTsKIAogcHJpdmF0ZToKICAgICBIVE1MVHJhY2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJs
ZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNw
cAppbmRleCA0ZWIyNDg1YzRiNTA2ZGJlODgxMTJhMjczODlmZjlmZTM0YTk4MzE5Li5hOGUzOWRj
YWMxMTZkYTUzZTI5MjM3ZGUxMGZiZmRlMjYwZDg0MjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAtMzUsMjUgKzM1LDM0IEBAIExvYWRhYmxlVGV4dFRy
YWNrOjpMb2FkYWJsZVRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYg
bGFiZWwsIGNvCiAgICAgOiBUZXh0VHJhY2soa2luZCwgbGFiZWwsIGxhbmd1YWdlKQogICAgICwg
bV9pc0RlZmF1bHQoaXNEZWZhdWx0KQogeworICAgIG1fY3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6
OmNyZWF0ZSgpOworICAgIG1fY3Vlcy0+c2V0Q3VlT3JkZXIoVGV4dFRyYWNrQ3VlTGlzdDo6Q2hy
b25vbG9naWNhbCk7CiB9CiAKIExvYWRhYmxlVGV4dFRyYWNrOjp+TG9hZGFibGVUZXh0VHJhY2so
KQogeworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnJlbW92ZUN1ZXNGcm9t
SW5kZXgobV9jdWVzLmdldCgpKTsKIH0KIAotdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6bG9hZChj
b25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3ZvaWQg
TG9hZGFibGVUZXh0VHJhY2s6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEN1ZUxvYWRlckNsaWVudCogY2xpZW50KQogeworICAgIHNldEN1
ZUxvYWRlckNsaWVudChjbGllbnQpOwogICAgIHJldHVybiBtX3BhcnNlci5sb2FkKHVybCwgY29u
dGV4dCwgdGhpcyk7CiB9CiAKLWJvb2wgTG9hZGFibGVUZXh0VHJhY2s6OnN1cHBvcnRzVHlwZShj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICByZXR1cm4gbV9wYXJzZXIuc3VwcG9ydHNUeXBlKHVy
bCk7Ci19Ci0KIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6Om5ld0N1ZXNQYXJzZWQoKQogewotICAg
IC8vIEZJWE1FKDYyODgzKTogRmV0Y2ggbmV3IGN1ZXMgZnJvbSBwYXJzZXIgYW5kIHRlbXBvcmFy
aWx5IHN0b3JlIHRvIGdpdmUgdG8gQ3VlTG9hZGVyQ2xpZW50IHdoZW4gZmV0Y2hOZXdDdWVzRnJv
bUxvYWRlciBpcyBjYWxsZWQuCisgICAgLy8gRmV0Y2ggbmV3IGN1ZXMgZnJvbSBwYXJzZXIgYW5k
IHRlbXBvcmFyaWx5IHN0b3JlIHRvIGdpdmUgdG8gQ3VlTG9hZGVyQ2xpZW50IHdoZW4gZmV0Y2hO
ZXdDdWVzIGlzIGNhbGxlZC4KKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiBuZXdD
dWVzOworICAgIG1fcGFyc2VyLmZldGNoUGFyc2VkQ3VlcyhuZXdDdWVzKTsKKyAgICBmb3IgKFZl
Y3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+OjppdGVyYXRvciBpdCA9IG5ld0N1ZXMuYmVnaW4o
KTsgaXQgPCBuZXdDdWVzLmVuZCgpOyBpdCsrKSB7CisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2tD
dWU+IGN1ZSA9ICppdDsKKyAgICAgICAgY3VlLT5zZXRUcmFjayh0aGlzKTsKKyAgICAgICAgbV9u
ZXdlc3RDdWVzLmFwcGVuZChjdWUpOworICAgIH0KKyAgICBtX2N1ZXMtPmFkZChuZXdDdWVzKTsK
KyAgICBtX2NsaWVudC0+bmV3Q3Vlc0F2YWlsYWJsZSh0aGlzKTsKIH0KIAogdm9pZCBMb2FkYWJs
ZVRleHRUcmFjazo6dHJhY2tMb2FkU3RhcnRlZCgpCkBAIC03MSwxNCArODAsMTEgQEAgdm9pZCBM
b2FkYWJsZVRleHRUcmFjazo6dHJhY2tMb2FkQ29tcGxldGVkKCkKICAgICBzZXRSZWFkeVN0YXRl
KFRleHRUcmFjazo6TE9BREVEKTsKIH0KIAotdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6bmV3Q3Vl
c0xvYWRlZCgpCi17Ci0gICAgLy8gRklYTUUoNjI4ODUpOiBUZWxsIHRoZSBjbGllbnQgdG8gZmV0
Y2ggdGhlIGxhdGVzdCBjdWVzLgotfQotCi12b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpmZXRjaE5l
d2VzdEN1ZXMoVmVjdG9yPFRleHRUcmFja0N1ZSo+JikKK3ZvaWQgTG9hZGFibGVUZXh0VHJhY2s6
OmZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgb3V0cHV0KQog
ewotICAgIC8vIEZJWE1FKDYyODg1KTogSW1wbGVtZW50LgorICAgIGZvciAoVmVjdG9yPFJlZlB0
cjxUZXh0VHJhY2tDdWU+ID46Oml0ZXJhdG9yIGl0ID0gbV9uZXdlc3RDdWVzLmJlZ2luKCk7IGl0
IDwgbV9uZXdlc3RDdWVzLmVuZCgpOyBpdCsrKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCppdCk7
CisgICAgbV9uZXdlc3RDdWVzLmNsZWFyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTG9hZGFibGVUZXh0VHJhY2suaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvTG9hZGFibGVUZXh0VHJhY2suaAppbmRleCBjNTVlZDI2YTZhMmEw
NTI2NGQyNDdmMDE1MDZiYWYwODMxYjU5OGYwLi5hOWQ0ODhlNDhiOGM1N2NiN2I2ZjgzZDIxYTg2
ZmVjYjAxNjFjNThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xvYWRhYmxlVGV4
dFRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Mb2FkYWJsZVRleHRUcmFjay5oCkBA
IC00OSwxNiArNDksMTQgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5Mb2FkYWJsZVRl
eHRUcmFjaygpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqKTsKLSAgICBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEN1ZUxvYWRl
ckNsaWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIG5ld0N1ZXNQYXJzZWQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgdHJhY2tMb2FkU3RhcnRlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB0cmFja0xvYWRF
cnJvcigpOwogICAgIHZpcnR1YWwgdm9pZCB0cmFja0xvYWRDb21wbGV0ZWQoKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBuZXdDdWVzTG9hZGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGZldGNoTmV3ZXN0
Q3VlcyhWZWN0b3I8VGV4dFRyYWNrQ3VlKj4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdl
c3RDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CiAKIHByaXZhdGU6CiAgICAg
TG9hZGFibGVUZXh0VHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVs
LCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBib29sIGlzRGVmYXVsdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL011dGFibGVUZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9NdXRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCA0ZDY4MzU0Njk2NjY0NjlkOWNmZmY4MjYz
YTJmMmM1MGEzNGJmNDExLi41NWNkOTYxZGMyNWNiZGE0MGFiZDI1MWY1NmY4ZTc1NDQwNDBiZmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL011dGFibGVUZXh0VHJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTXV0YWJsZVRleHRUcmFjay5jcHAKQEAgLTU0LDcgKzU0
LDcgQEAgdm9pZCBNdXRhYmxlVGV4dFRyYWNrOjpuZXdDdWVzTG9hZGVkKCkKICAgICAvLyBGSVhN
RSg2Mjg5MCk6IEltcGxlbWVudC4KIH0KIAotdm9pZCBNdXRhYmxlVGV4dFRyYWNrOjpmZXRjaE5l
d2VzdEN1ZXMoVmVjdG9yPFRleHRUcmFja0N1ZSo+JikKK3ZvaWQgTXV0YWJsZVRleHRUcmFjazo6
ZmV0Y2hOZXdlc3RDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikKIHsKICAgICAv
LyBGSVhNRSg2Mjg5MCk6IEltcGxlbWVudC4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTXV0YWJsZVRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NdXRhYmxlVGV4
dFRyYWNrLmgKaW5kZXggNjE4YzI3MjJkNWMzMjU4Y2E2YjE3ZGMyNzYxMGQ3MzUyODkwMzFkZC4u
YTBiNzdkYjNmMDBlYzI0MWY5ZjVkMzRmYzljYzI3ZTM2MTlmZWJlMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9NdXRhYmxlVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9NdXRhYmxlVGV4dFRyYWNrLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgcmVtb3ZlQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgbmV3Q3Vlc0xvYWRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBmZXRjaE5ld2VzdEN1ZXMoVmVj
dG9yPFRleHRUcmFja0N1ZSo+Jik7CisgICAgdmlydHVhbCB2b2lkIGZldGNoTmV3ZXN0Q3VlcyhW
ZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOwogCiBwcml2YXRlOgogICAgIE11dGFibGVU
ZXh0VHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBT
dHJpbmcmIGxhbmd1YWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRy
YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oCmluZGV4IDlhODJmODNlZTFm
NzJkYWVkNmM2MmMxMDBiNWI1NDA3MzgxMGZmYTIuLmE4Zjk3OGJlNDI1M2NjNDE2OGY5ZDQyZGNj
MTc2NjBjNDA0M2EyN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNr
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2suaApAQCAtMzYsNiArMzYsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0VHJhY2s7CitjbGFzcyBUZXh0VHJh
Y2tDdWU7CiBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0OwogCiBjbGFzcyBUZXh0VHJhY2tDbGllbnQg
ewpAQCAtNzcsNiArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRSZWFkeVN0YXRlKFJl
YWR5U3RhdGUpOwogCiAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IG1fY3VlczsKKyAgICBW
ZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiBtX25ld2VzdEN1ZXM7CiAKIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fa2luZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRy
YWNrQ3VlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuY3Bw
CmluZGV4IDlhMDZiZDUxNmM5ZmUwOWZhYzA2OGMzNWQ3ZDI1ZjBiZWQyOTlmNmMuLjRjOTk2ZDRj
NTNjYTkzZTlmNjBlYmU5ZTQ4NzZlOGNmZjllZTFmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9U
ZXh0VHJhY2tDdWVMaXN0LmNwcApAQCAtMzIsMjkgKzMyLDc4IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFRleHRUcmFja0N1ZUxpc3Q6OlRleHRUcmFja0N1ZUxpc3QoKQorICAgIDogbV9vcmRl
cihOb09yZGVyUmVxdWlyZW1lbnRzKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50
LgogfQogCi1UZXh0VHJhY2tDdWUqIFRleHRUcmFja0N1ZUxpc3Q6OmdldEN1ZUJ5SWQoY29uc3Qg
U3RyaW5nJikgY29uc3QKK3Vuc2lnbmVkIGxvbmcgVGV4dFRyYWNrQ3VlTGlzdDo6bGVuZ3RoKCkg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAgICByZXR1cm4gbV9s
aXN0LnNpemUoKTsKK30KKworVGV4dFRyYWNrQ3VlKiBUZXh0VHJhY2tDdWVMaXN0OjpnZXRDdWVC
eUlkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPFRl
eHRUcmFja0N1ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2xpc3QuYmVnaW4oKTsgaXQgIT0g
bV9saXN0LmVuZCgpOyBpdCsrKSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0gaXQtPmdl
dCgpOworICAgICAgICBpZiAoY3VlLT5pZCgpID09IGlkKQorICAgICAgICAgICAgcmV0dXJuIGN1
ZTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6YXBw
ZW5kKFZlY3RvcjxQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpCitUZXh0VHJhY2tDdWUqIFRl
eHRUcmFja0N1ZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKGlu
ZGV4ID49IG1fbGlzdC5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2xp
c3RbaW5kZXhdLmdldCgpOworfQorCit2b2lkIFRleHRUcmFja0N1ZUxpc3Q6OmFkZChjb25zdCBW
ZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgbmV3Q3VlcykKK3sKKyAgICBmb3IgKFZlY3Rv
cjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0N1ZXMuYmVn
aW4oKTsgaXQgIT0gbmV3Q3Vlcy5lbmQoKTsgaXQrKykKKyAgICAgICAgYWRkKCppdCk7Cit9CisK
K3ZvaWQgVGV4dFRyYWNrQ3VlTGlzdDo6YWRkKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUp
Cit7CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gbmV3Q3VlID0gY3VlOworICAgIGlmIChtX29y
ZGVyID09IENocm9ub2xvZ2ljYWwgJiYgIW1fbGlzdC5pc0VtcHR5KCkgJiYgbmV3Q3VlLT5zdGFy
dFRpbWUoKSA8IG1fbGlzdC5sYXN0KCktPnN0YXJ0VGltZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgYWRkKG5ld0N1ZSwgMCwgbV9saXN0LnNpemUoKSk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3Vl
TGlzdDo6YWRkKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUsIHNpemVfdCBzdGFydCwgc2l6
ZV90IGVuZCkKK3sKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBuZXdDdWUgPSBjdWU7CisgICAg
aWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAgIG1fbGlzdC5pbnNlcnQoc3RhcnQsIG5ld0N1ZSk7
CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBpbmRleCA9IChzdGFydCArIGVu
ZCkgLyAyOworICAgIGlmIChuZXdDdWUtPnN0YXJ0VGltZSgpIDwgbV9saXN0W2luZGV4XS0+c3Rh
cnRUaW1lKCkKKyAgICAgICAgfHwgKG5ld0N1ZS0+c3RhcnRUaW1lKCkgPT0gbV9saXN0W2luZGV4
XS0+c3RhcnRUaW1lKCkKKyAgICAgICAgJiYgbmV3Q3VlLT5lbmRUaW1lKCkgPCBtX2xpc3RbaW5k
ZXhdLT5lbmRUaW1lKCkpKQorICAgICAgICBhZGQobmV3Q3VlLCBzdGFydCwgaW5kZXgpOworICAg
IGVsc2UKKyAgICAgICAgYWRkKG5ld0N1ZSwgaW5kZXggKyAxLCBlbmQpOworfQorCisKK3ZvaWQg
VGV4dFRyYWNrQ3VlTGlzdDo6cmVtb3ZlKFRleHRUcmFja0N1ZSogY3VlKQogewotICAgIC8vIEZJ
WE1FKDYyODgzKTogSW1wbGVtZW50LgorICAgIGN1ZS0+c2V0SXNBY3RpdmUoZmFsc2UpOworICAg
IG1fbGlzdC5yZW1vdmUobV9saXN0LmZpbmQoY3VlKSk7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3Vl
TGlzdDo6YXBwZW5kKGNvbnN0IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiYpCitUZXh0VHJhY2tD
dWVMaXN0OjpJdGVyYXRvciBUZXh0VHJhY2tDdWVMaXN0OjpiZWdpbigpCiB7Ci0gICAgLy8gRklY
TUUoNjI4ODMpOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIG1fbGlzdC5iZWdpbigpOwogfQogCi12
b2lkIFRleHRUcmFja0N1ZUxpc3Q6OnJlbW92ZShjb25zdCBQYXNzUmVmUHRyPFRleHRUcmFja0N1
ZT4mKQorVGV4dFRyYWNrQ3VlTGlzdDo6SXRlcmF0b3IgVGV4dFRyYWNrQ3VlTGlzdDo6ZW5kKCkK
IHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KKyAgICByZXR1cm4gbV9saXN0LmVu
ZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRUcmFja0N1ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRy
YWNrQ3VlTGlzdC5oCmluZGV4IDNiMzdlNDRmNWM0YWRmNjBkNzg4YzEyMTk3NjdlNWUzOTZjNTlj
MWUuLmEwODdiZTc4MTQ5YjQ5MmFkNGJjYmY5NjcwZTI2ZGQ1MjExNGU4Y2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dFRyYWNrQ3VlTGlzdC5oCkBAIC0zNywyMSArMzcsMzUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBUZXh0VHJhY2tDdWVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8
VGV4dFRyYWNrQ3VlTGlzdD4gewogcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxU
ZXh0VHJhY2tDdWU+ID46Oml0ZXJhdG9yIEl0ZXJhdG9yOworCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dFRyYWNrQ3VlTGlzdD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dFRyYWNrQ3VlTGlzdCk7CiAgICAgfQorICAgIAorICAgIH5UZXh0VHJhY2tD
dWVMaXN0KCkgeyB9CiAKICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OworICAgIFRl
eHRUcmFja0N1ZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAgVGV4dFRyYWNrQ3Vl
KiBnZXRDdWVCeUlkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8VGV4dFRy
YWNrQ3VlTGlzdD4gYWN0aXZlQ3VlcygpOwogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgUGFzc1Jl
ZlB0cjxUZXh0VHJhY2tDdWU+Jik7Ci0gICAgdm9pZCBhcHBlbmQoVmVjdG9yPFBhc3NSZWZQdHI8
VGV4dFRyYWNrQ3VlPiA+Jik7Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgUGFzc1JlZlB0cjxUZXh0
VHJhY2tDdWU+Jik7CisgICAgZW51bSBDdWVPcmRlclJlcXVpcmVtZW50cyB7IE5vT3JkZXJSZXF1
aXJlbWVudHMsIENocm9ub2xvZ2ljYWwgfTsKKyAgICB2b2lkIHNldEN1ZU9yZGVyKEN1ZU9yZGVy
UmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cykgeyBtX29yZGVyID0gcmVxdWlyZW1lbnRzOyB9Cisg
ICAgCisgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+KTsKKyAgICB2b2lkIGFk
ZChjb25zdCBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOworICAgIHZvaWQgcmVtb3Zl
KFRleHRUcmFja0N1ZSopOworICAgIAorICAgIHZpcnR1YWwgSXRlcmF0b3IgYmVnaW4oKTsKKyAg
ICB2aXJ0dWFsIEl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRlOgogICAgIFRleHRUcmFja0N1ZUxp
c3QoKTsKKyAgICB2b2lkIGFkZChQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4sIHNpemVfdCwgc2l6
ZV90KTsKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiBtX2xpc3Q7CisgICAgQ3Vl
T3JkZXJSZXF1aXJlbWVudHMgbV9vcmRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9DdWVMb2FkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9DdWVMb2FkZXIuaAppbmRleCAwYmY3YjkyNjUyYjg4YzFmNjNiNzljODky
YTkzYjdjNTIyZDQ1ZjEyLi5mZjc1NGFiZmQwN2M4NzJhYWY3ZWVhYTk1ZGYyN2I3ODkxMmQ0Mzgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3VlTG9hZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0N1ZUxvYWRlci5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFRl
eHRUcmFja0N1ZUxpc3Q7CiBjbGFzcyBDdWVMb2FkZXJDbGllbnQgewogcHVibGljOgogICAgIC8v
IFF1ZXJpZXMgQ3VlTG9hZGVyIGZvciBuZXdlc3QgY3Vlcy4KLSAgICB2aXJ0dWFsIHZvaWQgZmV0
Y2hOZXdDdWVzRnJvbUxvYWRlcihDdWVMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5l
d0N1ZXNBdmFpbGFibGUoQ3VlTG9hZGVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
dWVzRnJvbUluZGV4KGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqKSA9IDA7CiB9OwogCkBAIC00OCwx
MSArNDgsOCBAQCBjbGFzcyBDdWVMb2FkZXIgewogcHVibGljOgogICAgIHZvaWQgc2V0Q3VlTG9h
ZGVyQ2xpZW50KEN1ZUxvYWRlckNsaWVudCopOwogCi0gICAgLy8gSW5mb3JtcyBjbGllbnQgdGhh
dCBuZXcgY3VlcyBoYXZlIGJlZW4gbG9hZGVkLgotICAgIHZpcnR1YWwgdm9pZCBuZXdDdWVzTG9h
ZGVkKCkgPSAwOwotCiAgICAgLy8gVHJhbnNmZXJzIG93bmVyc2hpcCBvZiBjdXJyZW50bHkgbG9h
ZGVkIGN1ZXMuCi0gICAgdmlydHVhbCB2b2lkIGZldGNoTmV3ZXN0Q3VlcyhWZWN0b3I8VGV4dFRy
YWNrQ3VlKj4mIGN1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hOZXdlc3RDdWVzKFZl
Y3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBjdWVzKSA9IDA7CiAKIHByb3RlY3RlZDoKICAg
ICBDdWVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5jcHAKaW5kZXggODFkNWM4NzFhYjJiZDhiZDllZmRkMDMwMzE5ZjhlYTIw
NWY4NGFlOS4uZjI4MzA3ZmVjZTYxYzRlNjY5ODU2ZWE4NmUxNWQyZDEwODdmMTY4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCkBAIC00Miw3ICs0Miw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ3VlUGFyc2VyOjpDdWVQYXJzZXIoKQogewotICAg
IC8vIEZJWE1FKDYyODkzKTogSW1wbGVtZW50LgogfQogCiBDdWVQYXJzZXI6On5DdWVQYXJzZXIo
KQpAQCAtNjYsMTIgKzY1LDYgQEAgdm9pZCBDdWVQYXJzZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1
cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEN1ZVBhcnMKICAgICBtX2xvYWRl
ciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzLCByZXF1ZXN0LCBvcHRp
b25zKTsKIH0KIAotYm9vbCBDdWVQYXJzZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHVy
bCkKLXsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IGNoZWNrIGFnYWluc3QgYSBsaXN0IG9mIHN1cHBv
cnRlZCB0eXBlcwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBDdWVQYXJzZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAocmVzcG9uc2UubWltZVR5cGUoKSA9PSAi
dGV4dC92dHQiKQpAQCAtOTgsOSArOTEsOSBAQCB2b2lkIEN1ZVBhcnNlcjo6ZGlkRmFpbChjb25z
dCBSZXNvdXJjZUVycm9yJikKICAgICBtX2NsaWVudC0+dHJhY2tMb2FkRXJyb3IoKTsKIH0KIAot
dm9pZCBDdWVQYXJzZXI6OmZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1
ZT4gPiYpCit2b2lkIEN1ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKQogewotICAgIC8vIEZJWE1FKDYyODkzKTogSW1wbGVt
ZW50LgorICAgIG1fcHJpdmF0ZS0+ZmV0Y2hQYXJzZWRDdWVzKG91dHB1dEN1ZXMpOwogfQogCiB2
b2lkIEN1ZVBhcnNlcjo6bmV3Q3Vlc1BhcnNlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5oCmluZGV4IDc4MWYwNTgwYmVkYzA2OGZmYTA0NjJlZmNiZDFhZjNmNjU5
M2Q3NDMuLjA1MTkzNjFhYzM3M2YwMTRiMzg2OTIzMWNlMjVjMTQwMmFhODQ1NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCkBAIC02NCw3ICs2NCw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgdm9p
ZCBsb2FkKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVQYXJzZXJD
bGllbnQqKTsKLSAgICBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZv
aWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CiAgICAg
dm9pZCBuZXdDdWVzUGFyc2VkKCk7Cg==
</data>
<flag name="review"
          id="101881"
          type_id="1"
          status="-"
          setter="annacc"
    />
    <flag name="commit-queue"
          id="101882"
          type_id="3"
          status="-"
          setter="annacc"
    />
          </attachment>
      

    </bug>

</bugzilla>