<?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>205460</bug_id>
          
          <creation_ts>2019-12-19 10:24:24 -0800</creation_ts>
          <short_desc>Update TrackBase to store m_mediaElement as a WeakPtr</short_desc>
          <delta_ts>2019-12-20 13:52:20 -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>WebKit Local Build</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>macOS 10.15</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Doug Kelly">dougk</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>rniwa</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1600365</commentid>
    <comment_count>0</comment_count>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2019-12-19 10:24:24 -0800</bug_when>
    <thetext>Update TrackBase and associated classes to store their HTMLMediaElement as a WeakPtr instead of a raw pointer.  This is optional for these classes, but if set, should be a valid HTMLMediaElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600366</commentid>
    <comment_count>1</comment_count>
      <attachid>386116</attachid>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2019-12-19 10:30:35 -0800</bug_when>
    <thetext>Created attachment 386116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600604</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-19 18:25:01 -0800</bug_when>
    <thetext>Committed r253809: &lt;https://trac.webkit.org/changeset/253809&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600605</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-19 18:25:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/58099071&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600747</commentid>
    <comment_count>4</comment_count>
      <attachid>386116</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-20 09:02:47 -0800</bug_when>
    <thetext>Comment on attachment 386116
Patch

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

Copying a WeakPtr is expensive so it’s better if we transfer ownership when we can rather than making copies.

&gt; Source/WebCore/html/track/AudioTrack.h:68
&gt; +    void setMediaElement(WeakPtr&lt;HTMLMediaElement&gt;) override;

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/AudioTrackList.h:38
&gt; +    static Ref&lt;AudioTrackList&gt; create(WeakPtr&lt;HTMLMediaElement&gt; owner, ScriptExecutionContext* context)

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/AudioTrackList.h:54
&gt; +    AudioTrackList(WeakPtr&lt;HTMLMediaElement&gt;, ScriptExecutionContext*);

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/InbandTextTrack.h:52
&gt; +    void setMediaElement(WeakPtr&lt;HTMLMediaElement&gt;) override;

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/TextTrackList.h:39
&gt; +    static Ref&lt;TextTrackList&gt; create(WeakPtr&lt;HTMLMediaElement&gt; element, ScriptExecutionContext* context)

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/TextTrackList.h:63
&gt; +    TextTrackList(WeakPtr&lt;HTMLMediaElement&gt;, ScriptExecutionContext*);

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/TrackBase.h:52
&gt; +    virtual void setMediaElement(WeakPtr&lt;HTMLMediaElement&gt;);

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/TrackBase.h:53
&gt; +    WeakPtr&lt;HTMLMediaElement&gt; mediaElement() { return m_mediaElement; }

Might be better to use const WeakPtr&amp; for the return type. Or even leave the return type a raw pointer. Not sure which idiom is best. Returning a copy of the WeakPtr is costly.

&gt; Source/WebCore/html/track/TrackBase.h:86
&gt; +    WeakPtr&lt;HTMLMediaElement&gt; m_mediaElement { nullptr };

No need for the &quot;{ nullptr }&quot; when it’s a smart pointer. Only raw pointers need that initialization.

&gt; Source/WebCore/html/track/TrackListBase.h:60
&gt; +    WeakPtr&lt;HTMLMediaElement&gt; mediaElement() const { return m_element; }

Might be better to use const WeakPtr&amp; for the return type. Or even leave the return type a raw pointer. Not sure which idiom is best. Returning a copy of the WeakPtr is costly.

&gt; Source/WebCore/html/track/TrackListBase.h:69
&gt; +    TrackListBase(WeakPtr&lt;HTMLMediaElement&gt;, ScriptExecutionContext*);

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/VideoTrack.h:76
&gt; +    void setMediaElement(WeakPtr&lt;HTMLMediaElement&gt;) override;

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/VideoTrackList.h:38
&gt; +    static Ref&lt;VideoTrackList&gt; create(WeakPtr&lt;HTMLMediaElement&gt; owner, ScriptExecutionContext* context)

This should be WeakPtr&amp;&amp; so we can transfer ownership.

&gt; Source/WebCore/html/track/VideoTrackList.h:55
&gt; +    VideoTrackList(WeakPtr&lt;HTMLMediaElement&gt;, ScriptExecutionContext*);

This should be WeakPtr&amp;&amp; so we can transfer ownership.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600752</commentid>
    <comment_count>5</comment_count>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2019-12-20 09:25:40 -0800</bug_when>
    <thetext>Reopened to address Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600753</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-20 09:29:28 -0800</bug_when>
    <thetext>Will need to use WTFMove in various places along with changing the type to WeakPtr&amp;&amp; to get the moving to happen, but it should not be super-challenging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600755</commentid>
    <comment_count>7</comment_count>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2019-12-20 09:31:23 -0800</bug_when>
    <thetext>Thanks for the tip -- Jer had also mentioned some of this in passing, and I just didn&apos;t put it into the review here before it landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600839</commentid>
    <comment_count>8</comment_count>
      <attachid>386231</attachid>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2019-12-20 11:30:46 -0800</bug_when>
    <thetext>Created attachment 386231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600845</commentid>
    <comment_count>9</comment_count>
      <attachid>386231</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-12-20 11:36:13 -0800</bug_when>
    <thetext>Comment on attachment 386231
Patch

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

r=me with a lone nit

&gt; Source/WebCore/html/track/TrackListBase.cpp:44
&gt;      , m_element(element)

This could be a WTFMove();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600847</commentid>
    <comment_count>10</comment_count>
      <attachid>386233</attachid>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2019-12-20 11:40:07 -0800</bug_when>
    <thetext>Created attachment 386233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600882</commentid>
    <comment_count>11</comment_count>
      <attachid>386241</attachid>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2019-12-20 12:53:07 -0800</bug_when>
    <thetext>Created attachment 386241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600890</commentid>
    <comment_count>12</comment_count>
      <attachid>386241</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-20 13:10:17 -0800</bug_when>
    <thetext>Comment on attachment 386241
Patch

OK, now looking at the new patch and thinking about the long term for all of WebKit I think we are still probably doing this wrong. Generally speaking:

- Data members are long lived, so when the object is reference counted they should be WeakPtr, RefPtr, or Ref. It’s important that we use WeakPtr rather than RefPtr or Ref to avoid creating reference cycles and generally to avoid keeping objects alive too long. But we usually don’t want to use raw pointers or raw references because it’s too easy to get it wrong.

- Local variables, arguments, and return values are less long lived. They should probably never be WeakPtr because WeakPtr is too expensive to create and destroy and it’s almost always fine to keep an object alive a little longer by using RefPtr instead. But for safety these should probably be RefPtr or Ref and not raw pointers or raw references.

- It might be safe to sometimes use const&amp; or &amp;&amp; to avoid unnecessary copying. However, it may not be worth it. These are a bit dangerous because they depend on the lifetime of the place where the value is coming from. For example, if you return a const&amp; to a data member and then the object it was returned from is deleted then there could be a problem if we still haven’t copied the value out of the referenced location. Not sure if this same argument applies to values passed in.

I am sure we don’t want to create a temporary WeakPtr and then copy it into a permanent WeakPtr. That is excessively inefficient. But I am not sure that WeakPtr&amp;&amp; is right either. What is the right type for arguments in cases like this?

I’d love to just supply the answer, but I am not sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600891</commentid>
    <comment_count>13</comment_count>
      <attachid>386241</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-20 13:14:21 -0800</bug_when>
    <thetext>Comment on attachment 386241
Patch

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

&gt; Source/WebCore/html/track/TrackListBase.cpp:44
&gt; +    , m_element(WTFMove(element))

My opinions is that methods should take an an HTMLMediaElement&amp; or a HTMLMediaElement* in parameter. Then, here when saving it as a data member, we would call makeWeakPtr().
It should be up to the class that store the data to decide which pointer type to use for storage, not the call site IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600892</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-20 13:16:57 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #13)
&gt; My opinions is that methods should take an an HTMLMediaElement&amp; or a
&gt; HTMLMediaElement* in parameter. Then, here when saving it as a data member,
&gt; we would call makeWeakPtr().
&gt; It should be up to the class that store the data to decide which pointer
&gt; type to use for storage, not the call site IMHO.

I agree.

With one outstanding question:

How does that relate to Ryosuke&apos;s proposal to always use RefPtr and Ref for local variables from now on instead of raw pointers and references? Aren&apos;t arguments just local variables?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600893</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-20 13:20:27 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #14)
&gt; (In reply to Chris Dumez from comment #13)
&gt; &gt; My opinions is that methods should take an an HTMLMediaElement&amp; or a
&gt; &gt; HTMLMediaElement* in parameter. Then, here when saving it as a data member,
&gt; &gt; we would call makeWeakPtr().
&gt; &gt; It should be up to the class that store the data to decide which pointer
&gt; &gt; type to use for storage, not the call site IMHO.
&gt; 
&gt; I agree.
&gt; 
&gt; With one outstanding question:
&gt; 
&gt; How does that relate to Ryosuke&apos;s proposal to always use RefPtr and Ref for
&gt; local variables from now on instead of raw pointers and references? Aren&apos;t
&gt; arguments just local variables?

I admit I have not usually been following Ryosuke&apos;s proposal myself. I will let Ryosuke comment on this then :) Maybe we&apos;d pass a Ref&lt;&gt;&amp;&amp; / RefPtr&lt;&gt;&amp;&amp; in parameter and convert that to a WeakPtr internally as needed for storage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600896</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-20 13:23:44 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 386241 [details]
&gt; Patch
&gt; 
&gt; OK, now looking at the new patch and thinking about the long term for all of
&gt; WebKit I think we are still probably doing this wrong. Generally speaking:
&gt; 
&gt; - Data members are long lived, so when the object is reference counted they
&gt; should be WeakPtr, RefPtr, or Ref. It’s important that we use WeakPtr rather
&gt; than RefPtr or Ref to avoid creating reference cycles and generally to avoid
&gt; keeping objects alive too long. But we usually don’t want to use raw
&gt; pointers or raw references because it’s too easy to get it wrong.

Agreed.

&gt; - Local variables, arguments, and return values are less long lived. They
&gt; should probably never be WeakPtr because WeakPtr is too expensive to create
&gt; and destroy and it’s almost always fine to keep an object alive a little
&gt; longer by using RefPtr instead. But for safety these should probably be
&gt; RefPtr or Ref and not raw pointers or raw references.

There are cases we need to hold a reference to std::unique_ptr stored somewhere.
In those cases, we may not have a choice but to use WeakPtr.
I&apos;m discussing with Geoff (Garren) on how to safe guard these cases.

&gt; - It might be safe to sometimes use const&amp; or &amp;&amp; to avoid unnecessary
&gt; copying. However, it may not be worth it. These are a bit dangerous because
&gt; they depend on the lifetime of the place where the value is coming from. For
&gt; example, if you return a const&amp; to a data member and then the object it was
&gt; returned from is deleted then there could be a problem if we still haven’t
&gt; copied the value out of the referenced location. Not sure if this same
&gt; argument applies to values passed in.

Right. I think the general rule is that whenever you call a member function on an object, then we should have a Ref/RefPtr to that object in the stack. It gets a bit more complicated with std::unique_ptr in a data member or WeakPtr since they can be cleared at any moment.

