<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>374191</bug_id>
          
          <creation_ts>2016-12-27 00:27:23 +0000</creation_ts>
          <short_desc>Unusable context menu entries in tags and people view</short_desc>
          <delta_ts>2017-08-02 21:08:08 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>2</classification_id>
          <classification>Applications</classification>
          <product>digikam</product>
          <component>Usability-Menus</component>
          <version>5.4.0</version>
          <rep_platform>Appimage</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Simon">freisim93</reporter>
          <assigned_to name="Digikam Developers">digikam-bugs-null</assigned_to>
          <cc>caulier.gilles</cc>
    
    <cc>laurakittyinka</cc>
    
    <cc>mario.frank</cc>
          
          <cf_commitlink>https://commits.kde.org/digikam/429fa5fd8e7f53b74c82eb19dffb2e6cf4b4325c</cf_commitlink>
          <cf_versionfixedin>5.4.0</cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1647677</commentid>
    <comment_count>0</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2016-12-27 00:27:23 +0000</bug_when>
    <thetext>There are some entries in the context menu of tags in the tags view of the left sidebar that are either not working properly or do nothing.

&quot;Find Duplicates&quot; switches to the &quot;Duplicates&quot; rider of the &quot;Fuzzy&quot; tab as expected, but does not select the tags previously selected to be searched. This should probably be fixed.

&quot;Export&quot; only sends the currently selected item in the main view to the export tool. If this is at all useful, it should send all items belonging to the selected tag(s) to the export tool. Or maybe this should just be removed from this context menu and export goes over selected items in main view and the top menu bar.

The submenu of &quot;Batch Process&quot; contains only a grayed out entry &quot;No batch process plugins available&quot;. What is this submenu supposed to do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647678</commentid>
    <comment_count>1</comment_count>
    <who name="">caulier.gilles</who>
    <bug_when>2016-12-27 01:10:55 +0000</bug_when>
    <thetext>Git commit 762161177b9862601396b53dea64e6037ef391cc by Gilles Caulier.
Committed on 27/12/2016 at 01:09.
Pushed by cgilles into branch &apos;master&apos;.

remove obsolete Batch Process menu entries in context menus

M  +0    -28   app/utils/contextmenuhelper.cpp
M  +0    -5    app/utils/contextmenuhelper.h
M  +0    -1    libs/album/albumselectiontreeview.cpp
M  +0    -2    libs/tags/tagfolderview.cpp

https://commits.kde.org/digikam/762161177b9862601396b53dea64e6037ef391cc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647679</commentid>
    <comment_count>2</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2016-12-27 01:14:24 +0000</bug_when>
    <thetext>Regarding the issue with &quot;Find Duplicates&quot;: The correct tags are actually set, but for some reason the check whether this selection is valid (FindDuplicatesView::slotCheckForValidSettings) is false and thus &quot;Tags&quot; is not selected in the &quot;Duplicates&quot; view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647680</commentid>
    <comment_count>3</comment_count>
    <who name="">caulier.gilles</who>
    <bug_when>2016-12-27 01:21:19 +0000</bug_when>
    <thetext>&quot;Find Duplicates&quot; -&gt; confirmed. Just a call is missing somewhere to turn on Tags search instead Albums search.

&quot;Export&quot; -&gt; The current behavior is correct. Only the current selected image in Tag album is exported. It work as main application Export menu. If you want to export whole tag contents, just select all with CTRL+A before.

&quot;Batch Process&quot; -&gt; Fixed...

Gilles Caulier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647681</commentid>
    <comment_count>4</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2016-12-27 01:29:40 +0000</bug_when>
    <thetext>&gt; caulier.gilles@gmail.com changed:
&gt; [...]
&gt; &quot;Export&quot; -&gt; The current behavior is correct. Only the current selected image in
&gt; Tag album is exported. It work as main application Export menu. If you want to
&gt; export whole tag contents, just select all with CTRL+A before.

I understand how to do it using the main view, but I do not understand
why a menu entry on the tag behaves this way. If there was an export
entry in the context menu on a item in the main view, this behaviour
would be expected. However for export on a tag I would expect that
export applies to this tag, i.e. the tag album. If this behaviour is not
desirable, then this option should either be removed or transferred to
the context menu in the main view. To me it makes no sense to select
images in the main view, then right click the tag in the left sidebar
and select an export tool to export all selected images. I would either
use the top menu bar or right click on one of the selected items in the
main view.

&gt; &quot;Batch Process&quot; -&gt; Fixed...
&gt;
&gt; Gilles Caulier
&gt;
As usual, thanks for the quick response!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647732</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2016-12-27 10:52:23 +0000</bug_when>
    <thetext>&quot;Finde Duplicates&quot; sounds like work for me. Should the search only be done on the Tags? I could try to patch that today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647735</commentid>
    <comment_count>6</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2016-12-27 11:10:11 +0000</bug_when>
    <thetext>On 27/12/16 11:52, Mario Frank wrote:
&gt; [...]
&gt;
&gt; --- Comment #5 from Mario Frank &lt;mario.frank@uni-potsdam.de&gt; ---
&gt; &quot;Finde Duplicates&quot; sounds like work for me. Should the search only be done on
&gt; the Tags? I could try to patch that today.
&gt;

Yes, I would expect the search only to be done on the tags that are
selected in the tags view (otherwise what is the point of having the
context menu option, you could just select the fuzzy sidebar). Steps to
reproduce:

1. Go to Duplicates in fuzzy sidebar, select &quot;Albums&quot; in &quot;Search in:&quot;
section.
2. Go to Tags sidebar, right click on a tag and select &quot;Find Duplicates...&quot;
Actual result: The correct tag is set to be searched, but &quot;Albums&quot; is
still selected.
Expected result: Switch to &quot;Tags&quot;.


One additional, related but different issue:
I addition the tag sidebar allows to select multiple tags at once, so I
would expect all these tags to be passed to the Duplicate tool.
Currently only the one tag that the right click happens on is passed to
the Duplicates tool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647750</commentid>
    <comment_count>7</comment_count>
    <who name="">caulier.gilles</who>
    <bug_when>2016-12-27 14:04:52 +0000</bug_when>
    <thetext>Simon,

About &quot;Export&quot; problem, this require a re-design/factoring/simplification in kipi interface which must be postponed in the future. So typically, i don&apos;t want to touch this implementation. Please open a separated bug for that, in digiKam/kipiinterface section.

Gilles Caulier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648187</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2016-12-29 19:29:46 +0000</bug_when>
    <thetext>Git commit 319d66b5062d145ce4e04a23df7ecf68bfbfecfb by Mario Frank.
Committed on 29/12/2016 at 19:26.
Pushed by mfrank into branch &apos;master&apos;.

Using the context menu in tags and album tree view for finding duplicates now not only selects the selected tag/album for duplicates search
but also switches to the correct search mode.

M  +11   -0    libs/album/albumselectors.cpp
M  +5    -0    libs/album/albumselectors.h
M  +2    -0    utilities/fuzzysearch/findduplicatesview.cpp

https://commits.kde.org/digikam/319d66b5062d145ce4e04a23df7ecf68bfbfecfb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648193</commentid>
    <comment_count>9</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2016-12-29 19:33:32 +0000</bug_when>
    <thetext>Simon,

your original bug report for &quot;Find Duplicates&quot; is resolved. I do not trigger the duplicates search since the user may want to modify the similarity interval. But the correct section (album/tag) is now selected. I already tested it. Nevertheless, please confirm whether the functionality is correct.

Concerning the selection of multiple tags for context menu: this needs some more work. Should this be also included in the 5.4 milestone? If not, we should open a bug for this specific case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648196</commentid>
    <comment_count>10</comment_count>
    <who name="">caulier.gilles</who>
    <bug_when>2016-12-29 19:48:08 +0000</bug_when>
    <thetext>&gt;Concerning the selection of multiple tags for context menu: this needs some more &gt;work. Should this be also included in the 5.4 milestone? If not, we should open &gt;a bug for this specific case.

You decide. 5.4.0 is postponed to 8 January now. If you have enough time to do it, let&apos;s go. Note: it&apos;s always better to touch same code at closed time, it&apos;s more easy, instead to delay to much changes.

If you need more time, i can again postpone 5.4.0. There is no special reason to publish 5.4.0 in first week of January. Let&apos;s me hear.

Gilles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648201</commentid>
    <comment_count>11</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2016-12-29 20:03:34 +0000</bug_when>
    <thetext>&gt; --- Comment #10 from caulier.gilles@gmail.com ---
&gt;&gt; Concerning the selection of multiple tags for context menu: this needs some more &gt;work. Should this be also included in the 5.4 milestone? If not, we should open &gt;a bug for this specific case.
&gt; You decide. 5.4.0 is postponed to 8 January now. If you have enough time to do
&gt; it, let&apos;s go. Note: it&apos;s always better to touch same code at closed time, it&apos;s
&gt; more easy, instead to delay to much changes.
&gt;
&gt; If you need more time, i can again postpone 5.4.0. There is no special reason
&gt; to publish 5.4.0 in first week of January. Let&apos;s me hear.
&gt;
&gt; Gilles
&gt;

Thanks a lot for the quick fixes!
From my point of view this is a minor issue, I did not report it because
it is important for my use of digikam. It is just from the UI, I would
expect this to work this way as a user (both involved functions allow
multiple tags to be selected, so the link between them should also
handle multiple tags). And as I am just reporting and not fixing, I
certainly don&apos;t have any say in when this should be done.
However I would suggest not to postpone 5.4.0 again, at least not for
this. There are for sure some people out there waiting for the release
(even if its just one), and disappointing them needlessly is not so nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648231</commentid>
    <comment_count>12</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2016-12-29 23:18:42 +0000</bug_when>
    <thetext>Hey Gilles,

I would not like to have the release postponed again. There is enough time for testing and this modification for me and I agree with Simon. We should only postpone for stability. This glitch should not be a reason. I&apos;ll look at it over the weekend and make some more tests.

Cheers,
Mario</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648994</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-02 13:46:11 +0000</bug_when>
    <thetext>Hi Simon,
hi Gilles,

I got a working solution for initialising a duplicates search (selecting the tags) for multiple selected tags. It works quite well. Moreover, I found some function calls in the code that seem to be superfluous. I did not remove them, but only set a comment @ODD.
I will append a patch. Although I tested it on my machine, I would like to have someone else having a look over it. Can you test the functionality, too, Simon?

Another glitch for which I will open a bug is: In tags tree view, multiple tags can be selected. But in Albums tree view, this is not possible. Perhaps this should be enabled in DK 5.5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648996</commentid>
    <comment_count>14</comment_count>
      <attachid>103144</attachid>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-02 13:47:04 +0000</bug_when>
    <thetext>Created attachment 103144
Patch for triggering duplicates search for multiple tags with context menu.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649007</commentid>
    <comment_count>15</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2017-01-02 14:37:11 +0000</bug_when>
    <thetext>Hi Mario,

