<?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>152761</bug_id>
          
          <creation_ts>2007-11-23 09:39:45 +0000</creation_ts>
          <short_desc>No session management in KDE 4 - Sessions / directory / tabs not restored on login</short_desc>
          <delta_ts>2009-05-12 10:37:34 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>2</classification_id>
          <classification>Applications</classification>
          <product>konsole</product>
          <component>general</component>
          <version>unspecified</version>
          <rep_platform>unspecified</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>HI</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Will Stephenson">wstephenson</reporter>
          <assigned_to name="Konsole Bugs">konsole-bugs-null</assigned_to>
          <cc>alllg</cc>
    
    <cc>apaku</cc>
    
    <cc>bluelightning</cc>
    
    <cc>chemobejk</cc>
    
    <cc>dc</cc>
    
    <cc>dcmores</cc>
    
    <cc>fmdf66</cc>
    
    <cc>ftronci</cc>
    
    <cc>funtoos</cc>
    
    <cc>gentryx</cc>
    
    <cc>jipumarino</cc>
    
    <cc>jospoortvliet</cc>
    
    <cc>jquelin</cc>
    
    <cc>kevin.kofler</cc>
    
    <cc>killerbot</cc>
    
    <cc>k_b0000</cc>
    
    <cc>l.lunak</cc>
    
    <cc>mailinglist</cc>
    
    <cc>mike</cc>
    
    <cc>PoMec</cc>
    
    <cc>rdieter</cc>
    
    <cc>richih-kde</cc>
    
    <cc>robertknight</cc>
    
    <cc>solstice.dhiver</cc>
    
    <cc>sven.burmeister</cc>
    
    <cc>sz8lnp</cc>
    
    <cc>yez</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>557495</commentid>
    <comment_count>0</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2007-11-23 09:39:48 +0000</bug_when>
    <thetext>Version:            (using KDE Devel)
OS:                Linux

Tabs don&apos;t appear to be session managed any more.  A session file for a KDE3 konsole shows a lot more state than a KDE4 konsole.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562040</commentid>
    <comment_count>1</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2007-12-11 05:14:44 +0000</bug_when>
    <thetext>Confirmed.  At present I do not plan to implement more sophisticated session management until KDE 4.1

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562042</commentid>
    <comment_count>2</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2007-12-11 05:16:44 +0000</bug_when>
    <thetext>*** Bug 153489 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563332</commentid>
    <comment_count>3</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2007-12-14 21:25:37 +0000</bug_when>
    <thetext>*** Bug 154047 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574100</commentid>
    <comment_count>4</comment_count>
    <who name="Lubos Lunak">l.lunak</who>
    <bug_when>2008-01-22 19:40:54 +0000</bug_when>
    <thetext>While you&apos;ll be at fixing session management, KUniqueApplication::newInstance() override will also need some work (see its docs).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574110</commentid>
    <comment_count>5</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-01-22 19:57:35 +0000</bug_when>
    <thetext>&gt; KUniqueApplication::newInstance() override will also need some work (see its docs)

What is wrong and/or missing?  It isn&apos;t obvious to me from looking at the API documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574731</commentid>
    <comment_count>6</comment_count>
    <who name="Lubos Lunak">l.lunak</who>
    <bug_when>2008-01-24 14:52:38 +0000</bug_when>
    <thetext>I committed changes for docs for KUniqueApplication::newInstance() in trunk. Konsole&apos;s newInstance() doesn&apos;t handle starting from restored session, and also the case when you reuse a window (new tab) needs to act like KUniqueApplication::newInstance().

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576758</commentid>
    <comment_count>7</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-01-31 00:18:42 +0000</bug_when>
    <thetext>*** Bug 156995 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579745</commentid>
    <comment_count>8</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-02-12 00:43:26 +0000</bug_when>
    <thetext>*** Bug 157688 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585729</commentid>
    <comment_count>9</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-03-10 03:20:51 +0000</bug_when>
    <thetext>*** Bug 159034 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604051</commentid>
    <comment_count>10</comment_count>
    <who name="Pino Toscano">pino</who>
    <bug_when>2008-05-25 11:16:39 +0000</bug_when>
    <thetext>*** Bug 162589 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605210</commentid>
    <comment_count>11</comment_count>
    <who name="jos poortvliet">jospoortvliet</who>
    <bug_when>2008-05-30 07:41:37 +0000</bug_when>
    <thetext>Any updates on this? Won&apos;t make it into 4.1 I suppose?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605474</commentid>
    <comment_count>12</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-05-31 02:26:47 +0000</bug_when>
    <thetext>&gt; Any updates on this? Won&apos;t make it into 4.1 I suppose? 

No changes have landed yet.  Still scheduled for 4.1.  </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605511</commentid>
    <comment_count>13</comment_count>
    <who name="jos poortvliet">jospoortvliet</who>
    <bug_when>2008-05-31 09:42:33 +0000</bug_when>
    <thetext>Still scheduled? So good chance it&apos;ll get done? That&apos;s great news!

Konsole really became a lot better since you started working on it, there are just a few minor annoyances left for it to become perfect.

Maybe you should delay fixing them, as you won&apos;t have much to do for 4.2 - or do you have some amazing new things in mind? hehe :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627472</commentid>
    <comment_count>14</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-07-21 14:37:52 +0000</bug_when>
    <thetext>*** Bug 167129 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630266</commentid>
    <comment_count>15</comment_count>
    <who name="Pino Toscano">pino</who>
    <bug_when>2008-07-29 00:10:35 +0000</bug_when>
    <thetext>*** Bug 167628 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631436</commentid>
    <comment_count>16</comment_count>
    <who name="Ciprian">reg</who>
    <bug_when>2008-07-31 16:14:13 +0000</bug_when>
    <thetext>4.1... No session management?! :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631649</commentid>
    <comment_count>17</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-07-31 22:59:28 +0000</bug_when>
    <thetext>Yup, 4.1 version still doesn&apos;t support session management. Bummer :-(

Even the workaround of using &quot;konsole&quot; from a script directly, as &quot;konsole --new-tab&quot; only seems to open tabs in the initial instance. This is quite annoying and a show stopper for moving to KDE4 on my main workstation, as my session has 4 konsole windows with a total of 20 tabs/working directories in them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635169</commentid>
    <comment_count>18</comment_count>
    <who name="Richard Hartmann">richih-kde</who>
    <bug_when>2008-08-07 15:06:57 +0000</bug_when>
    <thetext>Just wanted to report the same issue for Konsole 2.1.

Same as Stefan Becker, this single issue might force me to go back to KDE3, which I don&apos;t want to do.. 

Is there any ETA on this? How much work are we talking about?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636255</commentid>
    <comment_count>19</comment_count>
    <who name="devsk">funtoos</who>
    <bug_when>2008-08-11 12:21:48 +0000</bug_when>
    <thetext>This is a showstopper for me as well! A kde session restart/crash, for example, will need me to open at least 10 new windows and multiple tabs in them in my development environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639490</commentid>
    <comment_count>20</comment_count>
    <who name="devsk">funtoos</who>
    <bug_when>2008-08-20 17:34:25 +0000</bug_when>
    <thetext>Any idea if this is going to be in 4.1.1? If someone can even suggest a workaround (apart from open 10 windows and 20 tabs manually...:-)) for the time being, I will be happy!

How much are we talking about here to fix this thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641148</commentid>
    <comment_count>21</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-08-26 12:36:39 +0000</bug_when>
    <thetext>&gt; How much are we talking about here to fix this thing?

In truth, not a lot of work to get KDE 3.5.x functionality back again.  I did plan to do this for KDE 4.1 but it didn&apos;t happen because I was originally hoping to introduce improved restore of sessions since I always considered that just restoring the program and path was almost useless.  Evidently a lot of users don&apos;t feel the same way.

But please don&apos;t wait for it to happen.  The Konsole code is fairly clean and this would be a good job for a new developer.  If you haven&apos;t worked on KDE code before and you&apos;d like to make a contribution then please get in touch.  Seasoned developers are also welcome to apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641689</commentid>
    <comment_count>22</comment_count>
    <who name="devsk">funtoos</who>
    <bug_when>2008-08-28 06:41:13 +0000</bug_when>
    <thetext>If its not that much work, I think you should plan to add the basic restore like it was in 3.5 yourself and leave the more advanced restore to the new dev. This is one of those features which is basically pulling me back on KDE4.1. I would chip in myself but I am swamped at this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642297</commentid>
    <comment_count>23</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-08-30 22:27:22 +0000</bug_when>
    <thetext>*** Bug 169982 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644495</commentid>
    <comment_count>24</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-07 17:57:46 +0000</bug_when>
    <thetext>I finally sat down and had a look at how to implement this during the weekend. I&apos;ve got the basic session management working, i.e. konsole now honors the --session option and restores the windows with position &amp; size stored in the session file. Not much, I know, but it is a starting point.

I&apos;ll contact Robert about the modalities how we can get this to the KDE repository once it is ready.


One thing that has cost me a lot of time, pulled hairs and head-against-the-wall-banging: there seems to be a major bug in the KDE 4.1 session manager. It doesn&apos;t write restart information to $HOME/.kde/share/config/ksmserverrc for all applications, i.e. when the session gets restored at next startup some stuff will be missing. The session files are generated correctly for all applications though.

I have not been able to pinpoint this to certain applications. Basically it looks random what applications are written to ksmserverrc. Or there is some problem with the session management handling, e.g. the session information is stored but the applications already exit before ksmserverrc is generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644909</commentid>
    <comment_count>25</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-09 09:37:17 +0000</bug_when>
    <thetext>BTW: if anybody is interested in my changes you can grab them here:

  git clone http://chemobejk.dyndns.org/git/konsole/.git

Session state store should be complete now. Next on the agenda is to successfully restore profiles, tabs &amp; directories from the stored information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644931</commentid>
    <comment_count>26</comment_count>
    <who name="jos poortvliet">jospoortvliet</who>
    <bug_when>2008-09-09 11:05:03 +0000</bug_when>
    <thetext>I&apos;m not that much into Git or build-it-yourself, but I really appreciate what you&apos;re doing, Stefan! Looking forward to seeing this code in trunk (which I DO follow).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645046</commentid>
    <comment_count>27</comment_count>
      <attachid>27341</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-09 19:32:01 +0000</bug_when>
    <thetext>Created attachment 27341
Implement basic session management for KDE4 konsole

Success! Have fun :-)

From 93b370a0c6e1d15deb3b1db39513fcb4af2c7c2a Mon Sep 17 00:00:00 2001
From: Stefan Becker &lt;stefan.becker@nokia.com&gt;
Date: Tue, 9 Sep 2008 19:45:52 +0300
Subject: [PATCH] Attach sessions to views during session restore

This is the first functional version: windows, tabs, tab texts and working
directories are now saved to &amp; restored from konsole session file. Yeah!!!

Note: For some reason profile restore doesn&apos;t seem to work correctly yet. All
      restored sessions end up with the default profile :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645095</commentid>
    <comment_count>28</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-09-09 22:19:37 +0000</bug_when>
    <thetext>Hi Stefan,

Thanks.  I&apos;ll try and review it tomorrow evening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645144</commentid>
    <comment_count>29</comment_count>
    <who name="Richard Hartmann">richih-kde</who>
    <bug_when>2008-09-10 03:06:13 +0000</bug_when>
    <thetext>Assuming the quirks can be ironed out soonish, will this make it into 4.1.2 or will it wait for 4.2?

Thanks Stefan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645202</commentid>
    <comment_count>30</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-09-10 11:11:45 +0000</bug_when>
    <thetext>Stefan, maybe you&apos;d be interested in tackling the indirectly related bug #156919 as well while you&apos;re working on this general topic? It&apos;d allow KPart-using apps to serialize and restore their Konsoles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645382</commentid>
    <comment_count>31</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-10 21:50:36 +0000</bug_when>
    <thetext>Actually it seems profile save &amp; restore is OK, now that I tested it a little bit.

But konsole&apos;s restoring of profiles at session startup seems to have some problems:
 - profiles that are currently not used by any session show up twice in the &quot;Manage Profile&quot; dialog
 - the &quot;Show in Menu&quot; status is lost
 - the &quot;Set as Default&quot; status is lost

Or am I seeing ghosts here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645385</commentid>
    <comment_count>32</comment_count>
    <who name="devsk">funtoos</who>
    <bug_when>2008-09-10 21:56:05 +0000</bug_when>
    <thetext>(In reply to comment #31)
&gt; Actually it seems profile save &amp; restore is OK, now that I tested it a little
&gt; bit.
&gt; 
&gt; But konsole&apos;s restoring of profiles at session startup seems to have some
&gt; problems:
&gt;  - profiles that are currently not used by any session show up twice in the
&gt; &quot;Manage Profile&quot; dialog
&gt;  - the &quot;Show in Menu&quot; status is lost
&gt;  - the &quot;Set as Default&quot; status is lost
&gt; 
&gt; Or am I seeing ghosts here?
&gt; 

I have seen that happen with 4.1.0 code. It was eventually fixed in SVN, although I don&apos;t remember when.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645416</commentid>
    <comment_count>33</comment_count>
      <attachid>27358</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-10 23:58:32 +0000</bug_when>
    <thetext>Created attachment 27358
Proposed patch for upstream merge

From d5579fdf8dab0d40c45ec9dbca071be9096955e4 Mon Sep 17 00:00:00 2001
From: Stefan Becker &lt;stefan.becker@nokia.com&gt;
Date: Thu, 11 Sep 2008 00:54:11 +0300
Subject: [PATCH] Restore active tab from session file

... and we also want to run() a session only once :-)

With this commit bug #152761 should be fixed. Please review &amp; merge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645421</commentid>
    <comment_count>34</comment_count>
      <attachid>27359</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-11 00:23:48 +0000</bug_when>
    <thetext>Created attachment 27359
Proposed patch for upstream merge

From e764e8cd43e5a143406a0f5e7c6201004e5482c4 Mon Sep 17 00:00:00 2001
From: Stefan Becker &lt;stefan.becker@nokia.com&gt;
Date: Thu, 11 Sep 2008 01:21:50 +0300
Subject: [PATCH] Use tab count to determine active tab

Dooohhh... that&apos;s much easier and always restores the correct tab :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645518</commentid>
    <comment_count>35</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-09-11 12:55:11 +0000</bug_when>
    <thetext>*** Bug 170221 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645876</commentid>
    <comment_count>36</comment_count>
      <attachid>27386</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-12 21:39:27 +0000</bug_when>
    <thetext>Created attachment 27386
Proposed patch for upstream merge

Rebased to kdebase-4.1.1.
Merged ProcessInfo refactoring from bug #156919 work.

From 07f731e3817fab7fa040cbc08ce262cda42791aa Mon Sep 17 00:00:00 2001
From: Stefan Becker &lt;stefan.becker@nokia.com&gt;
Date: Fri, 12 Sep 2008 22:34:16 +0300
Subject: [PATCH] Take advantage of the ProcessInfo refactoring in Session::saveS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646497</commentid>
    <comment_count>37</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-09-15 01:17:00 +0000</bug_when>
    <thetext>Hi Stefan,

Comments on the session management part of the patch:

Functional comments on the patch:

+void MainWindow::saveGlobalProperties(KConfig* config)
+{
+    SessionManager::instance()-&gt;saveSessions(config);
+}
+
+void MainWindow::readGlobalProperties(KConfig* config)
+{
+    SessionManager::instance()-&gt;restoreSessions(config);
+}
+

An application may have multiple main windows, each window containing multiple views (TerminalDisplay instances).  Each view is associated with only one session but each session may be associated with multiple views.  This code would load all the sessions multiple times, once for each window restored.

I suggest that we simplify things to begin with by only trying to restore the first view for each session.  The process to save would be:

- Save all sessions
- For each window
-   -&gt; Save the window properties (geometry etc.) (Use KMainWindow base class for this)
-   -&gt; Save the association between window and session in order.  Where a session has multiple views consider only the first one.

To load:

- Load all sessions (but do not run them)
- For each window
-   -&gt; Load the window properties (use KMainWindow base class for this)
-   -&gt; Create one view for each session in that window, using the saved order
- Run all sessions (using session-&gt;run() )

+	// this should not happen
+	Q_ASSERT(id == 0);
+	return 0;

This assert is not needed, you have one at the start of the function with the opposite condition.  I would rewrite this sort of loop with just one exit point:

Session* foundSession = 0;
foreach(Session* session,sessions)
  if (session-&gt;sessionId() == id)
    foundSession = session;
Q_ASSERT(foundSession);
return foundSessionl


Stylistic comments:

Please try to avoid mixing formatting and functional changes in the same patch.  It makes it more difficult to examine the more important functional changes.

+    // second: all other sessions, in random order
+    // we don&apos;t want to have sessions restored that are not connected...

Please do not end comments with &apos;...&apos;.  It implies, to me, that the comment is only telling the reader part of what they need to know and leaving the rest as guesswork.  

+    static bool first = true;

+    SessionManager *mgr = SessionManager::instance();
+    QString profile = group.readPathEntry(&quot;Default Profile&quot;, QString());
+    Profile::Ptr pp = mgr-&gt;defaultProfile();
+    if (!profile.isEmpty()) pp = mgr-&gt;loadProfile(profile);

Use of abbreviations in variable names should generally be avoided.  They can lead to misunderstandings and consequently bugs in longer functions.  Very common abbreviations (ptr,src,dest,len,pos) may be used.

+	// session management
+	virtual void saveProperties(KConfigGroup&amp; group);
+	virtual void readProperties(const KConfigGroup&amp; group);
+	virtual void saveGlobalProperties(KConfig* config);
+	virtual void readGlobalProperties(KConfig* config);

When a group of virtual functions are re-implementations from a base class I find it helpful if there is a comment at the top making that clear.  In this case just delete the &apos;session management&apos; comment at the line above to do that. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646529</commentid>
    <comment_count>38</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-15 07:00:20 +0000</bug_when>
    <thetext>Hi Robert,

(In reply to comment #37)
&gt; 
&gt; An application may have multiple main windows, each window containing multiple
&gt; views (TerminalDisplay instances).  Each view is associated with only one
&gt; session but each session may be associated with multiple views.  This code
&gt; would load all the sessions multiple times, once for each window restored.

No, it doesn&apos;t. Quote from KMainWindow::saveGlobalProperties() documentation:

  &quot;This function is similar to saveProperties() but is only called for the very first main window, regardless how many main window are open.&quot;

Trust me, *THIS* statement I verified :-)


&gt; +       // this should not happen
&gt; +       Q_ASSERT(id == 0);
&gt; +       return 0;
&gt; 
&gt; This assert is not needed, you have one at the start of the function with the
&gt; opposite condition.  I would rewrite this sort of loop with just one exit
&gt; point:

Actually the assert is correct, but you are right that it is confusing.


&gt; Please try to avoid mixing formatting and functional changes in the same patch.
&gt;  It makes it more difficult to examine the more important functional changes.

I know, but this is rather difficult as there are several different formatting styles in use even withing the same file :-/ So when I needed to touch existing code I decided to unify the style for that part of the code.


BTW: If you want contributors to stick to a certain style than please add the correct -*- STYLE -*- (e.g. -*- linux-c -*-) in the first line of the file so that smart editors can adjust their behavior accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646584</commentid>
    <comment_count>39</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-09-15 12:04:49 +0000</bug_when>
    <thetext>&gt; I know, but this is rather difficult as there are several different formatting
&gt; styles in use even withing the same file :-/ So when I needed to touch existing 
&gt; code I decided to unify the style for that part of the code.

Are you referring mostly to tabs vs spaces here?  Like KDE library code spaces are supposed to be used everywhere.  If so I should do a mass conversion in SVN and you could then rebase your patch on top of that.  

&gt; No, it doesn&apos;t. Quote from KMainWindow::saveGlobalProperties() documentation:

It would help if I read that first :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646586</commentid>
    <comment_count>40</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-15 12:17:37 +0000</bug_when>
    <thetext>Hi Robert,

(In reply to comment #39)
&gt; 
&gt; Are you referring mostly to tabs vs spaces here?  Like KDE library code spaces
&gt; are supposed to be used everywhere.  If so I should do a mass conversion in SVN
&gt; and you could then rebase your patch on top of that.  

That would help for sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646702</commentid>
    <comment_count>41</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-15 21:19:04 +0000</bug_when>
    <thetext>Hi Robert,

(In reply to comment #39)
&gt; 
&gt; Are you referring mostly to tabs vs spaces here?  Like KDE library code spaces
&gt; are supposed to be used everywhere.  If so I should do a mass conversion in SVN
&gt; and you could then rebase your patch on top of that.  

Adding the following lines to the end of each file will make sure that at least emacs users will stick to the same style:

/*
  Local Variables:
  mode: c++
  c-file-style: &quot;stroustrup&quot;
  indent-tabs-mode: nil
  tab-width: 4
  End:
*/
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646841</commentid>
    <comment_count>42</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-09-16 14:17:52 +0000</bug_when>
    <thetext>Most of the code is written with Vim, so that would be the better
format to use for
formatting hints if any.  I don&apos;t think that is necessary for the time being.

The reason for the inconsistency is that I wrote most of the code
(except for the
History.cpp and Vt102Emulation.cpp) and I changed from using tabs to spaces
mid-way through to match KDE conventions.  Since I was the only person
making changes
there wasn&apos;t a need to do a mass conversion - which I was loathe to do
since with SVN (instead of git)
because it made going through the history of the code (with svn
annotate) more difficult.  This isn&apos;t such an issue anymore
because git blame is much faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648139</commentid>
    <comment_count>43</comment_count>
      <attachid>27517</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-09-22 20:01:49 +0000</bug_when>
    <thetext>Created attachment 27517
Proposed patch for upstream merge

* Rebased to KDE SVN commit 863413 (after whitespace cleanup)
* Reworked after review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649752</commentid>
    <comment_count>44</comment_count>
    <who name="Joe Biden">mailinglist</who>
    <bug_when>2008-09-29 16:22:19 +0000</bug_when>
    <thetext>Please, for all that is holy, implement tab management for logging back in...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649758</commentid>
    <comment_count>45</comment_count>
    <who name="Richard Hartmann">richih-kde</who>
    <bug_when>2008-09-29 16:33:44 +0000</bug_when>
    <thetext>As you can see, there is a patch which is seven days old &amp; marked for review &amp; merge. This patch would not have made it into 4.1.2 due to being too late for that, anyway. Thus, the first KDE version which can have this (very useful) feature is 4.1.3 (using KDE&apos;s version as I am not too firm on Konsole&apos;s versions and can&apos;t check, atm).

Robert, do you have any estimate on when you will be able to review Stefan&apos;s patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649766</commentid>
    <comment_count>46</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-09-29 17:11:17 +0000</bug_when>
    <thetext>Please note that KDE 4.1.x releases are maintenance releases that provide only fixes, i.e. the first opportunity to ship this feature once merged is actually KDE 4.2, provided the merge happens prior to the designated feature freeze date(s) from the KDE 4.2 release schedule. The schedule can be found on the KDE TechBase wiki.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649775</commentid>
    <comment_count>47</comment_count>
    <who name="Richard Hartmann">richih-kde</who>
    <bug_when>2008-09-29 18:24:43 +0000</bug_when>
    <thetext>Sorry for hijacking this issue, but I assume people who follow this are interested in the answer.


I thought that rule did not apply to regressions from KDE 3 -&gt; KDE 4? If it does, is there an appeals board or anything which can override that rule for specific features? This issue is rather annoying when using Konsole on a daily basis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649781</commentid>
    <comment_count>48</comment_count>
    <who name="Andreas Pakulat">apaku</who>
    <bug_when>2008-09-29 18:50:49 +0000</bug_when>
    <thetext>No, there&apos;s no way to circuumvent the rule. No KDE 4.1.x release will contain new feature. Even though this is a regression from KDE3 the amount of new code already poses a problem. These things need to wait for a new minor release, because the bugfix releases usually get a lot less testing than minor releases. 

But I&apos;m pretty sure that major distributions will backport this once its comitted to trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650133</commentid>
    <comment_count>49</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-10-01 11:18:07 +0000</bug_when>
    <thetext>&gt; I thought that rule did not apply to regressions from KDE 3 -&gt; KDE 4?

The reason that x.y.z releases are restricted to fixing defects is that introducing the larger amount of new code that usually goes along with adding a feature (or re-adding it, as in this case) can introduce new bugs/regressions, and users rightfully expect a bugfix release to improve their stability rather than impair it. The project has a big interest in making sure that users don&apos;t fear upgrading to a bugfix release for whatever else might be in it.

Trust me, developers would often love to smuggle new features (or old ones) into bugfix releases; it takes discipline to hold back things, too, but it&apos;s very important. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650145</commentid>
    <comment_count>50</comment_count>
    <who name="Richard Hartmann">richih-kde</who>
    <bug_when>2008-10-01 12:22:03 +0000</bug_when>
    <thetext>I agree with what you say &amp; it is a very good thing to do.

I just thought that it did not apply to regressions, thanks for clarifying that :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650626</commentid>
    <comment_count>51</comment_count>
    <who name="Quantum Five">hatespam00-bugrep</who>
    <bug_when>2008-10-03 01:23:47 +0000</bug_when>
    <thetext>(In reply to comment #46, #48 and #49)

To: Eike Hein, Andreas Pakulat

&gt; Please note that KDE 4.1.x releases are maintenance releases that provide only fixes, [...]
&gt; No, there&apos;s no way to circuumvent the rule.
&gt; [...] to ship this feature once merged is actually KDE 4.2, provided the merge happens prior to the designated feature freeze date(s) from the KDE 4.2 release schedule.


I am often convinced that KDE 4 management team (if something like that actually exists) lives in a cave on the Moon without any grip to the reality and completely oblivious to anything surrounding them.

So allow me to tell it straight to you - this part should be flashing in bold capital huge red letters, maybe that way you will GET IT !!!

As opposed to widgets and other plasma gimmicks, session management in konsole KDE 4.1.x is **CRUCIAL** for most of us end-users. Without it the KDE 4.1.x is pretty much **useless** to us and we&apos;ll throw the whole lot to the bin and use KDE 3 instead. Clear enough ?

Do you understand what CRUCIAL word mean ? Do you understand what words &quot;MUST HAVE IT BACK NOW&quot; mean ?

For us this omission represents a major **BUG** which needs to be fixed ASAP. Allow me to be blunt here but what it means to you it&apos;s irrelevant really because it is **our** interpretation and request that should rule, not yours.

And we really don&apos;t care about, or want to hear your excuses for not getting it into the next bug fixing release. What we want is action ! Now !

So you have two options: either continue to be ignorant and offer us your same lame excuses and alienate all potential KDE 4 users or wake up for God&apos;s sake and do the right thing: fix it NOW.

We grew tired of seeing this sheer stupidity over and over again: new features are added and given high priority, features that will be used by very few of us - if ever, while **BASIC FUNCTIONALITY** - let me repeat this: BASIC FUNCTIONALITY (!!!!) that 99% end users need it **NOW** is missing and the fix is promised to land once in a blue moon.

&gt; [...] it takes discipline to hold back things, [...]

No, it takes stupidity not discipline !

DOH !!!!
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650630</commentid>
    <comment_count>52</comment_count>
    <who name="devsk">funtoos</who>
    <bug_when>2008-10-03 01:45:06 +0000</bug_when>
    <thetext>(In reply to comment #51)

&gt; No, it takes stupidity not discipline !
&gt; 
&gt; DOH !!!!
&gt; 

Oh C&apos;mon! You can reason with people here! So what if Stefan Becker spent his weekend generating the patch. It doesn&apos;t make konsole flash or wobble or do splits. Something else does! So, cut it!

Ok, may be I was wrong about the splits...:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650635</commentid>
    <comment_count>53</comment_count>
    <who name="Greg Ennis">PoMec</who>
    <bug_when>2008-10-03 02:13:42 +0000</bug_when>
    <thetext>To all,

If two cents are worth anything.  Reality Guy has a point.  We have delayed any conversion to KDE 4 because of this problem.  The first system we used with Fedora 9 was a flop because of this issue.  At the same time I genuinely appreciate what the developers are doing.  We will just wait for the enhancements .... but without holding our breath.

Greg Ennis
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650639</commentid>
    <comment_count>54</comment_count>
    <who name="Joe Biden">mailinglist</who>
    <bug_when>2008-10-03 03:07:56 +0000</bug_when>
    <thetext>&gt; So you have two options: either continue to be ignorant and offer us your same
&gt; lame excuses and alienate all potential KDE 4 users or wake up for God&apos;s sake
&gt; and do the right thing: fix it NOW.

Honestly, it&apos;s critical to fix this, but if they have a good reason for not letting it go into maintenance releases, then I guess we&apos;ll have to forgo moving to KDE 4.1.[012] at my work, as this was a necessary feature.

I can live without it, but it&apos;s certainly annoying. I certainly don&apos;t think calling anyone out on this issue, cowboy-style will inspire them to change their minds though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650655</commentid>
    <comment_count>55</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-10-03 07:47:15 +0000</bug_when>
    <thetext>I can understand Reality Guy&apos;s (and many others) frustration about this. Thats the reason why the patch exists :-)

I just checked the trunk in WebSVN and the patch hasn&apos;t been applied yet. According to

 &lt;http://techbase.kde.org/Schedules/KDE4/4.2_Release_Schedule&gt;

the freeze for 4.2 is on the 19th of October and that&apos;s just 2 weeks from now. No pressure, but if the patch doesn&apos;t make it then I think comment #51 will be one of the nicest things you&apos;ll hear about this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650683</commentid>
    <comment_count>56</comment_count>
    <who name="Andreas Pakulat">apaku</who>
    <bug_when>2008-10-03 11:31:05 +0000</bug_when>
    <thetext>Two notes regarding Stefans last post:

a) thats the soft-freeze, which means new features need to be started by then, they don&apos;t have to be finished. And I&apos;d consider this patch attached here starting the feature, hence there&apos;s time until november 17th

b) If Robert doesn&apos;t find time to review it, I&apos;ll have a look myself and test it a bit. If it works well I&apos;ll make sure it&apos;ll be in before November 17th.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650685</commentid>
    <comment_count>57</comment_count>
    <who name="Eike Hein">hein</who>
    <bug_when>2008-10-03 11:36:38 +0000</bug_when>
    <thetext>The point is that incorporating additional functionality in a maintenance release always potentially risks further regressions, and making deployments distrust KDE maintenance releases is a sure-fire way to alienate users just as well. Deciding whether the incorporation of an additional feature is &quot;going to be fine this time, nothing will happen!!&quot; on a case-by-case basis is both frivolous, and also requires resources that are not available either inside or outside the project (it would require starting to do betas and release candidates for maintenance releases, and a longer cycle than a month - sounds like the major releases we do every six month, anyone?).

And no, insults really will not motivate anyone to cater to your needs either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650696</commentid>
    <comment_count>58</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2008-10-03 12:03:40 +0000</bug_when>
    <thetext>&gt; I am often convinced that KDE 4 management team (if something like that
&gt; actually exists) lives in a cave on the Moon without any grip to the reality
&gt; and completely oblivious to anything surrounding them.

The approach to not include new features into maintenance releases is very common, so there must be a huge cave.

&gt; So allow me to tell it straight to you - this part should be flashing in bold
&gt; capital huge red letters, maybe that way you will GET IT !!!

This is the point where you already lost your audience in the developers camp, because it shows that what follows is polemicand just trolling.

&gt; As opposed to widgets and other plasma gimmicks, session management in konsole
&gt; KDE 4.1.x is **CRUCIAL** for most of us end-users. Without it the KDE 4.1.x is
&gt; pretty much **useless** to us and we&apos;ll throw the whole lot to the bin and use
&gt; KDE 3 instead. Clear enough ?

&quot;most of end-users [...] we will throw [...]&quot;. You do not have any evidence that you know what most end-users think is crucial, emphasising your ignorance with stars and capital letters really makes you look bad, using pluralis majestatis, makes you even look arrogant.

&gt; Do you understand what CRUCIAL word mean ? Do you understand what words &quot;MUST
&gt; HAVE IT BACK NOW&quot; mean ?

You really like to show off your bad traits, do you?

&gt; For us this omission represents a major **BUG** which needs to be fixed ASAP.
&gt; Allow me to be blunt here but what it means to you it&apos;s irrelevant really
&gt; because it is **our** interpretation and request that should rule, not yours.

Code rules, nothing else. And since you seem to have contributed very little code to the project, you have as much as that to decide. You would really have to contribute a lot to make up for your attitude.

&gt; And we really don&apos;t care about, or want to hear your excuses for not getting it
&gt; into the next bug fixing release. What we want is action ! Now !
&gt; 
&gt; So you have two options: either continue to be ignorant and offer us your same
&gt; lame excuses and alienate all potential KDE 4 users or wake up for God&apos;s sake
&gt; and do the right thing: fix it NOW.
&gt; 
&gt; We grew tired of seeing this sheer stupidity over and over again: new features
&gt; are added and given high priority, features that will be used by very few of us
&gt; - if ever, while **BASIC FUNCTIONALITY** - let me repeat this: BASIC
&gt; FUNCTIONALITY (!!!!) that 99% end users need it **NOW** is missing and the fix
&gt; is promised to land once in a blue moon.
&gt; 
&gt; &gt; [...] it takes discipline to hold back things, [...]
&gt; 
&gt; No, it takes stupidity not discipline !
&gt; 
&gt; DOH !!!!

Let me show you why your post is completely useless: Normal users, e.g. those coming from windows, do not like to touch anything that looks like a command line, let alone using session management in their kosnole, so those users that do, seem to have some deeper knowledge and interest, might even know about coding a bit. If the latter is the majority and this was crucial for them, it would be very likely that one of them would have submitted a patch during the 4.0.x time already. Didn&apos;t happen.

Trying to claim that 99% of the users need konsole _and_ its session management is just ridiculous, ~300 votes speak for themselves. There is a need for this functionality, which nobody ever doubted, but if the majority would need it crucially, there would be other numbers, check bugzilla for bugs the majority really hates.

Most people use some distro. Distros include patches, even unreleased ones if they think they are needed. They even create patches and submit them upstream, if they think they are  needed. Didn&apos;t happen(, yet).

Smart users remember that konsole3 worked for them and just continue to use it, even if they run KDE4.

Smart users know that calling developers and the KDE team stupid disqualifies them as people to care about. Even if you were right, your attitude is unbearable.

If this functionality is available at some point it is due to the effort of Stefan Becker and not because of people like you that don&apos;t code but just troll. If I would shout at you that 1+1=2 and call you stupid at the same time, even though I am right, you would just laugh about me, that&apos;s what people do when reading your trolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650702</commentid>
    <comment_count>59</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-10-03 12:48:04 +0000</bug_when>
    <thetext>Hi Stefan,

Thank-you for being patient.  I reviewed and did some light testing on the latest patch last night but didn&apos;t have a change to apply it.  There are some small changes I will likely make at the weekend but I have committed it to Subversion as is for the time being.  I can then make any further changes in my own time.  Or alternatively you can get a KDE subversion account if you don&apos;t already have one.

====

SVN revision 867323.

Initial implementation of session management in Konsole.
Patch from Stefan Becker &lt;stefan.becker@nokia.com&gt;

Thank-you very much Stefan!

CCBUG: 152761

====

@ Everyone, especially distributors regarding backporting

I agree with Richard.  Regressions from KDE 3 -&gt; 4 can be backported as long as they do not add any UI changes and they have sufficient testing.  
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650704</commentid>
    <comment_count>60</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-10-03 12:50:45 +0000</bug_when>
    <thetext>Also regarding backporting, this patch is quite large (~30KB) so I would recommend that distributors do not apply it verbatim to 4.1 right away.  I will try to find time at the weekend to test it against KDE 4.1 but I&apos;d welcome help from anyone who has more free time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650728</commentid>
    <comment_count>61</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-10-03 14:02:09 +0000</bug_when>
    <thetext>I&apos;ve created a backport request for Fedora 9/10:

 &lt;https://bugzilla.redhat.com/show_bug.cgi?id=465451&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650742</commentid>
    <comment_count>62</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-10-03 14:34:23 +0000</bug_when>
    <thetext>Just to clarify my comments above.  I haven&apos;t tested this patch against KDE 4.1 at all yet.  </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650771</commentid>
    <comment_count>63</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2008-10-03 17:24:47 +0000</bug_when>
    <thetext>Sorry folks, r867459 (with the committed patch) crashes reproducibly on logout.

The Application: Konsole (konsole), signal SIGABRT
[?1034h[Thread debugging using libthread_db enabled]
0x00007f3d872a4841 in nanosleep () from /lib64/libc.so.6
[Current thread is 1 (Thread 0x7f3d8c686750 (LWP 13903))]

Thread 2 (Thread 0x7f3d8191e950 (LWP 13904)):
#0  0x00007f3d872cf012 in select () from /lib64/libc.so.6
#1  0x00007f3d88019296 in QProcessManager::run (this=0x63dc90) at io/qprocess_unix.cpp:307
#2  0x00007f3d87f50f32 in QThreadPrivate::start (arg=0x63dc90) at thread/qthread_unix.cpp:191
#3  0x00007f3d87cdd070 in start_thread () from /lib64/libpthread.so.0
#4  0x00007f3d872d5acd in clone () from /lib64/libc.so.6
#5  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7f3d8c686750 (LWP 13903)):
[KCrash Handler]
#5  0x00007f3d87232745 in raise () from /lib64/libc.so.6
#6  0x00007f3d87233d33 in abort () from /lib64/libc.so.6
#7  0x00007f3d87f49265 in qt_message_output (msgType=QtFatalMsg, buf=&lt;value optimized out&gt;) at global/qglobal.cpp:2108
#8  0x00007f3d87f493ad in qFatal (msg=&lt;value optimized out&gt;) at global/qglobal.cpp:2309
#9  0x00007f3d87f4941a in qt_assert (assertion=&lt;value optimized out&gt;, file=&lt;value optimized out&gt;, line=-1) at global/qglobal.cpp:1878
#10 0x00007f3d8c1ddd6e in KSharedPtr&lt;Konsole::Profile&gt;::operator-&gt; (this=0x6efb20) at /space/kde/installs/trunk/include/KDE/../ksharedptr.h:116
#11 0x00007f3d8c2567c1 in Konsole::MainWindow::saveProperties (this=0x6efac0, group=@0x7fff946bcd90) at /space/kde/sources/trunk/KDE/kdebase/apps/konsole/src/MainWindow.cpp:385
#12 0x00007f3d8bc2494e in KMainWindow::savePropertiesInternal (this=0x6efac0, config=0xb44ec0, number=1) at /space/kde/sources/trunk/KDE/kdelibs/kdeui/widgets/kmainwindow.cpp:620
#13 0x00007f3d8bc280e8 in KMWSessionManager::saveState (this=0x6f5680) at /space/kde/sources/trunk/KDE/kdelibs/kdeui/widgets/kmainwindow.cpp:150
#14 0x00007f3d8bb622ee in KApplication::saveState (this=0x7fff946be1f0, sm=@0x66d7a0) at /space/kde/sources/trunk/KDE/kdelibs/kdeui/kernel/kapplication.cpp:819
#15 0x00007f3d89f4bb46 in sm_performSaveYourself (smd=0x679f90) at kernel/qapplication_x11.cpp:5116
#16 0x00007f3d89f4beda in sm_saveYourselfCallback (smcConn=&lt;value optimized out&gt;, clientData=0x364f, saveType=-2024437296, shutdown=&lt;value optimized out&gt;, interactStyle=-1)
    at kernel/qapplication_x11.cpp:5065
#17 0x00007f3d8993c737 in _SmcProcessMessage () from /usr/lib64/libSM.so.6
#18 0x00007f3d8972b90e in IceProcessMessages () from /usr/lib64/libICE.so.6
#19 0x00007f3d89f41479 in QSmSocketReceiver::qt_metacall (this=0x6b87f0, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0x7fff946bd8f0) at .moc/release-shared/qapplication_x11.moc:64
#20 0x00007f3d8804d3d4 in QMetaObject::activate (sender=0x6bebf0, from_signal_index=&lt;value optimized out&gt;, to_signal_index=4, argv=0xffffffffffffffff) at kernel/qobject.cpp:3037
#21 0x00007f3d8808400e in QSocketNotifier::activated (this=0x364f, _t1=18) at .moc/release-shared/moc_qsocketnotifier.cpp:81
#22 0x00007f3d88052f23 in QSocketNotifier::event (this=0x6bebf0, e=0x7fff946bdef0) at kernel/qsocketnotifier.cpp:326
#23 0x00007f3d89ee8cad in QApplicationPrivate::notify_helper (this=0x62e070, receiver=0x6bebf0, e=0x7fff946bdef0) at kernel/qapplication.cpp:3809
#24 0x00007f3d89ef0a7a in QApplication::notify (this=0x7fff946be1f0, receiver=0x6bebf0, e=0x7fff946bdef0) at kernel/qapplication.cpp:3774
#25 0x00007f3d8bb627c0 in KApplication::notify (this=0x7fff946be1f0, receiver=0x6bebf0, event=0x7fff946bdef0) at /space/kde/sources/trunk/KDE/kdelibs/kdeui/kernel/kapplication.cpp:307
#26 0x00007f3d88039011 in QCoreApplication::notifyInternal (this=0x7fff946be1f0, receiver=0x6bebf0, event=0x7fff946bdef0) at kernel/qcoreapplication.cpp:593
#27 0x00007f3d880616e9 in socketNotifierSourceDispatch (source=0x634ea0) at kernel/qcoreapplication.h:215
#28 0x00007f3d85d1507b in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#29 0x00007f3d85d1885d in ?? () from /usr/lib64/libglib-2.0.so.0
#30 0x00007f3d85d18a1b in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#31 0x00007f3d8806146f in QEventDispatcherGlib::processEvents (this=0x62dfd0, flags=&lt;value optimized out&gt;) at kernel/qeventdispatcher_glib.cpp:325
#32 0x00007f3d89f7944f in QGuiEventDispatcherGlib::processEvents (this=0x364f, flags=&lt;value optimized out&gt;) at kernel/qguieventdispatcher_glib.cpp:204
#33 0x00007f3d88037922 in QEventLoop::processEvents (this=&lt;value optimized out&gt;, flags={i = -1804869360}) at kernel/qeventloop.cpp:149
#34 0x00007f3d88037aad in QEventLoop::exec (this=0x7fff946be150, flags={i = -1804869280}) at kernel/qeventloop.cpp:200
#35 0x00007f3d88039f7d in QCoreApplication::exec () at kernel/qcoreapplication.cpp:851
#36 0x00007f3d8c25a8c4 in kdemain (argc=1, argv=0x7fff946be468) at /space/kde/sources/trunk/KDE/kdebase/apps/konsole/src/main.cpp:97
#37 0x00000000004008f7 in main (argc=1, argv=0x7fff946be468) at /space/kde/builds/trunk/KDE/kdebase/apps/konsole/src/konsole_dummy.cpp:3

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650773</commentid>
    <comment_count>64</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2008-10-03 17:34:09 +0000</bug_when>
    <thetext>I tried moving apps/konsole and konsolerc aside; makes no difference.  It also crashes whether I have more than one tab open or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650774</commentid>
    <comment_count>65</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-10-03 17:45:24 +0000</bug_when>
    <thetext>Hi Will,

Its a simple null pointer check missing in the case where a window is opened using the default profile.  Fix committed (rv. 867477)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650777</commentid>
    <comment_count>66</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2008-10-03 18:00:51 +0000</bug_when>
    <thetext>That was quick!  The patch seems fine now for my use case, which is: default profile, multiple tabs, various working directories and tab labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650817</commentid>
    <comment_count>67</comment_count>
    <who name="Richard Hartmann">richih-kde</who>
    <bug_when>2008-10-03 20:09:39 +0000</bug_when>
    <thetext>Stefan: Thanks for the work.

Robert: Thanks for the feedback

Burrmeister: While you can use KDE 3 apps with KDE 4, it is a bad crutch, at best. Personally, I try to avoid pulling old &apos;cruft&apos; into KDE 4.

Troll: While you do have a point inasmuch that this feature is crucial, your behavior is absolutely unacceptible. Period.
I am using KDE 4 on one of the four computers which I use on a regular basis. The lack of Konsole&apos;s session management is one of the main reasons for this. I don&apos;t bitch and moan about this, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650989</commentid>
    <comment_count>68</comment_count>
    <who name="Mike">mike</who>
    <bug_when>2008-10-04 14:52:45 +0000</bug_when>
    <thetext>Just for your information, I updated to HEAD yesterday and when I started KDE, Konsole started up without any tabs open at all.  The grey window was there but with no tab.  Clicking the menu and opening a new tab has fixed it now but there is a problem with no/invalid session data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651016</commentid>
    <comment_count>69</comment_count>
    <who name="Kurt Hindenburg">khindenburg</who>
    <bug_when>2008-10-04 18:33:42 +0000</bug_when>
    <thetext>Yes, I have the same thing as #68 upon startup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651274</commentid>
    <comment_count>70</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-10-05 17:34:42 +0000</bug_when>
    <thetext>(In reply to comment #68)
&gt; Just for your information, I updated to HEAD yesterday and when I started KDE,
&gt; Konsole started up without any tabs open at all.  The grey window was there but
&gt; with no tab.  Clicking the menu and opening a new tab has fixed it now but
&gt; there is a problem with no/invalid session data.

Just backported the patch to the F9 kdebase-4.1.1 RPM and I can&apos;t reproduce the problem.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651347</commentid>
    <comment_count>71</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2008-10-05 22:15:57 +0000</bug_when>
    <thetext>Stefan: To reproduce, start a session with the patch, but restoring session saved without the patch.

Could you attach the patch to the 4.1 branch here, or put it in an svn branch?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651348</commentid>
    <comment_count>72</comment_count>
    <who name="Kevin Kofler">kevin.kofler</who>
    <bug_when>2008-10-05 22:17:25 +0000</bug_when>
    <thetext>He posted the patch against 4.1 to the RH/Fedora Bugzilla:
https://bugzilla.redhat.com/attachment.cgi?id=319498</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651361</commentid>
    <comment_count>73</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-10-06 00:17:07 +0000</bug_when>
    <thetext>Hi Stefan,

Please attach backport patches to this thread before, or at least in addition to, distribution-specific bug trackers.  This patch will be of interest to Kubuntu and Suse as well.  Plus as we have seen, the version of the patch I applied caused some regressions which needed minor code changes to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651362</commentid>
    <comment_count>74</comment_count>
    <who name="Kevin Kofler">kevin.kofler</who>
    <bug_when>2008-10-06 00:24:31 +0000</bug_when>
    <thetext>I forgot to mention the patch description:
&gt; KDE SVN trunk revisions 867154 to 867477 changes backported to 4.1.1
So this has your fixes up to revision 867477 included too.

And don&apos;t worry, I&apos;ll keep you in the loop about any patches for this issue uploaded to the Fedora bug tracker. (That said, I&apos;d also prefer that Stefan Becker uploads them here too.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651399</commentid>
    <comment_count>75</comment_count>
      <attachid>27708</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-10-06 05:51:57 +0000</bug_when>
    <thetext>Created attachment 27708
KDE SVN trunk revisions 867154 to 867477 changes backported to 4.1.1

Here you go...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651411</commentid>
    <comment_count>76</comment_count>
      <attachid>27709</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-10-06 07:16:07 +0000</bug_when>
    <thetext>Created attachment 27709
Fix restore from invalid session data

This should fix the problem when restoring from a session saved by KDE3. Can you please try this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651512</commentid>
    <comment_count>77</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2008-10-06 15:00:19 +0000</bug_when>
    <thetext>Hi Stefan,

Comments on #76:

We should print a more friendly/helpful message to the terminal if there is invalid session data.  eg. &quot;Unable to restore saved tabs.  Possibly unsupported KDE 3 session data.&quot;.

It should also be kWarning() rather than kError() and should, I think, also be translated with i18n(string) because users will see it with release builds.

I suggest calling the config entry &apos;ActiveTabIndex&apos; instead of just &apos;Active&apos; to make the file easier to read. 

Unless you need functionality which is specific to the TerminalDisplay class, and it looks like you don&apos;t, then it would be better to make &apos;display&apos; a QWidget*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651547</commentid>
    <comment_count>78</comment_count>
      <attachid>27718</attachid>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2008-10-06 17:18:22 +0000</bug_when>
    <thetext>Created attachment 27718
Fix restore from invalid session data

Updated after review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656839</commentid>
    <comment_count>79</comment_count>
    <who name="Pino Toscano">pino</who>
    <bug_when>2008-10-25 12:42:03 +0000</bug_when>
    <thetext>*** Bug 173455 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658604</commentid>
    <comment_count>80</comment_count>
    <who name="Kevin Kofler">kevin.kofler</who>
    <bug_when>2008-10-29 18:38:18 +0000</bug_when>
    <thetext>What happened to this update/followup?
http://bugs.kde.org/attachment.cgi?id=27718
I don&apos;t see this committed to the trunk yet (the code in trunk still uses &quot;Active&quot;, not &quot;ActiveTabIndex&quot;, and it doesn&apos;t have the KDE3 session part), can you please commit it? Or is there a reason you didn&apos;t commit it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692768</commentid>
    <comment_count>81</comment_count>
    <who name="Jonathan Thomas">echidnaman</who>
    <bug_when>2009-01-02 20:52:25 +0000</bug_when>
    <thetext>*** Bug 179378 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719985</commentid>
    <comment_count>82</comment_count>
    <who name="Juan Ignacio Pumarino">jipumarino</who>
    <bug_when>2009-02-20 23:52:35 +0000</bug_when>
    <thetext>Hi,

When was this resolved? Is it coming on 4.3? Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719989</commentid>
    <comment_count>83</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2009-02-20 23:58:33 +0000</bug_when>
    <thetext>Reading the comments would help. this is resolved for KDE 4.1 and .2 etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719993</commentid>
    <comment_count>84</comment_count>
    <who name="Juan Ignacio Pumarino">jipumarino</who>
    <bug_when>2009-02-21 00:03:13 +0000</bug_when>
    <thetext>S.: But tabs can&apos;t yet be saved, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720174</commentid>
    <comment_count>85</comment_count>
    <who name="jos poortvliet">jospoortvliet</who>
    <bug_when>2009-02-21 11:31:53 +0000</bug_when>
    <thetext>@juan: you mean to ask if it does restore tabs with names and locations at startup? Works fine here.... At least on 4.2 :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755741</commentid>
    <comment_count>86</comment_count>
    <who name="MixMaster">ftronci</who>
    <bug_when>2009-05-11 23:52:12 +0000</bug_when>
    <thetext>How i can save my profile with all opened tabs and later restore it? I cant find &quot;save profile&quot; in my kde 4.2.2 konsole.
Thanks in advance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755786</commentid>
    <comment_count>87</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2009-05-12 01:55:11 +0000</bug_when>
    <thetext>It happens automatically if you log out and back in again.  There is no way to do it manually at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755842</commentid>
    <comment_count>88</comment_count>
    <who name="Stefan Becker">chemobejk</who>
    <bug_when>2009-05-12 06:25:00 +0000</bug_when>
    <thetext>... or use &quot;Save Session&quot; from the &quot;Leave&quot; tab in the Kickoff menu.

Anyway: konsole doesn&apos;t have it&apos;s own session management, it&apos;s all handled by KDE. When KDE saves the session information, either automatically or when asked by the user, then konsole provides its session information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755916</commentid>
    <comment_count>89</comment_count>
    <who name="Robert Knight">robertknight</who>
    <bug_when>2009-05-12 10:37:34 +0000</bug_when>
    <thetext>&gt; Anyway: konsole doesn&apos;t have it&apos;s own session management,
&gt; it&apos;s all handled by KDE.
&gt; When KDE saves the session information, either automatically
&gt; or when asked by the user, then konsole provides its session information.

That is an implementation detail and something which users shouldn&apos;t need to know.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27341</attachid>
            <date>2008-09-09 19:32:01 +0000</date>
            <delta_ts>2008-09-10 23:58:32 +0000</delta_ts>
            <desc>Implement basic session management for KDE4 konsole</desc>
            <filename>kdebase-4.1.0-konsole-session-management.patch</filename>
            <type>text/plain</type>
            <size>13863</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">IHNyYy9BcHBsaWNhdGlvbi5jcHAgICAgfCAgIDczICsrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvTWFpbldpbmRvdy5jcHAgICAgIHwgICAyNyArKysr
KysrKysrKysrKysrKwogc3JjL01haW5XaW5kb3cuaCAgICAgICB8ICAgIDYgKysrKwogc3JjL1Nl
c3Npb24uY3BwICAgICAgICB8ICAgMjYgKysrKysrKysrKysrKysrKysKIHNyYy9TZXNzaW9uLmgg
ICAgICAgICAgfCAgICA0ICsrCiBzcmMvU2Vzc2lvbk1hbmFnZXIuY3BwIHwgICA2MyArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL1Nlc3Npb25NYW5hZ2VyLmgg
ICB8ICAgIDcgKysrKwogc3JjL1ZpZXdNYW5hZ2VyLmNwcCAgICB8ICAgMjMgKysrKysrKysrKysr
KysrCiBzcmMvVmlld01hbmFnZXIuaCAgICAgIHwgICAxNiArKysrKysrLS0tCiBzcmMvbWFpbi5j
cHAgICAgICAgICAgIHwgICAxMyArKysrKysrKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDIxOSBpbnNl
cnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQga29uc29sZS1rZGViYXNlLTQu
MS4wL3NyYy9BcHBsaWNhdGlvbi5jcHAga29uc29sZS9zcmMvQXBwbGljYXRpb24uY3BwCmluZGV4
IGYzZjUyZTguLmQyMmQ1OTIgMTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL0Fw
cGxpY2F0aW9uLmNwcAorKysga29uc29sZS9zcmMvQXBwbGljYXRpb24uY3BwCkBAIC0xMDMsNDkg
KzEwMyw1NiBAQCB2b2lkIEFwcGxpY2F0aW9uOjpsaXN0QXZhaWxhYmxlUHJvZmlsZXMoKQogaW50
IEFwcGxpY2F0aW9uOjpuZXdJbnN0YW5jZSgpCiB7CiAgICAgS0NtZExpbmVBcmdzKiBhcmdzID0g
S0NtZExpbmVBcmdzOjpwYXJzZWRBcmdzKCk7CisgICAgc3RhdGljIGJvb2wgZmlyc3QgPSB0cnVl
OwogCi0gICAgLy8gY2hlY2sgZm9yIGFyZ3VtZW50cyB0byBwcmludCBoZWxwIG9yIG90aGVyIGlu
Zm9ybWF0aW9uIHRvIHRoZSB0ZXJtaW5hbCwKLSAgICAvLyBxdWl0IGlmIHN1Y2ggYW4gYXJndW1l
bnQgd2FzIGZvdW5kCi0gICAgaWYgKCBwcm9jZXNzSGVscEFyZ3MoYXJncykgKSAKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgLy8gaGFuZGxlIHNlc3Npb24gbWFuYWdlbWVudAorICAgIGlmICgoYXJn
cy0+Y291bnQoKSAhPSAwKSB8fCAhZmlyc3QgfHwgIWlzU2Vzc2lvblJlc3RvcmVkKCkpCisgICAg
eworICAgICAgICAvLyBjaGVjayBmb3IgYXJndW1lbnRzIHRvIHByaW50IGhlbHAgb3Igb3RoZXIg
aW5mb3JtYXRpb24gdG8gdGhlIHRlcm1pbmFsLAorICAgICAgICAvLyBxdWl0IGlmIHN1Y2ggYW4g
YXJndW1lbnQgd2FzIGZvdW5kCisgICAgICAgIGlmICggcHJvY2Vzc0hlbHBBcmdzKGFyZ3MpICkg
CisJICAgIHJldHVybiAwOwogCi0gICAgLy8gY3JlYXRlIGEgbmV3IHdpbmRvdyBvciB1c2UgYW4g
ZXhpc3Rpbmcgb25lIAotICAgIE1haW5XaW5kb3cqIHdpbmRvdyA9IHByb2Nlc3NXaW5kb3dBcmdz
KGFyZ3MpOworCS8vIGNyZWF0ZSBhIG5ldyB3aW5kb3cgb3IgdXNlIGFuIGV4aXN0aW5nIG9uZSAK
KwlNYWluV2luZG93KiB3aW5kb3cgPSBwcm9jZXNzV2luZG93QXJncyhhcmdzKTsKICAgCi0gICAg
Ly8gc2VsZWN0IHByb2ZpbGUgdG8gdXNlIAotICAgIHByb2Nlc3NQcm9maWxlU2VsZWN0QXJncyhh
cmdzLHdpbmRvdyk7CisJLy8gc2VsZWN0IHByb2ZpbGUgdG8gdXNlIAorCXByb2Nlc3NQcm9maWxl
U2VsZWN0QXJncyhhcmdzLHdpbmRvdyk7CiAgICAKLSAgICAvLyBwcm9jZXNzIHZhcmlvdXMgY29t
bWFuZC1saW5lIG9wdGlvbnMgd2hpY2ggY2F1c2UgYSBwcm9wZXJ0eSBvZiB0aGUgCi0gICAgLy8g
ZGVmYXVsdCBwcm9maWxlIHRvIGJlIGNoYW5nZWQgCi0gICAgcHJvY2Vzc1Byb2ZpbGVDaGFuZ2VB
cmdzKGFyZ3Msd2luZG93KTsKKwkvLyBwcm9jZXNzIHZhcmlvdXMgY29tbWFuZC1saW5lIG9wdGlv
bnMgd2hpY2ggY2F1c2UgYSBwcm9wZXJ0eSBvZiB0aGUgCisJLy8gZGVmYXVsdCBwcm9maWxlIHRv
IGJlIGNoYW5nZWQgCisJcHJvY2Vzc1Byb2ZpbGVDaGFuZ2VBcmdzKGFyZ3Msd2luZG93KTsKIAot
ICAgIC8vIGNyZWF0ZSBuZXcgc2Vzc2lvbgotICAgIFNlc3Npb24qIHNlc3Npb24gPSBjcmVhdGVT
ZXNzaW9uKCB3aW5kb3ctPmRlZmF1bHRQcm9maWxlKCkgLCBRU3RyaW5nKCkgLCB3aW5kb3ctPnZp
ZXdNYW5hZ2VyKCkgKTsKKwkvLyBjcmVhdGUgbmV3IHNlc3Npb24KKwlTZXNzaW9uKiBzZXNzaW9u
ID0gY3JlYXRlU2Vzc2lvbiggd2luZG93LT5kZWZhdWx0UHJvZmlsZSgpICwgUVN0cmluZygpICwg
d2luZG93LT52aWV3TWFuYWdlcigpICk7CiAJaWYgKCAhYXJncy0+aXNTZXQoImNsb3NlIikgKQot
CQlzZXNzaW9uLT5zZXRBdXRvQ2xvc2UoZmFsc2UpOworCSAgc2Vzc2lvbi0+c2V0QXV0b0Nsb3Nl
KGZhbHNlKTsKIAotICAgIC8vIGlmIHRoZSBiYWNrZ3JvdW5kLW1vZGUgYXJndW1lbnQgaXMgc3Vw
cGxpZWQsIHN0YXJ0IHRoZSBiYWNrZ3JvdW5kIHNlc3Npb24KLSAgICAvLyAoIG9yIGJyaW5nIHRv
IHRoZSBmcm9udCBpZiBpdCBhbHJlYWR5IGV4aXN0cyApCi0gICAgaWYgKCBhcmdzLT5pc1NldCgi
YmFja2dyb3VuZC1tb2RlIikgKQotICAgICAgICBzdGFydEJhY2tncm91bmRNb2RlKHdpbmRvdyk7
Ci0gICAgZWxzZQorCS8vIGlmIHRoZSBiYWNrZ3JvdW5kLW1vZGUgYXJndW1lbnQgaXMgc3VwcGxp
ZWQsIHN0YXJ0IHRoZSBiYWNrZ3JvdW5kIHNlc3Npb24KKwkvLyAoIG9yIGJyaW5nIHRvIHRoZSBm
cm9udCBpZiBpdCBhbHJlYWR5IGV4aXN0cyApCisJaWYgKCBhcmdzLT5pc1NldCgiYmFja2dyb3Vu
ZC1tb2RlIikgKQorCSAgICBzdGFydEJhY2tncm91bmRNb2RlKHdpbmRvdyk7CisJZWxzZQogCXsK
LQkJLy8gUXQgY29uc3RyYWlucyB0b3AtbGV2ZWwgd2luZG93cyB3aGljaCBoYXZlIG5vdCBiZWVu
IG1hbnVhbGx5IHJlc2l6ZWQKLQkJLy8gKHZpYSBRV2lkZ2V0OjpyZXNpemUoKSkgdG8gYSBtYXhp
bXVtIG9mIDIvM3JkcyBvZiB0aGUgc2NyZWVuIHNpemUuCi0JCS8vCi0JCS8vIFRoaXMgbWVhbnMg
dGhhdCB0aGUgdGVybWluYWwgZGlzcGxheSBtaWdodCBub3QgZ2V0IHRoZSB3aWR0aC9oZWlnaHQK
LQkJLy8gaXQgYXNrcyBmb3IuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB0aGUgd2lkZ2V0IG11c3Qg
YmUgbWFudWFsbHkgcmVzaXplZAotCQkvLyB0byBpdHMgc2l6ZUhpbnQoKS4KLQkJLy8KLQkJLy8g
VGhpcyBwcm9ibGVtIG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgdGltZSB0aGUgYXBwbGljYXRpb24g
aXMgcnVuLiAgQWZ0ZXIKLQkJLy8gdGhhdCBLTWFpbldpbmRvdyB3aWxsIGhhdmUgbWFudWFsbHkg
cmVzaXplZCB0aGUgd2luZG93IHRvIGl0cyBzYXZlZCBzaXplCi0JCS8vIGF0IHRoaXMgcG9pbnQg
KHNvIHRoZSBRdDo6V0FfUmVzaXplZCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQpCi0JCWlmICghd2lu
ZG93LT50ZXN0QXR0cmlidXRlKFF0OjpXQV9SZXNpemVkKSkKLQkJCXdpbmRvdy0+cmVzaXplKHdp
bmRvdy0+c2l6ZUhpbnQoKSk7Ci0KLQkJd2luZG93LT5zaG93KCk7CisJICAgIC8vIFF0IGNvbnN0
cmFpbnMgdG9wLWxldmVsIHdpbmRvd3Mgd2hpY2ggaGF2ZSBub3QgYmVlbiBtYW51YWxseSByZXNp
emVkCisJICAgIC8vICh2aWEgUVdpZGdldDo6cmVzaXplKCkpIHRvIGEgbWF4aW11bSBvZiAyLzNy
ZHMgb2YgdGhlIHNjcmVlbiBzaXplLgorCSAgICAvLworCSAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
dGhlIHRlcm1pbmFsIGRpc3BsYXkgbWlnaHQgbm90IGdldCB0aGUgd2lkdGgvaGVpZ2h0CisJICAg
IC8vIGl0IGFza3MgZm9yLiAgVG8gd29yayBhcm91bmQgdGhpcywgdGhlIHdpZGdldCBtdXN0IGJl
IG1hbnVhbGx5IHJlc2l6ZWQKKwkgICAgLy8gdG8gaXRzIHNpemVIaW50KCkuCisJICAgIC8vCisJ
ICAgIC8vIFRoaXMgcHJvYmxlbSBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHRpbWUgdGhlIGFwcGxp
Y2F0aW9uIGlzIHJ1bi4gIEFmdGVyCisJICAgIC8vIHRoYXQgS01haW5XaW5kb3cgd2lsbCBoYXZl
IG1hbnVhbGx5IHJlc2l6ZWQgdGhlIHdpbmRvdyB0byBpdHMgc2F2ZWQgc2l6ZQorCSAgICAvLyBh
dCB0aGlzIHBvaW50IChzbyB0aGUgUXQ6OldBX1Jlc2l6ZWQgYXR0cmlidXRlIHdpbGwgYmUgc2V0
KQorCSAgICBpZiAoIXdpbmRvdy0+dGVzdEF0dHJpYnV0ZShRdDo6V0FfUmVzaXplZCkpCisJICAg
ICAgICB3aW5kb3ctPnJlc2l6ZSh3aW5kb3ctPnNpemVIaW50KCkpOworCisJICAgIHdpbmRvdy0+
c2hvdygpOwogCX0KKyAgICB9CiAKKyAgICBmaXJzdCA9IGZhbHNlOworICAgIGFyZ3MtPmNsZWFy
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJhc2UtNC4xLjAv
c3JjL01haW5XaW5kb3cuY3BwIGtvbnNvbGUvc3JjL01haW5XaW5kb3cuY3BwCmluZGV4IGMwOWZl
ZGIuLjZjZmRkMTkgMTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL01haW5XaW5k
b3cuY3BwCisrKyBrb25zb2xlL3NyYy9NYWluV2luZG93LmNwcApAQCAtMTksNiArMTksNyBAQAog
CiAvLyBPd24KICNpbmNsdWRlICJNYWluV2luZG93LmgiCisjaW5jbHVkZSAiU2Vzc2lvbk1hbmFn
ZXIuaCIKIAogLy8gUXQKICNpbmNsdWRlIDxRdEd1aS9RQm94TGF5b3V0PgpAQCAtMzcyLDYgKzM3
MywzMiBAQCBib29sIE1haW5XaW5kb3c6OnF1ZXJ5Q2xvc2UoKQogICAgIHJldHVybiB0cnVlOwog
fQogCit2b2lkIE1haW5XaW5kb3c6OnNhdmVQcm9wZXJ0aWVzKEtDb25maWdHcm91cCYgZ3JvdXAp
Cit7CisgICAgZ3JvdXAud3JpdGVQYXRoRW50cnkoIkRlZmF1bHQgUHJvZmlsZSIsIF9kZWZhdWx0
UHJvZmlsZS0+cGF0aCgpKTsKKyAgICBfdmlld01hbmFnZXItPnNhdmVTZXNzaW9ucyhncm91cCk7
Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6cmVhZFByb3BlcnRpZXMoY29uc3QgS0NvbmZpZ0dyb3Vw
JiBncm91cCkKK3sKKyAgICBTZXNzaW9uTWFuYWdlciAqbWdyID0gU2Vzc2lvbk1hbmFnZXI6Omlu
c3RhbmNlKCk7CisgICAgUVN0cmluZyBwcm9maWxlID0gZ3JvdXAucmVhZFBhdGhFbnRyeSgiRGVm
YXVsdCBQcm9maWxlIiwgUVN0cmluZygpKTsKKyAgICBQcm9maWxlOjpQdHIgcHAgPSBtZ3ItPmRl
ZmF1bHRQcm9maWxlKCk7CisgICAgaWYgKCFwcm9maWxlLmlzRW1wdHkoKSkgcHAgPSBtZ3ItPmxv
YWRQcm9maWxlKHByb2ZpbGUpOworICAgIHNldERlZmF1bHRQcm9maWxlKHBwKTsKKyAgICBfdmll
d01hbmFnZXItPnJlc3RvcmVTZXNzaW9ucyhncm91cCk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6
c2F2ZUdsb2JhbFByb3BlcnRpZXMoS0NvbmZpZyogY29uZmlnKQoreworICAgIFNlc3Npb25NYW5h
Z2VyOjppbnN0YW5jZSgpLT5zYXZlU2Vzc2lvbnMoY29uZmlnKTsKK30KKwordm9pZCBNYWluV2lu
ZG93OjpyZWFkR2xvYmFsUHJvcGVydGllcyhLQ29uZmlnKiBjb25maWcpCit7CisgICAgU2Vzc2lv
bk1hbmFnZXI6Omluc3RhbmNlKCktPnJlc3RvcmVTZXNzaW9ucyhjb25maWcpOworfQorCiB2b2lk
IE1haW5XaW5kb3c6OnNob3dTaG9ydGN1dHNEaWFsb2coKQogewogICAgIEtTaG9ydGN1dHNEaWFs
b2c6OmNvbmZpZ3VyZSggYWN0aW9uQ29sbGVjdGlvbigpICwKZGlmZiAtLWdpdCBrb25zb2xlLWtk
ZWJhc2UtNC4xLjAvc3JjL01haW5XaW5kb3cuaCBrb25zb2xlL3NyYy9NYWluV2luZG93LmgKaW5k
ZXggMmEwMWI5ZC4uNWMwNjQ0YiAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMv
TWFpbldpbmRvdy5oCisrKyBrb25zb2xlL3NyYy9NYWluV2luZG93LmgKQEAgLTEzMyw2ICsxMzMs
MTIgQEAgY2xhc3MgTWFpbldpbmRvdyA6IHB1YmxpYyBLWG1sR3VpV2luZG93CiAgICAgICAgIC8v
IHJlaW1wbGVtZW50ZWQgZnJvbSBLTWFpbldpbmRvdwogICAgICAgICB2aXJ0dWFsIGJvb2wgcXVl
cnlDbG9zZSgpOwogCisJLy8gc2Vzc2lvbiBtYW5hZ2VtZW50CisJdmlydHVhbCB2b2lkIHNhdmVQ
cm9wZXJ0aWVzKEtDb25maWdHcm91cCYgZ3JvdXApOworCXZpcnR1YWwgdm9pZCByZWFkUHJvcGVy
dGllcyhjb25zdCBLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKwl2aXJ0dWFsIHZvaWQgc2F2ZUdsb2Jh
bFByb3BlcnRpZXMoS0NvbmZpZyogY29uZmlnKTsKKwl2aXJ0dWFsIHZvaWQgcmVhZEdsb2JhbFBy
b3BlcnRpZXMoS0NvbmZpZyogY29uZmlnKTsKKwogICAgIHByaXZhdGUgc2xvdHM6CiAgICAgICAg
IHZvaWQgbmV3VGFiKCk7CiAgICAgICAgIHZvaWQgbmV3V2luZG93KCk7CmRpZmYgLS1naXQga29u
c29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uLmNwcCBrb25zb2xlL3NyYy9TZXNzaW9uLmNw
cAppbmRleCA4MzgxZmIwLi41YzAyZWQwIDEwMDY0NAotLS0ga29uc29sZS1rZGViYXNlLTQuMS4w
L3NyYy9TZXNzaW9uLmNwcAorKysga29uc29sZS9zcmMvU2Vzc2lvbi5jcHAKQEAgLTIyLDYgKzIy
LDcgQEAKIAogLy8gT3duCiAjaW5jbHVkZSAiU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlByb2Nlc3NJ
bmZvLmgiCiAKIC8vIFN0YW5kYXJkCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBAIC05NzksNiArOTgw
LDMxIEBAIGludCBTZXNzaW9uOjpwcm9jZXNzSWQoKSBjb25zdAogICAgIHJldHVybiBfc2hlbGxQ
cm9jZXNzLT5waWQoKTsKIH0KIAordm9pZCBTZXNzaW9uOjpzYXZlU2Vzc2lvbihLQ29uZmlnR3Jv
dXAmIGdyb3VwKQoreworICAgIC8vIHJldXNlIHRhYiBmb3JtYXR0aW5nIGNvZGUgdG8gZmV0Y2gg
Y3VycmVudCBkaXJlY3RvcnkKKyAgICBQcm9jZXNzSW5mbyAqcGkgPSBQcm9jZXNzSW5mbzo6bmV3
SW5zdGFuY2UocHJvY2Vzc0lkKCkpOworICAgIHBpLT51cGRhdGUoKTsKKyAgICBRU3RyaW5nIGN3
ZCA9IHBpLT5mb3JtYXQoIiVEIik7CisgICAgZGVsZXRlIHBpOworCisgICAgZ3JvdXAud3JpdGVQ
YXRoRW50cnkoIldvcmtpbmdEaXIiLCBjd2QpOworICAgIGdyb3VwLndyaXRlRW50cnkoIkxvY2Fs
VGFiIiwgICAgICAgdGFiVGl0bGVGb3JtYXQoTG9jYWxUYWJUaXRsZSkpOworICAgIGdyb3VwLndy
aXRlRW50cnkoIlJlbW90ZVRhYiIsICAgICAgdGFiVGl0bGVGb3JtYXQoUmVtb3RlVGFiVGl0bGUp
KTsKK30KKwordm9pZCBTZXNzaW9uOjpyZXN0b3JlU2Vzc2lvbihLQ29uZmlnR3JvdXAmIGdyb3Vw
KQoreworICAgIFFTdHJpbmcgczsKKworICAgIHMgPSBncm91cC5yZWFkUGF0aEVudHJ5KCJXb3Jr
aW5nRGlyIiwgUVN0cmluZygpKTsKKyAgICBpZiAoIXMuaXNFbXB0eSgpKSBzZXRJbml0aWFsV29y
a2luZ0RpcmVjdG9yeShzKTsKKyAgICBzID0gZ3JvdXAucmVhZEVudHJ5KCJMb2NhbFRhYiIpOwor
ICAgIGlmICghcy5pc0VtcHR5KCkpIHNldFRhYlRpdGxlRm9ybWF0KExvY2FsVGFiVGl0bGUsIHMp
OworICAgIHMgPSBncm91cC5yZWFkRW50cnkoIlJlbW90ZVRhYiIpOworICAgIGlmICghcy5pc0Vt
cHR5KCkpIHNldFRhYlRpdGxlRm9ybWF0KFJlbW90ZVRhYlRpdGxlLCBzKTsKK30KKwogU2Vzc2lv
bkdyb3VwOjpTZXNzaW9uR3JvdXAoUU9iamVjdCogcGFyZW50KQogICAgIDogUU9iamVjdChwYXJl
bnQpLCBfbWFzdGVyTW9kZSgwKQogewpkaWZmIC0tZ2l0IGtvbnNvbGUta2RlYmFzZS00LjEuMC9z
cmMvU2Vzc2lvbi5oIGtvbnNvbGUvc3JjL1Nlc3Npb24uaAppbmRleCAyYTA5MjIyLi5hZGQyOTc3
IDEwMDY0NAotLS0ga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uLmgKKysrIGtvbnNv
bGUvc3JjL1Nlc3Npb24uaApAQCAtMzc4LDYgKzM3OCwxMCBAQCBwdWJsaWM6CiAJUHJvZmlsZUNo
YW5nZQkJCT0gNTAgCS8vIHRoaXMgY2xhc2hlcyB3aXRoIFh0ZXJtJ3MgZm9udCBjaGFuZ2UgY29t
bWFuZAogICB9OwogCisgIC8vIHNlc3Npb24gbWFuYWdlbWVudAorICB2b2lkIHNhdmVTZXNzaW9u
KEtDb25maWdHcm91cCYgZ3JvdXApOworICB2b2lkIHJlc3RvcmVTZXNzaW9uKEtDb25maWdHcm91
cCYgZ3JvdXApOworCiBwdWJsaWMgc2xvdHM6CiAKICAgLyoqCmRpZmYgLS1naXQga29uc29sZS1r
ZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uTWFuYWdlci5jcHAga29uc29sZS9zcmMvU2Vzc2lvbk1h
bmFnZXIuY3BwCmluZGV4IGJiY2NlNzYuLmMyYWEwZTMgMTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJh
c2UtNC4xLjAvc3JjL1Nlc3Npb25NYW5hZ2VyLmNwcAorKysga29uc29sZS9zcmMvU2Vzc2lvbk1h
bmFnZXIuY3BwCkBAIC03MzAsNiArNzMwLDY5IEBAIFFLZXlTZXF1ZW5jZSBTZXNzaW9uTWFuYWdl
cjo6c2hvcnRjdXQoUHJvZmlsZTo6UHRyIGluZm8pIGNvbnN0CiAgICAgcmV0dXJuIFFLZXlTZXF1
ZW5jZSgpOwogfQogCit2b2lkIFNlc3Npb25NYW5hZ2VyOjpzYXZlU2Vzc2lvbnMoS0NvbmZpZyog
Y29uZmlnKQoreworCS8vIFRoZSBzZXNzaW9uIElEcyBjYW4ndCBiZSByZXN0b3JlZC4KKwkvLyBT
byB3ZSBuZWVkIHRvIG1hcCB0aGUgb2xkIElEIHRvIHRoZSBmdXR1cmUgbmV3IElELgorCWludCBu
ID0gMTsKKwlfcmVzdG9yZU1hcHBpbmcuY2xlYXIoKTsKKworCWZvcmVhY2goU2Vzc2lvbiogc2Vz
c2lvbiwgX3Nlc3Npb25zKQorCXsKKwkJUVN0cmluZyBzID0gUUxhdGluMVN0cmluZygiU2Vzc2lv
biIpICsgUVN0cmluZzo6bnVtYmVyKG4pOworCQlLQ29uZmlnR3JvdXAgZ3JvdXAoY29uZmlnLCBz
KTsKKworCQlncm91cC53cml0ZVBhdGhFbnRyeSgiUHJvZmlsZSIsCisJCQkJICAgICBfc2Vzc2lv
blByb2ZpbGVzLnZhbHVlKHNlc3Npb24pLT5wYXRoKCkpOworCQlzZXNzaW9uLT5zYXZlU2Vzc2lv
bihncm91cCk7CisJCV9yZXN0b3JlTWFwcGluZy5pbnNlcnQoc2Vzc2lvbiwgbik7CisJCW4rKzsK
Kwl9CisKKwlLQ29uZmlnR3JvdXAgZ3JvdXAoY29uZmlnLCAiTnVtYmVyIik7CisJZ3JvdXAud3Jp
dGVFbnRyeSgiTnVtYmVyT2ZTZXNzaW9ucyIsIF9zZXNzaW9ucy5jb3VudCgpKTsKK30KKworaW50
IFNlc3Npb25NYW5hZ2VyOjpnZXRSZXN0b3JlSWQoU2Vzc2lvbiogc2Vzc2lvbikKK3sKKwlyZXR1
cm4gX3Jlc3RvcmVNYXBwaW5nLnZhbHVlKHNlc3Npb24pOworfQorCit2b2lkIFNlc3Npb25NYW5h
Z2VyOjpyZXN0b3JlU2Vzc2lvbnMoS0NvbmZpZyogY29uZmlnKQoreworCUtDb25maWdHcm91cCBn
cm91cChjb25maWcsICJOdW1iZXIiKTsKKwlpbnQgc2Vzc2lvbnM7CisKKwkvLyBBbnkgc2Vzc2lv
bnMgc2F2ZWQ/CisJaWYgKChzZXNzaW9ucyA9IGdyb3VwLnJlYWRFbnRyeSgiTnVtYmVyT2ZTZXNz
aW9ucyIsIDApKSA+IDApCisJeworCQlmb3IgKGludCBuID0gMTsgbiA8PSBzZXNzaW9uczsgbisr
KQorCQl7CisJCQlRU3RyaW5nIHMgPSBRTGF0aW4xU3RyaW5nKCJTZXNzaW9uIikgKyBRU3RyaW5n
OjpudW1iZXIobik7CisJCQlLQ29uZmlnR3JvdXAgY2coY29uZmlnLCBzKTsKKworCQkJUVN0cmlu
ZyBwcm9maWxlID0gY2cucmVhZFBhdGhFbnRyeSgiUHJvZmlsZSIsIFFTdHJpbmcoKSk7CisJCQlQ
cm9maWxlOjpQdHIgcHAgPSBkZWZhdWx0UHJvZmlsZSgpOworCQkJaWYgKCFwcm9maWxlLmlzRW1w
dHkoKSkgcHAgPSBsb2FkUHJvZmlsZShwcm9maWxlKTsKKworCQkJU2Vzc2lvbiogc2Vzc2lvbiA9
IGNyZWF0ZVNlc3Npb24ocHApOworCQkJc2Vzc2lvbi0+cmVzdG9yZVNlc3Npb24oY2cpOworCQl9
CisJfQorfQorCitTZXNzaW9uKiBTZXNzaW9uTWFuYWdlcjo6aWRUb1Nlc3Npb24oaW50IGlkKQor
eworCVFfQVNTRVJUKGlkKTsgCisJZm9yZWFjaChTZXNzaW9uKiBzZXNzaW9uLCBfc2Vzc2lvbnMp
CisJCWlmIChzZXNzaW9uLT5zZXNzaW9uSWQoKSA9PSBpZCkKKwkJCXJldHVybiBzZXNzaW9uOwor
CisJLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbgorCVFfQVNTRVJUKGlkID09IDApOworCXJldHVy
biAwOworfQorCiBLX0dMT0JBTF9TVEFUSUMoIFNlc3Npb25NYW5hZ2VyICwgdGhlU2Vzc2lvbk1h
bmFnZXIgKQogU2Vzc2lvbk1hbmFnZXIqIFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpCiB7CmRp
ZmYgLS1naXQga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uTWFuYWdlci5oIGtvbnNv
bGUvc3JjL1Nlc3Npb25NYW5hZ2VyLmgKaW5kZXggOTkwNDUwZC4uZjhiYmQ1NiAxMDA2NDQKLS0t
IGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvU2Vzc2lvbk1hbmFnZXIuaAorKysga29uc29sZS9z
cmMvU2Vzc2lvbk1hbmFnZXIuaApAQCAtMjQzLDYgKzI0MywxMiBAQCBwdWJsaWM6CiAgICAgICov
CiAgICAgc3RhdGljIFNlc3Npb25NYW5hZ2VyKiBpbnN0YW5jZSgpOwogCisgICAgLy8gc2Vzc2lv
biBtYW5hZ2VtZW50CisgICAgdm9pZCBzYXZlU2Vzc2lvbnMoS0NvbmZpZyogY29uZmlnKTsKKyAg
ICBpbnQgIGdldFJlc3RvcmVJZChTZXNzaW9uKiBzZXNzaW9uKTsKKyAgICB2b2lkIHJlc3RvcmVT
ZXNzaW9ucyhLQ29uZmlnKiBjb25maWcpOworICAgIFNlc3Npb24gKmlkVG9TZXNzaW9uKGludCBp
ZCk7CisKIHNpZ25hbHM6CiAgICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHByb2ZpbGUgaXMgYWRkZWQg
dG8gdGhlIG1hbmFnZXIuICovCiAgICAgdm9pZCBwcm9maWxlQWRkZWQoUHJvZmlsZTo6UHRyIHB0
cik7CkBAIC0zMTgsNiArMzI0LDcgQEAgcHJpdmF0ZToKIAogCVFTZXQ8UHJvZmlsZTo6UHRyPiBf
dHlwZXM7CiAgICAgUUhhc2g8U2Vzc2lvbiosUHJvZmlsZTo6UHRyPiBfc2Vzc2lvblByb2ZpbGVz
OworICAgIFFIYXNoPFNlc3Npb24qLGludD4gX3Jlc3RvcmVNYXBwaW5nOwogCiAgICAgc3RydWN0
IFNob3J0Y3V0RGF0YQogICAgIHsKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3Jj
L1ZpZXdNYW5hZ2VyLmNwcCBrb25zb2xlL3NyYy9WaWV3TWFuYWdlci5jcHAKaW5kZXggMzQ5Yzg5
Yi4uNDNkZTkzYiAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvVmlld01hbmFn
ZXIuY3BwCisrKyBrb25zb2xlL3NyYy9WaWV3TWFuYWdlci5jcHAKQEAgLTgzOCw2ICs4MzgsMjkg
QEAgUUxpc3Q8Vmlld1Byb3BlcnRpZXMqPiBWaWV3TWFuYWdlcjo6dmlld1Byb3BlcnRpZXMoKSBj
b25zdAogICAgIHJldHVybiBsaXN0OwogfQogCit2b2lkIFZpZXdNYW5hZ2VyOjpzYXZlU2Vzc2lv
bnMoS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICAvLyBmaW5kIGFsbCB1bmlxdWUgc2Vzc2lv
biByZXN0b3JlIElEcworICAgIC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyBwcmVzZXJ2ZXMgdGhl
IHRhYiBvcmRlcmluZyEKKyAgICBRSGFzaDxTZXNzaW9uKixpbnQ+IHVuaXF1ZTsKKyAgICBmb3Jl
YWNoKFNlc3Npb24qIHNlc3Npb24sIF9zZXNzaW9uTWFwKQorCXVuaXF1ZS5pbnNlcnQoc2Vzc2lv
biwKKwkJICAgICAgU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCktPmdldFJlc3RvcmVJZChzZXNz
aW9uKSk7CisgICAgZ3JvdXAud3JpdGVFbnRyeSgiU2Vzc2lvbnMiLCB1bmlxdWUudmFsdWVzKCkp
OworfQorCit2b2lkIFZpZXdNYW5hZ2VyOjpyZXN0b3JlU2Vzc2lvbnMoY29uc3QgS0NvbmZpZ0dy
b3VwJiBncm91cCkKK3sKKyAgICBRTGlzdDxpbnQ+IGlkcyA9IGdyb3VwLnJlYWRFbnRyeSgiU2Vz
c2lvbnMiLCBRTGlzdDxpbnQ+KCkpOworCisgICAgZm9yZWFjaChpbnQgaWQsIGlkcykKKyAgICB7
CisJU2Vzc2lvbiAqc2Vzc2lvbiA9IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5pZFRvU2Vz
c2lvbihpZCk7CisJY3JlYXRlVmlldyhzZXNzaW9uKTsKKwlzZXNzaW9uLT5ydW4oKTsKKyAgICB9
Cit9CisKIHVpbnQgcUhhc2goUVBvaW50ZXI8VGVybWluYWxEaXNwbGF5PiBkaXNwbGF5KQogewog
ICAgIHJldHVybiBxSGFzaCgoVGVybWluYWxEaXNwbGF5KilkaXNwbGF5KTsKZGlmZiAtLWdpdCBr
b25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL1ZpZXdNYW5hZ2VyLmgga29uc29sZS9zcmMvVmlld01h
bmFnZXIuaAppbmRleCBhZTlkYjhjLi45YWIyMjcyIDEwMDY0NAotLS0ga29uc29sZS1rZGViYXNl
LTQuMS4wL3NyYy9WaWV3TWFuYWdlci5oCisrKyBrb25zb2xlL3NyYy9WaWV3TWFuYWdlci5oCkBA
IC0xNDIsMTEgKzE0MiwxNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgTmF2aWdhdGlvbk1ldGhv
ZCBuYXZpZ2F0aW9uTWV0aG9kKCkgY29uc3Q7CiAKLQkvKiogCi0gCSAqIFJldHVybnMgdGhlIGNv
bnRyb2xsZXIgZm9yIHRoZSBhY3RpdmUgdmlldy4gIGFjdGl2ZVZpZXdDaGFuZ2VkKCkgaXMgCi0g
CSAqIGVtaXR0ZWQgd2hlbiB0aGlzIGNoYW5nZXMuCi0JICovCi0JU2Vzc2lvbkNvbnRyb2xsZXIq
IGFjdGl2ZVZpZXdDb250cm9sbGVyKCkgY29uc3Q7CisgICAgLyoqIAorICAgICAqIFJldHVybnMg
dGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBhY3RpdmUgdmlldy4gIGFjdGl2ZVZpZXdDaGFuZ2VkKCkg
aXMgCisgICAgICogZW1pdHRlZCB3aGVuIHRoaXMgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBTZXNz
aW9uQ29udHJvbGxlciogYWN0aXZlVmlld0NvbnRyb2xsZXIoKSBjb25zdDsKKworICAgIC8qKgor
ICAgICAqIFNlc3Npb24gbWFuYWdlbWVudAorICAgICAqLworICAgIHZvaWQgc2F2ZVNlc3Npb25z
KEtDb25maWdHcm91cCYgZ3JvdXApOworICAgIHZvaWQgcmVzdG9yZVNlc3Npb25zKGNvbnN0IEtD
b25maWdHcm91cCYgZ3JvdXApOwogCiBzaWduYWxzOgogICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhl
IGxhc3QgdmlldyBpcyByZW1vdmVkIGZyb20gdGhlIHZpZXcgbWFuYWdlciAqLwpkaWZmIC0tZ2l0
IGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvbWFpbi5jcHAga29uc29sZS9zcmMvbWFpbi5jcHAK
aW5kZXggMTdhZTFjZC4uNDE3YTZhYSAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9z
cmMvbWFpbi5jcHAKKysrIGtvbnNvbGUvc3JjL21haW4uY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAK
IC8vIE93bgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5o
IgogI2luY2x1ZGUgPEtEZWJ1Zz4KIAogLy8gVW5peApAQCAtNTEsNiArNTIsNyBAQCB2b2lkIGZp
bGxDb21tYW5kTGluZU9wdGlvbnMoS0NtZExpbmVPcHRpb25zJiBvcHRpb25zKTsKIGJvb2wgdXNl
VHJhbnNwYXJlbmN5KCk7ICAgICAvLyByZXR1cm5zIHRydWUgaWYgdHJhbnNwYXJlbmN5IHNob3Vs
ZCBiZSBlbmFibGVkCiBib29sIGZvcmNlTmV3UHJvY2VzcygpOyAgICAgLy8gcmV0dXJucyB0cnVl
IGlmIG5ldyBpbnN0YW5jZSBzaG91bGQgdXNlIGEgbmV3CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcHJvY2VzcyAoaW5zdGVhZCBvZiByZS11c2luZyBhbiBleGlzdGluZyBvbmUpCit2
b2lkIHJlc3RvcmVTZXNzaW9uKEFwcGxpY2F0aW9uJiBhcHApOwogCiAvLyAqKioKIC8vIEVudHJ5
IHBvaW50IGludG8gdGhlIEtvbnNvbGUgdGVybWluYWwgYXBwbGljYXRpb24uICAKQEAgLTkxLDEy
ICs5MywxNCBAQCBleHRlcm4gIkMiIGludCBLREVfRVhQT1JUIGtkZW1haW4oaW50IGFyZ2MsY2hh
cioqIGFyZ3YpCiAJCWdldERpc3BsYXlJbmZvcm1hdGlvbihkaXNwbGF5LHZpc3VhbCxjb2xvcm1h
cCk7CiAKIAkJQXBwbGljYXRpb24gYXBwKGRpc3BsYXksKFF0OjpIQU5ETEUpdmlzdWFsLChRdDo6
SEFORExFKWNvbG9ybWFwKTsKKwkJcmVzdG9yZVNlc3Npb24oYXBwKTsKIAkJcmV0dXJuIGFwcC5l
eGVjKCk7CiAJfQogCWVsc2UKICNlbmRpZiAKIAl7CiAgICAgCUFwcGxpY2F0aW9uIGFwcDsKKwly
ZXN0b3JlU2Vzc2lvbihhcHApOwogICAgIAlyZXR1cm4gYXBwLmV4ZWMoKTsKIAl9ICAgCiB9CkBA
IC0yNDIsNCArMjQ2LDExIEBAIHZvaWQgZ2V0RGlzcGxheUluZm9ybWF0aW9uKERpc3BsYXkqJiBk
aXNwbGF5ICwgVmlzdWFsKiYgdmlzdWFsICwgQ29sb3JtYXAmIGNvbG9yCiB9CiAjZW5kaWYKIAot
Cit2b2lkIHJlc3RvcmVTZXNzaW9uKEFwcGxpY2F0aW9uJiBhcHApCit7CisgICAgaWYgKGFwcC5p
c1Nlc3Npb25SZXN0b3JlZCgpKSB7CisJaW50IG4gPSAxOworCXdoaWxlIChLTWFpbldpbmRvdzo6
Y2FuQmVSZXN0b3JlZChuKSkKKwkgICAgYXBwLm5ld01haW5XaW5kb3coKS0+cmVzdG9yZShuKysp
OworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27358</attachid>
            <date>2008-09-10 23:58:32 +0000</date>
            <delta_ts>2008-09-11 00:23:48 +0000</delta_ts>
            <desc>Proposed patch for upstream merge</desc>
            <filename>kdebase-4.1.0-konsole-session-management.patch</filename>
            <type>text/plain</type>
            <size>15887</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">IHNyYy9BcHBsaWNhdGlvbi5jcHAgICAgfCAgIDczICsrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvTWFpbldpbmRvdy5jcHAgICAgIHwgICAyNyArKysr
KysrKysrKysrKysrKwogc3JjL01haW5XaW5kb3cuaCAgICAgICB8ICAgIDYgKysrKwogc3JjL1Nl
c3Npb24uY3BwICAgICAgICB8ICAgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog
c3JjL1Nlc3Npb24uaCAgICAgICAgICB8ICAgIDQgKysKIHNyYy9TZXNzaW9uTWFuYWdlci5jcHAg
fCAgIDYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvU2Vz
c2lvbk1hbmFnZXIuaCAgIHwgICAgNyArKysrCiBzcmMvVmlld01hbmFnZXIuY3BwICAgIHwgICA2
MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvVmlld01hbmFn
ZXIuaCAgICAgIHwgICAxNiArKysrKysrLS0tCiBzcmMvbWFpbi5jcHAgICAgICAgICAgIHwgICAx
MyArKysrKysrKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDI4MCBpbnNlcnRpb25zKCspLCAzOSBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9BcHBsaWNhdGlv
bi5jcHAga29uc29sZS9zcmMvQXBwbGljYXRpb24uY3BwCmluZGV4IGYzZjUyZTguLmQyMmQ1OTIg
MTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL0FwcGxpY2F0aW9uLmNwcAorKysg
a29uc29sZS9zcmMvQXBwbGljYXRpb24uY3BwCkBAIC0xMDMsNDkgKzEwMyw1NiBAQCB2b2lkIEFw
cGxpY2F0aW9uOjpsaXN0QXZhaWxhYmxlUHJvZmlsZXMoKQogaW50IEFwcGxpY2F0aW9uOjpuZXdJ
bnN0YW5jZSgpCiB7CiAgICAgS0NtZExpbmVBcmdzKiBhcmdzID0gS0NtZExpbmVBcmdzOjpwYXJz
ZWRBcmdzKCk7CisgICAgc3RhdGljIGJvb2wgZmlyc3QgPSB0cnVlOwogCi0gICAgLy8gY2hlY2sg
Zm9yIGFyZ3VtZW50cyB0byBwcmludCBoZWxwIG9yIG90aGVyIGluZm9ybWF0aW9uIHRvIHRoZSB0
ZXJtaW5hbCwKLSAgICAvLyBxdWl0IGlmIHN1Y2ggYW4gYXJndW1lbnQgd2FzIGZvdW5kCi0gICAg
aWYgKCBwcm9jZXNzSGVscEFyZ3MoYXJncykgKSAKLSAgICAgICAgcmV0dXJuIDA7CisgICAgLy8g
aGFuZGxlIHNlc3Npb24gbWFuYWdlbWVudAorICAgIGlmICgoYXJncy0+Y291bnQoKSAhPSAwKSB8
fCAhZmlyc3QgfHwgIWlzU2Vzc2lvblJlc3RvcmVkKCkpCisgICAgeworICAgICAgICAvLyBjaGVj
ayBmb3IgYXJndW1lbnRzIHRvIHByaW50IGhlbHAgb3Igb3RoZXIgaW5mb3JtYXRpb24gdG8gdGhl
IHRlcm1pbmFsLAorICAgICAgICAvLyBxdWl0IGlmIHN1Y2ggYW4gYXJndW1lbnQgd2FzIGZvdW5k
CisgICAgICAgIGlmICggcHJvY2Vzc0hlbHBBcmdzKGFyZ3MpICkgCisJICAgIHJldHVybiAwOwog
Ci0gICAgLy8gY3JlYXRlIGEgbmV3IHdpbmRvdyBvciB1c2UgYW4gZXhpc3Rpbmcgb25lIAotICAg
IE1haW5XaW5kb3cqIHdpbmRvdyA9IHByb2Nlc3NXaW5kb3dBcmdzKGFyZ3MpOworCS8vIGNyZWF0
ZSBhIG5ldyB3aW5kb3cgb3IgdXNlIGFuIGV4aXN0aW5nIG9uZSAKKwlNYWluV2luZG93KiB3aW5k
b3cgPSBwcm9jZXNzV2luZG93QXJncyhhcmdzKTsKICAgCi0gICAgLy8gc2VsZWN0IHByb2ZpbGUg
dG8gdXNlIAotICAgIHByb2Nlc3NQcm9maWxlU2VsZWN0QXJncyhhcmdzLHdpbmRvdyk7CisJLy8g
c2VsZWN0IHByb2ZpbGUgdG8gdXNlIAorCXByb2Nlc3NQcm9maWxlU2VsZWN0QXJncyhhcmdzLHdp
bmRvdyk7CiAgICAKLSAgICAvLyBwcm9jZXNzIHZhcmlvdXMgY29tbWFuZC1saW5lIG9wdGlvbnMg
d2hpY2ggY2F1c2UgYSBwcm9wZXJ0eSBvZiB0aGUgCi0gICAgLy8gZGVmYXVsdCBwcm9maWxlIHRv
IGJlIGNoYW5nZWQgCi0gICAgcHJvY2Vzc1Byb2ZpbGVDaGFuZ2VBcmdzKGFyZ3Msd2luZG93KTsK
KwkvLyBwcm9jZXNzIHZhcmlvdXMgY29tbWFuZC1saW5lIG9wdGlvbnMgd2hpY2ggY2F1c2UgYSBw
cm9wZXJ0eSBvZiB0aGUgCisJLy8gZGVmYXVsdCBwcm9maWxlIHRvIGJlIGNoYW5nZWQgCisJcHJv
Y2Vzc1Byb2ZpbGVDaGFuZ2VBcmdzKGFyZ3Msd2luZG93KTsKIAotICAgIC8vIGNyZWF0ZSBuZXcg
c2Vzc2lvbgotICAgIFNlc3Npb24qIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKCB3aW5kb3ctPmRl
ZmF1bHRQcm9maWxlKCkgLCBRU3RyaW5nKCkgLCB3aW5kb3ctPnZpZXdNYW5hZ2VyKCkgKTsKKwkv
LyBjcmVhdGUgbmV3IHNlc3Npb24KKwlTZXNzaW9uKiBzZXNzaW9uID0gY3JlYXRlU2Vzc2lvbigg
d2luZG93LT5kZWZhdWx0UHJvZmlsZSgpICwgUVN0cmluZygpICwgd2luZG93LT52aWV3TWFuYWdl
cigpICk7CiAJaWYgKCAhYXJncy0+aXNTZXQoImNsb3NlIikgKQotCQlzZXNzaW9uLT5zZXRBdXRv
Q2xvc2UoZmFsc2UpOworCSAgc2Vzc2lvbi0+c2V0QXV0b0Nsb3NlKGZhbHNlKTsKIAotICAgIC8v
IGlmIHRoZSBiYWNrZ3JvdW5kLW1vZGUgYXJndW1lbnQgaXMgc3VwcGxpZWQsIHN0YXJ0IHRoZSBi
YWNrZ3JvdW5kIHNlc3Npb24KLSAgICAvLyAoIG9yIGJyaW5nIHRvIHRoZSBmcm9udCBpZiBpdCBh
bHJlYWR5IGV4aXN0cyApCi0gICAgaWYgKCBhcmdzLT5pc1NldCgiYmFja2dyb3VuZC1tb2RlIikg
KQotICAgICAgICBzdGFydEJhY2tncm91bmRNb2RlKHdpbmRvdyk7Ci0gICAgZWxzZQorCS8vIGlm
IHRoZSBiYWNrZ3JvdW5kLW1vZGUgYXJndW1lbnQgaXMgc3VwcGxpZWQsIHN0YXJ0IHRoZSBiYWNr
Z3JvdW5kIHNlc3Npb24KKwkvLyAoIG9yIGJyaW5nIHRvIHRoZSBmcm9udCBpZiBpdCBhbHJlYWR5
IGV4aXN0cyApCisJaWYgKCBhcmdzLT5pc1NldCgiYmFja2dyb3VuZC1tb2RlIikgKQorCSAgICBz
dGFydEJhY2tncm91bmRNb2RlKHdpbmRvdyk7CisJZWxzZQogCXsKLQkJLy8gUXQgY29uc3RyYWlu
cyB0b3AtbGV2ZWwgd2luZG93cyB3aGljaCBoYXZlIG5vdCBiZWVuIG1hbnVhbGx5IHJlc2l6ZWQK
LQkJLy8gKHZpYSBRV2lkZ2V0OjpyZXNpemUoKSkgdG8gYSBtYXhpbXVtIG9mIDIvM3JkcyBvZiB0
aGUgc2NyZWVuIHNpemUuCi0JCS8vCi0JCS8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGVybWluYWwg
ZGlzcGxheSBtaWdodCBub3QgZ2V0IHRoZSB3aWR0aC9oZWlnaHQKLQkJLy8gaXQgYXNrcyBmb3Iu
ICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB0aGUgd2lkZ2V0IG11c3QgYmUgbWFudWFsbHkgcmVzaXpl
ZAotCQkvLyB0byBpdHMgc2l6ZUhpbnQoKS4KLQkJLy8KLQkJLy8gVGhpcyBwcm9ibGVtIG9ubHkg
YWZmZWN0cyB0aGUgZmlyc3QgdGltZSB0aGUgYXBwbGljYXRpb24gaXMgcnVuLiAgQWZ0ZXIKLQkJ
Ly8gdGhhdCBLTWFpbldpbmRvdyB3aWxsIGhhdmUgbWFudWFsbHkgcmVzaXplZCB0aGUgd2luZG93
IHRvIGl0cyBzYXZlZCBzaXplCi0JCS8vIGF0IHRoaXMgcG9pbnQgKHNvIHRoZSBRdDo6V0FfUmVz
aXplZCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQpCi0JCWlmICghd2luZG93LT50ZXN0QXR0cmlidXRl
KFF0OjpXQV9SZXNpemVkKSkKLQkJCXdpbmRvdy0+cmVzaXplKHdpbmRvdy0+c2l6ZUhpbnQoKSk7
Ci0KLQkJd2luZG93LT5zaG93KCk7CisJICAgIC8vIFF0IGNvbnN0cmFpbnMgdG9wLWxldmVsIHdp
bmRvd3Mgd2hpY2ggaGF2ZSBub3QgYmVlbiBtYW51YWxseSByZXNpemVkCisJICAgIC8vICh2aWEg
UVdpZGdldDo6cmVzaXplKCkpIHRvIGEgbWF4aW11bSBvZiAyLzNyZHMgb2YgdGhlIHNjcmVlbiBz
aXplLgorCSAgICAvLworCSAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHRlcm1pbmFsIGRpc3Bs
YXkgbWlnaHQgbm90IGdldCB0aGUgd2lkdGgvaGVpZ2h0CisJICAgIC8vIGl0IGFza3MgZm9yLiAg
VG8gd29yayBhcm91bmQgdGhpcywgdGhlIHdpZGdldCBtdXN0IGJlIG1hbnVhbGx5IHJlc2l6ZWQK
KwkgICAgLy8gdG8gaXRzIHNpemVIaW50KCkuCisJICAgIC8vCisJICAgIC8vIFRoaXMgcHJvYmxl
bSBvbmx5IGFmZmVjdHMgdGhlIGZpcnN0IHRpbWUgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bi4gIEFm
dGVyCisJICAgIC8vIHRoYXQgS01haW5XaW5kb3cgd2lsbCBoYXZlIG1hbnVhbGx5IHJlc2l6ZWQg
dGhlIHdpbmRvdyB0byBpdHMgc2F2ZWQgc2l6ZQorCSAgICAvLyBhdCB0aGlzIHBvaW50IChzbyB0
aGUgUXQ6OldBX1Jlc2l6ZWQgYXR0cmlidXRlIHdpbGwgYmUgc2V0KQorCSAgICBpZiAoIXdpbmRv
dy0+dGVzdEF0dHJpYnV0ZShRdDo6V0FfUmVzaXplZCkpCisJICAgICAgICB3aW5kb3ctPnJlc2l6
ZSh3aW5kb3ctPnNpemVIaW50KCkpOworCisJICAgIHdpbmRvdy0+c2hvdygpOwogCX0KKyAgICB9
CiAKKyAgICBmaXJzdCA9IGZhbHNlOworICAgIGFyZ3MtPmNsZWFyKCk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL01haW5XaW5kb3cuY3Bw
IGtvbnNvbGUvc3JjL01haW5XaW5kb3cuY3BwCmluZGV4IGMwOWZlZGIuLjZjZmRkMTkgMTAwNjQ0
Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL01haW5XaW5kb3cuY3BwCisrKyBrb25zb2xl
L3NyYy9NYWluV2luZG93LmNwcApAQCAtMTksNiArMTksNyBAQAogCiAvLyBPd24KICNpbmNsdWRl
ICJNYWluV2luZG93LmgiCisjaW5jbHVkZSAiU2Vzc2lvbk1hbmFnZXIuaCIKIAogLy8gUXQKICNp
bmNsdWRlIDxRdEd1aS9RQm94TGF5b3V0PgpAQCAtMzcyLDYgKzM3MywzMiBAQCBib29sIE1haW5X
aW5kb3c6OnF1ZXJ5Q2xvc2UoKQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIE1haW5XaW5k
b3c6OnNhdmVQcm9wZXJ0aWVzKEtDb25maWdHcm91cCYgZ3JvdXApCit7CisgICAgZ3JvdXAud3Jp
dGVQYXRoRW50cnkoIkRlZmF1bHQgUHJvZmlsZSIsIF9kZWZhdWx0UHJvZmlsZS0+cGF0aCgpKTsK
KyAgICBfdmlld01hbmFnZXItPnNhdmVTZXNzaW9ucyhncm91cCk7Cit9CisKK3ZvaWQgTWFpbldp
bmRvdzo6cmVhZFByb3BlcnRpZXMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBT
ZXNzaW9uTWFuYWdlciAqbWdyID0gU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCk7CisgICAgUVN0
cmluZyBwcm9maWxlID0gZ3JvdXAucmVhZFBhdGhFbnRyeSgiRGVmYXVsdCBQcm9maWxlIiwgUVN0
cmluZygpKTsKKyAgICBQcm9maWxlOjpQdHIgcHAgPSBtZ3ItPmRlZmF1bHRQcm9maWxlKCk7Cisg
ICAgaWYgKCFwcm9maWxlLmlzRW1wdHkoKSkgcHAgPSBtZ3ItPmxvYWRQcm9maWxlKHByb2ZpbGUp
OworICAgIHNldERlZmF1bHRQcm9maWxlKHBwKTsKKyAgICBfdmlld01hbmFnZXItPnJlc3RvcmVT
ZXNzaW9ucyhncm91cCk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6c2F2ZUdsb2JhbFByb3BlcnRp
ZXMoS0NvbmZpZyogY29uZmlnKQoreworICAgIFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5z
YXZlU2Vzc2lvbnMoY29uZmlnKTsKK30KKwordm9pZCBNYWluV2luZG93OjpyZWFkR2xvYmFsUHJv
cGVydGllcyhLQ29uZmlnKiBjb25maWcpCit7CisgICAgU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNl
KCktPnJlc3RvcmVTZXNzaW9ucyhjb25maWcpOworfQorCiB2b2lkIE1haW5XaW5kb3c6OnNob3dT
aG9ydGN1dHNEaWFsb2coKQogewogICAgIEtTaG9ydGN1dHNEaWFsb2c6OmNvbmZpZ3VyZSggYWN0
aW9uQ29sbGVjdGlvbigpICwKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL01h
aW5XaW5kb3cuaCBrb25zb2xlL3NyYy9NYWluV2luZG93LmgKaW5kZXggMmEwMWI5ZC4uNWMwNjQ0
YiAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvTWFpbldpbmRvdy5oCisrKyBr
b25zb2xlL3NyYy9NYWluV2luZG93LmgKQEAgLTEzMyw2ICsxMzMsMTIgQEAgY2xhc3MgTWFpbldp
bmRvdyA6IHB1YmxpYyBLWG1sR3VpV2luZG93CiAgICAgICAgIC8vIHJlaW1wbGVtZW50ZWQgZnJv
bSBLTWFpbldpbmRvdwogICAgICAgICB2aXJ0dWFsIGJvb2wgcXVlcnlDbG9zZSgpOwogCisJLy8g
c2Vzc2lvbiBtYW5hZ2VtZW50CisJdmlydHVhbCB2b2lkIHNhdmVQcm9wZXJ0aWVzKEtDb25maWdH
cm91cCYgZ3JvdXApOworCXZpcnR1YWwgdm9pZCByZWFkUHJvcGVydGllcyhjb25zdCBLQ29uZmln
R3JvdXAmIGdyb3VwKTsKKwl2aXJ0dWFsIHZvaWQgc2F2ZUdsb2JhbFByb3BlcnRpZXMoS0NvbmZp
ZyogY29uZmlnKTsKKwl2aXJ0dWFsIHZvaWQgcmVhZEdsb2JhbFByb3BlcnRpZXMoS0NvbmZpZyog
Y29uZmlnKTsKKwogICAgIHByaXZhdGUgc2xvdHM6CiAgICAgICAgIHZvaWQgbmV3VGFiKCk7CiAg
ICAgICAgIHZvaWQgbmV3V2luZG93KCk7CmRpZmYgLS1naXQga29uc29sZS1rZGViYXNlLTQuMS4w
L3NyYy9TZXNzaW9uLmNwcCBrb25zb2xlL3NyYy9TZXNzaW9uLmNwcAppbmRleCA4MzgxZmIwLi45
OWI0ZGMyIDEwMDY0NAotLS0ga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uLmNwcAor
Kysga29uc29sZS9zcmMvU2Vzc2lvbi5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKIAogLy8gT3duCiAj
aW5jbHVkZSAiU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlByb2Nlc3NJbmZvLmgiCiAKIC8vIFN0YW5k
YXJkCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBAIC05NzksNiArOTgwLDUzIEBAIGludCBTZXNzaW9u
Ojpwcm9jZXNzSWQoKSBjb25zdAogICAgIHJldHVybiBfc2hlbGxQcm9jZXNzLT5waWQoKTsKIH0K
IAordm9pZCBTZXNzaW9uOjpzYXZlU2Vzc2lvbihLQ29uZmlnR3JvdXAmIGdyb3VwKQoreworICAg
IC8vIEZJWE1FPz8/IFdvdWxkIHRoZSB1c2VyIGV4cGVjdCBhIGRpZmZlcmVudCBiZWhhdmlvdXI/
CisgICAgLy8KKyAgICAvLyBDb250cmFyeSB0byBTZXNzaW9uQ29udHJvbGxlcjo6c25hcHNob3Qo
KSwgd2hpY2ggdXBkYXRlcyB0aGUgdGFicywKKyAgICAvLyB0aGlzIG1ldGhvZCBzdG9yZXMgdGhl
IGN1cnJlbnQgZGlyZWN0b3J5IG9mIHRoZSBzZXNzaW9uIHByb2Nlc3MgYW5kCisgICAgLy8gbm90
IGZyb20gdGhlIHByb2Nlc3MgdGhhdCBpcyBjdXJyZW50bHkgb24gdG9wIChmb3JlZ3JvdW5kUHJv
Y2Vzc0lkKCkpLgorICAgIC8vCisgICAgLy8gWW91IGNhbiBzZWUgdGhlIGRpZmZlcmVudCBiZWhh
dmlvdXIgd2l0aDoKKyAgICAvLworICAgIC8vICBvcGVuIGtvbnNvbGUKKyAgICAvLyAgJCBjZCBk
aXIxCisgICAgLy8gICQgYmFzaAorICAgIC8vICAkIGNkIC4uCisgICAgLy8gIC0tLT4gdGFiIHNo
b3dzIG9yaWdpbmFsIGRpcmVjdG9yeQorICAgIC8vICBjbG9zZSBLREUgc2Vzc2lvbgorICAgIC8v
ICBzdGFydCBLREUgc2Vzc2lvbgorICAgIC8vICAtLS0+IHNoZWxsIHN0YXJ0cyBpbiAiZGlyMSIK
KworICAgIC8vIHJldXNlIHRhYiBmb3JtYXR0aW5nIGNvZGUgdG8gZmV0Y2ggY3VycmVudCBkaXJl
Y3RvcnkKKyNpZiAwCisgICAgaW50IHBpZCA9IGZvcmVncm91bmRQcm9jZXNzSWQoKTsKKyAgICBQ
cm9jZXNzSW5mbyAqcGkgPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UocGlkICE9IDAgPyBwaWQg
OiBwcm9jZXNzSWQoKSk7CisjZWxzZQorICAgIFByb2Nlc3NJbmZvICpwaSA9IFByb2Nlc3NJbmZv
OjpuZXdJbnN0YW5jZShwcm9jZXNzSWQoKSk7CisjZW5kaWYKKyAgICBwaS0+dXBkYXRlKCk7Cisg
ICAgUVN0cmluZyBjd2QgPSBwaS0+Zm9ybWF0KCIlRCIpOworICAgIGRlbGV0ZSBwaTsKKworICAg
IGdyb3VwLndyaXRlUGF0aEVudHJ5KCJXb3JraW5nRGlyIiwgY3dkKTsKKyAgICBncm91cC53cml0
ZUVudHJ5KCJMb2NhbFRhYiIsICAgICAgIHRhYlRpdGxlRm9ybWF0KExvY2FsVGFiVGl0bGUpKTsK
KyAgICBncm91cC53cml0ZUVudHJ5KCJSZW1vdGVUYWIiLCAgICAgIHRhYlRpdGxlRm9ybWF0KFJl
bW90ZVRhYlRpdGxlKSk7Cit9CisKK3ZvaWQgU2Vzc2lvbjo6cmVzdG9yZVNlc3Npb24oS0NvbmZp
Z0dyb3VwJiBncm91cCkKK3sKKyAgICBRU3RyaW5nIHM7CisKKyAgICBzID0gZ3JvdXAucmVhZFBh
dGhFbnRyeSgiV29ya2luZ0RpciIsIFFTdHJpbmcoKSk7CisgICAgaWYgKCFzLmlzRW1wdHkoKSkg
c2V0SW5pdGlhbFdvcmtpbmdEaXJlY3Rvcnkocyk7CisgICAgcyA9IGdyb3VwLnJlYWRFbnRyeSgi
TG9jYWxUYWIiKTsKKyAgICBpZiAoIXMuaXNFbXB0eSgpKSBzZXRUYWJUaXRsZUZvcm1hdChMb2Nh
bFRhYlRpdGxlLCBzKTsKKyAgICBzID0gZ3JvdXAucmVhZEVudHJ5KCJSZW1vdGVUYWIiKTsKKyAg
ICBpZiAoIXMuaXNFbXB0eSgpKSBzZXRUYWJUaXRsZUZvcm1hdChSZW1vdGVUYWJUaXRsZSwgcyk7
Cit9CisKIFNlc3Npb25Hcm91cDo6U2Vzc2lvbkdyb3VwKFFPYmplY3QqIHBhcmVudCkKICAgICA6
IFFPYmplY3QocGFyZW50KSwgX21hc3Rlck1vZGUoMCkKIHsKZGlmZiAtLWdpdCBrb25zb2xlLWtk
ZWJhc2UtNC4xLjAvc3JjL1Nlc3Npb24uaCBrb25zb2xlL3NyYy9TZXNzaW9uLmgKaW5kZXggMmEw
OTIyMi4uYWRkMjk3NyAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvU2Vzc2lv
bi5oCisrKyBrb25zb2xlL3NyYy9TZXNzaW9uLmgKQEAgLTM3OCw2ICszNzgsMTAgQEAgcHVibGlj
OgogCVByb2ZpbGVDaGFuZ2UJCQk9IDUwIAkvLyB0aGlzIGNsYXNoZXMgd2l0aCBYdGVybSdzIGZv
bnQgY2hhbmdlIGNvbW1hbmQKICAgfTsKIAorICAvLyBzZXNzaW9uIG1hbmFnZW1lbnQKKyAgdm9p
ZCBzYXZlU2Vzc2lvbihLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKyAgdm9pZCByZXN0b3JlU2Vzc2lv
bihLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKwogcHVibGljIHNsb3RzOgogCiAgIC8qKgpkaWZmIC0t
Z2l0IGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvU2Vzc2lvbk1hbmFnZXIuY3BwIGtvbnNvbGUv
c3JjL1Nlc3Npb25NYW5hZ2VyLmNwcAppbmRleCBiYmNjZTc2Li5jMmFhMGUzIDEwMDY0NAotLS0g
a29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uTWFuYWdlci5jcHAKKysrIGtvbnNvbGUv
c3JjL1Nlc3Npb25NYW5hZ2VyLmNwcApAQCAtNzMwLDYgKzczMCw2OSBAQCBRS2V5U2VxdWVuY2Ug
U2Vzc2lvbk1hbmFnZXI6OnNob3J0Y3V0KFByb2ZpbGU6OlB0ciBpbmZvKSBjb25zdAogICAgIHJl
dHVybiBRS2V5U2VxdWVuY2UoKTsKIH0KIAordm9pZCBTZXNzaW9uTWFuYWdlcjo6c2F2ZVNlc3Np
b25zKEtDb25maWcqIGNvbmZpZykKK3sKKwkvLyBUaGUgc2Vzc2lvbiBJRHMgY2FuJ3QgYmUgcmVz
dG9yZWQuCisJLy8gU28gd2UgbmVlZCB0byBtYXAgdGhlIG9sZCBJRCB0byB0aGUgZnV0dXJlIG5l
dyBJRC4KKwlpbnQgbiA9IDE7CisJX3Jlc3RvcmVNYXBwaW5nLmNsZWFyKCk7CisKKwlmb3JlYWNo
KFNlc3Npb24qIHNlc3Npb24sIF9zZXNzaW9ucykKKwl7CisJCVFTdHJpbmcgcyA9IFFMYXRpbjFT
dHJpbmcoIlNlc3Npb24iKSArIFFTdHJpbmc6Om51bWJlcihuKTsKKwkJS0NvbmZpZ0dyb3VwIGdy
b3VwKGNvbmZpZywgcyk7CisKKwkJZ3JvdXAud3JpdGVQYXRoRW50cnkoIlByb2ZpbGUiLAorCQkJ
CSAgICAgX3Nlc3Npb25Qcm9maWxlcy52YWx1ZShzZXNzaW9uKS0+cGF0aCgpKTsKKwkJc2Vzc2lv
bi0+c2F2ZVNlc3Npb24oZ3JvdXApOworCQlfcmVzdG9yZU1hcHBpbmcuaW5zZXJ0KHNlc3Npb24s
IG4pOworCQluKys7CisJfQorCisJS0NvbmZpZ0dyb3VwIGdyb3VwKGNvbmZpZywgIk51bWJlciIp
OworCWdyb3VwLndyaXRlRW50cnkoIk51bWJlck9mU2Vzc2lvbnMiLCBfc2Vzc2lvbnMuY291bnQo
KSk7Cit9CisKK2ludCBTZXNzaW9uTWFuYWdlcjo6Z2V0UmVzdG9yZUlkKFNlc3Npb24qIHNlc3Np
b24pCit7CisJcmV0dXJuIF9yZXN0b3JlTWFwcGluZy52YWx1ZShzZXNzaW9uKTsKK30KKwordm9p
ZCBTZXNzaW9uTWFuYWdlcjo6cmVzdG9yZVNlc3Npb25zKEtDb25maWcqIGNvbmZpZykKK3sKKwlL
Q29uZmlnR3JvdXAgZ3JvdXAoY29uZmlnLCAiTnVtYmVyIik7CisJaW50IHNlc3Npb25zOworCisJ
Ly8gQW55IHNlc3Npb25zIHNhdmVkPworCWlmICgoc2Vzc2lvbnMgPSBncm91cC5yZWFkRW50cnko
Ik51bWJlck9mU2Vzc2lvbnMiLCAwKSkgPiAwKQorCXsKKwkJZm9yIChpbnQgbiA9IDE7IG4gPD0g
c2Vzc2lvbnM7IG4rKykKKwkJeworCQkJUVN0cmluZyBzID0gUUxhdGluMVN0cmluZygiU2Vzc2lv
biIpICsgUVN0cmluZzo6bnVtYmVyKG4pOworCQkJS0NvbmZpZ0dyb3VwIGNnKGNvbmZpZywgcyk7
CisKKwkJCVFTdHJpbmcgcHJvZmlsZSA9IGNnLnJlYWRQYXRoRW50cnkoIlByb2ZpbGUiLCBRU3Ry
aW5nKCkpOworCQkJUHJvZmlsZTo6UHRyIHBwID0gZGVmYXVsdFByb2ZpbGUoKTsKKwkJCWlmICgh
cHJvZmlsZS5pc0VtcHR5KCkpIHBwID0gbG9hZFByb2ZpbGUocHJvZmlsZSk7CisKKwkJCVNlc3Np
b24qIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHBwKTsKKwkJCXNlc3Npb24tPnJlc3RvcmVTZXNz
aW9uKGNnKTsKKwkJfQorCX0KK30KKworU2Vzc2lvbiogU2Vzc2lvbk1hbmFnZXI6OmlkVG9TZXNz
aW9uKGludCBpZCkKK3sKKwlRX0FTU0VSVChpZCk7IAorCWZvcmVhY2goU2Vzc2lvbiogc2Vzc2lv
biwgX3Nlc3Npb25zKQorCQlpZiAoc2Vzc2lvbi0+c2Vzc2lvbklkKCkgPT0gaWQpCisJCQlyZXR1
cm4gc2Vzc2lvbjsKKworCS8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4KKwlRX0FTU0VSVChpZCA9
PSAwKTsKKwlyZXR1cm4gMDsKK30KKwogS19HTE9CQUxfU1RBVElDKCBTZXNzaW9uTWFuYWdlciAs
IHRoZVNlc3Npb25NYW5hZ2VyICkKIFNlc3Npb25NYW5hZ2VyKiBTZXNzaW9uTWFuYWdlcjo6aW5z
dGFuY2UoKQogewpkaWZmIC0tZ2l0IGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvU2Vzc2lvbk1h
bmFnZXIuaCBrb25zb2xlL3NyYy9TZXNzaW9uTWFuYWdlci5oCmluZGV4IDk5MDQ1MGQuLmY4YmJk
NTYgMTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL1Nlc3Npb25NYW5hZ2VyLmgK
KysrIGtvbnNvbGUvc3JjL1Nlc3Npb25NYW5hZ2VyLmgKQEAgLTI0Myw2ICsyNDMsMTIgQEAgcHVi
bGljOgogICAgICAqLwogICAgIHN0YXRpYyBTZXNzaW9uTWFuYWdlciogaW5zdGFuY2UoKTsKIAor
ICAgIC8vIHNlc3Npb24gbWFuYWdlbWVudAorICAgIHZvaWQgc2F2ZVNlc3Npb25zKEtDb25maWcq
IGNvbmZpZyk7CisgICAgaW50ICBnZXRSZXN0b3JlSWQoU2Vzc2lvbiogc2Vzc2lvbik7CisgICAg
dm9pZCByZXN0b3JlU2Vzc2lvbnMoS0NvbmZpZyogY29uZmlnKTsKKyAgICBTZXNzaW9uICppZFRv
U2Vzc2lvbihpbnQgaWQpOworCiBzaWduYWxzOgogICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBwcm9m
aWxlIGlzIGFkZGVkIHRvIHRoZSBtYW5hZ2VyLiAqLwogICAgIHZvaWQgcHJvZmlsZUFkZGVkKFBy
b2ZpbGU6OlB0ciBwdHIpOwpAQCAtMzE4LDYgKzMyNCw3IEBAIHByaXZhdGU6CiAKIAlRU2V0PFBy
b2ZpbGU6OlB0cj4gX3R5cGVzOwogICAgIFFIYXNoPFNlc3Npb24qLFByb2ZpbGU6OlB0cj4gX3Nl
c3Npb25Qcm9maWxlczsKKyAgICBRSGFzaDxTZXNzaW9uKixpbnQ+IF9yZXN0b3JlTWFwcGluZzsK
IAogICAgIHN0cnVjdCBTaG9ydGN1dERhdGEKICAgICB7CmRpZmYgLS1naXQga29uc29sZS1rZGVi
YXNlLTQuMS4wL3NyYy9WaWV3TWFuYWdlci5jcHAga29uc29sZS9zcmMvVmlld01hbmFnZXIuY3Bw
CmluZGV4IDM0OWM4OWIuLjFhMmNmNDQgMTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAv
c3JjL1ZpZXdNYW5hZ2VyLmNwcAorKysga29uc29sZS9zcmMvVmlld01hbmFnZXIuY3BwCkBAIC04
MzgsNiArODM4LDY4IEBAIFFMaXN0PFZpZXdQcm9wZXJ0aWVzKj4gVmlld01hbmFnZXI6OnZpZXdQ
cm9wZXJ0aWVzKCkgY29uc3QKICAgICByZXR1cm4gbGlzdDsKIH0KIAordm9pZCBWaWV3TWFuYWdl
cjo6c2F2ZVNlc3Npb25zKEtDb25maWdHcm91cCYgZ3JvdXApCit7CisgICAgLy8gZmluZCBhbGwg
dW5pcXVlIHNlc3Npb24gcmVzdG9yZSBJRHMKKyAgICBRTGlzdDxpbnQ+IGlkczsKKyAgICBRSGFz
aDxTZXNzaW9uKixpbnQ+IHVuaXF1ZTsKKworICAgIC8vIGZpcnN0OiBzZXNzaW9ucyBpbiB0aGUg
YWN0aXZlIGNvbnRhaW5lciwgcHJlc2VydmluZyB0aGUgb3JkZXIKKyAgICBWaWV3Q29udGFpbmVy
KiBjb250YWluZXIgPSBfdmlld1NwbGl0dGVyLT5hY3RpdmVDb250YWluZXIoKTsKKyAgICBRX0FT
U0VSVChjb250YWluZXIpOworICAgIFRlcm1pbmFsRGlzcGxheSogYWN0aXZldmlldyA9IGR5bmFt
aWNfY2FzdDxUZXJtaW5hbERpc3BsYXkqPihjb250YWluZXItPmFjdGl2ZVZpZXcoKSk7CisKKyAg
ICBRTGlzdEl0ZXJhdG9yPFFXaWRnZXQqPiB2aWV3SXRlcihjb250YWluZXItPnZpZXdzKCkpOwor
ICAgIHdoaWxlICh2aWV3SXRlci5oYXNOZXh0KCkpCisgICAgeworCVRlcm1pbmFsRGlzcGxheSAq
dmlldyA9IGR5bmFtaWNfY2FzdDxUZXJtaW5hbERpc3BsYXkqPih2aWV3SXRlci5uZXh0KCkpOwor
CVFfQVNTRVJUKHZpZXcpOworCVNlc3Npb24gKnNlc3Npb24gPSBfc2Vzc2lvbk1hcFt2aWV3XTsK
KwlpbnQgc2Vzc2lvbklkID0gU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCktPmdldFJlc3RvcmVJ
ZChzZXNzaW9uKTsKKwlpZHMgPDwgc2Vzc2lvbklkOworCWlmICh2aWV3ID09IGFjdGl2ZXZpZXcp
IGdyb3VwLndyaXRlRW50cnkoIkFjdGl2ZSIsIHNlc3Npb25JZCk7CisJdW5pcXVlLmluc2VydChz
ZXNzaW9uLCAxKTsKKyAgICB9CisKKyAgICAvLyBzZWNvbmQ6IGFsbCBvdGhlciBzZXNzaW9ucywg
aW4gcmFuZG9tIG9yZGVyCisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHNlc3Npb25zIHJl
c3RvcmVkIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQuLi4KKyAgICBmb3JlYWNoKFNlc3Npb24qIHNl
c3Npb24sIF9zZXNzaW9uTWFwKQorCWlmICghdW5pcXVlLmNvbnRhaW5zKHNlc3Npb24pKQorCXsK
KwkgICAgaWRzIDw8IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5nZXRSZXN0b3JlSWQoc2Vz
c2lvbik7CisJICAgIHVuaXF1ZS5pbnNlcnQoc2Vzc2lvbiwgMSk7CisJfQorCisgICAgZ3JvdXAu
d3JpdGVFbnRyeSgiU2Vzc2lvbnMiLCBpZHMpOworfQorCit2b2lkIFZpZXdNYW5hZ2VyOjpyZXN0
b3JlU2Vzc2lvbnMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBRTGlzdDxpbnQ+
IGlkcyA9IGdyb3VwLnJlYWRFbnRyeSgiU2Vzc2lvbnMiLCBRTGlzdDxpbnQ+KCkpOworICAgIGlu
dCBhY3RpdmVJZCAgID0gZ3JvdXAucmVhZEVudHJ5KCJBY3RpdmUiLCAwKTsKKyAgICBUZXJtaW5h
bERpc3BsYXkgKmRpc3BsYXkgPSAwOworCisgICAgZm9yZWFjaChpbnQgaWQsIGlkcykKKyAgICB7
CisJU2Vzc2lvbiAqc2Vzc2lvbiA9IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5pZFRvU2Vz
c2lvbihpZCk7CisJY3JlYXRlVmlldyhzZXNzaW9uKTsKKwlpZiAoIXNlc3Npb24tPmlzUnVubmlu
ZygpKSBzZXNzaW9uLT5ydW4oKTsKKwlpZiAoIWRpc3BsYXkgJiYgKGlkID09IGFjdGl2ZUlkKSkK
Kwl7CisJICAgIFFMaXN0PFRlcm1pbmFsRGlzcGxheSo+IGRpc3BsYXlzID0gX3Nlc3Npb25NYXAu
a2V5cyhzZXNzaW9uKTsKKwkgICAgUV9BU1NFUlQoIWRpc3BsYXlzLmlzRW1wdHkoKSk7CisJICAg
IFFfQVNTRVJUKGRpc3BsYXlzWzBdKTsKKwkgICAgZGlzcGxheSA9IGRpc3BsYXlzWzBdOworCX0K
KyAgICB9CisKKyAgICBpZiAoZGlzcGxheSkKKyAgICB7CisJX3ZpZXdTcGxpdHRlci0+YWN0aXZl
Q29udGFpbmVyKCktPnNldEFjdGl2ZVZpZXcoZGlzcGxheSk7CisJZGlzcGxheS0+c2V0Rm9jdXMo
UXQ6Ok90aGVyRm9jdXNSZWFzb24pOworICAgIH0KK30KKwogdWludCBxSGFzaChRUG9pbnRlcjxU
ZXJtaW5hbERpc3BsYXk+IGRpc3BsYXkpCiB7CiAgICAgcmV0dXJuIHFIYXNoKChUZXJtaW5hbERp
c3BsYXkqKWRpc3BsYXkpOwpkaWZmIC0tZ2l0IGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvVmll
d01hbmFnZXIuaCBrb25zb2xlL3NyYy9WaWV3TWFuYWdlci5oCmluZGV4IGFlOWRiOGMuLjlhYjIy
NzIgMTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL1ZpZXdNYW5hZ2VyLmgKKysr
IGtvbnNvbGUvc3JjL1ZpZXdNYW5hZ2VyLmgKQEAgLTE0MiwxMSArMTQyLDE3IEBAIHB1YmxpYzoK
ICAgICAgKi8KICAgICBOYXZpZ2F0aW9uTWV0aG9kIG5hdmlnYXRpb25NZXRob2QoKSBjb25zdDsK
IAotCS8qKiAKLSAJICogUmV0dXJucyB0aGUgY29udHJvbGxlciBmb3IgdGhlIGFjdGl2ZSB2aWV3
LiAgYWN0aXZlVmlld0NoYW5nZWQoKSBpcyAKLSAJICogZW1pdHRlZCB3aGVuIHRoaXMgY2hhbmdl
cy4KLQkgKi8KLQlTZXNzaW9uQ29udHJvbGxlciogYWN0aXZlVmlld0NvbnRyb2xsZXIoKSBjb25z
dDsKKyAgICAvKiogCisgICAgICogUmV0dXJucyB0aGUgY29udHJvbGxlciBmb3IgdGhlIGFjdGl2
ZSB2aWV3LiAgYWN0aXZlVmlld0NoYW5nZWQoKSBpcyAKKyAgICAgKiBlbWl0dGVkIHdoZW4gdGhp
cyBjaGFuZ2VzLgorICAgICAqLworICAgIFNlc3Npb25Db250cm9sbGVyKiBhY3RpdmVWaWV3Q29u
dHJvbGxlcigpIGNvbnN0OworCisgICAgLyoqCisgICAgICogU2Vzc2lvbiBtYW5hZ2VtZW50Cisg
ICAgICovCisgICAgdm9pZCBzYXZlU2Vzc2lvbnMoS0NvbmZpZ0dyb3VwJiBncm91cCk7CisgICAg
dm9pZCByZXN0b3JlU2Vzc2lvbnMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCk7CiAKIHNpZ25h
bHM6CiAgICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgbGFzdCB2aWV3IGlzIHJlbW92ZWQgZnJvbSB0
aGUgdmlldyBtYW5hZ2VyICovCmRpZmYgLS1naXQga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9t
YWluLmNwcCBrb25zb2xlL3NyYy9tYWluLmNwcAppbmRleCAxN2FlMWNkLi40MTdhNmFhIDEwMDY0
NAotLS0ga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9tYWluLmNwcAorKysga29uc29sZS9zcmMv
bWFpbi5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKIAogLy8gT3duCiAjaW5jbHVkZSAiQXBwbGljYXRp
b24uaCIKKyNpbmNsdWRlICJNYWluV2luZG93LmgiCiAjaW5jbHVkZSA8S0RlYnVnPgogCiAvLyBV
bml4CkBAIC01MSw2ICs1Miw3IEBAIHZvaWQgZmlsbENvbW1hbmRMaW5lT3B0aW9ucyhLQ21kTGlu
ZU9wdGlvbnMmIG9wdGlvbnMpOwogYm9vbCB1c2VUcmFuc3BhcmVuY3koKTsgICAgIC8vIHJldHVy
bnMgdHJ1ZSBpZiB0cmFuc3BhcmVuY3kgc2hvdWxkIGJlIGVuYWJsZWQKIGJvb2wgZm9yY2VOZXdQ
cm9jZXNzKCk7ICAgICAvLyByZXR1cm5zIHRydWUgaWYgbmV3IGluc3RhbmNlIHNob3VsZCB1c2Ug
YSBuZXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIChpbnN0ZWFkIG9m
IHJlLXVzaW5nIGFuIGV4aXN0aW5nIG9uZSkKK3ZvaWQgcmVzdG9yZVNlc3Npb24oQXBwbGljYXRp
b24mIGFwcCk7CiAKIC8vICoqKgogLy8gRW50cnkgcG9pbnQgaW50byB0aGUgS29uc29sZSB0ZXJt
aW5hbCBhcHBsaWNhdGlvbi4gIApAQCAtOTEsMTIgKzkzLDE0IEBAIGV4dGVybiAiQyIgaW50IEtE
RV9FWFBPUlQga2RlbWFpbihpbnQgYXJnYyxjaGFyKiogYXJndikKIAkJZ2V0RGlzcGxheUluZm9y
bWF0aW9uKGRpc3BsYXksdmlzdWFsLGNvbG9ybWFwKTsKIAogCQlBcHBsaWNhdGlvbiBhcHAoZGlz
cGxheSwoUXQ6OkhBTkRMRSl2aXN1YWwsKFF0OjpIQU5ETEUpY29sb3JtYXApOworCQlyZXN0b3Jl
U2Vzc2lvbihhcHApOwogCQlyZXR1cm4gYXBwLmV4ZWMoKTsKIAl9CiAJZWxzZQogI2VuZGlmIAog
CXsKICAgICAJQXBwbGljYXRpb24gYXBwOworCXJlc3RvcmVTZXNzaW9uKGFwcCk7CiAgICAgCXJl
dHVybiBhcHAuZXhlYygpOwogCX0gICAKIH0KQEAgLTI0Miw0ICsyNDYsMTEgQEAgdm9pZCBnZXRE
aXNwbGF5SW5mb3JtYXRpb24oRGlzcGxheSomIGRpc3BsYXkgLCBWaXN1YWwqJiB2aXN1YWwgLCBD
b2xvcm1hcCYgY29sb3IKIH0KICNlbmRpZgogCi0KK3ZvaWQgcmVzdG9yZVNlc3Npb24oQXBwbGlj
YXRpb24mIGFwcCkKK3sKKyAgICBpZiAoYXBwLmlzU2Vzc2lvblJlc3RvcmVkKCkpIHsKKwlpbnQg
biA9IDE7CisJd2hpbGUgKEtNYWluV2luZG93OjpjYW5CZVJlc3RvcmVkKG4pKQorCSAgICBhcHAu
bmV3TWFpbldpbmRvdygpLT5yZXN0b3JlKG4rKyk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27359</attachid>
            <date>2008-09-11 00:23:48 +0000</date>
            <delta_ts>2008-09-12 21:39:27 +0000</delta_ts>
            <desc>Proposed patch for upstream merge</desc>
            <filename>kdebase-4.1.0-konsole-session-management.patch</filename>
            <type>text/plain</type>
            <size>15783</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">IHNyYy9BcHBsaWNhdGlvbi5jcHAgICAgfCAgIDczICsrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvTWFpbldpbmRvdy5jcHAgICAgIHwgICAyNyArKysr
KysrKysrKysrKysrKwogc3JjL01haW5XaW5kb3cuaCAgICAgICB8ICAgIDYgKysrKwogc3JjL1Nl
c3Npb24uY3BwICAgICAgICB8ICAgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog
c3JjL1Nlc3Npb24uaCAgICAgICAgICB8ICAgIDQgKysKIHNyYy9TZXNzaW9uTWFuYWdlci5jcHAg
fCAgIDYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvU2Vz
c2lvbk1hbmFnZXIuaCAgIHwgICAgNyArKysrCiBzcmMvVmlld01hbmFnZXIuY3BwICAgIHwgICA2
MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9WaWV3TWFuYWdl
ci5oICAgICAgfCAgIDE2ICsrKysrKystLS0KIHNyYy9tYWluLmNwcCAgICAgICAgICAgfCAgIDEz
ICsrKysrKysrLQogMTAgZmlsZXMgY2hhbmdlZCwgMjc4IGluc2VydGlvbnMoKyksIDM5IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL0FwcGxpY2F0aW9u
LmNwcCBrb25zb2xlL3NyYy9BcHBsaWNhdGlvbi5jcHAKaW5kZXggZjNmNTJlOC4uZDIyZDU5MiAx
MDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvQXBwbGljYXRpb24uY3BwCisrKyBr
b25zb2xlL3NyYy9BcHBsaWNhdGlvbi5jcHAKQEAgLTEwMyw0OSArMTAzLDU2IEBAIHZvaWQgQXBw
bGljYXRpb246Omxpc3RBdmFpbGFibGVQcm9maWxlcygpCiBpbnQgQXBwbGljYXRpb246Om5ld0lu
c3RhbmNlKCkKIHsKICAgICBLQ21kTGluZUFyZ3MqIGFyZ3MgPSBLQ21kTGluZUFyZ3M6OnBhcnNl
ZEFyZ3MoKTsKKyAgICBzdGF0aWMgYm9vbCBmaXJzdCA9IHRydWU7CiAKLSAgICAvLyBjaGVjayBm
b3IgYXJndW1lbnRzIHRvIHByaW50IGhlbHAgb3Igb3RoZXIgaW5mb3JtYXRpb24gdG8gdGhlIHRl
cm1pbmFsLAotICAgIC8vIHF1aXQgaWYgc3VjaCBhbiBhcmd1bWVudCB3YXMgZm91bmQKLSAgICBp
ZiAoIHByb2Nlc3NIZWxwQXJncyhhcmdzKSApIAotICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBo
YW5kbGUgc2Vzc2lvbiBtYW5hZ2VtZW50CisgICAgaWYgKChhcmdzLT5jb3VudCgpICE9IDApIHx8
ICFmaXJzdCB8fCAhaXNTZXNzaW9uUmVzdG9yZWQoKSkKKyAgICB7CisgICAgICAgIC8vIGNoZWNr
IGZvciBhcmd1bWVudHMgdG8gcHJpbnQgaGVscCBvciBvdGhlciBpbmZvcm1hdGlvbiB0byB0aGUg
dGVybWluYWwsCisgICAgICAgIC8vIHF1aXQgaWYgc3VjaCBhbiBhcmd1bWVudCB3YXMgZm91bmQK
KyAgICAgICAgaWYgKCBwcm9jZXNzSGVscEFyZ3MoYXJncykgKSAKKwkgICAgcmV0dXJuIDA7CiAK
LSAgICAvLyBjcmVhdGUgYSBuZXcgd2luZG93IG9yIHVzZSBhbiBleGlzdGluZyBvbmUgCi0gICAg
TWFpbldpbmRvdyogd2luZG93ID0gcHJvY2Vzc1dpbmRvd0FyZ3MoYXJncyk7CisJLy8gY3JlYXRl
IGEgbmV3IHdpbmRvdyBvciB1c2UgYW4gZXhpc3Rpbmcgb25lIAorCU1haW5XaW5kb3cqIHdpbmRv
dyA9IHByb2Nlc3NXaW5kb3dBcmdzKGFyZ3MpOwogICAKLSAgICAvLyBzZWxlY3QgcHJvZmlsZSB0
byB1c2UgCi0gICAgcHJvY2Vzc1Byb2ZpbGVTZWxlY3RBcmdzKGFyZ3Msd2luZG93KTsKKwkvLyBz
ZWxlY3QgcHJvZmlsZSB0byB1c2UgCisJcHJvY2Vzc1Byb2ZpbGVTZWxlY3RBcmdzKGFyZ3Msd2lu
ZG93KTsKICAgIAotICAgIC8vIHByb2Nlc3MgdmFyaW91cyBjb21tYW5kLWxpbmUgb3B0aW9ucyB3
aGljaCBjYXVzZSBhIHByb3BlcnR5IG9mIHRoZSAKLSAgICAvLyBkZWZhdWx0IHByb2ZpbGUgdG8g
YmUgY2hhbmdlZCAKLSAgICBwcm9jZXNzUHJvZmlsZUNoYW5nZUFyZ3MoYXJncyx3aW5kb3cpOwor
CS8vIHByb2Nlc3MgdmFyaW91cyBjb21tYW5kLWxpbmUgb3B0aW9ucyB3aGljaCBjYXVzZSBhIHBy
b3BlcnR5IG9mIHRoZSAKKwkvLyBkZWZhdWx0IHByb2ZpbGUgdG8gYmUgY2hhbmdlZCAKKwlwcm9j
ZXNzUHJvZmlsZUNoYW5nZUFyZ3MoYXJncyx3aW5kb3cpOwogCi0gICAgLy8gY3JlYXRlIG5ldyBz
ZXNzaW9uCi0gICAgU2Vzc2lvbiogc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oIHdpbmRvdy0+ZGVm
YXVsdFByb2ZpbGUoKSAsIFFTdHJpbmcoKSAsIHdpbmRvdy0+dmlld01hbmFnZXIoKSApOworCS8v
IGNyZWF0ZSBuZXcgc2Vzc2lvbgorCVNlc3Npb24qIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKCB3
aW5kb3ctPmRlZmF1bHRQcm9maWxlKCkgLCBRU3RyaW5nKCkgLCB3aW5kb3ctPnZpZXdNYW5hZ2Vy
KCkgKTsKIAlpZiAoICFhcmdzLT5pc1NldCgiY2xvc2UiKSApCi0JCXNlc3Npb24tPnNldEF1dG9D
bG9zZShmYWxzZSk7CisJICBzZXNzaW9uLT5zZXRBdXRvQ2xvc2UoZmFsc2UpOwogCi0gICAgLy8g
aWYgdGhlIGJhY2tncm91bmQtbW9kZSBhcmd1bWVudCBpcyBzdXBwbGllZCwgc3RhcnQgdGhlIGJh
Y2tncm91bmQgc2Vzc2lvbgotICAgIC8vICggb3IgYnJpbmcgdG8gdGhlIGZyb250IGlmIGl0IGFs
cmVhZHkgZXhpc3RzICkKLSAgICBpZiAoIGFyZ3MtPmlzU2V0KCJiYWNrZ3JvdW5kLW1vZGUiKSAp
Ci0gICAgICAgIHN0YXJ0QmFja2dyb3VuZE1vZGUod2luZG93KTsKLSAgICBlbHNlCisJLy8gaWYg
dGhlIGJhY2tncm91bmQtbW9kZSBhcmd1bWVudCBpcyBzdXBwbGllZCwgc3RhcnQgdGhlIGJhY2tn
cm91bmQgc2Vzc2lvbgorCS8vICggb3IgYnJpbmcgdG8gdGhlIGZyb250IGlmIGl0IGFscmVhZHkg
ZXhpc3RzICkKKwlpZiAoIGFyZ3MtPmlzU2V0KCJiYWNrZ3JvdW5kLW1vZGUiKSApCisJICAgIHN0
YXJ0QmFja2dyb3VuZE1vZGUod2luZG93KTsKKwllbHNlCiAJewotCQkvLyBRdCBjb25zdHJhaW5z
IHRvcC1sZXZlbCB3aW5kb3dzIHdoaWNoIGhhdmUgbm90IGJlZW4gbWFudWFsbHkgcmVzaXplZAot
CQkvLyAodmlhIFFXaWRnZXQ6OnJlc2l6ZSgpKSB0byBhIG1heGltdW0gb2YgMi8zcmRzIG9mIHRo
ZSBzY3JlZW4gc2l6ZS4KLQkJLy8KLQkJLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB0ZXJtaW5hbCBk
aXNwbGF5IG1pZ2h0IG5vdCBnZXQgdGhlIHdpZHRoL2hlaWdodAotCQkvLyBpdCBhc2tzIGZvci4g
IFRvIHdvcmsgYXJvdW5kIHRoaXMsIHRoZSB3aWRnZXQgbXVzdCBiZSBtYW51YWxseSByZXNpemVk
Ci0JCS8vIHRvIGl0cyBzaXplSGludCgpLgotCQkvLwotCQkvLyBUaGlzIHByb2JsZW0gb25seSBh
ZmZlY3RzIHRoZSBmaXJzdCB0aW1lIHRoZSBhcHBsaWNhdGlvbiBpcyBydW4uICBBZnRlcgotCQkv
LyB0aGF0IEtNYWluV2luZG93IHdpbGwgaGF2ZSBtYW51YWxseSByZXNpemVkIHRoZSB3aW5kb3cg
dG8gaXRzIHNhdmVkIHNpemUKLQkJLy8gYXQgdGhpcyBwb2ludCAoc28gdGhlIFF0OjpXQV9SZXNp
emVkIGF0dHJpYnV0ZSB3aWxsIGJlIHNldCkKLQkJaWYgKCF3aW5kb3ctPnRlc3RBdHRyaWJ1dGUo
UXQ6OldBX1Jlc2l6ZWQpKQotCQkJd2luZG93LT5yZXNpemUod2luZG93LT5zaXplSGludCgpKTsK
LQotCQl3aW5kb3ctPnNob3coKTsKKwkgICAgLy8gUXQgY29uc3RyYWlucyB0b3AtbGV2ZWwgd2lu
ZG93cyB3aGljaCBoYXZlIG5vdCBiZWVuIG1hbnVhbGx5IHJlc2l6ZWQKKwkgICAgLy8gKHZpYSBR
V2lkZ2V0OjpyZXNpemUoKSkgdG8gYSBtYXhpbXVtIG9mIDIvM3JkcyBvZiB0aGUgc2NyZWVuIHNp
emUuCisJICAgIC8vCisJICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGVybWluYWwgZGlzcGxh
eSBtaWdodCBub3QgZ2V0IHRoZSB3aWR0aC9oZWlnaHQKKwkgICAgLy8gaXQgYXNrcyBmb3IuICBU
byB3b3JrIGFyb3VuZCB0aGlzLCB0aGUgd2lkZ2V0IG11c3QgYmUgbWFudWFsbHkgcmVzaXplZAor
CSAgICAvLyB0byBpdHMgc2l6ZUhpbnQoKS4KKwkgICAgLy8KKwkgICAgLy8gVGhpcyBwcm9ibGVt
IG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgdGltZSB0aGUgYXBwbGljYXRpb24gaXMgcnVuLiAgQWZ0
ZXIKKwkgICAgLy8gdGhhdCBLTWFpbldpbmRvdyB3aWxsIGhhdmUgbWFudWFsbHkgcmVzaXplZCB0
aGUgd2luZG93IHRvIGl0cyBzYXZlZCBzaXplCisJICAgIC8vIGF0IHRoaXMgcG9pbnQgKHNvIHRo
ZSBRdDo6V0FfUmVzaXplZCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQpCisJICAgIGlmICghd2luZG93
LT50ZXN0QXR0cmlidXRlKFF0OjpXQV9SZXNpemVkKSkKKwkgICAgICAgIHdpbmRvdy0+cmVzaXpl
KHdpbmRvdy0+c2l6ZUhpbnQoKSk7CisKKwkgICAgd2luZG93LT5zaG93KCk7CiAJfQorICAgIH0K
IAorICAgIGZpcnN0ID0gZmFsc2U7CisgICAgYXJncy0+Y2xlYXIoKTsKICAgICByZXR1cm4gMDsK
IH0KIApkaWZmIC0tZ2l0IGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvTWFpbldpbmRvdy5jcHAg
a29uc29sZS9zcmMvTWFpbldpbmRvdy5jcHAKaW5kZXggYzA5ZmVkYi4uNmNmZGQxOSAxMDA2NDQK
LS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvTWFpbldpbmRvdy5jcHAKKysrIGtvbnNvbGUv
c3JjL01haW5XaW5kb3cuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAKIC8vIE93bgogI2luY2x1ZGUg
Ik1haW5XaW5kb3cuaCIKKyNpbmNsdWRlICJTZXNzaW9uTWFuYWdlci5oIgogCiAvLyBRdAogI2lu
Y2x1ZGUgPFF0R3VpL1FCb3hMYXlvdXQ+CkBAIC0zNzIsNiArMzczLDMyIEBAIGJvb2wgTWFpbldp
bmRvdzo6cXVlcnlDbG9zZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgTWFpbldpbmRv
dzo6c2F2ZVByb3BlcnRpZXMoS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBncm91cC53cml0
ZVBhdGhFbnRyeSgiRGVmYXVsdCBQcm9maWxlIiwgX2RlZmF1bHRQcm9maWxlLT5wYXRoKCkpOwor
ICAgIF92aWV3TWFuYWdlci0+c2F2ZVNlc3Npb25zKGdyb3VwKTsKK30KKwordm9pZCBNYWluV2lu
ZG93OjpyZWFkUHJvcGVydGllcyhjb25zdCBLQ29uZmlnR3JvdXAmIGdyb3VwKQoreworICAgIFNl
c3Npb25NYW5hZ2VyICptZ3IgPSBTZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2UoKTsKKyAgICBRU3Ry
aW5nIHByb2ZpbGUgPSBncm91cC5yZWFkUGF0aEVudHJ5KCJEZWZhdWx0IFByb2ZpbGUiLCBRU3Ry
aW5nKCkpOworICAgIFByb2ZpbGU6OlB0ciBwcCA9IG1nci0+ZGVmYXVsdFByb2ZpbGUoKTsKKyAg
ICBpZiAoIXByb2ZpbGUuaXNFbXB0eSgpKSBwcCA9IG1nci0+bG9hZFByb2ZpbGUocHJvZmlsZSk7
CisgICAgc2V0RGVmYXVsdFByb2ZpbGUocHApOworICAgIF92aWV3TWFuYWdlci0+cmVzdG9yZVNl
c3Npb25zKGdyb3VwKTsKK30KKwordm9pZCBNYWluV2luZG93OjpzYXZlR2xvYmFsUHJvcGVydGll
cyhLQ29uZmlnKiBjb25maWcpCit7CisgICAgU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCktPnNh
dmVTZXNzaW9ucyhjb25maWcpOworfQorCit2b2lkIE1haW5XaW5kb3c6OnJlYWRHbG9iYWxQcm9w
ZXJ0aWVzKEtDb25maWcqIGNvbmZpZykKK3sKKyAgICBTZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2Uo
KS0+cmVzdG9yZVNlc3Npb25zKGNvbmZpZyk7Cit9CisKIHZvaWQgTWFpbldpbmRvdzo6c2hvd1No
b3J0Y3V0c0RpYWxvZygpCiB7CiAgICAgS1Nob3J0Y3V0c0RpYWxvZzo6Y29uZmlndXJlKCBhY3Rp
b25Db2xsZWN0aW9uKCkgLApkaWZmIC0tZ2l0IGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvTWFp
bldpbmRvdy5oIGtvbnNvbGUvc3JjL01haW5XaW5kb3cuaAppbmRleCAyYTAxYjlkLi41YzA2NDRi
IDEwMDY0NAotLS0ga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9NYWluV2luZG93LmgKKysrIGtv
bnNvbGUvc3JjL01haW5XaW5kb3cuaApAQCAtMTMzLDYgKzEzMywxMiBAQCBjbGFzcyBNYWluV2lu
ZG93IDogcHVibGljIEtYbWxHdWlXaW5kb3cKICAgICAgICAgLy8gcmVpbXBsZW1lbnRlZCBmcm9t
IEtNYWluV2luZG93CiAgICAgICAgIHZpcnR1YWwgYm9vbCBxdWVyeUNsb3NlKCk7CiAKKwkvLyBz
ZXNzaW9uIG1hbmFnZW1lbnQKKwl2aXJ0dWFsIHZvaWQgc2F2ZVByb3BlcnRpZXMoS0NvbmZpZ0dy
b3VwJiBncm91cCk7CisJdmlydHVhbCB2b2lkIHJlYWRQcm9wZXJ0aWVzKGNvbnN0IEtDb25maWdH
cm91cCYgZ3JvdXApOworCXZpcnR1YWwgdm9pZCBzYXZlR2xvYmFsUHJvcGVydGllcyhLQ29uZmln
KiBjb25maWcpOworCXZpcnR1YWwgdm9pZCByZWFkR2xvYmFsUHJvcGVydGllcyhLQ29uZmlnKiBj
b25maWcpOworCiAgICAgcHJpdmF0ZSBzbG90czoKICAgICAgICAgdm9pZCBuZXdUYWIoKTsKICAg
ICAgICAgdm9pZCBuZXdXaW5kb3coKTsKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJhc2UtNC4xLjAv
c3JjL1Nlc3Npb24uY3BwIGtvbnNvbGUvc3JjL1Nlc3Npb24uY3BwCmluZGV4IDgzODFmYjAuLjk5
YjRkYzIgMTAwNjQ0Ci0tLSBrb25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL1Nlc3Npb24uY3BwCisr
KyBrb25zb2xlL3NyYy9TZXNzaW9uLmNwcApAQCAtMjIsNiArMjIsNyBAQAogCiAvLyBPd24KICNp
bmNsdWRlICJTZXNzaW9uLmgiCisjaW5jbHVkZSAiUHJvY2Vzc0luZm8uaCIKIAogLy8gU3RhbmRh
cmQKICNpbmNsdWRlIDxhc3NlcnQuaD4KQEAgLTk3OSw2ICs5ODAsNTMgQEAgaW50IFNlc3Npb246
OnByb2Nlc3NJZCgpIGNvbnN0CiAgICAgcmV0dXJuIF9zaGVsbFByb2Nlc3MtPnBpZCgpOwogfQog
Cit2b2lkIFNlc3Npb246OnNhdmVTZXNzaW9uKEtDb25maWdHcm91cCYgZ3JvdXApCit7CisgICAg
Ly8gRklYTUU/Pz8gV291bGQgdGhlIHVzZXIgZXhwZWN0IGEgZGlmZmVyZW50IGJlaGF2aW91cj8K
KyAgICAvLworICAgIC8vIENvbnRyYXJ5IHRvIFNlc3Npb25Db250cm9sbGVyOjpzbmFwc2hvdCgp
LCB3aGljaCB1cGRhdGVzIHRoZSB0YWJzLAorICAgIC8vIHRoaXMgbWV0aG9kIHN0b3JlcyB0aGUg
Y3VycmVudCBkaXJlY3Rvcnkgb2YgdGhlIHNlc3Npb24gcHJvY2VzcyBhbmQKKyAgICAvLyBub3Qg
ZnJvbSB0aGUgcHJvY2VzcyB0aGF0IGlzIGN1cnJlbnRseSBvbiB0b3AgKGZvcmVncm91bmRQcm9j
ZXNzSWQoKSkuCisgICAgLy8KKyAgICAvLyBZb3UgY2FuIHNlZSB0aGUgZGlmZmVyZW50IGJlaGF2
aW91ciB3aXRoOgorICAgIC8vCisgICAgLy8gIG9wZW4ga29uc29sZQorICAgIC8vICAkIGNkIGRp
cjEKKyAgICAvLyAgJCBiYXNoCisgICAgLy8gICQgY2QgLi4KKyAgICAvLyAgLS0tPiB0YWIgc2hv
d3Mgb3JpZ2luYWwgZGlyZWN0b3J5CisgICAgLy8gIGNsb3NlIEtERSBzZXNzaW9uCisgICAgLy8g
IHN0YXJ0IEtERSBzZXNzaW9uCisgICAgLy8gIC0tLT4gc2hlbGwgc3RhcnRzIGluICJkaXIxIgor
CisgICAgLy8gcmV1c2UgdGFiIGZvcm1hdHRpbmcgY29kZSB0byBmZXRjaCBjdXJyZW50IGRpcmVj
dG9yeQorI2lmIDAKKyAgICBpbnQgcGlkID0gZm9yZWdyb3VuZFByb2Nlc3NJZCgpOworICAgIFBy
b2Nlc3NJbmZvICpwaSA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShwaWQgIT0gMCA/IHBpZCA6
IHByb2Nlc3NJZCgpKTsKKyNlbHNlCisgICAgUHJvY2Vzc0luZm8gKnBpID0gUHJvY2Vzc0luZm86
Om5ld0luc3RhbmNlKHByb2Nlc3NJZCgpKTsKKyNlbmRpZgorICAgIHBpLT51cGRhdGUoKTsKKyAg
ICBRU3RyaW5nIGN3ZCA9IHBpLT5mb3JtYXQoIiVEIik7CisgICAgZGVsZXRlIHBpOworCisgICAg
Z3JvdXAud3JpdGVQYXRoRW50cnkoIldvcmtpbmdEaXIiLCBjd2QpOworICAgIGdyb3VwLndyaXRl
RW50cnkoIkxvY2FsVGFiIiwgICAgICAgdGFiVGl0bGVGb3JtYXQoTG9jYWxUYWJUaXRsZSkpOwor
ICAgIGdyb3VwLndyaXRlRW50cnkoIlJlbW90ZVRhYiIsICAgICAgdGFiVGl0bGVGb3JtYXQoUmVt
b3RlVGFiVGl0bGUpKTsKK30KKwordm9pZCBTZXNzaW9uOjpyZXN0b3JlU2Vzc2lvbihLQ29uZmln
R3JvdXAmIGdyb3VwKQoreworICAgIFFTdHJpbmcgczsKKworICAgIHMgPSBncm91cC5yZWFkUGF0
aEVudHJ5KCJXb3JraW5nRGlyIiwgUVN0cmluZygpKTsKKyAgICBpZiAoIXMuaXNFbXB0eSgpKSBz
ZXRJbml0aWFsV29ya2luZ0RpcmVjdG9yeShzKTsKKyAgICBzID0gZ3JvdXAucmVhZEVudHJ5KCJM
b2NhbFRhYiIpOworICAgIGlmICghcy5pc0VtcHR5KCkpIHNldFRhYlRpdGxlRm9ybWF0KExvY2Fs
VGFiVGl0bGUsIHMpOworICAgIHMgPSBncm91cC5yZWFkRW50cnkoIlJlbW90ZVRhYiIpOworICAg
IGlmICghcy5pc0VtcHR5KCkpIHNldFRhYlRpdGxlRm9ybWF0KFJlbW90ZVRhYlRpdGxlLCBzKTsK
K30KKwogU2Vzc2lvbkdyb3VwOjpTZXNzaW9uR3JvdXAoUU9iamVjdCogcGFyZW50KQogICAgIDog
UU9iamVjdChwYXJlbnQpLCBfbWFzdGVyTW9kZSgwKQogewpkaWZmIC0tZ2l0IGtvbnNvbGUta2Rl
YmFzZS00LjEuMC9zcmMvU2Vzc2lvbi5oIGtvbnNvbGUvc3JjL1Nlc3Npb24uaAppbmRleCAyYTA5
MjIyLi5hZGQyOTc3IDEwMDY0NAotLS0ga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9u
LmgKKysrIGtvbnNvbGUvc3JjL1Nlc3Npb24uaApAQCAtMzc4LDYgKzM3OCwxMCBAQCBwdWJsaWM6
CiAJUHJvZmlsZUNoYW5nZQkJCT0gNTAgCS8vIHRoaXMgY2xhc2hlcyB3aXRoIFh0ZXJtJ3MgZm9u
dCBjaGFuZ2UgY29tbWFuZAogICB9OwogCisgIC8vIHNlc3Npb24gbWFuYWdlbWVudAorICB2b2lk
IHNhdmVTZXNzaW9uKEtDb25maWdHcm91cCYgZ3JvdXApOworICB2b2lkIHJlc3RvcmVTZXNzaW9u
KEtDb25maWdHcm91cCYgZ3JvdXApOworCiBwdWJsaWMgc2xvdHM6CiAKICAgLyoqCmRpZmYgLS1n
aXQga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uTWFuYWdlci5jcHAga29uc29sZS9z
cmMvU2Vzc2lvbk1hbmFnZXIuY3BwCmluZGV4IGJiY2NlNzYuLmMyYWEwZTMgMTAwNjQ0Ci0tLSBr
b25zb2xlLWtkZWJhc2UtNC4xLjAvc3JjL1Nlc3Npb25NYW5hZ2VyLmNwcAorKysga29uc29sZS9z
cmMvU2Vzc2lvbk1hbmFnZXIuY3BwCkBAIC03MzAsNiArNzMwLDY5IEBAIFFLZXlTZXF1ZW5jZSBT
ZXNzaW9uTWFuYWdlcjo6c2hvcnRjdXQoUHJvZmlsZTo6UHRyIGluZm8pIGNvbnN0CiAgICAgcmV0
dXJuIFFLZXlTZXF1ZW5jZSgpOwogfQogCit2b2lkIFNlc3Npb25NYW5hZ2VyOjpzYXZlU2Vzc2lv
bnMoS0NvbmZpZyogY29uZmlnKQoreworCS8vIFRoZSBzZXNzaW9uIElEcyBjYW4ndCBiZSByZXN0
b3JlZC4KKwkvLyBTbyB3ZSBuZWVkIHRvIG1hcCB0aGUgb2xkIElEIHRvIHRoZSBmdXR1cmUgbmV3
IElELgorCWludCBuID0gMTsKKwlfcmVzdG9yZU1hcHBpbmcuY2xlYXIoKTsKKworCWZvcmVhY2go
U2Vzc2lvbiogc2Vzc2lvbiwgX3Nlc3Npb25zKQorCXsKKwkJUVN0cmluZyBzID0gUUxhdGluMVN0
cmluZygiU2Vzc2lvbiIpICsgUVN0cmluZzo6bnVtYmVyKG4pOworCQlLQ29uZmlnR3JvdXAgZ3Jv
dXAoY29uZmlnLCBzKTsKKworCQlncm91cC53cml0ZVBhdGhFbnRyeSgiUHJvZmlsZSIsCisJCQkJ
ICAgICBfc2Vzc2lvblByb2ZpbGVzLnZhbHVlKHNlc3Npb24pLT5wYXRoKCkpOworCQlzZXNzaW9u
LT5zYXZlU2Vzc2lvbihncm91cCk7CisJCV9yZXN0b3JlTWFwcGluZy5pbnNlcnQoc2Vzc2lvbiwg
bik7CisJCW4rKzsKKwl9CisKKwlLQ29uZmlnR3JvdXAgZ3JvdXAoY29uZmlnLCAiTnVtYmVyIik7
CisJZ3JvdXAud3JpdGVFbnRyeSgiTnVtYmVyT2ZTZXNzaW9ucyIsIF9zZXNzaW9ucy5jb3VudCgp
KTsKK30KKworaW50IFNlc3Npb25NYW5hZ2VyOjpnZXRSZXN0b3JlSWQoU2Vzc2lvbiogc2Vzc2lv
bikKK3sKKwlyZXR1cm4gX3Jlc3RvcmVNYXBwaW5nLnZhbHVlKHNlc3Npb24pOworfQorCit2b2lk
IFNlc3Npb25NYW5hZ2VyOjpyZXN0b3JlU2Vzc2lvbnMoS0NvbmZpZyogY29uZmlnKQoreworCUtD
b25maWdHcm91cCBncm91cChjb25maWcsICJOdW1iZXIiKTsKKwlpbnQgc2Vzc2lvbnM7CisKKwkv
LyBBbnkgc2Vzc2lvbnMgc2F2ZWQ/CisJaWYgKChzZXNzaW9ucyA9IGdyb3VwLnJlYWRFbnRyeSgi
TnVtYmVyT2ZTZXNzaW9ucyIsIDApKSA+IDApCisJeworCQlmb3IgKGludCBuID0gMTsgbiA8PSBz
ZXNzaW9uczsgbisrKQorCQl7CisJCQlRU3RyaW5nIHMgPSBRTGF0aW4xU3RyaW5nKCJTZXNzaW9u
IikgKyBRU3RyaW5nOjpudW1iZXIobik7CisJCQlLQ29uZmlnR3JvdXAgY2coY29uZmlnLCBzKTsK
KworCQkJUVN0cmluZyBwcm9maWxlID0gY2cucmVhZFBhdGhFbnRyeSgiUHJvZmlsZSIsIFFTdHJp
bmcoKSk7CisJCQlQcm9maWxlOjpQdHIgcHAgPSBkZWZhdWx0UHJvZmlsZSgpOworCQkJaWYgKCFw
cm9maWxlLmlzRW1wdHkoKSkgcHAgPSBsb2FkUHJvZmlsZShwcm9maWxlKTsKKworCQkJU2Vzc2lv
biogc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24ocHApOworCQkJc2Vzc2lvbi0+cmVzdG9yZVNlc3Np
b24oY2cpOworCQl9CisJfQorfQorCitTZXNzaW9uKiBTZXNzaW9uTWFuYWdlcjo6aWRUb1Nlc3Np
b24oaW50IGlkKQoreworCVFfQVNTRVJUKGlkKTsgCisJZm9yZWFjaChTZXNzaW9uKiBzZXNzaW9u
LCBfc2Vzc2lvbnMpCisJCWlmIChzZXNzaW9uLT5zZXNzaW9uSWQoKSA9PSBpZCkKKwkJCXJldHVy
biBzZXNzaW9uOworCisJLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbgorCVFfQVNTRVJUKGlkID09
IDApOworCXJldHVybiAwOworfQorCiBLX0dMT0JBTF9TVEFUSUMoIFNlc3Npb25NYW5hZ2VyICwg
dGhlU2Vzc2lvbk1hbmFnZXIgKQogU2Vzc2lvbk1hbmFnZXIqIFNlc3Npb25NYW5hZ2VyOjppbnN0
YW5jZSgpCiB7CmRpZmYgLS1naXQga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9TZXNzaW9uTWFu
YWdlci5oIGtvbnNvbGUvc3JjL1Nlc3Npb25NYW5hZ2VyLmgKaW5kZXggOTkwNDUwZC4uZjhiYmQ1
NiAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvU2Vzc2lvbk1hbmFnZXIuaAor
Kysga29uc29sZS9zcmMvU2Vzc2lvbk1hbmFnZXIuaApAQCAtMjQzLDYgKzI0MywxMiBAQCBwdWJs
aWM6CiAgICAgICovCiAgICAgc3RhdGljIFNlc3Npb25NYW5hZ2VyKiBpbnN0YW5jZSgpOwogCisg
ICAgLy8gc2Vzc2lvbiBtYW5hZ2VtZW50CisgICAgdm9pZCBzYXZlU2Vzc2lvbnMoS0NvbmZpZyog
Y29uZmlnKTsKKyAgICBpbnQgIGdldFJlc3RvcmVJZChTZXNzaW9uKiBzZXNzaW9uKTsKKyAgICB2
b2lkIHJlc3RvcmVTZXNzaW9ucyhLQ29uZmlnKiBjb25maWcpOworICAgIFNlc3Npb24gKmlkVG9T
ZXNzaW9uKGludCBpZCk7CisKIHNpZ25hbHM6CiAgICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHByb2Zp
bGUgaXMgYWRkZWQgdG8gdGhlIG1hbmFnZXIuICovCiAgICAgdm9pZCBwcm9maWxlQWRkZWQoUHJv
ZmlsZTo6UHRyIHB0cik7CkBAIC0zMTgsNiArMzI0LDcgQEAgcHJpdmF0ZToKIAogCVFTZXQ8UHJv
ZmlsZTo6UHRyPiBfdHlwZXM7CiAgICAgUUhhc2g8U2Vzc2lvbiosUHJvZmlsZTo6UHRyPiBfc2Vz
c2lvblByb2ZpbGVzOworICAgIFFIYXNoPFNlc3Npb24qLGludD4gX3Jlc3RvcmVNYXBwaW5nOwog
CiAgICAgc3RydWN0IFNob3J0Y3V0RGF0YQogICAgIHsKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJh
c2UtNC4xLjAvc3JjL1ZpZXdNYW5hZ2VyLmNwcCBrb25zb2xlL3NyYy9WaWV3TWFuYWdlci5jcHAK
aW5kZXggMzQ5Yzg5Yi4uYzc1OTY3OSAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9z
cmMvVmlld01hbmFnZXIuY3BwCisrKyBrb25zb2xlL3NyYy9WaWV3TWFuYWdlci5jcHAKQEAgLTgz
OCw2ICs4MzgsNjYgQEAgUUxpc3Q8Vmlld1Byb3BlcnRpZXMqPiBWaWV3TWFuYWdlcjo6dmlld1By
b3BlcnRpZXMoKSBjb25zdAogICAgIHJldHVybiBsaXN0OwogfQogCit2b2lkIFZpZXdNYW5hZ2Vy
OjpzYXZlU2Vzc2lvbnMoS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICAvLyBmaW5kIGFsbCB1
bmlxdWUgc2Vzc2lvbiByZXN0b3JlIElEcworICAgIFFMaXN0PGludD4gaWRzOworICAgIFFIYXNo
PFNlc3Npb24qLGludD4gdW5pcXVlOworCisgICAgLy8gZmlyc3Q6IHNlc3Npb25zIGluIHRoZSBh
Y3RpdmUgY29udGFpbmVyLCBwcmVzZXJ2aW5nIHRoZSBvcmRlcgorICAgIFZpZXdDb250YWluZXIq
IGNvbnRhaW5lciA9IF92aWV3U3BsaXR0ZXItPmFjdGl2ZUNvbnRhaW5lcigpOworICAgIFFfQVNT
RVJUKGNvbnRhaW5lcik7CisgICAgVGVybWluYWxEaXNwbGF5KiBhY3RpdmV2aWV3ID0gZHluYW1p
Y19jYXN0PFRlcm1pbmFsRGlzcGxheSo+KGNvbnRhaW5lci0+YWN0aXZlVmlldygpKTsKKworICAg
IFFMaXN0SXRlcmF0b3I8UVdpZGdldCo+IHZpZXdJdGVyKGNvbnRhaW5lci0+dmlld3MoKSk7Cisg
ICAgaW50IHRhYiA9IDE7CisgICAgd2hpbGUgKHZpZXdJdGVyLmhhc05leHQoKSkKKyAgICB7CisJ
VGVybWluYWxEaXNwbGF5ICp2aWV3ID0gZHluYW1pY19jYXN0PFRlcm1pbmFsRGlzcGxheSo+KHZp
ZXdJdGVyLm5leHQoKSk7CisJUV9BU1NFUlQodmlldyk7CisJU2Vzc2lvbiAqc2Vzc2lvbiA9IF9z
ZXNzaW9uTWFwW3ZpZXddOworCWlkcyA8PCBTZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2UoKS0+Z2V0
UmVzdG9yZUlkKHNlc3Npb24pOworCWlmICh2aWV3ID09IGFjdGl2ZXZpZXcpIGdyb3VwLndyaXRl
RW50cnkoIkFjdGl2ZSIsIHRhYik7CisJdW5pcXVlLmluc2VydChzZXNzaW9uLCAxKTsKKwl0YWIr
KzsKKyAgICB9CisKKyAgICAvLyBzZWNvbmQ6IGFsbCBvdGhlciBzZXNzaW9ucywgaW4gcmFuZG9t
IG9yZGVyCisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHNlc3Npb25zIHJlc3RvcmVkIHRo
YXQgYXJlIG5vdCBjb25uZWN0ZWQuLi4KKyAgICBmb3JlYWNoKFNlc3Npb24qIHNlc3Npb24sIF9z
ZXNzaW9uTWFwKQorCWlmICghdW5pcXVlLmNvbnRhaW5zKHNlc3Npb24pKQorCXsKKwkgICAgaWRz
IDw8IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5nZXRSZXN0b3JlSWQoc2Vzc2lvbik7CisJ
ICAgIHVuaXF1ZS5pbnNlcnQoc2Vzc2lvbiwgMSk7CisJfQorCisgICAgZ3JvdXAud3JpdGVFbnRy
eSgiU2Vzc2lvbnMiLCBpZHMpOworfQorCit2b2lkIFZpZXdNYW5hZ2VyOjpyZXN0b3JlU2Vzc2lv
bnMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBRTGlzdDxpbnQ+IGlkcyA9IGdy
b3VwLnJlYWRFbnRyeSgiU2Vzc2lvbnMiLCBRTGlzdDxpbnQ+KCkpOworICAgIGludCBhY3RpdmVU
YWIgID0gZ3JvdXAucmVhZEVudHJ5KCJBY3RpdmUiLCAwKTsKKyAgICBUZXJtaW5hbERpc3BsYXkg
KmRpc3BsYXkgPSAwOworCisgICAgaW50IHRhYiA9IDE7CisgICAgZm9yZWFjaChpbnQgaWQsIGlk
cykKKyAgICB7CisJU2Vzc2lvbiAqc2Vzc2lvbiA9IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgp
LT5pZFRvU2Vzc2lvbihpZCk7CisJY3JlYXRlVmlldyhzZXNzaW9uKTsKKwlpZiAoIXNlc3Npb24t
PmlzUnVubmluZygpKQorCSAgICBzZXNzaW9uLT5ydW4oKTsKKwlpZiAodGFiKysgPT0gYWN0aXZl
VGFiKQorCSAgICBkaXNwbGF5ID0gZHluYW1pY19jYXN0PFRlcm1pbmFsRGlzcGxheSo+KGFjdGl2
ZVZpZXcoKSk7CisgICAgfQorCisgICAgaWYgKGRpc3BsYXkpCisgICAgeworCV92aWV3U3BsaXR0
ZXItPmFjdGl2ZUNvbnRhaW5lcigpLT5zZXRBY3RpdmVWaWV3KGRpc3BsYXkpOworCWRpc3BsYXkt
PnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsKKyAgICB9Cit9CisKIHVpbnQgcUhhc2go
UVBvaW50ZXI8VGVybWluYWxEaXNwbGF5PiBkaXNwbGF5KQogewogICAgIHJldHVybiBxSGFzaCgo
VGVybWluYWxEaXNwbGF5KilkaXNwbGF5KTsKZGlmZiAtLWdpdCBrb25zb2xlLWtkZWJhc2UtNC4x
LjAvc3JjL1ZpZXdNYW5hZ2VyLmgga29uc29sZS9zcmMvVmlld01hbmFnZXIuaAppbmRleCBhZTlk
YjhjLi45YWIyMjcyIDEwMDY0NAotLS0ga29uc29sZS1rZGViYXNlLTQuMS4wL3NyYy9WaWV3TWFu
YWdlci5oCisrKyBrb25zb2xlL3NyYy9WaWV3TWFuYWdlci5oCkBAIC0xNDIsMTEgKzE0MiwxNyBA
QCBwdWJsaWM6CiAgICAgICovCiAgICAgTmF2aWdhdGlvbk1ldGhvZCBuYXZpZ2F0aW9uTWV0aG9k
KCkgY29uc3Q7CiAKLQkvKiogCi0gCSAqIFJldHVybnMgdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBh
Y3RpdmUgdmlldy4gIGFjdGl2ZVZpZXdDaGFuZ2VkKCkgaXMgCi0gCSAqIGVtaXR0ZWQgd2hlbiB0
aGlzIGNoYW5nZXMuCi0JICovCi0JU2Vzc2lvbkNvbnRyb2xsZXIqIGFjdGl2ZVZpZXdDb250cm9s
bGVyKCkgY29uc3Q7CisgICAgLyoqIAorICAgICAqIFJldHVybnMgdGhlIGNvbnRyb2xsZXIgZm9y
IHRoZSBhY3RpdmUgdmlldy4gIGFjdGl2ZVZpZXdDaGFuZ2VkKCkgaXMgCisgICAgICogZW1pdHRl
ZCB3aGVuIHRoaXMgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBTZXNzaW9uQ29udHJvbGxlciogYWN0
aXZlVmlld0NvbnRyb2xsZXIoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFNlc3Npb24gbWFu
YWdlbWVudAorICAgICAqLworICAgIHZvaWQgc2F2ZVNlc3Npb25zKEtDb25maWdHcm91cCYgZ3Jv
dXApOworICAgIHZvaWQgcmVzdG9yZVNlc3Npb25zKGNvbnN0IEtDb25maWdHcm91cCYgZ3JvdXAp
OwogCiBzaWduYWxzOgogICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGxhc3QgdmlldyBpcyByZW1v
dmVkIGZyb20gdGhlIHZpZXcgbWFuYWdlciAqLwpkaWZmIC0tZ2l0IGtvbnNvbGUta2RlYmFzZS00
LjEuMC9zcmMvbWFpbi5jcHAga29uc29sZS9zcmMvbWFpbi5jcHAKaW5kZXggMTdhZTFjZC4uNDE3
YTZhYSAxMDA2NDQKLS0tIGtvbnNvbGUta2RlYmFzZS00LjEuMC9zcmMvbWFpbi5jcHAKKysrIGtv
bnNvbGUvc3JjL21haW4uY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAKIC8vIE93bgogI2luY2x1ZGUg
IkFwcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgogI2luY2x1ZGUgPEtEZWJ1
Zz4KIAogLy8gVW5peApAQCAtNTEsNiArNTIsNyBAQCB2b2lkIGZpbGxDb21tYW5kTGluZU9wdGlv
bnMoS0NtZExpbmVPcHRpb25zJiBvcHRpb25zKTsKIGJvb2wgdXNlVHJhbnNwYXJlbmN5KCk7ICAg
ICAvLyByZXR1cm5zIHRydWUgaWYgdHJhbnNwYXJlbmN5IHNob3VsZCBiZSBlbmFibGVkCiBib29s
IGZvcmNlTmV3UHJvY2VzcygpOyAgICAgLy8gcmV0dXJucyB0cnVlIGlmIG5ldyBpbnN0YW5jZSBz
aG91bGQgdXNlIGEgbmV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyAo
aW5zdGVhZCBvZiByZS11c2luZyBhbiBleGlzdGluZyBvbmUpCit2b2lkIHJlc3RvcmVTZXNzaW9u
KEFwcGxpY2F0aW9uJiBhcHApOwogCiAvLyAqKioKIC8vIEVudHJ5IHBvaW50IGludG8gdGhlIEtv
bnNvbGUgdGVybWluYWwgYXBwbGljYXRpb24uICAKQEAgLTkxLDEyICs5MywxNCBAQCBleHRlcm4g
IkMiIGludCBLREVfRVhQT1JUIGtkZW1haW4oaW50IGFyZ2MsY2hhcioqIGFyZ3YpCiAJCWdldERp
c3BsYXlJbmZvcm1hdGlvbihkaXNwbGF5LHZpc3VhbCxjb2xvcm1hcCk7CiAKIAkJQXBwbGljYXRp
b24gYXBwKGRpc3BsYXksKFF0OjpIQU5ETEUpdmlzdWFsLChRdDo6SEFORExFKWNvbG9ybWFwKTsK
KwkJcmVzdG9yZVNlc3Npb24oYXBwKTsKIAkJcmV0dXJuIGFwcC5leGVjKCk7CiAJfQogCWVsc2UK
ICNlbmRpZiAKIAl7CiAgICAgCUFwcGxpY2F0aW9uIGFwcDsKKwlyZXN0b3JlU2Vzc2lvbihhcHAp
OwogICAgIAlyZXR1cm4gYXBwLmV4ZWMoKTsKIAl9ICAgCiB9CkBAIC0yNDIsNCArMjQ2LDExIEBA
IHZvaWQgZ2V0RGlzcGxheUluZm9ybWF0aW9uKERpc3BsYXkqJiBkaXNwbGF5ICwgVmlzdWFsKiYg
dmlzdWFsICwgQ29sb3JtYXAmIGNvbG9yCiB9CiAjZW5kaWYKIAotCit2b2lkIHJlc3RvcmVTZXNz
aW9uKEFwcGxpY2F0aW9uJiBhcHApCit7CisgICAgaWYgKGFwcC5pc1Nlc3Npb25SZXN0b3JlZCgp
KSB7CisJaW50IG4gPSAxOworCXdoaWxlIChLTWFpbldpbmRvdzo6Y2FuQmVSZXN0b3JlZChuKSkK
KwkgICAgYXBwLm5ld01haW5XaW5kb3coKS0+cmVzdG9yZShuKyspOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27386</attachid>
            <date>2008-09-12 21:39:27 +0000</date>
            <delta_ts>2008-09-22 20:01:49 +0000</delta_ts>
            <desc>Proposed patch for upstream merge</desc>
            <filename>kdebase-4.1.1-konsole-session-management.patch</filename>
            <type>text/plain</type>
            <size>31318</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9BcHBsaWNhdGlvbi5jcHAgYi9zcmMvQXBwbGljYXRpb24uY3BwCmlu
ZGV4IGYzZjUyZTguLmQyMmQ1OTIgMTAwNjQ0Ci0tLSBhL3NyYy9BcHBsaWNhdGlvbi5jcHAKKysr
IGIvc3JjL0FwcGxpY2F0aW9uLmNwcApAQCAtMTAzLDQ5ICsxMDMsNTYgQEAgdm9pZCBBcHBsaWNh
dGlvbjo6bGlzdEF2YWlsYWJsZVByb2ZpbGVzKCkKIGludCBBcHBsaWNhdGlvbjo6bmV3SW5zdGFu
Y2UoKQogewogICAgIEtDbWRMaW5lQXJncyogYXJncyA9IEtDbWRMaW5lQXJnczo6cGFyc2VkQXJn
cygpOworICAgIHN0YXRpYyBib29sIGZpcnN0ID0gdHJ1ZTsKIAotICAgIC8vIGNoZWNrIGZvciBh
cmd1bWVudHMgdG8gcHJpbnQgaGVscCBvciBvdGhlciBpbmZvcm1hdGlvbiB0byB0aGUgdGVybWlu
YWwsCi0gICAgLy8gcXVpdCBpZiBzdWNoIGFuIGFyZ3VtZW50IHdhcyBmb3VuZAotICAgIGlmICgg
cHJvY2Vzc0hlbHBBcmdzKGFyZ3MpICkgCi0gICAgICAgIHJldHVybiAwOworICAgIC8vIGhhbmRs
ZSBzZXNzaW9uIG1hbmFnZW1lbnQKKyAgICBpZiAoKGFyZ3MtPmNvdW50KCkgIT0gMCkgfHwgIWZp
cnN0IHx8ICFpc1Nlc3Npb25SZXN0b3JlZCgpKQorICAgIHsKKyAgICAgICAgLy8gY2hlY2sgZm9y
IGFyZ3VtZW50cyB0byBwcmludCBoZWxwIG9yIG90aGVyIGluZm9ybWF0aW9uIHRvIHRoZSB0ZXJt
aW5hbCwKKyAgICAgICAgLy8gcXVpdCBpZiBzdWNoIGFuIGFyZ3VtZW50IHdhcyBmb3VuZAorICAg
ICAgICBpZiAoIHByb2Nlc3NIZWxwQXJncyhhcmdzKSApIAorCSAgICByZXR1cm4gMDsKIAotICAg
IC8vIGNyZWF0ZSBhIG5ldyB3aW5kb3cgb3IgdXNlIGFuIGV4aXN0aW5nIG9uZSAKLSAgICBNYWlu
V2luZG93KiB3aW5kb3cgPSBwcm9jZXNzV2luZG93QXJncyhhcmdzKTsKKwkvLyBjcmVhdGUgYSBu
ZXcgd2luZG93IG9yIHVzZSBhbiBleGlzdGluZyBvbmUgCisJTWFpbldpbmRvdyogd2luZG93ID0g
cHJvY2Vzc1dpbmRvd0FyZ3MoYXJncyk7CiAgIAotICAgIC8vIHNlbGVjdCBwcm9maWxlIHRvIHVz
ZSAKLSAgICBwcm9jZXNzUHJvZmlsZVNlbGVjdEFyZ3MoYXJncyx3aW5kb3cpOworCS8vIHNlbGVj
dCBwcm9maWxlIHRvIHVzZSAKKwlwcm9jZXNzUHJvZmlsZVNlbGVjdEFyZ3MoYXJncyx3aW5kb3cp
OwogICAgCi0gICAgLy8gcHJvY2VzcyB2YXJpb3VzIGNvbW1hbmQtbGluZSBvcHRpb25zIHdoaWNo
IGNhdXNlIGEgcHJvcGVydHkgb2YgdGhlIAotICAgIC8vIGRlZmF1bHQgcHJvZmlsZSB0byBiZSBj
aGFuZ2VkIAotICAgIHByb2Nlc3NQcm9maWxlQ2hhbmdlQXJncyhhcmdzLHdpbmRvdyk7CisJLy8g
cHJvY2VzcyB2YXJpb3VzIGNvbW1hbmQtbGluZSBvcHRpb25zIHdoaWNoIGNhdXNlIGEgcHJvcGVy
dHkgb2YgdGhlIAorCS8vIGRlZmF1bHQgcHJvZmlsZSB0byBiZSBjaGFuZ2VkIAorCXByb2Nlc3NQ
cm9maWxlQ2hhbmdlQXJncyhhcmdzLHdpbmRvdyk7CiAKLSAgICAvLyBjcmVhdGUgbmV3IHNlc3Np
b24KLSAgICBTZXNzaW9uKiBzZXNzaW9uID0gY3JlYXRlU2Vzc2lvbiggd2luZG93LT5kZWZhdWx0
UHJvZmlsZSgpICwgUVN0cmluZygpICwgd2luZG93LT52aWV3TWFuYWdlcigpICk7CisJLy8gY3Jl
YXRlIG5ldyBzZXNzaW9uCisJU2Vzc2lvbiogc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oIHdpbmRv
dy0+ZGVmYXVsdFByb2ZpbGUoKSAsIFFTdHJpbmcoKSAsIHdpbmRvdy0+dmlld01hbmFnZXIoKSAp
OwogCWlmICggIWFyZ3MtPmlzU2V0KCJjbG9zZSIpICkKLQkJc2Vzc2lvbi0+c2V0QXV0b0Nsb3Nl
KGZhbHNlKTsKKwkgIHNlc3Npb24tPnNldEF1dG9DbG9zZShmYWxzZSk7CiAKLSAgICAvLyBpZiB0
aGUgYmFja2dyb3VuZC1tb2RlIGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBzdGFydCB0aGUgYmFja2dy
b3VuZCBzZXNzaW9uCi0gICAgLy8gKCBvciBicmluZyB0byB0aGUgZnJvbnQgaWYgaXQgYWxyZWFk
eSBleGlzdHMgKQotICAgIGlmICggYXJncy0+aXNTZXQoImJhY2tncm91bmQtbW9kZSIpICkKLSAg
ICAgICAgc3RhcnRCYWNrZ3JvdW5kTW9kZSh3aW5kb3cpOwotICAgIGVsc2UKKwkvLyBpZiB0aGUg
YmFja2dyb3VuZC1tb2RlIGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBzdGFydCB0aGUgYmFja2dyb3Vu
ZCBzZXNzaW9uCisJLy8gKCBvciBicmluZyB0byB0aGUgZnJvbnQgaWYgaXQgYWxyZWFkeSBleGlz
dHMgKQorCWlmICggYXJncy0+aXNTZXQoImJhY2tncm91bmQtbW9kZSIpICkKKwkgICAgc3RhcnRC
YWNrZ3JvdW5kTW9kZSh3aW5kb3cpOworCWVsc2UKIAl7Ci0JCS8vIFF0IGNvbnN0cmFpbnMgdG9w
LWxldmVsIHdpbmRvd3Mgd2hpY2ggaGF2ZSBub3QgYmVlbiBtYW51YWxseSByZXNpemVkCi0JCS8v
ICh2aWEgUVdpZGdldDo6cmVzaXplKCkpIHRvIGEgbWF4aW11bSBvZiAyLzNyZHMgb2YgdGhlIHNj
cmVlbiBzaXplLgotCQkvLwotCQkvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHRlcm1pbmFsIGRpc3Bs
YXkgbWlnaHQgbm90IGdldCB0aGUgd2lkdGgvaGVpZ2h0Ci0JCS8vIGl0IGFza3MgZm9yLiAgVG8g
d29yayBhcm91bmQgdGhpcywgdGhlIHdpZGdldCBtdXN0IGJlIG1hbnVhbGx5IHJlc2l6ZWQKLQkJ
Ly8gdG8gaXRzIHNpemVIaW50KCkuCi0JCS8vCi0JCS8vIFRoaXMgcHJvYmxlbSBvbmx5IGFmZmVj
dHMgdGhlIGZpcnN0IHRpbWUgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bi4gIEFmdGVyCi0JCS8vIHRo
YXQgS01haW5XaW5kb3cgd2lsbCBoYXZlIG1hbnVhbGx5IHJlc2l6ZWQgdGhlIHdpbmRvdyB0byBp
dHMgc2F2ZWQgc2l6ZQotCQkvLyBhdCB0aGlzIHBvaW50IChzbyB0aGUgUXQ6OldBX1Jlc2l6ZWQg
YXR0cmlidXRlIHdpbGwgYmUgc2V0KQotCQlpZiAoIXdpbmRvdy0+dGVzdEF0dHJpYnV0ZShRdDo6
V0FfUmVzaXplZCkpCi0JCQl3aW5kb3ctPnJlc2l6ZSh3aW5kb3ctPnNpemVIaW50KCkpOwotCi0J
CXdpbmRvdy0+c2hvdygpOworCSAgICAvLyBRdCBjb25zdHJhaW5zIHRvcC1sZXZlbCB3aW5kb3dz
IHdoaWNoIGhhdmUgbm90IGJlZW4gbWFudWFsbHkgcmVzaXplZAorCSAgICAvLyAodmlhIFFXaWRn
ZXQ6OnJlc2l6ZSgpKSB0byBhIG1heGltdW0gb2YgMi8zcmRzIG9mIHRoZSBzY3JlZW4gc2l6ZS4K
KwkgICAgLy8KKwkgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB0ZXJtaW5hbCBkaXNwbGF5IG1p
Z2h0IG5vdCBnZXQgdGhlIHdpZHRoL2hlaWdodAorCSAgICAvLyBpdCBhc2tzIGZvci4gIFRvIHdv
cmsgYXJvdW5kIHRoaXMsIHRoZSB3aWRnZXQgbXVzdCBiZSBtYW51YWxseSByZXNpemVkCisJICAg
IC8vIHRvIGl0cyBzaXplSGludCgpLgorCSAgICAvLworCSAgICAvLyBUaGlzIHByb2JsZW0gb25s
eSBhZmZlY3RzIHRoZSBmaXJzdCB0aW1lIHRoZSBhcHBsaWNhdGlvbiBpcyBydW4uICBBZnRlcgor
CSAgICAvLyB0aGF0IEtNYWluV2luZG93IHdpbGwgaGF2ZSBtYW51YWxseSByZXNpemVkIHRoZSB3
aW5kb3cgdG8gaXRzIHNhdmVkIHNpemUKKwkgICAgLy8gYXQgdGhpcyBwb2ludCAoc28gdGhlIFF0
OjpXQV9SZXNpemVkIGF0dHJpYnV0ZSB3aWxsIGJlIHNldCkKKwkgICAgaWYgKCF3aW5kb3ctPnRl
c3RBdHRyaWJ1dGUoUXQ6OldBX1Jlc2l6ZWQpKQorCSAgICAgICAgd2luZG93LT5yZXNpemUod2lu
ZG93LT5zaXplSGludCgpKTsKKworCSAgICB3aW5kb3ctPnNob3coKTsKIAl9CisgICAgfQogCisg
ICAgZmlyc3QgPSBmYWxzZTsKKyAgICBhcmdzLT5jbGVhcigpOwogICAgIHJldHVybiAwOwogfQog
CmRpZmYgLS1naXQgYS9zcmMvTWFpbldpbmRvdy5jcHAgYi9zcmMvTWFpbldpbmRvdy5jcHAKaW5k
ZXggYzA5ZmVkYi4uNmNmZGQxOSAxMDA2NDQKLS0tIGEvc3JjL01haW5XaW5kb3cuY3BwCisrKyBi
L3NyYy9NYWluV2luZG93LmNwcApAQCAtMTksNiArMTksNyBAQAogCiAvLyBPd24KICNpbmNsdWRl
ICJNYWluV2luZG93LmgiCisjaW5jbHVkZSAiU2Vzc2lvbk1hbmFnZXIuaCIKIAogLy8gUXQKICNp
bmNsdWRlIDxRdEd1aS9RQm94TGF5b3V0PgpAQCAtMzcyLDYgKzM3MywzMiBAQCBib29sIE1haW5X
aW5kb3c6OnF1ZXJ5Q2xvc2UoKQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIE1haW5XaW5k
b3c6OnNhdmVQcm9wZXJ0aWVzKEtDb25maWdHcm91cCYgZ3JvdXApCit7CisgICAgZ3JvdXAud3Jp
dGVQYXRoRW50cnkoIkRlZmF1bHQgUHJvZmlsZSIsIF9kZWZhdWx0UHJvZmlsZS0+cGF0aCgpKTsK
KyAgICBfdmlld01hbmFnZXItPnNhdmVTZXNzaW9ucyhncm91cCk7Cit9CisKK3ZvaWQgTWFpbldp
bmRvdzo6cmVhZFByb3BlcnRpZXMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBT
ZXNzaW9uTWFuYWdlciAqbWdyID0gU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCk7CisgICAgUVN0
cmluZyBwcm9maWxlID0gZ3JvdXAucmVhZFBhdGhFbnRyeSgiRGVmYXVsdCBQcm9maWxlIiwgUVN0
cmluZygpKTsKKyAgICBQcm9maWxlOjpQdHIgcHAgPSBtZ3ItPmRlZmF1bHRQcm9maWxlKCk7Cisg
ICAgaWYgKCFwcm9maWxlLmlzRW1wdHkoKSkgcHAgPSBtZ3ItPmxvYWRQcm9maWxlKHByb2ZpbGUp
OworICAgIHNldERlZmF1bHRQcm9maWxlKHBwKTsKKyAgICBfdmlld01hbmFnZXItPnJlc3RvcmVT
ZXNzaW9ucyhncm91cCk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6c2F2ZUdsb2JhbFByb3BlcnRp
ZXMoS0NvbmZpZyogY29uZmlnKQoreworICAgIFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5z
YXZlU2Vzc2lvbnMoY29uZmlnKTsKK30KKwordm9pZCBNYWluV2luZG93OjpyZWFkR2xvYmFsUHJv
cGVydGllcyhLQ29uZmlnKiBjb25maWcpCit7CisgICAgU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNl
KCktPnJlc3RvcmVTZXNzaW9ucyhjb25maWcpOworfQorCiB2b2lkIE1haW5XaW5kb3c6OnNob3dT
aG9ydGN1dHNEaWFsb2coKQogewogICAgIEtTaG9ydGN1dHNEaWFsb2c6OmNvbmZpZ3VyZSggYWN0
aW9uQ29sbGVjdGlvbigpICwKZGlmZiAtLWdpdCBhL3NyYy9NYWluV2luZG93LmggYi9zcmMvTWFp
bldpbmRvdy5oCmluZGV4IDJhMDFiOWQuLjVjMDY0NGIgMTAwNjQ0Ci0tLSBhL3NyYy9NYWluV2lu
ZG93LmgKKysrIGIvc3JjL01haW5XaW5kb3cuaApAQCAtMTMzLDYgKzEzMywxMiBAQCBjbGFzcyBN
YWluV2luZG93IDogcHVibGljIEtYbWxHdWlXaW5kb3cKICAgICAgICAgLy8gcmVpbXBsZW1lbnRl
ZCBmcm9tIEtNYWluV2luZG93CiAgICAgICAgIHZpcnR1YWwgYm9vbCBxdWVyeUNsb3NlKCk7CiAK
KwkvLyBzZXNzaW9uIG1hbmFnZW1lbnQKKwl2aXJ0dWFsIHZvaWQgc2F2ZVByb3BlcnRpZXMoS0Nv
bmZpZ0dyb3VwJiBncm91cCk7CisJdmlydHVhbCB2b2lkIHJlYWRQcm9wZXJ0aWVzKGNvbnN0IEtD
b25maWdHcm91cCYgZ3JvdXApOworCXZpcnR1YWwgdm9pZCBzYXZlR2xvYmFsUHJvcGVydGllcyhL
Q29uZmlnKiBjb25maWcpOworCXZpcnR1YWwgdm9pZCByZWFkR2xvYmFsUHJvcGVydGllcyhLQ29u
ZmlnKiBjb25maWcpOworCiAgICAgcHJpdmF0ZSBzbG90czoKICAgICAgICAgdm9pZCBuZXdUYWIo
KTsKICAgICAgICAgdm9pZCBuZXdXaW5kb3coKTsKZGlmZiAtLWdpdCBhL3NyYy9Qcm9jZXNzSW5m
by5jcHAgYi9zcmMvUHJvY2Vzc0luZm8uY3BwCmluZGV4IGFiZjBhOWQuLjZlODU5MWQgMTAwNjQ0
Ci0tLSBhL3NyYy9Qcm9jZXNzSW5mby5jcHAKKysrIGIvc3JjL1Byb2Nlc3NJbmZvLmNwcApAQCAt
NjQsMTggKzY0LDEwIEBAIHZvaWQgUHJvY2Vzc0luZm86OnVwZGF0ZSgpCiAgICAgcmVhZFByb2Nl
c3NJbmZvKF9waWQsX2VuYWJsZUVudmlyb25tZW50UmVhZCk7CiB9CiAKLVFTdHJpbmcgUHJvY2Vz
c0luZm86OmZvcm1hdChjb25zdCBRU3RyaW5nJiBpbnB1dCkgY29uc3QKK1FTdHJpbmcgUHJvY2Vz
c0luZm86OnZhbGlkQ3VycmVudERpcigpIGNvbnN0CiB7CiAgICBib29sIG9rID0gZmFsc2U7CiAK
LSAgIFFTdHJpbmcgb3V0cHV0KGlucHV0KTsKLQotICAgLy8gc2VhcmNoIGZvciBhbmQgcmVwbGFj
ZSBrbm93biBtYXJrZXIKLSAgIG91dHB1dC5yZXBsYWNlKCIldSIsIk5PVCBJTVBMRU1FTlRFRCBZ
RVQiKTsKLSAgIG91dHB1dC5yZXBsYWNlKCIlbiIsbmFtZSgmb2spKTsKLSAgIG91dHB1dC5yZXBs
YWNlKCIlYyIsZm9ybWF0Q29tbWFuZChuYW1lKCZvayksYXJndW1lbnRzKCZvayksU2hvcnRDb21t
YW5kRm9ybWF0KSk7Ci0gICBvdXRwdXQucmVwbGFjZSgiJUMiLGZvcm1hdENvbW1hbmQobmFtZSgm
b2spLGFyZ3VtZW50cygmb2spLExvbmdDb21tYW5kRm9ybWF0KSk7Ci0gICAKICAgIC8vIHJlYWQg
Y3VycmVudCBkaXIsIGlmIGFuIGVycm9yIG9jY3VycyB0cnkgdGhlIHBhcmVudCBhcyB0aGUgbmV4
dAogICAgLy8gYmVzdCBvcHRpb24KICAgIGludCBjdXJyZW50UGlkID0gcGFyZW50UGlkKCZvayk7
CkBAIC04OCwxMCArODAsMjYgQEAgUVN0cmluZyBQcm9jZXNzSW5mbzo6Zm9ybWF0KGNvbnN0IFFT
dHJpbmcmIGlucHV0KSBjb25zdAogICAgICAgIGRpciA9IGN1cnJlbnQtPmN1cnJlbnREaXIoJm9r
KTsKICAgICAgICBkZWxldGUgY3VycmVudDsKICAgIH0KLSAgICAgICAgCisKKyAgIHJldHVybiBk
aXI7Cit9CisKK1FTdHJpbmcgUHJvY2Vzc0luZm86OmZvcm1hdChjb25zdCBRU3RyaW5nJiBpbnB1
dCkgY29uc3QKK3sKKyAgIGJvb2wgb2sgPSBmYWxzZTsKKworICAgUVN0cmluZyBvdXRwdXQoaW5w
dXQpOworCisgICAvLyBzZWFyY2ggZm9yIGFuZCByZXBsYWNlIGtub3duIG1hcmtlcgorICAgb3V0
cHV0LnJlcGxhY2UoIiV1IiwiTk9UIElNUExFTUVOVEVEIFlFVCIpOworICAgb3V0cHV0LnJlcGxh
Y2UoIiVuIixuYW1lKCZvaykpOworICAgb3V0cHV0LnJlcGxhY2UoIiVjIixmb3JtYXRDb21tYW5k
KG5hbWUoJm9rKSxhcmd1bWVudHMoJm9rKSxTaG9ydENvbW1hbmRGb3JtYXQpKTsKKyAgIG91dHB1
dC5yZXBsYWNlKCIlQyIsZm9ybWF0Q29tbWFuZChuYW1lKCZvayksYXJndW1lbnRzKCZvayksTG9u
Z0NvbW1hbmRGb3JtYXQpKTsKKyAgIAorICAgUVN0cmluZyBkaXIgPSB2YWxpZEN1cnJlbnREaXIo
KTsKICAgIG91dHB1dC5yZXBsYWNlKCIlRCIsZGlyKTsKICAgIG91dHB1dC5yZXBsYWNlKCIlZCIs
Zm9ybWF0U2hvcnREaXIoZGlyKSk7Ci0gICAKKwogICAgLy8gcmVtb3ZlIGFueSByZW1haW5pbmcg
JVtMRVRURVJdIHNlcXVlbmNlcwogICAgLy8gb3V0cHV0LnJlcGxhY2UoUVJlZ0V4cCgiJVxcdyIp
LCBRU3RyaW5nKCkpOwogCmRpZmYgLS1naXQgYS9zcmMvUHJvY2Vzc0luZm8uaCBiL3NyYy9Qcm9j
ZXNzSW5mby5oCmluZGV4IDc2NmE0MzQuLmZkNjFiNjYgMTAwNjQ0Ci0tLSBhL3NyYy9Qcm9jZXNz
SW5mby5oCisrKyBiL3NyYy9Qcm9jZXNzSW5mby5oCkBAIC0xNTIsNiArMTUyLDExIEBAIHB1Ymxp
YzoKICAgICBRU3RyaW5nIGN1cnJlbnREaXIoYm9vbCogb2spIGNvbnN0OwogCiAgICAgLyoqCisg
ICAgICogUmV0dXJucyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgcHJvY2Vz
cyAob3IgaXRzIHBhcmVudCkKKyAgICAgKi8KKyAgICBRU3RyaW5nIHZhbGlkQ3VycmVudERpcigp
IGNvbnN0OworCisgICAgLyoqCiAgICAgICogUGFyc2VzIGFuIGlucHV0IHN0cmluZywgbG9va2lu
ZyBmb3IgbWFya2VycyBiZWdpbm5pbmcgd2l0aCBhICclJyAKICAgICAgKiBjaGFyYWN0ZXIgYW5k
IHJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgbWFya2VycyByZXBsYWNlZAogICAgICAqIHdpdGgg
aW5mb3JtYXRpb24gZnJvbSB0aGlzIHByb2Nlc3MgZGVzY3JpcHRpb24uCmRpZmYgLS1naXQgYS9z
cmMvU2Vzc2lvbi5jcHAgYi9zcmMvU2Vzc2lvbi5jcHAKaW5kZXggODM4MWZiMC4uMTRiMjYwNSAx
MDA2NDQKLS0tIGEvc3JjL1Nlc3Npb24uY3BwCisrKyBiL3NyYy9TZXNzaW9uLmNwcApAQCAtNDcs
MTEgKzQ3LDEzIEBACiAjaW5jbHVkZSA8S1J1bj4KICNpbmNsdWRlIDxrc2hlbGwuaD4KICNpbmNs
dWRlIDxLU3RhbmRhcmREaXJzPgorI2luY2x1ZGUgPEtVcmw+CiAKIC8vIEtvbnNvbGUKICNpbmNs
dWRlIDxjb25maWcta29uc29sZS5oPgogI2luY2x1ZGUgPHNlc3Npb25hZGFwdG9yLmg+CiAKKyNp
bmNsdWRlICJQcm9jZXNzSW5mby5oIgogI2luY2x1ZGUgIlB0eS5oIgogI2luY2x1ZGUgIlRlcm1p
bmFsRGlzcGxheS5oIgogI2luY2x1ZGUgIlNoZWxsQ29tbWFuZC5oIgpAQCAtNzYsNiArNzgsOSBA
QCBTZXNzaW9uOjpTZXNzaW9uKFFPYmplY3QqIHBhcmVudCkgOgogICAgLCBfZmxvd0NvbnRyb2wo
dHJ1ZSkKICAgICwgX2Z1bGxTY3JpcHRpbmcoZmFsc2UpCiAgICAsIF9zZXNzaW9uSWQoMCkKKyAg
ICwgX3Nlc3Npb25Qcm9jZXNzSW5mbygwKQorICAgLCBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvKDAp
CisgICAsIF9mb3JlZ3JvdW5kUGlkKDApCiAgICAsIF96bW9kZW1CdXN5KGZhbHNlKQogICAgLCBf
em1vZGVtUHJvYygwKQogICAgLCBfem1vZGVtUHJvZ3Jlc3MoMCkKQEAgLTE5OSw2ICsyMDQsMTkg
QEAgdm9pZCBTZXNzaW9uOjpzZXRBcmd1bWVudHMoY29uc3QgUVN0cmluZ0xpc3QmIGFyZ3VtZW50
cykKICAgICBfYXJndW1lbnRzID0gU2hlbGxDb21tYW5kOjpleHBhbmQoYXJndW1lbnRzKTsKIH0K
IAorUVN0cmluZyBTZXNzaW9uOjpjdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpCit7CisgICAgLy8g
b25seSByZXR1cm5lZCBjYWNoZWQgdmFsdWUKKyAgICBpZiAoX2N1cnJlbnRXb3JraW5nRGlyLmlz
RW1wdHkoKSkgdXBkYXRlV29ya2luZ0RpcmVjdG9yeSgpOworICAgIHJldHVybiBfY3VycmVudFdv
cmtpbmdEaXI7Cit9CitQcm9jZXNzSW5mbyogU2Vzc2lvbjo6dXBkYXRlV29ya2luZ0RpcmVjdG9y
eSgpCit7CisgICAgUHJvY2Vzc0luZm8gKnByb2Nlc3MgPSBnZXRQcm9jZXNzSW5mbygpOworICAg
IF9jdXJyZW50V29ya2luZ0RpciA9IHByb2Nlc3MtPnZhbGlkQ3VycmVudERpcigpOworICAgIHJl
dHVybiBwcm9jZXNzOworfQorCiBRTGlzdDxUZXJtaW5hbERpc3BsYXkqPiBTZXNzaW9uOjp2aWV3
cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIF92aWV3czsKQEAgLTMyMSw5ICszMzksMTMgQEAgdm9p
ZCBTZXNzaW9uOjpydW4oKQogewogICAvL2NoZWNrIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBwbGFj
ZSB0byBydW4gdGhlIHNlc3Npb24KICAgaWYgKF9wcm9ncmFtLmlzRW1wdHkoKSkKKyAgewogICAg
ICAga0RlYnVnKCkgPDwgIlNlc3Npb246OnJ1bigpIC0gcHJvZ3JhbSB0byBydW4gbm90IHNldC4i
OworICB9CiAgIGlmIChfYXJndW1lbnRzLmlzRW1wdHkoKSkKKyAgewogICAgICAga0RlYnVnKCkg
PDwgIlNlc3Npb246OnJ1bigpIC0gbm8gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBzcGVjaWZpZWQu
IjsKKyAgfQogCiAgIGNvbnN0IGludCBDSE9JQ0VfQ09VTlQgPSAzOwogICBRU3RyaW5nIHByb2dy
YW1zW0NIT0lDRV9DT1VOVF0gPSB7X3Byb2dyYW0sZ2V0ZW52KCJTSEVMTCIpLCIvYmluL3NoIn07
CkBAIC02NDgsNiArNjcwLDEwIEBAIHZvaWQgU2Vzc2lvbjo6c2VuZFRleHQoY29uc3QgUVN0cmlu
ZyAmdGV4dCkgY29uc3QKIAogU2Vzc2lvbjo6flNlc3Npb24oKQogeworICBpZiAoX2ZvcmVncm91
bmRQcm9jZXNzSW5mbykKKyAgICBkZWxldGUgX2ZvcmVncm91bmRQcm9jZXNzSW5mbzsKKyAgaWYg
KF9zZXNzaW9uUHJvY2Vzc0luZm8pCisgICAgZGVsZXRlIF9zZXNzaW9uUHJvY2Vzc0luZm87CiAg
IGRlbGV0ZSBfZW11bGF0aW9uOwogICBkZWxldGUgX3NoZWxsUHJvY2VzczsKICAgZGVsZXRlIF96
bW9kZW1Qcm9jOwpAQCAtNzM1LDYgKzc2MSwxMTAgQEAgUVN0cmluZyBTZXNzaW9uOjp0aXRsZShU
aXRsZVJvbGUgcm9sZSkgY29uc3QKICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKIH0KIAorUHJv
Y2Vzc0luZm8qIFNlc3Npb246OmdldFByb2Nlc3NJbmZvKCkKK3sKKyAgICBQcm9jZXNzSW5mbyog
cHJvY2VzczsKKworICAgIGlmIChpc0NoaWxkQWN0aXZlKCkpCisJcHJvY2VzcyA9IF9mb3JlZ3Jv
dW5kUHJvY2Vzc0luZm87CisgICAgZWxzZQorICAgIHsKKwl1cGRhdGVTZXNzaW9uUHJvY2Vzc0lu
Zm8oKTsKKwlwcm9jZXNzID0gX3Nlc3Npb25Qcm9jZXNzSW5mbzsKKyAgICB9CisKKyAgICByZXR1
cm4gcHJvY2VzczsKK30KKwordm9pZCBTZXNzaW9uOjp1cGRhdGVTZXNzaW9uUHJvY2Vzc0luZm8o
KQoreworICAgIFFfQVNTRVJUKF9zaGVsbFByb2Nlc3MpOworICAgIGlmICghX3Nlc3Npb25Qcm9j
ZXNzSW5mbykKKyAgICAgICAgX3Nlc3Npb25Qcm9jZXNzSW5mbyA9IFByb2Nlc3NJbmZvOjpuZXdJ
bnN0YW5jZShwcm9jZXNzSWQoKSk7CisgICAgX3Nlc3Npb25Qcm9jZXNzSW5mby0+dXBkYXRlKCk7
Cit9CisKK2Jvb2wgU2Vzc2lvbjo6dXBkYXRlRm9yZWdyb3VuZFByb2Nlc3NJbmZvKCkKK3sKKyAg
ICBib29sIHZhbGlkID0gKF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8gIT0gMCk7CisKKyAgICAvLyBo
YXMgZm9yZWdyb3VuZCBwcm9jZXNzIGNoYW5nZWQ/CisgICAgUV9BU1NFUlQoX3NoZWxsUHJvY2Vz
cyk7CisgICAgaW50IHBpZCA9IF9zaGVsbFByb2Nlc3MtPmZvcmVncm91bmRQcm9jZXNzR3JvdXAo
KTsKKyAgICBpZiAocGlkICE9IF9mb3JlZ3JvdW5kUGlkKQorICAgIHsKKwlpZiAodmFsaWQpCisJ
ICAgIGRlbGV0ZSBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvOworCV9mb3JlZ3JvdW5kUHJvY2Vzc0lu
Zm8gPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UocGlkKTsKKwlfZm9yZWdyb3VuZFBpZCA9IHBp
ZDsKKwl2YWxpZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHZhbGlkKQorICAgIHsKKwlfZm9y
ZWdyb3VuZFByb2Nlc3NJbmZvLT51cGRhdGUoKTsKKwl2YWxpZCA9IF9mb3JlZ3JvdW5kUHJvY2Vz
c0luZm8tPmlzVmFsaWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsaWQ7Cit9CisKK1FTdHJp
bmcgU2Vzc2lvbjo6Z2V0RHluYW1pY1RpdGxlKCkKK3sKKyAgICAvLyB1cGRhdGUgY3VycmVudCBk
aXJlY3RvcnkgZnJvbSBwcm9jZXNzCisgICAgUHJvY2Vzc0luZm8qIHByb2Nlc3MgPSB1cGRhdGVX
b3JraW5nRGlyZWN0b3J5KCk7CisKKyAgICAvLyBmb3JtYXQgdGFiIHRpdGxlcyB1c2luZyBwcm9j
ZXNzIGluZm8KKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgUVN0cmluZyB0aXRsZTsKKyAgICBp
ZiAoIHByb2Nlc3MtPm5hbWUoJm9rKSA9PSAic3NoIiAmJiBvayApCisgICAgeworICAgICAgICBT
U0hQcm9jZXNzSW5mbyBzc2hJbmZvKCpwcm9jZXNzKTsKKyAgICAgICAgdGl0bGUgPSBzc2hJbmZv
LmZvcm1hdCh0YWJUaXRsZUZvcm1hdChTZXNzaW9uOjpSZW1vdGVUYWJUaXRsZSkpOworICAgIH0K
KyAgICBlbHNlCisgICAgICAgIHRpdGxlID0gcHJvY2Vzcy0+Zm9ybWF0KHRhYlRpdGxlRm9ybWF0
KFNlc3Npb246OkxvY2FsVGFiVGl0bGUpKTsKKworICAgIHJldHVybiB0aXRsZTsKK30KKworS1Vy
bCBTZXNzaW9uOjpnZXRVcmwoKQoreworICAgIFFTdHJpbmcgcGF0aDsKKyAgICAKKyAgICB1cGRh
dGVTZXNzaW9uUHJvY2Vzc0luZm8oKTsKKyAgICBpZiAoX3Nlc3Npb25Qcm9jZXNzSW5mby0+aXNW
YWxpZCgpKQorICAgIHsKKwlib29sIG9rID0gZmFsc2U7CisKKwkvLyBjaGVjayBpZiBmb3JlZ3Jv
dW5kIHByb2Nlc3MgaXMgYm9va21hcmstYWJsZQorCWlmIChpc0NoaWxkQWN0aXZlKCkpCisJewor
CSAgICAvLyBmb3IgcmVtb3RlIGNvbm5lY3Rpb25zLCBzYXZlIHRoZSB1c2VyIGFuZCBob3N0CisJ
ICAgIC8vIGJyaWdodCBpZGVhcyB0byBnZXQgdGhlIGRpcmVjdG9yeSBhdCB0aGUgb3RoZXIgZW5k
IGFyZSB3ZWxjb21lIDopCisJICAgIGlmIChfZm9yZWdyb3VuZFByb2Nlc3NJbmZvLT5uYW1lKCZv
aykgPT0gInNzaCIgJiYgb2spCisJICAgIHsKKwkgCVNTSFByb2Nlc3NJbmZvIHNzaEluZm8oKl9m
b3JlZ3JvdW5kUHJvY2Vzc0luZm8pOworCQlwYXRoID0gInNzaDovLyIgKyBzc2hJbmZvLnVzZXJO
YW1lKCkgKyAnQCcgKyBzc2hJbmZvLmhvc3QoKTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsK
KwkJcGF0aCA9IF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8tPmN1cnJlbnREaXIoJm9rKTsKKwkJaWYg
KCFvaykKKwkJICAgIHBhdGguY2xlYXIoKTsKKwkgICAgfQorCX0KKwllbHNlIC8vIG90aGVyd2lz
ZSB1c2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIHNoZWxsIHByb2Nlc3MK
Kwl7CisJICAgIHBhdGggPSBfc2Vzc2lvblByb2Nlc3NJbmZvLT5jdXJyZW50RGlyKCZvayk7Cisg
ICAgICAgICAgICBpZiAoIW9rKQorCQlwYXRoLmNsZWFyKCk7CisJfQorICAgIH0KKworICAgIHJl
dHVybiBLVXJsKHBhdGgpOworfQorCiB2b2lkIFNlc3Npb246OnNldEljb25OYW1lKGNvbnN0IFFT
dHJpbmcmIGljb25OYW1lKQogewogICAgIGlmICggaWNvbk5hbWUgIT0gX2ljb25OYW1lICkKQEAg
LTk3MCwxNSArMTEwMCw1MSBAQCB2b2lkIFNlc3Npb246OnNldFNpemUoY29uc3QgUVNpemUmIHNp
emUpCiAKICAgZW1pdCByZXNpemVSZXF1ZXN0KHNpemUpOwogfQotaW50IFNlc3Npb246OmZvcmVn
cm91bmRQcm9jZXNzSWQoKSBjb25zdAotewotICAgIHJldHVybiBfc2hlbGxQcm9jZXNzLT5mb3Jl
Z3JvdW5kUHJvY2Vzc0dyb3VwKCk7Ci19CiBpbnQgU2Vzc2lvbjo6cHJvY2Vzc0lkKCkgY29uc3QK
IHsKICAgICByZXR1cm4gX3NoZWxsUHJvY2Vzcy0+cGlkKCk7CiB9CiAKK2Jvb2wgU2Vzc2lvbjo6
aXNDaGlsZEFjdGl2ZSgpCit7CisgICAgLy8gZm9yZWdyb3VuZCBwcm9jZXNzIGluZm8gaXMgYWx3
YXlzIHVwZGF0ZWQgYWZ0ZXIgdGhpcy4uLgorICAgIHJldHVybiB1cGRhdGVGb3JlZ3JvdW5kUHJv
Y2Vzc0luZm8oKSAmJiAocHJvY2Vzc0lkKCkgIT0gX2ZvcmVncm91bmRQaWQpOworfQorCitRU3Ry
aW5nIFNlc3Npb246OmNoaWxkTmFtZSgpCit7CisgICAgUVN0cmluZyBuYW1lOworCisgICAgaWYg
KHVwZGF0ZUZvcmVncm91bmRQcm9jZXNzSW5mbygpKSAKKyAgICB7CisJYm9vbCBvayA9IGZhbHNl
OworCW5hbWUgPSBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvLT5uYW1lKCZvayk7CisJaWYgKCFvaykK
KwkgICAgbmFtZS5jbGVhcigpOworICAgIH0KKworICAgIHJldHVybiBuYW1lOworfQorCit2b2lk
IFNlc3Npb246OnNhdmVTZXNzaW9uKEtDb25maWdHcm91cCYgZ3JvdXApCit7CisgICAgZ3JvdXAu
d3JpdGVQYXRoRW50cnkoIldvcmtpbmdEaXIiLCBjdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpKTsK
KyAgICBncm91cC53cml0ZUVudHJ5KCJMb2NhbFRhYiIsICAgICAgIHRhYlRpdGxlRm9ybWF0KExv
Y2FsVGFiVGl0bGUpKTsKKyAgICBncm91cC53cml0ZUVudHJ5KCJSZW1vdGVUYWIiLCAgICAgIHRh
YlRpdGxlRm9ybWF0KFJlbW90ZVRhYlRpdGxlKSk7Cit9CisKK3ZvaWQgU2Vzc2lvbjo6cmVzdG9y
ZVNlc3Npb24oS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBRU3RyaW5nIHM7CisKKyAgICBz
ID0gZ3JvdXAucmVhZFBhdGhFbnRyeSgiV29ya2luZ0RpciIsIFFTdHJpbmcoKSk7CisgICAgaWYg
KCFzLmlzRW1wdHkoKSkgc2V0SW5pdGlhbFdvcmtpbmdEaXJlY3Rvcnkocyk7CisgICAgcyA9IGdy
b3VwLnJlYWRFbnRyeSgiTG9jYWxUYWIiKTsKKyAgICBpZiAoIXMuaXNFbXB0eSgpKSBzZXRUYWJU
aXRsZUZvcm1hdChMb2NhbFRhYlRpdGxlLCBzKTsKKyAgICBzID0gZ3JvdXAucmVhZEVudHJ5KCJS
ZW1vdGVUYWIiKTsKKyAgICBpZiAoIXMuaXNFbXB0eSgpKSBzZXRUYWJUaXRsZUZvcm1hdChSZW1v
dGVUYWJUaXRsZSwgcyk7Cit9CisKIFNlc3Npb25Hcm91cDo6U2Vzc2lvbkdyb3VwKFFPYmplY3Qq
IHBhcmVudCkKICAgICA6IFFPYmplY3QocGFyZW50KSwgX21hc3Rlck1vZGUoMCkKIHsKZGlmZiAt
LWdpdCBhL3NyYy9TZXNzaW9uLmggYi9zcmMvU2Vzc2lvbi5oCmluZGV4IDJhMDkyMjIuLjFkNDNh
ZGMgMTAwNjQ0Ci0tLSBhL3NyYy9TZXNzaW9uLmgKKysrIGIvc3JjL1Nlc3Npb24uaApAQCAtMzYs
MTIgKzM2LDE0IEBACiAjaW5jbHVkZSAiSGlzdG9yeS5oIgogCiBjbGFzcyBLUHJvY2VzczsKK2Ns
YXNzIEtVcmw7CiAKIG5hbWVzcGFjZSBLb25zb2xlCiB7CiAKIGNsYXNzIEVtdWxhdGlvbjsKIGNs
YXNzIFB0eTsKK2NsYXNzIFByb2Nlc3NJbmZvOwogY2xhc3MgVGVybWluYWxEaXNwbGF5OwogY2xh
c3MgWk1vZGVtRGlhbG9nOwogCkBAIC0yMDEsNiArMjAzLDExIEBAIHB1YmxpYzoKICAgdm9pZCBz
ZXRJbml0aWFsV29ya2luZ0RpcmVjdG9yeSggY29uc3QgUVN0cmluZyYgZGlyICk7CiAKICAgLyoq
CisgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9mIHRoZSBmb3JlZ3JvdW5kIHBy
b2Nlc3MgaW4gdGhlIHNlc3Npb24KKyAgICovCisgIFFTdHJpbmcgY3VycmVudFdvcmtpbmdEaXJl
Y3RvcnkoKTsKKworICAvKioKICAgICogU2V0cyB0aGUgdHlwZSBvZiBoaXN0b3J5IHN0b3JlIHVz
ZWQgYnkgdGhpcyBzZXNzaW9uLgogICAgKiBMaW5lcyBvZiBvdXRwdXQgcHJvZHVjZWQgYnkgdGhl
IHRlcm1pbmFsIGFyZSBhZGRlZAogICAgKiB0byB0aGUgaGlzdG9yeSBzdG9yZS4gIFRoZSB0eXBl
IG9mIGhpc3Rvcnkgc3RvcmUKQEAgLTI3NCwxMiArMjgxLDE3IEBAIHB1YmxpYzoKICAgUVN0cmlu
ZyB0aXRsZShUaXRsZVJvbGUgcm9sZSkgY29uc3Q7CiAgIC8qKiBDb252ZW5pZW5jZSBtZXRob2Qg
dXNlZCB0byByZWFkIHRoZSBuYW1lIHByb3BlcnR5LiAgUmV0dXJucyB0aXRsZShTZXNzaW9uOjpO
YW1lUm9sZSkuICovCiAgIFFTdHJpbmcgbmFtZVRpdGxlKCkgY29uc3QgeyByZXR1cm4gdGl0bGUo
U2Vzc2lvbjo6TmFtZVJvbGUpOyB9CisgIC8qKiBSZXR1cm5zIGEgdGl0bGUgZ2VuZXJhdGVkIGZy
b20gdGFiIGZvcm1hdCBhbmQgcHJvY2VzcyBpbmZvcm1hdGlvbi4gKi8KKyAgUVN0cmluZyBnZXRE
eW5hbWljVGl0bGUoKTsKIAogICAvKiogU2V0cyB0aGUgbmFtZSBvZiB0aGUgaWNvbiBhc3NvY2lh
dGVkIHdpdGggdGhpcyBzZXNzaW9uLiAqLwogICB2b2lkIHNldEljb25OYW1lKGNvbnN0IFFTdHJp
bmcmIGljb25OYW1lKTsKICAgLyoqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGljb24gYXNzb2Np
YXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4gKi8KICAgUVN0cmluZyBpY29uTmFtZSgpIGNvbnN0Owog
CisgIC8qKiBSZXR1cm4gVVJMIGZvciB0aGUgc2Vzc2lvbi4gKi8KKyAgS1VybCBnZXRVcmwoKTsK
KwogICAvKiogU2V0cyB0aGUgdGV4dCBvZiB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBz
ZXNzaW9uLiAqLwogICB2b2lkIHNldEljb25UZXh0KGNvbnN0IFFTdHJpbmcmIGljb25UZXh0KTsK
ICAgLyoqIFJldHVybnMgdGhlIHRleHQgb2YgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMg
c2Vzc2lvbi4gKi8KQEAgLTMxNywxMiArMzI5LDExIEBAIHB1YmxpYzoKICAgICovCiAgIGludCBw
cm9jZXNzSWQoKSBjb25zdDsKIAotICAvKioKLSAgICogUmV0dXJucyB0aGUgcHJvY2VzcyBpZCBv
ZiB0aGUgdGVybWluYWwncyBmb3JlZ3JvdW5kIHByb2Nlc3MuCi0gICAqIFRoaXMgaXMgaW5pdGlh
bGx5IHRoZSBzYW1lIGFzIHByb2Nlc3NJZCgpIGJ1dCBjYW4gY2hhbmdlCi0gICAqIGFzIHRoZSB1
c2VyIHN0YXJ0cyBvdGhlciBwcm9ncmFtcyBpbnNpZGUgdGhlIHRlcm1pbmFsLgotICAgKi8KLSAg
aW50IGZvcmVncm91bmRQcm9jZXNzSWQoKSBjb25zdDsKKyAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdXNlciBoYXMgc3RhcnRlZCBhIHByb2dyYW0gaW4gdGhlIHNlc3Npb24uICovCisgIGJvb2wg
aXNDaGlsZEFjdGl2ZSgpOworCisgIC8qKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50
IGZvcmVncm91bmQgcHJvY2Vzcy4gKi8KKyAgUVN0cmluZyBjaGlsZE5hbWUoKTsKIAogICAvKiog
UmV0dXJucyB0aGUgdGVybWluYWwgc2Vzc2lvbidzIHdpbmRvdyBzaXplIGluIGxpbmVzIGFuZCBj
b2x1bW5zLiAqLwogICBRU2l6ZSBzaXplKCk7CkBAIC0zNzgsNiArMzg5LDEwIEBAIHB1YmxpYzoK
IAlQcm9maWxlQ2hhbmdlCQkJPSA1MCAJLy8gdGhpcyBjbGFzaGVzIHdpdGggWHRlcm0ncyBmb250
IGNoYW5nZSBjb21tYW5kCiAgIH07CiAKKyAgLy8gc2Vzc2lvbiBtYW5hZ2VtZW50CisgIHZvaWQg
c2F2ZVNlc3Npb24oS0NvbmZpZ0dyb3VwJiBncm91cCk7CisgIHZvaWQgcmVzdG9yZVNlc3Npb24o
S0NvbmZpZ0dyb3VwJiBncm91cCk7CisKIHB1YmxpYyBzbG90czoKIAogICAvKioKQEAgLTUxNSw2
ICs1MzAsMTAgQEAgcHJpdmF0ZToKICAgLy8gY2hlY2tzIHRoYXQgdGhlIGJpbmFyeSAncHJvZ3Jh
bScgaXMgYXZhaWxhYmxlIGFuZCBjYW4gYmUgZXhlY3V0ZWQKICAgLy8gcmV0dXJucyB0aGUgYmlu
YXJ5IG5hbWUgaWYgYXZhaWxhYmxlIG9yIGFuIGVtcHR5IHN0cmluZyBvdGhlcndpc2UKICAgUVN0
cmluZyBjaGVja1Byb2dyYW0oY29uc3QgUVN0cmluZyYgcHJvZ3JhbSkgY29uc3Q7CisgIFByb2Nl
c3NJbmZvKiBnZXRQcm9jZXNzSW5mbygpOworICB2b2lkIHVwZGF0ZVNlc3Npb25Qcm9jZXNzSW5m
bygpOworICBib29sIHVwZGF0ZUZvcmVncm91bmRQcm9jZXNzSW5mbygpOworICBQcm9jZXNzSW5m
byogdXBkYXRlV29ya2luZ0RpcmVjdG9yeSgpOwogCiAgIGludCAgICAgICAgICAgIF91bmlxdWVJ
ZGVudGlmaWVyOwogCkBAIC01NTMsNiArNTcyLDExIEBAIHByaXZhdGU6CiAgIGludCAgICAgICAg
ICAgIF9zZXNzaW9uSWQ7CiAKICAgUVN0cmluZyAgICAgICAgX2luaXRpYWxXb3JraW5nRGlyOwor
ICBRU3RyaW5nICAgICAgICBfY3VycmVudFdvcmtpbmdEaXI7CisKKyAgUHJvY2Vzc0luZm8qICAg
X3Nlc3Npb25Qcm9jZXNzSW5mbzsKKyAgUHJvY2Vzc0luZm8qICAgX2ZvcmVncm91bmRQcm9jZXNz
SW5mbzsKKyAgaW50ICAgICAgICAgICAgX2ZvcmVncm91bmRQaWQ7CiAKICAgLy8gWk1vZGVtCiAg
IGJvb2wgICAgICAgICAgIF96bW9kZW1CdXN5OwpkaWZmIC0tZ2l0IGEvc3JjL1Nlc3Npb25Db250
cm9sbGVyLmNwcCBiL3NyYy9TZXNzaW9uQ29udHJvbGxlci5jcHAKaW5kZXggYzM3YWY3YS4uNTYx
MWFmNCAxMDA2NDQKLS0tIGEvc3JjL1Nlc3Npb25Db250cm9sbGVyLmNwcAorKysgYi9zcmMvU2Vz
c2lvbkNvbnRyb2xsZXIuY3BwCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSAiSW5jcmVtZW50
YWxTZWFyY2hCYXIuaCIKICNpbmNsdWRlICJTY3JlZW5XaW5kb3cuaCIKICNpbmNsdWRlICJTZXNz
aW9uLmgiCi0jaW5jbHVkZSAiUHJvY2Vzc0luZm8uaCIKICNpbmNsdWRlICJQcm9maWxlTGlzdC5o
IgogI2luY2x1ZGUgIlRlcm1pbmFsRGlzcGxheS5oIgogI2luY2x1ZGUgIlNlc3Npb25NYW5hZ2Vy
LmgiCkBAIC0xOTksNDcgKzE5OCwxMiBAQCB2b2lkIFNlc3Npb25Db250cm9sbGVyOjpzbmFwc2hv
dCgpCiB7CiAgICAgUV9BU1NFUlQoIF9zZXNzaW9uICE9IDAgKTsKIAotICAgIFByb2Nlc3NJbmZv
KiBwcm9jZXNzID0gMDsKLSAgICBQcm9jZXNzSW5mbyogc25hcHNob3QgPSBQcm9jZXNzSW5mbzo6
bmV3SW5zdGFuY2UoX3Nlc3Npb24tPnByb2Nlc3NJZCgpKTsKLSAgICBzbmFwc2hvdC0+dXBkYXRl
KCk7CisgICAgUVN0cmluZyB0aXRsZSA9IF9zZXNzaW9uLT5nZXREeW5hbWljVGl0bGUoKTsgICAg
CisgICAgdGl0bGUgICAgICAgICA9IHRpdGxlLnNpbXBsaWZpZWQoKTsKIAotICAgIC8vIHVzZSBm
b3JlZ3JvdW5kIHByb2Nlc3MgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlCi0gICAgLy8gZmFsbGJh
Y2sgdG8gc2Vzc2lvbiBwcm9jZXNzIG90aGVyd2lzZQotICAgIGludCBwaWQgPSBfc2Vzc2lvbi0+
Zm9yZWdyb3VuZFByb2Nlc3NJZCgpOyAvL3NuYXBzaG90LT5mb3JlZ3JvdW5kUGlkKCZvayk7Ci0g
ICAgaWYgKCBwaWQgIT0gMCApCi0gICAgewotICAgICAgIHByb2Nlc3MgPSBQcm9jZXNzSW5mbzo6
bmV3SW5zdGFuY2UocGlkKTsKLSAgICAgICBwcm9jZXNzLT51cGRhdGUoKTsKLSAgICB9Ci0gICAg
ZWxzZQotICAgICAgIHByb2Nlc3MgPSBzbmFwc2hvdDsKLQotICAgIGJvb2wgb2sgPSBmYWxzZTsK
LQotICAgIC8vIGZvcm1hdCB0YWIgdGl0bGVzIHVzaW5nIHByb2Nlc3MgaW5mbwotICAgIFFTdHJp
bmcgdGl0bGU7Ci0gICAgaWYgKCBwcm9jZXNzLT5uYW1lKCZvaykgPT0gInNzaCIgJiYgb2sgKQot
ICAgIHsKLSAgICAgICAgU1NIUHJvY2Vzc0luZm8gc3NoSW5mbygqcHJvY2Vzcyk7Ci0gICAgICAg
IHRpdGxlID0gc3NoSW5mby5mb3JtYXQoX3Nlc3Npb24tPnRhYlRpdGxlRm9ybWF0KFNlc3Npb246
OlJlbW90ZVRhYlRpdGxlKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgdGl0bGUgPSBwcm9j
ZXNzLT5mb3JtYXQoX3Nlc3Npb24tPnRhYlRpdGxlRm9ybWF0KFNlc3Npb246OkxvY2FsVGFiVGl0
bGUpICkgOwotCi0KLSAgICBpZiAoIHNuYXBzaG90ICE9IHByb2Nlc3MgKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlIHNuYXBzaG90OwotICAgICAgICBkZWxldGUgcHJvY2VzczsKLSAgICB9Ci0gICAg
ZWxzZQotICAgICAgICBkZWxldGUgc25hcHNob3Q7Ci0KLQl0aXRsZSA9IHRpdGxlLnNpbXBsaWZp
ZWQoKTsKLQotCS8vIGNydWRlIGluZGljYXRvciB3aGVuIHRoZSBzZXNzaW9uIGlzIGJyb2FkY2Fz
dGluZyB0byBvdGhlcnMKLQlpZiAoX2NvcHlUb0dyb3VwICYmIF9jb3B5VG9Hcm91cC0+c2Vzc2lv
bnMoKS5jb3VudCgpID4gMSkKLQkJdGl0bGUuYXBwZW5kKCcqJyk7CisgICAgLy8gY3J1ZGUgaW5k
aWNhdG9yIHdoZW4gdGhlIHNlc3Npb24gaXMgYnJvYWRjYXN0aW5nIHRvIG90aGVycworICAgIGlm
IChfY29weVRvR3JvdXAgJiYgX2NvcHlUb0dyb3VwLT5zZXNzaW9ucygpLmNvdW50KCkgPiAxKQor
ICAgICAgICB0aXRsZS5hcHBlbmQoJyonKTsKIAogICAgIC8vIGFwcGx5IG5ldyB0aXRsZQogICAg
IGlmICggIXRpdGxlLmlzRW1wdHkoKSApCkBAIC0yNTAsNjkgKzIxNCwxNyBAQCB2b2lkIFNlc3Np
b25Db250cm9sbGVyOjpzbmFwc2hvdCgpCiAKIFFTdHJpbmcgU2Vzc2lvbkNvbnRyb2xsZXI6OmN1
cnJlbnREaXIoKSBjb25zdAogewotICAgIFByb2Nlc3NJbmZvKiBpbmZvID0gUHJvY2Vzc0luZm86
Om5ld0luc3RhbmNlKF9zZXNzaW9uLT5wcm9jZXNzSWQoKSk7Ci0gICAgaW5mby0+dXBkYXRlKCk7
Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgUVN0cmluZyBwYXRoID0gaW5mby0+Y3VycmVu
dERpcigmb2spOwotCi0gICAgZGVsZXRlIGluZm87Ci0KLSAgICBpZiAoIG9rICkKLSAgICAgICAg
cmV0dXJuIHBhdGg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIHJl
dHVybiBfc2Vzc2lvbi0+Y3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKIH0KIAogS1VybCBTZXNz
aW9uQ29udHJvbGxlcjo6dXJsKCkgY29uc3QKIHsKLSAgICBQcm9jZXNzSW5mbyogaW5mbyA9IFBy
b2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShfc2Vzc2lvbi0+cHJvY2Vzc0lkKCkpOwotICAgIGluZm8t
PnVwZGF0ZSgpOwotCi0gICAgUVN0cmluZyBwYXRoOwotICAgIGlmICggaW5mby0+aXNWYWxpZCgp
ICkKLSAgICB7Ci0gICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLQotICAgICAgICAvLyBjaGVjayBp
ZiBmb3JlZ3JvdW5kIHByb2Nlc3MgaXMgYm9va21hcmstYWJsZQotICAgICAgICBpbnQgcGlkID0g
X3Nlc3Npb24tPmZvcmVncm91bmRQcm9jZXNzSWQoKTsKLSAgICAgICAgaWYgKCBwaWQgIT0gMCAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFByb2Nlc3NJbmZvKiBmb3JlZ3JvdW5kSW5mbyA9IFBy
b2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShwaWQpOwotICAgICAgICAgICAgZm9yZWdyb3VuZEluZm8t
PnVwZGF0ZSgpOwotCi0gICAgICAgICAgICAvLyBmb3IgcmVtb3RlIGNvbm5lY3Rpb25zLCBzYXZl
IHRoZSB1c2VyIGFuZCBob3N0Ci0gICAgICAgICAgICAvLyBicmlnaHQgaWRlYXMgdG8gZ2V0IHRo
ZSBkaXJlY3RvcnkgYXQgdGhlIG90aGVyIGVuZCBhcmUgd2VsY29tZSA6KQotICAgICAgICAgICAg
aWYgKCBmb3JlZ3JvdW5kSW5mby0+bmFtZSgmb2spID09ICJzc2giICYmIG9rICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBTU0hQcm9jZXNzSW5mbyBzc2hJbmZvKCpmb3JlZ3JvdW5k
SW5mbyk7Ci0gICAgICAgICAgICAgICAgcGF0aCA9ICJzc2g6Ly8iICsgc3NoSW5mby51c2VyTmFt
ZSgpICsgJ0AnICsgc3NoSW5mby5ob3N0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IGZvcmVncm91bmRJbmZv
LT5jdXJyZW50RGlyKCZvayk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAg
ICAgICAgICAgICBwYXRoLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRl
bGV0ZSBmb3JlZ3JvdW5kSW5mbzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIC8vIG90aGVyd2lz
ZSB1c2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIHNoZWxsIHByb2Nlc3MK
LSAgICAgICAgewotICAgICAgICAgICAgcGF0aCA9IGluZm8tPmN1cnJlbnREaXIoJm9rKTsKLSAg
ICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAgICAgICAgcGF0aC5jbGVhcigpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZGVsZXRlIGluZm87Ci0gICAgcmV0dXJuIEtVcmwoIHBhdGggKTsK
KyAgICByZXR1cm4gX3Nlc3Npb24tPmdldFVybCgpOwogfQogCiB2b2lkIFNlc3Npb25Db250cm9s
bGVyOjpyZW5hbWUoKQogewotCXJlbmFtZVNlc3Npb24oKTsKKyAgICByZW5hbWVTZXNzaW9uKCk7
CiB9CiAKIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6Om9wZW5VcmwoIGNvbnN0IEtVcmwmIHVybCAp
CkBAIC01ODAsMTEgKzQ5Miw2IEBAIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OnNldHVwQWN0aW9u
cygpCiAgICAgX2NoYW5nZVByb2ZpbGVNZW51ID0gbmV3IEtNZW51KGkxOG4oIkNoYW5nZSBQcm9m
aWxlIiksX3ZpZXcpOwogICAgIGNvbGxlY3Rpb24tPmFkZEFjdGlvbigiY2hhbmdlLXByb2ZpbGUi
LF9jaGFuZ2VQcm9maWxlTWVudS0+bWVudUFjdGlvbigpKTsKICAgICBjb25uZWN0KCBfY2hhbmdl
UHJvZmlsZU1lbnUgLCBTSUdOQUwoYWJvdXRUb1Nob3coKSkgLCB0aGlzICwgU0xPVChwcmVwYXJl
Q2hhbmdlUHJvZmlsZU1lbnUoKSkgKTsKLQotICAgIC8vIGRlYnVnZ2luZyB0b29scwotICAgIC8v
YWN0aW9uID0gY29sbGVjdGlvbi0+YWRkQWN0aW9uKCJkZWJ1Zy1wcm9jZXNzIik7Ci0gICAgLy9h
Y3Rpb24tPnNldFRleHQoICJHZXQgRm9yZWdyb3VuZCBQcm9jZXNzIiApOwotICAgIC8vY29ubmVj
dCggYWN0aW9uICwgU0lHTkFMKHRyaWdnZXJlZCgpKSAsIHRoaXMgLCBTTE9UKGRlYnVnUHJvY2Vz
cygpKSApOwogfQogdm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6Y2hhbmdlUHJvZmlsZShQcm9maWxl
OjpQdHIgcHJvZmlsZSkKIHsKQEAgLTYxMCw0MCArNTE3LDYgQEAgdm9pZCBTZXNzaW9uQ29udHJv
bGxlcjo6Y2hhbmdlQ29kZWMoUVRleHRDb2RlYyogY29kZWMpCiB7CiAgICAgX3Nlc3Npb24tPnNl
dENvZGVjKGNvZGVjKTsKIH0KLXZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OmRlYnVnUHJvY2Vzcygp
Ci17Ci0gICAgLy8gdGVzdGluZyBmYWNpbGl0eSB0byByZXRyaWV2ZSBwcm9jZXNzIGluZm9ybWF0
aW9uIGFib3V0Ci0gICAgLy8gY3VycmVudGx5IGFjdGl2ZSBwcm9jZXNzIGluIHRoZSBzaGVsbAot
ICAgIFByb2Nlc3NJbmZvKiBzZXNzaW9uUHJvY2VzcyA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0YW5j
ZShfc2Vzc2lvbi0+cHJvY2Vzc0lkKCkpOwotICAgIHNlc3Npb25Qcm9jZXNzLT51cGRhdGUoKTsK
LQotICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICBpbnQgZnBpZCA9IHNlc3Npb25Qcm9jZXNzLT5m
b3JlZ3JvdW5kUGlkKCZvayk7Ci0KLSAgICBpZiAoIG9rICkKLSAgICB7Ci0gICAgICAgIFByb2Nl
c3NJbmZvKiBmcCA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShmcGlkKTsKLSAgICAgICAgZnAt
PnVwZGF0ZSgpOwotCi0gICAgICAgIFFTdHJpbmcgbmFtZSA9IGZwLT5uYW1lKCZvayk7Ci0KLSAg
ICAgICAgaWYgKCBvayApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9zZXNzaW9uLT5zZXRUaXRs
ZShTZXNzaW9uOjpEaXNwbGF5ZWRUaXRsZVJvbGUsbmFtZSk7Ci0gICAgICAgICAgICBzZXNzaW9u
VGl0bGVDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBRU3RyaW5nIGN1cnJlbnREaXIg
PSBmcC0+Y3VycmVudERpcigmb2spOwotCi0gICAgICAgIGlmICggb2sgKQotICAgICAgICAgICAg
a0RlYnVnKDEyMTEpIDw8IGN1cnJlbnREaXI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtE
ZWJ1ZygxMjExKSA8PCAiY291bGQgbm90IHJlYWQgY3VycmVudCBkaXIgb2YgZm9yZWdyb3VuZCBw
cm9jZXNzIjsKLQotICAgICAgICBkZWxldGUgZnA7Ci0gICAgfQotICAgIGRlbGV0ZSBzZXNzaW9u
UHJvY2VzczsKLX0KIAogdm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6ZWRpdEN1cnJlbnRQcm9maWxl
KCkKIHsKQEAgLTY4NywxMyArNTYwLDkgQEAgdm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6c2F2ZVNl
c3Npb24oKQogfQogYm9vbCBTZXNzaW9uQ29udHJvbGxlcjo6Y29uZmlybUNsb3NlKCkgY29uc3QK
IHsKLSAgICBpZiAoX3Nlc3Npb24tPmZvcmVncm91bmRQcm9jZXNzSWQoKSAhPSBfc2Vzc2lvbi0+
cHJvY2Vzc0lkKCkpCisgICAgaWYgKF9zZXNzaW9uLT5pc0NoaWxkQWN0aXZlKCkpCiAgICAgewot
ICAgICAgICBQcm9jZXNzSW5mbyogZm9yZWdyb3VuZEluZm8gPSBQcm9jZXNzSW5mbzo6bmV3SW5z
dGFuY2UoX3Nlc3Npb24tPmZvcmVncm91bmRQcm9jZXNzSWQoKSk7Ci0gICAgICAgIGZvcmVncm91
bmRJbmZvLT51cGRhdGUoKTsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBRU3Ry
aW5nIHRpdGxlID0gZm9yZWdyb3VuZEluZm8tPm5hbWUoJm9rKTsKLSAgICAgICAgZGVsZXRlIGZv
cmVncm91bmRJbmZvOworICAgICAgICBRU3RyaW5nIHRpdGxlID0gX3Nlc3Npb24tPmNoaWxkTmFt
ZSgpOwogICAgICAgCiAgICAgICAgIC8vIGhhcmQgY29kZWQgZm9yIG5vdy4gIEluIGZ1dHVyZSBt
YWtlIGl0IHBvc3NpYmxlIGZvciB0aGUgdXNlciB0byBzcGVjaWZ5IHdoaWNoIHByb2dyYW1zCiAg
ICAgICAgIC8vIGFyZSBpZ25vcmVkIHdoZW4gY29uc2lkZXJpbmcgd2hldGhlciB0byBkaXNwbGF5
IGEgY29uZmlybWF0aW9uCkBAIC03MDMsMTIgKzU3MiwxMiBAQCBib29sIFNlc3Npb25Db250cm9s
bGVyOjpjb25maXJtQ2xvc2UoKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAgICAgUVN0cmluZyBxdWVzdGlvbjsKLSAgICAgICAgaWYgKG9rKQotICAgICAgICAgICAgcXVl
c3Rpb24gPSBpMThuKCJUaGUgcHJvZ3JhbSAnJTEnIGlzIGN1cnJlbnRseSBydW5uaW5nIGluIHRo
aXMgc2Vzc2lvbi4iICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBBcmUgeW91IHN1
cmUgeW91IHdhbnQgdG8gY2xvc2UgaXQ/Iix0aXRsZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
aWYgKHRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHF1ZXN0aW9uID0gaTE4bigiQSBwcm9n
cmFtIGlzIGN1cnJlbnRseSBydW5uaW5nIGluIHRoaXMgc2Vzc2lvbi4iCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIGl0PyIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBxdWVzdGlvbiA9IGkxOG4oIlRoZSBwcm9ncmFtICcl
MScgaXMgY3VycmVudGx5IHJ1bm5pbmcgaW4gdGhpcyBzZXNzaW9uLiIgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9zZSBpdD8iLHRp
dGxlKTsKIAogICAgICAgICBpbnQgcmVzdWx0ID0gS01lc3NhZ2VCb3g6Ondhcm5pbmdZZXNObyhf
dmlldy0+d2luZG93KCkscXVlc3Rpb24saTE4bigiQ29uZmlybSBDbG9zZSIpKTsKICAgICAgICAg
cmV0dXJuIChyZXN1bHQgPT0gS01lc3NhZ2VCb3g6OlllcykgPyB0cnVlIDogZmFsc2U7IApkaWZm
IC0tZ2l0IGEvc3JjL1Nlc3Npb25Db250cm9sbGVyLmggYi9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIu
aAppbmRleCAyM2U0YmNjLi5jZjhiYTRlIDEwMDY0NAotLS0gYS9zcmMvU2Vzc2lvbkNvbnRyb2xs
ZXIuaAorKysgYi9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuaApAQCAtMjA1LDEzICsyMDUsMTAgQEAg
cHJpdmF0ZSBzbG90czoKICAgICB2b2lkIHNlc3Npb25SZXNpemVSZXF1ZXN0KGNvbnN0IFFTaXpl
JiBzaXplKTsKIAogICAgIHZvaWQgdHJhY2tPdXRwdXQoUUtleUV2ZW50KiBldmVudCk7ICAvLyBt
b3ZlIHZpZXcgdG8gZW5kIG9mIGN1cnJlbnQgb3V0cHV0Ci0JCQkJCQkJCQkJIC8vIHdoZW4gYSBr
ZXkgcHJlc3Mgb2NjdXJzIGluIHRoZSAKLQkJCQkJCQkJCQkgLy8gZGlzcGxheSBhcmVhCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gYSBrZXkgcHJlc3Mg
b2NjdXJzIGluIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZGlzcGxheSBhcmVhCiAKLQl2b2lkIHVwZGF0ZVNlYXJjaEZpbHRlcigpOwotCi0gICAgLy8g
ZGVidWdnaW5nIHNsb3RzCi0gICAgdm9pZCBkZWJ1Z1Byb2Nlc3MoKTsKKyAgICB2b2lkIHVwZGF0
ZVNlYXJjaEZpbHRlcigpOwogCiBwcml2YXRlOgogICAgIC8vIGJlZ2lucyB0aGUgc2VhcmNoCmRp
ZmYgLS1naXQgYS9zcmMvU2Vzc2lvbk1hbmFnZXIuY3BwIGIvc3JjL1Nlc3Npb25NYW5hZ2VyLmNw
cAppbmRleCBiYmNjZTc2Li5jMmFhMGUzIDEwMDY0NAotLS0gYS9zcmMvU2Vzc2lvbk1hbmFnZXIu
Y3BwCisrKyBiL3NyYy9TZXNzaW9uTWFuYWdlci5jcHAKQEAgLTczMCw2ICs3MzAsNjkgQEAgUUtl
eVNlcXVlbmNlIFNlc3Npb25NYW5hZ2VyOjpzaG9ydGN1dChQcm9maWxlOjpQdHIgaW5mbykgY29u
c3QKICAgICByZXR1cm4gUUtleVNlcXVlbmNlKCk7CiB9CiAKK3ZvaWQgU2Vzc2lvbk1hbmFnZXI6
OnNhdmVTZXNzaW9ucyhLQ29uZmlnKiBjb25maWcpCit7CisJLy8gVGhlIHNlc3Npb24gSURzIGNh
bid0IGJlIHJlc3RvcmVkLgorCS8vIFNvIHdlIG5lZWQgdG8gbWFwIHRoZSBvbGQgSUQgdG8gdGhl
IGZ1dHVyZSBuZXcgSUQuCisJaW50IG4gPSAxOworCV9yZXN0b3JlTWFwcGluZy5jbGVhcigpOwor
CisJZm9yZWFjaChTZXNzaW9uKiBzZXNzaW9uLCBfc2Vzc2lvbnMpCisJeworCQlRU3RyaW5nIHMg
PSBRTGF0aW4xU3RyaW5nKCJTZXNzaW9uIikgKyBRU3RyaW5nOjpudW1iZXIobik7CisJCUtDb25m
aWdHcm91cCBncm91cChjb25maWcsIHMpOworCisJCWdyb3VwLndyaXRlUGF0aEVudHJ5KCJQcm9m
aWxlIiwKKwkJCQkgICAgIF9zZXNzaW9uUHJvZmlsZXMudmFsdWUoc2Vzc2lvbiktPnBhdGgoKSk7
CisJCXNlc3Npb24tPnNhdmVTZXNzaW9uKGdyb3VwKTsKKwkJX3Jlc3RvcmVNYXBwaW5nLmluc2Vy
dChzZXNzaW9uLCBuKTsKKwkJbisrOworCX0KKworCUtDb25maWdHcm91cCBncm91cChjb25maWcs
ICJOdW1iZXIiKTsKKwlncm91cC53cml0ZUVudHJ5KCJOdW1iZXJPZlNlc3Npb25zIiwgX3Nlc3Np
b25zLmNvdW50KCkpOworfQorCitpbnQgU2Vzc2lvbk1hbmFnZXI6OmdldFJlc3RvcmVJZChTZXNz
aW9uKiBzZXNzaW9uKQoreworCXJldHVybiBfcmVzdG9yZU1hcHBpbmcudmFsdWUoc2Vzc2lvbik7
Cit9CisKK3ZvaWQgU2Vzc2lvbk1hbmFnZXI6OnJlc3RvcmVTZXNzaW9ucyhLQ29uZmlnKiBjb25m
aWcpCit7CisJS0NvbmZpZ0dyb3VwIGdyb3VwKGNvbmZpZywgIk51bWJlciIpOworCWludCBzZXNz
aW9uczsKKworCS8vIEFueSBzZXNzaW9ucyBzYXZlZD8KKwlpZiAoKHNlc3Npb25zID0gZ3JvdXAu
cmVhZEVudHJ5KCJOdW1iZXJPZlNlc3Npb25zIiwgMCkpID4gMCkKKwl7CisJCWZvciAoaW50IG4g
PSAxOyBuIDw9IHNlc3Npb25zOyBuKyspCisJCXsKKwkJCVFTdHJpbmcgcyA9IFFMYXRpbjFTdHJp
bmcoIlNlc3Npb24iKSArIFFTdHJpbmc6Om51bWJlcihuKTsKKwkJCUtDb25maWdHcm91cCBjZyhj
b25maWcsIHMpOworCisJCQlRU3RyaW5nIHByb2ZpbGUgPSBjZy5yZWFkUGF0aEVudHJ5KCJQcm9m
aWxlIiwgUVN0cmluZygpKTsKKwkJCVByb2ZpbGU6OlB0ciBwcCA9IGRlZmF1bHRQcm9maWxlKCk7
CisJCQlpZiAoIXByb2ZpbGUuaXNFbXB0eSgpKSBwcCA9IGxvYWRQcm9maWxlKHByb2ZpbGUpOwor
CisJCQlTZXNzaW9uKiBzZXNzaW9uID0gY3JlYXRlU2Vzc2lvbihwcCk7CisJCQlzZXNzaW9uLT5y
ZXN0b3JlU2Vzc2lvbihjZyk7CisJCX0KKwl9Cit9CisKK1Nlc3Npb24qIFNlc3Npb25NYW5hZ2Vy
OjppZFRvU2Vzc2lvbihpbnQgaWQpCit7CisJUV9BU1NFUlQoaWQpOyAKKwlmb3JlYWNoKFNlc3Np
b24qIHNlc3Npb24sIF9zZXNzaW9ucykKKwkJaWYgKHNlc3Npb24tPnNlc3Npb25JZCgpID09IGlk
KQorCQkJcmV0dXJuIHNlc3Npb247CisKKwkvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuCisJUV9B
U1NFUlQoaWQgPT0gMCk7CisJcmV0dXJuIDA7Cit9CisKIEtfR0xPQkFMX1NUQVRJQyggU2Vzc2lv
bk1hbmFnZXIgLCB0aGVTZXNzaW9uTWFuYWdlciApCiBTZXNzaW9uTWFuYWdlciogU2Vzc2lvbk1h
bmFnZXI6Omluc3RhbmNlKCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9TZXNzaW9uTWFuYWdlci5oIGIv
c3JjL1Nlc3Npb25NYW5hZ2VyLmgKaW5kZXggOTkwNDUwZC4uZjhiYmQ1NiAxMDA2NDQKLS0tIGEv
c3JjL1Nlc3Npb25NYW5hZ2VyLmgKKysrIGIvc3JjL1Nlc3Npb25NYW5hZ2VyLmgKQEAgLTI0Myw2
ICsyNDMsMTIgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBTZXNzaW9uTWFuYWdlciog
aW5zdGFuY2UoKTsKIAorICAgIC8vIHNlc3Npb24gbWFuYWdlbWVudAorICAgIHZvaWQgc2F2ZVNl
c3Npb25zKEtDb25maWcqIGNvbmZpZyk7CisgICAgaW50ICBnZXRSZXN0b3JlSWQoU2Vzc2lvbiog
c2Vzc2lvbik7CisgICAgdm9pZCByZXN0b3JlU2Vzc2lvbnMoS0NvbmZpZyogY29uZmlnKTsKKyAg
ICBTZXNzaW9uICppZFRvU2Vzc2lvbihpbnQgaWQpOworCiBzaWduYWxzOgogICAgIC8qKiBFbWl0
dGVkIHdoZW4gYSBwcm9maWxlIGlzIGFkZGVkIHRvIHRoZSBtYW5hZ2VyLiAqLwogICAgIHZvaWQg
cHJvZmlsZUFkZGVkKFByb2ZpbGU6OlB0ciBwdHIpOwpAQCAtMzE4LDYgKzMyNCw3IEBAIHByaXZh
dGU6CiAKIAlRU2V0PFByb2ZpbGU6OlB0cj4gX3R5cGVzOwogICAgIFFIYXNoPFNlc3Npb24qLFBy
b2ZpbGU6OlB0cj4gX3Nlc3Npb25Qcm9maWxlczsKKyAgICBRSGFzaDxTZXNzaW9uKixpbnQ+IF9y
ZXN0b3JlTWFwcGluZzsKIAogICAgIHN0cnVjdCBTaG9ydGN1dERhdGEKICAgICB7CmRpZmYgLS1n
aXQgYS9zcmMvVmlld01hbmFnZXIuY3BwIGIvc3JjL1ZpZXdNYW5hZ2VyLmNwcAppbmRleCAzNDlj
ODliLi5jNzU5Njc5IDEwMDY0NAotLS0gYS9zcmMvVmlld01hbmFnZXIuY3BwCisrKyBiL3NyYy9W
aWV3TWFuYWdlci5jcHAKQEAgLTgzOCw2ICs4MzgsNjYgQEAgUUxpc3Q8Vmlld1Byb3BlcnRpZXMq
PiBWaWV3TWFuYWdlcjo6dmlld1Byb3BlcnRpZXMoKSBjb25zdAogICAgIHJldHVybiBsaXN0Owog
fQogCit2b2lkIFZpZXdNYW5hZ2VyOjpzYXZlU2Vzc2lvbnMoS0NvbmZpZ0dyb3VwJiBncm91cCkK
K3sKKyAgICAvLyBmaW5kIGFsbCB1bmlxdWUgc2Vzc2lvbiByZXN0b3JlIElEcworICAgIFFMaXN0
PGludD4gaWRzOworICAgIFFIYXNoPFNlc3Npb24qLGludD4gdW5pcXVlOworCisgICAgLy8gZmly
c3Q6IHNlc3Npb25zIGluIHRoZSBhY3RpdmUgY29udGFpbmVyLCBwcmVzZXJ2aW5nIHRoZSBvcmRl
cgorICAgIFZpZXdDb250YWluZXIqIGNvbnRhaW5lciA9IF92aWV3U3BsaXR0ZXItPmFjdGl2ZUNv
bnRhaW5lcigpOworICAgIFFfQVNTRVJUKGNvbnRhaW5lcik7CisgICAgVGVybWluYWxEaXNwbGF5
KiBhY3RpdmV2aWV3ID0gZHluYW1pY19jYXN0PFRlcm1pbmFsRGlzcGxheSo+KGNvbnRhaW5lci0+
YWN0aXZlVmlldygpKTsKKworICAgIFFMaXN0SXRlcmF0b3I8UVdpZGdldCo+IHZpZXdJdGVyKGNv
bnRhaW5lci0+dmlld3MoKSk7CisgICAgaW50IHRhYiA9IDE7CisgICAgd2hpbGUgKHZpZXdJdGVy
Lmhhc05leHQoKSkKKyAgICB7CisJVGVybWluYWxEaXNwbGF5ICp2aWV3ID0gZHluYW1pY19jYXN0
PFRlcm1pbmFsRGlzcGxheSo+KHZpZXdJdGVyLm5leHQoKSk7CisJUV9BU1NFUlQodmlldyk7CisJ
U2Vzc2lvbiAqc2Vzc2lvbiA9IF9zZXNzaW9uTWFwW3ZpZXddOworCWlkcyA8PCBTZXNzaW9uTWFu
YWdlcjo6aW5zdGFuY2UoKS0+Z2V0UmVzdG9yZUlkKHNlc3Npb24pOworCWlmICh2aWV3ID09IGFj
dGl2ZXZpZXcpIGdyb3VwLndyaXRlRW50cnkoIkFjdGl2ZSIsIHRhYik7CisJdW5pcXVlLmluc2Vy
dChzZXNzaW9uLCAxKTsKKwl0YWIrKzsKKyAgICB9CisKKyAgICAvLyBzZWNvbmQ6IGFsbCBvdGhl
ciBzZXNzaW9ucywgaW4gcmFuZG9tIG9yZGVyCisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBoYXZl
IHNlc3Npb25zIHJlc3RvcmVkIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQuLi4KKyAgICBmb3JlYWNo
KFNlc3Npb24qIHNlc3Npb24sIF9zZXNzaW9uTWFwKQorCWlmICghdW5pcXVlLmNvbnRhaW5zKHNl
c3Npb24pKQorCXsKKwkgICAgaWRzIDw8IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5nZXRS
ZXN0b3JlSWQoc2Vzc2lvbik7CisJICAgIHVuaXF1ZS5pbnNlcnQoc2Vzc2lvbiwgMSk7CisJfQor
CisgICAgZ3JvdXAud3JpdGVFbnRyeSgiU2Vzc2lvbnMiLCBpZHMpOworfQorCit2b2lkIFZpZXdN
YW5hZ2VyOjpyZXN0b3JlU2Vzc2lvbnMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAg
ICBRTGlzdDxpbnQ+IGlkcyA9IGdyb3VwLnJlYWRFbnRyeSgiU2Vzc2lvbnMiLCBRTGlzdDxpbnQ+
KCkpOworICAgIGludCBhY3RpdmVUYWIgID0gZ3JvdXAucmVhZEVudHJ5KCJBY3RpdmUiLCAwKTsK
KyAgICBUZXJtaW5hbERpc3BsYXkgKmRpc3BsYXkgPSAwOworCisgICAgaW50IHRhYiA9IDE7Cisg
ICAgZm9yZWFjaChpbnQgaWQsIGlkcykKKyAgICB7CisJU2Vzc2lvbiAqc2Vzc2lvbiA9IFNlc3Np
b25NYW5hZ2VyOjppbnN0YW5jZSgpLT5pZFRvU2Vzc2lvbihpZCk7CisJY3JlYXRlVmlldyhzZXNz
aW9uKTsKKwlpZiAoIXNlc3Npb24tPmlzUnVubmluZygpKQorCSAgICBzZXNzaW9uLT5ydW4oKTsK
KwlpZiAodGFiKysgPT0gYWN0aXZlVGFiKQorCSAgICBkaXNwbGF5ID0gZHluYW1pY19jYXN0PFRl
cm1pbmFsRGlzcGxheSo+KGFjdGl2ZVZpZXcoKSk7CisgICAgfQorCisgICAgaWYgKGRpc3BsYXkp
CisgICAgeworCV92aWV3U3BsaXR0ZXItPmFjdGl2ZUNvbnRhaW5lcigpLT5zZXRBY3RpdmVWaWV3
KGRpc3BsYXkpOworCWRpc3BsYXktPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsKKyAg
ICB9Cit9CisKIHVpbnQgcUhhc2goUVBvaW50ZXI8VGVybWluYWxEaXNwbGF5PiBkaXNwbGF5KQog
ewogICAgIHJldHVybiBxSGFzaCgoVGVybWluYWxEaXNwbGF5KilkaXNwbGF5KTsKZGlmZiAtLWdp
dCBhL3NyYy9WaWV3TWFuYWdlci5oIGIvc3JjL1ZpZXdNYW5hZ2VyLmgKaW5kZXggYWU5ZGI4Yy4u
OWFiMjI3MiAxMDA2NDQKLS0tIGEvc3JjL1ZpZXdNYW5hZ2VyLmgKKysrIGIvc3JjL1ZpZXdNYW5h
Z2VyLmgKQEAgLTE0MiwxMSArMTQyLDE3IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBOYXZpZ2F0
aW9uTWV0aG9kIG5hdmlnYXRpb25NZXRob2QoKSBjb25zdDsKIAotCS8qKiAKLSAJICogUmV0dXJu
cyB0aGUgY29udHJvbGxlciBmb3IgdGhlIGFjdGl2ZSB2aWV3LiAgYWN0aXZlVmlld0NoYW5nZWQo
KSBpcyAKLSAJICogZW1pdHRlZCB3aGVuIHRoaXMgY2hhbmdlcy4KLQkgKi8KLQlTZXNzaW9uQ29u
dHJvbGxlciogYWN0aXZlVmlld0NvbnRyb2xsZXIoKSBjb25zdDsKKyAgICAvKiogCisgICAgICog
UmV0dXJucyB0aGUgY29udHJvbGxlciBmb3IgdGhlIGFjdGl2ZSB2aWV3LiAgYWN0aXZlVmlld0No
YW5nZWQoKSBpcyAKKyAgICAgKiBlbWl0dGVkIHdoZW4gdGhpcyBjaGFuZ2VzLgorICAgICAqLwor
ICAgIFNlc3Npb25Db250cm9sbGVyKiBhY3RpdmVWaWV3Q29udHJvbGxlcigpIGNvbnN0OworCisg
ICAgLyoqCisgICAgICogU2Vzc2lvbiBtYW5hZ2VtZW50CisgICAgICovCisgICAgdm9pZCBzYXZl
U2Vzc2lvbnMoS0NvbmZpZ0dyb3VwJiBncm91cCk7CisgICAgdm9pZCByZXN0b3JlU2Vzc2lvbnMo
Y29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCk7CiAKIHNpZ25hbHM6CiAgICAgLyoqIEVtaXR0ZWQg
d2hlbiB0aGUgbGFzdCB2aWV3IGlzIHJlbW92ZWQgZnJvbSB0aGUgdmlldyBtYW5hZ2VyICovCmRp
ZmYgLS1naXQgYS9zcmMvbWFpbi5jcHAgYi9zcmMvbWFpbi5jcHAKaW5kZXggMTdhZTFjZC4uNDE3
YTZhYSAxMDA2NDQKLS0tIGEvc3JjL21haW4uY3BwCisrKyBiL3NyYy9tYWluLmNwcApAQCAtMTks
NiArMTksNyBAQAogCiAvLyBPd24KICNpbmNsdWRlICJBcHBsaWNhdGlvbi5oIgorI2luY2x1ZGUg
Ik1haW5XaW5kb3cuaCIKICNpbmNsdWRlIDxLRGVidWc+CiAKIC8vIFVuaXgKQEAgLTUxLDYgKzUy
LDcgQEAgdm9pZCBmaWxsQ29tbWFuZExpbmVPcHRpb25zKEtDbWRMaW5lT3B0aW9ucyYgb3B0aW9u
cyk7CiBib29sIHVzZVRyYW5zcGFyZW5jeSgpOyAgICAgLy8gcmV0dXJucyB0cnVlIGlmIHRyYW5z
cGFyZW5jeSBzaG91bGQgYmUgZW5hYmxlZAogYm9vbCBmb3JjZU5ld1Byb2Nlc3MoKTsgICAgIC8v
IHJldHVybnMgdHJ1ZSBpZiBuZXcgaW5zdGFuY2Ugc2hvdWxkIHVzZSBhIG5ldwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgKGluc3RlYWQgb2YgcmUtdXNpbmcgYW4gZXhp
c3Rpbmcgb25lKQordm9pZCByZXN0b3JlU2Vzc2lvbihBcHBsaWNhdGlvbiYgYXBwKTsKIAogLy8g
KioqCiAvLyBFbnRyeSBwb2ludCBpbnRvIHRoZSBLb25zb2xlIHRlcm1pbmFsIGFwcGxpY2F0aW9u
LiAgCkBAIC05MSwxMiArOTMsMTQgQEAgZXh0ZXJuICJDIiBpbnQgS0RFX0VYUE9SVCBrZGVtYWlu
KGludCBhcmdjLGNoYXIqKiBhcmd2KQogCQlnZXREaXNwbGF5SW5mb3JtYXRpb24oZGlzcGxheSx2
aXN1YWwsY29sb3JtYXApOwogCiAJCUFwcGxpY2F0aW9uIGFwcChkaXNwbGF5LChRdDo6SEFORExF
KXZpc3VhbCwoUXQ6OkhBTkRMRSljb2xvcm1hcCk7CisJCXJlc3RvcmVTZXNzaW9uKGFwcCk7CiAJ
CXJldHVybiBhcHAuZXhlYygpOwogCX0KIAllbHNlCiAjZW5kaWYgCiAJewogICAgIAlBcHBsaWNh
dGlvbiBhcHA7CisJcmVzdG9yZVNlc3Npb24oYXBwKTsKICAgICAJcmV0dXJuIGFwcC5leGVjKCk7
CiAJfSAgIAogfQpAQCAtMjQyLDQgKzI0NiwxMSBAQCB2b2lkIGdldERpc3BsYXlJbmZvcm1hdGlv
bihEaXNwbGF5KiYgZGlzcGxheSAsIFZpc3VhbComIHZpc3VhbCAsIENvbG9ybWFwJiBjb2xvcgog
fQogI2VuZGlmCiAKLQordm9pZCByZXN0b3JlU2Vzc2lvbihBcHBsaWNhdGlvbiYgYXBwKQorewor
ICAgIGlmIChhcHAuaXNTZXNzaW9uUmVzdG9yZWQoKSkgeworCWludCBuID0gMTsKKwl3aGlsZSAo
S01haW5XaW5kb3c6OmNhbkJlUmVzdG9yZWQobikpCisJICAgIGFwcC5uZXdNYWluV2luZG93KCkt
PnJlc3RvcmUobisrKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27517</attachid>
            <date>2008-09-22 20:01:49 +0000</date>
            <delta_ts>2008-09-22 20:01:49 +0000</delta_ts>
            <desc>Proposed patch for upstream merge</desc>
            <filename>kdebase-svn-863413-konsole-session-management.patch</filename>
            <type>text/plain</type>
            <size>34657</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9BcHBsaWNhdGlvbi5jcHAgYi9zcmMvQXBwbGljYXRpb24uY3BwCmlu
ZGV4IDFjMzU5YTkuLjdiYmMzOGYgMTAwNjQ0Ci0tLSBhL3NyYy9BcHBsaWNhdGlvbi5jcHAKKysr
IGIvc3JjL0FwcGxpY2F0aW9uLmNwcApAQCAtMTAzLDQ5ICsxMDMsNTYgQEAgdm9pZCBBcHBsaWNh
dGlvbjo6bGlzdEF2YWlsYWJsZVByb2ZpbGVzKCkKIGludCBBcHBsaWNhdGlvbjo6bmV3SW5zdGFu
Y2UoKQogewogICAgIEtDbWRMaW5lQXJncyogYXJncyA9IEtDbWRMaW5lQXJnczo6cGFyc2VkQXJn
cygpOworICAgIHN0YXRpYyBib29sIGZpcnN0SW5zdGFuY2UgPSB0cnVlOwogCi0gICAgLy8gY2hl
Y2sgZm9yIGFyZ3VtZW50cyB0byBwcmludCBoZWxwIG9yIG90aGVyIGluZm9ybWF0aW9uIHRvIHRo
ZSB0ZXJtaW5hbCwKLSAgICAvLyBxdWl0IGlmIHN1Y2ggYW4gYXJndW1lbnQgd2FzIGZvdW5kCi0g
ICAgaWYgKCBwcm9jZXNzSGVscEFyZ3MoYXJncykgKSAKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAvLyBjcmVhdGUgYSBuZXcgd2luZG93IG9yIHVzZSBhbiBleGlzdGluZyBvbmUgCi0gICAgTWFp
bldpbmRvdyogd2luZG93ID0gcHJvY2Vzc1dpbmRvd0FyZ3MoYXJncyk7Ci0gIAotICAgIC8vIHNl
bGVjdCBwcm9maWxlIHRvIHVzZSAKLSAgICBwcm9jZXNzUHJvZmlsZVNlbGVjdEFyZ3MoYXJncyx3
aW5kb3cpOwotICAgCi0gICAgLy8gcHJvY2VzcyB2YXJpb3VzIGNvbW1hbmQtbGluZSBvcHRpb25z
IHdoaWNoIGNhdXNlIGEgcHJvcGVydHkgb2YgdGhlIAotICAgIC8vIGRlZmF1bHQgcHJvZmlsZSB0
byBiZSBjaGFuZ2VkIAotICAgIHByb2Nlc3NQcm9maWxlQ2hhbmdlQXJncyhhcmdzLHdpbmRvdyk7
Ci0KLSAgICAvLyBjcmVhdGUgbmV3IHNlc3Npb24KLSAgICBTZXNzaW9uKiBzZXNzaW9uID0gY3Jl
YXRlU2Vzc2lvbiggd2luZG93LT5kZWZhdWx0UHJvZmlsZSgpICwgUVN0cmluZygpICwgd2luZG93
LT52aWV3TWFuYWdlcigpICk7Ci0gICAgaWYgKCAhYXJncy0+aXNTZXQoImNsb3NlIikgKQotICAg
ICAgICBzZXNzaW9uLT5zZXRBdXRvQ2xvc2UoZmFsc2UpOwotCi0gICAgLy8gaWYgdGhlIGJhY2tn
cm91bmQtbW9kZSBhcmd1bWVudCBpcyBzdXBwbGllZCwgc3RhcnQgdGhlIGJhY2tncm91bmQgc2Vz
c2lvbgotICAgIC8vICggb3IgYnJpbmcgdG8gdGhlIGZyb250IGlmIGl0IGFscmVhZHkgZXhpc3Rz
ICkKLSAgICBpZiAoIGFyZ3MtPmlzU2V0KCJiYWNrZ3JvdW5kLW1vZGUiKSApCi0gICAgICAgIHN0
YXJ0QmFja2dyb3VuZE1vZGUod2luZG93KTsKLSAgICBlbHNlCisgICAgLy8gaGFuZGxlIHNlc3Np
b24gbWFuYWdlbWVudAorICAgIGlmICgoYXJncy0+Y291bnQoKSAhPSAwKSB8fCAhZmlyc3RJbnN0
YW5jZSB8fCAhaXNTZXNzaW9uUmVzdG9yZWQoKSkKICAgICB7Ci0gICAgICAgIC8vIFF0IGNvbnN0
cmFpbnMgdG9wLWxldmVsIHdpbmRvd3Mgd2hpY2ggaGF2ZSBub3QgYmVlbiBtYW51YWxseSByZXNp
emVkCi0gICAgICAgIC8vICh2aWEgUVdpZGdldDo6cmVzaXplKCkpIHRvIGEgbWF4aW11bSBvZiAy
LzNyZHMgb2YgdGhlIHNjcmVlbiBzaXplLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlIHRlcm1pbmFsIGRpc3BsYXkgbWlnaHQgbm90IGdldCB0aGUgd2lkdGgvaGVp
Z2h0Ci0gICAgICAgIC8vIGl0IGFza3MgZm9yLiAgVG8gd29yayBhcm91bmQgdGhpcywgdGhlIHdp
ZGdldCBtdXN0IGJlIG1hbnVhbGx5IHJlc2l6ZWQKLSAgICAgICAgLy8gdG8gaXRzIHNpemVIaW50
KCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgcHJvYmxlbSBvbmx5IGFmZmVjdHMgdGhl
IGZpcnN0IHRpbWUgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bi4gIEFmdGVyCi0gICAgICAgIC8vIHRo
YXQgS01haW5XaW5kb3cgd2lsbCBoYXZlIG1hbnVhbGx5IHJlc2l6ZWQgdGhlIHdpbmRvdyB0byBp
dHMgc2F2ZWQgc2l6ZQotICAgICAgICAvLyBhdCB0aGlzIHBvaW50IChzbyB0aGUgUXQ6OldBX1Jl
c2l6ZWQgYXR0cmlidXRlIHdpbGwgYmUgc2V0KQotICAgICAgICBpZiAoIXdpbmRvdy0+dGVzdEF0
dHJpYnV0ZShRdDo6V0FfUmVzaXplZCkpCi0gICAgICAgICAgICB3aW5kb3ctPnJlc2l6ZSh3aW5k
b3ctPnNpemVIaW50KCkpOwotCi0gICAgICAgIHdpbmRvdy0+c2hvdygpOworICAgICAgICAvLyBj
aGVjayBmb3IgYXJndW1lbnRzIHRvIHByaW50IGhlbHAgb3Igb3RoZXIgaW5mb3JtYXRpb24gdG8g
dGhlIHRlcm1pbmFsLAorICAgICAgICAvLyBxdWl0IGlmIHN1Y2ggYW4gYXJndW1lbnQgd2FzIGZv
dW5kCisgICAgICAgIGlmICggcHJvY2Vzc0hlbHBBcmdzKGFyZ3MpICkKKyAgICAgICAgICAgIHJl
dHVybiAwOworCisgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB3aW5kb3cgb3IgdXNlIGFuIGV4aXN0
aW5nIG9uZQorICAgICAgICBNYWluV2luZG93KiB3aW5kb3cgPSBwcm9jZXNzV2luZG93QXJncyhh
cmdzKTsKKworICAgICAgICAvLyBzZWxlY3QgcHJvZmlsZSB0byB1c2UKKyAgICAgICAgcHJvY2Vz
c1Byb2ZpbGVTZWxlY3RBcmdzKGFyZ3Msd2luZG93KTsKKworICAgICAgICAvLyBwcm9jZXNzIHZh
cmlvdXMgY29tbWFuZC1saW5lIG9wdGlvbnMgd2hpY2ggY2F1c2UgYSBwcm9wZXJ0eSBvZiB0aGUK
KyAgICAgICAgLy8gZGVmYXVsdCBwcm9maWxlIHRvIGJlIGNoYW5nZWQKKyAgICAgICAgcHJvY2Vz
c1Byb2ZpbGVDaGFuZ2VBcmdzKGFyZ3Msd2luZG93KTsKKworICAgICAgICAvLyBjcmVhdGUgbmV3
IHNlc3Npb24KKyAgICAgICAgU2Vzc2lvbiogc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oIHdpbmRv
dy0+ZGVmYXVsdFByb2ZpbGUoKSAsIFFTdHJpbmcoKSAsIHdpbmRvdy0+dmlld01hbmFnZXIoKSAp
OworICAgICAgICBpZiAoICFhcmdzLT5pc1NldCgiY2xvc2UiKSApCisgICAgICAgICAgICBzZXNz
aW9uLT5zZXRBdXRvQ2xvc2UoZmFsc2UpOworCisgICAgICAgIC8vIGlmIHRoZSBiYWNrZ3JvdW5k
LW1vZGUgYXJndW1lbnQgaXMgc3VwcGxpZWQsIHN0YXJ0IHRoZSBiYWNrZ3JvdW5kIHNlc3Npb24K
KyAgICAgICAgLy8gKCBvciBicmluZyB0byB0aGUgZnJvbnQgaWYgaXQgYWxyZWFkeSBleGlzdHMg
KQorICAgICAgICBpZiAoIGFyZ3MtPmlzU2V0KCJiYWNrZ3JvdW5kLW1vZGUiKSApCisgICAgICAg
ICAgICBzdGFydEJhY2tncm91bmRNb2RlKHdpbmRvdyk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gUXQgY29uc3RyYWlucyB0b3AtbGV2ZWwgd2luZG93cyB3aGljaCBo
YXZlIG5vdCBiZWVuIG1hbnVhbGx5IHJlc2l6ZWQKKyAgICAgICAgICAgIC8vICh2aWEgUVdpZGdl
dDo6cmVzaXplKCkpIHRvIGEgbWF4aW11bSBvZiAyLzNyZHMgb2YgdGhlIHNjcmVlbiBzaXplLgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGVybWlu
YWwgZGlzcGxheSBtaWdodCBub3QgZ2V0IHRoZSB3aWR0aC9oZWlnaHQKKyAgICAgICAgICAgIC8v
IGl0IGFza3MgZm9yLiAgVG8gd29yayBhcm91bmQgdGhpcywgdGhlIHdpZGdldCBtdXN0IGJlIG1h
bnVhbGx5IHJlc2l6ZWQKKyAgICAgICAgICAgIC8vIHRvIGl0cyBzaXplSGludCgpLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgcHJvYmxlbSBvbmx5IGFmZmVjdHMgdGhlIGZp
cnN0IHRpbWUgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bi4gIEFmdGVyCisgICAgICAgICAgICAvLyB0
aGF0IEtNYWluV2luZG93IHdpbGwgaGF2ZSBtYW51YWxseSByZXNpemVkIHRoZSB3aW5kb3cgdG8g
aXRzIHNhdmVkIHNpemUKKyAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgKHNvIHRoZSBRdDo6
V0FfUmVzaXplZCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQpCisgICAgICAgICAgICBpZiAoIXdpbmRv
dy0+dGVzdEF0dHJpYnV0ZShRdDo6V0FfUmVzaXplZCkpCisgICAgICAgICAgICAgICAgd2luZG93
LT5yZXNpemUod2luZG93LT5zaXplSGludCgpKTsKKworICAgICAgICAgICAgd2luZG93LT5zaG93
KCk7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBmaXJzdEluc3RhbmNlID0gZmFsc2U7CisgICAg
YXJncy0+Y2xlYXIoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzEzLDMgKzMyMCwxMiBAQCBT
ZXNzaW9uKiBBcHBsaWNhdGlvbjo6Y3JlYXRlU2Vzc2lvbihQcm9maWxlOjpQdHIgcHJvZmlsZSwg
Y29uc3QgUVN0cmluZyYgZGlyZWN0bwogfQogCiAjaW5jbHVkZSAiQXBwbGljYXRpb24ubW9jIgor
CisvKgorICBMb2NhbCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6ICJz
dHJvdXN0cnVwIgorICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0CisgIEVu
ZDoKKyovCmRpZmYgLS1naXQgYS9zcmMvTWFpbldpbmRvdy5jcHAgYi9zcmMvTWFpbldpbmRvdy5j
cHAKaW5kZXggNjExNzRiZi4uZGNmZWVmMiAxMDA2NDQKLS0tIGEvc3JjL01haW5XaW5kb3cuY3Bw
CisrKyBiL3NyYy9NYWluV2luZG93LmNwcApAQCAtMTksNiArMTksNyBAQAogCiAvLyBPd24KICNp
bmNsdWRlICJNYWluV2luZG93LmgiCisjaW5jbHVkZSAiU2Vzc2lvbk1hbmFnZXIuaCIKIAogLy8g
UXQKICNpbmNsdWRlIDxRdEd1aS9RQm94TGF5b3V0PgpAQCAtMzc4LDYgKzM3OSwzMyBAQCBib29s
IE1haW5XaW5kb3c6OnF1ZXJ5Q2xvc2UoKQogCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK3ZvaWQg
TWFpbldpbmRvdzo6c2F2ZVByb3BlcnRpZXMoS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBn
cm91cC53cml0ZVBhdGhFbnRyeSgiRGVmYXVsdCBQcm9maWxlIiwgX2RlZmF1bHRQcm9maWxlLT5w
YXRoKCkpOworICAgIF92aWV3TWFuYWdlci0+c2F2ZVNlc3Npb25zKGdyb3VwKTsKK30KKwordm9p
ZCBNYWluV2luZG93OjpyZWFkUHJvcGVydGllcyhjb25zdCBLQ29uZmlnR3JvdXAmIGdyb3VwKQor
eworICAgIFNlc3Npb25NYW5hZ2VyICptYW5hZ2VyID0gU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNl
KCk7CisgICAgUVN0cmluZyBwcm9maWxlID0gZ3JvdXAucmVhZFBhdGhFbnRyeSgiRGVmYXVsdCBQ
cm9maWxlIiwgUVN0cmluZygpKTsKKyAgICBQcm9maWxlOjpQdHIgcHRyID0gbWFuYWdlci0+ZGVm
YXVsdFByb2ZpbGUoKTsKKyAgICBpZiAoIXByb2ZpbGUuaXNFbXB0eSgpKSBwdHIgPSBtYW5hZ2Vy
LT5sb2FkUHJvZmlsZShwcm9maWxlKTsKKyAgICBzZXREZWZhdWx0UHJvZmlsZShwdHIpOworICAg
IF92aWV3TWFuYWdlci0+cmVzdG9yZVNlc3Npb25zKGdyb3VwKTsKK30KKwordm9pZCBNYWluV2lu
ZG93OjpzYXZlR2xvYmFsUHJvcGVydGllcyhLQ29uZmlnKiBjb25maWcpCit7CisgICAgU2Vzc2lv
bk1hbmFnZXI6Omluc3RhbmNlKCktPnNhdmVTZXNzaW9ucyhjb25maWcpOworfQorCit2b2lkIE1h
aW5XaW5kb3c6OnJlYWRHbG9iYWxQcm9wZXJ0aWVzKEtDb25maWcqIGNvbmZpZykKK3sKKyAgICBT
ZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2UoKS0+cmVzdG9yZVNlc3Npb25zKGNvbmZpZyk7Cit9CisK
IHZvaWQgTWFpbldpbmRvdzo6c3luY0FjdGl2ZVNob3J0Y3V0cyhLQWN0aW9uQ29sbGVjdGlvbiog
ZGVzdCwgY29uc3QgS0FjdGlvbkNvbGxlY3Rpb24qIHNvdXJjZSkKIHsKICAgICBmb3JlYWNoKFFB
Y3Rpb24qIHFBY3Rpb24sIHNvdXJjZS0+YWN0aW9ucygpKSAKQEAgLTQ1NiwzICs0ODQsMTIgQEAg
dm9pZCBNYWluV2luZG93Ojpjb25maWd1cmVOb3RpZmljYXRpb25zKCkKIH0KIAogI2luY2x1ZGUg
Ik1haW5XaW5kb3cubW9jIgorCisvKgorICBMb2NhbCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKwor
ICBjLWZpbGUtc3R5bGU6ICJzdHJvdXN0cnVwIgorICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAg
dGFiLXdpZHRoOiA0CisgIEVuZDoKKyovCmRpZmYgLS1naXQgYS9zcmMvTWFpbldpbmRvdy5oIGIv
c3JjL01haW5XaW5kb3cuaAppbmRleCAzMjVmOWZkLi5jNTVhZTU1IDEwMDY0NAotLS0gYS9zcmMv
TWFpbldpbmRvdy5oCisrKyBiL3NyYy9NYWluV2luZG93LmgKQEAgLTEzMiw2ICsxMzIsMTAgQEAg
Y2xhc3MgTWFpbldpbmRvdyA6IHB1YmxpYyBLWG1sR3VpV2luZG93CiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICAvLyByZWltcGxlbWVudGVkIGZyb20gS01haW5XaW5kb3cKICAgICAgICAgdmlydHVh
bCBib29sIHF1ZXJ5Q2xvc2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNhdmVQcm9wZXJ0aWVz
KEtDb25maWdHcm91cCYgZ3JvdXApOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhZFByb3BlcnRp
ZXMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzYXZl
R2xvYmFsUHJvcGVydGllcyhLQ29uZmlnKiBjb25maWcpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVhZEdsb2JhbFByb3BlcnRpZXMoS0NvbmZpZyogY29uZmlnKTsKIAogICAgIHByaXZhdGUgc2xv
dHM6CiAgICAgICAgIHZvaWQgbmV3VGFiKCk7CkBAIC0xNzksMyArMTgzLDEyIEBAIGNsYXNzIE1h
aW5XaW5kb3cgOiBwdWJsaWMgS1htbEd1aVdpbmRvdwogfQogCiAjZW5kaWYgLy8gS09OU09MRU1B
SU5XSU5ET1dfSAorCisvKgorICBMb2NhbCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZp
bGUtc3R5bGU6ICJzdHJvdXN0cnVwIgorICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdp
ZHRoOiA0CisgIEVuZDoKKyovCmRpZmYgLS1naXQgYS9zcmMvUHJvY2Vzc0luZm8uY3BwIGIvc3Jj
L1Byb2Nlc3NJbmZvLmNwcAppbmRleCBhYmYwYTlkLi4yN2JjMmZkIDEwMDY0NAotLS0gYS9zcmMv
UHJvY2Vzc0luZm8uY3BwCisrKyBiL3NyYy9Qcm9jZXNzSW5mby5jcHAKQEAgLTY0LDE4ICs2NCwx
MCBAQCB2b2lkIFByb2Nlc3NJbmZvOjp1cGRhdGUoKQogICAgIHJlYWRQcm9jZXNzSW5mbyhfcGlk
LF9lbmFibGVFbnZpcm9ubWVudFJlYWQpOwogfQogCi1RU3RyaW5nIFByb2Nlc3NJbmZvOjpmb3Jt
YXQoY29uc3QgUVN0cmluZyYgaW5wdXQpIGNvbnN0CitRU3RyaW5nIFByb2Nlc3NJbmZvOjp2YWxp
ZEN1cnJlbnREaXIoKSBjb25zdAogewogICAgYm9vbCBvayA9IGZhbHNlOwogCi0gICBRU3RyaW5n
IG91dHB1dChpbnB1dCk7Ci0KLSAgIC8vIHNlYXJjaCBmb3IgYW5kIHJlcGxhY2Uga25vd24gbWFy
a2VyCi0gICBvdXRwdXQucmVwbGFjZSgiJXUiLCJOT1QgSU1QTEVNRU5URUQgWUVUIik7Ci0gICBv
dXRwdXQucmVwbGFjZSgiJW4iLG5hbWUoJm9rKSk7Ci0gICBvdXRwdXQucmVwbGFjZSgiJWMiLGZv
cm1hdENvbW1hbmQobmFtZSgmb2spLGFyZ3VtZW50cygmb2spLFNob3J0Q29tbWFuZEZvcm1hdCkp
OwotICAgb3V0cHV0LnJlcGxhY2UoIiVDIixmb3JtYXRDb21tYW5kKG5hbWUoJm9rKSxhcmd1bWVu
dHMoJm9rKSxMb25nQ29tbWFuZEZvcm1hdCkpOwotICAgCiAgICAvLyByZWFkIGN1cnJlbnQgZGly
LCBpZiBhbiBlcnJvciBvY2N1cnMgdHJ5IHRoZSBwYXJlbnQgYXMgdGhlIG5leHQKICAgIC8vIGJl
c3Qgb3B0aW9uCiAgICBpbnQgY3VycmVudFBpZCA9IHBhcmVudFBpZCgmb2spOwpAQCAtODgsNyAr
ODAsMjMgQEAgUVN0cmluZyBQcm9jZXNzSW5mbzo6Zm9ybWF0KGNvbnN0IFFTdHJpbmcmIGlucHV0
KSBjb25zdAogICAgICAgIGRpciA9IGN1cnJlbnQtPmN1cnJlbnREaXIoJm9rKTsKICAgICAgICBk
ZWxldGUgY3VycmVudDsKICAgIH0KLSAgICAgICAgCisKKyAgIHJldHVybiBkaXI7Cit9CisKK1FT
dHJpbmcgUHJvY2Vzc0luZm86OmZvcm1hdChjb25zdCBRU3RyaW5nJiBpbnB1dCkgY29uc3QKK3sK
KyAgIGJvb2wgb2sgPSBmYWxzZTsKKworICAgUVN0cmluZyBvdXRwdXQoaW5wdXQpOworCisgICAv
LyBzZWFyY2ggZm9yIGFuZCByZXBsYWNlIGtub3duIG1hcmtlcgorICAgb3V0cHV0LnJlcGxhY2Uo
IiV1IiwiTk9UIElNUExFTUVOVEVEIFlFVCIpOworICAgb3V0cHV0LnJlcGxhY2UoIiVuIixuYW1l
KCZvaykpOworICAgb3V0cHV0LnJlcGxhY2UoIiVjIixmb3JtYXRDb21tYW5kKG5hbWUoJm9rKSxh
cmd1bWVudHMoJm9rKSxTaG9ydENvbW1hbmRGb3JtYXQpKTsKKyAgIG91dHB1dC5yZXBsYWNlKCIl
QyIsZm9ybWF0Q29tbWFuZChuYW1lKCZvayksYXJndW1lbnRzKCZvayksTG9uZ0NvbW1hbmRGb3Jt
YXQpKTsKKyAgIAorICAgUVN0cmluZyBkaXIgPSB2YWxpZEN1cnJlbnREaXIoKTsKICAgIG91dHB1
dC5yZXBsYWNlKCIlRCIsZGlyKTsKICAgIG91dHB1dC5yZXBsYWNlKCIlZCIsZm9ybWF0U2hvcnRE
aXIoZGlyKSk7CiAgICAKQEAgLTczMSwzICs3MzksMTEgQEAgUHJvY2Vzc0luZm8qIFByb2Nlc3NJ
bmZvOjpuZXdJbnN0YW5jZShpbnQgcGlkLGJvb2wgZW5hYmxlRW52aXJvbm1lbnRSZWFkKQogI2Vu
ZGlmCiB9CiAKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogYysrCisgIGMtZmlsZS1z
dHlsZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5pbAorICB0YWItd2lkdGg6
IDQKKyAgRW5kOgorKi8KZGlmZiAtLWdpdCBhL3NyYy9Qcm9jZXNzSW5mby5oIGIvc3JjL1Byb2Nl
c3NJbmZvLmgKaW5kZXggNzY2YTQzNC4uNDc4NzZlNiAxMDA2NDQKLS0tIGEvc3JjL1Byb2Nlc3NJ
bmZvLmgKKysrIGIvc3JjL1Byb2Nlc3NJbmZvLmgKQEAgLTE1Miw2ICsxNTIsMTEgQEAgcHVibGlj
OgogICAgIFFTdHJpbmcgY3VycmVudERpcihib29sKiBvaykgY29uc3Q7CiAKICAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSBwcm9jZXNz
IChvciBpdHMgcGFyZW50KQorICAgICAqLworICAgIFFTdHJpbmcgdmFsaWRDdXJyZW50RGlyKCkg
Y29uc3Q7CisKKyAgICAvKioKICAgICAgKiBQYXJzZXMgYW4gaW5wdXQgc3RyaW5nLCBsb29raW5n
IGZvciBtYXJrZXJzIGJlZ2lubmluZyB3aXRoIGEgJyUnIAogICAgICAqIGNoYXJhY3RlciBhbmQg
cmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBtYXJrZXJzIHJlcGxhY2VkCiAgICAgICogd2l0aCBp
bmZvcm1hdGlvbiBmcm9tIHRoaXMgcHJvY2VzcyBkZXNjcmlwdGlvbi4KQEAgLTQyNCwzICs0Mjks
MTIgQEAgcHJpdmF0ZToKIAogfQogI2VuZGlmIC8vUFJPQ0VTU0lORk9fSAorCisvKgorICBMb2Nh
bCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6ICJzdHJvdXN0cnVwIgor
ICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0CisgIEVuZDoKKyovCmRpZmYg
LS1naXQgYS9zcmMvU2Vzc2lvbi5jcHAgYi9zcmMvU2Vzc2lvbi5jcHAKaW5kZXggOWYyOGNiNS4u
NTk1ZDdkMSAxMDA2NDQKLS0tIGEvc3JjL1Nlc3Npb24uY3BwCisrKyBiL3NyYy9TZXNzaW9uLmNw
cApAQCAtNDgsMTEgKzQ4LDEzIEBACiAjaW5jbHVkZSA8a3NoZWxsLmg+CiAjaW5jbHVkZSA8S1N0
YW5kYXJkRGlycz4KICNpbmNsdWRlIDxLUHR5RGV2aWNlPgorI2luY2x1ZGUgPEtVcmw+CiAKIC8v
IEtvbnNvbGUKICNpbmNsdWRlIDxjb25maWcta29uc29sZS5oPgogI2luY2x1ZGUgPHNlc3Npb25h
ZGFwdG9yLmg+CiAKKyNpbmNsdWRlICJQcm9jZXNzSW5mby5oIgogI2luY2x1ZGUgIlB0eS5oIgog
I2luY2x1ZGUgIlRlcm1pbmFsRGlzcGxheS5oIgogI2luY2x1ZGUgIlNoZWxsQ29tbWFuZC5oIgpA
QCAtNzcsNiArNzksOSBAQCBTZXNzaW9uOjpTZXNzaW9uKFFPYmplY3QqIHBhcmVudCkgOgogICAg
LCBfZmxvd0NvbnRyb2wodHJ1ZSkKICAgICwgX2Z1bGxTY3JpcHRpbmcoZmFsc2UpCiAgICAsIF9z
ZXNzaW9uSWQoMCkKKyAgICwgX3Nlc3Npb25Qcm9jZXNzSW5mbygwKQorICAgLCBfZm9yZWdyb3Vu
ZFByb2Nlc3NJbmZvKDApCisgICAsIF9mb3JlZ3JvdW5kUGlkKDApCiAgICAsIF96bW9kZW1CdXN5
KGZhbHNlKQogICAgLCBfem1vZGVtUHJvYygwKQogICAgLCBfem1vZGVtUHJvZ3Jlc3MoMCkKQEAg
LTIwMCw2ICsyMDUsMTkgQEAgdm9pZCBTZXNzaW9uOjpzZXRBcmd1bWVudHMoY29uc3QgUVN0cmlu
Z0xpc3QmIGFyZ3VtZW50cykKICAgICBfYXJndW1lbnRzID0gU2hlbGxDb21tYW5kOjpleHBhbmQo
YXJndW1lbnRzKTsKIH0KIAorUVN0cmluZyBTZXNzaW9uOjpjdXJyZW50V29ya2luZ0RpcmVjdG9y
eSgpCit7CisgICAgLy8gb25seSByZXR1cm5lZCBjYWNoZWQgdmFsdWUKKyAgICBpZiAoX2N1cnJl
bnRXb3JraW5nRGlyLmlzRW1wdHkoKSkgdXBkYXRlV29ya2luZ0RpcmVjdG9yeSgpOworICAgIHJl
dHVybiBfY3VycmVudFdvcmtpbmdEaXI7Cit9CitQcm9jZXNzSW5mbyogU2Vzc2lvbjo6dXBkYXRl
V29ya2luZ0RpcmVjdG9yeSgpCit7CisgICAgUHJvY2Vzc0luZm8gKnByb2Nlc3MgPSBnZXRQcm9j
ZXNzSW5mbygpOworICAgIF9jdXJyZW50V29ya2luZ0RpciA9IHByb2Nlc3MtPnZhbGlkQ3VycmVu
dERpcigpOworICAgIHJldHVybiBwcm9jZXNzOworfQorCiBRTGlzdDxUZXJtaW5hbERpc3BsYXkq
PiBTZXNzaW9uOjp2aWV3cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIF92aWV3czsKQEAgLTMyMiw5
ICszNDAsMTMgQEAgdm9pZCBTZXNzaW9uOjpydW4oKQogewogICAvL2NoZWNrIHRoYXQgZXZlcnl0
aGluZyBpcyBpbiBwbGFjZSB0byBydW4gdGhlIHNlc3Npb24KICAgaWYgKF9wcm9ncmFtLmlzRW1w
dHkoKSkKKyAgewogICAgICAga0RlYnVnKCkgPDwgIlNlc3Npb246OnJ1bigpIC0gcHJvZ3JhbSB0
byBydW4gbm90IHNldC4iOworICB9CiAgIGlmIChfYXJndW1lbnRzLmlzRW1wdHkoKSkKKyAgewog
ICAgICAga0RlYnVnKCkgPDwgIlNlc3Npb246OnJ1bigpIC0gbm8gY29tbWFuZCBsaW5lIGFyZ3Vt
ZW50cyBzcGVjaWZpZWQuIjsKKyAgfQogCiAgIGNvbnN0IGludCBDSE9JQ0VfQ09VTlQgPSAzOwog
ICBRU3RyaW5nIHByb2dyYW1zW0NIT0lDRV9DT1VOVF0gPSB7X3Byb2dyYW0scWdldGVudigiU0hF
TEwiKSwiL2Jpbi9zaCJ9OwpAQCAtNjYzLDYgKzY4NSwxMCBAQCB2b2lkIFNlc3Npb246OnNlbmRU
ZXh0KGNvbnN0IFFTdHJpbmcgJnRleHQpIGNvbnN0CiAKIFNlc3Npb246On5TZXNzaW9uKCkKIHsK
KyAgaWYgKF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8pCisgICAgICBkZWxldGUgX2ZvcmVncm91bmRQ
cm9jZXNzSW5mbzsKKyAgaWYgKF9zZXNzaW9uUHJvY2Vzc0luZm8pCisgICAgICBkZWxldGUgX3Nl
c3Npb25Qcm9jZXNzSW5mbzsKICAgZGVsZXRlIF9lbXVsYXRpb247CiAgIGRlbGV0ZSBfc2hlbGxQ
cm9jZXNzOwogICBkZWxldGUgX3ptb2RlbVByb2M7CkBAIC03NTAsNiArNzc2LDExMCBAQCBRU3Ry
aW5nIFNlc3Npb246OnRpdGxlKFRpdGxlUm9sZSByb2xlKSBjb25zdAogICAgICAgICByZXR1cm4g
UVN0cmluZygpOwogfQogCitQcm9jZXNzSW5mbyogU2Vzc2lvbjo6Z2V0UHJvY2Vzc0luZm8oKQor
eworICAgIFByb2Nlc3NJbmZvKiBwcm9jZXNzOworCisgICAgaWYgKGlzQ2hpbGRBY3RpdmUoKSkK
KyAgICAgICAgcHJvY2VzcyA9IF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm87CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgdXBkYXRlU2Vzc2lvblByb2Nlc3NJbmZvKCk7CisgICAgICAgIHByb2Nlc3Mg
PSBfc2Vzc2lvblByb2Nlc3NJbmZvOworICAgIH0KKworICAgIHJldHVybiBwcm9jZXNzOworfQor
Cit2b2lkIFNlc3Npb246OnVwZGF0ZVNlc3Npb25Qcm9jZXNzSW5mbygpCit7CisgICAgUV9BU1NF
UlQoX3NoZWxsUHJvY2Vzcyk7CisgICAgaWYgKCFfc2Vzc2lvblByb2Nlc3NJbmZvKQorICAgICAg
ICBfc2Vzc2lvblByb2Nlc3NJbmZvID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNlKHByb2Nlc3NJ
ZCgpKTsKKyAgICBfc2Vzc2lvblByb2Nlc3NJbmZvLT51cGRhdGUoKTsKK30KKworYm9vbCBTZXNz
aW9uOjp1cGRhdGVGb3JlZ3JvdW5kUHJvY2Vzc0luZm8oKQoreworICAgIGJvb2wgdmFsaWQgPSAo
X2ZvcmVncm91bmRQcm9jZXNzSW5mbyAhPSAwKTsKKworICAgIC8vIGhhcyBmb3JlZ3JvdW5kIHBy
b2Nlc3MgY2hhbmdlZD8KKyAgICBRX0FTU0VSVChfc2hlbGxQcm9jZXNzKTsKKyAgICBpbnQgcGlk
ID0gX3NoZWxsUHJvY2Vzcy0+Zm9yZWdyb3VuZFByb2Nlc3NHcm91cCgpOworICAgIGlmIChwaWQg
IT0gX2ZvcmVncm91bmRQaWQpCisgICAgeworICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAg
ICBkZWxldGUgX2ZvcmVncm91bmRQcm9jZXNzSW5mbzsKKyAgICAgICAgX2ZvcmVncm91bmRQcm9j
ZXNzSW5mbyA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShwaWQpOworICAgICAgICBfZm9yZWdy
b3VuZFBpZCA9IHBpZDsKKyAgICAgICAgdmFsaWQgPSB0cnVlOworICAgIH0KKworICAgIGlmICh2
YWxpZCkKKyAgICB7CisgICAgICAgIF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8tPnVwZGF0ZSgpOwor
ICAgICAgICB2YWxpZCA9IF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8tPmlzVmFsaWQoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdmFsaWQ7Cit9CisKK1FTdHJpbmcgU2Vzc2lvbjo6Z2V0RHluYW1pY1Rp
dGxlKCkKK3sKKyAgICAvLyB1cGRhdGUgY3VycmVudCBkaXJlY3RvcnkgZnJvbSBwcm9jZXNzCisg
ICAgUHJvY2Vzc0luZm8qIHByb2Nlc3MgPSB1cGRhdGVXb3JraW5nRGlyZWN0b3J5KCk7CisKKyAg
ICAvLyBmb3JtYXQgdGFiIHRpdGxlcyB1c2luZyBwcm9jZXNzIGluZm8KKyAgICBib29sIG9rID0g
ZmFsc2U7CisgICAgUVN0cmluZyB0aXRsZTsKKyAgICBpZiAoIHByb2Nlc3MtPm5hbWUoJm9rKSA9
PSAic3NoIiAmJiBvayApCisgICAgeworICAgICAgICBTU0hQcm9jZXNzSW5mbyBzc2hJbmZvKCpw
cm9jZXNzKTsKKyAgICAgICAgdGl0bGUgPSBzc2hJbmZvLmZvcm1hdCh0YWJUaXRsZUZvcm1hdChT
ZXNzaW9uOjpSZW1vdGVUYWJUaXRsZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHRpdGxl
ID0gcHJvY2Vzcy0+Zm9ybWF0KHRhYlRpdGxlRm9ybWF0KFNlc3Npb246OkxvY2FsVGFiVGl0bGUp
KTsKKworICAgIHJldHVybiB0aXRsZTsKK30KKworS1VybCBTZXNzaW9uOjpnZXRVcmwoKQorewor
ICAgIFFTdHJpbmcgcGF0aDsKKyAgICAKKyAgICB1cGRhdGVTZXNzaW9uUHJvY2Vzc0luZm8oKTsK
KyAgICBpZiAoX3Nlc3Npb25Qcm9jZXNzSW5mby0+aXNWYWxpZCgpKQorICAgIHsKKyAgICAgICAg
Ym9vbCBvayA9IGZhbHNlOworCisgICAgICAgIC8vIGNoZWNrIGlmIGZvcmVncm91bmQgcHJvY2Vz
cyBpcyBib29rbWFyay1hYmxlCisgICAgICAgIGlmIChpc0NoaWxkQWN0aXZlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIGZvciByZW1vdGUgY29ubmVjdGlvbnMsIHNhdmUgdGhlIHVzZXIg
YW5kIGhvc3QKKyAgICAgICAgICAgIC8vIGJyaWdodCBpZGVhcyB0byBnZXQgdGhlIGRpcmVjdG9y
eSBhdCB0aGUgb3RoZXIgZW5kIGFyZSB3ZWxjb21lIDopCisgICAgICAgICAgICBpZiAoX2ZvcmVn
cm91bmRQcm9jZXNzSW5mby0+bmFtZSgmb2spID09ICJzc2giICYmIG9rKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFNTSFByb2Nlc3NJbmZvIHNzaEluZm8oKl9mb3JlZ3JvdW5kUHJv
Y2Vzc0luZm8pOworICAgICAgICAgICAgICAgIHBhdGggPSAic3NoOi8vIiArIHNzaEluZm8udXNl
ck5hbWUoKSArICdAJyArIHNzaEluZm8uaG9zdCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGggPSBfZm9yZWdyb3Vu
ZFByb2Nlc3NJbmZvLT5jdXJyZW50RGlyKCZvayk7CisgICAgICAgICAgICAgICAgaWYgKCFvaykK
KyAgICAgICAgICAgICAgICAgICAgcGF0aC5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgLy8gb3RoZXJ3aXNlIHVzZSB0aGUgY3VycmVudCB3b3JraW5nIGRp
cmVjdG9yeSBvZiB0aGUgc2hlbGwgcHJvY2VzcworICAgICAgICB7CisgICAgICAgICAgICBwYXRo
ID0gX3Nlc3Npb25Qcm9jZXNzSW5mby0+Y3VycmVudERpcigmb2spOworICAgICAgICAgICAgaWYg
KCFvaykKKyAgICAgICAgICAgICAgICBwYXRoLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gS1VybChwYXRoKTsKK30KKwogdm9pZCBTZXNzaW9uOjpzZXRJY29uTmFtZShj
b25zdCBRU3RyaW5nJiBpY29uTmFtZSkKIHsKICAgICBpZiAoIGljb25OYW1lICE9IF9pY29uTmFt
ZSApCkBAIC05ODUsMTUgKzExMTUsNTEgQEAgdm9pZCBTZXNzaW9uOjpzZXRTaXplKGNvbnN0IFFT
aXplJiBzaXplKQogCiAgIGVtaXQgcmVzaXplUmVxdWVzdChzaXplKTsKIH0KLWludCBTZXNzaW9u
Ojpmb3JlZ3JvdW5kUHJvY2Vzc0lkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gX3NoZWxsUHJvY2Vz
cy0+Zm9yZWdyb3VuZFByb2Nlc3NHcm91cCgpOwotfQogaW50IFNlc3Npb246OnByb2Nlc3NJZCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIF9zaGVsbFByb2Nlc3MtPnBpZCgpOwogfQogCitib29sIFNl
c3Npb246OmlzQ2hpbGRBY3RpdmUoKQoreworICAgIC8vIGZvcmVncm91bmQgcHJvY2VzcyBpbmZv
IGlzIGFsd2F5cyB1cGRhdGVkIGFmdGVyIHRoaXMKKyAgICByZXR1cm4gdXBkYXRlRm9yZWdyb3Vu
ZFByb2Nlc3NJbmZvKCkgJiYgKHByb2Nlc3NJZCgpICE9IF9mb3JlZ3JvdW5kUGlkKTsKK30KKwor
UVN0cmluZyBTZXNzaW9uOjpjaGlsZE5hbWUoKQoreworICAgIFFTdHJpbmcgbmFtZTsKKworICAg
IGlmICh1cGRhdGVGb3JlZ3JvdW5kUHJvY2Vzc0luZm8oKSkgCisgICAgeworICAgICAgICBib29s
IG9rID0gZmFsc2U7CisgICAgICAgIG5hbWUgPSBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvLT5uYW1l
KCZvayk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICBuYW1lLmNsZWFyKCk7CisgICAg
fQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgU2Vzc2lvbjo6c2F2ZVNlc3Npb24oS0Nv
bmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBncm91cC53cml0ZVBhdGhFbnRyeSgiV29ya2luZ0Rp
ciIsIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkpOworICAgIGdyb3VwLndyaXRlRW50cnkoIkxv
Y2FsVGFiIiwgICAgICAgdGFiVGl0bGVGb3JtYXQoTG9jYWxUYWJUaXRsZSkpOworICAgIGdyb3Vw
LndyaXRlRW50cnkoIlJlbW90ZVRhYiIsICAgICAgdGFiVGl0bGVGb3JtYXQoUmVtb3RlVGFiVGl0
bGUpKTsKK30KKwordm9pZCBTZXNzaW9uOjpyZXN0b3JlU2Vzc2lvbihLQ29uZmlnR3JvdXAmIGdy
b3VwKQoreworICAgIFFTdHJpbmcgdmFsdWU7CisKKyAgICB2YWx1ZSA9IGdyb3VwLnJlYWRQYXRo
RW50cnkoIldvcmtpbmdEaXIiLCBRU3RyaW5nKCkpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgp
KSBzZXRJbml0aWFsV29ya2luZ0RpcmVjdG9yeSh2YWx1ZSk7CisgICAgdmFsdWUgPSBncm91cC5y
ZWFkRW50cnkoIkxvY2FsVGFiIik7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHNldFRhYlRp
dGxlRm9ybWF0KExvY2FsVGFiVGl0bGUsIHZhbHVlKTsKKyAgICB2YWx1ZSA9IGdyb3VwLnJlYWRF
bnRyeSgiUmVtb3RlVGFiIik7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHNldFRhYlRpdGxl
Rm9ybWF0KFJlbW90ZVRhYlRpdGxlLCB2YWx1ZSk7Cit9CisKIFNlc3Npb25Hcm91cDo6U2Vzc2lv
bkdyb3VwKFFPYmplY3QqIHBhcmVudCkKICAgICA6IFFPYmplY3QocGFyZW50KSwgX21hc3Rlck1v
ZGUoMCkKIHsKQEAgLTExMTIsMyArMTI3OCwxMiBAQCB2b2lkIFNlc3Npb25Hcm91cDo6ZGlzY29u
bmVjdFBhaXIoU2Vzc2lvbiogbWFzdGVyICwgU2Vzc2lvbiogb3RoZXIpCiB9CiAKICNpbmNsdWRl
ICJTZXNzaW9uLm1vYyIKKworLyoKKyAgTG9jYWwgVmFyaWFibGVzOgorICBtb2RlOiBjKysKKyAg
Yy1maWxlLXN0eWxlOiAic3Ryb3VzdHJ1cCIKKyAgaW5kZW50LXRhYnMtbW9kZTogbmlsCisgIHRh
Yi13aWR0aDogNAorICBFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvc3JjL1Nlc3Npb24uaCBiL3NyYy9T
ZXNzaW9uLmgKaW5kZXggZWI3YTkyYi4uMmFmMDI5ZCAxMDA2NDQKLS0tIGEvc3JjL1Nlc3Npb24u
aAorKysgYi9zcmMvU2Vzc2lvbi5oCkBAIC0zNiwxMiArMzYsMTQgQEAKICNpbmNsdWRlICJIaXN0
b3J5LmgiCiAKIGNsYXNzIEtQcm9jZXNzOworY2xhc3MgS1VybDsKIAogbmFtZXNwYWNlIEtvbnNv
bGUKIHsKIAogY2xhc3MgRW11bGF0aW9uOwogY2xhc3MgUHR5OworY2xhc3MgUHJvY2Vzc0luZm87
CiBjbGFzcyBUZXJtaW5hbERpc3BsYXk7CiBjbGFzcyBaTW9kZW1EaWFsb2c7CiAKQEAgLTIwMSw2
ICsyMDMsMTEgQEAgcHVibGljOgogICB2b2lkIHNldEluaXRpYWxXb3JraW5nRGlyZWN0b3J5KCBj
b25zdCBRU3RyaW5nJiBkaXIgKTsKIAogICAvKioKKyAgICogUmV0dXJucyB0aGUgY3VycmVudCBk
aXJlY3Rvcnkgb2YgdGhlIGZvcmVncm91bmQgcHJvY2VzcyBpbiB0aGUgc2Vzc2lvbgorICAgKi8K
KyAgUVN0cmluZyBjdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOworCisgIC8qKgogICAgKiBTZXRz
IHRoZSB0eXBlIG9mIGhpc3Rvcnkgc3RvcmUgdXNlZCBieSB0aGlzIHNlc3Npb24uCiAgICAqIExp
bmVzIG9mIG91dHB1dCBwcm9kdWNlZCBieSB0aGUgdGVybWluYWwgYXJlIGFkZGVkCiAgICAqIHRv
IHRoZSBoaXN0b3J5IHN0b3JlLiAgVGhlIHR5cGUgb2YgaGlzdG9yeSBzdG9yZQpAQCAtMjc0LDEy
ICsyODEsMTcgQEAgcHVibGljOgogICBRU3RyaW5nIHRpdGxlKFRpdGxlUm9sZSByb2xlKSBjb25z
dDsKICAgLyoqIENvbnZlbmllbmNlIG1ldGhvZCB1c2VkIHRvIHJlYWQgdGhlIG5hbWUgcHJvcGVy
dHkuICBSZXR1cm5zIHRpdGxlKFNlc3Npb246Ok5hbWVSb2xlKS4gKi8KICAgUVN0cmluZyBuYW1l
VGl0bGUoKSBjb25zdCB7IHJldHVybiB0aXRsZShTZXNzaW9uOjpOYW1lUm9sZSk7IH0KKyAgLyoq
IFJldHVybnMgYSB0aXRsZSBnZW5lcmF0ZWQgZnJvbSB0YWIgZm9ybWF0IGFuZCBwcm9jZXNzIGlu
Zm9ybWF0aW9uLiAqLworICBRU3RyaW5nIGdldER5bmFtaWNUaXRsZSgpOwogCiAgIC8qKiBTZXRz
IHRoZSBuYW1lIG9mIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uICovCiAg
IHZvaWQgc2V0SWNvbk5hbWUoY29uc3QgUVN0cmluZyYgaWNvbk5hbWUpOwogICAvKiogUmV0dXJu
cyB0aGUgbmFtZSBvZiB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLiAqLwog
ICBRU3RyaW5nIGljb25OYW1lKCkgY29uc3Q7CiAKKyAgLyoqIFJldHVybiBVUkwgZm9yIHRoZSBz
ZXNzaW9uLiAqLworICBLVXJsIGdldFVybCgpOworCiAgIC8qKiBTZXRzIHRoZSB0ZXh0IG9mIHRo
ZSBpY29uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uICovCiAgIHZvaWQgc2V0SWNvblRl
eHQoY29uc3QgUVN0cmluZyYgaWNvblRleHQpOwogICAvKiogUmV0dXJucyB0aGUgdGV4dCBvZiB0
aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLiAqLwpAQCAtMzE3LDEyICszMjks
MTEgQEAgcHVibGljOgogICAgKi8KICAgaW50IHByb2Nlc3NJZCgpIGNvbnN0OwogCi0gIC8qKgot
ICAgKiBSZXR1cm5zIHRoZSBwcm9jZXNzIGlkIG9mIHRoZSB0ZXJtaW5hbCdzIGZvcmVncm91bmQg
cHJvY2Vzcy4KLSAgICogVGhpcyBpcyBpbml0aWFsbHkgdGhlIHNhbWUgYXMgcHJvY2Vzc0lkKCkg
YnV0IGNhbiBjaGFuZ2UKLSAgICogYXMgdGhlIHVzZXIgc3RhcnRzIG90aGVyIHByb2dyYW1zIGlu
c2lkZSB0aGUgdGVybWluYWwuCi0gICAqLwotICBpbnQgZm9yZWdyb3VuZFByb2Nlc3NJZCgpIGNv
bnN0OworICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGhhcyBzdGFydGVkIGEgcHJvZ3Jh
bSBpbiB0aGUgc2Vzc2lvbi4gKi8KKyAgYm9vbCBpc0NoaWxkQWN0aXZlKCk7CisKKyAgLyoqIFJl
dHVybnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZm9yZWdyb3VuZCBwcm9jZXNzLiAqLworICBR
U3RyaW5nIGNoaWxkTmFtZSgpOwogCiAgIC8qKiBSZXR1cm5zIHRoZSB0ZXJtaW5hbCBzZXNzaW9u
J3Mgd2luZG93IHNpemUgaW4gbGluZXMgYW5kIGNvbHVtbnMuICovCiAgIFFTaXplIHNpemUoKTsK
QEAgLTM3OCw2ICszODksMTAgQEAgcHVibGljOgogICAgIFByb2ZpbGVDaGFuZ2UgICAgICAgICAg
ICA9IDUwICAgICAvLyB0aGlzIGNsYXNoZXMgd2l0aCBYdGVybSdzIGZvbnQgY2hhbmdlIGNvbW1h
bmQKICAgfTsKIAorICAvLyBzZXNzaW9uIG1hbmFnZW1lbnQKKyAgdm9pZCBzYXZlU2Vzc2lvbihL
Q29uZmlnR3JvdXAmIGdyb3VwKTsKKyAgdm9pZCByZXN0b3JlU2Vzc2lvbihLQ29uZmlnR3JvdXAm
IGdyb3VwKTsKKwogcHVibGljIHNsb3RzOgogCiAgIC8qKgpAQCAtNTE3LDYgKzUzMiwxMCBAQCBw
cml2YXRlOgogICAvLyBjaGVja3MgdGhhdCB0aGUgYmluYXJ5ICdwcm9ncmFtJyBpcyBhdmFpbGFi
bGUgYW5kIGNhbiBiZSBleGVjdXRlZAogICAvLyByZXR1cm5zIHRoZSBiaW5hcnkgbmFtZSBpZiBh
dmFpbGFibGUgb3IgYW4gZW1wdHkgc3RyaW5nIG90aGVyd2lzZQogICBRU3RyaW5nIGNoZWNrUHJv
Z3JhbShjb25zdCBRU3RyaW5nJiBwcm9ncmFtKSBjb25zdDsKKyAgUHJvY2Vzc0luZm8qIGdldFBy
b2Nlc3NJbmZvKCk7CisgIHZvaWQgdXBkYXRlU2Vzc2lvblByb2Nlc3NJbmZvKCk7CisgIGJvb2wg
dXBkYXRlRm9yZWdyb3VuZFByb2Nlc3NJbmZvKCk7CisgIFByb2Nlc3NJbmZvKiB1cGRhdGVXb3Jr
aW5nRGlyZWN0b3J5KCk7CiAKICAgaW50ICAgICAgICAgICAgX3VuaXF1ZUlkZW50aWZpZXI7CiAK
QEAgLTU1NSw2ICs1NzQsMTEgQEAgcHJpdmF0ZToKICAgaW50ICAgICAgICAgICAgX3Nlc3Npb25J
ZDsKIAogICBRU3RyaW5nICAgICAgICBfaW5pdGlhbFdvcmtpbmdEaXI7CisgIFFTdHJpbmcgICAg
ICAgIF9jdXJyZW50V29ya2luZ0RpcjsKKworICBQcm9jZXNzSW5mbyogICBfc2Vzc2lvblByb2Nl
c3NJbmZvOworICBQcm9jZXNzSW5mbyogICBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvOworICBpbnQg
ICAgICAgICAgICBfZm9yZWdyb3VuZFBpZDsKIAogICAvLyBaTW9kZW0KICAgYm9vbCAgICAgICAg
ICAgX3ptb2RlbUJ1c3k7CkBAIC02NTMsMyArNjc3LDEyIEBAIHByaXZhdGU6CiB9CiAKICNlbmRp
ZgorCisvKgorICBMb2NhbCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6
ICJzdHJvdXN0cnVwIgorICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0Cisg
IEVuZDoKKyovCmRpZmYgLS1naXQgYS9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuY3BwIGIvc3JjL1Nl
c3Npb25Db250cm9sbGVyLmNwcAppbmRleCBhMzdiZWMzLi4xODE5NzQxIDEwMDY0NAotLS0gYS9z
cmMvU2Vzc2lvbkNvbnRyb2xsZXIuY3BwCisrKyBiL3NyYy9TZXNzaW9uQ29udHJvbGxlci5jcHAK
QEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICJJbmNyZW1lbnRhbFNlYXJjaEJhci5oIgogI2lu
Y2x1ZGUgIlNjcmVlbldpbmRvdy5oIgogI2luY2x1ZGUgIlNlc3Npb24uaCIKLSNpbmNsdWRlICJQ
cm9jZXNzSW5mby5oIgogI2luY2x1ZGUgIlByb2ZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiVGVybWlu
YWxEaXNwbGF5LmgiCiAjaW5jbHVkZSAiU2Vzc2lvbk1hbmFnZXIuaCIKQEAgLTIwNCw0MyArMjAz
LDggQEAgdm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6c25hcHNob3QoKQogewogICAgIFFfQVNTRVJU
KCBfc2Vzc2lvbiAhPSAwICk7CiAKLSAgICBQcm9jZXNzSW5mbyogcHJvY2VzcyA9IDA7Ci0gICAg
UHJvY2Vzc0luZm8qIHNuYXBzaG90ID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNlKF9zZXNzaW9u
LT5wcm9jZXNzSWQoKSk7Ci0gICAgc25hcHNob3QtPnVwZGF0ZSgpOwotCi0gICAgLy8gdXNlIGZv
cmVncm91bmQgcHJvY2VzcyBpbmZvcm1hdGlvbiBpZiBhdmFpbGFibGUKLSAgICAvLyBmYWxsYmFj
ayB0byBzZXNzaW9uIHByb2Nlc3Mgb3RoZXJ3aXNlCi0gICAgaW50IHBpZCA9IF9zZXNzaW9uLT5m
b3JlZ3JvdW5kUHJvY2Vzc0lkKCk7IC8vc25hcHNob3QtPmZvcmVncm91bmRQaWQoJm9rKTsKLSAg
ICBpZiAoIHBpZCAhPSAwICkKLSAgICB7Ci0gICAgICAgcHJvY2VzcyA9IFByb2Nlc3NJbmZvOjpu
ZXdJbnN0YW5jZShwaWQpOwotICAgICAgIHByb2Nlc3MtPnVwZGF0ZSgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgICAgcHJvY2VzcyA9IHNuYXBzaG90OwotCi0gICAgYm9vbCBvayA9IGZhbHNlOwot
Ci0gICAgLy8gZm9ybWF0IHRhYiB0aXRsZXMgdXNpbmcgcHJvY2VzcyBpbmZvCi0gICAgUVN0cmlu
ZyB0aXRsZTsKLSAgICBpZiAoIHByb2Nlc3MtPm5hbWUoJm9rKSA9PSAic3NoIiAmJiBvayApCi0g
ICAgewotICAgICAgICBTU0hQcm9jZXNzSW5mbyBzc2hJbmZvKCpwcm9jZXNzKTsKLSAgICAgICAg
dGl0bGUgPSBzc2hJbmZvLmZvcm1hdChfc2Vzc2lvbi0+dGFiVGl0bGVGb3JtYXQoU2Vzc2lvbjo6
UmVtb3RlVGFiVGl0bGUpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICB0aXRsZSA9IHByb2Nl
c3MtPmZvcm1hdChfc2Vzc2lvbi0+dGFiVGl0bGVGb3JtYXQoU2Vzc2lvbjo6TG9jYWxUYWJUaXRs
ZSkgKSA7Ci0KLQotICAgIGlmICggc25hcHNob3QgIT0gcHJvY2VzcyApCi0gICAgewotICAgICAg
ICBkZWxldGUgc25hcHNob3Q7Ci0gICAgICAgIGRlbGV0ZSBwcm9jZXNzOwotICAgIH0KLSAgICBl
bHNlCi0gICAgICAgIGRlbGV0ZSBzbmFwc2hvdDsKLQotICAgIHRpdGxlID0gdGl0bGUuc2ltcGxp
ZmllZCgpOworICAgIFFTdHJpbmcgdGl0bGUgPSBfc2Vzc2lvbi0+Z2V0RHluYW1pY1RpdGxlKCk7
ICAgIAorICAgIHRpdGxlICAgICAgICAgPSB0aXRsZS5zaW1wbGlmaWVkKCk7CiAKICAgICAvLyBj
cnVkZSBpbmRpY2F0b3Igd2hlbiB0aGUgc2Vzc2lvbiBpcyBicm9hZGNhc3RpbmcgdG8gb3RoZXJz
CiAgICAgaWYgKF9jb3B5VG9Hcm91cCAmJiBfY29weVRvR3JvdXAtPnNlc3Npb25zKCkuY291bnQo
KSA+IDEpCkBAIC0yNTUsNjQgKzIxOSwxMiBAQCB2b2lkIFNlc3Npb25Db250cm9sbGVyOjpzbmFw
c2hvdCgpCiAKIFFTdHJpbmcgU2Vzc2lvbkNvbnRyb2xsZXI6OmN1cnJlbnREaXIoKSBjb25zdAog
ewotICAgIFByb2Nlc3NJbmZvKiBpbmZvID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNlKF9zZXNz
aW9uLT5wcm9jZXNzSWQoKSk7Ci0gICAgaW5mby0+dXBkYXRlKCk7Ci0KLSAgICBib29sIG9rID0g
ZmFsc2U7Ci0gICAgUVN0cmluZyBwYXRoID0gaW5mby0+Y3VycmVudERpcigmb2spOwotCi0gICAg
ZGVsZXRlIGluZm87Ci0KLSAgICBpZiAoIG9rICkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIHJldHVybiBfc2Vzc2lvbi0+Y3Vy
cmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKIH0KIAogS1VybCBTZXNzaW9uQ29udHJvbGxlcjo6dXJs
KCkgY29uc3QKIHsKLSAgICBQcm9jZXNzSW5mbyogaW5mbyA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0
YW5jZShfc2Vzc2lvbi0+cHJvY2Vzc0lkKCkpOwotICAgIGluZm8tPnVwZGF0ZSgpOwotCi0gICAg
UVN0cmluZyBwYXRoOwotICAgIGlmICggaW5mby0+aXNWYWxpZCgpICkKLSAgICB7Ci0gICAgICAg
IGJvb2wgb2sgPSBmYWxzZTsKLQotICAgICAgICAvLyBjaGVjayBpZiBmb3JlZ3JvdW5kIHByb2Nl
c3MgaXMgYm9va21hcmstYWJsZQotICAgICAgICBpbnQgcGlkID0gX3Nlc3Npb24tPmZvcmVncm91
bmRQcm9jZXNzSWQoKTsKLSAgICAgICAgaWYgKCBwaWQgIT0gMCApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFByb2Nlc3NJbmZvKiBmb3JlZ3JvdW5kSW5mbyA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0
YW5jZShwaWQpOwotICAgICAgICAgICAgZm9yZWdyb3VuZEluZm8tPnVwZGF0ZSgpOwotCi0gICAg
ICAgICAgICAvLyBmb3IgcmVtb3RlIGNvbm5lY3Rpb25zLCBzYXZlIHRoZSB1c2VyIGFuZCBob3N0
Ci0gICAgICAgICAgICAvLyBicmlnaHQgaWRlYXMgdG8gZ2V0IHRoZSBkaXJlY3RvcnkgYXQgdGhl
IG90aGVyIGVuZCBhcmUgd2VsY29tZSA6KQotICAgICAgICAgICAgaWYgKCBmb3JlZ3JvdW5kSW5m
by0+bmFtZSgmb2spID09ICJzc2giICYmIG9rICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBTU0hQcm9jZXNzSW5mbyBzc2hJbmZvKCpmb3JlZ3JvdW5kSW5mbyk7Ci0gICAgICAgICAg
ICAgICAgcGF0aCA9ICJzc2g6Ly8iICsgc3NoSW5mby51c2VyTmFtZSgpICsgJ0AnICsgc3NoSW5m
by5ob3N0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcGF0aCA9IGZvcmVncm91bmRJbmZvLT5jdXJyZW50RGlyKCZvayk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgICAgICBwYXRoLmNs
ZWFyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlbGV0ZSBmb3JlZ3JvdW5kSW5m
bzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIC8vIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQg
d29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIHNoZWxsIHByb2Nlc3MKLSAgICAgICAgewotICAgICAg
ICAgICAgcGF0aCA9IGluZm8tPmN1cnJlbnREaXIoJm9rKTsKLSAgICAgICAgICAgIGlmICghb2sp
Ci0gICAgICAgICAgICAgICAgcGF0aC5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ZGVsZXRlIGluZm87Ci0gICAgcmV0dXJuIEtVcmwoIHBhdGggKTsKKyAgICByZXR1cm4gX3Nlc3Np
b24tPmdldFVybCgpOwogfQogCiB2b2lkIFNlc3Npb25Db250cm9sbGVyOjpyZW5hbWUoKQpAQCAt
NTg1LDExICs0OTcsNiBAQCB2b2lkIFNlc3Npb25Db250cm9sbGVyOjpzZXR1cEFjdGlvbnMoKQog
ICAgIF9jaGFuZ2VQcm9maWxlTWVudSA9IG5ldyBLTWVudShpMThuKCJDaGFuZ2UgUHJvZmlsZSIp
LF92aWV3KTsKICAgICBjb2xsZWN0aW9uLT5hZGRBY3Rpb24oImNoYW5nZS1wcm9maWxlIixfY2hh
bmdlUHJvZmlsZU1lbnUtPm1lbnVBY3Rpb24oKSk7CiAgICAgY29ubmVjdCggX2NoYW5nZVByb2Zp
bGVNZW51ICwgU0lHTkFMKGFib3V0VG9TaG93KCkpICwgdGhpcyAsIFNMT1QocHJlcGFyZUNoYW5n
ZVByb2ZpbGVNZW51KCkpICk7Ci0KLSAgICAvLyBkZWJ1Z2dpbmcgdG9vbHMKLSAgICAvL2FjdGlv
biA9IGNvbGxlY3Rpb24tPmFkZEFjdGlvbigiZGVidWctcHJvY2VzcyIpOwotICAgIC8vYWN0aW9u
LT5zZXRUZXh0KCAiR2V0IEZvcmVncm91bmQgUHJvY2VzcyIgKTsKLSAgICAvL2Nvbm5lY3QoIGFj
dGlvbiAsIFNJR05BTCh0cmlnZ2VyZWQoKSkgLCB0aGlzICwgU0xPVChkZWJ1Z1Byb2Nlc3MoKSkg
KTsKIH0KIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OmNoYW5nZVByb2ZpbGUoUHJvZmlsZTo6UHRy
IHByb2ZpbGUpCiB7CkBAIC02MTUsNDAgKzUyMiw2IEBAIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6
OmNoYW5nZUNvZGVjKFFUZXh0Q29kZWMqIGNvZGVjKQogewogICAgIF9zZXNzaW9uLT5zZXRDb2Rl
Yyhjb2RlYyk7CiB9Ci12b2lkIFNlc3Npb25Db250cm9sbGVyOjpkZWJ1Z1Byb2Nlc3MoKQotewot
ICAgIC8vIHRlc3RpbmcgZmFjaWxpdHkgdG8gcmV0cmlldmUgcHJvY2VzcyBpbmZvcm1hdGlvbiBh
Ym91dAotICAgIC8vIGN1cnJlbnRseSBhY3RpdmUgcHJvY2VzcyBpbiB0aGUgc2hlbGwKLSAgICBQ
cm9jZXNzSW5mbyogc2Vzc2lvblByb2Nlc3MgPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UoX3Nl
c3Npb24tPnByb2Nlc3NJZCgpKTsKLSAgICBzZXNzaW9uUHJvY2Vzcy0+dXBkYXRlKCk7Ci0KLSAg
ICBib29sIG9rID0gZmFsc2U7Ci0gICAgaW50IGZwaWQgPSBzZXNzaW9uUHJvY2Vzcy0+Zm9yZWdy
b3VuZFBpZCgmb2spOwotCi0gICAgaWYgKCBvayApCi0gICAgewotICAgICAgICBQcm9jZXNzSW5m
byogZnAgPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UoZnBpZCk7Ci0gICAgICAgIGZwLT51cGRh
dGUoKTsKLQotICAgICAgICBRU3RyaW5nIG5hbWUgPSBmcC0+bmFtZSgmb2spOwotCi0gICAgICAg
IGlmICggb2sgKQotICAgICAgICB7Ci0gICAgICAgICAgICBfc2Vzc2lvbi0+c2V0VGl0bGUoU2Vz
c2lvbjo6RGlzcGxheWVkVGl0bGVSb2xlLG5hbWUpOwotICAgICAgICAgICAgc2Vzc2lvblRpdGxl
Q2hhbmdlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUVN0cmluZyBjdXJyZW50RGlyID0gZnAt
PmN1cnJlbnREaXIoJm9rKTsKLQotICAgICAgICBpZiAoIG9rICkKLSAgICAgICAgICAgIGtEZWJ1
ZygxMjExKSA8PCBjdXJyZW50RGlyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBrRGVidWco
MTIxMSkgPDwgImNvdWxkIG5vdCByZWFkIGN1cnJlbnQgZGlyIG9mIGZvcmVncm91bmQgcHJvY2Vz
cyI7Ci0KLSAgICAgICAgZGVsZXRlIGZwOwotICAgIH0KLSAgICBkZWxldGUgc2Vzc2lvblByb2Nl
c3M7Ci19CiAKIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OmVkaXRDdXJyZW50UHJvZmlsZSgpCiB7
CkBAIC02OTIsMTMgKzU2NSw5IEBAIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OnNhdmVTZXNzaW9u
KCkKIH0KIGJvb2wgU2Vzc2lvbkNvbnRyb2xsZXI6OmNvbmZpcm1DbG9zZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKF9zZXNzaW9uLT5mb3JlZ3JvdW5kUHJvY2Vzc0lkKCkgIT0gX3Nlc3Npb24tPnByb2Nl
c3NJZCgpKQorICAgIGlmIChfc2Vzc2lvbi0+aXNDaGlsZEFjdGl2ZSgpKQogICAgIHsKLSAgICAg
ICAgUHJvY2Vzc0luZm8qIGZvcmVncm91bmRJbmZvID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNl
KF9zZXNzaW9uLT5mb3JlZ3JvdW5kUHJvY2Vzc0lkKCkpOwotICAgICAgICBmb3JlZ3JvdW5kSW5m
by0+dXBkYXRlKCk7Ci0gICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAgUVN0cmluZyB0
aXRsZSA9IGZvcmVncm91bmRJbmZvLT5uYW1lKCZvayk7Ci0gICAgICAgIGRlbGV0ZSBmb3JlZ3Jv
dW5kSW5mbzsKKyAgICAgICAgUVN0cmluZyB0aXRsZSA9IF9zZXNzaW9uLT5jaGlsZE5hbWUoKTsK
ICAgICAgIAogICAgICAgICAvLyBoYXJkIGNvZGVkIGZvciBub3cuICBJbiBmdXR1cmUgbWFrZSBp
dCBwb3NzaWJsZSBmb3IgdGhlIHVzZXIgdG8gc3BlY2lmeSB3aGljaCBwcm9ncmFtcwogICAgICAg
ICAvLyBhcmUgaWdub3JlZCB3aGVuIGNvbnNpZGVyaW5nIHdoZXRoZXIgdG8gZGlzcGxheSBhIGNv
bmZpcm1hdGlvbgpAQCAtNzA4LDEyICs1NzcsMTIgQEAgYm9vbCBTZXNzaW9uQ29udHJvbGxlcjo6
Y29uZmlybUNsb3NlKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAg
IFFTdHJpbmcgcXVlc3Rpb247Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgIHF1ZXN0aW9u
ID0gaTE4bigiVGhlIHByb2dyYW0gJyUxJyBpcyBjdXJyZW50bHkgcnVubmluZyBpbiB0aGlzIHNl
c3Npb24uIiAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgQXJlIHlvdSBzdXJlIHlv
dSB3YW50IHRvIGNsb3NlIGl0PyIsdGl0bGUpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmICh0
aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBxdWVzdGlvbiA9IGkxOG4oIkEgcHJvZ3JhbSBp
cyBjdXJyZW50bHkgcnVubmluZyBpbiB0aGlzIHNlc3Npb24uIgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9zZSBpdD8iKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcXVlc3Rpb24gPSBpMThuKCJUaGUgcHJvZ3JhbSAnJTEnIGlz
IGN1cnJlbnRseSBydW5uaW5nIGluIHRoaXMgc2Vzc2lvbi4iICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2xvc2UgaXQ/Iix0aXRsZSk7
CiAKICAgICAgICAgaW50IHJlc3VsdCA9IEtNZXNzYWdlQm94Ojp3YXJuaW5nWWVzTm8oX3ZpZXct
PndpbmRvdygpLHF1ZXN0aW9uLGkxOG4oIkNvbmZpcm0gQ2xvc2UiKSk7CiAgICAgICAgIHJldHVy
biAocmVzdWx0ID09IEtNZXNzYWdlQm94OjpZZXMpID8gdHJ1ZSA6IGZhbHNlOyAKQEAgLTE0ODgs
MyArMTM1NywxMiBAQCBRUmVnRXhwIFNlYXJjaEhpc3RvcnlUYXNrOjpyZWdFeHAoKSBjb25zdAog
fQogCiAjaW5jbHVkZSAiU2Vzc2lvbkNvbnRyb2xsZXIubW9jIgorCisvKgorICBMb2NhbCBWYXJp
YWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6ICJzdHJvdXN0cnVwIgorICBpbmRl
bnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0CisgIEVuZDoKKyovCmRpZmYgLS1naXQg
YS9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuaCBiL3NyYy9TZXNzaW9uQ29udHJvbGxlci5oCmluZGV4
IGY4N2M5YTEuLmI4ZTUzODcgMTAwNjQ0Ci0tLSBhL3NyYy9TZXNzaW9uQ29udHJvbGxlci5oCisr
KyBiL3NyYy9TZXNzaW9uQ29udHJvbGxlci5oCkBAIC0yMTMsOSArMjEzLDYgQEAgcHJpdmF0ZSBz
bG90czoKIAogICAgIHZvaWQgdXBkYXRlU2VhcmNoRmlsdGVyKCk7CiAKLSAgICAvLyBkZWJ1Z2dp
bmcgc2xvdHMKLSAgICB2b2lkIGRlYnVnUHJvY2VzcygpOwotCiBwcml2YXRlOgogICAgIC8vIGJl
Z2lucyB0aGUgc2VhcmNoCiAgICAgLy8gdGV4dCAtIHBhdHRlcm4gdG8gc2VhcmNoIGZvcgpAQCAt
NDQzLDMgKzQ0MCwxMiBAQCBwcml2YXRlOgogfQogCiAjZW5kaWYgLy9TRVNTSU9OQ09OVFJPTExF
Ul9ICisKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogYysrCisgIGMtZmlsZS1zdHls
ZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5pbAorICB0YWItd2lkdGg6IDQK
KyAgRW5kOgorKi8KZGlmZiAtLWdpdCBhL3NyYy9TZXNzaW9uTWFuYWdlci5jcHAgYi9zcmMvU2Vz
c2lvbk1hbmFnZXIuY3BwCmluZGV4IDE2Y2IyMDEuLmIwNjYyMTYgMTAwNjQ0Ci0tLSBhL3NyYy9T
ZXNzaW9uTWFuYWdlci5jcHAKKysrIGIvc3JjL1Nlc3Npb25NYW5hZ2VyLmNwcApAQCAtNzMwLDYg
KzczMCw2OSBAQCBRS2V5U2VxdWVuY2UgU2Vzc2lvbk1hbmFnZXI6OnNob3J0Y3V0KFByb2ZpbGU6
OlB0ciBpbmZvKSBjb25zdAogICAgIHJldHVybiBRS2V5U2VxdWVuY2UoKTsKIH0KIAordm9pZCBT
ZXNzaW9uTWFuYWdlcjo6c2F2ZVNlc3Npb25zKEtDb25maWcqIGNvbmZpZykKK3sKKyAgICAvLyBU
aGUgc2Vzc2lvbiBJRHMgY2FuJ3QgYmUgcmVzdG9yZWQuCisgICAgLy8gU28gd2UgbmVlZCB0byBt
YXAgdGhlIG9sZCBJRCB0byB0aGUgZnV0dXJlIG5ldyBJRC4KKyAgICBpbnQgbiA9IDE7CisgICAg
X3Jlc3RvcmVNYXBwaW5nLmNsZWFyKCk7CisKKyAgICBmb3JlYWNoKFNlc3Npb24qIHNlc3Npb24s
IF9zZXNzaW9ucykKKyAgICB7CisgICAgICAgIFFTdHJpbmcgbmFtZSA9IFFMYXRpbjFTdHJpbmco
IlNlc3Npb24iKSArIFFTdHJpbmc6Om51bWJlcihuKTsKKyAgICAgICAgS0NvbmZpZ0dyb3VwIGdy
b3VwKGNvbmZpZywgbmFtZSk7CisKKyAgICAgICAgZ3JvdXAud3JpdGVQYXRoRW50cnkoIlByb2Zp
bGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2Vzc2lvblByb2ZpbGVzLnZhbHVl
KHNlc3Npb24pLT5wYXRoKCkpOworICAgICAgICBzZXNzaW9uLT5zYXZlU2Vzc2lvbihncm91cCk7
CisgICAgICAgIF9yZXN0b3JlTWFwcGluZy5pbnNlcnQoc2Vzc2lvbiwgbik7CisgICAgICAgIG4r
KzsKKyAgICB9CisKKyAgICBLQ29uZmlnR3JvdXAgZ3JvdXAoY29uZmlnLCAiTnVtYmVyIik7Cisg
ICAgZ3JvdXAud3JpdGVFbnRyeSgiTnVtYmVyT2ZTZXNzaW9ucyIsIF9zZXNzaW9ucy5jb3VudCgp
KTsKK30KKworaW50IFNlc3Npb25NYW5hZ2VyOjpnZXRSZXN0b3JlSWQoU2Vzc2lvbiogc2Vzc2lv
bikKK3sKKyAgICByZXR1cm4gX3Jlc3RvcmVNYXBwaW5nLnZhbHVlKHNlc3Npb24pOworfQorCit2
b2lkIFNlc3Npb25NYW5hZ2VyOjpyZXN0b3JlU2Vzc2lvbnMoS0NvbmZpZyogY29uZmlnKQorewor
ICAgIEtDb25maWdHcm91cCBncm91cChjb25maWcsICJOdW1iZXIiKTsKKyAgICBpbnQgc2Vzc2lv
bnM7CisKKyAgICAvLyBBbnkgc2Vzc2lvbnMgc2F2ZWQ/CisgICAgaWYgKChzZXNzaW9ucyA9IGdy
b3VwLnJlYWRFbnRyeSgiTnVtYmVyT2ZTZXNzaW9ucyIsIDApKSA+IDApCisgICAgeworICAgICAg
ICBmb3IgKGludCBuID0gMTsgbiA8PSBzZXNzaW9uczsgbisrKQorICAgICAgICB7CisgICAgICAg
ICAgICBRU3RyaW5nIG5hbWUgPSBRTGF0aW4xU3RyaW5nKCJTZXNzaW9uIikgKyBRU3RyaW5nOjpu
dW1iZXIobik7CisgICAgICAgICAgICBLQ29uZmlnR3JvdXAgc2Vzc2lvbkdyb3VwKGNvbmZpZywg
bmFtZSk7CisKKyAgICAgICAgICAgIFFTdHJpbmcgcHJvZmlsZSA9IHNlc3Npb25Hcm91cC5yZWFk
UGF0aEVudHJ5KCJQcm9maWxlIiwgUVN0cmluZygpKTsKKyAgICAgICAgICAgIFByb2ZpbGU6OlB0
ciBwdHIgPSBkZWZhdWx0UHJvZmlsZSgpOworICAgICAgICAgICAgaWYgKCFwcm9maWxlLmlzRW1w
dHkoKSkgcHRyID0gbG9hZFByb2ZpbGUocHJvZmlsZSk7CisKKyAgICAgICAgICAgIFNlc3Npb24q
IHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHB0cik7CisgICAgICAgICAgICBzZXNzaW9uLT5yZXN0
b3JlU2Vzc2lvbihzZXNzaW9uR3JvdXApOworICAgICAgICB9CisgICAgfQorfQorCitTZXNzaW9u
KiBTZXNzaW9uTWFuYWdlcjo6aWRUb1Nlc3Npb24oaW50IGlkKQoreworICAgIFFfQVNTRVJUKGlk
KTsgCisgICAgZm9yZWFjaChTZXNzaW9uKiBzZXNzaW9uLCBfc2Vzc2lvbnMpCisgICAgICAgIGlm
IChzZXNzaW9uLT5zZXNzaW9uSWQoKSA9PSBpZCkKKyAgICAgICAgICAgIHJldHVybiBzZXNzaW9u
OworCisgICAgLy8gdGhpcyBzaG91bGQgbm90IGhhcHBlbgorICAgIFFfQVNTRVJUKDApOworICAg
IHJldHVybiAwOworfQorCiBLX0dMT0JBTF9TVEFUSUMoIFNlc3Npb25NYW5hZ2VyICwgdGhlU2Vz
c2lvbk1hbmFnZXIgKQogU2Vzc2lvbk1hbmFnZXIqIFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgp
CiB7CkBAIC04MzMsMyArODk2LDEyIEBAIFFNb2RlbEluZGV4IFNlc3Npb25MaXN0TW9kZWw6Omlu
ZGV4KGludCByb3csIGludCBjb2x1bW4sIGNvbnN0IFFNb2RlbEluZGV4JiBwYXJlCiB9CiAKICNp
bmNsdWRlICJTZXNzaW9uTWFuYWdlci5tb2MiCisKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAg
bW9kZTogYysrCisgIGMtZmlsZS1zdHlsZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1v
ZGU6IG5pbAorICB0YWItd2lkdGg6IDQKKyAgRW5kOgorKi8KZGlmZiAtLWdpdCBhL3NyYy9TZXNz
aW9uTWFuYWdlci5oIGIvc3JjL1Nlc3Npb25NYW5hZ2VyLmgKaW5kZXggMzZiNDE0Yy4uZTlkZWYx
MyAxMDA2NDQKLS0tIGEvc3JjL1Nlc3Npb25NYW5hZ2VyLmgKKysrIGIvc3JjL1Nlc3Npb25NYW5h
Z2VyLmgKQEAgLTI0Myw2ICsyNDMsMTIgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBT
ZXNzaW9uTWFuYWdlciogaW5zdGFuY2UoKTsKIAorICAgIC8vIHNlc3Npb24gbWFuYWdlbWVudAor
ICAgIHZvaWQgc2F2ZVNlc3Npb25zKEtDb25maWcqIGNvbmZpZyk7CisgICAgaW50ICBnZXRSZXN0
b3JlSWQoU2Vzc2lvbiogc2Vzc2lvbik7CisgICAgdm9pZCByZXN0b3JlU2Vzc2lvbnMoS0NvbmZp
ZyogY29uZmlnKTsKKyAgICBTZXNzaW9uICppZFRvU2Vzc2lvbihpbnQgaWQpOworCiBzaWduYWxz
OgogICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBwcm9maWxlIGlzIGFkZGVkIHRvIHRoZSBtYW5hZ2Vy
LiAqLwogICAgIHZvaWQgcHJvZmlsZUFkZGVkKFByb2ZpbGU6OlB0ciBwdHIpOwpAQCAtMzE4LDYg
KzMyNCw3IEBAIHByaXZhdGU6CiAKICAgICBRU2V0PFByb2ZpbGU6OlB0cj4gX3R5cGVzOwogICAg
IFFIYXNoPFNlc3Npb24qLFByb2ZpbGU6OlB0cj4gX3Nlc3Npb25Qcm9maWxlczsKKyAgICBRSGFz
aDxTZXNzaW9uKixpbnQ+IF9yZXN0b3JlTWFwcGluZzsKIAogICAgIHN0cnVjdCBTaG9ydGN1dERh
dGEKICAgICB7CkBAIC00MjAsMyArNDI3LDExIEBAIHByaXZhdGU6CiB9CiAjZW5kaWYgLy9TRVNT
SU9OTUFOQUdFUl9ICiAKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogYysrCisgIGMt
ZmlsZS1zdHlsZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5pbAorICB0YWIt
d2lkdGg6IDQKKyAgRW5kOgorKi8KZGlmZiAtLWdpdCBhL3NyYy9WaWV3TWFuYWdlci5jcHAgYi9z
cmMvVmlld01hbmFnZXIuY3BwCmluZGV4IDEwYjZlMjYuLjRkOTJjZDQgMTAwNjQ0Ci0tLSBhL3Ny
Yy9WaWV3TWFuYWdlci5jcHAKKysrIGIvc3JjL1ZpZXdNYW5hZ2VyLmNwcApAQCAtODY2LDkgKzg2
Niw3OCBAQCBRTGlzdDxWaWV3UHJvcGVydGllcyo+IFZpZXdNYW5hZ2VyOjp2aWV3UHJvcGVydGll
cygpIGNvbnN0CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKK3ZvaWQgVmlld01hbmFnZXI6OnNhdmVT
ZXNzaW9ucyhLQ29uZmlnR3JvdXAmIGdyb3VwKQoreworICAgIC8vIGZpbmQgYWxsIHVuaXF1ZSBz
ZXNzaW9uIHJlc3RvcmUgSURzCisgICAgUUxpc3Q8aW50PiBpZHM7CisgICAgUUhhc2g8U2Vzc2lv
biosaW50PiB1bmlxdWU7CisKKyAgICAvLyBmaXJzdDogc2Vzc2lvbnMgaW4gdGhlIGFjdGl2ZSBj
b250YWluZXIsIHByZXNlcnZpbmcgdGhlIG9yZGVyCisgICAgVmlld0NvbnRhaW5lciogY29udGFp
bmVyID0gX3ZpZXdTcGxpdHRlci0+YWN0aXZlQ29udGFpbmVyKCk7CisgICAgUV9BU1NFUlQoY29u
dGFpbmVyKTsKKyAgICBUZXJtaW5hbERpc3BsYXkqIGFjdGl2ZXZpZXcgPSBkeW5hbWljX2Nhc3Q8
VGVybWluYWxEaXNwbGF5Kj4oY29udGFpbmVyLT5hY3RpdmVWaWV3KCkpOworCisgICAgUUxpc3RJ
dGVyYXRvcjxRV2lkZ2V0Kj4gdmlld0l0ZXIoY29udGFpbmVyLT52aWV3cygpKTsKKyAgICBpbnQg
dGFiID0gMTsKKyAgICB3aGlsZSAodmlld0l0ZXIuaGFzTmV4dCgpKQorICAgIHsKKyAgICAgICAg
VGVybWluYWxEaXNwbGF5ICp2aWV3ID0gZHluYW1pY19jYXN0PFRlcm1pbmFsRGlzcGxheSo+KHZp
ZXdJdGVyLm5leHQoKSk7CisgICAgICAgIFFfQVNTRVJUKHZpZXcpOworICAgICAgICBTZXNzaW9u
ICpzZXNzaW9uID0gX3Nlc3Npb25NYXBbdmlld107CisgICAgICAgIGlkcyA8PCBTZXNzaW9uTWFu
YWdlcjo6aW5zdGFuY2UoKS0+Z2V0UmVzdG9yZUlkKHNlc3Npb24pOworICAgICAgICBpZiAodmll
dyA9PSBhY3RpdmV2aWV3KSBncm91cC53cml0ZUVudHJ5KCJBY3RpdmUiLCB0YWIpOworICAgICAg
ICB1bmlxdWUuaW5zZXJ0KHNlc3Npb24sIDEpOworICAgICAgICB0YWIrKzsKKyAgICB9CisKKyAg
ICAvLyBzZWNvbmQ6IGFsbCBvdGhlciBzZXNzaW9ucywgaW4gcmFuZG9tIG9yZGVyCisgICAgLy8g
d2UgZG9uJ3Qgd2FudCB0byBoYXZlIHNlc3Npb25zIHJlc3RvcmVkIHRoYXQgYXJlIG5vdCBjb25u
ZWN0ZWQKKyAgICBmb3JlYWNoKFNlc3Npb24qIHNlc3Npb24sIF9zZXNzaW9uTWFwKQorICAgICAg
ICBpZiAoIXVuaXF1ZS5jb250YWlucyhzZXNzaW9uKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWRzIDw8IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5nZXRSZXN0b3JlSWQoc2Vzc2lvbik7
CisgICAgICAgICAgICB1bmlxdWUuaW5zZXJ0KHNlc3Npb24sIDEpOworICAgICAgICB9CisKKyAg
ICBncm91cC53cml0ZUVudHJ5KCJTZXNzaW9ucyIsIGlkcyk7Cit9CisKK3ZvaWQgVmlld01hbmFn
ZXI6OnJlc3RvcmVTZXNzaW9ucyhjb25zdCBLQ29uZmlnR3JvdXAmIGdyb3VwKQoreworICAgIFFM
aXN0PGludD4gaWRzID0gZ3JvdXAucmVhZEVudHJ5KCJTZXNzaW9ucyIsIFFMaXN0PGludD4oKSk7
CisgICAgaW50IGFjdGl2ZVRhYiAgPSBncm91cC5yZWFkRW50cnkoIkFjdGl2ZSIsIDApOworICAg
IFRlcm1pbmFsRGlzcGxheSAqZGlzcGxheSA9IDA7CisKKyAgICBpbnQgdGFiID0gMTsKKyAgICBm
b3JlYWNoKGludCBpZCwgaWRzKQorICAgIHsKKyAgICAgICAgU2Vzc2lvbiAqc2Vzc2lvbiA9IFNl
c3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5pZFRvU2Vzc2lvbihpZCk7CisgICAgICAgIGNyZWF0
ZVZpZXcoc2Vzc2lvbik7CisgICAgICAgIGlmICghc2Vzc2lvbi0+aXNSdW5uaW5nKCkpCisgICAg
ICAgICAgICBzZXNzaW9uLT5ydW4oKTsKKyAgICAgICAgaWYgKHRhYisrID09IGFjdGl2ZVRhYikK
KyAgICAgICAgICAgIGRpc3BsYXkgPSBkeW5hbWljX2Nhc3Q8VGVybWluYWxEaXNwbGF5Kj4oYWN0
aXZlVmlldygpKTsKKyAgICB9CisKKyAgICBpZiAoZGlzcGxheSkKKyAgICB7CisgICAgICAgIF92
aWV3U3BsaXR0ZXItPmFjdGl2ZUNvbnRhaW5lcigpLT5zZXRBY3RpdmVWaWV3KGRpc3BsYXkpOwor
ICAgICAgICBkaXNwbGF5LT5zZXRGb2N1cyhRdDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgfQor
fQorCiB1aW50IHFIYXNoKFFQb2ludGVyPFRlcm1pbmFsRGlzcGxheT4gZGlzcGxheSkKIHsKICAg
ICByZXR1cm4gcUhhc2goKFRlcm1pbmFsRGlzcGxheSopZGlzcGxheSk7CiB9CiAKICNpbmNsdWRl
ICJWaWV3TWFuYWdlci5tb2MiCisKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogYysr
CisgIGMtZmlsZS1zdHlsZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5pbAor
ICB0YWItd2lkdGg6IDQKKyAgRW5kOgorKi8KZGlmZiAtLWdpdCBhL3NyYy9WaWV3TWFuYWdlci5o
IGIvc3JjL1ZpZXdNYW5hZ2VyLmgKaW5kZXggMDQzMTIzZi4uNjdlNzg0MiAxMDA2NDQKLS0tIGEv
c3JjL1ZpZXdNYW5hZ2VyLmgKKysrIGIvc3JjL1ZpZXdNYW5hZ2VyLmgKQEAgLTE0NCw4ICsxNDQs
OCBAQCBwdWJsaWM6CiAgICAgTmF2aWdhdGlvbk1ldGhvZCBuYXZpZ2F0aW9uTWV0aG9kKCkgY29u
c3Q7CiAKICAgICAvKiogCi0gICAgICAqIFJldHVybnMgdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBh
Y3RpdmUgdmlldy4gIGFjdGl2ZVZpZXdDaGFuZ2VkKCkgaXMgCi0gICAgICAqIGVtaXR0ZWQgd2hl
biB0aGlzIGNoYW5nZXMuCisgICAgICogUmV0dXJucyB0aGUgY29udHJvbGxlciBmb3IgdGhlIGFj
dGl2ZSB2aWV3LiAgYWN0aXZlVmlld0NoYW5nZWQoKSBpcyAKKyAgICAgKiBlbWl0dGVkIHdoZW4g
dGhpcyBjaGFuZ2VzLgogICAgICAqLwogICAgIFNlc3Npb25Db250cm9sbGVyKiBhY3RpdmVWaWV3
Q29udHJvbGxlcigpIGNvbnN0OwogCkBAIC0xNTQsNiArMTU0LDEyIEBAIHB1YmxpYzoKICAgICAg
Ki8KICAgICBJbmNyZW1lbnRhbFNlYXJjaEJhciogc2VhcmNoQmFyKCkgY29uc3Q7CiAKKyAgICAv
KioKKyAgICAgKiBTZXNzaW9uIG1hbmFnZW1lbnQKKyAgICAgKi8KKyAgICB2b2lkIHNhdmVTZXNz
aW9ucyhLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKyAgICB2b2lkIHJlc3RvcmVTZXNzaW9ucyhjb25z
dCBLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKwogc2lnbmFsczoKICAgICAvKiogRW1pdHRlZCB3aGVu
IHRoZSBsYXN0IHZpZXcgaXMgcmVtb3ZlZCBmcm9tIHRoZSB2aWV3IG1hbmFnZXIgKi8KICAgICB2
b2lkIGVtcHR5KCk7CkBAIC0zMDUsMyArMzExLDEyIEBAIHByaXZhdGU6CiB9CiAKICNlbmRpZgor
CisvKgorICBMb2NhbCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6ICJz
dHJvdXN0cnVwIgorICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0CisgIEVu
ZDoKKyovCmRpZmYgLS1naXQgYS9zcmMvbWFpbi5jcHAgYi9zcmMvbWFpbi5jcHAKaW5kZXggMjBm
NWE5NS4uMWExMjZmYyAxMDA2NDQKLS0tIGEvc3JjL21haW4uY3BwCisrKyBiL3NyYy9tYWluLmNw
cApAQCAtMTksNiArMTksNyBAQAogCiAvLyBPd24KICNpbmNsdWRlICJBcHBsaWNhdGlvbi5oIgor
I2luY2x1ZGUgIk1haW5XaW5kb3cuaCIKICNpbmNsdWRlIDxLRGVidWc+CiAKIC8vIFVuaXgKQEAg
LTUxLDYgKzUyLDcgQEAgdm9pZCBmaWxsQ29tbWFuZExpbmVPcHRpb25zKEtDbWRMaW5lT3B0aW9u
cyYgb3B0aW9ucyk7CiBib29sIHVzZVRyYW5zcGFyZW5jeSgpOyAgICAgLy8gcmV0dXJucyB0cnVl
IGlmIHRyYW5zcGFyZW5jeSBzaG91bGQgYmUgZW5hYmxlZAogYm9vbCBmb3JjZU5ld1Byb2Nlc3Mo
KTsgICAgIC8vIHJldHVybnMgdHJ1ZSBpZiBuZXcgaW5zdGFuY2Ugc2hvdWxkIHVzZSBhIG5ldwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgKGluc3RlYWQgb2YgcmUtdXNp
bmcgYW4gZXhpc3Rpbmcgb25lKQordm9pZCByZXN0b3JlU2Vzc2lvbihBcHBsaWNhdGlvbiYgYXBw
KTsKIAogLy8gKioqCiAvLyBFbnRyeSBwb2ludCBpbnRvIHRoZSBLb25zb2xlIHRlcm1pbmFsIGFw
cGxpY2F0aW9uLiAgCkBAIC05MSwxMiArOTMsMTQgQEAgZXh0ZXJuICJDIiBpbnQgS0RFX0VYUE9S
VCBrZGVtYWluKGludCBhcmdjLGNoYXIqKiBhcmd2KQogICAgICAgICBnZXREaXNwbGF5SW5mb3Jt
YXRpb24oZGlzcGxheSx2aXN1YWwsY29sb3JtYXApOwogCiAgICAgICAgIEFwcGxpY2F0aW9uIGFw
cChkaXNwbGF5LChRdDo6SEFORExFKXZpc3VhbCwoUXQ6OkhBTkRMRSljb2xvcm1hcCk7CisgICAg
ICAgIHJlc3RvcmVTZXNzaW9uKGFwcCk7CiAgICAgICAgIHJldHVybiBhcHAuZXhlYygpOwogICAg
IH0KICAgICBlbHNlCiAjZW5kaWYgCiAgICAgewogICAgICAgICBBcHBsaWNhdGlvbiBhcHA7Cisg
ICAgICAgIHJlc3RvcmVTZXNzaW9uKGFwcCk7CiAgICAgICAgIHJldHVybiBhcHAuZXhlYygpOwog
ICAgIH0gICAKIH0KQEAgLTI0Miw0ICsyNDYsMjEgQEAgdm9pZCBnZXREaXNwbGF5SW5mb3JtYXRp
b24oRGlzcGxheSomIGRpc3BsYXkgLCBWaXN1YWwqJiB2aXN1YWwgLCBDb2xvcm1hcCYgY29sb3IK
IH0KICNlbmRpZgogCit2b2lkIHJlc3RvcmVTZXNzaW9uKEFwcGxpY2F0aW9uJiBhcHApCit7Cisg
ICAgaWYgKGFwcC5pc1Nlc3Npb25SZXN0b3JlZCgpKQorICAgIHsKKyAgICAgICAgaW50IG4gPSAx
OworICAgICAgICB3aGlsZSAoS01haW5XaW5kb3c6OmNhbkJlUmVzdG9yZWQobikpCisgICAgICAg
ICAgICBhcHAubmV3TWFpbldpbmRvdygpLT5yZXN0b3JlKG4rKyk7CisgICAgfQorfQogCisvKgor
ICBMb2NhbCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6ICJzdHJvdXN0
cnVwIgorICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0CisgIEVuZDoKKyov
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27708</attachid>
            <date>2008-10-06 05:51:57 +0000</date>
            <delta_ts>2008-10-06 05:51:57 +0000</delta_ts>
            <desc>KDE SVN trunk revisions 867154 to 867477 changes backported to 4.1.1</desc>
            <filename>kdebase-konsole-session-management.patch</filename>
            <type>text/plain</type>
            <size>36546</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">ZGlmZiAtdXAga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL0FwcGxpY2F0aW9uLmNwcC5r
b25zb2xlLXNlc3Npb24tbWFuYWdlbWVudCBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMv
QXBwbGljYXRpb24uY3BwCi0tLSBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvQXBwbGlj
YXRpb24uY3BwLmtvbnNvbGUtc2Vzc2lvbi1tYW5hZ2VtZW50CTIwMDgtMDQtMzAgMTY6NTg6NTYu
MDAwMDAwMDAwICswMzAwCisrKyBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvQXBwbGlj
YXRpb24uY3BwCTIwMDgtMTAtMDUgMTc6Mzk6MTEuMDAwMDAwMDAwICswMzAwCkBAIC0xMDMsNDkg
KzEwMyw1NiBAQCB2b2lkIEFwcGxpY2F0aW9uOjpsaXN0QXZhaWxhYmxlUHJvZmlsZXMoCiBpbnQg
QXBwbGljYXRpb246Om5ld0luc3RhbmNlKCkKIHsKICAgICBLQ21kTGluZUFyZ3MqIGFyZ3MgPSBL
Q21kTGluZUFyZ3M6OnBhcnNlZEFyZ3MoKTsKLQotICAgIC8vIGNoZWNrIGZvciBhcmd1bWVudHMg
dG8gcHJpbnQgaGVscCBvciBvdGhlciBpbmZvcm1hdGlvbiB0byB0aGUgdGVybWluYWwsCi0gICAg
Ly8gcXVpdCBpZiBzdWNoIGFuIGFyZ3VtZW50IHdhcyBmb3VuZAotICAgIGlmICggcHJvY2Vzc0hl
bHBBcmdzKGFyZ3MpICkgCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gY3JlYXRlIGEgbmV3
IHdpbmRvdyBvciB1c2UgYW4gZXhpc3Rpbmcgb25lIAotICAgIE1haW5XaW5kb3cqIHdpbmRvdyA9
IHByb2Nlc3NXaW5kb3dBcmdzKGFyZ3MpOworICAgIHN0YXRpYyBib29sIGZpcnN0SW5zdGFuY2Ug
PSB0cnVlOwogICAKLSAgICAvLyBzZWxlY3QgcHJvZmlsZSB0byB1c2UgCi0gICAgcHJvY2Vzc1By
b2ZpbGVTZWxlY3RBcmdzKGFyZ3Msd2luZG93KTsKLSAgIAotICAgIC8vIHByb2Nlc3MgdmFyaW91
cyBjb21tYW5kLWxpbmUgb3B0aW9ucyB3aGljaCBjYXVzZSBhIHByb3BlcnR5IG9mIHRoZSAKLSAg
ICAvLyBkZWZhdWx0IHByb2ZpbGUgdG8gYmUgY2hhbmdlZCAKLSAgICBwcm9jZXNzUHJvZmlsZUNo
YW5nZUFyZ3MoYXJncyx3aW5kb3cpOwotCi0gICAgLy8gY3JlYXRlIG5ldyBzZXNzaW9uCi0gICAg
U2Vzc2lvbiogc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oIHdpbmRvdy0+ZGVmYXVsdFByb2ZpbGUo
KSAsIFFTdHJpbmcoKSAsIHdpbmRvdy0+dmlld01hbmFnZXIoKSApOwotCWlmICggIWFyZ3MtPmlz
U2V0KCJjbG9zZSIpICkKLQkJc2Vzc2lvbi0+c2V0QXV0b0Nsb3NlKGZhbHNlKTsKLQotICAgIC8v
IGlmIHRoZSBiYWNrZ3JvdW5kLW1vZGUgYXJndW1lbnQgaXMgc3VwcGxpZWQsIHN0YXJ0IHRoZSBi
YWNrZ3JvdW5kIHNlc3Npb24KLSAgICAvLyAoIG9yIGJyaW5nIHRvIHRoZSBmcm9udCBpZiBpdCBh
bHJlYWR5IGV4aXN0cyApCi0gICAgaWYgKCBhcmdzLT5pc1NldCgiYmFja2dyb3VuZC1tb2RlIikg
KQotICAgICAgICBzdGFydEJhY2tncm91bmRNb2RlKHdpbmRvdyk7Ci0gICAgZWxzZQotCXsKLQkJ
Ly8gUXQgY29uc3RyYWlucyB0b3AtbGV2ZWwgd2luZG93cyB3aGljaCBoYXZlIG5vdCBiZWVuIG1h
bnVhbGx5IHJlc2l6ZWQKLQkJLy8gKHZpYSBRV2lkZ2V0OjpyZXNpemUoKSkgdG8gYSBtYXhpbXVt
IG9mIDIvM3JkcyBvZiB0aGUgc2NyZWVuIHNpemUuCi0JCS8vCi0JCS8vIFRoaXMgbWVhbnMgdGhh
dCB0aGUgdGVybWluYWwgZGlzcGxheSBtaWdodCBub3QgZ2V0IHRoZSB3aWR0aC9oZWlnaHQKLQkJ
Ly8gaXQgYXNrcyBmb3IuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB0aGUgd2lkZ2V0IG11c3QgYmUg
bWFudWFsbHkgcmVzaXplZAotCQkvLyB0byBpdHMgc2l6ZUhpbnQoKS4KLQkJLy8KLQkJLy8gVGhp
cyBwcm9ibGVtIG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgdGltZSB0aGUgYXBwbGljYXRpb24gaXMg
cnVuLiAgQWZ0ZXIKLQkJLy8gdGhhdCBLTWFpbldpbmRvdyB3aWxsIGhhdmUgbWFudWFsbHkgcmVz
aXplZCB0aGUgd2luZG93IHRvIGl0cyBzYXZlZCBzaXplCi0JCS8vIGF0IHRoaXMgcG9pbnQgKHNv
IHRoZSBRdDo6V0FfUmVzaXplZCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQpCi0JCWlmICghd2luZG93
LT50ZXN0QXR0cmlidXRlKFF0OjpXQV9SZXNpemVkKSkKLQkJCXdpbmRvdy0+cmVzaXplKHdpbmRv
dy0+c2l6ZUhpbnQoKSk7Ci0KLQkJd2luZG93LT5zaG93KCk7Ci0JfQorICAgIC8vIGhhbmRsZSBz
ZXNzaW9uIG1hbmFnZW1lbnQKKyAgICBpZiAoKGFyZ3MtPmNvdW50KCkgIT0gMCkgfHwgIWZpcnN0
SW5zdGFuY2UgfHwgIWlzU2Vzc2lvblJlc3RvcmVkKCkpCisgICAgeworICAgICAgICAvLyBjaGVj
ayBmb3IgYXJndW1lbnRzIHRvIHByaW50IGhlbHAgb3Igb3RoZXIgaW5mb3JtYXRpb24gdG8gdGhl
IHRlcm1pbmFsLAorICAgICAgICAvLyBxdWl0IGlmIHN1Y2ggYW4gYXJndW1lbnQgd2FzIGZvdW5k
CisgICAgICAgIGlmICggcHJvY2Vzc0hlbHBBcmdzKGFyZ3MpICkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAKKyAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHdpbmRvdyBvciB1c2UgYW4gZXhpc3Rp
bmcgb25lCisgICAgICAgIE1haW5XaW5kb3cqIHdpbmRvdyA9IHByb2Nlc3NXaW5kb3dBcmdzKGFy
Z3MpOworICAKKyAgICAgICAgLy8gc2VsZWN0IHByb2ZpbGUgdG8gdXNlCisgICAgICAgIHByb2Nl
c3NQcm9maWxlU2VsZWN0QXJncyhhcmdzLHdpbmRvdyk7CisgIAorICAgICAgICAvLyBwcm9jZXNz
IHZhcmlvdXMgY29tbWFuZC1saW5lIG9wdGlvbnMgd2hpY2ggY2F1c2UgYSBwcm9wZXJ0eSBvZiB0
aGUKKyAgICAgICAgLy8gZGVmYXVsdCBwcm9maWxlIHRvIGJlIGNoYW5nZWQKKyAgICAgICAgcHJv
Y2Vzc1Byb2ZpbGVDaGFuZ2VBcmdzKGFyZ3Msd2luZG93KTsKKyAgCisgICAgICAgIC8vIGNyZWF0
ZSBuZXcgc2Vzc2lvbgorICAgICAgICBTZXNzaW9uKiBzZXNzaW9uID0gY3JlYXRlU2Vzc2lvbigg
d2luZG93LT5kZWZhdWx0UHJvZmlsZSgpICwgUVN0cmluZygpICwgd2luZG93LT52aWV3TWFuYWdl
cigpICk7CisgICAgICAgIGlmICggIWFyZ3MtPmlzU2V0KCJjbG9zZSIpICkKKyAgICAgICAgICAg
IHNlc3Npb24tPnNldEF1dG9DbG9zZShmYWxzZSk7CisKKyAgICAgICAgLy8gaWYgdGhlIGJhY2tn
cm91bmQtbW9kZSBhcmd1bWVudCBpcyBzdXBwbGllZCwgc3RhcnQgdGhlIGJhY2tncm91bmQgc2Vz
c2lvbgorICAgICAgICAvLyAoIG9yIGJyaW5nIHRvIHRoZSBmcm9udCBpZiBpdCBhbHJlYWR5IGV4
aXN0cyApCisgICAgICAgIGlmICggYXJncy0+aXNTZXQoImJhY2tncm91bmQtbW9kZSIpICkKKyAg
ICAgICAgICAgIHN0YXJ0QmFja2dyb3VuZE1vZGUod2luZG93KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBRdCBjb25zdHJhaW5zIHRvcC1sZXZlbCB3aW5kb3dzIHdo
aWNoIGhhdmUgbm90IGJlZW4gbWFudWFsbHkgcmVzaXplZAorICAgICAgICAgICAgLy8gKHZpYSBR
V2lkZ2V0OjpyZXNpemUoKSkgdG8gYSBtYXhpbXVtIG9mIDIvM3JkcyBvZiB0aGUgc2NyZWVuIHNp
emUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB0
ZXJtaW5hbCBkaXNwbGF5IG1pZ2h0IG5vdCBnZXQgdGhlIHdpZHRoL2hlaWdodAorICAgICAgICAg
ICAgLy8gaXQgYXNrcyBmb3IuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB0aGUgd2lkZ2V0IG11c3Qg
YmUgbWFudWFsbHkgcmVzaXplZAorICAgICAgICAgICAgLy8gdG8gaXRzIHNpemVIaW50KCkuCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBwcm9ibGVtIG9ubHkgYWZmZWN0cyB0
aGUgZmlyc3QgdGltZSB0aGUgYXBwbGljYXRpb24gaXMgcnVuLiAgQWZ0ZXIKKyAgICAgICAgICAg
IC8vIHRoYXQgS01haW5XaW5kb3cgd2lsbCBoYXZlIG1hbnVhbGx5IHJlc2l6ZWQgdGhlIHdpbmRv
dyB0byBpdHMgc2F2ZWQgc2l6ZQorICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCAoc28gdGhl
IFF0OjpXQV9SZXNpemVkIGF0dHJpYnV0ZSB3aWxsIGJlIHNldCkKKyAgICAgICAgICAgIGlmICgh
d2luZG93LT50ZXN0QXR0cmlidXRlKFF0OjpXQV9SZXNpemVkKSkKKyAgICAgICAgICAgICAgICB3
aW5kb3ctPnJlc2l6ZSh3aW5kb3ctPnNpemVIaW50KCkpOwogCisgICAgICAgICAgICB3aW5kb3ct
PnNob3coKTsKKyAgICAgICAgfQorICAgICAgfQorICAKKyAgICBmaXJzdEluc3RhbmNlID0gZmFs
c2U7CisgICAgYXJncy0+Y2xlYXIoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzEzLDMgKzMy
MCwxMiBAQCBTZXNzaW9uKiBBcHBsaWNhdGlvbjo6Y3JlYXRlU2Vzc2lvbihQcm9mCiB9CiAKICNp
bmNsdWRlICJBcHBsaWNhdGlvbi5tb2MiCisKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9k
ZTogYysrCisgIGMtZmlsZS1zdHlsZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6
IG5pbAorICB0YWItd2lkdGg6IDQKKyAgRW5kOgorKi8KZGlmZiAtdXAga2RlYmFzZS00LjEuMS9h
cHBzL2tvbnNvbGUvc3JjL21haW4uY3BwLmtvbnNvbGUtc2Vzc2lvbi1tYW5hZ2VtZW50IGtkZWJh
c2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9tYWluLmNwcAotLS0ga2RlYmFzZS00LjEuMS9hcHBz
L2tvbnNvbGUvc3JjL21haW4uY3BwLmtvbnNvbGUtc2Vzc2lvbi1tYW5hZ2VtZW50CTIwMDgtMDYt
MDMgMTI6MzQ6MjQuMDAwMDAwMDAwICswMzAwCisrKyBrZGViYXNlLTQuMS4xL2FwcHMva29uc29s
ZS9zcmMvbWFpbi5jcHAJMjAwOC0xMC0wNSAxNzoyMDowMi4wMDAwMDAwMDAgKzAzMDAKQEAgLTE5
LDYgKzE5LDcgQEAKIAogLy8gT3duCiAjaW5jbHVkZSAiQXBwbGljYXRpb24uaCIKKyNpbmNsdWRl
ICJNYWluV2luZG93LmgiCiAjaW5jbHVkZSA8S0RlYnVnPgogCiAvLyBVbml4CkBAIC01MSw2ICs1
Miw3IEBAIHZvaWQgZmlsbENvbW1hbmRMaW5lT3B0aW9ucyhLQ21kTGluZU9wdGkKIGJvb2wgdXNl
VHJhbnNwYXJlbmN5KCk7ICAgICAvLyByZXR1cm5zIHRydWUgaWYgdHJhbnNwYXJlbmN5IHNob3Vs
ZCBiZSBlbmFibGVkCiBib29sIGZvcmNlTmV3UHJvY2VzcygpOyAgICAgLy8gcmV0dXJucyB0cnVl
IGlmIG5ldyBpbnN0YW5jZSBzaG91bGQgdXNlIGEgbmV3CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcHJvY2VzcyAoaW5zdGVhZCBvZiByZS11c2luZyBhbiBleGlzdGluZyBvbmUpCit2
b2lkIHJlc3RvcmVTZXNzaW9uKEFwcGxpY2F0aW9uJiBhcHApOwogCiAvLyAqKioKIC8vIEVudHJ5
IHBvaW50IGludG8gdGhlIEtvbnNvbGUgdGVybWluYWwgYXBwbGljYXRpb24uICAKQEAgLTkxLDEy
ICs5MywxNCBAQCBleHRlcm4gIkMiIGludCBLREVfRVhQT1JUIGtkZW1haW4oaW50IGFyCiAJCWdl
dERpc3BsYXlJbmZvcm1hdGlvbihkaXNwbGF5LHZpc3VhbCxjb2xvcm1hcCk7CiAKIAkJQXBwbGlj
YXRpb24gYXBwKGRpc3BsYXksKFF0OjpIQU5ETEUpdmlzdWFsLChRdDo6SEFORExFKWNvbG9ybWFw
KTsKKyAgICAgICAgcmVzdG9yZVNlc3Npb24oYXBwKTsKIAkJcmV0dXJuIGFwcC5leGVjKCk7CiAJ
fQogCWVsc2UKICNlbmRpZiAKIAl7CiAgICAgCUFwcGxpY2F0aW9uIGFwcDsKKyAgICAgICAgcmVz
dG9yZVNlc3Npb24oYXBwKTsKICAgICAJcmV0dXJuIGFwcC5leGVjKCk7CiAJfSAgIAogfQpAQCAt
MjQyLDQgKzI0NiwyMSBAQCB2b2lkIGdldERpc3BsYXlJbmZvcm1hdGlvbihEaXNwbGF5KiYgZGlz
CiB9CiAjZW5kaWYKIAordm9pZCByZXN0b3JlU2Vzc2lvbihBcHBsaWNhdGlvbiYgYXBwKQorewor
ICAgIGlmIChhcHAuaXNTZXNzaW9uUmVzdG9yZWQoKSkKKyAgICB7CisgICAgICAgIGludCBuID0g
MTsKKyAgICAgICAgd2hpbGUgKEtNYWluV2luZG93OjpjYW5CZVJlc3RvcmVkKG4pKQorICAgICAg
ICAgICAgYXBwLm5ld01haW5XaW5kb3coKS0+cmVzdG9yZShuKyspOworICAgIH0KK30KIAorLyoK
KyAgTG9jYWwgVmFyaWFibGVzOgorICBtb2RlOiBjKysKKyAgYy1maWxlLXN0eWxlOiAic3Ryb3Vz
dHJ1cCIKKyAgaW5kZW50LXRhYnMtbW9kZTogbmlsCisgIHRhYi13aWR0aDogNAorICBFbmQ6Cisq
LwpkaWZmIC11cCBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvTWFpbldpbmRvdy5jcHAu
a29uc29sZS1zZXNzaW9uLW1hbmFnZW1lbnQga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3Jj
L01haW5XaW5kb3cuY3BwCi0tLSBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvTWFpbldp
bmRvdy5jcHAua29uc29sZS1zZXNzaW9uLW1hbmFnZW1lbnQJMjAwOC0wNy0yMyAxMToyNToyOS4w
MDAwMDAwMDAgKzAzMDAKKysrIGtkZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9NYWluV2lu
ZG93LmNwcAkyMDA4LTEwLTA1IDE3OjIzOjE0LjAwMDAwMDAwMCArMDMwMApAQCAtMTksNiArMTks
NyBAQAogCiAvLyBPd24KICNpbmNsdWRlICJNYWluV2luZG93LmgiCisjaW5jbHVkZSAiU2Vzc2lv
bk1hbmFnZXIuaCIKIAogLy8gUXQKICNpbmNsdWRlIDxRdEd1aS9RQm94TGF5b3V0PgpAQCAtMzcy
LDYgKzM3MywzNCBAQCBib29sIE1haW5XaW5kb3c6OnF1ZXJ5Q2xvc2UoKQogICAgIHJldHVybiB0
cnVlOwogfQogCit2b2lkIE1haW5XaW5kb3c6OnNhdmVQcm9wZXJ0aWVzKEtDb25maWdHcm91cCYg
Z3JvdXApCit7CisgICAgaWYgKF9kZWZhdWx0UHJvZmlsZSkKKyAgICAgICAgZ3JvdXAud3JpdGVQ
YXRoRW50cnkoIkRlZmF1bHQgUHJvZmlsZSIsIF9kZWZhdWx0UHJvZmlsZS0+cGF0aCgpKTsKKyAg
ICBfdmlld01hbmFnZXItPnNhdmVTZXNzaW9ucyhncm91cCk7Cit9CisKK3ZvaWQgTWFpbldpbmRv
dzo6cmVhZFByb3BlcnRpZXMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sKKyAgICBTZXNz
aW9uTWFuYWdlciAqbWFuYWdlciA9IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpOworICAgIFFT
dHJpbmcgcHJvZmlsZVBhdGggPSBncm91cC5yZWFkUGF0aEVudHJ5KCJEZWZhdWx0IFByb2ZpbGUi
LCBRU3RyaW5nKCkpOworICAgIFByb2ZpbGU6OlB0ciBwcm9maWxlID0gbWFuYWdlci0+ZGVmYXVs
dFByb2ZpbGUoKTsKKyAgICBpZiAoIXByb2ZpbGVQYXRoLmlzRW1wdHkoKSkgCisgICAgICAgIHBy
b2ZpbGUgPSBtYW5hZ2VyLT5sb2FkUHJvZmlsZShwcm9maWxlUGF0aCk7CisgICAgc2V0RGVmYXVs
dFByb2ZpbGUocHJvZmlsZSk7CisgICAgX3ZpZXdNYW5hZ2VyLT5yZXN0b3JlU2Vzc2lvbnMoZ3Jv
dXApOworfQorCit2b2lkIE1haW5XaW5kb3c6OnNhdmVHbG9iYWxQcm9wZXJ0aWVzKEtDb25maWcq
IGNvbmZpZykKK3sKKyAgICBTZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2UoKS0+c2F2ZVNlc3Npb25z
KGNvbmZpZyk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6cmVhZEdsb2JhbFByb3BlcnRpZXMoS0Nv
bmZpZyogY29uZmlnKQoreworICAgIFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5yZXN0b3Jl
U2Vzc2lvbnMoY29uZmlnKTsKK30KKwogdm9pZCBNYWluV2luZG93OjpzaG93U2hvcnRjdXRzRGlh
bG9nKCkKIHsKICAgICBLU2hvcnRjdXRzRGlhbG9nOjpjb25maWd1cmUoIGFjdGlvbkNvbGxlY3Rp
b24oKSAsCkBAIC00MTksMyArNDQ4LDEyIEBAIHZvaWQgTWFpbldpbmRvdzo6Y29uZmlndXJlTm90
aWZpY2F0aW9ucygKIH0KIAogI2luY2x1ZGUgIk1haW5XaW5kb3cubW9jIgorCisvKgorICBMb2Nh
bCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6ICJzdHJvdXN0cnVwIgor
ICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0CisgIEVuZDoKKyovCmRpZmYg
LXVwIGtkZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9NYWluV2luZG93Lmgua29uc29sZS1z
ZXNzaW9uLW1hbmFnZW1lbnQga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL01haW5XaW5k
b3cuaAotLS0ga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL01haW5XaW5kb3cuaC5rb25z
b2xlLXNlc3Npb24tbWFuYWdlbWVudAkyMDA4LTA3LTAzIDA4OjA1OjE3LjAwMDAwMDAwMCArMDMw
MAorKysga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL01haW5XaW5kb3cuaAkyMDA4LTEw
LTA1IDE3OjE3OjI4LjAwMDAwMDAwMCArMDMwMApAQCAtMTMyLDYgKzEzMiwxMCBAQCBjbGFzcyBN
YWluV2luZG93IDogcHVibGljIEtYbWxHdWlXaW5kb3cKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IC8vIHJlaW1wbGVtZW50ZWQgZnJvbSBLTWFpbldpbmRvdwogICAgICAgICB2aXJ0dWFsIGJvb2wg
cXVlcnlDbG9zZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVByb3BlcnRpZXMoS0NvbmZp
Z0dyb3VwJiBncm91cCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWFkUHJvcGVydGllcyhjb25z
dCBLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNhdmVHbG9iYWxQ
cm9wZXJ0aWVzKEtDb25maWcqIGNvbmZpZyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWFkR2xv
YmFsUHJvcGVydGllcyhLQ29uZmlnKiBjb25maWcpOwogCiAgICAgcHJpdmF0ZSBzbG90czoKICAg
ICAgICAgdm9pZCBuZXdUYWIoKTsKQEAgLTE3NiwzICsxODAsMTIgQEAgY2xhc3MgTWFpbldpbmRv
dyA6IHB1YmxpYyBLWG1sR3VpV2luZG93CiB9CiAKICNlbmRpZiAvLyBLT05TT0xFTUFJTldJTkRP
V19ICisKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogYysrCisgIGMtZmlsZS1zdHls
ZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5pbAorICB0YWItd2lkdGg6IDQK
KyAgRW5kOgorKi8KZGlmZiAtdXAga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Byb2Nl
c3NJbmZvLmNwcC5rb25zb2xlLXNlc3Npb24tbWFuYWdlbWVudCBrZGViYXNlLTQuMS4xL2FwcHMv
a29uc29sZS9zcmMvUHJvY2Vzc0luZm8uY3BwCi0tLSBrZGViYXNlLTQuMS4xL2FwcHMva29uc29s
ZS9zcmMvUHJvY2Vzc0luZm8uY3BwLmtvbnNvbGUtc2Vzc2lvbi1tYW5hZ2VtZW50CTIwMDgtMDct
MDMgMDg6MDU6MTcuMDAwMDAwMDAwICswMzAwCisrKyBrZGViYXNlLTQuMS4xL2FwcHMva29uc29s
ZS9zcmMvUHJvY2Vzc0luZm8uY3BwCTIwMDgtMTAtMDUgMTc6MTc6MjguMDAwMDAwMDAwICswMzAw
CkBAIC02NCwxOCArNjQsMTAgQEAgdm9pZCBQcm9jZXNzSW5mbzo6dXBkYXRlKCkgCiAgICAgcmVh
ZFByb2Nlc3NJbmZvKF9waWQsX2VuYWJsZUVudmlyb25tZW50UmVhZCk7CiB9CiAKLVFTdHJpbmcg
UHJvY2Vzc0luZm86OmZvcm1hdChjb25zdCBRU3RyaW5nJiBpbnB1dCkgY29uc3QKK1FTdHJpbmcg
UHJvY2Vzc0luZm86OnZhbGlkQ3VycmVudERpcigpIGNvbnN0CiB7CiAgICBib29sIG9rID0gZmFs
c2U7CiAKLSAgIFFTdHJpbmcgb3V0cHV0KGlucHV0KTsKLQotICAgLy8gc2VhcmNoIGZvciBhbmQg
cmVwbGFjZSBrbm93biBtYXJrZXIKLSAgIG91dHB1dC5yZXBsYWNlKCIldSIsIk5PVCBJTVBMRU1F
TlRFRCBZRVQiKTsKLSAgIG91dHB1dC5yZXBsYWNlKCIlbiIsbmFtZSgmb2spKTsKLSAgIG91dHB1
dC5yZXBsYWNlKCIlYyIsZm9ybWF0Q29tbWFuZChuYW1lKCZvayksYXJndW1lbnRzKCZvayksU2hv
cnRDb21tYW5kRm9ybWF0KSk7Ci0gICBvdXRwdXQucmVwbGFjZSgiJUMiLGZvcm1hdENvbW1hbmQo
bmFtZSgmb2spLGFyZ3VtZW50cygmb2spLExvbmdDb21tYW5kRm9ybWF0KSk7Ci0gICAKICAgIC8v
IHJlYWQgY3VycmVudCBkaXIsIGlmIGFuIGVycm9yIG9jY3VycyB0cnkgdGhlIHBhcmVudCBhcyB0
aGUgbmV4dAogICAgLy8gYmVzdCBvcHRpb24KICAgIGludCBjdXJyZW50UGlkID0gcGFyZW50UGlk
KCZvayk7CkBAIC04OCw3ICs4MCwyMyBAQCBRU3RyaW5nIFByb2Nlc3NJbmZvOjpmb3JtYXQoY29u
c3QgUVN0cmluCiAgICAgICAgZGlyID0gY3VycmVudC0+Y3VycmVudERpcigmb2spOwogICAgICAg
IGRlbGV0ZSBjdXJyZW50OwogICAgfQotICAgICAgICAKKworICAgcmV0dXJuIGRpcjsKK30KKwor
UVN0cmluZyBQcm9jZXNzSW5mbzo6Zm9ybWF0KGNvbnN0IFFTdHJpbmcmIGlucHV0KSBjb25zdAor
eworICAgYm9vbCBvayA9IGZhbHNlOworCisgICBRU3RyaW5nIG91dHB1dChpbnB1dCk7CisKKyAg
IC8vIHNlYXJjaCBmb3IgYW5kIHJlcGxhY2Uga25vd24gbWFya2VyCisgICBvdXRwdXQucmVwbGFj
ZSgiJXUiLCJOT1QgSU1QTEVNRU5URUQgWUVUIik7CisgICBvdXRwdXQucmVwbGFjZSgiJW4iLG5h
bWUoJm9rKSk7CisgICBvdXRwdXQucmVwbGFjZSgiJWMiLGZvcm1hdENvbW1hbmQobmFtZSgmb2sp
LGFyZ3VtZW50cygmb2spLFNob3J0Q29tbWFuZEZvcm1hdCkpOworICAgb3V0cHV0LnJlcGxhY2Uo
IiVDIixmb3JtYXRDb21tYW5kKG5hbWUoJm9rKSxhcmd1bWVudHMoJm9rKSxMb25nQ29tbWFuZEZv
cm1hdCkpOworICAgCisgICBRU3RyaW5nIGRpciA9IHZhbGlkQ3VycmVudERpcigpOwogICAgb3V0
cHV0LnJlcGxhY2UoIiVEIixkaXIpOwogICAgb3V0cHV0LnJlcGxhY2UoIiVkIixmb3JtYXRTaG9y
dERpcihkaXIpKTsKICAgIApAQCAtNzMxLDMgKzczOSwxMSBAQCBQcm9jZXNzSW5mbyogUHJvY2Vz
c0luZm86Om5ld0luc3RhbmNlKGluCiAjZW5kaWYKIH0KIAorLyoKKyAgTG9jYWwgVmFyaWFibGVz
OgorICBtb2RlOiBjKysKKyAgYy1maWxlLXN0eWxlOiAic3Ryb3VzdHJ1cCIKKyAgaW5kZW50LXRh
YnMtbW9kZTogbmlsCisgIHRhYi13aWR0aDogNAorICBFbmQ6CisqLwpkaWZmIC11cCBrZGViYXNl
LTQuMS4xL2FwcHMva29uc29sZS9zcmMvUHJvY2Vzc0luZm8uaC5rb25zb2xlLXNlc3Npb24tbWFu
YWdlbWVudCBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvUHJvY2Vzc0luZm8uaAotLS0g
a2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Byb2Nlc3NJbmZvLmgua29uc29sZS1zZXNz
aW9uLW1hbmFnZW1lbnQJMjAwOC0wNi0yNiAwNDozMzowNy4wMDAwMDAwMDAgKzAzMDAKKysrIGtk
ZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9Qcm9jZXNzSW5mby5oCTIwMDgtMTAtMDUgMTc6
MTc6MjguMDAwMDAwMDAwICswMzAwCkBAIC0xNTIsNiArMTUyLDExIEBAIHB1YmxpYzoKICAgICBR
U3RyaW5nIGN1cnJlbnREaXIoYm9vbCogb2spIGNvbnN0OwogCiAgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgcHJvY2VzcyAob3IgaXRz
IHBhcmVudCkKKyAgICAgKi8KKyAgICBRU3RyaW5nIHZhbGlkQ3VycmVudERpcigpIGNvbnN0Owor
CisgICAgLyoqCiAgICAgICogUGFyc2VzIGFuIGlucHV0IHN0cmluZywgbG9va2luZyBmb3IgbWFy
a2VycyBiZWdpbm5pbmcgd2l0aCBhICclJyAKICAgICAgKiBjaGFyYWN0ZXIgYW5kIHJldHVybnMg
YSBzdHJpbmcgd2l0aCB0aGUgbWFya2VycyByZXBsYWNlZAogICAgICAqIHdpdGggaW5mb3JtYXRp
b24gZnJvbSB0aGlzIHByb2Nlc3MgZGVzY3JpcHRpb24uCkBAIC00MjQsMyArNDI5LDEyIEBAIHBy
aXZhdGU6CiAKIH0KICNlbmRpZiAvL1BST0NFU1NJTkZPX0gKKworLyoKKyAgTG9jYWwgVmFyaWFi
bGVzOgorICBtb2RlOiBjKysKKyAgYy1maWxlLXN0eWxlOiAic3Ryb3VzdHJ1cCIKKyAgaW5kZW50
LXRhYnMtbW9kZTogbmlsCisgIHRhYi13aWR0aDogNAorICBFbmQ6CisqLwpkaWZmIC11cCBrZGVi
YXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuY3BwLmtvbnNvbGUt
c2Vzc2lvbi1tYW5hZ2VtZW50IGtkZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9TZXNzaW9u
Q29udHJvbGxlci5jcHAKLS0tIGtkZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9TZXNzaW9u
Q29udHJvbGxlci5jcHAua29uc29sZS1zZXNzaW9uLW1hbmFnZW1lbnQJMjAwOC0wNS0wNyAxMjow
NToyMS4wMDAwMDAwMDAgKzAzMDAKKysrIGtkZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9T
ZXNzaW9uQ29udHJvbGxlci5jcHAJMjAwOC0xMC0wNSAxNzoxOToxMS4wMDAwMDAwMDAgKzAzMDAK
QEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICJJbmNyZW1lbnRhbFNlYXJjaEJhci5oIgogI2lu
Y2x1ZGUgIlNjcmVlbldpbmRvdy5oIgogI2luY2x1ZGUgIlNlc3Npb24uaCIKLSNpbmNsdWRlICJQ
cm9jZXNzSW5mby5oIgogI2luY2x1ZGUgIlByb2ZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiVGVybWlu
YWxEaXNwbGF5LmgiCiAjaW5jbHVkZSAiU2Vzc2lvbk1hbmFnZXIuaCIKQEAgLTE5OSw0MyArMTk4
LDggQEAgdm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6c25hcHNob3QoKQogewogICAgIFFfQVNTRVJU
KCBfc2Vzc2lvbiAhPSAwICk7CiAKLSAgICBQcm9jZXNzSW5mbyogcHJvY2VzcyA9IDA7Ci0gICAg
UHJvY2Vzc0luZm8qIHNuYXBzaG90ID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNlKF9zZXNzaW9u
LT5wcm9jZXNzSWQoKSk7Ci0gICAgc25hcHNob3QtPnVwZGF0ZSgpOwotCi0gICAgLy8gdXNlIGZv
cmVncm91bmQgcHJvY2VzcyBpbmZvcm1hdGlvbiBpZiBhdmFpbGFibGUKLSAgICAvLyBmYWxsYmFj
ayB0byBzZXNzaW9uIHByb2Nlc3Mgb3RoZXJ3aXNlCi0gICAgaW50IHBpZCA9IF9zZXNzaW9uLT5m
b3JlZ3JvdW5kUHJvY2Vzc0lkKCk7IC8vc25hcHNob3QtPmZvcmVncm91bmRQaWQoJm9rKTsKLSAg
ICBpZiAoIHBpZCAhPSAwICkKLSAgICB7Ci0gICAgICAgcHJvY2VzcyA9IFByb2Nlc3NJbmZvOjpu
ZXdJbnN0YW5jZShwaWQpOwotICAgICAgIHByb2Nlc3MtPnVwZGF0ZSgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgICAgcHJvY2VzcyA9IHNuYXBzaG90OwotCi0gICAgYm9vbCBvayA9IGZhbHNlOwot
Ci0gICAgLy8gZm9ybWF0IHRhYiB0aXRsZXMgdXNpbmcgcHJvY2VzcyBpbmZvCi0gICAgUVN0cmlu
ZyB0aXRsZTsKLSAgICBpZiAoIHByb2Nlc3MtPm5hbWUoJm9rKSA9PSAic3NoIiAmJiBvayApCi0g
ICAgewotICAgICAgICBTU0hQcm9jZXNzSW5mbyBzc2hJbmZvKCpwcm9jZXNzKTsKLSAgICAgICAg
dGl0bGUgPSBzc2hJbmZvLmZvcm1hdChfc2Vzc2lvbi0+dGFiVGl0bGVGb3JtYXQoU2Vzc2lvbjo6
UmVtb3RlVGFiVGl0bGUpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICB0aXRsZSA9IHByb2Nl
c3MtPmZvcm1hdChfc2Vzc2lvbi0+dGFiVGl0bGVGb3JtYXQoU2Vzc2lvbjo6TG9jYWxUYWJUaXRs
ZSkgKSA7Ci0KLQotICAgIGlmICggc25hcHNob3QgIT0gcHJvY2VzcyApCi0gICAgewotICAgICAg
ICBkZWxldGUgc25hcHNob3Q7Ci0gICAgICAgIGRlbGV0ZSBwcm9jZXNzOwotICAgIH0KLSAgICBl
bHNlCi0gICAgICAgIGRlbGV0ZSBzbmFwc2hvdDsKLQotCXRpdGxlID0gdGl0bGUuc2ltcGxpZmll
ZCgpOworICAgIFFTdHJpbmcgdGl0bGUgPSBfc2Vzc2lvbi0+Z2V0RHluYW1pY1RpdGxlKCk7Cisg
ICAgdGl0bGUgICAgICAgICA9IHRpdGxlLnNpbXBsaWZpZWQoKTsKIAogCS8vIGNydWRlIGluZGlj
YXRvciB3aGVuIHRoZSBzZXNzaW9uIGlzIGJyb2FkY2FzdGluZyB0byBvdGhlcnMKIAlpZiAoX2Nv
cHlUb0dyb3VwICYmIF9jb3B5VG9Hcm91cC0+c2Vzc2lvbnMoKS5jb3VudCgpID4gMSkKQEAgLTI1
MCw2NCArMjE0LDEyIEBAIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OnNuYXBzaG90KCkKIAogUVN0
cmluZyBTZXNzaW9uQ29udHJvbGxlcjo6Y3VycmVudERpcigpIGNvbnN0CiB7Ci0gICAgUHJvY2Vz
c0luZm8qIGluZm8gPSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UoX3Nlc3Npb24tPnByb2Nlc3NJ
ZCgpKTsKLSAgICBpbmZvLT51cGRhdGUoKTsKLQotICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICBR
U3RyaW5nIHBhdGggPSBpbmZvLT5jdXJyZW50RGlyKCZvayk7Ci0KLSAgICBkZWxldGUgaW5mbzsK
LQotICAgIGlmICggb2sgKQotICAgICAgICByZXR1cm4gcGF0aDsKLSAgICBlbHNlCi0gICAgICAg
IHJldHVybiBRU3RyaW5nKCk7CisgICAgcmV0dXJuIF9zZXNzaW9uLT5jdXJyZW50V29ya2luZ0Rp
cmVjdG9yeSgpOwogfQogCiBLVXJsIFNlc3Npb25Db250cm9sbGVyOjp1cmwoKSBjb25zdAogewot
ICAgIFByb2Nlc3NJbmZvKiBpbmZvID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNlKF9zZXNzaW9u
LT5wcm9jZXNzSWQoKSk7Ci0gICAgaW5mby0+dXBkYXRlKCk7Ci0KLSAgICBRU3RyaW5nIHBhdGg7
Ci0gICAgaWYgKCBpbmZvLT5pc1ZhbGlkKCkgKQotICAgIHsKLSAgICAgICAgYm9vbCBvayA9IGZh
bHNlOwotCi0gICAgICAgIC8vIGNoZWNrIGlmIGZvcmVncm91bmQgcHJvY2VzcyBpcyBib29rbWFy
ay1hYmxlCi0gICAgICAgIGludCBwaWQgPSBfc2Vzc2lvbi0+Zm9yZWdyb3VuZFByb2Nlc3NJZCgp
OwotICAgICAgICBpZiAoIHBpZCAhPSAwICkKLSAgICAgICAgewotICAgICAgICAgICAgUHJvY2Vz
c0luZm8qIGZvcmVncm91bmRJbmZvID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNlKHBpZCk7Ci0g
ICAgICAgICAgICBmb3JlZ3JvdW5kSW5mby0+dXBkYXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIGZv
ciByZW1vdGUgY29ubmVjdGlvbnMsIHNhdmUgdGhlIHVzZXIgYW5kIGhvc3QKLSAgICAgICAgICAg
IC8vIGJyaWdodCBpZGVhcyB0byBnZXQgdGhlIGRpcmVjdG9yeSBhdCB0aGUgb3RoZXIgZW5kIGFy
ZSB3ZWxjb21lIDopCi0gICAgICAgICAgICBpZiAoIGZvcmVncm91bmRJbmZvLT5uYW1lKCZvaykg
PT0gInNzaCIgJiYgb2sgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNTSFByb2Nl
c3NJbmZvIHNzaEluZm8oKmZvcmVncm91bmRJbmZvKTsKLSAgICAgICAgICAgICAgICBwYXRoID0g
InNzaDovLyIgKyBzc2hJbmZvLnVzZXJOYW1lKCkgKyAnQCcgKyBzc2hJbmZvLmhvc3QoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBwYXRoID0gZm9yZWdyb3VuZEluZm8tPmN1cnJlbnREaXIoJm9rKTsKLQotICAgICAgICAg
ICAgICAgIGlmICghb2spCi0gICAgICAgICAgICAgICAgICAgIHBhdGguY2xlYXIoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZGVsZXRlIGZvcmVncm91bmRJbmZvOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgLy8gb3RoZXJ3aXNlIHVzZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVj
dG9yeSBvZiB0aGUgc2hlbGwgcHJvY2VzcwotICAgICAgICB7Ci0gICAgICAgICAgICBwYXRoID0g
aW5mby0+Y3VycmVudERpcigmb2spOwotICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAg
ICAgICBwYXRoLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZWxldGUgaW5mbzsK
LSAgICByZXR1cm4gS1VybCggcGF0aCApOworICAgIHJldHVybiBfc2Vzc2lvbi0+Z2V0VXJsKCk7
CiB9CiAKIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OnJlbmFtZSgpCkBAIC01ODAsMTEgKzQ5Miw2
IEBAIHZvaWQgU2Vzc2lvbkNvbnRyb2xsZXI6OnNldHVwQWN0aW9ucygpCiAgICAgX2NoYW5nZVBy
b2ZpbGVNZW51ID0gbmV3IEtNZW51KGkxOG4oIkNoYW5nZSBQcm9maWxlIiksX3ZpZXcpOwogICAg
IGNvbGxlY3Rpb24tPmFkZEFjdGlvbigiY2hhbmdlLXByb2ZpbGUiLF9jaGFuZ2VQcm9maWxlTWVu
dS0+bWVudUFjdGlvbigpKTsKICAgICBjb25uZWN0KCBfY2hhbmdlUHJvZmlsZU1lbnUgLCBTSUdO
QUwoYWJvdXRUb1Nob3coKSkgLCB0aGlzICwgU0xPVChwcmVwYXJlQ2hhbmdlUHJvZmlsZU1lbnUo
KSkgKTsKLQotICAgIC8vIGRlYnVnZ2luZyB0b29scwotICAgIC8vYWN0aW9uID0gY29sbGVjdGlv
bi0+YWRkQWN0aW9uKCJkZWJ1Zy1wcm9jZXNzIik7Ci0gICAgLy9hY3Rpb24tPnNldFRleHQoICJH
ZXQgRm9yZWdyb3VuZCBQcm9jZXNzIiApOwotICAgIC8vY29ubmVjdCggYWN0aW9uICwgU0lHTkFM
KHRyaWdnZXJlZCgpKSAsIHRoaXMgLCBTTE9UKGRlYnVnUHJvY2VzcygpKSApOwogfQogdm9pZCBT
ZXNzaW9uQ29udHJvbGxlcjo6Y2hhbmdlUHJvZmlsZShQcm9maWxlOjpQdHIgcHJvZmlsZSkKIHsK
QEAgLTYxMCw0MCArNTE3LDYgQEAgdm9pZCBTZXNzaW9uQ29udHJvbGxlcjo6Y2hhbmdlQ29kZWMo
UVRleAogewogICAgIF9zZXNzaW9uLT5zZXRDb2RlYyhjb2RlYyk7CiB9Ci12b2lkIFNlc3Npb25D
b250cm9sbGVyOjpkZWJ1Z1Byb2Nlc3MoKQotewotICAgIC8vIHRlc3RpbmcgZmFjaWxpdHkgdG8g
cmV0cmlldmUgcHJvY2VzcyBpbmZvcm1hdGlvbiBhYm91dAotICAgIC8vIGN1cnJlbnRseSBhY3Rp
dmUgcHJvY2VzcyBpbiB0aGUgc2hlbGwKLSAgICBQcm9jZXNzSW5mbyogc2Vzc2lvblByb2Nlc3Mg
PSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UoX3Nlc3Npb24tPnByb2Nlc3NJZCgpKTsKLSAgICBz
ZXNzaW9uUHJvY2Vzcy0+dXBkYXRlKCk7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgaW50
IGZwaWQgPSBzZXNzaW9uUHJvY2Vzcy0+Zm9yZWdyb3VuZFBpZCgmb2spOwotCi0gICAgaWYgKCBv
ayApCi0gICAgewotICAgICAgICBQcm9jZXNzSW5mbyogZnAgPSBQcm9jZXNzSW5mbzo6bmV3SW5z
dGFuY2UoZnBpZCk7Ci0gICAgICAgIGZwLT51cGRhdGUoKTsKLQotICAgICAgICBRU3RyaW5nIG5h
bWUgPSBmcC0+bmFtZSgmb2spOwotCi0gICAgICAgIGlmICggb2sgKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBfc2Vzc2lvbi0+c2V0VGl0bGUoU2Vzc2lvbjo6RGlzcGxheWVkVGl0bGVSb2xlLG5h
bWUpOwotICAgICAgICAgICAgc2Vzc2lvblRpdGxlQ2hhbmdlZCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUVN0cmluZyBjdXJyZW50RGlyID0gZnAtPmN1cnJlbnREaXIoJm9rKTsKLQotICAgICAg
ICBpZiAoIG9rICkKLSAgICAgICAgICAgIGtEZWJ1ZygxMjExKSA8PCBjdXJyZW50RGlyOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBrRGVidWcoMTIxMSkgPDwgImNvdWxkIG5vdCByZWFkIGN1
cnJlbnQgZGlyIG9mIGZvcmVncm91bmQgcHJvY2VzcyI7Ci0KLSAgICAgICAgZGVsZXRlIGZwOwot
ICAgIH0KLSAgICBkZWxldGUgc2Vzc2lvblByb2Nlc3M7Ci19CiAKIHZvaWQgU2Vzc2lvbkNvbnRy
b2xsZXI6OmVkaXRDdXJyZW50UHJvZmlsZSgpCiB7CkBAIC02ODcsMTMgKzU2MCw5IEBAIHZvaWQg
U2Vzc2lvbkNvbnRyb2xsZXI6OnNhdmVTZXNzaW9uKCkKIH0KIGJvb2wgU2Vzc2lvbkNvbnRyb2xs
ZXI6OmNvbmZpcm1DbG9zZSgpIGNvbnN0CiB7Ci0gICAgaWYgKF9zZXNzaW9uLT5mb3JlZ3JvdW5k
UHJvY2Vzc0lkKCkgIT0gX3Nlc3Npb24tPnByb2Nlc3NJZCgpKQorICAgIGlmIChfc2Vzc2lvbi0+
aXNDaGlsZEFjdGl2ZSgpKQogICAgIHsKLSAgICAgICAgUHJvY2Vzc0luZm8qIGZvcmVncm91bmRJ
bmZvID0gUHJvY2Vzc0luZm86Om5ld0luc3RhbmNlKF9zZXNzaW9uLT5mb3JlZ3JvdW5kUHJvY2Vz
c0lkKCkpOwotICAgICAgICBmb3JlZ3JvdW5kSW5mby0+dXBkYXRlKCk7Ci0gICAgICAgIGJvb2wg
b2sgPSBmYWxzZTsKLSAgICAgICAgUVN0cmluZyB0aXRsZSA9IGZvcmVncm91bmRJbmZvLT5uYW1l
KCZvayk7Ci0gICAgICAgIGRlbGV0ZSBmb3JlZ3JvdW5kSW5mbzsKKyAgICAgICAgUVN0cmluZyB0
aXRsZSA9IF9zZXNzaW9uLT5jaGlsZE5hbWUoKTsKICAgICAgIAogICAgICAgICAvLyBoYXJkIGNv
ZGVkIGZvciBub3cuICBJbiBmdXR1cmUgbWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlIHVzZXIgdG8g
c3BlY2lmeSB3aGljaCBwcm9ncmFtcwogICAgICAgICAvLyBhcmUgaWdub3JlZCB3aGVuIGNvbnNp
ZGVyaW5nIHdoZXRoZXIgdG8gZGlzcGxheSBhIGNvbmZpcm1hdGlvbgpAQCAtNzAzLDEyICs1NzIs
MTIgQEAgYm9vbCBTZXNzaW9uQ29udHJvbGxlcjo6Y29uZmlybUNsb3NlKCkgYwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgUVN0cmluZyBxdWVzdGlvbjsKLSAgICAgICAgaWYg
KG9rKQotICAgICAgICAgICAgcXVlc3Rpb24gPSBpMThuKCJUaGUgcHJvZ3JhbSAnJTEnIGlzIGN1
cnJlbnRseSBydW5uaW5nIGluIHRoaXMgc2Vzc2lvbi4iICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2xvc2UgaXQ/Iix0aXRsZSk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHF1
ZXN0aW9uID0gaTE4bigiQSBwcm9ncmFtIGlzIGN1cnJlbnRseSBydW5uaW5nIGluIHRoaXMgc2Vz
c2lvbi4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgQXJlIHlvdSBzdXJlIHlvdSB3
YW50IHRvIGNsb3NlIGl0PyIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBxdWVzdGlvbiA9
IGkxOG4oIlRoZSBwcm9ncmFtICclMScgaXMgY3VycmVudGx5IHJ1bm5pbmcgaW4gdGhpcyBzZXNz
aW9uLiIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIEFyZSB5b3Ugc3VyZSB5b3Ug
d2FudCB0byBjbG9zZSBpdD8iLHRpdGxlKTsKIAogICAgICAgICBpbnQgcmVzdWx0ID0gS01lc3Nh
Z2VCb3g6Ondhcm5pbmdZZXNObyhfdmlldy0+d2luZG93KCkscXVlc3Rpb24saTE4bigiQ29uZmly
bSBDbG9zZSIpKTsKICAgICAgICAgcmV0dXJuIChyZXN1bHQgPT0gS01lc3NhZ2VCb3g6Olllcykg
PyB0cnVlIDogZmFsc2U7IApAQCAtMTQ4NiwzICsxMzU1LDEyIEBAIFFSZWdFeHAgU2VhcmNoSGlz
dG9yeVRhc2s6OnJlZ0V4cCgpIGNvbnMKIH0KIAogI2luY2x1ZGUgIlNlc3Npb25Db250cm9sbGVy
Lm1vYyIKKworLyoKKyAgTG9jYWwgVmFyaWFibGVzOgorICBtb2RlOiBjKysKKyAgYy1maWxlLXN0
eWxlOiAic3Ryb3VzdHJ1cCIKKyAgaW5kZW50LXRhYnMtbW9kZTogbmlsCisgIHRhYi13aWR0aDog
NAorICBFbmQ6CisqLwpkaWZmIC11cCBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvU2Vz
c2lvbkNvbnRyb2xsZXIuaC5rb25zb2xlLXNlc3Npb24tbWFuYWdlbWVudCBrZGViYXNlLTQuMS4x
L2FwcHMva29uc29sZS9zcmMvU2Vzc2lvbkNvbnRyb2xsZXIuaAotLS0ga2RlYmFzZS00LjEuMS9h
cHBzL2tvbnNvbGUvc3JjL1Nlc3Npb25Db250cm9sbGVyLmgua29uc29sZS1zZXNzaW9uLW1hbmFn
ZW1lbnQJMjAwOC0wNS0wNyAxMjowNToyMS4wMDAwMDAwMDAgKzAzMDAKKysrIGtkZWJhc2UtNC4x
LjEvYXBwcy9rb25zb2xlL3NyYy9TZXNzaW9uQ29udHJvbGxlci5oCTIwMDgtMTAtMDUgMTc6MTc6
MjguMDAwMDAwMDAwICswMzAwCkBAIC0yMTAsOSArMjEwLDYgQEAgcHJpdmF0ZSBzbG90czoKIAog
CXZvaWQgdXBkYXRlU2VhcmNoRmlsdGVyKCk7CiAKLSAgICAvLyBkZWJ1Z2dpbmcgc2xvdHMKLSAg
ICB2b2lkIGRlYnVnUHJvY2VzcygpOwotCiBwcml2YXRlOgogICAgIC8vIGJlZ2lucyB0aGUgc2Vh
cmNoCiAgICAgLy8gdGV4dCAtIHBhdHRlcm4gdG8gc2VhcmNoIGZvcgpAQCAtNDQwLDMgKzQzNywx
MiBAQCBwcml2YXRlOgogfQogCiAjZW5kaWYgLy9TRVNTSU9OQ09OVFJPTExFUl9ICisKKy8qCisg
IExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogYysrCisgIGMtZmlsZS1zdHlsZTogInN0cm91c3Ry
dXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5pbAorICB0YWItd2lkdGg6IDQKKyAgRW5kOgorKi8K
ZGlmZiAtdXAga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Nlc3Npb24uY3BwLmtvbnNv
bGUtc2Vzc2lvbi1tYW5hZ2VtZW50IGtkZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9TZXNz
aW9uLmNwcAotLS0ga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Nlc3Npb24uY3BwLmtv
bnNvbGUtc2Vzc2lvbi1tYW5hZ2VtZW50CTIwMDgtMDYtMTggMTU6NDE6MjEuMDAwMDAwMDAwICsw
MzAwCisrKyBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvU2Vzc2lvbi5jcHAJMjAwOC0x
MC0wNSAxNzoyNjo1Ni4wMDAwMDAwMDAgKzAzMDAKQEAgLTQ3LDExICs0NywxMyBAQAogI2luY2x1
ZGUgPEtSdW4+CiAjaW5jbHVkZSA8a3NoZWxsLmg+CiAjaW5jbHVkZSA8S1N0YW5kYXJkRGlycz4K
KyNpbmNsdWRlIDxLVXJsPgogCiAvLyBLb25zb2xlCiAjaW5jbHVkZSA8Y29uZmlnLWtvbnNvbGUu
aD4KICNpbmNsdWRlIDxzZXNzaW9uYWRhcHRvci5oPgogCisjaW5jbHVkZSAiUHJvY2Vzc0luZm8u
aCIKICNpbmNsdWRlICJQdHkuaCIKICNpbmNsdWRlICJUZXJtaW5hbERpc3BsYXkuaCIKICNpbmNs
dWRlICJTaGVsbENvbW1hbmQuaCIKQEAgLTc2LDYgKzc4LDkgQEAgU2Vzc2lvbjo6U2Vzc2lvbihR
T2JqZWN0KiBwYXJlbnQpIDoKICAgICwgX2Zsb3dDb250cm9sKHRydWUpCiAgICAsIF9mdWxsU2Ny
aXB0aW5nKGZhbHNlKQogICAgLCBfc2Vzc2lvbklkKDApCisgICAsIF9zZXNzaW9uUHJvY2Vzc0lu
Zm8oMCkKKyAgICwgX2ZvcmVncm91bmRQcm9jZXNzSW5mbygwKQorICAgLCBfZm9yZWdyb3VuZFBp
ZCgwKQogICAgLCBfem1vZGVtQnVzeShmYWxzZSkKICAgICwgX3ptb2RlbVByb2MoMCkKICAgICwg
X3ptb2RlbVByb2dyZXNzKDApCkBAIC0xOTksNiArMjA0LDE5IEBAIHZvaWQgU2Vzc2lvbjo6c2V0
QXJndW1lbnRzKGNvbnN0IFFTdHJpbmcKICAgICBfYXJndW1lbnRzID0gU2hlbGxDb21tYW5kOjpl
eHBhbmQoYXJndW1lbnRzKTsKIH0KIAorUVN0cmluZyBTZXNzaW9uOjpjdXJyZW50V29ya2luZ0Rp
cmVjdG9yeSgpCit7CisgICAgLy8gb25seSByZXR1cm5lZCBjYWNoZWQgdmFsdWUKKyAgICBpZiAo
X2N1cnJlbnRXb3JraW5nRGlyLmlzRW1wdHkoKSkgdXBkYXRlV29ya2luZ0RpcmVjdG9yeSgpOwor
ICAgIHJldHVybiBfY3VycmVudFdvcmtpbmdEaXI7Cit9CitQcm9jZXNzSW5mbyogU2Vzc2lvbjo6
dXBkYXRlV29ya2luZ0RpcmVjdG9yeSgpCit7CisgICAgUHJvY2Vzc0luZm8gKnByb2Nlc3MgPSBn
ZXRQcm9jZXNzSW5mbygpOworICAgIF9jdXJyZW50V29ya2luZ0RpciA9IHByb2Nlc3MtPnZhbGlk
Q3VycmVudERpcigpOworICAgIHJldHVybiBwcm9jZXNzOworfQorCiBRTGlzdDxUZXJtaW5hbERp
c3BsYXkqPiBTZXNzaW9uOjp2aWV3cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIF92aWV3czsKQEAg
LTMyMSw5ICszMzksMTMgQEAgdm9pZCBTZXNzaW9uOjpydW4oKQogewogICAvL2NoZWNrIHRoYXQg
ZXZlcnl0aGluZyBpcyBpbiBwbGFjZSB0byBydW4gdGhlIHNlc3Npb24KICAgaWYgKF9wcm9ncmFt
LmlzRW1wdHkoKSkKKyAgewogICAgICAga0RlYnVnKCkgPDwgIlNlc3Npb246OnJ1bigpIC0gcHJv
Z3JhbSB0byBydW4gbm90IHNldC4iOworICB9CiAgIGlmIChfYXJndW1lbnRzLmlzRW1wdHkoKSkK
KyAgewogICAgICAga0RlYnVnKCkgPDwgIlNlc3Npb246OnJ1bigpIC0gbm8gY29tbWFuZCBsaW5l
IGFyZ3VtZW50cyBzcGVjaWZpZWQuIjsKKyAgfQogCiAgIGNvbnN0IGludCBDSE9JQ0VfQ09VTlQg
PSAzOwogICBRU3RyaW5nIHByb2dyYW1zW0NIT0lDRV9DT1VOVF0gPSB7X3Byb2dyYW0sZ2V0ZW52
KCJTSEVMTCIpLCIvYmluL3NoIn07CkBAIC02NDgsNiArNjcwLDEwIEBAIHZvaWQgU2Vzc2lvbjo6
c2VuZFRleHQoY29uc3QgUVN0cmluZyAmdGUKIAogU2Vzc2lvbjo6flNlc3Npb24oKQogeworICBp
ZiAoX2ZvcmVncm91bmRQcm9jZXNzSW5mbykKKyAgICAgIGRlbGV0ZSBfZm9yZWdyb3VuZFByb2Nl
c3NJbmZvOworICBpZiAoX3Nlc3Npb25Qcm9jZXNzSW5mbykKKyAgICAgIGRlbGV0ZSBfc2Vzc2lv
blByb2Nlc3NJbmZvOwogICBkZWxldGUgX2VtdWxhdGlvbjsKICAgZGVsZXRlIF9zaGVsbFByb2Nl
c3M7CiAgIGRlbGV0ZSBfem1vZGVtUHJvYzsKQEAgLTczNSw2ICs3NjEsMTEwIEBAIFFTdHJpbmcg
U2Vzc2lvbjo6dGl0bGUoVGl0bGVSb2xlIHJvbGUpIGMKICAgICAgICAgcmV0dXJuIFFTdHJpbmco
KTsKIH0KIAorUHJvY2Vzc0luZm8qIFNlc3Npb246OmdldFByb2Nlc3NJbmZvKCkKK3sKKyAgICBQ
cm9jZXNzSW5mbyogcHJvY2VzczsKKworICAgIGlmIChpc0NoaWxkQWN0aXZlKCkpCisgICAgICAg
IHByb2Nlc3MgPSBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvOworICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHVwZGF0ZVNlc3Npb25Qcm9jZXNzSW5mbygpOworICAgICAgICBwcm9jZXNzID0gX3Nlc3Np
b25Qcm9jZXNzSW5mbzsKKyAgICB9CisKKyAgICByZXR1cm4gcHJvY2VzczsKK30KKwordm9pZCBT
ZXNzaW9uOjp1cGRhdGVTZXNzaW9uUHJvY2Vzc0luZm8oKQoreworICAgIFFfQVNTRVJUKF9zaGVs
bFByb2Nlc3MpOworICAgIGlmICghX3Nlc3Npb25Qcm9jZXNzSW5mbykKKyAgICAgICAgX3Nlc3Np
b25Qcm9jZXNzSW5mbyA9IFByb2Nlc3NJbmZvOjpuZXdJbnN0YW5jZShwcm9jZXNzSWQoKSk7Cisg
ICAgX3Nlc3Npb25Qcm9jZXNzSW5mby0+dXBkYXRlKCk7Cit9CisKK2Jvb2wgU2Vzc2lvbjo6dXBk
YXRlRm9yZWdyb3VuZFByb2Nlc3NJbmZvKCkKK3sKKyAgICBib29sIHZhbGlkID0gKF9mb3JlZ3Jv
dW5kUHJvY2Vzc0luZm8gIT0gMCk7CisKKyAgICAvLyBoYXMgZm9yZWdyb3VuZCBwcm9jZXNzIGNo
YW5nZWQ/CisgICAgUV9BU1NFUlQoX3NoZWxsUHJvY2Vzcyk7CisgICAgaW50IHBpZCA9IF9zaGVs
bFByb2Nlc3MtPmZvcmVncm91bmRQcm9jZXNzR3JvdXAoKTsKKyAgICBpZiAocGlkICE9IF9mb3Jl
Z3JvdW5kUGlkKQorICAgIHsKKyAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgZGVsZXRl
IF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm87CisgICAgICAgIF9mb3JlZ3JvdW5kUHJvY2Vzc0luZm8g
PSBQcm9jZXNzSW5mbzo6bmV3SW5zdGFuY2UocGlkKTsKKyAgICAgICAgX2ZvcmVncm91bmRQaWQg
PSBwaWQ7CisgICAgICAgIHZhbGlkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodmFsaWQpCisg
ICAgeworICAgICAgICBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvLT51cGRhdGUoKTsKKyAgICAgICAg
dmFsaWQgPSBfZm9yZWdyb3VuZFByb2Nlc3NJbmZvLT5pc1ZhbGlkKCk7CisgICAgfQorCisgICAg
cmV0dXJuIHZhbGlkOworfQorCitRU3RyaW5nIFNlc3Npb246OmdldER5bmFtaWNUaXRsZSgpCit7
CisgICAgLy8gdXBkYXRlIGN1cnJlbnQgZGlyZWN0b3J5IGZyb20gcHJvY2VzcworICAgIFByb2Nl
c3NJbmZvKiBwcm9jZXNzID0gdXBkYXRlV29ya2luZ0RpcmVjdG9yeSgpOworCisgICAgLy8gZm9y
bWF0IHRhYiB0aXRsZXMgdXNpbmcgcHJvY2VzcyBpbmZvCisgICAgYm9vbCBvayA9IGZhbHNlOwor
ICAgIFFTdHJpbmcgdGl0bGU7CisgICAgaWYgKCBwcm9jZXNzLT5uYW1lKCZvaykgPT0gInNzaCIg
JiYgb2sgKQorICAgIHsKKyAgICAgICAgU1NIUHJvY2Vzc0luZm8gc3NoSW5mbygqcHJvY2Vzcyk7
CisgICAgICAgIHRpdGxlID0gc3NoSW5mby5mb3JtYXQodGFiVGl0bGVGb3JtYXQoU2Vzc2lvbjo6
UmVtb3RlVGFiVGl0bGUpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICB0aXRsZSA9IHByb2Nl
c3MtPmZvcm1hdCh0YWJUaXRsZUZvcm1hdChTZXNzaW9uOjpMb2NhbFRhYlRpdGxlKSk7CisKKyAg
ICByZXR1cm4gdGl0bGU7Cit9CisKK0tVcmwgU2Vzc2lvbjo6Z2V0VXJsKCkKK3sKKyAgICBRU3Ry
aW5nIHBhdGg7CisgICAgCisgICAgdXBkYXRlU2Vzc2lvblByb2Nlc3NJbmZvKCk7CisgICAgaWYg
KF9zZXNzaW9uUHJvY2Vzc0luZm8tPmlzVmFsaWQoKSkKKyAgICB7CisgICAgICAgIGJvb2wgb2sg
PSBmYWxzZTsKKworICAgICAgICAvLyBjaGVjayBpZiBmb3JlZ3JvdW5kIHByb2Nlc3MgaXMgYm9v
a21hcmstYWJsZQorICAgICAgICBpZiAoaXNDaGlsZEFjdGl2ZSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBmb3IgcmVtb3RlIGNvbm5lY3Rpb25zLCBzYXZlIHRoZSB1c2VyIGFuZCBob3N0
CisgICAgICAgICAgICAvLyBicmlnaHQgaWRlYXMgdG8gZ2V0IHRoZSBkaXJlY3RvcnkgYXQgdGhl
IG90aGVyIGVuZCBhcmUgd2VsY29tZSA6KQorICAgICAgICAgICAgaWYgKF9mb3JlZ3JvdW5kUHJv
Y2Vzc0luZm8tPm5hbWUoJm9rKSA9PSAic3NoIiAmJiBvaykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBTU0hQcm9jZXNzSW5mbyBzc2hJbmZvKCpfZm9yZWdyb3VuZFByb2Nlc3NJbmZv
KTsKKyAgICAgICAgICAgICAgICBwYXRoID0gInNzaDovLyIgKyBzc2hJbmZvLnVzZXJOYW1lKCkg
KyAnQCcgKyBzc2hJbmZvLmhvc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRoID0gX2ZvcmVncm91bmRQcm9jZXNz
SW5mby0+Y3VycmVudERpcigmb2spOworICAgICAgICAgICAgICAgIGlmICghb2spCisgICAgICAg
ICAgICAgICAgICAgIHBhdGguY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIC8vIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkg
b2YgdGhlIHNoZWxsIHByb2Nlc3MKKyAgICAgICAgeworICAgICAgICAgICAgcGF0aCA9IF9zZXNz
aW9uUHJvY2Vzc0luZm8tPmN1cnJlbnREaXIoJm9rKTsKKyAgICAgICAgICAgIGlmICghb2spCisg
ICAgICAgICAgICAgICAgcGF0aC5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIEtVcmwocGF0aCk7Cit9CisKIHZvaWQgU2Vzc2lvbjo6c2V0SWNvbk5hbWUoY29uc3QgUVN0
cmluZyYgaWNvbk5hbWUpCiB7CiAgICAgaWYgKCBpY29uTmFtZSAhPSBfaWNvbk5hbWUgKQpAQCAt
OTcwLDE1ICsxMTAwLDUxIEBAIHZvaWQgU2Vzc2lvbjo6c2V0U2l6ZShjb25zdCBRU2l6ZSYgc2l6
ZSkKIAogICBlbWl0IHJlc2l6ZVJlcXVlc3Qoc2l6ZSk7CiB9Ci1pbnQgU2Vzc2lvbjo6Zm9yZWdy
b3VuZFByb2Nlc3NJZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIF9zaGVsbFByb2Nlc3MtPmZvcmVn
cm91bmRQcm9jZXNzR3JvdXAoKTsKLX0KIGludCBTZXNzaW9uOjpwcm9jZXNzSWQoKSBjb25zdAog
ewogICAgIHJldHVybiBfc2hlbGxQcm9jZXNzLT5waWQoKTsKIH0KIAorYm9vbCBTZXNzaW9uOjpp
c0NoaWxkQWN0aXZlKCkKK3sKKyAgICAvLyBmb3JlZ3JvdW5kIHByb2Nlc3MgaW5mbyBpcyBhbHdh
eXMgdXBkYXRlZCBhZnRlciB0aGlzCisgICAgcmV0dXJuIHVwZGF0ZUZvcmVncm91bmRQcm9jZXNz
SW5mbygpICYmIChwcm9jZXNzSWQoKSAhPSBfZm9yZWdyb3VuZFBpZCk7Cit9CisKK1FTdHJpbmcg
U2Vzc2lvbjo6Y2hpbGROYW1lKCkKK3sKKyAgICBRU3RyaW5nIG5hbWU7CisKKyAgICBpZiAodXBk
YXRlRm9yZWdyb3VuZFByb2Nlc3NJbmZvKCkpIAorICAgIHsKKyAgICAgICAgYm9vbCBvayA9IGZh
bHNlOworICAgICAgICBuYW1lID0gX2ZvcmVncm91bmRQcm9jZXNzSW5mby0+bmFtZSgmb2spOwor
ICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgbmFtZS5jbGVhcigpOworICAgIH0KKworICAg
IHJldHVybiBuYW1lOworfQorCit2b2lkIFNlc3Npb246OnNhdmVTZXNzaW9uKEtDb25maWdHcm91
cCYgZ3JvdXApCit7CisgICAgZ3JvdXAud3JpdGVQYXRoRW50cnkoIldvcmtpbmdEaXIiLCBjdXJy
ZW50V29ya2luZ0RpcmVjdG9yeSgpKTsKKyAgICBncm91cC53cml0ZUVudHJ5KCJMb2NhbFRhYiIs
ICAgICAgIHRhYlRpdGxlRm9ybWF0KExvY2FsVGFiVGl0bGUpKTsKKyAgICBncm91cC53cml0ZUVu
dHJ5KCJSZW1vdGVUYWIiLCAgICAgIHRhYlRpdGxlRm9ybWF0KFJlbW90ZVRhYlRpdGxlKSk7Cit9
CisKK3ZvaWQgU2Vzc2lvbjo6cmVzdG9yZVNlc3Npb24oS0NvbmZpZ0dyb3VwJiBncm91cCkKK3sK
KyAgICBRU3RyaW5nIHZhbHVlOworCisgICAgdmFsdWUgPSBncm91cC5yZWFkUGF0aEVudHJ5KCJX
b3JraW5nRGlyIiwgUVN0cmluZygpKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgc2V0SW5p
dGlhbFdvcmtpbmdEaXJlY3RvcnkodmFsdWUpOworICAgIHZhbHVlID0gZ3JvdXAucmVhZEVudHJ5
KCJMb2NhbFRhYiIpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSBzZXRUYWJUaXRsZUZvcm1h
dChMb2NhbFRhYlRpdGxlLCB2YWx1ZSk7CisgICAgdmFsdWUgPSBncm91cC5yZWFkRW50cnkoIlJl
bW90ZVRhYiIpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSBzZXRUYWJUaXRsZUZvcm1hdChS
ZW1vdGVUYWJUaXRsZSwgdmFsdWUpOworfQorCiBTZXNzaW9uR3JvdXA6OlNlc3Npb25Hcm91cChR
T2JqZWN0KiBwYXJlbnQpCiAgICAgOiBRT2JqZWN0KHBhcmVudCksIF9tYXN0ZXJNb2RlKDApCiB7
CkBAIC0xMDk3LDMgKzEyNjMsMTIgQEAgdm9pZCBTZXNzaW9uR3JvdXA6OmRpc2Nvbm5lY3RQYWly
KFNlc3NpbwogfQogCiAjaW5jbHVkZSAiU2Vzc2lvbi5tb2MiCisKKy8qCisgIExvY2FsIFZhcmlh
YmxlczoKKyAgbW9kZTogYysrCisgIGMtZmlsZS1zdHlsZTogInN0cm91c3RydXAiCisgIGluZGVu
dC10YWJzLW1vZGU6IG5pbAorICB0YWItd2lkdGg6IDQKKyAgRW5kOgorKi8KZGlmZiAtdXAga2Rl
YmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Nlc3Npb24uaC5rb25zb2xlLXNlc3Npb24tbWFu
YWdlbWVudCBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvU2Vzc2lvbi5oCi0tLSBrZGVi
YXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvU2Vzc2lvbi5oLmtvbnNvbGUtc2Vzc2lvbi1tYW5h
Z2VtZW50CTIwMDgtMDYtMTggMTU6NDE6MjEuMDAwMDAwMDAwICswMzAwCisrKyBrZGViYXNlLTQu
MS4xL2FwcHMva29uc29sZS9zcmMvU2Vzc2lvbi5oCTIwMDgtMTAtMDUgMTc6MTc6MjguMDAwMDAw
MDAwICswMzAwCkBAIC0zNiwxMiArMzYsMTQgQEAKICNpbmNsdWRlICJIaXN0b3J5LmgiCiAKIGNs
YXNzIEtQcm9jZXNzOworY2xhc3MgS1VybDsKIAogbmFtZXNwYWNlIEtvbnNvbGUKIHsKIAogY2xh
c3MgRW11bGF0aW9uOwogY2xhc3MgUHR5OworY2xhc3MgUHJvY2Vzc0luZm87CiBjbGFzcyBUZXJt
aW5hbERpc3BsYXk7CiBjbGFzcyBaTW9kZW1EaWFsb2c7CiAKQEAgLTIwMSw2ICsyMDMsMTEgQEAg
cHVibGljOgogICB2b2lkIHNldEluaXRpYWxXb3JraW5nRGlyZWN0b3J5KCBjb25zdCBRU3RyaW5n
JiBkaXIgKTsKIAogICAvKioKKyAgICogUmV0dXJucyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb2Yg
dGhlIGZvcmVncm91bmQgcHJvY2VzcyBpbiB0aGUgc2Vzc2lvbgorICAgKi8KKyAgUVN0cmluZyBj
dXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOworCisgIC8qKgogICAgKiBTZXRzIHRoZSB0eXBlIG9m
IGhpc3Rvcnkgc3RvcmUgdXNlZCBieSB0aGlzIHNlc3Npb24uCiAgICAqIExpbmVzIG9mIG91dHB1
dCBwcm9kdWNlZCBieSB0aGUgdGVybWluYWwgYXJlIGFkZGVkCiAgICAqIHRvIHRoZSBoaXN0b3J5
IHN0b3JlLiAgVGhlIHR5cGUgb2YgaGlzdG9yeSBzdG9yZQpAQCAtMjc0LDEyICsyODEsMTcgQEAg
cHVibGljOgogICBRU3RyaW5nIHRpdGxlKFRpdGxlUm9sZSByb2xlKSBjb25zdDsKICAgLyoqIENv
bnZlbmllbmNlIG1ldGhvZCB1c2VkIHRvIHJlYWQgdGhlIG5hbWUgcHJvcGVydHkuICBSZXR1cm5z
IHRpdGxlKFNlc3Npb246Ok5hbWVSb2xlKS4gKi8KICAgUVN0cmluZyBuYW1lVGl0bGUoKSBjb25z
dCB7IHJldHVybiB0aXRsZShTZXNzaW9uOjpOYW1lUm9sZSk7IH0KKyAgLyoqIFJldHVybnMgYSB0
aXRsZSBnZW5lcmF0ZWQgZnJvbSB0YWIgZm9ybWF0IGFuZCBwcm9jZXNzIGluZm9ybWF0aW9uLiAq
LworICBRU3RyaW5nIGdldER5bmFtaWNUaXRsZSgpOwogCiAgIC8qKiBTZXRzIHRoZSBuYW1lIG9m
IHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uICovCiAgIHZvaWQgc2V0SWNv
bk5hbWUoY29uc3QgUVN0cmluZyYgaWNvbk5hbWUpOwogICAvKiogUmV0dXJucyB0aGUgbmFtZSBv
ZiB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLiAqLwogICBRU3RyaW5nIGlj
b25OYW1lKCkgY29uc3Q7CiAKKyAgLyoqIFJldHVybiBVUkwgZm9yIHRoZSBzZXNzaW9uLiAqLwor
ICBLVXJsIGdldFVybCgpOworCiAgIC8qKiBTZXRzIHRoZSB0ZXh0IG9mIHRoZSBpY29uIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uICovCiAgIHZvaWQgc2V0SWNvblRleHQoY29uc3QgUVN0
cmluZyYgaWNvblRleHQpOwogICAvKiogUmV0dXJucyB0aGUgdGV4dCBvZiB0aGUgaWNvbiBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLiAqLwpAQCAtMzE3LDEyICszMjksMTEgQEAgcHVibGlj
OgogICAgKi8KICAgaW50IHByb2Nlc3NJZCgpIGNvbnN0OwogCi0gIC8qKgotICAgKiBSZXR1cm5z
IHRoZSBwcm9jZXNzIGlkIG9mIHRoZSB0ZXJtaW5hbCdzIGZvcmVncm91bmQgcHJvY2Vzcy4KLSAg
ICogVGhpcyBpcyBpbml0aWFsbHkgdGhlIHNhbWUgYXMgcHJvY2Vzc0lkKCkgYnV0IGNhbiBjaGFu
Z2UKLSAgICogYXMgdGhlIHVzZXIgc3RhcnRzIG90aGVyIHByb2dyYW1zIGluc2lkZSB0aGUgdGVy
bWluYWwuCi0gICAqLwotICBpbnQgZm9yZWdyb3VuZFByb2Nlc3NJZCgpIGNvbnN0OworICAvKiog
UmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGhhcyBzdGFydGVkIGEgcHJvZ3JhbSBpbiB0aGUgc2Vz
c2lvbi4gKi8KKyAgYm9vbCBpc0NoaWxkQWN0aXZlKCk7CisKKyAgLyoqIFJldHVybnMgdGhlIG5h
bWUgb2YgdGhlIGN1cnJlbnQgZm9yZWdyb3VuZCBwcm9jZXNzLiAqLworICBRU3RyaW5nIGNoaWxk
TmFtZSgpOwogCiAgIC8qKiBSZXR1cm5zIHRoZSB0ZXJtaW5hbCBzZXNzaW9uJ3Mgd2luZG93IHNp
emUgaW4gbGluZXMgYW5kIGNvbHVtbnMuICovCiAgIFFTaXplIHNpemUoKTsKQEAgLTM3OCw2ICsz
ODksMTAgQEAgcHVibGljOgogCVByb2ZpbGVDaGFuZ2UJCQk9IDUwIAkvLyB0aGlzIGNsYXNoZXMg
d2l0aCBYdGVybSdzIGZvbnQgY2hhbmdlIGNvbW1hbmQKICAgfTsKIAorICAvLyBzZXNzaW9uIG1h
bmFnZW1lbnQKKyAgdm9pZCBzYXZlU2Vzc2lvbihLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKyAgdm9p
ZCByZXN0b3JlU2Vzc2lvbihLQ29uZmlnR3JvdXAmIGdyb3VwKTsKKwogcHVibGljIHNsb3RzOgog
CiAgIC8qKgpAQCAtNTE1LDYgKzUzMCwxMCBAQCBwcml2YXRlOgogICAvLyBjaGVja3MgdGhhdCB0
aGUgYmluYXJ5ICdwcm9ncmFtJyBpcyBhdmFpbGFibGUgYW5kIGNhbiBiZSBleGVjdXRlZAogICAv
LyByZXR1cm5zIHRoZSBiaW5hcnkgbmFtZSBpZiBhdmFpbGFibGUgb3IgYW4gZW1wdHkgc3RyaW5n
IG90aGVyd2lzZQogICBRU3RyaW5nIGNoZWNrUHJvZ3JhbShjb25zdCBRU3RyaW5nJiBwcm9ncmFt
KSBjb25zdDsKKyAgUHJvY2Vzc0luZm8qIGdldFByb2Nlc3NJbmZvKCk7CisgIHZvaWQgdXBkYXRl
U2Vzc2lvblByb2Nlc3NJbmZvKCk7CisgIGJvb2wgdXBkYXRlRm9yZWdyb3VuZFByb2Nlc3NJbmZv
KCk7CisgIFByb2Nlc3NJbmZvKiB1cGRhdGVXb3JraW5nRGlyZWN0b3J5KCk7CiAKICAgaW50ICAg
ICAgICAgICAgX3VuaXF1ZUlkZW50aWZpZXI7CiAKQEAgLTU1Myw2ICs1NzIsMTEgQEAgcHJpdmF0
ZToKICAgaW50ICAgICAgICAgICAgX3Nlc3Npb25JZDsKIAogICBRU3RyaW5nICAgICAgICBfaW5p
dGlhbFdvcmtpbmdEaXI7CisgIFFTdHJpbmcgICAgICAgIF9jdXJyZW50V29ya2luZ0RpcjsKKwor
ICBQcm9jZXNzSW5mbyogICBfc2Vzc2lvblByb2Nlc3NJbmZvOworICBQcm9jZXNzSW5mbyogICBf
Zm9yZWdyb3VuZFByb2Nlc3NJbmZvOworICBpbnQgICAgICAgICAgICBfZm9yZWdyb3VuZFBpZDsK
IAogICAvLyBaTW9kZW0KICAgYm9vbCAgICAgICAgICAgX3ptb2RlbUJ1c3k7CkBAIC02NTEsMyAr
Njc1LDEyIEBAIHByaXZhdGU6CiB9CiAKICNlbmRpZgorCisvKgorICBMb2NhbCBWYXJpYWJsZXM6
CisgIG1vZGU6IGMrKworICBjLWZpbGUtc3R5bGU6ICJzdHJvdXN0cnVwIgorICBpbmRlbnQtdGFi
cy1tb2RlOiBuaWwKKyAgdGFiLXdpZHRoOiA0CisgIEVuZDoKKyovCmRpZmYgLXVwIGtkZWJhc2Ut
NC4xLjEvYXBwcy9rb25zb2xlL3NyYy9TZXNzaW9uTWFuYWdlci5jcHAua29uc29sZS1zZXNzaW9u
LW1hbmFnZW1lbnQga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Nlc3Npb25NYW5hZ2Vy
LmNwcAotLS0ga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Nlc3Npb25NYW5hZ2VyLmNw
cC5rb25zb2xlLXNlc3Npb24tbWFuYWdlbWVudAkyMDA4LTA2LTI2IDA0OjMzOjA3LjAwMDAwMDAw
MCArMDMwMAorKysga2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Nlc3Npb25NYW5hZ2Vy
LmNwcAkyMDA4LTEwLTA1IDE3OjE3OjI4LjAwMDAwMDAwMCArMDMwMApAQCAtNzMwLDYgKzczMCw2
OSBAQCBRS2V5U2VxdWVuY2UgU2Vzc2lvbk1hbmFnZXI6OnNob3J0Y3V0KFByCiAgICAgcmV0dXJu
IFFLZXlTZXF1ZW5jZSgpOwogfQogCit2b2lkIFNlc3Npb25NYW5hZ2VyOjpzYXZlU2Vzc2lvbnMo
S0NvbmZpZyogY29uZmlnKQoreworICAgIC8vIFRoZSBzZXNzaW9uIElEcyBjYW4ndCBiZSByZXN0
b3JlZC4KKyAgICAvLyBTbyB3ZSBuZWVkIHRvIG1hcCB0aGUgb2xkIElEIHRvIHRoZSBmdXR1cmUg
bmV3IElELgorICAgIGludCBuID0gMTsKKyAgICBfcmVzdG9yZU1hcHBpbmcuY2xlYXIoKTsKKwor
ICAgIGZvcmVhY2goU2Vzc2lvbiogc2Vzc2lvbiwgX3Nlc3Npb25zKQorICAgIHsKKyAgICAgICAg
UVN0cmluZyBuYW1lID0gUUxhdGluMVN0cmluZygiU2Vzc2lvbiIpICsgUVN0cmluZzo6bnVtYmVy
KG4pOworICAgICAgICBLQ29uZmlnR3JvdXAgZ3JvdXAoY29uZmlnLCBuYW1lKTsKKworICAgICAg
ICBncm91cC53cml0ZVBhdGhFbnRyeSgiUHJvZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9zZXNzaW9uUHJvZmlsZXMudmFsdWUoc2Vzc2lvbiktPnBhdGgoKSk7CisgICAgICAg
IHNlc3Npb24tPnNhdmVTZXNzaW9uKGdyb3VwKTsKKyAgICAgICAgX3Jlc3RvcmVNYXBwaW5nLmlu
c2VydChzZXNzaW9uLCBuKTsKKyAgICAgICAgbisrOworICAgIH0KKworICAgIEtDb25maWdHcm91
cCBncm91cChjb25maWcsICJOdW1iZXIiKTsKKyAgICBncm91cC53cml0ZUVudHJ5KCJOdW1iZXJP
ZlNlc3Npb25zIiwgX3Nlc3Npb25zLmNvdW50KCkpOworfQorCitpbnQgU2Vzc2lvbk1hbmFnZXI6
OmdldFJlc3RvcmVJZChTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIHJldHVybiBfcmVzdG9yZU1h
cHBpbmcudmFsdWUoc2Vzc2lvbik7Cit9CisKK3ZvaWQgU2Vzc2lvbk1hbmFnZXI6OnJlc3RvcmVT
ZXNzaW9ucyhLQ29uZmlnKiBjb25maWcpCit7CisgICAgS0NvbmZpZ0dyb3VwIGdyb3VwKGNvbmZp
ZywgIk51bWJlciIpOworICAgIGludCBzZXNzaW9uczsKKworICAgIC8vIEFueSBzZXNzaW9ucyBz
YXZlZD8KKyAgICBpZiAoKHNlc3Npb25zID0gZ3JvdXAucmVhZEVudHJ5KCJOdW1iZXJPZlNlc3Np
b25zIiwgMCkpID4gMCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IG4gPSAxOyBuIDw9IHNlc3Np
b25zOyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFFTdHJpbmcgbmFtZSA9IFFMYXRpbjFT
dHJpbmcoIlNlc3Npb24iKSArIFFTdHJpbmc6Om51bWJlcihuKTsKKyAgICAgICAgICAgIEtDb25m
aWdHcm91cCBzZXNzaW9uR3JvdXAoY29uZmlnLCBuYW1lKTsKKworICAgICAgICAgICAgUVN0cmlu
ZyBwcm9maWxlID0gc2Vzc2lvbkdyb3VwLnJlYWRQYXRoRW50cnkoIlByb2ZpbGUiLCBRU3RyaW5n
KCkpOworICAgICAgICAgICAgUHJvZmlsZTo6UHRyIHB0ciA9IGRlZmF1bHRQcm9maWxlKCk7Cisg
ICAgICAgICAgICBpZiAoIXByb2ZpbGUuaXNFbXB0eSgpKSBwdHIgPSBsb2FkUHJvZmlsZShwcm9m
aWxlKTsKKworICAgICAgICAgICAgU2Vzc2lvbiogc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24ocHRy
KTsKKyAgICAgICAgICAgIHNlc3Npb24tPnJlc3RvcmVTZXNzaW9uKHNlc3Npb25Hcm91cCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK1Nlc3Npb24qIFNlc3Npb25NYW5hZ2VyOjppZFRvU2Vzc2lv
bihpbnQgaWQpCit7CisgICAgUV9BU1NFUlQoaWQpOyAKKyAgICBmb3JlYWNoKFNlc3Npb24qIHNl
c3Npb24sIF9zZXNzaW9ucykKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlc3Npb25JZCgpID09IGlk
KQorICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247CisKKyAgICAvLyB0aGlzIHNob3VsZCBub3Qg
aGFwcGVuCisgICAgUV9BU1NFUlQoMCk7CisgICAgcmV0dXJuIDA7Cit9CisKIEtfR0xPQkFMX1NU
QVRJQyggU2Vzc2lvbk1hbmFnZXIgLCB0aGVTZXNzaW9uTWFuYWdlciApCiBTZXNzaW9uTWFuYWdl
ciogU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCkKIHsKQEAgLTgzMywzICs4OTYsMTIgQEAgUU1v
ZGVsSW5kZXggU2Vzc2lvbkxpc3RNb2RlbDo6aW5kZXgoaW50IAogfQogCiAjaW5jbHVkZSAiU2Vz
c2lvbk1hbmFnZXIubW9jIgorCisvKgorICBMb2NhbCBWYXJpYWJsZXM6CisgIG1vZGU6IGMrKwor
ICBjLWZpbGUtc3R5bGU6ICJzdHJvdXN0cnVwIgorICBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAg
dGFiLXdpZHRoOiA0CisgIEVuZDoKKyovCmRpZmYgLXVwIGtkZWJhc2UtNC4xLjEvYXBwcy9rb25z
b2xlL3NyYy9TZXNzaW9uTWFuYWdlci5oLmtvbnNvbGUtc2Vzc2lvbi1tYW5hZ2VtZW50IGtkZWJh
c2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9TZXNzaW9uTWFuYWdlci5oCi0tLSBrZGViYXNlLTQu
MS4xL2FwcHMva29uc29sZS9zcmMvU2Vzc2lvbk1hbmFnZXIuaC5rb25zb2xlLXNlc3Npb24tbWFu
YWdlbWVudAkyMDA4LTA2LTI2IDA0OjMzOjA3LjAwMDAwMDAwMCArMDMwMAorKysga2RlYmFzZS00
LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1Nlc3Npb25NYW5hZ2VyLmgJMjAwOC0xMC0wNSAxNzoxNzoy
OC4wMDAwMDAwMDAgKzAzMDAKQEAgLTI0Myw2ICsyNDMsMTIgQEAgcHVibGljOgogICAgICAqLwog
ICAgIHN0YXRpYyBTZXNzaW9uTWFuYWdlciogaW5zdGFuY2UoKTsKIAorICAgIC8vIHNlc3Npb24g
bWFuYWdlbWVudAorICAgIHZvaWQgc2F2ZVNlc3Npb25zKEtDb25maWcqIGNvbmZpZyk7CisgICAg
aW50ICBnZXRSZXN0b3JlSWQoU2Vzc2lvbiogc2Vzc2lvbik7CisgICAgdm9pZCByZXN0b3JlU2Vz
c2lvbnMoS0NvbmZpZyogY29uZmlnKTsKKyAgICBTZXNzaW9uICppZFRvU2Vzc2lvbihpbnQgaWQp
OworCiBzaWduYWxzOgogICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBwcm9maWxlIGlzIGFkZGVkIHRv
IHRoZSBtYW5hZ2VyLiAqLwogICAgIHZvaWQgcHJvZmlsZUFkZGVkKFByb2ZpbGU6OlB0ciBwdHIp
OwpAQCAtMzE4LDYgKzMyNCw3IEBAIHByaXZhdGU6CiAKIAlRU2V0PFByb2ZpbGU6OlB0cj4gX3R5
cGVzOwogICAgIFFIYXNoPFNlc3Npb24qLFByb2ZpbGU6OlB0cj4gX3Nlc3Npb25Qcm9maWxlczsK
KyAgICBRSGFzaDxTZXNzaW9uKixpbnQ+IF9yZXN0b3JlTWFwcGluZzsKIAogICAgIHN0cnVjdCBT
aG9ydGN1dERhdGEKICAgICB7CkBAIC00MDUsMyArNDEyLDExIEBAIHByaXZhdGU6CiB9CiAjZW5k
aWYgLy9TRVNTSU9OTUFOQUdFUl9ICiAKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTog
YysrCisgIGMtZmlsZS1zdHlsZTogInN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5p
bAorICB0YWItd2lkdGg6IDQKKyAgRW5kOgorKi8KZGlmZiAtdXAga2RlYmFzZS00LjEuMS9hcHBz
L2tvbnNvbGUvc3JjL1ZpZXdNYW5hZ2VyLmNwcC5rb25zb2xlLXNlc3Npb24tbWFuYWdlbWVudCBr
ZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvVmlld01hbmFnZXIuY3BwCi0tLSBrZGViYXNl
LTQuMS4xL2FwcHMva29uc29sZS9zcmMvVmlld01hbmFnZXIuY3BwLmtvbnNvbGUtc2Vzc2lvbi1t
YW5hZ2VtZW50CTIwMDgtMDUtMjkgMTQ6MTg6NDMuMDAwMDAwMDAwICswMzAwCisrKyBrZGViYXNl
LTQuMS4xL2FwcHMva29uc29sZS9zcmMvVmlld01hbmFnZXIuY3BwCTIwMDgtMTAtMDUgMTc6MTc6
MjguMDAwMDAwMDAwICswMzAwCkBAIC04MzgsOSArODM4LDc4IEBAIFFMaXN0PFZpZXdQcm9wZXJ0
aWVzKj4gVmlld01hbmFnZXI6OnZpZXcKICAgICByZXR1cm4gbGlzdDsKIH0KIAordm9pZCBWaWV3
TWFuYWdlcjo6c2F2ZVNlc3Npb25zKEtDb25maWdHcm91cCYgZ3JvdXApCit7CisgICAgLy8gZmlu
ZCBhbGwgdW5pcXVlIHNlc3Npb24gcmVzdG9yZSBJRHMKKyAgICBRTGlzdDxpbnQ+IGlkczsKKyAg
ICBRSGFzaDxTZXNzaW9uKixpbnQ+IHVuaXF1ZTsKKworICAgIC8vIGZpcnN0OiBzZXNzaW9ucyBp
biB0aGUgYWN0aXZlIGNvbnRhaW5lciwgcHJlc2VydmluZyB0aGUgb3JkZXIKKyAgICBWaWV3Q29u
dGFpbmVyKiBjb250YWluZXIgPSBfdmlld1NwbGl0dGVyLT5hY3RpdmVDb250YWluZXIoKTsKKyAg
ICBRX0FTU0VSVChjb250YWluZXIpOworICAgIFRlcm1pbmFsRGlzcGxheSogYWN0aXZldmlldyA9
IGR5bmFtaWNfY2FzdDxUZXJtaW5hbERpc3BsYXkqPihjb250YWluZXItPmFjdGl2ZVZpZXcoKSk7
CisKKyAgICBRTGlzdEl0ZXJhdG9yPFFXaWRnZXQqPiB2aWV3SXRlcihjb250YWluZXItPnZpZXdz
KCkpOworICAgIGludCB0YWIgPSAxOworICAgIHdoaWxlICh2aWV3SXRlci5oYXNOZXh0KCkpCisg
ICAgeworICAgICAgICBUZXJtaW5hbERpc3BsYXkgKnZpZXcgPSBkeW5hbWljX2Nhc3Q8VGVybWlu
YWxEaXNwbGF5Kj4odmlld0l0ZXIubmV4dCgpKTsKKyAgICAgICAgUV9BU1NFUlQodmlldyk7Cisg
ICAgICAgIFNlc3Npb24gKnNlc3Npb24gPSBfc2Vzc2lvbk1hcFt2aWV3XTsKKyAgICAgICAgaWRz
IDw8IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5nZXRSZXN0b3JlSWQoc2Vzc2lvbik7Cisg
ICAgICAgIGlmICh2aWV3ID09IGFjdGl2ZXZpZXcpIGdyb3VwLndyaXRlRW50cnkoIkFjdGl2ZSIs
IHRhYik7CisgICAgICAgIHVuaXF1ZS5pbnNlcnQoc2Vzc2lvbiwgMSk7CisgICAgICAgIHRhYisr
OworICAgIH0KKworICAgIC8vIHNlY29uZDogYWxsIG90aGVyIHNlc3Npb25zLCBpbiByYW5kb20g
b3JkZXIKKyAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGhhdmUgc2Vzc2lvbnMgcmVzdG9yZWQgdGhh
dCBhcmUgbm90IGNvbm5lY3RlZAorICAgIGZvcmVhY2goU2Vzc2lvbiogc2Vzc2lvbiwgX3Nlc3Np
b25NYXApCisgICAgICAgIGlmICghdW5pcXVlLmNvbnRhaW5zKHNlc3Npb24pKQorICAgICAgICB7
CisgICAgICAgICAgICBpZHMgPDwgU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCktPmdldFJlc3Rv
cmVJZChzZXNzaW9uKTsKKyAgICAgICAgICAgIHVuaXF1ZS5pbnNlcnQoc2Vzc2lvbiwgMSk7Cisg
ICAgICAgIH0KKworICAgIGdyb3VwLndyaXRlRW50cnkoIlNlc3Npb25zIiwgaWRzKTsKK30KKwor
dm9pZCBWaWV3TWFuYWdlcjo6cmVzdG9yZVNlc3Npb25zKGNvbnN0IEtDb25maWdHcm91cCYgZ3Jv
dXApCit7CisgICAgUUxpc3Q8aW50PiBpZHMgPSBncm91cC5yZWFkRW50cnkoIlNlc3Npb25zIiwg
UUxpc3Q8aW50PigpKTsKKyAgICBpbnQgYWN0aXZlVGFiICA9IGdyb3VwLnJlYWRFbnRyeSgiQWN0
aXZlIiwgMCk7CisgICAgVGVybWluYWxEaXNwbGF5ICpkaXNwbGF5ID0gMDsKKworICAgIGludCB0
YWIgPSAxOworICAgIGZvcmVhY2goaW50IGlkLCBpZHMpCisgICAgeworICAgICAgICBTZXNzaW9u
ICpzZXNzaW9uID0gU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCktPmlkVG9TZXNzaW9uKGlkKTsK
KyAgICAgICAgY3JlYXRlVmlldyhzZXNzaW9uKTsKKyAgICAgICAgaWYgKCFzZXNzaW9uLT5pc1J1
bm5pbmcoKSkKKyAgICAgICAgICAgIHNlc3Npb24tPnJ1bigpOworICAgICAgICBpZiAodGFiKysg
PT0gYWN0aXZlVGFiKQorICAgICAgICAgICAgZGlzcGxheSA9IGR5bmFtaWNfY2FzdDxUZXJtaW5h
bERpc3BsYXkqPihhY3RpdmVWaWV3KCkpOworICAgIH0KKworICAgIGlmIChkaXNwbGF5KQorICAg
IHsKKyAgICAgICAgX3ZpZXdTcGxpdHRlci0+YWN0aXZlQ29udGFpbmVyKCktPnNldEFjdGl2ZVZp
ZXcoZGlzcGxheSk7CisgICAgICAgIGRpc3BsYXktPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVh
c29uKTsKKyAgICB9Cit9CisKIHVpbnQgcUhhc2goUVBvaW50ZXI8VGVybWluYWxEaXNwbGF5PiBk
aXNwbGF5KQogewogICAgIHJldHVybiBxSGFzaCgoVGVybWluYWxEaXNwbGF5KilkaXNwbGF5KTsK
IH0KIAogI2luY2x1ZGUgIlZpZXdNYW5hZ2VyLm1vYyIKKworLyoKKyAgTG9jYWwgVmFyaWFibGVz
OgorICBtb2RlOiBjKysKKyAgYy1maWxlLXN0eWxlOiAic3Ryb3VzdHJ1cCIKKyAgaW5kZW50LXRh
YnMtbW9kZTogbmlsCisgIHRhYi13aWR0aDogNAorICBFbmQ6CisqLwpkaWZmIC11cCBrZGViYXNl
LTQuMS4xL2FwcHMva29uc29sZS9zcmMvVmlld01hbmFnZXIuaC5rb25zb2xlLXNlc3Npb24tbWFu
YWdlbWVudCBrZGViYXNlLTQuMS4xL2FwcHMva29uc29sZS9zcmMvVmlld01hbmFnZXIuaAotLS0g
a2RlYmFzZS00LjEuMS9hcHBzL2tvbnNvbGUvc3JjL1ZpZXdNYW5hZ2VyLmgua29uc29sZS1zZXNz
aW9uLW1hbmFnZW1lbnQJMjAwOC0wNS0wNyAxMjowNToyMS4wMDAwMDAwMDAgKzAzMDAKKysrIGtk
ZWJhc2UtNC4xLjEvYXBwcy9rb25zb2xlL3NyYy9WaWV3TWFuYWdlci5oCTIwMDgtMTAtMDUgMTc6
MTc6MjguMDAwMDAwMDAwICswMzAwCkBAIC0xNDgsNiArMTQ4LDEyIEBAIHB1YmxpYzoKIAkgKi8K
IAlTZXNzaW9uQ29udHJvbGxlciogYWN0aXZlVmlld0NvbnRyb2xsZXIoKSBjb25zdDsKIAorICAg
IC8qKgorICAgICAqIFNlc3Npb24gbWFuYWdlbWVudAorICAgICAqLworICAgIHZvaWQgc2F2ZVNl
c3Npb25zKEtDb25maWdHcm91cCYgZ3JvdXApOworICAgIHZvaWQgcmVzdG9yZVNlc3Npb25zKGNv
bnN0IEtDb25maWdHcm91cCYgZ3JvdXApOworCiBzaWduYWxzOgogICAgIC8qKiBFbWl0dGVkIHdo
ZW4gdGhlIGxhc3QgdmlldyBpcyByZW1vdmVkIGZyb20gdGhlIHZpZXcgbWFuYWdlciAqLwogICAg
IHZvaWQgZW1wdHkoKTsKQEAgLTI5NiwzICszMDIsMTIgQEAgcHJpdmF0ZToKIH0KIAogI2VuZGlm
CisKKy8qCisgIExvY2FsIFZhcmlhYmxlczoKKyAgbW9kZTogYysrCisgIGMtZmlsZS1zdHlsZTog
InN0cm91c3RydXAiCisgIGluZGVudC10YWJzLW1vZGU6IG5pbAorICB0YWItd2lkdGg6IDQKKyAg
RW5kOgorKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27709</attachid>
            <date>2008-10-06 07:16:07 +0000</date>
            <delta_ts>2008-10-06 17:18:22 +0000</delta_ts>
            <desc>Fix restore from invalid session data</desc>
            <filename>konsole-fix-restore-from-invalid-session.patch</filename>
            <type>text/plain</type>
            <size>1903</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9WaWV3TWFuYWdlci5jcHAgYi9zcmMvVmlld01hbmFnZXIuY3BwCmlu
ZGV4IDRkOTJjZDQuLjYwMWFmZGQgMTAwNjQ0Ci0tLSBhL3NyYy9WaWV3TWFuYWdlci5jcHAKKysr
IGIvc3JjL1ZpZXdNYW5hZ2VyLmNwcApAQCAtOTA1LDI0ICs5MDUsMzcgQEAgdm9pZCBWaWV3TWFu
YWdlcjo6c2F2ZVNlc3Npb25zKEtDb25maWdHcm91cCYgZ3JvdXApCiB2b2lkIFZpZXdNYW5hZ2Vy
OjpyZXN0b3JlU2Vzc2lvbnMoY29uc3QgS0NvbmZpZ0dyb3VwJiBncm91cCkKIHsKICAgICBRTGlz
dDxpbnQ+IGlkcyA9IGdyb3VwLnJlYWRFbnRyeSgiU2Vzc2lvbnMiLCBRTGlzdDxpbnQ+KCkpOwot
ICAgIGludCBhY3RpdmVUYWIgID0gZ3JvdXAucmVhZEVudHJ5KCJBY3RpdmUiLCAwKTsKLSAgICBU
ZXJtaW5hbERpc3BsYXkgKmRpc3BsYXkgPSAwOwogCi0gICAgaW50IHRhYiA9IDE7Ci0gICAgZm9y
ZWFjaChpbnQgaWQsIGlkcykKKyAgICBpZiAoaWRzLmlzRW1wdHkoKSkKICAgICB7Ci0gICAgICAg
IFNlc3Npb24gKnNlc3Npb24gPSBTZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2UoKS0+aWRUb1Nlc3Np
b24oaWQpOworICAgICAgICAvLyBJbmNvbXBsZXRlIHNlc3Npb24gZmlsZSwgZS5nLiBmcm9tIGEg
S0RFMyBzZXNzaW9uLiBDcmVhdGUgYQorICAgICAgICAvLyBkZWZhdWx0IHNlc3Npb24gc28gdGhh
dCB3ZSBkb24ndCBlbmQgdXAgd2l0aCBhbiBlbXB0eSB3aW5kb3cuCisgICAgICAgIGtFcnJvcigp
IDw8ICJSZXN0b3Jpbmcgd2luZG93IGZyb20gaW52YWxpZCBzZXNzaW9uIGRhdGEhIiA8PCBlbmRs
OworICAgICAgICBTZXNzaW9uICpzZXNzaW9uID0gU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCkt
PmNyZWF0ZVNlc3Npb24oKTsKICAgICAgICAgY3JlYXRlVmlldyhzZXNzaW9uKTsKLSAgICAgICAg
aWYgKCFzZXNzaW9uLT5pc1J1bm5pbmcoKSkKLSAgICAgICAgICAgIHNlc3Npb24tPnJ1bigpOwot
ICAgICAgICBpZiAodGFiKysgPT0gYWN0aXZlVGFiKQotICAgICAgICAgICAgZGlzcGxheSA9IGR5
bmFtaWNfY2FzdDxUZXJtaW5hbERpc3BsYXkqPihhY3RpdmVWaWV3KCkpOworICAgICAgICBzZXNz
aW9uLT5ydW4oKTsKICAgICB9Ci0KLSAgICBpZiAoZGlzcGxheSkKKyAgICBlbHNlCiAgICAgewot
ICAgICAgICBfdmlld1NwbGl0dGVyLT5hY3RpdmVDb250YWluZXIoKS0+c2V0QWN0aXZlVmlldyhk
aXNwbGF5KTsKLSAgICAgICAgZGlzcGxheS0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24p
OworICAgICAgICBpbnQgYWN0aXZlVGFiID0gZ3JvdXAucmVhZEVudHJ5KCJBY3RpdmUiLCAwKTsK
KyAgICAgICAgaW50IHRhYiA9IDE7CisgICAgICAgIFRlcm1pbmFsRGlzcGxheSAqZGlzcGxheSA9
IDA7CisKKyAgICAgICAgZm9yZWFjaChpbnQgaWQsIGlkcykKKyAgICAgICAgeworICAgICAgICAg
ICAgU2Vzc2lvbiAqc2Vzc2lvbiA9IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5pZFRvU2Vz
c2lvbihpZCk7CisgICAgICAgICAgICBjcmVhdGVWaWV3KHNlc3Npb24pOworICAgICAgICAgICAg
aWYgKCFzZXNzaW9uLT5pc1J1bm5pbmcoKSkKKyAgICAgICAgICAgICAgICBzZXNzaW9uLT5ydW4o
KTsKKyAgICAgICAgICAgIGlmICh0YWIrKyA9PSBhY3RpdmVUYWIpCisgICAgICAgICAgICAgICAg
ZGlzcGxheSA9IGR5bmFtaWNfY2FzdDxUZXJtaW5hbERpc3BsYXkqPihhY3RpdmVWaWV3KCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpc3BsYXkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IF92aWV3U3BsaXR0ZXItPmFjdGl2ZUNvbnRhaW5lcigpLT5zZXRBY3RpdmVWaWV3KGRpc3BsYXkp
OworICAgICAgICAgICAgZGlzcGxheS0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24pOwor
ICAgICAgICB9CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27718</attachid>
            <date>2008-10-06 17:18:22 +0000</date>
            <delta_ts>2008-10-06 17:18:22 +0000</delta_ts>
            <desc>Fix restore from invalid session data</desc>
            <filename>konsole-fix-restore-from-invalid-session.patch</filename>
            <type>text/plain</type>
            <size>2318</size>
            <attacher name="Stefan Becker">chemobejk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9WaWV3TWFuYWdlci5jcHAgYi9zcmMvVmlld01hbmFnZXIuY3BwCmlu
ZGV4IDRkOTJjZDQuLjczODMzM2MgMTAwNjQ0Ci0tLSBhL3NyYy9WaWV3TWFuYWdlci5jcHAKKysr
IGIvc3JjL1ZpZXdNYW5hZ2VyLmNwcApAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgVmlld01hbmFn
ZXI6OnNhdmVTZXNzaW9ucyhLQ29uZmlnR3JvdXAmIGdyb3VwKQogICAgICAgICBRX0FTU0VSVCh2
aWV3KTsKICAgICAgICAgU2Vzc2lvbiAqc2Vzc2lvbiA9IF9zZXNzaW9uTWFwW3ZpZXddOwogICAg
ICAgICBpZHMgPDwgU2Vzc2lvbk1hbmFnZXI6Omluc3RhbmNlKCktPmdldFJlc3RvcmVJZChzZXNz
aW9uKTsKLSAgICAgICAgaWYgKHZpZXcgPT0gYWN0aXZldmlldykgZ3JvdXAud3JpdGVFbnRyeSgi
QWN0aXZlIiwgdGFiKTsKKyAgICAgICAgaWYgKHZpZXcgPT0gYWN0aXZldmlldykgZ3JvdXAud3Jp
dGVFbnRyeSgiQWN0aXZlVGFiSW5kZXgiLCB0YWIpOwogICAgICAgICB1bmlxdWUuaW5zZXJ0KHNl
c3Npb24sIDEpOwogICAgICAgICB0YWIrKzsKICAgICB9CkBAIC05MDUsMjQgKzkwNSwzNyBAQCB2
b2lkIFZpZXdNYW5hZ2VyOjpzYXZlU2Vzc2lvbnMoS0NvbmZpZ0dyb3VwJiBncm91cCkKIHZvaWQg
Vmlld01hbmFnZXI6OnJlc3RvcmVTZXNzaW9ucyhjb25zdCBLQ29uZmlnR3JvdXAmIGdyb3VwKQog
ewogICAgIFFMaXN0PGludD4gaWRzID0gZ3JvdXAucmVhZEVudHJ5KCJTZXNzaW9ucyIsIFFMaXN0
PGludD4oKSk7Ci0gICAgaW50IGFjdGl2ZVRhYiAgPSBncm91cC5yZWFkRW50cnkoIkFjdGl2ZSIs
IDApOwotICAgIFRlcm1pbmFsRGlzcGxheSAqZGlzcGxheSA9IDA7CiAKLSAgICBpbnQgdGFiID0g
MTsKLSAgICBmb3JlYWNoKGludCBpZCwgaWRzKQorICAgIGlmIChpZHMuaXNFbXB0eSgpKQogICAg
IHsKLSAgICAgICAgU2Vzc2lvbiAqc2Vzc2lvbiA9IFNlc3Npb25NYW5hZ2VyOjppbnN0YW5jZSgp
LT5pZFRvU2Vzc2lvbihpZCk7CisgICAgICAgIC8vIEluY29tcGxldGUgc2Vzc2lvbiBmaWxlLCBl
LmcuIGZyb20gYSBLREUzIHNlc3Npb24uIENyZWF0ZSBhCisgICAgICAgIC8vIGRlZmF1bHQgc2Vz
c2lvbiBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cCB3aXRoIGFuIGVtcHR5IHdpbmRvdy4KKyAgICAg
ICAga1dhcm5pbmcoKSA8PCBpMThuKCJVbmFibGUgdG8gcmVzdG9yZSBzYXZlZCB0YWJzLiBQb3Nz
aWJseSB1bnN1cHBvcnRlZCBLREUgMyBzZXNzaW9uIGRhdGEuIik7CisgICAgICAgIFNlc3Npb24g
KnNlc3Npb24gPSBTZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2UoKS0+Y3JlYXRlU2Vzc2lvbigpOwog
ICAgICAgICBjcmVhdGVWaWV3KHNlc3Npb24pOwotICAgICAgICBpZiAoIXNlc3Npb24tPmlzUnVu
bmluZygpKQotICAgICAgICAgICAgc2Vzc2lvbi0+cnVuKCk7Ci0gICAgICAgIGlmICh0YWIrKyA9
PSBhY3RpdmVUYWIpCi0gICAgICAgICAgICBkaXNwbGF5ID0gZHluYW1pY19jYXN0PFRlcm1pbmFs
RGlzcGxheSo+KGFjdGl2ZVZpZXcoKSk7CisgICAgICAgIHNlc3Npb24tPnJ1bigpOwogICAgIH0K
LQotICAgIGlmIChkaXNwbGF5KQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIF92aWV3U3BsaXR0
ZXItPmFjdGl2ZUNvbnRhaW5lcigpLT5zZXRBY3RpdmVWaWV3KGRpc3BsYXkpOwotICAgICAgICBk
aXNwbGF5LT5zZXRGb2N1cyhRdDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgICAgIGludCBhY3Rp
dmVUYWIgPSBncm91cC5yZWFkRW50cnkoIkFjdGl2ZVRhYkluZGV4IiwgMCk7CisgICAgICAgIGlu
dCB0YWIgPSAxOworICAgICAgICBRV2lkZ2V0ICpmb2N1c1ZpZXcgPSAwOworCisgICAgICAgIGZv
cmVhY2goaW50IGlkLCBpZHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNlc3Npb24gKnNlc3Np
b24gPSBTZXNzaW9uTWFuYWdlcjo6aW5zdGFuY2UoKS0+aWRUb1Nlc3Npb24oaWQpOworICAgICAg
ICAgICAgY3JlYXRlVmlldyhzZXNzaW9uKTsKKyAgICAgICAgICAgIGlmICghc2Vzc2lvbi0+aXNS
dW5uaW5nKCkpCisgICAgICAgICAgICAgICAgc2Vzc2lvbi0+cnVuKCk7CisgICAgICAgICAgICBp
ZiAodGFiKysgPT0gYWN0aXZlVGFiKQorICAgICAgICAgICAgICAgIGZvY3VzVmlldyA9IGFjdGl2
ZVZpZXcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb2N1c1ZpZXcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIF92aWV3U3BsaXR0ZXItPmFjdGl2ZUNvbnRhaW5lcigpLT5zZXRBY3RpdmVW
aWV3KGZvY3VzVmlldyk7CisgICAgICAgICAgICBmb2N1c1ZpZXctPnNldEZvY3VzKFF0OjpPdGhl
ckZvY3VzUmVhc29uKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>