(In reply to Darin Adler from comment #14)
&gt; (In reply to Chris Dumez from comment #13)
&gt; &gt; My opinions is that methods should take an an HTMLMediaElement&amp; or a
&gt; &gt; HTMLMediaElement* in parameter. Then, here when saving it as a data member,
&gt; &gt; we would call makeWeakPtr().
&gt; &gt; It should be up to the class that store the data to decide which pointer
&gt; &gt; type to use for storage, not the call site IMHO.
&gt; 
&gt; I agree.
&gt; 
&gt; With one outstanding question:
&gt; 
&gt; How does that relate to Ryosuke&apos;s proposal to always use RefPtr and Ref for
&gt; local variables from now on instead of raw pointers and references? Aren&apos;t
&gt; arguments just local variables?

So I think the simple rule we&apos;ve come up so far is that:
1. Caller keeps keep all arguments (including &quot;this&quot; pointer) alive or pass the ownership via Ref&amp;&amp; / RefPtr&amp;&amp;.
2. Arguments can be pointers or references because the caller keeps them alive.
3. Exception to (1) are arguments passed as pointers or references because (2) guarantees your caller will keep them alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600897</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-20 13:24:08 -0800</bug_when>
    <thetext>The &quot;proposal&quot; for the rule is still in flux but hoping to post something on webkit-dev soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600902</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-20 13:30:49 -0800</bug_when>
    <thetext>So then I guess the arguments should be raw pointers or references and the return value types from the getters should be RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600913</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-20 13:52:20 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #18)
&gt; So then I guess the arguments should be raw pointers or references and the
&gt; return value types from the getters should be RefPtr.

It could be or the caller of those functions could make RefPtr/Ref. One additional exception we’re considering is to allow chaining like: m_document.frame().page() in the case member function is trivial.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386116</attachid>
            <date>2019-12-19 10:30:35 -0800</date>
            <delta_ts>2019-12-20 11:30:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205460-20191219103034.patch</filename>
            <type>text/plain</type>
            <size>20585</size>
            <attacher name="Doug Kelly">dougk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzYzYzUwZTUxN2U4ZThj
MjAzZjJiYmRhZTNlNjhhNjYzNThjM2Q3Mi4uNGQwYTAwZjljMGYxOWI4YzI1NzAzMzNjMWE5OTAz
ZGQ4ZTFiYThlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTEyLTE5ICBEb3Vn
IEtlbGx5ICA8ZG91Z2tAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBUcmFja0Jhc2UgdG8g
c3RvcmUgbV9tZWRpYUVsZW1lbnQgYXMgYSBXZWFrUHRyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdG9yZSB0aGUgSFRNTE1lZGlhRWxlbWVudCBpbiBU
cmFja0Jhc2UgYW5kIHJlbGF0ZWQgY2xhc3NlcyBhcyBhIFdlYWtQdHIgdG8gZ2l2ZSBzb21lIHBy
b3BlciBpZGVhIG9mIHBvaW50ZXIgbGlmZXRpbWUsIHNpbmNlIHdoaWxlIHRoZQorICAgICAgICBI
VE1MTWVkaWFFbGVtZW50IGlzIG9wdGlvbmFsLCBpZiBzZXQsIGl0IHNob3VsZCBiZSBhIHZhbGlk
IEhUTUxNZWRpYUVsZW1lbnQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIG5vIGZ1bmN0
aW9uYWxpdHkgY2hhbmdlZC4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6dmlkZW9UcmFja3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjphdWRpb1RyYWNrcyk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnRleHRUcmFja3MpOgorICAgICAgICAqIGh0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0
ZXh0VHJhY2tNb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjptZWRpYVBsYXllckRpZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjplbnN1cmVBdWRpb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjplbnN1cmVUZXh0VHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmVuc3VyZVZpZGVvVHJhY2tzKToKKyAgICAgICAgKiBodG1sL3RyYWNrL0F1ZGlv
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9UcmFjazo6d2lsbFJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrOjpzZXRNZWRpYUVsZW1lbnQpOgorICAgICAgICAq
IGh0bWwvdHJhY2svQXVkaW9UcmFjay5oOgorICAgICAgICAqIGh0bWwvdHJhY2svQXVkaW9UcmFj
a0xpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9UcmFja0xpc3Q6OkF1ZGlvVHJhY2tM
aXN0KToKKyAgICAgICAgKiBodG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0Lmg6CisgICAgICAgICog
aHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
VGV4dFRyYWNrOjp3aWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFj
azo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZFRleHRUcmFj
ay5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tMaXN0OjpUZXh0VHJhY2tMaXN0KToKKyAgICAgICAgKiBodG1sL3Ry
YWNrL1RleHRUcmFja0xpc3QuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RyYWNrQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0Jhc2U6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhY2tCYXNlOjpzZXRNZWRpYUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJh
Y2tCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0Jhc2U6Om1lZGlhRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRyYWNrTGlzdEJhc2U6OlRyYWNrTGlzdEJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tM
aXN0QmFzZTo6ZWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC90cmFjay9UcmFja0xpc3RC
YXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0xpc3RCYXNlOjptZWRpYUVsZW1lbnQgY29u
c3QpOgorICAgICAgICAqIGh0bWwvdHJhY2svVmlkZW9UcmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb1RyYWNrOjp3aWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJh
Y2s6OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1RyYWNrLmg6
CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb1RyYWNrTGlzdDo6VmlkZW9UcmFja0xpc3QpOgorICAgICAgICAqIGh0bWwvdHJh
Y2svVmlkZW9UcmFja0xpc3QuaDoKKwogMjAxOS0xMi0xOCAgRG91ZyBLZWxseSAgPGRvdWdrQGFw
cGxlLmNvbT4KIAogICAgICAgICBFbnN1cmUgdHJhbnNwYXJlbmN5IGxheWVycyBhcmUgcHJvcGVy
bHkgZW5kZWQgd2hlbiBvbmx5IHBhaW50aW5nIHJvb3QgYmFja2dyb3VuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmluZGV4IGI5
ZDQwMDVmMWJkZDE4OTUwM2E0Y2IzMWYyMGQ5Njg3NDUzMDI5OTMuLmM1MTFjNDI3MzgzYmVlM2Fi
ZGQzYmFjMWFjOTRiZWFjNDViZDdjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNs
dWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwMzcsMjEgKzEwMzgsMjEgQEAgc2l6ZV90IFNvdXJj
ZUJ1ZmZlcjo6bWF4aW11bUJ1ZmZlclNpemUoKSBjb25zdAogVmlkZW9UcmFja0xpc3QmIFNvdXJj
ZUJ1ZmZlcjo6dmlkZW9UcmFja3MoKQogewogICAgIGlmICghbV92aWRlb1RyYWNrcykKLSAgICAg
ICAgbV92aWRlb1RyYWNrcyA9IFZpZGVvVHJhY2tMaXN0OjpjcmVhdGUobV9zb3VyY2UtPm1lZGlh
RWxlbWVudCgpLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBtX3ZpZGVvVHJh
Y2tzID0gVmlkZW9UcmFja0xpc3Q6OmNyZWF0ZShtYWtlV2Vha1B0cihtX3NvdXJjZS0+bWVkaWFF
bGVtZW50KCkpLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIHJldHVybiAqbV92aWRl
b1RyYWNrczsKIH0KIAogQXVkaW9UcmFja0xpc3QmIFNvdXJjZUJ1ZmZlcjo6YXVkaW9UcmFja3Mo
KQogewogICAgIGlmICghbV9hdWRpb1RyYWNrcykKLSAgICAgICAgbV9hdWRpb1RyYWNrcyA9IEF1
ZGlvVHJhY2tMaXN0OjpjcmVhdGUobV9zb3VyY2UtPm1lZGlhRWxlbWVudCgpLCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOworICAgICAgICBtX2F1ZGlvVHJhY2tzID0gQXVkaW9UcmFja0xpc3Q6
OmNyZWF0ZShtYWtlV2Vha1B0cihtX3NvdXJjZS0+bWVkaWFFbGVtZW50KCkpLCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOwogICAgIHJldHVybiAqbV9hdWRpb1RyYWNrczsKIH0KIAogVGV4dFRy
YWNrTGlzdCYgU291cmNlQnVmZmVyOjp0ZXh0VHJhY2tzKCkKIHsKICAgICBpZiAoIW1fdGV4dFRy
YWNrcykKLSAgICAgICAgbV90ZXh0VHJhY2tzID0gVGV4dFRyYWNrTGlzdDo6Y3JlYXRlKG1fc291
cmNlLT5tZWRpYUVsZW1lbnQoKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAg
bV90ZXh0VHJhY2tzID0gVGV4dFRyYWNrTGlzdDo6Y3JlYXRlKG1ha2VXZWFrUHRyKG1fc291cmNl
LT5tZWRpYUVsZW1lbnQoKSksIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgcmV0dXJu
ICptX3RleHRUcmFja3M7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCmluZGV4IDczMGI0ZTM4OWU3ODNmZTU2Njc1NWI4YWMzNjg4MTE5ZjA5NjkxNjQuLjU2ZDJk
YWNiY2ZjZmI4NDk4ZWI1OTk4ZTIzZTdlNGE3OWM4MTQ2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTk3OSw3ICsxOTc5LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbmdlZChUZXh0VHJhY2smIHRyYWNrKQogCiAgICAg
Ly8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWRkZWQgdHJhY2ssIGNyZWF0ZSB0aGUgbGlzdCBvZiB0
ZXh0IHRyYWNrcy4KICAgICBpZiAoIW1fdGV4dFRyYWNrcykKLSAgICAgICAgbV90ZXh0VHJhY2tz
ID0gVGV4dFRyYWNrTGlzdDo6Y3JlYXRlKHRoaXMsIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgbV90ZXh0VHJhY2tzID0gVGV4dFRyYWNrTGlzdDo6
Y3JlYXRlKG1ha2VXZWFrUHRyKHRoaXMpLCBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CiAKICAgICAvLyBNYXJrIHRoaXMgdHJhY2sgYXMgImNvbmZpZ3VyZWQiIHNv
IGNvbmZpZ3VyZVRleHRUcmFja3Mgd29uJ3QgY2hhbmdlIHRoZSBtb2RlIGFnYWluLgogICAgIHRy
YWNrLnNldEhhc0JlZW5Db25maWd1cmVkKHRydWUpOwpAQCAtNDA1Miw3ICs0MDUyLDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZFRleHRUcmFjayhJbmJhbmRUZXh0
VHJhY2tQcml2YXRlJiB0cmFjaykKICAgICAvLyA0LjguMTAuMTIuMiBTb3VyY2luZyBpbi1iYW5k
IHRleHQgdHJhY2tzCiAgICAgLy8gMS4gQXNzb2NpYXRlIHRoZSByZWxldmFudCBkYXRhIHdpdGgg
YSBuZXcgdGV4dCB0cmFjayBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgbmV3IFRleHRUcmFjayBvYmpl
Y3QuCiAgICAgYXV0byB0ZXh0VHJhY2sgPSBJbmJhbmRUZXh0VHJhY2s6OmNyZWF0ZSgqQWN0aXZl
RE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICp0aGlzLCB0cmFjayk7Ci0gICAg
dGV4dFRyYWNrLT5zZXRNZWRpYUVsZW1lbnQodGhpcyk7CisgICAgdGV4dFRyYWNrLT5zZXRNZWRp
YUVsZW1lbnQobWFrZVdlYWtQdHIodGhpcykpOwogCiAgICAgLy8gMi4gU2V0IHRoZSBuZXcgdGV4
dCB0cmFjaydzIGtpbmQsIGxhYmVsLCBhbmQgbGFuZ3VhZ2UgYmFzZWQgb24gdGhlIHNlbWFudGlj
cyBvZiB0aGUgcmVsZXZhbnQgZGF0YSwKICAgICAvLyBhcyBkZWZpbmVkIGJ5IHRoZSByZWxldmFu
dCBzcGVjaWZpY2F0aW9uLiBJZiB0aGVyZSBpcyBubyBsYWJlbCBpbiB0aGF0IGRhdGEsIHRoZW4g
dGhlIGxhYmVsIG11c3QKQEAgLTQyMDksNyArNDIwOSw3IEBAIEV4Y2VwdGlvbk9yPFRleHRUcmFj
ayY+IEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNv
bnN0CiBBdWRpb1RyYWNrTGlzdCYgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlQXVkaW9UcmFja3Mo
KQogewogICAgIGlmICghbV9hdWRpb1RyYWNrcykKLSAgICAgICAgbV9hdWRpb1RyYWNrcyA9IEF1
ZGlvVHJhY2tMaXN0OjpjcmVhdGUodGhpcywgQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOworICAgICAgICBtX2F1ZGlvVHJhY2tzID0gQXVkaW9UcmFja0xpc3Q6OmNy
ZWF0ZShtYWtlV2Vha1B0cih0aGlzKSwgQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogCiAgICAgcmV0dXJuICptX2F1ZGlvVHJhY2tzOwogfQpAQCAtNDIxNyw3ICs0
MjE3LDcgQEAgQXVkaW9UcmFja0xpc3QmIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUF1ZGlvVHJh
Y2tzKCkKIFRleHRUcmFja0xpc3QmIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZVRleHRUcmFja3Mo
KQogewogICAgIGlmICghbV90ZXh0VHJhY2tzKQotICAgICAgICBtX3RleHRUcmFja3MgPSBUZXh0
VHJhY2tMaXN0OjpjcmVhdGUodGhpcywgQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgICAgICBtX3RleHRUcmFja3MgPSBUZXh0VHJhY2tMaXN0OjpjcmVhdGUo
bWFrZVdlYWtQdHIodGhpcyksIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKIAogICAgIHJldHVybiAqbV90ZXh0VHJhY2tzOwogfQpAQCAtNDIyNSw3ICs0MjI1LDcg
QEAgVGV4dFRyYWNrTGlzdCYgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlVGV4dFRyYWNrcygpCiBW
aWRlb1RyYWNrTGlzdCYgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlVmlkZW9UcmFja3MoKQogewog
ICAgIGlmICghbV92aWRlb1RyYWNrcykKLSAgICAgICAgbV92aWRlb1RyYWNrcyA9IFZpZGVvVHJh
Y2tMaXN0OjpjcmVhdGUodGhpcywgQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgICAgICBtX3ZpZGVvVHJhY2tzID0gVmlkZW9UcmFja0xpc3Q6OmNyZWF0ZSht
YWtlV2Vha1B0cih0aGlzKSwgQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOwogCiAgICAgcmV0dXJuICptX3ZpZGVvVHJhY2tzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svQXVkaW9UcmFjay5jcHAKaW5kZXggZjhhN2ViNTMxZTM3MDY5MjJhM2E5YTk3NDE1YTM1
NjNkMDk4NTdhNy4uYjA0NjIwYWNlNTM1ZjYzMzkwNmFhYTE0NGEyOTQ5MDMwNmFiNDE5NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwCkBAIC0xNjAsNyArMTYwLDcg
QEAgdm9pZCBBdWRpb1RyYWNrOjpsYW5ndWFnZUNoYW5nZWQoY29uc3QgQXRvbVN0cmluZyYgbGFu
Z3VhZ2UpCiAKIHZvaWQgQXVkaW9UcmFjazo6d2lsbFJlbW92ZSgpCiB7Ci0gICAgYXV0byBlbGVt
ZW50ID0gbWFrZVJlZlB0cihtZWRpYUVsZW1lbnQoKSk7CisgICAgYXV0byBlbGVtZW50ID0gbWFr
ZVJlZlB0cihtZWRpYUVsZW1lbnQoKS5nZXQoKSk7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAg
ICByZXR1cm47CiAgICAgZWxlbWVudC0+cmVtb3ZlQXVkaW9UcmFjaygqdGhpcyk7CkBAIC0xOTYs
NyArMTk2LDcgQEAgdm9pZCBBdWRpb1RyYWNrOjp1cGRhdGVLaW5kRnJvbVByaXZhdGUoKQogICAg
IH0KIH0KIAotdm9pZCBBdWRpb1RyYWNrOjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogZWxlbWVudCkKK3ZvaWQgQXVkaW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRN
TE1lZGlhRWxlbWVudD4gZWxlbWVudCkKIHsKICAgICBUcmFja0Jhc2U6OnNldE1lZGlhRWxlbWVu
dChlbGVtZW50KTsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9BdWRpb1RyYWNrLmgKaW5kZXggNTY5NTMwMGY2ZGIxZWJlNjAwYjcxZDM5YmM0NzE1ZWVi
NTkyNTk1OS4uMzE1ZGU2NTVkZmJjZWYxNzE3NGM0MDJjMDRkZGQ5YTAxNmViNWVjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogICAgIHNpemVfdCBpbmJhbmRUcmFja0luZGV4KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFBy
aXZhdGUoQXVkaW9UcmFja1ByaXZhdGUmKTsKLSAgICB2b2lkIHNldE1lZGlhRWxlbWVudChIVE1M
TWVkaWFFbGVtZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRNZWRpYUVsZW1lbnQoV2Vha1B0
cjxIVE1MTWVkaWFFbGVtZW50Pikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgQXVkaW9UcmFj
ayhBdWRpb1RyYWNrQ2xpZW50JiwgQXVkaW9UcmFja1ByaXZhdGUmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHAKaW5kZXggODBjZDhiMjFmYTFhZWIwZmJk
ZGUwMmMyZjJmMDQ4MTNiZWE4OTIzYi4uMTBkZWE1NDE2YzZmNjhjMWIxNjNmY2YzOTA5YmJhZDhm
Yjg3OTFiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNr
TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5j
cHAKQEAgLTMwLDEwICszMCwxMSBAQAogI2luY2x1ZGUgIkF1ZGlvVHJhY2tMaXN0LmgiCiAKICNp
bmNsdWRlICJBdWRpb1RyYWNrLmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUF1ZGlvVHJhY2tMaXN0OjpBdWRpb1RyYWNrTGlzdChIVE1M
TWVkaWFFbGVtZW50KiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQor
QXVkaW9UcmFja0xpc3Q6OkF1ZGlvVHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4g
ZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IFRyYWNrTGlz
dEJhc2UoZWxlbWVudCwgY29udGV4dCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
QXVkaW9UcmFja0xpc3QuaAppbmRleCA5MjU1NjdjZjA2NTdlYzc0MjE1YTllMDc4ZmU1MTA2YzJj
MjlhNGI0Li4zNjg2NWUyYjlmZjI1ODYxMjAzNmEzZjFiN2U2YjMyOGZjMmIzZGVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5oCkBAIC0zNSw3ICszNSw3IEBA
IGNsYXNzIEF1ZGlvVHJhY2s7CiAKIGNsYXNzIEF1ZGlvVHJhY2tMaXN0IGZpbmFsIDogcHVibGlj
IFRyYWNrTGlzdEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXVkaW9UcmFja0xpc3Q+
IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKKyAgICBzdGF0aWMgUmVmPEF1ZGlvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxI
VE1MTWVkaWFFbGVtZW50PiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEF1ZGlvVHJhY2tMaXN0KG93bmVy
LCBjb250ZXh0KSk7CiAgICAgfQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgRXZlbnRU
YXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKIAog
cHJpdmF0ZToKLSAgICBBdWRpb1RyYWNrTGlzdChIVE1MTWVkaWFFbGVtZW50KiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOworICAgIEF1ZGlvVHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlhRWxl
bWVudD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihBdWRpb1RyYWNrTGlzdCkgPT0gc2l6ZW9mKFRyYWNrTGlzdEJhc2UpLCAiIik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAppbmRleCA0Y2YxYzg1
NzYzNjg0ZjQ1MzVmMmM1YjIyNGY4M2RiODIxNjkzMzkxLi5iZTljOTlhZGJiZDQwNDUyZTA5MTZh
ZTY0M2VhZDg1YTg0MmIzNjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZFRleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJh
bmRUZXh0VHJhY2suY3BwCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2s6
Omxhbmd1YWdlQ2hhbmdlZChjb25zdCBBdG9tU3RyaW5nJiBsYW5ndWFnZSkKIAogdm9pZCBJbmJh
bmRUZXh0VHJhY2s6OndpbGxSZW1vdmUoKQogewotICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQ
dHIobWVkaWFFbGVtZW50KCkpOworICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFF
bGVtZW50KCkuZ2V0KCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IGVsZW1lbnQtPnJlbW92ZVRleHRUcmFjaygqdGhpcyk7CkBAIC0xOTcsNyArMTk3LDcgQEAgTWVk
aWFUaW1lIEluYmFuZFRleHRUcmFjazo6c3RhcnRUaW1lVmFyaWFuY2UoKSBjb25zdAogICAgIHJl
dHVybiBtX3ByaXZhdGUtPnN0YXJ0VGltZVZhcmlhbmNlKCk7CiB9CiAKLXZvaWQgSW5iYW5kVGV4
dFRyYWNrOjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
SW5iYW5kVGV4dFRyYWNrOjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50
PiBlbGVtZW50KQogewogICAgIFRyYWNrQmFzZTo6c2V0TWVkaWFFbGVtZW50KGVsZW1lbnQpOwog
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kVGV4dFRyYWNrLmgKaW5kZXggZTJhZTliMjM5ZjMwMjk3NmI3Y2RkM2YzNDRkZmQyYzE0YTYz
OGE4YS4uMGQ0NTI3ODVmMTgzMmNhYmQ4MmM2ZDMxYmZlNDk3ZDdjZTAzYjYyNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oCkBAIC00OSw3ICs0OSw3IEBA
IHB1YmxpYzoKICAgICBBdG9tU3RyaW5nIGluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUo
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0UHJpdmF0ZShJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlJik7Ci0gICAgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVu
dD4pIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5iYW5kVGV4dFRyYWNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBUZXh0VHJhY2tDbGllbnQmLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcAppbmRleCA4
ODkwNTcxNzkxNmVlZjUwMWZjN2NkNDVkYTY2ZmYxZTk3MWZlZTg2Li40ODZjZWM3NjRkYjA3NzY3
MWQxNmMyZDg0NWNhYjA3OTgwYTc0ZGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrTGlzdC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoVGV4dFRyYWNrTGlzdCk7CiAKLVRleHRUcmFj
a0xpc3Q6OlRleHRUcmFja0xpc3QoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKK1RleHRUcmFja0xpc3Q6OlRleHRUcmFja0xpc3QoV2Vh
a1B0cjxIVE1MTWVkaWFFbGVtZW50PiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQogICAgIDogVHJhY2tMaXN0QmFzZShlbGVtZW50LCBjb250ZXh0KQogewogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuaAppbmRleCA2NWYyYTY1ODI4YWYy
MmI5ZWIzYTliMjgzMTlmZDNjODc1MjgxYWNmLi5mODU3NDdmMDNlMDY5NmVmMzdmMmY4ZTYxNjJj
NzhjZjkzMjg4MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0xpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
aApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBUZXh0VHJhY2s7CiBjbGFzcyBUZXh0VHJhY2tMaXN0
IGZpbmFsIDogcHVibGljIFRyYWNrTGlzdEJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoVGV4dFRyYWNrTGlzdCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUZXh0VHJhY2tMaXN0
PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKKyAgICBzdGF0aWMgUmVmPFRleHRUcmFja0xpc3Q+IGNyZWF0ZShXZWFrUHRy
PEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0VHJhY2tMaXN0KGVs
ZW1lbnQsIGNvbnRleHQpKTsKICAgICB9CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBF
dmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRl
OwogCiBwcml2YXRlOgotICAgIFRleHRUcmFja0xpc3QoSFRNTE1lZGlhRWxlbWVudCosIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBUZXh0VHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlh
RWxlbWVudD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHZvaWQgaW52YWxpZGF0
ZVRyYWNrSW5kZXhlc0FmdGVyVHJhY2soVGV4dFRyYWNrJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVHJhY2tCYXNlLmNwcAppbmRleCAxODE5ZThkZGU4MWY3ZTY5NWViOWU3Yzk4NzYyOTY2
ZGRmNjUyNDA3Li5jMjk0MDJjMjQ1YTQ4NTQwZmRmMzQ4MGFlYzY0NzA4MTQ1OTVlOTkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuY3BwCkBAIC03NSwxMCArNzUsMTAgQEAg
VHJhY2tCYXNlOjpUcmFja0Jhc2UoVHlwZSB0eXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpZCwgY29u
c3QgQXRvbVN0cmluZyYgbGFiZWwsIGMKIAogRWxlbWVudCogVHJhY2tCYXNlOjplbGVtZW50KCkK
IHsKLSAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7CisgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50
LmdldCgpOwogfQogCi12b2lkIFRyYWNrQmFzZTo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIFRyYWNrQmFzZTo6c2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8
SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKIHsKICAgICBtX21lZGlhRWxlbWVudCA9IGVsZW1l
bnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5oCmluZGV4IDMyMjVlNTUyYWRh
Y2JkMzE0ZDZhMGY4NWYyOTYxZmM5YmQ1NTZkZmEuLmViZDdiOGVmMjkxOWVlZjI2ZDQ5MWExMTQw
YTNkZWYyMTczZGFhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJh
Y2tCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuaApAQCAt
MjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAogI2luY2x1ZGUgPHd0Zi9M
b2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsOCArNDksOCBA
QCBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsgQmFzZVRyYWNrLCBUZXh0VHJhY2ssIEF1ZGlvVHJh
Y2ssIFZpZGVvVHJhY2sgfTsKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCop
OwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIHsgcmV0dXJuIG1fbWVkaWFF
bGVtZW50OyB9CisgICAgdmlydHVhbCB2b2lkIHNldE1lZGlhRWxlbWVudChXZWFrUHRyPEhUTUxN
ZWRpYUVsZW1lbnQ+KTsKKyAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVu
dCgpIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50OyB9CiAgICAgdmlydHVhbCBFbGVtZW50KiBlbGVt
ZW50KCk7CiAKICAgICB2aXJ0dWFsIEF0b21TdHJpbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lk
OyB9CkBAIC04Miw3ICs4Myw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBUcmFja0Jhc2Uo
VHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25z
dCBBdG9tU3RyaW5nJiBsYW5ndWFnZSk7CiAKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlh
RWxlbWVudCB7IG51bGxwdHIgfTsKKyAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVk
aWFFbGVtZW50IHsgbnVsbHB0ciB9OwogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICBT
b3VyY2VCdWZmZXIqIG1fc291cmNlQnVmZmVyIHsgbnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAKaW5kZXggYjI2ODlkNmM0MDE0NmY1ZDU3Y2U4
NTQ1YTA3OWU4M2Q2N2I0MGQxNi4uNjM0NGUwNWM3N2VmNTRjZmQ0NTIxOGNhNGRmZDMyNDJmMzBi
NjJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCkBA
IC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKFRyYWNrTGlzdEJhc2UpOwogCi1UcmFja0xpc3RCYXNlOjpUcmFja0xpc3RCYXNl
KEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCitUcmFja0xpc3RCYXNlOjpUcmFja0xpc3RCYXNlKFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IENvbnRl
eHREZXN0cnVjdGlvbk9ic2VydmVyKGNvbnRleHQpCiAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkK
ICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZTo6Y3Jl
YXRlKCp0aGlzKSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBUcmFja0xpc3RCYXNlOjpjbGVhckVs
ZW1lbnQoKQogCiBFbGVtZW50KiBUcmFja0xpc3RCYXNlOjplbGVtZW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9lbGVtZW50OworICAgIHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7CiB9CiAKIHVu
c2lnbmVkIFRyYWNrTGlzdEJhc2U6Omxlbmd0aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVHJhY2tMaXN0QmFzZS5oCmluZGV4IGZhNTE5YTMwMWE3MTBmOTMzMmVhNzdmZTU3ZjI0
MzQ2YTU0ZTY4MWUuLmZmM2NkNzlmMDBkMzAxMjVlZjliMGE0MzM3YTM4ZDRmOTA2MGNhNDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU2LDcgKzU3LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRWxlbWVudCgpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBj
b25zdDsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnQ7IH0KKyAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogCiAgICAgLy8gTmVlZHMgdG8gYmUgcHVi
bGljIHNvIHRyYWNrcyBjYW4gY2FsbCBpdAogICAgIHZvaWQgc2NoZWR1bGVDaGFuZ2VFdmVudCgp
OwpAQCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FueVRyYWNrRW5hYmxlZCgp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgVHJhY2tMaXN0QmFzZShIVE1MTWVkaWFFbGVtZW50
KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIFRyYWNrTGlzdEJhc2UoV2Vha1B0cjxI
VE1MTWVkaWFFbGVtZW50PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgdm9pZCBz
Y2hlZHVsZUFkZFRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4mJik7CiAgICAgdm9pZCBzY2hlZHVs
ZVJlbW92ZVRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4mJik7CkBAIC03OSw3ICs4MCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IGRlcmVmKCk7IH0KIAotICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fZWxl
bWVudDsKIAogICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+IG1fYXN5
bmNFdmVudFF1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VmlkZW9UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suY3Bw
CmluZGV4IDUxMWVkZGI3NTlmNzU5NTE5ZDg2ZjYwZjJjMjQ2MTZjNDZjN2EyNGIuLjJlYWZmMzNi
NmZhYjU5NjRiMzQ3ZjcyMDgzMDAxMmJkZTkxYWE2Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9WaWRlb1RyYWNrLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgVmlkZW9UcmFjazo6
bGFuZ3VhZ2VDaGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmIGxhbmd1YWdlKQogCiB2b2lkIFZpZGVv
VHJhY2s6OndpbGxSZW1vdmUoKQogewotICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVk
aWFFbGVtZW50KCkpOworICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFFbGVtZW50
KCkuZ2V0KCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIGVsZW1l
bnQtPnJlbW92ZVZpZGVvVHJhY2soKnRoaXMpOwpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgVmlk
ZW9UcmFjazo6dXBkYXRlS2luZEZyb21Qcml2YXRlKCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotdm9pZCBWaWRlb1RyYWNrOjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogZWxlbWVudCkKK3ZvaWQgVmlkZW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRN
TE1lZGlhRWxlbWVudD4gZWxlbWVudCkKIHsKICAgICBUcmFja0Jhc2U6OnNldE1lZGlhRWxlbWVu
dChlbGVtZW50KTsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9WaWRlb1RyYWNrLmgKaW5kZXggNWVmZjQzYjZiODlhM2FhNGUzZGU5YzdkZDU4MjdmNmZi
NTliMzg5ZC4uNDIyNzNlZWJmNWU1MGU4MTEyYTNiZmU3MDhmNmUxMzFlMmYwZDg0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGlj
OgogICAgIGNvbnN0IE1lZGlhRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldFByaXZhdGUoVmlkZW9UcmFja1ByaXZhdGUmKTsKLSAgICB2b2lkIHNldE1lZGlh
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRNZWRpYUVs
ZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50Pikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAg
ICAgVmlkZW9UcmFjayhWaWRlb1RyYWNrQ2xpZW50JiwgVmlkZW9UcmFja1ByaXZhdGUmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAKaW5kZXggNmYzZGY4
ZjhhYzBmNzljOGNiZjI4YzFmZjkyYzE5N2VkNGRiYzk2OS4uMGQxZTA5MGY1NmEzYzYxNzU2YTdk
ODQ4ZjkyZDI0MGJiYzkxYmE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9WaWRlb1RyYWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRl
b1RyYWNrTGlzdC5jcHAKQEAgLTI5LDExICsyOSwxMiBAQAogCiAjaW5jbHVkZSAiVmlkZW9UcmFj
a0xpc3QuaCIKIAorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJWaWRl
b1RyYWNrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmlkZW9UcmFja0xpc3Q6OlZpZGVv
VHJhY2tMaXN0KEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCitWaWRlb1RyYWNrTGlzdDo6VmlkZW9UcmFja0xpc3QoV2Vha1B0cjxIVE1M
TWVkaWFFbGVtZW50PiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ICAgIDogVHJhY2tMaXN0QmFzZShlbGVtZW50LCBjb250ZXh0KQogewogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCmluZGV4IDczYTFkZGRiOWQyMGMwNDI5ODlh
ZDk1YzY1YWQwNDVkODVmZTcyNmQuLmNiZmRkMTJiZDcxNzJjMGI2ZTQ3NTk5NzAwMDZhYThmMzMx
N2ZhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xp
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgKQEAg
LTM1LDcgKzM1LDcgQEAgY2xhc3MgVmlkZW9UcmFjazsKIAogY2xhc3MgVmlkZW9UcmFja0xpc3Qg
ZmluYWwgOiBwdWJsaWMgVHJhY2tMaXN0QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxW
aWRlb1RyYWNrTGlzdD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG93bmVyLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHN0YXRpYyBSZWY8VmlkZW9UcmFja0xpc3Q+IGNy
ZWF0ZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9U
cmFja0xpc3Qob3duZXIsIGNvbnRleHQpKTsKICAgICB9CkBAIC01Miw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFZpZGVvVHJhY2tMaXN0KEhUTUxNZWRpYUVsZW1l
bnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgVmlkZW9UcmFja0xpc3QoV2Vha1B0
cjxIVE1MTWVkaWFFbGVtZW50PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogfTsKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFZpZGVvVHJhY2tMaXN0KSA9PSBzaXplb2YoVHJhY2tMaXN0QmFzZSks
ICIiKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386231</attachid>
            <date>2019-12-20 11:30:46 -0800</date>
            <delta_ts>2019-12-20 11:40:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205460-20191220113045.patch</filename>
            <type>text/plain</type>
            <size>16815</size>
            <attacher name="Doug Kelly">dougk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVlM2IwNWVjMjBhNzBl
MmI0YmJhOWU4YzQxNzZjZjY2MGQxZGQxYS4uNjU4ODJlZDI0NmVlZDg2YjEwYjJkYjQwNDk2YWJi
Mjk4N2FhNDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTEyLTIwICBEb3Vn
IEtlbGx5ICA8ZG91Z2tAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBUcmFja0Jhc2UgdG8g
c3RvcmUgbV9tZWRpYUVsZW1lbnQgYXMgYSBXZWFrUHRyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgV2Vha1B0ciB1c2FnZSB0byBydmFsdWUg
cmVmZXJlbmNlcyB0byBhdm9pZCBkdXBsaWNhdGVkIGNvcGllcyBvZiBXZWFrUHRyLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGVyZSBpcyBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIGh0bWwvdHJhY2svQXVkaW9UcmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrOjp3aWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2s6
OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrLmg6Cisg
ICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrTGlzdDo6QXVkaW9UcmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja0xpc3Q6OmFwcGVuZCk6CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlz
dC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6d2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmJhbmRUZXh0VHJhY2s6OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC90cmFj
ay9JbmJhbmRUZXh0VHJhY2suaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrTGlzdDo6VGV4dFRyYWNrTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tMaXN0OjphcHBlbmQpOgorICAgICAgICAqIGh0bWwv
dHJhY2svVGV4dFRyYWNrTGlzdC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrQmFzZTo6bWVkaWFFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNrQmFzZTo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3Ry
YWNrL1RyYWNrQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tCYXNlOjptZWRpYUVsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja0xpc3RCYXNlOjpUcmFja0xpc3RCYXNlKToKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrTGlz
dEJhc2U6Om1lZGlhRWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1Ry
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2s6OndpbGxSZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL3RyYWNrL1ZpZGVvVHJhY2suaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0OjpWaWRlb1RyYWNrTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdDo6YXBwZW5kKToKKyAgICAgICAg
KiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0Lmg6CisKIDIwMTktMTItMjAgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEludmFsaWRhdGUgb25seSBhZmZlY3Rl
ZCBlbGVtZW50cyBhZnRlciBtZWRpYSBxdWVyeSBldmFsdWF0aW9uIGNoYW5nZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwCmluZGV4IGIwNDYyMGFjZTUzNWY2MzM5MDZh
YWExNDRhMjk0OTAzMDZhYjQxOTcuLjA5Yzk1MDAxYTg2ZDE1YWZkODg4MjdhZDk3ZmViN2EyNjg5
ZWQyNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcApAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgQXVkaW9UcmFjazo6bGFuZ3VhZ2VDaGFuZ2VkKGNvbnN0IEF0b21T
dHJpbmcmIGxhbmd1YWdlKQogCiB2b2lkIEF1ZGlvVHJhY2s6OndpbGxSZW1vdmUoKQogewotICAg
IGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFFbGVtZW50KCkuZ2V0KCkpOworICAgIGF1
dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFFbGVtZW50KCkpOwogICAgIGlmICghZWxlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIGVsZW1lbnQtPnJlbW92ZUF1ZGlvVHJhY2soKnRoaXMp
OwpAQCAtMTk2LDkgKzE5Niw5IEBAIHZvaWQgQXVkaW9UcmFjazo6dXBkYXRlS2luZEZyb21Qcml2
YXRlKCkKICAgICB9CiB9CiAKLXZvaWQgQXVkaW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgQXVkaW9UcmFjazo6c2V0TWVkaWFF
bGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiBlbGVtZW50KQogewotICAgIFRyYWNr
QmFzZTo6c2V0TWVkaWFFbGVtZW50KGVsZW1lbnQpOworICAgIFRyYWNrQmFzZTo6c2V0TWVkaWFF
bGVtZW50KFdURk1vdmUoZWxlbWVudCkpOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAg
IG1fcHJpdmF0ZS0+c2V0TG9nZ2VyKGxvZ2dlcigpLCBsb2dJZGVudGlmaWVyKCkpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCmluZGV4IDMxNWRlNjU1ZGZiY2Vm
MTcxNzRjNDAyYzA0ZGRkOWEwMTZlYjVlYzkuLjhhNzBmZTQ1Yzk4YTE3ZmI1MmFiYjhhNmY5ZWQz
ZjY3NzQ0MDRjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgaW5iYW5kVHJhY2tJbmRleCgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRQcml2YXRlKEF1ZGlvVHJhY2tQcml2YXRlJik7Ci0gICAgdm9pZCBz
ZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmKSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBBdWRpb1RyYWNrKEF1ZGlvVHJhY2tDbGllbnQmLCBBdWRpb1Ry
YWNrUHJpdmF0ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRp
b1RyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0
LmNwcAppbmRleCAxMGRlYTU0MTZjNmY2OGMxYjE2M2ZjZjM5MDliYmFkOGZiODc5MWIzLi45ZTQ2
Y2E5YzczYWM5MzE5ZWI5YWUwNGFkZjBlNTk3N2E1M2Q5NmNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcApAQCAtMzQsOCArMzQsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUF1ZGlvVHJhY2tMaXN0OjpBdWRpb1RyYWNrTGlzdChXZWFrUHRy
PEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCi0gICAgOiBUcmFja0xpc3RCYXNlKGVsZW1lbnQsIGNvbnRleHQpCitBdWRpb1RyYWNrTGlz
dDo6QXVkaW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBUcmFja0xpc3RCYXNlKFdURk1v
dmUoZWxlbWVudCksIGNvbnRleHQpCiB7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBBdWRp
b1RyYWNrTGlzdDo6YXBwZW5kKFJlZjxBdWRpb1RyYWNrPiYmIHRyYWNrKQogCiAKICAgICBBU1NF
UlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gbWVk
aWFFbGVtZW50KCkpOwotICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KCkp
OworICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIobWVkaWFFbGVtZW50KCkp
KTsKIAogICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgKaW5kZXggMzY4NjVlMmI5ZmYy
NTg2MTIwMzZhM2YxYjdlNmIzMjhmYzJiM2RlZi4uOTE3MDg1Y2QwMTU3OWVhYzg3MzBkNDA5Njk3
YjdiMzk0NmYxZTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRp
b1RyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xp
c3QuaApAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBBdWRpb1RyYWNrOwogCiBjbGFzcyBBdWRpb1Ry
YWNrTGlzdCBmaW5hbCA6IHB1YmxpYyBUcmFja0xpc3RCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEF1ZGlvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBv
d25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICBzdGF0aWMgUmVmPEF1
ZGlvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIG93bmVyLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQXVkaW9UcmFja0xpc3Qob3duZXIsIGNvbnRleHQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja0xpc3QoV1RGTW92ZShvd25lciksIGNvbnRleHQp
KTsKICAgICB9CiAgICAgdmlydHVhbCB+QXVkaW9UcmFja0xpc3QoKTsKIApAQCAtNTEsNyArNTEs
NyBAQCBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBBdWRpb1RyYWNrTGlzdChXZWFr
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgQXVk
aW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoQXVkaW9UcmFja0xpc3QpID09IHNp
emVvZihUcmFja0xpc3RCYXNlKSwgIiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZFRleHRUcmFjay5jcHAKaW5kZXggYmU5Yzk5YWRiYmQ0MDQ1MmUwOTE2YWU2NDNlYWQ4
NWE4NDJiMzYxOC4uNmMxMjM3MzIyYWY4NjVlYzJmMmUwMTY4OTIyNmNiZDVjYjQ0Y2I3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcApAQCAtMTU5
LDcgKzE1OSw3IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrOjpsYW5ndWFnZUNoYW5nZWQoY29uc3Qg
QXRvbVN0cmluZyYgbGFuZ3VhZ2UpCiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrOjp3aWxsUmVtb3Zl
KCkKIHsKLSAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1lZGlhRWxlbWVudCgpLmdldCgp
KTsKKyAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1lZGlhRWxlbWVudCgpKTsKICAgICBp
ZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBlbGVtZW50LT5yZW1vdmVUZXh0VHJh
Y2soKnRoaXMpOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIE1lZGlhVGltZSBJbmJhbmRUZXh0VHJhY2s6
OnN0YXJ0VGltZVZhcmlhbmNlKCkgY29uc3QKICAgICByZXR1cm4gbV9wcml2YXRlLT5zdGFydFRp
bWVWYXJpYW5jZSgpOwogfQogCi12b2lkIEluYmFuZFRleHRUcmFjazo6c2V0TWVkaWFFbGVtZW50
KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSW5iYW5kVGV4dFRyYWNr
OjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQpCiB7
Ci0gICAgVHJhY2tCYXNlOjpzZXRNZWRpYUVsZW1lbnQoZWxlbWVudCk7CisgICAgVHJhY2tCYXNl
OjpzZXRNZWRpYUVsZW1lbnQoV1RGTW92ZShlbGVtZW50KSk7CiAjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECiAgICAgbV9wcml2YXRlLT5zZXRMb2dnZXIobG9nZ2VyKCksIGxvZ0lkZW50aWZpZXIo
KSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5k
VGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5o
CmluZGV4IDBkNDUyNzg1ZjE4MzJjYWJkODJjNmQzMWJmZTQ5N2Q3Y2UwM2I2MjUuLjBiOTY1NjQw
NmY4ZGI2NjExOTIxZDg5YzFjZmQ3NGI2M2QxMzQ5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAg
QXRvbVN0cmluZyBpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHNldFByaXZhdGUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwotICAg
IHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4pIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJikg
b3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBJbmJhbmRUZXh0VHJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFRleHRUcmFja0NsaWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCmluZGV4IDQ4NmNl
Yzc2NGRiMDc3NjcxZDE2YzJkODQ1Y2FiMDc5ODBhNzRkYjEuLjgzN2E5Yjc2YWI2ZjhiZDU0YjE4
NDYwYjgwOTdkZGVhOTc5OWRlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmNwcApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChUZXh0VHJhY2tMaXN0KTsKIAotVGV4dFRyYWNrTGlz
dDo6VGV4dFRyYWNrTGlzdChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBUcmFja0xpc3RCYXNlKGVsZW1lbnQs
IGNvbnRleHQpCitUZXh0VHJhY2tMaXN0OjpUZXh0VHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlh
RWxlbWVudD4mJiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAg
IDogVHJhY2tMaXN0QmFzZShXVEZNb3ZlKGVsZW1lbnQpLCBjb250ZXh0KQogewogfQogCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBUZXh0VHJhY2tMaXN0OjphcHBlbmQoUmVmPFRleHRUcmFjaz4m
JiB0cmFjaykKICAgICBpbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayh0cmFjayk7CiAK
ICAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50
KCkgPT0gbWVkaWFFbGVtZW50KCkpOwotICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFF
bGVtZW50KCkpOworICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIobWVkaWFF
bGVtZW50KCkpKTsKIAogICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCmluZGV4IGY4NTc0
N2YwM2UwNjk2ZWYzN2YyZjhlNjE2MmM3OGNmOTMyODgxNjQuLjAwMzUwYzk0N2I1MTFjMzJkZTJj
NWZkZTA5OGNhZDM3YWQzYjRkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrTGlzdC5oCkBAIC0zNiw5ICszNiw5IEBAIGNsYXNzIFRleHRUcmFjazsKIGNsYXNzIFRleHRU
cmFja0xpc3QgZmluYWwgOiBwdWJsaWMgVHJhY2tMaXN0QmFzZSB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChUZXh0VHJhY2tMaXN0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRleHRU
cmFja0xpc3Q+IGNyZWF0ZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgc3RhdGljIFJlZjxUZXh0VHJhY2tMaXN0
PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUZXh0VHJhY2tMaXN0KGVsZW1lbnQsIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVGV4dFRyYWNrTGlzdChXVEZNb3ZlKGVsZW1lbnQpLCBjb250ZXh0KSk7CiAgICAg
fQogICAgIHZpcnR1YWwgflRleHRUcmFja0xpc3QoKTsKIApAQCAtNjAsNyArNjAsNyBAQCBwdWJs
aWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBUZXh0VHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1l
ZGlhRWxlbWVudD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBUZXh0VHJhY2tMaXN0
KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwog
CiAgICAgdm9pZCBpbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2smKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuY3BwCmluZGV4IGMyOTQwMmMyNDVh
NDg1NDBmZGYzNDgwYWVjNjQ3MDgxNDU5NWU5OTIuLjg0MzJkNDdlODZiMjA0YTIyYzg1NDcyMzkx
MGUxMDhhOGIxYzkzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJh
Y2tCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5jcHAK
QEAgLTc4LDcgKzc4LDEyIEBAIEVsZW1lbnQqIFRyYWNrQmFzZTo6ZWxlbWVudCgpCiAgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOwogfQogCi12b2lkIFRyYWNrQmFzZTo6c2V0TWVkaWFF
bGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK0hUTUxNZWRpYUVsZW1l
bnQqIFRyYWNrQmFzZTo6bWVkaWFFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQuZ2V0KCk7Cit9CisKK3ZvaWQgVHJhY2tCYXNlOjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxI
VE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQpCiB7CiAgICAgbV9tZWRpYUVsZW1lbnQgPSBlbGVt
ZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuaAppbmRleCBlYmQ3YjhlZjI5
MTllZWYyNmQ0OTFhMTE0MGEzZGVmMjE3M2RhYTAzLi44Yjc0ZTNiNTZiOWFkMGQxYmNiNDA5OWVm
NGQwMmQxZWVkZTE4YTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Ry
YWNrQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tCYXNlLmgKQEAg
LTQ5LDggKzQ5LDggQEAgcHVibGljOgogICAgIGVudW0gVHlwZSB7IEJhc2VUcmFjaywgVGV4dFRy
YWNrLCBBdWRpb1RyYWNrLCBWaWRlb1RyYWNrIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4pOwotICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVk
aWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJik7CisgICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCk7CiAgICAgdmlydHVhbCBFbGVtZW50KiBlbGVtZW50
KCk7CiAKICAgICB2aXJ0dWFsIEF0b21TdHJpbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBUcmFja0Jhc2UoVHlw
ZSwgY29uc3QgQXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25zdCBB
dG9tU3RyaW5nJiBsYW5ndWFnZSk7CiAKLSAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1f
bWVkaWFFbGVtZW50IHsgbnVsbHB0ciB9OworICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4g
bV9tZWRpYUVsZW1lbnQ7CiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFNvdXJjZUJ1
ZmZlciogbV9zb3VyY2VCdWZmZXIgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UcmFja0xpc3RCYXNlLmNwcAppbmRleCA2MzQ0ZTA1Yzc3ZWY1NGNmZDQ1MjE4Y2E0ZGZk
MzI0MmYzMGI2MmQ2Li4wYThmMWYwMzQwYTM1MDA3OGUxNGQ5YzRiMjcxZmUwOThmMWE1ODBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAKQEAgLTM5LDcg
KzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoVHJhY2tMaXN0QmFzZSk7CiAKLVRyYWNrTGlzdEJhc2U6OlRyYWNrTGlzdEJhc2UoV2Vha1B0
cjxIVE1MTWVkaWFFbGVtZW50PiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQorVHJhY2tMaXN0QmFzZTo6VHJhY2tMaXN0QmFzZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+JiYgZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGNvbnRleHQpCiAgICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKE1haW5UaHJlYWRHZW5lcmljRXZlbnRRdWV1ZTo6
Y3JlYXRlKCp0aGlzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJh
Y2tMaXN0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmgK
aW5kZXggZmYzY2Q3OWYwMGQzMDEyNWVmOWIwYTQzMzdhMzhkNGY5MDYwY2E0Mi4uY2E1ZDc2ODMz
ODJlNGRjNGIwOTk1MmYzMmJkYzU5YmM0Nzk2MjAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UcmFja0xpc3RCYXNlLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGNsZWFyRWxlbWVudCgpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdDsK
LSAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZWxlbWVudDsgfQorICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogCiAgICAgLy8gTmVlZHMgdG8gYmUgcHVi
bGljIHNvIHRyYWNrcyBjYW4gY2FsbCBpdAogICAgIHZvaWQgc2NoZWR1bGVDaGFuZ2VFdmVudCgp
OwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FueVRyYWNrRW5hYmxlZCgp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgVHJhY2tMaXN0QmFzZShXZWFrUHRyPEhUTUxNZWRp
YUVsZW1lbnQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgVHJhY2tMaXN0QmFzZShX
ZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+JiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAog
ICAgIHZvaWQgc2NoZWR1bGVBZGRUcmFja0V2ZW50KFJlZjxUcmFja0Jhc2U+JiYpOwogICAgIHZv
aWQgc2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KFJlZjxUcmFja0Jhc2U+JiYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5jcHAKaW5kZXggMmVhZmYzM2I2ZmFiNTk2NGIzNDdm
NzIwODMwMDEyYmRlOTFhYTZjYy4uYWI1MzA0MjkyNmU1MzVhMDg4YjcwZGU3MWNjZTkyMjk2MmI4
NGUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suY3BwCkBAIC0xNjMs
NyArMTYzLDcgQEAgdm9pZCBWaWRlb1RyYWNrOjpsYW5ndWFnZUNoYW5nZWQoY29uc3QgQXRvbVN0
cmluZyYgbGFuZ3VhZ2UpCiAKIHZvaWQgVmlkZW9UcmFjazo6d2lsbFJlbW92ZSgpCiB7Ci0gICAg
YXV0byBlbGVtZW50ID0gbWFrZVJlZlB0cihtZWRpYUVsZW1lbnQoKS5nZXQoKSk7CisgICAgYXV0
byBlbGVtZW50ID0gbWFrZVJlZlB0cihtZWRpYUVsZW1lbnQoKSk7CiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICByZXR1cm47CiAgICAgZWxlbWVudC0+cmVtb3ZlVmlkZW9UcmFjaygqdGhpcyk7
CkBAIC0yNDQsOSArMjQ0LDkgQEAgdm9pZCBWaWRlb1RyYWNrOjp1cGRhdGVLaW5kRnJvbVByaXZh
dGUoKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFZpZGVvVHJhY2s6OnNl
dE1lZGlhRWxlbWVudChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQpCit2b2lkIFZp
ZGVvVHJhY2s6OnNldE1lZGlhRWxlbWVudChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+JiYgZWxl
bWVudCkKIHsKLSAgICBUcmFja0Jhc2U6OnNldE1lZGlhRWxlbWVudChlbGVtZW50KTsKKyAgICBU
cmFja0Jhc2U6OnNldE1lZGlhRWxlbWVudChXVEZNb3ZlKGVsZW1lbnQpKTsKICNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKICAgICBtX3ByaXZhdGUtPnNldExvZ2dlcihsb2dnZXIoKSwgbG9nSWRl
bnRpZmllcigpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9WaWRlb1RyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaApp
bmRleCA0MjI3M2VlYmY1ZTUwZTgxMTJhM2JmZTcwOGY2ZTEzMWUyZjBkODQ1Li4wNGEyMjEwZjAy
NjMzMzMxNmU2ZjM5ZDIzMmE2MzI0MTE2ZTAxNWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1ZpZGVvVHJhY2suaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgTWVkaWFE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UHJpdmF0ZShW
aWRlb1RyYWNrUHJpdmF0ZSYpOwotICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRN
TE1lZGlhRWxlbWVudD4pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4mJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgVmlkZW9U
cmFjayhWaWRlb1RyYWNrQ2xpZW50JiwgVmlkZW9UcmFja1ByaXZhdGUmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAKaW5kZXggMGQxZTA5MGY1NmEzYzYx
NzU2YTdkODQ4ZjkyZDI0MGJiYzkxYmE0ZS4uZjc5MjdhZjI0OTUwMTg3YTgxMWIzMWMxM2NlOWZm
ZDRlOGIxYzM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1Ry
YWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlz
dC5jcHAKQEAgLTM0LDggKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WaWRlb1Ry
YWNrTGlzdDo6VmlkZW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBlbGVtZW50
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDogVHJhY2tMaXN0QmFzZShl
bGVtZW50LCBjb250ZXh0KQorVmlkZW9UcmFja0xpc3Q6OlZpZGVvVHJhY2tMaXN0KFdlYWtQdHI8
SFRNTE1lZGlhRWxlbWVudD4mJiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQorICAgIDogVHJhY2tMaXN0QmFzZShXVEZNb3ZlKGVsZW1lbnQpLCBjb250ZXh0KQogewog
fQogCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgVmlkZW9UcmFja0xpc3Q6OmFwcGVuZChSZWY8Vmlk
ZW9UcmFjaz4mJiB0cmFjaykKICAgICBtX2luYmFuZFRyYWNrcy5pbnNlcnQoaW5zZXJ0aW9uSW5k
ZXgsIHRyYWNrLnB0cigpKTsKIAogICAgIEFTU0VSVCghdHJhY2stPm1lZGlhRWxlbWVudCgpIHx8
IHRyYWNrLT5tZWRpYUVsZW1lbnQoKSA9PSBtZWRpYUVsZW1lbnQoKSk7Ci0gICAgdHJhY2stPnNl
dE1lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQoKSk7CisgICAgdHJhY2stPnNldE1lZGlhRWxlbWVu
dChtYWtlV2Vha1B0cihtZWRpYUVsZW1lbnQoKSkpOwogCiAgICAgc2NoZWR1bGVBZGRUcmFja0V2
ZW50KFdURk1vdmUodHJhY2spKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVmlkZW9UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9U
cmFja0xpc3QuaAppbmRleCBjYmZkZDEyYmQ3MTcyYzBiNmU0NzU5OTcwMDA2YWE4ZjMzMTdmYTgw
Li5iODRkOWQ4NjI4OTdkNDEyNzRhOTQyYjAwMWQ3NDA1ODg0OTE4Y2I1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCkBAIC0zNSw5ICszNSw5IEBAIGNsYXNz
IFZpZGVvVHJhY2s7CiAKIGNsYXNzIFZpZGVvVHJhY2tMaXN0IGZpbmFsIDogcHVibGljIFRyYWNr
TGlzdEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VmlkZW9UcmFja0xpc3Q+IGNyZWF0
ZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQorICAgIHN0YXRpYyBSZWY8VmlkZW9UcmFja0xpc3Q+IGNyZWF0ZShXZWFrUHRy
PEhUTUxNZWRpYUVsZW1lbnQ+JiYgb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb1RyYWNrTGlzdChv
d25lciwgY29udGV4dCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb1RyYWNr
TGlzdChXVEZNb3ZlKG93bmVyKSwgY29udGV4dCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5WaWRl
b1RyYWNrTGlzdCgpOwogCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBFdmVudFRhcmdl
dEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2
YXRlOgotICAgIFZpZGVvVHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4sIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBWaWRlb1RyYWNrTGlzdChXZWFrUHRyPEhUTUxNZWRp
YUVsZW1lbnQ+JiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIH07CiBzdGF0aWNfYXNzZXJ0
KHNpemVvZihWaWRlb1RyYWNrTGlzdCkgPT0gc2l6ZW9mKFRyYWNrTGlzdEJhc2UpLCAiIik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386233</attachid>
            <date>2019-12-20 11:40:07 -0800</date>
            <delta_ts>2019-12-20 12:53:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205460-20191220114006.patch</filename>
            <type>text/plain</type>
            <size>16901</size>
            <attacher name="Doug Kelly">dougk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVlM2IwNWVjMjBhNzBl
MmI0YmJhOWU4YzQxNzZjZjY2MGQxZGQxYS4uNjU4ODJlZDI0NmVlZDg2YjEwYjJkYjQwNDk2YWJi
Mjk4N2FhNDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTEyLTIwICBEb3Vn
IEtlbGx5ICA8ZG91Z2tAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBUcmFja0Jhc2UgdG8g
c3RvcmUgbV9tZWRpYUVsZW1lbnQgYXMgYSBXZWFrUHRyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgV2Vha1B0ciB1c2FnZSB0byBydmFsdWUg
cmVmZXJlbmNlcyB0byBhdm9pZCBkdXBsaWNhdGVkIGNvcGllcyBvZiBXZWFrUHRyLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGVyZSBpcyBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIGh0bWwvdHJhY2svQXVkaW9UcmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrOjp3aWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2s6
OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrLmg6Cisg
ICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrTGlzdDo6QXVkaW9UcmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja0xpc3Q6OmFwcGVuZCk6CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlz
dC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6d2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmJhbmRUZXh0VHJhY2s6OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC90cmFj
ay9JbmJhbmRUZXh0VHJhY2suaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrTGlzdDo6VGV4dFRyYWNrTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tMaXN0OjphcHBlbmQpOgorICAgICAgICAqIGh0bWwv
dHJhY2svVGV4dFRyYWNrTGlzdC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrQmFzZTo6bWVkaWFFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNrQmFzZTo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3Ry
YWNrL1RyYWNrQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tCYXNlOjptZWRpYUVsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja0xpc3RCYXNlOjpUcmFja0xpc3RCYXNlKToKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrTGlz
dEJhc2U6Om1lZGlhRWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1Ry
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2s6OndpbGxSZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL3RyYWNrL1ZpZGVvVHJhY2suaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0OjpWaWRlb1RyYWNrTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdDo6YXBwZW5kKToKKyAgICAgICAg
KiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0Lmg6CisKIDIwMTktMTItMjAgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEludmFsaWRhdGUgb25seSBhZmZlY3Rl
ZCBlbGVtZW50cyBhZnRlciBtZWRpYSBxdWVyeSBldmFsdWF0aW9uIGNoYW5nZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwCmluZGV4IGIwNDYyMGFjZTUzNWY2MzM5MDZh
YWExNDRhMjk0OTAzMDZhYjQxOTcuLjA5Yzk1MDAxYTg2ZDE1YWZkODg4MjdhZDk3ZmViN2EyNjg5
ZWQyNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcApAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgQXVkaW9UcmFjazo6bGFuZ3VhZ2VDaGFuZ2VkKGNvbnN0IEF0b21T
dHJpbmcmIGxhbmd1YWdlKQogCiB2b2lkIEF1ZGlvVHJhY2s6OndpbGxSZW1vdmUoKQogewotICAg
IGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFFbGVtZW50KCkuZ2V0KCkpOworICAgIGF1
dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFFbGVtZW50KCkpOwogICAgIGlmICghZWxlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIGVsZW1lbnQtPnJlbW92ZUF1ZGlvVHJhY2soKnRoaXMp
OwpAQCAtMTk2LDkgKzE5Niw5IEBAIHZvaWQgQXVkaW9UcmFjazo6dXBkYXRlS2luZEZyb21Qcml2
YXRlKCkKICAgICB9CiB9CiAKLXZvaWQgQXVkaW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgQXVkaW9UcmFjazo6c2V0TWVkaWFF
bGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiBlbGVtZW50KQogewotICAgIFRyYWNr
QmFzZTo6c2V0TWVkaWFFbGVtZW50KGVsZW1lbnQpOworICAgIFRyYWNrQmFzZTo6c2V0TWVkaWFF
bGVtZW50KFdURk1vdmUoZWxlbWVudCkpOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAg
IG1fcHJpdmF0ZS0+c2V0TG9nZ2VyKGxvZ2dlcigpLCBsb2dJZGVudGlmaWVyKCkpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCmluZGV4IDMxNWRlNjU1ZGZiY2Vm
MTcxNzRjNDAyYzA0ZGRkOWEwMTZlYjVlYzkuLjhhNzBmZTQ1Yzk4YTE3ZmI1MmFiYjhhNmY5ZWQz
ZjY3NzQ0MDRjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgaW5iYW5kVHJhY2tJbmRleCgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRQcml2YXRlKEF1ZGlvVHJhY2tQcml2YXRlJik7Ci0gICAgdm9pZCBz
ZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmKSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBBdWRpb1RyYWNrKEF1ZGlvVHJhY2tDbGllbnQmLCBBdWRpb1Ry
YWNrUHJpdmF0ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRp
b1RyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0
LmNwcAppbmRleCAxMGRlYTU0MTZjNmY2OGMxYjE2M2ZjZjM5MDliYmFkOGZiODc5MWIzLi45ZTQ2
Y2E5YzczYWM5MzE5ZWI5YWUwNGFkZjBlNTk3N2E1M2Q5NmNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcApAQCAtMzQsOCArMzQsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUF1ZGlvVHJhY2tMaXN0OjpBdWRpb1RyYWNrTGlzdChXZWFrUHRy
PEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCi0gICAgOiBUcmFja0xpc3RCYXNlKGVsZW1lbnQsIGNvbnRleHQpCitBdWRpb1RyYWNrTGlz
dDo6QXVkaW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBUcmFja0xpc3RCYXNlKFdURk1v
dmUoZWxlbWVudCksIGNvbnRleHQpCiB7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBBdWRp
b1RyYWNrTGlzdDo6YXBwZW5kKFJlZjxBdWRpb1RyYWNrPiYmIHRyYWNrKQogCiAKICAgICBBU1NF
UlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gbWVk
aWFFbGVtZW50KCkpOwotICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KCkp
OworICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIobWVkaWFFbGVtZW50KCkp
KTsKIAogICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgKaW5kZXggMzY4NjVlMmI5ZmYy
NTg2MTIwMzZhM2YxYjdlNmIzMjhmYzJiM2RlZi4uOTE3MDg1Y2QwMTU3OWVhYzg3MzBkNDA5Njk3
YjdiMzk0NmYxZTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRp
b1RyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xp
c3QuaApAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBBdWRpb1RyYWNrOwogCiBjbGFzcyBBdWRpb1Ry
YWNrTGlzdCBmaW5hbCA6IHB1YmxpYyBUcmFja0xpc3RCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEF1ZGlvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBv
d25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICBzdGF0aWMgUmVmPEF1
ZGlvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIG93bmVyLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQXVkaW9UcmFja0xpc3Qob3duZXIsIGNvbnRleHQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja0xpc3QoV1RGTW92ZShvd25lciksIGNvbnRleHQp
KTsKICAgICB9CiAgICAgdmlydHVhbCB+QXVkaW9UcmFja0xpc3QoKTsKIApAQCAtNTEsNyArNTEs
NyBAQCBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBBdWRpb1RyYWNrTGlzdChXZWFr
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgQXVk
aW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoQXVkaW9UcmFja0xpc3QpID09IHNp
emVvZihUcmFja0xpc3RCYXNlKSwgIiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZFRleHRUcmFjay5jcHAKaW5kZXggYmU5Yzk5YWRiYmQ0MDQ1MmUwOTE2YWU2NDNlYWQ4
NWE4NDJiMzYxOC4uNmMxMjM3MzIyYWY4NjVlYzJmMmUwMTY4OTIyNmNiZDVjYjQ0Y2I3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcApAQCAtMTU5
LDcgKzE1OSw3IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrOjpsYW5ndWFnZUNoYW5nZWQoY29uc3Qg
QXRvbVN0cmluZyYgbGFuZ3VhZ2UpCiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrOjp3aWxsUmVtb3Zl
KCkKIHsKLSAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1lZGlhRWxlbWVudCgpLmdldCgp
KTsKKyAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1lZGlhRWxlbWVudCgpKTsKICAgICBp
ZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBlbGVtZW50LT5yZW1vdmVUZXh0VHJh
Y2soKnRoaXMpOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIE1lZGlhVGltZSBJbmJhbmRUZXh0VHJhY2s6
OnN0YXJ0VGltZVZhcmlhbmNlKCkgY29uc3QKICAgICByZXR1cm4gbV9wcml2YXRlLT5zdGFydFRp
bWVWYXJpYW5jZSgpOwogfQogCi12b2lkIEluYmFuZFRleHRUcmFjazo6c2V0TWVkaWFFbGVtZW50
KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSW5iYW5kVGV4dFRyYWNr
OjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQpCiB7
Ci0gICAgVHJhY2tCYXNlOjpzZXRNZWRpYUVsZW1lbnQoZWxlbWVudCk7CisgICAgVHJhY2tCYXNl
OjpzZXRNZWRpYUVsZW1lbnQoV1RGTW92ZShlbGVtZW50KSk7CiAjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECiAgICAgbV9wcml2YXRlLT5zZXRMb2dnZXIobG9nZ2VyKCksIGxvZ0lkZW50aWZpZXIo
KSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5k
VGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5o
CmluZGV4IDBkNDUyNzg1ZjE4MzJjYWJkODJjNmQzMWJmZTQ5N2Q3Y2UwM2I2MjUuLjBiOTY1NjQw
NmY4ZGI2NjExOTIxZDg5YzFjZmQ3NGI2M2QxMzQ5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAg
QXRvbVN0cmluZyBpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHNldFByaXZhdGUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwotICAg
IHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4pIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJikg
b3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBJbmJhbmRUZXh0VHJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFRleHRUcmFja0NsaWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCmluZGV4IDQ4NmNl
Yzc2NGRiMDc3NjcxZDE2YzJkODQ1Y2FiMDc5ODBhNzRkYjEuLjgzN2E5Yjc2YWI2ZjhiZDU0YjE4
NDYwYjgwOTdkZGVhOTc5OWRlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmNwcApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChUZXh0VHJhY2tMaXN0KTsKIAotVGV4dFRyYWNrTGlz
dDo6VGV4dFRyYWNrTGlzdChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBUcmFja0xpc3RCYXNlKGVsZW1lbnQs
IGNvbnRleHQpCitUZXh0VHJhY2tMaXN0OjpUZXh0VHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlh
RWxlbWVudD4mJiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAg
IDogVHJhY2tMaXN0QmFzZShXVEZNb3ZlKGVsZW1lbnQpLCBjb250ZXh0KQogewogfQogCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBUZXh0VHJhY2tMaXN0OjphcHBlbmQoUmVmPFRleHRUcmFjaz4m
JiB0cmFjaykKICAgICBpbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayh0cmFjayk7CiAK
ICAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50
KCkgPT0gbWVkaWFFbGVtZW50KCkpOwotICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFF
bGVtZW50KCkpOworICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIobWVkaWFF
bGVtZW50KCkpKTsKIAogICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCmluZGV4IGY4NTc0
N2YwM2UwNjk2ZWYzN2YyZjhlNjE2MmM3OGNmOTMyODgxNjQuLjAwMzUwYzk0N2I1MTFjMzJkZTJj
NWZkZTA5OGNhZDM3YWQzYjRkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrTGlzdC5oCkBAIC0zNiw5ICszNiw5IEBAIGNsYXNzIFRleHRUcmFjazsKIGNsYXNzIFRleHRU
cmFja0xpc3QgZmluYWwgOiBwdWJsaWMgVHJhY2tMaXN0QmFzZSB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChUZXh0VHJhY2tMaXN0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRleHRU
cmFja0xpc3Q+IGNyZWF0ZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgc3RhdGljIFJlZjxUZXh0VHJhY2tMaXN0
PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUZXh0VHJhY2tMaXN0KGVsZW1lbnQsIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVGV4dFRyYWNrTGlzdChXVEZNb3ZlKGVsZW1lbnQpLCBjb250ZXh0KSk7CiAgICAg
fQogICAgIHZpcnR1YWwgflRleHRUcmFja0xpc3QoKTsKIApAQCAtNjAsNyArNjAsNyBAQCBwdWJs
aWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBUZXh0VHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1l
ZGlhRWxlbWVudD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBUZXh0VHJhY2tMaXN0
KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwog
CiAgICAgdm9pZCBpbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2smKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuY3BwCmluZGV4IGMyOTQwMmMyNDVh
NDg1NDBmZGYzNDgwYWVjNjQ3MDgxNDU5NWU5OTIuLjg0MzJkNDdlODZiMjA0YTIyYzg1NDcyMzkx
MGUxMDhhOGIxYzkzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJh
Y2tCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5jcHAK
QEAgLTc4LDcgKzc4LDEyIEBAIEVsZW1lbnQqIFRyYWNrQmFzZTo6ZWxlbWVudCgpCiAgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOwogfQogCi12b2lkIFRyYWNrQmFzZTo6c2V0TWVkaWFF
bGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK0hUTUxNZWRpYUVsZW1l
bnQqIFRyYWNrQmFzZTo6bWVkaWFFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQuZ2V0KCk7Cit9CisKK3ZvaWQgVHJhY2tCYXNlOjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxI
VE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQpCiB7CiAgICAgbV9tZWRpYUVsZW1lbnQgPSBlbGVt
ZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuaAppbmRleCBlYmQ3YjhlZjI5
MTllZWYyNmQ0OTFhMTE0MGEzZGVmMjE3M2RhYTAzLi44Yjc0ZTNiNTZiOWFkMGQxYmNiNDA5OWVm
NGQwMmQxZWVkZTE4YTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Ry
YWNrQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tCYXNlLmgKQEAg
LTQ5LDggKzQ5LDggQEAgcHVibGljOgogICAgIGVudW0gVHlwZSB7IEJhc2VUcmFjaywgVGV4dFRy
YWNrLCBBdWRpb1RyYWNrLCBWaWRlb1RyYWNrIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4pOwotICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVk
aWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJik7CisgICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCk7CiAgICAgdmlydHVhbCBFbGVtZW50KiBlbGVtZW50
KCk7CiAKICAgICB2aXJ0dWFsIEF0b21TdHJpbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBUcmFja0Jhc2UoVHlw
ZSwgY29uc3QgQXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25zdCBB
dG9tU3RyaW5nJiBsYW5ndWFnZSk7CiAKLSAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1f
bWVkaWFFbGVtZW50IHsgbnVsbHB0ciB9OworICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4g
bV9tZWRpYUVsZW1lbnQ7CiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFNvdXJjZUJ1
ZmZlciogbV9zb3VyY2VCdWZmZXIgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UcmFja0xpc3RCYXNlLmNwcAppbmRleCA2MzQ0ZTA1Yzc3ZWY1NGNmZDQ1MjE4Y2E0ZGZk
MzI0MmYzMGI2MmQ2Li4xMTlmMDljMzA4ZmNiOWJkOWU1MmFmMWQ2NWVkNjZmZWQ3MTgyZGFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAKQEAgLTM5LDkg
KzM5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoVHJhY2tMaXN0QmFzZSk7CiAKLVRyYWNrTGlzdEJhc2U6OlRyYWNrTGlzdEJhc2UoV2Vha1B0
cjxIVE1MTWVkaWFFbGVtZW50PiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQorVHJhY2tMaXN0QmFzZTo6VHJhY2tMaXN0QmFzZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+JiYgZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGNvbnRleHQpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKKyAgICAsIG1fZWxlbWVudChXVEZNb3ZlKGVsZW1lbnQpKQogICAgICwgbV9hc3luY0V2ZW50
UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAg
IEFTU0VSVCghY29udGV4dCB8fCBpczxEb2N1bWVudD4oY29udGV4dCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaAppbmRleCBmZjNjZDc5ZjAwZDMwMTI1ZWY5YjBh
NDMzN2EzOGQ0ZjkwNjBjYTQyLi5jYTVkNzY4MzM4MmU0ZGM0YjA5OTUyZjMyYmRjNTliYzQ3OTYy
MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaApAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJFbGVtZW50KCk7CiAg
ICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0OwotICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgp
OyB9CiAKICAgICAvLyBOZWVkcyB0byBiZSBwdWJsaWMgc28gdHJhY2tzIGNhbiBjYWxsIGl0CiAg
ICAgdm9pZCBzY2hlZHVsZUNoYW5nZUV2ZW50KCk7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzQW55VHJhY2tFbmFibGVkKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBU
cmFja0xpc3RCYXNlKFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4sIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKKyAgICBUcmFja0xpc3RCYXNlKFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgdm9pZCBzY2hlZHVsZUFkZFRyYWNrRXZl
bnQoUmVmPFRyYWNrQmFzZT4mJik7CiAgICAgdm9pZCBzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQo
UmVmPFRyYWNrQmFzZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1ZpZGVvVHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmNw
cAppbmRleCAyZWFmZjMzYjZmYWI1OTY0YjM0N2Y3MjA4MzAwMTJiZGU5MWFhNmNjLi5hYjUzMDQy
OTI2ZTUzNWEwODhiNzBkZTcxY2NlOTIyOTYyYjg0ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVmlkZW9UcmFjay5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFZpZGVvVHJhY2s6
Omxhbmd1YWdlQ2hhbmdlZChjb25zdCBBdG9tU3RyaW5nJiBsYW5ndWFnZSkKIAogdm9pZCBWaWRl
b1RyYWNrOjp3aWxsUmVtb3ZlKCkKIHsKLSAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1l
ZGlhRWxlbWVudCgpLmdldCgpKTsKKyAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1lZGlh
RWxlbWVudCgpKTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBlbGVt
ZW50LT5yZW1vdmVWaWRlb1RyYWNrKCp0aGlzKTsKQEAgLTI0NCw5ICsyNDQsOSBAQCB2b2lkIFZp
ZGVvVHJhY2s6OnVwZGF0ZUtpbmRGcm9tUHJpdmF0ZSgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLXZvaWQgVmlkZW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1l
ZGlhRWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgVmlkZW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KFdl
YWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiBlbGVtZW50KQogewotICAgIFRyYWNrQmFzZTo6c2V0
TWVkaWFFbGVtZW50KGVsZW1lbnQpOworICAgIFRyYWNrQmFzZTo6c2V0TWVkaWFFbGVtZW50KFdU
Rk1vdmUoZWxlbWVudCkpOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIG1fcHJpdmF0
ZS0+c2V0TG9nZ2VyKGxvZ2dlcigpLCBsb2dJZGVudGlmaWVyKCkpOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oCmluZGV4IDQyMjczZWViZjVlNTBlODExMmEzYmZl
NzA4ZjZlMTMxZTJmMGQ4NDUuLjA0YTIyMTBmMDI2MzMzMzE2ZTZmMzlkMjMyYTYzMjQxMTZlMDE1
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oCkBAIC03Myw3ICs3Myw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBNZWRpYURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbigpIGNv
bnN0OwogCiAgICAgdm9pZCBzZXRQcml2YXRlKFZpZGVvVHJhY2tQcml2YXRlJik7Ci0gICAgdm9p
ZCBzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50Pikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmKSBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKICAgICBWaWRlb1RyYWNrKFZpZGVvVHJhY2tDbGllbnQmLCBWaWRl
b1RyYWNrUHJpdmF0ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9W
aWRlb1RyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tM
aXN0LmNwcAppbmRleCAwZDFlMDkwZjU2YTNjNjE3NTZhN2Q4NDhmOTJkMjQwYmJjOTFiYTRlLi5m
NzkyN2FmMjQ5NTAxODdhODExYjMxYzEzY2U5ZmZkNGU4YjFjMzUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcApAQCAtMzQsOCArMzQsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZpZGVvVHJhY2tMaXN0OjpWaWRlb1RyYWNrTGlzdChXZWFr
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCi0gICAgOiBUcmFja0xpc3RCYXNlKGVsZW1lbnQsIGNvbnRleHQpCitWaWRlb1RyYWNr
TGlzdDo6VmlkZW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBUcmFja0xpc3RCYXNlKFdU
Rk1vdmUoZWxlbWVudCksIGNvbnRleHQpCiB7CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBW
aWRlb1RyYWNrTGlzdDo6YXBwZW5kKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQogICAgIG1faW5i
YW5kVHJhY2tzLmluc2VydChpbnNlcnRpb25JbmRleCwgdHJhY2sucHRyKCkpOwogCiAgICAgQVNT
RVJUKCF0cmFjay0+bWVkaWFFbGVtZW50KCkgfHwgdHJhY2stPm1lZGlhRWxlbWVudCgpID09IG1l
ZGlhRWxlbWVudCgpKTsKLSAgICB0cmFjay0+c2V0TWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCgp
KTsKKyAgICB0cmFjay0+c2V0TWVkaWFFbGVtZW50KG1ha2VXZWFrUHRyKG1lZGlhRWxlbWVudCgp
KSk7CiAKICAgICBzY2hlZHVsZUFkZFRyYWNrRXZlbnQoV1RGTW92ZSh0cmFjaykpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCmluZGV4IGNiZmRkMTJiZDcx
NzJjMGI2ZTQ3NTk5NzAwMDZhYThmMzMxN2ZhODAuLmI4NGQ5ZDg2Mjg5N2Q0MTI3NGE5NDJiMDAx
ZDc0MDU4ODQ5MThjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlk
ZW9UcmFja0xpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tM
aXN0LmgKQEAgLTM1LDkgKzM1LDkgQEAgY2xhc3MgVmlkZW9UcmFjazsKIAogY2xhc3MgVmlkZW9U
cmFja0xpc3QgZmluYWwgOiBwdWJsaWMgVHJhY2tMaXN0QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxWaWRlb1RyYWNrTGlzdD4gY3JlYXRlKFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4g
b3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgc3RhdGljIFJlZjxW
aWRlb1RyYWNrTGlzdD4gY3JlYXRlKFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiBvd25lciwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFZpZGVvVHJhY2tMaXN0KG93bmVyLCBjb250ZXh0KSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFZpZGVvVHJhY2tMaXN0KFdURk1vdmUob3duZXIpLCBjb250ZXh0
KSk7CiAgICAgfQogICAgIHZpcnR1YWwgflZpZGVvVHJhY2tMaXN0KCk7CiAKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJm
YWNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgVmlkZW9UcmFja0xpc3QoV2Vh
a1B0cjxIVE1MTWVkaWFFbGVtZW50PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIFZp
ZGVvVHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFZpZGVvVHJhY2tMaXN0KSA9PSBz
aXplb2YoVHJhY2tMaXN0QmFzZSksICIiKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386241</attachid>
            <date>2019-12-20 12:53:07 -0800</date>
            <delta_ts>2019-12-20 12:53:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205460-20191220125306.patch</filename>
            <type>text/plain</type>
            <size>17137</size>
            <attacher name="Doug Kelly">dougk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVlM2IwNWVjMjBhNzBl
MmI0YmJhOWU4YzQxNzZjZjY2MGQxZGQxYS4uNjU4ODJlZDI0NmVlZDg2YjEwYjJkYjQwNDk2YWJi
Mjk4N2FhNDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTEyLTIwICBEb3Vn
IEtlbGx5ICA8ZG91Z2tAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBUcmFja0Jhc2UgdG8g
c3RvcmUgbV9tZWRpYUVsZW1lbnQgYXMgYSBXZWFrUHRyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgV2Vha1B0ciB1c2FnZSB0byBydmFsdWUg
cmVmZXJlbmNlcyB0byBhdm9pZCBkdXBsaWNhdGVkIGNvcGllcyBvZiBXZWFrUHRyLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGVyZSBpcyBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIGh0bWwvdHJhY2svQXVkaW9UcmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrOjp3aWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2s6
OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrLmg6Cisg
ICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrTGlzdDo6QXVkaW9UcmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja0xpc3Q6OmFwcGVuZCk6CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlz
dC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6d2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmJhbmRUZXh0VHJhY2s6OnNldE1lZGlhRWxlbWVudCk6CisgICAgICAgICogaHRtbC90cmFj
ay9JbmJhbmRUZXh0VHJhY2suaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrTGlzdDo6VGV4dFRyYWNrTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tMaXN0OjphcHBlbmQpOgorICAgICAgICAqIGh0bWwv
dHJhY2svVGV4dFRyYWNrTGlzdC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrQmFzZTo6bWVkaWFFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNrQmFzZTo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3Ry
YWNrL1RyYWNrQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tCYXNlOjptZWRpYUVsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja0xpc3RCYXNlOjpUcmFja0xpc3RCYXNlKToKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrTGlz
dEJhc2U6Om1lZGlhRWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1Ry
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2s6OndpbGxSZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL3RyYWNrL1ZpZGVvVHJhY2suaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0OjpWaWRlb1RyYWNrTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdDo6YXBwZW5kKToKKyAgICAgICAg
KiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0Lmg6CisKIDIwMTktMTItMjAgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEludmFsaWRhdGUgb25seSBhZmZlY3Rl
ZCBlbGVtZW50cyBhZnRlciBtZWRpYSBxdWVyeSBldmFsdWF0aW9uIGNoYW5nZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwCmluZGV4IGIwNDYyMGFjZTUzNWY2MzM5MDZh
YWExNDRhMjk0OTAzMDZhYjQxOTcuLjA5Yzk1MDAxYTg2ZDE1YWZkODg4MjdhZDk3ZmViN2EyNjg5
ZWQyNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcApAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgQXVkaW9UcmFjazo6bGFuZ3VhZ2VDaGFuZ2VkKGNvbnN0IEF0b21T
dHJpbmcmIGxhbmd1YWdlKQogCiB2b2lkIEF1ZGlvVHJhY2s6OndpbGxSZW1vdmUoKQogewotICAg
IGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFFbGVtZW50KCkuZ2V0KCkpOworICAgIGF1
dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIobWVkaWFFbGVtZW50KCkpOwogICAgIGlmICghZWxlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIGVsZW1lbnQtPnJlbW92ZUF1ZGlvVHJhY2soKnRoaXMp
OwpAQCAtMTk2LDkgKzE5Niw5IEBAIHZvaWQgQXVkaW9UcmFjazo6dXBkYXRlS2luZEZyb21Qcml2
YXRlKCkKICAgICB9CiB9CiAKLXZvaWQgQXVkaW9UcmFjazo6c2V0TWVkaWFFbGVtZW50KFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgQXVkaW9UcmFjazo6c2V0TWVkaWFF
bGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiBlbGVtZW50KQogewotICAgIFRyYWNr
QmFzZTo6c2V0TWVkaWFFbGVtZW50KGVsZW1lbnQpOworICAgIFRyYWNrQmFzZTo6c2V0TWVkaWFF
bGVtZW50KFdURk1vdmUoZWxlbWVudCkpOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAg
IG1fcHJpdmF0ZS0+c2V0TG9nZ2VyKGxvZ2dlcigpLCBsb2dJZGVudGlmaWVyKCkpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCmluZGV4IDMxNWRlNjU1ZGZiY2Vm
MTcxNzRjNDAyYzA0ZGRkOWEwMTZlYjVlYzkuLjhhNzBmZTQ1Yzk4YTE3ZmI1MmFiYjhhNmY5ZWQz
ZjY3NzQ0MDRjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgaW5iYW5kVHJhY2tJbmRleCgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRQcml2YXRlKEF1ZGlvVHJhY2tQcml2YXRlJik7Ci0gICAgdm9pZCBz
ZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50Pikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmKSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBBdWRpb1RyYWNrKEF1ZGlvVHJhY2tDbGllbnQmLCBBdWRpb1Ry
YWNrUHJpdmF0ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRp
b1RyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0
LmNwcAppbmRleCAxMGRlYTU0MTZjNmY2OGMxYjE2M2ZjZjM5MDliYmFkOGZiODc5MWIzLi45ZTQ2
Y2E5YzczYWM5MzE5ZWI5YWUwNGFkZjBlNTk3N2E1M2Q5NmNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcApAQCAtMzQsOCArMzQsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUF1ZGlvVHJhY2tMaXN0OjpBdWRpb1RyYWNrTGlzdChXZWFrUHRy
PEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCi0gICAgOiBUcmFja0xpc3RCYXNlKGVsZW1lbnQsIGNvbnRleHQpCitBdWRpb1RyYWNrTGlz
dDo6QXVkaW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBUcmFja0xpc3RCYXNlKFdURk1v
dmUoZWxlbWVudCksIGNvbnRleHQpCiB7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBBdWRp
b1RyYWNrTGlzdDo6YXBwZW5kKFJlZjxBdWRpb1RyYWNrPiYmIHRyYWNrKQogCiAKICAgICBBU1NF
UlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gbWVk
aWFFbGVtZW50KCkpOwotICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KCkp
OworICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIobWVkaWFFbGVtZW50KCkp
KTsKIAogICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgKaW5kZXggMzY4NjVlMmI5ZmYy
NTg2MTIwMzZhM2YxYjdlNmIzMjhmYzJiM2RlZi4uOTE3MDg1Y2QwMTU3OWVhYzg3MzBkNDA5Njk3
YjdiMzk0NmYxZTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRp
b1RyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xp
c3QuaApAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBBdWRpb1RyYWNrOwogCiBjbGFzcyBBdWRpb1Ry
YWNrTGlzdCBmaW5hbCA6IHB1YmxpYyBUcmFja0xpc3RCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEF1ZGlvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBv
d25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICBzdGF0aWMgUmVmPEF1
ZGlvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIG93bmVyLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQXVkaW9UcmFja0xpc3Qob3duZXIsIGNvbnRleHQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja0xpc3QoV1RGTW92ZShvd25lciksIGNvbnRleHQp
KTsKICAgICB9CiAgICAgdmlydHVhbCB+QXVkaW9UcmFja0xpc3QoKTsKIApAQCAtNTEsNyArNTEs
NyBAQCBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBBdWRpb1RyYWNrTGlzdChXZWFr
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgQXVk
aW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoQXVkaW9UcmFja0xpc3QpID09IHNp
emVvZihUcmFja0xpc3RCYXNlKSwgIiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZFRleHRUcmFjay5jcHAKaW5kZXggYmU5Yzk5YWRiYmQ0MDQ1MmUwOTE2YWU2NDNlYWQ4
NWE4NDJiMzYxOC4uNmMxMjM3MzIyYWY4NjVlYzJmMmUwMTY4OTIyNmNiZDVjYjQ0Y2I3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcApAQCAtMTU5
LDcgKzE1OSw3IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrOjpsYW5ndWFnZUNoYW5nZWQoY29uc3Qg
QXRvbVN0cmluZyYgbGFuZ3VhZ2UpCiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrOjp3aWxsUmVtb3Zl
KCkKIHsKLSAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1lZGlhRWxlbWVudCgpLmdldCgp
KTsKKyAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKG1lZGlhRWxlbWVudCgpKTsKICAgICBp
ZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBlbGVtZW50LT5yZW1vdmVUZXh0VHJh
Y2soKnRoaXMpOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIE1lZGlhVGltZSBJbmJhbmRUZXh0VHJhY2s6
OnN0YXJ0VGltZVZhcmlhbmNlKCkgY29uc3QKICAgICByZXR1cm4gbV9wcml2YXRlLT5zdGFydFRp
bWVWYXJpYW5jZSgpOwogfQogCi12b2lkIEluYmFuZFRleHRUcmFjazo6c2V0TWVkaWFFbGVtZW50
KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgSW5iYW5kVGV4dFRyYWNr
OjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQpCiB7
Ci0gICAgVHJhY2tCYXNlOjpzZXRNZWRpYUVsZW1lbnQoZWxlbWVudCk7CisgICAgVHJhY2tCYXNl
OjpzZXRNZWRpYUVsZW1lbnQoV1RGTW92ZShlbGVtZW50KSk7CiAjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECiAgICAgbV9wcml2YXRlLT5zZXRMb2dnZXIobG9nZ2VyKCksIGxvZ0lkZW50aWZpZXIo
KSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5k
VGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5o
CmluZGV4IDBkNDUyNzg1ZjE4MzJjYWJkODJjNmQzMWJmZTQ5N2Q3Y2UwM2I2MjUuLjBiOTY1NjQw
NmY4ZGI2NjExOTIxZDg5YzFjZmQ3NGI2M2QxMzQ5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAg
QXRvbVN0cmluZyBpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHNldFByaXZhdGUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSYpOwotICAg
IHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4pIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJikg
b3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBJbmJhbmRUZXh0VHJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFRleHRUcmFja0NsaWVudCYsIEluYmFuZFRleHRUcmFja1ByaXZhdGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCmluZGV4IDQ4NmNl
Yzc2NGRiMDc3NjcxZDE2YzJkODQ1Y2FiMDc5ODBhNzRkYjEuLjgzN2E5Yjc2YWI2ZjhiZDU0YjE4
NDYwYjgwOTdkZGVhOTc5OWRlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmNwcApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChUZXh0VHJhY2tMaXN0KTsKIAotVGV4dFRyYWNrTGlz
dDo6VGV4dFRyYWNrTGlzdChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBUcmFja0xpc3RCYXNlKGVsZW1lbnQs
IGNvbnRleHQpCitUZXh0VHJhY2tMaXN0OjpUZXh0VHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1lZGlh
RWxlbWVudD4mJiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAg
IDogVHJhY2tMaXN0QmFzZShXVEZNb3ZlKGVsZW1lbnQpLCBjb250ZXh0KQogewogfQogCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBUZXh0VHJhY2tMaXN0OjphcHBlbmQoUmVmPFRleHRUcmFjaz4m
JiB0cmFjaykKICAgICBpbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayh0cmFjayk7CiAK
ICAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50
KCkgPT0gbWVkaWFFbGVtZW50KCkpOwotICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFF
bGVtZW50KCkpOworICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIobWVkaWFF
bGVtZW50KCkpKTsKIAogICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCmluZGV4IGY4NTc0
N2YwM2UwNjk2ZWYzN2YyZjhlNjE2MmM3OGNmOTMyODgxNjQuLjAwMzUwYzk0N2I1MTFjMzJkZTJj
NWZkZTA5OGNhZDM3YWQzYjRkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrTGlzdC5oCkBAIC0zNiw5ICszNiw5IEBAIGNsYXNzIFRleHRUcmFjazsKIGNsYXNzIFRleHRU
cmFja0xpc3QgZmluYWwgOiBwdWJsaWMgVHJhY2tMaXN0QmFzZSB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChUZXh0VHJhY2tMaXN0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRleHRU
cmFja0xpc3Q+IGNyZWF0ZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IGVsZW1lbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgc3RhdGljIFJlZjxUZXh0VHJhY2tMaXN0
PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUZXh0VHJhY2tMaXN0KGVsZW1lbnQsIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVGV4dFRyYWNrTGlzdChXVEZNb3ZlKGVsZW1lbnQpLCBjb250ZXh0KSk7CiAgICAg
fQogICAgIHZpcnR1YWwgflRleHRUcmFja0xpc3QoKTsKIApAQCAtNjAsNyArNjAsNyBAQCBwdWJs
aWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBUZXh0VHJhY2tMaXN0KFdlYWtQdHI8SFRNTE1l
ZGlhRWxlbWVudD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBUZXh0VHJhY2tMaXN0
KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwog
CiAgICAgdm9pZCBpbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2smKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuY3BwCmluZGV4IGMyOTQwMmMyNDVh
NDg1NDBmZGYzNDgwYWVjNjQ3MDgxNDU5NWU5OTIuLjg0MzJkNDdlODZiMjA0YTIyYzg1NDcyMzkx
MGUxMDhhOGIxYzkzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJh
Y2tCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5jcHAK
QEAgLTc4LDcgKzc4LDEyIEBAIEVsZW1lbnQqIFRyYWNrQmFzZTo6ZWxlbWVudCgpCiAgICAgcmV0
dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOwogfQogCi12b2lkIFRyYWNrQmFzZTo6c2V0TWVkaWFF
bGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCkKK0hUTUxNZWRpYUVsZW1l
bnQqIFRyYWNrQmFzZTo6bWVkaWFFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQuZ2V0KCk7Cit9CisKK3ZvaWQgVHJhY2tCYXNlOjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0cjxI
VE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQpCiB7CiAgICAgbV9tZWRpYUVsZW1lbnQgPSBlbGVt
ZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuaAppbmRleCBlYmQ3YjhlZjI5
MTllZWYyNmQ0OTFhMTE0MGEzZGVmMjE3M2RhYTAzLi44Yjc0ZTNiNTZiOWFkMGQxYmNiNDA5OWVm
NGQwMmQxZWVkZTE4YTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Ry
YWNrQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tCYXNlLmgKQEAg
LTQ5LDggKzQ5LDggQEAgcHVibGljOgogICAgIGVudW0gVHlwZSB7IEJhc2VUcmFjaywgVGV4dFRy
YWNrLCBBdWRpb1RyYWNrLCBWaWRlb1RyYWNrIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFFbGVtZW50KFdlYWtQ
dHI8SFRNTE1lZGlhRWxlbWVudD4pOwotICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gbWVk
aWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWVkaWFFbGVtZW50KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4mJik7CisgICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCk7CiAgICAgdmlydHVhbCBFbGVtZW50KiBlbGVtZW50
KCk7CiAKICAgICB2aXJ0dWFsIEF0b21TdHJpbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBUcmFja0Jhc2UoVHlw
ZSwgY29uc3QgQXRvbVN0cmluZyYgaWQsIGNvbnN0IEF0b21TdHJpbmcmIGxhYmVsLCBjb25zdCBB
dG9tU3RyaW5nJiBsYW5ndWFnZSk7CiAKLSAgICBXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1f
bWVkaWFFbGVtZW50IHsgbnVsbHB0ciB9OworICAgIFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4g
bV9tZWRpYUVsZW1lbnQ7CiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFNvdXJjZUJ1
ZmZlciogbV9zb3VyY2VCdWZmZXIgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UcmFja0xpc3RCYXNlLmNwcAppbmRleCA2MzQ0ZTA1Yzc3ZWY1NGNmZDQ1MjE4Y2E0ZGZk
MzI0MmYzMGI2MmQ2Li40YmEwMjIzMmY0YzAxNTIyNWM1MjlmMWM4ODIyMjBjMTkzMzc5ZTc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAKQEAgLTM5LDkg
KzM5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoVHJhY2tMaXN0QmFzZSk7CiAKLVRyYWNrTGlzdEJhc2U6OlRyYWNrTGlzdEJhc2UoV2Vha1B0
cjxIVE1MTWVkaWFFbGVtZW50PiBlbGVtZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQorVHJhY2tMaXN0QmFzZTo6VHJhY2tMaXN0QmFzZShXZWFrUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+JiYgZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGNvbnRleHQpCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKKyAgICAsIG1fZWxlbWVudChXVEZNb3ZlKGVsZW1lbnQpKQogICAgICwgbV9hc3luY0V2ZW50
UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQogewogICAg
IEFTU0VSVCghY29udGV4dCB8fCBpczxEb2N1bWVudD4oY29udGV4dCkpOwpAQCAtNjYsNiArNjYs
MTEgQEAgRWxlbWVudCogVHJhY2tMaXN0QmFzZTo6ZWxlbWVudCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZWxlbWVudC5nZXQoKTsKIH0KIAorSFRNTE1lZGlhRWxlbWVudCogVHJhY2tMaXN0QmFzZTo6
bWVkaWFFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lbGVtZW50LmdldCgpOworfQor
CiB1bnNpZ25lZCBUcmFja0xpc3RCYXNlOjpsZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBt
X2luYmFuZFRyYWNrcy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RyYWNrTGlzdEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0
QmFzZS5oCmluZGV4IGZmM2NkNzlmMDBkMzAxMjVlZjliMGE0MzM3YTM4ZDRmOTA2MGNhNDIuLjk2
MmNkYjM4OTdiMzQ4ZWFhNDQ0NWUzZmM2Y2IxMTg3NWMwZWFiMGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckVsZW1lbnQoKTsKICAgICBFbGVtZW50KiBlbGVtZW50KCkg
Y29uc3Q7Ci0gICAgV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiBtZWRpYUVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQoKSBjb25zdDsKIAogICAgIC8vIE5lZWRzIHRvIGJlIHB1YmxpYyBzbyB0cmFja3MgY2FuIGNh
bGwgaXQKICAgICB2b2lkIHNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKQEAgLTY2LDcgKzY2LDcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNBbnlUcmFja0VuYWJsZWQoKSBjb25zdDsKIAogcHJvdGVjdGVk
OgotICAgIFRyYWNrTGlzdEJhc2UoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOworICAgIFRyYWNrTGlzdEJhc2UoV2Vha1B0cjxIVE1MTWVkaWFFbGVt
ZW50PiYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICB2b2lkIHNjaGVkdWxlQWRk
VHJhY2tFdmVudChSZWY8VHJhY2tCYXNlPiYmKTsKICAgICB2b2lkIHNjaGVkdWxlUmVtb3ZlVHJh
Y2tFdmVudChSZWY8VHJhY2tCYXNlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVmlkZW9UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVv
VHJhY2suY3BwCmluZGV4IDJlYWZmMzNiNmZhYjU5NjRiMzQ3ZjcyMDgzMDAxMmJkZTkxYWE2Y2Mu
LmFiNTMwNDI5MjZlNTM1YTA4OGI3MGRlNzFjY2U5MjI5NjJiODRlMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgVmlk
ZW9UcmFjazo6bGFuZ3VhZ2VDaGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmIGxhbmd1YWdlKQogCiB2
b2lkIFZpZGVvVHJhY2s6OndpbGxSZW1vdmUoKQogewotICAgIGF1dG8gZWxlbWVudCA9IG1ha2VS
ZWZQdHIobWVkaWFFbGVtZW50KCkuZ2V0KCkpOworICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQ
dHIobWVkaWFFbGVtZW50KCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIGVsZW1lbnQtPnJlbW92ZVZpZGVvVHJhY2soKnRoaXMpOwpAQCAtMjQ0LDkgKzI0NCw5IEBA
IHZvaWQgVmlkZW9UcmFjazo6dXBkYXRlS2luZEZyb21Qcml2YXRlKCkKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotdm9pZCBWaWRlb1RyYWNrOjpzZXRNZWRpYUVsZW1lbnQoV2Vha1B0
cjxIVE1MTWVkaWFFbGVtZW50PiBlbGVtZW50KQordm9pZCBWaWRlb1RyYWNrOjpzZXRNZWRpYUVs
ZW1lbnQoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmIGVsZW1lbnQpCiB7Ci0gICAgVHJhY2tC
YXNlOjpzZXRNZWRpYUVsZW1lbnQoZWxlbWVudCk7CisgICAgVHJhY2tCYXNlOjpzZXRNZWRpYUVs
ZW1lbnQoV1RGTW92ZShlbGVtZW50KSk7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAg
bV9wcml2YXRlLT5zZXRMb2dnZXIobG9nZ2VyKCksIGxvZ0lkZW50aWZpZXIoKSk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmgKaW5kZXggNDIyNzNlZWJmNWU1MGU4
MTEyYTNiZmU3MDhmNmUxMzFlMmYwZDg0NS4uMDRhMjIxMGYwMjYzMzMzMTZlNmYzOWQyMzJhNjMy
NDExNmUwMTVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1Ry
YWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmgKQEAgLTcz
LDcgKzczLDcgQEAgcHVibGljOgogICAgIGNvbnN0IE1lZGlhRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFByaXZhdGUoVmlkZW9UcmFja1ByaXZhdGUmKTsK
LSAgICB2b2lkIHNldE1lZGlhRWxlbWVudChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHNldE1lZGlhRWxlbWVudChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+
JiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFZpZGVvVHJhY2soVmlkZW9UcmFja0NsaWVu
dCYsIFZpZGVvVHJhY2tQcml2YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlk
ZW9UcmFja0xpc3QuY3BwCmluZGV4IDBkMWUwOTBmNTZhM2M2MTc1NmE3ZDg0OGY5MmQyNDBiYmM5
MWJhNGUuLmY3OTI3YWYyNDk1MDE4N2E4MTFiMzFjMTNjZTlmZmQ0ZThiMWMzNTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCkBAIC0zNCw4ICszNCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmlkZW9UcmFja0xpc3Q6OlZpZGVvVHJhY2tM
aXN0KFdlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKLSAgICA6IFRyYWNrTGlzdEJhc2UoZWxlbWVudCwgY29udGV4dCkKK1Zp
ZGVvVHJhY2tMaXN0OjpWaWRlb1RyYWNrTGlzdChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+JiYg
ZWxlbWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICA6IFRyYWNrTGlz
dEJhc2UoV1RGTW92ZShlbGVtZW50KSwgY29udGV4dCkKIHsKIH0KIApAQCAtNTQsNyArNTQsNyBA
QCB2b2lkIFZpZGVvVHJhY2tMaXN0OjphcHBlbmQoUmVmPFZpZGVvVHJhY2s+JiYgdHJhY2spCiAg
ICAgbV9pbmJhbmRUcmFja3MuaW5zZXJ0KGluc2VydGlvbkluZGV4LCB0cmFjay5wdHIoKSk7CiAK
ICAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50
KCkgPT0gbWVkaWFFbGVtZW50KCkpOwotICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFF
bGVtZW50KCkpOworICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWFrZVdlYWtQdHIobWVkaWFF
bGVtZW50KCkpKTsKIAogICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgKaW5kZXggY2Jm
ZGQxMmJkNzE3MmMwYjZlNDc1OTk3MDAwNmFhOGYzMzE3ZmE4MC4uYjg0ZDlkODYyODk3ZDQxMjc0
YTk0MmIwMDFkNzQwNTg4NDkxOGNiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9WaWRlb1RyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlk
ZW9UcmFja0xpc3QuaApAQCAtMzUsOSArMzUsOSBAQCBjbGFzcyBWaWRlb1RyYWNrOwogCiBjbGFz
cyBWaWRlb1RyYWNrTGlzdCBmaW5hbCA6IHB1YmxpYyBUcmFja0xpc3RCYXNlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFZpZGVvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFF
bGVtZW50PiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICBzdGF0
aWMgUmVmPFZpZGVvVHJhY2tMaXN0PiBjcmVhdGUoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYm
IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9UcmFja0xpc3Qob3duZXIsIGNvbnRleHQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9UcmFja0xpc3QoV1RGTW92ZShvd25lciks
IGNvbnRleHQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+VmlkZW9UcmFja0xpc3QoKTsKIApAQCAt
NTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJn
ZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBWaWRlb1RyYWNr
TGlzdChXZWFrUHRyPEhUTUxNZWRpYUVsZW1lbnQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CisgICAgVmlkZW9UcmFja0xpc3QoV2Vha1B0cjxIVE1MTWVkaWFFbGVtZW50PiYmLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoVmlkZW9UcmFja0xp
c3QpID09IHNpemVvZihUcmFja0xpc3RCYXNlKSwgIiIpOwogCg==
</data>
<flag name="review"
          id="402060"
          type_id="1"
          status="?"
          setter="dougk"
    />
          </attachment>
      

    </bug>

</bugzilla>