I justed tested it and it worked as expected.
I have a question/proposition: The existing slotNewDuplicatesSearch
funciton accepts a generic album pointer and then determines what type
(physical/tag) it is. You made two distinct functions for lists as
arguments that still accept generic album pointers but named them to
make it clear that either physical or tag albums are expected. Wouldn&apos;t
it be cleaner and less error prone to use one function name
(slotNewDuplicatesSearch) and overload it with different parameters
(PAlbum*, TAlbum*, QList&lt;PAlbum*&gt; and QList&lt;TAlbum*&gt;)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649016</commentid>
    <comment_count>16</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-02 15:48:13 +0000</bug_when>
    <thetext>(In reply to Simon from comment #15)
&gt; Hi Mario,
&gt; 
&gt; I justed tested it and it worked as expected.
&gt; I have a question/proposition: The existing slotNewDuplicatesSearch
&gt; funciton accepts a generic album pointer and then determines what type
&gt; (physical/tag) it is. You made two distinct functions for lists as
&gt; arguments that still accept generic album pointers but named them to
&gt; make it clear that either physical or tag albums are expected. Wouldn&apos;t
&gt; it be cleaner and less error prone to use one function name
&gt; (slotNewDuplicatesSearch) and overload it with different parameters
&gt; (PAlbum*, TAlbum*, QList&lt;PAlbum*&gt; and QList&lt;TAlbum*&gt;)?

Hi Simon,

I am not completely happy with this solution.
But the AlbumTreeView from which the TagFolderView is derived only provides me access to the list of selected tags as list of Album pointers. Using overloaded methods is also my preferred way. But to do this, I would either have to transform the list of Album pointers to a list of TAlbum pointers which is an unnecessary complexity. Or I will have to adopt the AlbumTreeView for this. 
The latter is the way to go, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649027</commentid>
    <comment_count>17</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2017-01-02 16:55:08 +0000</bug_when>
    <thetext>(In reply to Mario Frank from comment #16)
&gt; [...]
&gt; 
&gt; Hi Simon,
&gt; 
&gt; I am not completely happy with this solution.
&gt; But the AlbumTreeView from which the TagFolderView is derived only provides
&gt; me access to the list of selected tags as list of Album pointers. Using
&gt; overloaded methods is also my preferred way. But to do this, I would either
&gt; have to transform the list of Album pointers to a list of TAlbum pointers
&gt; which is an unnecessary complexity. Or I will have to adopt the
&gt; AlbumTreeView for this. 
&gt; The latter is the way to go, I think.

I agree. Even from the naming it is weird that in TagTreeView the selectedAlbum and albumForIndex methods return TAlbum, while selectedTags returns Album. So changing this seems natural. And selectedTags isn&apos;t used so widely, so not much adaption should be necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649056</commentid>
    <comment_count>18</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-02 18:52:01 +0000</bug_when>
    <thetext>(In reply to Simon from comment #17)
&gt; (In reply to Mario Frank from comment #16)
&gt; &gt; [...]
&gt; &gt; 
&gt; &gt; Hi Simon,
&gt; &gt; 
&gt; &gt; I am not completely happy with this solution.
&gt; &gt; But the AlbumTreeView from which the TagFolderView is derived only provides
&gt; &gt; me access to the list of selected tags as list of Album pointers. Using
&gt; &gt; overloaded methods is also my preferred way. But to do this, I would either
&gt; &gt; have to transform the list of Album pointers to a list of TAlbum pointers
&gt; &gt; which is an unnecessary complexity. Or I will have to adopt the
&gt; &gt; AlbumTreeView for this. 
&gt; &gt; The latter is the way to go, I think.
&gt; 
&gt; I agree. Even from the naming it is weird that in TagTreeView the
&gt; selectedAlbum and albumForIndex methods return TAlbum, while selectedTags
&gt; returns Album. So changing this seems natural. And selectedTags isn&apos;t used
&gt; so widely, so not much adaption should be necessary.

I already adopted the code and found some other effectless context menu entry.
In people-sidebar, the find duplicates contect menu item does not have any effect. I wired the context menu to the same functionality as for tags, i.e. selected people tags are set as tags in the find duplicates view.

This should be the expected behaviour, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649058</commentid>
    <comment_count>19</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2017-01-02 19:02:59 +0000</bug_when>
    <thetext>(In reply to Mario Frank from comment #18)
&gt; 
&gt; In people-sidebar, the find duplicates contect menu item does not have any
&gt; effect. I wired the context menu to the same functionality as for tags, i.e.
&gt; selected people tags are set as tags in the find duplicates view.
&gt; 
&gt; This should be the expected behaviour, right?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649082</commentid>
    <comment_count>20</comment_count>
    <who name="">caulier.gilles</who>
    <bug_when>2017-01-02 21:37:46 +0000</bug_when>
    <thetext>The difference between Tags and face-tags is to name just face in the image, not the whole image.

So search similarity from face-tags, as similarity is implemented will search for same similar whole image not face.

We need to be be clear for that. I recommend to plan to write some words about this topic in handbook for end users, if this implementation is add to digiKam.

Gilles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649085</commentid>
    <comment_count>21</comment_count>
    <who name="">caulier.gilles</who>
    <bug_when>2017-01-02 21:46:40 +0000</bug_when>
    <thetext>To comment #13 :

&quot;Moreover, I found some function calls in the code that seem to be superfluous. I did not remove them, but only set a comment @ODD.&quot;

I take a look to the patch #103144. The commented code with @ODD :

+    // @ODD : Why is singleton set to true? resetAlbumsAndTags already clears the selection.
     d-&gt;albumSelectors-&gt;setPAlbumSelected(album, true);

+    // @ODD : Why is singleton set to true? resetAlbumsAndTags already clears the selection.
     d-&gt;albumSelectors-&gt;setTAlbumSelected(album, true);

I think this kind of singleton selection exist due to some problem seen while porting from Qt4 to Qt5. I don&apos;t remember exactly.

Check if this argument need to be set to true really, as the model have been adjusted previously.

Check also where these methods are used outside similarity code to see if this argument need really to exists.

Gilles Caulier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649193</commentid>
    <comment_count>22</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-03 10:41:47 +0000</bug_when>
    <thetext>(In reply to caulier.gilles from comment #21)
&gt; To comment #13 :
&gt; 
&gt; &quot;Moreover, I found some function calls in the code that seem to be
&gt; superfluous. I did not remove them, but only set a comment @ODD.&quot;
&gt; 
&gt; I take a look to the patch #103144. The commented code with @ODD :
&gt; 
&gt; +    // @ODD : Why is singleton set to true? resetAlbumsAndTags already
&gt; clears the selection.
&gt;      d-&gt;albumSelectors-&gt;setPAlbumSelected(album, true);
&gt; 
&gt; +    // @ODD : Why is singleton set to true? resetAlbumsAndTags already
&gt; clears the selection.
&gt;      d-&gt;albumSelectors-&gt;setTAlbumSelected(album, true);
&gt; 
&gt; I think this kind of singleton selection exist due to some problem seen
&gt; while porting from Qt4 to Qt5. I don&apos;t remember exactly.
&gt; 
&gt; Check if this argument need to be set to true really, as the model have been
&gt; adjusted previously.
&gt; 
&gt; Check also where these methods are used outside similarity code to see if
&gt; this argument need really to exists.
&gt; 
&gt; Gilles Caulier

Hey Gilles,

I would implement the context menu item Find Duplicates for face tags to lead to the selection of normal tags. Introducing a face similarity search is far more complex and could be added to the wishlist. I agree that this should be included in the handbook.

Concerning the superfluous code: Since the code currently works, I would postpone the cleanup for after the release of 5.4. 
I still have two patches in my working branch which I want to merge today.
After that, I want to make some more tests under different conditions.

Cheers,
Mario</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649618</commentid>
    <comment_count>23</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-04 23:20:42 +0000</bug_when>
    <thetext>A new patch is available here: https://bugs.kde.org/show_bug.cgi?id=320666</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649822</commentid>
    <comment_count>24</comment_count>
    <who name="Barbara Scheffner">laurakittyinka</who>
    <bug_when>2017-01-06 05:48:47 +0000</bug_when>
    <thetext>(In reply to Mario Frank from comment #22)
&gt; ...
&gt; 
&gt; I would implement the context menu item Find Duplicates for face tags to
&gt; lead to the selection of normal tags. Introducing a face similarity search
&gt; is far more complex and could be added to the wishlist. I agree that this
&gt; should be included in the handbook.
&gt; 
&gt; ...
&gt; 
&gt; Cheers,
&gt; Mario

I understood Gilles in the way that he just want to make clear in the handbook that if one chooses &quot;Find Similar...&quot; from a face tag icon in People View digiKam will compare the whole image, not just the face.
And about the wishlist: what is the point for a similarity search on faces? What would be the difference to face recognition? I&apos;m not very keen on explaining that to the users.
And by the way: face recognition is still not very satisfying to me. I don&apos;t even really know how to test it because I don&apos;t understand how I can see the result of a scan. Insofar I would hat to complicate matters, at least right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649832</commentid>
    <comment_count>25</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-06 08:44:57 +0000</bug_when>
    <thetext>(In reply to Wolfgang Scheffner from comment #24)
&gt; (In reply to Mario Frank from comment #22)
&gt; &gt; ...
&gt; &gt; 
&gt; &gt; I would implement the context menu item Find Duplicates for face tags to
&gt; &gt; lead to the selection of normal tags. Introducing a face similarity search
&gt; &gt; is far more complex and could be added to the wishlist. I agree that this
&gt; &gt; should be included in the handbook.
&gt; &gt; 
&gt; &gt; ...
&gt; &gt; 
&gt; &gt; Cheers,
&gt; &gt; Mario
&gt; 
&gt; I understood Gilles in the way that he just want to make clear in the
&gt; handbook that if one chooses &quot;Find Similar...&quot; from a face tag icon in
&gt; People View digiKam will compare the whole image, not just the face.
&gt; And about the wishlist: what is the point for a similarity search on faces?
&gt; What would be the difference to face recognition? I&apos;m not very keen on
&gt; explaining that to the users.
&gt; And by the way: face recognition is still not very satisfying to me. I don&apos;t
&gt; even really know how to test it because I don&apos;t understand how I can see the
&gt; result of a scan. Insofar I would hat to complicate matters, at least right
&gt; now.

Hi Wolfgang,
I understood it the same way. It should be made clear. But the functionality that leads to the selection of the people tags as usual tags in duplicates search was not present. The context menu item &quot;Find Duplicates&quot; in people sidebar currently does nothing.
Thus, I proposed to implement this functionality.

With face similarity search, I mean that duplicates are only searched on images that share a specific face tag.

The problem with face recognition is that it either internally tags a detected face with a people tag or with nothing.
But there is no way to get a list of faces to which a recognised face is similar. Filtering detected faces which were not recognised is possible with the &quot;Unknown&quot; people tag. But filtering detected faces where digikam thinks to know who it is,
is not possible since the thumbnails are shown in the specific people tag but not in Unknown. And there are only odd workarounds to get these potentially wrongly recognised faces which are no good user experience.
Thus, searching for similar faces can be a big improvement. I would not propose to use HAAR search for this. Instead, The face recognition algorithm could be used to return faces that seem to be similar to a tagged face.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649887</commentid>
    <comment_count>26</comment_count>
      <attachid>103228</attachid>
    <who name="Simon">freisim93</who>
    <bug_when>2017-01-06 13:10:26 +0000</bug_when>
    <thetext>Created attachment 103228
Patch for triggering duplicates search for multiple tags with context menu and refactor.

I took the sections of https://bugs.kde.org/attachment.cgi?id=103203 that are relevant to this bug and extended the changes. My changes just extend the refactoring, they don&apos;t introduce any change in behaviour:
 - Use the new function selectedTagAlbums instead of selctedTags where appropriate.
 - Remove any remaining usages of ...FindDuplicatesInAlbum(Album*... (albumselectiontreeview), such that everything related to duplicates sends either PAlbums or TAlbums.
 - Rename methods: s/Item/Album/. Items is usually used in the context of indexes and other functions (currentAlbum) also use this terminology.
I played around with it and in album, tree and people view it worked as expected. So from my side this is good to merge.

Regarding the similarity search of faces: I think the functionality as it is currently is fine. Similarity search only on a face area would be more or less the same as the recognize faces function, wouldn&apos;t it?
I absolutely agree that the people interface is still lacking in terms of usability. It would be great having a way to separate confirmed from unconfirmed faces. Then searching for similar face would work like: recognize faces -&gt; select a face tag -&gt; only show unconfirmed faces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649890</commentid>
    <comment_count>27</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-06 13:23:01 +0000</bug_when>
    <thetext>(In reply to Simon from comment #26)
&gt; Created attachment 103228 [details]
&gt; Patch for triggering duplicates search for multiple tags with context menu
&gt; and refactor.
&gt; 
&gt; I took the sections of https://bugs.kde.org/attachment.cgi?id=103203 that
&gt; are relevant to this bug and extended the changes. My changes just extend
&gt; the refactoring, they don&apos;t introduce any change in behaviour:
&gt;  - Use the new function selectedTagAlbums instead of selctedTags where
&gt; appropriate.
&gt;  - Remove any remaining usages of ...FindDuplicatesInAlbum(Album*...
&gt; (albumselectiontreeview), such that everything related to duplicates sends
&gt; either PAlbums or TAlbums.
&gt;  - Rename methods: s/Item/Album/. Items is usually used in the context of
&gt; indexes and other functions (currentAlbum) also use this terminology.
&gt; I played around with it and in album, tree and people view it worked as
&gt; expected. So from my side this is good to merge.
&gt; 
&gt; Regarding the similarity search of faces: I think the functionality as it is
&gt; currently is fine. Similarity search only on a face area would be more or
&gt; less the same as the recognize faces function, wouldn&apos;t it?
&gt; I absolutely agree that the people interface is still lacking in terms of
&gt; usability. It would be great having a way to separate confirmed from
&gt; unconfirmed faces. Then searching for similar face would work like:
&gt; recognize faces -&gt; select a face tag -&gt; only show unconfirmed faces

Hey Simon,

thanks for the factoring. I will test the two patches and if everything works as expected give you a confirmation. Can you, too test the duplicates/sketch/drop/fuzzy search and look whether it conforms to the description in 
https://bugs.kde.org/show_bug.cgi?id=320666#c22 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649894</commentid>
    <comment_count>28</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-06 13:34:43 +0000</bug_when>
    <thetext>(In reply to Mario Frank from comment #27)
&gt; (In reply to Simon from comment #26)
&gt; &gt; Created attachment 103228 [details]
&gt; &gt; Patch for triggering duplicates search for multiple tags with context menu
&gt; &gt; and refactor.
&gt; &gt; 
&gt; &gt; I took the sections of https://bugs.kde.org/attachment.cgi?id=103203 that
&gt; &gt; are relevant to this bug and extended the changes. My changes just extend
&gt; &gt; the refactoring, they don&apos;t introduce any change in behaviour:
&gt; &gt;  - Use the new function selectedTagAlbums instead of selctedTags where
&gt; &gt; appropriate.
&gt; &gt;  - Remove any remaining usages of ...FindDuplicatesInAlbum(Album*...
&gt; &gt; (albumselectiontreeview), such that everything related to duplicates sends
&gt; &gt; either PAlbums or TAlbums.
&gt; &gt;  - Rename methods: s/Item/Album/. Items is usually used in the context of
&gt; &gt; indexes and other functions (currentAlbum) also use this terminology.
&gt; &gt; I played around with it and in album, tree and people view it worked as
&gt; &gt; expected. So from my side this is good to merge.
&gt; &gt; 
&gt; &gt; Regarding the similarity search of faces: I think the functionality as it is
&gt; &gt; currently is fine. Similarity search only on a face area would be more or
&gt; &gt; less the same as the recognize faces function, wouldn&apos;t it?
&gt; &gt; I absolutely agree that the people interface is still lacking in terms of
&gt; &gt; usability. It would be great having a way to separate confirmed from
&gt; &gt; unconfirmed faces. Then searching for similar face would work like:
&gt; &gt; recognize faces -&gt; select a face tag -&gt; only show unconfirmed faces
&gt; 
&gt; Hey Simon,
&gt; 
&gt; thanks for the factoring. I will test the two patches and if everything
&gt; works as expected give you a confirmation. Can you, too test the
&gt; duplicates/sketch/drop/fuzzy search and look whether it conforms to the
&gt; description in 
&gt; https://bugs.kde.org/show_bug.cgi?id=320666#c22 ?

Oh, I just saw that I cannot apply the remaining part of my patch after I apply your extended patch. I will upload a new patch for my remaining part. There is some collision in leftsidebarwidgets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649896</commentid>
    <comment_count>29</comment_count>
    <who name="Simon">freisim93</who>
    <bug_when>2017-01-06 13:38:09 +0000</bug_when>
    <thetext>On 06/01/17 14:34, Mario Frank wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=374191
&gt;
&gt; --- Comment #28 from Mario Frank &lt;mario.frank@uni-potsdam.de&gt; ---
&gt; (In reply to Mario Frank from comment #27)
&gt; Oh, I just saw that I cannot apply the remaining part of my patch after I apply
&gt; your extended patch. I will upload a new patch for my remaining part. There is
&gt; some collision in leftsidebarwidgets.
&gt;
The two patches I just uploaded should both be applicable to master and
then merged without conflict. Doesn&apos;t that work for you? That would
indicate that I messed up when creating patches.
That is one reason why I like branching and merging much better than
sending around patches, it can so easily create confusion...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649898</commentid>
    <comment_count>30</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-06 13:43:10 +0000</bug_when>
    <thetext>(In reply to Simon from comment #29)
&gt; On 06/01/17 14:34, Mario Frank wrote:
&gt; &gt; https://bugs.kde.org/show_bug.cgi?id=374191
&gt; &gt;
&gt; &gt; --- Comment #28 from Mario Frank &lt;mario.frank@uni-potsdam.de&gt; ---
&gt; &gt; (In reply to Mario Frank from comment #27)
&gt; &gt; Oh, I just saw that I cannot apply the remaining part of my patch after I apply
&gt; &gt; your extended patch. I will upload a new patch for my remaining part. There is
&gt; &gt; some collision in leftsidebarwidgets.
&gt; &gt;
&gt; The two patches I just uploaded should both be applicable to master and
&gt; then merged without conflict. Doesn&apos;t that work for you? That would
&gt; indicate that I messed up when creating patches.
&gt; That is one reason why I like branching and merging much better than
&gt; sending around patches, it can so easily create confusion...

I just reset hard to master, applied your dupes patch here, after that your variant of my patch (https://bugs.kde.org/attachment.cgi?id=103229 ).
It broke in leftsidebarwidgets. I also tried it the other way around. Problem in the same file but different line. I resolved it on my system. I&apos;m just compiling digikam. When everything is fine, I will upload my part again.

Branching is easier. But this conflict just occured because I worked on multiple problems at the same time because they are somehow connected. If we work on smaller chunks, this should be no problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649899</commentid>
    <comment_count>31</comment_count>
      <attachid>103231</attachid>
    <who name="Simon">freisim93</who>
    <bug_when>2017-01-06 13:51:29 +0000</bug_when>
    <thetext>Created attachment 103231
Combines patch for this bug and 320666

As I wanted to separate them, both patches are against current master. So to check both together you would have to create two branches, apply both patches and then merge these two branches. Or you apply the new patch which is the combination of the both that I just added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649900</commentid>
    <comment_count>32</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-06 13:55:35 +0000</bug_when>
    <thetext>(In reply to Simon from comment #31)
&gt; Created attachment 103231 [details]
&gt; Combines patch for this bug and 320666
&gt; 
&gt; As I wanted to separate them, both patches are against current master. So to
&gt; check both together you would have to create two branches, apply both
&gt; patches and then merge these two branches. Or you apply the new patch which
&gt; is the combination of the both that I just added.

I&apos;ll try with the patch you just added. Compiling now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649984</commentid>
    <comment_count>33</comment_count>
    <who name="Mario Frank">mario.frank</who>
    <bug_when>2017-01-06 18:38:28 +0000</bug_when>
    <thetext>Git commit 429fa5fd8e7f53b74c82eb19dffb2e6cf4b4325c by Mario Frank.
Committed on 06/01/2017 at 18:36.
Pushed by mfrank into branch &apos;master&apos;.

This patch is joint work with Simon. The patch introduces the similarity of images to a specific image
as column in table view. Also, it fixes the sorting by similarity in sketch search.
Moreover, the dysfunctional context menu item &quot;Find duplicates&quot; in people sidebar now leads to the selection
of the people tags as regular tabs in duplicates search. Finally, selecting multiple regular/people tags for
duplicates search is possible. Not to mention some refactoring to make function names more fitting.
Related: bug 320666, bug 302923
FIXED-IN: 5.4.0

M  +1    -1    NEWS
M  +21   -30   app/views/digikamview.cpp
M  +5    -4    app/views/digikamview.h
M  +17   -15   app/views/leftsidebarwidgets.cpp
M  +6    -8    app/views/leftsidebarwidgets.h
M  +34   -2    app/views/tableview/tableview_column_item.cpp
M  +2    -1    app/views/tableview/tableview_column_item.h
M  +1    -1    libs/album/albumselectiontreeview.cpp
M  +1    -1    libs/album/albumselectiontreeview.h
M  +5    -0    libs/album/albumtreeview.cpp
M  +2    -1    libs/album/albumtreeview.h
M  +10   -1    libs/database/dbjobs/dbjob.cpp
M  +45   -30   libs/database/haar/haariface.cpp
M  +5    -5    libs/database/haar/haariface.h
M  +14   -0    libs/database/item/imageinfo.cpp
M  +5    -0    libs/database/item/imageinfo.h
M  +2    -0    libs/database/item/imageinfodata.h
M  +106  -6    libs/database/item/imagelister.cpp
M  +8    -1    libs/database/item/imagelister.h
M  +10   -6    libs/database/item/imagelisterrecord.h
M  +0    -6    libs/models/imagefiltermodel.cpp
M  +0    -1    libs/models/imagefiltermodel.h
M  +5    -10   libs/models/imagesortsettings.cpp
M  +0    -2    libs/models/imagesortsettings.h
M  +0    -2    libs/settings/applicationsettings.cpp
M  +0    -3    libs/settings/applicationsettings.h
M  +0    -10   libs/settings/applicationsettings_miscs.cpp
M  +0    -4    libs/settings/applicationsettings_p.cpp
M  +0    -2    libs/settings/applicationsettings_p.h
M  +3    -1    libs/tags/tagfolderview.cpp
M  +1    -1    libs/tags/tagfolderview.h
M  +3    -3    libs/tags/tagsmanager/tagsmanager.cpp
M  +16   -16   utilities/fuzzysearch/findduplicatesview.cpp
M  +5    -2    utilities/fuzzysearch/findduplicatesview.h
M  +22   -20   utilities/fuzzysearch/fuzzysearchview.cpp
M  +5    -4    utilities/fuzzysearch/fuzzysearchview.h

https://commits.kde.org/digikam/429fa5fd8e7f53b74c82eb19dffb2e6cf4b4325c</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103144</attachid>
            <date>2017-01-02 13:47:04 +0000</date>
            <delta_ts>2017-01-06 13:10:26 +0000</delta_ts>
            <desc>Patch for triggering duplicates search for multiple tags with context menu.</desc>
            <filename>DIGIKAM_TagsView_DuplicatesSearchForMultipleSelectedTags.patch</filename>
            <type>text/plain</type>
            <size>8583</size>
            <attacher name="Mario Frank">mario.frank</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2FwcC92aWV3cy9kaWdpa2Ftdmlldy5jcHAgYi9hcHAvdmlld3MvZGlnaWth
bXZpZXcuY3BwCmluZGV4IDRhMWJlMjBkNDcuLjEyNGMxOTllY2IgMTAwNjQ0Ci0tLSBhL2FwcC92
aWV3cy9kaWdpa2Ftdmlldy5jcHAKKysrIGIvYXBwL3ZpZXdzL2RpZ2lrYW12aWV3LmNwcApAQCAt
MzAxLDggKzMwMSw4IEBAIERpZ2lrYW1WaWV3OjpEaWdpa2FtVmlldyhRV2lkZ2V0KiBjb25zdCBw
YXJlbnQsIERpZ2lrYW1Nb2RlbENvbGxlY3Rpb24qIGNvbnN0IG1vCiAgICAgZC0+dGFnVmlld1Np
ZGVCYXIgPSBuZXcgVGFnVmlld1NpZGVCYXJXaWRnZXQoZC0+bGVmdFNpZGVCYXIsIGQtPm1vZGVs
Q29sbGVjdGlvbi0+Z2V0VGFnTW9kZWwoKSk7CiAgICAgZC0+bGVmdFNpZGVCYXJXaWRnZXRzIDw8
IGQtPnRhZ1ZpZXdTaWRlQmFyOwogCi0gICAgY29ubmVjdChkLT50YWdWaWV3U2lkZUJhciwgU0lH
TkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzSW5BbGJ1bShBbGJ1bSopKSwKLSAgICAgICAgICAgIHRo
aXMsIFNMT1Qoc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qKSkpOworICAgIGNvbm5lY3Qo
ZC0+dGFnVmlld1NpZGVCYXIsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0luVGFncyhRTGlz
dDxBbGJ1bSo+KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHNsb3ROZXdEdXBsaWNhdGVzU2Vh
cmNoSW5UYWdzKFFMaXN0PEFsYnVtKj4pKSk7CiAKICAgICAvLyBMYWJlbHMgc2lkZWJhcgogICAg
IGQtPmxhYmVsc1NpZGVCYXIgICAgICAgPSBuZXcgTGFiZWxzU2lkZUJhcldpZGdldChkLT5sZWZ0
U2lkZUJhcik7CkBAIC0xMDQ2LDYgKzEwNDYsMTggQEAgdm9pZCBEaWdpa2FtVmlldzo6c2xvdE5l
d0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGFsYnVtKQogICAgIGQtPmZ1enp5U2VhcmNoU2lkZUJh
ci0+bmV3RHVwbGljYXRlc1NlYXJjaChhbGJ1bSk7CiB9CiAKK3ZvaWQgRGlnaWthbVZpZXc6OnNs
b3ROZXdEdXBsaWNhdGVzU2VhcmNoSW5BbGJ1bXMoUUxpc3Q8QWxidW0qPiBhbGJ1bXMpCit7Cisg
ICAgc2xvdExlZnRTaWRlQmFyQWN0aXZhdGUoZC0+ZnV6enlTZWFyY2hTaWRlQmFyKTsKKyAgICBk
LT5mdXp6eVNlYXJjaFNpZGVCYXItPm5ld0R1cGxpY2F0ZXNTZWFyY2goYWxidW1zLCBBbGJ1bTo6
VHlwZTo6UEhZU0lDQUwpOworfQorCit2b2lkIERpZ2lrYW1WaWV3OjpzbG90TmV3RHVwbGljYXRl
c1NlYXJjaEluVGFncyhRTGlzdDxBbGJ1bSo+IGFsYnVtcykKK3sKKyAgICBzbG90TGVmdFNpZGVC
YXJBY3RpdmF0ZShkLT5mdXp6eVNlYXJjaFNpZGVCYXIpOworICAgIGQtPmZ1enp5U2VhcmNoU2lk
ZUJhci0+bmV3RHVwbGljYXRlc1NlYXJjaChhbGJ1bXMsIEFsYnVtOjpUeXBlOjpUQUcpOworfQor
CiB2b2lkIERpZ2lrYW1WaWV3OjpzbG90QWxidW1zQ2xlYXJlZCgpCiB7CiAgICAgZW1pdCBzaWdu
YWxBbGJ1bVNlbGVjdGVkKDApOwpkaWZmIC0tZ2l0IGEvYXBwL3ZpZXdzL2RpZ2lrYW12aWV3Lmgg
Yi9hcHAvdmlld3MvZGlnaWthbXZpZXcuaAppbmRleCAzY2M4MDU1ODIwLi4xYTZiYjBjZDcxIDEw
MDY0NAotLS0gYS9hcHAvdmlld3MvZGlnaWthbXZpZXcuaAorKysgYi9hcHAvdmlld3MvZGlnaWth
bXZpZXcuaApAQCAtMTc1LDYgKzE3NSw4IEBAIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgc2xv
dE5ld0tleXdvcmRTZWFyY2goKTsKICAgICB2b2lkIHNsb3ROZXdBZHZhbmNlZFNlYXJjaCgpOwog
ICAgIHZvaWQgc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGFsYnVtPTApOworICAgIHZv
aWQgc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2hJbkFsYnVtcyhRTGlzdDxBbGJ1bSo+IGFsYnVtcyk7
CisgICAgdm9pZCBzbG90TmV3RHVwbGljYXRlc1NlYXJjaEluVGFncyhRTGlzdDxBbGJ1bSo+IGFs
YnVtcyk7CiAKICAgICAvLyBJbWFnZSBhY3Rpb24gc2xvdHMKICAgICB2b2lkIHNsb3RJbWFnZUxp
Z2h0VGFibGUoKTsKZGlmZiAtLWdpdCBhL2FwcC92aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMuY3Bw
IGIvYXBwL3ZpZXdzL2xlZnRzaWRlYmFyd2lkZ2V0cy5jcHAKaW5kZXggMDM2MTU3ZGM2NC4uNzRl
ZDI4ZjliOSAxMDA2NDQKLS0tIGEvYXBwL3ZpZXdzL2xlZnRzaWRlYmFyd2lkZ2V0cy5jcHAKKysr
IGIvYXBwL3ZpZXdzL2xlZnRzaWRlYmFyd2lkZ2V0cy5jcHAKQEAgLTI1MCw4ICsyNTAsOCBAQCBU
YWdWaWV3U2lkZUJhcldpZGdldDo6VGFnVmlld1NpZGVCYXJXaWRnZXQoUVdpZGdldCogY29uc3Qg
cGFyZW50LCBUYWdNb2RlbCogY29ucwogICAgIGNvbm5lY3QoZC0+b3BlblRhZ01uZ3IsIFNJR05B
TChjbGlja2VkKCkpLAogICAgICAgICAgICAgdGhpcyxTTE9UKHNsb3RPcGVuVGFnTWFuYWdlcigp
KSk7CiAKLSAgICBjb25uZWN0KGQtPnRhZ0ZvbGRlclZpZXcsIFNJR05BTChzaWduYWxGaW5kRHVw
bGljYXRlc0luQWxidW0oQWxidW0qKSksCi0gICAgICAgICAgICB0aGlzLCBTSUdOQUwoc2lnbmFs
RmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKikpKTsKKyAgICBjb25uZWN0KGQtPnRhZ0ZvbGRl
clZpZXcsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0luVGFncyhRTGlzdDxBbGJ1bSo+KSks
CisgICAgICAgICAgICB0aGlzLCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0ZXNJblRhZ3MoUUxp
c3Q8QWxidW0qPikpKTsKIAogICAgIGNvbm5lY3QoZC0+YnRuR3JvdXAsIFNJR05BTChidXR0b25D
bGlja2VkKGludCkpLAogICAgICAgICAgICAgdGhpcywgU0xPVChzbG90VG9nZ2xlVGFnc1NlbGVj
dGlvbihpbnQpKSk7CkBAIC0xMjU2LDYgKzEyNTYsMTEgQEAgdm9pZCBGdXp6eVNlYXJjaFNpZGVC
YXJXaWRnZXQ6Om5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGFsYnVtKQogICAgIGQtPmZ1enp5
U2VhcmNoVmlldy0+bmV3RHVwbGljYXRlc1NlYXJjaChhbGJ1bSk7CiB9CiAKK3ZvaWQgRnV6enlT
ZWFyY2hTaWRlQmFyV2lkZ2V0OjpuZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PEFsYnVtKj4gYWxi
dW1zLCBBbGJ1bTo6VHlwZSBhbGJ1bVR5cGUpCit7CisgICAgZC0+ZnV6enlTZWFyY2hWaWV3LT5u
ZXdEdXBsaWNhdGVzU2VhcmNoKGFsYnVtcywgYWxidW1UeXBlKTsKK30KKwogdm9pZCBGdXp6eVNl
YXJjaFNpZGVCYXJXaWRnZXQ6Om5ld1NpbWlsYXJTZWFyY2goY29uc3QgSW1hZ2VJbmZvJiBpbWFn
ZUluZm8pCiB7CiAgICAgaWYgKGltYWdlSW5mby5pc051bGwoKSkKZGlmZiAtLWdpdCBhL2FwcC92
aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMuaCBiL2FwcC92aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMu
aAppbmRleCA4ZjNmZTVjNDFhLi5jZTNlOTIzMDY3IDEwMDY0NAotLS0gYS9hcHAvdmlld3MvbGVm
dHNpZGViYXJ3aWRnZXRzLmgKKysrIGIvYXBwL3ZpZXdzL2xlZnRzaWRlYmFyd2lkZ2V0cy5oCkBA
IC0xMjksNyArMTI5LDcgQEAgcHVibGljIFFfU0xPVFM6CiAKIFFfU0lHTkFMUzoKIAotICAgIHZv
aWQgc2lnbmFsRmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKik7CisgICAgdm9pZCBzaWduYWxG
aW5kRHVwbGljYXRlc0luVGFncyhRTGlzdDxBbGJ1bSo+IGFsYnVtcyk7CiAKIHB1YmxpYzoKIApA
QCAtMzE0LDYgKzMxNCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBRU3RyaW5nIGdldENhcHRpb24o
KTsKIAogICAgIHZvaWQgbmV3RHVwbGljYXRlc1NlYXJjaChBbGJ1bSogYWxidW0pOworICAgIHZv
aWQgbmV3RHVwbGljYXRlc1NlYXJjaChRTGlzdDxBbGJ1bSo+IGFsYnVtcywgQWxidW06OlR5cGUg
YWxidW1UeXBlKTsKICAgICB2b2lkIG5ld1NpbWlsYXJTZWFyY2goY29uc3QgSW1hZ2VJbmZvJiBp
bWFnZUluZm8pOwogCiBwdWJsaWMgUV9TTE9UUzoKZGlmZiAtLWdpdCBhL2xpYnMvdGFncy90YWdm
b2xkZXJ2aWV3LmNwcCBiL2xpYnMvdGFncy90YWdmb2xkZXJ2aWV3LmNwcAppbmRleCBiYWQzZDAz
M2Q1Li40M2Y4MzUwYTI2IDEwMDY0NAotLS0gYS9saWJzL3RhZ3MvdGFnZm9sZGVydmlldy5jcHAK
KysrIGIvbGlicy90YWdzL3RhZ2ZvbGRlcnZpZXcuY3BwCkBAIC0yMzksNyArMjM5LDkgQEAgdm9p
ZCBUYWdGb2xkZXJWaWV3OjpoYW5kbGVDdXN0b21Db250ZXh0TWVudUFjdGlvbihRQWN0aW9uKiBh
Y3Rpb24sIEFsYnVtUG9pbnRlcjwKICAgICB9CiAgICAgZWxzZSBpZiAoYWN0aW9uID09IGQtPmZp
bmREdXBsQWN0aW9uKQogICAgIHsKLSAgICAgICAgZW1pdCBzaWduYWxGaW5kRHVwbGljYXRlc0lu
QWxidW0odGFnKTsKKyAgICAgICAgUUxpc3Q8QWxidW0qPiBzZWxlY3RlZCA9IHNlbGVjdGVkVGFn
cygpOworCisgICAgICAgIGVtaXQgc2lnbmFsRmluZER1cGxpY2F0ZXNJblRhZ3Moc2VsZWN0ZWQp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvbGlicy90YWdzL3RhZ2ZvbGRlcnZpZXcuaCBiL2xp
YnMvdGFncy90YWdmb2xkZXJ2aWV3LmgKaW5kZXggOGRlNzI4ZTg2Zi4uYjYzMzJiNDllOCAxMDA2
NDQKLS0tIGEvbGlicy90YWdzL3RhZ2ZvbGRlcnZpZXcuaAorKysgYi9saWJzL3RhZ3MvdGFnZm9s
ZGVydmlldy5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKIAogUV9TSUdOQUxTOgogCi0gICAg
dm9pZCBzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oQWxidW0qKTsKKyAgICB2b2lkIHNpZ25h
bEZpbmREdXBsaWNhdGVzSW5UYWdzKFFMaXN0PEFsYnVtKj4pOwogCiBwcm90ZWN0ZWQ6CiAKZGlm
ZiAtLWdpdCBhL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9maW5kZHVwbGljYXRlc3ZpZXcuY3BwIGIv
dXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRkdXBsaWNhdGVzdmlldy5jcHAKaW5kZXggNmIxZGQy
OWNmYi4uN2QzOGQxZWQwNiAxMDA2NDQKLS0tIGEvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRk
dXBsaWNhdGVzdmlldy5jcHAKKysrIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRkdXBsaWNh
dGVzdmlldy5jcHAKQEAgLTQwNiw2ICs0MDYsNyBAQCB2b2lkIEZpbmREdXBsaWNhdGVzVmlldzo6
c2xvdFNldFNlbGVjdGVkQWxidW0oQWxidW0qIGFsYnVtKQogICAgIH0KIAogICAgIHJlc2V0QWxi
dW1zQW5kVGFncygpOworICAgIC8vIEBPREQgOiBXaHkgaXMgc2luZ2xldG9uIHNldCB0byB0cnVl
PyByZXNldEFsYnVtc0FuZFRhZ3MgYWxyZWFkeSBjbGVhcnMgdGhlIHNlbGVjdGlvbi4KICAgICBk
LT5hbGJ1bVNlbGVjdG9ycy0+c2V0UEFsYnVtU2VsZWN0ZWQoYWxidW0sIHRydWUpOwogICAgIGQt
PmFsYnVtU2VsZWN0b3JzLT5zZXRUeXBlU2VsZWN0aW9uKEFsYnVtU2VsZWN0b3JzOjpBbGJ1bVR5
cGU6OlBoeXNBbGJ1bSk7CiAgICAgc2xvdENoZWNrRm9yVmFsaWRTZXR0aW5ncygpOwpAQCAtNDE5
LDExICs0MjAsMzQgQEAgdm9pZCBGaW5kRHVwbGljYXRlc1ZpZXc6OnNsb3RTZXRTZWxlY3RlZFRh
ZyhBbGJ1bSogYWxidW0pCiAgICAgfQogCiAgICAgcmVzZXRBbGJ1bXNBbmRUYWdzKCk7CisgICAg
Ly8gQE9ERCA6IFdoeSBpcyBzaW5nbGV0b24gc2V0IHRvIHRydWU/IHJlc2V0QWxidW1zQW5kVGFn
cyBhbHJlYWR5IGNsZWFycyB0aGUgc2VsZWN0aW9uLgogICAgIGQtPmFsYnVtU2VsZWN0b3JzLT5z
ZXRUQWxidW1TZWxlY3RlZChhbGJ1bSwgdHJ1ZSk7CiAgICAgZC0+YWxidW1TZWxlY3RvcnMtPnNl
dFR5cGVTZWxlY3Rpb24oQWxidW1TZWxlY3RvcnM6OkFsYnVtVHlwZTo6VGFnc0FsYnVtKTsKICAg
ICBzbG90Q2hlY2tGb3JWYWxpZFNldHRpbmdzKCk7CiB9CiAKK3ZvaWQgRmluZER1cGxpY2F0ZXNW
aWV3OjpzbG90U2V0U2VsZWN0ZWRBbGJ1bXMoUUxpc3Q8QWxidW0qPiBhbGJ1bXMpCit7CisgICAg
cmVzZXRBbGJ1bXNBbmRUYWdzKCk7CisgICAgZm9yZWFjaChBbGJ1bSogYWxidW0sIGFsYnVtcykK
KyAgICB7CisgICAgICAgIGQtPmFsYnVtU2VsZWN0b3JzLT5zZXRQQWxidW1TZWxlY3RlZChhbGJ1
bSwgZmFsc2UpOworICAgIH0KKyAgICBkLT5hbGJ1bVNlbGVjdG9ycy0+c2V0VHlwZVNlbGVjdGlv
bihBbGJ1bVNlbGVjdG9yczo6QWxidW1UeXBlOjpQaHlzQWxidW0pOworICAgIHNsb3RDaGVja0Zv
clZhbGlkU2V0dGluZ3MoKTsKK30KKwordm9pZCBGaW5kRHVwbGljYXRlc1ZpZXc6OnNsb3RTZXRT
ZWxlY3RlZFRhZ3MoUUxpc3Q8QWxidW0qPiBhbGJ1bXMpCit7CisgICAgcmVzZXRBbGJ1bXNBbmRU
YWdzKCk7CisgICAgZm9yZWFjaChBbGJ1bSogYWxidW0sIGFsYnVtcykKKyAgICB7CisgICAgICAg
IGQtPmFsYnVtU2VsZWN0b3JzLT5zZXRUQWxidW1TZWxlY3RlZChhbGJ1bSwgZmFsc2UpOworICAg
IH0KKyAgICBkLT5hbGJ1bVNlbGVjdG9ycy0+c2V0VHlwZVNlbGVjdGlvbihBbGJ1bVNlbGVjdG9y
czo6QWxidW1UeXBlOjpUYWdzQWxidW0pOworICAgIHNsb3RDaGVja0ZvclZhbGlkU2V0dGluZ3Mo
KTsKK30KKwogdm9pZCBGaW5kRHVwbGljYXRlc1ZpZXc6OnJlc2V0QWxidW1zQW5kVGFncygpCiB7
CiAgICAgZC0+YWxidW1TZWxlY3RvcnMtPnJlc2V0U2VsZWN0aW9uKCk7CmRpZmYgLS1naXQgYS91
dGlsaXRpZXMvZnV6enlzZWFyY2gvZmluZGR1cGxpY2F0ZXN2aWV3LmggYi91dGlsaXRpZXMvZnV6
enlzZWFyY2gvZmluZGR1cGxpY2F0ZXN2aWV3LmgKaW5kZXggMTM3OWFiYmUxMy4uYTc3MTc2NTY2
MSAxMDA2NDQKLS0tIGEvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRkdXBsaWNhdGVzdmlldy5o
CisrKyBiL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9maW5kZHVwbGljYXRlc3ZpZXcuaApAQCAtNTIs
NiArNTIsOCBAQCBwdWJsaWMgUV9TTE9UUzoKIAogICAgIHZvaWQgc2xvdFNldFNlbGVjdGVkQWxi
dW0oQWxidW0qKTsKICAgICB2b2lkIHNsb3RTZXRTZWxlY3RlZFRhZyhBbGJ1bSopOworICAgIHZv
aWQgc2xvdFNldFNlbGVjdGVkQWxidW1zKFFMaXN0PEFsYnVtKj4gYWxidW1zKTsKKyAgICB2b2lk
IHNsb3RTZXRTZWxlY3RlZFRhZ3MoUUxpc3Q8QWxidW0qPiBhbGJ1bXMpOwogCiBwcml2YXRlIFFf
U0xPVFM6CiAKZGlmZiAtLWdpdCBhL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9mdXp6eXNlYXJjaHZp
ZXcuY3BwIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2Z1enp5c2VhcmNodmlldy5jcHAKaW5kZXgg
MDI0YjMyZmQyMS4uYWVlNDJhMWE1YSAxMDA2NDQKLS0tIGEvdXRpbGl0aWVzL2Z1enp5c2VhcmNo
L2Z1enp5c2VhcmNodmlldy5jcHAKKysrIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2Z1enp5c2Vh
cmNodmlldy5jcHAKQEAgLTU3NSw2ICs1NzUsMzMgQEAgdm9pZCBGdXp6eVNlYXJjaFZpZXc6Om5l
d0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGNvbnN0IGFsYnVtKQogICAgIGQtPnRhYldpZGdldC0+
c2V0Q3VycmVudEluZGV4KFByaXZhdGU6OkRVUExJQ0FURVMpOwogfQogCit2b2lkIEZ1enp5U2Vh
cmNoVmlldzo6bmV3RHVwbGljYXRlc1NlYXJjaChRTGlzdDxBbGJ1bSo+IGNvbnN0IGFsYnVtcywg
aW50IGFsYnVtVHlwZSkKK3sKKyAgICBpZiAoIWFsYnVtcy5pc0VtcHR5KCkpCisgICAgeworICAg
ICAgICBRTGlzdDxBbGJ1bSo+IGFsYnVtc1RvU2NhbjsKKyAgICAgICAgLy8gR2V0IGFsbCBhbGJ1
bXMgaW4gdGhlIGxpc3QgdGhhdCBiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCB0eXBlCisgICAgICAg
IGZvcmVhY2ggKEFsYnVtKiBhbGJ1bSwgYWxidW1zKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoYWxidW0tPnR5cGUoKSA9PSBhbGJ1bVR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYWxidW1zVG9TY2FuLmFwcGVuZChhbGJ1bSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoYWxidW1UeXBlID09IEFsYnVtOjpQSFlTSUNBTCkKKyAgICAgICAg
eworICAgICAgICAgICAgZC0+ZmluZER1cGxpY2F0ZXNQYW5lbC0+c2xvdFNldFNlbGVjdGVkQWxi
dW1zKGFsYnVtc1RvU2Nhbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWxidW1UeXBl
ID09IEFsYnVtOjpUQUcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGQtPmZpbmREdXBsaWNhdGVz
UGFuZWwtPnNsb3RTZXRTZWxlY3RlZFRhZ3MoYWxidW1zVG9TY2FuKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGQtPnRhYldpZGdldC0+c2V0Q3VycmVudEluZGV4KFByaXZhdGU6OkRVUExJQ0FU
RVMpOworfQorCiB2b2lkIEZ1enp5U2VhcmNoVmlldzo6c2V0Q29uZmlnR3JvdXAoY29uc3QgS0Nv
bmZpZ0dyb3VwJiBncm91cCkKIHsKICAgICBTdGF0ZVNhdmluZ09iamVjdDo6c2V0Q29uZmlnR3Jv
dXAoZ3JvdXApOwpkaWZmIC0tZ2l0IGEvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2Z1enp5c2VhcmNo
dmlldy5oIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2Z1enp5c2VhcmNodmlldy5oCmluZGV4IGEw
Y2EwNTdlNGMuLjI1ZmM1NmIwY2MgMTAwNjQ0Ci0tLSBhL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9m
dXp6eXNlYXJjaHZpZXcuaAorKysgYi91dGlsaXRpZXMvZnV6enlzZWFyY2gvZnV6enlzZWFyY2h2
aWV3LmgKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBuZXdEdXBsaWNhdGVz
U2VhcmNoKEFsYnVtKiBjb25zdCk7CiAKKyAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2goUUxp
c3Q8QWxidW0qPiBjb25zdCwgaW50IGFsYnVtVHlwZSk7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29uZmlnR3JvdXAoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCk7CiAgICAgdm9pZCBkb0xvYWRT
dGF0ZSgpOwogICAgIHZvaWQgZG9TYXZlU3RhdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103228</attachid>
            <date>2017-01-06 13:10:26 +0000</date>
            <delta_ts>2017-01-06 13:10:26 +0000</delta_ts>
            <desc>Patch for triggering duplicates search for multiple tags with context menu and refactor.</desc>
            <filename>dupl.patch</filename>
            <type>text/plain</type>
            <size>15497</size>
            <attacher name="Simon">freisim93</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2FwcC92aWV3cy9kaWdpa2Ftdmlldy5jcHAgYi9hcHAvdmlld3MvZGlnaWth
bXZpZXcuY3BwCmluZGV4IDRhMWJlMjBkNDcuLjlmYTUwYTAyOGUgMTAwNjQ0Ci0tLSBhL2FwcC92
aWV3cy9kaWdpa2Ftdmlldy5jcHAKKysrIGIvYXBwL3ZpZXdzL2RpZ2lrYW12aWV3LmNwcApAQCAt
Mjk0LDE1ICsyOTQsMTUgQEAgRGlnaWthbVZpZXc6OkRpZ2lrYW1WaWV3KFFXaWRnZXQqIGNvbnN0
IHBhcmVudCwgRGlnaWthbU1vZGVsQ29sbGVjdGlvbiogY29uc3QgbW8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5hbGJ1bU1v
ZGlmaWNhdGlvbkhlbHBlcik7CiAgICAgZC0+bGVmdFNpZGVCYXJXaWRnZXRzIDw8IGQtPmFsYnVt
Rm9sZGVyU2lkZUJhcjsKIAotICAgIGNvbm5lY3QoZC0+YWxidW1Gb2xkZXJTaWRlQmFyLCBTSUdO
QUwoc2lnbmFsRmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKikpLAotICAgICAgICAgICAgdGhp
cywgU0xPVChzbG90TmV3RHVwbGljYXRlc1NlYXJjaChBbGJ1bSopKSk7CisgICAgY29ubmVjdChk
LT5hbGJ1bUZvbGRlclNpZGVCYXIsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlcyhQQWxidW0q
KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKFBBbGJ1
bSopKSk7CiAKICAgICAvLyBUYWdzIHNpZGViYXIgdGFiIGNvbnRlbnRzLgogICAgIGQtPnRhZ1Zp
ZXdTaWRlQmFyID0gbmV3IFRhZ1ZpZXdTaWRlQmFyV2lkZ2V0KGQtPmxlZnRTaWRlQmFyLCBkLT5t
b2RlbENvbGxlY3Rpb24tPmdldFRhZ01vZGVsKCkpOwogICAgIGQtPmxlZnRTaWRlQmFyV2lkZ2V0
cyA8PCBkLT50YWdWaWV3U2lkZUJhcjsKIAotICAgIGNvbm5lY3QoZC0+dGFnVmlld1NpZGVCYXIs
IFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oQWxidW0qKSksCi0gICAgICAgICAg
ICB0aGlzLCBTTE9UKHNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKEFsYnVtKikpKTsKKyAgICBjb25u
ZWN0KGQtPnRhZ1ZpZXdTaWRlQmFyLCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0ZXMoUUxpc3Q8
VEFsYnVtKj4pKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1Qoc2xvdE5ld0R1cGxpY2F0ZXNTZWFy
Y2goUUxpc3Q8VEFsYnVtKj4pKSk7CiAKICAgICAvLyBMYWJlbHMgc2lkZWJhcgogICAgIGQtPmxh
YmVsc1NpZGVCYXIgICAgICAgPSBuZXcgTGFiZWxzU2lkZUJhcldpZGdldChkLT5sZWZ0U2lkZUJh
cik7CkBAIC0zNTcsNiArMzU3LDkgQEAgRGlnaWthbVZpZXc6OkRpZ2lrYW1WaWV3KFFXaWRnZXQq
IGNvbnN0IHBhcmVudCwgRGlnaWthbU1vZGVsQ29sbGVjdGlvbiogY29uc3QgbW8KICAgICBjb25u
ZWN0KGQtPnBlb3BsZVNpZGVCYXIsIFNJR05BTChyZXF1ZXN0RmFjZU1vZGUoYm9vbCkpLAogICAg
ICAgICAgICAgZC0+aWNvblZpZXcsIFNMT1Qoc2V0RmFjZU1vZGUoYm9vbCkpKTsKIAorICAgIGNv
bm5lY3QoZC0+cGVvcGxlU2lkZUJhciwgU0lHTkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzKFFMaXN0
PFRBbGJ1bSo+KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHNsb3ROZXdEdXBsaWNhdGVzU2Vh
cmNoKFFMaXN0PFRBbGJ1bSo+KSkpOworCiAgICAgZC0+bGVmdFNpZGVCYXJXaWRnZXRzIDw8IGQt
PnBlb3BsZVNpZGVCYXI7CiAKICAgICBmb3JlYWNoKFNpZGViYXJXaWRnZXQqIGNvbnN0IGxlZnRX
aWRnZXQsIGQtPmxlZnRTaWRlQmFyV2lkZ2V0cykKQEAgLTEwNDAsMTIgKzEwNDMsMjQgQEAgdm9p
ZCBEaWdpa2FtVmlldzo6c2xvdE5ld0FkdmFuY2VkU2VhcmNoKCkKICAgICBkLT5zZWFyY2hTaWRl
QmFyLT5uZXdBZHZhbmNlZFNlYXJjaCgpOwogfQogCi12b2lkIERpZ2lrYW1WaWV3OjpzbG90TmV3
RHVwbGljYXRlc1NlYXJjaChBbGJ1bSogYWxidW0pCit2b2lkIERpZ2lrYW1WaWV3OjpzbG90TmV3
RHVwbGljYXRlc1NlYXJjaChQQWxidW0qIGFsYnVtKQogewogICAgIHNsb3RMZWZ0U2lkZUJhckFj
dGl2YXRlKGQtPmZ1enp5U2VhcmNoU2lkZUJhcik7CiAgICAgZC0+ZnV6enlTZWFyY2hTaWRlQmFy
LT5uZXdEdXBsaWNhdGVzU2VhcmNoKGFsYnVtKTsKIH0KIAordm9pZCBEaWdpa2FtVmlldzo6c2xv
dE5ld0R1cGxpY2F0ZXNTZWFyY2goUUxpc3Q8UEFsYnVtKj4gYWxidW1zKQoreworICAgIHNsb3RM
ZWZ0U2lkZUJhckFjdGl2YXRlKGQtPmZ1enp5U2VhcmNoU2lkZUJhcik7CisgICAgZC0+ZnV6enlT
ZWFyY2hTaWRlQmFyLT5uZXdEdXBsaWNhdGVzU2VhcmNoKGFsYnVtcyk7Cit9CisKK3ZvaWQgRGln
aWthbVZpZXc6OnNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFRBbGJ1bSo+IGFsYnVtcykK
K3sKKyAgICBzbG90TGVmdFNpZGVCYXJBY3RpdmF0ZShkLT5mdXp6eVNlYXJjaFNpZGVCYXIpOwor
ICAgIGQtPmZ1enp5U2VhcmNoU2lkZUJhci0+bmV3RHVwbGljYXRlc1NlYXJjaChhbGJ1bXMpOwor
fQorCiB2b2lkIERpZ2lrYW1WaWV3OjpzbG90QWxidW1zQ2xlYXJlZCgpCiB7CiAgICAgZW1pdCBz
aWduYWxBbGJ1bVNlbGVjdGVkKDApOwpkaWZmIC0tZ2l0IGEvYXBwL3ZpZXdzL2RpZ2lrYW12aWV3
LmggYi9hcHAvdmlld3MvZGlnaWthbXZpZXcuaAppbmRleCAzY2M4MDU1ODIwLi4zMWUyZGJiYTY0
IDEwMDY0NAotLS0gYS9hcHAvdmlld3MvZGlnaWthbXZpZXcuaAorKysgYi9hcHAvdmlld3MvZGln
aWthbXZpZXcuaApAQCAtNDksNiArNDksOCBAQCBuYW1lc3BhY2UgRGlnaWthbQogY2xhc3MgQWxi
dW1JY29uSXRlbTsKIGNsYXNzIEFwcGxpY2F0aW9uU2V0dGluZ3M7CiBjbGFzcyBBbGJ1bTsKK2Ns
YXNzIFBBbGJ1bTsKK2NsYXNzIFRBbGJ1bTsKIGNsYXNzIEJhdGNoU3luY01ldGFkYXRhOwogY2xh
c3MgRmlsdGVyU3RhdHVzQmFyOwogY2xhc3MgU2xpZGVTaG93U2V0dGluZ3M7CkBAIC0xNzQsNyAr
MTc2LDkgQEAgcHVibGljIFFfU0xPVFM6CiAgICAgLy8gU2VhcmNoIGFjdGlvbiBzbG90cwogICAg
IHZvaWQgc2xvdE5ld0tleXdvcmRTZWFyY2goKTsKICAgICB2b2lkIHNsb3ROZXdBZHZhbmNlZFNl
YXJjaCgpOwotICAgIHZvaWQgc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGFsYnVtPTAp
OworICAgIHZvaWQgc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2goUEFsYnVtKiBhbGJ1bT0wKTsKKyAg
ICB2b2lkIHNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFBBbGJ1bSo+IGFsYnVtcyk7Cisg
ICAgdm9pZCBzbG90TmV3RHVwbGljYXRlc1NlYXJjaChRTGlzdDxUQWxidW0qPiBhbGJ1bXMpOwog
CiAgICAgLy8gSW1hZ2UgYWN0aW9uIHNsb3RzCiAgICAgdm9pZCBzbG90SW1hZ2VMaWdodFRhYmxl
KCk7CmRpZmYgLS1naXQgYS9hcHAvdmlld3MvbGVmdHNpZGViYXJ3aWRnZXRzLmNwcCBiL2FwcC92
aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMuY3BwCmluZGV4IDAzNjE1N2RjNjQuLjQzNmU0YWUyOWMg
MTAwNjQ0Ci0tLSBhL2FwcC92aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMuY3BwCisrKyBiL2FwcC92
aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMuY3BwCkBAIC0xMTIsOCArMTEyLDggQEAgQWxidW1Gb2xk
ZXJWaWV3U2lkZUJhcldpZGdldDo6QWxidW1Gb2xkZXJWaWV3U2lkZUJhcldpZGdldChRV2lkZ2V0
KiBjb25zdCBwYXJlbnQKICAgICBsYXlvdXQtPmFkZFdpZGdldChkLT5zZWFyY2hUZXh0QmFyKTsK
IAogICAgIC8vIHNldHVwIGNvbm5lY3Rpb24KLSAgICBjb25uZWN0KGQtPmFsYnVtRm9sZGVyVmll
dywgU0lHTkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzSW5BbGJ1bShBbGJ1bSopKSwKLSAgICAgICAg
ICAgIHRoaXMsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oQWxidW0qKSkpOwor
ICAgIGNvbm5lY3QoZC0+YWxidW1Gb2xkZXJWaWV3LCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0
ZXMoUEFsYnVtKikpLAorICAgICAgICAgICAgdGhpcywgU0lHTkFMKHNpZ25hbEZpbmREdXBsaWNh
dGVzKFBBbGJ1bSopKSk7CiB9CiAKIEFsYnVtRm9sZGVyVmlld1NpZGVCYXJXaWRnZXQ6On5BbGJ1
bUZvbGRlclZpZXdTaWRlQmFyV2lkZ2V0KCkKQEAgLTI1MCw4ICsyNTAsOCBAQCBUYWdWaWV3U2lk
ZUJhcldpZGdldDo6VGFnVmlld1NpZGVCYXJXaWRnZXQoUVdpZGdldCogY29uc3QgcGFyZW50LCBU
YWdNb2RlbCogY29ucwogICAgIGNvbm5lY3QoZC0+b3BlblRhZ01uZ3IsIFNJR05BTChjbGlja2Vk
KCkpLAogICAgICAgICAgICAgdGhpcyxTTE9UKHNsb3RPcGVuVGFnTWFuYWdlcigpKSk7CiAKLSAg
ICBjb25uZWN0KGQtPnRhZ0ZvbGRlclZpZXcsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0lu
QWxidW0oQWxidW0qKSksCi0gICAgICAgICAgICB0aGlzLCBTSUdOQUwoc2lnbmFsRmluZER1cGxp
Y2F0ZXNJbkFsYnVtKEFsYnVtKikpKTsKKyAgICBjb25uZWN0KGQtPnRhZ0ZvbGRlclZpZXcsIFNJ
R05BTChzaWduYWxGaW5kRHVwbGljYXRlcyhRTGlzdDxUQWxidW0qPikpLAorICAgICAgICAgICAg
dGhpcywgU0lHTkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzKFFMaXN0PFRBbGJ1bSo+KSkpOwogCiAg
ICAgY29ubmVjdChkLT5idG5Hcm91cCwgU0lHTkFMKGJ1dHRvbkNsaWNrZWQoaW50KSksCiAgICAg
ICAgICAgICB0aGlzLCBTTE9UKHNsb3RUb2dnbGVUYWdzU2VsZWN0aW9uKGludCkpKTsKQEAgLTEy
NTEsMTEgKzEyNTEsMjEgQEAgY29uc3QgUVN0cmluZyBGdXp6eVNlYXJjaFNpZGVCYXJXaWRnZXQ6
OmdldENhcHRpb24oKQogICAgIHJldHVybiBpMThuYygiRnV6enkgU2VhcmNoIGltYWdlcywgYXMg
ZHVwcGxpY2F0ZXMsIHNrZXRjaCwgc2ltaWxhcnMgc2VhcmNoZXMiLCAiRnV6enkiKTsKIH0KIAot
dm9pZCBGdXp6eVNlYXJjaFNpZGVCYXJXaWRnZXQ6Om5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0q
IGFsYnVtKQordm9pZCBGdXp6eVNlYXJjaFNpZGVCYXJXaWRnZXQ6Om5ld0R1cGxpY2F0ZXNTZWFy
Y2goUEFsYnVtKiBhbGJ1bSkKIHsKICAgICBkLT5mdXp6eVNlYXJjaFZpZXctPm5ld0R1cGxpY2F0
ZXNTZWFyY2goYWxidW0pOwogfQogCit2b2lkIEZ1enp5U2VhcmNoU2lkZUJhcldpZGdldDo6bmV3
RHVwbGljYXRlc1NlYXJjaChRTGlzdDxQQWxidW0qPiBhbGJ1bXMpCit7CisgICAgZC0+ZnV6enlT
ZWFyY2hWaWV3LT5uZXdEdXBsaWNhdGVzU2VhcmNoKGFsYnVtcyk7Cit9CisKK3ZvaWQgRnV6enlT
ZWFyY2hTaWRlQmFyV2lkZ2V0OjpuZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFRBbGJ1bSo+IGFs
YnVtcykKK3sKKyAgICBkLT5mdXp6eVNlYXJjaFZpZXctPm5ld0R1cGxpY2F0ZXNTZWFyY2goYWxi
dW1zKTsKK30KKwogdm9pZCBGdXp6eVNlYXJjaFNpZGVCYXJXaWRnZXQ6Om5ld1NpbWlsYXJTZWFy
Y2goY29uc3QgSW1hZ2VJbmZvJiBpbWFnZUluZm8pCiB7CiAgICAgaWYgKGltYWdlSW5mby5pc051
bGwoKSkKQEAgLTE0MTQsOCArMTQyNCw4IEBAIFBlb3BsZVNpZGVCYXJXaWRnZXQ6OlBlb3BsZVNp
ZGVCYXJXaWRnZXQoUVdpZGdldCogY29uc3QgcGFyZW50LCBUYWdNb2RlbCogY29uc3QKIAogICAg
IHNldExheW91dChsYXlvdXQpOwogCi0gICAgY29ubmVjdChkLT50YWdGb2xkZXJWaWV3LCBTSUdO
QUwoc2lnbmFsRmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKikpLAotICAgICAgICAgICAgdGhp
cywgU0lHTkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzSW5BbGJ1bShBbGJ1bSopKSk7CisgICAgY29u
bmVjdChkLT50YWdGb2xkZXJWaWV3LCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0ZXMoUUxpc3Q8
VEFsYnVtKj4pKSwKKyAgICAgICAgICAgIHRoaXMsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRl
cyhRTGlzdDxUQWxidW0qPikpKTsKIAogICAgIGNvbm5lY3QoZC0+cmVzY2FuQnV0dG9uLCBTSUdO
QUwocHJlc3NlZCgpKSwKICAgICAgICAgICAgIHRoaXMsIFNMT1Qoc2xvdFNjYW5Gb3JGYWNlcygp
KSApOwpkaWZmIC0tZ2l0IGEvYXBwL3ZpZXdzL2xlZnRzaWRlYmFyd2lkZ2V0cy5oIGIvYXBwL3Zp
ZXdzL2xlZnRzaWRlYmFyd2lkZ2V0cy5oCmluZGV4IDhmM2ZlNWM0MWEuLjIwYzM1MThlNTUgMTAw
NjQ0Ci0tLSBhL2FwcC92aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMuaAorKysgYi9hcHAvdmlld3Mv
bGVmdHNpZGViYXJ3aWRnZXRzLmgKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljIFFfU0xPVFM6CiAK
IFFfU0lHTkFMUzoKIAotICAgIHZvaWQgc2lnbmFsRmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVt
Kik7CisgICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRlcyhQQWxidW0qKTsKIAogcHJpdmF0ZToK
IApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYyBRX1NMT1RTOgogCiBRX1NJR05BTFM6CiAKLSAg
ICB2b2lkIHNpZ25hbEZpbmREdXBsaWNhdGVzSW5BbGJ1bShBbGJ1bSopOworICAgIHZvaWQgc2ln
bmFsRmluZER1cGxpY2F0ZXMoUUxpc3Q8VEFsYnVtKj4gYWxidW1zKTsKIAogcHVibGljOgogCkBA
IC0zMTMsNyArMzEzLDkgQEAgcHVibGljOgogICAgIGNvbnN0IFFJY29uIGdldEljb24oKTsKICAg
ICBjb25zdCBRU3RyaW5nIGdldENhcHRpb24oKTsKIAotICAgIHZvaWQgbmV3RHVwbGljYXRlc1Nl
YXJjaChBbGJ1bSogYWxidW0pOworICAgIHZvaWQgbmV3RHVwbGljYXRlc1NlYXJjaChQQWxidW0q
IGFsYnVtKTsKKyAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2goUUxpc3Q8UEFsYnVtKj4gYWxi
dW1zKTsKKyAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2goUUxpc3Q8VEFsYnVtKj4gYWxidW1z
KTsKICAgICB2b2lkIG5ld1NpbWlsYXJTZWFyY2goY29uc3QgSW1hZ2VJbmZvJiBpbWFnZUluZm8p
OwogCiBwdWJsaWMgUV9TTE9UUzoKQEAgLTQwNCw3ICs0MDYsNyBAQCBRX1NJR05BTFM6CiAKICAg
ICB2b2lkIHJlcXVlc3RGYWNlTW9kZShib29sIG9uKTsKIAotICAgIHZvaWQgc2lnbmFsRmluZER1
cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKik7CisgICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRlcyhR
TGlzdDxUQWxidW0qPik7CiAKIHByaXZhdGU6CiAKZGlmZiAtLWdpdCBhL2xpYnMvYWxidW0vYWxi
dW1zZWxlY3Rpb250cmVldmlldy5jcHAgYi9saWJzL2FsYnVtL2FsYnVtc2VsZWN0aW9udHJlZXZp
ZXcuY3BwCmluZGV4IGU2ODA3OGEwOGEuLjg0MjI3NGE0MTcgMTAwNjQ0Ci0tLSBhL2xpYnMvYWxi
dW0vYWxidW1zZWxlY3Rpb250cmVldmlldy5jcHAKKysrIGIvbGlicy9hbGJ1bS9hbGJ1bXNlbGVj
dGlvbnRyZWV2aWV3LmNwcApAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgQWxidW1TZWxlY3Rpb25U
cmVlVmlldzo6c2V0RW5hYmxlVG9vbFRpcHMoYm9vbCBlbmFibGUpCiAKIHZvaWQgQWxidW1TZWxl
Y3Rpb25UcmVlVmlldzo6c2xvdEZpbmREdXBsaWNhdGVzKCkKIHsKLSAgICBlbWl0IHNpZ25hbEZp
bmREdXBsaWNhdGVzSW5BbGJ1bShkLT5hbGJ1bU1vZGlmaWNhdGlvbkhlbHBlci0+Ym91bmRBbGJ1
bShzZW5kZXIoKSkpOworICAgIGVtaXQgc2lnbmFsRmluZER1cGxpY2F0ZXMoZC0+YWxidW1Nb2Rp
ZmljYXRpb25IZWxwZXItPmJvdW5kQWxidW0oc2VuZGVyKCkpKTsKIH0KIAogdm9pZCBBbGJ1bVNl
bGVjdGlvblRyZWVWaWV3OjpzbG90UmVidWlsZFRodW1icygpCmRpZmYgLS1naXQgYS9saWJzL2Fs
YnVtL2FsYnVtc2VsZWN0aW9udHJlZXZpZXcuaCBiL2xpYnMvYWxidW0vYWxidW1zZWxlY3Rpb250
cmVldmlldy5oCmluZGV4IGJmMjc2ZmU5YjMuLjVmM2MxNjJjNjYgMTAwNjQ0Ci0tLSBhL2xpYnMv
YWxidW0vYWxidW1zZWxlY3Rpb250cmVldmlldy5oCisrKyBiL2xpYnMvYWxidW0vYWxidW1zZWxl
Y3Rpb250cmVldmlldy5oCkBAIC02Nyw3ICs2Nyw3IEBAIFFfU0lHTkFMUzoKICAgICAgKgogICAg
ICAqIEBwYXJhbSBhbGJ1bSB0aGUgYWxidW0gdG8gZmluZCBkdXBsaWNhdGVzIGluCiAgICAgICov
Ci0gICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oQWxidW0qIGFsYnVtKTsKKyAg
ICB2b2lkIHNpZ25hbEZpbmREdXBsaWNhdGVzKFBBbGJ1bSogYWxidW0pOwogCiBwcml2YXRlIFFf
U0xPVFM6CiAKZGlmZiAtLWdpdCBhL2xpYnMvYWxidW0vYWxidW10cmVldmlldy5jcHAgYi9saWJz
L2FsYnVtL2FsYnVtdHJlZXZpZXcuY3BwCmluZGV4IDYxYWNmMjRhNTkuLjA4ZmZlYTFjOTYgMTAw
NjQ0Ci0tLSBhL2xpYnMvYWxidW0vYWxidW10cmVldmlldy5jcHAKKysrIGIvbGlicy9hbGJ1bS9h
bGJ1bXRyZWV2aWV3LmNwcApAQCAtMTY0Nyw2ICsxNjQ3LDExIEBAIFFMaXN0PEFsYnVtKj4gVGFn
VHJlZVZpZXc6OnNlbGVjdGVkVGFncygpCiAgICAgcmV0dXJuIHNlbGVjdGVkQWxidW1zPEFsYnVt
PihzZWxlY3Rpb25Nb2RlbCgpLG1fZmlsdGVyZWRNb2RlbCk7CiB9CiAKK1FMaXN0PFRBbGJ1bSo+
IFRhZ1RyZWVWaWV3OjpzZWxlY3RlZFRhZ0FsYnVtcygpCit7CisgICAgcmV0dXJuIHNlbGVjdGVk
QWxidW1zPFRBbGJ1bT4oc2VsZWN0aW9uTW9kZWwoKSxtX2ZpbHRlcmVkTW9kZWwpOworfQorCiBU
QWxidW0qIFRhZ1RyZWVWaWV3OjphbGJ1bUZvckluZGV4KGNvbnN0IFFNb2RlbEluZGV4JiBpbmRl
eCkgY29uc3QKIHsKICAgICByZXR1cm4gZHluYW1pY19jYXN0PFRBbGJ1bSo+IChtX2FsYnVtRmls
dGVyTW9kZWwtPmFsYnVtRm9ySW5kZXgoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL2xpYnMvYWxidW0v
YWxidW10cmVldmlldy5oIGIvbGlicy9hbGJ1bS9hbGJ1bXRyZWV2aWV3LmgKaW5kZXggMjc3MDE0
ZWRjOS4uOTg0YWQxYWFhOSAxMDA2NDQKLS0tIGEvbGlicy9hbGJ1bS9hbGJ1bXRyZWV2aWV3LmgK
KysrIGIvbGlicy9hbGJ1bS9hbGJ1bXRyZWV2aWV3LmgKQEAgLTU1MSw5ICs1NTEsMTAgQEAgcHVi
bGljOgogICAgIFRBbGJ1bSogY3VycmVudEFsYnVtKCkgY29uc3Q7CiAKICAgICAvKioKLSAgICAg
KiBAYnJpZWYgc2VsZWN0ZWRBbGJ1bXMgLSByZXR1cm4gYSBsaXN0IG9mIGFsbCBzZWxlY3RlZCBp
dGVtcyBpbiB0YWcgbW9kZWwKKyAgICAgKiBAYnJpZWYgc2VsZWN0ZWRUYWdzIC0gcmV0dXJuIGEg
bGlzdCBvZiBhbGwgc2VsZWN0ZWQgaXRlbXMgaW4gdGFnIG1vZGVsCiAgICAgICovCiAgICAgUUxp
c3Q8QWxidW0qPiBzZWxlY3RlZFRhZ3MoKTsKKyAgICBRTGlzdDxUQWxidW0qPiBzZWxlY3RlZFRh
Z0FsYnVtcygpOwogCiAgICAgVEFsYnVtKiBhbGJ1bUZvckluZGV4KGNvbnN0IFFNb2RlbEluZGV4
JiBpbmRleCkgY29uc3Q7CiAgICAgVGFnTW9kaWZpY2F0aW9uSGVscGVyKiB0YWdNb2RpZmljYXRp
b25IZWxwZXIoKSAgY29uc3Q7CmRpZmYgLS1naXQgYS9saWJzL3RhZ3MvdGFnZm9sZGVydmlldy5j
cHAgYi9saWJzL3RhZ3MvdGFnZm9sZGVydmlldy5jcHAKaW5kZXggYmFkM2QwMzNkNS4uMGU3ZWZk
ZjFlNCAxMDA2NDQKLS0tIGEvbGlicy90YWdzL3RhZ2ZvbGRlcnZpZXcuY3BwCisrKyBiL2xpYnMv
dGFncy90YWdmb2xkZXJ2aWV3LmNwcApAQCAtMjM5LDcgKzIzOSw5IEBAIHZvaWQgVGFnRm9sZGVy
Vmlldzo6aGFuZGxlQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24oUUFjdGlvbiogYWN0aW9uLCBBbGJ1
bVBvaW50ZXI8CiAgICAgfQogICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBkLT5maW5kRHVwbEFjdGlv
bikKICAgICB7Ci0gICAgICAgIGVtaXQgc2lnbmFsRmluZER1cGxpY2F0ZXNJbkFsYnVtKHRhZyk7
CisgICAgICAgIFFMaXN0PFRBbGJ1bSo+IHNlbGVjdGVkID0gc2VsZWN0ZWRUYWdBbGJ1bXMoKTsK
KworICAgICAgICBlbWl0IHNpZ25hbEZpbmREdXBsaWNhdGVzKHNlbGVjdGVkKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL2xpYnMvdGFncy90YWdmb2xkZXJ2aWV3LmggYi9saWJzL3RhZ3MvdGFn
Zm9sZGVydmlldy5oCmluZGV4IDhkZTcyOGU4NmYuLmU3ZjYwZWIwZTggMTAwNjQ0Ci0tLSBhL2xp
YnMvdGFncy90YWdmb2xkZXJ2aWV3LmgKKysrIGIvbGlicy90YWdzL3RhZ2ZvbGRlcnZpZXcuaApA
QCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAKIFFfU0lHTkFMUzoKIAotICAgIHZvaWQgc2lnbmFs
RmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKik7CisgICAgdm9pZCBzaWduYWxGaW5kRHVwbGlj
YXRlcyhRTGlzdDxUQWxidW0qPik7CiAKIHByb3RlY3RlZDoKIApkaWZmIC0tZ2l0IGEvbGlicy90
YWdzL3RhZ3NtYW5hZ2VyL3RhZ3NtYW5hZ2VyLmNwcCBiL2xpYnMvdGFncy90YWdzbWFuYWdlci90
YWdzbWFuYWdlci5jcHAKaW5kZXggZDU3YzQ3NWQ0ZS4uOWRhNjk4NjA1MSAxMDA2NDQKLS0tIGEv
bGlicy90YWdzL3RhZ3NtYW5hZ2VyL3RhZ3NtYW5hZ2VyLmNwcAorKysgYi9saWJzL3RhZ3MvdGFn
c21hbmFnZXIvdGFnc21hbmFnZXIuY3BwCkBAIC00NTQsMTIgKzQ1NCwxMiBAQCB2b2lkIFRhZ3NN
YW5hZ2VyOjpzbG90UmVzZXRUYWdJY29uKCkKIHsKICAgICBRU3RyaW5nIGVyck1zZzsKIAotICAg
IGNvbnN0IFFMaXN0PEFsYnVtKj4gc2VsZWN0ZWQgPSBkLT50YWdNbmdyVmlldy0+c2VsZWN0ZWRU
YWdzKCk7CisgICAgY29uc3QgUUxpc3Q8VEFsYnVtKj4gc2VsZWN0ZWQgPSBkLT50YWdNbmdyVmll
dy0+c2VsZWN0ZWRUYWdBbGJ1bXMoKTsKICAgICBjb25zdCBRU3RyaW5nIGljb24gPSBRTGF0aW4x
U3RyaW5nKCJ0YWciKTsKIAotICAgIGZvciAoUUxpc3Q8QWxidW0qPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzZWxlY3RlZC5jb25zdEJlZ2luKCk7IGl0ICE9IHNlbGVjdGVkLmNvbnN0RW5kKCk7ICsr
aXQgKQorICAgIGZvciAoUUxpc3Q8VEFsYnVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2VsZWN0
ZWQuY29uc3RCZWdpbigpOyBpdCAhPSBzZWxlY3RlZC5jb25zdEVuZCgpOyArK2l0ICkKICAgICB7
Ci0gICAgICAgIFRBbGJ1bSogY29uc3QgdGFnID0gZHluYW1pY19jYXN0PFRBbGJ1bSo+KCppdCk7
CisgICAgICAgIFRBbGJ1bSogY29uc3QgdGFnID0gKml0OwogCiAgICAgICAgIGlmICh0YWcpCiAg
ICAgICAgIHsKZGlmZiAtLWdpdCBhL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9maW5kZHVwbGljYXRl
c3ZpZXcuY3BwIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRkdXBsaWNhdGVzdmlldy5jcHAK
aW5kZXggNmIxZGQyOWNmYi4uNzIxMzk5MGQ4ZiAxMDA2NDQKLS0tIGEvdXRpbGl0aWVzL2Z1enp5
c2VhcmNoL2ZpbmRkdXBsaWNhdGVzdmlldy5jcHAKKysrIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNo
L2ZpbmRkdXBsaWNhdGVzdmlldy5jcHAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIEZpbmREdXBs
aWNhdGVzVmlldzo6c2xvdFVwZGF0ZUZpbmdlclByaW50cygpCiAgICAgdG9vbC0+c3RhcnQoKTsK
IH0KIAotdm9pZCBGaW5kRHVwbGljYXRlc1ZpZXc6OnNsb3RTZXRTZWxlY3RlZEFsYnVtKEFsYnVt
KiBhbGJ1bSkKK3ZvaWQgRmluZER1cGxpY2F0ZXNWaWV3OjpzbG90U2V0U2VsZWN0ZWRBbGJ1bShQ
QWxidW0qIGFsYnVtKQogewogICAgIGlmICghYWxidW0pCiAgICAgewpAQCAtNDA2LDIwICs0MDYs
MzEgQEAgdm9pZCBGaW5kRHVwbGljYXRlc1ZpZXc6OnNsb3RTZXRTZWxlY3RlZEFsYnVtKEFsYnVt
KiBhbGJ1bSkKICAgICB9CiAKICAgICByZXNldEFsYnVtc0FuZFRhZ3MoKTsKKyAgICAvLyBAT0RE
IDogV2h5IGlzIHNpbmdsZXRvbiBzZXQgdG8gdHJ1ZT8gcmVzZXRBbGJ1bXNBbmRUYWdzIGFscmVh
ZHkgY2xlYXJzIHRoZSBzZWxlY3Rpb24uCiAgICAgZC0+YWxidW1TZWxlY3RvcnMtPnNldFBBbGJ1
bVNlbGVjdGVkKGFsYnVtLCB0cnVlKTsKICAgICBkLT5hbGJ1bVNlbGVjdG9ycy0+c2V0VHlwZVNl
bGVjdGlvbihBbGJ1bVNlbGVjdG9yczo6QWxidW1UeXBlOjpQaHlzQWxidW0pOwogICAgIHNsb3RD
aGVja0ZvclZhbGlkU2V0dGluZ3MoKTsKIH0KIAotdm9pZCBGaW5kRHVwbGljYXRlc1ZpZXc6OnNs
b3RTZXRTZWxlY3RlZFRhZyhBbGJ1bSogYWxidW0pCit2b2lkIEZpbmREdXBsaWNhdGVzVmlldzo6
c2xvdFNldFNlbGVjdGVkQWxidW1zKFFMaXN0PFBBbGJ1bSo+IGFsYnVtcykKIHsKLSAgICBpZiAo
IWFsYnVtKQorICAgIC8vIEBPREQgOiBXaHkgaXMgc2luZ2xldG9uIHNldCB0byB0cnVlPyByZXNl
dEFsYnVtc0FuZFRhZ3MgYWxyZWFkeSBjbGVhcnMgdGhlIHNlbGVjdGlvbi4KKyAgICByZXNldEFs
YnVtc0FuZFRhZ3MoKTsKKyAgICBmb3JlYWNoKFBBbGJ1bSogYWxidW0sIGFsYnVtcykKICAgICB7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZC0+YWxidW1TZWxlY3RvcnMtPnNldFBBbGJ1bVNl
bGVjdGVkKGFsYnVtLCBmYWxzZSk7CiAgICAgfQorICAgIGQtPmFsYnVtU2VsZWN0b3JzLT5zZXRU
eXBlU2VsZWN0aW9uKEFsYnVtU2VsZWN0b3JzOjpBbGJ1bVR5cGU6OlBoeXNBbGJ1bSk7CisgICAg
c2xvdENoZWNrRm9yVmFsaWRTZXR0aW5ncygpOworfQogCit2b2lkIEZpbmREdXBsaWNhdGVzVmll
dzo6c2xvdFNldFNlbGVjdGVkQWxidW1zKFFMaXN0PFRBbGJ1bSo+IGFsYnVtcykKK3sKICAgICBy
ZXNldEFsYnVtc0FuZFRhZ3MoKTsKLSAgICBkLT5hbGJ1bVNlbGVjdG9ycy0+c2V0VEFsYnVtU2Vs
ZWN0ZWQoYWxidW0sIHRydWUpOworICAgIGZvcmVhY2goVEFsYnVtKiBhbGJ1bSwgYWxidW1zKQor
ICAgIHsKKyAgICAgICAgZC0+YWxidW1TZWxlY3RvcnMtPnNldFRBbGJ1bVNlbGVjdGVkKGFsYnVt
LCBmYWxzZSk7CisgICAgfQogICAgIGQtPmFsYnVtU2VsZWN0b3JzLT5zZXRUeXBlU2VsZWN0aW9u
KEFsYnVtU2VsZWN0b3JzOjpBbGJ1bVR5cGU6OlRhZ3NBbGJ1bSk7CiAgICAgc2xvdENoZWNrRm9y
VmFsaWRTZXR0aW5ncygpOwogfQpkaWZmIC0tZ2l0IGEvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2Zp
bmRkdXBsaWNhdGVzdmlldy5oIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRkdXBsaWNhdGVz
dmlldy5oCmluZGV4IDEzNzlhYmJlMTMuLmE5NDhiY2Q4NDMgMTAwNjQ0Ci0tLSBhL3V0aWxpdGll
cy9mdXp6eXNlYXJjaC9maW5kZHVwbGljYXRlc3ZpZXcuaAorKysgYi91dGlsaXRpZXMvZnV6enlz
ZWFyY2gvZmluZGR1cGxpY2F0ZXN2aWV3LmgKQEAgLTM2LDYgKzM2LDggQEAgbmFtZXNwYWNlIERp
Z2lrYW0KIHsKIGNsYXNzIEFsYnVtOwogY2xhc3MgU0FsYnVtOworY2xhc3MgUEFsYnVtOworY2xh
c3MgVEFsYnVtOwogCiBjbGFzcyBGaW5kRHVwbGljYXRlc1ZpZXcgOiBwdWJsaWMgUVdpZGdldAog
ewpAQCAtNTAsOCArNTIsOSBAQCBwdWJsaWM6CiAKIHB1YmxpYyBRX1NMT1RTOgogCi0gICAgdm9p
ZCBzbG90U2V0U2VsZWN0ZWRBbGJ1bShBbGJ1bSopOwotICAgIHZvaWQgc2xvdFNldFNlbGVjdGVk
VGFnKEFsYnVtKik7CisgICAgdm9pZCBzbG90U2V0U2VsZWN0ZWRBbGJ1bShQQWxidW0qIGFsYnVt
KTsKKyAgICB2b2lkIHNsb3RTZXRTZWxlY3RlZEFsYnVtcyhRTGlzdDxQQWxidW0qPiBhbGJ1bXMp
OworICAgIHZvaWQgc2xvdFNldFNlbGVjdGVkQWxidW1zKFFMaXN0PFRBbGJ1bSo+IGFsYnVtcyk7
CiAKIHByaXZhdGUgUV9TTE9UUzoKIApkaWZmIC0tZ2l0IGEvdXRpbGl0aWVzL2Z1enp5c2VhcmNo
L2Z1enp5c2VhcmNodmlldy5jcHAgYi91dGlsaXRpZXMvZnV6enlzZWFyY2gvZnV6enlzZWFyY2h2
aWV3LmNwcAppbmRleCAwMjRiMzJmZDIxLi5kMDBjNThjZTE4IDEwMDY0NAotLS0gYS91dGlsaXRp
ZXMvZnV6enlzZWFyY2gvZnV6enlzZWFyY2h2aWV3LmNwcAorKysgYi91dGlsaXRpZXMvZnV6enlz
ZWFyY2gvZnV6enlzZWFyY2h2aWV3LmNwcApAQCAtNTU4LDE4ICs1NTgsMzEgQEAgdm9pZCBGdXp6
eVNlYXJjaFZpZXc6OnNldEN1cnJlbnRBbGJ1bShTQWxidW0qIGNvbnN0IGFsYnVtKQogICAgIGQt
PnNlYXJjaFRyZWVWaWV3LT5zZXRDdXJyZW50QWxidW1zKFFMaXN0PEFsYnVtKj4oKSA8PCBhbGJ1
bSk7CiB9CiAKLXZvaWQgRnV6enlTZWFyY2hWaWV3OjpuZXdEdXBsaWNhdGVzU2VhcmNoKEFsYnVt
KiBjb25zdCBhbGJ1bSkKK3ZvaWQgRnV6enlTZWFyY2hWaWV3OjpuZXdEdXBsaWNhdGVzU2VhcmNo
KFBBbGJ1bSogY29uc3QgYWxidW0pCiB7CiAgICAgaWYgKGFsYnVtKQogICAgIHsKLSAgICAgICAg
aWYgKGFsYnVtLT50eXBlKCkgPT0gQWxidW06OlBIWVNJQ0FMKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBkLT5maW5kRHVwbGljYXRlc1BhbmVsLT5zbG90U2V0U2VsZWN0ZWRBbGJ1bShhbGJ1bSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYWxidW0tPnR5cGUoKSA9PSBBbGJ1bTo6VEFH
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkLT5maW5kRHVwbGljYXRlc1BhbmVsLT5zbG90U2V0
U2VsZWN0ZWRUYWcoYWxidW0pOwotICAgICAgICB9CisgICAgICAgIGQtPmZpbmREdXBsaWNhdGVz
UGFuZWwtPnNsb3RTZXRTZWxlY3RlZEFsYnVtKGFsYnVtKTsKKyAgICB9CisKKyAgICBkLT50YWJX
aWRnZXQtPnNldEN1cnJlbnRJbmRleChQcml2YXRlOjpEVVBMSUNBVEVTKTsKK30KKwordm9pZCBG
dXp6eVNlYXJjaFZpZXc6Om5ld0R1cGxpY2F0ZXNTZWFyY2goUUxpc3Q8UEFsYnVtKj4gY29uc3Qg
YWxidW1zKQoreworICAgIGlmICghYWxidW1zLmlzRW1wdHkoKSkKKyAgICB7CisgICAgICAgIGQt
PmZpbmREdXBsaWNhdGVzUGFuZWwtPnNsb3RTZXRTZWxlY3RlZEFsYnVtcyhhbGJ1bXMpOworICAg
IH0KKworICAgIGQtPnRhYldpZGdldC0+c2V0Q3VycmVudEluZGV4KFByaXZhdGU6OkRVUExJQ0FU
RVMpOworfQorCit2b2lkIEZ1enp5U2VhcmNoVmlldzo6bmV3RHVwbGljYXRlc1NlYXJjaChRTGlz
dDxUQWxidW0qPiBjb25zdCBhbGJ1bXMpCit7CisgICAgaWYgKCFhbGJ1bXMuaXNFbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgZC0+ZmluZER1cGxpY2F0ZXNQYW5lbC0+c2xvdFNldFNlbGVjdGVkQWxi
dW1zKGFsYnVtcyk7CiAgICAgfQogCiAgICAgZC0+dGFiV2lkZ2V0LT5zZXRDdXJyZW50SW5kZXgo
UHJpdmF0ZTo6RFVQTElDQVRFUyk7CmRpZmYgLS1naXQgYS91dGlsaXRpZXMvZnV6enlzZWFyY2gv
ZnV6enlzZWFyY2h2aWV3LmggYi91dGlsaXRpZXMvZnV6enlzZWFyY2gvZnV6enlzZWFyY2h2aWV3
LmgKaW5kZXggYTBjYTA1N2U0Yy4uMmE1NWJiNWFlOSAxMDA2NDQKLS0tIGEvdXRpbGl0aWVzL2Z1
enp5c2VhcmNoL2Z1enp5c2VhcmNodmlldy5oCisrKyBiL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9m
dXp6eXNlYXJjaHZpZXcuaApAQCAtNDUsNiArNDUsOCBAQCBjbGFzcyBGdXp6eVNlYXJjaEZvbGRl
clZpZXc7CiBjbGFzcyBJbWFnZUluZm87CiBjbGFzcyBMb2FkaW5nRGVzY3JpcHRpb247CiBjbGFz
cyBTQWxidW07CitjbGFzcyBQQWxidW07CitjbGFzcyBUQWxidW07CiBjbGFzcyBTZWFyY2hNb2Rl
bDsKIGNsYXNzIFNlYXJjaE1vZGlmaWNhdGlvbkhlbHBlcjsKIGNsYXNzIFNlYXJjaFRleHRCYXI7
CkBAIC02Niw3ICs2OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFjdGl2ZShib29sIHZhbCk7
CiAgICAgdm9pZCBzZXRJbWFnZUluZm8oY29uc3QgSW1hZ2VJbmZvJiBpbmZvKTsKIAotICAgIHZv
aWQgbmV3RHVwbGljYXRlc1NlYXJjaChBbGJ1bSogY29uc3QpOworICAgIHZvaWQgbmV3RHVwbGlj
YXRlc1NlYXJjaChQQWxidW0qIGNvbnN0KTsKKyAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2go
UUxpc3Q8UEFsYnVtKj4gY29uc3QpOworICAgIHZvaWQgbmV3RHVwbGljYXRlc1NlYXJjaChRTGlz
dDxUQWxidW0qPiBjb25zdCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29uZmlnR3JvdXAoY29u
c3QgS0NvbmZpZ0dyb3VwJiBncm91cCk7CiAgICAgdm9pZCBkb0xvYWRTdGF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103231</attachid>
            <date>2017-01-06 13:51:29 +0000</date>
            <delta_ts>2017-01-06 13:51:29 +0000</delta_ts>
            <desc>Combines patch for this bug and 320666</desc>
            <filename>combined.patch</filename>
            <type>text/plain</type>
            <size>61772</size>
            <attacher name="Simon">freisim93</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2FwcC92aWV3cy9kaWdpa2Ftdmlldy5jcHAgYi9hcHAvdmlld3MvZGlnaWth
bXZpZXcuY3BwCmluZGV4IDRhMWJlMjBkNDcuLmM5NWVmNzZjMDMgMTAwNjQ0Ci0tLSBhL2FwcC92
aWV3cy9kaWdpa2Ftdmlldy5jcHAKKysrIGIvYXBwL3ZpZXdzL2RpZ2lrYW12aWV3LmNwcApAQCAt
Mjk0LDE1ICsyOTQsMTUgQEAgRGlnaWthbVZpZXc6OkRpZ2lrYW1WaWV3KFFXaWRnZXQqIGNvbnN0
IHBhcmVudCwgRGlnaWthbU1vZGVsQ29sbGVjdGlvbiogY29uc3QgbW8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5hbGJ1bU1v
ZGlmaWNhdGlvbkhlbHBlcik7CiAgICAgZC0+bGVmdFNpZGVCYXJXaWRnZXRzIDw8IGQtPmFsYnVt
Rm9sZGVyU2lkZUJhcjsKIAotICAgIGNvbm5lY3QoZC0+YWxidW1Gb2xkZXJTaWRlQmFyLCBTSUdO
QUwoc2lnbmFsRmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKikpLAotICAgICAgICAgICAgdGhp
cywgU0xPVChzbG90TmV3RHVwbGljYXRlc1NlYXJjaChBbGJ1bSopKSk7CisgICAgY29ubmVjdChk
LT5hbGJ1bUZvbGRlclNpZGVCYXIsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlcyhQQWxidW0q
KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKFBBbGJ1
bSopKSk7CiAKICAgICAvLyBUYWdzIHNpZGViYXIgdGFiIGNvbnRlbnRzLgogICAgIGQtPnRhZ1Zp
ZXdTaWRlQmFyID0gbmV3IFRhZ1ZpZXdTaWRlQmFyV2lkZ2V0KGQtPmxlZnRTaWRlQmFyLCBkLT5t
b2RlbENvbGxlY3Rpb24tPmdldFRhZ01vZGVsKCkpOwogICAgIGQtPmxlZnRTaWRlQmFyV2lkZ2V0
cyA8PCBkLT50YWdWaWV3U2lkZUJhcjsKIAotICAgIGNvbm5lY3QoZC0+dGFnVmlld1NpZGVCYXIs
IFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oQWxidW0qKSksCi0gICAgICAgICAg
ICB0aGlzLCBTTE9UKHNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKEFsYnVtKikpKTsKKyAgICBjb25u
ZWN0KGQtPnRhZ1ZpZXdTaWRlQmFyLCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0ZXMoUUxpc3Q8
VEFsYnVtKj4pKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1Qoc2xvdE5ld0R1cGxpY2F0ZXNTZWFy
Y2goUUxpc3Q8VEFsYnVtKj4pKSk7CiAKICAgICAvLyBMYWJlbHMgc2lkZWJhcgogICAgIGQtPmxh
YmVsc1NpZGVCYXIgICAgICAgPSBuZXcgTGFiZWxzU2lkZUJhcldpZGdldChkLT5sZWZ0U2lkZUJh
cik7CkBAIC0zMzQsMTAgKzMzNCw3IEBAIERpZ2lrYW1WaWV3OjpEaWdpa2FtVmlldyhRV2lkZ2V0
KiBjb25zdCBwYXJlbnQsIERpZ2lrYW1Nb2RlbENvbGxlY3Rpb24qIGNvbnN0IG1vCiAgICAgZC0+
bGVmdFNpZGVCYXJXaWRnZXRzIDw8IGQtPmZ1enp5U2VhcmNoU2lkZUJhcjsKIAogICAgIGNvbm5l
Y3QoZC0+ZnV6enlTZWFyY2hTaWRlQmFyLFNJR05BTChzaWduYWxBY3RpdmUoYm9vbCkpLAotICAg
ICAgICAgICAgdGhpcywgU0xPVChzbG90RnV6enlTaWRlYmFyQWN0aXZlKGJvb2wpKSk7Ci0KLSAg
ICBjb25uZWN0KGQtPmZ1enp5U2VhcmNoU2lkZUJhciwgU0lHTkFMKHNpZ25hbEltYWdlQ2hhbmdl
ZCgpKSwKLSAgICAgICAgdGhpcywgU0xPVChzbG90VXBkYXRlRnV6enlSZWZlcmVuY2VJbWFnZSgp
KSk7CisgICAgICAgICAgICB0aGlzLCBTSUdOQUwoc2lnbmFsRnV6enlTaWRlYmFyQWN0aXZlKGJv
b2wpKSk7CiAKICNpZmRlZiBIQVZFX01BUkJMRQogICAgIGQtPmdwc1NlYXJjaFNpZGVCYXIgPSBu
ZXcgR1BTU2VhcmNoU2lkZUJhcldpZGdldChkLT5sZWZ0U2lkZUJhciwKQEAgLTM1Nyw2ICszNTQs
OSBAQCBEaWdpa2FtVmlldzo6RGlnaWthbVZpZXcoUVdpZGdldCogY29uc3QgcGFyZW50LCBEaWdp
a2FtTW9kZWxDb2xsZWN0aW9uKiBjb25zdCBtbwogICAgIGNvbm5lY3QoZC0+cGVvcGxlU2lkZUJh
ciwgU0lHTkFMKHJlcXVlc3RGYWNlTW9kZShib29sKSksCiAgICAgICAgICAgICBkLT5pY29uVmll
dywgU0xPVChzZXRGYWNlTW9kZShib29sKSkpOwogCisgICAgY29ubmVjdChkLT5wZW9wbGVTaWRl
QmFyLCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0ZXMoUUxpc3Q8VEFsYnVtKj4pKSwKKyAgICAg
ICAgICAgIHRoaXMsIFNMT1Qoc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2goUUxpc3Q8VEFsYnVtKj4p
KSk7CisKICAgICBkLT5sZWZ0U2lkZUJhcldpZGdldHMgPDwgZC0+cGVvcGxlU2lkZUJhcjsKIAog
ICAgIGZvcmVhY2goU2lkZWJhcldpZGdldCogY29uc3QgbGVmdFdpZGdldCwgZC0+bGVmdFNpZGVC
YXJXaWRnZXRzKQpAQCAtMTA0MCwxMiArMTA0MCwyNCBAQCB2b2lkIERpZ2lrYW1WaWV3OjpzbG90
TmV3QWR2YW5jZWRTZWFyY2goKQogICAgIGQtPnNlYXJjaFNpZGVCYXItPm5ld0FkdmFuY2VkU2Vh
cmNoKCk7CiB9CiAKLXZvaWQgRGlnaWthbVZpZXc6OnNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKEFs
YnVtKiBhbGJ1bSkKK3ZvaWQgRGlnaWthbVZpZXc6OnNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKFBB
bGJ1bSogYWxidW0pCiB7CiAgICAgc2xvdExlZnRTaWRlQmFyQWN0aXZhdGUoZC0+ZnV6enlTZWFy
Y2hTaWRlQmFyKTsKICAgICBkLT5mdXp6eVNlYXJjaFNpZGVCYXItPm5ld0R1cGxpY2F0ZXNTZWFy
Y2goYWxidW0pOwogfQogCit2b2lkIERpZ2lrYW1WaWV3OjpzbG90TmV3RHVwbGljYXRlc1NlYXJj
aChRTGlzdDxQQWxidW0qPiBhbGJ1bXMpCit7CisgICAgc2xvdExlZnRTaWRlQmFyQWN0aXZhdGUo
ZC0+ZnV6enlTZWFyY2hTaWRlQmFyKTsKKyAgICBkLT5mdXp6eVNlYXJjaFNpZGVCYXItPm5ld0R1
cGxpY2F0ZXNTZWFyY2goYWxidW1zKTsKK30KKwordm9pZCBEaWdpa2FtVmlldzo6c2xvdE5ld0R1
cGxpY2F0ZXNTZWFyY2goUUxpc3Q8VEFsYnVtKj4gYWxidW1zKQoreworICAgIHNsb3RMZWZ0U2lk
ZUJhckFjdGl2YXRlKGQtPmZ1enp5U2VhcmNoU2lkZUJhcik7CisgICAgZC0+ZnV6enlTZWFyY2hT
aWRlQmFyLT5uZXdEdXBsaWNhdGVzU2VhcmNoKGFsYnVtcyk7Cit9CisKIHZvaWQgRGlnaWthbVZp
ZXc6OnNsb3RBbGJ1bXNDbGVhcmVkKCkKIHsKICAgICBlbWl0IHNpZ25hbEFsYnVtU2VsZWN0ZWQo
MCk7CkBAIC0xOTgwLDI1ICsxOTkyLDkgQEAgdm9pZCBEaWdpa2FtVmlldzo6c2xvdFNvcnRJbWFn
ZXMoaW50IHNvcnRSb2xlKQogICAgIH0KIAogICAgIHNldHRpbmdzLT5zZXRJbWFnZVNvcnRPcmRl
cihzb3J0Um9sZSk7Ci0gICAgaWYgKHNvcnRSb2xlID09IEltYWdlU29ydFNldHRpbmdzOjpTb3J0
Um9sZTo6U29ydEJ5U2ltaWxhcml0eSkKLSAgICB7Ci0gICAgICAgIGQtPmljb25WaWV3LT5pbWFn
ZUZpbHRlck1vZGVsKCktPnNldFJlZmVyZW5jZUltYWdlSWQoc2V0dGluZ3MtPmdldEN1cnJlbnRG
dXp6eVNlYXJjaFJlZmVyZW5jZUltYWdlKCkpOwotICAgIH0KICAgICBkLT5pY29uVmlldy0+aW1h
Z2VGaWx0ZXJNb2RlbCgpLT5zZXRTb3J0Um9sZSgoSW1hZ2VTb3J0U2V0dGluZ3M6OlNvcnRSb2xl
KSBzb3J0Um9sZSk7CiB9CiAKLXZvaWQgRGlnaWthbVZpZXc6OnNsb3RVcGRhdGVGdXp6eVJlZmVy
ZW5jZUltYWdlKCkKLXsKLSAgICBBcHBsaWNhdGlvblNldHRpbmdzKiBjb25zdCBzZXR0aW5ncyA9
IEFwcGxpY2F0aW9uU2V0dGluZ3M6Omluc3RhbmNlKCk7Ci0KLSAgICBpZiAoIXNldHRpbmdzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQtPmljb25WaWV3LT5pbWFnZUZp
bHRlck1vZGVsKCktPnNldFJlZmVyZW5jZUltYWdlSWQoc2V0dGluZ3MtPmdldEN1cnJlbnRGdXp6
eVNlYXJjaFJlZmVyZW5jZUltYWdlKCkpOwotfQotCiB2b2lkIERpZ2lrYW1WaWV3OjpzbG90U29y
dEltYWdlc09yZGVyKGludCBvcmRlcikKIHsKICAgICBBcHBsaWNhdGlvblNldHRpbmdzKiBjb25z
dCBzZXR0aW5ncyA9IEFwcGxpY2F0aW9uU2V0dGluZ3M6Omluc3RhbmNlKCk7CkBAIC0yMTQ4LDEx
ICsyMTQ0LDYgQEAgdm9pZCBEaWdpa2FtVmlldzo6c2xvdFByZXNlbnRhdGlvbigpCiAgICAgbW5n
ci0+c2hvd0NvbmZpZ0RpYWxvZygpOwogfQogCi12b2lkIERpZ2lrYW1WaWV3OjpzbG90RnV6enlT
aWRlYmFyQWN0aXZlKGJvb2wgYWN0aXZlKQotewotICAgIGVtaXQgc2lnbmFsRnV6enlTaWRlYmFy
QWN0aXZlKGFjdGl2ZSk7Ci19Ci0KIHZvaWQgRGlnaWthbVZpZXc6OnNsaWRlU2hvdyhjb25zdCBJ
bWFnZUluZm9MaXN0JiBpbmZvTGlzdCkKIHsKICAgICBTbGlkZVNob3dCdWlsZGVyKiBjb25zdCBi
dWlsZGVyID0gbmV3IFNsaWRlU2hvd0J1aWxkZXIoaW5mb0xpc3QpOwpkaWZmIC0tZ2l0IGEvYXBw
L3ZpZXdzL2RpZ2lrYW12aWV3LmggYi9hcHAvdmlld3MvZGlnaWthbXZpZXcuaAppbmRleCAzY2M4
MDU1ODIwLi4zMzA5NDQ1NTUzIDEwMDY0NAotLS0gYS9hcHAvdmlld3MvZGlnaWthbXZpZXcuaAor
KysgYi9hcHAvdmlld3MvZGlnaWthbXZpZXcuaApAQCAtNDksNiArNDksOCBAQCBuYW1lc3BhY2Ug
RGlnaWthbQogY2xhc3MgQWxidW1JY29uSXRlbTsKIGNsYXNzIEFwcGxpY2F0aW9uU2V0dGluZ3M7
CiBjbGFzcyBBbGJ1bTsKK2NsYXNzIFBBbGJ1bTsKK2NsYXNzIFRBbGJ1bTsKIGNsYXNzIEJhdGNo
U3luY01ldGFkYXRhOwogY2xhc3MgRmlsdGVyU3RhdHVzQmFyOwogY2xhc3MgU2xpZGVTaG93U2V0
dGluZ3M7CkBAIC0xMjMsNyArMTI1LDYgQEAgUV9TSUdOQUxTOgogICAgIHZvaWQgc2lnbmFsR290
b1RhZ0FuZEl0ZW0oaW50IHRhZ0lEKTsKICAgICB2b2lkIHNpZ25hbENoYW5nZWRUYWIoUVdpZGdl
dCopOwogICAgIHZvaWQgc2lnbmFsRnV6enlTaWRlYmFyQWN0aXZlKGJvb2wgYWN0aXZlKTsKLSAg
ICB2b2lkIHNpZ25hbFJlZmVyZW5jZUltYWdlU2VsZWN0ZWQocWxvbmdsb25nIGltYWdlSWQpOwog
CiBwdWJsaWMgUV9TTE9UUzoKIApAQCAtMTQwLDggKzE0MSw2IEBAIHB1YmxpYyBRX1NMT1RTOgog
ICAgIHZvaWQgc2xvdFNsaWRlU2hvd01hbnVhbEZyb21DdXJyZW50KCk7CiAgICAgdm9pZCBzbG90
U2xpZGVTaG93TWFudWFsRnJvbShjb25zdCBJbWFnZUluZm8mIGluZm8pOwogICAgIHZvaWQgc2xv
dFByZXNlbnRhdGlvbigpOwotICAgIHZvaWQgc2xvdEZ1enp5U2lkZWJhckFjdGl2ZShib29sKTsK
LSAgICB2b2lkIHNsb3RVcGRhdGVGdXp6eVJlZmVyZW5jZUltYWdlKCk7CiAKICAgICAvLyBBbGJ1
bSBhY3Rpb24gc2xvdHMKICAgICB2b2lkIHNsb3RSZWZyZXNoKCk7CkBAIC0xNzQsNyArMTczLDkg
QEAgcHVibGljIFFfU0xPVFM6CiAgICAgLy8gU2VhcmNoIGFjdGlvbiBzbG90cwogICAgIHZvaWQg
c2xvdE5ld0tleXdvcmRTZWFyY2goKTsKICAgICB2b2lkIHNsb3ROZXdBZHZhbmNlZFNlYXJjaCgp
OwotICAgIHZvaWQgc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGFsYnVtPTApOworICAg
IHZvaWQgc2xvdE5ld0R1cGxpY2F0ZXNTZWFyY2goUEFsYnVtKiBhbGJ1bT0wKTsKKyAgICB2b2lk
IHNsb3ROZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFBBbGJ1bSo+IGFsYnVtcyk7CisgICAgdm9p
ZCBzbG90TmV3RHVwbGljYXRlc1NlYXJjaChRTGlzdDxUQWxidW0qPiBhbGJ1bXMpOwogCiAgICAg
Ly8gSW1hZ2UgYWN0aW9uIHNsb3RzCiAgICAgdm9pZCBzbG90SW1hZ2VMaWdodFRhYmxlKCk7CmRp
ZmYgLS1naXQgYS9hcHAvdmlld3MvbGVmdHNpZGViYXJ3aWRnZXRzLmNwcCBiL2FwcC92aWV3cy9s
ZWZ0c2lkZWJhcndpZGdldHMuY3BwCmluZGV4IDAzNjE1N2RjNjQuLjI5YTgxN2JmNGYgMTAwNjQ0
Ci0tLSBhL2FwcC92aWV3cy9sZWZ0c2lkZWJhcndpZGdldHMuY3BwCisrKyBiL2FwcC92aWV3cy9s
ZWZ0c2lkZWJhcndpZGdldHMuY3BwCkBAIC0xMTIsOCArMTEyLDggQEAgQWxidW1Gb2xkZXJWaWV3
U2lkZUJhcldpZGdldDo6QWxidW1Gb2xkZXJWaWV3U2lkZUJhcldpZGdldChRV2lkZ2V0KiBjb25z
dCBwYXJlbnQKICAgICBsYXlvdXQtPmFkZFdpZGdldChkLT5zZWFyY2hUZXh0QmFyKTsKIAogICAg
IC8vIHNldHVwIGNvbm5lY3Rpb24KLSAgICBjb25uZWN0KGQtPmFsYnVtRm9sZGVyVmlldywgU0lH
TkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzSW5BbGJ1bShBbGJ1bSopKSwKLSAgICAgICAgICAgIHRo
aXMsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oQWxidW0qKSkpOworICAgIGNv
bm5lY3QoZC0+YWxidW1Gb2xkZXJWaWV3LCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0ZXMoUEFs
YnVtKikpLAorICAgICAgICAgICAgdGhpcywgU0lHTkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzKFBB
bGJ1bSopKSk7CiB9CiAKIEFsYnVtRm9sZGVyVmlld1NpZGVCYXJXaWRnZXQ6On5BbGJ1bUZvbGRl
clZpZXdTaWRlQmFyV2lkZ2V0KCkKQEAgLTI1MCw4ICsyNTAsOCBAQCBUYWdWaWV3U2lkZUJhcldp
ZGdldDo6VGFnVmlld1NpZGVCYXJXaWRnZXQoUVdpZGdldCogY29uc3QgcGFyZW50LCBUYWdNb2Rl
bCogY29ucwogICAgIGNvbm5lY3QoZC0+b3BlblRhZ01uZ3IsIFNJR05BTChjbGlja2VkKCkpLAog
ICAgICAgICAgICAgdGhpcyxTTE9UKHNsb3RPcGVuVGFnTWFuYWdlcigpKSk7CiAKLSAgICBjb25u
ZWN0KGQtPnRhZ0ZvbGRlclZpZXcsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0o
QWxidW0qKSksCi0gICAgICAgICAgICB0aGlzLCBTSUdOQUwoc2lnbmFsRmluZER1cGxpY2F0ZXNJ
bkFsYnVtKEFsYnVtKikpKTsKKyAgICBjb25uZWN0KGQtPnRhZ0ZvbGRlclZpZXcsIFNJR05BTChz
aWduYWxGaW5kRHVwbGljYXRlcyhRTGlzdDxUQWxidW0qPikpLAorICAgICAgICAgICAgdGhpcywg
U0lHTkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzKFFMaXN0PFRBbGJ1bSo+KSkpOwogCiAgICAgY29u
bmVjdChkLT5idG5Hcm91cCwgU0lHTkFMKGJ1dHRvbkNsaWNrZWQoaW50KSksCiAgICAgICAgICAg
ICB0aGlzLCBTTE9UKHNsb3RUb2dnbGVUYWdzU2VsZWN0aW9uKGludCkpKTsKQEAgLTEyMDAsOSAr
MTIwMCw2IEBAIEZ1enp5U2VhcmNoU2lkZUJhcldpZGdldDo6RnV6enlTZWFyY2hTaWRlQmFyV2lk
Z2V0KFFXaWRnZXQqIGNvbnN0IHBhcmVudCwgU2VhcmNoCiAgICAgUVZCb3hMYXlvdXQqIGNvbnN0
IGxheW91dCA9IG5ldyBRVkJveExheW91dCh0aGlzKTsKIAogICAgIGxheW91dC0+YWRkV2lkZ2V0
KGQtPmZ1enp5U2VhcmNoVmlldyk7Ci0KLSAgICBjb25uZWN0KGQtPmZ1enp5U2VhcmNoVmlldywg
U0lHTkFMKHNpZ25hbFJlZmVyZW5jZUltYWdlU2VsZWN0ZWQoKSksCi0gICAgICAgIHRoaXMsIFNM
T1Qoc2xvdEltYWdlQ2hhbmdlZCgpKSk7CiB9CiAKIEZ1enp5U2VhcmNoU2lkZUJhcldpZGdldDo6
fkZ1enp5U2VhcmNoU2lkZUJhcldpZGdldCgpCkBAIC0xMjUxLDExICsxMjQ4LDIxIEBAIGNvbnN0
IFFTdHJpbmcgRnV6enlTZWFyY2hTaWRlQmFyV2lkZ2V0OjpnZXRDYXB0aW9uKCkKICAgICByZXR1
cm4gaTE4bmMoIkZ1enp5IFNlYXJjaCBpbWFnZXMsIGFzIGR1cHBsaWNhdGVzLCBza2V0Y2gsIHNp
bWlsYXJzIHNlYXJjaGVzIiwgIkZ1enp5Iik7CiB9CiAKLXZvaWQgRnV6enlTZWFyY2hTaWRlQmFy
V2lkZ2V0OjpuZXdEdXBsaWNhdGVzU2VhcmNoKEFsYnVtKiBhbGJ1bSkKK3ZvaWQgRnV6enlTZWFy
Y2hTaWRlQmFyV2lkZ2V0OjpuZXdEdXBsaWNhdGVzU2VhcmNoKFBBbGJ1bSogYWxidW0pCiB7CiAg
ICAgZC0+ZnV6enlTZWFyY2hWaWV3LT5uZXdEdXBsaWNhdGVzU2VhcmNoKGFsYnVtKTsKIH0KIAor
dm9pZCBGdXp6eVNlYXJjaFNpZGVCYXJXaWRnZXQ6Om5ld0R1cGxpY2F0ZXNTZWFyY2goUUxpc3Q8
UEFsYnVtKj4gYWxidW1zKQoreworICAgIGQtPmZ1enp5U2VhcmNoVmlldy0+bmV3RHVwbGljYXRl
c1NlYXJjaChhbGJ1bXMpOworfQorCit2b2lkIEZ1enp5U2VhcmNoU2lkZUJhcldpZGdldDo6bmV3
RHVwbGljYXRlc1NlYXJjaChRTGlzdDxUQWxidW0qPiBhbGJ1bXMpCit7CisgICAgZC0+ZnV6enlT
ZWFyY2hWaWV3LT5uZXdEdXBsaWNhdGVzU2VhcmNoKGFsYnVtcyk7Cit9CisKIHZvaWQgRnV6enlT
ZWFyY2hTaWRlQmFyV2lkZ2V0OjpuZXdTaW1pbGFyU2VhcmNoKGNvbnN0IEltYWdlSW5mbyYgaW1h
Z2VJbmZvKQogewogICAgIGlmIChpbWFnZUluZm8uaXNOdWxsKCkpCkBAIC0xMjY2LDExICsxMjcz
LDYgQEAgdm9pZCBGdXp6eVNlYXJjaFNpZGVCYXJXaWRnZXQ6Om5ld1NpbWlsYXJTZWFyY2goY29u
c3QgSW1hZ2VJbmZvJiBpbWFnZUluZm8pCiAgICAgZC0+ZnV6enlTZWFyY2hWaWV3LT5zZXRJbWFn
ZUluZm8oaW1hZ2VJbmZvKTsKIH0KIAotdm9pZCBGdXp6eVNlYXJjaFNpZGVCYXJXaWRnZXQ6OnNs
b3RJbWFnZUNoYW5nZWQoKQotewotICAgIGVtaXQgc2lnbmFsSW1hZ2VDaGFuZ2VkKCk7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZmRlZiBIQVZFX01BUkJMRQpAQCAtMTQxNCw4
ICsxNDE2LDggQEAgUGVvcGxlU2lkZUJhcldpZGdldDo6UGVvcGxlU2lkZUJhcldpZGdldChRV2lk
Z2V0KiBjb25zdCBwYXJlbnQsIFRhZ01vZGVsKiBjb25zdAogCiAgICAgc2V0TGF5b3V0KGxheW91
dCk7CiAKLSAgICBjb25uZWN0KGQtPnRhZ0ZvbGRlclZpZXcsIFNJR05BTChzaWduYWxGaW5kRHVw
bGljYXRlc0luQWxidW0oQWxidW0qKSksCi0gICAgICAgICAgICB0aGlzLCBTSUdOQUwoc2lnbmFs
RmluZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKikpKTsKKyAgICBjb25uZWN0KGQtPnRhZ0ZvbGRl
clZpZXcsIFNJR05BTChzaWduYWxGaW5kRHVwbGljYXRlcyhRTGlzdDxUQWxidW0qPikpLAorICAg
ICAgICAgICAgdGhpcywgU0lHTkFMKHNpZ25hbEZpbmREdXBsaWNhdGVzKFFMaXN0PFRBbGJ1bSo+
KSkpOwogCiAgICAgY29ubmVjdChkLT5yZXNjYW5CdXR0b24sIFNJR05BTChwcmVzc2VkKCkpLAog
ICAgICAgICAgICAgdGhpcywgU0xPVChzbG90U2NhbkZvckZhY2VzKCkpICk7CmRpZmYgLS1naXQg
YS9hcHAvdmlld3MvbGVmdHNpZGViYXJ3aWRnZXRzLmggYi9hcHAvdmlld3MvbGVmdHNpZGViYXJ3
aWRnZXRzLmgKaW5kZXggOGYzZmU1YzQxYS4uNzE5MTcwZTM2ZCAxMDA2NDQKLS0tIGEvYXBwL3Zp
ZXdzL2xlZnRzaWRlYmFyd2lkZ2V0cy5oCisrKyBiL2FwcC92aWV3cy9sZWZ0c2lkZWJhcndpZGdl
dHMuaApAQCAtODIsNyArODIsNyBAQCBwdWJsaWMgUV9TTE9UUzoKIAogUV9TSUdOQUxTOgogCi0g
ICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oQWxidW0qKTsKKyAgICB2b2lkIHNp
Z25hbEZpbmREdXBsaWNhdGVzKFBBbGJ1bSopOwogCiBwcml2YXRlOgogCkBAIC0xMjksNyArMTI5
LDcgQEAgcHVibGljIFFfU0xPVFM6CiAKIFFfU0lHTkFMUzoKIAotICAgIHZvaWQgc2lnbmFsRmlu
ZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKik7CisgICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRl
cyhRTGlzdDxUQWxidW0qPiBhbGJ1bXMpOwogCiBwdWJsaWM6CiAKQEAgLTMxMywxNiArMzEzLDE0
IEBAIHB1YmxpYzoKICAgICBjb25zdCBRSWNvbiBnZXRJY29uKCk7CiAgICAgY29uc3QgUVN0cmlu
ZyBnZXRDYXB0aW9uKCk7CiAKLSAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGFs
YnVtKTsKKyAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2goUEFsYnVtKiBhbGJ1bSk7CisgICAg
dm9pZCBuZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFBBbGJ1bSo+IGFsYnVtcyk7CisgICAgdm9p
ZCBuZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFRBbGJ1bSo+IGFsYnVtcyk7CiAgICAgdm9pZCBu
ZXdTaW1pbGFyU2VhcmNoKGNvbnN0IEltYWdlSW5mbyYgaW1hZ2VJbmZvKTsKIAotcHVibGljIFFf
U0xPVFM6Ci0gICAgdm9pZCBzbG90SW1hZ2VDaGFuZ2VkKCk7Ci0KIFFfU0lHTkFMUzoKIAogICAg
IHZvaWQgc2lnbmFsQWN0aXZlKGJvb2wpOwotICAgIHZvaWQgc2lnbmFsSW1hZ2VDaGFuZ2VkKCk7
CiAKIHByaXZhdGU6CiAKQEAgLTQwNCw3ICs0MDIsNyBAQCBRX1NJR05BTFM6CiAKICAgICB2b2lk
IHJlcXVlc3RGYWNlTW9kZShib29sIG9uKTsKIAotICAgIHZvaWQgc2lnbmFsRmluZER1cGxpY2F0
ZXNJbkFsYnVtKEFsYnVtKik7CisgICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRlcyhRTGlzdDxU
QWxidW0qPik7CiAKIHByaXZhdGU6CiAKZGlmZiAtLWdpdCBhL2FwcC92aWV3cy90YWJsZXZpZXcv
dGFibGV2aWV3X2NvbHVtbl9pdGVtLmNwcCBiL2FwcC92aWV3cy90YWJsZXZpZXcvdGFibGV2aWV3
X2NvbHVtbl9pdGVtLmNwcAppbmRleCA3N2ZiNjdmZTYwLi5kYmNhMDQ1MjEzIDEwMDY0NAotLS0g
YS9hcHAvdmlld3MvdGFibGV2aWV3L3RhYmxldmlld19jb2x1bW5faXRlbS5jcHAKKysrIGIvYXBw
L3ZpZXdzL3RhYmxldmlldy90YWJsZXZpZXdfY29sdW1uX2l0ZW0uY3BwCkBAIC02Myw3ICs2Myw4
IEBAIFFTdHJpbmdMaXN0IENvbHVtbkl0ZW1Qcm9wZXJ0aWVzOjpnZXRTdWJDb2x1bW5zKCkKICAg
ICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoImRpbWVuc2lvbnMiKSAgICAgICAgICAgPDwgUUxh
dGluMVN0cmluZygicGl4ZWxjb3VudCIpCiAgICAgICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCJi
aXRkZXB0aCIpICAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoImNvbG9ybW9kZSIpCiAgICAg
ICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCJpdGVtdHlwZSIpICAgICAgICAgICAgIDw8IFFMYXRp
bjFTdHJpbmcoIml0ZW1jcmVhdGlvbmRhdGV0aW1lIikKLSAgICAgICAgICAgIDw8IFFMYXRpbjFT
dHJpbmcoIml0ZW1kaWdpdGl6YXRpb250aW1lIikgPDwgUUxhdGluMVN0cmluZygiaXRlbWFzcGVj
dHJhdGlvIik7CisgICAgICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCJpdGVtZGlnaXRpemF0aW9u
dGltZSIpIDw8IFFMYXRpbjFTdHJpbmcoIml0ZW1hc3BlY3RyYXRpbyIpCisgICAgICAgICAgICA8
PCBRTGF0aW4xU3RyaW5nKCJzaW1pbGFyaXR5Iik7CiAKICAgICByZXR1cm4gY29sdW1uczsKIH0K
QEAgLTgzLDYgKzg0LDcgQEAgVGFibGVWaWV3Q29sdW1uRGVzY3JpcHRpb24gQ29sdW1uSXRlbVBy
b3BlcnRpZXM6OmdldERlc2NyaXB0aW9uKCkKICAgICBkZXNjcmlwdGlvbi5hZGRTdWJDb2x1bW4o
VGFibGVWaWV3Q29sdW1uRGVzY3JpcHRpb24oUUxhdGluMVN0cmluZygiaXRlbWNyZWF0aW9uZGF0
ZXRpbWUiKSwgaTE4bigiQ3JlYXRpb24gZGF0ZS90aW1lIikpKTsKICAgICBkZXNjcmlwdGlvbi5h
ZGRTdWJDb2x1bW4oVGFibGVWaWV3Q29sdW1uRGVzY3JpcHRpb24oUUxhdGluMVN0cmluZygiaXRl
bWRpZ2l0aXphdGlvbnRpbWUiKSwgaTE4bigiRGlnaXRpemF0aW9uIGRhdGUvdGltZSIpKSk7CiAg
ICAgZGVzY3JpcHRpb24uYWRkU3ViQ29sdW1uKFRhYmxlVmlld0NvbHVtbkRlc2NyaXB0aW9uKFFM
YXRpbjFTdHJpbmcoIml0ZW1hc3BlY3RyYXRpbyIpLCAgICAgIGkxOG4oIkFzcGVjdCByYXRpbyIp
KSk7CisgICAgZGVzY3JpcHRpb24uYWRkU3ViQ29sdW1uKFRhYmxlVmlld0NvbHVtbkRlc2NyaXB0
aW9uKFFMYXRpbjFTdHJpbmcoInNpbWlsYXJpdHkiKSwgICAgICAgICAgIGkxOG4oIlNpbWlsYXJp
dHkiKSkpOwogCiAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogfQpAQCAtMTExLDYgKzExMyw4IEBA
IFFTdHJpbmcgQ29sdW1uSXRlbVByb3BlcnRpZXM6OmdldFRpdGxlKCkgY29uc3QKICAgICAgICAg
ICAgIHJldHVybiBpMThuKCJEaWdpdGl6YXRpb24gZGF0ZS90aW1lIik7CiAgICAgICAgIGNhc2Ug
U3ViQ29sdW1uQXNwZWN0UmF0aW86CiAgICAgICAgICAgICByZXR1cm4gaTE4bigiQXNwZWN0IHJh
dGlvIik7CisgICAgICAgIGNhc2UgU3ViQ29sdW1uU2ltaWxhcml0eToKKyAgICAgICAgICAgIHJl
dHVybiBpMThuKCJTaW1pbGFyaXR5Iik7CiAgICAgfQogCiAgICAgcmV0dXJuIFFTdHJpbmcoKTsK
QEAgLTEyNyw3ICsxMzEsOCBAQCBUYWJsZVZpZXdDb2x1bW46OkNvbHVtbkZsYWdzIENvbHVtbkl0
ZW1Qcm9wZXJ0aWVzOjpnZXRDb2x1bW5GbGFncygpIGNvbnN0CiAgICAgICAgIChzdWJDb2x1bW4g
PT0gU3ViQ29sdW1uUGl4ZWxDb3VudCkgICAgICAgICAgICAgIHx8CiAgICAgICAgIChzdWJDb2x1
bW4gPT0gU3ViQ29sdW1uQ3JlYXRpb25EYXRlVGltZSkgICAgICAgIHx8CiAgICAgICAgIChzdWJD
b2x1bW4gPT0gU3ViQ29sdW1uRGlnaXRpemF0aW9uRGF0ZVRpbWUpICAgIHx8Ci0gICAgICAgIChz
dWJDb2x1bW4gPT0gU3ViQ29sdW1uQXNwZWN0UmF0aW8pICkKKyAgICAgICAgKHN1YkNvbHVtbiA9
PSBTdWJDb2x1bW5Bc3BlY3RSYXRpbykgICAgICAgICAgICAgfHwKKyAgICAgICAgKHN1YkNvbHVt
biA9PSBTdWJDb2x1bW5TaW1pbGFyaXR5KSApCiAgICAgewogICAgICAgICBmbGFncyB8PSBDb2x1
bW5DdXN0b21Tb3J0aW5nOwogICAgIH0KQEAgLTI0OSw2ICsyNTQsMTYgQEAgUVZhcmlhbnQgQ29s
dW1uSXRlbVByb3BlcnRpZXM6OmRhdGEoVGFibGVWaWV3TW9kZWw6Okl0ZW0qIGNvbnN0IGl0ZW0s
IGNvbnN0IGludAogCiAgICAgICAgICAgICByZXR1cm4gUUxvY2FsZSgpLnRvU3RyaW5nKGRpZ2l0
aXphdGlvbkRhdGVUaW1lLCBRTG9jYWxlOjpTaG9ydEZvcm1hdCk7CiAgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBTdWJDb2x1bW5TaW1pbGFyaXR5OgorICAgICAgICB7CisgICAgICAgICAgICBxbG9u
Z2xvbmcgcmVmZXJlbmNlSW1hZ2VJZCA9IGluZm8uY3VycmVudFJlZmVyZW5jZUltYWdlKCk7Cisg
ICAgICAgICAgICBkb3VibGUgc2ltaWxhcml0eSA9IGluZm8uY3VycmVudFNpbWlsYXJpdHkoKSAq
IDEwMDsKKyAgICAgICAgICAgIGlmIChyZWZlcmVuY2VJbWFnZUlkID09IGluZm8uaWQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzaW1pbGFyaXR5ID0gMTAxLjAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFFMb2NhbGUoKS50b1N0cmluZyhzaW1pbGFyaXR5
LCdmJywyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBRVmFyaWFudCgpOwpAQCAt
MzU1LDYgKzM3MCwyMyBAQCBUYWJsZVZpZXdDb2x1bW46OkNvbHVtbkNvbXBhcmVSZXN1bHQgQ29s
dW1uSXRlbVByb3BlcnRpZXM6OmNvbXBhcmUoVGFibGVWaWV3TW9kZQogCiAgICAgICAgICAgICBy
ZXR1cm4gY29tcGFyZUhlbHBlcjxRRGF0ZVRpbWU+KGR0QSwgZHRCKTsKICAgICAgICAgfQorICAg
ICAgICBjYXNlIFN1YkNvbHVtblNpbWlsYXJpdHk6CisgICAgICAgIHsKKyAgICAgICAgICAgIHFs
b25nbG9uZyByZWZlcmVuY2VJbWFnZUlkQSA9IGluZm9BLmN1cnJlbnRSZWZlcmVuY2VJbWFnZSgp
OworICAgICAgICAgICAgcWxvbmdsb25nIHJlZmVyZW5jZUltYWdlSWRCID0gaW5mb0IuY3VycmVu
dFJlZmVyZW5jZUltYWdlKCk7CisgICAgICAgICAgICBpZiAocmVmZXJlbmNlSW1hZ2VJZEEgPT0g
cmVmZXJlbmNlSW1hZ2VJZEIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIHRoYXQgdGhlIG9yaWdpbmFsIGltYWdlIGhhcyBhbHdheXMgdGhlIGhpZ2hlc3Qgc2lt
aWxhcml0eS4KKyAgICAgICAgICAgICAgICBkb3VibGUgaW5mb0FTaW1pbGFyaXR5ICA9IGluZm9B
LmlkKCkgPT0gcmVmZXJlbmNlSW1hZ2VJZEEgPyAxLjEgOiBpbmZvQS5jdXJyZW50U2ltaWxhcml0
eSgpOworICAgICAgICAgICAgICAgIGRvdWJsZSBpbmZvQlNpbWlsYXJpdHkgPSBpbmZvQi5pZCgp
ID09IHJlZmVyZW5jZUltYWdlSWRCID8gMS4xIDogaW5mb0IuY3VycmVudFNpbWlsYXJpdHkoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUhlbHBlcjxkb3VibGU+KGluZm9BU2ltaWxh
cml0eSwgaW5mb0JTaW1pbGFyaXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBxQ1dhcm5pbmcoRElHSUtBTV9HRU5FUkFM
X0xPRykgPDwgIml0ZW06IGl0ZW1zIGhhdmUgZGlmZmVyZW50IGZ1enp5IHNlYXJjaCByZWZlcmVu
Y2UgaW1hZ2VzLiBTb3J0aW5nIGlzIG5vdCBwb3NzaWJsZS4iOworICAgICAgICAgICAgICAgIHJl
dHVybiBDbXBFcXVhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2FwcC92aWV3cy90YWJsZXZpZXcvdGFibGV2aWV3
X2NvbHVtbl9pdGVtLmggYi9hcHAvdmlld3MvdGFibGV2aWV3L3RhYmxldmlld19jb2x1bW5faXRl
bS5oCmluZGV4IDMyOWM2MjViNzIuLjhlMWZlMDJlZmQgMTAwNjQ0Ci0tLSBhL2FwcC92aWV3cy90
YWJsZXZpZXcvdGFibGV2aWV3X2NvbHVtbl9pdGVtLmgKKysrIGIvYXBwL3ZpZXdzL3RhYmxldmll
dy90YWJsZXZpZXdfY29sdW1uX2l0ZW0uaApAQCAtNTQsNyArNTQsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIFN1YkNvbHVtblR5cGUgPSA2LAogICAgICAgICBTdWJDb2x1bW5DcmVhdGlvbkRhdGVUaW1l
ID0gNywKICAgICAgICAgU3ViQ29sdW1uRGlnaXRpemF0aW9uRGF0ZVRpbWUgPSA4LAotICAgICAg
ICBTdWJDb2x1bW5Bc3BlY3RSYXRpbyA9IDkKKyAgICAgICAgU3ViQ29sdW1uQXNwZWN0UmF0aW8g
PSA5LAorICAgICAgICBTdWJDb2x1bW5TaW1pbGFyaXR5ID0gMTAKICAgICB9OwogCiBwdWJsaWM6
CmRpZmYgLS1naXQgYS9saWJzL2FsYnVtL2FsYnVtc2VsZWN0aW9udHJlZXZpZXcuY3BwIGIvbGli
cy9hbGJ1bS9hbGJ1bXNlbGVjdGlvbnRyZWV2aWV3LmNwcAppbmRleCBlNjgwNzhhMDhhLi44NDIy
NzRhNDE3IDEwMDY0NAotLS0gYS9saWJzL2FsYnVtL2FsYnVtc2VsZWN0aW9udHJlZXZpZXcuY3Bw
CisrKyBiL2xpYnMvYWxidW0vYWxidW1zZWxlY3Rpb250cmVldmlldy5jcHAKQEAgLTIwMyw3ICsy
MDMsNyBAQCB2b2lkIEFsYnVtU2VsZWN0aW9uVHJlZVZpZXc6OnNldEVuYWJsZVRvb2xUaXBzKGJv
b2wgZW5hYmxlKQogCiB2b2lkIEFsYnVtU2VsZWN0aW9uVHJlZVZpZXc6OnNsb3RGaW5kRHVwbGlj
YXRlcygpCiB7Ci0gICAgZW1pdCBzaWduYWxGaW5kRHVwbGljYXRlc0luQWxidW0oZC0+YWxidW1N
b2RpZmljYXRpb25IZWxwZXItPmJvdW5kQWxidW0oc2VuZGVyKCkpKTsKKyAgICBlbWl0IHNpZ25h
bEZpbmREdXBsaWNhdGVzKGQtPmFsYnVtTW9kaWZpY2F0aW9uSGVscGVyLT5ib3VuZEFsYnVtKHNl
bmRlcigpKSk7CiB9CiAKIHZvaWQgQWxidW1TZWxlY3Rpb25UcmVlVmlldzo6c2xvdFJlYnVpbGRU
aHVtYnMoKQpkaWZmIC0tZ2l0IGEvbGlicy9hbGJ1bS9hbGJ1bXNlbGVjdGlvbnRyZWV2aWV3Lmgg
Yi9saWJzL2FsYnVtL2FsYnVtc2VsZWN0aW9udHJlZXZpZXcuaAppbmRleCBiZjI3NmZlOWIzLi41
ZjNjMTYyYzY2IDEwMDY0NAotLS0gYS9saWJzL2FsYnVtL2FsYnVtc2VsZWN0aW9udHJlZXZpZXcu
aAorKysgYi9saWJzL2FsYnVtL2FsYnVtc2VsZWN0aW9udHJlZXZpZXcuaApAQCAtNjcsNyArNjcs
NyBAQCBRX1NJR05BTFM6CiAgICAgICoKICAgICAgKiBAcGFyYW0gYWxidW0gdGhlIGFsYnVtIHRv
IGZpbmQgZHVwbGljYXRlcyBpbgogICAgICAqLwotICAgIHZvaWQgc2lnbmFsRmluZER1cGxpY2F0
ZXNJbkFsYnVtKEFsYnVtKiBhbGJ1bSk7CisgICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRlcyhQ
QWxidW0qIGFsYnVtKTsKIAogcHJpdmF0ZSBRX1NMT1RTOgogCmRpZmYgLS1naXQgYS9saWJzL2Fs
YnVtL2FsYnVtdHJlZXZpZXcuY3BwIGIvbGlicy9hbGJ1bS9hbGJ1bXRyZWV2aWV3LmNwcAppbmRl
eCA2MWFjZjI0YTU5Li4wOGZmZWExYzk2IDEwMDY0NAotLS0gYS9saWJzL2FsYnVtL2FsYnVtdHJl
ZXZpZXcuY3BwCisrKyBiL2xpYnMvYWxidW0vYWxidW10cmVldmlldy5jcHAKQEAgLTE2NDcsNiAr
MTY0NywxMSBAQCBRTGlzdDxBbGJ1bSo+IFRhZ1RyZWVWaWV3OjpzZWxlY3RlZFRhZ3MoKQogICAg
IHJldHVybiBzZWxlY3RlZEFsYnVtczxBbGJ1bT4oc2VsZWN0aW9uTW9kZWwoKSxtX2ZpbHRlcmVk
TW9kZWwpOwogfQogCitRTGlzdDxUQWxidW0qPiBUYWdUcmVlVmlldzo6c2VsZWN0ZWRUYWdBbGJ1
bXMoKQoreworICAgIHJldHVybiBzZWxlY3RlZEFsYnVtczxUQWxidW0+KHNlbGVjdGlvbk1vZGVs
KCksbV9maWx0ZXJlZE1vZGVsKTsKK30KKwogVEFsYnVtKiBUYWdUcmVlVmlldzo6YWxidW1Gb3JJ
bmRleChjb25zdCBRTW9kZWxJbmRleCYgaW5kZXgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGR5bmFt
aWNfY2FzdDxUQWxidW0qPiAobV9hbGJ1bUZpbHRlck1vZGVsLT5hbGJ1bUZvckluZGV4KGluZGV4
KSk7CmRpZmYgLS1naXQgYS9saWJzL2FsYnVtL2FsYnVtdHJlZXZpZXcuaCBiL2xpYnMvYWxidW0v
YWxidW10cmVldmlldy5oCmluZGV4IDI3NzAxNGVkYzkuLjk4NGFkMWFhYTkgMTAwNjQ0Ci0tLSBh
L2xpYnMvYWxidW0vYWxidW10cmVldmlldy5oCisrKyBiL2xpYnMvYWxidW0vYWxidW10cmVldmll
dy5oCkBAIC01NTEsOSArNTUxLDEwIEBAIHB1YmxpYzoKICAgICBUQWxidW0qIGN1cnJlbnRBbGJ1
bSgpIGNvbnN0OwogCiAgICAgLyoqCi0gICAgICogQGJyaWVmIHNlbGVjdGVkQWxidW1zIC0gcmV0
dXJuIGEgbGlzdCBvZiBhbGwgc2VsZWN0ZWQgaXRlbXMgaW4gdGFnIG1vZGVsCisgICAgICogQGJy
aWVmIHNlbGVjdGVkVGFncyAtIHJldHVybiBhIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIGl0ZW1zIGlu
IHRhZyBtb2RlbAogICAgICAqLwogICAgIFFMaXN0PEFsYnVtKj4gc2VsZWN0ZWRUYWdzKCk7Cisg
ICAgUUxpc3Q8VEFsYnVtKj4gc2VsZWN0ZWRUYWdBbGJ1bXMoKTsKIAogICAgIFRBbGJ1bSogYWxi
dW1Gb3JJbmRleChjb25zdCBRTW9kZWxJbmRleCYgaW5kZXgpIGNvbnN0OwogICAgIFRhZ01vZGlm
aWNhdGlvbkhlbHBlciogdGFnTW9kaWZpY2F0aW9uSGVscGVyKCkgIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvbGlicy9kYXRhYmFzZS9kYmpvYnMvZGJqb2IuY3BwIGIvbGlicy9kYXRhYmFzZS9kYmpvYnMv
ZGJqb2IuY3BwCmluZGV4IDFjNGZmNjY2MTQuLmFkMTY1MjcxNzYgMTAwNjQ0Ci0tLSBhL2xpYnMv
ZGF0YWJhc2UvZGJqb2JzL2Riam9iLmNwcAorKysgYi9saWJzL2RhdGFiYXNlL2Riam9icy9kYmpv
Yi5jcHAKQEAgLTI1OSw3ICsyNTksMTYgQEAgdm9pZCBTZWFyY2hlc0pvYjo6cnVuKCkKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBsaXN0ZXIubGlzdFNlYXJjaCgmcmVjZWl2ZXIsIGluZm8ucXVlcnkpOworICAgICAgICAgICAg
ICAgIGJvb2wgb2s7CisgICAgICAgICAgICAgICAgcWxvbmdsb25nIHJlZmVyZW5jZUltYWdlSWQg
PSBpbmZvLm5hbWUudG9Mb25nTG9uZygmb2spOworICAgICAgICAgICAgICAgIGlmIChvaykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxpc3Rlci5saXN0U2VhcmNoKCZy
ZWNlaXZlciwgaW5mby5xdWVyeSwgMCwgcmVmZXJlbmNlSW1hZ2VJZCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGxpc3Rlci5saXN0U2VhcmNoKCZyZWNlaXZlciwgaW5mby5xdWVyeSwgMCwgLTEp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFy
ZWNlaXZlci5oYXNFcnJvcikKZGlmZiAtLWdpdCBhL2xpYnMvZGF0YWJhc2UvaGFhci9oYWFyaWZh
Y2UuY3BwIGIvbGlicy9kYXRhYmFzZS9oYWFyL2hhYXJpZmFjZS5jcHAKaW5kZXggZWE0ZGQ5MGYz
MC4uMWZkNGMwZTI2NyAxMDA2NDQKLS0tIGEvbGlicy9kYXRhYmFzZS9oYWFyL2hhYXJpZmFjZS5j
cHAKKysrIGIvbGlicy9kYXRhYmFzZS9oYWFyL2hhYXJpZmFjZS5jcHAKQEAgLTQwOCw3ICs0MDgs
NyBAQCBRTGlzdDxxbG9uZ2xvbmc+IEhhYXJJZmFjZTo6YmVzdE1hdGNoZXNGb3JJbWFnZShjb25z
dCBRSW1hZ2UmIGltYWdlLCBpbnQgbnVtYmVyTwogICAgIEhhYXI6OlNpZ25hdHVyZURhdGEgc2ln
OwogICAgIGhhYXIuY2FsY0hhYXIoZC0+ZGF0YSwgJnNpZyk7CiAKLSAgICByZXR1cm4gYmVzdE1h
dGNoZXMoJnNpZywgbnVtYmVyT2ZSZXN1bHRzLCB0eXBlKTsKKyAgICByZXR1cm4gYmVzdE1hdGNo
ZXMoJnNpZywgbnVtYmVyT2ZSZXN1bHRzLCB0eXBlKS52YWx1ZXMoKTsKIH0KIAogUUxpc3Q8cWxv
bmdsb25nPiBIYWFySWZhY2U6OmJlc3RNYXRjaGVzRm9ySW1hZ2UocWxvbmdsb25nIGltYWdlaWQs
IGludCBudW1iZXJPZlJlc3VsdHMsIFNrZXRjaFR5cGUgdHlwZSkKQEAgLTQyMCwxNiArNDIwLDE2
IEBAIFFMaXN0PHFsb25nbG9uZz4gSGFhcklmYWNlOjpiZXN0TWF0Y2hlc0ZvckltYWdlKHFsb25n
bG9uZyBpbWFnZWlkLCBpbnQgbnVtYmVyT2ZSCiAgICAgICAgIHJldHVybiBRTGlzdDxxbG9uZ2xv
bmc+KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGJlc3RNYXRjaGVzKCZzaWcsIG51bWJlck9mUmVz
dWx0cywgdHlwZSk7CisgICAgcmV0dXJuIGJlc3RNYXRjaGVzKCZzaWcsIG51bWJlck9mUmVzdWx0
cywgdHlwZSkudmFsdWVzKCk7CiB9CiAKLVFQYWlyPGRvdWJsZSxRTGlzdDxxbG9uZ2xvbmc+PiBI
YWFySWZhY2U6OmJlc3RNYXRjaGVzRm9ySW1hZ2VXaXRoVGhyZXNob2xkKGNvbnN0IFFTdHJpbmcm
IGltYWdlUGF0aCwgZG91YmxlIHJlcXVpcmVkUGVyY2VudGFnZSwKK1FQYWlyPGRvdWJsZSxRTWFw
PHFsb25nbG9uZyxkb3VibGU+PiBIYWFySWZhY2U6OmJlc3RNYXRjaGVzRm9ySW1hZ2VXaXRoVGhy
ZXNob2xkKGNvbnN0IFFTdHJpbmcmIGltYWdlUGF0aCwgZG91YmxlIHJlcXVpcmVkUGVyY2VudGFn
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgbWF4aW11bVBlcmNlbnRhZ2UsIFNrZXRjaFR5cGUgdHlwZSkKIHsKICAg
ICBRSW1hZ2UgaW1hZ2UgPSBsb2FkUUltYWdlKGltYWdlUGF0aCk7CiAgICAgaWYgKGltYWdlLmlz
TnVsbCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFFQYWlyPGRvdWJsZSxRTGlzdDxxbG9uZ2xv
bmc+PigpOworICAgICAgICByZXR1cm4gUVBhaXI8ZG91YmxlLFFNYXA8cWxvbmdsb25nLGRvdWJs
ZT4+KCk7CiAgICAgfQogCiAgICAgZC0+Y3JlYXRlTG9hZGluZ0J1ZmZlcigpOwpAQCAtNDQwLDEx
ICs0NDAsMTUgQEAgUVBhaXI8ZG91YmxlLFFMaXN0PHFsb25nbG9uZz4+IEhhYXJJZmFjZTo6YmVz
dE1hdGNoZXNGb3JJbWFnZVdpdGhUaHJlc2hvbGQoY29uc3QKICAgICBIYWFyOjpTaWduYXR1cmVE
YXRhIHNpZzsKICAgICBoYWFyLmNhbGNIYWFyKGQtPmRhdGEsICZzaWcpOwogCi0gICAgLy8gQXBw
bHkgZHVwbGljYXRlcyBzZWFyY2ggZm9yIHRoZSBpbWFnZS4gVXNlIHRoZSBpbWFnZSBpZCAtMSB3
aGljaCBjYW5ub3QgYmUgcHJlc2VudC4KLSAgICByZXR1cm4gYmVzdE1hdGNoZXNXaXRoVGhyZXNo
b2xkKC0xLCAmc2lnLCByZXF1aXJlZFBlcmNlbnRhZ2UsIG1heGltdW1QZXJjZW50YWdlLCB0eXBl
KTsKKyAgICAvLyBSZW1vdmUgYWxsIHByZXZpb3VzIHNpbWlsYXJpdGllcyBmcm9tIHBpY3R1cmVz
CisgICAgQ29yZURiQWNjZXNzIGFjY2VzczsKKyAgICBhY2Nlc3MuZGIoKS0+cmVtb3ZlSW1hZ2VQ
cm9wZXJ0eUJ5TmFtZShRTGF0aW4xU3RyaW5nKCJzaW1pbGFyaXR5VG9fIikrUVN0cmluZzo6bnVt
YmVyKDApKTsKKworICAgIC8vIEFwcGx5IGR1cGxpY2F0ZXMgc2VhcmNoIGZvciB0aGUgaW1hZ2Uu
IFVzZSB0aGUgaW1hZ2UgaWQgMCB3aGljaCBjYW5ub3QgYmUgcHJlc2VudC4KKyAgICByZXR1cm4g
YmVzdE1hdGNoZXNXaXRoVGhyZXNob2xkKDAsICZzaWcsIHJlcXVpcmVkUGVyY2VudGFnZSwgbWF4
aW11bVBlcmNlbnRhZ2UsIHR5cGUpOwogfQogCi1RUGFpcjxkb3VibGUsUUxpc3Q8cWxvbmdsb25n
Pj4gSGFhcklmYWNlOjpiZXN0TWF0Y2hlc0ZvckltYWdlV2l0aFRocmVzaG9sZChxbG9uZ2xvbmcg
aW1hZ2VpZCwgZG91YmxlIHJlcXVpcmVkUGVyY2VudGFnZSwKK1FQYWlyPGRvdWJsZSxRTWFwPHFs
b25nbG9uZyxkb3VibGU+PiBIYWFySWZhY2U6OmJlc3RNYXRjaGVzRm9ySW1hZ2VXaXRoVGhyZXNo
b2xkKHFsb25nbG9uZyBpbWFnZWlkLCBkb3VibGUgcmVxdWlyZWRQZXJjZW50YWdlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBtYXhpbXVtUGVyY2VudGFnZSwgU2tldGNoVHlwZSB0eXBlKQogewogICAgIGlmICggIWQt
PnVzZVNpZ25hdHVyZUNhY2hlIHx8IChkLT5zaWduYXR1cmVDYWNoZS0+aXNFbXB0eSgpICYmIGQt
PnVzZVNpZ25hdHVyZUNhY2hlKSApCkBAIC00NTMsNyArNDU3LDcgQEAgUVBhaXI8ZG91YmxlLFFM
aXN0PHFsb25nbG9uZz4+IEhhYXJJZmFjZTo6YmVzdE1hdGNoZXNGb3JJbWFnZVdpdGhUaHJlc2hv
bGQocWxvbmcKIAogICAgICAgICBpZiAoIXJldHJpZXZlU2lnbmF0dXJlRnJvbURCKGltYWdlaWQs
ICZzaWcpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUVBhaXI8ZG91YmxlLFFMaXN0
PHFsb25nbG9uZz4+KCk7CisgICAgICAgICAgICByZXR1cm4gUVBhaXI8ZG91YmxlLFFNYXA8cWxv
bmdsb25nLGRvdWJsZT4+KCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gYmVzdE1hdGNo
ZXNXaXRoVGhyZXNob2xkKGltYWdlaWQsICZzaWcsIHJlcXVpcmVkUGVyY2VudGFnZSwgbWF4aW11
bVBlcmNlbnRhZ2UsIHR5cGUpOwpAQCAtNDc5LDcgKzQ4Myw3IEBAIFFMaXN0PHFsb25nbG9uZz4g
SGFhcklmYWNlOjpiZXN0TWF0Y2hlc0ZvckZpbGUoY29uc3QgUVN0cmluZyYgZmlsZW5hbWUsIGlu
dCBudW1iCiAgICAgcmV0dXJuIGJlc3RNYXRjaGVzRm9ySW1hZ2UoaW1hZ2UsIG51bWJlck9mUmVz
dWx0cywgdHlwZSk7CiB9CiAKLVFMaXN0PHFsb25nbG9uZz4gSGFhcklmYWNlOjpiZXN0TWF0Y2hl
c0ZvclNpZ25hdHVyZShjb25zdCBRU3RyaW5nJiBzaWduYXR1cmUsIGludCBudW1iZXJPZlJlc3Vs
dHMsIFNrZXRjaFR5cGUgdHlwZSkKK1FNYXA8cWxvbmdsb25nLGRvdWJsZT4gSGFhcklmYWNlOjpi
ZXN0TWF0Y2hlc0ZvclNpZ25hdHVyZShjb25zdCBRU3RyaW5nJiBzaWduYXR1cmUsIGludCBudW1i
ZXJPZlJlc3VsdHMsIFNrZXRjaFR5cGUgdHlwZSkKIHsKICAgICBRQnl0ZUFycmF5IGJ5dGVzID0g
UUJ5dGVBcnJheTo6ZnJvbUJhc2U2NChzaWduYXR1cmUudG9MYXRpbjEoKSk7CiAKQEAgLTQ4Nywx
MCArNDkxLDE4IEBAIFFMaXN0PHFsb25nbG9uZz4gSGFhcklmYWNlOjpiZXN0TWF0Y2hlc0ZvclNp
Z25hdHVyZShjb25zdCBRU3RyaW5nJiBzaWduYXR1cmUsIGluCiAgICAgSGFhcjo6U2lnbmF0dXJl
RGF0YSBzaWc7CiAgICAgYmxvYlJlYWRlci5yZWFkKGJ5dGVzLCAmc2lnKTsKIAotICAgIHJldHVy
biBiZXN0TWF0Y2hlcygmc2lnLCBudW1iZXJPZlJlc3VsdHMsIHR5cGUpOworICAgIC8vIEdldCBh
bGwgbWF0Y2hpbmcgaW1hZ2VzIHdpdGggdGhlaXIgc2NvcmUgYW5kIHNhdmUgdGhlaXIgc2ltaWxh
cml0eSB0byB0aGUgc2lnbmF0dXJlLCBpLmUuIGlkIC0yCisgICAgUU11bHRpTWFwPGRvdWJsZSxx
bG9uZ2xvbmc+IG1hdGNoZXMgPSBiZXN0TWF0Y2hlcygmc2lnLCBudW1iZXJPZlJlc3VsdHMsIHR5
cGUpOworICAgIFFNYXA8cWxvbmdsb25nLCBkb3VibGU+IHJlc3VsdDsKKyAgICBmb3IgKFFNdWx0
aU1hcDxkb3VibGUscWxvbmdsb25nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXRjaGVzLmNvbnN0
QmVnaW4oKTsgaXQgIT0gbWF0Y2hlcy5jb25zdEVuZCgpOyArK2l0KQorICAgIHsKKyAgICAgICAg
Ly8gQWRkIHRoZSBpbWFnZSBpZCBhbmQgdGhlIG5vcm1hbGlzZWQgc2NvcmUgKG1ha2Ugc3VyZSB0
aGF0IGl0IGlzIHBvc2l0aXZlIGFuZCBiZXR3ZWVuIDAgYW5kIDEuCisgICAgICAgIHJlc3VsdC5p
bnNlcnQoaXQudmFsdWUoKSwgKCAwLjAgLSAoIGl0LmtleSgpLzEwMCkgKSk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLVFMaXN0PHFsb25nbG9uZz4gSGFhcklmYWNlOjpiZXN0TWF0
Y2hlcyhIYWFyOjpTaWduYXR1cmVEYXRhKiBjb25zdCBxdWVyeVNpZywgaW50IG51bWJlck9mUmVz
dWx0cywgU2tldGNoVHlwZSB0eXBlKQorUU11bHRpTWFwPGRvdWJsZSwgcWxvbmdsb25nPiBIYWFy
SWZhY2U6OmJlc3RNYXRjaGVzKEhhYXI6OlNpZ25hdHVyZURhdGEqIGNvbnN0IHF1ZXJ5U2lnLCBp
bnQgbnVtYmVyT2ZSZXN1bHRzLCBTa2V0Y2hUeXBlIHR5cGUpCiB7CiAgICAgUU1hcDxxbG9uZ2xv
bmcsIGRvdWJsZT4gc2NvcmVzID0gc2VhcmNoRGF0YWJhc2UocXVlcnlTaWcsIHR5cGUpOwogCkBA
IC01NDQsMTAgKzU1NiwxMCBAQCBRTGlzdDxxbG9uZ2xvbmc+IEhhYXJJZmFjZTo6YmVzdE1hdGNo
ZXMoSGFhcjo6U2lnbmF0dXJlRGF0YSogY29uc3QgcXVlcnlTaWcsIGludAogICAgICAgICBxQ0Rl
YnVnKERJR0lLQU1fREFUQUJBU0VfTE9HKSA8PCBpdC5rZXkoKSA8PCBpdC52YWx1ZSgpOwogKi8K
IAotICAgIHJldHVybiBiZXN0TWF0Y2hlcy52YWx1ZXMoKTsKKyAgICByZXR1cm4gYmVzdE1hdGNo
ZXM7CiB9CiAKLVFQYWlyPGRvdWJsZSxRTGlzdDxxbG9uZ2xvbmc+PiBIYWFySWZhY2U6OmJlc3RN
YXRjaGVzV2l0aFRocmVzaG9sZChxbG9uZ2xvbmcgaW1hZ2VpZCxIYWFyOjpTaWduYXR1cmVEYXRh
KiBjb25zdCBxdWVyeVNpZywgZG91YmxlIHJlcXVpcmVkUGVyY2VudGFnZSwgZG91YmxlIG1heGlt
dW1QZXJjZW50YWdlLCBTa2V0Y2hUeXBlIHR5cGUpCitRUGFpcjxkb3VibGUsUU1hcDxxbG9uZ2xv
bmcsZG91YmxlPj4gSGFhcklmYWNlOjpiZXN0TWF0Y2hlc1dpdGhUaHJlc2hvbGQocWxvbmdsb25n
IGltYWdlaWQsSGFhcjo6U2lnbmF0dXJlRGF0YSogY29uc3QgcXVlcnlTaWcsIGRvdWJsZSByZXF1
aXJlZFBlcmNlbnRhZ2UsIGRvdWJsZSBtYXhpbXVtUGVyY2VudGFnZSwgU2tldGNoVHlwZSB0eXBl
KQogewogICAgIFFNYXA8cWxvbmdsb25nLCBkb3VibGU+IHNjb3JlcyA9IHNlYXJjaERhdGFiYXNl
KHF1ZXJ5U2lnLCB0eXBlKTsKICAgICBkb3VibGUgbG93ZXN0LCBoaWdoZXN0OwpAQCAtNTYxLDE1
ICs1NzMsMTIgQEAgUVBhaXI8ZG91YmxlLFFMaXN0PHFsb25nbG9uZz4+IEhhYXJJZmFjZTo6YmVz
dE1hdGNoZXNXaXRoVGhyZXNob2xkKHFsb25nbG9uZyBpbWEKICAgICAvLyBleGFtcGxlOiAwLjIg
KyAoMC4zICogMC4zKSA9IDAuMiArIDAuMDkgPSAwLjI5CiAgICAgZG91YmxlIHJlcXVpcmVkU2Nv
cmUgICA9IGxvd2VzdCArIHNjb3JlUmFuZ2UgKiBwZXJjZW50YWdlUmFuZ2U7CiAKLSAgICBRTXVs
dGlNYXA8ZG91YmxlLCBxbG9uZ2xvbmc+IGJlc3RNYXRjaGVzOworICAgIFFNYXA8cWxvbmdsb25n
LCBkb3VibGU+IGJlc3RNYXRjaGVzOwogICAgIGRvdWJsZSBzY29yZSwgcGVyY2VudGFnZSwgYXZn
UGVyY2VudGFnZSA9IDAuMDsKLSAgICBRUGFpcjxkb3VibGUsUUxpc3Q8cWxvbmdsb25nPj4gcmVz
dWx0OworICAgIFFQYWlyPGRvdWJsZSxRTWFwPHFsb25nbG9uZyxkb3VibGU+PiByZXN1bHQ7CiAg
ICAgcWxvbmdsb25nICAgICAgICAgaWQ7CiAgICAgQ29yZURiQWNjZXNzICAgICAgYWNjZXNzOwog
Ci0gICAgLy8gUmVtb3ZlIGFsbCBpbWFnZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdyBhIHNpbWlsYXJp
dHkgdG8gdGhlIHNwZWNpZmllZCBpbWFnZSBpZC4KLSAgICBhY2Nlc3MuZGIoKS0+cmVtb3ZlSW1h
Z2VQcm9wZXJ0eUJ5TmFtZShRTGF0aW4xU3RyaW5nKCJzaW1pbGFyaXR5VG9fIikrUVN0cmluZzo6
bnVtYmVyKGltYWdlaWQpKTsKLQogICAgIGZvciAoUU1hcDxxbG9uZ2xvbmcsIGRvdWJsZT46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc2NvcmVzLmNvbnN0QmVnaW4oKTsgaXQgIT0gc2NvcmVzLmNvbnN0
RW5kKCk7ICsraXQpCiAgICAgewogICAgICAgICBzY29yZSA9IGl0LnZhbHVlKCk7CkBAIC01ODEs
MTIgKzU5MCwxNiBAQCBRUGFpcjxkb3VibGUsUUxpc3Q8cWxvbmdsb25nPj4gSGFhcklmYWNlOjpi
ZXN0TWF0Y2hlc1dpdGhUaHJlc2hvbGQocWxvbmdsb25nIGltYQogICAgICAgICAgICAgLy8gSWYg
dGhlIGZvdW5kIGltYWdlIGlzIHRoZSBvcmlnaW5hbCBvbmUgKGNoZWNrIGJ5IGlkKSBvciB0aGUg
cGVyY2VudGFnZSBpcyBiZWxvdyB0aGUgbWF4aW11bS4KICAgICAgICAgICAgIGlmICgoaWQgPT0g
aW1hZ2VpZCkgfHwgKHBlcmNlbnRhZ2UgPD0gbWF4aW11bVBlcmNlbnRhZ2UpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJlc3RNYXRjaGVzLmluc2VydChwZXJjZW50YWdlLCBpZCk7
CisgICAgICAgICAgICAgICAgYmVzdE1hdGNoZXMuaW5zZXJ0KGlkLCBwZXJjZW50YWdlKTsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBpbWFnZSBpcyBub3QgdGhlIG9yaWdpbmFs
LCB1c2UgdGhlIGltYWdlcyBzaW1pbGFyaXR5IGZvciB0aGUgYXZlcmFnZSBwZXJjZW50YWdlCiAg
ICAgICAgICAgICAgICAgLy8gQWxzbywgc2F2ZSB0aGUgc2ltaWxhcml0eSBvZiB0aGUgZm91bmQg
aW1hZ2UgdG8gdGhlIG9yaWdpbmFsIGltYWdlLgogICAgICAgICAgICAgICAgIGlmIChpZCAhPSBp
bWFnZWlkKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLmRi
KCktPnNldEltYWdlUHJvcGVydHkoaWQsUUxhdGluMVN0cmluZygic2ltaWxhcml0eVRvXyIpK1FT
dHJpbmc6Om51bWJlcihpbWFnZWlkKSxRU3RyaW5nOjpudW1iZXIocGVyY2VudGFnZSkpOworICAg
ICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgc2ltaWxhcml0eSBpZiB0aGUgcmVmZXJlbmNl
IGltYWdlIGhhcyBhIHZhbGlkIGltYWdlIGlkCisgICAgICAgICAgICAgICAgICAgIGlmIChpbWFn
ZWlkID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLmRiKCktPnNldEltYWdlUHJvcGVydHkoaWQsUUxhdGluMVN0cmluZygic2ltaWxhcml0
eVRvXyIpK1FTdHJpbmc6Om51bWJlcihpbWFnZWlkKSxRU3RyaW5nOjpudW1iZXIocGVyY2VudGFn
ZSkpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGF2Z1BlcmNl
bnRhZ2UgKz0gcGVyY2VudGFnZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC02MDMsMTMgKzYxNiwxMyBAQCBRUGFpcjxkb3VibGUsUUxpc3Q8cWxvbmdsb25nPj4gSGFhcklm
YWNlOjpiZXN0TWF0Y2hlc1dpdGhUaHJlc2hvbGQocWxvbmdsb25nIGltYQogCiAgICAgICAgIHFD
RGVidWcoRElHSUtBTV9EQVRBQkFTRV9MT0cpIDw8ICJEdXBsaWNhdGVzIHdpdGggaWQgYW5kIHNj
b3JlOiI7CiAKLSAgICAgICAgZm9yIChRTXVsdGlNYXA8ZG91YmxlLCBxbG9uZ2xvbmc+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGJlc3RNYXRjaGVzLmNvbnN0QmVnaW4oKTsgaXQgIT0gYmVzdE1hdGNo
ZXMuY29uc3RFbmQoKTsgKytpdCkKKyAgICAgICAgZm9yIChRTWFwPHFsb25nbG9uZywgZG91Ymxl
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBiZXN0TWF0Y2hlcy5jb25zdEJlZ2luKCk7IGl0ICE9IGJl
c3RNYXRjaGVzLmNvbnN0RW5kKCk7ICsraXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHFDRGVi
dWcoRElHSUtBTV9EQVRBQkFTRV9MT0cpIDw8IGl0LnZhbHVlKCkgPDwgUVN0cmluZzo6bnVtYmVy
KGl0LmtleSgpICogMTAwKSArIFFMYXRpbjFDaGFyKCclJyk7CisgICAgICAgICAgICBxQ0RlYnVn
KERJR0lLQU1fREFUQUJBU0VfTE9HKSA8PCBpdC5rZXkoKSA8PCBRU3RyaW5nOjpudW1iZXIoaXQu
dmFsdWUoKSAqIDEwMCkgKyBRTGF0aW4xQ2hhcignJScpOwogICAgICAgICB9CiAgICAgfQogICAg
IHJlc3VsdC5maXJzdCA9IGF2Z1BlcmNlbnRhZ2U7Ci0gICAgcmVzdWx0LnNlY29uZCA9IGJlc3RN
YXRjaGVzLnZhbHVlcygpOworICAgIHJlc3VsdC5zZWNvbmQgPSBiZXN0TWF0Y2hlczsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC05MTksNyArOTMyLDggQEAgUU1hcDwgZG91YmxlLFFNYXA8
IHFsb25nbG9uZyxRTGlzdDxxbG9uZ2xvbmc+ID4gPiBIYWFySWZhY2U6OmZpbmREdXBsaWNhdGVz
KGNvbnMKICAgICBRTWFwPGRvdWJsZSxRTWFwPHFsb25nbG9uZyxRTGlzdDxxbG9uZ2xvbmc+Pj4g
cmVzdWx0c01hcDsKICAgICBRTWFwPGRvdWJsZSxRTWFwPHFsb25nbG9uZyxRTGlzdDxxbG9uZ2xv
bmc+Pj46Oml0ZXJhdG9yIHNpbWlsYXJpdHlfaXQ7CiAgICAgUVNldDxxbG9uZ2xvbmc+Ojpjb25z
dF9pdGVyYXRvciAgICAgaXQ7Ci0gICAgUVBhaXI8ZG91YmxlLFFMaXN0PHFsb25nbG9uZz4+ICAg
ICAgYmVzdE1hdGNoZXM7CisgICAgUVBhaXI8ZG91YmxlLFFNYXA8cWxvbmdsb25nLGRvdWJsZT4+
ICAgICAgYmVzdE1hdGNoZXM7CisgICAgUUxpc3Q8cWxvbmdsb25nPiAgICAgICAgICAgICAgICAg
ICAgaW1hZ2VJZExpc3Q7CiAgICAgUVNldDxxbG9uZ2xvbmc+ICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0c0NhbmRpZGF0ZXM7CiAKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b3RhbCAgICAgICAgPSAwOwpAQCAtOTQyLDI3ICs5NTYsMjggQEAgUU1hcDwgZG91Ymxl
LFFNYXA8IHFsb25nbG9uZyxRTGlzdDxxbG9uZ2xvbmc+ID4gPiBIYWFySWZhY2U6OmZpbmREdXBs
aWNhdGVzKGNvbnMKICAgICAgICAgewogICAgICAgICAgICAgLy8gZmluZCBpbWFnZXMgd2l0aCBy
ZXF1aXJlZCBzaW1pbGFyaXR5CiAgICAgICAgICAgICBiZXN0TWF0Y2hlcyA9IGJlc3RNYXRjaGVz
Rm9ySW1hZ2VXaXRoVGhyZXNob2xkKCppdCwgcmVxdWlyZWRQZXJjZW50YWdlLCBtYXhpbXVtUGVy
Y2VudGFnZSwgU2Nhbm5lZFNrZXRjaCk7Ci0KLSAgICAgICAgICAgIGlmICghYmVzdE1hdGNoZXMu
c2Vjb25kLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgb25seSB0aGUgaW1hZ2Ug
aWRzIGZyb20gdGhlIGJlc3QgbWF0Y2hlcyBtYXAuCisgICAgICAgICAgICBpbWFnZUlkTGlzdCA9
IGJlc3RNYXRjaGVzLnNlY29uZC5rZXlzKCk7CisgICAgICAgICAgICBpZiAoIWltYWdlSWRMaXN0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyB0aGUgbGlzdCB3
aWxsIHVzdWFsbHkgY29udGFpbiBvbmUgaW1hZ2U6IHRoZSBvcmlnaW5hbC4gRmlsdGVyIG91dC4K
LSAgICAgICAgICAgICAgICBpZiAoIShiZXN0TWF0Y2hlcy5zZWNvbmQuY291bnQoKSA9PSAxICYm
IGJlc3RNYXRjaGVzLnNlY29uZC5maXJzdCgpID09ICppdCkpCisgICAgICAgICAgICAgICAgaWYg
KCEoaW1hZ2VJZExpc3QuY291bnQoKSA9PSAxICYmIGltYWdlSWRMaXN0LmZpcnN0KCkgPT0gKml0
KSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgYSBsb29r
dXAgZm9yIHRoZSBhdmVyYWdlIHNpbWlsYXJpdHkKICAgICAgICAgICAgICAgICAgICAgc2ltaWxh
cml0eV9pdCA9IHJlc3VsdHNNYXAuZmluZChiZXN0TWF0Y2hlcy5maXJzdCk7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGVudHJ5IGZvciB0aGlzIHNpbWlsYXJpdHksIGFk
ZCB0aGUgcmVzdWx0IHNldC4gRWxzZSwgY3JlYXRlIGEgbmV3IHNpbWlsYXJpdHkgZW50cnkuCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzaW1pbGFyaXR5X2l0ICE9IHJlc3VsdHNNYXAuZW5kKCkp
CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbWlsYXJp
dHlfaXQtPmluc2VydCgqaXQsYmVzdE1hdGNoZXMuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNpbWlsYXJpdHlfaXQtPmluc2VydCgqaXQsaW1hZ2VJZExpc3QpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgUU1hcDxxbG9uZ2xvbmcsUUxpc3Q8cWxvbmds
b25nPj4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydCgqaXQs
IGJlc3RNYXRjaGVzLnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5z
ZXJ0KCppdCwgaW1hZ2VJZExpc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c01h
cC5pbnNlcnQoYmVzdE1hdGNoZXMuZmlyc3QscmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICByZXN1bHRzQ2FuZGlkYXRlcyA8PCAqaXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdHNDYW5kaWRhdGVzLnVuaXRlKGJlc3RNYXRjaGVzLnNlY29uZC50
b1NldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c0NhbmRpZGF0ZXMudW5pdGUoaW1h
Z2VJZExpc3QudG9TZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9saWJzL2RhdGFiYXNlL2hhYXIvaGFhcmlmYWNlLmggYi9saWJz
L2RhdGFiYXNlL2hhYXIvaGFhcmlmYWNlLmgKaW5kZXggMjRjNzUyZDhlNi4uYzMzMThmZjVlNCAx
MDA2NDQKLS0tIGEvbGlicy9kYXRhYmFzZS9oYWFyL2hhYXJpZmFjZS5oCisrKyBiL2xpYnMvZGF0
YWJhc2UvaGFhci9oYWFyaWZhY2UuaApAQCAtOTEsMjAgKzkxLDIwIEBAIHB1YmxpYzoKICAgICBR
TGlzdDxxbG9uZ2xvbmc+IGJlc3RNYXRjaGVzRm9ySW1hZ2UocWxvbmdsb25nIGltYWdlaWQsIGlu
dCBudW1iZXJPZlJlc3VsdHM9MjAsIFNrZXRjaFR5cGUgdHlwZT1TY2FubmVkU2tldGNoKTsKICAg
ICBRTGlzdDxxbG9uZ2xvbmc+IGJlc3RNYXRjaGVzRm9ySW1hZ2UoY29uc3QgUUltYWdlJiBpbWFn
ZSwgaW50IG51bWJlck9mUmVzdWx0cz0yMCwgU2tldGNoVHlwZSB0eXBlPVNjYW5uZWRTa2V0Y2gp
OwogICAgIFFMaXN0PHFsb25nbG9uZz4gYmVzdE1hdGNoZXNGb3JGaWxlKGNvbnN0IFFTdHJpbmcm
IGZpbGVuYW1lLCBpbnQgbnVtYmVyT2ZSZXN1bHRzPTIwLCBTa2V0Y2hUeXBlIHR5cGU9U2Nhbm5l
ZFNrZXRjaCk7Ci0gICAgUUxpc3Q8cWxvbmdsb25nPiBiZXN0TWF0Y2hlc0ZvclNpZ25hdHVyZShj
b25zdCBRU3RyaW5nJiBzaWduYXR1cmUsIGludCBudW1iZXJPZlJlc3VsdHM9MjAsIFNrZXRjaFR5
cGUgdHlwZT1TY2FubmVkU2tldGNoKTsKKyAgICBRTWFwPHFsb25nbG9uZyxkb3VibGU+IGJlc3RN
YXRjaGVzRm9yU2lnbmF0dXJlKGNvbnN0IFFTdHJpbmcmIHNpZ25hdHVyZSwgaW50IG51bWJlck9m
UmVzdWx0cz0yMCwgU2tldGNoVHlwZSB0eXBlPVNjYW5uZWRTa2V0Y2gpOwogCiAgICAgLyoqIFNl
YXJjaGVzIHRoZSBkYXRhYmFzZSBmb3IgdGhlIGJlc3QgbWF0Y2hlcyBmb3IgdGhlIHNwZWNpZmll
ZCBxdWVyeSBpbWFnZS4KICAgICAgKiAgQWxsIG1hdGNoZXMgd2l0aCBhIHNpbWlsYXJpdHkgaW4g
YSBnaXZlbiB0aHJlc2hvbGQgaW50ZXJ2YWwgYXJlIHJldHVybmVkLgogICAgICAqICBUaGUgdGhy
ZXNob2xkIGlzIGluIHRoZSByYW5nZSByZXF1aXJlZFBlcmNlbnRhZ2UuLm1heGltdW1QZXJjZW50
YWdlLgogICAgICAqLwotICAgIFFQYWlyPGRvdWJsZSxRTGlzdDxxbG9uZ2xvbmc+PiBiZXN0TWF0
Y2hlc0ZvckltYWdlV2l0aFRocmVzaG9sZChxbG9uZ2xvbmcgaW1hZ2VpZCwKKyAgICBRUGFpcjxk
b3VibGUsUU1hcDxxbG9uZ2xvbmcsZG91YmxlPj4gYmVzdE1hdGNoZXNGb3JJbWFnZVdpdGhUaHJl
c2hvbGQocWxvbmdsb25nIGltYWdlaWQsCiAgICAgICAgICAgICBkb3VibGUgcmVxdWlyZWRQZXJj
ZW50YWdlLCBkb3VibGUgbWF4aW11bVBlcmNlbnRhZ2UsIFNrZXRjaFR5cGUgdHlwZT1TY2FubmVk
U2tldGNoKTsKIAogICAgIC8qKiBTZWFyY2hlcyB0aGUgZGF0YWJhc2UgZm9yIHRoZSBiZXN0IG1h
dGNoZXMgZm9yIHRoZSBzcGVjaWZpZWQgcXVlcnkgaW1hZ2UuCiAgICAgICogIEFsbCBtYXRjaGVz
IHdpdGggYSBzaW1pbGFyaXR5IGluIGEgZ2l2ZW4gdGhyZXNob2xkIGludGVydmFsIGFyZSByZXR1
cm5lZC4KICAgICAgKiAgVGhlIHRocmVzaG9sZCBpcyBpbiB0aGUgcmFuZ2UgcmVxdWlyZWRQZXJj
ZW50YWdlLi5tYXhpbXVtUGVyY2VudGFnZS4KICAgICAgKi8KLSAgICBRUGFpcjxkb3VibGUsUUxp
c3Q8cWxvbmdsb25nPj4gYmVzdE1hdGNoZXNGb3JJbWFnZVdpdGhUaHJlc2hvbGQoY29uc3QgUVN0
cmluZyYgaW1hZ2VQYXRoLAorICAgIFFQYWlyPGRvdWJsZSxRTWFwPHFsb25nbG9uZyxkb3VibGU+
PiBiZXN0TWF0Y2hlc0ZvckltYWdlV2l0aFRocmVzaG9sZChjb25zdCBRU3RyaW5nJiBpbWFnZVBh
dGgsCiAgICAgICAgICAgICBkb3VibGUgcmVxdWlyZWRQZXJjZW50YWdlLCBkb3VibGUgbWF4aW11
bVBlcmNlbnRhZ2UsIFNrZXRjaFR5cGUgdHlwZT1TY2FubmVkU2tldGNoKTsKIAogICAgIC8qKiBD
YWxjdWxhdGVzIHRoZSBIYWFyIHNpZ25hdHVyZSwgYnJpbmcgaXQgaW4gYSBmb3JtIGFzIHN0b3Jl
ZCBpbiB0aGUgREIsCkBAIC0xODEsOCArMTgxLDggQEAgcHJpdmF0ZToKICAgICAgKi8KICAgICBR
TWFwPFFTdHJpbmcsIFFTdHJpbmc+IHdyaXRlU0FsYnVtUXVlcmllcyhRTWFwPCBkb3VibGUsUU1h
cDwgcWxvbmdsb25nLFFMaXN0PHFsb25nbG9uZz4gPiA+IHNlYXJjaFJlc3VsdHMpOwogCi0gICAg
UUxpc3Q8cWxvbmdsb25nPiBiZXN0TWF0Y2hlcyhIYWFyOjpTaWduYXR1cmVEYXRhKiBjb25zdCBk
YXRhLCBpbnQgbnVtYmVyT2ZSZXN1bHRzLCBTa2V0Y2hUeXBlIHR5cGUpOwotICAgIFFQYWlyPGRv
dWJsZSxRTGlzdDxxbG9uZ2xvbmc+PiBiZXN0TWF0Y2hlc1dpdGhUaHJlc2hvbGQocWxvbmdsb25n
IGltYWdlaWQsSGFhcjo6U2lnbmF0dXJlRGF0YSogY29uc3QgcXVlcnlTaWcsCisgICAgUU11bHRp
TWFwPGRvdWJsZSwgcWxvbmdsb25nPiBiZXN0TWF0Y2hlcyhIYWFyOjpTaWduYXR1cmVEYXRhKiBj
b25zdCBkYXRhLCBpbnQgbnVtYmVyT2ZSZXN1bHRzLCBTa2V0Y2hUeXBlIHR5cGUpOworICAgIFFQ
YWlyPGRvdWJsZSxRTWFwPHFsb25nbG9uZyxkb3VibGU+PiBiZXN0TWF0Y2hlc1dpdGhUaHJlc2hv
bGQocWxvbmdsb25nIGltYWdlaWQsSGFhcjo6U2lnbmF0dXJlRGF0YSogY29uc3QgcXVlcnlTaWcs
CiAgICAgICAgICAgICBkb3VibGUgcmVxdWlyZWRQZXJjZW50YWdlLCBkb3VibGUgbWF4aW11bVBl
cmNlbnRhZ2UsIFNrZXRjaFR5cGUgdHlwZSk7CiAKICAgICBRTWFwPHFsb25nbG9uZywgZG91Ymxl
PiBzZWFyY2hEYXRhYmFzZShIYWFyOjpTaWduYXR1cmVEYXRhKiBjb25zdCBkYXRhLCBTa2V0Y2hU
eXBlIHR5cGUpOwpkaWZmIC0tZ2l0IGEvbGlicy9kYXRhYmFzZS9pdGVtL2ltYWdlaW5mby5jcHAg
Yi9saWJzL2RhdGFiYXNlL2l0ZW0vaW1hZ2VpbmZvLmNwcAppbmRleCA2YzBjM2Y2OTYyLi44ZDJi
NjhjM2M2IDEwMDY0NAotLS0gYS9saWJzL2RhdGFiYXNlL2l0ZW0vaW1hZ2VpbmZvLmNwcAorKysg
Yi9saWJzL2RhdGFiYXNlL2l0ZW0vaW1hZ2VpbmZvLmNwcApAQCAtMTg3LDYgKzE4Nyw3IEBAIElt
YWdlSW5mb0NhY2hlKiBJbWFnZUluZm9TdGF0aWM6OmNhY2hlKCkKIEltYWdlSW5mb0RhdGE6Oklt
YWdlSW5mb0RhdGEoKQogewogICAgIGlkICAgICAgICAgICAgICAgICAgICAgPSAtMTsKKyAgICBj
dXJyZW50UmVmZXJlbmNlSW1hZ2UgID0gLTE7CiAgICAgYWxidW1JZCAgICAgICAgICAgICAgICA9
IC0xOwogICAgIGFsYnVtUm9vdElkICAgICAgICAgICAgPSAtMTsKIApAQCAtMTk5LDYgKzIwMCw3
IEBAIEltYWdlSW5mb0RhdGE6OkltYWdlSW5mb0RhdGEoKQogICAgIGxvbmdpdHVkZSAgICAgICAg
ICAgICAgPSAwOwogICAgIGxhdGl0dWRlICAgICAgICAgICAgICAgPSAwOwogICAgIGFsdGl0dWRl
ICAgICAgICAgICAgICAgPSAwOworICAgIGN1cnJlbnRTaW1pbGFyaXR5ICAgICAgPSAwLjA7CiAK
ICAgICBoYXNDb29yZGluYXRlcyAgICAgICAgID0gZmFsc2U7CiAgICAgaGFzQWx0aXR1ZGUgICAg
ICAgICAgICA9IGZhbHNlOwpAQCAtMjU5LDYgKzI2MSw4IEBAIEltYWdlSW5mbzo6SW1hZ2VJbmZv
KGNvbnN0IEltYWdlTGlzdGVyUmVjb3JkJiByZWNvcmQpCiAgICAgbV9kYXRhLT5tb2RpZmljYXRp
b25EYXRlICAgICAgID0gcmVjb3JkLm1vZGlmaWNhdGlvbkRhdGU7CiAgICAgbV9kYXRhLT5maWxl
U2l6ZSAgICAgICAgICAgICAgID0gcmVjb3JkLmZpbGVTaXplOwogICAgIG1fZGF0YS0+aW1hZ2VT
aXplICAgICAgICAgICAgICA9IHJlY29yZC5pbWFnZVNpemU7CisgICAgbV9kYXRhLT5jdXJyZW50
U2ltaWxhcml0eSAgICAgID0gcmVjb3JkLmN1cnJlbnRTaW1pbGFyaXR5OworICAgIG1fZGF0YS0+
Y3VycmVudFJlZmVyZW5jZUltYWdlICA9IHJlY29yZC5jdXJyZW50RnV6enlTZWFyY2hSZWZlcmVu
Y2VJbWFnZTsKIAogICAgIG1fZGF0YS0+cmF0aW5nQ2FjaGVkICAgICAgICAgICA9IHRydWU7CiAg
ICAgbV9kYXRhLT5jYXRlZ29yeUNhY2hlZCAgICAgICAgID0gdHJ1ZTsKQEAgLTE3MzQsNiArMTcz
OCwxNiBAQCBkb3VibGUgSW1hZ2VJbmZvOjpzaW1pbGFyaXR5VG8oY29uc3QgcWxvbmdsb25nIGlt
YWdlSWQpIGNvbnN0CiAgICAgcmV0dXJuIGltYWdlRXh0ZW5kZWRQcm9wZXJ0aWVzKCkuc2ltaWxh
cml0eVRvKGltYWdlSWQpOwogfQogCitkb3VibGUgSW1hZ2VJbmZvOjpjdXJyZW50U2ltaWxhcml0
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+Y3VycmVudFNpbWlsYXJpdHk7Cit9CisK
K3Fsb25nbG9uZyBJbWFnZUluZm86OmN1cnJlbnRSZWZlcmVuY2VJbWFnZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZGF0YS0+Y3VycmVudFJlZmVyZW5jZUltYWdlOworfQorCiBRTGlzdDxJbWFn
ZUluZm8+IEltYWdlSW5mbzo6ZnJvbVVuaXF1ZUhhc2goY29uc3QgUVN0cmluZyYgdW5pcXVlSGFz
aCwgcWxvbmdsb25nIGZpbGVTaXplKQogewogICAgIFFMaXN0PEl0ZW1TY2FuSW5mbz4gc2Nhbklu
Zm9zID0gQ29yZURiQWNjZXNzKCkuZGIoKS0+Z2V0SWRlbnRpY2FsRmlsZXModW5pcXVlSGFzaCwg
ZmlsZVNpemUpOwpkaWZmIC0tZ2l0IGEvbGlicy9kYXRhYmFzZS9pdGVtL2ltYWdlaW5mby5oIGIv
bGlicy9kYXRhYmFzZS9pdGVtL2ltYWdlaW5mby5oCmluZGV4IGEwNDA5MjU5OTIuLmY2MThkM2Jj
YTYgMTAwNjQ0Ci0tLSBhL2xpYnMvZGF0YWJhc2UvaXRlbS9pbWFnZWluZm8uaAorKysgYi9saWJz
L2RhdGFiYXNlL2l0ZW0vaW1hZ2VpbmZvLmgKQEAgLTQ5Myw2ICs0OTMsMTEgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBUaHVtYm5haWxJZGVudGlmaWVyIHRodW1ibmFpbElkZW50aWZpZXIocWxvbmds
b25nIGlkKTsKIAogICAgIGRvdWJsZSBzaW1pbGFyaXR5VG8oY29uc3QgcWxvbmdsb25nIGltYWdl
SWQpIGNvbnN0OworICAgIGRvdWJsZSBjdXJyZW50U2ltaWxhcml0eSgpIGNvbnN0OworICAgIC8q
KgorICAgICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBjdXJyZW50IGZ1enp5IHNlYXJjaCByZWZl
cmVuY2UgaW1hZ2UuCisgICAgICovCisgICAgcWxvbmdsb25nIGN1cnJlbnRSZWZlcmVuY2VJbWFn
ZSgpIGNvbnN0OwogCiBwcml2YXRlOgogCmRpZmYgLS1naXQgYS9saWJzL2RhdGFiYXNlL2l0ZW0v
aW1hZ2VpbmZvZGF0YS5oIGIvbGlicy9kYXRhYmFzZS9pdGVtL2ltYWdlaW5mb2RhdGEuaAppbmRl
eCBjMGNkMjhjMzU3Li43ZWVkMjJjNWJhIDEwMDY0NAotLS0gYS9saWJzL2RhdGFiYXNlL2l0ZW0v
aW1hZ2VpbmZvZGF0YS5oCisrKyBiL2xpYnMvZGF0YWJhc2UvaXRlbS9pbWFnZWluZm9kYXRhLmgK
QEAgLTk4LDYgKzk4LDcgQEAgcHVibGljOgogcHVibGljOgogCiAgICAgcWxvbmdsb25nICAgICAg
ICAgICAgICBpZDsKKyAgICBxbG9uZ2xvbmcgICAgICAgICAgICAgIGN1cnJlbnRSZWZlcmVuY2VJ
bWFnZTsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIGFsYnVtSWQ7CiAgICAgaW50ICAgICAg
ICAgICAgICAgICAgICBhbGJ1bVJvb3RJZDsKICAgICBRU3RyaW5nICAgICAgICAgICAgICAgIG5h
bWU7CkBAIC0xMTgsNiArMTE5LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSAgICAgICAgICAgICAg
ICAgbG9uZ2l0dWRlOwogICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbGF0aXR1ZGU7CiAgICAg
ZG91YmxlICAgICAgICAgICAgICAgICBhbHRpdHVkZTsKKyAgICBkb3VibGUgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTaW1pbGFyaXR5OwogCiAgICAgLy8hIG51bWJlciBvZiBncm91cGVkIGltYWdl
cywgaWYgdGhpcyBpcyBncm91cCBsZWFkZXIKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIGdy
b3VwZWRJbWFnZXM7CmRpZmYgLS1naXQgYS9saWJzL2RhdGFiYXNlL2l0ZW0vaW1hZ2VsaXN0ZXIu
Y3BwIGIvbGlicy9kYXRhYmFzZS9pdGVtL2ltYWdlbGlzdGVyLmNwcAppbmRleCBkOWRhMzBlMjI3
Li5iNTE3YzEwZGMwIDEwMDY0NAotLS0gYS9saWJzL2RhdGFiYXNlL2l0ZW0vaW1hZ2VsaXN0ZXIu
Y3BwCisrKyBiL2xpYnMvZGF0YWJhc2UvaXRlbS9pbWFnZWxpc3Rlci5jcHAKQEAgLTUwNyw3ICs1
MDcsNyBAQCB2b2lkIEltYWdlTGlzdGVyOjpsaXN0QXJlYVJhbmdlKEltYWdlTGlzdGVyUmVjZWl2
ZXIqIGNvbnN0IHJlY2VpdmVyLCBkb3VibGUgbGF0MQogICAgIH0KIH0KIAotdm9pZCBJbWFnZUxp
c3Rlcjo6bGlzdFNlYXJjaChJbWFnZUxpc3RlclJlY2VpdmVyKiBjb25zdCByZWNlaXZlciwgY29u
c3QgUVN0cmluZyYgeG1sLCBpbnQgbGltaXQpCit2b2lkIEltYWdlTGlzdGVyOjpsaXN0U2VhcmNo
KEltYWdlTGlzdGVyUmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJiB4bWws
IGludCBsaW1pdCwgcWxvbmdsb25nIHJlZmVyZW5jZUltYWdlSWQpCiB7CiAgICAgaWYgKHhtbC5p
c0VtcHR5KCkpCiAgICAgewpAQCAtNTc2LDYgKzU3Niw4IEBAIHZvaWQgSW1hZ2VMaXN0ZXI6Omxp
c3RTZWFyY2goSW1hZ2VMaXN0ZXJSZWNlaXZlciogY29uc3QgcmVjZWl2ZXIsIGNvbnN0IFFTdHJp
bmcmCiAgICAgaW50ICAgICAgIHdpZHRoLCBoZWlnaHQ7CiAgICAgZG91YmxlICAgIGxhdCxsb247
CiAKKyAgICBDb3JlRGJBY2Nlc3MgYWNjZXNzOworCiAgICAgZm9yIChRTGlzdDxRVmFyaWFudD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdmFsdWVzLmNvbnN0QmVnaW4oKTsgaXQgIT0gdmFsdWVzLmNv
bnN0RW5kKCk7KQogICAgIHsKICAgICAgICAgSW1hZ2VMaXN0ZXJSZWNvcmQgcmVjb3JkOwpAQCAt
NjExLDYgKzYxMyw5IEBAIHZvaWQgSW1hZ2VMaXN0ZXI6Omxpc3RTZWFyY2goSW1hZ2VMaXN0ZXJS
ZWNlaXZlciogY29uc3QgcmVjZWl2ZXIsIGNvbnN0IFFTdHJpbmcmCiAgICAgICAgIGxvbiAgICAg
ICAgICAgICAgICAgICAgICA9ICgqaXQpLnRvRG91YmxlKCk7CiAgICAgICAgICsraXQ7CiAKKyAg
ICAgICAgcmVjb3JkLmN1cnJlbnRTaW1pbGFyaXR5ID0gYWNjZXNzLmRiKCktPmdldEltYWdlUHJv
cGVydHkocmVjb3JkLmltYWdlSUQsUUxhdGluMVN0cmluZygic2ltaWxhcml0eVRvXyIpK1FTdHJp
bmc6Om51bWJlcihyZWZlcmVuY2VJbWFnZUlkKSkudG9Eb3VibGUoKTsKKyAgICAgICAgcmVjb3Jk
LmN1cnJlbnRGdXp6eVNlYXJjaFJlZmVyZW5jZUltYWdlICA9IHJlZmVyZW5jZUltYWdlSWQ7CisK
ICAgICAgICAgaWYgKGQtPmxpc3RPbmx5QXZhaWxhYmxlSW1hZ2VzICYmICFhbGJ1bVJvb3RzLmNv
bnRhaW5zKHJlY29yZC5hbGJ1bVJvb3RJRCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtNzg0LDcgKzc4OSw3IEBAIHZvaWQgSW1hZ2VMaXN0ZXI6Omxpc3RIYWFyU2VhcmNo
KEltYWdlTGlzdGVyUmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVyLCBjb25zdCBRU3RyCiAgICAgICAg
IHNrZXRjaFR5cGUgPSBIYWFySWZhY2U6OlNjYW5uZWRTa2V0Y2g7CiAgICAgfQogCi0gICAgUUxp
c3Q8cWxvbmdsb25nPiBsaXN0OworICAgIFFNYXA8cWxvbmdsb25nLGRvdWJsZT4gaW1hZ2VTaW1p
bGFyaXR5TWFwOwogCiAgICAgaWYgKHR5cGUgPT0gUUxhdGluMVN0cmluZygic2lnbmF0dXJlIikp
CiAgICAgewpAQCAtNzk2LDcgKzgwMSw3IEBAIHZvaWQgSW1hZ2VMaXN0ZXI6Omxpc3RIYWFyU2Vh
cmNoKEltYWdlTGlzdGVyUmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVyLCBjb25zdCBRU3RyCiAgICAg
ICAgICAgICBpZmFjZS5zZXRBbGJ1bVJvb3RzVG9TZWFyY2goYWxidW1Sb290c1RvTGlzdCgpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGxpc3QgPSBpZmFjZS5iZXN0TWF0Y2hlc0ZvclNpZ25hdHVy
ZShzaWcsIG51bWJlck9mUmVzdWx0cywgc2tldGNoVHlwZSk7CisgICAgICAgIGltYWdlU2ltaWxh
cml0eU1hcCA9IGlmYWNlLmJlc3RNYXRjaGVzRm9yU2lnbmF0dXJlKHNpZywgbnVtYmVyT2ZSZXN1
bHRzLCBza2V0Y2hUeXBlKTsKICAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSBRTGF0aW4xU3Ry
aW5nKCJpbWFnZWlkIikpCiAgICAgewpAQCAtODA4LDcgKzgxMyw3IEBAIHZvaWQgSW1hZ2VMaXN0
ZXI6Omxpc3RIYWFyU2VhcmNoKEltYWdlTGlzdGVyUmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVyLCBj
b25zdCBRU3RyCiAgICAgICAgICAgICBpZmFjZS5zZXRBbGJ1bVJvb3RzVG9TZWFyY2goYWxidW1S
b290c1RvTGlzdCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGxpc3QgPSBpZmFjZS5iZXN0TWF0
Y2hlc0ZvckltYWdlV2l0aFRocmVzaG9sZChpZCwgdGhyZXNob2xkLG1heFRocmVzaG9sZCwgc2tl
dGNoVHlwZSkuc2Vjb25kOworICAgICAgICBpbWFnZVNpbWlsYXJpdHlNYXAgPSBpZmFjZS5iZXN0
TWF0Y2hlc0ZvckltYWdlV2l0aFRocmVzaG9sZChpZCwgdGhyZXNob2xkLG1heFRocmVzaG9sZCwg
c2tldGNoVHlwZSkuc2Vjb25kOwogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09IFFMYXRpbjFT
dHJpbmcoImltYWdlIikpCiAgICAgewpAQCAtODIxLDEwICs4MjYsMTAyIEBAIHZvaWQgSW1hZ2VM
aXN0ZXI6Omxpc3RIYWFyU2VhcmNoKEltYWdlTGlzdGVyUmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVy
LCBjb25zdCBRU3RyCiAgICAgICAgICAgICBpZmFjZS5zZXRBbGJ1bVJvb3RzVG9TZWFyY2goYWxi
dW1Sb290c1RvTGlzdCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGxpc3QgPSBpZmFjZS5iZXN0
TWF0Y2hlc0ZvckltYWdlV2l0aFRocmVzaG9sZChwYXRoLCB0aHJlc2hvbGQsbWF4VGhyZXNob2xk
LCBza2V0Y2hUeXBlKS5zZWNvbmQ7CisgICAgICAgIGltYWdlU2ltaWxhcml0eU1hcCA9IGlmYWNl
LmJlc3RNYXRjaGVzRm9ySW1hZ2VXaXRoVGhyZXNob2xkKHBhdGgsIHRocmVzaG9sZCxtYXhUaHJl
c2hvbGQsIHNrZXRjaFR5cGUpLnNlY29uZDsKICAgICB9CiAKLSAgICBsaXN0RnJvbUlkTGlzdChy
ZWNlaXZlciwgbGlzdCk7CisgICAgbGlzdEZyb21IYWFyU2VhcmNoKHJlY2VpdmVyLCBpbWFnZVNp
bWlsYXJpdHlNYXApOworfQorCit2b2lkIEltYWdlTGlzdGVyOjpsaXN0RnJvbUhhYXJTZWFyY2go
SW1hZ2VMaXN0ZXJSZWNlaXZlciogY29uc3QgcmVjZWl2ZXIsIGNvbnN0IFFNYXA8cWxvbmdsb25n
LGRvdWJsZT4mIGltYWdlU2ltaWxhcml0eU1hcCkKK3sKKyAgICBRTGlzdDxRVmFyaWFudD4gdmFs
dWVzOworICAgIFFTdHJpbmcgICAgICAgICBlcnJNc2c7CisgICAgYm9vbCAgICAgICAgICAgIGV4
ZWN1dGlvblN1Y2Nlc3MgPSB0cnVlOworCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUg
cXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzaW1pbGFyaXR5IGFzIGNvbnN0YW50IGZvciBhIGdpdmVu
IGltYWdlIGlkLgorICAgICAgICBDb3JlRGJBY2Nlc3MgYWNjZXNzOworICAgICAgICBEYkVuZ2lu
ZVNxbFF1ZXJ5IHF1ZXJ5ID0gYWNjZXNzLmJhY2tlbmQoKS0+cHJlcGFyZVF1ZXJ5KFFTdHJpbmc6
OmZyb21VdGY4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIERJU1RJTkNU
IEltYWdlcy5pZCwgSW1hZ2VzLm5hbWUsIEltYWdlcy5hbGJ1bSwgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiICAgICAgIEFsYnVtcy5hbGJ1bVJvb3QsICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICAgICBJbWFnZUluZm9ybWF0aW9uLnJhdGluZywgSW1hZ2VzLmNh
dGVnb3J5LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgSW1hZ2VJbmZv
cm1hdGlvbi5mb3JtYXQsIEltYWdlSW5mb3JtYXRpb24uY3JlYXRpb25EYXRlLCAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgSW1hZ2VzLm1vZGlmaWNhdGlvbkRhdGUsIElt
YWdlcy5maWxlU2l6ZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgIElt
YWdlSW5mb3JtYXRpb24ud2lkdGgsIEltYWdlSW5mb3JtYXRpb24uaGVpZ2h0LCA/IEFTIFwic2lt
aWxhcml0eVwiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIEZST00gSW1hZ2VzICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICBMRUZUIEpPSU4gSW1hZ2VJbmZv
cm1hdGlvbiBPTiBJbWFnZXMuaWQ9SW1hZ2VJbmZvcm1hdGlvbi5pbWFnZWlkICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICAgICBMRUZUIEpPSU4gQWxidW1zIE9OIEFsYnVtcy5p
ZD1JbWFnZXMuYWxidW0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJFIElt
YWdlcy5zdGF0dXM9MSBBTkQgSW1hZ2VzLmlkID0gPzsiKSk7CisKKyAgICAgICAgcWxvbmdsb25n
IGltYWdlSWQ7CisgICAgICAgIGRvdWJsZSBzaW1pbGFyaXR5OworICAgICAgICAvLyBJdGVyYXRl
IG92ZXIgdGhlIGltYWdlIHNpbWlsYXJpdHkgbWFwIGFuZCBiaW5kIHRoZSBpbWFnZSBpZCBhbmQg
c2ltaWxhcml0eSB0byB0aGUgcXVlcnkuCisgICAgICAgIGZvciAoUU1hcDxxbG9uZ2xvbmcsIGRv
dWJsZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW1hZ2VTaW1pbGFyaXR5TWFwLmNvbnN0QmVnaW4o
KTsgaXQgIT0gaW1hZ2VTaW1pbGFyaXR5TWFwLmNvbnN0RW5kKCk7ICsraXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNpbWlsYXJpdHkgPSBpdC52YWx1ZSgpOworICAgICAgICAgICAgaW1hZ2VJ
ZCAgICA9IGl0LmtleSgpOworCisgICAgICAgICAgICBxdWVyeS5iaW5kVmFsdWUoMCwgc2ltaWxh
cml0eSk7CisgICAgICAgICAgICBxdWVyeS5iaW5kVmFsdWUoMSwgaW1hZ2VJZCk7CisgICAgICAg
ICAgICBleGVjdXRpb25TdWNjZXNzID0gYWNjZXNzLmJhY2tlbmQoKS0+ZXhlYyhxdWVyeSk7CisK
KyAgICAgICAgICAgIGlmICghZXhlY3V0aW9uU3VjY2VzcykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBlcnJNc2cgPSBhY2Nlc3MuYmFja2VuZCgpLT5sYXN0RXJyb3IoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gYXBwZW5k
IHJlc3VsdHMgdG8gbGlzdAorICAgICAgICAgICAgdmFsdWVzIDw8IGFjY2Vzcy5iYWNrZW5kKCkt
PnJlYWRUb0xpc3QocXVlcnkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFleGVjdXRp
b25TdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmVjZWl2ZXItPmVycm9yKGVyck1zZyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKworICAgIGZvciAo
UUxpc3Q8UVZhcmlhbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHZhbHVlcy5jb25zdEJlZ2luKCk7
IGl0ICE9IHZhbHVlcy5jb25zdEVuZCgpOykKKyAgICB7CisgICAgICAgIEltYWdlTGlzdGVyUmVj
b3JkIHJlY29yZDsKKworICAgICAgICByZWNvcmQuaW1hZ2VJRCAgICAgICAgICAgPSAoKml0KS50
b0xvbmdMb25nKCk7CisgICAgICAgICsraXQ7CisgICAgICAgIHJlY29yZC5uYW1lICAgICAgICAg
ICAgICA9ICgqaXQpLnRvU3RyaW5nKCk7CisgICAgICAgICsraXQ7CisgICAgICAgIHJlY29yZC5h
bGJ1bUlEICAgICAgICAgICA9ICgqaXQpLnRvSW50KCk7CisgICAgICAgICsraXQ7CisgICAgICAg
IHJlY29yZC5hbGJ1bVJvb3RJRCAgICAgICA9ICgqaXQpLnRvSW50KCk7CisgICAgICAgICsraXQ7
CisgICAgICAgIHJlY29yZC5yYXRpbmcgICAgICAgICAgICA9ICgqaXQpLnRvSW50KCk7CisgICAg
ICAgICsraXQ7CisgICAgICAgIHJlY29yZC5jYXRlZ29yeSAgICAgICAgICA9IChEYXRhYmFzZUl0
ZW06OkNhdGVnb3J5KSgqaXQpLnRvSW50KCk7CisgICAgICAgICsraXQ7CisgICAgICAgIHJlY29y
ZC5mb3JtYXQgICAgICAgICAgICA9ICgqaXQpLnRvU3RyaW5nKCk7CisgICAgICAgICsraXQ7Cisg
ICAgICAgIHJlY29yZC5jcmVhdGlvbkRhdGUgICAgICA9ICgqaXQpLmlzTnVsbCgpID8gUURhdGVU
aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBRRGF0ZVRpbWU6OmZy
b21TdHJpbmcoKCppdCkudG9TdHJpbmcoKSwgUXQ6OklTT0RhdGUpOworICAgICAgICArK2l0Owor
ICAgICAgICByZWNvcmQubW9kaWZpY2F0aW9uRGF0ZSAgPSAoKml0KS5pc051bGwoKSA/IFFEYXRl
VGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUURhdGVUaW1lOjpm
cm9tU3RyaW5nKCgqaXQpLnRvU3RyaW5nKCksIFF0OjpJU09EYXRlKTsKKyAgICAgICAgKytpdDsK
KyAgICAgICAgcmVjb3JkLmZpbGVTaXplICAgICAgICAgID0gdG9JbnQzMkJpdFNhZmUoaXQpOwor
ICAgICAgICArK2l0OworICAgICAgICB3aWR0aCAgICAgICAgICAgICAgICAgICAgPSAoKml0KS50
b0ludCgpOworICAgICAgICArK2l0OworICAgICAgICBoZWlnaHQgICAgICAgICAgICAgICAgICAg
PSAoKml0KS50b0ludCgpOworICAgICAgICArK2l0OworCisgICAgICAgIHJlY29yZC5pbWFnZVNp
emUgICAgICAgICA9IFFTaXplKHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIHJlY29yZC5jdXJy
ZW50U2ltaWxhcml0eSA9ICgqaXQpLnRvRG91YmxlKCk7CisgICAgICAgICsraXQ7CisKKyAgICAg
ICAgcmVjZWl2ZXItPnJlY2VpdmUocmVjb3JkKTsKKyAgICB9CiB9CiAKIHZvaWQgSW1hZ2VMaXN0
ZXI6Omxpc3RGcm9tSWRMaXN0KEltYWdlTGlzdGVyUmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVyLCBj
b25zdCBRTGlzdDxxbG9uZ2xvbmc+JiBpbWFnZUlkcykKZGlmZiAtLWdpdCBhL2xpYnMvZGF0YWJh
c2UvaXRlbS9pbWFnZWxpc3Rlci5oIGIvbGlicy9kYXRhYmFzZS9pdGVtL2ltYWdlbGlzdGVyLmgK
aW5kZXggODYyMWE3M2IzMS4uZmQ0YjY3ZmY0MyAxMDA2NDQKLS0tIGEvbGlicy9kYXRhYmFzZS9p
dGVtL2ltYWdlbGlzdGVyLmgKKysrIGIvbGlicy9kYXRhYmFzZS9pdGVtL2ltYWdlbGlzdGVyLmgK
QEAgLTEwOSw4ICsxMDksOSBAQCBwdWJsaWM6CiAgICAgICogQHBhcmFtIHJlY2VpdmVyIHJlY2Vp
dmVyIGZvciB0aGUgc2VhcmNoZXMKICAgICAgKiBAcGFyYW0geG1sIFNlYXJjaFhtbCBkZXNjcmli
aW5nIHRoZSBxdWVyeQogICAgICAqIEBwYXJhbSBsaW1pdCBsaW1pdCB0aGUgY291bnQgb2YgdGhl
IHJlc3VsdCBzZXQuIElmIGxpbWl0ID0gMCwgdGhlbiBubyBsaW1pdCBpcyBzZXQuCisgICAgICog
QHBhcmFtIHJlZmVyZW5jZUltYWdlSWQgdGhlIGlkIG9mIGEgcmVmZXJlbmNlIGltYWdlIGluIHRo
ZSBzZWFyY2ggcXVlcnkuCiAgICAgICovCi0gICAgdm9pZCBsaXN0U2VhcmNoKEltYWdlTGlzdGVy
UmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVyLCBjb25zdCBRU3RyaW5nJiB4bWwsIGludCBsaW1pdCA9
IDApOworICAgIHZvaWQgbGlzdFNlYXJjaChJbWFnZUxpc3RlclJlY2VpdmVyKiBjb25zdCByZWNl
aXZlciwgY29uc3QgUVN0cmluZyYgeG1sLCBpbnQgbGltaXQgPSAwLCBxbG9uZ2xvbmcgcmVmZXJl
bmNlSW1hZ2VJZCA9IC0xKTsKIAogICAgIC8qKgogICAgICAqIEV4ZWN1dGUgdGhlIHNlYXJjaCBz
cGVjaWZpZWQgYnkgc2VhcmNoIFhNTCBkZXNjcmliaW5nIGEgVGFnIFByb3BlcnRpZXMgc2VhcmNo
LgpAQCAtMTMyLDYgKzEzMywxMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAKKyAgICAvKioKKyAg
ICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgaW1hZ2UgcmVjb3JkcyBmb3IgdGhlIHJlY2lldmVy
IHRoYXQgY29udGFpbiB0aGUgc2ltaWxhcml0aWVzLgorICAgICAqIEBwYXJhbSByZWNlaXZlciBy
ZWNlaXZlciBmb3IgdGhlIHNlYXJjaGVzCisgICAgICogQHBhcmFtIGltYWdlU2ltaWxhcml0eU1h
cCB0aGUgbWFwIG9mIGltYWdlIGlkcyBhbmQgdGhlaXIgc2ltaWxhcml0aWVzIGluIHRoZSBIQUFS
IHNlYXJjaAorICAgICAqLworICAgIHZvaWQgbGlzdEZyb21IYWFyU2VhcmNoKEltYWdlTGlzdGVy
UmVjZWl2ZXIqIGNvbnN0IHJlY2VpdmVyLCBjb25zdCBRTWFwPHFsb25nbG9uZyxkb3VibGU+JiBp
bWFnZVNpbWlsYXJpdHlNYXApOwogICAgIHZvaWQgbGlzdEZyb21JZExpc3QoSW1hZ2VMaXN0ZXJS
ZWNlaXZlciogY29uc3QgcmVjZWl2ZXIsIGNvbnN0IFFMaXN0PHFsb25nbG9uZz4mIGltYWdlSWRz
KTsKICAgICBRU2V0PGludD4gYWxidW1Sb290c1RvTGlzdCgpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9saWJzL2RhdGFiYXNlL2l0ZW0vaW1hZ2VsaXN0ZXJyZWNvcmQuaCBiL2xpYnMvZGF0YWJhc2Uv
aXRlbS9pbWFnZWxpc3RlcnJlY29yZC5oCmluZGV4IDAxZTYwYzY0MGYuLjMzMzMwODdkOTAgMTAw
NjQ0Ci0tLSBhL2xpYnMvZGF0YWJhc2UvaXRlbS9pbWFnZWxpc3RlcnJlY29yZC5oCisrKyBiL2xp
YnMvZGF0YWJhc2UvaXRlbS9pbWFnZWxpc3RlcnJlY29yZC5oCkBAIC02MiwxMiArNjIsMTMgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IEltYWdlTGlzdGVyUmVjb3JkKEJpbmFyeUZvcm1hdCBmb3Jt
YXQgPSBUcmFkaXRpb25hbEZvcm1hdCkKICAgICAgICAgOiBiaW5hcnlGb3JtYXQoZm9ybWF0KQog
ICAgIHsKLSAgICAgICAgaW1hZ2VJRCAgICAgPSAtMTsKLSAgICAgICAgYWxidW1JRCAgICAgPSAt
MTsKLSAgICAgICAgYWxidW1Sb290SUQgPSAtMTsKLSAgICAgICAgcmF0aW5nICAgICAgPSAtMTsK
LSAgICAgICAgZmlsZVNpemUgICAgPSAtMTsKLSAgICAgICAgY2F0ZWdvcnkgICAgPSBEYXRhYmFz
ZUl0ZW06OlVuZGVmaW5lZENhdGVnb3J5OworICAgICAgICBpbWFnZUlEICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IC0xOworICAgICAgICBhbGJ1bUlEICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IC0xOworICAgICAgICBhbGJ1bVJvb3RJRCAgICAgICAgICAgICAgICAgICAgICA9IC0xOwor
ICAgICAgICByYXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC0xOworICAgICAgICBm
aWxlU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICA9IC0xOworICAgICAgICBjdXJyZW50U2lt
aWxhcml0eSAgICAgICAgICAgICAgICA9IDAuMDsKKyAgICAgICAgY2F0ZWdvcnkgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBEYXRhYmFzZUl0ZW06OlVuZGVmaW5lZENhdGVnb3J5OwogICAgIH0K
IAogICAgIGludCAgICAgICAgICAgICAgICAgICAgYWxidW1JRDsKQEAgLTc2LDYgKzc3LDkgQEAg
cHVibGljOgogICAgIGludCAgICAgICAgICAgICAgICAgICAgZmlsZVNpemU7CiAKICAgICBxbG9u
Z2xvbmcgICAgICAgICAgICAgIGltYWdlSUQ7CisgICAgcWxvbmdsb25nICAgICAgICAgICAgICBj
dXJyZW50RnV6enlTZWFyY2hSZWZlcmVuY2VJbWFnZTsKKworICAgIGRvdWJsZSAgICAgICAgICAg
ICAgICAgY3VycmVudFNpbWlsYXJpdHk7CiAKICAgICBRU3RyaW5nICAgICAgICAgICAgICAgIGZv
cm1hdDsKICAgICBRU3RyaW5nICAgICAgICAgICAgICAgIG5hbWU7CmRpZmYgLS1naXQgYS9saWJz
L21vZGVscy9pbWFnZWZpbHRlcm1vZGVsLmNwcCBiL2xpYnMvbW9kZWxzL2ltYWdlZmlsdGVybW9k
ZWwuY3BwCmluZGV4IGM1MTc2NTE2MjUuLmEzODVmM2I0MmYgMTAwNjQ0Ci0tLSBhL2xpYnMvbW9k
ZWxzL2ltYWdlZmlsdGVybW9kZWwuY3BwCisrKyBiL2xpYnMvbW9kZWxzL2ltYWdlZmlsdGVybW9k
ZWwuY3BwCkBAIC04MTgsMTIgKzgxOCw2IEBAIHZvaWQgSW1hZ2VGaWx0ZXJNb2RlbDo6c2V0U3Ry
aW5nVHlwZU5hdHVyYWwoYm9vbCBuYXR1cmFsKQogICAgIHNldEltYWdlU29ydFNldHRpbmdzKGQt
PnNvcnRlcik7CiB9CiAKLXZvaWQgSW1hZ2VGaWx0ZXJNb2RlbDo6c2V0UmVmZXJlbmNlSW1hZ2VJ
ZChxbG9uZ2xvbmcgaW1hZ2VpZCl7Ci0gICAgUV9EKEltYWdlRmlsdGVyTW9kZWwpOwotICAgIGQt
PnNvcnRlci5zZXRSZWZlcmVuY2VJbWFnZUlkKGltYWdlaWQpOwotICAgIHNldEltYWdlU29ydFNl
dHRpbmdzKGQtPnNvcnRlcik7Ci19Ci0KIGludCBJbWFnZUZpbHRlck1vZGVsOjpjb21wYXJlQ2F0
ZWdvcmllcyhjb25zdCBRTW9kZWxJbmRleCYgbGVmdCwgY29uc3QgUU1vZGVsSW5kZXgmIHJpZ2h0
KSBjb25zdAogewogICAgIC8vIHNvdXJjZSBpbmRleGVzCmRpZmYgLS1naXQgYS9saWJzL21vZGVs
cy9pbWFnZWZpbHRlcm1vZGVsLmggYi9saWJzL21vZGVscy9pbWFnZWZpbHRlcm1vZGVsLmgKaW5k
ZXggMzFlZjA4NmVkZS4uZDEzMWIzZTI0OSAxMDA2NDQKLS0tIGEvbGlicy9tb2RlbHMvaW1hZ2Vm
aWx0ZXJtb2RlbC5oCisrKyBiL2xpYnMvbW9kZWxzL2ltYWdlZmlsdGVybW9kZWwuaApAQCAtMTg5
LDcgKzE4OSw2IEBAIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgc2V0U29ydFJvbGUoSW1hZ2VT
b3J0U2V0dGluZ3M6OlNvcnRSb2xlIHJvbGUpOwogICAgIHZvaWQgc2V0U29ydE9yZGVyKEltYWdl
U29ydFNldHRpbmdzOjpTb3J0T3JkZXIgb3JkZXIpOwogICAgIHZvaWQgc2V0U3RyaW5nVHlwZU5h
dHVyYWwoYm9vbCBuYXR1cmFsKTsKLSAgICB2b2lkIHNldFJlZmVyZW5jZUltYWdlSWQocWxvbmds
b25nIGltYWdlaWQpOwogICAgIHZvaWQgc2V0VXJsV2hpdGVsaXN0KGNvbnN0IFFMaXN0PFFVcmw+
IHVybExpc3QsIGNvbnN0IFFTdHJpbmcmIGlkKTsKICAgICB2b2lkIHNldElkV2hpdGVsaXN0KGNv
bnN0IFFMaXN0PHFsb25nbG9uZz4mIGlkTGlzdCwgY29uc3QgUVN0cmluZyYgaWQpOwogCmRpZmYg
LS1naXQgYS9saWJzL21vZGVscy9pbWFnZXNvcnRzZXR0aW5ncy5jcHAgYi9saWJzL21vZGVscy9p
bWFnZXNvcnRzZXR0aW5ncy5jcHAKaW5kZXggZGExZGY0ZDI5OS4uMzllZTZlMTE0NCAxMDA2NDQK
LS0tIGEvbGlicy9tb2RlbHMvaW1hZ2Vzb3J0c2V0dGluZ3MuY3BwCisrKyBiL2xpYnMvbW9kZWxz
L2ltYWdlc29ydHNldHRpbmdzLmNwcApAQCAtNDgsNyArNDgsNiBAQCBJbWFnZVNvcnRTZXR0aW5n
czo6SW1hZ2VTb3J0U2V0dGluZ3MoKQogICAgIHNvcnRDYXNlU2Vuc2l0aXZpdHkgICAgICAgICAg
ICA9IFF0OjpDYXNlU2Vuc2l0aXZlOwogICAgIGN1cnJlbnRDYXRlZ29yaXphdGlvblNvcnRPcmRl
ciA9IFF0OjpBc2NlbmRpbmdPcmRlcjsKICAgICBjdXJyZW50U29ydE9yZGVyICAgICAgICAgICAg
ICAgPSBRdDo6QXNjZW5kaW5nT3JkZXI7Ci0gICAgcmVmZXJlbmNlSW1hZ2VJZCAgICAgICAgICAg
ICAgID0gMDsKIH0KIAogYm9vbCBJbWFnZVNvcnRTZXR0aW5nczo6b3BlcmF0b3I9PShjb25zdCBJ
bWFnZVNvcnRTZXR0aW5ncyYgb3RoZXIpIGNvbnN0CkBAIC01OSw4ICs1OCw3IEBAIGJvb2wgSW1h
Z2VTb3J0U2V0dGluZ3M6Om9wZXJhdG9yPT0oY29uc3QgSW1hZ2VTb3J0U2V0dGluZ3MmIG90aGVy
KSBjb25zdAogICAgICAgICBjYXRlZ29yaXphdGlvbkNhc2VTZW5zaXRpdml0eSA9PSBvdGhlci5j
YXRlZ29yaXphdGlvbkNhc2VTZW5zaXRpdml0eSAmJgogICAgICAgICBzb3J0Um9sZSAgICAgICAg
ICAgICAgICAgICAgICA9PSBvdGhlci5zb3J0Um9sZSAgICAgICAgICAgICAgICAgICAgICAmJgog
ICAgICAgICBzb3J0T3JkZXIgICAgICAgICAgICAgICAgICAgICA9PSBvdGhlci5zb3J0T3JkZXIg
ICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICBzb3J0Q2FzZVNlbnNpdGl2aXR5ICAgICAg
ICAgICA9PSBvdGhlci5zb3J0Q2FzZVNlbnNpdGl2aXR5ICAgICAgICAgICAmJgotICAgICAgICBy
ZWZlcmVuY2VJbWFnZUlkICAgICAgICAgICAgICA9PSBvdGhlci5yZWZlcmVuY2VJbWFnZUlkOwor
ICAgICAgICBzb3J0Q2FzZVNlbnNpdGl2aXR5ICAgICAgICAgICA9PSBvdGhlci5zb3J0Q2FzZVNl
bnNpdGl2aXR5OwogfQogCiB2b2lkIEltYWdlU29ydFNldHRpbmdzOjpzZXRDYXRlZ29yaXphdGlv
bk1vZGUoQ2F0ZWdvcml6YXRpb25Nb2RlIG1vZGUpCkBAIC0xMTYsMTEgKzExNCw2IEBAIHZvaWQg
SW1hZ2VTb3J0U2V0dGluZ3M6OnNldFN0cmluZ1R5cGVOYXR1cmFsKGJvb2wgbmF0dXJhbCkKICAg
ICBzdHJUeXBlTmF0dXJhbCA9IG5hdHVyYWw7CiB9CiAKLXZvaWQgSW1hZ2VTb3J0U2V0dGluZ3M6
OnNldFJlZmVyZW5jZUltYWdlSWQocWxvbmdsb25nIGltYWdlaWQpCi17Ci0gICAgcmVmZXJlbmNl
SW1hZ2VJZCA9IGltYWdlaWQ7Ci19Ci0KIFF0OjpTb3J0T3JkZXIgSW1hZ2VTb3J0U2V0dGluZ3M6
OmRlZmF1bHRTb3J0T3JkZXJGb3JDYXRlZ29yaXphdGlvbk1vZGUoQ2F0ZWdvcml6YXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKQpAQCAtMjg3LDkgKzI4MCwxMSBAQCBpbnQgSW1h
Z2VTb3J0U2V0dGluZ3M6OmNvbXBhcmUoY29uc3QgSW1hZ2VJbmZvJiBsZWZ0LCBjb25zdCBJbWFn
ZUluZm8mIHJpZ2h0LCBTbwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU29ydEJ5U2ltaWxhcml0
eToKICAgICAgICAgeworICAgICAgICAgICAgcWxvbmdsb25nIGxlZnRSZWZlcmVuY2VJbWFnZUlk
ICA9IGxlZnQuY3VycmVudFJlZmVyZW5jZUltYWdlKCk7CisgICAgICAgICAgICBxbG9uZ2xvbmcg
cmlnaHRSZWZlcmVuY2VJbWFnZUlkID0gcmlnaHQuY3VycmVudFJlZmVyZW5jZUltYWdlKCk7CiAg
ICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgb3JpZ2luYWwgaW1hZ2UgaGFzIGFsd2F5
cyB0aGUgaGlnaGVzdCBzaW1pbGFyaXR5LgotICAgICAgICAgICAgZG91YmxlIGxlZnRTaW1pbGFy
aXR5ICA9IGxlZnQuaWQoKSA9PSByZWZlcmVuY2VJbWFnZUlkID8gMS4xIDogbGVmdC5zaW1pbGFy
aXR5VG8ocmVmZXJlbmNlSW1hZ2VJZCk7Ci0gICAgICAgICAgICBkb3VibGUgcmlnaHRTaW1pbGFy
aXR5ID0gcmlnaHQuaWQoKSA9PSByZWZlcmVuY2VJbWFnZUlkID8gMS4xIDogcmlnaHQuc2ltaWxh
cml0eVRvKHJlZmVyZW5jZUltYWdlSWQpOworICAgICAgICAgICAgZG91YmxlIGxlZnRTaW1pbGFy
aXR5ICA9IGxlZnQuaWQoKSA9PSBsZWZ0UmVmZXJlbmNlSW1hZ2VJZCA/IDEuMSA6IGxlZnQuY3Vy
cmVudFNpbWlsYXJpdHkoKTsKKyAgICAgICAgICAgIGRvdWJsZSByaWdodFNpbWlsYXJpdHkgPSBy
aWdodC5pZCgpID09IHJpZ2h0UmVmZXJlbmNlSW1hZ2VJZCA/IDEuMSA6IHJpZ2h0LmN1cnJlbnRT
aW1pbGFyaXR5KCk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJ5T3JkZXIobGVmdFNpbWls
YXJpdHksIHJpZ2h0U2ltaWxhcml0eSwgY3VycmVudFNvcnRPcmRlcik7CiAgICAgICAgIH0KICAg
ICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2xpYnMvbW9kZWxzL2ltYWdlc29ydHNldHRpbmdz
LmggYi9saWJzL21vZGVscy9pbWFnZXNvcnRzZXR0aW5ncy5oCmluZGV4IDEyZTkyZDdjMjEuLjJh
NWZkOGM0MTAgMTAwNjQ0Ci0tLSBhL2xpYnMvbW9kZWxzL2ltYWdlc29ydHNldHRpbmdzLmgKKysr
IGIvbGlicy9tb2RlbHMvaW1hZ2Vzb3J0c2V0dGluZ3MuaApAQCAtMTI3LDEyICsxMjcsMTAgQEAg
cHVibGljOgogICAgIFNvcnRSb2xlICAgICAgICAgICAgICAgIHNvcnRSb2xlOwogICAgIFNvcnRP
cmRlciAgICAgICAgICAgICAgIHNvcnRPcmRlcjsKICAgICBib29sICAgICAgICAgICAgICAgICAg
ICBzdHJUeXBlTmF0dXJhbDsKLSAgICBxbG9uZ2xvbmcgICAgICAgICAgICAgICByZWZlcmVuY2VJ
bWFnZUlkOwogCiAgICAgdm9pZCBzZXRTb3J0Um9sZShTb3J0Um9sZSByb2xlKTsKICAgICB2b2lk
IHNldFNvcnRPcmRlcihTb3J0T3JkZXIgb3JkZXIpOwogICAgIHZvaWQgc2V0U3RyaW5nVHlwZU5h
dHVyYWwoYm9vbCBuYXR1cmFsKTsKLSAgICB2b2lkIHNldFJlZmVyZW5jZUltYWdlSWQocWxvbmds
b25nIGltYWdlaWQpOwogCiAgICAgUXQ6OlNvcnRPcmRlciAgICAgICAgICAgY3VycmVudFNvcnRP
cmRlcjsKICAgICBRdDo6Q2FzZVNlbnNpdGl2aXR5ICAgICBzb3J0Q2FzZVNlbnNpdGl2aXR5Owpk
aWZmIC0tZ2l0IGEvbGlicy9zZXR0aW5ncy9hcHBsaWNhdGlvbnNldHRpbmdzLmNwcCBiL2xpYnMv
c2V0dGluZ3MvYXBwbGljYXRpb25zZXR0aW5ncy5jcHAKaW5kZXggN2ViMDE0Nzc3OC4uZTFjZmQw
YTY3YSAxMDA2NDQKLS0tIGEvbGlicy9zZXR0aW5ncy9hcHBsaWNhdGlvbnNldHRpbmdzLmNwcAor
KysgYi9saWJzL3NldHRpbmdzL2FwcGxpY2F0aW9uc2V0dGluZ3MuY3BwCkBAIC0xMjcsNyArMTI3
LDYgQEAgdm9pZCBBcHBsaWNhdGlvblNldHRpbmdzOjpyZWFkU2V0dGluZ3MoKQogICAgIGQtPmlt
YWdlU29ydGluZyAgICAgICAgICAgICAgICAgICAgICA9IGdyb3VwLnJlYWRFbnRyeShkLT5jb25m
aWdJbWFnZVNvcnRpbmdFbnRyeSwgICAgICAgIChpbnQpSW1hZ2VTb3J0U2V0dGluZ3M6OkFzY2Vu
ZGluZ09yZGVyKTsKICAgICBkLT5pbWFnZUdyb3VwTW9kZSAgICAgICAgICAgICAgICAgICAgPSBn
cm91cC5yZWFkRW50cnkoZC0+Y29uZmlnSW1hZ2VHcm91cE1vZGVFbnRyeSwgICAgICAoaW50KUlt
YWdlU29ydFNldHRpbmdzOjpDYXRlZ29yeUJ5QWxidW0pOwogICAgIGQtPmltYWdlR3JvdXBTb3J0
T3JkZXIgICAgICAgICAgICAgICA9IGdyb3VwLnJlYWRFbnRyeShkLT5jb25maWdJbWFnZUdyb3Vw
U29ydE9yZGVyRW50cnksIChpbnQpSW1hZ2VTb3J0U2V0dGluZ3M6OkFzY2VuZGluZ09yZGVyKTsK
LSAgICBkLT5mdXp6eVNlYXJjaFJlZmVyZW5jZUltYWdlICAgICAgICAgPSBncm91cC5yZWFkRW50
cnkoZC0+Y29uZmlnRnV6enlTZWFyY2hSZWZlcmVuY2VJbWFnZSwoaW50KTApOwogCiAgICAgZC0+
aXRlbUxlZnRDbGlja0FjdGlvbiAgICAgICAgICAgICAgID0gQXBwbGljYXRpb25TZXR0aW5nczo6
SXRlbUxlZnRDbGlja0FjdGlvbihncm91cC5yZWFkRW50cnkoIGQtPmNvbmZpZ0l0ZW1MZWZ0Q2xp
Y2tBY3Rpb25FbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaW50KUFwcGxpY2F0aW9uU2V0dGluZ3M6OlNob3dQcmV2aWV3KSk7CkBAIC0yOTgsNyArMjk3
LDYgQEAgdm9pZCBBcHBsaWNhdGlvblNldHRpbmdzOjpzYXZlU2V0dGluZ3MoKQogICAgIGdyb3Vw
LndyaXRlRW50cnkoZC0+Y29uZmlnSW1hZ2VTb3J0aW5nRW50cnksICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KWQtPmltYWdlU29ydGluZyk7CiAgICAgZ3JvdXAud3JpdGVFbnRyeShkLT5jb25m
aWdJbWFnZUdyb3VwTW9kZUVudHJ5LCAgICAgICAgICAgICAgICAgICAgIChpbnQpZC0+aW1hZ2VH
cm91cE1vZGUpOwogICAgIGdyb3VwLndyaXRlRW50cnkoZC0+Y29uZmlnSW1hZ2VHcm91cFNvcnRP
cmRlckVudHJ5LCAgICAgICAgICAgICAgICAoaW50KWQtPmltYWdlR3JvdXBTb3J0T3JkZXIpOwot
ICAgIGdyb3VwLndyaXRlRW50cnkoZC0+Y29uZmlnRnV6enlTZWFyY2hSZWZlcmVuY2VJbWFnZSwg
ICAgICAgICAgICAgICAoaW50KWQtPmZ1enp5U2VhcmNoUmVmZXJlbmNlSW1hZ2UpOwogCiAgICAg
Z3JvdXAud3JpdGVFbnRyeShkLT5jb25maWdJdGVtTGVmdENsaWNrQWN0aW9uRW50cnksICAgICAg
ICAgICAgICAgIChpbnQpZC0+aXRlbUxlZnRDbGlja0FjdGlvbik7CiAgICAgZ3JvdXAud3JpdGVF
bnRyeShkLT5jb25maWdEZWZhdWx0SWNvblNpemVFbnRyeSwgICAgICAgICAgICAgICAgICAgIFFT
dHJpbmc6Om51bWJlcihkLT50aHVtYm5haWxTaXplKSk7CmRpZmYgLS1naXQgYS9saWJzL3NldHRp
bmdzL2FwcGxpY2F0aW9uc2V0dGluZ3MuaCBiL2xpYnMvc2V0dGluZ3MvYXBwbGljYXRpb25zZXR0
aW5ncy5oCmluZGV4IGFjNWQ1YWU4MDcuLmZmZTZhNDI2ODAgMTAwNjQ0Ci0tLSBhL2xpYnMvc2V0
dGluZ3MvYXBwbGljYXRpb25zZXR0aW5ncy5oCisrKyBiL2xpYnMvc2V0dGluZ3MvYXBwbGljYXRp
b25zZXR0aW5ncy5oCkBAIC00MjUsOSArNDI1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RHVw
bGljYXRlc1NlYXJjaExhc3RNYXhTaW1pbGFyaXR5KGludCB2YWwpOwogICAgIGludCAgZ2V0RHVw
bGljYXRlc1NlYXJjaExhc3RNYXhTaW1pbGFyaXR5KCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEN1
cnJlbnRGdXp6eVNlYXJjaFJlZmVyZW5jZUltYWdlKHFsb25nbG9uZyB2YWwpOwotICAgIHFsb25n
bG9uZyAgZ2V0Q3VycmVudEZ1enp5U2VhcmNoUmVmZXJlbmNlSW1hZ2UoKSBjb25zdDsKLQogcHJp
dmF0ZSBRX1NMT1RTOgogCiAgICAgdm9pZCBhcHBseUJhbG9vU2V0dGluZ3MoKTsKZGlmZiAtLWdp
dCBhL2xpYnMvc2V0dGluZ3MvYXBwbGljYXRpb25zZXR0aW5nc19taXNjcy5jcHAgYi9saWJzL3Nl
dHRpbmdzL2FwcGxpY2F0aW9uc2V0dGluZ3NfbWlzY3MuY3BwCmluZGV4IGEyZmJlN2MwYzkuLjdm
MGQ2NmRjYjQgMTAwNjQ0Ci0tLSBhL2xpYnMvc2V0dGluZ3MvYXBwbGljYXRpb25zZXR0aW5nc19t
aXNjcy5jcHAKKysrIGIvbGlicy9zZXR0aW5ncy9hcHBsaWNhdGlvbnNldHRpbmdzX21pc2NzLmNw
cApAQCAtMjI4LDE0ICsyMjgsNCBAQCBpbnQgIEFwcGxpY2F0aW9uU2V0dGluZ3M6OmdldER1cGxp
Y2F0ZXNTZWFyY2hMYXN0TWF4U2ltaWxhcml0eSgpIGNvbnN0CiAgICAgcmV0dXJuIGQtPmR1cGxp
Y2F0ZXNTZWFyY2hMYXN0TWF4U2ltaWxhcml0eTsKIH0KIAotdm9pZCBBcHBsaWNhdGlvblNldHRp
bmdzOjpzZXRDdXJyZW50RnV6enlTZWFyY2hSZWZlcmVuY2VJbWFnZShxbG9uZ2xvbmcgdmFsKQot
ewotICAgIGQtPmZ1enp5U2VhcmNoUmVmZXJlbmNlSW1hZ2UgPSB2YWw7Ci19Ci0KLXFsb25nbG9u
ZyAgQXBwbGljYXRpb25TZXR0aW5nczo6Z2V0Q3VycmVudEZ1enp5U2VhcmNoUmVmZXJlbmNlSW1h
Z2UoKSBjb25zdAotewotICAgIHJldHVybiBkLT5mdXp6eVNlYXJjaFJlZmVyZW5jZUltYWdlOwot
fQotCiB9ICAvLyBuYW1lc3BhY2UgRGlnaWthbQpkaWZmIC0tZ2l0IGEvbGlicy9zZXR0aW5ncy9h
cHBsaWNhdGlvbnNldHRpbmdzX3AuY3BwIGIvbGlicy9zZXR0aW5ncy9hcHBsaWNhdGlvbnNldHRp
bmdzX3AuY3BwCmluZGV4IDVkZGQ0MjI5ZDcuLmZlZDYzYTZkYzAgMTAwNjQ0Ci0tLSBhL2xpYnMv
c2V0dGluZ3MvYXBwbGljYXRpb25zZXR0aW5nc19wLmNwcAorKysgYi9saWJzL3NldHRpbmdzL2Fw
cGxpY2F0aW9uc2V0dGluZ3NfcC5jcHAKQEAgLTE0MCw3ICsxNDAsNiBAQCBjb25zdCBRU3RyaW5n
IEFwcGxpY2F0aW9uU2V0dGluZ3M6OlByaXZhdGU6OmNvbmZpZ0ljb25UaGVtZUVudHJ5KFFMYXRp
bjFTdHJpbmcoIgogY29uc3QgUVN0cmluZyBBcHBsaWNhdGlvblNldHRpbmdzOjpQcml2YXRlOjpj
b25maWdTY2FuQXRTdGFydEVudHJ5KFFMYXRpbjFTdHJpbmcoIlNjYW4gQXQgU3RhcnQiKSk7CiBj
b25zdCBRU3RyaW5nIEFwcGxpY2F0aW9uU2V0dGluZ3M6OlByaXZhdGU6OmNvbmZpZ0R1cGxpY2F0
ZXNTZWFyY2hMYXN0TWluU2ltaWxhcml0eShRTGF0aW4xU3RyaW5nKCJMYXN0IG1pbmltdW0gc2lt
aWxhcml0eSIpKTsKIGNvbnN0IFFTdHJpbmcgQXBwbGljYXRpb25TZXR0aW5nczo6UHJpdmF0ZTo6
Y29uZmlnRHVwbGljYXRlc1NlYXJjaExhc3RNYXhTaW1pbGFyaXR5KFFMYXRpbjFTdHJpbmcoIkxh
c3QgbWF4aW11bSBzaW1pbGFyaXR5IikpOwotY29uc3QgUVN0cmluZyBBcHBsaWNhdGlvblNldHRp
bmdzOjpQcml2YXRlOjpjb25maWdGdXp6eVNlYXJjaFJlZmVyZW5jZUltYWdlKFFMYXRpbjFTdHJp
bmcoIkZ1enp5IHJlZmVyZW5jZSBpbWFnZSBpZCIpKTsKIAogQXBwbGljYXRpb25TZXR0aW5nczo6
UHJpdmF0ZTo6UHJpdmF0ZShBcHBsaWNhdGlvblNldHRpbmdzKiBjb25zdCBxcSkKICAgICA6IHNo
b3dTcGxhc2goZmFsc2UpLApAQCAtMjEzLDcgKzIxMiw2IEBAIEFwcGxpY2F0aW9uU2V0dGluZ3M6
OlByaXZhdGU6OlByaXZhdGUoQXBwbGljYXRpb25TZXR0aW5ncyogY29uc3QgcXEpCiAgICAgICBp
bWFnZUdyb3VwTW9kZSgwKSwKICAgICAgIGltYWdlR3JvdXBTb3J0T3JkZXIoMCksCiAgICAgICBp
dGVtTGVmdENsaWNrQWN0aW9uKEFwcGxpY2F0aW9uU2V0dGluZ3M6OlNob3dQcmV2aWV3KSwKLSAg
ICAgIGZ1enp5U2VhcmNoUmVmZXJlbmNlSW1hZ2UoMCksCiAgICAgICBzeW5jVG9EaWdpa2FtKGZh
bHNlKSwKICAgICAgIHN5bmNUb0JhbG9vKGZhbHNlKSwKICAgICAgIGZhY2VEZXRlY3Rpb25BY2N1
cmFjeSgwLjgpLApAQCAtMzMyLDggKzMzMCw2IEBAIHZvaWQgQXBwbGljYXRpb25TZXR0aW5nczo6
UHJpdmF0ZTo6aW5pdCgpCiAgICAgZHVwbGljYXRlc1NlYXJjaExhc3RNaW5TaW1pbGFyaXR5ICAg
PSA5MDsKICAgICBkdXBsaWNhdGVzU2VhcmNoTGFzdE1heFNpbWlsYXJpdHkgICA9IDEwMDsKIAot
ICAgIGZ1enp5U2VhcmNoUmVmZXJlbmNlSW1hZ2UgICAgICAgICAgID0gMDsKLQogICAgIHNjYW5B
dFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgID0gdHJ1ZTsKICAgICBzdHJpbmdDb21wYXJp
c29uVHlwZSAgICAgICAgICAgICAgICA9IEFwcGxpY2F0aW9uU2V0dGluZ3M6Ok5hdHVyYWw7CiAK
ZGlmZiAtLWdpdCBhL2xpYnMvc2V0dGluZ3MvYXBwbGljYXRpb25zZXR0aW5nc19wLmggYi9saWJz
L3NldHRpbmdzL2FwcGxpY2F0aW9uc2V0dGluZ3NfcC5oCmluZGV4IDVkMDIxNWUxOTkuLjA0OGNj
MzRkNDcgMTAwNjQ0Ci0tLSBhL2xpYnMvc2V0dGluZ3MvYXBwbGljYXRpb25zZXR0aW5nc19wLmgK
KysrIGIvbGlicy9zZXR0aW5ncy9hcHBsaWNhdGlvbnNldHRpbmdzX3AuaApAQCAtMTM3LDcgKzEz
Nyw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUVN0cmluZyAgICAgICAgICAgICAgICAg
ICAgICBjb25maWdJY29uVGhlbWVFbnRyeTsKICAgICBzdGF0aWMgY29uc3QgUVN0cmluZyAgICAg
ICAgICAgICAgICAgICAgICBjb25maWdEdXBsaWNhdGVzU2VhcmNoTGFzdE1pblNpbWlsYXJpdHk7
CiAgICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRHVw
bGljYXRlc1NlYXJjaExhc3RNYXhTaW1pbGFyaXR5OwotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5n
ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ0Z1enp5U2VhcmNoUmVmZXJlbmNlSW1hZ2U7CiAK
ICAgICAvLyBzdGFydCB1cCBzZXR0aW5nCiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2hvd1NwbGFzaDsKQEAgLTI0Nyw3ICsyNDYsNiBAQCBwdWJsaWM6CiAg
ICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VHcm91cE1v
ZGU7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VH
cm91cFNvcnRPcmRlcjsKICAgICBBcHBsaWNhdGlvblNldHRpbmdzOjpJdGVtTGVmdENsaWNrQWN0
aW9uICBpdGVtTGVmdENsaWNrQWN0aW9uOwotICAgIHFsb25nbG9uZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1enp5U2VhcmNoUmVmZXJlbmNlSW1hZ2U7CiAKICAgICAvLyBCYWxv
byBzZXR0aW5ncwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN5bmNUb0RpZ2lrYW07CmRpZmYgLS1naXQgYS9saWJzL3RhZ3MvdGFnZm9sZGVydmlldy5jcHAg
Yi9saWJzL3RhZ3MvdGFnZm9sZGVydmlldy5jcHAKaW5kZXggYmFkM2QwMzNkNS4uMGU3ZWZkZjFl
NCAxMDA2NDQKLS0tIGEvbGlicy90YWdzL3RhZ2ZvbGRlcnZpZXcuY3BwCisrKyBiL2xpYnMvdGFn
cy90YWdmb2xkZXJ2aWV3LmNwcApAQCAtMjM5LDcgKzIzOSw5IEBAIHZvaWQgVGFnRm9sZGVyVmll
dzo6aGFuZGxlQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24oUUFjdGlvbiogYWN0aW9uLCBBbGJ1bVBv
aW50ZXI8CiAgICAgfQogICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBkLT5maW5kRHVwbEFjdGlvbikK
ICAgICB7Ci0gICAgICAgIGVtaXQgc2lnbmFsRmluZER1cGxpY2F0ZXNJbkFsYnVtKHRhZyk7Cisg
ICAgICAgIFFMaXN0PFRBbGJ1bSo+IHNlbGVjdGVkID0gc2VsZWN0ZWRUYWdBbGJ1bXMoKTsKKwor
ICAgICAgICBlbWl0IHNpZ25hbEZpbmREdXBsaWNhdGVzKHNlbGVjdGVkKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL2xpYnMvdGFncy90YWdmb2xkZXJ2aWV3LmggYi9saWJzL3RhZ3MvdGFnZm9s
ZGVydmlldy5oCmluZGV4IDhkZTcyOGU4NmYuLmU3ZjYwZWIwZTggMTAwNjQ0Ci0tLSBhL2xpYnMv
dGFncy90YWdmb2xkZXJ2aWV3LmgKKysrIGIvbGlicy90YWdzL3RhZ2ZvbGRlcnZpZXcuaApAQCAt
NjgsNyArNjgsNyBAQCBwdWJsaWM6CiAKIFFfU0lHTkFMUzoKIAotICAgIHZvaWQgc2lnbmFsRmlu
ZER1cGxpY2F0ZXNJbkFsYnVtKEFsYnVtKik7CisgICAgdm9pZCBzaWduYWxGaW5kRHVwbGljYXRl
cyhRTGlzdDxUQWxidW0qPik7CiAKIHByb3RlY3RlZDoKIApkaWZmIC0tZ2l0IGEvbGlicy90YWdz
L3RhZ3NtYW5hZ2VyL3RhZ3NtYW5hZ2VyLmNwcCBiL2xpYnMvdGFncy90YWdzbWFuYWdlci90YWdz
bWFuYWdlci5jcHAKaW5kZXggZDU3YzQ3NWQ0ZS4uOWRhNjk4NjA1MSAxMDA2NDQKLS0tIGEvbGli
cy90YWdzL3RhZ3NtYW5hZ2VyL3RhZ3NtYW5hZ2VyLmNwcAorKysgYi9saWJzL3RhZ3MvdGFnc21h
bmFnZXIvdGFnc21hbmFnZXIuY3BwCkBAIC00NTQsMTIgKzQ1NCwxMiBAQCB2b2lkIFRhZ3NNYW5h
Z2VyOjpzbG90UmVzZXRUYWdJY29uKCkKIHsKICAgICBRU3RyaW5nIGVyck1zZzsKIAotICAgIGNv
bnN0IFFMaXN0PEFsYnVtKj4gc2VsZWN0ZWQgPSBkLT50YWdNbmdyVmlldy0+c2VsZWN0ZWRUYWdz
KCk7CisgICAgY29uc3QgUUxpc3Q8VEFsYnVtKj4gc2VsZWN0ZWQgPSBkLT50YWdNbmdyVmlldy0+
c2VsZWN0ZWRUYWdBbGJ1bXMoKTsKICAgICBjb25zdCBRU3RyaW5nIGljb24gPSBRTGF0aW4xU3Ry
aW5nKCJ0YWciKTsKIAotICAgIGZvciAoUUxpc3Q8QWxidW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBzZWxlY3RlZC5jb25zdEJlZ2luKCk7IGl0ICE9IHNlbGVjdGVkLmNvbnN0RW5kKCk7ICsraXQg
KQorICAgIGZvciAoUUxpc3Q8VEFsYnVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2VsZWN0ZWQu
Y29uc3RCZWdpbigpOyBpdCAhPSBzZWxlY3RlZC5jb25zdEVuZCgpOyArK2l0ICkKICAgICB7Ci0g
ICAgICAgIFRBbGJ1bSogY29uc3QgdGFnID0gZHluYW1pY19jYXN0PFRBbGJ1bSo+KCppdCk7Cisg
ICAgICAgIFRBbGJ1bSogY29uc3QgdGFnID0gKml0OwogCiAgICAgICAgIGlmICh0YWcpCiAgICAg
ICAgIHsKZGlmZiAtLWdpdCBhL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9maW5kZHVwbGljYXRlc3Zp
ZXcuY3BwIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRkdXBsaWNhdGVzdmlldy5jcHAKaW5k
ZXggNmIxZGQyOWNmYi4uNjA4NzgxYTljOCAxMDA2NDQKLS0tIGEvdXRpbGl0aWVzL2Z1enp5c2Vh
cmNoL2ZpbmRkdXBsaWNhdGVzdmlldy5jcHAKKysrIGIvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2Zp
bmRkdXBsaWNhdGVzdmlldy5jcHAKQEAgLTM3MiwxNyArMzcyLDYgQEAgdm9pZCBGaW5kRHVwbGlj
YXRlc1ZpZXc6OnNsb3REdXBsaWNhdGVzQWxidW1BY3RpdmVkKCkKICAgICBpZiAoIWFsYnVtcy5l
bXB0eSgpKQogICAgIHsKICAgICAgICAgQWxidW1NYW5hZ2VyOjppbnN0YW5jZSgpLT5zZXRDdXJy
ZW50QWxidW1zKFFMaXN0PEFsYnVtKj4oKSA8PCBhbGJ1bXMpOwotICAgICAgICAvLyBTZXQgdGhl
IGltYWdlIGlkIG9mIHRoZSBmaXJzdCBzZWxlY3RlZCBhbGJ1bSBhcyByZWZlcmVuY2UuCi0gICAg
ICAgIEFwcGxpY2F0aW9uU2V0dGluZ3MgKiBzZXR0aW5ncyA9IEFwcGxpY2F0aW9uU2V0dGluZ3M6
Omluc3RhbmNlKCk7Ci0gICAgICAgIGlmIChzZXR0aW5ncykKLSAgICAgICAgewotICAgICAgICAg
ICAgYm9vbCBvazsKLSAgICAgICAgICAgIHFsb25nbG9uZyBpbWFnZWlkID0gYWxidW1zLmZpcnN0
KCktPnRpdGxlKCkudG9Mb25nTG9uZygmb2spOwotICAgICAgICAgICAgaWYgKG9rKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHNldHRpbmdzLT5zZXRDdXJyZW50RnV6enlTZWFyY2hS
ZWZlcmVuY2VJbWFnZShpbWFnZWlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0K
IH0KIApAQCAtMzk4LDcgKzM4Nyw3IEBAIHZvaWQgRmluZER1cGxpY2F0ZXNWaWV3OjpzbG90VXBk
YXRlRmluZ2VyUHJpbnRzKCkKICAgICB0b29sLT5zdGFydCgpOwogfQogCi12b2lkIEZpbmREdXBs
aWNhdGVzVmlldzo6c2xvdFNldFNlbGVjdGVkQWxidW0oQWxidW0qIGFsYnVtKQordm9pZCBGaW5k
RHVwbGljYXRlc1ZpZXc6OnNsb3RTZXRTZWxlY3RlZEFsYnVtKFBBbGJ1bSogYWxidW0pCiB7CiAg
ICAgaWYgKCFhbGJ1bSkKICAgICB7CkBAIC00MDYsMjAgKzM5NSwzMSBAQCB2b2lkIEZpbmREdXBs
aWNhdGVzVmlldzo6c2xvdFNldFNlbGVjdGVkQWxidW0oQWxidW0qIGFsYnVtKQogICAgIH0KIAog
ICAgIHJlc2V0QWxidW1zQW5kVGFncygpOworICAgIC8vIEBPREQgOiBXaHkgaXMgc2luZ2xldG9u
IHNldCB0byB0cnVlPyByZXNldEFsYnVtc0FuZFRhZ3MgYWxyZWFkeSBjbGVhcnMgdGhlIHNlbGVj
dGlvbi4KICAgICBkLT5hbGJ1bVNlbGVjdG9ycy0+c2V0UEFsYnVtU2VsZWN0ZWQoYWxidW0sIHRy
dWUpOwogICAgIGQtPmFsYnVtU2VsZWN0b3JzLT5zZXRUeXBlU2VsZWN0aW9uKEFsYnVtU2VsZWN0
b3JzOjpBbGJ1bVR5cGU6OlBoeXNBbGJ1bSk7CiAgICAgc2xvdENoZWNrRm9yVmFsaWRTZXR0aW5n
cygpOwogfQogCi12b2lkIEZpbmREdXBsaWNhdGVzVmlldzo6c2xvdFNldFNlbGVjdGVkVGFnKEFs
YnVtKiBhbGJ1bSkKK3ZvaWQgRmluZER1cGxpY2F0ZXNWaWV3OjpzbG90U2V0U2VsZWN0ZWRBbGJ1
bXMoUUxpc3Q8UEFsYnVtKj4gYWxidW1zKQogewotICAgIGlmICghYWxidW0pCisgICAgLy8gQE9E
RCA6IFdoeSBpcyBzaW5nbGV0b24gc2V0IHRvIHRydWU/IHJlc2V0QWxidW1zQW5kVGFncyBhbHJl
YWR5IGNsZWFycyB0aGUgc2VsZWN0aW9uLgorICAgIHJlc2V0QWxidW1zQW5kVGFncygpOworICAg
IGZvcmVhY2goUEFsYnVtKiBhbGJ1bSwgYWxidW1zKQogICAgIHsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICBkLT5hbGJ1bVNlbGVjdG9ycy0+c2V0UEFsYnVtU2VsZWN0ZWQoYWxidW0sIGZhbHNl
KTsKICAgICB9CisgICAgZC0+YWxidW1TZWxlY3RvcnMtPnNldFR5cGVTZWxlY3Rpb24oQWxidW1T
ZWxlY3RvcnM6OkFsYnVtVHlwZTo6UGh5c0FsYnVtKTsKKyAgICBzbG90Q2hlY2tGb3JWYWxpZFNl
dHRpbmdzKCk7Cit9CiAKK3ZvaWQgRmluZER1cGxpY2F0ZXNWaWV3OjpzbG90U2V0U2VsZWN0ZWRB
bGJ1bXMoUUxpc3Q8VEFsYnVtKj4gYWxidW1zKQorewogICAgIHJlc2V0QWxidW1zQW5kVGFncygp
OwotICAgIGQtPmFsYnVtU2VsZWN0b3JzLT5zZXRUQWxidW1TZWxlY3RlZChhbGJ1bSwgdHJ1ZSk7
CisgICAgZm9yZWFjaChUQWxidW0qIGFsYnVtLCBhbGJ1bXMpCisgICAgeworICAgICAgICBkLT5h
bGJ1bVNlbGVjdG9ycy0+c2V0VEFsYnVtU2VsZWN0ZWQoYWxidW0sIGZhbHNlKTsKKyAgICB9CiAg
ICAgZC0+YWxidW1TZWxlY3RvcnMtPnNldFR5cGVTZWxlY3Rpb24oQWxidW1TZWxlY3RvcnM6OkFs
YnVtVHlwZTo6VGFnc0FsYnVtKTsKICAgICBzbG90Q2hlY2tGb3JWYWxpZFNldHRpbmdzKCk7CiB9
CmRpZmYgLS1naXQgYS91dGlsaXRpZXMvZnV6enlzZWFyY2gvZmluZGR1cGxpY2F0ZXN2aWV3Lmgg
Yi91dGlsaXRpZXMvZnV6enlzZWFyY2gvZmluZGR1cGxpY2F0ZXN2aWV3LmgKaW5kZXggMTM3OWFi
YmUxMy4uYTk0OGJjZDg0MyAxMDA2NDQKLS0tIGEvdXRpbGl0aWVzL2Z1enp5c2VhcmNoL2ZpbmRk
dXBsaWNhdGVzdmlldy5oCisrKyBiL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9maW5kZHVwbGljYXRl
c3ZpZXcuaApAQCAtMzYsNiArMzYsOCBAQCBuYW1lc3BhY2UgRGlnaWthbQogewogY2xhc3MgQWxi
dW07CiBjbGFzcyBTQWxidW07CitjbGFzcyBQQWxidW07CitjbGFzcyBUQWxidW07CiAKIGNsYXNz
IEZpbmREdXBsaWNhdGVzVmlldyA6IHB1YmxpYyBRV2lkZ2V0CiB7CkBAIC01MCw4ICs1Miw5IEBA
IHB1YmxpYzoKIAogcHVibGljIFFfU0xPVFM6CiAKLSAgICB2b2lkIHNsb3RTZXRTZWxlY3RlZEFs
YnVtKEFsYnVtKik7Ci0gICAgdm9pZCBzbG90U2V0U2VsZWN0ZWRUYWcoQWxidW0qKTsKKyAgICB2
b2lkIHNsb3RTZXRTZWxlY3RlZEFsYnVtKFBBbGJ1bSogYWxidW0pOworICAgIHZvaWQgc2xvdFNl
dFNlbGVjdGVkQWxidW1zKFFMaXN0PFBBbGJ1bSo+IGFsYnVtcyk7CisgICAgdm9pZCBzbG90U2V0
U2VsZWN0ZWRBbGJ1bXMoUUxpc3Q8VEFsYnVtKj4gYWxidW1zKTsKIAogcHJpdmF0ZSBRX1NMT1RT
OgogCmRpZmYgLS1naXQgYS91dGlsaXRpZXMvZnV6enlzZWFyY2gvZnV6enlzZWFyY2h2aWV3LmNw
cCBiL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9mdXp6eXNlYXJjaHZpZXcuY3BwCmluZGV4IDAyNGIz
MmZkMjEuLjMzYzZiMjhhNjMgMTAwNjQ0Ci0tLSBhL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9mdXp6
eXNlYXJjaHZpZXcuY3BwCisrKyBiL3V0aWxpdGllcy9mdXp6eXNlYXJjaC9mdXp6eXNlYXJjaHZp
ZXcuY3BwCkBAIC01NTgsMTggKzU1OCwzMSBAQCB2b2lkIEZ1enp5U2VhcmNoVmlldzo6c2V0Q3Vy
cmVudEFsYnVtKFNBbGJ1bSogY29uc3QgYWxidW0pCiAgICAgZC0+c2VhcmNoVHJlZVZpZXctPnNl
dEN1cnJlbnRBbGJ1bXMoUUxpc3Q8QWxidW0qPigpIDw8IGFsYnVtKTsKIH0KIAotdm9pZCBGdXp6
eVNlYXJjaFZpZXc6Om5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGNvbnN0IGFsYnVtKQordm9p
ZCBGdXp6eVNlYXJjaFZpZXc6Om5ld0R1cGxpY2F0ZXNTZWFyY2goUEFsYnVtKiBjb25zdCBhbGJ1
bSkKIHsKICAgICBpZiAoYWxidW0pCiAgICAgewotICAgICAgICBpZiAoYWxidW0tPnR5cGUoKSA9
PSBBbGJ1bTo6UEhZU0lDQUwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGQtPmZpbmREdXBsaWNh
dGVzUGFuZWwtPnNsb3RTZXRTZWxlY3RlZEFsYnVtKGFsYnVtKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChhbGJ1bS0+dHlwZSgpID09IEFsYnVtOjpUQUcpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGQtPmZpbmREdXBsaWNhdGVzUGFuZWwtPnNsb3RTZXRTZWxlY3RlZFRhZyhhbGJ1bSk7
Ci0gICAgICAgIH0KKyAgICAgICAgZC0+ZmluZER1cGxpY2F0ZXNQYW5lbC0+c2xvdFNldFNlbGVj
dGVkQWxidW0oYWxidW0pOworICAgIH0KKworICAgIGQtPnRhYldpZGdldC0+c2V0Q3VycmVudElu
ZGV4KFByaXZhdGU6OkRVUExJQ0FURVMpOworfQorCit2b2lkIEZ1enp5U2VhcmNoVmlldzo6bmV3
RHVwbGljYXRlc1NlYXJjaChRTGlzdDxQQWxidW0qPiBjb25zdCBhbGJ1bXMpCit7CisgICAgaWYg
KCFhbGJ1bXMuaXNFbXB0eSgpKQorICAgIHsKKyAgICAgICAgZC0+ZmluZER1cGxpY2F0ZXNQYW5l
bC0+c2xvdFNldFNlbGVjdGVkQWxidW1zKGFsYnVtcyk7CisgICAgfQorCisgICAgZC0+dGFiV2lk
Z2V0LT5zZXRDdXJyZW50SW5kZXgoUHJpdmF0ZTo6RFVQTElDQVRFUyk7Cit9CisKK3ZvaWQgRnV6
enlTZWFyY2hWaWV3OjpuZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFRBbGJ1bSo+IGNvbnN0IGFs
YnVtcykKK3sKKyAgICBpZiAoIWFsYnVtcy5pc0VtcHR5KCkpCisgICAgeworICAgICAgICBkLT5m
aW5kRHVwbGljYXRlc1BhbmVsLT5zbG90U2V0U2VsZWN0ZWRBbGJ1bXMoYWxidW1zKTsKICAgICB9
CiAKICAgICBkLT50YWJXaWRnZXQtPnNldEN1cnJlbnRJbmRleChQcml2YXRlOjpEVVBMSUNBVEVT
KTsKQEAgLTk0MCwxMSArOTUzLDYgQEAgdm9pZCBGdXp6eVNlYXJjaFZpZXc6OmRyb3BFdmVudChR
RHJvcEV2ZW50KiBlKQogCiAgICAgICAgICAgICAgICAgICAgIEFsYnVtTWFuYWdlcjo6aW5zdGFu
Y2UoKS0+c2V0Q3VycmVudEFsYnVtcyhRTGlzdDxBbGJ1bSo+KCkpOwogICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nIGhhYXJUaXRsZSA9IFNBbGJ1bTo6Z2V0VGVtcG9yYXJ5SGFhclRpdGxlKERh
dGFiYXNlU2VhcmNoOjpIYWFySW1hZ2VTZWFyY2gpOwotICAgICAgICAgICAgICAgICAgICBBcHBs
aWNhdGlvblNldHRpbmdzICogc2V0dGluZ3MgPSBBcHBsaWNhdGlvblNldHRpbmdzOjppbnN0YW5j
ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLT5zZXRDdXJyZW50RnV6enlT
ZWFyY2hSZWZlcmVuY2VJbWFnZSgtMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgZC0+aW1hZ2VTQWxidW0gPSBkLT5zZWFyY2hNb2RpZmljYXRpb25IZWxwZXIt
PmNyZWF0ZUZ1enp5U2VhcmNoRnJvbURyb3BwZWQoaGFhclRpdGxlLCBwYXRoLCBkLT5sZXZlbElt
YWdlLT52YWx1ZSgpIC8gMTAwLjAsIGQtPm1heExldmVsSW1hZ2UtPnZhbHVlKCkgLyAxMDAuMCwg
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGQtPnNlYXJjaFRyZWVWaWV3LT5zZXRDdXJyZW50
QWxidW1zKFFMaXN0PEFsYnVtKj4oKSA8PCBkLT5pbWFnZVNBbGJ1bSk7CiAgICAgICAgICAgICAg
ICAgICAgIGQtPmxhYmVsRmlsZS0+c2V0QWRqdXN0ZWRUZXh0KHVybHMuZmlyc3QoKS5maWxlTmFt
ZSgpKTsKQEAgLTEwMjcsMTcgKzEwMzUsMTEgQEAgdm9pZCBGdXp6eVNlYXJjaFZpZXc6OnNldEN1
cnJlbnRJbWFnZShxbG9uZ2xvbmcgaW1hZ2VpZCkKIAogdm9pZCBGdXp6eVNlYXJjaFZpZXc6OnNl
dEN1cnJlbnRJbWFnZShjb25zdCBJbWFnZUluZm8mIGluZm8pCiB7Ci0gICAgQXBwbGljYXRpb25T
ZXR0aW5ncyAqIHNldHRpbmdzID0gQXBwbGljYXRpb25TZXR0aW5nczo6aW5zdGFuY2UoKTsKLSAg
ICBpZiAoc2V0dGluZ3MpCi0gICAgewotICAgICAgICBzZXR0aW5ncy0+c2V0Q3VycmVudEZ1enp5
U2VhcmNoUmVmZXJlbmNlSW1hZ2UoaW5mby5pZCgpKTsKLSAgICB9CiAgICAgZC0+aW1hZ2VJbmZv
ID0gaW5mbzsKICAgICBkLT5pbWFnZVVybCA9IGluZm8uZmlsZVVybCgpOwogICAgIGQtPmxhYmVs
RmlsZS0+c2V0QWRqdXN0ZWRUZXh0KGQtPmltYWdlSW5mby5uYW1lKCkpOwogICAgIGQtPmxhYmVs
Rm9sZGVyLT5zZXRBZGp1c3RlZFRleHQoZC0+aW1hZ2VJbmZvLmZpbGVVcmwoKS5hZGp1c3RlZChR
VXJsOjpSZW1vdmVGaWxlbmFtZSkudG9Mb2NhbEZpbGUoKSk7CiAgICAgZC0+dGh1bWJMb2FkVGhy
ZWFkLT5maW5kKGQtPmltYWdlSW5mby50aHVtYm5haWxJZGVudGlmaWVyKCkpOwotICAgIGVtaXQg
c2lnbmFsUmVmZXJlbmNlSW1hZ2VTZWxlY3RlZCgpOwogfQogCiB2b2lkIEZ1enp5U2VhcmNoVmll
dzo6c2V0SW1hZ2VJbmZvKGNvbnN0IEltYWdlSW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL3V0aWxp
dGllcy9mdXp6eXNlYXJjaC9mdXp6eXNlYXJjaHZpZXcuaCBiL3V0aWxpdGllcy9mdXp6eXNlYXJj
aC9mdXp6eXNlYXJjaHZpZXcuaAppbmRleCBhMGNhMDU3ZTRjLi4xMjU1YTViZTM4IDEwMDY0NAot
LS0gYS91dGlsaXRpZXMvZnV6enlzZWFyY2gvZnV6enlzZWFyY2h2aWV3LmgKKysrIGIvdXRpbGl0
aWVzL2Z1enp5c2VhcmNoL2Z1enp5c2VhcmNodmlldy5oCkBAIC00NSw2ICs0NSw4IEBAIGNsYXNz
IEZ1enp5U2VhcmNoRm9sZGVyVmlldzsKIGNsYXNzIEltYWdlSW5mbzsKIGNsYXNzIExvYWRpbmdE
ZXNjcmlwdGlvbjsKIGNsYXNzIFNBbGJ1bTsKK2NsYXNzIFBBbGJ1bTsKK2NsYXNzIFRBbGJ1bTsK
IGNsYXNzIFNlYXJjaE1vZGVsOwogY2xhc3MgU2VhcmNoTW9kaWZpY2F0aW9uSGVscGVyOwogY2xh
c3MgU2VhcmNoVGV4dEJhcjsKQEAgLTY2LDE1ICs2OCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBY3RpdmUoYm9vbCB2YWwpOwogICAgIHZvaWQgc2V0SW1hZ2VJbmZvKGNvbnN0IEltYWdlSW5m
byYgaW5mbyk7CiAKLSAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2goQWxidW0qIGNvbnN0KTsK
KyAgICB2b2lkIG5ld0R1cGxpY2F0ZXNTZWFyY2goUEFsYnVtKiBjb25zdCk7CisgICAgdm9pZCBu
ZXdEdXBsaWNhdGVzU2VhcmNoKFFMaXN0PFBBbGJ1bSo+IGNvbnN0KTsKKyAgICB2b2lkIG5ld0R1
cGxpY2F0ZXNTZWFyY2goUUxpc3Q8VEFsYnVtKj4gY29uc3QpOwogCiAgICAgdmlydHVhbCB2b2lk
IHNldENvbmZpZ0dyb3VwKGNvbnN0IEtDb25maWdHcm91cCYgZ3JvdXApOwogICAgIHZvaWQgZG9M
b2FkU3RhdGUoKTsKICAgICB2b2lkIGRvU2F2ZVN0YXRlKCk7CiAKLVFfU0lHTkFMUzoKLSAgICB2
b2lkIHNpZ25hbFJlZmVyZW5jZUltYWdlU2VsZWN0ZWQoKTsKLQogcHJvdGVjdGVkOgogCiAgICAg
dm9pZCBkcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZlbnQqIGUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>