<?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>188410</bug_id>
          
          <creation_ts>2018-08-08 09:36:06 -0700</creation_ts>
          <short_desc>InputType should not interact with an HTMLInputElement is no longer associated with</short_desc>
          <delta_ts>2018-08-21 16:02:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=186321</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1448773</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 09:36:06 -0700</bug_when>
    <thetext>InputType does not need to be RefCounted and probably shouldn&apos;t be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448805</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 12:11:31 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #0)
&gt; InputType does not need to be RefCounted and probably shouldn&apos;t be.

There are cases in which InputType needs to outlive the element itself. We can talk about it offline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448810</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 12:49:24 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #1)
&gt; (In reply to Chris Dumez from comment #0)
&gt; &gt; InputType does not need to be RefCounted and probably shouldn&apos;t be.
&gt; 
&gt; There are cases in which InputType needs to outlive the element itself. We
&gt; can talk about it offline.

InputType was not refcounted until recently so I find it surprising. My patch also does not cause any failures.

Will upload the patch in a bit so we can discuss.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448812</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 12:50:55 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #2)
&gt; (In reply to Ryosuke Niwa from comment #1)
&gt; &gt; (In reply to Chris Dumez from comment #0)
&gt; &gt; &gt; InputType does not need to be RefCounted and probably shouldn&apos;t be.
&gt; &gt; 
&gt; &gt; There are cases in which InputType needs to outlive the element itself. We
&gt; &gt; can talk about it offline.
&gt; 
&gt; InputType was not refcounted until recently so I find it surprising. My
&gt; patch also does not cause any failures.
&gt; 
&gt; Will upload the patch in a bit so we can discuss.

And to be clear I am aware of why it was made refcounted in the first place but have a different proposal to deal with the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448813</commentid>
    <comment_count>4</comment_count>
      <attachid>346785</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 13:01:54 -0700</bug_when>
    <thetext>Created attachment 346785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448815</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-08 13:04:17 -0700</bug_when>
    <thetext>Attachment 346785 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:9:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: use-after-free  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448904</commentid>
    <comment_count>6</comment_count>
      <attachid>346785</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 19:15:10 -0700</bug_when>
    <thetext>Comment on attachment 346785
Patch

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

r- because of this will re-introduce the bug making InputType RefCounted fixed.

&gt; Source/WebCore/ChangeLog:29
&gt; +        1. Use a EventQueueScope to dealy the firing of events, which we already do in a few places

We can&apos;t do this for the particular use-after-free at hand.
We discussed this possibility in length and concluded that it&apos;s not viable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448905</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 19:15:45 -0700</bug_when>
    <thetext>If you want to re-open this issue, please talk to me in person before doing so. There are some details I can talk about outside the security component.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448908</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 19:38:56 -0700</bug_when>
    <thetext>The fundamental problem is that EventQueueScope is really broken. I initially introduced it to workaround the most egregious security bugs in editing and a few other places but it probably should never have existed. It was probably one giant mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448921</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 20:17:13 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #8)
&gt; The fundamental problem is that EventQueueScope is really broken. I
&gt; initially introduced it to workaround the most egregious security bugs in
&gt; editing and a few other places but it probably should never have existed. It
&gt; was probably one giant mistake.

Did you look at the patch? I am NOT using EventQueueScope. I am using weakThis check. I looked at the original radar and made sure my patch addresses that crash.

Also, as explained in my change log the current code is wrong. Even though the lifetime  of the InputType got extended, it is does not get detached from its Element when the element changes input type. Therefore, after you change the input&apos;s type, the old InputType can keep messing with an HTMLInputElement it is no longer associated with.

Reopening since this issue (mentioned in my change log) needs to be addressed, one way or another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448922</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 20:23:25 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; (In reply to Ryosuke Niwa from comment #8)
&gt; &gt; The fundamental problem is that EventQueueScope is really broken. I
&gt; &gt; initially introduced it to workaround the most egregious security bugs in
&gt; &gt; editing and a few other places but it probably should never have existed. It
&gt; &gt; was probably one giant mistake.
&gt; 
&gt; Did you look at the patch? I am NOT using EventQueueScope. I am using
&gt; weakThis check. I looked at the original radar and made sure my patch
&gt; addresses that crash.
&gt; 
&gt; Also, as explained in my change log the current code is wrong. Even though
&gt; the lifetime  of the InputType got extended, it is does not get detached
&gt; from its Element when the element changes input type. Therefore, after you
&gt; change the input&apos;s type, the old InputType can keep messing with an
&gt; HTMLInputElement it is no longer associated with.
&gt; 
&gt; Reopening since this issue (mentioned in my change log) needs to be
&gt; addressed, one way or another.

Also note that I did discuss my proposal with Brent before implementing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448924</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 20:26:42 -0700</bug_when>
    <thetext>Okay. Then did you run Speedoemter, Dromaeo, &amp; PLT with this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448925</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 20:29:04 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #11)
&gt; Okay. Then did you run Speedoemter, Dromaeo, &amp; PLT with this change?

If people agree with the direction, I would be happy to run those benchmarks. You kinda forced me to upload a patch early to discuss by closing my bug before it even had a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448927</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 20:32:09 -0700</bug_when>
    <thetext>If the issue we&apos;re trying to address is that we&apos;re not clearing the element reference in InputType, then that should be clearly stated in the bug title &amp; description.

There is another approach to this problem which is to make InputType store WeakPtr to HTMLInputElement, or clear the pointer when InputType gets disassociated from Element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448928</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 20:32:24 -0700</bug_when>
    <thetext>Having said that now that I understand what you&apos;re trying to do, I think either approach is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448929</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-08 20:37:20 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #13)
&gt; If the issue we&apos;re trying to address is that we&apos;re not clearing the element
&gt; reference in InputType, then that should be clearly stated in the bug title
&gt; &amp; description.
&gt; 
&gt; There is another approach to this problem which is to make InputType store
&gt; WeakPtr to HTMLInputElement, or clear the pointer when InputType gets
&gt; disassociated from Element.

Actually, Brent already landed a follow-up change to have InputType store a WeakPtr to its HTMLInputElement instead of a C++ reference, in order to address new crashes. While it fixed those crashes, it does not exactly address the issue I mentioned, since an HTMLInputElement can stay alive but be associated to a new InputType (when its type attribute is changed).

However, nulling out the m_element pointer when the HTMLInputElement is no longer associated with the InputType would address the issue I mentioned. I thought about this. The reason I did not go with this approach is that it is not clear when you need to null check m_element or not. Right now, most places do not null check m_element (even though it is weak), they merely assert it is not null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448934</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 20:49:41 -0700</bug_when>
    <thetext>There is one drawback with this approach, which is that now every member function of InputType MUST have a local Ref/RefPtr to the element since otherwise &quot;this&quot; object can be deleted if it involves any function which may execute scripts.

And after invoking any function which may execute script, it must check that the input type associated with the retained element didn&apos;t change its type (otherwise, we&apos;d have a type confusion bug).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448937</commentid>
    <comment_count>17</comment_count>
      <attachid>346785</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 20:57:06 -0700</bug_when>
    <thetext>Comment on attachment 346785
Patch

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

&gt; Source/WebCore/html/CheckboxInputType.cpp:88
&gt; +        element().setIndeterminate(state.indeterminate);
&gt; +        element().setChecked(state.checked);

This code for example should have ScriptDisallowedScope::InMainThread or have a Ref/RefPtr to Element
since setIndeterminate is a non-trivial function which can be modified in the future to dispatch an event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448940</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-08 21:04:30 -0700</bug_when>
    <thetext>My recommendation still is to keep InputType ref-counted and clear the element pointer.

Many WebKit engineers know how to use Ref/RefPtr correctly in most cases. In my experience, whenever we introduced a complicated lifecycle management like one object owning another via unique_ptr, etc... someone eventually comes around and introduce a new security bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449003</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-09 08:43:10 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #12)
&gt; (In reply to Ryosuke Niwa from comment #11)
&gt; &gt; Okay. Then did you run Speedoemter, Dromaeo, &amp; PLT with this change?
&gt; 
&gt; If people agree with the direction, I would be happy to run those
&gt; benchmarks. You kinda forced me to upload a patch early to discuss by
&gt; closing my bug before it even had a patch.

I triggered A/B analysis tasks for these benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449004</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-09 08:45:14 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #18)
&gt; My recommendation still is to keep InputType ref-counted and clear the
&gt; element pointer.
&gt; 
&gt; Many WebKit engineers know how to use Ref/RefPtr correctly in most cases. In
&gt; my experience, whenever we introduced a complicated lifecycle management
&gt; like one object owning another via unique_ptr, etc... someone eventually
&gt; comes around and introduce a new security bug.

The whole reason I started this is because of https://bugs.webkit.org/show_bug.cgi?id=186321. How are people supposed to know when to null-check element or not?

As I mentioned on that bug, we could go the direction you suggest but then we&apos;d likely want to null check element everywhere? This could likely have a perf impact though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449005</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-09 08:45:46 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #17)
&gt; Comment on attachment 346785 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346785&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/CheckboxInputType.cpp:88
&gt; &gt; +        element().setIndeterminate(state.indeterminate);
&gt; &gt; +        element().setChecked(state.checked);
&gt; 
&gt; This code for example should have ScriptDisallowedScope::InMainThread or
&gt; have a Ref/RefPtr to Element
&gt; since setIndeterminate is a non-trivial function which can be modified in
&gt; the future to dispatch an event.

Sure we could add ScriptDisallowedScope::InMainThread in more places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449006</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-09 08:48:07 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #16)
&gt; There is one drawback with this approach, which is that now every member
&gt; function of InputType MUST have a local Ref/RefPtr to the element since
&gt; otherwise &quot;this&quot; object can be deleted if it involves any function which may
&gt; execute scripts.

This is inaccurate, you do not need to refcount your element. As a matter of fact you likely should not. If you ref the element and use your local variable then you still have the issue that you may interact with an element that is no longer associated with you.

The way I suggest and use in my patch is to use a weakThis variable and return early if it becomes null as a result of calling script.

&gt; 
&gt; And after invoking any function which may execute script, it must check that
&gt; the input type associated with the retained element didn&apos;t change its type
&gt; (otherwise, we&apos;d have a type confusion bug).

Commented above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449127</commentid>
    <comment_count>23</comment_count>
      <attachid>346867</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-09 15:45:48 -0700</bug_when>
    <thetext>Created attachment 346867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449132</commentid>
    <comment_count>24</comment_count>
      <attachid>346869</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-09 16:02:24 -0700</bug_when>
    <thetext>Created attachment 346869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449156</commentid>
    <comment_count>25</comment_count>
      <attachid>346869</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-09 16:56:49 -0700</bug_when>
    <thetext>Comment on attachment 346869
Patch

Clearing flags on attachment: 346869

Committed r234744: &lt;https://trac.webkit.org/changeset/234744&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449157</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-09 16:56:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449158</commentid>
    <comment_count>27</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-09 16:57:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/43117754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452373</commentid>
    <comment_count>28</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-08-21 16:02:10 -0700</bug_when>
    <thetext>*** Bug 186321 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346785</attachid>
            <date>2018-08-08 13:01:54 -0700</date>
            <delta_ts>2018-08-09 15:45:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188410-20180808130154.patch</filename>
            <type>text/plain</type>
            <size>138486</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM5ZWE3MWQ4MTE3MTA2
ZWZkZDI0ZDA4MWVhMDQ4MjgzODk3MDI5Zi4uODZlOTkxYzJhNzA2OGE0YmU1OTI3MzNmZTdhYTI4
ZDBhZWZiOGE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NiBAQAorMjAxOC0wOC0wOCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIElucHV0VHlwZSBkb2VzIG5v
dCBuZWVkIHRvIGJlIFJlZkNvdW50ZWQgYW5kIHByb2JhYmx5IHNob3VsZG4ndCBiZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4NDEwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5wdXRUeXBlIHVzZWQg
dG8gYmUgb3duZWQgYnkgSFRNTElucHV0RWxlbWVudCB2aWEgYSB1bmlxdWVfcHRyLiBXZSByZWNl
bnRseQorICAgICAgICBtYWRlIElucHV0VHlwZSBSZWZDb3VudGVkIHRvIHRyeSBhbmQgYWRyZXNz
IHNvbWUgdXNlLWFmdGVyLWZyZWUgY3Jhc2hlcy4gVGhpcworICAgICAgICBsZWQgdG8gaXNzdWVz
IGJlY2F1c2UgSW5wdXRUeXBlIGhhZCBhIHJhdyBwb2ludGVyIHRvIGl0cyBlbGVtZW50IGFuZCB0
aGUKKyAgICAgICAgSW5wdXRUeXBlIGNhbiBub3cgb3V0bGl2ZSBpdHMgZWxlbWVudCBkdWUgdG8g
YmVpbmcgcmVmY291bnRlZC4gVG8gYWRkcmVzcyB0aGlzCisgICAgICAgIGlzc3VlLCBJbnB1dFR5
cGUncyBtX2VsZW1lbnQgd2FzIHVwZGF0ZWQgdG8gYmUgYSBXZWFrUHRyIGluc3RlYWQgb2YgYSBy
YXcgcG9pbnRlcgorICAgICAgICAoQysrIHJlZmVyZW5jZSkuIEhvd2V2ZXIsIHRoaXMgYXBwcm9h
Y2ggaGFzIHNldmVyYWwgaXNzdWVzOgorICAgICAgICAtIEl0IGlzIG5vdyB1bmNsZWFyIHdoZW4g
d2UgY2FuIGV4cGVjdCB0aGUgZWxlbWVudCB0byBiZSBhbGl2ZS4gV2UgaGF2ZSBjb2RlIG51bGwt
Y2hlY2tpbmcKKyAgICAgICAgICBpdCBpbiBhIGZldyBpbnN0YW5jZXMsIGJ1dCBtb3N0IG9mIHRo
ZSB0aW1lIHdlIG1lcmVseSBhc3NlcnQgaXQgaXMgbm90IG51bGwuCisgICAgICAgIC0gQW4gSFRN
TElucHV0RWxlbWVudCBjYW4gY2hhbmdlIElucHV0VHlwZSBkdXJpbmcgaXRzIGxpZmV0aW1lLiBB
cyBhIHJlc3VsdCwgSW5wdXRUeXBlOjptX2VsZW1lbnQKKyAgICAgICAgICBjYW4gYmUgYWxpdmUg
KG5vbi1udWxsKSBldmVuIHRob3VnaCB0aGUgSW5wdXRUeXBlIGluIHF1ZXN0aW9uIGlzIG5vIGxv
bmdlciBhc3NvY2lhdGVkCisgICAgICAgICAgd2l0aCB0aGlzIEhUTUxJbnB1dEVsZW1lbnQuIFRo
aXMgY2FuIGNhdXNlIGFuIElucHV0VHlwZSB0byBkbyBvcGVyYXRpb25zIG9uIGFuIGlucHV0Cisg
ICAgICAgICAgZWxlbWVudCBpcyBpcyBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoLCB3aGljaCBp
cyBiYWQuCisKKyAgICAgICAgTXkgcHJvcG9zYWwgaXMgYXMgZm9sbG93czoKKyAgICAgICAgMS4g
SGF2ZSB0aGUgSFRNTElucHV0RWxlbWVudCBvd24gdGhlIElucHV0VHlwZSBhZ2FpbiB2aWEgdW5p
cXVlX3B0ci4KKyAgICAgICAgMi4gTWFrZSBJbnB1dFR5cGU6Om1fZWxlbWVudCBiZSBhIEMrKyBy
ZWZlcmVuY2UgYWdhaW4gc2luY2UgaXQgY2Fubm90CisgICAgICAgICAgIGJlIG51bGwuCisKKyAg
ICAgICAgTm93LCB0aGUgaXNzdWUgaXMgc3RpbGwgdGhhdCB3aGVuZXZlciB0aGUgSW5wdXRUeXBl
IHJ1bnMgc2NyaXB0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXRob2QKKyAgICAgICAgKGUuZy4gdmlh
IGZpcmluZyBhbiBldmVudCksIGl0IG1heSBjYXVzZSB0aGUgSW5wdXRUeXBlIHRvIGdldCBkZXN0
cm95ZWQgKGUuZy4gaWYgdGhlCisgICAgICAgIHNjcmlwdCBjaGFuZ2VzIHRoZSBpbnB1dCBlbGVt
ZW50J3MgdHlwZSkuIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGVhbCB3aXRoIHRoaXM6Cisg
ICAgICAgIDEuIFVzZSBhIEV2ZW50UXVldWVTY29wZSB0byBkZWFseSB0aGUgZmlyaW5nIG9mIGV2
ZW50cywgd2hpY2ggd2UgYWxyZWFkeSBkbyBpbiBhIGZldyBwbGFjZXMKKyAgICAgICAgMi4gVXNl
IGEgd2Vha1RoaXMgbG9jYWwgdmFyaWFibGUgKHdoaWNoIGlzIGEgV2Vha1B0ciB0byB8dGhpc3wp
IGFuZCBtYWtlIHN1cmUgaXQgaXMgbm9uLW51bGwKKyAgICAgICAgICAgYWZ0ZXIgcnVubmluZyBz
Y3JpcHQuCisKKyAgICAgICAgSSBoYXZlIGF1ZGl0ZWQgdGhlIGNvZGUgYW5kIGFkZGVkIHdlYWtU
aGlzIGNoZWNrcyBhZnRlciBhbGwgSW5wdXRUeXBlIG9wZXJhdGlvbnMgdGhhdCBjb3VsZAorICAg
ICAgICBydW4gc2NyaXB0LiBJIGhhdmUgYWxzbyBhZGRlZCBhIGZldyBTY3JpcHREaXNhbGxvd2Vk
U2NvcGUgYXNzZXJ0aW9ucyB0byBtYWtlIHN1cmUgd2UgZG8KKyAgICAgICAgbm90IHJ1biBzY3Jp
cHQgaW4gYSBmZXcgcGxhY2VzIHdoZXJlIGl0IHdvdWxkIG5vdCBiZSBzYWZlLgorCisgICAgICAg
ICogaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VC
dXR0b25JbnB1dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUJ1dHRvbklucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvQmFzZUNoZWNr
YWJsZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQ2hlY2thYmxlSW5wdXRU
eXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
Q2hlY2thYmxlSW5wdXRUeXBlOjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6YWNjZXNzS2V5
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnNldFZh
bHVlKToKKyAgICAgICAgKiBodG1sL0Jhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRU
eXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDaG9v
c2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjp1cGRhdGVJ
bm5lclRleHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJP
bmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmRpZENob29zZVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGU6OmhhbmRsZUtleXByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNob29zZXJP
bmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6aXNNb3VzZUZvY3VzYWJs
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlu
cHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9CYXNlQ2xpY2thYmxl
V2l0aEtleUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQ2xpY2thYmxlV2l0
aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rp
b24pOgorICAgICAgICAqIGh0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuaDoKKyAg
ICAgICAgKiBodG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZhbHVlQXNEYXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZh
bHVlQXNEZWNpbWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZTo6dHlwZU1pc21hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRl
QW5kVGltZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNlcmlhbGl6ZVdpdGhDb21wb25lbnRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6bG9jYWxpemVWYWx1
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnZp
c2libGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFuZFRpbWVJbnB1
dFR5cGU6OnZhbHVlTWlzc2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUgY29uc3QpOgorICAgICAgICAqIGh0
bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZVRleHRJbnB1
dFR5cGU6OnBhdHRlcm5NaXNtYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9DaGVja2JveElu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlwZTo6dmFsdWVN
aXNzaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrYm94SW5wdXRUeXBlOjp3aWxs
RGlzcGF0Y2hDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlwZTo6ZGlk
RGlzcGF0Y2hDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlwZTo6c2hv
dWxkQXBwZWFySW5kZXRlcm1pbmF0ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9Db2xvcklucHV0
VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6aXNNb3VzZUZvY3Vz
YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6aXNLZXlib2Fy
ZEZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6dmFs
dWVBc0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBlOjpjcmVh
dGVTaGFkb3dTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBlOjpzZXRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZh
dGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6ZGlkQ2hvb3NlQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1dFR5cGU6OnVwZGF0ZUNvbG9yU3dhdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRUeXBlOjpzaGFkb3dDb2xvclN3YXRjaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6ZWxlbWVudFJlY3RSZWxh
dGl2ZVRvUm9vdFZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1dFR5cGU6
OnNob3VsZFNob3dTdWdnZXN0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklu
cHV0VHlwZTo6c3VnZ2VzdGlvbnMgY29uc3QpOgorICAgICAgICAqIGh0bWwvRGF0ZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2Ug
Y29uc3QpOgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRlVGltZUxvY2FsSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UgY29u
c3QpOgorICAgICAgICAqIGh0bWwvRW1haWxJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RW1haWxJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaEZvciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFbWFpbElucHV0VHlwZTo6dHlwZU1pc21hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVtYWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkVtYWlsSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBo
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
YXBwZW5kRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
dmFsdWVNaXNzaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnZh
bHVlTWlzc2luZ1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
aGFuZGxlRE9NQWN0aXZhdGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBl
OjpjcmVhdGVJbnB1dFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6
OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRv
d1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6ZGlzYWJsZWRTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6YXR0cmlidXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjphbGxvd3NEaXJlY3Rvcmll
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpzZXRGaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjppY29uTG9hZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZUlucHV0VHlwZTo6ZGVmYXVsdFRvb2xUaXAgY29uc3QpOgorICAgICAgICAqIGh0
bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
Lmg6CisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SGlkZGVuSW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIaWRkZW5JbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhpZGRlbklucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SGlkZGVuSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YSBjb25zdCk6CisgICAgICAgICog
aHRtbC9JbWFnZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlw
ZTo6YXBwZW5kRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1
dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1
dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5
cGU6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRUeXBlOjp3aWR0aCBjb25zdCk6Cisg
ICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW5w
dXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklucHV0VHlwZTo6Y3JlYXRlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1
dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0VHlwZTo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjppc0Zvcm1EYXRhQXBwZW5kYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0
VHlwZTo6c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0VHlwZTo6dmFsaWRhdGlvbk1lc3NhZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0VHlwZTo6Ymx1cik6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmRlc3Ryb3lTaGFk
b3dTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6ZGlzcGF0Y2hTaW11bGF0
ZWRDbGlja0lmQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6Y2hy
b21lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aXNLZXlib2FyZEZvY3Vz
YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2Fi
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dFR5cGU6OnZpc2libGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OmFwcGx5U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OnN0ZXBV
cEZyb21SZW5kZXJlcik6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0VHlwZTo6SW5wdXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlw
ZTo6ZWxlbWVudCBjb25zdCk6CisgICAgICAgICogaHRtbC9Nb250aElucHV0VHlwZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNb250aElucHV0VHlwZTo6dmFsdWVBc0RhdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TW9udGhJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSBjb25zdCk6Cisg
ICAgICAgICogaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TnVt
YmVySW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5
cGU6OnZhbHVlQXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRU
eXBlOjpzZXRWYWx1ZUFzRG91YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklu
cHV0VHlwZTo6c2V0VmFsdWVBc0RlY2ltYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TnVt
YmVySW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TnVt
YmVySW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TnVtYmVySW5wdXRUeXBlOjpzaXplU2hvdWxkSW5jbHVkZURlY29yYXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpkZWNvcmF0aW9uV2lkdGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpsb2NhbGl6ZVZhbHVlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6dmlzaWJsZVZhbHVlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6Y29udmVydEZyb21WaXNpYmxlVmFs
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpoYXNCYWRJbnB1
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmFkaW9JbnB1dFR5cGU6OnZhbHVlTWlzc2luZyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJhZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXl1cEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJhZGlvSW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNhYmxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhZGlvSW5wdXRUeXBlOjpzaG91bGRTZW5kQ2hhbmdlRXZlbnRBZnRlckNoZWNrZWRD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hD
bGljayk6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGlj
ayk6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6bWF0Y2hlc0luZGV0ZXJtaW5h
dGVQc2V1ZG9DbGFzcyBjb25zdCk6CisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWVBc0RlY2ltYWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6aGFuZGxlTW91c2VEb3du
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmhhbmRsZVRvdWNoRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6c2xpZGVyVHJhY2tFbGVtZW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJl
bmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlSW5wdXRUeXBlOjp1cGRhdGVUaWNrTWFya1ZhbHVlcyk6CisgICAgICAg
ICogaHRtbC9SZXNldElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNldElucHV0
VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudCk6CisgICAgICAgICogaHRtbC9TZWFyY2hJbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjphZGRTZWFyY2hS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1
YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3du
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpzdGFydFNlYXJjaEV2
ZW50VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVu
dFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hF
dmVudHNTaG91bGRCZURpc3BhdGNoZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNo
SW5wdXRUeXBlOjpkaWRTZXRWYWx1ZUJ5VXNlckVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoSW5wdXRUeXBlOjpzaXplU2hvdWxkSW5jbHVkZURlY29yYXRpb24gY29uc3QpOgorICAgICAg
ICAqIGh0bWwvU3VibWl0SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1Ym1pdElu
cHV0VHlwZTo6YXBwZW5kRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3VibWl0
SW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKiBodG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6
OmlzS2V5Ym9hcmRGb2N1c2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxk
SW5wdXRUeXBlOjppc01vdXNlRm9jdXNhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRGaWVsZElucHV0VHlwZTo6dmFsdWVNaXNzaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZp
ZWxkSW5wdXRUeXBlOjpoYW5kbGVDbGlja0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRG
aWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50Rm9yU3BpbkJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmZvcndhcmRFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlRm9jdXNFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJsdXJFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3BpbkJ1dHRvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVD
YXBzTG9ja0luZGljYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1
dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxk
SW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVs
ZElucHV0VHlwZTo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkSW5wdXRUeXBlOjpyZWFkT25seVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6dXBkYXRlUGxhY2Vob2xkZXJUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzdWJ0cmVlSGFz
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmRpZFNldFZh
bHVlQnlVc2VyRWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnVw
ZGF0ZUlubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlw
ZTo6Zm9jdXNBbmRTZWxlY3RTcGluQnV0dG9uT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTcGluQnV0dG9uUmVzcG9uZFRvTW91c2VFdmVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTcGluQnV0dG9uUmVz
cG9uZFRvV2hlZWxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBl
OjpzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGREcmF3QXV0b0ZpbGxCdXR0b24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjphdXRvRmlsbEJ1dHRvbkVsZW1lbnRX
YXNDbGlja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRl
Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRl
QXV0b0ZpbGxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjp1
cGRhdGVBdXRvRmlsbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5
cGU6OmVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c3VnZ2VzdGlvbnMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpkaWRTZWxlY3REYXRhTGlzdE9wdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmRpc3BsYXlTdWdnZXN0aW9ucyk6
CisgICAgICAgICogaHRtbC9UaW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRp
bWVJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSBjb25zdCk6CisgICAgICAgICogaHRtbC9VUkxJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMSW5wdXRUeXBlOjp0eXBlTWlzbWF0
Y2ggY29uc3QpOgorICAgICAgICAqIGh0bWwvV2Vla0lucHV0VHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWVrSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UgY29uc3QpOgorCiAyMDE4LTA4
LTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBDRVJl
YWN0aW9ucz1Ob3ROZWVkZWQgZm9yIHJlYWN0aW9ucyBvbmx5IG5lZWRlZCBmb3IgY3VzdG9taXpl
ZCBidWlsdGlucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5w
dXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAK
aW5kZXggMmRkYmFlYjlhNjlhODBjMWI0OWM0OTI2OTY3ZTNlZDMwNDQ2OWYzOS4uNDI4ZTQxYTBm
YmNiMWNmYjBiOTljYjM3YTg4YjlkYzBhNDA0Mjk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCkBAIC01Myw4ICs1Myw3IEBAIGJvb2wgQmFzZUJ1dHRv
bklucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29sKSBjb25zdAogCiBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gQmFzZUJ1dHRvbklucHV0VHlwZTo6Y3JlYXRlSW5wdXRS
ZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCdXR0b24+KCplbGVtZW50KCksIFdURk1v
dmUoc3R5bGUpKTsKKyAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQnV0dG9uPihlbGVt
ZW50KCksIFdURk1vdmUoc3R5bGUpKTsKIH0KIAogYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpz
dG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCkBAIC02NCw4ICs2Myw3IEBAIGJvb2wg
QmFzZUJ1dHRvbklucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKQog
CiB2b2lkIEJhc2VCdXR0b25JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRp
emVkVmFsdWUsIGJvb2wsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUpOworICAgIGVsZW1lbnQoKS5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hl
Y2thYmxlSW5wdXRUeXBlLmNwcAppbmRleCBiYjFkYTA4NjZiYjY5YWZhZDlkOWEyNGE4MDJhMWVh
NzU3ODkwYzIwLi42MzYxY2QzZGU0NWJiZmQ2M2JiYWJiODZiMThmMDU0NTA4NDNlYzgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAKQEAgLTQ1
LDIyICs0NSwxOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBGb3JtQ29udHJvbFN0
YXRlIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4geyBlbGVtZW50KCktPmNoZWNr
ZWQoKSA/ICJvbiJfcyA6ICJvZmYiX3MgfTsKKyAgICByZXR1cm4geyBlbGVtZW50KCkuY2hlY2tl
ZCgpID8gIm9uIl9zIDogIm9mZiJfcyB9OwogfQogCiB2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5
cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IEZvcm1Db250cm9sU3RhdGUmIHN0YXRl
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+c2V0Q2hlY2tlZChz
dGF0ZVswXSA9PSAib24iKTsKKyAgICBlbGVtZW50KCkuc2V0Q2hlY2tlZChzdGF0ZVswXSA9PSAi
b24iKTsKIH0KIAogYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShE
T01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQo
KSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPmNoZWNrZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5j
aGVja2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3JtRGF0YS5hcHBlbmQoZWxl
bWVudCgpLT5uYW1lKCksIGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgZm9ybURhdGEuYXBwZW5k
KGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNjgsOCArNjUsNyBAQCB2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRs
ZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBjb25zdCBTdHJpbmcm
IGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXIoKTsKICAgICBpZiAoa2V5ID09ICJVKzAwMjAiKSB7
Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICBlbGVtZW50KCktPnNldEFjdGl2
ZSh0cnVlLCB0cnVlKTsKKyAgICAgICAgZWxlbWVudCgpLnNldEFjdGl2ZSh0cnVlLCB0cnVlKTsK
ICAgICAgICAgLy8gTm8gc2V0RGVmYXVsdEhhbmRsZWQoKSwgYmVjYXVzZSBJRSBkaXNwYXRjaGVz
IGEga2V5cHJlc3MgaW4gdGhpcyBjYXNlCiAgICAgICAgIC8vIGFuZCB0aGUgY2FsbGVyIHdpbGwg
b25seSBkaXNwYXRjaCBhIGtleXByZXNzIGlmIHdlIGRvbid0IGNhbGwgc2V0RGVmYXVsdEhhbmRs
ZWQoKS4KICAgICB9CkBAIC05MSwxMCArODcsMTIgQEAgYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRU
eXBlOjpjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0CiAvLyBGSVhNRTogQ291bGQgc2hhcmUgdGhp
cyB3aXRoIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlIGFuZCBSYW5nZUlucHV0VHlwZSBp
ZiB3ZSBoYWQgYSBjb21tb24gYmFzZSBjbGFzcy4KIHZvaWQgQmFzZUNoZWNrYWJsZUlucHV0VHlw
ZTo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZE1vdXNlRXZlbnRzKQogeworICAgIGF1dG8gd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CiAgICAgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rp
b24oc2VuZE1vdXNlRXZlbnRzKTsKKyAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICByZXR1cm47
CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPmRpc3BhdGNoU2ltdWxh
dGVkQ2xpY2soMCwgc2VuZE1vdXNlRXZlbnRzID8gU2VuZE1vdXNlVXBEb3duRXZlbnRzIDogU2Vu
ZE5vRXZlbnRzKTsKKyAgICBlbGVtZW50KCkuZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygwLCBzZW5k
TW91c2VFdmVudHMgPyBTZW5kTW91c2VVcERvd25FdmVudHMgOiBTZW5kTm9FdmVudHMpOwogfQog
CiBTdHJpbmcgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6ZmFsbGJhY2tWYWx1ZSgpIGNvbnN0CkBA
IC0xMTAsOCArMTA4LDcgQEAgYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1
ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpCiAKIHZvaWQgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCwgVGV4dEZpZWxkRXZl
bnRCZWhhdmlvcikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1
ZSk7CisgICAgZWxlbWVudCgpLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odmFs
dWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CiB9CiAKIGJvb2wgQmFzZUNoZWNrYWJsZUlucHV0VHlw
ZTo6aXNDaGVja2FibGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hv
b3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAppbmRleCAyMWZlZGUxMDFmYjlh
MWMxM2VjZTFkNzQ4MDkyZjk3YzUyNDgyOGFlLi4zZmY0YjY3M2ViNDUyNGQ0ZmZjODhlNTRmZDhj
MDNhM2UxZDRkY2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaG9vc2Vy
T25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcApAQCAtNDYsMzQgKzQ2LDMwIEBA
IEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjp+QmFzZUNob29zZXJPbmx5RGF0
ZUFuZFRpbWVJbnB1dFR5cGUoKQogCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5w
dXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50JikKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICBpZiAoZWxlbWVudCgpLT5pc0Rpc2FibGVkT3JSZWFkT25seSgpIHx8ICFl
bGVtZW50KCktPnJlbmRlcmVyKCkgfHwgIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRPbmx5KCkg
fHwgIWVsZW1lbnQoKS5yZW5kZXJlcigpIHx8ICFVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2RhdGVUaW1l
Q2hvb3NlcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghZWxlbWVudCgpLT5kb2N1bWVudCgp
LnBhZ2UoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5kb2N1bWVudCgpLnBhZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBp
ZiAoIWVsZW1lbnQoKS0+c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKHBhcmFtZXRlcnMp
KQotICAgICAgICByZXR1cm47CisgICAgZWxlbWVudCgpLnNldHVwRGF0ZVRpbWVDaG9vc2VyUGFy
YW1ldGVycyhwYXJhbWV0ZXJzKTsKIH0KIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGlt
ZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gdmFsdWVDb250YWluZXJQc2V1ZG8oIi13ZWJraXQtZGF0ZS1h
bmQtdGltZS12YWx1ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCi0g
ICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgYXV0byB2YWx1ZUNvbnRhaW5lciA9IEhUTUxEaXZF
bGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVudCgpKTsKKyAgICBhdXRvIHZhbHVlQ29u
dGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCkuZG9jdW1lbnQoKSk7CiAg
ICAgdmFsdWVDb250YWluZXItPnNldFBzZXVkbyh2YWx1ZUNvbnRhaW5lclBzZXVkbyk7Ci0gICAg
ZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKHZhbHVlQ29udGFp
bmVyKTsKKyAgICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZCh2
YWx1ZUNvbnRhaW5lcik7CiAgICAgdXBkYXRlSW5uZXJUZXh0VmFsdWUoKTsKIH0KIAogdm9pZCBC
YXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6dXBkYXRlSW5uZXJUZXh0VmFsdWUo
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZWxl
bWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCktPmZpcnN0Q2hpbGQoKTsKKyAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmZpcnN0Q2hpbGQo
KTsKICAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAg
IFN0cmluZyBkaXNwbGF5VmFsdWUgPSB2aXNpYmxlVmFsdWUoKTsKQEAgLTg2LDcgKzgyLDEwIEBA
IHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnVwZGF0ZUlubmVyVGV4
dFZhbHVlKCkKIAogdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2
ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKIHsKKyAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpOwogICAgIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0VmFsdWUodmFs
dWUsIHZhbHVlQ2hhbmdlZCwgZXZlbnRCZWhhdmlvcik7CisgICAgaWYgKCF3ZWFrVGhpcykKKyAg
ICAgICAgcmV0dXJuOwogICAgIGlmICh2YWx1ZUNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZUlubmVy
VGV4dFZhbHVlKCk7CiB9CkBAIC05OCw4ICs5Nyw3IEBAIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0
ZUFuZFRpbWVJbnB1dFR5cGU6OmRldGFjaCgpCiAKIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0ZUFu
ZFRpbWVJbnB1dFR5cGU6OmRpZENob29zZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZSh2YWx1ZSwgRGlz
cGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWUodmFsdWUs
IERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CiB9CiAKIHZvaWQgQmFzZUNob29zZXJPbmx5
RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmRpZEVuZENob29zZXIoKQpAQCAtMTE1LDE0ICsxMTMsMTIg
QEAgdm9pZCBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6Y2xvc2VEYXRlVGlt
ZUNob29zZXIoKQogCiB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjpo
YW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudCgqZWxlbWVudCgpLCBldmVudCk7CisgICAgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1
dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChlbGVtZW50KCksIGV2ZW50KTsKIH0KIAogdm9pZCBC
YXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudChL
ZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBCYXNl
Q2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudCgqZWxlbWVudCgp
LCBldmVudCk7CisgICAgQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmhhbmRsZUtleXBy
ZXNzRXZlbnQoZWxlbWVudCgpLCBldmVudCk7CiB9CiAKIHZvaWQgQmFzZUNob29zZXJPbmx5RGF0
ZUFuZFRpbWVJbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQp
CkBAIC0xMzIsMjMgKzEyOCwyNiBAQCB2b2lkIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5w
dXRUeXBlOjpoYW5kbGVLZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogCiB2b2lkIEJh
c2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBz
ZW5kTW91c2VFdmVudHMpCiB7CisgICAgYXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KTsKICAgICBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihzZW5kTW91
c2VFdmVudHMpOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIEJhc2VDbGlja2FibGVXaXRo
S2V5SW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oKmVsZW1lbnQoKSwgc2VuZE1vdXNlRXZlbnRz
KTsKKyAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICByZXR1cm47CisgICAgQmFzZUNsaWNrYWJs
ZVdpdGhLZXlJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihlbGVtZW50KCksIHNlbmRNb3VzZUV2
ZW50cyk7CiB9CiAKIGJvb2wgQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGU6Omlz
TW91c2VGb2N1c2FibGUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJl
dHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJu
IGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwogfQogCiB2b2lkIEJhc2VD
aG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gdmFsdWVBdHRyKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWVsZW1lbnQtPmhhc0RpcnR5VmFsdWUoKSkKLSAgICAgICAgICAgICAgICB1cGRhdGVJbm5l
clRleHRWYWx1ZSgpOworICAgICAgICBpZiAoIWVsZW1lbnQoKS5oYXNEaXJ0eVZhbHVlKCkpIHsK
KyAgICAgICAgICAgIGF1dG8gd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CisgICAgICAg
ICAgICB1cGRhdGVJbm5lclRleHRWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Jhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmNwcAppbmRleCAy
YzRkZDU1ZTliMDM4MDU2NzI4NzM5YWZhYTExMjRkMTBlNTFlZDcxLi45YmVmOGVhMDQzYmZmMmJm
ZTdjMzJlYjU2YmMxOGQyMmRmZjcyNWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Jhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmNwcApAQCAtMzksMjEgKzM5LDIxIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdm9p
ZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEhUTUxJ
bnB1dEVsZW1lbnQmIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQmIGV2ZW50KQordm9pZCBCYXNlQ2xp
Y2thYmxlV2l0aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KFJlZjxIVE1MSW5wdXRF
bGVtZW50PiYmIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIGNvbnN0IFN0
cmluZyYga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcigpOwogICAgIGlmIChrZXkgPT0gIlUrMDAy
MCIpIHsKLSAgICAgICAgZWxlbWVudC5zZXRBY3RpdmUodHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGVs
ZW1lbnQtPnNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKICAgICAgICAgLy8gTm8gc2V0RGVmYXVsdEhh
bmRsZWQoKSwgYmVjYXVzZSBJRSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhpcyBjYXNlCiAg
ICAgICAgIC8vIGFuZCB0aGUgY2FsbGVyIHdpbGwgb25seSBkaXNwYXRjaCBhIGtleXByZXNzIGlm
IHdlIGRvbid0IGNhbGwgc2V0RGVmYXVsdEhhbmRsZWQoKS4KICAgICB9CiB9CiAKLXZvaWQgQmFz
ZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGU6OmhhbmRsZUtleXByZXNzRXZlbnQoSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCwgS2V5Ym9hcmRFdmVudCYgZXZlbnQpCit2b2lkIEJhc2VDbGlja2Fi
bGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50KFJlZjxIVE1MSW5wdXRFbGVt
ZW50PiYmIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIGludCBjaGFyQ29k
ZSA9IGV2ZW50LmNoYXJDb2RlKCk7CiAgICAgaWYgKGNoYXJDb2RlID09ICdccicpIHsKLSAgICAg
ICAgZWxlbWVudC5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKCZldmVudCk7CisgICAgICAgIGVsZW1l
bnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soJmV2ZW50KTsKICAgICAgICAgZXZlbnQuc2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTczLDIxICs3MywxOSBA
QCB2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXl1cEV2ZW50KElu
cHV0VHlwZSYgaW5wdXRUeXBlLCBLZXlibwogfQogCiAvLyBGSVhNRTogQ291bGQgc2hhcmUgdGhp
cyB3aXRoIEJhc2VDaGVja2FibGVJbnB1dFR5cGUgYW5kIFJhbmdlSW5wdXRUeXBlIGlmIHdlIGhh
ZCBhIGNvbW1vbiBiYXNlIGNsYXNzLgotdm9pZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlw
ZTo6YWNjZXNzS2V5QWN0aW9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgc2VuZE1v
dXNlRXZlbnRzKQordm9pZCBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZTo6YWNjZXNzS2V5
QWN0aW9uKFJlZjxIVE1MSW5wdXRFbGVtZW50PiYmIGVsZW1lbnQsIGJvb2wgc2VuZE1vdXNlRXZl
bnRzKQogewotICAgIGVsZW1lbnQuZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygwLCBzZW5kTW91c2VF
dmVudHMgPyBTZW5kTW91c2VVcERvd25FdmVudHMgOiBTZW5kTm9FdmVudHMpOworICAgIGVsZW1l
bnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soMCwgc2VuZE1vdXNlRXZlbnRzID8gU2VuZE1vdXNl
VXBEb3duRXZlbnRzIDogU2VuZE5vRXZlbnRzKTsKIH0KIAogdm9pZCBCYXNlQ2xpY2thYmxlV2l0
aEtleUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQog
ewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGhhbmRsZUtleWRvd25FdmVudCgqZWxlbWVu
dCgpLCBldmVudCk7CisgICAgaGFuZGxlS2V5ZG93bkV2ZW50KGVsZW1lbnQoKSwgZXZlbnQpOwog
fQogCiB2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2
ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IGhhbmRsZUtleXByZXNzRXZlbnQoKmVsZW1lbnQoKSwgZXZlbnQpOworICAgIGhhbmRsZUtleXBy
ZXNzRXZlbnQoZWxlbWVudCgpLCBldmVudCk7CiB9CiAKIHZvaWQgQmFzZUNsaWNrYWJsZVdpdGhL
ZXlJbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCkBAIC05
Nyw5ICs5NSwxMiBAQCB2b2lkIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlOjpoYW5kbGVL
ZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogCiB2b2lkIEJhc2VDbGlja2FibGVXaXRo
S2V5SW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpCiB7Cisg
ICAgYXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsKICAgICBJbnB1dFR5cGU6OmFj
Y2Vzc0tleUFjdGlvbihzZW5kTW91c2VFdmVudHMpOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgIGFjY2Vzc0tleUFjdGlvbigqZWxlbWVudCgpLCBzZW5kTW91c2VFdmVudHMpOworICAgIGlm
ICghd2Vha1RoaXMpCisgICAgICAgIHJldHVybjsKKworICAgIGFjY2Vzc0tleUFjdGlvbihlbGVt
ZW50KCksIHNlbmRNb3VzZUV2ZW50cyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5
cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUu
aAppbmRleCBjYzU0NTcxOTBkNGU0ZGQwOWFhYmU1ZDY2NDk1NzFkOGIwMDU2MGY4Li5kOTQ1Zjg2
NzYwMzY0ZmM5OWNkOWIwZjA0ZWUxOWQ4ZWZjNTNjNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9CYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5oCkBAIC0zNywxMCArMzcs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gQmFzZSBvZiBpbnB1dCB0eXBlcyB0aGF0IGRp
c3BhdGNoZXMgYSBzaW11bGF0ZWQgY2xpY2sgb24gc3BhY2UvcmV0dXJuIGtleS4KIGNsYXNzIEJh
c2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlIDogcHVibGljIElucHV0VHlwZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEhUTUxJbnB1dEVsZW1lbnQmLCBL
ZXlib2FyZEV2ZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgaGFuZGxlS2V5cHJlc3NFdmVudChIVE1M
SW5wdXRFbGVtZW50JiwgS2V5Ym9hcmRFdmVudCYpOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUtl
eWRvd25FdmVudChSZWY8SFRNTElucHV0RWxlbWVudD4mJiwgS2V5Ym9hcmRFdmVudCYpOworICAg
IHN0YXRpYyB2b2lkIGhhbmRsZUtleXByZXNzRXZlbnQoUmVmPEhUTUxJbnB1dEVsZW1lbnQ+JiYs
IEtleWJvYXJkRXZlbnQmKTsKICAgICBzdGF0aWMgdm9pZCBoYW5kbGVLZXl1cEV2ZW50KElucHV0
VHlwZSYsIEtleWJvYXJkRXZlbnQmKTsKLSAgICBzdGF0aWMgdm9pZCBhY2Nlc3NLZXlBY3Rpb24o
SFRNTElucHV0RWxlbWVudCYsIGJvb2wgc2VuZE1vdXNlRXZlbnRzKTsKKyAgICBzdGF0aWMgdm9p
ZCBhY2Nlc3NLZXlBY3Rpb24oUmVmPEhUTUxJbnB1dEVsZW1lbnQ+JiYsIGJvb2wgc2VuZE1vdXNl
RXZlbnRzKTsKICAgICAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBCYXNlQ2xpY2thYmxlV2l0
aEtleUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSA6IElucHV0VHlwZShlbGVt
ZW50KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRU
eXBlLmNwcAppbmRleCA5MDM2ZTc2NDY3NjQ5MDExOGI4OWE4NGQ5ZTg2MjU1OWI4OWEwOGNjLi4x
MzJjMzg4ZjNjNWFkMThlZjdiMjI5NmQ1ODlkNzQxZWNkNjAyZGRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCkBAIC01NywyMiArNTcs
MTkgQEAgZG91YmxlIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dmFsdWVBc0RhdGUoKSBjb25z
dAogCiBFeGNlcHRpb25Pcjx2b2lkPiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldFZhbHVl
QXNEYXRlKGRvdWJsZSB2YWx1ZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBlbGVtZW50KCktPnNldFZhbHVlKHNlcmlhbGl6ZVdpdGhNaWxsaXNlY29uZHModmFsdWUpKTsK
KyAgICBlbGVtZW50KCkuc2V0VmFsdWUoc2VyaWFsaXplV2l0aE1pbGxpc2Vjb25kcyh2YWx1ZSkp
OwogICAgIHJldHVybiB7IH07CiB9CiAKIGRvdWJsZSBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6
OnZhbHVlQXNEb3VibGUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNv
bnN0IERlY2ltYWwgdmFsdWUgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+dmFsdWUoKSwgRGVj
aW1hbDo6bmFuKCkpOworICAgIGNvbnN0IERlY2ltYWwgdmFsdWUgPSBwYXJzZVRvTnVtYmVyKGVs
ZW1lbnQoKS52YWx1ZSgpLCBEZWNpbWFsOjpuYW4oKSk7CiAgICAgcmV0dXJuIHZhbHVlLmlzRmlu
aXRlKCkgPyB2YWx1ZS50b0RvdWJsZSgpIDogRGF0ZUNvbXBvbmVudHM6OmludmFsaWRNaWxsaXNl
Y29uZHMoKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
OjpzZXRWYWx1ZUFzRGVjaW1hbChjb25zdCBEZWNpbWFsJiBuZXdWYWx1ZSwgVGV4dEZpZWxkRXZl
bnRCZWhhdmlvciBldmVudEJlaGF2aW9yKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhh
dmlvcik7CisgICAgZWxlbWVudCgpLnNldFZhbHVlKHNlcmlhbGl6ZShuZXdWYWx1ZSksIGV2ZW50
QmVoYXZpb3IpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTgzLDggKzgwLDcgQEAgYm9vbCBC
YXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmIHZh
bHVlKSBjb25zdAogCiBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6dHlwZU1pc21hdGNo
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gdHlwZU1pc21h
dGNoRm9yKGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHR5cGVNaXNtYXRjaEZvcihl
bGVtZW50KCkudmFsdWUoKSk7CiB9CiAKIERlY2ltYWwgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
OjpkZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdApAQCAtMTAxLDEwICs5Nyw5IEBAIGJvb2wg
QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjppc1N0ZXBwYWJsZSgpIGNvbnN0CiAKIHZvaWQgQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpCiB7Ci0gICAgaWYgKG5hbWUgPT0gbWF4QXR0ciB8fCBuYW1lID09IG1pbkF0dHIp
IHsKLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAgfQorICAgIGlm
IChuYW1lID09IG1heEF0dHIgfHwgbmFtZSA9PSBtaW5BdHRyKQorICAgICAgICBlbGVtZW50KCku
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOworCiAgICAgSW5wdXRUeXBlOjphdHRyaWJ1dGVD
aGFuZ2VkKG5hbWUpOwogfQogCkBAIC0xNDAsOSArMTM1LDggQEAgU3RyaW5nIEJhc2VEYXRlQW5k
VGltZUlucHV0VHlwZTo6c2VyaWFsaXplKGNvbnN0IERlY2ltYWwmIHZhbHVlKSBjb25zdAogCiBT
dHJpbmcgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXJpYWxpemVXaXRoQ29tcG9uZW50cyhj
b25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKICAgICBEZWNpbWFsIHN0ZXA7Ci0gICAgaWYgKCFlbGVtZW50KCktPmdldEFsbG93ZWRWYWx1
ZVN0ZXAoJnN0ZXApKQorICAgIGlmICghZWxlbWVudCgpLmdldEFsbG93ZWRWYWx1ZVN0ZXAoJnN0
ZXApKQogICAgICAgICByZXR1cm4gZGF0ZS50b1N0cmluZygpOwogICAgIGlmIChzdGVwLnJlbWFp
bmRlcihtc2VjUGVyTWludXRlKS5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIGRhdGUudG9TdHJp
bmcoRGF0ZUNvbXBvbmVudHM6Ok5vbmUpOwpAQCAtMTYyLDE1ICsxNTYsMTMgQEAgU3RyaW5nIEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6bG9jYWxpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bv
c2VkVmFsdWUpIGNvbnMKICAgICBpZiAoIXBhcnNlVG9EYXRlQ29tcG9uZW50cyhwcm9wb3NlZFZh
bHVlLCAmZGF0ZSkpCiAgICAgICAgIHJldHVybiBwcm9wb3NlZFZhbHVlOwogCi0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgU3RyaW5nIGxvY2FsaXplZCA9IGVsZW1lbnQoKS0+bG9jYWxlKCku
Zm9ybWF0RGF0ZVRpbWUoZGF0ZSk7CisgICAgU3RyaW5nIGxvY2FsaXplZCA9IGVsZW1lbnQoKS5s
b2NhbGUoKS5mb3JtYXREYXRlVGltZShkYXRlKTsKICAgICByZXR1cm4gbG9jYWxpemVkLmlzRW1w
dHkoKSA/IHByb3Bvc2VkVmFsdWUgOiBsb2NhbGl6ZWQ7CiB9CiAKIFN0cmluZyBCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGU6OnZpc2libGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1l
bnQoKSk7Ci0gICAgcmV0dXJuIGxvY2FsaXplVmFsdWUoZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAg
ICByZXR1cm4gbG9jYWxpemVWYWx1ZShlbGVtZW50KCkudmFsdWUoKSk7CiB9CiAKIFN0cmluZyBC
YXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9w
b3NlZFZhbHVlKSBjb25zdApAQCAtMTkwLDE1ICsxODIsMTMgQEAgYm9vbCBCYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkKIAogYm9vbCBCYXNlRGF0
ZUFuZFRpbWVJbnB1dFR5cGU6OnZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25z
dAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzUmVx
dWlyZWQoKSAmJiB2YWx1ZS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1JlcXVp
cmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQogYm9vbCBC
YXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVu
dCopIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuICFlbGVtZW50
KCktPmlzUmVhZE9ubHkoKSAmJiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxl
KCk7CisgICAgcmV0dXJuICFlbGVtZW50KCkuaXNSZWFkT25seSgpICYmIGVsZW1lbnQoKS5pc1Rl
eHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9CYXNlVGV4dElucHV0VHlwZS5jcHAKaW5kZXggYjM2ODViOTFhOTk3M2I4MzExYjFjYTljYzgw
MDM1ZjVmY2ZlNTFlOC4uODE1YjcxNzc1OTE3OGE1ODMwODkxNDc0ZmFhMjY2Mzk2Mjc1MWRkMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAKQEAgLTQwLDEwICs0
MCw5IEBAIGJvb2wgQmFzZVRleHRJbnB1dFR5cGU6OmlzVGV4dFR5cGUoKSBjb25zdAogCiBib29s
IEJhc2VUZXh0SW5wdXRUeXBlOjpwYXR0ZXJuTWlzbWF0Y2goY29uc3QgU3RyaW5nJiB2YWx1ZSkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGV4ZWN1dGUgUmVnRXhwIHBhcnNlciBmaXJzdCB0byBjaGVjayB2YWxpZGl0eSBpbnN0ZWFkIG9m
IGNyZWF0aW5nIGFuIGFjdHVhbCBSZWd1bGFyRXhwcmVzc2lvbi4KICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzMzYxCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiByYXdQYXR0ZXJuID0gZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHBhdHRlcm5BdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJhd1BhdHRlcm4gPSBl
bGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwYXR0ZXJuQXR0cik7CiAg
ICAgaWYgKHJhd1BhdHRlcm4uaXNOdWxsKCkgfHwgdmFsdWUuaXNFbXB0eSgpIHx8ICFKU0M6Ollh
cnI6OlJlZ3VsYXJFeHByZXNzaW9uKHJhd1BhdHRlcm4sIEpTQzo6WWFycjo6VGV4dENhc2VTZW5z
aXRpdmUsIEpTQzo6WWFycjo6TXVsdGlsaW5lRGlzYWJsZWQsIEpTQzo6WWFycjo6VW5pY29kZUF3
YXJlTW9kZSkuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3RyaW5nIHBh
dHRlcm4gPSAiXig/OiIgKyByYXdQYXR0ZXJuICsgIikkIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9D
aGVja2JveElucHV0VHlwZS5jcHAKaW5kZXggODkzN2U1MzM0ZGJkYmQ0Y2VmYjk1N2IxN2NhMDQw
YTRkNGQ5YjMyMC4uYWFjNGUxY2RkMWMwNDJlODc3OWY5NmY0ZTdhOWM1YzhkMGJkMGY3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiU2NyaXB0RGlzYWxs
b3dlZFNjb3BlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsOCArNDcsNyBAQCBj
b25zdCBBdG9taWNTdHJpbmcmIENoZWNrYm94SW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBj
b25zdAogCiBib29sIENoZWNrYm94SW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5n
JikgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgp
LT5pc1JlcXVpcmVkKCkgJiYgIWVsZW1lbnQoKS0+Y2hlY2tlZCgpOworICAgIHJldHVybiBlbGVt
ZW50KCkuaXNSZXF1aXJlZCgpICYmICFlbGVtZW50KCkuY2hlY2tlZCgpOwogfQogCiBTdHJpbmcg
Q2hlY2tib3hJbnB1dFR5cGU6OnZhbHVlTWlzc2luZ1RleHQoKSBjb25zdApAQCAtNjUsMjYgKzY1
LDI3IEBAIHZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRF
dmVudCYgZXZlbnQpCiAKIHZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNr
KElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotCiAgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdXNlIHByZXZlbnREZWZhdWx0IG9yICJy
ZXR1cm4gZmFsc2UiIHRvIHJldmVyc2UgdGhlIGNoZWNraW5nIHdlIGRvIGhlcmUuCiAgICAgLy8g
VGhlIElucHV0RWxlbWVudENsaWNrU3RhdGUgb2JqZWN0IGNvbnRhaW5zIHdoYXQgd2UgbmVlZCB0
byB1bmRvIHdoYXQgd2UgZGlkIGhlcmUgaW4gZGlkRGlzcGF0Y2hDbGljay4KIAotICAgIHN0YXRl
LmNoZWNrZWQgPSBlbGVtZW50KCktPmNoZWNrZWQoKTsKLSAgICBzdGF0ZS5pbmRldGVybWluYXRl
ID0gZWxlbWVudCgpLT5pbmRldGVybWluYXRlKCk7CisgICAgeworICAgICAgICBTY3JpcHREaXNh
bGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CisKKyAgICAg
ICAgc3RhdGUuY2hlY2tlZCA9IGVsZW1lbnQoKS5jaGVja2VkKCk7CisgICAgICAgIHN0YXRlLmlu
ZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogCi0gICAgaWYgKHN0YXRl
LmluZGV0ZXJtaW5hdGUpCi0gICAgICAgIGVsZW1lbnQoKS0+c2V0SW5kZXRlcm1pbmF0ZShmYWxz
ZSk7CisgICAgICAgIGlmIChzdGF0ZS5pbmRldGVybWluYXRlKQorICAgICAgICAgICAgZWxlbWVu
dCgpLnNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOworICAgIH0KIAotICAgIGVsZW1lbnQoKS0+c2V0
Q2hlY2tlZCghc3RhdGUuY2hlY2tlZCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCk7CisgICAgZWxlbWVu
dCgpLnNldENoZWNrZWQoIXN0YXRlLmNoZWNrZWQsIERpc3BhdGNoQ2hhbmdlRXZlbnQpOwogfQog
CiB2b2lkIENoZWNrYm94SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50JiBldmVudCwg
Y29uc3QgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgc3RhdGUpCiB7CiAgICAgaWYgKGV2ZW50LmRl
ZmF1bHRQcmV2ZW50ZWQoKSB8fCBldmVudC5kZWZhdWx0SGFuZGxlZCgpKSB7Ci0gICAgICAgIEFT
U0VSVChlbGVtZW50KCkpOwotICAgICAgICBlbGVtZW50KCktPnNldEluZGV0ZXJtaW5hdGUoc3Rh
dGUuaW5kZXRlcm1pbmF0ZSk7Ci0gICAgICAgIGVsZW1lbnQoKS0+c2V0Q2hlY2tlZChzdGF0ZS5j
aGVja2VkKTsKKyAgICAgICAgZWxlbWVudCgpLnNldEluZGV0ZXJtaW5hdGUoc3RhdGUuaW5kZXRl
cm1pbmF0ZSk7CisgICAgICAgIGVsZW1lbnQoKS5zZXRDaGVja2VkKHN0YXRlLmNoZWNrZWQpOwog
ICAgIH0KIAogICAgIC8vIFRoZSB3b3JrIHdlIGRpZCBpbiB3aWxsRGlzcGF0Y2hDbGljayB3YXMg
ZGVmYXVsdCBoYW5kbGluZy4KQEAgLTEwMyw4ICsxMDQsNyBAQCBib29sIENoZWNrYm94SW5wdXRU
eXBlOjptYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3QKIAogYm9vbCBDaGVj
a2JveElucHV0VHlwZTo6c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aW5kZXRlcm1pbmF0ZSgp
OworICAgIHJldHVybiBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRU
eXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCmluZGV4IDJh
MTM1Zjk3N2QyZDUyMGYwYzBiNzI3Nzg2ZTVhY2JlZDc2YTljNTkuLjM1NTU0MTRhZGM2NmJiMWYx
N2M2NWU4OTBkNGZiOGEyMzBlODk2ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q29sb3JJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5
cGUuY3BwCkBAIC04MywxOCArODMsMTYgQEAgQ29sb3JJbnB1dFR5cGU6On5Db2xvcklucHV0VHlw
ZSgpCiAKIGJvb2wgQ29sb3JJbnB1dFR5cGU6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1D
b250cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJv
bEZvY3VzYWJsZSgpOwogfQogCiBib29sIENvbG9ySW5wdXRUeXBlOjppc0tleWJvYXJkRm9jdXNh
YmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwogI2lm
IFBMQVRGT1JNKElPUykKLSAgICBpZiAoZWxlbWVudCgpLT5pc1JlYWRPbmx5KCkpCisgICAgaWYg
KGVsZW1lbnQoKS5pc1JlYWRPbmx5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJu
IGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwogI2VuZGlmCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtMTI5LDI5ICsxMjcsMzAgQEAgU3RyaW5nIENvbG9ySW5wdXRUeXBl
OjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKIAogQ29s
b3IgQ29sb3JJbnB1dFR5cGU6OnZhbHVlQXNDb2xvcigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShlbGVtZW50KCktPnZh
bHVlKCkpLnZhbHVlKCk7CisgICAgcmV0dXJuIHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShlbGVtZW50
KCkudmFsdWUoKSkudmFsdWUoKTsKIH0KIAogdm9pZCBDb2xvcklucHV0VHlwZTo6Y3JlYXRlU2hh
ZG93U3VidHJlZSgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVsZW1l
bnQoKS0+c2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7
CiAKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCktPmRvY3VtZW50KCk7CisgICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgYXV0byB3cmFw
cGVyRWxlbWVudCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIHdyYXBw
ZXJFbGVtZW50LT5zZXRQc2V1ZG8oQXRvbWljU3RyaW5nKCItd2Via2l0LWNvbG9yLXN3YXRjaC13
cmFwcGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogICAgIGF1dG8g
Y29sb3JTd2F0Y2ggPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBjb2xv
clN3YXRjaC0+c2V0UHNldWRvKEF0b21pY1N0cmluZygiLXdlYmtpdC1jb2xvci1zd2F0Y2giLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgd3JhcHBlckVsZW1lbnQt
PmFwcGVuZENoaWxkKGNvbG9yU3dhdGNoKTsKLSAgICBlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRv
d1Jvb3QoKS0+YXBwZW5kQ2hpbGQod3JhcHBlckVsZW1lbnQpOworICAgIGVsZW1lbnQoKS51c2Vy
QWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKHdyYXBwZXJFbGVtZW50KTsKIAogICAgIHVw
ZGF0ZUNvbG9yU3dhdGNoKCk7CiB9CiAKIHZvaWQgQ29sb3JJbnB1dFR5cGU6OnNldFZhbHVlKGNv
bnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJlaGF2
aW9yIGV2ZW50QmVoYXZpb3IpCiB7CisgICAgYXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKTsKICAgICBJbnB1dFR5cGU6OnNldFZhbHVlKHZhbHVlLCB2YWx1ZUNoYW5nZWQsIGV2ZW50
QmVoYXZpb3IpOworICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghdmFsdWVDaGFuZ2VkKQogICAgICAgICByZXR1cm47CkBAIC0xNjMsOCArMTYyLDcgQEAgdm9p
ZCBDb2xvcklucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1
ZUNoYW5nZWQsIFRleHRGaWVsZEUKIAogdm9pZCBDb2xvcklucHV0VHlwZTo6aGFuZGxlRE9NQWN0
aXZhdGVFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
aWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgIWVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSkKKyAgICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8ICFl
bGVtZW50KCkucmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFVc2VyR2Vz
dHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCkBAIC0yMDIsMTMgKzIwMCwx
MiBAQCBib29sIENvbG9ySW5wdXRUeXBlOjpzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9u
KCkKIAogdm9pZCBDb2xvcklucHV0VHlwZTo6ZGlkQ2hvb3NlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpIHx8IGNvbG9yID09IHZhbHVlQXNDb2xvcigpKQorICAgIGlmIChl
bGVtZW50KCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgfHwgY29sb3IgPT0gdmFsdWVBc0NvbG9y
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBFdmVudFF1ZXVlU2NvcGUgc2NvcGU7Ci0gICAgZWxl
bWVudCgpLT5zZXRWYWx1ZUZyb21SZW5kZXJlcihjb2xvci5zZXJpYWxpemVkKCkpOworICAgIGVs
ZW1lbnQoKS5zZXRWYWx1ZUZyb21SZW5kZXJlcihjb2xvci5zZXJpYWxpemVkKCkpOwogICAgIHVw
ZGF0ZUNvbG9yU3dhdGNoKCk7Ci0gICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hh
bmdlRXZlbnQoKTsKKyAgICBlbGVtZW50KCkuZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50
KCk7CiB9CiAKIHZvaWQgQ29sb3JJbnB1dFR5cGU6OmRpZEVuZENob29zZXIoKQpAQCAtMjI4LDE0
ICsyMjUsMTIgQEAgdm9pZCBDb2xvcklucHV0VHlwZTo6dXBkYXRlQ29sb3JTd2F0Y2goKQogICAg
IGlmICghY29sb3JTd2F0Y2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIGNvbG9yU3dhdGNoLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yLCBlbGVtZW50KCktPnZhbHVlKCksIGZhbHNlKTsKKyAgICBjb2xvclN3
YXRjaC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwg
ZWxlbWVudCgpLnZhbHVlKCksIGZhbHNlKTsKIH0KIAogSFRNTEVsZW1lbnQqIENvbG9ySW5wdXRU
eXBlOjpzaGFkb3dDb2xvclN3YXRjaCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7
Ci0gICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoYWRvdyA9IGVsZW1lbnQoKS0+dXNlckFnZW50U2hh
ZG93Um9vdCgpOworICAgIFJlZlB0cjxTaGFkb3dSb290PiBzaGFkb3cgPSBlbGVtZW50KCkudXNl
ckFnZW50U2hhZG93Um9vdCgpOwogICAgIGlmICghc2hhZG93KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApAQCAtMjQ4LDEwICsyNDMsOSBAQCBIVE1MRWxlbWVudCogQ29sb3JJbnB1dFR5cGU6
OnNoYWRvd0NvbG9yU3dhdGNoKCkgY29uc3QKIAogSW50UmVjdCBDb2xvcklucHV0VHlwZTo6ZWxl
bWVudFJlY3RSZWxhdGl2ZVRvUm9vdFZpZXcoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIGlmICghZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgIGlmICghZWxlbWVudCgp
LnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIGVsZW1l
bnQoKS0+ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCktPnJl
bmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOworICAgIHJldHVybiBlbGVtZW50
KCkuZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCkucmVuZGVy
ZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiB9CiAKIENvbG9yIENvbG9ySW5wdXRU
eXBlOjpjdXJyZW50Q29sb3IoKQpAQCAtMjYyLDggKzI1Niw3IEBAIENvbG9yIENvbG9ySW5wdXRU
eXBlOjpjdXJyZW50Q29sb3IoKQogYm9vbCBDb2xvcklucHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dl
c3Rpb25zKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGxpc3RBdHRyKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmhhc0F0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obGlzdEF0dHIpOwogI2Vsc2UKICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKQEAgLTI3Myw4ICsyNjYsNyBAQCBWZWN0b3I8Q29sb3I+IENvbG9ySW5w
dXRUeXBlOjpzdWdnZXN0aW9ucygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENvbG9yPiBzdWdnZXN0
aW9uczsKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICBpZiAoYXV0byBkYXRhTGlzdCA9IGVsZW1lbnQoKS0+ZGF0YUxpc3QoKSkgeworICAg
IGlmIChhdXRvIGRhdGFMaXN0ID0gZWxlbWVudCgpLmRhdGFMaXN0KCkpIHsKICAgICAgICAgUmVm
PEhUTUxDb2xsZWN0aW9uPiBvcHRpb25zID0gZGF0YUxpc3QtPm9wdGlvbnMoKTsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gb3B0aW9ucy0+bGVuZ3RoKCk7CiAgICAgICAgIHN1Z2dlc3Rpb25z
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1
dFR5cGUuY3BwCmluZGV4IGM4NDhhODdkYzY3MGE3OWJiOWE3ODkxOGQwMzIwMzY3MTJjZDY2OWMu
LjNiNTQ4Mzk2MDU1NDMxM2UyZTYxYTlmMTllNDliNDY5N2M5MjE0NzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9EYXRlSW5wdXRUeXBlLmNwcApAQCAtNjIsMTEgKzYyLDEwIEBAIERhdGVDb21wb25lbnRz
OjpUeXBlIERhdGVJbnB1dFR5cGU6OmRhdGVUeXBlKCkgY29uc3QKIAogU3RlcFJhbmdlIERhdGVJ
bnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZShBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW5n
KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IERlY2ltYWwgc3Rl
cEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihtaW5BdHRyKSwgMCk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VU
b051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0
ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlKCkpKTsK
LSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJs
ZShEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgc3Rl
cCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgZGF0ZVN0ZXBEZXNjcmlw
dGlvbiwgZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRy
KSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgp
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIDApOworICAgIGNvbnN0
IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBv
bmVudHM6Om1pbmltdW1EYXRlKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJz
ZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0
dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVtRGF0ZSgpKSk7
CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhh
bmRsaW5nLCBkYXRlU3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2Us
IFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBkYXRlU3Rl
cERlc2NyaXB0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRl
VGltZUxvY2FsSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZVRpbWVMb2Nh
bElucHV0VHlwZS5jcHAKaW5kZXggN2NhYzFkOWNiZDYzM2I5NTQxOWI4ZTFmYmYyMWI5ZTIxNjEz
Yzk4ZC4uZjI4MWY0YTA2MmRlNWI0MGY4MDU2NTQyZTdkNzcwNDc4YmM1Njk0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3BwCkBAIC03MCwxMSAr
NzAsMTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRGF0ZVRpbWVMb2NhbElucHV0VHlwZTo6c2V0VmFs
dWVBc0RhdGUoZG91YmxlIHZhbHVlKSBjb25zdAogCiBTdGVwUmFuZ2UgRGF0ZVRpbWVMb2NhbElu
cHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVw
QmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKG1pbkF0dHIpLCAwKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRy
KSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bURhdGVUaW1lKCkp
KTsKLSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURv
dWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpKTsKLSAgICBjb25zdCBEZWNp
bWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIGRhdGVUaW1l
TG9jYWxTdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihzdGVwQXR0cikpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIp
LCAwKTsKKyAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQo
KS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9t
RG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtRGF0ZVRpbWUoKSkpOworICAgIGNvbnN0IERl
Y2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVu
dHM6Om1heGltdW1EYXRlVGltZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJh
bmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBkYXRlVGltZUxvY2FsU3RlcERlc2NyaXB0
aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikp
OwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlk
LCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBkYXRlVGltZUxvY2FsU3RlcERlc2NyaXB0aW9uKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9FbWFpbElucHV0VHlwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmNwcAppbmRleCA0MjU1MzY5Mzk4
OGI5M2RkMWI1OTAzZjMyMTE4MWRmOTkyMTI5M2FlLi5kZTMyMGIzMzkyYjllNTE5ZWY5NGYzYzJm
YWJkMDRlNjgwZDA3ODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5w
dXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmNwcApA
QCAtNTksMTAgKzU5LDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbWFpbElucHV0VHlwZTo6Zm9y
bUNvbnRyb2xUeXBlKCkgY29uc3QKIAogYm9vbCBFbWFpbElucHV0VHlwZTo6dHlwZU1pc21hdGNo
Rm9yKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7
CiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghZWxlbWVudCgpLT5tdWx0aXBsZSgpKQorICAgIGlmICghZWxlbWVudCgpLm11bHRpcGxlKCkp
CiAgICAgICAgIHJldHVybiAhaXNWYWxpZEVtYWlsQWRkcmVzcyh2YWx1ZSk7CiAgICAgZm9yIChh
dXRvJiBhZGRyZXNzIDogdmFsdWUuc3BsaXRBbGxvd2luZ0VtcHR5RW50cmllcygnLCcpKSB7CiAg
ICAgICAgIGlmICghaXNWYWxpZEVtYWlsQWRkcmVzcyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hU
TUxTcGFjZXMoYWRkcmVzcykpKQpAQCAtNzMsMTQgKzcyLDEyIEBAIGJvb2wgRW1haWxJbnB1dFR5
cGU6OnR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogCiBib29sIEVt
YWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2goKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIHJldHVybiB0eXBlTWlzbWF0Y2hGb3IoZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAg
ICByZXR1cm4gdHlwZU1pc21hdGNoRm9yKGVsZW1lbnQoKS52YWx1ZSgpKTsKIH0KIAogU3RyaW5n
IEVtYWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hUZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5tdWx0aXBsZSgpID8gdmFsaWRhdGlv
bk1lc3NhZ2VUeXBlTWlzbWF0Y2hGb3JNdWx0aXBsZUVtYWlsVGV4dCgpIDogdmFsaWRhdGlvbk1l
c3NhZ2VUeXBlTWlzbWF0Y2hGb3JFbWFpbFRleHQoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLm11
bHRpcGxlKCkgPyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxU
ZXh0KCkgOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpOwogfQog
CiBib29sIEVtYWlsSW5wdXRUeXBlOjppc0VtYWlsRmllbGQoKSBjb25zdApAQCAtOTYsOCArOTMs
NyBAQCBib29sIEVtYWlsSW5wdXRUeXBlOjpzdXBwb3J0c1NlbGVjdGlvbkFQSSgpIGNvbnN0CiBT
dHJpbmcgRW1haWxJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3Nl
ZFZhbHVlKSBjb25zdAogewogICAgIFN0cmluZyBub0xpbmVCcmVha1ZhbHVlID0gcHJvcG9zZWRW
YWx1ZS5yZW1vdmVDaGFyYWN0ZXJzKGlzSFRNTExpbmVCcmVhayk7Ci0gICAgQVNTRVJUKGVsZW1l
bnQoKSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPm11bHRpcGxlKCkpCisgICAgaWYgKCFlbGVtZW50
KCkubXVsdGlwbGUoKSkKICAgICAgICAgcmV0dXJuIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRN
TFNwYWNlcyhub0xpbmVCcmVha1ZhbHVlKTsKICAgICBWZWN0b3I8U3RyaW5nPiBhZGRyZXNzZXMg
PSBub0xpbmVCcmVha1ZhbHVlLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJywnKTsKICAgICBT
dHJpbmdCdWlsZGVyIHN0cmlwcGVkVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcAppbmRleCAwM2FmM2E5NjM0OTRmYWYwMDEyZTIxYTkzOGY1MTkxNzgwMzA4NTA4Li42OGM1
MTM0NDVlMGU1NDcwYzU3NzE1NTA5NTQ5NTk5Y2IzYWU0NDM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RmlsZUlucHV0VHlwZS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMb2NhbGl6ZWRT
dHJpbmdzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNj
b3BlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAj
aW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKQEAgLTE1MywxMSArMTU0LDEwIEBAIHZv
aWQgRmlsZUlucHV0VHlwZTo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRy
b2xTdGF0ZSYgc3RhdGUpCiAKIGJvb2wgRmlsZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9N
Rm9ybURhdGEmIGZvcm1EYXRhLCBib29sIG11bHRpcGFydCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICBhdXRvIGZpbGVMaXN0ID0gbWFrZVJlZlB0cihlbGVtZW50KCktPmZp
bGVzKCkpOworICAgIGF1dG8gZmlsZUxpc3QgPSBtYWtlUmVmUHRyKGVsZW1lbnQoKS5maWxlcygp
KTsKICAgICBBU1NFUlQoZmlsZUxpc3QpOwogCi0gICAgYXV0byBuYW1lID0gZWxlbWVudCgpLT5u
YW1lKCk7CisgICAgYXV0byBuYW1lID0gZWxlbWVudCgpLm5hbWUoKTsKIAogICAgIGlmICghbXVs
dGlwYXJ0KSB7CiAgICAgICAgIC8vIFNlbmQgb25seSB0aGUgYmFzZW5hbWVzLgpAQCAtMTg3LDIw
ICsxODcsMTcgQEAgYm9vbCBGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0
YSYgZm9ybURhdGEsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAogCiBib29sIEZpbGVJbnB1dFR5cGU6
OnZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmlzUmVxdWlyZWQoKSAmJiB2YWx1ZS5p
c0VtcHR5KCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc1JlcXVpcmVkKCkgJiYgdmFsdWUuaXNF
bXB0eSgpOwogfQogCiBTdHJpbmcgRmlsZUlucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4dCgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+bXVs
dGlwbGUoKSA/IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yTXVsdGlwbGVGaWxlVGV4
dCgpIDogdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpOworICAgIHJl
dHVybiBlbGVtZW50KCkubXVsdGlwbGUoKSA/IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5n
Rm9yTXVsdGlwbGVGaWxlVGV4dCgpIDogdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JG
aWxlVGV4dCgpOwogfQogCiB2b2lkIEZpbGVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZl
bnQoRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGF1dG8mIGlu
cHV0ID0gKmVsZW1lbnQoKTsKKyAgICBhdXRvJiBpbnB1dCA9IGVsZW1lbnQoKTsKIAogICAgIGlm
IChpbnB1dC5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3
LDggKzIyNCw3IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChF
dmVudCYgZXZlbnQpCiAKIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBGaWxlSW5wdXRUeXBlOjpj
cmVhdGVJbnB1dFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZpbGVVcGxvYWRDb250
cm9sPigqZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSk7CisgICAgcmV0dXJuIGNyZWF0ZVJlbmRl
cmVyPFJlbmRlckZpbGVVcGxvYWRDb250cm9sPihlbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsK
IH0KIAogYm9vbCBGaWxlSW5wdXRUeXBlOjpjYW5TZXRTdHJpbmdWYWx1ZSgpIGNvbnN0CkBAIC0y
NzIsOCArMjY4LDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcm
LCBib29sLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yKQogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
Y2xlYXIgdGhlIGZpbGUgbGlzdCwgb3IgcmVwbGFjZSBpdCB3aXRoIGEgbmV3IGVtcHR5IG9uZSBo
ZXJlPyBUaGlzIGlzIG9ic2VydmFibGUgZnJvbSBKYXZhU2NyaXB0IHRocm91Z2ggY3VzdG9tIHBy
b3BlcnRpZXMuCiAgICAgbV9maWxlTGlzdC0+Y2xlYXIoKTsKICAgICBtX2ljb24gPSBudWxscHRy
OwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOworICAgIGVsZW1lbnQoKS5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7
CiB9CiAKIGJvb2wgRmlsZUlucHV0VHlwZTo6aXNGaWxlVXBsb2FkKCkgY29uc3QKQEAgLTI4Mywz
MiArMjc4LDMyIEBAIGJvb2wgRmlsZUlucHV0VHlwZTo6aXNGaWxlVXBsb2FkKCkgY29uc3QKIAog
dm9pZCBGaWxlSW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFkb3dSb290KCkpOwotICAgIGVs
ZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChlbGVtZW50KCktPm11
bHRpcGxlKCkgPyBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGVGb3JNdWx0aXBsZShlbGVtZW50
KCktPmRvY3VtZW50KCkpOiBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5k
b2N1bWVudCgpKSk7CisgICAgQVNTRVJUKGVsZW1lbnQoKS5zaGFkb3dSb290KCkpOworICAgIGVs
ZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKGVsZW1lbnQoKS5tdWx0
aXBsZSgpID8gVXBsb2FkQnV0dG9uRWxlbWVudDo6Y3JlYXRlRm9yTXVsdGlwbGUoZWxlbWVudCgp
LmRvY3VtZW50KCkpOiBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLmRvY3Vt
ZW50KCkpKTsKIH0KIAogdm9pZCBGaWxlSW5wdXRUeXBlOjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCgp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93
Um9vdCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAKLSAgICBhdXRv
IHJvb3QgPSBlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBhdXRvIHJvb3Qg
PSBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIGlmICghcm9vdCkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmIChhdXRvIGJ1dHRvbiA9IG1ha2VSZWZQdHIoY2hpbGRy
ZW5PZlR5cGU8VXBsb2FkQnV0dG9uRWxlbWVudD4oKnJvb3QpLmZpcnN0KCkpKQotICAgICAgICBi
dXR0b24tPnNldEJvb2xlYW5BdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBlbGVtZW50KCktPmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpKTsKKyAgICAgICAgYnV0dG9uLT5zZXRCb29sZWFuQXR0cmlidXRl
KGRpc2FibGVkQXR0ciwgZWxlbWVudCgpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKTsKIH0KIAog
dm9pZCBGaWxlSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gbXVsdGlwbGVBdHRyKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxl
bWVudC0+c2hhZG93Um9vdCgpKTsKLSAgICAgICAgICAgIGlmIChhdXRvIHJvb3QgPSBlbGVtZW50
LT51c2VyQWdlbnRTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBidXR0
b24gPSBtYWtlUmVmUHRyKGNoaWxkcmVuT2ZUeXBlPFVwbG9hZEJ1dHRvbkVsZW1lbnQ+KCpyb290
KS5maXJzdCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uLT5zZXRWYWx1ZShlbGVtZW50
LT5tdWx0aXBsZSgpID8gZmlsZUJ1dHRvbkNob29zZU11bHRpcGxlRmlsZXNMYWJlbCgpIDogZmls
ZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpKTsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQoKS5zaGFk
b3dSb290KCkpOworICAgICAgICBpZiAoYXV0byByb290ID0gZWxlbWVudCgpLnVzZXJBZ2VudFNo
YWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gYnV0dG9uID0gbWFrZVJlZlB0cihj
aGlsZHJlbk9mVHlwZTxVcGxvYWRCdXR0b25FbGVtZW50Pigqcm9vdCkuZmlyc3QoKSkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOworICAgICAg
ICAgICAgICAgIGJ1dHRvbi0+c2V0VmFsdWUoZWxlbWVudCgpLm11bHRpcGxlKCkgPyBmaWxlQnV0
dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVsKCkgOiBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVs
KCkpOworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM0OSw4ICszNDQs
NyBAQCBib29sIEZpbGVJbnB1dFR5cGU6OmFsbG93c0RpcmVjdG9yaWVzKCkgY29uc3QKIHsKICAg
ICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZGlyZWN0b3J5
VXBsb2FkRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKGVsZW1l
bnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbih3ZWJraXRkaXJlY3RvcnlBdHRyKTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmhhc0F0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24od2Via2l0ZGlyZWN0b3J5QXR0cik7CiB9CiAK
IHZvaWQgRmlsZUlucHV0VHlwZTo6c2V0RmlsZXMoUmVmUHRyPEZpbGVMaXN0PiYmIGZpbGVzKQpA
QCAtMzYzLDQ1ICszNTcsNTAgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRGaWxlcyhSZWZQdHI8
RmlsZUxpc3Q+JiYgZmlsZXMsIFJlcXVlc3RJY29uIHNob3VsZFJlcXVlc3QKICAgICBpZiAoIWZp
bGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBSZWY8
SFRNTElucHV0RWxlbWVudD4gcHJvdGVjdGVkSW5wdXRFbGVtZW50KCplbGVtZW50KCkpOwotCi0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gZmlsZXMtPmxlbmd0aCgpOwotCiAgICAgYm9vbCBwYXRoc0No
YW5nZWQgPSBmYWxzZTsKLSAgICBpZiAobGVuZ3RoICE9IG1fZmlsZUxpc3QtPmxlbmd0aCgpKQot
ICAgICAgICBwYXRoc0NoYW5nZWQgPSB0cnVlOwotICAgIGVsc2UgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChmaWxlcy0+
ZmlsZShpKS5wYXRoKCkgIT0gbV9maWxlTGlzdC0+ZmlsZShpKS5wYXRoKCkpIHsKLSAgICAgICAg
ICAgICAgICBwYXRoc0NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
IHsKKyAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlz
YWxsb3dlZFNjb3BlOworICAgICAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gcHJvdGVjdGVkSW5w
dXRFbGVtZW50KGVsZW1lbnQoKSk7CisKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZmlsZXMt
Pmxlbmd0aCgpOworCisgICAgICAgIGlmIChsZW5ndGggIT0gbV9maWxlTGlzdC0+bGVuZ3RoKCkp
CisgICAgICAgICAgICBwYXRoc0NoYW5nZWQgPSB0cnVlOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmIChmaWxlcy0+ZmlsZShpKS5wYXRoKCkgIT0gbV9maWxlTGlzdC0+ZmlsZShpKS5w
YXRoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0aHNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgfQogCi0gICAgbV9maWxlTGlzdCA9IGZpbGVzLnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgIG1fZmlsZUxpc3QgPSBmaWxlcy5yZWxlYXNlTm9uTnVsbCgpOwogCi0gICAg
cHJvdGVjdGVkSW5wdXRFbGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVy
KHRydWUpOwotICAgIHByb3RlY3RlZElucHV0RWxlbWVudC0+dXBkYXRlVmFsaWRpdHkoKTsKKyAg
ICAgICAgcHJvdGVjdGVkSW5wdXRFbGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKHRydWUpOworICAgICAgICBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPnVwZGF0ZVZhbGlk
aXR5KCk7CiAKLSAgICBpZiAoc2hvdWxkUmVxdWVzdEljb24gPT0gUmVxdWVzdEljb246Olllcykg
ewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAgICAgICAgcGF0aHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBtX2ZpbGVM
aXN0LT5maWxlcygpKQotICAgICAgICAgICAgcGF0aHMudW5jaGVja2VkQXBwZW5kKGZpbGUtPnBh
dGgoKSk7Ci0gICAgICAgIHJlcXVlc3RJY29uKHBhdGhzKTsKLSAgICB9CisgICAgICAgIGlmIChz
aG91bGRSZXF1ZXN0SWNvbiA9PSBSZXF1ZXN0SWNvbjo6WWVzKSB7CisgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBwYXRoczsKKyAgICAgICAgICAgIHBhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6IG1fZmlsZUxpc3QtPmZp
bGVzKCkpCisgICAgICAgICAgICAgICAgcGF0aHMudW5jaGVja2VkQXBwZW5kKGZpbGUtPnBhdGgo
KSk7CisgICAgICAgICAgICByZXF1ZXN0SWNvbihwYXRocyk7CisgICAgICAgIH0KIAotICAgIGlm
IChwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHByb3RlY3RlZElu
cHV0RWxlbWVudC0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgICAgICBpZiAocHJvdGVjdGVk
SW5wdXRFbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcHJvdGVjdGVkSW5wdXRFbGVt
ZW50LT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgfQogCiAgICAgaWYgKHBhdGhzQ2hhbmdl
ZCkgewogICAgICAgICAvLyBUaGlzIGNhbGwgbWF5IGNhdXNlIGRlc3RydWN0aW9uIG9mIHRoaXMg
aW5zdGFuY2UuCiAgICAgICAgIC8vIGlucHV0IGluc3RhbmNlIGlzIHNhZmUgc2luY2UgaXQgaXMg
cmVmLWNvdW50ZWQuCi0gICAgICAgIHByb3RlY3RlZElucHV0RWxlbWVudC0+ZGlzcGF0Y2hDaGFu
Z2VFdmVudCgpOworICAgICAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOwor
ICAgICAgICBlbGVtZW50KCkuZGlzcGF0Y2hDaGFuZ2VFdmVudCgpOworICAgICAgICBpZiAoIXdl
YWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwcm90ZWN0ZWRJbnB1dEVs
ZW1lbnQtPnNldENoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGZhbHNlKTsK
KyAgICBlbGVtZW50KCkuc2V0Q2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQo
ZmFsc2UpOwogfQogCiB2b2lkIEZpbGVJbnB1dFR5cGU6OmZpbGVzQ2hvc2VuKGNvbnN0IFZlY3Rv
cjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgcGF0aHMsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmlu
ZywgSWNvbiogaWNvbikKQEAgLTQzNCw4ICs0MzMsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omlj
b25Mb2FkZWQoUmVmUHRyPEljb24+JiYgaWNvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9p
Y29uID0gV1RGTW92ZShpY29uKTsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoYXV0
byogcmVuZGVyZXIgPSBlbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gZWxlbWVudCgpLnJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KCk7
CiB9CiAKQEAgLTQ0Niw4ICs0NDQsNyBAQCBib29sIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9w
cGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlmIChwYXRocy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IGlmIChlbGVtZW50KCktPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlw
bGVBdHRyKSkgeworICAgIGlmIChlbGVtZW50KCkuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihtdWx0aXBsZUF0dHIpKSB7CiAgICAgICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJ
bmZvPiBmaWxlczsKICAgICAgICAgZmlsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5z
aXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykKQEAgLTQ3MCw4ICs0Njcs
NyBAQCBTdHJpbmcgRmlsZUlucHV0VHlwZTo6ZGVmYXVsdFRvb2xUaXAoKSBjb25zdAogewogICAg
IHVuc2lnbmVkIGxpc3RTaXplID0gbV9maWxlTGlzdC0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsaXN0
U2l6ZSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQo
KS0+bXVsdGlwbGUoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQoKS5tdWx0aXBsZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpOwogICAgICAgICBy
ZXR1cm4gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBiMWZmMTJkOTZhNTlmZGI0ZDEzZDAx
MTQ0MjQ1YTMyYzgxMTNjZWJiLi44YTA3YzAzODA5YTk1YTQzNWU2OGIxZjk3Y2JkMDA0ZTg2MGY3
N2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTE1Myw4
ICsxNTMsNyBAQCBIVE1MSW1hZ2VMb2FkZXImIEhUTUxJbnB1dEVsZW1lbnQ6OmVuc3VyZUltYWdl
TG9hZGVyKCkKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dS
b290KFNoYWRvd1Jvb3QmKQogewotICAgIFJlZjxJbnB1dFR5cGU+IHByb3RlY3RlZElucHV0VHlw
ZSgqbV9pbnB1dFR5cGUpOwotICAgIHByb3RlY3RlZElucHV0VHlwZS0+Y3JlYXRlU2hhZG93U3Vi
dHJlZSgpOworICAgIG1faW5wdXRUeXBlLT5jcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CiAgICAgdXBk
YXRlSW5uZXJUZXh0RWxlbWVudEVkaXRhYmlsaXR5KCk7CiB9CiAKQEAgLTYzMSw4ICs2MzAsNyBA
QCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmNhbkhhdmVTZWxlY3Rpb24oKSBjb25zdAogCiB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRNb3VzZUV2ZW50cykK
IHsKLSAgICBSZWY8SW5wdXRUeXBlPiBwcm90ZWN0ZWRJbnB1dFR5cGUoKm1faW5wdXRUeXBlKTsK
LSAgICBwcm90ZWN0ZWRJbnB1dFR5cGUtPmFjY2Vzc0tleUFjdGlvbihzZW5kTW91c2VFdmVudHMp
OworICAgIG1faW5wdXRUeXBlLT5hY2Nlc3NLZXlBY3Rpb24oc2VuZE1vdXNlRXZlbnRzKTsKIH0K
IAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdApAQCAtNjg5LDcgKzY4Nyw2IEBAIGlubGluZSB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OmluaXRpYWxpemVJbnB1dFR5cGUoKQogdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIEFTU0VSVChtX2lucHV0VHlwZSk7Ci0gICAgUmVm
PElucHV0VHlwZT4gcHJvdGVjdGVkSW5wdXRUeXBlKCptX2lucHV0VHlwZSk7CiAKICAgICBpZiAo
bmFtZSA9PSBuYW1lQXR0cikgewogICAgICAgICByZW1vdmVGcm9tUmFkaW9CdXR0b25Hcm91cCgp
OwpAQCAtODc5LDcgKzg3Niw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0QWN0aXZhdGVk
U3VibWl0KGJvb2wgZmxhZykKIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphcHBlbmRGb3JtRGF0
YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgbXVsdGlwYXJ0KQogewotICAgIFJlZjxJbnB1
dFR5cGU+IHByb3RlY3RlZElucHV0VHlwZSgqbV9pbnB1dFR5cGUpOwogICAgIHJldHVybiBtX2lu
cHV0VHlwZS0+aXNGb3JtRGF0YUFwcGVuZGFibGUoKSAmJiBtX2lucHV0VHlwZS0+YXBwZW5kRm9y
bURhdGEoZm9ybURhdGEsIG11bHRpcGFydCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmgKaW5kZXggMzcyOWI4OWUyN2Q4Y2EyZTkzOWMwMGYyMDgxZjk3YTJiNTAzNjEw
Mi4uNjcwMTllZmE4YzQyN2Y0ODRhZjVlMTZiMDA5NjQwOGEwMTc1ZTJlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAgc3RydWN0IElucHV0
RWxlbWVudENsaWNrU3RhdGUgewogICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBjaGVja2Vk
UmFkaW9CdXR0b247CiB9OwogCi1jbGFzcyBIVE1MSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SFRNTElucHV0RWxl
bWVudD4geworY2xhc3MgSFRNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChIVE1MSW5wdXRFbGVtZW50
KTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0
ZWRCeVBhcnNlcik7CkBAIC00NzUsNyArNDc1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFz
VG91Y2hFdmVudEhhbmRsZXIgOiAxOwogI2VuZGlmCiAgICAgYm9vbCBtX2lzU3BlbGxjaGVja0Rp
c2FibGVkRXhjZXB0VGV4dFJlcGxhY2VtZW50IDogMTsKLSAgICBSZWZQdHI8SW5wdXRUeXBlPiBt
X2lucHV0VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5wdXRUeXBlPiBtX2lucHV0VHlwZTsK
ICAgICAvLyBUaGUgSW1hZ2VMb2FkZXIgbXVzdCBiZSBvd25lZCBieSB0aGlzIGVsZW1lbnQgYmVj
YXVzZSB0aGUgbG9hZGVyIGNvZGUgYXNzdW1lcwogICAgIC8vIHRoYXQgaXQgbGl2ZXMgYXMgbG9u
ZyBhcyBpdHMgb3duaW5nIGVsZW1lbnQgbGl2ZXMuIElmIHdlIG1vdmUgdGhlIGxvYWRlciBpbnRv
CiAgICAgLy8gdGhlIEltYWdlSW5wdXQgb2JqZWN0IHdlIG1heSBkZWxldGUgdGhlIGxvYWRlciB3
aGlsZSB0aGlzIGVsZW1lbnQgbGl2ZXMgb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hpZGRlbklucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0
VHlwZS5jcHAKaW5kZXggYTg4MmM4ZmM1OTM5NDgzMWVjODA0YWZhMmM5Yzc2YjAxZTdiYjc2Ni4u
Njk3MDZlMjVhODBkMjE0MjQxY2E2Y2JkMmZkNjZkYWRhMzdlZDdjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcApAQCAtNTIsMTQgKzUyLDEyIEBAIEZvcm1Db250cm9s
U3RhdGUgSGlkZGVuSW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0CiB7CiAg
ICAgLy8gdmFsdWVBdHRyaWJ1dGVXYXNVcGRhdGVkQWZ0ZXJQYXJzaW5nKCkgbmV2ZXIgYmUgdHJ1
ZSBmb3IgZm9ybSBjb250cm9scyBjcmVhdGUgYnkgY3JlYXRlRWxlbWVudCgpIG9yIGNsb25lTm9k
ZSgpLgogICAgIC8vIEl0J3MgT0sgZm9yIG5vdyBiZWNhdXNlIHdlIHJlc3RvcmUgdmFsdWVzIG9u
bHkgdG8gZm9ybSBjb250cm9scyBjcmVhdGVkIGJ5IHBhcnNpbmcuCi0gICAgQVNTRVJUKGVsZW1l
bnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+dmFsdWVBdHRyaWJ1dGVXYXNVcGRhdGVkQWZ0
ZXJQYXJzaW5nKCkgPyBGb3JtQ29udHJvbFN0YXRlIHsgeyBlbGVtZW50KCktPnZhbHVlKCkgfSB9
IDogRm9ybUNvbnRyb2xTdGF0ZSB7IH07CisgICAgcmV0dXJuIGVsZW1lbnQoKS52YWx1ZUF0dHJp
YnV0ZVdhc1VwZGF0ZWRBZnRlclBhcnNpbmcoKSA/IEZvcm1Db250cm9sU3RhdGUgeyB7IGVsZW1l
bnQoKS52YWx1ZSgpIH0gfSA6IEZvcm1Db250cm9sU3RhdGUgeyB9OwogfQogCiB2b2lkIEhpZGRl
bklucHV0VHlwZTo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc3RhdGVbMF0pOworICAg
IGVsZW1lbnQoKS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwg
c3RhdGVbMF0pOwogfQogCiBib29sIEhpZGRlbklucHV0VHlwZTo6c3VwcG9ydHNWYWxpZGF0aW9u
KCkgY29uc3QKQEAgLTg5LDggKzg3LDcgQEAgYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnN0b3Jlc1Zh
bHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkKIAogdm9pZCBIaWRkZW5JbnB1dFR5cGU6OnNldFZh
bHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wsIFRleHRGaWVsZEV2ZW50QmVo
YXZpb3IpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUpOwor
ICAgIGVsZW1lbnQoKS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0
ciwgc2FuaXRpemVkVmFsdWUpOwogfQogCiBib29sIEhpZGRlbklucHV0VHlwZTo6aXNIaWRkZW5U
eXBlKCkgY29uc3QKQEAgLTEwMCw4ICs5Nyw3IEBAIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjppc0hp
ZGRlblR5cGUoKSBjb25zdAogCiBib29sIEhpZGRlbklucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEo
RE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sIGlzTXVsdGlwYXJ0Rm9ybSkgY29uc3QKIHsKLSAg
ICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBhdXRvIG5hbWUgPSBlbGVtZW50KCktPm5hbWUoKTsK
KyAgICBhdXRvIG5hbWUgPSBlbGVtZW50KCkubmFtZSgpOwogCiAgICAgaWYgKGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UobmFtZSwgIl9jaGFyc2V0XyIpKSB7CiAgICAgICAgIGZvcm1EYXRhLmFwcGVu
ZChuYW1lLCBTdHJpbmcgeyBmb3JtRGF0YS5lbmNvZGluZygpLm5hbWUoKSB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKaW5kZXggMmIwZjFlZDY2ODI4ZjEyNmE3ZTE1OWEw
NGIxY2JhOGMwOGM1YWFhMC4uMmEyY2RhYzU4OWVkOGFlNjlmYjhkNmY4ZDZhZTQ2NDM2ZGRhNDVj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKQEAgLTU2LDExICs1Niwx
MCBAQCBib29sIEltYWdlSW5wdXRUeXBlOjppc0Zvcm1EYXRhQXBwZW5kYWJsZSgpIGNvbnN0CiAK
IGJvb2wgSW1hZ2VJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0
YSwgYm9vbCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1l
bnQoKS0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5pc0FjdGl2YXRl
ZFN1Ym1pdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBuYW1lID0gZWxl
bWVudCgpLT5uYW1lKCk7CisgICAgYXV0byYgbmFtZSA9IGVsZW1lbnQoKS5uYW1lKCk7CiAgICAg
aWYgKG5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgieCJfcywgU3Ry
aW5nOjpudW1iZXIobV9jbGlja0xvY2F0aW9uLngoKSkpOwogICAgICAgICBmb3JtRGF0YS5hcHBl
bmQoInkiX3MsIFN0cmluZzo6bnVtYmVyKG1fY2xpY2tMb2NhdGlvbi55KCkpKTsKQEAgLTcwLDcg
KzY5LDcgQEAgYm9vbCBJbWFnZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEm
IGZvcm1EYXRhLCBib29sKSBjb25zdAogICAgIGZvcm1EYXRhLmFwcGVuZChtYWtlU3RyaW5nKG5h
bWUsICIueCIpLCBTdHJpbmc6Om51bWJlcihtX2NsaWNrTG9jYXRpb24ueCgpKSk7CiAgICAgZm9y
bURhdGEuYXBwZW5kKG1ha2VTdHJpbmcobmFtZSwgIi55IiksIFN0cmluZzo6bnVtYmVyKG1fY2xp
Y2tMb2NhdGlvbi55KCkpKTsKIAotICAgIGF1dG8gdmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7
CisgICAgYXV0byB2YWx1ZSA9IGVsZW1lbnQoKS52YWx1ZSgpOwogICAgIGlmICghdmFsdWUuaXNF
bXB0eSgpKQogICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpOwogCkBAIC04NCw4
ICs4Myw3IEBAIGJvb2wgSW1hZ2VJbnB1dFR5cGU6OnN1cHBvcnRzVmFsaWRhdGlvbigpIGNvbnN0
CiAKIHZvaWQgSW1hZ2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQmIGV2
ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50
PiBwcm90ZWN0ZWRFbGVtZW50KCplbGVtZW50KCkpOworICAgIFJlZjxIVE1MSW5wdXRFbGVtZW50
PiBwcm90ZWN0ZWRFbGVtZW50KGVsZW1lbnQoKSk7CiAgICAgaWYgKHByb3RlY3RlZEVsZW1lbnQt
PmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8ICFwcm90ZWN0ZWRFbGVtZW50LT5mb3JtKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTE2LDIzICsxMTQsMTggQEAgdm9pZCBJbWFnZUlucHV0VHlw
ZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCYgZXZlbnQpCiAKIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBJbWFnZUlucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcihSZW5kZXJTdHls
ZSYmIHN0eWxlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJJbWFnZT4oKmVsZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpOworICAgIHJl
dHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJJbWFnZT4oZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxl
KSk7CiB9CiAKIHZvaWQgSW1hZ2VJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkKIHsKICAgICBpZiAobmFtZSA9PSBhbHRBdHRyKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRv
KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAoaXM8UmVu
ZGVySW1hZ2U+KHJlbmRlcmVyKSkKLSAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJJbWFn
ZT4oKnJlbmRlcmVyKS51cGRhdGVBbHRUZXh0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byog
cmVuZGVyZXIgPSBlbGVtZW50KCkucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlcklt
YWdlPihyZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnJlbmRl
cmVyKS51cGRhdGVBbHRUZXh0KCk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHNyY0F0dHIpIHsK
LSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpIHsKLSAgICAgICAg
ICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIGVsZW1lbnQtPmVu
c3VyZUltYWdlTG9hZGVyKCkudXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJyb3Io
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAoZWxlbWVudCgpLnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICBlbGVtZW50KCkuZW5zdXJlSW1hZ2VMb2FkZXIoKS51cGRhdGVGcm9tRWxlbWVudElnbm9y
aW5nUHJldmlvdXNFcnJvcigpOwogICAgIH0KICAgICBCYXNlQnV0dG9uSW5wdXRUeXBlOjphdHRy
aWJ1dGVDaGFuZ2VkKG5hbWUpOwogfQpAQCAtMTQxLDExICsxMzQsMTAgQEAgdm9pZCBJbWFnZUlu
cHV0VHlwZTo6YXR0YWNoKCkKIHsKICAgICBCYXNlQnV0dG9uSW5wdXRUeXBlOjphdHRhY2goKTsK
IAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIEhUTUxJbWFnZUxvYWRlciYgaW1hZ2VMb2Fk
ZXIgPSBlbGVtZW50KCktPmVuc3VyZUltYWdlTG9hZGVyKCk7CisgICAgSFRNTEltYWdlTG9hZGVy
JiBpbWFnZUxvYWRlciA9IGVsZW1lbnQoKS5lbnN1cmVJbWFnZUxvYWRlcigpOwogICAgIGltYWdl
TG9hZGVyLnVwZGF0ZUZyb21FbGVtZW50KCk7CiAKLSAgICBhdXRvKiByZW5kZXJlciA9IGRvd25j
YXN0PFJlbmRlckltYWdlPihlbGVtZW50KCktPnJlbmRlcmVyKCkpOworICAgIGF1dG8qIHJlbmRl
cmVyID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KGVsZW1lbnQoKS5yZW5kZXJlcigpKTsKICAgICBp
ZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE4OCw4ICsxODAsNyBAQCBib29s
IEltYWdlSW5wdXRUeXBlOjpzaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkK
IAogdW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OmhlaWdodCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnQoKnRoaXMtPmVs
ZW1lbnQoKSk7CisgICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnQodGhpcy0+ZWxlbWVu
dCgpKTsKIAogICAgIGVsZW1lbnQtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKQEAgLTIx
MCw4ICsyMDEsNyBAQCB1bnNpZ25lZCBJbWFnZUlucHV0VHlwZTo6aGVpZ2h0KCkgY29uc3QKIAog
dW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OndpZHRoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gZWxlbWVudCgqdGhpcy0+ZWxlbWVu
dCgpKTsKKyAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gZWxlbWVudCh0aGlzLT5lbGVtZW50KCkp
OwogCiAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuY3BwCmluZGV4IDkxNjdmZTlkOTIyYzUyYTVmODUyNmMwMjQzZWQ2Yjg0MDNj
OTliNWIuLmE4OWM4Y2RlYTRmODZiMTllYmQ1NDI3ZWQ2NTA0ZTdmNWVlMmVjODggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJSZXNldElu
cHV0VHlwZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRl
ICJTY29wZWRFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgi
CiAjaW5jbHVkZSAiU2VhcmNoSW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgog
I2luY2x1ZGUgIlN1Ym1pdElucHV0VHlwZS5oIgpAQCAtODUsMTMgKzg2LDEzIEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKIHR5cGVkZWYgYm9vbCAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6KklucHV0VHlwZUNvbmRpdGlvbmFsRnVuY3Rpb24pKCkgY29uc3Q7CiB0eXBlZGVmIGNvbnN0
IEF0b21pY1N0cmluZyYgKCpJbnB1dFR5cGVOYW1lRnVuY3Rpb24pKCk7Ci10eXBlZGVmIFJlZjxJ
bnB1dFR5cGU+ICgqSW5wdXRUeXBlRmFjdG9yeUZ1bmN0aW9uKShIVE1MSW5wdXRFbGVtZW50Jik7
Cit0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxJbnB1dFR5cGU+ICgqSW5wdXRUeXBlRmFjdG9yeUZ1
bmN0aW9uKShIVE1MSW5wdXRFbGVtZW50Jik7CiB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBJbnB1dFR5cGVGYWN0b3J5RnVuY3Rpb24sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gSW5w
dXRUeXBlRmFjdG9yeU1hcDsKIAogdGVtcGxhdGU8Y2xhc3MgVD4KLXN0YXRpYyBSZWY8SW5wdXRU
eXBlPiBjcmVhdGVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW5wdXRUeXBlPiBjcmVhdGVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVu
dCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUKGVsZW1lbnQpKTsKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUPihlbGVtZW50KTsKIH0KIAogc3RhdGljIElucHV0
VHlwZUZhY3RvcnlNYXAgY3JlYXRlSW5wdXRUeXBlRmFjdG9yeU1hcCgpCkBAIC0xNDksMTkgKzE1
MCwxOSBAQCBzdGF0aWMgSW5wdXRUeXBlRmFjdG9yeU1hcCBjcmVhdGVJbnB1dFR5cGVGYWN0b3J5
TWFwKCkKICAgICByZXR1cm4gbWFwOwogfQogCi1SZWY8SW5wdXRUeXBlPiBJbnB1dFR5cGU6OmNy
ZWF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVO
YW1lKQorc3RkOjp1bmlxdWVfcHRyPElucHV0VHlwZT4gSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElu
cHV0RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlTmFtZSkKIHsKICAg
ICBpZiAoIXR5cGVOYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBzdGF0aWMgY29uc3QgYXV0byBm
YWN0b3J5TWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZUlucHV0VHlwZUZhY3RvcnlNYXAo
KSk7CiAgICAgICAgIGlmIChhdXRvIGZhY3RvcnkgPSBmYWN0b3J5TWFwLmdldCgpLmdldCh0eXBl
TmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeShlbGVtZW50KTsKICAgICB9Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dElucHV0VHlwZShlbGVtZW50KSk7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8VGV4dElucHV0VHlwZT4oZWxlbWVudCk7CiB9CiAKLVJlZjxJbnB1
dFR5cGU+IElucHV0VHlwZTo6Y3JlYXRlVGV4dChIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQor
c3RkOjp1bmlxdWVfcHRyPElucHV0VHlwZT4gSW5wdXRUeXBlOjpjcmVhdGVUZXh0KEhUTUxJbnB1
dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dElucHV0
VHlwZShlbGVtZW50KSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VGV4dElucHV0VHlw
ZT4oZWxlbWVudCk7CiB9CiAKIElucHV0VHlwZTo6fklucHV0VHlwZSgpID0gZGVmYXVsdDsKQEAg
LTE5MywzMSArMTk0LDI3IEBAIGJvb2wgSW5wdXRUeXBlOjpzaG91bGRTYXZlQW5kUmVzdG9yZUZv
cm1Db250cm9sU3RhdGUoKSBjb25zdAogCiBGb3JtQ29udHJvbFN0YXRlIElucHV0VHlwZTo6c2F2
ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IGF1dG8gY3VycmVudFZhbHVlID0gZWxlbWVudCgpLT52YWx1ZSgpOwotICAgIGlmIChjdXJyZW50
VmFsdWUgPT0gZWxlbWVudCgpLT5kZWZhdWx0VmFsdWUoKSkKKyAgICBhdXRvIGN1cnJlbnRWYWx1
ZSA9IGVsZW1lbnQoKS52YWx1ZSgpOworICAgIGlmIChjdXJyZW50VmFsdWUgPT0gZWxlbWVudCgp
LmRlZmF1bHRWYWx1ZSgpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB7IHsgY3Vy
cmVudFZhbHVlIH0gfTsKIH0KIAogdm9pZCBJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0
YXRlKGNvbnN0IEZvcm1Db250cm9sU3RhdGUmIHN0YXRlKQogewotICAgIEFTU0VSVChlbGVtZW50
KCkpOwotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc3RhdGVbMF0pOworICAgIGVsZW1lbnQoKS5z
ZXRWYWx1ZShzdGF0ZVswXSk7CiB9CiAKIGJvb2wgSW5wdXRUeXBlOjppc0Zvcm1EYXRhQXBwZW5k
YWJsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgLy8gVGhlcmUgaXMg
bm8gZm9ybSBkYXRhIHVubGVzcyB0aGVyZSdzIGEgbmFtZSBmb3Igbm9uLWltYWdlIHR5cGVzLgot
ICAgIHJldHVybiAhZWxlbWVudCgpLT5uYW1lKCkuaXNFbXB0eSgpOworICAgIHJldHVybiAhZWxl
bWVudCgpLm5hbWUoKS5pc0VtcHR5KCk7CiB9CiAKIGJvb2wgSW5wdXRUeXBlOjphcHBlbmRGb3Jt
RGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQoKSk7CiAgICAgLy8gQWx3YXlzIHN1Y2Nlc3NmdWwuCi0gICAgZm9ybURhdGEuYXBwZW5k
KGVsZW1lbnQoKS0+bmFtZSgpLCBlbGVtZW50KCktPnZhbHVlKCkpOworICAgIGZvcm1EYXRhLmFw
cGVuZChlbGVtZW50KCkubmFtZSgpLCBlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTMyMyw4ICszMjAsNyBAQCBkb3VibGUgSW5wdXRUeXBlOjptYXhpbXVtKCkg
Y29uc3QKIAogYm9vbCBJbnB1dFR5cGU6OnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbihpbnQs
IGludCYgcHJlZmVycmVkU2l6ZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBwcmVmZXJyZWRTaXplID0gZWxlbWVudCgpLT5zaXplKCk7CisgICAgcHJlZmVycmVkU2l6ZSA9
IGVsZW1lbnQoKS5zaXplKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zOTUsOCArMzkx
LDcgQEAgU3RyaW5nIElucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0CiAKIFN0cmlu
ZyBJbnB1dFR5cGU6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxl
bWVudCgpKTsKLSAgICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7CisgICAgU3Ry
aW5nIHZhbHVlID0gZWxlbWVudCgpLnZhbHVlKCk7CiAKICAgICAvLyBUaGUgb3JkZXIgb2YgdGhl
IGZvbGxvd2luZyBjaGVja3MgaXMgbWVhbmluZ2Z1bC4gZS5nLiBXZSdkIGxpa2UgdG8gc2hvdyB0
aGUKICAgICAvLyBiYWRJbnB1dCBtZXNzYWdlIGV2ZW4gaWYgdGhlIGNvbnRyb2wgaGFzIG90aGVy
IHZhbGlkYXRpb24gZXJyb3JzLgpAQCAtNDEyLDExICs0MDcsMTEgQEAgU3RyaW5nIElucHV0VHlw
ZTo6dmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAogICAgIGlmIChwYXR0ZXJuTWlzbWF0Y2godmFs
dWUpKQogICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VQYXR0ZXJuTWlzbWF0Y2hUZXh0
KCk7CiAKLSAgICBpZiAoZWxlbWVudCgpLT50b29TaG9ydCgpKQotICAgICAgICByZXR1cm4gdmFs
aWRhdGlvbk1lc3NhZ2VUb29TaG9ydFRleHQobnVtR3JhcGhlbWVDbHVzdGVycyh2YWx1ZSksIGVs
ZW1lbnQoKS0+bWluTGVuZ3RoKCkpOworICAgIGlmIChlbGVtZW50KCkudG9vU2hvcnQoKSkKKyAg
ICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVG9vU2hvcnRUZXh0KG51bUdyYXBoZW1lQ2x1
c3RlcnModmFsdWUpLCBlbGVtZW50KCkubWluTGVuZ3RoKCkpOwogCi0gICAgaWYgKGVsZW1lbnQo
KS0+dG9vTG9uZygpKQotICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4
dChudW1HcmFwaGVtZUNsdXN0ZXJzKHZhbHVlKSwgZWxlbWVudCgpLT5lZmZlY3RpdmVNYXhMZW5n
dGgoKSk7CisgICAgaWYgKGVsZW1lbnQoKS50b29Mb25nKCkpCisgICAgICAgIHJldHVybiB2YWxp
ZGF0aW9uTWVzc2FnZVRvb0xvbmdUZXh0KG51bUdyYXBoZW1lQ2x1c3RlcnModmFsdWUpLCBlbGVt
ZW50KCkuZWZmZWN0aXZlTWF4TGVuZ3RoKCkpOwogCiAgICAgaWYgKCFpc1N0ZXBwYWJsZSgpKQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTQ4NiwxNCArNDgxLDEyIEBAIGJvb2wg
SW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50JiBldmVudCkKIAogUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IElucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmIHN0eWxlKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4oUmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9yKCplbGVtZW50KCks
IFdURk1vdmUoc3R5bGUpKSk7CisgICAgcmV0dXJuIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PihS
ZW5kZXJFbGVtZW50OjpjcmVhdGVGb3IoZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSkpOwogfQog
CiB2b2lkIElucHV0VHlwZTo6Ymx1cigpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
ZWxlbWVudCgpLT5kZWZhdWx0Qmx1cigpOworICAgIGVsZW1lbnQoKS5kZWZhdWx0Qmx1cigpOwog
fQogCiB2b2lkIElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCkBAIC01MDIsOCArNDk1
LDcgQEAgdm9pZCBJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogCiB2b2lkIElucHV0
VHlwZTo6ZGVzdHJveVNoYWRvd1N1YnRyZWUoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgIFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dS
b290KCk7CisgICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IHJvb3QgPSBlbGVtZW50KCkudXNlckFnZW50
U2hhZG93Um9vdCgpOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDIs
MTYgKzUzNCwxNCBAQCBEYXRlQ29tcG9uZW50czo6VHlwZSBJbnB1dFR5cGU6OmRhdGVUeXBlKCkg
Y29uc3QKIAogdm9pZCBJbnB1dFR5cGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2tJZkFjdGl2ZShL
ZXlib2FyZEV2ZW50JiBldmVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBpZiAoZWxlbWVudCgpLT5hY3RpdmUoKSkKLSAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaFNp
bXVsYXRlZENsaWNrKCZldmVudCk7CisgICAgaWYgKGVsZW1lbnQoKS5hY3RpdmUoKSkKKyAgICAg
ICAgZWxlbWVudCgpLmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soJmV2ZW50KTsKICAgICBldmVudC5z
ZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCiBDaHJvbWUqIElucHV0VHlwZTo6Y2hyb21lKCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGVsZW1l
bnQoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBlbGVtZW50KCku
ZG9jdW1lbnQoKS5wYWdlKCkpCiAgICAgICAgIHJldHVybiAmcGFnZS0+Y2hyb21lKCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CkBAIC01NjgsMTQgKzU1OCwxMiBAQCBib29sIElucHV0VHlwZTo6
aGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNvbnN0CiAKIGJvb2wgSW5wdXRUeXBlOjppc0tleWJvYXJk
Rm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVt
ZW50KCkpOwotICAgIHJldHVybiAhZWxlbWVudCgpLT5pc1JlYWRPbmx5KCkgJiYgZWxlbWVudCgp
LT5pc1RleHRGb3JtQ29udHJvbEtleWJvYXJkRm9jdXNhYmxlKGV2ZW50KTsKKyAgICByZXR1cm4g
IWVsZW1lbnQoKS5pc1JlYWRPbmx5KCkgJiYgZWxlbWVudCgpLmlzVGV4dEZvcm1Db250cm9sS2V5
Ym9hcmRGb2N1c2FibGUoZXZlbnQpOwogfQogCiBib29sIElucHV0VHlwZTo6aXNNb3VzZUZvY3Vz
YWJsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1l
bnQoKS0+aXNUZXh0Rm9ybUNvbnRyb2xNb3VzZUZvY3VzYWJsZSgpOworICAgIHJldHVybiBlbGVt
ZW50KCkuaXNUZXh0Rm9ybUNvbnRyb2xNb3VzZUZvY3VzYWJsZSgpOwogfQogCiBib29sIElucHV0
VHlwZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdApAQCAtNTkzLDggKzU4MSw3IEBAIHZv
aWQgSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQoKQogCiB2b2lkIElucHV0VHlwZTo6YWNjZXNz
S2V5QWN0aW9uKGJvb2wpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgp
LT5mb2N1cyhmYWxzZSk7CisgICAgZWxlbWVudCgpLmZvY3VzKGZhbHNlKTsKIH0KIAogdm9pZCBJ
bnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCgpCkBAIC02NjUsMjEgKzY1MiwyNyBAQCBib29sIElu
cHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKQogCiB2b2lkIElucHV0
VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCB2YWx1ZUNo
YW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKIHsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlSW50ZXJuYWwoc2FuaXRpemVk
VmFsdWUsIGV2ZW50QmVoYXZpb3IpOwotICAgIGVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOworICAgIHsKKyAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5U
aHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOworICAgICAgICBlbGVtZW50KCkuc2V0VmFsdWVJ
bnRlcm5hbChzYW5pdGl6ZWRWYWx1ZSwgZXZlbnRCZWhhdmlvcik7CisgICAgICAgIGVsZW1lbnQo
KS5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisgICAgfQogICAgIGlmICghdmFsdWVDaGFu
Z2VkKQogICAgICAgICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGV2ZW50QmVoYXZpb3IpIHsKICAg
ICBjYXNlIERpc3BhdGNoQ2hhbmdlRXZlbnQ6Ci0gICAgICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hG
b3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CisgICAgICAgIGVsZW1lbnQoKS5kaXNwYXRjaEZvcm1D
b250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEaXNwYXRjaElu
cHV0QW5kQ2hhbmdlRXZlbnQ6Ci0gICAgICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hGb3JtQ29udHJv
bElucHV0RXZlbnQoKTsKLSAgICAgICAgaWYgKGF1dG8gZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQo
KSkKLSAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgp
OworICAgIGNhc2UgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50OiB7CisgICAgICAgIGF1dG8g
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CisgICAgICAgIGVsZW1lbnQoKS5kaXNwYXRj
aEZvcm1Db250cm9sSW5wdXRFdmVudCgpOworICAgICAgICAvLyBSdW5uaW5nIHNjcmlwdCBjb3Vs
ZCBoYXZlIGRlc3Ryb3llZCB0aGlzIG9iamVjdC4KKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxlbWVudCgpLmRpc3BhdGNoRm9ybUNvbnRyb2xD
aGFuZ2VFdmVudCgpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBEaXNwYXRjaE5v
RXZlbnQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTcwNSw4ICs2OTgsNyBAQCBTdHJpbmcg
SW5wdXRUeXBlOjpsb2NhbGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29u
c3QKIAogU3RyaW5nIElucHV0VHlwZTo6dmlzaWJsZVZhbHVlKCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT52YWx1ZSgpOworICAgIHJldHVy
biBlbGVtZW50KCkudmFsdWUoKTsKIH0KIAogYm9vbCBJbnB1dFR5cGU6OmlzRW1wdHlWYWx1ZSgp
IGNvbnN0CkBAIC05NjIsOCArOTU0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW5wdXRUeXBlOjph
cHBseVN0ZXAoaW50IGNvdW50LCBBbnlTdGVwSGFuZGxpbmcgYW55U3RlcEhhbmRsaW4KICAgICBp
ZiAoIXN0ZXBSYW5nZS5oYXNTdGVwKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciB9OwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVj
aW1hbCBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGVsZW1lbnQoKS0+dmFsdWUoKSk7Cisg
ICAgY29uc3QgRGVjaW1hbCBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFOKGVsZW1lbnQoKS52
YWx1ZSgpKTsKICAgICBpZiAoIWN1cnJlbnQuaXNGaW5pdGUoKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgRGVjaW1hbCBuZXdWYWx1ZSA9IGN1
cnJlbnQgKyBzdGVwUmFuZ2Uuc3RlcCgpICogY291bnQ7CkBAIC05NzYsNyArOTY3LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW5wdXRUeXBlOjphcHBseVN0ZXAoaW50IGNvdW50LCBBbnlTdGVwSGFu
ZGxpbmcgYW55U3RlcEhhbmRsaW4KICAgICBpZiAobmV3VmFsdWUgPCBzdGVwUmFuZ2UubWluaW11
bSgpKQogICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5taW5pbXVtKCk7CiAKLSAgICBpZiAo
IWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihzdGVwQXR0ciksICJhbnkiKSkKKyAgICBpZiAoIWVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHN0ZXBBdHRyKSwgImFueSIpKQogICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5hbGln
blZhbHVlRm9yU3RlcChjdXJyZW50LCBuZXdWYWx1ZSk7CiAKICAgICBpZiAobmV3VmFsdWUgLSBz
dGVwUmFuZ2UubWF4aW11bSgpID4gYWNjZXB0YWJsZUVycm9yVmFsdWUpCkBAIC05ODQsMTIgKzk3
NSwxMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnB1dFR5cGU6OmFwcGx5U3RlcChpbnQgY291bnQs
IEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbgogICAgIGlmIChuZXdWYWx1ZSA+IHN0ZXBS
YW5nZS5tYXhpbXVtKCkpCiAgICAgICAgIG5ld1ZhbHVlID0gc3RlcFJhbmdlLm1heGltdW0oKTsK
IAorICAgIGF1dG8gd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CiAgICAgYXV0byByZXN1
bHQgPSBzZXRWYWx1ZUFzRGVjaW1hbChuZXdWYWx1ZSwgZXZlbnRCZWhhdmlvcik7Ci0gICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpIHx8
ICF3ZWFrVGhpcykKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGlmIChBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSkKLSAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24oZWxlbWVudCgpLCBBWE9iamVjdENh
Y2hlOjpBWFZhbHVlQ2hhbmdlZCk7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZWxl
bWVudCgpLmRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGNhY2hl
LT5wb3N0Tm90aWZpY2F0aW9uKCZlbGVtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFu
Z2VkKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDc2LDggKzEwNjgsNyBAQCB2b2lk
IElucHV0VHlwZTo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBuKQogICAgIGVsc2UKICAgICAgICAg
c2lnbiA9IDA7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBTdHJpbmcgY3VycmVudFN0
cmluZ1ZhbHVlID0gZWxlbWVudCgpLT52YWx1ZSgpOworICAgIFN0cmluZyBjdXJyZW50U3RyaW5n
VmFsdWUgPSBlbGVtZW50KCkudmFsdWUoKTsKICAgICBEZWNpbWFsIGN1cnJlbnQgPSBwYXJzZVRv
TnVtYmVyT3JOYU4oY3VycmVudFN0cmluZ1ZhbHVlKTsKICAgICBpZiAoIWN1cnJlbnQuaXNGaW5p
dGUoKSkgewogICAgICAgICBjdXJyZW50ID0gZGVmYXVsdFZhbHVlRm9yU3RlcFVwKCk7CkBAIC0x
MDkxLDcgKzEwODIsNyBAQCB2b2lkIElucHV0VHlwZTo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBu
KQogICAgIGlmICgoc2lnbiA+IDAgJiYgY3VycmVudCA8IHN0ZXBSYW5nZS5taW5pbXVtKCkpIHx8
IChzaWduIDwgMCAmJiBjdXJyZW50ID4gc3RlcFJhbmdlLm1heGltdW0oKSkpCiAgICAgICAgIHNl
dFZhbHVlQXNEZWNpbWFsKHNpZ24gPiAwID8gc3RlcFJhbmdlLm1pbmltdW0oKSA6IHN0ZXBSYW5n
ZS5tYXhpbXVtKCksIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGlmIChzdGVwTWlzbWF0Y2goZWxlbWVudCgpLT52YWx1ZSgpKSkgeworICAgICAgICBp
ZiAoc3RlcE1pc21hdGNoKGVsZW1lbnQoKS52YWx1ZSgpKSkgewogICAgICAgICAgICAgQVNTRVJU
KCFzdGVwLmlzWmVybygpKTsKICAgICAgICAgICAgIGNvbnN0IERlY2ltYWwgYmFzZSA9IHN0ZXBS
YW5nZS5zdGVwQmFzZSgpOwogICAgICAgICAgICAgRGVjaW1hbCBuZXdWYWx1ZTsKQEAgLTExMDcs
NyArMTA5OCwxMCBAQCB2b2lkIElucHV0VHlwZTo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBuKQog
ICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID4gc3RlcFJhbmdlLm1heGltdW0oKSkKICAgICAgICAg
ICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5tYXhpbXVtKCk7CiAKKyAgICAgICAgICAgIGF1
dG8gd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CiAgICAgICAgICAgICBzZXRWYWx1ZUFz
RGVjaW1hbChuZXdWYWx1ZSwgbiA9PSAxIHx8IG4gPT0gLTEgPyBEaXNwYXRjaElucHV0QW5kQ2hh
bmdlRXZlbnQgOiBEaXNwYXRjaE5vRXZlbnQpOworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpZiAobiA+IDEpCiAgICAgICAg
ICAgICAgICAgYXBwbHlTdGVwKG4gLSAxLCBBbnlJc0RlZmF1bHRTdGVwLCBEaXNwYXRjaElucHV0
QW5kQ2hhbmdlRXZlbnQpOwogICAgICAgICAgICAgZWxzZSBpZiAobiA8IC0xKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW5wdXRUeXBlLmgKaW5kZXggYzk5NGNjZTUyM2NjODZiNjZjZTllYTgwMjM4NDcwNjM2MjliMmU4
ZC4uZmEyMzA3YWMyMmQ3ODIxMzBlMjE2OWMxNzNkMTJkYWEwMGIwNzdlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0lucHV0VHlwZS5oCkBAIC02OSwxMiArNjksMTIgQEAgc3RydWN0IElucHV0RWxlbWVudENsaWNr
U3RhdGU7CiAvLyBBbiBJbnB1dFR5cGUgb2JqZWN0IHJlcHJlc2VudHMgdGhlIHR5cGUtc3BlY2lm
aWMgcGFydCBvZiBhbiBIVE1MSW5wdXRFbGVtZW50LgogLy8gRG8gbm90IGV4cG9zZSBpbnN0YW5j
ZXMgb2YgSW5wdXRUeXBlIGFuZCBjbGFzc2VzIGRlcml2ZWQgZnJvbSBpdCB0byBjbGFzc2VzCiAv
LyBvdGhlciB0aGFuIEhUTUxJbnB1dEVsZW1lbnQuCi1jbGFzcyBJbnB1dFR5cGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbnB1dFR5cGU+IHsKK2NsYXNzIElucHV0VHlwZSA6IHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxJbnB1dFR5cGU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCYs
IGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHN0YXRpYyBSZWY8SW5wdXRUeXBlPiBjcmVhdGVU
ZXh0KEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElucHV0
VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElucHV0VHlwZT4gY3JlYXRlVGV4dChIVE1MSW5wdXRF
bGVtZW50Jik7CiAgICAgdmlydHVhbCB+SW5wdXRUeXBlKCk7CiAKICAgICBzdGF0aWMgYm9vbCB0
aGVtZVN1cHBvcnRzRGF0YUxpc3RVSShJbnB1dFR5cGUqKTsKQEAgLTMwNSw4ICszMDUsOCBAQCBw
dWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBJbnB1dFR5cGUoSFRNTElucHV0RWxl
bWVudCYgZWxlbWVudCkKLSAgICAgICAgOiBtX2VsZW1lbnQobWFrZVdlYWtQdHIoZWxlbWVudCkp
IHsgfQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnQuZ2V0KCk7IH0KKyAgICAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkgeyB9CisgICAgSFRN
TElucHV0RWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogICAg
IENocm9tZSogY2hyb21lKCkgY29uc3Q7CiAgICAgRGVjaW1hbCBwYXJzZVRvTnVtYmVyT3JOYU4o
Y29uc3QgU3RyaW5nJikgY29uc3Q7CiAKQEAgLTMxNCw4ICszMTQsOCBAQCBwcml2YXRlOgogICAg
IC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gQWRkcyBzdGVwIHZhbHVlICogY291
bnQgdG8gdGhlIGN1cnJlbnQgdmFsdWUuCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gYXBwbHlTdGVw
KGludCBjb3VudCwgQW55U3RlcEhhbmRsaW5nLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yKTsKIAot
ICAgIC8vIFJhdyBwb2ludGVyIGJlY2F1c2UgdGhlIEhUTUxJbnB1dEVsZW1lbnQgb2JqZWN0IG93
bnMgdGhpcyBJbnB1dFR5cGUgb2JqZWN0LgotICAgIFdlYWtQdHI8SFRNTElucHV0RWxlbWVudD4g
bV9lbGVtZW50OworICAgIC8vIFRoZSBIVE1MSW5wdXRFbGVtZW50IG9iamVjdCBvd25zIHRoaXMg
SW5wdXRUeXBlIG9iamVjdC4KKyAgICBIVE1MSW5wdXRFbGVtZW50JiBtX2VsZW1lbnQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L01vbnRoSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTW9udGhJbnB1dFR5cGUu
Y3BwCmluZGV4IGY5MmIzNTUzNWExZDZlYTIzMzY3YTY5NjA1MmYxOGEyM2YxZTI0ZTEuLjZjNmQ0
Zjg0MTc2ZWY1NmU5YzA2ZGI4YWMxODdkNjJkOTM1M2ZmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTW9udGhJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TW9udGhJbnB1dFR5cGUuY3BwCkBAIC02MCw5ICs2MCw4IEBAIERhdGVDb21wb25lbnRzOjpUeXBl
IE1vbnRoSW5wdXRUeXBlOjpkYXRlVHlwZSgpIGNvbnN0CiAKIGRvdWJsZSBNb250aElucHV0VHlw
ZTo6dmFsdWVBc0RhdGUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIERh
dGVDb21wb25lbnRzIGRhdGU7Ci0gICAgaWYgKCFwYXJzZVRvRGF0ZUNvbXBvbmVudHMoZWxlbWVu
dCgpLT52YWx1ZSgpLCAmZGF0ZSkpCisgICAgaWYgKCFwYXJzZVRvRGF0ZUNvbXBvbmVudHMoZWxl
bWVudCgpLnZhbHVlKCksICZkYXRlKSkKICAgICAgICAgcmV0dXJuIERhdGVDb21wb25lbnRzOjpp
bnZhbGlkTWlsbGlzZWNvbmRzKCk7CiAgICAgZG91YmxlIG1zZWMgPSBkYXRlLm1pbGxpc2Vjb25k
c1NpbmNlRXBvY2goKTsKICAgICBBU1NFUlQoc3RkOjppc2Zpbml0ZShtc2VjKSk7CkBAIC05Miwx
MSArOTEsMTAgQEAgRGVjaW1hbCBNb250aElucHV0VHlwZTo6ZGVmYXVsdFZhbHVlRm9yU3RlcFVw
KCkgY29uc3QKIAogU3RlcFJhbmdlIE1vbnRoSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55
U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVu
dCgpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZy
b21Eb3VibGUobW9udGhEZWZhdWx0U3RlcEJhc2UpKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmlt
dW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11
bU1vbnRoKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVs
ZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1h
bDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bU1vbnRoKCkpKTsKLSAgICBjb25z
dCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIG1v
bnRoU3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oc3RlcEF0dHIpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwg
RGVjaW1hbDo6ZnJvbURvdWJsZShtb250aERlZmF1bHRTdGVwQmFzZSkpOworICAgIGNvbnN0IERl
Y2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVu
dHM6Om1pbmltdW1Nb250aCgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VU
b051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRy
KSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bU1vbnRoKCkpKTsK
KyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFu
ZGxpbmcsIG1vbnRoU3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2Us
IFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBtb250aFN0
ZXBEZXNjcmlwdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVt
YmVySW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmNw
cAppbmRleCAzYTkyYWZjMWFjODIyOTZjZDVlNGRlM2U3NmQwNjdhZjJkNDRlNGQ0Li43OTU1OTdk
ZDJhNzE4YmJkNzA3MmU0MTJkNzMyOTQwYWZhMzQ3ZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9O
dW1iZXJJbnB1dFR5cGUuY3BwCkBAIC05MywxNiArOTMsMTggQEAgY29uc3QgQXRvbWljU3RyaW5n
JiBOdW1iZXJJbnB1dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiAKIHZvaWQgTnVtYmVy
SW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sIHZh
bHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEJlaGF2aW9yKQogewotICAg
IEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmICghdmFsdWVDaGFuZ2VkICYmIHNhbml0aXplZFZh
bHVlLmlzRW1wdHkoKSAmJiAhZWxlbWVudCgpLT5pbm5lclRleHRWYWx1ZSgpLmlzRW1wdHkoKSkK
KyAgICBpZiAoIXZhbHVlQ2hhbmdlZCAmJiBzYW5pdGl6ZWRWYWx1ZS5pc0VtcHR5KCkgJiYgIWVs
ZW1lbnQoKS5pbm5lclRleHRWYWx1ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOwogICAgICAgICB1cGRhdGVJbm5lclRleHRWYWx1ZSgp
OworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICBUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCB2YWx1ZUNoYW5n
ZWQsIGV2ZW50QmVoYXZpb3IpOwogfQogCiBkb3VibGUgTnVtYmVySW5wdXRUeXBlOjp2YWx1ZUFz
RG91YmxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gcGFy
c2VUb0RvdWJsZUZvck51bWJlclR5cGUoZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4g
cGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZWxlbWVudCgpLnZhbHVlKCkpOwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBOdW1iZXJJbnB1dFR5cGU6OnNldFZhbHVlQXNEb3VibGUoZG91YmxlIG5l
d1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpIGNvbnN0CkBAIC0x
MTEsOCArMTEzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gTnVtYmVySW5wdXRUeXBlOjpzZXRWYWx1
ZUFzRG91YmxlKGRvdWJsZSBuZXdWYWx1ZSwgVGV4dEZpZWxkRXYKICAgICBjb25zdCBkb3VibGUg
ZmxvYXRNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CiAgICAgaWYgKG5l
d1ZhbHVlIDwgLWZsb2F0TWF4IHx8IG5ld1ZhbHVlID4gZmxvYXRNYXgpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoc2VyaWFsaXplRm9yTnVtYmVyVHlwZShuZXdWYWx1
ZSksIGV2ZW50QmVoYXZpb3IpOworICAgIGVsZW1lbnQoKS5zZXRWYWx1ZShzZXJpYWxpemVGb3JO
dW1iZXJUeXBlKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IApAQCAtMTIyLDggKzEyMyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE51bWJlcklucHV0VHlwZTo6
c2V0VmFsdWVBc0RlY2ltYWwoY29uc3QgRGVjaW1hbCYgbmV3VmFsdWUsIFRlCiAgICAgY29uc3Qg
RGVjaW1hbCBmbG9hdE1heCA9IERlY2ltYWw6OmZyb21Eb3VibGUoc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46Om1heCgpKTsKICAgICBpZiAobmV3VmFsdWUgPCAtZmxvYXRNYXggfHwgbmV3VmFs
dWUgPiBmbG9hdE1heCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShz
ZXJpYWxpemVGb3JOdW1iZXJUeXBlKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CisgICAgZWxl
bWVudCgpLnNldFZhbHVlKHNlcmlhbGl6ZUZvck51bWJlclR5cGUobmV3VmFsdWUpLCBldmVudEJl
aGF2aW9yKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzQsOCArMTM0LDcgQEAgYm9vbCBO
dW1iZXJJbnB1dFR5cGU6OnR5cGVNaXNtYXRjaEZvcihjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25z
dAogCiBib29sIE51bWJlcklucHV0VHlwZTo6dHlwZU1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICBBU1NFUlQoIXR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCkt
PnZhbHVlKCkpKTsKKyAgICBBU1NFUlQoIXR5cGVNaXNtYXRjaEZvcihlbGVtZW50KCkudmFsdWUo
KSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTQzLDExICsxNDIsMTAgQEAgU3RlcFJh
bmdlIE51bWJlcklucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlT
dGVwSGFuZGxpbmcpIGNvbnMKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Rl
cFJhbmdlOjpTdGVwRGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbihudW1iZXJEZWZhdWx0U3Rl
cCwgbnVtYmVyRGVmYXVsdFN0ZXBCYXNlLCBudW1iZXJTdGVwU2NhbGVGYWN0b3IpOwogCi0gICAg
QVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9E
ZWNpbWFsRm9yTnVtYmVyVHlwZShlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24obWluQXR0ciksIG51bWJlckRlZmF1bHRTdGVwQmFzZSk7CisgICAgY29uc3QgRGVjaW1h
bCBzdGVwQmFzZSA9IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVyVHlwZShlbGVtZW50KCkuYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgbnVtYmVyRGVmYXVsdFN0ZXBCYXNl
KTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
YXggZm9yIG51bWJlciBpbnB1dCB0eXBlLgogICAgIGNvbnN0IERlY2ltYWwgZmxvYXRNYXggPSBE
ZWNpbWFsOjpmcm9tRG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7Ci0g
ICAgY29uc3QgRWxlbWVudCYgZWxlbWVudCA9ICp0aGlzLT5lbGVtZW50KCk7CisgICAgY29uc3Qg
RWxlbWVudCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKIAogICAgIFJhbmdlTGltaXRhdGlv
bnMgcmFuZ2VMaW1pdGF0aW9ucyA9IFJhbmdlTGltaXRhdGlvbnM6OkludmFsaWQ7CiAgICAgYXV0
byBleHRyYWN0Qm91bmQgPSBbJl0gKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUs
IGNvbnN0IERlY2ltYWwmIGRlZmF1bHRWYWx1ZSkgLT4gRGVjaW1hbCB7CkBAIC0xNzAsMTYgKzE2
OCwxNSBAQCBib29sIE51bWJlcklucHV0VHlwZTo6c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9u
KGludCBkZWZhdWx0U2l6ZSwgaW50JiBwcmVmZXJyZQogewogICAgIHByZWZlcnJlZFNpemUgPSBk
ZWZhdWx0U2l6ZTsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGF1dG8mIHN0ZXBTdHJp
bmcgPSBlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIp
OworICAgIGF1dG8mIHN0ZXBTdHJpbmcgPSBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihzdGVwQXR0cik7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0ZXBTdHJpbmcsICJhbnkiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29u
c3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQo
KS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSk7CisgICAgY29uc3Qg
RGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpKTsKICAgICBpZiAoIW1pbmlt
dW0uaXNGaW5pdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgRGVjaW1h
bCBtYXhpbXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBt
YXhpbXVtID0gcGFyc2VUb0RlY2ltYWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpKTsKICAgICBpZiAoIW1heGltdW0uaXNGaW5p
dGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xOTUsMTAgKzE5Miw4IEBAIGJvb2wg
TnVtYmVySW5wdXRUeXBlOjpzaXplU2hvdWxkSW5jbHVkZURlY29yYXRpb24oaW50IGRlZmF1bHRT
aXplLCBpbnQmIHByZWZlcnJlCiAKIGZsb2F0IE51bWJlcklucHV0VHlwZTo6ZGVjb3JhdGlvbldp
ZHRoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLQogICAgIGZsb2F0IHdpZHRo
ID0gMDsKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHNwaW5CdXR0b24gPSBlbGVtZW50KCktPmlu
bmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHNwaW5CdXR0
b24gPSBlbGVtZW50KCkuaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpOwogICAgIGlmIChSZW5kZXJC
b3gqIHNwaW5SZW5kZXJlciA9IHNwaW5CdXR0b24gPyBzcGluQnV0dG9uLT5yZW5kZXJCb3goKSA6
IDApIHsKICAgICAgICAgd2lkdGggKz0gc3BpblJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9n
aWNhbFdpZHRoKCk7CiAgICAgICAgIC8vIFNpbmNlIHRoZSB3aWR0aCBvZiBzcGluUmVuZGVyZXIg
aXMgbm90IGNhbGN1bGF0ZWQgeWV0LCBzcGluUmVuZGVyZXItPmxvZ2ljYWxXaWR0aCgpIHJldHVy
bnMgMC4KQEAgLTIxNSw3ICsyMTAsMTAgQEAgYm9vbCBOdW1iZXJJbnB1dFR5cGU6OmlzU3RlcHBh
YmxlKCkgY29uc3QKIAogdm9pZCBOdW1iZXJJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChL
ZXlib2FyZEV2ZW50JiBldmVudCkKIHsKKyAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpOwogICAgIGhhbmRsZUtleWRvd25FdmVudEZvclNwaW5CdXR0b24oZXZlbnQpOworICAg
IGlmICghd2Vha1RoaXMpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIWV2ZW50LmRlZmF1bHRI
YW5kbGVkKCkpCiAgICAgICAgIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50
KGV2ZW50KTsKIH0KQEAgLTI0NCwxNCArMjQyLDEyIEBAIFN0cmluZyBOdW1iZXJJbnB1dFR5cGU6
OmxvY2FsaXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogICAgIC8v
IFdlIGRvbid0IGxvY2FsaXplIHNjaWVudGlmaWMgbm90YXRpb25zLgogICAgIGlmIChwcm9wb3Nl
ZFZhbHVlLmZpbmQoaXNFKSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIHByb3Bvc2VkVmFs
dWU7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+bG9jYWxl
KCkuY29udmVydFRvTG9jYWxpemVkTnVtYmVyKHByb3Bvc2VkVmFsdWUpOworICAgIHJldHVybiBl
bGVtZW50KCkubG9jYWxlKCkuY29udmVydFRvTG9jYWxpemVkTnVtYmVyKHByb3Bvc2VkVmFsdWUp
OwogfQogCiBTdHJpbmcgTnVtYmVySW5wdXRUeXBlOjp2aXNpYmxlVmFsdWUoKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBsb2NhbGl6ZVZhbHVlKGVsZW1lbnQo
KS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIGxvY2FsaXplVmFsdWUoZWxlbWVudCgpLnZhbHVlKCkp
OwogfQogCiBTdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShj
b25zdCBTdHJpbmcmIHZpc2libGVWYWx1ZSkgY29uc3QKQEAgLTI2MSw4ICsyNTcsNyBAQCBTdHJp
bmcgTnVtYmVySW5wdXRUeXBlOjpjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcm
IHZpc2libGVWYWx1ZSkgY29ucwogICAgIC8vIFdlIGRvbid0IGxvY2FsaXplIHNjaWVudGlmaWMg
bm90YXRpb25zLgogICAgIGlmICh2aXNpYmxlVmFsdWUuZmluZChpc0UpICE9IG5vdEZvdW5kKQog
ICAgICAgICByZXR1cm4gdmlzaWJsZVZhbHVlOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IHJldHVybiBlbGVtZW50KCktPmxvY2FsZSgpLmNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKHZp
c2libGVWYWx1ZSk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5sb2NhbGUoKS5jb252ZXJ0RnJvbUxv
Y2FsaXplZE51bWJlcih2aXNpYmxlVmFsdWUpOwogfQogCiBTdHJpbmcgTnVtYmVySW5wdXRUeXBl
OjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKQEAgLTI3
NCw4ICsyNjksNyBAQCBTdHJpbmcgTnVtYmVySW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0
IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKIAogYm9vbCBOdW1iZXJJbnB1dFR5cGU6Omhh
c0JhZElucHV0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBTdHJpbmcg
c3RhbmRhcmRWYWx1ZSA9IGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGVsZW1lbnQoKS0+aW5uZXJU
ZXh0VmFsdWUoKSk7CisgICAgU3RyaW5nIHN0YW5kYXJkVmFsdWUgPSBjb252ZXJ0RnJvbVZpc2li
bGVWYWx1ZShlbGVtZW50KCkuaW5uZXJUZXh0VmFsdWUoKSk7CiAgICAgcmV0dXJuICFzdGFuZGFy
ZFZhbHVlLmlzRW1wdHkoKSAmJiAhc3RkOjppc2Zpbml0ZShwYXJzZVRvRG91YmxlRm9yTnVtYmVy
VHlwZShzdGFuZGFyZFZhbHVlKSk7CiB9CiAKQEAgLTI5NSwxOSArMjg5LDE0IEBAIGJvb2wgTnVt
YmVySW5wdXRUeXBlOjppc051bWJlckZpZWxkKCkgY29uc3QKIH0KIAogdm9pZCBOdW1iZXJJbnB1
dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKLXsKLSAg
ICBBU1NFUlQoZWxlbWVudCgpKTsKK3s7CiAgICAgaWYgKG5hbWUgPT0gbWF4QXR0ciB8fCBuYW1l
ID09IG1pbkF0dHIpIHsKLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50
KCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsK
LSAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwotICAgICAgICB9CisgICAgICAgIGVsZW1lbnQoKS5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0
cmVlKCk7CisgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQoKS5yZW5kZXJlcigp
KQorICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzdGVwQXR0cikgewotICAgICAgICBpZiAoYXV0
byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIHJl
bmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudCgpLnJlbmRlcmVyKCkpCisgICAgICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfQogICAg
IFRleHRGaWVsZElucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZChuYW1lKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggYzExZjZjOTU2YTFiNTUzZDM5Nzk0NmU3
ZTc2Mjk5YjVjNjliYmY2MC4uYzYwZDVjY2E0MzU4NDhmMGM0OGFmYWE3MGVkYTAxNGE2Yzk2YzIw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTQ0LDggKzQ0LDcg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBSYWRpb0lucHV0VHlwZTo6Zm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3QKIAogYm9vbCBSYWRpb0lucHV0VHlwZTo6dmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+
aXNJblJlcXVpcmVkUmFkaW9CdXR0b25Hcm91cCgpICYmICFlbGVtZW50KCktPmNoZWNrZWRSYWRp
b0J1dHRvbkZvckdyb3VwKCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS5pc0luUmVxdWlyZWRSYWRp
b0J1dHRvbkdyb3VwKCkgJiYgIWVsZW1lbnQoKS5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgp
OwogfQogCiBTdHJpbmcgUmFkaW9JbnB1dFR5cGU6OnZhbHVlTWlzc2luZ1RleHQoKSBjb25zdApA
QCAtNjAsMjYgKzU5LDI4IEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUNsaWNrRXZlbnQo
TW91c2VFdmVudCYgZXZlbnQpCiAKIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25F
dmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKKyAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpOwogICAgIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25F
dmVudChldmVudCk7CisgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChldmVudC5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgY29uc3QgU3Ry
aW5nJiBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyKCk7CiAgICAgaWYgKGtleSAhPSAiVXAiICYm
IGtleSAhPSAiRG93biIgJiYga2V5ICE9ICJMZWZ0IiAmJiBrZXkgIT0gIlJpZ2h0IikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgLy8gTGVmdCBhbmQgdXAg
bWVhbiAicHJldmlvdXMgcmFkaW8gYnV0dG9uIi4KICAgICAvLyBSaWdodCBhbmQgZG93biBtZWFu
ICJuZXh0IHJhZGlvIGJ1dHRvbiIuCiAgICAgLy8gVGVzdGVkIGluIFdpbklFLCBhbmQgZXZlbiBm
b3IgUlRMLCBsZWZ0IHN0aWxsIG1lYW5zIHByZXZpb3VzIHJhZGlvIGJ1dHRvbiAoYW5kIHNvIG1v
dmVzCiAgICAgLy8gdG8gdGhlIHJpZ2h0KS4gIFNlZW1zIHN0cmFuZ2UsIGJ1dCB3ZSdsbCBtYXRj
aCBpdC4KICAgICAvLyBIb3dldmVyLCB3aGVuIHVzaW5nIFNwYXRpYWwgTmF2aWdhdGlvbiwgd2Ug
bmVlZCB0byBiZSBhYmxlIHRvIG5hdmlnYXRlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNlbGVjdGlv
bi4KLSAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZWxlbWVudCgpLT5kb2N1bWVu
dCgpLmZyYW1lKCkpKQorICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbGVtZW50
KCkuZG9jdW1lbnQoKS5mcmFtZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgZm9yd2Fy
ZCA9IChrZXkgPT0gIkRvd24iIHx8IGtleSA9PSAiUmlnaHQiKTsKIAogICAgIC8vIFdlIGNhbiBv
bmx5IHN0YXkgd2l0aGluIHRoZSBmb3JtJ3MgY2hpbGRyZW4gaWYgdGhlIGZvcm0gaGFzbid0IGJl
ZW4gZGVtb3RlZCB0byBhIGxlYWYgYmVjYXVzZQogICAgIC8vIG9mIG1hbGZvcm1lZCBIVE1MLgot
ICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZWxlbWVudCgpOworICAgIFJlZlB0cjxOb2RlPiBub2Rl
ID0gJmVsZW1lbnQoKTsKICAgICB3aGlsZSAoKG5vZGUgPSAoZm9yd2FyZCA/IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm5vZGUpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoKm5vZGUpKSkpIHsKICAg
ICAgICAgLy8gT25jZSB3ZSBlbmNvdW50ZXIgYSBmb3JtIGVsZW1lbnQsIHdlIGtub3cgd2UncmUg
dGhyb3VnaC4KICAgICAgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4oKm5vZGUpKQpAQCAtODgs
MTAgKzg5LDEyIEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXli
b2FyZEV2ZW50JiBldmVudCkKICAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9k
ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1l
bnQ+IGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUuZ2V0KCkp
OwotICAgICAgICBpZiAoaW5wdXRFbGVtZW50LT5mb3JtKCkgIT0gZWxlbWVudCgpLT5mb3JtKCkp
CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmZvcm0oKSAhPSBlbGVtZW50KCkuZm9ybSgpKQog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0
b24oKSAmJiBpbnB1dEVsZW1lbnQtPm5hbWUoKSA9PSBlbGVtZW50KCktPm5hbWUoKSAmJiBpbnB1
dEVsZW1lbnQtPmlzRm9jdXNhYmxlKCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKS5zZXRGb2N1c2VkRWxlbWVudChpbnB1dEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBpZiAo
aW5wdXRFbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkgJiYgaW5wdXRFbGVtZW50LT5uYW1lKCkgPT0g
ZWxlbWVudCgpLm5hbWUoKSAmJiBpbnB1dEVsZW1lbnQtPmlzRm9jdXNhYmxlKCkpIHsKKyAgICAg
ICAgICAgIGVsZW1lbnQoKS5kb2N1bWVudCgpLnNldEZvY3VzZWRFbGVtZW50KGlucHV0RWxlbWVu
dC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIGlucHV0RWxlbWVudC0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygm
ZXZlbnQsIFNlbmROb0V2ZW50cywgRG9Ob3RTaG93UHJlc3NlZExvb2spOwogICAgICAgICAgICAg
ZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNSwx
MCArMTA4LDkgQEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVudChLZXlib2Fy
ZEV2ZW50JiBldmVudCkKICAgICBpZiAoa2V5ICE9ICJVKzAwMjAiKQogICAgICAgICByZXR1cm47
CiAKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKICAgICAvLyBJZiBhbiB1bnNlbGVjdGVkIHJhZGlv
IGlzIHRhYmJlZCBpbnRvIChiZWNhdXNlIHRoZSBlbnRpcmUgZ3JvdXAgaGFzIG5vdGhpbmcKICAg
ICAvLyBjaGVja2VkLCBvciBiZWNhdXNlIG9mIHNvbWUgZXhwbGljaXQgLmZvY3VzKCkgY2FsbCks
IHRoZW4gYWxsb3cgc3BhY2UgdG8gY2hlY2sgaXQuCi0gICAgaWYgKGVsZW1lbnQoKS0+Y2hlY2tl
ZCgpKQorICAgIGlmIChlbGVtZW50KCkuY2hlY2tlZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
ZGlzcGF0Y2hTaW11bGF0ZWRDbGlja0lmQWN0aXZlKGV2ZW50KTsKIH0KQEAgLTExOCwzNSArMTIw
LDMyIEBAIGJvb2wgUmFkaW9JbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRF
dmVudCogZXZlbnQpIGNvbnN0CiAgICAgaWYgKCFJbnB1dFR5cGU6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUoZXZlbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKICAgICAvLyBXaGVuIHVzaW5nIFNwYXRpYWwgTmF2aWdhdGlvbiwgZXZlcnkgcmFkaW8gYnV0
dG9uIHNob3VsZCBiZSBmb2N1c2FibGUuCi0gICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSkKKyAgICBpZiAoaXNTcGF0aWFsTmF2
aWdhdGlvbkVuYWJsZWQoZWxlbWVudCgpLmRvY3VtZW50KCkuZnJhbWUoKSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gTmV2ZXIgYWxsb3cga2V5Ym9hcmQgdGFiYmluZyB0byBsZWF2
ZSB5b3UgaW4gdGhlIHNhbWUgcmFkaW8gZ3JvdXAuICBBbHdheXMKICAgICAvLyBza2lwIGFueSBv
dGhlciBlbGVtZW50cyBpbiB0aGUgZ3JvdXAuCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGN1cnJlbnRG
b2N1c2VkTm9kZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpOworICAg
IFJlZlB0cjxFbGVtZW50PiBjdXJyZW50Rm9jdXNlZE5vZGUgPSBlbGVtZW50KCkuZG9jdW1lbnQo
KS5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihjdXJyZW50
Rm9jdXNlZE5vZGUpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGZvY3VzZWRJbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpjdXJyZW50Rm9jdXNlZE5vZGUpOwotICAgICAg
ICBpZiAoZm9jdXNlZElucHV0LmlzUmFkaW9CdXR0b24oKSAmJiBmb2N1c2VkSW5wdXQuZm9ybSgp
ID09IGVsZW1lbnQoKS0+Zm9ybSgpICYmIGZvY3VzZWRJbnB1dC5uYW1lKCkgPT0gZWxlbWVudCgp
LT5uYW1lKCkpCisgICAgICAgIGlmIChmb2N1c2VkSW5wdXQuaXNSYWRpb0J1dHRvbigpICYmIGZv
Y3VzZWRJbnB1dC5mb3JtKCkgPT0gZWxlbWVudCgpLmZvcm0oKSAmJiBmb2N1c2VkSW5wdXQubmFt
ZSgpID09IGVsZW1lbnQoKS5uYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgLy8gQWxsb3cga2V5Ym9hcmQgZm9jdXMgaWYgd2UncmUgY2hlY2tlZCBvciBpZiBu
b3RoaW5nIGluIHRoZSBncm91cCBpcyBjaGVja2VkLgotICAgIHJldHVybiBlbGVtZW50KCktPmNo
ZWNrZWQoKSB8fCAhZWxlbWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91cCgpOworICAg
IHJldHVybiBlbGVtZW50KCkuY2hlY2tlZCgpIHx8ICFlbGVtZW50KCkuY2hlY2tlZFJhZGlvQnV0
dG9uRm9yR3JvdXAoKTsKIH0KIAogYm9vbCBSYWRpb0lucHV0VHlwZTo6c2hvdWxkU2VuZENoYW5n
ZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCgpCiB7CiAgICAgLy8gRG9uJ3Qgc2VuZCBhIGNoYW5n
ZSBldmVudCBmb3IgYSByYWRpbyBidXR0b24gdGhhdCdzIGdldHRpbmcgdW5jaGVja2VkLgogICAg
IC8vIFRoaXMgd2FzIGRvbmUgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIG90aGVyIGJyb3dzZXJz
LgotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50KCktPmNoZWNrZWQo
KTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmNoZWNrZWQoKTsKIH0KIAogdm9pZCBSYWRpb0lucHV0
VHlwZTo6d2lsbERpc3BhdGNoQ2xpY2soSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdXNl
IHByZXZlbnREZWZhdWx0IG9yICJyZXR1cm4gZmFsc2UiIHRvIHJldmVyc2UgdGhlIHNlbGVjdGlv
biB3ZSBkbyBoZXJlLgogICAgIC8vIFRoZSBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIG9iamVjdCBj
b250YWlucyB3aGF0IHdlIG5lZWQgdG8gdW5kbyB3aGF0IHdlIGRpZCBoZXJlIGluIGRpZERpc3Bh
dGNoQ2xpY2suCiAKQEAgLTE1NCwxMCArMTUzLDEwIEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6Ondp
bGxEaXNwYXRjaENsaWNrKElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQogICAgIC8vIFRo
ZXJlZm9yZSBpZiBub3RoaW5nIGlzIGN1cnJlbnRseSBzZWxlY3RlZCwgd2Ugd29uJ3QgYWxsb3cg
dGhlIHVwY29taW5nIGFjdGlvbiB0byBiZSAidW5kb25lIiwgc2luY2UKICAgICAvLyB3ZSB3YW50
IHNvbWUgb2JqZWN0IGluIHRoZSByYWRpbyBncm91cCB0byBhY3R1YWxseSBnZXQgc2VsZWN0ZWQu
CiAKLSAgICBzdGF0ZS5jaGVja2VkID0gZWxlbWVudCgpLT5jaGVja2VkKCk7Ci0gICAgc3RhdGUu
Y2hlY2tlZFJhZGlvQnV0dG9uID0gZWxlbWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91
cCgpOworICAgIHN0YXRlLmNoZWNrZWQgPSBlbGVtZW50KCkuY2hlY2tlZCgpOworICAgIHN0YXRl
LmNoZWNrZWRSYWRpb0J1dHRvbiA9IGVsZW1lbnQoKS5jaGVja2VkUmFkaW9CdXR0b25Gb3JHcm91
cCgpOwogCi0gICAgZWxlbWVudCgpLT5zZXRDaGVja2VkKHRydWUsIERpc3BhdGNoQ2hhbmdlRXZl
bnQpOworICAgIGVsZW1lbnQoKS5zZXRDaGVja2VkKHRydWUsIERpc3BhdGNoQ2hhbmdlRXZlbnQp
OwogfQogCiB2b2lkIFJhZGlvSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50JiBldmVu
dCwgY29uc3QgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgc3RhdGUpCkBAIC0xNjYsOCArMTY1LDcg
QEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayhFdmVudCYgZXZlbnQsIGNv
bnN0IElucHV0RWxlbWVudENsaWNrU3RhdGUKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2lu
YWwgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uIGlmIHBvc3NpYmxlLgogICAgICAgICAvLyBNYWtlIHN1
cmUgaXQgaXMgc3RpbGwgYSByYWRpbyBidXR0b24gYW5kIG9ubHkgZG8gdGhlIHJlc3RvcmF0aW9u
IGlmIGl0IHN0aWxsIGJlbG9uZ3MgdG8gb3VyIGdyb3VwLgogICAgICAgICBhdXRvJiBidXR0b24g
PSBzdGF0ZS5jaGVja2VkUmFkaW9CdXR0b247Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwot
ICAgICAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpICYmIGJ1dHRvbi0+
Zm9ybSgpID09IGVsZW1lbnQoKS0+Zm9ybSgpICYmIGJ1dHRvbi0+bmFtZSgpID09IGVsZW1lbnQo
KS0+bmFtZSgpKQorICAgICAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigp
ICYmIGJ1dHRvbi0+Zm9ybSgpID09IGVsZW1lbnQoKS5mb3JtKCkgJiYgYnV0dG9uLT5uYW1lKCkg
PT0gZWxlbWVudCgpLm5hbWUoKSkKICAgICAgICAgICAgIGJ1dHRvbi0+c2V0Q2hlY2tlZCh0cnVl
KTsKICAgICB9CiAKQEAgLTE4Miw4ICsxODAsNyBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjppc1Jh
ZGlvQnV0dG9uKCkgY29uc3QKIAogYm9vbCBSYWRpb0lucHV0VHlwZTo6bWF0Y2hlc0luZGV0ZXJt
aW5hdGVQc2V1ZG9DbGFzcygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
Y29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9ICp0aGlzLT5lbGVtZW50KCk7CisgICAg
Y29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKICAgICBp
ZiAoY29uc3QgUmFkaW9CdXR0b25Hcm91cHMqIHJhZGlvQnV0dG9uR3JvdXBzID0gZWxlbWVudC5y
YWRpb0J1dHRvbkdyb3VwcygpKQogICAgICAgICByZXR1cm4gIXJhZGlvQnV0dG9uR3JvdXBzLT5o
YXNDaGVja2VkQnV0dG9uKCZlbGVtZW50KTsKICAgICByZXR1cm4gIWVsZW1lbnQuY2hlY2tlZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAppbmRleCA0NDYwZDcxOTgyZDY3
YjZmM2M4MGY0MTljODNmYmMzMWM5Yzg3ZmEwLi43ZGVmZDI2N2QzYTRlOWJkNjExMGJhNjk0ZGFl
NzhhYWFhNjMzMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRU
eXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcApAQCAt
OTIsMTQgKzkyLDEyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmFuZ2VJbnB1dFR5cGU6OmZvcm1D
b250cm9sVHlwZSgpIGNvbnN0CiAKIGRvdWJsZSBSYW5nZUlucHV0VHlwZTo6dmFsdWVBc0RvdWJs
ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHBhcnNlVG9E
b3VibGVGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHBhcnNl
VG9Eb3VibGVGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS52YWx1ZSgpKTsKIH0KIAogRXhjZXB0aW9u
T3I8dm9pZD4gUmFuZ2VJbnB1dFR5cGU6OnNldFZhbHVlQXNEZWNpbWFsKGNvbnN0IERlY2ltYWwm
IG5ld1ZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShzZXJpYWxp
emUobmV3VmFsdWUpLCBldmVudEJlaGF2aW9yKTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWUoc2Vy
aWFsaXplKG5ld1ZhbHVlKSwgZXZlbnRCZWhhdmlvcik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMTE1LDE3ICsxMTMsMTYgQEAgYm9vbCBSYW5nZUlucHV0VHlwZTo6c3VwcG9ydHNSZXF1aXJl
ZCgpIGNvbnN0CiAKIFN0ZXBSYW5nZSBSYW5nZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKEFu
eVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1l
bnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIHJhbmdlRGVmYXVs
dE1pbmltdW0pOwotICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IGVuc3VyZU1heGltdW0ocGFy
c2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4
QXR0ciksIHJhbmdlRGVmYXVsdE1heGltdW0pLCBtaW5pbXVtLCByYW5nZURlZmF1bHRNYXhpbXVt
KTsKKyAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCByYW5nZURlZmF1bHRNaW5p
bXVtKTsKKyAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBlbnN1cmVNYXhpbXVtKHBhcnNlVG9O
dW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciks
IHJhbmdlRGVmYXVsdE1heGltdW0pLCBtaW5pbXVtLCByYW5nZURlZmF1bHRNYXhpbXVtKTsKIAot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlY2lzaW9uVmFsdWUgPSBlbGVtZW50KCktPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocHJlY2lzaW9uQXR0cik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBwcmVjaXNpb25WYWx1ZSA9IGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKHByZWNpc2lvbkF0dHIpOwogICAgIGlmICghcHJlY2lzaW9uVmFsdWUuaXNO
dWxsKCkpIHsKICAgICAgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UocHJlY2lzaW9uVmFsdWUsICJmbG9hdCIpID8gRGVjaW1hbDo6bmFuKCkgOiAx
OwogICAgICAgICByZXR1cm4gU3RlcFJhbmdlKG1pbmltdW0sIFJhbmdlTGltaXRhdGlvbnM6OlZh
bGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCByYW5nZVN0ZXBEZXNjcmlwdGlvbik7CiAgICAg
fQogCi0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3Rl
cEhhbmRsaW5nLCByYW5nZVN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0g
U3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCByYW5nZVN0ZXBEZXNjcmlwdGlv
biwgZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsK
ICAgICByZXR1cm4gU3RlcFJhbmdlKG1pbmltdW0sIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBt
aW5pbXVtLCBtYXhpbXVtLCBzdGVwLCByYW5nZVN0ZXBEZXNjcmlwdGlvbik7CiB9CiAKQEAgLTEz
OCwxNSArMTM1LDE0IEBAIGJvb2wgUmFuZ2VJbnB1dFR5cGU6OmlzU3RlcHBhYmxlKCkgY29uc3QK
IAogdm9pZCBSYW5nZUlucHV0VHlwZTo6aGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNE
aXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNv
bnRyb2woKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IExl
ZnRCdXR0b24gfHwgIWlzPE5vZGU+KGV2ZW50LnRhcmdldCgpKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd1Jvb3QoKSk7CisgICAgQVNTRVJUKGVsZW1lbnQo
KS5zaGFkb3dSb290KCkpOwogICAgIGF1dG8mIHRhcmdldE5vZGUgPSBkb3duY2FzdDxOb2RlPigq
ZXZlbnQudGFyZ2V0KCkpOwotICAgIGlmICgmdGFyZ2V0Tm9kZSAhPSBlbGVtZW50KCkgJiYgIXRh
cmdldE5vZGUuaXNEZXNjZW5kYW50T2YoZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCku
Z2V0KCkpKQorICAgIGlmICgmdGFyZ2V0Tm9kZSAhPSAmZWxlbWVudCgpICYmICF0YXJnZXROb2Rl
LmlzRGVzY2VuZGFudE9mKGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgYXV0byYgdGh1bWIgPSB0eXBlZFNsaWRlclRodW1iRWxlbWVu
dCgpOwogICAgIGlmICgmdGFyZ2V0Tm9kZSA9PSAmdGh1bWIpCkBAIC0xNjAsMTAgKzE1NiwxMiBA
QCB2b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVNb3VzZURvd25FdmVudChNb3VzZUV2ZW50JiBl
dmVudCkKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZVRvdWNoRXZlbnQoVG91Y2hFdmVudCYg
ZXZlbnQpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQorICAgIGF1dG8gd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyk7CiAgICAgdHlwZWRTbGlkZXJUaHVtYkVsZW1lbnQoKS5oYW5kbGVUb3VjaEV2
ZW50KGV2ZW50KTsKKyAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICByZXR1cm47CiAjZWxpZiBF
TkFCTEUoVE9VQ0hfU0xJREVSKQotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVt
ZW50KCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChlbGVtZW50KCkuaXNEaXNh
YmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQpIHsKQEAgLTE5NiwxMyArMTk0LDEyIEBA
IHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmRpc2FibGVkU3RhdGVDaGFuZ2VkKCkKIAogdm9pZCBSYW5n
ZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewot
ICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRGb3Jt
Q29udHJvbCgpKQorICAgIGlmIChlbGVtZW50KCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IFN0cmluZyYga2V5ID0gZXZlbnQua2V5SWRlbnRp
ZmllcigpOwogCi0gICAgY29uc3QgRGVjaW1hbCBjdXJyZW50ID0gcGFyc2VUb051bWJlck9yTmFO
KGVsZW1lbnQoKS0+dmFsdWUoKSk7CisgICAgY29uc3QgRGVjaW1hbCBjdXJyZW50ID0gcGFyc2VU
b051bWJlck9yTmFOKGVsZW1lbnQoKS52YWx1ZSgpKTsKICAgICBBU1NFUlQoY3VycmVudC5pc0Zp
bml0ZSgpKTsKIAogICAgIFN0ZXBSYW5nZSBzdGVwUmFuZ2UoY3JlYXRlU3RlcFJhbmdlKFJlamVj
dEFueSkpOwpAQCAtMjEwLDExICsyMDcsMTEgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6aGFuZGxl
S2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogCiAgICAgLy8gRklYTUU6IFdlIGNh
bid0IHVzZSBzdGVwVXAoKSBmb3IgdGhlIHN0ZXAgdmFsdWUgImFueSIuIFNvLCB3ZSBpbmNyZWFz
ZQogICAgIC8vIG9yIGRlY3JlYXNlIHRoZSB2YWx1ZSBieSAxLzEwMCBvZiB0aGUgdmFsdWUgcmFu
Z2UuIElzIGl0IHJlYXNvbmFibGU/Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0gZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKHN0ZXBBdHRyKSwgImFueSIpID8gKHN0ZXBSYW5nZS5tYXhpbXVtKCkgLSBzdGVwUmFu
Z2UubWluaW11bSgpKSAvIDEwMCA6IHN0ZXBSYW5nZS5zdGVwKCk7CisgICAgY29uc3QgRGVjaW1h
bCBzdGVwID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZWxlbWVudCgpLmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpLCAiYW55IikgPyAoc3RlcFJhbmdlLm1h
eGltdW0oKSAtIHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAwIDogc3RlcFJhbmdlLnN0ZXAoKTsK
ICAgICBjb25zdCBEZWNpbWFsIGJpZ1N0ZXAgPSBzdGQ6Om1heCgoc3RlcFJhbmdlLm1heGltdW0o
KSAtIHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAsIHN0ZXApOwogCiAgICAgYm9vbCBpc1ZlcnRp
Y2FsID0gZmFsc2U7Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudCgpLT5yZW5kZXJl
cigpKSB7CisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudCgpLnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlcmVyLT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KTsKICAgICAgICAgaXNWZXJ0aWNhbCA9IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBh
cnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OwogICAgIH0KQEAgLTI0NSw4ICsyNDIsOCBAQCB2
b2lkIFJhbmdlSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZl
bnQpCiAgICAgICAgIEV2ZW50UXVldWVTY29wZSBzY29wZTsKICAgICAgICAgc2V0VmFsdWVBc0Rl
Y2ltYWwobmV3VmFsdWUsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CiAKLSAgICAgICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpKQotICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24oZWxl
bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCk7CisgICAgICAgIGlmIChBWE9i
amVjdENhY2hlKiBjYWNoZSA9IGVsZW1lbnQoKS5kb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RD
YWNoZSgpKQorICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24oJmVsZW1lbnQoKSwg
QVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQpOwogICAgIH0KIAogICAgIGV2ZW50LnNldERl
ZmF1bHRIYW5kbGVkKCk7CkBAIC0yNTQsMjcgKzI1MSwyNSBAQCB2b2lkIFJhbmdlSW5wdXRUeXBl
OjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAKIHZvaWQgUmFuZ2VJ
bnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIEFTU0VSVChlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSk7CisgICAgQVNT
RVJUKGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCkpOwogCi0gICAgRG9jdW1lbnQmIGRv
Y3VtZW50ID0gZWxlbWVudCgpLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGVsZW1lbnQoKS5kb2N1bWVudCgpOwogICAgIGF1dG8gdHJhY2sgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKICAgICB0cmFjay0+c2V0UHNldWRvKEF0b21pY1N0cmluZygiLXdl
YmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2siLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7CiAgICAgdHJhY2stPmFwcGVuZENoaWxkKFNsaWRlclRodW1iRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KSk7CiAgICAgYXV0byBjb250YWluZXIgPSBTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodHJhY2sp
OwotICAgIGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChjb250
YWluZXIpOworICAgIGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCktPmFwcGVuZENoaWxk
KGNvbnRhaW5lcik7CiB9CiAKIEhUTUxFbGVtZW50KiBSYW5nZUlucHV0VHlwZTo6c2xpZGVyVHJh
Y2tFbGVtZW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCkpOwotICAgIEFTU0VSVChlbGVtZW50KCkt
PnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpKTsgLy8gY29udGFpbmVyCi0gICAg
QVNTRVJUKGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCktPmlz
SFRNTEVsZW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9v
dCgpLT5maXJzdENoaWxkKCktPmZpcnN0Q2hpbGQoKSk7IC8vIHRyYWNrCisgICAgQVNTRVJUKGVs
ZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCkpOworICAgIEFTU0VSVChlbGVtZW50KCkudXNl
ckFnZW50U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCkpOyAvLyBjb250YWluZXIKKyAgICBBU1NF
UlQoZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpLT5pc0hUTUxF
bGVtZW50KCkpOworICAgIEFTU0VSVChlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5m
aXJzdENoaWxkKCktPmZpcnN0Q2hpbGQoKSk7IC8vIHRyYWNrCiAKLSAgICBSZWZQdHI8U2hhZG93
Um9vdD4gcm9vdCA9IGVsZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpOworICAgIFJlZlB0
cjxTaGFkb3dSb290PiByb290ID0gZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKICAg
ICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtMzAwLDggKzI5
NSw3IEBAIEhUTUxFbGVtZW50KiBSYW5nZUlucHV0VHlwZTo6c2xpZGVyVGh1bWJFbGVtZW50KCkg
Y29uc3QKIAogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFJhbmdlSW5wdXRUeXBlOjpjcmVhdGVJ
bnB1dFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQo
KSk7Ci0gICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNsaWRlcj4oKmVsZW1lbnQoKSwg
V1RGTW92ZShzdHlsZSkpOworICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTbGlkZXI+
KGVsZW1lbnQoKSwgV1RGTW92ZShzdHlsZSkpOwogfQogCiBEZWNpbWFsIFJhbmdlSW5wdXRUeXBl
OjpwYXJzZVRvTnVtYmVyKGNvbnN0IFN0cmluZyYgc3JjLCBjb25zdCBEZWNpbWFsJiBkZWZhdWx0
VmFsdWUpIGNvbnN0CkBAIC0zMTksMTAgKzMxMywxMiBAQCBTdHJpbmcgUmFuZ2VJbnB1dFR5cGU6
OnNlcmlhbGl6ZShjb25zdCBEZWNpbWFsJiB2YWx1ZSkgY29uc3QKIC8vIEZJWE1FOiBDb3VsZCBz
aGFyZSB0aGlzIHdpdGggQmFzZUNsaWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUgYW5kIEJhc2VDaGVj
a2FibGVJbnB1dFR5cGUgaWYgd2UgaGFkIGEgY29tbW9uIGJhc2UgY2xhc3MuCiB2b2lkIFJhbmdl
SW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpCiB7CisgICAg
YXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsKICAgICBJbnB1dFR5cGU6OmFjY2Vz
c0tleUFjdGlvbihzZW5kTW91c2VFdmVudHMpOworICAgIGlmICghd2Vha1RoaXMpCisgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+ZGlzcGF0
Y2hTaW11bGF0ZWRDbGljaygwLCBzZW5kTW91c2VFdmVudHMgPyBTZW5kTW91c2VVcERvd25FdmVu
dHMgOiBTZW5kTm9FdmVudHMpOworICAgIGVsZW1lbnQoKS5kaXNwYXRjaFNpbXVsYXRlZENsaWNr
KDAsIHNlbmRNb3VzZUV2ZW50cyA/IFNlbmRNb3VzZVVwRG93bkV2ZW50cyA6IFNlbmROb0V2ZW50
cyk7CiB9CiAKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkKQEAgLTMzMCw5ICszMjYsMTEgQEAgdm9pZCBSYW5nZUlucHV0VHlw
ZTo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogICAgIC8vIEZJ
WE1FOiBEb24ndCB3ZSBuZWVkIHRvIGRvIHRoaXMgd29yayBmb3IgcHJlY2lzaW9uQXR0ciB0b28/
CiAgICAgaWYgKG5hbWUgPT0gbWF4QXR0ciB8fCBuYW1lID09IG1pbkF0dHIpIHsKICAgICAgICAg
Ly8gU2FuaXRpemUgdGhlIHZhbHVlLgotICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMt
PmVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0RpcnR5VmFsdWUoKSkK
LSAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRWYWx1ZShlbGVtZW50LT52YWx1ZSgpKTsKKyAg
ICAgICAgaWYgKGVsZW1lbnQoKS5oYXNEaXJ0eVZhbHVlKCkpIHsKKyAgICAgICAgICAgIGF1dG8g
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CisgICAgICAgICAgICBlbGVtZW50KCkuc2V0
VmFsdWUoZWxlbWVudCgpLnZhbHVlKCkpOworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdHlwZWRTbGlkZXJUaHVt
YkVsZW1lbnQoKS5zZXRQb3NpdGlvbkZyb21WYWx1ZSgpOwogICAgIH0KQEAgLTM0MSwxNSArMzM5
LDE2IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkKIAogdm9pZCBSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCZWhhdmlvcikKIHsKKyAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOwog
ICAgIElucHV0VHlwZTo6c2V0VmFsdWUodmFsdWUsIHZhbHVlQ2hhbmdlZCwgZXZlbnRCZWhhdmlv
cik7CisgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF2YWx1
ZUNoYW5nZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChldmVudEJlaGF2aW9yID09IERp
c3BhdGNoTm9FdmVudCkgewotICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICAgICAgZWxl
bWVudCgpLT5zZXRUZXh0QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KHZhbHVlKTsKLSAg
ICB9CisgICAgaWYgKGV2ZW50QmVoYXZpb3IgPT0gRGlzcGF0Y2hOb0V2ZW50KQorICAgICAgICBl
bGVtZW50KCkuc2V0VGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh2YWx1ZSk7CiAK
ICAgICB0eXBlZFNsaWRlclRodW1iRWxlbWVudCgpLnNldFBvc2l0aW9uRnJvbVZhbHVlKCk7CiB9
CkBAIC0zODYsOCArMzg1LDcgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6dXBkYXRlVGlja01hcmtW
YWx1ZXMoKQogICAgICAgICByZXR1cm47CiAgICAgbV90aWNrTWFya1ZhbHVlcy5jbGVhcigpOwog
ICAgIG1fdGlja01hcmtWYWx1ZXNEaXJ0eSA9IGZhbHNlOwotICAgIEFTU0VSVChlbGVtZW50KCkp
OwotICAgIGF1dG8gZGF0YUxpc3QgPSBlbGVtZW50KCktPmRhdGFMaXN0KCk7CisgICAgYXV0byBk
YXRhTGlzdCA9IGVsZW1lbnQoKS5kYXRhTGlzdCgpOwogICAgIGlmICghZGF0YUxpc3QpCiAgICAg
ICAgIHJldHVybjsKICAgICBSZWY8SFRNTENvbGxlY3Rpb24+IG9wdGlvbnMgPSBkYXRhTGlzdC0+
b3B0aW9ucygpOwpAQCAtMzk2LDcgKzM5NCw3IEBAIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OnVwZGF0
ZVRpY2tNYXJrVmFsdWVzKCkKICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBvcHRpb25zLT5p
dGVtKGkpOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYgb3B0aW9uRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIFN0cmluZyBvcHRpb25WYWx1
ZSA9IG9wdGlvbkVsZW1lbnQudmFsdWUoKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KCktPmlzVmFs
aWRWYWx1ZShvcHRpb25WYWx1ZSkpCisgICAgICAgIGlmICghZWxlbWVudCgpLmlzVmFsaWRWYWx1
ZShvcHRpb25WYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV90aWNrTWFy
a1ZhbHVlcy5hcHBlbmQocGFyc2VUb051bWJlcihvcHRpb25WYWx1ZSwgRGVjaW1hbDo6bmFuKCkp
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuY3BwCmluZGV4IDQwNWNi
MmNjNTk0YTNkMzMxMTQ2YTg1NWRiZmExOTViM2FiNzA5MTUuLjAxNmZlMTA0YmIyNmQzMjNkY2M0
YmIzNDU3NjgxMzA4YTk3YzA4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmVz
ZXRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUu
Y3BwCkBAIC01MiwxMCArNTIsOSBAQCBib29sIFJlc2V0SW5wdXRUeXBlOjpzdXBwb3J0c1ZhbGlk
YXRpb24oKSBjb25zdAogCiB2b2lkIFJlc2V0SW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2
ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoZWxl
bWVudCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCAhZWxlbWVudCgpLT5mb3JtKCkpCisg
ICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCAhZWxlbWVudCgpLmZv
cm0oKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVsZW1lbnQoKS0+Zm9ybSgpLT5yZXNldCgpOwor
ICAgIGVsZW1lbnQoKS5mb3JtKCktPnJlc2V0KCk7CiAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCmluZGV4IDcx
MjQzOTFhMzA2M2VlNWEyNjI4ZTQ2ZDNmY2FjODVjNjE2OGFlZWUuLjQ5ODIzMWQyNjQwMWQ3YWUy
OWZlZTUzYTMxZWZiZGYwZGNlN2Y0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
U2VhcmNoSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0
VHlwZS5jcHAKQEAgLTU2LDkgKzU2LDggQEAgdm9pZCBTZWFyY2hJbnB1dFR5cGU6OmFkZFNlYXJj
aFJlc3VsdCgpCiAgICAgLy8gTm9ybWFsbHkgd2UndmUgZ290IHRoZSBjb3JyZWN0IHJlbmRlcmVy
IGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiBIb3dldmVyIHdoZW4gdGhlIGlucHV0IHR5cGUgY2hh
bmdlcwogICAgIC8vIHdlIGRvbid0IHVwZGF0ZSB0aGUgYXNzb2NpYXRlZCByZW5kZXJlcnMgdW50
aWwgYWZ0ZXIgdGhlIG5leHQgdHJlZSB1cGRhdGUsIHNvIHdlIGNvdWxkIGFjdHVhbGx5IGVuZCB1
cCBoZXJlCiAgICAgLy8gd2l0aCBhIG1pc21hdGNoZWQgcmVuZGVyZXIgKGUuZy4gdGhyb3VnaCBm
b3JtIHN1Ym1pc3Npb24pLgotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChpczxSZW5k
ZXJTZWFyY2hGaWVsZD4oZWxlbWVudCgpLT5yZW5kZXJlcigpKSkKLSAgICAgICAgZG93bmNhc3Q8
UmVuZGVyU2VhcmNoRmllbGQ+KCplbGVtZW50KCktPnJlbmRlcmVyKCkpLmFkZFNlYXJjaFJlc3Vs
dCgpOworICAgIGlmIChpczxSZW5kZXJTZWFyY2hGaWVsZD4oZWxlbWVudCgpLnJlbmRlcmVyKCkp
KQorICAgICAgICBkb3duY2FzdDxSZW5kZXJTZWFyY2hGaWVsZD4oKmVsZW1lbnQoKS5yZW5kZXJl
cigpKS5hZGRTZWFyY2hSZXN1bHQoKTsKICNlbmRpZgogfQogCkBAIC03Niw4ICs3NSwxMCBAQCB2
b2lkIFNlYXJjaElucHV0VHlwZTo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQogewogICAgIGlmIChuYW1lID09IHJlc3VsdHNBdHRyKSB7CiAgICAgICAgIGlmICht
X3Jlc3VsdHNCdXR0b24pIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+
ZWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHVwZGF0ZVJlc3VsdEJ1dHRvblBzZXVkb1R5cGUo
Km1fcmVzdWx0c0J1dHRvbiwgZWxlbWVudC0+bWF4UmVzdWx0cygpKTsKKyAgICAgICAgICAgIGF1
dG8gd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CisgICAgICAgICAgICB1cGRhdGVSZXN1
bHRCdXR0b25Qc2V1ZG9UeXBlKCptX3Jlc3VsdHNCdXR0b24sIGVsZW1lbnQoKS5tYXhSZXN1bHRz
KCkpOworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9CiAgICAgQmFzZVRleHRJbnB1dFR5cGU6OmF0dHJpYnV0ZUNoYW5n
ZWQobmFtZSk7CkBAIC04NSw4ICs4Niw3IEBAIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjphdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiAKIFJlbmRlclB0cjxSZW5kZXJF
bGVtZW50PiBTZWFyY2hJbnB1dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JiBzdHlsZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gY3JlYXRlUmVu
ZGVyZXI8UmVuZGVyU2VhcmNoRmllbGQ+KCplbGVtZW50KCksIFdURk1vdmUoc3R5bGUpKTsKKyAg
ICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2VhcmNoRmllbGQ+KGVsZW1lbnQoKSwgV1RG
TW92ZShzdHlsZSkpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNlYXJjaElucHV0VHlwZTo6
Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKQEAgLTExNSwxMiArMTE1LDExIEBAIHZvaWQgU2VhcmNo
SW5wdXRUeXBlOjpjcmVhdGVTaGFkb3dTdWJ0cmVlKCkKICAgICBBU1NFUlQoY29udGFpbmVyKTsK
ICAgICBBU1NFUlQodGV4dFdyYXBwZXIpOwogCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
bV9yZXN1bHRzQnV0dG9uID0gU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSk7Ci0gICAgdXBkYXRlUmVzdWx0QnV0dG9uUHNldWRvVHlw
ZSgqbV9yZXN1bHRzQnV0dG9uLCBlbGVtZW50KCktPm1heFJlc3VsdHMoKSk7CisgICAgbV9yZXN1
bHRzQnV0dG9uID0gU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGVsZW1l
bnQoKS5kb2N1bWVudCgpKTsKKyAgICB1cGRhdGVSZXN1bHRCdXR0b25Qc2V1ZG9UeXBlKCptX3Jl
c3VsdHNCdXR0b24sIGVsZW1lbnQoKS5tYXhSZXN1bHRzKCkpOwogICAgIGNvbnRhaW5lci0+aW5z
ZXJ0QmVmb3JlKCptX3Jlc3VsdHNCdXR0b24sIHRleHRXcmFwcGVyLmdldCgpKTsKIAotICAgIG1f
Y2FuY2VsQnV0dG9uID0gU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpjcmVhdGUoZWxl
bWVudCgpLT5kb2N1bWVudCgpKTsKKyAgICBtX2NhbmNlbEJ1dHRvbiA9IFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS5kb2N1bWVudCgpKTsKICAgICBjb250
YWluZXItPmluc2VydEJlZm9yZSgqbV9jYW5jZWxCdXR0b24sIHRleHRXcmFwcGVyLT5uZXh0U2li
bGluZygpKTsKIH0KIApAQCAtMTM2LDE1ICsxMzUsMTQgQEAgSFRNTEVsZW1lbnQqIFNlYXJjaElu
cHV0VHlwZTo6Y2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0CiAKIHZvaWQgU2VhcmNoSW5wdXRU
eXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxlZE9yUmVhZE9ubHko
KSkgeworICAgIGlmIChlbGVtZW50KCkuaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAg
ICBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChldmVudCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIGtleSA9IGV2ZW50LmtleUlkZW50
aWZpZXIoKTsKICAgICBpZiAoa2V5ID09ICJVKzAwMUIiKSB7Ci0gICAgICAgIFJlZjxIVE1MSW5w
dXRFbGVtZW50PiBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQoKmVsZW1lbnQoKSk7CisgICAgICAgIFJl
ZjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQoZWxlbWVudCgpKTsKICAg
ICAgICAgcHJvdGVjdGVkSW5wdXRFbGVtZW50LT5zZXRWYWx1ZUZvclVzZXIoZW1wdHlTdHJpbmco
KSk7CiAgICAgICAgIHByb3RlY3RlZElucHV0RWxlbWVudC0+b25TZWFyY2goKTsKICAgICAgICAg
ZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKQEAgLTE2Miw5ICsxNjAsOCBAQCB2b2lkIFNlYXJj
aElucHV0VHlwZTo6ZGVzdHJveVNoYWRvd1N1YnRyZWUoKQogCiB2b2lkIFNlYXJjaElucHV0VHlw
ZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAg
ICBBU1NFUlQoZWxlbWVudCgpLT5yZW5kZXJlcigpKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBl
bGVtZW50KCktPmlubmVyVGV4dFZhbHVlKCkubGVuZ3RoKCk7CisgICAgQVNTRVJUKGVsZW1lbnQo
KS5yZW5kZXJlcigpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50KCkuaW5uZXJUZXh0
VmFsdWUoKS5sZW5ndGgoKTsKIAogICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgIG1fc2VhcmNo
RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMF9tcyk7CkBAIC0xODMsMjEgKzE4MCwxOCBAQCB2b2lk
IFNlYXJjaElucHV0VHlwZTo6c3RvcFNlYXJjaEV2ZW50VGltZXIoKQogCiB2b2lkIFNlYXJjaElu
cHV0VHlwZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgp
KTsKLSAgICBlbGVtZW50KCktPm9uU2VhcmNoKCk7CisgICAgZWxlbWVudCgpLm9uU2VhcmNoKCk7
CiB9CiAKIGJvb2wgU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNo
ZWQoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiBlbGVtZW50
KCktPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oaW5jcmVtZW50YWxBdHRyKTsK
KyAgICByZXR1cm4gZWxlbWVudCgpLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
aW5jcmVtZW50YWxBdHRyKTsKIH0KIAogdm9pZCBTZWFyY2hJbnB1dFR5cGU6OmRpZFNldFZhbHVl
QnlVc2VyRWRpdCgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKG1fY2FuY2Vs
QnV0dG9uICYmIGlzPFJlbmRlclNlYXJjaEZpZWxkPihlbGVtZW50KCktPnJlbmRlcmVyKCkpKQot
ICAgICAgICBkb3duY2FzdDxSZW5kZXJTZWFyY2hGaWVsZD4oKmVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkudXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpOworICAgIGlmIChtX2NhbmNlbEJ1dHRv
biAmJiBpczxSZW5kZXJTZWFyY2hGaWVsZD4oZWxlbWVudCgpLnJlbmRlcmVyKCkpKQorICAgICAg
ICBkb3duY2FzdDxSZW5kZXJTZWFyY2hGaWVsZD4oKmVsZW1lbnQoKS5yZW5kZXJlcigpKS51cGRh
dGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7CiAgICAgLy8gSWYgdGhlIGluY3JlbWVudGFsIGF0
dHJpYnV0ZSBpcyBzZXQsIHRoZW4gZGlzcGF0Y2ggdGhlIHNlYXJjaCBldmVudAogICAgIGlmIChz
ZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSkKICAgICAgICAgc3RhcnRTZWFyY2hFdmVu
dFRpbWVyKCk7CkBAIC0yMDcsOCArMjAxLDcgQEAgdm9pZCBTZWFyY2hJbnB1dFR5cGU6OmRpZFNl
dFZhbHVlQnlVc2VyRWRpdCgpCiAKIGJvb2wgU2VhcmNoSW5wdXRUeXBlOjpzaXplU2hvdWxkSW5j
bHVkZURlY29yYXRpb24oaW50LCBpbnQmIHByZWZlcnJlZFNpemUpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQoKSk7Ci0gICAgcHJlZmVycmVkU2l6ZSA9IGVsZW1lbnQoKS0+c2l6ZSgpOwor
ICAgIHByZWZlcnJlZFNpemUgPSBlbGVtZW50KCkuc2l6ZSgpOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5jcHAKaW5kZXggMWIxZWEwODBl
MzgwN2FjNjU0MmM1Y2EyNDkxODQ1Y2MwYzc1M2M5Yy4uM2U1YWFjMDg4MDU2ZmQ2Yjk0ZDNlNzBh
OWZmZmYxNzk3ZjYzODhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9TdWJtaXRJ
bnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNw
cApAQCAtNDgsMTAgKzQ4LDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTdWJtaXRJbnB1dFR5cGU6
OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiAKIGJvb2wgU3VibWl0SW5wdXRUeXBlOjphcHBlbmRG
b3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPmlzQWN0aXZhdGVkU3VibWl0KCkpCisg
ICAgaWYgKCFlbGVtZW50KCkuaXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGZvcm1EYXRhLmFwcGVuZChlbGVtZW50KCktPm5hbWUoKSwgZWxlbWVudCgpLT52
YWx1ZVdpdGhEZWZhdWx0KCkpOworICAgIGZvcm1EYXRhLmFwcGVuZChlbGVtZW50KCkubmFtZSgp
LCBlbGVtZW50KCkudmFsdWVXaXRoRGVmYXVsdCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtNjIsOCArNjEsNyBAQCBib29sIFN1Ym1pdElucHV0VHlwZTo6c3VwcG9ydHNSZXF1aXJlZCgp
IGNvbnN0CiAKIHZvaWQgU3VibWl0SW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2
ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBSZWY8SFRNTElucHV0
RWxlbWVudD4gcHJvdGVjdGVkRWxlbWVudCgqZWxlbWVudCgpKTsKKyAgICBSZWY8SFRNTElucHV0
RWxlbWVudD4gcHJvdGVjdGVkRWxlbWVudChlbGVtZW50KCkpOwogICAgIGlmIChwcm90ZWN0ZWRF
bGVtZW50LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCAhcHJvdGVjdGVkRWxlbWVudC0+Zm9y
bSgpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAppbmRleCA2ZmVmZmZkYjllODE0NGU3MzM3MzQwMjkwYzg1Yjk5NWM2OTg0OWZi
Li42MjA5MzNmODY5OThlOTYzNWE2YzExMDRhYTVkMmVjNDhlNmJkOGFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93
ZWRTY29wZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKQEAgLTgzLDE4ICs4NCwx
NiBAQCBUZXh0RmllbGRJbnB1dFR5cGU6On5UZXh0RmllbGRJbnB1dFR5cGUoKQogCiBib29sIFRl
eHRGaWVsZElucHV0VHlwZTo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgaWYg
KGVsZW1lbnQoKS0+aXNSZWFkT25seSgpKQorICAgIGlmIChlbGVtZW50KCkuaXNSZWFkT25seSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICByZXR1cm4gZWxlbWVudCgpLT5p
c1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOworICAgIHJldHVybiBlbGVtZW50KCkuaXNUZXh0
Rm9ybUNvbnRyb2xGb2N1c2FibGUoKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6Omlz
TW91c2VGb2N1c2FibGUoKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJl
dHVybiBlbGVtZW50KCktPmlzVGV4dEZvcm1Db250cm9sRm9jdXNhYmxlKCk7CisgICAgcmV0dXJu
IGVsZW1lbnQoKS5pc1RleHRGb3JtQ29udHJvbEZvY3VzYWJsZSgpOwogfQogCiBib29sIFRleHRG
aWVsZElucHV0VHlwZTo6aXNUZXh0RmllbGQoKSBjb25zdApAQCAtMTE2LDI0ICsxMTUsMjggQEAg
Ym9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmlzRW1wdHlWYWx1ZSgpIGNvbnN0CiAKIGJvb2wgVGV4
dEZpZWxkSW5wdXRUeXBlOjp2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5pc1JlcXVp
cmVkKCkgJiYgdmFsdWUuaXNFbXB0eSgpOworICAgIHJldHVybiBlbGVtZW50KCkuaXNSZXF1aXJl
ZCgpICYmIHZhbHVlLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnNl
dFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2VkLCBU
ZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVoYXZpb3IpCiB7Ci0gICAgQVNTRVJUKGVsZW1l
bnQoKSk7Ci0KICAgICAvLyBHcmFiIHRoaXMgaW5wdXQgZWxlbWVudCB0byBrZWVwIHJlZmVyZW5j
ZSBldmVuIGlmIEpTIGV2ZW50IGhhbmRsZXIKICAgICAvLyBjaGFuZ2VzIGlucHV0IHR5cGUuCi0g
ICAgUmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KCplbGVtZW50KCkpOworICAgIFJlZjxIVE1M
SW5wdXRFbGVtZW50PiBpbnB1dChlbGVtZW50KCkpOwogCiAgICAgLy8gV2UgZG9uJ3QgYXNrIElu
cHV0VHlwZTo6c2V0VmFsdWUgdG8gZGlzcGF0Y2ggZXZlbnRzIGJlY2F1c2UKICAgICAvLyBUZXh0
RmllbGRJbnB1dFR5cGUgZGlzcGF0Y2hlcyBldmVudHMgZGlmZmVyZW50IHdheSBmcm9tIElucHV0
VHlwZS4KLSAgICBJbnB1dFR5cGU6OnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCB2YWx1ZUNoYW5n
ZWQsIERpc3BhdGNoTm9FdmVudCk7CisgICAgeworICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2Nv
cGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CisgICAgICAgIElucHV0VHlw
ZTo6c2V0VmFsdWUoc2FuaXRpemVkVmFsdWUsIHZhbHVlQ2hhbmdlZCwgRGlzcGF0Y2hOb0V2ZW50
KTsKKyAgICB9CiAKLSAgICBpZiAodmFsdWVDaGFuZ2VkKQorICAgIGF1dG8gd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyk7CisgICAgaWYgKHZhbHVlQ2hhbmdlZCkgewogICAgICAgICB1cGRh
dGVJbm5lclRleHRWYWx1ZSgpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KIAogICAgIHVuc2lnbmVkIG1heCA9IHZpc2libGVWYWx1ZSgpLmxlbmd0
aCgpOwogICAgIGlmIChpbnB1dC0+Zm9jdXNlZCgpKQpAQCAtMTQxLDYgKzE0NCw5IEBAIHZvaWQg
VGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVl
LCBib29sIHZhbHVlQ2hhbmdlCiAgICAgZWxzZQogICAgICAgICBpbnB1dC0+Y2FjaGVTZWxlY3Rp
b25JblJlc3BvbnNlVG9TZXRWYWx1ZShtYXgpOwogCisgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgaWYgKCF2YWx1ZUNoYW5nZWQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTUyLDExICsxNTgsMTcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlKGNv
bnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2UKICAgICAgICAgICAg
IGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CisgICAg
ICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQ6IHsKICAgICAgICAgaW5wdXQt
PmRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CisgICAgICAgIGlmICghd2Vha1RoaXMp
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xNzIsMTUgKzE4NCwxNCBAQCB2b2lkIFRl
eHRGaWVsZElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwg
Ym9vbCB2YWx1ZUNoYW5nZQogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogdm9pZCBUZXh0
RmllbGRJbnB1dFR5cGU6OmhhbmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCYpCiB7Ci0gICAgaWYg
KGVsZW1lbnQoKS0+Zm9jdXNlZCgpICYmIGVsZW1lbnQoKS0+bGlzdCgpKQorICAgIGlmIChlbGVt
ZW50KCkuZm9jdXNlZCgpICYmIGVsZW1lbnQoKS5saXN0KCkpCiAgICAgICAgIGRpc3BsYXlTdWdn
ZXN0aW9ucyhEYXRhTGlzdFN1Z2dlc3Rpb25BY3RpdmF0aW9uVHlwZTo6Q29udHJvbENsaWNrZWQp
OwogfQogI2VuZGlmCiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZl
bnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
aWYgKCFlbGVtZW50KCktPmZvY3VzZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQoKS5mb2N1c2VkKCkp
CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBjb25z
dCBTdHJpbmcmIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXIoKTsKQEAgLTE4OSwxNiArMjAwLDE1
IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRF
dmVudCYgZXZlbnQpCiAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQog
I2VuZGlmCi0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5lZGl0b3IoKS5kb1RleHRGaWVsZENv
bW1hbmRGcm9tRXZlbnQoZWxlbWVudCgpLCAmZXZlbnQpKQorICAgIFJlZlB0cjxGcmFtZT4gZnJh
bWUgPSBlbGVtZW50KCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZy
YW1lLT5lZGl0b3IoKS5kb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoJmVsZW1lbnQoKSwgJmV2
ZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiB9
CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnRGb3JTcGluQnV0
dG9uKEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IGlmIChlbGVtZW50KCktPmlzRGlzYWJsZWRPclJlYWRPbmx5KCkpCisgICAgaWYgKGVsZW1lbnQo
KS5pc0Rpc2FibGVkT3JSZWFkT25seSgpKQogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKERB
VEFMSVNUX0VMRU1FTlQpCiAgICAgaWYgKG1fc3VnZ2VzdGlvblBpY2tlcikKQEAgLTIyNCwxOCAr
MjM0LDE5IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQmIGV2
ZW50KQogCiAgICAgYm9vbCBpc0ZvY3VzRXZlbnQgPSBldmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmZvY3VzRXZlbnQ7CiAgICAgYm9vbCBpc0JsdXJFdmVudCA9IGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuYmx1ckV2ZW50OwotICAgIGlmIChpc0ZvY3VzRXZlbnQgfHwgaXNCbHVyRXZl
bnQpCisgICAgaWYgKGlzRm9jdXNFdmVudCB8fCBpc0JsdXJFdmVudCkgeworICAgICAgICBhdXRv
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOwogICAgICAgICBjYXBzTG9ja1N0YXRlTWF5
SGF2ZUNoYW5nZWQoKTsKLSAgICBpZiAoZXZlbnQuaXNNb3VzZUV2ZW50KCkgfHwgaXNGb2N1c0V2
ZW50IHx8IGlzQmx1ckV2ZW50KSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAg
ICBlbGVtZW50KCktPmZvcndhcmRFdmVudChldmVudCk7CisgICAgICAgIGlmICghd2Vha1RoaXMp
CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChldmVudC5pc01vdXNlRXZlbnQo
KSB8fCBpc0ZvY3VzRXZlbnQgfHwgaXNCbHVyRXZlbnQpCisgICAgICAgIGVsZW1lbnQoKS5mb3J3
YXJkRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERp
ZEJsdXIoKQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudCgpLnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTgs
MTcgKzI2OSwxOCBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQog
CiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlRm9jdXNFdmVudChOb2RlKiBvbGRGb2N1
c2VkTm9kZSwgRm9jdXNEaXJlY3Rpb24pCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAg
QVNTRVJUX1VOVVNFRChvbGRGb2N1c2VkTm9kZSwgb2xkRm9jdXNlZE5vZGUgIT0gZWxlbWVudCgp
KTsKLSAgICBpZiAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5m
cmFtZSgpKQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5n
KGVsZW1lbnQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRGb2N1c2VkTm9kZSwgb2xkRm9jdXNl
ZE5vZGUgIT0gJmVsZW1lbnQoKSk7CisgICAgaWYgKFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBlbGVt
ZW50KCkuZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudGV4dEZp
ZWxkRGlkQmVnaW5FZGl0aW5nKCZlbGVtZW50KCkpOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0
VHlwZTo6aGFuZGxlQmx1ckV2ZW50KCkKIHsKKyAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpOwogICAgIElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgZWxlbWVudCgpLT5lbmRFZGl0aW5nKCk7CisgICAgaWYgKCF3ZWFr
VGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIGVsZW1lbnQoKS5lbmRFZGl0aW5nKCk7CiB9CiAK
IGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50JiBl
dmVudCkKQEAgLTI3OSw4ICsyOTEsNyBAQCBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxk
U3VibWl0SW1wbGljaXRseShFdmVudCYgZXZlbnQpCiAKIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50
PiBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUlucHV0UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBz
dHlsZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lPigqZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxl
KSk7CisgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZT4oZWxlbWVudCgpLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRU
eXBlOjpuZWVkc0NvbnRhaW5lcigpIGNvbnN0CkBAIC0yOTAsMjAgKzMwMSwxNyBAQCBib29sIFRl
eHRGaWVsZElucHV0VHlwZTo6bmVlZHNDb250YWluZXIoKSBjb25zdAogCiBib29sIFRleHRGaWVs
ZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oKSBjb25zdAogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc2hvdWxkSGF2
ZVNwaW5CdXR0b24oKmVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0
b24oKS5zaG91bGRIYXZlU3BpbkJ1dHRvbihlbGVtZW50KCkpOwogfQogCiBib29sIFRleHRGaWVs
ZElucHV0VHlwZTo6c2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9yKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnNo
b3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcigqZWxlbWVudCgpKTsKKyAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OnNpbmdsZXRvbigpLnNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcihlbGVtZW50KCkp
OwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93Um9v
dCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAKICAgICBBU1NFUlQo
IW1faW5uZXJUZXh0KTsKICAgICBBU1NFUlQoIW1faW5uZXJCbG9jayk7CkBAIC0zMTEsNyArMzE5
LDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogICAg
IEFTU0VSVCghbV9jYXBzTG9ja0luZGljYXRvcik7CiAgICAgQVNTRVJUKCFtX2F1dG9GaWxsQnV0
dG9uKTsKIAotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsK
KyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCkuZG9jdW1lbnQoKTsKICAgICBib29s
IHNob3VsZEhhdmVTcGluQnV0dG9uID0gdGhpcy0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oKTsKICAg
ICBib29sIHNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvciA9IHRoaXMtPnNob3VsZEhhdmVDYXBz
TG9ja0luZGljYXRvcigpOwogICAgIGJvb2wgY3JlYXRlc0NvbnRhaW5lciA9IHNob3VsZEhhdmVT
cGluQnV0dG9uIHx8IHNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvciB8fCBuZWVkc0NvbnRhaW5l
cigpOwpAQCAtMzE5LDcgKzMyNyw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVT
aGFkb3dTdWJ0cmVlKCkKICAgICBtX2lubmVyVGV4dCA9IFRleHRDb250cm9sSW5uZXJUZXh0RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKIAogICAgIGlmICghY3JlYXRlc0NvbnRhaW5lcikgewot
ICAgICAgICBlbGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQoKm1f
aW5uZXJUZXh0KTsKKyAgICAgICAgZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBw
ZW5kQ2hpbGQoKm1faW5uZXJUZXh0KTsKICAgICAgICAgdXBkYXRlUGxhY2Vob2xkZXJUZXh0KCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTgsMjUgKzQwNiwzNCBAQCB2b2lkIFRleHRG
aWVsZElucHV0VHlwZTo6ZGVzdHJveVNoYWRvd1N1YnRyZWUoKQogdm9pZCBUZXh0RmllbGRJbnB1
dFR5cGU6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAg
ICBpZiAobmFtZSA9PSB2YWx1ZUF0dHIgfHwgbmFtZSA9PSBwbGFjZWhvbGRlckF0dHIpIHsKLSAg
ICAgICAgaWYgKGVsZW1lbnQoKSkKLSAgICAgICAgICAgIHVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7
CisgICAgICAgIGF1dG8gd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CisgICAgICAgIHVw
ZGF0ZUlubmVyVGV4dFZhbHVlKCk7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQorCiAgICAgSW5wdXRUeXBlOjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUp
OwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQog
eworICAgIGF1dG8gd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyk7CiAgICAgaWYgKG1faW5u
ZXJTcGluQnV0dG9uKQogICAgICAgICBtX2lubmVyU3BpbkJ1dHRvbi0+cmVsZWFzZUNhcHR1cmUo
KTsKICAgICBjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKKyAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICByZXR1cm47CiAgICAgdXBkYXRlQXV0b0ZpbGxCdXR0b24oKTsKIH0KIAogdm9p
ZCBUZXh0RmllbGRJbnB1dFR5cGU6OnJlYWRPbmx5U3RhdGVDaGFuZ2VkKCkKIHsKKyAgICBhdXRv
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOwogICAgIGlmIChtX2lubmVyU3BpbkJ1dHRv
bikKICAgICAgICAgbV9pbm5lclNwaW5CdXR0b24tPnJlbGVhc2VDYXB0dXJlKCk7CiAgICAgY2Fw
c0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CisgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAg
cmV0dXJuOwogICAgIHVwZGF0ZUF1dG9GaWxsQnV0dG9uKCk7CiB9CiAKQEAgLTUxNywxMyArNTM0
LDEyIEBAIFN0cmluZyBUZXh0RmllbGRJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3Ry
aW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmIGV2ZW50
KQogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0
ZXh0IHRvIGJlIGluc2VydGVkIHdpbGwgbm90IHZpb2xhdGUgdGhlIG1heExlbmd0aC4KIAogICAg
IC8vIFdlIHVzZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHQoKSBpbnN0ZWFkIG9m
IElucHV0RWxlbWVudDo6dmFsdWUoKQogICAgIC8vIGJlY2F1c2UgdGhleSBjYW4gYmUgbWlzbWF0
Y2hlZCBieSBzYW5pdGl6ZVZhbHVlKCkgaW4KICAgICAvLyBIVE1MSW5wdXRFbGVtZW50OjpzdWJ0
cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCi0gICAgU3RyaW5nIGlubmVyVGV4dCA9IGVs
ZW1lbnQoKS0+aW5uZXJUZXh0VmFsdWUoKTsKKyAgICBTdHJpbmcgaW5uZXJUZXh0ID0gZWxlbWVu
dCgpLmlubmVyVGV4dFZhbHVlKCk7CiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbnVtR3JhcGhl
bWVDbHVzdGVycyhpbm5lclRleHQpOwogCiAgICAgLy8gc2VsZWN0aW9uTGVuZ3RoIHJlcHJlc2Vu
dHMgdGhlIHNlbGVjdGlvbiBsZW5ndGggb2YgdGhpcyB0ZXh0IGZpZWxkIHRvIGJlCkBAIC01MzIs
MTggKzU0OCwxOCBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmCiAgICAgLy8gc2VsZWN0aW9uIGxl
bmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJvcCBp
bgogICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGQgd2lsbCBi
ZSByZW1vdmVkLgogICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IDA7Ci0gICAgaWYgKGVs
ZW1lbnQoKS0+Zm9jdXNlZCgpKSB7Ci0gICAgICAgIEFTU0VSVChlbmNsb3NpbmdUZXh0Rm9ybUNv
bnRyb2woZWxlbWVudCgpLT5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCkpID09IGVsZW1lbnQoKSk7Ci0gICAgICAgIGludCBzZWxlY3Rpb25TdGFydCA9
IGVsZW1lbnQoKS0+c2VsZWN0aW9uU3RhcnQoKTsKLSAgICAgICAgQVNTRVJUKHNlbGVjdGlvblN0
YXJ0IDw9IGVsZW1lbnQoKS0+c2VsZWN0aW9uRW5kKCkpOwotICAgICAgICBpbnQgc2VsZWN0aW9u
Q29kZVVuaXRDb3VudCA9IGVsZW1lbnQoKS0+c2VsZWN0aW9uRW5kKCkgLSBzZWxlY3Rpb25TdGFy
dDsKKyAgICBpZiAoZWxlbWVudCgpLmZvY3VzZWQoKSkgeworICAgICAgICBBU1NFUlQoZW5jbG9z
aW5nVGV4dEZvcm1Db250cm9sKGVsZW1lbnQoKS5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpID09ICZlbGVtZW50KCkpOworICAgICAgICBpbnQgc2Vs
ZWN0aW9uU3RhcnQgPSBlbGVtZW50KCkuc2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgQVNTRVJU
KHNlbGVjdGlvblN0YXJ0IDw9IGVsZW1lbnQoKS5zZWxlY3Rpb25FbmQoKSk7CisgICAgICAgIGlu
dCBzZWxlY3Rpb25Db2RlVW5pdENvdW50ID0gZWxlbWVudCgpLnNlbGVjdGlvbkVuZCgpIC0gc2Vs
ZWN0aW9uU3RhcnQ7CiAgICAgICAgIHNlbGVjdGlvbkxlbmd0aCA9IHNlbGVjdGlvbkNvZGVVbml0
Q291bnQgPyBudW1HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ1ZpZXcoaW5uZXJUZXh0KS5zdWJzdHJp
bmcoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNvZGVVbml0Q291bnQpKSA6IDA7CiAgICAgfQog
ICAgIEFTU0VSVChvbGRMZW5ndGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKIAogICAgIC8vIFNlbGVj
dGVkIGNoYXJhY3RlcnMgd2lsbCBiZSByZW1vdmVkIGJ5IHRoZSBuZXh0IHRleHQgZXZlbnQuCiAg
ICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IG9sZExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKLSAg
ICB1bnNpZ25lZCBtYXhMZW5ndGggPSBpc1RleHRUeXBlKCkgPyBlbGVtZW50KCktPmVmZmVjdGl2
ZU1heExlbmd0aCgpIDogSFRNTElucHV0RWxlbWVudDo6bWF4RWZmZWN0aXZlTGVuZ3RoOworICAg
IHVuc2lnbmVkIG1heExlbmd0aCA9IGlzVGV4dFR5cGUoKSA/IGVsZW1lbnQoKS5lZmZlY3RpdmVN
YXhMZW5ndGgoKSA6IEhUTUxJbnB1dEVsZW1lbnQ6Om1heEVmZmVjdGl2ZUxlbmd0aDsKICAgICB1
bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3RoID0gbWF4TGVuZ3RoID4gYmFzZUxlbmd0aCA/IG1heExl
bmd0aCAtIGJhc2VMZW5ndGggOiAwOwogCiAgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRl
eHQgdG8gYXZvaWQgdmlvbGF0aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0cmFpbnRz
LgpAQCAtNTcxLDggKzU4Nyw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVQbGFj
ZWhvbGRlclRleHQoKQogewogICAgIGlmICghc3VwcG9ydHNQbGFjZWhvbGRlcigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgU3RyaW5nIHBsYWNlaG9sZGVy
VGV4dCA9IGVsZW1lbnQoKS0+c3RyaXBwZWRQbGFjZWhvbGRlcigpOworICAgIFN0cmluZyBwbGFj
ZWhvbGRlclRleHQgPSBlbGVtZW50KCkuc3RyaXBwZWRQbGFjZWhvbGRlcigpOwogICAgIGlmIChw
bGFjZWhvbGRlclRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChtX3BsYWNlaG9sZGVyKSB7
CiAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKCpt
X3BsYWNlaG9sZGVyKTsKQEAgLTU4MSw4ICs1OTYsOCBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlw
ZTo6dXBkYXRlUGxhY2Vob2xkZXJUZXh0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAoIW1fcGxhY2Vob2xkZXIpIHsKLSAgICAgICAgbV9wbGFjZWhvbGRlciA9IFRleHRDb250cm9s
UGxhY2Vob2xkZXJFbGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVudCgpKTsKLSAgICAg
ICAgZWxlbWVudCgpLT51c2VyQWdlbnRTaGFkb3dSb290KCktPmluc2VydEJlZm9yZSgqbV9wbGFj
ZWhvbGRlciwgbV9jb250YWluZXIgPyBtX2NvbnRhaW5lci5nZXQoKSA6IGlubmVyVGV4dEVsZW1l
bnQoKS5nZXQoKSk7CisgICAgICAgIG1fcGxhY2Vob2xkZXIgPSBUZXh0Q29udHJvbFBsYWNlaG9s
ZGVyRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS5kb2N1bWVudCgpKTsKKyAgICAgICAgZWxlbWVu
dCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+aW5zZXJ0QmVmb3JlKCptX3BsYWNlaG9sZGVyLCBt
X2NvbnRhaW5lciA/IG1fY29udGFpbmVyLmdldCgpIDogaW5uZXJUZXh0RWxlbWVudCgpLmdldCgp
KTsKICAgICB9CiAgICAgbV9wbGFjZWhvbGRlci0+c2V0SW5uZXJUZXh0KHBsYWNlaG9sZGVyVGV4
dCk7CiB9CkBAIC01OTAsMTAgKzYwNSw5IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRh
dGVQbGFjZWhvbGRlclRleHQoKQogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmFwcGVuZEZvcm1E
YXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCBtdWx0aXBhcnQpIGNvbnN0CiB7CiAgICAg
SW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShmb3JtRGF0YSwgbXVsdGlwYXJ0KTsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBhdXRvJiBkaXJuYW1lQXR0clZhbHVlID0gZWxlbWVudCgpLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpcm5hbWVBdHRyKTsKKyAgICBhdXRvJiBk
aXJuYW1lQXR0clZhbHVlID0gZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oZGlybmFtZUF0dHIpOwogICAgIGlmICghZGlybmFtZUF0dHJWYWx1ZS5pc051bGwoKSkKLSAg
ICAgICAgZm9ybURhdGEuYXBwZW5kKGRpcm5hbWVBdHRyVmFsdWUsIGVsZW1lbnQoKS0+ZGlyZWN0
aW9uRm9yRm9ybURhdGEoKSk7CisgICAgICAgIGZvcm1EYXRhLmFwcGVuZChkaXJuYW1lQXR0clZh
bHVlLCBlbGVtZW50KCkuZGlyZWN0aW9uRm9yRm9ybURhdGEoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTYwNCw4ICs2MTgsOCBAQCBTdHJpbmcgVGV4dEZpZWxkSW5wdXRUeXBlOjpjb252
ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmIHZpc2libGVWYWx1ZSkgYwogCiB2b2lk
IFRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQoKQogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIGVsZW1lbnQoKS0+c2V0Q2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQodHJ1ZSk7CisgICAgYXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KTsKKyAgICBlbGVtZW50KCkuc2V0Q2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZl
bnQodHJ1ZSk7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNhbGwgc2FuaXRpemVVc2VySW5w
dXRWYWx1ZSgpIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZQogICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6
OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgaGFzIGFscmVhZHkgY2FsbGVkCkBAIC02
MTcsMjYgKzYzMSwyOSBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5n
ZWQoKQogICAgIC8vIHVzZXIgaW5wdXQgaW4gb3JkZXIgdG8gcmV0YWluIHBhcml0eSBiZXR3ZWVu
IHdoYXQncyBpbiB0aGUgbW9kZWwgYW5kCiAgICAgLy8gd2hhdCdzIG9uIHRoZSBzY3JlZW4uIE90
aGVyd2lzZSwgd2UgcmV0YWluIHRoZSBzYW5pdGl6YXRpb24gcHJvY2VzcyBmb3IKICAgICAvLyBi
YWNrd2FyZCBjb21wYXRpYmlsaXR5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwMzQ2Ci0gICAgU3RyaW5nIGlubmVyVGV4dCA9IGNvbnZlcnRGcm9tVmlzaWJsZVZh
bHVlKGVsZW1lbnQoKS0+aW5uZXJUZXh0VmFsdWUoKSk7CisgICAgU3RyaW5nIGlubmVyVGV4dCA9
IGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGVsZW1lbnQoKS5pbm5lclRleHRWYWx1ZSgpKTsKICAg
ICBpZiAoIXN1cHBvcnRzU2VsZWN0aW9uQVBJKCkpCiAgICAgICAgIGlubmVyVGV4dCA9IHNhbml0
aXplVmFsdWUoaW5uZXJUZXh0KTsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlRnJvbVJlbmRlcmVy
KGlubmVyVGV4dCk7Ci0gICAgZWxlbWVudCgpLT51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHko
KTsKKyAgICBlbGVtZW50KCkuc2V0VmFsdWVGcm9tUmVuZGVyZXIoaW5uZXJUZXh0KTsKKyAgICBp
ZiAoIXdlYWtUaGlzKQorICAgICAgICByZXR1cm47CisgICAgZWxlbWVudCgpLnVwZGF0ZVBsYWNl
aG9sZGVyVmlzaWJpbGl0eSgpOworICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgIHJldHVybjsK
ICAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlkIGNoYW5nZS4KLSAgICBlbGVtZW50KCktPmludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKyAgICBlbGVtZW50KCkuaW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogCiAgICAgZGlkU2V0VmFsdWVCeVVzZXJFZGl0KCk7CiB9CiAKIHZvaWQgVGV4
dEZpZWxkSW5wdXRUeXBlOjpkaWRTZXRWYWx1ZUJ5VXNlckVkaXQoKQogewotICAgIEFTU0VSVChl
bGVtZW50KCkpOwotICAgIGlmICghZWxlbWVudCgpLT5mb2N1c2VkKCkpCisgICAgaWYgKCFlbGVt
ZW50KCkuZm9jdXNlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKFJlZlB0cjxGcmFtZT4g
ZnJhbWUgPSBlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPmVk
aXRvcigpLnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChlbGVtZW50KCkpOworICAgIGlmIChSZWZQ
dHI8RnJhbWU+IGZyYW1lID0gZWxlbWVudCgpLmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLnRleHREaWRDaGFuZ2VJblRleHRGaWVsZCgmZWxlbWVudCgpKTsKICNp
ZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBpZiAoZWxlbWVudCgpLT5saXN0KCkpCisg
ICAgaWYgKGVsZW1lbnQoKS5saXN0KCkpCiAgICAgICAgIGRpc3BsYXlTdWdnZXN0aW9ucyhEYXRh
TGlzdFN1Z2dlc3Rpb25BY3RpdmF0aW9uVHlwZTo6VGV4dENoYW5nZWQpOwogI2VuZGlmCiB9CkBA
IC02NTMsNDUgKzY3MCw0MyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c3BpbkJ1dHRvblN0
ZXBVcCgpCiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRhdGVJbm5lclRleHRWYWx1ZSgp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgaWYgKCFlbGVtZW50KCktPmZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkgeworICAgIGlmICghZWxlbWVudCgpLmZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkgeworICAgICAgICBhdXRvIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpOwogICAgICAgICAvLyBVcGRhdGUgdGhlIHJlbmRlcmVyIHZhbHVlIGlm
IHRoZSBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgZmxhZyBpcyBmYWxzZS4KICAg
ICAgICAgLy8gSXQgcHJvdGVjdHMgYW4gdW5hY2NlcHRhYmxlIHJlbmRlcmVyIHZhbHVlIGZyb20g
YmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgRE9NIHZhbHVlLgotICAgICAgICBlbGVtZW50KCkt
PnNldElubmVyVGV4dFZhbHVlKHZpc2libGVWYWx1ZSgpKTsKLSAgICAgICAgZWxlbWVudCgpLT51
cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKTsKKyAgICAgICAgZWxlbWVudCgpLnNldElubmVy
VGV4dFZhbHVlKHZpc2libGVWYWx1ZSgpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJp
bGl0eSgpOwogICAgIH0KIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmZvY3VzQW5kU2Vs
ZWN0U3BpbkJ1dHRvbk93bmVyKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBSZWY8
SFRNTElucHV0RWxlbWVudD4gaW5wdXQoKmVsZW1lbnQoKSk7CisgICAgUmVmPEhUTUxJbnB1dEVs
ZW1lbnQ+IGlucHV0KGVsZW1lbnQoKSk7CiAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgaW5wdXQt
PnNlbGVjdCgpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3BpbkJ1dHRv
blJlc3BvbmRUb01vdXNlRXZlbnRzKCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICBy
ZXR1cm4gIWVsZW1lbnQoKS0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKTsKKyAgICByZXR1cm4gIWVs
ZW1lbnQoKS5pc0Rpc2FibGVkT3JSZWFkT25seSgpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0
VHlwZTo6c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb1doZWVsRXZlbnRzKCkKIHsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4gc2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb01vdXNl
RXZlbnRzKCkgJiYgZWxlbWVudCgpLT5mb2N1c2VkKCk7CisgICAgcmV0dXJuIHNob3VsZFNwaW5C
dXR0b25SZXNwb25kVG9Nb3VzZUV2ZW50cygpICYmIGVsZW1lbnQoKS5mb2N1c2VkKCk7CiB9CiAK
IGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IoKSBj
b25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGlmIChlbGVtZW50KCktPmRvY3Vt
ZW50KCkuZm9jdXNlZEVsZW1lbnQoKSAhPSBlbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQoKS5k
b2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkgIT0gJmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQoKS0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkKKyAg
ICBpZiAoZWxlbWVudCgpLmlzRGlzYWJsZWRPclJlYWRPbmx5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBlbGVtZW50KCktPmRvY3VtZW50KCku
ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZWxlbWVudCgpLmRvY3VtZW50KCku
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTcx
MiwzMyArNzI3LDMwIEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjYXBzTG9ja1N0YXRlTWF5
SGF2ZUNoYW5nZWQoKQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkRHJhd0F1dG9G
aWxsQnV0dG9uKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICByZXR1cm4g
IWVsZW1lbnQoKS0+aXNEaXNhYmxlZE9yUmVhZE9ubHkoKSAmJiBlbGVtZW50KCktPmF1dG9GaWxs
QnV0dG9uVHlwZSgpICE9IEF1dG9GaWxsQnV0dG9uVHlwZTo6Tm9uZTsKKyAgICByZXR1cm4gIWVs
ZW1lbnQoKS5pc0Rpc2FibGVkT3JSZWFkT25seSgpICYmIGVsZW1lbnQoKS5hdXRvRmlsbEJ1dHRv
blR5cGUoKSAhPSBBdXRvRmlsbEJ1dHRvblR5cGU6Ok5vbmU7CiB9CiAKIHZvaWQgVGV4dEZpZWxk
SW5wdXRUeXBlOjphdXRvRmlsbEJ1dHRvbkVsZW1lbnRXYXNDbGlja2VkKCkKIHsKLSAgICBBU1NF
UlQoZWxlbWVudCgpKTsKLSAgICBQYWdlKiBwYWdlID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLnBh
Z2UoKTsKKyAgICBQYWdlKiBwYWdlID0gZWxlbWVudCgpLmRvY3VtZW50KCkucGFnZSgpOwogICAg
IGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50
KCkuaGFuZGxlQXV0b0ZpbGxCdXR0b25DbGljaygqZWxlbWVudCgpKTsKKyAgICBwYWdlLT5jaHJv
bWUoKS5jbGllbnQoKS5oYW5kbGVBdXRvRmlsbEJ1dHRvbkNsaWNrKGVsZW1lbnQoKSk7CiB9CiAK
IHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVDb250YWluZXIoKQogewogICAgIEFTU0VS
VCghbV9jb250YWluZXIpOwotICAgIEFTU0VSVChlbGVtZW50KCkpOwogCi0gICAgbV9jb250YWlu
ZXIgPSBUZXh0Q29udHJvbElubmVyQ29udGFpbmVyOjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVu
dCgpKTsKKyAgICBtX2NvbnRhaW5lciA9IFRleHRDb250cm9sSW5uZXJDb250YWluZXI6OmNyZWF0
ZShlbGVtZW50KCkuZG9jdW1lbnQoKSk7CiAgICAgbV9jb250YWluZXItPnNldFBzZXVkbyhBdG9t
aWNTdHJpbmcoIi13ZWJraXQtdGV4dGZpZWxkLWRlY29yYXRpb24tY29udGFpbmVyIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCi0gICAgbV9pbm5lckJsb2NrID0gVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50KCktPmRvY3VtZW50KCkpOworICAg
IG1faW5uZXJCbG9jayA9IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUoZWxlbWVudCgp
LmRvY3VtZW50KCkpOwogICAgIG1faW5uZXJCbG9jay0+YXBwZW5kQ2hpbGQoKm1faW5uZXJUZXh0
KTsKICAgICBtX2NvbnRhaW5lci0+YXBwZW5kQ2hpbGQoKm1faW5uZXJCbG9jayk7CiAKLSAgICBl
bGVtZW50KCktPnVzZXJBZ2VudFNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQoKm1fY29udGFpbmVy
KTsKKyAgICBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZCgqbV9j
b250YWluZXIpOwogfQogCiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlQXV0b0ZpbGxC
dXR0b24oQXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSkKQEAgLTc0OCw4ICs3
NjAsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlQXV0b0ZpbGxCdXR0b24oQXV0
b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVAogICAgIGlmIChhdXRvRmlsbEJ1dHRvblR5
cGUgPT0gQXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lKQogICAgICAgICByZXR1cm47CiAKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICBtX2F1dG9GaWxsQnV0dG9uID0gQXV0b0ZpbGxCdXR0b25F
bGVtZW50OjpjcmVhdGUoZWxlbWVudCgpLT5kb2N1bWVudCgpLCAqdGhpcyk7CisgICAgbV9hdXRv
RmlsbEJ1dHRvbiA9IEF1dG9GaWxsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS5kb2N1
bWVudCgpLCAqdGhpcyk7CiAgICAgbV9hdXRvRmlsbEJ1dHRvbi0+c2V0UHNldWRvKGF1dG9GaWxs
QnV0dG9uVHlwZVRvQXV0b0ZpbGxCdXR0b25Qc2V1ZG9DbGFzc05hbWUoYXV0b0ZpbGxCdXR0b25U
eXBlKSk7CiAgICAgbV9hdXRvRmlsbEJ1dHRvbi0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihyb2xlQXR0ciwgQXRvbWljU3RyaW5nKCJidXR0b24iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgbV9hdXRvRmlsbEJ1dHRvbi0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX2xhYmVsQXR0ciwgYXV0b0ZpbGxCdXR0b25UeXBl
VG9BY2Nlc3NpYmlsaXR5TGFiZWwoYXV0b0ZpbGxCdXR0b25UeXBlKSk7CkBAIC03NjMsOCArNzc0
LDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZUF1dG9GaWxsQnV0dG9uKCkKICAg
ICAgICAgaWYgKCFtX2NvbnRhaW5lcikKICAgICAgICAgICAgIGNyZWF0ZUNvbnRhaW5lcigpOwog
Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICBBdXRvRmlsbEJ1dHRvblR5cGUg
YXV0b0ZpbGxCdXR0b25UeXBlID0gZWxlbWVudCgpLT5hdXRvRmlsbEJ1dHRvblR5cGUoKTsKKyAg
ICAgICAgQXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSA9IGVsZW1lbnQoKS5h
dXRvRmlsbEJ1dHRvblR5cGUoKTsKICAgICAgICAgaWYgKCFtX2F1dG9GaWxsQnV0dG9uKQogICAg
ICAgICAgICAgY3JlYXRlQXV0b0ZpbGxCdXR0b24oYXV0b0ZpbGxCdXR0b25UeXBlKTsKIApAQCAt
Nzg3LDIzICs3OTcsMjMgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnVwZGF0ZUF1dG9GaWxs
QnV0dG9uKCkKIAogSW50UmVjdCBUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnRSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKCkgY29uc3QKIHsKLSAgICBpZiAoIWVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkKKyAgICBpZiAoIWVsZW1lbnQoKS5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1Rv
Um9vdFZpZXcoZWxlbWVudCgpLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgp
KTsKKyAgICByZXR1cm4gZWxlbWVudCgpLmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1RvUm9v
dFZpZXcoZWxlbWVudCgpLnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwog
fQogCiBWZWN0b3I8U3RyaW5nPiBUZXh0RmllbGRJbnB1dFR5cGU6OnN1Z2dlc3Rpb25zKCkgY29u
c3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKIAotICAgIGlmIChhdXRvIGRh
dGFMaXN0ID0gZWxlbWVudCgpLT5kYXRhTGlzdCgpKSB7CisgICAgaWYgKGF1dG8gZGF0YUxpc3Qg
PSBlbGVtZW4uZGF0YUxpc3QoKSkgewogICAgICAgICBSZWY8SFRNTENvbGxlY3Rpb24+IG9wdGlv
bnMgPSBkYXRhTGlzdC0+b3B0aW9ucygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBh
dXRvKiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4ob3B0aW9ucy0+aXRlbShp
KSk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFlbGVtZW50KCktPmlzVmFsaWRWYWx1ZShvcHRp
b24tPnZhbHVlKCkpKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50KCkuaXNWYWxpZFZhbHVlKG9w
dGlvbi0+dmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IFN0cmluZyB2YWx1ZSA9IHNhbml0aXplVmFsdWUob3B0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAg
ICAgIGlmICghc3VnZ2VzdGlvbnMuY29udGFpbnModmFsdWUpICYmIChlbGVtZW50KCktPnZhbHVl
KCkuaXNFbXB0eSgpIHx8IHZhbHVlLmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoZWxlbWVudCgp
LT52YWx1ZSgpKSkpCisgICAgICAgICAgICBpZiAoIXN1Z2dlc3Rpb25zLmNvbnRhaW5zKHZhbHVl
KSAmJiAoZWxlbWVudCgpLnZhbHVlKCkuaXNFbXB0eSgpIHx8IHZhbHVlLmNvbnRhaW5zSWdub3Jp
bmdBU0NJSUNhc2UoZWxlbWVudCgpLnZhbHVlKCkpKSkKICAgICAgICAgICAgICAgICBzdWdnZXN0
aW9ucy5hcHBlbmQodmFsdWUpOwogICAgICAgICB9CiAgICAgfQpAQCAtODEzLDcgKzgyMyw3IEBA
IFZlY3RvcjxTdHJpbmc+IFRleHRGaWVsZElucHV0VHlwZTo6c3VnZ2VzdGlvbnMoKSBjb25zdAog
CiB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZGlkU2VsZWN0RGF0YUxpc3RPcHRpb24oY29uc3Qg
U3RyaW5nJiBzZWxlY3RlZE9wdGlvbikKIHsKLSAgICBlbGVtZW50KCktPnNldFZhbHVlKHNlbGVj
dGVkT3B0aW9uLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOworICAgIGVsZW1lbnQoKS5z
ZXRWYWx1ZShzZWxlY3RlZE9wdGlvbiwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKIH0K
IAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmRpZENsb3NlU3VnZ2VzdGlvbnMoKQpAQCAtODIz
LDcgKzgzMyw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpkaWRDbG9zZVN1Z2dlc3Rpb25z
KCkKIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmRpc3BsYXlTdWdnZXN0aW9ucyhEYXRhTGlz
dFN1Z2dlc3Rpb25BY3RpdmF0aW9uVHlwZSB0eXBlKQogewotICAgIGlmIChlbGVtZW50KCktPmlz
RGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8ICFlbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgaWYg
KGVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCAhZWxlbWVudCgpLnJlbmRlcmVy
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghVXNlckdlc3R1cmVJbmRpY2F0b3I6OnBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9U
aW1lSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5jcHAK
aW5kZXggNDJjMzkxMWVkZTIyYmYxMjdmOWMyYzlhZGFlZWQxZGUzNjllMjU3Ny4uZWRiNDRjMjEz
M2RmYTE2N2ZhZTNiYTM3ZTY5ZGQ2MTQzMWFhMzMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJ
bnB1dFR5cGUuY3BwCkBAIC03NywxMSArNzcsMTAgQEAgRGVjaW1hbCBUaW1lSW5wdXRUeXBlOjpk
ZWZhdWx0VmFsdWVGb3JTdGVwVXAoKSBjb25zdAogCiBTdGVwUmFuZ2UgVGltZUlucHV0VHlwZTo6
Y3JlYXRlU3RlcFJhbmdlKEFueVN0ZXBIYW5kbGluZyBhbnlTdGVwSGFuZGxpbmcpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBh
cnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1p
bkF0dHIpLCAwKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVs
ZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVjaW1h
bDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bVRpbWUoKSkpOwotICAgIGNvbnN0
IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21w
b25lbnRzOjptYXhpbXVtVGltZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJh
bmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCB0aW1lU3RlcERlc2NyaXB0aW9uLCBlbGVt
ZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKKyAgICBj
b25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgMCk7CisgICAgY29uc3QgRGVjaW1hbCBt
aW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWlu
aW11bVRpbWUoKSkpOworICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2lt
YWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1UaW1lKCkpKTsKKyAgICBjb25z
dCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHRp
bWVTdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0ZXBSYW5nZShzdGVwQmFzZSwgUmFuZ2VMaW1p
dGF0aW9uczo6VmFsaWQsIG1pbmltdW0sIG1heGltdW0sIHN0ZXAsIHRpbWVTdGVwRGVzY3JpcHRp
b24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTElucHV0VHlwZS5jcHAKaW5kZXggNmNhMGFjMWEy
MDEzY2Y2ZDVkOGRjNWMwZWEwM2IyMTE3OTJmMTk1ZS4uMTgyNGExODE1Njg0ODNkYzcwNzZkNTkx
MTZmOWQ0NjI2NjRjNjZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxJbnB1
dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBlLmNwcApAQCAt
NTIsOCArNTIsNyBAQCBib29sIFVSTElucHV0VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNvbnN0IFN0
cmluZyYgdmFsdWUpIGNvbnN0CiAKIGJvb2wgVVJMSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2goKSBj
b25zdAogewotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIHJldHVybiB0eXBlTWlzbWF0Y2hG
b3IoZWxlbWVudCgpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gdHlwZU1pc21hdGNoRm9yKGVsZW1l
bnQoKS52YWx1ZSgpKTsKIH0KIAogU3RyaW5nIFVSTElucHV0VHlwZTo6dHlwZU1pc21hdGNoVGV4
dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJbnB1dFR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAppbmRleCBiY2I2YWYy
Y2FhZDVlNWYzYmVhOTQ1NGE1MTAzZWI5NTFjZDQzZDYyLi45YWZmNGY2ZmJkYTc3ZDY5ZjhhNDk4
Yzc1ZTFhMWFkMDk1ODk2MGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1dlZWtJ
bnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAK
QEAgLTU3LDExICs1NywxMCBAQCBEYXRlQ29tcG9uZW50czo6VHlwZSBXZWVrSW5wdXRUeXBlOjpk
YXRlVHlwZSgpIGNvbnN0CiAKIFN0ZXBSYW5nZSBXZWVrSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFu
Z2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykgY29uc3QKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudCgpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihl
bGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIHdlZWtE
ZWZhdWx0U3RlcEJhc2UpOwotICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1i
ZXIoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBE
ZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7Ci0gICAg
Y29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCktPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0
ZUNvbXBvbmVudHM6Om1heGltdW1XZWVrKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBT
dGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHdlZWtTdGVwRGVzY3JpcHRpb24s
IGVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwor
ICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCB3ZWVrRGVmYXVsdFN0ZXBCYXNl
KTsKKyAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91
YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7CisgICAgY29uc3QgRGVjaW1hbCBt
YXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4
aW11bVdlZWsoKSkpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VT
dGVwKGFueVN0ZXBIYW5kbGluZywgd2Vla1N0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJh
bmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwg
c3RlcCwgd2Vla1N0ZXBEZXNjcmlwdGlvbik7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346867</attachid>
            <date>2018-08-09 15:45:48 -0700</date>
            <delta_ts>2018-08-09 16:02:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188410-20180809154547.patch</filename>
            <type>text/plain</type>
            <size>2763</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk0YTA1NjBmYmVkODc2
ZGI5OWIzYzI0NjdjMmZlYWMyN2U4YmEyNC4uOWMxMzgwYWEwYTZkOTMxYmRjYzU3MjJjMTQ0YTMz
YTYxMjgyMjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTA4LTA5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW5wdXRUeXBlIHNob3VsZCBu
b3QgaW50ZXJhY3Qgd2l0aCBhbiBIVE1MSW5wdXRFbGVtZW50IGlzIG5vIGxvbmdlciBhc3NvY2lh
dGVkIHdpdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4ODQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENsZWFyIElucHV0VHlwZTo6bV9lbGVtZW50IHdoZW4gdGhlIElucHV0VHlwZSBpcyBubyBsb25n
ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBIVE1MSW5wdXRFbGVtZW50CisgICAgICAgIGJlY2F1c2Ug
dGhlIGVsZW1lbnQgY2hhbmdlZCB0eXBlLiBXZSB3ZXJlIGFscmVhZHkgZGVhbGluZyB3aXRoIHRo
ZSBJbnB1dFR5cGUgbm8gbG9uZ2VyIGJlaW5nCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhbiBl
bGVtZW50IGJlY2F1c2UgdGhlIGVsZW1lbnQgZGllZCBieSB1c2luZyBhIFdlYWtQdHIuIEhvd2V2
ZXIsIGl0IGlzIGNvbmNlcHR1YWxseQorICAgICAgICBiZXR0ZXIgKG1vcmUgY29ycmVjdCkgdG8g
YWxzbyBjbGVhciB0aGlzIHBvaW50ZXIgaWYgdGhlIGVsZW1lbnQgaXMgc3RpbGwgYWxpdmUgYnV0
IGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBhbm90aGVyIElucHV0VHlwZS4KKworICAgICAgICAq
IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkZXRhY2hGcm9tRWxlbWVudCk6CisKIDIwMTgtMDgtMDkg
IFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgbWVtb3J5Rm9vdHBy
aW50IHNob3VsZCByZXR1cm4gc2l6ZV90IG5vdCBvcHRpb25hbDxzaXplX3Q+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBiMWZmMTJkOTZhNTlmZGI0ZDEzZDAx
MTQ0MjQ1YTMyYzgxMTNjZWJiLi5kYzVhYTNkODgyYWJkZDhmNDYxNTdkN2VmNzVjZTdiMGJmYmQ1
NDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTUyMSw2
ICs1MjEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogICAgIH0KIAog
ICAgIG1faW5wdXRUeXBlLT5kZXN0cm95U2hhZG93U3VidHJlZSgpOworICAgIG1faW5wdXRUeXBl
LT5kZXRhY2hGcm9tRWxlbWVudCgpOwogCiAgICAgbV9pbnB1dFR5cGUgPSBXVEZNb3ZlKG5ld1R5
cGUpOwogICAgIG1faW5wdXRUeXBlLT5jcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuaAppbmRleCBjOTk0Y2NlNTIzY2M4NmI2NmNlOWVhODAyMzg0NzA2MzYyOWIyZThk
Li5mZTJhNDBiMGI0ZjNjMTQ2MzViN2Y5YTBmZmEzM2NmNmJiOTM0OTI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW5wdXRUeXBlLmgKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8SW5w
dXRUeXBlPiBjcmVhdGVUZXh0KEhUTUxJbnB1dEVsZW1lbnQmKTsKICAgICB2aXJ0dWFsIH5JbnB1
dFR5cGUoKTsKIAorICAgIHZvaWQgZGV0YWNoRnJvbUVsZW1lbnQoKSB7IG1fZWxlbWVudCA9IG51
bGxwdHI7IH0KKwogICAgIHN0YXRpYyBib29sIHRoZW1lU3VwcG9ydHNEYXRhTGlzdFVJKElucHV0
VHlwZSopOwogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0ID0gMDsKQEAgLTMxNCw3ICszMTYsNyBAQCBwcml2YXRlOgogICAgIC8vIEhlbHBl
ciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gQWRkcyBzdGVwIHZhbHVlICogY291bnQgdG8gdGhl
IGN1cnJlbnQgdmFsdWUuCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gYXBwbHlTdGVwKGludCBjb3Vu
dCwgQW55U3RlcEhhbmRsaW5nLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yKTsKIAotICAgIC8vIFJh
dyBwb2ludGVyIGJlY2F1c2UgdGhlIEhUTUxJbnB1dEVsZW1lbnQgb2JqZWN0IG93bnMgdGhpcyBJ
bnB1dFR5cGUgb2JqZWN0LgorICAgIC8vIG1fZWxlbWVudCBpcyBudWxsIGlmIHRoaXMgSW5wdXRU
eXBlIGlzIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCAoZWl0aGVyIHRoZSBl
bGVtZW50IGRpZWQgb3IgY2hhbmdlZCBpbnB1dCB0eXBlKS4KICAgICBXZWFrUHRyPEhUTUxJbnB1
dEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346869</attachid>
            <date>2018-08-09 16:02:24 -0700</date>
            <delta_ts>2018-08-09 16:56:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188410-20180809160224.patch</filename>
            <type>text/plain</type>
            <size>3513</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk0YTA1NjBmYmVkODc2
ZGI5OWIzYzI0NjdjMmZlYWMyN2U4YmEyNC4uOWMxMzgwYWEwYTZkOTMxYmRjYzU3MjJjMTQ0YTMz
YTYxMjgyMjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTA4LTA5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW5wdXRUeXBlIHNob3VsZCBu
b3QgaW50ZXJhY3Qgd2l0aCBhbiBIVE1MSW5wdXRFbGVtZW50IGlzIG5vIGxvbmdlciBhc3NvY2lh
dGVkIHdpdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4ODQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENsZWFyIElucHV0VHlwZTo6bV9lbGVtZW50IHdoZW4gdGhlIElucHV0VHlwZSBpcyBubyBsb25n
ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBIVE1MSW5wdXRFbGVtZW50CisgICAgICAgIGJlY2F1c2Ug
dGhlIGVsZW1lbnQgY2hhbmdlZCB0eXBlLiBXZSB3ZXJlIGFscmVhZHkgZGVhbGluZyB3aXRoIHRo
ZSBJbnB1dFR5cGUgbm8gbG9uZ2VyIGJlaW5nCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhbiBl
bGVtZW50IGJlY2F1c2UgdGhlIGVsZW1lbnQgZGllZCBieSB1c2luZyBhIFdlYWtQdHIuIEhvd2V2
ZXIsIGl0IGlzIGNvbmNlcHR1YWxseQorICAgICAgICBiZXR0ZXIgKG1vcmUgY29ycmVjdCkgdG8g
YWxzbyBjbGVhciB0aGlzIHBvaW50ZXIgaWYgdGhlIGVsZW1lbnQgaXMgc3RpbGwgYWxpdmUgYnV0
IGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBhbm90aGVyIElucHV0VHlwZS4KKworICAgICAgICAq
IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkZXRhY2hGcm9tRWxlbWVudCk6CisKIDIwMTgtMDgtMDkg
IFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgbWVtb3J5Rm9vdHBy
aW50IHNob3VsZCByZXR1cm4gc2l6ZV90IG5vdCBvcHRpb25hbDxzaXplX3Q+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBiMWZmMTJkOTZhNTlmZGI0ZDEzZDAx
MTQ0MjQ1YTMyYzgxMTNjZWJiLi5kYzVhYTNkODgyYWJkZDhmNDYxNTdkN2VmNzVjZTdiMGJmYmQ1
NDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTUyMSw2
ICs1MjEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogICAgIH0KIAog
ICAgIG1faW5wdXRUeXBlLT5kZXN0cm95U2hhZG93U3VidHJlZSgpOworICAgIG1faW5wdXRUeXBl
LT5kZXRhY2hGcm9tRWxlbWVudCgpOwogCiAgICAgbV9pbnB1dFR5cGUgPSBXVEZNb3ZlKG5ld1R5
cGUpOwogICAgIG1faW5wdXRUeXBlLT5jcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuaAppbmRleCBjOTk0Y2NlNTIzY2M4NmI2NmNlOWVhODAyMzg0NzA2MzYyOWIyZThk
Li5mZTJhNDBiMGI0ZjNjMTQ2MzViN2Y5YTBmZmEzM2NmNmJiOTM0OTI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW5wdXRUeXBlLmgKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8SW5w
dXRUeXBlPiBjcmVhdGVUZXh0KEhUTUxJbnB1dEVsZW1lbnQmKTsKICAgICB2aXJ0dWFsIH5JbnB1
dFR5cGUoKTsKIAorICAgIHZvaWQgZGV0YWNoRnJvbUVsZW1lbnQoKSB7IG1fZWxlbWVudCA9IG51
bGxwdHI7IH0KKwogICAgIHN0YXRpYyBib29sIHRoZW1lU3VwcG9ydHNEYXRhTGlzdFVJKElucHV0
VHlwZSopOwogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0ID0gMDsKQEAgLTMxNCw3ICszMTYsNyBAQCBwcml2YXRlOgogICAgIC8vIEhlbHBl
ciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gQWRkcyBzdGVwIHZhbHVlICogY291bnQgdG8gdGhl
IGN1cnJlbnQgdmFsdWUuCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gYXBwbHlTdGVwKGludCBjb3Vu
dCwgQW55U3RlcEhhbmRsaW5nLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yKTsKIAotICAgIC8vIFJh
dyBwb2ludGVyIGJlY2F1c2UgdGhlIEhUTUxJbnB1dEVsZW1lbnQgb2JqZWN0IG93bnMgdGhpcyBJ
bnB1dFR5cGUgb2JqZWN0LgorICAgIC8vIG1fZWxlbWVudCBpcyBudWxsIGlmIHRoaXMgSW5wdXRU
eXBlIGlzIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCAoZWl0aGVyIHRoZSBl
bGVtZW50IGRpZWQgb3IgY2hhbmdlZCBpbnB1dCB0eXBlKS4KICAgICBXZWFrUHRyPEhUTUxJbnB1
dEVsZW1lbnQ+IG1fZWxlbWVudDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFuZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlw
ZS5jcHAKaW5kZXggNDQ2MGQ3MTk4MmQ2N2I2ZjNjODBmNDE5YzgzZmJjMzFjOWM4N2ZhMC4uOTk1
ZmNmMjEzNDQ3YmE1OTdiNWI3ZTY2ZDU5ZTNlYzE0YWVhZDk3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9SYW5nZUlucHV0VHlwZS5jcHAKQEAgLTMyMSw4ICszMjEsOCBAQCB2b2lkIFJhbmdlSW5wdXRU
eXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpCiB7CiAgICAgSW5wdXRU
eXBlOjphY2Nlc3NLZXlBY3Rpb24oc2VuZE1vdXNlRXZlbnRzKTsKIAotICAgIEFTU0VSVChlbGVt
ZW50KCkpOwotICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygwLCBzZW5kTW91
c2VFdmVudHMgPyBTZW5kTW91c2VVcERvd25FdmVudHMgOiBTZW5kTm9FdmVudHMpOworICAgIGlm
IChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kaXNw
YXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRNb3VzZUV2ZW50cyA/IFNlbmRNb3VzZVVwRG93bkV2
ZW50cyA6IFNlbmROb0V2ZW50cyk7CiB9CiAKIHZvaWQgUmFuZ2VJbnB1dFR5cGU6OmF0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>