<?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>79362</bug_id>
          
          <creation_ts>2004-04-10 03:07:37 +0000</creation_ts>
          <short_desc>Debug info is lost for .so files when they are dlclose&apos;d</short_desc>
          <delta_ts>2018-01-15 10:35:59 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>6</classification_id>
          <classification>Developer tools</classification>
          <product>valgrind</product>
          <component>general</component>
          <version>2.1  CVS</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>NOR</priority>
          <bug_severity>wishlist</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nicholas Nethercote">njn</reporter>
          <assigned_to name="Julian Seward">jseward</assigned_to>
          <cc>a.broekhuis</cc>
    
    <cc>ceej-kde</cc>
    
    <cc>eric.estievenart</cc>
    
    <cc>fpilhofe</cc>
    
    <cc>guy-wi</cc>
    
    <cc>heinrich.tomas</cc>
    
    <cc>hufilufi</cc>
    
    <cc>hyc</cc>
    
    <cc>ivosh</cc>
    
    <cc>kaspars.skels</cc>
    
    <cc>kfitch42</cc>
    
    <cc>nunchako</cc>
    
    <cc>philippe.waroquiers</cc>
    
    <cc>quanah</cc>
    
    <cc>rich</cc>
    
    <cc>thiago</cc>
    
    <cc>tom</cc>
    
    <cc>uwelk</cc>
    
    <cc>viric</cc>
    
    <cc>zoharg</cc>
    
    <cc>zzam</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>68</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>222656</commentid>
    <comment_count>0</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2004-04-10 03:07:37 +0000</bug_when>
    <thetext>Debug info is lost for .so files when they are dlclose&apos;d.  This makes some
errors much less informative than they should be.  Its mostly a problem for
errors that are detected and reported long after the relevant code has executed,
particularly
for memory leaks -- if the allocating code was in a dlclose&apos;d .so, the trace won&apos;t
identify the allocation point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241130</commentid>
    <comment_count>1</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2004-06-13 16:26:45 +0000</bug_when>
    <thetext>*** Bug 79875 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246145</commentid>
    <comment_count>2</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2004-07-06 10:39:38 +0000</bug_when>
    <thetext>*** Bug 84541 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246148</commentid>
    <comment_count>3</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2004-07-06 10:46:25 +0000</bug_when>
    <thetext>The problem ultimately comes from the fact that ExeContexts (ie. stack traces)
use an imperfect way of identifying code locations -- they use the memory address where the instruction of note is stored.  This uniquely identifies the instruction while it&apos;s in memory, but is no good once it&apos;s out of memory (ie. unloaded).

Better would be to use an object code location (eg. object file name + offset)
or even a source code location (eg. source file name + function + line number;  if these aren&apos;t known fall back on &quot;???&quot;).  Esp. with source file locations, if the lookup is done immediately the debug info will be present and fresh and all these problems would disappear.

The problem with these is that they don&apos;t have the single best property of the memory-addresses -- which are extremely compact and easy to get, ie. a single pointer represents the code location.  By comparison, source code locations require looking up debug info (which is wasteful if some of the ExeContexts are not subsequently printed) and storing strings.

So it&apos;s a matter of coming up with an efficient way to represent unique code locations.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246154</commentid>
    <comment_count>4</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2004-07-06 11:08:40 +0000</bug_when>
    <thetext>Nicholas Nethercote wrote:

&gt; ------- Additional Comments From njn25 cam ac uk  2004-07-06 10:46 -------
&gt; The problem ultimately comes from the fact that ExeContexts (ie. stack traces)
&gt; use an imperfect way of identifying code locations -- they use the memory address where the instruction of note is stored.  This uniquely identifies the instruction while it&apos;s in memory, but is no good once it&apos;s out of memory (ie. unloaded).
&gt; 
&gt; Better would be to use an object code location (eg. object file name + offset)
&gt; or even a source code location (eg. source file name + function + line number;  if these aren&apos;t known fall back on &quot;???&quot;).  Esp. with source file locations, if the lookup is done immediately the debug info will be present and fresh and all these problems would disappear.

I saw this suggestion on the -developer list. I think it&apos;s already been 
shown to be not a great idea, you&apos;ll introduce a lot of redundant 
symbol-table searching by doing that, and with the fallback required, 
then you&apos;ve just introduced a special case to your data format.

&gt; The problem with these is that they don&apos;t have the single best property of the memory-addresses -- which are extremely compact and easy to get, ie. a single pointer represents the code location.  By comparison, source code locations require looking up debug info (which is wasteful if some of the ExeContexts are not subsequently printed) and storing strings.

&gt; So it&apos;s a matter of coming up with an efficient way to represent unique code locations.

Please consider my suggestion from 84541. It only adds one element 
(timestamp or sequence number, sequence number is probably better) to 
the current context information. Then add a handler to intercept calls 
to _dl_debug_state() to update valgrind&apos;s notion of what objects are 
mapped in memory, and maintain a list of all the objects that have been 
added and removed, recording the current sequence number at load and 
unload time. Parsing the ELF linker map is pretty easy, I wrote similar 
code for FunctionCheck to do the same thing. You need to record the 
object name, the base address and size, and the start and end times.

When it comes time to display the symbols, you may need to reread the 
symbol tables of the unloaded objects but I think you already have code 
to do that.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246155</commentid>
    <comment_count>5</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2004-07-06 11:15:26 +0000</bug_when>
    <thetext>&gt; I think it&apos;s already been shown to be not a great idea

Where was this shown?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246163</commentid>
    <comment_count>6</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2004-07-06 11:47:20 +0000</bug_when>
    <thetext>Nicholas Nethercote wrote:
------- Additional Comments From njn25 cam ac uk  2004-07-06 11:15 -------
&gt;&gt;I think it&apos;s already been shown to be not a great idea

&gt; Where was this shown?

As pointed out here
http://sourceforge.net/mailarchive/message.php?msg_id=8864868

object_file + offset doesn&apos;t work because ELF files aren&apos;t that simple. 
I guess you can make the assumption that there&apos;s only one Text segment 
of interest in any object file, and that only Text is interesting in a 
stack trace. But functions like VG_(describe_addr) may need to look at 
the Data or BSS as well.

Mapping immediately to file/fn/line loses information that is often 
essential to diagnosing an error. Simple things like multi-line 
preprocessor macros are impossible to debug with just a single source 
line. (They&apos;re a pain to debug anyway, but with actual addresses it&apos;s 
possible to debug in assembler, if nothing else.)

There&apos;s also the very odd possibility that a particular module gets 
reloaded multiple times over the life of a process, and due to other 
activity, gets mapped to a different address each time. I&apos;ve seen this 
happen with Cyrus servers as they load and unload authentication 
mechanisms. I guess your three-level table approach still works here, 
but it&apos;ll have redundant strings in this case.

Looking at the problem again from your first statement: you want an 
ExeContext to uniquely identify an instruction. Right now you treat 
memory as a one-dimensional address space, with the assumption that a 
single Address uniquely identifies any instruction. But because this 
space actually can change over time, it is really a two-dimensional 
address space.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246165</commentid>
    <comment_count>7</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2004-07-06 11:55:15 +0000</bug_when>
    <thetext>...clearly in a 2D space, you cannot uniquely represent anything with only a single coordinate (Address). And using more than two coordinates is overkill. You already pointed out that it&apos;s wasteful to do full symbol resolution every time, because the majority of symbols won&apos;t ever be displayed.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377341</commentid>
    <comment_count>8</comment_count>
    <who name="Brian">brian95060</who>
    <bug_when>2005-09-29 19:53:16 +0000</bug_when>
    <thetext>There may be a work-around for this problem that will be good enough for most applications.  Try using LD_PRELOAD to load the libraries into memory as valgrind is started.  That seems to insure that the symbols are still around when valgrind gets around to doing symbol resolution.

Example:

LD_PRELOAD=/usr/local/lib/libbuggy.so valgrind --leak-check=full /my/app -x -y -z

This isn&apos;t a perfect fix for the problem.  If the application is sensitive to the order in which libraries are loaded this can cause more problems than it solves.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579612</commentid>
    <comment_count>9</comment_count>
    <who name="Allan Sandfeld">kde</who>
    <bug_when>2008-02-11 13:53:50 +0000</bug_when>
    <thetext>Confirmed to still be a bug in valgrind 3.2.3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752705</commentid>
    <comment_count>10</comment_count>
    <who name="Frank Pilhofer">fpilhofe</who>
    <bug_when>2009-05-05 20:05:45 +0000</bug_when>
    <thetext>I just ran into this problem also.  Besides stack traces with lots of ??&apos;s in them coming from memory leaks in modules that were since unloaded, I also had an even trickier issue: one of the shared libraries registered a &quot;destructor&quot; with pthread_key_create().  By the time the thread exited, the shared library was gone.  At least &quot;valgrind -v&quot; allowed me to compare the memory address where the crash occured against the valgrind messages &quot;discarding syms at [...] due to munmap()&quot;.

How about the following option, made in ignorance of the valgrind internals: At munmap() time, don&apos;t discard the symbols associated with this memory region.  Just preserve the region as is, marking it non-readable, non-writable and non-executable by the program under test.  When another (or the same) shared library is loaded (again), it is assigned a different address.  That way, when an error occurs, there is still a unique mapping from memory address to symbol (if not vice versa).

That would certainly add to the memory usage, especially if many shared libraries are loaded, unloaded and re-loaded, but I think it would be of immense value.  Maybe there could be a command-line option to preserve symbols for unloaded modules or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752764</commentid>
    <comment_count>11</comment_count>
      <attachid>33376</attachid>
    <who name="Frank Pilhofer">fpilhofe</who>
    <bug_when>2009-05-05 21:40:26 +0000</bug_when>
    <thetext>Created attachment 33376
so-thread-test.tar.gz

Here is a test case for the issue that I experienced.  Tested on linux-x86_64.

The main file implements a simple facility to do work asynchronously in a different thread, like a one-thread thread pool.  It then loads a shared library and runs a job from that shared library.

The job uses pthread_key_create() to arrange for a destructor to be called at thread exit time.  But the life of the thread exceeds the life of the shared library, so when thread exit time comes, the shared library and its destructor are long gone.

In the test.log file at line 80, the location of the crash is reported as &quot;??&quot;, and the stack trace doesn&apos;t give you much else to go on.  The only way to make some sense of it is to look at line 75, which shows that the address of the crash was within the range of the shared library.

Obviously, I would like valgrind to report the symbol associated with the address (&quot;test_destructor&quot;), possibly with some useful hints like: &quot;This address used to belong to function [xx] in file [yy] which was unloaded.&quot;

Yes, the test_job() function is buggy.  But if it wasn&apos;t, I wouldn&apos;t need valgrind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752767</commentid>
    <comment_count>12</comment_count>
      <attachid>33377</attachid>
    <who name="Frank Pilhofer">fpilhofe</who>
    <bug_when>2009-05-05 21:47:43 +0000</bug_when>
    <thetext>Created attachment 33377
so-thread-test.tar.gz

Sorry, forgot a pthread_join().  Updated test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067965</commentid>
    <comment_count>13</comment_count>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-01-04 16:23:44 +0000</bug_when>
    <thetext>I have created a patch that resolves this issue for me. Basically when debug info is going to be discarded I place it in a separate list. I then search both lists in many places. A few improvements might be to tweak things so that function name (or perhaps file names) get decorated with something like *UNLOADED*, to give the user a better idea about what happened. This is only tested this very briefly.

One other approach might be to just move the debuginfo to the end of the list (possibly also marking a new flag in the structure indicating it as discarded, but I was reluctant to do this given that I noticed another function in the file that messes with order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067967</commentid>
    <comment_count>14</comment_count>
      <attachid>55565</attachid>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-01-04 16:27:05 +0000</bug_when>
    <thetext>Created attachment 55565
potential patch to allow memory leak stack traces for unloaded .so files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069481</commentid>
    <comment_count>15</comment_count>
      <attachid>55670</attachid>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-01-07 05:08:22 +0000</bug_when>
    <thetext>Created attachment 55670
update patch with regression tests

Same patch as before, but now with +inf% more regression tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071504</commentid>
    <comment_count>16</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2011-01-10 22:48:45 +0000</bug_when>
    <thetext>How do you decide which set of debuginfo to use to decode a given address if there are multiple possibilities?

The other obvious question is that of possible unbounded memory usage in a long running process that repeatedly opens and closes shared libraries, possibly even opening the same one repeatedly - do you do anything special to avoid storing duplicates for example?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071515</commentid>
    <comment_count>17</comment_count>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-01-10 23:05:52 +0000</bug_when>
    <thetext>Currently I stop at the first match I find. I search the list of currently valid symbols, then the list of symbols that have been unloaded. The unloaded list is order from most recently unloaded to least recent.

The unbounded memory issue does exist. And AFAICT there is no real good solution if we are going to put off resolving leak stack traces until the process ends. I guess when adding to the unloaded symbols list I could delete anything that was completer shadowed by the new addition. I was reluctant to do this since I was thinking that a follow on to this might be to add a &apos;generation number&apos; to the address. I would then update the gen# when things get dlopen/dlclose&apos;d which would theoretically allow me to find the right symbols even if a new dlopen used the same address space as something that was dlclosed.

That all being said, my (personal) experience with valgrind is that I don&apos;t normally use it on long running stuff (in large part b/c it already slows/bloats things) I work hard to make the shortest/smallest case to reproduce the problem. So I don&apos;t see the slow &apos;leak&apos; I am causing as all that problematic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087840</commentid>
    <comment_count>18</comment_count>
      <attachid>57256</attachid>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-02-14 18:50:56 +0000</bug_when>
    <thetext>Created attachment 57256
Create new CLO for keeping unloaded symbols

Since the only real feedback I got was that this change would cause a showstopper for programs that repeatedly dlopen/dlclose, I turned this into a CLO so that the user could opt in to the extra memory usage if they need it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088006</commentid>
    <comment_count>19</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2011-02-15 06:19:55 +0000</bug_when>
    <thetext>Nonsense - as far as I can see you haven&apos;t addressed, in any reasonable way, the question of how to resolve stack traces when multiple different ELF objects may have been loaded at a given address over the life of a program.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091329</commentid>
    <comment_count>20</comment_count>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-02-25 18:54:22 +0000</bug_when>
    <thetext>I thought I had responded to this a while back, somehow my post never showed up ... anyway.

I think that you are letting better be the enemy of good-enough

  This patch is not perfect, there are cases where it will print the wrong answer, when multiple objects get mapped to the same AVMA over the life of the program. In my experience (which is by no means comprehensive) this is not a common enough situation to worry about. Having it give the right answer most of the time is a huge win (at least for me). The LD_PRELOAD hack mentioned above only kind-of works for me, and introduces a number of new false positives since dlclose doesn&apos;t actually clean up completely (since the object is still loaded). And having the object still loaded causes other issues, e.g. if you dlopen/dlclose the same object twice, static variables normally get reinitialized (on the second dlopen), but will still have stale data in them with LD_PRELOAD.

I have looked into making a patch that would always get the right answer. This means teaching valgrind that addresses (or at least ExeContext&apos;s) are not only about where, but also when. Two potential starting points are 1) Extend Addr to include the &apos;when&apos; 2) Extend ExeContext to include the when. Option (1) would have far reaching implications all over the code base, so I gave up on that one completely. (2) Is a little less invasive, but it does involve changing a number of function signatures (or adding a number of new functions). Everything that is in the path of turning an ExeContext into a printed stack trace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091377</commentid>
    <comment_count>21</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-02-25 23:17:22 +0000</bug_when>
    <thetext>(In reply to comment #20)
&gt; I have looked into making a patch that would always get the right answer. This
&gt; means teaching valgrind that addresses (or at least ExeContext&apos;s) are not only
&gt; about where, but also when. Two potential starting points are 1) Extend Addr to
&gt; include the &apos;when&apos; 2) Extend ExeContext to include the when. Option (1) would
&gt; have far reaching implications all over the code base, so I gave up on that one
&gt; completely. (2) Is a little less invasive, but it does involve changing a
&gt; number of function signatures (or adding a number of new functions). Everything
&gt; that is in the path of turning an ExeContext into a printed stack trace.

Actually the ExeContexts themselves don&apos;t need any changing, they already include a monotonically increasing serial number &quot;ecu&quot;.

It might be ugly, but you could export an &quot;ec_current_ecu&quot; as a global to make it available to the debuginfo code, so that you can reference it while registering a symbol table, and again when doing symbol lookups. Then no function signatures need to change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091458</commentid>
    <comment_count>22</comment_count>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-02-26 05:50:52 +0000</bug_when>
    <thetext>Actually they would still need to change, the full ExeContext does not get passed all the way down, it quickly devolves into a list of Addr&apos;s and then each Addr is treated independently at the point that things actually get translated from an address into file/line information. So we would either need to change things so that ExeContext&apos;s passed further down the stack, or have the &quot;ecu&quot; (or some other indication of &apos;when&apos;) get passed along.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091648</commentid>
    <comment_count>23</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-02-27 12:00:48 +0000</bug_when>
    <thetext>(In reply to comment #22)
&gt; Actually they would still need to change, the full ExeContext does not get
&gt; passed all the way down, it quickly devolves into a list of Addr&apos;s and then
&gt; each Addr is treated independently at the point that things actually get
&gt; translated from an address into file/line information. So we would either need
&gt; to change things so that ExeContext&apos;s passed further down the stack, or have
&gt; the &quot;ecu&quot; (or some other indication of &apos;when&apos;) get passed along.

Pretty sure you&apos;re overlooking something (although I haven&apos;t tried this with your patch yet, will try it in the next day or so). ExeContexts are processed one at a time. All you need to do is set the global ec_current_ecu when you&apos;re creating a new ExeContext and when you&apos;re processing one (e.g. pp_ExeContext). It doesn&apos;t need to get passed along at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091896</commentid>
    <comment_count>24</comment_count>
      <attachid>57564</attachid>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-02-28 05:57:20 +0000</bug_when>
    <thetext>Created attachment 57564
Addition for ecu tracking

This is what I had in mind. Add it on top of your latest patch. It doesn&apos;t appear to break anything, anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092070</commentid>
    <comment_count>25</comment_count>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-02-28 17:42:05 +0000</bug_when>
    <thetext>OOOOoooohhhh. I totally misunderstood where you were going in the previous post. This seems to get the job done with very little new code. Unfortunately I suspect it has some nasty side effects. In particular, there are some places that print out stacktraces without going through pp_ExeContext. So those would end up using a stale value in VG_(ec_curr_ecu).

Also, is it a true statement that only 1 thread is ever printing stack traces at a time? I don&apos;t have a good feel for all the guarantees of valgrind yet. The case I am thinking about is two threads doing something bad (e.g. accessing off the end of a malloc&apos;ed array) at the same time. They would both print a current stack trace (i.e. where the bad access happened) and a past stack trace (i.e. where the allocation of said array occurred).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092238</commentid>
    <comment_count>26</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-03-01 00:12:16 +0000</bug_when>
    <thetext>(In reply to comment #25)
&gt; OOOOoooohhhh. I totally misunderstood where you were going in the previous
&gt; post. This seems to get the job done with very little new code. Unfortunately I
&gt; suspect it has some nasty side effects. In particular, there are some places
&gt; that print out stacktraces without going through pp_ExeContext. So those would
&gt; end up using a stale value in VG_(ec_curr_ecu).

I was wondering about that. In those cases, we have no idea what ecu applies, so it&apos;s hard to say that any particular value is more right or wrong than any other. I was thinking of zeroing VG_(ec_curr_ecu) before pp_ExeContext returns, and then we can skip the ecu checks in debuginfo when VG_(ec_curr_ecu) is zero. But regardless, the odds of returning a wrong value are the same.

&gt; Also, is it a true statement that only 1 thread is ever printing stack traces
&gt; at a time? I don&apos;t have a good feel for all the guarantees of valgrind yet. The
&gt; case I am thinking about is two threads doing something bad (e.g. accessing off
&gt; the end of a malloc&apos;ed array) at the same time. They would both print a current
&gt; stack trace (i.e. where the bad access happened) and a past stack trace (i.e.
&gt; where the allocation of said array occurred).

valgrind itself is single-threaded, no matter how many threads it simulates on the target.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092248</commentid>
    <comment_count>27</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-03-01 01:56:26 +0000</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; OOOOoooohhhh. I totally misunderstood where you were going in the previous
&gt; &gt; post. This seems to get the job done with very little new code. Unfortunately I
&gt; &gt; suspect it has some nasty side effects. In particular, there are some places
&gt; &gt; that print out stacktraces without going through pp_ExeContext. So those would
&gt; &gt; end up using a stale value in VG_(ec_curr_ecu).
&gt; 
&gt; I was wondering about that. In those cases, we have no idea what ecu applies,
&gt; so it&apos;s hard to say that any particular value is more right or wrong than any
&gt; other. I was thinking of zeroing VG_(ec_curr_ecu) before pp_ExeContext returns,
&gt; and then we can skip the ecu checks in debuginfo when VG_(ec_curr_ecu) is zero.
&gt; But regardless, the odds of returning a wrong value are the same.

Having looked at it some more, all of the calls to pp_StackTrace are just using a &quot;current&quot; stack on a current thread. There&apos;s probably no reason to examine the unloadedDebugInfo in these cases. Flagging this case by zeroing VG_(ec_curr_ecu) would be fine. (I guess it would be possible for a function to cause its caller to get munmap&apos;d. Good way to crash yourself.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092820</commentid>
    <comment_count>28</comment_count>
      <attachid>57625</attachid>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-03-02 22:34:47 +0000</bug_when>
    <thetext>Created attachment 57625
Revised ecu tracking patch

Added changes from comment #27</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093078</commentid>
    <comment_count>29</comment_count>
      <attachid>57651</attachid>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-03-03 20:13:05 +0000</bug_when>
    <thetext>Created attachment 57651
Cleaned up version of patch to keep syms of unloaded code

This contains all the latest work, it should properly decode all symbols, even when multiple objects get loaded at the same AVMA. Some improved testing is probably worth while. This version passes all the same tests (make regtest) that a clean checkout of trunk does for me. I get 6 failures on both:
memcheck/tests/linux/stack_switch        (stderr)
helgrind/tests/pth_barrier3              (stderr)
helgrind/tests/tc06_two_races_xml        (stderr)
drd/tests/pth_barrier3                   (stderr)
drd/tests/tc09_bad_unlock                (stderr)
exp-ptrcheck/tests/bad_percentify        (stderr)

I get very similar numbers (to within .1 sec) on &quot;perl perf/vg_perf perf/&quot; for clean trunk vs this patch. Even when I tweaked the patch to keep symbols by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093186</commentid>
    <comment_count>30</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-03-04 02:19:06 +0000</bug_when>
    <thetext>(In reply to comment #29)
&gt; Created an attachment (id=57651) [details]
&gt; Cleaned up version of patch to keep syms of unloaded code
&gt; 
&gt; This contains all the latest work, it should properly decode all symbols, even
&gt; when multiple objects get loaded at the same AVMA. Some improved testing is
&gt; probably worth while. This version passes all the same tests (make regtest)
&gt; that a clean checkout of trunk does for me.

Probably not significant, but why are you using &lt;= instead of &lt; here? Just curious for the reasoning.

+   for (di = list; di != NULL; di = di-&gt;next) {
+      if ( ( VG_(ec_curr_ecu) &lt;= di-&gt;first_ecu) || 
+             VG_(ec_curr_ecu) &gt; di-&gt;last_ecu) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093192</commentid>
    <comment_count>31</comment_count>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-03-04 03:20:34 +0000</bug_when>
    <thetext>(In reply to comment #30)
&gt; Probably not significant, but why are you using &lt;= instead of &lt; here? Just
&gt; curious for the reasoning.
&gt; 
&gt; +   for (di = list; di != NULL; di = di-&gt;next) {
&gt; +      if ( ( VG_(ec_curr_ecu) &lt;= di-&gt;first_ecu) || 
&gt; +             VG_(ec_curr_ecu) &gt; di-&gt;last_ecu) {

Assuming I understood the ExeContext code correctly, first_ecu actually contains the last ecu that was allocated before this debuginfo was created, and last_ecu contains the last ecu that was allocated before this debuginfo was removed (potentially the same value as first_ecu, if no ExeContexts were allocated between load and unload).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093211</commentid>
    <comment_count>32</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-03-04 08:06:44 +0000</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; Probably not significant, but why are you using &lt;= instead of &lt; here? Just
&gt; &gt; curious for the reasoning.
&gt; &gt; 
&gt; &gt; +   for (di = list; di != NULL; di = di-&gt;next) {
&gt; &gt; +      if ( ( VG_(ec_curr_ecu) &lt;= di-&gt;first_ecu) || 
&gt; &gt; +             VG_(ec_curr_ecu) &gt; di-&gt;last_ecu) {
&gt; 
&gt; Assuming I understood the ExeContext code correctly, first_ecu actually
&gt; contains the last ecu that was allocated before this debuginfo was created, and
&gt; last_ecu contains the last ecu that was allocated before this debuginfo was
&gt; removed

OK, makes sense.

&gt; (potentially the same value as first_ecu, if no ExeContexts were
&gt; allocated between load and unload).

Which raises another interesting point. If first_ecu and last_ecu are the same at the time of unmap, then we know that this debuginfo is totally unused and could be freed instead of saved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094769</commentid>
    <comment_count>33</comment_count>
      <attachid>57625</attachid>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-03-08 13:24:23 +0000</bug_when>
    <thetext>Comment on attachment 57625
Revised ecu tracking patch

Merged into attachment #57651</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097126</commentid>
    <comment_count>34</comment_count>
      <attachid>58003</attachid>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2011-03-14 21:48:36 +0000</bug_when>
    <thetext>Created attachment 58003
keep syms of unloaded code - less dirty hackish

Finally got through adding all the new functions with new function signatures. This patch removes the dirty hack in the previous patch where global vars were used to avoid having extra function arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097177</commentid>
    <comment_count>35</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-03-15 03:29:30 +0000</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=58003) [details]
&gt; keep syms of unloaded code - less dirty hackish
&gt; 
&gt; Finally got through adding all the new functions with new function signatures.
&gt; This patch removes the dirty hack in the previous patch where global vars were
&gt; used to avoid having extra function arguments.

The comments added in this chunk are no longer relevant, just drop them.

&gt;Index: coregrind/m_execontext.c
&gt;===================================================================
&gt;--- coregrind/m_execontext.c	(revision 11643)
&gt;+++ coregrind/m_execontext.c	(working copy)
&gt;@@ -168,8 +169,11 @@
&gt; 
&gt; /* Print an ExeContext. */
&gt; void VG_(pp_ExeContext) ( ExeContext* ec )
&gt;-{
&gt;-   VG_(pp_StackTrace)( ec-&gt;ips, ec-&gt;n_ips );
&gt;+{  /* Set the current ecu to decode, this hack avoids changing a number of
&gt;+   function signatures in order to pass this info all the way down to
&gt;+   debuginfo */
&gt;+   VG_(pp_StackTrace_with_ecu)( ec-&gt;ecu, ec-&gt;ips, ec-&gt;n_ips );
&gt;+   /* And reset to decoding current stack traces */
&gt; }
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160157</commentid>
    <comment_count>36</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2011-09-06 07:16:29 +0000</bug_when>
    <thetext>*** Bug 281449 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182410</commentid>
    <comment_count>37</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-11-07 19:54:09 +0000</bug_when>
    <thetext>Any more action on this bug? Why is its status still &quot;Unconfirmed&quot; when the issue is obviously real, and we have a working patch for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182426</commentid>
    <comment_count>38</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2011-11-07 20:20:35 +0000</bug_when>
    <thetext>We don&apos;t generally bother with the NEW/ASSIGNED states very much, so don&apos;t read anything into the UNCONFIRMED. I&apos;ve set it to NEW now though if that makes you happier.

As I have made clear I do not consider the current patch suitable, so I won&apos;t be merging it. If somebody else with commit access wants to then that is up to them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182442</commentid>
    <comment_count>39</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2011-11-07 20:34:35 +0000</bug_when>
    <thetext>(In reply to comment #38)
&gt; We don&apos;t generally bother with the NEW/ASSIGNED states very much, so don&apos;t read
&gt; anything into the UNCONFIRMED. I&apos;ve set it to NEW now though if that makes you
&gt; happier.

OK.

&gt; As I have made clear I do not consider the current patch suitable, so I won&apos;t
&gt; be merging it. If somebody else with commit access wants to then that is up to
&gt; them.

Looking back, you expressed objections in comment #16 and comment #19. Comment #19 is a non-issue, the patch tracks all addresses unambiguously. That only leaves the question of unbounded memory growth in comment #16. I don&apos;t believe that&apos;s a reasonable complaint. If a program does a continuous sequence of mallocs and frees, valgrind&apos;s tracking of those events must also be unbounded. What&apos;s the difference between these two cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182515</commentid>
    <comment_count>40</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2011-11-07 21:04:04 +0000</bug_when>
    <thetext>Sorry, I hadn&apos;t realised there was a version of the patch that handled the multiple objects at one address problem. I&apos;ll try and review that when I get a chance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196599</commentid>
    <comment_count>41</comment_count>
    <who name="Alexander B">a.broekhuis</who>
    <bug_when>2011-12-08 15:51:02 +0000</bug_when>
    <thetext>Hi,

Is there any progress on this issue? I would like to have this supported in Valgrind.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213608</commentid>
    <comment_count>42</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2012-01-12 16:10:52 +0000</bug_when>
    <thetext>*** Bug 291380 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218953</commentid>
    <comment_count>43</comment_count>
    <who name="">kaspars.skels</who>
    <bug_when>2012-01-26 18:56:05 +0000</bug_when>
    <thetext>Hi! The patch seams to be based on old baseline (fails to apply..)
Would it be possible to get it for 3.7.0? That would be really appreciated.

Kind Regards, Kaspars</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218971</commentid>
    <comment_count>44</comment_count>
      <attachid>68205</attachid>
    <who name="Howard Chu">hyc</who>
    <bug_when>2012-01-26 19:48:00 +0000</bug_when>
    <thetext>Created attachment 68205
Refreshed patch against svn r12356

Obsoletes attachment id 58003.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219096</commentid>
    <comment_count>45</comment_count>
    <who name="">kaspars.skels</who>
    <bug_when>2012-01-26 23:15:34 +0000</bug_when>
    <thetext>Thanks! There is a missing &quot;{&quot; in m_debuginfo/debuginfo.c:1656
But I&apos;m quite sure it&apos;s not working, I still don&apos;t get debuginfo

==20034== 123 bytes in 1 blocks are definitely lost in loss record 3 of 3
==20034==    at 0x40281BB: operator new[](unsigned int) (vg_replace_malloc.c:343)
==20034==    by 0x4034319: ???
==20034==    by 0x40347C6: ???
==20034==    by 0x8064695: main (in /home/kaspars/Projects/device/bin/cfw)

P.S. If I leave the library open it will have the traces as needed

==20081== 123 bytes in 1 blocks are definitely lost in loss record 6 of 8
==20081==    at 0x40281BB: operator new[](unsigned int) (vg_replace_malloc.c:343)
==20081==    by 0x4034319: function() (in /home/kaspars/Projects/device/bin/libcfw_example.so)
==20081==    by 0x40347C6: example::start() (in /home/kaspars/Projects/device/bin/libcfw_example.so)
==20081==    by 0x8064695: main (in /home/kaspars/Projects/device/bin/cfw)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219103</commentid>
    <comment_count>46</comment_count>
      <attachid>68213</attachid>
    <who name="Howard Chu">hyc</who>
    <bug_when>2012-01-26 23:22:53 +0000</bug_when>
    <thetext>Created attachment 68213
Refreshed patch against svn r12356

Fixed typo in previous copy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219104</commentid>
    <comment_count>47</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2012-01-26 23:24:21 +0000</bug_when>
    <thetext>(In reply to comment #45)
&gt; Thanks! There is a missing &quot;{&quot; in m_debuginfo/debuginfo.c:1656

Sorry about that. Fixed in updated attachment.

&gt; But I&apos;m quite sure it&apos;s not working, I still don&apos;t get debuginfo

It isn&apos;t enabled by default, you must use the --keep-unloaded-syms=yes option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219113</commentid>
    <comment_count>48</comment_count>
    <who name="">kaspars.skels</who>
    <bug_when>2012-01-26 23:45:06 +0000</bug_when>
    <thetext>Great! It really does work with all the line numbers and everything :) 

Thanks a lot! /Kaspars



==30057== 123 bytes in 1 blocks are definitely lost in loss record 3 of 3
==30057==    at 0x40281BB: operator new[](unsigned int) (vg_replace_malloc.c:343)
==30057==    by 0x4034319: function() (example.cpp:8)
==30057==    by 0x40347C6: example::start() (example.cpp:24)
==30057==    by 0x8064695: main (core.cpp:76)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219114</commentid>
    <comment_count>49</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2012-01-26 23:49:50 +0000</bug_when>
    <thetext>(In reply to comment #48)
&gt; Great! It really does work with all the line numbers and everything :) 
&gt; 
&gt; Thanks a lot! /Kaspars

Yes, it works perfectly well. I just hope someone commits it before the patch bitrots again.

&gt; ==30057== 123 bytes in 1 blocks are definitely lost in loss record 3 of 3
&gt; ==30057==    at 0x40281BB: operator new[](unsigned int)
&gt; (vg_replace_malloc.c:343)
&gt; ==30057==    by 0x4034319: function() (example.cpp:8)
&gt; ==30057==    by 0x40347C6: example::start() (example.cpp:24)
&gt; ==30057==    by 0x8064695: main (core.cpp:76)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224332</commentid>
    <comment_count>50</comment_count>
      <attachid>68609</attachid>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2012-02-08 04:59:56 +0000</bug_when>
    <thetext>Created attachment 68609
refresh patch again r12368

This patch should work against r12368, it includes testing related files that were missing in the the previous refresh.

I am still very interested in getting this merged into the mainline. I am very willing to put more work into it. But, at the moment I don&apos;t know what to do to push it forward. Any feedback would be greatly appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304539</commentid>
    <comment_count>51</comment_count>
    <who name="Endre Szalai">hufilufi</who>
    <bug_when>2012-10-09 13:00:00 +0000</bug_when>
    <thetext>Are there any plans to include this patch in Valgrind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312661</commentid>
    <comment_count>52</comment_count>
    <who name="Magnus">nunchako</who>
    <bug_when>2012-11-05 11:15:05 +0000</bug_when>
    <thetext>8 years.. a working patch.. what is the problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317465</commentid>
    <comment_count>53</comment_count>
    <who name="Endre Szalai">hufilufi</who>
    <bug_when>2012-11-22 12:25:52 +0000</bug_when>
    <thetext>Still very interested to see the patch be accepted..... Please please please :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322882</commentid>
    <comment_count>54</comment_count>
      <attachid>75779</attachid>
    <who name="Kevin Fitch">kfitch42</who>
    <bug_when>2012-12-11 05:22:23 +0000</bug_when>
    <thetext>Created attachment 75779
Refresh patch against r13174.

In my testing (x86-64 linux) this patch does not introduce any more failures, and it passes newly introduced tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374954</commentid>
    <comment_count>55</comment_count>
    <who name="Chris Hillery">ceej-kde</who>
    <bug_when>2013-06-08 07:25:54 +0000</bug_when>
    <thetext>Thank you very much, Kevin Fitch, for this patch. I sincerely hope that it will be accepted into the mainline of valgrind someday.

I did find an issue with it, however - it doesn&apos;t seem to work with --gen-suppressions, at least for memory leaks. All the stack frames in the .so are reported in the error report, but the generated suppression block just has &quot;obj:*&quot; for each of them. This of course could easily suppress completely different leaks (in completely different libraries even) in addition to the one that triggered the report.

I haven&apos;t yet tried manually creating a suppressions file with the real symbols in it as reported by --keep-unloaded-syms=yes. Hopefully if that does work, then expanding your patch to also put those symbols into --gen-suppressions output will be straightforward. If that doesn&apos;t work, though, I imagine it gets a little hairier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538341</commentid>
    <comment_count>56</comment_count>
    <who name="Tom Hughes">tom</who>
    <bug_when>2015-08-20 21:38:29 +0000</bug_when>
    <thetext>*** Bug 351536 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538345</commentid>
    <comment_count>57</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2015-08-20 22:02:26 +0000</bug_when>
    <thetext>Tom Hughes wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=79362
&gt;
&gt; Tom Hughes &lt;tom@compton.nu&gt; changed:

When are you actually going to merge this fix? The bug has been open for over 
a decade and a clean fix has been available for nearly 5 years.


&gt;             What    |Removed                     |Added
&gt; ----------------------------------------------------------------------------
&gt;                   CC|                            |thiago@kde.org
&gt;
&gt; --- Comment #56 from Tom Hughes &lt;tom@compton.nu&gt; ---
&gt; *** Bug 351536 has been marked as a duplicate of this bug. ***
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581639</commentid>
    <comment_count>58</comment_count>
    <who name="Quanah Gibson-Mount">quanah</who>
    <bug_when>2016-03-10 18:06:19 +0000</bug_when>
    <thetext>Please fix this?  It causes significant pain for many people using valgrind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690864</commentid>
    <comment_count>59</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-07-25 11:19:17 +0000</bug_when>
    <thetext>(In reply to Howard Chu from comment #57)

&gt; a clean fix has been available for nearly 5 years.

I&apos;m trying to understand the proposed fix.  What I&apos;ve gathered is:

(1) Each ExeContext has a 32-bit unique ID.

(2) m_execontext.c issues unique IDs in a monotonically increasing sequence,
    from ec_next_ecu.

(3) The patch extends struct DebugInfo so as to record the unique ID (2) at
    both the time the DebugInfo came into being and the point at which the
    associated .so was unmapped.

(4) DebugInfos for objects that have been unmapped are moved into their own
    linked list (unloadedDebugInfo_list)

(5) When symbolicating an ExeContext, I assume that you use its unique to
    identify which set of DebugInfos in unloadedDebugInfo_list can
    participate in its symbolisation (viz, should be used to look up symbol
    names etc).

This seems somewhat plausible.  But what I don&apos;t understand is how this
interacts with the fact that m_execontext doesn&apos;t necessarily issue a new
ExeContext with a new unique every time a stack unwind is requested.
Instead, it unwinds the stack, then checks to find if it already has an
ExeContext with that stack.  If so it merely gives out a pointer to the
existing version rather than creating a new one.

I&apos;m not saying the patch is wrong.  I am saying I don&apos;t understand it.  Was
the m_execontext duplicate-stack-removal behaviour taken into account in the
design of the fix?

AFAICS, the only thing that you can conclude from the fact that

  execontext1.ecu &gt; execontext2.ecu

is that execontext1&apos;s stack was observed for the first time before
execontext2&apos;s stack was observed for the first time.  And that the
two stacks are different, since the .ecus would be the same if the
stacks were the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690868</commentid>
    <comment_count>60</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-07-25 11:33:58 +0000</bug_when>
    <thetext>(In reply to Julian Seward from comment #59)
&gt; AFAICS, the only thing that you can conclude from the fact that
&gt; 
&gt;   execontext1.ecu &gt; execontext2.ecu
&gt; 
&gt; is that execontext1&apos;s stack was observed for the first time before
&gt; execontext2&apos;s stack

Duh.  I meant &quot;after&quot;, not &quot;before&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690877</commentid>
    <comment_count>61</comment_count>
    <who name="Howard Chu">hyc</who>
    <bug_when>2017-07-25 11:57:05 +0000</bug_when>
    <thetext>Julian Seward wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=79362
&gt; 
&gt; --- Comment #59 from Julian Seward &lt;jseward@acm.org&gt; ---
&gt; (In reply to Howard Chu from comment #57)
&gt; 
&gt;&gt; a clean fix has been available for nearly 5 years.
&gt; 
&gt; I&apos;m trying to understand the proposed fix.  What I&apos;ve gathered is:
&gt; 
&gt; (1) Each ExeContext has a 32-bit unique ID.
&gt; 
&gt; (2) m_execontext.c issues unique IDs in a monotonically increasing sequence,
&gt;      from ec_next_ecu.
&gt; 
&gt; (3) The patch extends struct DebugInfo so as to record the unique ID (2) at
&gt;      both the time the DebugInfo came into being and the point at which the
&gt;      associated .so was unmapped.
&gt; 
&gt; (4) DebugInfos for objects that have been unmapped are moved into their own
&gt;      linked list (unloadedDebugInfo_list)
&gt; 
&gt; (5) When symbolicating an ExeContext, I assume that you use its unique to
&gt;      identify which set of DebugInfos in unloadedDebugInfo_list can
&gt;      participate in its symbolisation (viz, should be used to look up symbol
&gt;      names etc).
&gt; 
&gt; This seems somewhat plausible.  But what I don&apos;t understand is how this
&gt; interacts with the fact that m_execontext doesn&apos;t necessarily issue a new
&gt; ExeContext with a new unique every time a stack unwind is requested.
&gt; Instead, it unwinds the stack, then checks to find if it already has an
&gt; ExeContext with that stack.  If so it merely gives out a pointer to the
&gt; existing version rather than creating a new one.
&gt; 
&gt; I&apos;m not saying the patch is wrong.  I am saying I don&apos;t understand it.  Was
&gt; the m_execontext duplicate-stack-removal behaviour taken into account in the
&gt; design of the fix?

It&apos;s been so long I don&apos;t remember the fine details any more. But I think it&apos;s 
safe to say, most of the time, if a shared object has been unloaded and a 
different one has been loaded, even if mapped to the same base address as the 
previous object, it is unlikely to have the same sizes and ordering of 
functions as the previous object, and thus unlikely to produce duplicates of 
any existing stack traces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691967</commentid>
    <comment_count>62</comment_count>
      <attachid>106984</attachid>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-07-31 14:09:41 +0000</bug_when>
    <thetext>Created attachment 106984
epochs-3.diff

Here&apos;s a patch against 3.13.0.  It works only for the tools &quot;none&quot; and
&quot;memcheck&quot; -- currently it disables building of all other tools.  It should
be able to generate suppressions for unloaded libraries too, although I
haven&apos;t tested that.

This is a from-scratch implementation.  I couldn&apos;t convince myself that the
use of ExeContext uniques was reliable and the more I looked into it, the
more doubts I had.  This patch adds two new types:

* DiEpoch, which is just a wrapper around a 32 bit unsigned integer.
  These mark points in time where debuginfo is loaded or unloaded.

* ExeContextAndEpoch.  This is a pairing of an ExeContext (an array of code
  addresses that is a stack trace) and the DiEpoch in which it should be
  interpreted.

The core idea is that an ExeContext is still a stack trace, but one that
can&apos;t be symbolised.  To symbolise it, we need to specify a DiEpoch too,
hence this pairing.  In many places, the patch replaces uses of ExeContext*
with ExeContextAndEpoch.

Each DebugInfo structure acquires two new DiEpoch fields which indicate the
first and last epochs for which they are valid.  There is still only one top
level list of DebugInfo structures, which holds both the &quot;active&quot; and
&quot;archived&quot; DebugInfos.  They are distinguished by having the last-epoch
field be set to DiEpoch_INVALID() for an active structure, and to a valid
value to an archived structure.

From a user&apos;s point of view, the default behaviour of the patch is still to
discard debuginfo -- at least for now.  To retain it, use
--keep-debuginfo=yes.  You can see the difference if you run with -v.  Then
you will see messages of the form

  Discarding syms at [..] due to munmap()    with --keep-debuginfo=no

but

  Archiving syms at [..] due to munmap()    with --keep-debuginfo=no

Two things that I don&apos;t know if I kludged correctly or not, are the GDB
server support and the XTree support.  In both cases these just symbolise
against the current epoch, when it is necessary to do so.  So their
behaviour should at least be unchanged from before, even if they are not yet
&quot;epoch-aware&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692050</commentid>
    <comment_count>63</comment_count>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2017-07-31 21:34:19 +0000</bug_when>
    <thetext>I quickly read the patch, here are a few comments

* For what concerns the gdbserver code and the xtree code: for sure, 
  using the current epoch will be as good (or as bad) as the current
  behaviour. But once the patch is committed, I will update the code
  to use a real epoch where it is better (basically, I think xtree should store
  an epoch, while gdbserver should normally be good enough with current epoch)
  But see below the idea to store epoch inside execontext,which should probably
  solve the xtree case.

* there are some tl_assert occurences in coregrind, where vg_assert should
  be used instead.

* for the --help of  --keep-debuginfo=..  this is not limited to memory leak
  stack traces as I understand, but all stack traces recorded as an execontext.
  E.g. IIUC, this is also valid for other types of errors.
  Same for the user manual.

* For execontext, instead of just storing the execcontext
  (e.g. in an mc chunk allocated by memecheck for each block), we now store
  an execontext + epoch.

  An alternative approach that will reduce the memory would be to store
  the epoch of an execontext in the execcontext itself.
  (by default, invalid epoch, indicating &apos;execontext valid in the current
  set of di&apos;).
  Then when a DI is archived, scan the execontext, and check if an execontext
  contains some addressed that are in the debuginfo being archived.
  If yes, change the execontext epoch from invalid to the current epoch
  (before unloading the DI).
  This should reduce the impact on all execontext users, both in terms
  of code change, and in terms of memory increase where an execontext
  has to be stored.
  This approach spares memory (and I think less impact on tools), but
  each unload of a DI means scanning the execontext.
  With this approach, when searching for an execontext that corresponds to
  a (fresh) stacktrace, only execontext that have an invalid epoch should
  be returned (as a fresh stack trace cannot match an execontext that
  has been marked with a real epoch). This should also avoid the
  problem of having 2 errors being the same, while in reality their 
  execontext are different, as a new error will never give back an 
  &apos;old execontext&apos; with a non invalid epoch.
  Similarly, IIUC, origin tracking will store an ec, not an ec + epoch.
  Storing the epoch inside the execcontext will also provide correct
  DI epoch for track origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692077</commentid>
    <comment_count>64</comment_count>
      <attachid>107001</attachid>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-08-01 06:41:44 +0000</bug_when>
    <thetext>Created attachment 107001
epochs-4.diff

Now builds for all tools again, although only Memcheck is properly
&quot;epoch-aware&quot;.  All other tools just use the current epoch when needed,
so their behaviour should be unchanged related to pre-patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692079</commentid>
    <comment_count>65</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-08-01 06:48:16 +0000</bug_when>
    <thetext>(In reply to Philippe Waroquiers from comment #63)

Thanks for the feedback.  I&apos;ll fix the small stuff.

&gt; * For execontext, instead of just storing the execcontext
&gt;   (e.g. in an mc chunk allocated by memecheck for each block), we now store
&gt;   an execontext + epoch.

I did consider this design, in some detail, but decided not to do that.
Instead I kept semantics of ExeContext unchanged and added a new type
ExeContextAndEpoch.

The problem is that we would lose the ability to do pointer-comparisons
on ExeContext*s.  Currently, if two ExeContext*s (the addresses) are
different then we are sure that the vectors of addresses are different
(and vice versa), because m_execontext.c carefully de-duplicates them.
And I was unsure what to do about maintaining those semantics if we add
an epoch to ExeContext.

That said, fixing XTree, the GDB server and all the other tools (if it
is possible) would be a good thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692080</commentid>
    <comment_count>66</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-08-01 06:49:42 +0000</bug_when>
    <thetext>(In reply to Philippe Waroquiers from comment #63)

Thanks for the feedback.  I&apos;ll fix the small stuff.

&gt; * For execontext, instead of just storing the execcontext
&gt;   (e.g. in an mc chunk allocated by memecheck for each block), we now store
&gt;   an execontext + epoch.

I did consider this design, in some detail, but decided not to do that.
Instead I kept semantics of ExeContext unchanged and added a new type
ExeContextAndEpoch.

The problem is that we would lose the ability to do pointer-comparisons
on ExeContext*s.  Currently, if two ExeContext*s (the addresses) are
different then we are sure that the vectors of addresses are different
(and vice versa), because m_execontext.c carefully de-duplicates them.
And I was unsure what to do about maintaining those semantics if we add
an epoch to ExeContext.

That said, fixing XTree, the GDB server and all the other tools (if it
is possible) would be a good thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692088</commentid>
    <comment_count>67</comment_count>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2017-08-01 07:22:31 +0000</bug_when>
    <thetext>(In reply to Julian Seward from comment #66)
&gt; (In reply to Philippe Waroquiers from comment #63)
&gt; 
&gt; Thanks for the feedback.  I&apos;ll fix the small stuff.
&gt; 
&gt; &gt; * For execontext, instead of just storing the execcontext
&gt; &gt;   (e.g. in an mc chunk allocated by memecheck for each block), we now store
&gt; &gt;   an execontext + epoch.
&gt; 
&gt; I did consider this design, in some detail, but decided not to do that.
&gt; Instead I kept semantics of ExeContext unchanged and added a new type
&gt; ExeContextAndEpoch.
&gt; 
&gt; The problem is that we would lose the ability to do pointer-comparisons
&gt; on ExeContext*s.  
What I suggest still allows to do pointer comparison (or ecu comparison)
and fully identify the epoch+addresses.

m_execontext.c would de-duplicate the (epoch + addresses).
So, even if after unmap and remap of some other lib, a bunch of addresses
would (by lack of chance) be the same, they would differ by their epoch,
and so that would give another execontext, only differing by the epoch.


&gt; Currently, if two ExeContext*s (the addresses) are
&gt; different then we are sure that the vectors of addresses are different
&gt; (and vice versa), because m_execontext.c carefully de-duplicates them.
&gt; And I was unsure what to do about maintaining those semantics if we add
&gt; an epoch to ExeContext.
What I suggest is to consider the epoch part of the execontext itself,
and so, the same set of addresses but another epoch would give another
execontext.

To ensure this, the idea is to store &apos;invalid epoch&apos; in an execontext
when adding it. When an debug info is  unloaded, all execontext with
an invalid epoch that have an address inside the unloaded debug info
are marked with the current epoch.

With that idea, an execontext reference (so either a ptr or an ecu)
will uniquely identify a set of address and its epoch.
That decreases the memory (e.g. for memcheck in an MC_Chunk)
or in the track origin (which can only store an ecu).

&gt; 
&gt; That said, fixing XTree, the GDB server and all the other tools (if it
&gt; is possible) would be a good thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692092</commentid>
    <comment_count>68</comment_count>
      <attachid>107003</attachid>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-08-01 07:39:16 +0000</bug_when>
    <thetext>Created attachment 107003
epochs-5.diff

Same as epochs-4.diff with with regression tests from Kevin Fitch&apos;s
original patch (afaics, comment 15).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692141</commentid>
    <comment_count>69</comment_count>
    <who name="Ivo Raisr">ivosh</who>
    <bug_when>2017-08-01 13:04:03 +0000</bug_when>
    <thetext>Just a quick note:
Once this functionality is integrated, remove the corresponding entry from www page http://valgrind.org/help/projects.html:

-----------------------
Preserving debugging information
Currently, Valgrind unloads debugging information for shared objects when they are unloaded with dlclose(). If the shared object has a memory leak, the stack trace for Memcheck&apos;s error message at termination will be missing entries, which makes fixing the leak difficult. This is described in bug report #79362.

One way to fix this would be to change things so that Valgrind records source-level information for stack traces, rather than code addresses. It is not entirely clear how to do this in a way that avoids unnecessary debug information lookups, and nor how to avoid increasing the amount of memory used. An implementation would help clarify the problem and show if this approach is feasible. This project is of intermediate difficulty. (Added August 27, 2005)
-----------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692853</commentid>
    <comment_count>70</comment_count>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2017-08-04 13:04:58 +0000</bug_when>
    <thetext>Following discussion on irc of the suggestion discussed in comment 63 till comment 67,
I will attach a patch that adds some measurement code for the scanning of the EC contexts
that would be needed at each unload of a .so.

The measurement is done by applying the patch, and then doing:

for n in 10 11 12 13 14 15 16 17 18 19 20 25
do
   ./vg-in-place --stats=yes --time-stamp=yes --num-callers=$n ./perf/many-xpts 
done |&amp; grep -e &apos;exe.*scanning&apos;


Detailed results below. Basically, (as expected), the time to scan depends on the 
nr of execontexts, and the avg size of each execontext.
For a huge data set (260_000 EC, 6_300_000 ips) , a scan takes about 0.005 seconds
A medium size data set (65_000 EC, 1_100_000 ips), a scan takes about 0.001 seconds.
(debian 8, Intel i5-6402P CPU @ 2.80GHz)
So, the cost seems reasonable, e.g. 5 seconds CPU in total for a big application
that would do 1000 load/unload of a .so.

We might possibly avoid this scanning if ever it would be needed, e.g. by maintaining
a list of DI valid for a certain epoch, and another data structure that associates
the current epoch with past &apos;compatible&apos; epoch.
But that seems more complex than the simple scanning solution at each unload.


--00:00:00:01.298 11342--    exectx: scanning 1000 times 515 contexts/5,133 ips
--00:00:00:01.299 11342--    exectx: finished scanning 515 contexts/5,133 ips
--00:00:00:01.308 11345--    exectx: scanning 1000 times 1,027 contexts/11,277 ips
--00:00:00:01.310 11345--    exectx: finished scanning 1,027 contexts/11,277 ips
--00:00:00:01.341 11348--    exectx: scanning 1000 times 2,051 contexts/24,589 ips
--00:00:00:01.347 11348--    exectx: finished scanning 2,051 contexts/24,589 ips
--00:00:00:01.357 11351--    exectx: scanning 1000 times 4,099 contexts/53,261 ips
--00:00:00:01.381 11351--    exectx: finished scanning 4,099 contexts/53,261 ips
--00:00:00:01.403 11354--    exectx: scanning 1000 times 8,195 contexts/114,701 ips
--00:00:00:01.485 11354--    exectx: finished scanning 8,195 contexts/114,701 ips
--00:00:00:01.420 11357--    exectx: scanning 1000 times 16,387 contexts/245,773 ips
--00:00:00:01.584 11357--    exectx: finished scanning 16,387 contexts/245,773 ips
--00:00:00:01.405 11360--    exectx: scanning 1000 times 32,771 contexts/524,301 ips
--00:00:00:01.787 11360--    exectx: finished scanning 32,771 contexts/524,301 ips
--00:00:00:01.494 11363--    exectx: scanning 1000 times 65,539 contexts/1,114,125 ips
--00:00:00:02.447 11363--    exectx: finished scanning 65,539 contexts/1,114,125 ips
--00:00:00:01.576 11373--    exectx: scanning 1000 times 131,076 contexts/2,359,327 ips
--00:00:00:03.952 11373--    exectx: finished scanning 131,076 contexts/2,359,327 ips
--00:00:00:01.782 11376--    exectx: scanning 1000 times 262,149 contexts/4,980,787 ips
--00:00:00:06.319 11376--    exectx: finished scanning 262,149 contexts/4,980,787 ips
--00:00:00:01.798 11379--    exectx: scanning 1000 times 262,149 contexts/5,242,933 ips
--00:00:00:06.832 11379--    exectx: finished scanning 262,149 contexts/5,242,933 ips
--00:00:00:01.825 11382--    exectx: scanning 1000 times 262,149 contexts/6,291,514 ips
--00:00:00:06.545 11382--    exectx: finished scanning 262,149 contexts/6,291,514 ips</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692854</commentid>
    <comment_count>71</comment_count>
      <attachid>107073</attachid>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2017-08-04 13:06:09 +0000</bug_when>
    <thetext>Created attachment 107073
(hack) : patch that adds measurement code to scan the EC for a .so unload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692859</commentid>
    <comment_count>72</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-08-04 13:36:36 +0000</bug_when>
    <thetext>(In reply to Philippe Waroquiers from comment #71)
&gt; Created attachment 107073 [details]
&gt; (hack) : patch that adds measurement code to scan the EC for a .so unload

+            for (j = 0; j &lt; ec-&gt;n_ips; j++) {
+               if (UNLIKELY(ec-&gt;ips[j] &gt;= from &amp;&amp; ec-&gt;ips[j] &lt;= to)) {
+                  break;
+               }
+            }

This is a side-effect-free loop whose only computed value (j) is unused,
and provably terminates.  I think it&apos;s likely that gcc noticed all 3 facts
and deleted the loop.

Do you get different results if you change it like this?

+            for (j = 0; j &lt; ec-&gt;n_ips; j++) {
+               if (UNLIKELY(ec-&gt;ips[j] &gt;= from &amp;&amp; ec-&gt;ips[j] &lt;= to)) {
                   __asm__ __volatile__(&quot;&quot;:::&quot;cc&quot;,&quot;memory&quot;);
+                  break;
+               }
+            }

The (empty) inline assembly claims to make arbitrary changes to memory and
might scare gcc into keeping the loop alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693397</commentid>
    <comment_count>73</comment_count>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2017-08-07 19:28:38 +0000</bug_when>
    <thetext>(In reply to Julian Seward from comment #72)
&gt; (In reply to Philippe Waroquiers from comment #71)
&gt; &gt; Created attachment 107073 [details]
&gt; &gt; (hack) : patch that adds measurement code to scan the EC for a .so unload
&gt; 
&gt; +            for (j = 0; j &lt; ec-&gt;n_ips; j++) {
&gt; +               if (UNLIKELY(ec-&gt;ips[j] &gt;= from &amp;&amp; ec-&gt;ips[j] &lt;= to)) {
&gt; +                  break;
&gt; +               }
&gt; +            }
&gt; 
&gt; This is a side-effect-free loop whose only computed value (j) is unused,
&gt; and provably terminates.  I think it&apos;s likely that gcc noticed all 3 facts
&gt; and deleted the loop.
Yes, you are correct.
I will attach a new patch which acvoids the loop elimination.
With this, the scan is slower : for big applications (260_000 EC,
6_300_000 IP), a scan takes between 0.020 to 0.030 seconds.
So, an application that does 1000 load/unload will use around
20 seconds more cpu for the scanning.

Assuming these measurements are now ok; I think this still looks acceptable,
as:
  * a large majority of the users will not use this feature, so we
    better reduce the impact of this feature when not used
    (typically in memory)
  * for users of the functionality, we better make 
    --track-origins functionally correct
  * probably not many applications are doing load/unload at a
    high frequency.

If then we find an application that suffers heavily from this scannning,
then we can always implement a &apos;lazy scan&apos;: instead of scanning
all EC when a lib is unloaded, we just scan an EC when
EC is symbolised (or when it is &apos;re-acquired&apos; following the capture
of a new stack trace).
The logic of this &apos;lazy scanning&apos; will be:
   if EC epoch is not the current epoch then
      scan all DI that were unloaded between EC epoch
       and current epoch.
      if an address of the EC matches one of these DI,
         mark the EC as archived (i.e. it should not
             be used for something else than output)
      else
         change EC epoch to be current epoch
With this, very few EC should have to be verified :
   only the &apos;active EC&apos; and the EC related to an error.

But I think we better do first the simple approach of
scanning, and if a user of --keep-debuginfo complains
about performance, optimise by doing the lazy scanning.


--00:00:00:01.288 9148--    exectx: scanning 1000 times 515 contexts/5,133 ips
--00:00:00:01.294 9148--    exectx: finished scanning. Match 4 scanned 5,133,000  515 contexts/5,133 ips
--00:00:00:01.295 9151--    exectx: scanning 1000 times 1,027 contexts/11,277 ips
--00:00:00:01.309 9151--    exectx: finished scanning. Match 4 scanned 11,277,000  1,027 contexts/11,277 ips
--00:00:00:01.308 9154--    exectx: scanning 1000 times 2,051 contexts/24,589 ips
--00:00:00:01.345 9154--    exectx: finished scanning. Match 4 scanned 24,589,000  2,051 contexts/24,589 ips
--00:00:00:01.315 9157--    exectx: scanning 1000 times 4,099 contexts/53,261 ips
--00:00:00:01.417 9157--    exectx: finished scanning. Match 4 scanned 53,261,000  4,099 contexts/53,261 ips
--00:00:00:01.331 9160--    exectx: scanning 1000 times 8,195 contexts/114,701 ips
--00:00:00:01.576 9160--    exectx: finished scanning. Match 4 scanned 114,701,000  8,195 contexts/114,701 ips
--00:00:00:01.346 9163--    exectx: scanning 1000 times 16,387 contexts/245,773 ips
--00:00:00:01.860 9163--    exectx: finished scanning. Match 4 scanned 245,773,000  16,387 contexts/245,773 ips
--00:00:00:01.381 9166--    exectx: scanning 1000 times 32,771 contexts/524,301 ips
--00:00:00:02.576 9166--    exectx: finished scanning. Match 4 scanned 524,301,000  32,771 contexts/524,301 ips
--00:00:00:01.441 9169--    exectx: scanning 1000 times 65,539 contexts/1,114,125 ips
--00:00:00:05.809 9169--    exectx: finished scanning. Match 4 scanned 1,114,125,000  65,539 contexts/1,114,125 ips
--00:00:00:01.559 9172--    exectx: scanning 1000 times 131,076 contexts/2,359,327 ips
--00:00:00:15.639 9172--    exectx: finished scanning. Match 4 scanned 2,359,327,000  131,076 contexts/2,359,327 ips
--00:00:00:01.777 9175--    exectx: scanning 1000 times 262,149 contexts/4,980,787 ips
--00:00:00:28.796 9175--    exectx: finished scanning. Match 4 scanned 4,980,787,000  262,149 contexts/4,980,787 ips
--00:00:00:01.792 9178--    exectx: scanning 1000 times 262,149 contexts/5,242,933 ips
--00:00:00:32.021 9178--    exectx: finished scanning. Match 4 scanned 5,242,933,000  262,149 contexts/5,242,933 ips
--00:00:00:01.821 9182--    exectx: scanning 1000 times 262,149 contexts/6,291,514 ips
--00:00:00:21.031 9182--    exectx: finished scanning. Match 524296 scanned 6,291,514,000  262,149 contexts/6,291,514 ips


Note that I am slightly amazed by the fact that the last run is faster than
the 2 previous one. I cannot explain this (I checked, and the Match-es are all because of the
&apos;last ip&apos; below main, which has a small value. So, the last run scans the same nr of EC,
but about 1_000_000 IPs more (1000 times), and is faster ???</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693398</commentid>
    <comment_count>74</comment_count>
      <attachid>107129</attachid>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2017-08-07 19:30:25 +0000</bug_when>
    <thetext>Created attachment 107129
measure time to scan the execcontext, but do not let gcc remove the loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693489</commentid>
    <comment_count>75</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2017-08-08 07:54:54 +0000</bug_when>
    <thetext>(In reply to Philippe Waroquiers from comment #73)

Thank you for redoing the measurements.

&gt; With this, the scan is slower : for big applications (260_000 EC,
&gt; 6_300_000 IP), a scan takes between 0.020 to 0.030 seconds.

That is about 10-15 cycles/IP, which sounds more realistic.

&gt; Note that I am slightly amazed by the fact that the last run is faster
&gt; than the 2 previous one. I cannot explain this (I checked, and the
&gt; Match-es are all because of the &apos;last ip&apos; below main, which has a small
&gt; value. So, the last run scans the same nr of EC, but about 1_000_000 IPs
&gt; more (1000 times), and is faster ???

Who knows.  Maybe it relates to the layout of the workloads in memory?
(in other words, it is a caching effect?)  Anyway, not a problem, I think.

&gt; Assuming these measurements are now ok; I think this still looks
&gt; acceptable,

I agree.

&gt; But I think we better do first the simple approach of
&gt; scanning, and if a user of --keep-debuginfo complains
&gt; about performance, optimise by doing the lazy scanning.

I agree here too.

So the only question now is how to actually get the work done :-)
Do you have any time/enthusiasm to hack on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693640</commentid>
    <comment_count>76</comment_count>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2017-08-08 21:19:01 +0000</bug_when>
    <thetext>(In reply to Julian Seward from comment #75)
&gt; So the only question now is how to actually get the work done :-)
&gt; Do you have any time/enthusiasm to hack on this?
Enthusiasm, yes. Time (at short term), not much.

I have added this to my list of things to do, and
should be able to look at this sometime in September or October
(I really need to finalise first the helgrind unwind optimisation, which
is lingering since FOSDEM).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721548</commentid>
    <comment_count>77</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2018-01-11 19:01:54 +0000</bug_when>
    <thetext>Landed, with major reworking by PhilippeW.
cceed053ce876560b9a7512125dd93c7fa059778</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722081</commentid>
    <comment_count>78</comment_count>
    <who name="Philippe Waroquiers">philippe.waroquiers</who>
    <bug_when>2018-01-14 11:29:13 +0000</bug_when>
    <thetext>Fixed now, after almost 14 years :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722263</commentid>
    <comment_count>79</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2018-01-15 10:35:59 +0000</bug_when>
    <thetext>Pushed a followup fix at f8ae2f95d6d717aa6d3923635b9f6f87af9b7cf1.
This fixes a problem spotted by Matthias Schwarzott, in which dlopening
an object that was previously dlopened and then dlclosed caused an 
assertion failure in check_CFSI_related_invariants().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33376</attachid>
            <date>2009-05-05 21:40:26 +0000</date>
            <delta_ts>2009-05-05 21:47:43 +0000</delta_ts>
            <desc>so-thread-test.tar.gz</desc>
            <filename>so-thread-test.tar.gz</filename>
            <type>application/octet-stream</type>
            <size>3501</size>
            <attacher name="Frank Pilhofer">fpilhofe</attacher>
            
              <data encoding="base64">H4sICHuTAEoCA3NvLXRocmVhZC10ZXN0LnRhcgDtG2lz28ZVX8Nf8eIkDekhKdwA6So2LdGuUsnW
SLKTnhwQWJKwcLBYQEfb9Lf3vQVAAiQhi47tZlzujERgse/Ydy92waNOMouZ7XYSxpP9vU/RJGym
rtOvbhiyuJcMPfvN2p4sK5Iky7Jm4nNZw7s90Pc+Q0t5YscAe5O558+iCasbx6NJcmPHbO/Laryq
f/rXdT6B/g1Nq9O/qhlL/UumgvrXFU3dA2mn/0/evvFCx09dBr/niet74+7sh8ayz/UnTljtwmFe
VO2aZxa0Nm4cRT51NlDEiedAPm6UgM3vQmeU3T5ZfRykCbtdDBJ3cABnl384Hw6ORqdvLoc/j45f
HV8eD06O/zw8X4N3onBJg25K0IevXx09HNiNQvYQ4OvIx1+fAc04h+VJNB9NfHv6pJHczZnLJjjM
c6H5+F00pp4WNKmjtY4lH5AjwrsnjYaAfdwoC24Up2GGAx6DHU9bjX81YEWKfuRcQfN3JVEiPRx1
MyNCza9XeG0BoQDwJtBcUC86YckQNBHNat8BvHpzclL0VwTKvWlo+wtGSK45gl8ajbXRN7aXLMZS
TxtWZpDDVeeahhtnCxCzJI3DnLtfMlnmkuTpOCBiS9UUanmwNKsiENq6f/bU13ryUPar/L6LPNT5
B2h6TZv1Eift/CqJr4gY42su4YzvTRazYof4ZGL7nFVEif8TtiCW9bYFhjas+kXWv4GXaF5mZQv1
lnlL4pR9dC17YdII7KV6M8d2fb8Nj7MYsGRFSDTTL7nq100chny5fjRniOBRVyTyDoJ1efSoDeeX
J0ejV69/gn9nlyevDwcnrdbCFmIkjngeDeM4isGPbNcLp1DB0ofv+F9DxOX6jEY1W7kH594lL2wk
4yjTr+vzuwCaYhaPCBvp/dEGysUzCKMEJlGKURtFUeEAqeckXd/xI84E3jouqv5Nhl92VSFmIb8V
XBV952Euxy2Rmva+7Prv1L5iEwwYn7P+kxRDWdR/sqFS/afrxq7++xzN9v0+kOqh5GmNBt1k/V2n
8dXUcaAzhU4E3z6Db/8OHT8Panjl+tnoRZhY3JQA+Qwl5+YIOpOz48MKmkbD8Zkd9htfxQE+XuMH
Hnfx7z/gRDH74jzwt7f+86Ppx/d/XONv9n9FU3Rzuf7XTPJ/QzJ3/v852sEBCl42Dw7glAXOjDlX
WExBwIIovgOR6MFlCXOSKO42loMPo/ld7E1nmFoPW4CqUzr4z0RYTNwvX72Bl2cn32N1Nr6DH1Pf
s0O4YCg9FxiurfwypjecSo0Tb/x2+DNm2muQLV0jHnAxGtvIxIRYuAvtAJdIYy+kriS2Q06LpSi8
lymtlqnXWCf9FMVXHE5OztbZubb9KVYmbkftql2ZuFnhwAs5FoEBCxPBBUxiO2A3iPBefqQPFVLp
8vQOzo6PsLQSHW2Yo02GSdEn6arUBTiLo6mggstCjv9Yv4QBW1ZXlQl0OuKy0ylfHkZBQFh8L2Sl
7iWCZd8F1aTpvA03XjIDqpN5vwrSuV6572DMv+oImzuYpL6/9jiadqgWOSiCUoWzMMFpc4gmsD+P
I2f/msUcNVEleuKF6S3kj0DpGl1F62qdONGgGUdR8gyrT+aPo1tc9VGuKkZqXbmrksZMqaf0oDmP
WcyQXU6r9jfjNExSMUbpyEYqbhUsab9R4OL0DM7Oh8PTs0ustOFF7MFgHqNNgyz35V5f0WF4dEmY
rRKjg9iZCXXNbhx7zvswOD0yyAkC19A6nDOlNPjMnjLg3j8ZjnPSmLTv34Em9Yw2BPYt8HQ+j+IE
0y31lQDf5ka98CzXi4Vj3/Vhf7ZfBMB9inT749Tz3Y5P8tvH8fuFR5TwnbNsmYAVPkcHiIIKFpFO
NmQXaEq3mgj8rftxEVVkgZQmUw2wgNsI6LJxOkW3nESbwbvdbgkK7+Dw/BACjwd2gsJvOlEwT0lo
E9kydGMiwY0d0r2imWNJtipEsUXjdyg7cCPGw+8TmNnXDKMEsj+OfEjssc8eLKl75b2f2UD2IMhD
NMlCtdaFUctXEb3exx+aTsw4uQDyia63hWHsu2xip37SJSSfYO7XU2SNVqYjqgILgxjIw/db0q+k
V0i9oHkov3ig9XrjvMCtWvFQMbay4nU0D7ZmS0OfkSWjsGbLZaqru+bDuHf9CuO6pMlbMl7C8GCe
dd3Uxz3dLnhmxthhjjb5yB6Yc+hUp6ho+pZTdLafoaOPdUfVzWKGhqS4iurov2qGw6Pj8z7QFMbM
7UnQRLvlLGlhUZUFeiSURDhAcxRV0ZYDapC4ExXHkF+w241IFGeyHFCDxLIJiYOrzMjZiESWessB
dUiy6dyDZGItB5SqmuMQXdtzQSxVsVKgrAlWtRSyE8KBS47n0qAPTSpfvHAtfbSqQFixiWw0sF6Y
WwMZsqltDWTp21OS5cOetTWlo4Gkb09J17eUHgWTF9YaUCVkfDQOkZiiDQ+3JkZMDl9I/cWb1a34
7B0e9SF7pZu9SembvcrQgetSuiVCri3LjgUeBwvhcTgtMTyXHH4s3hgX5itrIOz8e3eTHR8q8ovh
c6JKY6B5PR3FbO7bDhtlXciEIpk1DJvmc/UDLFMb7izzS7DMzdHXtnQK86w+/CqSVhrxq1cIxUs/
TMeGPFitOI487uAaeYFW2H0+roNX6oAW2rR5sA0tN2U0nSANA3verBWFYeJEJzFjm9PQWCoeb167
X2YvTZXyavzHNJgThmTGkOksX9l5XKCNYcSPC1J6GrLbJFuKrzs+CcAw0IyePn26SeVD5XnPwLgw
GoXzxB+5ma4Q+yjhbsV4VkvN1mZ0h1hC9EHsROXbbltj0VXZOtKRZ8enffYyuLMZcBkvDdnG+ToU
L2nDCPlwruhVSpDHRohiskhHLI5bQDqpBMzS5VkcOYQ0YXHghXZCliVeYuQLGrAd8YpHBGCxxSfL
0Lw4fnkxfPm2yp4jEBFDuTOjMc0Z1R9TwoCaskszEBr7f9Vl6XJ4fv76HC7enJ4Ozv/UByV77ZgH
DAUcetVzm3BoFstT5vZJB+K5XINULrAgJzkG7EMd7pzvt+R8m9SkrKkpj5tyf1fb7yqoXW2/q+13
lvnhtX3pkhJqX5zWw3SKmGcYyNWOvDlUH7/62Dk6s9p9yg99SgApZ2Tq7NZLELitKkt3ATVzFd6t
g7cy1+Ft0EXGwQulbUlKjqJIuW7NthpnduzMqPaj/cZ5RBtDOD+sDVRKch1C6W7gQbwZpherba1n
tGVLy+jVUCldKqaynJ2cY6atOiTOuTf278CPeEJP8ZdjnnOi2M2So1oTHqQXlNDvCQ9qryY8IKiO
Tjty/dGyOPF5yfTeX5QMekp/5bTes2cvT46fH46UrtLVt6900JgtTKeVU2+5TRtSHcTz4ar5m633
akNuS4pWow9cB3ihl7Aajaj3aeRDA7YoKXtabUmJoXmwkEz5OHA+Z0WpLR1l439Y658MB39chJEq
7hUx9+t00q2CQdVf+psdawWIJ57vU+nozOg1eh9U5QGECLAU3qQliLQB5LzAXthSM5nRQUMMKTcz
jzZ8izADNzbPzjy2hMGJonoW3VQON1xGGKMYrUWCNnJOyqas0l/fR8cegu4spndwx3h5Z6HY0EI7
sFHid1kQ4zQjvLLnbSrLbzHzcO+abQa009tA7FRL+SVgsR97KI2mdNUG6bSVB/R7wUcnMmHIYi9F
bGQgmONvTKcqQOrL0nvglVX4MHLrJntxivyGI4/zFAO2aOj4PWiqkpbxfC+cy5aQB0ipmOg9QIF9
OwojO3stgEC6oimWCU1LtSy9pyC8Jffk96JAwyDfYO42dAsQoquqSFRXBUX9ARyHo6OL04eKR5w5
YA68hbGXZPIXNcX7OOUsGSHc6BrBuCXSlrCnZshu8LcN6dzFFEJ991Ge2W50Q52ihCbKmqZZSFg7
LUEVJ4ZYH0ptYmM4vzgrKAHW5GHiTTxRvLR1zYImWGbX+q5Vh2rKQhZ7zugqRHetRaXJiAjMbq8O
UYEmDe9FZGqER+vK363sFEKS7CdOH7S2okh4g6EwukrnlKP+kXoxlTX4yDRhHkfjqn9UgFHdJJOO
g5GDFSy0McVN/JTPqoCC/cQeo2+wm0KiCsZslJqGpVDPhM4PYCpS2zSkJ7lLy7qBTt2Cv6DXOvxv
m/G5aTDPPZSMiNA8fdqqGZu9DqbhMhq5omvrwzlOxk19FuMclTb6AbxDChiqxuMibLW6m8dL+0pb
VWU0tXdRvB94IRaH4jGwazp/1K2KMounqPENgTSPsisQ7JY5yS2q1uiB7/GEylajVE/b11MUwhyT
BD1tbQZGiGUMxKKbkgBtNmMyQRSqJeDl9cMiBbwIuwrGBp0utDwOD6pHskTFH0xRKLIh8iAxVKKr
yUZO1ON0fsRNhd1lA2oQqXSzgse07kGzO7D76c//Zoe3P+P5f7Sc5fl/mb7/NLBzd/73837/WfcV
Z/5R6OqHklfsbpQA/n9SPMo+tBIf8mANkMQpnS1cfKCIqcTOPmyipTQ0xf3y+6zF9z+lr7Oweo0R
8tr2U/oMs1hGybgsqHxZRawsvg7DmzasMFEZjXUHnzMHUyriEqMFgdaX+HXPru3aru3aru3aru3a
ru3aru3aru3aru3a3t5/Ae7hFdMAUAAA
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33377</attachid>
            <date>2009-05-05 21:47:43 +0000</date>
            <delta_ts>2009-05-05 21:47:43 +0000</delta_ts>
            <desc>so-thread-test.tar.gz</desc>
            <filename>so-thread-test.tar.gz</filename>
            <type>application/octet-stream</type>
            <size>3511</size>
            <attacher name="Frank Pilhofer">fpilhofe</attacher>
            
              <data encoding="base64">H4sICE+XAEoCA3NvLXRocmVhZC10ZXN0LnRhcgDtG2l328ZRX8NfMXGThvQjKSwugnQVm5YoV6lk
60m2k558ILAkYeFgsYCOtulv78wCIAEesuirTcp9TyKw2Dl27sUuRNRKpjG33VbCRbK/9zmagq1j
GPRrmCaT94ppZL9Z22NMVRTGNINpewrTGevsgbH3BVoqEjsG2BvPPH8ajfmmcSIaJzd2zPd+XU1U
9U//2s5n0L+p65v0rxmqMde/rpiof+xR9kDZ6f+zt994oeOnLofficT1vVF7+n1t0ef6YyesduEw
L6p2zTILWhk3iiKfOmso4sRzIB83TMAWd6EzzG6fLD8O0oTfzgfJOziA89e/vxj0j4Znb14Pfhqe
vDx5fdI/PfnT4GIF3onCBQ26KUEfvnp59HBgNwr5Q4CvIx9/fQ404xxWJNFsOPbtyZNacjfjLh/j
MM+F+uN30Yh6GlCnjsYqlnxAjgjvntRqEvZxrSy4YZyGGQ54DHY8adT+WYMlKfqRcwX135ZEifRw
1M2UCNW/XuK1AYQCwBtDfU696IQFQ1BHNMt9B/Dyzelp0V8RqPAmoe3PGSG55gh+rtVWRt/YXjIf
Sz1NWJpBDledaxqunS1AzJM0DnPufs5kmUtSpKOAiC1UU6jlwdKsikBq6/7ZU1/jyUPZr/L7LvJQ
5x+g6RVtbpY4aeejJL4kYoyvuYQzvtdZzJId4pOx7QteESX+T/icWNbblBiasOwXWf8aXqJZmZUt
1FvmLYlT/mm1vBiWaXh1jtlcvDCpBfbCBjLvd32/CY+zQLHgV4o9MwLy56/rOAyZd/1oxhHBo7bM
9i0Ea4voURMuXp8eDV+++hH+lV2evjrsnzYac4OJkTjieTSI4ygGP7JdL5xABUsPvhV/CRGX63Ma
VW/kbp67IJsbUsZRZgSuL+4CqMtZPCJsZByP1lAunkEYJTCOUgztKIoKB0g9J+n6jh8JLvFu4qIa
BMg7yv4sxSzlt4SrYhR5LMxxK6SmX279d2Zf8TEGjC9Z/ymqqRb1H2Mm1f+GYZi7+u9LNNv3e0Cq
h5IT1Wp0k/W3ndpXE8eB1gRaEXzzDL75G7T8PFrhletno+cRYH5TAhRTlJybI2iNz08OK2hqNcfn
dtirfRUH+HiFH3jcxr9/gxPFvLa3a595/edHk0/v/7jGX+//qq4ancX6T5XrP1PZ+f8XaQcHTGXM
OjiAMx44U+5cYTEFAQ+i+A5kDgeXJ9xJorhdWww+jGZ3sTeZYtY8bACqTm3hvw7CYk5+8fINvDg/
/Q4rl9Ed/JD6nh3CJUfpucBxbeWXMb0RVEWceqO3g58wiV4DswydeMDFaGwjE2Ni4S60A1wijbyQ
upLYDgUtlqLwXqb0jUy9whLoxyi+EnB6er7KzrXtT7DocFtaW2sz4maJAy8UWAQGPEwkFzCO7YDf
IMJ7+VE+VEily7M7OD85wqpJdjRhhjYZJkWfYmhKG+A8jiaSCi4LBf7jvRIGbFnJVCbQasnLVqt8
eRgFAWHxvZCXuhcIFn2XVG6msybceMkUqE4WvSpI63rpvoUx/6olbe5gnPr+yuNo0qJa5KAIShXO
wgSnLSAaw/4sjpz9ax4L1ESV6KkXpreQPwK1bbZVva234kSHehxFyTMsLLk/im5x1Ue5qhipt1lb
I411lK7ahfos5jFHdgWt2t+M0jBJ5Ri1xcxU3qpYrf5Ghcuzczi/GAzOzl9jEQ3HsQf9WYw2DYz1
WLenGjA4ek2YrRKj/diZSnVNbxx7JnrQPzsyyQkC19RbQnC1NPjcnnAQ3j84jnPSmLTv34GudM0m
BPYtiHQ2i+IE0y31lQDf5kY99yzXi6Vj3/Vgf7pfBMB9inT7o9Tz3ZZP8tvH8fuFR5TwXfBsBYDF
u0AHiIIKFplO1mQXqCu3ugz8jftxEVVkgZTGqAaYw60FdPkonaBbjqP14O12uwSFd3B4cQiBJwI7
QeHXnSiYpSS0MbNMwxwrcGOHdK/qnZHCrApRbNHoHcoO3IiL8LsEpvY1xyiB7I8iHxJ75PMHS+pe
ee9nNpA9CPIQTbLQrFVhbOSriF7v4w9NJ+aCXAD5RNfbwjD2XT62Uz9pE5LPMPfrCbJGi84hVYGF
QfTZ4P2W9JH0CqkXNA/Z8QOt1xvlBW7VigequZUVr6J5sDVbOvoMU8zCmi2Xa67hdh7GvetXGDcU
nW3JeAnDg3k2jI4x6hp2wTM3Rw539PEn9sCcQ6c6RVU3tpyis/0MHWNkOJrRKWZoKqqrao7xUTMc
HJ1c9ICmMOJuV4E62q3gSQOLqizQI6EkwgG6o2qqvhiwAYk71nAM+QW/XYtEdcaLARuQWDYhcXCV
GTlrkTCluxiwCUk2nXuQjK3FgFJVcxKia3suyKUqVgqUNcGqlkJ2QjhwyfFc6fegTuWLF66kj0YV
CCs2mY361nFnayCTdfStgSxje0qMHXatrSkd9RVje0qGsaX0KJgcWytAlZDxyThEYqo+ONyaGDE5
OFZ685emW/HZ1wY9yN7WZm9SelRGlIb2XZfSLRFybcYcCzwBFsLjcFpieC45/Ei+MS7Ml+kg7fw7
d50dH6rsePCcqNIYqF9PhjGf+bbDh1kXMqEqnQ0MdzrPtQ+wTH2ws8xfg2Wuj762ZVCY55vDr6ro
pREfvUIoXvphOjZZf7niOPKEg2vkOVpp9/m4Fl5pfVpo077ANrTclNN0gjQM7Fl9oyjMDk50HHO+
Pg2NlOLx+rX76+ylqVpejf+QBjPCkEw5Mp3lKzuPC7QxjPhxQUpPQ36bZEvxVccnAZgmmtHTp0/X
qXygPu+aGBeGw3CW+EM30xViHybCrRjPcqnZWI/uEEuIHshNpnybamsshsasIwN5dnzaZy+DO+sB
F/HSZDbO16F4SXtByIdzRa9Sgjw2QhSTRTpycdwA0kklYJYuz+PIIaQJjwMvtBOyLPkSI1/QgO3I
VzwyAMstPsagfnny4nLw4m2VPUciIoZyZ0ZjmnGqPyaEATVll2YgNfb/qsvS5eDi4tUFXL45O+tf
/LEHavbaMQ8YKjj0quc2EVAvlqfc7ZEO5HO2ASkrsCAnOQbsQx3unO9/yfnWqUldUVMeN1lvV9vv
Kqhdbb+r7XeW+eG1femSEmpPntbDdIqYpxjItRZbH6pPXn7qHJ1Z7T7lhx4lgFRwMnV+6yUI3NTU
hbuAlrmKaG+CtzLXEU0wZMbBC7VpKWqOoki57oZtNcHt2JlS7Uf7jbOINoZwflgbaJTkWoTSXcOD
fDNML1abetdsMkvP6G2gUrpUO+pidizHTFt1SFwIb+TfgR+JhJ7ir8A850SxmyVHbUN4UI4pod8T
HrTuhvCAoAY67dD1h4vixBcl03t/UdLvqr2l03rPnr04PXl+OFTbatvYvtJRlO4A02nlQFtu06ay
yfzV4yXz71iN92qDNRVV36APXAd4oZfwDRrR7tPIhwZsWVJ29Y0lJUpGmUumfBw4n7Oqbiwdmflf
rPVPB/0/zMNIFfeSmHubdNKugkHVX3rrHWsJSCSe71Pp6EzpNXoPNPUBhAiwFN6UBYiyBuSiwF7Y
Uj2Z0hlCDCk3U482fIswAze2yI4zNqTByaJ6Gt1UDje8jjBGcVqLBE3knJRNWaW3uo+OPQTdmk/v
4I6L8s5CsaGFdmCjxO+yICZoRnhlz5pUlt9i5hHeNV8PaKe3gdypVvJLwGI/9lAadeWqCcpZIw/o
94IPTxlhyGIvRWxkIJjhb0ynKkDpMeU98OoyfBi5myZ7eYb8hkNPiBQDtmzo+F2oa4qe8XwvnMsX
kAdIqZjoPUCBfTsMIzt7LYBAhqqrVgfqlmZZRldFeIt12XtRoGGQb3B3G7oFCNHVNCRqaJKi8QCO
w+HR5dlDxSPPHHAH3sLISzL5y5rifZwKngwRbniNYMKSaUvaUz3kN/jbhHTmYgqhvvsoT203uqFO
WUITZV3XLSSsn5WgihNDvAelNrYxnF+eF5QAa/Iw8caeLF6ahm5BHaxO2/q2sQnVhIc89pzhVYju
uhGVzhARdNrdTYgKNGl4L6KOTnj0Nvt2aacQkmQ/cXqgN1WV4Q2GwugqnVGO+nvqxVTW4KOOBbM4
GlX9owqsSJm0HIwcvGChiSlu7KdiWgWU7Cf2CH2D3xQSVTFmo9R0LIW6HWh9Dx1VaXZM5Unu0sww
0akb8Gf0Wkf8dT0+Nw1muYeSERGap08bG8Zmr4NpOEMjVw19dbjAybipz2Oco9rUDRPeIQUMVaNR
EbYa7fXjlX21qWFyCOx3UbwfeCEWh/Ix8Gs6f9SuijKLp6jxNYE0j7JLEPyWO8ktqtbsgu+JhMpW
s1RP29cTFMIMkwQ9bawHRohFDMSim5IAbTZjMkEUmiXh2ephkQJehl0VY4NBF3oeh/vVI1my4g8m
KBRmyjxIDJXo6szMiXqCzo+4qbS7bMAGRBrdLOFBK92MZndg9/Of/80Ob3/B8/9oOYvz/0zdU5iJ
nbvzv1/2+89NX3HmH4Uufyh5xe+GCeD/J8Wj7EMr+Y0O1gBJnNLZwvkHiphK7OybJVpKQ13eL77P
mn/aU/o6C6vXGCGvbT+lzzCLZRTDZUHlkyliZf51GN40YYmJymisO8SMO5hSEZccLQk0fmEf7uza
ru3aru3aru3aru3aru3aru3aru3arj2w/Qd0MBiwAFAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55565</attachid>
            <date>2011-01-04 16:27:05 +0000</date>
            <delta_ts>2011-01-07 05:08:22 +0000</delta_ts>
            <desc>potential patch to allow memory leak stack traces for unloaded .so files</desc>
            <filename>hold-onto-debugInfo-for-unloaded-modules.diff</filename>
            <type>text/plain</type>
            <size>7526</size>
            <attacher name="Kevin Fitch">kfitch42</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvcmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBj
b3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMJKHJldmlzaW9uIDExNDg4KQorKysgY29y
ZWdyaW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiAr
MTE1LDkgQEAKICAgIGxpbmtlZCBsaXN0IG9mIERlYnVnSW5mb3MuICovCiBzdGF0aWMgRGVidWdJ
bmZvKiBkZWJ1Z0luZm9fbGlzdCA9IE5VTEw7CiAKKy8qIEtlZXAgYXJvdW5kIG9sZCBkZWJ1ZyBp
bmZvIHNvIHdlIGNhbiBoYXZlIGEgY2hhbmNlIG9mIGRlY29kaW5nIHN0YWNrIHRyYWNlcworICog
KGZvciBsZWFrIGNoZWNrcykgZXZlbiBhZnRlciBhIHNoYXJlZCBsaWJyYXJ5IGhhcyBiZWVuIHVu
bG9hZGVkLiAqLworc3RhdGljIERlYnVnSW5mbyogdW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9IE5V
TEw7CiAKIC8qIEZpbmQgJ2RpJyBpbiB0aGUgZGVidWdJbmZvX2xpc3QgYW5kIG1vdmUgaXQgb25l
IHN0ZXAgY2xvc2VyIHRoZSB0aGUKICAgIGZyb250IG9mIHRoZSBsaXN0LCBzbyBhcyB0byBtYWtl
IHN1YnNlcXVlbnQgc2VhcmNoZXMgZm9yIGl0CkBAIC0yODQsNyArMjg3LDcgQEAKIH0KIAogCi0v
KiAnc2knIGlzIGEgbWVtYmVyIG9mIGRlYnVnSW5mb19saXN0LiAgRmluZCBpdCwgcmVtb3ZlIGl0
IGZyb20gdGhlCisvKiAnZGknIGlzIGEgbWVtYmVyIG9mIGRlYnVnSW5mb19saXN0LiAgRmluZCBp
dCwgcmVtb3ZlIGl0IGZyb20gdGhlCiAgICBsaXN0LCBub3RpZnkgbV9yZWRpciB0aGF0IHRoaXMg
aGFzIGhhcHBlbmVkLCBhbmQgZnJlZSBhbGwgc3RvcmFnZQogICAgcmVhY2hhYmxlIGZyb20gaXQu
CiAqLwpAQCAtMzE2LDcgKzMxOSw4IEBACiAgICAgICAgICAqcHJldl9uZXh0X3B0ciA9IGN1cnIt
Pm5leHQ7CiAgICAgICAgICBpZiAoY3Vyci0+aGF2ZV9kaW5mbykKICAgICAgICAgICAgIFZHXyhy
ZWRpcl9ub3RpZnlfZGVsZXRlX0RlYnVnSW5mbykoIGN1cnIgKTsKLSAgICAgICAgIGZyZWVfRGVi
dWdJbmZvKGN1cnIpOworICAgICAgICAgY3Vyci0+bmV4dCA9IHVubG9hZGVkRGVidWdJbmZvX2xp
c3Q7CisgICAgICAgICB1bmxvYWRlZERlYnVnSW5mb19saXN0ID0gY3VycjsKICAgICAgICAgIHJl
dHVybjsKICAgICAgIH0KICAgICAgIHByZXZfbmV4dF9wdHIgPSAmY3Vyci0+bmV4dDsKQEAgLTU2
NCw2ICs1NjgsNyBAQAogICAgICAgY3JlYXRlZCBhbmQgZGVzdHJveWVkIG9uIGRlbWFuZCwgYW5k
IGVhY2ggb25lIGlzIHRyZWF0ZWQgbW9yZSBvcgogICAgICAgbGVzcyBpbmRlcGVuZGVudGx5LiAq
LwogICAgdmdfYXNzZXJ0KGRlYnVnSW5mb19saXN0ID09IE5VTEwpOworICAgdmdfYXNzZXJ0KHVu
bG9hZGVkRGVidWdJbmZvX2xpc3QgPT0gTlVMTCk7CiAKICAgIC8qIGZsdXNoIHRoZSBDRkkgZmFz
dCBxdWVyeSBjYWNoZS4gKi8KICAgIGNmc2lfY2FjaGVfX2ludmFsaWRhdGUoKTsKQEAgLTEyMzUs
MTAgKzEyNDAsMTAgQEAKIC8qLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCBWR18oZGlfZGlzY2FyZF9B
TExfZGVidWdpbmZvKSggdm9pZCApCitzdGF0aWMgdm9pZCBkaXNjYXJkX0FMTF9kZWJ1Z2luZm9f
aW5fbGlzdChEZWJ1Z0luZm8qIGxpc3QpCiB7CiAgICBEZWJ1Z0luZm8gKmRpLCAqZGkyOwotICAg
ZGkgPSBkZWJ1Z0luZm9fbGlzdDsKKyAgIGRpID0gbGlzdDsKICAgIHdoaWxlIChkaSkgewogICAg
ICAgZGkyID0gZGktPm5leHQ7CiAgICAgICBWR18ocHJpbnRmKSgiWFhYIHJtICVwXG4iLCBkaSk7
CkBAIC0xMjQ3LDE5ICsxMjUyLDE0IEBACiAgICB9CiB9CiAKK3ZvaWQgVkdfKGRpX2Rpc2NhcmRf
QUxMX2RlYnVnaW5mbykoIHZvaWQgKQoreworICAgIGRpc2NhcmRfQUxMX2RlYnVnaW5mb19pbl9s
aXN0KGRlYnVnSW5mb19saXN0KTsKKyAgICBkaXNjYXJkX0FMTF9kZWJ1Z2luZm9faW5fbGlzdCh1
bmxvYWRlZERlYnVnSW5mb19saXN0KTsKK30KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyotLS0gVXNlIG9mIHN5bWJv
bCB0YWJsZSAmIGxvY2F0aW9uIGluZm8gdG8gY3JlYXRlICAgICAgICAtLS0qLwotLyotLS0gcGxh
dXNpYmxlLWxvb2tpbmcgc3RhY2sgZHVtcHMuICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwotCi0vKiBTZWFyY2ggYWxsIHN5bXRhYnMgdGhhdCB3ZSBrbm93IGFib3V0IHRvIGxv
Y2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0Ci0gICAqcGRpIHRvIHRoZSByZWxldmFudCBEZWJ1Z0lu
Zm8sIGFuZCAqc3ltbm8gdG8gdGhlIHN5bXRhYiBlbnRyeQotICAgKm51bWJlciB3aXRoaW4gdGhh
dC4gIElmIG5vdCBmb3VuZCwgKnBzaSBpcyBzZXQgdG8gTlVMTC4KLSAgIElmIGZpbmRUZXh0PT1U
cnVlLCAgb25seSB0ZXh0IHN5bWJvbHMgYXJlIHNlYXJjaGVkIGZvci4KLSAgIElmIGZpbmRUZXh0
PT1GYWxzZSwgb25seSBkYXRhIHN5bWJvbHMgYXJlIHNlYXJjaGVkIGZvci4KLSovCi1zdGF0aWMg
dm9pZCBzZWFyY2hfYWxsX3N5bXRhYnMgKCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBk
aSwKK3N0YXRpYyB2b2lkIHNlYXJjaF9vbmVfZGVidWdJbmZvX2xpc3QgKERlYnVnSW5mbyogbGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgcHRyLCAvKk9VVCovRGVi
dWdJbmZvKiogcGRpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qT1VUKi9Xb3JkKiBzeW1ubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJv
b2wgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQm9vbCBmaW5kVGV4dCApCkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogICAgRGVidWdJbmZvKiBk
aTsKICAgIEJvb2wgICAgICAgaW5SYW5nZTsKIAotICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0
OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7CisgICBmb3IgKGRpID0gbGlzdDsgZGkgIT0g
TlVMTDsgZGkgPSBkaS0+bmV4dCkgewogCiAgICAgICBpZiAoZmluZFRleHQpIHsKICAgICAgICAg
IC8qIENvbnNpZGVyIGFueSBzeW1ib2wgaW4gdGhlIHIteCBtYXBwZWQgYXJlYSB0byBiZSB0ZXh0
LgpAQCAtMTI4MSwzMyArMTI4MSwzMyBAQAogICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluUmFu
Z2UgPSAoZGktPmRhdGFfcHJlc2VudAogICAgICAgICAgICAgICAgICAgICAmJiBkaS0+ZGF0YV9z
aXplID4gMAotICAgICAgICAgICAgICAgICAgICAmJiBkaS0+ZGF0YV9hdm1hIDw9IHB0ciAKKyAg
ICAgICAgICAgICAgICAgICAgJiYgZGktPmRhdGFfYXZtYSA8PSBwdHIKICAgICAgICAgICAgICAg
ICAgICAgJiYgcHRyIDwgZGktPmRhdGFfYXZtYSArIGRpLT5kYXRhX3NpemUpCiAgICAgICAgICAg
ICAgICAgICAgfHwKICAgICAgICAgICAgICAgICAgICAoZGktPnNkYXRhX3ByZXNlbnQKICAgICAg
ICAgICAgICAgICAgICAgJiYgZGktPnNkYXRhX3NpemUgPiAwCi0gICAgICAgICAgICAgICAgICAg
ICYmIGRpLT5zZGF0YV9hdm1hIDw9IHB0ciAKKyAgICAgICAgICAgICAgICAgICAgJiYgZGktPnNk
YXRhX2F2bWEgPD0gcHRyCiAgICAgICAgICAgICAgICAgICAgICYmIHB0ciA8IGRpLT5zZGF0YV9h
dm1hICsgZGktPnNkYXRhX3NpemUpCiAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAg
ICAgICAgICAoZGktPmJzc19wcmVzZW50CiAgICAgICAgICAgICAgICAgICAgICYmIGRpLT5ic3Nf
c2l6ZSA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgZGktPmJzc19hdm1hIDw9IHB0ciAKKyAg
ICAgICAgICAgICAgICAgICAgJiYgZGktPmJzc19hdm1hIDw9IHB0cgogICAgICAgICAgICAgICAg
ICAgICAmJiBwdHIgPCBkaS0+YnNzX2F2bWEgKyBkaS0+YnNzX3NpemUpCiAgICAgICAgICAgICAg
ICAgICAgfHwKICAgICAgICAgICAgICAgICAgICAoZGktPnNic3NfcHJlc2VudAogICAgICAgICAg
ICAgICAgICAgICAmJiBkaS0+c2Jzc19zaXplID4gMAotICAgICAgICAgICAgICAgICAgICAmJiBk
aS0+c2Jzc19hdm1hIDw9IHB0ciAKKyAgICAgICAgICAgICAgICAgICAgJiYgZGktPnNic3NfYXZt
YSA8PSBwdHIKICAgICAgICAgICAgICAgICAgICAgJiYgcHRyIDwgZGktPnNic3NfYXZtYSArIGRp
LT5zYnNzX3NpemUpCiAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgICAgICAgICAo
ZGktPnJvZGF0YV9wcmVzZW50CiAgICAgICAgICAgICAgICAgICAgICYmIGRpLT5yb2RhdGFfc2l6
ZSA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgZGktPnJvZGF0YV9hdm1hIDw9IHB0ciAKKyAg
ICAgICAgICAgICAgICAgICAgJiYgZGktPnJvZGF0YV9hdm1hIDw9IHB0cgogICAgICAgICAgICAg
ICAgICAgICAmJiBwdHIgPCBkaS0+cm9kYXRhX2F2bWEgKyBkaS0+cm9kYXRhX3NpemUpOwogICAg
ICAgfQogCiAgICAgICBpZiAoIWluUmFuZ2UpIGNvbnRpbnVlOwogCi0gICAgICBzbm8gPSBNTF8o
c2VhcmNoX29uZV9zeW10YWIpICggCisgICAgICBzbm8gPSBNTF8oc2VhcmNoX29uZV9zeW10YWIp
ICgKICAgICAgICAgICAgICAgIGRpLCBwdHIsIG1hdGNoX2FueXdoZXJlX2luX3N5bSwgZmluZFRl
eHQgKTsKICAgICAgIGlmIChzbm8gPT0gLTEpIGdvdG8gbm90X2ZvdW5kOwogICAgICAgKnN5bW5v
ID0gc25vOwpAQCAtMTMxOSwxNiArMTMxOSwzOSBAQAogICAgKnBkaSA9IE5VTEw7CiB9CiAKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKy8qLS0tIFVzZSBvZiBzeW1ib2wgdGFibGUgJiBsb2NhdGlvbiBpbmZvIHRvIGNyZWF0
ZSAgICAgICAgLS0tKi8KKy8qLS0tIHBsYXVzaWJsZS1sb29raW5nIHN0YWNrIGR1bXBzLiAgICAg
ICAgICAgICAgICAgICAgICAgLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogU2VhcmNoIGFsbCBzeW10YWJz
IHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAorICAgKnBk
aSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKnN5bW5vIHRvIHRoZSBzeW10YWIgZW50
cnkKKyAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMgc2V0IHRv
IE5VTEwuCisgICBJZiBmaW5kVGV4dD09VHJ1ZSwgIG9ubHkgdGV4dCBzeW1ib2xzIGFyZSBzZWFy
Y2hlZCBmb3IuCisgICBJZiBmaW5kVGV4dD09RmFsc2UsIG9ubHkgZGF0YSBzeW1ib2xzIGFyZSBz
ZWFyY2hlZCBmb3IuCisqLworc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9zeW10YWJzICggQWRkciBw
dHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIHN5bW5vLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQm9vbCBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCb29sIGZpbmRUZXh0ICkKK3sKKyAgIHNlYXJjaF9vbmVfZGVidWdJ
bmZvX2xpc3QoZGVidWdJbmZvX2xpc3QsIHB0ciwgcGRpLCBzeW1ubywKKyAgICAgICAgICAgbWF0
Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCk7CisgICBpZighKnBkaSkKKyAgICAgICBzZWFy
Y2hfb25lX2RlYnVnSW5mb19saXN0KHVubG9hZGVkRGVidWdJbmZvX2xpc3QsIHB0ciwgcGRpLCBz
eW1ubywKKyAgICAgICAgICAgICAgIG1hdGNoX2FueXdoZXJlX2luX3N5bSwgZmluZFRleHQpOwor
fQorCiAvKiBTZWFyY2ggYWxsIGxvY3RhYnMgdGhhdCB3ZSBrbm93IGFib3V0IHRvIGxvY2F0ZSBw
dHIuICBJZiBmb3VuZCwgc2V0CiAgICAqcGRpIHRvIHRoZSByZWxldmFudCBEZWJ1Z0luZm8sIGFu
ZCAqbG9jbm8gdG8gdGhlIGxvY3RhYiBlbnRyeQogICAgKm51bWJlciB3aXRoaW4gdGhhdC4gIElm
IG5vdCBmb3VuZCwgKnBkaSBpcyBzZXQgdG8gTlVMTC4gKi8KLXN0YXRpYyB2b2lkIHNlYXJjaF9h
bGxfbG9jdGFicyAoIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBsb2NubyApCitz
dGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QgKERlYnVnSW5mbyogbGlzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciBwdHIsIC8qT1VU
Ki9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9jbm8gKQogewogICAgV29yZCAgICAgICBsbm87
CiAgICBEZWJ1Z0luZm8qIGRpOwotICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBO
VUxMOyBkaSA9IGRpLT5uZXh0KSB7CisgICBmb3IgKGRpID0gbGlzdDsgZGkgIT0gTlVMTDsgZGkg
PSBkaS0+bmV4dCkgewogICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQKICAgICAgICAgICAmJiBk
aS0+dGV4dF9zaXplID4gMAogICAgICAgICAgICYmIGRpLT50ZXh0X2F2bWEgPD0gcHRyIApAQCAt
MTM0NCw2ICsxMzY3LDE2IEBACiAgICAqcGRpID0gTlVMTDsKIH0KIAorLyogU2VhcmNoIGFsbCBs
b2N0YWJzIHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAor
ICAgKnBkaSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRoZSBsb2N0
YWIgZW50cnkKKyAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMg
c2V0IHRvIE5VTEwuICovCitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBBZGRyIHB0
ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9jbm8gKQoreworICAgIHNlYXJjaF9hbGxfbG9j
dGFic19vbmVfbGlzdChkZWJ1Z0luZm9fbGlzdCwgcHRyLCBwZGksIGxvY25vICk7CisgICAgaWYo
ISpwZGkpCisgICAgICAgIHNlYXJjaF9hbGxfbG9jdGFic19vbmVfbGlzdCh1bmxvYWRlZERlYnVn
SW5mb19saXN0LCBwdHIsIHBkaSwgbG9jbm8gKTsKK30KIAogLyogVGhlIHdob2xlIHBvaW50IG9m
IHRoaXMgd2hvbGUgYmlnIGRlYWw6IG1hcCBhIGNvZGUgYWRkcmVzcyB0byBhCiAgICBwbGF1c2li
bGUgc3ltYm9sIG5hbWUuICBSZXR1cm5zIEZhbHNlIGlmIG5vIGlkZWE7IG90aGVyd2lzZSBUcnVl
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55670</attachid>
            <date>2011-01-07 05:08:22 +0000</date>
            <delta_ts>2011-02-14 18:50:56 +0000</delta_ts>
            <desc>update patch with regression tests</desc>
            <filename>potential-patch-to-allow-memory-leak-stack-traces-for-unloaded-.so-files.diff</filename>
            <type>text/plain</type>
            <size>12681</size>
            <attacher name="Kevin Fitch">kfitch42</attacher>
            
              <data encoding="base64">SW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnZndGVzdAkocmV2aXNpb24g
MCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAu
Li9maWx0ZXJfc3RkZXJyCit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28u
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwko
cmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qKiBN
YWtlcyBhIGp1bXAgYmFzZWQgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBvcmRlciB0
byBtYWtlIHN1cmUKKyAqIGVycm9ycyByZXBvcnRlZCB3aGlsZSB0aGUgZGxvcGVuJ2VkIG9iamVj
dCBpcyBsb2FkZWQgd29yay4gKi8KK2ludCBqbXBfb25fdW5pbml0KHZvaWQpIHsKKyAgICBpbnQg
dW5pbml0OworICAgIGlmKHVuaW5pdCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gMDsKK30KKworLyoqIExlYWsgMSBieXRlIG9mIG1lbW9yeS4gVGhpcyBpcyB0
byB0ZXN0IHRoZSBzdGFjayBjaGVjayByZXBvcnRlZCBhZnRlciB0aGUKKyAqICBvYmplY3QgaGFz
IGJlZW4gZGxjbG9zZSdkLiAqLwordm9pZCBsZWFrXzFfYnl0ZSh2b2lkKSB7CisgICAgKHZvaWQp
bWFsbG9jKDEpOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogbWVtY2hlY2svdGVzdHMvbGludXgv
ZGxjbG9zZV9sZWFrX3NvLmMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5zdGRvdXQuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCShyZXZpc2lv
biAwKQorKysgbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLmMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjQgQEAKKy8qICBUZXN0IHJlcG9ydGluZyBvZiBtZW1vcnkgbGVha3MgaW4g
b2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBkbG9wZW4nZWQuCisgKiAgIEZpbGU6ICAgZGxjbG9zZV9s
ZWFrLmMgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8ZGxmY24uaD4KKworaW50ICgqam1wX29uX3VuaW5pdCkodm9pZCk7Cit2b2lkICgqbGVh
a18xX2J5dGUpKHZvaWQpOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAg
ICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oIi4vZGxjbG9zZV9sZWFrX3NvLnNvIiwgUlRMRF9OT1cp
OworICAgIGlmKCFoYW5kbGUpIHsKKyAgICAgICAgcHJpbnRmKCJGQUlMVVJFIHRvIGRsb3BlbiBk
bGNsb3NlX2xlYWtfc28uc29cbiIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAg
IH0KKyAgICBqbXBfb25fdW5pbml0ID0gZGxzeW0oaGFuZGxlLCJqbXBfb25fdW5pbml0Iik7Cisg
ICAgbGVha18xX2J5dGUgPSBkbHN5bShoYW5kbGUsImxlYWtfMV9ieXRlIik7CisgICAgKHZvaWQp
am1wX29uX3VuaW5pdCgpOworICAgIGxlYWtfMV9ieXRlKCk7CisgICAgZGxjbG9zZShoYW5kbGUp
OworICAgIHJldHVybiAoRVhJVF9TVUNDRVNTKTsKK30KKwoKUHJvcGVydHkgY2hhbmdlcyBvbjog
bWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLmMKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCShy
ZXZpc2lvbiAxMTQ5MikKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw4IEBACiAJICAgIHN0YWNrX2NoYW5nZXMuc3Rkb3V0LmV4
cDIgc3RhY2tfY2hhbmdlcy52Z3Rlc3QgXAogCXN0YWNrX3N3aXRjaC5zdGRlcnIuZXhwIHN0YWNr
X3N3aXRjaC52Z3Rlc3QgXAogCXRpbWVyZmQtc3lzY2FsbCB0aW1lcmZkLXN5c2NhbGwuc3RkZXJy
LmV4cCBcCi0Jd2l0aC1zcGFjZS5zdGRlcnIuZXhwIHdpdGgtc3BhY2Uuc3Rkb3V0LmV4cCB3aXRo
LXNwYWNlLnZndGVzdAorCXdpdGgtc3BhY2Uuc3RkZXJyLmV4cCB3aXRoLXNwYWNlLnN0ZG91dC5l
eHAgd2l0aC1zcGFjZS52Z3Rlc3QgXAorCWRsY2xvc2VfbGVhay5zdGRlcnIuZXhwIGRsY2xvc2Vf
bGVhay5zdGRvdXQuZXhwIGRsY2xvc2VfbGVhay52Z3Rlc3QKIAogY2hlY2tfUFJPR1JBTVMgPSBc
CiAJYnJrIFwKQEAgLTIzLDcgKzI0LDggQEAKIAlzaWdxdWV1ZSBcCiAJc3RhY2tfY2hhbmdlcyBc
CiAJc3RhY2tfc3dpdGNoIFwKLQl0aW1lcmZkLXN5c2NhbGwKKwl0aW1lcmZkLXN5c2NhbGwgXAor
CWRsY2xvc2VfbGVhayBkbGNsb3NlX2xlYWtfc28uc28KIAogCiBBTV9DRkxBR1MgICArPSAkKEFN
X0ZMQUdfTTMyNjRfUFJJKQpAQCAtMzIsMyArMzQsMTYgQEAKIHN0YWNrX3N3aXRjaF9MREFERCAg
ICA9IC1scHRocmVhZAogdGltZXJmZF9zeXNjYWxsX0xEQUREID0gLWxydAogCisjIEJ1aWxkIHNo
YXJlZCBvYmplY3QgZm9yIGRsY2xvc2VfbGVhaworIyMjIEkgZG9uJ3QgdXNlIEdOVSBBdXRvdG9v
bHMgb2Z0ZW4sIHNvIEkgaGF2ZSBqdXN0IGtsdWRnZWQgdG9nZXRoZXIgYnVpbGRpbmcKKyMjIyBU
aGUgbG9hZGFibGUgbGlicmFyeSBoZXJlLi4uIEkgYW0gY2VydGFpbiBzb21lb25lIGVsc2UgY291
bGQgZG8gdGhpcworIyMjIGNsZWFuZXIuCitkbGNsb3NlX2xlYWtfU09VUkNFUyAgICAgICAgICA9
IGRsY2xvc2VfbGVhay5jCitkbGNsb3NlX2xlYWtfREVQRU5ERU5DSUVTICAgICA9IGRsY2xvc2Vf
bGVha19zby5zbworZGxjbG9zZV9sZWFrX0xEQUREICAgICAgICAgICAgPSAtbGRsCitkbGNsb3Nl
X2xlYWtfTERGTEFHUyAgICAgICAgICA9ICQoQU1fRkxBR19NMzI2NF9QUkkpIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwkKHRvcF9idWlsZGRpcikvbWVtY2hl
Y2svdGVzdHMKK2RsY2xvc2VfbGVha19zb19zb19TT1VSQ0VTID0gZGxjbG9zZV9sZWFrX3NvLmMK
K2RsY2xvc2VfbGVha19zb19zb19DRkxBR1MgID0gJChBTV9DRkxBR1MpIC1mcGljCitkbGNsb3Nl
X2xlYWtfc29fc29fTERGTEFHUyAgPSAtZnBpYyAkKEFNX0ZMQUdfTTMyNjRfUFJJKSAtc2hhcmVk
IC1XbCwtc29uYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCxkbGNsb3Nl
X2xlYWtfc28uc28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBtZW1jaGVjay90
ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuc3RkZXJyLmV4cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVj
ay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuc3RkZXJyLmV4cAkocmV2aXNpb24gMCkKKysrIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5zdGRlcnIuZXhwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI1IEBACisKK0NvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVu
aW5pdGlhbGlzZWQgdmFsdWUocykKKyAgIGF0IDB4Li4uLi4uLi46IGptcF9vbl91bmluaXQgKGRs
Y2xvc2VfbGVha19zby5jOjcpCisgICBieSAweC4uLi4uLi4uOiBtYWluIChkbGNsb3NlX2xlYWsu
YzoxOSkKKworCitIRUFQIFNVTU1BUlk6CisgICAgaW4gdXNlIGF0IGV4aXQ6IDEgYnl0ZXMgaW4g
MSBibG9ja3MKKyAgdG90YWwgaGVhcCB1c2FnZTogNiBhbGxvY3MsIDUgZnJlZXMsIDEsNDgwIGJ5
dGVzIGFsbG9jYXRlZAorCisxIGJ5dGVzIGluIDEgYmxvY2tzIGFyZSBkZWZpbml0ZWx5IGxvc3Qg
aW4gbG9zcyByZWNvcmQgLi4uIG9mIC4uLgorICAgYXQgMHguLi4uLi4uLjogbWFsbG9jICh2Z19y
ZXBsYWNlX21hbGxvYy5jOi4uLikKKyAgIGJ5IDB4Li4uLi4uLi46IGxlYWtfMV9ieXRlIChkbGNs
b3NlX2xlYWtfc28uYzoxNikKKyAgIGJ5IDB4Li4uLi4uLi46IG1haW4gKGRsY2xvc2VfbGVhay5j
OjIwKQorCitMRUFLIFNVTU1BUlk6CisgICBkZWZpbml0ZWx5IGxvc3Q6IDEgYnl0ZXMgaW4gMSBi
bG9ja3MKKyAgIGluZGlyZWN0bHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2NrcworICAgICBwb3Nz
aWJseSBsb3N0OiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICBzdGlsbCByZWFjaGFibGU6IDAgYnl0
ZXMgaW4gMCBibG9ja3MKKyAgICAgICAgc3VwcHJlc3NlZDogMCBieXRlcyBpbiAwIGJsb2Nrcwor
CitGb3IgY291bnRzIG9mIGRldGVjdGVkIGFuZCBzdXBwcmVzc2VkIGVycm9ycywgcmVydW4gd2l0
aDogLXYKK1VzZSAtLXRyYWNrLW9yaWdpbnM9eWVzIHRvIHNlZSB3aGVyZSB1bmluaXRpYWxpc2Vk
IHZhbHVlcyBjb21lIGZyb20KK0VSUk9SIFNVTU1BUlk6IDIgZXJyb3JzIGZyb20gMiBjb250ZXh0
cyAoc3VwcHJlc3NlZDogMCBmcm9tIDApCkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVi
dWdpbmZvLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5j
CShyZXZpc2lvbiAxMTQ5MikKKysrIGNvcmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwko
d29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw5IEBACiAgICBsaW5rZWQgbGlzdCBvZiBEZWJ1
Z0luZm9zLiAqLwogc3RhdGljIERlYnVnSW5mbyogZGVidWdJbmZvX2xpc3QgPSBOVUxMOwogCisv
KiBLZWVwIGFyb3VuZCBvbGQgZGVidWcgaW5mbyBzbyB3ZSBjYW4gaGF2ZSBhIGNoYW5jZSBvZiBk
ZWNvZGluZyBzdGFjayB0cmFjZXMKKyAqIChmb3IgbGVhayBjaGVja3MpIGV2ZW4gYWZ0ZXIgYSBz
aGFyZWQgbGlicmFyeSBoYXMgYmVlbiB1bmxvYWRlZC4gKi8KK3N0YXRpYyBEZWJ1Z0luZm8qIHVu
bG9hZGVkRGVidWdJbmZvX2xpc3QgPSBOVUxMOwogCiAvKiBGaW5kICdkaScgaW4gdGhlIGRlYnVn
SW5mb19saXN0IGFuZCBtb3ZlIGl0IG9uZSBzdGVwIGNsb3NlciB0aGUgdGhlCiAgICBmcm9udCBv
ZiB0aGUgbGlzdCwgc28gYXMgdG8gbWFrZSBzdWJzZXF1ZW50IHNlYXJjaGVzIGZvciBpdApAQCAt
Mjg0LDcgKzI4Nyw3IEBACiB9CiAKIAotLyogJ3NpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0luZm9f
bGlzdC4gIEZpbmQgaXQsIHJlbW92ZSBpdCBmcm9tIHRoZQorLyogJ2RpJyBpcyBhIG1lbWJlciBv
ZiBkZWJ1Z0luZm9fbGlzdC4gIEZpbmQgaXQsIHJlbW92ZSBpdCBmcm9tIHRoZQogICAgbGlzdCwg
bm90aWZ5IG1fcmVkaXIgdGhhdCB0aGlzIGhhcyBoYXBwZW5lZCwgYW5kIGZyZWUgYWxsIHN0b3Jh
Z2UKICAgIHJlYWNoYWJsZSBmcm9tIGl0LgogKi8KQEAgLTMxNiw3ICszMTksOCBAQAogICAgICAg
ICAgKnByZXZfbmV4dF9wdHIgPSBjdXJyLT5uZXh0OwogICAgICAgICAgaWYgKGN1cnItPmhhdmVf
ZGluZm8pCiAgICAgICAgICAgICBWR18ocmVkaXJfbm90aWZ5X2RlbGV0ZV9EZWJ1Z0luZm8pKCBj
dXJyICk7Ci0gICAgICAgICBmcmVlX0RlYnVnSW5mbyhjdXJyKTsKKyAgICAgICAgIGN1cnItPm5l
eHQgPSB1bmxvYWRlZERlYnVnSW5mb19saXN0OworICAgICAgICAgdW5sb2FkZWREZWJ1Z0luZm9f
bGlzdCA9IGN1cnI7CiAgICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICBwcmV2X25leHRf
cHRyID0gJmN1cnItPm5leHQ7CkBAIC01NjQsNiArNTY4LDcgQEAKICAgICAgIGNyZWF0ZWQgYW5k
IGRlc3Ryb3llZCBvbiBkZW1hbmQsIGFuZCBlYWNoIG9uZSBpcyB0cmVhdGVkIG1vcmUgb3IKICAg
ICAgIGxlc3MgaW5kZXBlbmRlbnRseS4gKi8KICAgIHZnX2Fzc2VydChkZWJ1Z0luZm9fbGlzdCA9
PSBOVUxMKTsKKyAgIHZnX2Fzc2VydCh1bmxvYWRlZERlYnVnSW5mb19saXN0ID09IE5VTEwpOwog
CiAgICAvKiBmbHVzaCB0aGUgQ0ZJIGZhc3QgcXVlcnkgY2FjaGUuICovCiAgICBjZnNpX2NhY2hl
X19pbnZhbGlkYXRlKCk7CkBAIC0xMjM1LDEwICsxMjQwLDEwIEBACiAvKi0tLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSovCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKLXZvaWQgVkdfKGRpX2Rpc2NhcmRfQUxMX2RlYnVnaW5mbykoIHZvaWQgKQorc3RhdGljIHZv
aWQgZGlzY2FyZF9BTExfZGVidWdpbmZvX2luX2xpc3QoRGVidWdJbmZvKiBsaXN0KQogewogICAg
RGVidWdJbmZvICpkaSwgKmRpMjsKLSAgIGRpID0gZGVidWdJbmZvX2xpc3Q7CisgICBkaSA9IGxp
c3Q7CiAgICB3aGlsZSAoZGkpIHsKICAgICAgIGRpMiA9IGRpLT5uZXh0OwogICAgICAgVkdfKHBy
aW50ZikoIlhYWCBybSAlcFxuIiwgZGkpOwpAQCAtMTI0NywxOSArMTI1MiwxNCBAQAogICAgfQog
fQogCit2b2lkIFZHXyhkaV9kaXNjYXJkX0FMTF9kZWJ1Z2luZm8pKCB2b2lkICkKK3sKKyAgICBk
aXNjYXJkX0FMTF9kZWJ1Z2luZm9faW5fbGlzdChkZWJ1Z0luZm9fbGlzdCk7CisgICAgZGlzY2Fy
ZF9BTExfZGVidWdpbmZvX2luX2xpc3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCk7Cit9CiAKLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLS8qLS0tIFVzZSBvZiBzeW1ib2wgdGFibGUgJiBsb2NhdGlvbiBpbmZvIHRvIGNyZWF0
ZSAgICAgICAgLS0tKi8KLS8qLS0tIHBsYXVzaWJsZS1sb29raW5nIHN0YWNrIGR1bXBzLiAgICAg
ICAgICAgICAgICAgICAgICAgLS0tKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogU2VhcmNoIGFsbCBzeW10YWJz
IHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAotICAgKnBk
aSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKnN5bW5vIHRvIHRoZSBzeW10YWIgZW50
cnkKLSAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwc2kgaXMgc2V0IHRv
IE5VTEwuCi0gICBJZiBmaW5kVGV4dD09VHJ1ZSwgIG9ubHkgdGV4dCBzeW1ib2xzIGFyZSBzZWFy
Y2hlZCBmb3IuCi0gICBJZiBmaW5kVGV4dD09RmFsc2UsIG9ubHkgZGF0YSBzeW1ib2xzIGFyZSBz
ZWFyY2hlZCBmb3IuCi0qLwotc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9zeW10YWJzICggQWRkciBw
dHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCitzdGF0aWMgdm9pZCBzZWFyY2hfb25lX2RlYnVn
SW5mb19saXN0IChEZWJ1Z0luZm8qIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogc3ltbm8sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCb29sIG1hdGNoX2FueXdoZXJlX2luX3N5bSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgZmluZFRleHQgKQpAQCAtMTI2OCw3ICsx
MjY4LDcgQEAKICAgIERlYnVnSW5mbyogZGk7CiAgICBCb29sICAgICAgIGluUmFuZ2U7CiAKLSAg
IGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgewor
ICAgZm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKIAogICAgICAg
aWYgKGZpbmRUZXh0KSB7CiAgICAgICAgICAvKiBDb25zaWRlciBhbnkgc3ltYm9sIGluIHRoZSBy
LXggbWFwcGVkIGFyZWEgdG8gYmUgdGV4dC4KQEAgLTEyODEsMzMgKzEyODEsMzMgQEAKICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICBpblJhbmdlID0gKGRpLT5kYXRhX3ByZXNlbnQKICAgICAgICAg
ICAgICAgICAgICAgJiYgZGktPmRhdGFfc2l6ZSA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYg
ZGktPmRhdGFfYXZtYSA8PSBwdHIgCisgICAgICAgICAgICAgICAgICAgICYmIGRpLT5kYXRhX2F2
bWEgPD0gcHRyCiAgICAgICAgICAgICAgICAgICAgICYmIHB0ciA8IGRpLT5kYXRhX2F2bWEgKyBk
aS0+ZGF0YV9zaXplKQogICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICAg
KGRpLT5zZGF0YV9wcmVzZW50CiAgICAgICAgICAgICAgICAgICAgICYmIGRpLT5zZGF0YV9zaXpl
ID4gMAotICAgICAgICAgICAgICAgICAgICAmJiBkaS0+c2RhdGFfYXZtYSA8PSBwdHIgCisgICAg
ICAgICAgICAgICAgICAgICYmIGRpLT5zZGF0YV9hdm1hIDw9IHB0cgogICAgICAgICAgICAgICAg
ICAgICAmJiBwdHIgPCBkaS0+c2RhdGFfYXZtYSArIGRpLT5zZGF0YV9zaXplKQogICAgICAgICAg
ICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICAgKGRpLT5ic3NfcHJlc2VudAogICAgICAg
ICAgICAgICAgICAgICAmJiBkaS0+YnNzX3NpemUgPiAwCi0gICAgICAgICAgICAgICAgICAgICYm
IGRpLT5ic3NfYXZtYSA8PSBwdHIgCisgICAgICAgICAgICAgICAgICAgICYmIGRpLT5ic3NfYXZt
YSA8PSBwdHIKICAgICAgICAgICAgICAgICAgICAgJiYgcHRyIDwgZGktPmJzc19hdm1hICsgZGkt
PmJzc19zaXplKQogICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICAgKGRp
LT5zYnNzX3ByZXNlbnQKICAgICAgICAgICAgICAgICAgICAgJiYgZGktPnNic3Nfc2l6ZSA+IDAK
LSAgICAgICAgICAgICAgICAgICAgJiYgZGktPnNic3NfYXZtYSA8PSBwdHIgCisgICAgICAgICAg
ICAgICAgICAgICYmIGRpLT5zYnNzX2F2bWEgPD0gcHRyCiAgICAgICAgICAgICAgICAgICAgICYm
IHB0ciA8IGRpLT5zYnNzX2F2bWEgKyBkaS0+c2Jzc19zaXplKQogICAgICAgICAgICAgICAgICAg
IHx8CiAgICAgICAgICAgICAgICAgICAgKGRpLT5yb2RhdGFfcHJlc2VudAogICAgICAgICAgICAg
ICAgICAgICAmJiBkaS0+cm9kYXRhX3NpemUgPiAwCi0gICAgICAgICAgICAgICAgICAgICYmIGRp
LT5yb2RhdGFfYXZtYSA8PSBwdHIgCisgICAgICAgICAgICAgICAgICAgICYmIGRpLT5yb2RhdGFf
YXZtYSA8PSBwdHIKICAgICAgICAgICAgICAgICAgICAgJiYgcHRyIDwgZGktPnJvZGF0YV9hdm1h
ICsgZGktPnJvZGF0YV9zaXplKTsKICAgICAgIH0KIAogICAgICAgaWYgKCFpblJhbmdlKSBjb250
aW51ZTsKIAotICAgICAgc25vID0gTUxfKHNlYXJjaF9vbmVfc3ltdGFiKSAoIAorICAgICAgc25v
ID0gTUxfKHNlYXJjaF9vbmVfc3ltdGFiKSAoCiAgICAgICAgICAgICAgICBkaSwgcHRyLCBtYXRj
aF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRUZXh0ICk7CiAgICAgICBpZiAoc25vID09IC0xKSBnb3Rv
IG5vdF9mb3VuZDsKICAgICAgICpzeW1ubyA9IHNubzsKQEAgLTEzMTksMTYgKzEzMTksMzkgQEAK
ICAgICpwZGkgPSBOVUxMOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLSBVc2Ugb2Ygc3ltYm9sIHRhYmxl
ICYgbG9jYXRpb24gaW5mbyB0byBjcmVhdGUgICAgICAgIC0tLSovCisvKi0tLSBwbGF1c2libGUt
bG9va2luZyBzdGFjayBkdW1wcy4gICAgICAgICAgICAgICAgICAgICAgIC0tLSovCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKKy8qIFNlYXJjaCBhbGwgc3ltdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0
ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5k
ICpzeW1ubyB0byB0aGUgc3ltdGFiIGVudHJ5CisgICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYg
bm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLgorICAgSWYgZmluZFRleHQ9PVRydWUsICBv
bmx5IHRleHQgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgorICAgSWYgZmluZFRleHQ9PUZhbHNl
LCBvbmx5IGRhdGEgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgorKi8KK3N0YXRpYyB2b2lkIHNl
YXJjaF9hbGxfc3ltdGFicyAoIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBzeW1u
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgbWF0Y2hfYW55d2hlcmVf
aW5fc3ltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBmaW5kVGV4dCAp
Cit7CisgICBzZWFyY2hfb25lX2RlYnVnSW5mb19saXN0KGRlYnVnSW5mb19saXN0LCBwdHIsIHBk
aSwgc3ltbm8sCisgICAgICAgICAgIG1hdGNoX2FueXdoZXJlX2luX3N5bSwgZmluZFRleHQpOwor
ICAgaWYoISpwZGkpCisgICAgICAgc2VhcmNoX29uZV9kZWJ1Z0luZm9fbGlzdCh1bmxvYWRlZERl
YnVnSW5mb19saXN0LCBwdHIsIHBkaSwgc3ltbm8sCisgICAgICAgICAgICAgICBtYXRjaF9hbnl3
aGVyZV9pbl9zeW0sIGZpbmRUZXh0KTsKK30KKwogLyogU2VhcmNoIGFsbCBsb2N0YWJzIHRoYXQg
d2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAogICAgKnBkaSB0byB0
aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRoZSBsb2N0YWIgZW50cnkKICAg
ICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMgc2V0IHRvIE5VTEwu
ICovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBBZGRyIHB0ciwgLypPVVQqL0Rl
YnVnSW5mbyoqIHBkaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKk9VVCovV29yZCogbG9jbm8gKQorc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzX29u
ZV9saXN0IChEZWJ1Z0luZm8qIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25v
ICkKIHsKICAgIFdvcmQgICAgICAgbG5vOwogICAgRGVidWdJbmZvKiBkaTsKLSAgIGZvciAoZGkg
PSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgeworICAgZm9yIChk
aSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKICAgICAgIGlmIChkaS0+dGV4
dF9wcmVzZW50CiAgICAgICAgICAgJiYgZGktPnRleHRfc2l6ZSA+IDAKICAgICAgICAgICAmJiBk
aS0+dGV4dF9hdm1hIDw9IHB0ciAKQEAgLTEzNDQsNiArMTM2NywxNiBAQAogICAgKnBkaSA9IE5V
TEw7CiB9CiAKKy8qIFNlYXJjaCBhbGwgbG9jdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9j
YXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVnSW5m
bywgYW5kICpsb2NubyB0byB0aGUgbG9jdGFiIGVudHJ5CisgICAqbnVtYmVyIHdpdGhpbiB0aGF0
LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLiAqLworc3RhdGljIHZvaWQgc2Vh
cmNoX2FsbF9sb2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25v
ICkKK3sKKyAgICBzZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QoZGVidWdJbmZvX2xpc3QsIHB0
ciwgcGRpLCBsb2NubyApOworICAgIGlmKCEqcGRpKQorICAgICAgICBzZWFyY2hfYWxsX2xvY3Rh
YnNfb25lX2xpc3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCwgcHRyLCBwZGksIGxvY25vICk7Cit9
CiAKIC8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGlzIHdob2xlIGJpZyBkZWFsOiBtYXAgYSBjb2Rl
IGFkZHJlc3MgdG8gYQogICAgcGxhdXNpYmxlIHN5bWJvbCBuYW1lLiAgUmV0dXJucyBGYWxzZSBp
ZiBubyBpZGVhOyBvdGhlcndpc2UgVHJ1ZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57256</attachid>
            <date>2011-02-14 18:50:56 +0000</date>
            <delta_ts>2011-03-03 20:13:05 +0000</delta_ts>
            <desc>Create new CLO for keeping unloaded symbols</desc>
            <filename>keep-unloaded-clo.diff</filename>
            <type>text/plain</type>
            <size>16368</size>
            <attacher name="Kevin Fitch">kfitch42</attacher>
            
              <data encoding="base64">ClByb3BlcnR5IGNoYW5nZXMgb246IG1lbWNoZWNrL3Rlc3RzL2xpbnV4Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTW9k
aWZpZWQ6IHN2bjppZ25vcmUKICAgLSAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0ZG91
dC5kaWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmxzZnJhbWUxCmxzZnJhbWUyCk1h
a2VmaWxlCk1ha2VmaWxlLmluCnNpZ3F1ZXVlCnN0YWNrX2NoYW5nZXMKc3RhY2tfc3dpdGNoCnRp
bWVyZmQtc3lzY2FsbAoKICAgKyAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0ZG91dC5k
aWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmxzZnJhbWUxCmxzZnJhbWUyCk1ha2Vm
aWxlCk1ha2VmaWxlLmluCnNpZ3F1ZXVlCnN0YWNrX2NoYW5nZXMKc3RhY2tfc3dpdGNoCnRpbWVy
ZmQtc3lzY2FsbApkbGNsb3NlX2xlYWsKZGxjbG9zZV9sZWFrX3NvLnNvCgoKSW5kZXg6IG1lbWNo
ZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hl
Y2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnZndGVzdAkocmV2aXNpb24gMCkKKysrIG1lbWNo
ZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAuLi9maWx0ZXJfc3Rk
ZXJyCit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMgLS1rZWVwLXVubG9hZGVkLXN5bXM9eWVzCklu
ZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwkocmV2aXNpb24gMCkKKysr
IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE3IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qKiBNYWtlcyBhIGp1bXAgYmFz
ZWQgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBvcmRlciB0byBtYWtlIHN1cmUKKyAq
IGVycm9ycyByZXBvcnRlZCB3aGlsZSB0aGUgZGxvcGVuJ2VkIG9iamVjdCBpcyBsb2FkZWQgd29y
ay4gKi8KK2ludCBqbXBfb25fdW5pbml0KHZvaWQpIHsKKyAgICBpbnQgdW5pbml0OworICAgIGlm
KHVuaW5pdCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsK
K30KKworLyoqIExlYWsgMSBieXRlIG9mIG1lbW9yeS4gVGhpcyBpcyB0byB0ZXN0IHRoZSBzdGFj
ayBjaGVjayByZXBvcnRlZCBhZnRlciB0aGUKKyAqICBvYmplY3QgaGFzIGJlZW4gZGxjbG9zZSdk
LiAqLworY2hhciogYWxsb2NfMV9ieXRlKHZvaWQpIHsKKyAgICByZXR1cm4gKGNoYXIqKW1hbGxv
YygxKTsKK30KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay1uby1rZWVw
LnZndGVzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWst
bm8ta2VlcC52Z3Rlc3QJKHJldmlzaW9uIDApCisrKyBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNs
b3NlX2xlYWstbm8ta2VlcC52Z3Rlc3QJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorcHJv
ZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAuLi9maWx0ZXJfc3RkZXJyCit2Z29wdHM6
IC0tbGVhay1jaGVjaz15ZXMKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVh
ay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCShy
ZXZpc2lvbiAwKQorKysgbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLmMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKKy8qICBUZXN0IHJlcG9ydGluZyBvZiBtZW1vcnkgbGVh
a3MgaW4gb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBkbG9wZW4nZWQuCisgKiAgIEZpbGU6ICAgZGxj
bG9zZV9sZWFrLmMgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8ZGxmY24uaD4KKworaW50ICgqam1wX29uX3VuaW5pdCkodm9pZCk7CitjaGFy
KiAoKmFsbG9jXzFfYnl0ZSkodm9pZCk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikgeworICAgIGNoYXIqIG1lbVRvTGVhazsKKyAgICBjaGFyIHg7CisgICAgdm9pZCogaGFuZGxl
ID0gZGxvcGVuKCIuL2RsY2xvc2VfbGVha19zby5zbyIsIFJUTERfTk9XKTsKKyAgICBpZighaGFu
ZGxlKSB7CisgICAgICAgIHByaW50ZigiRkFJTFVSRSB0byBkbG9wZW4gZGxjbG9zZV9sZWFrX3Nv
LnNvXG4iKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisgICAgam1wX29u
X3VuaW5pdCA9IGRsc3ltKGhhbmRsZSwiam1wX29uX3VuaW5pdCIpOworICAgIGFsbG9jXzFfYnl0
ZSA9IGRsc3ltKGhhbmRsZSwiYWxsb2NfMV9ieXRlIik7CisgICAgKHZvaWQpam1wX29uX3VuaW5p
dCgpOworICAgIG1lbVRvTGVhayA9IGFsbG9jXzFfYnl0ZSgpOworICAgIGRsY2xvc2UoaGFuZGxl
KTsKKyAgICB4ID0gbWVtVG9MZWFrWy0xXTsKKyAgICByZXR1cm4gKEVYSVRfU1VDQ0VTUyk7Cit9
CisKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCShyZXZpc2lvbiAxMTU1OSkKKysrIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsx
Myw5IEBACiAJICAgIHN0YWNrX2NoYW5nZXMuc3Rkb3V0LmV4cDIgc3RhY2tfY2hhbmdlcy52Z3Rl
c3QgXAogCXN0YWNrX3N3aXRjaC5zdGRlcnIuZXhwIHN0YWNrX3N3aXRjaC52Z3Rlc3QgXAogCXRp
bWVyZmQtc3lzY2FsbCB0aW1lcmZkLXN5c2NhbGwuc3RkZXJyLmV4cCBcCi0Jd2l0aC1zcGFjZS5z
dGRlcnIuZXhwIHdpdGgtc3BhY2Uuc3Rkb3V0LmV4cCB3aXRoLXNwYWNlLnZndGVzdAorCXdpdGgt
c3BhY2Uuc3RkZXJyLmV4cCB3aXRoLXNwYWNlLnN0ZG91dC5leHAgd2l0aC1zcGFjZS52Z3Rlc3Qg
XAorCWRsY2xvc2VfbGVhay1uby1rZWVwLnN0ZGVyci5leHAgZGxjbG9zZV9sZWFrLW5vLWtlZXAu
dmd0ZXN0IFwKKwlkbGNsb3NlX2xlYWsuc3RkZXJyLmV4cCBkbGNsb3NlX2xlYWsudmd0ZXN0CiAK
IGNoZWNrX1BST0dSQU1TID0gXAogCWJyayBcCkBAIC0yMyw3ICsyNSw4IEBACiAJc2lncXVldWUg
XAogCXN0YWNrX2NoYW5nZXMgXAogCXN0YWNrX3N3aXRjaCBcCi0JdGltZXJmZC1zeXNjYWxsCisJ
dGltZXJmZC1zeXNjYWxsIFwKKwlkbGNsb3NlX2xlYWsgZGxjbG9zZV9sZWFrX3NvLnNvCiAKIAog
QU1fQ0ZMQUdTICAgKz0gJChBTV9GTEFHX00zMjY0X1BSSSkKQEAgLTMyLDMgKzM1LDE2IEBACiBz
dGFja19zd2l0Y2hfTERBREQgICAgPSAtbHB0aHJlYWQKIHRpbWVyZmRfc3lzY2FsbF9MREFERCA9
IC1scnQKIAorIyBCdWlsZCBzaGFyZWQgb2JqZWN0IGZvciBkbGNsb3NlX2xlYWsKKyMjIyBJIGRv
bid0IHVzZSBHTlUgQXV0b3Rvb2xzIG9mdGVuLCBzbyBJIGhhdmUganVzdCBrbHVkZ2VkIHRvZ2V0
aGVyIGJ1aWxkaW5nCisjIyMgVGhlIGxvYWRhYmxlIGxpYnJhcnkgaGVyZS4uLiBJIGFtIGNlcnRh
aW4gc29tZW9uZSBlbHNlIGNvdWxkIGRvIHRoaXMKKyMjIyBjbGVhbmVyLgorZGxjbG9zZV9sZWFr
X1NPVVJDRVMgICAgICAgICAgPSBkbGNsb3NlX2xlYWsuYworZGxjbG9zZV9sZWFrX0RFUEVOREVO
Q0lFUyAgICAgPSBkbGNsb3NlX2xlYWtfc28uc28KK2RsY2xvc2VfbGVha19MREFERCAgICAgICAg
ICAgID0gLWxkbAorZGxjbG9zZV9sZWFrX0xERkxBR1MgICAgICAgICAgPSAkKEFNX0ZMQUdfTTMy
NjRfUFJJKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJCh0
b3BfYnVpbGRkaXIpL21lbWNoZWNrL3Rlc3RzCitkbGNsb3NlX2xlYWtfc29fc29fU09VUkNFUyA9
IGRsY2xvc2VfbGVha19zby5jCitkbGNsb3NlX2xlYWtfc29fc29fQ0ZMQUdTICA9ICQoQU1fQ0ZM
QUdTKSAtZnBpYworZGxjbG9zZV9sZWFrX3NvX3NvX0xERkxBR1MgID0gLWZwaWMgJChBTV9GTEFH
X00zMjY0X1BSSSkgLXNoYXJlZCAtV2wsLXNvbmFtZSBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtV2wsZGxjbG9zZV9sZWFrX3NvLnNvCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX29w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29sX29wdGlvbnMuaAkocmV2aXNp
b24gMTE1NTkpCisrKyBpbmNsdWRlL3B1Yl90b29sX29wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTY1LDYgKzE2NSwxMSBAQAogLyogQ29udGludWUgc3RhY2sgdHJhY2VzIGJlbG93IG1haW4o
KT8gIERlZmF1bHQ6IE5PICovCiBleHRlcm4gQm9vbCBWR18oY2xvX3Nob3dfYmVsb3dfbWFpbik7
CiAKKy8qIEtlZXAgc3ltYm9scyBmb3IgY29kZSB0aGF0IGlzIHVubG9hZGVkIChkbGNsb3NlIG9y
IHNpbWlsYXIpIHNvIHRoYXQgc3RhY2sKKyAgIHRyYWNlcyBjYW4gc3RpbGwgZ2l2ZSBsaW5lL2Zp
bGUgaW5mbyBmb3IgcHJldmlvdXNseSBjYXB0dXJlZCBzdGFjayB0cmFjZXMuCisgICBlLmcuIC4u
LiBzaG93aW5nIHdoZXJlIGEgYmxvY2sgd2FzIGFsbG9jYXRlZCBlLmcuIGxlYWtzIG9mIG9yIGFj
Y2Vzc2VzIGp1c3QKKyAgIG91dHN0aWRlIGEgYmxvY2suICovCitleHRlcm4gQm9vbCBWR18oY2xv
X2tlZXBfdW5sb2FkZWRfc3ltcyk7CiAKIC8qIFVzZWQgdG8gZXhwYW5kIGZpbGUgbmFtZXMuICAi
b3B0aW9uX25hbWUiIGlzIHRoZSBvcHRpb24gbmFtZSwgZWcuCiAgICAiLS1sb2ctZmlsZSIuICAn
Zm9ybWF0JyBpcyB3aGF0IGZvbGxvd3MsIGVnLiAiY2FjaGVncmluZC5vdXQuJXAiLiAgSW4KSW5k
ZXg6IGNvcmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3Jl
Z3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMJKHJldmlzaW9uIDExNTU5KQorKysgY29yZWdy
aW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1
LDkgQEAKICAgIGxpbmtlZCBsaXN0IG9mIERlYnVnSW5mb3MuICovCiBzdGF0aWMgRGVidWdJbmZv
KiBkZWJ1Z0luZm9fbGlzdCA9IE5VTEw7CiAKKy8qIEtlZXAgYXJvdW5kIG9sZCBkZWJ1ZyBpbmZv
IHNvIHdlIGNhbiBoYXZlIGEgY2hhbmNlIG9mIGRlY29kaW5nIHN0YWNrIHRyYWNlcworICogKGZv
ciBsZWFrIGNoZWNrcykgZXZlbiBhZnRlciBhIHNoYXJlZCBsaWJyYXJ5IGhhcyBiZWVuIHVubG9h
ZGVkLiAqLworc3RhdGljIERlYnVnSW5mbyogdW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9IE5VTEw7
CiAKIC8qIEZpbmQgJ2RpJyBpbiB0aGUgZGVidWdJbmZvX2xpc3QgYW5kIG1vdmUgaXQgb25lIHN0
ZXAgY2xvc2VyIHRoZSB0aGUKICAgIGZyb250IG9mIHRoZSBsaXN0LCBzbyBhcyB0byBtYWtlIHN1
YnNlcXVlbnQgc2VhcmNoZXMgZm9yIGl0CkBAIC0yODQsNyArMjg3LDcgQEAKIH0KIAogCi0vKiAn
c2knIGlzIGEgbWVtYmVyIG9mIGRlYnVnSW5mb19saXN0LiAgRmluZCBpdCwgcmVtb3ZlIGl0IGZy
b20gdGhlCisvKiAnZGknIGlzIGEgbWVtYmVyIG9mIGRlYnVnSW5mb19saXN0LiAgRmluZCBpdCwg
cmVtb3ZlIGl0IGZyb20gdGhlCiAgICBsaXN0LCBub3RpZnkgbV9yZWRpciB0aGF0IHRoaXMgaGFz
IGhhcHBlbmVkLCBhbmQgZnJlZSBhbGwgc3RvcmFnZQogICAgcmVhY2hhYmxlIGZyb20gaXQuCiAq
LwpAQCAtMzE2LDcgKzMxOSwxMiBAQAogICAgICAgICAgKnByZXZfbmV4dF9wdHIgPSBjdXJyLT5u
ZXh0OwogICAgICAgICAgaWYgKGN1cnItPmhhdmVfZGluZm8pCiAgICAgICAgICAgICBWR18ocmVk
aXJfbm90aWZ5X2RlbGV0ZV9EZWJ1Z0luZm8pKCBjdXJyICk7Ci0gICAgICAgICBmcmVlX0RlYnVn
SW5mbyhjdXJyKTsKKyAgICAgICAgIGlmIChWR18oY2xvX2tlZXBfdW5sb2FkZWRfc3ltcykpIHsK
KyAgICAgICAgICAgIGN1cnItPm5leHQgPSB1bmxvYWRlZERlYnVnSW5mb19saXN0OworICAgICAg
ICAgICAgdW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9IGN1cnI7CisgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZnJlZV9EZWJ1Z0luZm8oY3Vycik7CisJIH0KICAgICAgICAgIHJldHVybjsK
ICAgICAgIH0KICAgICAgIHByZXZfbmV4dF9wdHIgPSAmY3Vyci0+bmV4dDsKQEAgLTM1MCwxMSAr
MzU4LDExIEBACiAgICAgICAgICAgICAgJiYgKHN0YXJ0K2xlbmd0aCAtIDEgPCBjdXJyLT50ZXh0
X2F2bWEgCiAgICAgICAgICAgICAgICAgIHx8IGN1cnItPnRleHRfYXZtYSArIGN1cnItPnRleHRf
c2l6ZSAtIDEgPCBzdGFydCkpIHsKICAgICAgICAgICAgIC8qIG5vIG92ZXJsYXAgKi8KLQkgfSBl
bHNlIHsKLQkgICAgZm91bmQgPSBUcnVlOwotCSAgICBicmVhazsKLQkgfQotCSBjdXJyID0gY3Vy
ci0+bmV4dDsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3VuZCA9IFRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0
OwogICAgICAgfQogCiAgICAgICBpZiAoIWZvdW5kKSBicmVhazsKQEAgLTQzMSw3ICs0MzksNyBA
QAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAoY3Vyci0+bWFyaykKICAgICAgICAg
ICAgIGJyZWFrOwotCSBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgIGN1cnIgPSBjdXJyLT5u
ZXh0OwogICAgICAgfQogCiAgICAgICBpZiAoIWN1cnIpIGJyZWFrOwpAQCAtNTY0LDYgKzU3Miw3
IEBACiAgICAgICBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgb24gZGVtYW5kLCBhbmQgZWFjaCBvbmUg
aXMgdHJlYXRlZCBtb3JlIG9yCiAgICAgICBsZXNzIGluZGVwZW5kZW50bHkuICovCiAgICB2Z19h
c3NlcnQoZGVidWdJbmZvX2xpc3QgPT0gTlVMTCk7CisgICB2Z19hc3NlcnQodW5sb2FkZWREZWJ1
Z0luZm9fbGlzdCA9PSBOVUxMKTsKIAogICAgLyogZmx1c2ggdGhlIENGSSBmYXN0IHF1ZXJ5IGNh
Y2hlLiAqLwogICAgY2ZzaV9jYWNoZV9faW52YWxpZGF0ZSgpOwpAQCAtMTIzNSwxMCArMTI0NCwx
MCBAQAogLyotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtLS0qLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIFZHXyhkaV9kaXNjYXJkX0FMTF9kZWJ1Z2lu
Zm8pKCB2b2lkICkKK3N0YXRpYyB2b2lkIGRpc2NhcmRfQUxMX2RlYnVnaW5mb19pbl9saXN0KERl
YnVnSW5mbyogbGlzdCkKIHsKICAgIERlYnVnSW5mbyAqZGksICpkaTI7Ci0gICBkaSA9IGRlYnVn
SW5mb19saXN0OworICAgZGkgPSBsaXN0OwogICAgd2hpbGUgKGRpKSB7CiAgICAgICBkaTIgPSBk
aS0+bmV4dDsKICAgICAgIFZHXyhwcmludGYpKCJYWFggcm0gJXBcbiIsIGRpKTsKQEAgLTEyNDcs
MTkgKzEyNTYsMTQgQEAKICAgIH0KIH0KIAordm9pZCBWR18oZGlfZGlzY2FyZF9BTExfZGVidWdp
bmZvKSggdm9pZCApCit7CisgICAgZGlzY2FyZF9BTExfZGVidWdpbmZvX2luX2xpc3QoZGVidWdJ
bmZvX2xpc3QpOworICAgIGRpc2NhcmRfQUxMX2RlYnVnaW5mb19pbl9saXN0KHVubG9hZGVkRGVi
dWdJbmZvX2xpc3QpOworfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tLSBVc2Ugb2Ygc3ltYm9sIHRhYmxlICYg
bG9jYXRpb24gaW5mbyB0byBjcmVhdGUgICAgICAgIC0tLSovCi0vKi0tLSBwbGF1c2libGUtbG9v
a2luZyBzdGFjayBkdW1wcy4gICAgICAgICAgICAgICAgICAgICAgIC0tLSovCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0K
LS8qIFNlYXJjaCBhbGwgc3ltdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4g
IElmIGZvdW5kLCBzZXQKLSAgICpwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICpz
eW1ubyB0byB0aGUgc3ltdGFiIGVudHJ5Ci0gICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90
IGZvdW5kLCAqcHNpIGlzIHNldCB0byBOVUxMLgotICAgSWYgZmluZFRleHQ9PVRydWUsICBvbmx5
IHRleHQgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgotICAgSWYgZmluZFRleHQ9PUZhbHNlLCBv
bmx5IGRhdGEgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgotKi8KLXN0YXRpYyB2b2lkIHNlYXJj
aF9hbGxfc3ltdGFicyAoIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorc3RhdGlj
IHZvaWQgc2VhcmNoX29uZV9kZWJ1Z0luZm9fbGlzdCAoRGVidWdJbmZvKiBsaXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBw
ZGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dv
cmQqIHN5bW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBtYXRjaF9h
bnl3aGVyZV9pbl9zeW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGZp
bmRUZXh0ICkKQEAgLTEyNjgsNyArMTI3Miw3IEBACiAgICBEZWJ1Z0luZm8qIGRpOwogICAgQm9v
bCAgICAgICBpblJhbmdlOwogCi0gICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5V
TEw7IGRpID0gZGktPm5leHQpIHsKKyAgIGZvciAoZGkgPSBsaXN0OyBkaSAhPSBOVUxMOyBkaSA9
IGRpLT5uZXh0KSB7CiAKICAgICAgIGlmIChmaW5kVGV4dCkgewogICAgICAgICAgLyogQ29uc2lk
ZXIgYW55IHN5bWJvbCBpbiB0aGUgci14IG1hcHBlZCBhcmVhIHRvIGJlIHRleHQuCkBAIC0xMjgx
LDMzICsxMjg1LDMzIEBACiAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5SYW5nZSA9IChkaS0+
ZGF0YV9wcmVzZW50CiAgICAgICAgICAgICAgICAgICAgICYmIGRpLT5kYXRhX3NpemUgPiAwCi0g
ICAgICAgICAgICAgICAgICAgICYmIGRpLT5kYXRhX2F2bWEgPD0gcHRyIAorICAgICAgICAgICAg
ICAgICAgICAmJiBkaS0+ZGF0YV9hdm1hIDw9IHB0cgogICAgICAgICAgICAgICAgICAgICAmJiBw
dHIgPCBkaS0+ZGF0YV9hdm1hICsgZGktPmRhdGFfc2l6ZSkKICAgICAgICAgICAgICAgICAgICB8
fAogICAgICAgICAgICAgICAgICAgIChkaS0+c2RhdGFfcHJlc2VudAogICAgICAgICAgICAgICAg
ICAgICAmJiBkaS0+c2RhdGFfc2l6ZSA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgZGktPnNk
YXRhX2F2bWEgPD0gcHRyIAorICAgICAgICAgICAgICAgICAgICAmJiBkaS0+c2RhdGFfYXZtYSA8
PSBwdHIKICAgICAgICAgICAgICAgICAgICAgJiYgcHRyIDwgZGktPnNkYXRhX2F2bWEgKyBkaS0+
c2RhdGFfc2l6ZSkKICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgIChk
aS0+YnNzX3ByZXNlbnQKICAgICAgICAgICAgICAgICAgICAgJiYgZGktPmJzc19zaXplID4gMAot
ICAgICAgICAgICAgICAgICAgICAmJiBkaS0+YnNzX2F2bWEgPD0gcHRyIAorICAgICAgICAgICAg
ICAgICAgICAmJiBkaS0+YnNzX2F2bWEgPD0gcHRyCiAgICAgICAgICAgICAgICAgICAgICYmIHB0
ciA8IGRpLT5ic3NfYXZtYSArIGRpLT5ic3Nfc2l6ZSkKICAgICAgICAgICAgICAgICAgICB8fAog
ICAgICAgICAgICAgICAgICAgIChkaS0+c2Jzc19wcmVzZW50CiAgICAgICAgICAgICAgICAgICAg
ICYmIGRpLT5zYnNzX3NpemUgPiAwCi0gICAgICAgICAgICAgICAgICAgICYmIGRpLT5zYnNzX2F2
bWEgPD0gcHRyIAorICAgICAgICAgICAgICAgICAgICAmJiBkaS0+c2Jzc19hdm1hIDw9IHB0cgog
ICAgICAgICAgICAgICAgICAgICAmJiBwdHIgPCBkaS0+c2Jzc19hdm1hICsgZGktPnNic3Nfc2l6
ZSkKICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgIChkaS0+cm9kYXRh
X3ByZXNlbnQKICAgICAgICAgICAgICAgICAgICAgJiYgZGktPnJvZGF0YV9zaXplID4gMAotICAg
ICAgICAgICAgICAgICAgICAmJiBkaS0+cm9kYXRhX2F2bWEgPD0gcHRyIAorICAgICAgICAgICAg
ICAgICAgICAmJiBkaS0+cm9kYXRhX2F2bWEgPD0gcHRyCiAgICAgICAgICAgICAgICAgICAgICYm
IHB0ciA8IGRpLT5yb2RhdGFfYXZtYSArIGRpLT5yb2RhdGFfc2l6ZSk7CiAgICAgICB9CiAKICAg
ICAgIGlmICghaW5SYW5nZSkgY29udGludWU7CiAKLSAgICAgIHNubyA9IE1MXyhzZWFyY2hfb25l
X3N5bXRhYikgKCAKKyAgICAgIHNubyA9IE1MXyhzZWFyY2hfb25lX3N5bXRhYikgKAogICAgICAg
ICAgICAgICAgZGksIHB0ciwgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCApOwogICAg
ICAgaWYgKHNubyA9PSAtMSkgZ290byBub3RfZm91bmQ7CiAgICAgICAqc3ltbm8gPSBzbm87CkBA
IC0xMzE5LDE2ICsxMzIzLDM5IEBACiAgICAqcGRpID0gTlVMTDsKIH0KIAorLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyot
LS0gVXNlIG9mIHN5bWJvbCB0YWJsZSAmIGxvY2F0aW9uIGluZm8gdG8gY3JlYXRlICAgICAgICAt
LS0qLworLyotLS0gcGxhdXNpYmxlLWxvb2tpbmcgc3RhY2sgZHVtcHMuICAgICAgICAgICAgICAg
ICAgICAgICAtLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBTZWFyY2ggYWxsIHN5bXRhYnMgdGhhdCB3ZSBr
bm93IGFib3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0CisgICAqcGRpIHRvIHRoZSBy
ZWxldmFudCBEZWJ1Z0luZm8sIGFuZCAqc3ltbm8gdG8gdGhlIHN5bXRhYiBlbnRyeQorICAgKm51
bWJlciB3aXRoaW4gdGhhdC4gIElmIG5vdCBmb3VuZCwgKnBkaSBpcyBzZXQgdG8gTlVMTC4KKyAg
IElmIGZpbmRUZXh0PT1UcnVlLCAgb25seSB0ZXh0IHN5bWJvbHMgYXJlIHNlYXJjaGVkIGZvci4K
KyAgIElmIGZpbmRUZXh0PT1GYWxzZSwgb25seSBkYXRhIHN5bWJvbHMgYXJlIHNlYXJjaGVkIGZv
ci4KKyovCitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX3N5bXRhYnMgKCBBZGRyIHB0ciwgLypPVVQq
L0RlYnVnSW5mbyoqIHBkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKk9VVCovV29yZCogc3ltbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCb29sIG1hdGNoX2FueXdoZXJlX2luX3N5bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJvb2wgZmluZFRleHQgKQoreworICAgc2VhcmNoX29uZV9kZWJ1Z0luZm9fbGlzdChk
ZWJ1Z0luZm9fbGlzdCwgcHRyLCBwZGksIHN5bW5vLAorICAgICAgICAgICBtYXRjaF9hbnl3aGVy
ZV9pbl9zeW0sIGZpbmRUZXh0KTsKKyAgIGlmKCEqcGRpKQorICAgICAgIHNlYXJjaF9vbmVfZGVi
dWdJbmZvX2xpc3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCwgcHRyLCBwZGksIHN5bW5vLAorICAg
ICAgICAgICAgICAgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCk7Cit9CisKIC8qIFNl
YXJjaCBhbGwgbG9jdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZv
dW5kLCBzZXQKICAgICpwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICpsb2NubyB0
byB0aGUgbG9jdGFiIGVudHJ5CiAgICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5k
LCAqcGRpIGlzIHNldCB0byBOVUxMLiAqLwotc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJz
ICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25vICkKK3N0YXRpYyB2b2lk
IHNlYXJjaF9hbGxfbG9jdGFic19vbmVfbGlzdCAoRGVidWdJbmZvKiBsaXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5m
byoqIHBkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qT1VUKi9Xb3JkKiBsb2NubyApCiB7CiAgICBXb3JkICAgICAgIGxubzsKICAgIERlYnVn
SW5mbyogZGk7Ci0gICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0g
ZGktPm5leHQpIHsKKyAgIGZvciAoZGkgPSBsaXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0
KSB7CiAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50ZXh0X3Np
emUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBwdHIgCkBAIC0xMzQ0LDYgKzEz
NzEsMTYgQEAKICAgICpwZGkgPSBOVUxMOwogfQogCisvKiBTZWFyY2ggYWxsIGxvY3RhYnMgdGhh
dCB3ZSBrbm93IGFib3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0CisgICAqcGRpIHRv
IHRoZSByZWxldmFudCBEZWJ1Z0luZm8sIGFuZCAqbG9jbm8gdG8gdGhlIGxvY3RhYiBlbnRyeQor
ICAgKm51bWJlciB3aXRoaW4gdGhhdC4gIElmIG5vdCBmb3VuZCwgKnBkaSBpcyBzZXQgdG8gTlVM
TC4gKi8KK3N0YXRpYyB2b2lkIHNlYXJjaF9hbGxfbG9jdGFicyAoIEFkZHIgcHRyLCAvKk9VVCov
RGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qT1VUKi9Xb3JkKiBsb2NubyApCit7CisgICAgc2VhcmNoX2FsbF9sb2N0YWJzX29uZV9s
aXN0KGRlYnVnSW5mb19saXN0LCBwdHIsIHBkaSwgbG9jbm8gKTsKKyAgICBpZighKnBkaSkKKyAg
ICAgICAgc2VhcmNoX2FsbF9sb2N0YWJzX29uZV9saXN0KHVubG9hZGVkRGVidWdJbmZvX2xpc3Qs
IHB0ciwgcGRpLCBsb2NubyApOworfQogCiAvKiBUaGUgd2hvbGUgcG9pbnQgb2YgdGhpcyB3aG9s
ZSBiaWcgZGVhbDogbWFwIGEgY29kZSBhZGRyZXNzIHRvIGEKICAgIHBsYXVzaWJsZSBzeW1ib2wg
bmFtZS4gIFJldHVybnMgRmFsc2UgaWYgbm8gaWRlYTsgb3RoZXJ3aXNlIFRydWUuCkBAIC0xMzkw
LDEzICsxNDI3LDEzIEBACiAgICAgICBJbnQgICAgICBsZW47CiAKICAgICAgIGxlbiA9IFZHXyhz
cHJpbnRmKShidWYyLCAiJWMlbGQiLAotCQkJIG9mZnNldCA8IDAgPyAnLScgOiAnKycsCi0JCQkg
b2Zmc2V0IDwgMCA/IC1vZmZzZXQgOiBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
IG9mZnNldCA8IDAgPyAnLScgOiAnKycsCisgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
IDwgMCA/IC1vZmZzZXQgOiBvZmZzZXQpOwogICAgICAgdmdfYXNzZXJ0KGxlbiA8IChJbnQpc2l6
ZW9mKGJ1ZjIpKTsKIAogICAgICAgaWYgKGxlbiA8IChlbmQgLSBzeW1lbmQpKSB7Ci0JIENoYXIg
KmNwID0gYnVmMjsKLQkgVkdfKG1lbWNweSkoc3ltZW5kLCBjcCwgbGVuKzEpOworICAgICAgICAg
Q2hhciAqY3AgPSBidWYyOworICAgICAgICAgVkdfKG1lbWNweSkoc3ltZW5kLCBjcCwgbGVuKzEp
OwogICAgICAgfQogICAgfQogCkluZGV4OiBjb3JlZ3JpbmQvbV9tYWluLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gY29yZWdyaW5kL21fbWFpbi5jCShyZXZpc2lvbiAxMTU1OSkKKysrIGNvcmVncmluZC9tX21h
aW4uYwkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYgKzEzMywxMCBAQAogIiAgICAtLWxvZy1mZD08
bnVtYmVyPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2NyaXB0b3IgWzI9c3RkZXJy
XVxuIgogIiAgICAtLWxvZy1maWxlPTxmaWxlPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byA8Zmls
ZT5cbiIKICIgICAgLS1sb2ctc29ja2V0PWlwYWRkcjpwb3J0ICBsb2cgbWVzc2FnZXMgdG8gc29j
a2V0IGlwYWRkcjpwb3J0XG4iCisiICAgIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBLZWVw
IHN5bWJvbHMgZm9yIHVubG9hZGVkIGNvZGUgW25vXVxuIgorIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRoaXMgYWxsb3dzIHN0YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvXG4i
CisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBmaWxlL2xpbmUgaW5mbyBm
b3IgY29kZSB0aGF0IGhhcyBiZWVuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGxjbG9zZSdkIChvciBzaW1pbGFyKVxuIgogIlxuIgogIiAgdXNlciBvcHRpb25zIGZvciBWYWxn
cmluZCB0b29scyB0aGF0IHJlcG9ydCBlcnJvcnM6XG4iCiAiICAgIC0teG1sPXllcyAgICAgICAg
ICAgICAgICAgZW1pdCBlcnJvciBvdXRwdXQgaW4gWE1MIChzb21lIHRvb2xzIG9ubHkpXG4iCkBA
IC01MjUsNiArNTI5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGNsb192ZXhfY29u
dHJvbCkuZ3Vlc3RfY2hhc2VfdGhyZXNoLCAwLCA5OSkge30KICAgICAgIGVsc2UgaWYgVkdfQk9P
TF9DTE8oYXJnLCAiLS12ZXgtZ3Vlc3QtY2hhc2UtY29uZCIsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFZHXyhjbG9fdmV4X2NvbnRyb2wpLmd1ZXN0X2NoYXNlX2NvbmQpIHt9CisgICAgICBlbHNl
IGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0ta2VlcC11bmxvYWRlZC1zeW1zIiwKKwkgICAgICAgICAg
ICAgICBWR18oY2xvX2tlZXBfdW5sb2FkZWRfc3ltcykpIHt9CiAKICAgICAgIGVsc2UgaWYgVkdf
SU5UX0NMTyhhcmcsICItLWxvZy1mZCIsIHRtcF9sb2dfZmQpIHsKICAgICAgICAgIGxvZ190byA9
IFZnTG9nVG9fRmQ7CkluZGV4OiBjb3JlZ3JpbmQvbV9vcHRpb25zLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y29yZWdyaW5kL21fb3B0aW9ucy5jCShyZXZpc2lvbiAxMTU1OSkKKysrIGNvcmVncmluZC9tX29w
dGlvbnMuYwkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQAogVmdTbWMgIFZHXyhjbG9f
c21jX2NoZWNrKSAgICAgID0gVmdfU21jU3RhY2s7CiBIQ2hhciogVkdfKGNsb19rZXJuZWxfdmFy
aWFudCkgPSBOVUxMOwogQm9vbCAgIFZHXyhjbG9fZHN5bXV0aWwpICAgICAgID0gRmFsc2U7CitC
b29sICAgVkdfKGNsb19rZWVwX3VubG9hZGVkX3N5bXMpPSBGYWxzZTsKIAogCiAvKj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ki8KSW5kZXg6IGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb2Nz
L3htbC9tYW51YWwtY29yZS54bWwJKHJldmlzaW9uIDExNTU5KQorKysgZG9jcy94bWwvbWFudWFs
LWNvcmUueG1sCSh3b3JraW5nIGNvcHkpCkBAIC04MTQsNiArODE0LDE3IEBACiAgICAgPC9saXN0
aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAt
dW5sb2FkZWQtc3ltcyIgeHJlZmxhYmVsPSItLWtlZXAtdW5sb2FkZWQtc3ltcyI+CisgICAgPHRl
cm0+CisgICAgICA8b3B0aW9uPjwhW0NEQVRBWy0ta2VlcC11bmxvYWRlZC1zeW1zPTx5ZXN8bm8+
IFtkZWZhdWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4K
KyAgICAgIDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2Rl
LiBUaGlzIGFsbG93cyBzdGFjaworICAgICAgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5j
bHVkZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICBkbGNsb3Nl
J2QgKG9yIHNpbWlsYXIpPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5
PgorCiA8L3ZhcmlhYmxlbGlzdD4KIDwhLS0gZW5kIG9mIHhpOmluY2x1ZGUgaW4gdGhlIG1hbnBh
Z2UgLS0+CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57564</attachid>
            <date>2011-02-28 05:57:20 +0000</date>
            <delta_ts>2011-03-02 22:34:47 +0000</delta_ts>
            <desc>Addition for ecu tracking</desc>
            <filename>dif2.txt</filename>
            <type>text/plain</type>
            <size>3431</size>
            <attacher name="Howard Chu">hyc</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvcmVncmluZC9tX2V4ZWNvbnRleHQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQv
bV9leGVjb250ZXh0LmMJKHJldmlzaW9uIDExNTczKQorKysgY29yZWdyaW5kL21fZXhlY29udGV4
dC5jCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBACiAgICAgNTAzMzE2NTNVTCwgICAg
MTAwNjYzMzE5VUwKIH07CiAKK1VJbnQgVkdfKGVjX2xhc3RfZWN1KTsKK1VJbnQgVkdfKGVjX2N1
cnJfZWN1KTsKIAogLyogRWFjaCBlbGVtZW50IGlzIHByZXNlbnQgaW4gYSBoYXNoIGNoYWluLCBh
bmQgYWxzbyBjb250YWlucyBhCiAgICB2YXJpYWJsZSBsZW5ndGggYXJyYXkgb2YgZ3Vlc3QgY29k
ZSBhZGRyZXNzZXMgKHRoZSB1c2VmdWwgcGFydCkuICovCkBAIC0xNjksNiArMTcxLDcgQEAKIC8q
IFByaW50IGFuIEV4ZUNvbnRleHQuICovCiB2b2lkIFZHXyhwcF9FeGVDb250ZXh0KSAoIEV4ZUNv
bnRleHQqIGVjICkKIHsKKyAgIFZHXyhlY19jdXJyX2VjdSkgPSBlYy0+ZWN1OwogICAgVkdfKHBw
X1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+bl9pcHMgKTsKIH0KIApAQCAtNDA0LDYgKzQwNyw3
IEBACiAKICAgIHZnX2Fzc2VydChWR18oaXNfcGxhdXNpYmxlX0VDVSkoZWNfbmV4dF9lY3UpKTsK
ICAgIG5ld19lYy0+ZWN1ID0gZWNfbmV4dF9lY3U7CisgICBWR18oZWNfbGFzdF9lY3UpID0gZWNf
bmV4dF9lY3U7CiAgICBlY19uZXh0X2VjdSArPSA0OwogICAgaWYgKGVjX25leHRfZWN1ID09IDAp
IHsKICAgICAgIC8qIFVyci4gIE5vdyB3ZSdyZSBob3NlZDsgd2UgZW1pdHRlZCAyXjMwIEV4ZUNv
bnRleHRzIGFscmVhZHkKSW5kZXg6IGNvcmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMJKHJldmlzaW9u
IDExNTczKQorKysgY29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAicHViX2NvcmVfdGhyZWFkc3RhdGUuaCIK
ICNpbmNsdWRlICJwdWJfY29yZV9kZWJ1Z2luZm8uaCIgIC8qIHNlbGYgKi8KICNpbmNsdWRlICJw
dWJfY29yZV9kZW1hbmdsZS5oIgorI2luY2x1ZGUgInB1Yl9jb3JlX2V4ZWNvbnRleHQuaCIKICNp
bmNsdWRlICJwdWJfY29yZV9saWJjYmFzZS5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2xpYmNhc3Nl
cnQuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJjcHJpbnQuaCIKQEAgLTMyMiw2ICszMjMsNyBA
QAogICAgICAgICAgaWYgKFZHXyhjbG9fa2VlcF91bmxvYWRlZF9zeW1zKSkgewogICAgICAgICAg
ICAgY3Vyci0+bmV4dCA9IHVubG9hZGVkRGVidWdJbmZvX2xpc3Q7CiAgICAgICAgICAgICB1bmxv
YWRlZERlYnVnSW5mb19saXN0ID0gY3VycjsKKwkJCSBjdXJyLT5sYXN0X2VjdSA9IFZHXyhlY19s
YXN0X2VjdSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZnJlZV9EZWJ1Z0luZm8o
Y3Vycik7CiAJIH0KQEAgLTQ5NSw2ICs0OTcsNyBAQAogICAgICAgdmdfYXNzZXJ0KGRpKTsKICAg
ICAgIGRpLT5uZXh0ID0gZGVidWdJbmZvX2xpc3Q7CiAgICAgICBkZWJ1Z0luZm9fbGlzdCA9IGRp
OworCSAgIGRpLT5maXJzdF9lY3UgPSBWR18oZWNfbGFzdF9lY3UpOwogICAgfQogICAgcmV0dXJu
IGRpOwogfQpAQCAtMTI3Myw2ICsxMjc2LDkgQEAKICAgIEJvb2wgICAgICAgaW5SYW5nZTsKIAog
ICAgZm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKwkgIGlmICgo
VkdfKGVjX2N1cnJfZWN1KSA8IGRpLT5maXJzdF9lY3UpIHx8CisJICAJKGRpLT5sYXN0X2VjdSAm
JiBWR18oZWNfY3Vycl9lY3UpID4gZGktPmxhc3RfZWN1KSkKKwkJCWNvbnRpbnVlOwogCiAgICAg
ICBpZiAoZmluZFRleHQpIHsKICAgICAgICAgIC8qIENvbnNpZGVyIGFueSBzeW1ib2wgaW4gdGhl
IHIteCBtYXBwZWQgYXJlYSB0byBiZSB0ZXh0LgpAQCAtMTM1Niw2ICsxMzYyLDkgQEAKICAgIFdv
cmQgICAgICAgbG5vOwogICAgRGVidWdJbmZvKiBkaTsKICAgIGZvciAoZGkgPSBsaXN0OyBkaSAh
PSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7CisJICBpZiAoKFZHXyhlY19jdXJyX2VjdSkgPCBkaS0+
Zmlyc3RfZWN1KSB8fAorCSAgCShkaS0+bGFzdF9lY3UgJiYgVkdfKGVjX2N1cnJfZWN1KSA+IGRp
LT5sYXN0X2VjdSkpCisJCQljb250aW51ZTsKICAgICAgIGlmIChkaS0+dGV4dF9wcmVzZW50CiAg
ICAgICAgICAgJiYgZGktPnRleHRfc2l6ZSA+IDAKICAgICAgICAgICAmJiBkaS0+dGV4dF9hdm1h
IDw9IHB0ciAKSW5kZXg6IGNvcmVncmluZC9tX2RlYnVnaW5mby9wcml2X3N0b3JhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9yYWdlLmgJKHJldmlzaW9u
IDExNTczKQorKysgY29yZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3RvcmFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTQsNiArMzU0LDEwIEBACiAgICAgICBmb3JldmVyIHRoZXJlYWZ0ZXIuICBU
aGUgLmhhbmRsZSBmaWVsZCBpcyBzZXQgYXMgc29vbiBhcyB0aGlzCiAgICAgICBzdHJ1Y3R1cmUg
aXMgYWxsb2NhdGVkLiAqLwogICAgVUxvbmcgaGFuZGxlOworICAgCisgICAvKiBUaGUgZWNfbGFz
dF9lY3Ugd2hlbiB0aGlzIGluZm8gd2FzIGNyZWF0ZWQgb3IgcmVtb3ZlZCAqLworICAgVUludCBm
aXJzdF9lY3U7CisgICBVSW50IGxhc3RfZWN1OwogCiAgICAvKiBVc2VkIGZvciBkZWJ1Z2dpbmcg
b25seSAtIGluZGljYXRlIHdoYXQgc3R1ZmYgdG8gZHVtcCB3aGlsc3QKICAgICAgIHJlYWRpbmcg
c3R1ZmYgaW50byB0aGUgc2VnaW5mby4gIEFyZSBjb21wdXRlZCBhcyBlYXJseSBpbiB0aGUKSW5k
ZXg6IGNvcmVncmluZC9wdWJfY29yZV9leGVjb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdy
aW5kL3B1Yl9jb3JlX2V4ZWNvbnRleHQuaAkocmV2aXNpb24gMTE1NzMpCisrKyBjb3JlZ3JpbmQv
cHViX2NvcmVfZXhlY29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBACiBl
eHRlcm4KIC8qU3RhY2tUcmFjZSovQWRkciogVkdfKGdldF9FeGVDb250ZXh0X1N0YWNrVHJhY2Up
ICggRXhlQ29udGV4dCogZSApOwogCitleHRlcm4gVUludCBWR18oZWNfbGFzdF9lY3UpOworZXh0
ZXJuIFVJbnQgVkdfKGVjX2N1cnJfZWN1KTsKIAogI2VuZGlmICAgLy8gX19QVUJfQ09SRV9FWEVD
T05URVhUX0gKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57625</attachid>
            <date>2011-03-02 22:34:47 +0000</date>
            <delta_ts>2011-03-08 13:24:23 +0000</delta_ts>
            <desc>Revised ecu tracking patch</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>3547</size>
            <attacher name="Howard Chu">hyc</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvcmVncmluZC9tX2V4ZWNvbnRleHQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQv
bV9leGVjb250ZXh0LmMJKHJldmlzaW9uIDExNTczKQorKysgY29yZWdyaW5kL21fZXhlY29udGV4
dC5jCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBACiAgICAgNTAzMzE2NTNVTCwgICAg
MTAwNjYzMzE5VUwKIH07CiAKK1VJbnQgVkdfKGVjX2xhc3RfZWN1KTsKK1VJbnQgVkdfKGVjX2N1
cnJfZWN1KTsKIAogLyogRWFjaCBlbGVtZW50IGlzIHByZXNlbnQgaW4gYSBoYXNoIGNoYWluLCBh
bmQgYWxzbyBjb250YWlucyBhCiAgICB2YXJpYWJsZSBsZW5ndGggYXJyYXkgb2YgZ3Vlc3QgY29k
ZSBhZGRyZXNzZXMgKHRoZSB1c2VmdWwgcGFydCkuICovCkBAIC0xNjksNyArMTcxLDkgQEAKIC8q
IFByaW50IGFuIEV4ZUNvbnRleHQuICovCiB2b2lkIFZHXyhwcF9FeGVDb250ZXh0KSAoIEV4ZUNv
bnRleHQqIGVjICkKIHsKKyAgIFZHXyhlY19jdXJyX2VjdSkgPSBlYy0+ZWN1OwogICAgVkdfKHBw
X1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+bl9pcHMgKTsKKyAgIFZHXyhlY19jdXJyX2VjdSkg
PSAwOwogfQogCiAKQEAgLTQwNCw2ICs0MDgsNyBAQAogCiAgICB2Z19hc3NlcnQoVkdfKGlzX3Bs
YXVzaWJsZV9FQ1UpKGVjX25leHRfZWN1KSk7CiAgICBuZXdfZWMtPmVjdSA9IGVjX25leHRfZWN1
OworICAgVkdfKGVjX2xhc3RfZWN1KSA9IGVjX25leHRfZWN1OwogICAgZWNfbmV4dF9lY3UgKz0g
NDsKICAgIGlmIChlY19uZXh0X2VjdSA9PSAwKSB7CiAgICAgICAvKiBVcnIuICBOb3cgd2UncmUg
aG9zZWQ7IHdlIGVtaXR0ZWQgMl4zMCBFeGVDb250ZXh0cyBhbHJlYWR5CkluZGV4OiBjb3JlZ3Jp
bmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZGVi
dWdpbmZvL2RlYnVnaW5mby5jCShyZXZpc2lvbiAxMTU3MykKKysrIGNvcmVncmluZC9tX2RlYnVn
aW5mby9kZWJ1Z2luZm8uYwkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgInB1Yl9jb3JlX3RocmVhZHN0YXRlLmgiCiAjaW5jbHVkZSAicHViX2NvcmVfZGVidWdpbmZv
LmgiICAvKiBzZWxmICovCiAjaW5jbHVkZSAicHViX2NvcmVfZGVtYW5nbGUuaCIKKyNpbmNsdWRl
ICJwdWJfY29yZV9leGVjb250ZXh0LmgiCiAjaW5jbHVkZSAicHViX2NvcmVfbGliY2Jhc2UuaCIK
ICNpbmNsdWRlICJwdWJfY29yZV9saWJjYXNzZXJ0LmgiCiAjaW5jbHVkZSAicHViX2NvcmVfbGli
Y3ByaW50LmgiCkBAIC0zMjIsNiArMzIzLDcgQEAKICAgICAgICAgIGlmIChWR18oY2xvX2tlZXBf
dW5sb2FkZWRfc3ltcykpIHsKICAgICAgICAgICAgIGN1cnItPm5leHQgPSB1bmxvYWRlZERlYnVn
SW5mb19saXN0OwogICAgICAgICAgICAgdW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9IGN1cnI7Cisg
ICAgICAgICAgICBjdXJyLT5sYXN0X2VjdSA9IFZHXyhlY19sYXN0X2VjdSk7CiAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgZnJlZV9EZWJ1Z0luZm8oY3Vycik7CiAJIH0KQEAgLTQ5NSw2
ICs0OTcsNyBAQAogICAgICAgdmdfYXNzZXJ0KGRpKTsKICAgICAgIGRpLT5uZXh0ID0gZGVidWdJ
bmZvX2xpc3Q7CiAgICAgICBkZWJ1Z0luZm9fbGlzdCA9IGRpOworICAgICAgZGktPmZpcnN0X2Vj
dSA9IFZHXyhlY19sYXN0X2VjdSk7CiAgICB9CiAgICByZXR1cm4gZGk7CiB9CkBAIC0xMjczLDYg
KzEyNzYsOSBAQAogICAgQm9vbCAgICAgICBpblJhbmdlOwogCiAgICBmb3IgKGRpID0gbGlzdDsg
ZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgeworICAgICAgaWYgKFZHXyhlY19jdXJyX2VjdSkg
JiYgKChWR18oZWNfY3Vycl9lY3UpIDwgZGktPmZpcnN0X2VjdSkgfHwKKyAgICAgICAgIChkaS0+
bGFzdF9lY3UgJiYgVkdfKGVjX2N1cnJfZWN1KSA+IGRpLT5sYXN0X2VjdSkpKQorICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgIGlmIChmaW5kVGV4dCkgewogICAgICAgICAgLyogQ29uc2lk
ZXIgYW55IHN5bWJvbCBpbiB0aGUgci14IG1hcHBlZCBhcmVhIHRvIGJlIHRleHQuCkBAIC0xMzU2
LDYgKzEzNjIsOSBAQAogICAgV29yZCAgICAgICBsbm87CiAgICBEZWJ1Z0luZm8qIGRpOwogICAg
Zm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlmIChW
R18oZWNfY3Vycl9lY3UpICYmICgoVkdfKGVjX2N1cnJfZWN1KSA8IGRpLT5maXJzdF9lY3UpIHx8
CisgICAgICAgICAoZGktPmxhc3RfZWN1ICYmIFZHXyhlY19jdXJyX2VjdSkgPiBkaS0+bGFzdF9l
Y3UpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQK
ICAgICAgICAgICAmJiBkaS0+dGV4dF9zaXplID4gMAogICAgICAgICAgICYmIGRpLT50ZXh0X2F2
bWEgPD0gcHRyIApJbmRleDogY29yZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3RvcmFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2RlYnVnaW5mby9wcml2X3N0b3JhZ2UuaAkocmV2aXNp
b24gMTE1NzMpCisrKyBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9yYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1NCw2ICszNTQsMTAgQEAKICAgICAgIGZvcmV2ZXIgdGhlcmVhZnRlci4g
IFRoZSAuaGFuZGxlIGZpZWxkIGlzIHNldCBhcyBzb29uIGFzIHRoaXMKICAgICAgIHN0cnVjdHVy
ZSBpcyBhbGxvY2F0ZWQuICovCiAgICBVTG9uZyBoYW5kbGU7CisgICAKKyAgIC8qIFRoZSBlY19s
YXN0X2VjdSB3aGVuIHRoaXMgaW5mbyB3YXMgY3JlYXRlZCBvciByZW1vdmVkICovCisgICBVSW50
IGZpcnN0X2VjdTsKKyAgIFVJbnQgbGFzdF9lY3U7CiAKICAgIC8qIFVzZWQgZm9yIGRlYnVnZ2lu
ZyBvbmx5IC0gaW5kaWNhdGUgd2hhdCBzdHVmZiB0byBkdW1wIHdoaWxzdAogICAgICAgcmVhZGlu
ZyBzdHVmZiBpbnRvIHRoZSBzZWdpbmZvLiAgQXJlIGNvbXB1dGVkIGFzIGVhcmx5IGluIHRoZQpJ
bmRleDogY29yZWdyaW5kL3B1Yl9jb3JlX2V4ZWNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3Jl
Z3JpbmQvcHViX2NvcmVfZXhlY29udGV4dC5oCShyZXZpc2lvbiAxMTU3MykKKysrIGNvcmVncmlu
ZC9wdWJfY29yZV9leGVjb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAK
IGV4dGVybgogLypTdGFja1RyYWNlKi9BZGRyKiBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFj
ZSkgKCBFeGVDb250ZXh0KiBlICk7CiAKK2V4dGVybiBVSW50IFZHXyhlY19sYXN0X2VjdSk7Citl
eHRlcm4gVUludCBWR18oZWNfY3Vycl9lY3UpOwogCiAjZW5kaWYgICAvLyBfX1BVQl9DT1JFX0VY
RUNPTlRFWFRfSAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57651</attachid>
            <date>2011-03-03 20:13:05 +0000</date>
            <delta_ts>2011-03-14 21:48:36 +0000</delta_ts>
            <desc>Cleaned up version of patch to keep syms of unloaded code</desc>
            <filename>keep-syms.patch</filename>
            <type>text/plain</type>
            <size>24996</size>
            <attacher name="Kevin Fitch">kfitch42</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb2NzL3htbC9t
YW51YWwtY29yZS54bWwJKHJldmlzaW9uIDExNTc3KQorKysgZG9jcy94bWwvbWFudWFsLWNvcmUu
eG1sCSh3b3JraW5nIGNvcHkpCkBAIC04MTQsNiArODE0LDE3IEBACiAgICAgPC9saXN0aXRlbT4K
ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtdW5sb2Fk
ZWQtc3ltcyIgeHJlZmxhYmVsPSItLWtlZXAtdW5sb2FkZWQtc3ltcyI+CisgICAgPHRlcm0+Cisg
ICAgICA8b3B0aW9uPjwhW0NEQVRBWy0ta2VlcC11bmxvYWRlZC1zeW1zPTx5ZXN8bm8+IFtkZWZh
dWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg
IDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlLiBUaGlz
IGFsbG93cyBzdGFjaworICAgICAgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBm
aWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICBkbGNsb3NlJ2QgKG9y
IHNpbWlsYXIpPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorCiA8
L3ZhcmlhYmxlbGlzdD4KIDwhLS0gZW5kIG9mIHhpOmluY2x1ZGUgaW4gdGhlIG1hbnBhZ2UgLS0+
CiAKClByb3BlcnR5IGNoYW5nZXMgb246IG1lbWNoZWNrL3Rlc3RzL2xpbnV4Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TW9kaWZpZWQ6IHN2bjppZ25vcmUKICAgLSAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0
ZG91dC5kaWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmxzZnJhbWUxCmxzZnJhbWUy
Ck1ha2VmaWxlCk1ha2VmaWxlLmluCnNpZ3F1ZXVlCnN0YWNrX2NoYW5nZXMKc3RhY2tfc3dpdGNo
CnRpbWVyZmQtc3lzY2FsbAoKICAgKyAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0ZG91
dC5kaWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmxzZnJhbWUxCmxzZnJhbWUyCk1h
a2VmaWxlCk1ha2VmaWxlLmluCnNpZ3F1ZXVlCnN0YWNrX2NoYW5nZXMKc3RhY2tfc3dpdGNoCnRp
bWVyZmQtc3lzY2FsbApkbGNsb3NlX2xlYWsKZGxjbG9zZV9sZWFrX3NvLnNvCgoKSW5kZXg6IG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVt
Y2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnZndGVzdAkocmV2aXNpb24gMCkKKysrIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAuLi9maWx0ZXJf
c3RkZXJyCit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMgLS1rZWVwLXVubG9hZGVkLXN5bXM9eWVz
CkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwkocmV2aXNpb24gMCkK
KysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qKiBNYWtlcyBhIGp1bXAg
YmFzZWQgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBvcmRlciB0byBtYWtlIHN1cmUK
KyAqIGVycm9ycyByZXBvcnRlZCB3aGlsZSB0aGUgZGxvcGVuJ2VkIG9iamVjdCBpcyBsb2FkZWQg
d29yay4gKi8KK2ludCBqbXBfb25fdW5pbml0KHZvaWQpIHsKKyAgICBpbnQgdW5pbml0OworICAg
IGlmKHVuaW5pdCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
MDsKK30KKworLyoqIExlYWsgMSBieXRlIG9mIG1lbW9yeS4gVGhpcyBpcyB0byB0ZXN0IHRoZSBz
dGFjayBjaGVjayByZXBvcnRlZCBhZnRlciB0aGUKKyAqICBvYmplY3QgaGFzIGJlZW4gZGxjbG9z
ZSdkLiAqLworY2hhciogYWxsb2NfMV9ieXRlKHZvaWQpIHsKKyAgICByZXR1cm4gKGNoYXIqKW1h
bGxvYygxKTsKK30KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay1uby1r
ZWVwLnN0ZGVyci5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9z
ZV9sZWFrLW5vLWtlZXAuc3RkZXJyLmV4cAkocmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rlc3Rz
L2xpbnV4L2RsY2xvc2VfbGVhay1uby1rZWVwLnN0ZGVyci5leHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzIgQEAKKworQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0
aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHguLi4uLi4uLjogam1wX29uX3VuaW5pdCAoZGxjbG9z
ZV9sZWFrX3NvLmM6NykKKyAgIGJ5IDB4Li4uLi4uLi46IG1haW4gKGRsY2xvc2VfbGVhay5jOjIx
KQorCitJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxCisgICBhdCAweC4uLi4uLi4uOiBtYWluIChkbGNs
b3NlX2xlYWsuYzoyNCkKKyBBZGRyZXNzIDB4Li4uLi4uLi4gaXMgMSBieXRlcyBiZWZvcmUgYSBi
bG9jayBvZiBzaXplIDEgYWxsb2MnZAorICAgYXQgMHguLi4uLi4uLjogbWFsbG9jICh2Z19yZXBs
YWNlX21hbGxvYy5jOi4uLikKKyAgIGJ5IDB4Li4uLi4uLi46ID8/PworICAgYnkgMHguLi4uLi4u
LjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjIpCisKKworSEVBUCBTVU1NQVJZOgorICAgIGluIHVz
ZSBhdCBleGl0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgIHRvdGFsIGhlYXAgdXNhZ2U6IDYgYWxs
b2NzLCA1IGZyZWVzLCAxLDQ4MCBieXRlcyBhbGxvY2F0ZWQKKworMSBieXRlcyBpbiAxIGJsb2Nr
cyBhcmUgZGVmaW5pdGVseSBsb3N0IGluIGxvc3MgcmVjb3JkIC4uLiBvZiAuLi4KKyAgIGF0IDB4
Li4uLi4uLi46IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisgICBieSAweC4uLi4u
Li4uOiA/Pz8KKyAgIGJ5IDB4Li4uLi4uLi46IG1haW4gKGRsY2xvc2VfbGVhay5jOjIyKQorCitM
RUFLIFNVTU1BUlk6CisgICBkZWZpbml0ZWx5IGxvc3Q6IDEgYnl0ZXMgaW4gMSBibG9ja3MKKyAg
IGluZGlyZWN0bHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2NrcworICAgICBwb3NzaWJseSBsb3N0
OiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICBzdGlsbCByZWFjaGFibGU6IDAgYnl0ZXMgaW4gMCBi
bG9ja3MKKyAgICAgICAgc3VwcHJlc3NlZDogMCBieXRlcyBpbiAwIGJsb2NrcworCitGb3IgY291
bnRzIG9mIGRldGVjdGVkIGFuZCBzdXBwcmVzc2VkIGVycm9ycywgcmVydW4gd2l0aDogLXYKK1Vz
ZSAtLXRyYWNrLW9yaWdpbnM9eWVzIHRvIHNlZSB3aGVyZSB1bmluaXRpYWxpc2VkIHZhbHVlcyBj
b21lIGZyb20KK0VSUk9SIFNVTU1BUlk6IDMgZXJyb3JzIGZyb20gMyBjb250ZXh0cyAoc3VwcHJl
c3NlZDogMCBmcm9tIDApCkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWst
bm8ta2VlcC52Z3Rlc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9z
ZV9sZWFrLW5vLWtlZXAudmd0ZXN0CShyZXZpc2lvbiAwKQorKysgbWVtY2hlY2svdGVzdHMvbGlu
dXgvZGxjbG9zZV9sZWFrLW5vLWtlZXAudmd0ZXN0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMg
QEAKK3Byb2c6IGRsY2xvc2VfbGVhaworc3RkZXJyX2ZpbHRlcjogLi4vZmlsdGVyX3N0ZGVycgor
dmdvcHRzOiAtLWxlYWstY2hlY2s9eWVzIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vCkluZGV4OiBt
ZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVj
ay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuYwkocmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rl
c3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACisv
KiAgVGVzdCByZXBvcnRpbmcgb2YgbWVtb3J5IGxlYWtzIGluIG9iamVjdHMgdGhhdCBoYXZlIGJl
ZW4gZGxvcGVuJ2VkLgorICogICBGaWxlOiAgIGRsY2xvc2VfbGVhay5jICovCisKKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisKK2lu
dCAoKmptcF9vbl91bmluaXQpKHZvaWQpOworY2hhciogKCphbGxvY18xX2J5dGUpKHZvaWQpOwor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgICBjaGFyKiBtZW1Ub0xlYWs7
CisgICAgY2hhciB4OworICAgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigiLi9kbGNsb3NlX2xlYWtf
c28uc28iLCBSVExEX05PVyk7CisgICAgaWYoIWhhbmRsZSkgeworICAgICAgICBwcmludGYoIkZB
SUxVUkUgdG8gZGxvcGVuIGRsY2xvc2VfbGVha19zby5zb1xuIik7CisgICAgICAgIHJldHVybiBF
WElUX0ZBSUxVUkU7CisgICAgfQorICAgIGptcF9vbl91bmluaXQgPSBkbHN5bShoYW5kbGUsImpt
cF9vbl91bmluaXQiKTsKKyAgICBhbGxvY18xX2J5dGUgPSBkbHN5bShoYW5kbGUsImFsbG9jXzFf
Ynl0ZSIpOworICAgICh2b2lkKWptcF9vbl91bmluaXQoKTsKKyAgICBtZW1Ub0xlYWsgPSBhbGxv
Y18xX2J5dGUoKTsKKyAgICBkbGNsb3NlKGhhbmRsZSk7CisgICAgeCA9IG1lbVRvTGVha1stMV07
CisgICAgcmV0dXJuIChFWElUX1NVQ0NFU1MpOworfQpJbmRleDogbWVtY2hlY2svdGVzdHMvbGlu
dXgvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvTWFrZWZp
bGUuYW0JKHJldmlzaW9uIDExNTc3KQorKysgbWVtY2hlY2svdGVzdHMvbGludXgvTWFrZWZpbGUu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTEzLDcgKzEzLDkgQEAKIAkgICAgc3RhY2tfY2hhbmdlcy5z
dGRvdXQuZXhwMiBzdGFja19jaGFuZ2VzLnZndGVzdCBcCiAJc3RhY2tfc3dpdGNoLnN0ZGVyci5l
eHAgc3RhY2tfc3dpdGNoLnZndGVzdCBcCiAJdGltZXJmZC1zeXNjYWxsIHRpbWVyZmQtc3lzY2Fs
bC5zdGRlcnIuZXhwIFwKLQl3aXRoLXNwYWNlLnN0ZGVyci5leHAgd2l0aC1zcGFjZS5zdGRvdXQu
ZXhwIHdpdGgtc3BhY2Uudmd0ZXN0CisJd2l0aC1zcGFjZS5zdGRlcnIuZXhwIHdpdGgtc3BhY2Uu
c3Rkb3V0LmV4cCB3aXRoLXNwYWNlLnZndGVzdCBcCisJZGxjbG9zZV9sZWFrLW5vLWtlZXAuc3Rk
ZXJyLmV4cCBkbGNsb3NlX2xlYWstbm8ta2VlcC52Z3Rlc3QgXAorCWRsY2xvc2VfbGVhay5zdGRl
cnIuZXhwIGRsY2xvc2VfbGVhay52Z3Rlc3QKIAogY2hlY2tfUFJPR1JBTVMgPSBcCiAJYnJrIFwK
QEAgLTIzLDcgKzI1LDggQEAKIAlzaWdxdWV1ZSBcCiAJc3RhY2tfY2hhbmdlcyBcCiAJc3RhY2tf
c3dpdGNoIFwKLQl0aW1lcmZkLXN5c2NhbGwKKwl0aW1lcmZkLXN5c2NhbGwgXAorCWRsY2xvc2Vf
bGVhayBkbGNsb3NlX2xlYWtfc28uc28KIAogCiBBTV9DRkxBR1MgICArPSAkKEFNX0ZMQUdfTTMy
NjRfUFJJKQpAQCAtMzIsMyArMzUsMTYgQEAKIHN0YWNrX3N3aXRjaF9MREFERCAgICA9IC1scHRo
cmVhZAogdGltZXJmZF9zeXNjYWxsX0xEQUREID0gLWxydAogCisjIEJ1aWxkIHNoYXJlZCBvYmpl
Y3QgZm9yIGRsY2xvc2VfbGVhaworIyMjIEkgZG9uJ3QgdXNlIEdOVSBBdXRvdG9vbHMgb2Z0ZW4s
IHNvIEkgaGF2ZSBqdXN0IGtsdWRnZWQgdG9nZXRoZXIgYnVpbGRpbmcKKyMjIyBUaGUgbG9hZGFi
bGUgbGlicmFyeSBoZXJlLi4uIEkgYW0gY2VydGFpbiBzb21lb25lIGVsc2UgY291bGQgZG8gdGhp
cworIyMjIGNsZWFuZXIuCitkbGNsb3NlX2xlYWtfU09VUkNFUyAgICAgICAgICA9IGRsY2xvc2Vf
bGVhay5jCitkbGNsb3NlX2xlYWtfREVQRU5ERU5DSUVTICAgICA9IGRsY2xvc2VfbGVha19zby5z
bworZGxjbG9zZV9sZWFrX0xEQUREICAgICAgICAgICAgPSAtbGRsCitkbGNsb3NlX2xlYWtfTERG
TEFHUyAgICAgICAgICA9ICQoQU1fRkxBR19NMzI2NF9QUkkpIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwkKHRvcF9idWlsZGRpcikvbWVtY2hlY2svdGVzdHMK
K2RsY2xvc2VfbGVha19zb19zb19TT1VSQ0VTID0gZGxjbG9zZV9sZWFrX3NvLmMKK2RsY2xvc2Vf
bGVha19zb19zb19DRkxBR1MgID0gJChBTV9DRkxBR1MpIC1mcGljCitkbGNsb3NlX2xlYWtfc29f
c29fTERGTEFHUyAgPSAtZnBpYyAkKEFNX0ZMQUdfTTMyNjRfUFJJKSAtc2hhcmVkIC1XbCwtc29u
YW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCxkbGNsb3NlX2xlYWtfc28u
c28KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5zdGRlcnIuZXhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5zdGRlcnIuZXhw
CShyZXZpc2lvbiAwKQorKysgbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnN0ZGVy
ci5leHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKworQ29uZGl0aW9uYWwganVtcCBv
ciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHguLi4uLi4u
Ljogam1wX29uX3VuaW5pdCAoZGxjbG9zZV9sZWFrX3NvLmM6NykKKyAgIGJ5IDB4Li4uLi4uLi46
IG1haW4gKGRsY2xvc2VfbGVhay5jOjIxKQorCitJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxCisgICBh
dCAweC4uLi4uLi4uOiBtYWluIChkbGNsb3NlX2xlYWsuYzoyNCkKKyBBZGRyZXNzIDB4Li4uLi4u
Li4gaXMgMSBieXRlcyBiZWZvcmUgYSBibG9jayBvZiBzaXplIDEgYWxsb2MnZAorICAgYXQgMHgu
Li4uLi4uLjogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOi4uLikKKyAgIGJ5IDB4Li4uLi4u
Li46IGFsbG9jXzFfYnl0ZSAoZGxjbG9zZV9sZWFrX3NvLmM6MTYpCisgICBieSAweC4uLi4uLi4u
OiBtYWluIChkbGNsb3NlX2xlYWsuYzoyMikKKworCitIRUFQIFNVTU1BUlk6CisgICAgaW4gdXNl
IGF0IGV4aXQ6IDEgYnl0ZXMgaW4gMSBibG9ja3MKKyAgdG90YWwgaGVhcCB1c2FnZTogNiBhbGxv
Y3MsIDUgZnJlZXMsIDEsNDgwIGJ5dGVzIGFsbG9jYXRlZAorCisxIGJ5dGVzIGluIDEgYmxvY2tz
IGFyZSBkZWZpbml0ZWx5IGxvc3QgaW4gbG9zcyByZWNvcmQgLi4uIG9mIC4uLgorICAgYXQgMHgu
Li4uLi4uLjogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOi4uLikKKyAgIGJ5IDB4Li4uLi4u
Li46IGFsbG9jXzFfYnl0ZSAoZGxjbG9zZV9sZWFrX3NvLmM6MTYpCisgICBieSAweC4uLi4uLi4u
OiBtYWluIChkbGNsb3NlX2xlYWsuYzoyMikKKworTEVBSyBTVU1NQVJZOgorICAgZGVmaW5pdGVs
eSBsb3N0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgICBpbmRpcmVjdGx5IGxvc3Q6IDAgYnl0ZXMg
aW4gMCBibG9ja3MKKyAgICAgcG9zc2libHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2NrcworICAg
c3RpbGwgcmVhY2hhYmxlOiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICAgICAgIHN1cHByZXNzZWQ6
IDAgYnl0ZXMgaW4gMCBibG9ja3MKKworRm9yIGNvdW50cyBvZiBkZXRlY3RlZCBhbmQgc3VwcHJl
c3NlZCBlcnJvcnMsIHJlcnVuIHdpdGg6IC12CitVc2UgLS10cmFjay1vcmlnaW5zPXllcyB0byBz
ZWUgd2hlcmUgdW5pbml0aWFsaXNlZCB2YWx1ZXMgY29tZSBmcm9tCitFUlJPUiBTVU1NQVJZOiAz
IGVycm9ycyBmcm9tIDMgY29udGV4dHMgKHN1cHByZXNzZWQ6IDAgZnJvbSAwKQpJbmRleDogaW5j
bHVkZS9wdWJfdG9vbF9vcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9v
cHRpb25zLmgJKHJldmlzaW9uIDExNTc3KQorKysgaW5jbHVkZS9wdWJfdG9vbF9vcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsMTEgQEAKIC8qIENvbnRpbnVlIHN0YWNrIHRy
YWNlcyBiZWxvdyBtYWluKCk/ICBEZWZhdWx0OiBOTyAqLwogZXh0ZXJuIEJvb2wgVkdfKGNsb19z
aG93X2JlbG93X21haW4pOwogCisvKiBLZWVwIHN5bWJvbHMgZm9yIGNvZGUgdGhhdCBpcyB1bmxv
YWRlZCAoZGxjbG9zZSBvciBzaW1pbGFyKSBzbyB0aGF0IHN0YWNrCisgICB0cmFjZXMgY2FuIHN0
aWxsIGdpdmUgbGluZS9maWxlIGluZm8gZm9yIHByZXZpb3VzbHkgY2FwdHVyZWQgc3RhY2sgdHJh
Y2VzLgorICAgZS5nLiAuLi4gc2hvd2luZyB3aGVyZSBhIGJsb2NrIHdhcyBhbGxvY2F0ZWQgZS5n
LiBsZWFrcyBvZiBvciBhY2Nlc3NlcyBqdXN0CisgICBvdXRzdGlkZSBhIGJsb2NrLiAqLworZXh0
ZXJuIEJvb2wgVkdfKGNsb19rZWVwX3VubG9hZGVkX3N5bXMpOwogCiAvKiBVc2VkIHRvIGV4cGFu
ZCBmaWxlIG5hbWVzLiAgIm9wdGlvbl9uYW1lIiBpcyB0aGUgb3B0aW9uIG5hbWUsIGVnLgogICAg
Ii0tbG9nLWZpbGUiLiAgJ2Zvcm1hdCcgaXMgd2hhdCBmb2xsb3dzLCBlZy4gImNhY2hlZ3JpbmQu
b3V0LiVwIi4gIEluCkluZGV4OiBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5leHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gbm9uZS90ZXN0cy9jbWRsaW5lMi5zdGRvdXQuZXhwCShyZXZpc2lvbiAxMTU3NykK
KysrIG5vbmUvdGVzdHMvY21kbGluZTIuc3Rkb3V0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjEs
NiArMjEsMTAgQEAKICAgICAtLWxvZy1mZD08bnVtYmVyPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0
byBmaWxlIGRlc2NyaXB0b3IgWzI9c3RkZXJyXQogICAgIC0tbG9nLWZpbGU9PGZpbGU+ICAgICAg
ICAgbG9nIG1lc3NhZ2VzIHRvIDxmaWxlPgogICAgIC0tbG9nLXNvY2tldD1pcGFkZHI6cG9ydCAg
bG9nIG1lc3NhZ2VzIHRvIHNvY2tldCBpcGFkZHI6cG9ydAorICAgIC0ta2VlcC11bmxvYWRlZC1z
eW1zPW5vfHllcyBLZWVwIHN5bWJvbHMgZm9yIHVubG9hZGVkIGNvZGUgW25vXQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkg
bGVha3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5l
IGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGxjbG9zZSdkIChvciBzaW1pbGFyKQogCiAgIHVzZXIgb3B0aW9ucyBmb3IgVmFsZ3JpbmQg
dG9vbHMgdGhhdCByZXBvcnQgZXJyb3JzOgogICAgIC0teG1sPXllcyAgICAgICAgICAgICAgICAg
ZW1pdCBlcnJvciBvdXRwdXQgaW4gWE1MIChzb21lIHRvb2xzIG9ubHkpCkluZGV4OiBub25lL3Rl
c3RzL2NtZGxpbmUxLnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9uZS90ZXN0cy9jbWRsaW5l
MS5zdGRvdXQuZXhwCShyZXZpc2lvbiAxMTU3NykKKysrIG5vbmUvdGVzdHMvY21kbGluZTEuc3Rk
b3V0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsMTAgQEAKICAgICAtLWxvZy1mZD08
bnVtYmVyPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2NyaXB0b3IgWzI9c3RkZXJy
XQogICAgIC0tbG9nLWZpbGU9PGZpbGU+ICAgICAgICAgbG9nIG1lc3NhZ2VzIHRvIDxmaWxlPgog
ICAgIC0tbG9nLXNvY2tldD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2VzIHRvIHNvY2tldCBpcGFk
ZHI6cG9ydAorICAgIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBLZWVwIHN5bWJvbHMgZm9y
IHVubG9hZGVkIGNvZGUgW25vXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBh
bGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVl
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxjbG9zZSdkIChvciBzaW1pbGFyKQog
CiAgIHVzZXIgb3B0aW9ucyBmb3IgVmFsZ3JpbmQgdG9vbHMgdGhhdCByZXBvcnQgZXJyb3JzOgog
ICAgIC0teG1sPXllcyAgICAgICAgICAgICAgICAgZW1pdCBlcnJvciBvdXRwdXQgaW4gWE1MIChz
b21lIHRvb2xzIG9ubHkpCkluZGV4OiBjb3JlZ3JpbmQvbV9leGVjb250ZXh0LmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY29yZWdyaW5kL21fZXhlY29udGV4dC5jCShyZXZpc2lvbiAxMTU3NykKKysrIGNvcmVn
cmluZC9tX2V4ZWNvbnRleHQuYwkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOCBAQAogICAg
IDUwMzMxNjUzVUwsICAgIDEwMDY2MzMxOVVMCiB9OwogCitVSW50IFZHXyhlY19sYXN0X2VjdSk7
CitVSW50IFZHXyhlY19jdXJyX2VjdSkgPSBFQ19FQ1VfQ1VSUkVOVDsKIAogLyogRWFjaCBlbGVt
ZW50IGlzIHByZXNlbnQgaW4gYSBoYXNoIGNoYWluLCBhbmQgYWxzbyBjb250YWlucyBhCiAgICB2
YXJpYWJsZSBsZW5ndGggYXJyYXkgb2YgZ3Vlc3QgY29kZSBhZGRyZXNzZXMgKHRoZSB1c2VmdWwg
cGFydCkuICovCkBAIC0xNjgsOCArMTcwLDEzIEBACiAKIC8qIFByaW50IGFuIEV4ZUNvbnRleHQu
ICovCiB2b2lkIFZHXyhwcF9FeGVDb250ZXh0KSAoIEV4ZUNvbnRleHQqIGVjICkKLXsKK3sgIC8q
IFNldCB0aGUgY3VycmVudCBlY3UgdG8gZGVjb2RlLCB0aGlzIGhhY2sgYXZvaWRzIGNoYW5naW5n
IGEgbnVtYmVyIG9mCisgICBmdW5jdGlvbiBzaWduYXR1cmVzIGluIG9yZGVyIHRvIHBhc3MgdGhp
cyBpbmZvIGFsbCB0aGUgd2F5IGRvd24gdG8KKyAgIGRlYnVnaW5mbyAqLworICAgVkdfKGVjX2N1
cnJfZWN1KSA9IGVjLT5lY3U7CiAgICBWR18ocHBfU3RhY2tUcmFjZSkoIGVjLT5pcHMsIGVjLT5u
X2lwcyApOworICAgLyogQW5kIHJlc2V0IHRvIGRlY29kaW5nIGN1cnJlbnQgc3RhY2sgdHJhY2Vz
ICovCisgICBWR18oZWNfY3Vycl9lY3UpID0gRUNfRUNVX0NVUlJFTlQ7CiB9CiAKIApAQCAtNDA0
LDYgKzQxMSw3IEBACiAKICAgIHZnX2Fzc2VydChWR18oaXNfcGxhdXNpYmxlX0VDVSkoZWNfbmV4
dF9lY3UpKTsKICAgIG5ld19lYy0+ZWN1ID0gZWNfbmV4dF9lY3U7CisgICBWR18oZWNfbGFzdF9l
Y3UpID0gZWNfbmV4dF9lY3U7CiAgICBlY19uZXh0X2VjdSArPSA0OwogICAgaWYgKGVjX25leHRf
ZWN1ID09IDApIHsKICAgICAgIC8qIFVyci4gIE5vdyB3ZSdyZSBob3NlZDsgd2UgZW1pdHRlZCAy
XjMwIEV4ZUNvbnRleHRzIGFscmVhZHkKSW5kZXg6IGNvcmVncmluZC9tX2RlYnVnaW5mby9kZWJ1
Z2luZm8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMJ
KHJldmlzaW9uIDExNTc3KQorKysgY29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAicHViX2NvcmVfdGhyZWFk
c3RhdGUuaCIKICNpbmNsdWRlICJwdWJfY29yZV9kZWJ1Z2luZm8uaCIgIC8qIHNlbGYgKi8KICNp
bmNsdWRlICJwdWJfY29yZV9kZW1hbmdsZS5oIgorI2luY2x1ZGUgInB1Yl9jb3JlX2V4ZWNvbnRl
eHQuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJjYmFzZS5oIgogI2luY2x1ZGUgInB1Yl9jb3Jl
X2xpYmNhc3NlcnQuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJjcHJpbnQuaCIKQEAgLTExNSw2
ICsxMTYsOSBAQAogICAgbGlua2VkIGxpc3Qgb2YgRGVidWdJbmZvcy4gKi8KIHN0YXRpYyBEZWJ1
Z0luZm8qIGRlYnVnSW5mb19saXN0ID0gTlVMTDsKIAorLyogS2VlcCBhcm91bmQgb2xkIGRlYnVn
IGluZm8gc28gd2UgY2FuIGhhdmUgYSBjaGFuY2Ugb2YgZGVjb2Rpbmcgc3RhY2sgdHJhY2VzCisg
KiAoZS5nLiBmb3IgbGVhayBjaGVja3MpIGV2ZW4gYWZ0ZXIgYSBzaGFyZWQgbGlicmFyeSBoYXMg
YmVlbiB1bmxvYWRlZC4gKi8KK3N0YXRpYyBEZWJ1Z0luZm8qIHVubG9hZGVkRGVidWdJbmZvX2xp
c3QgPSBOVUxMOwogCiAvKiBGaW5kICdkaScgaW4gdGhlIGRlYnVnSW5mb19saXN0IGFuZCBtb3Zl
IGl0IG9uZSBzdGVwIGNsb3NlciB0aGUgdGhlCiAgICBmcm9udCBvZiB0aGUgbGlzdCwgc28gYXMg
dG8gbWFrZSBzdWJzZXF1ZW50IHNlYXJjaGVzIGZvciBpdApAQCAtMjg0LDcgKzI4OCw3IEBACiB9
CiAKIAotLyogJ3NpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0luZm9fbGlzdC4gIEZpbmQgaXQsIHJl
bW92ZSBpdCBmcm9tIHRoZQorLyogJ2RpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0luZm9fbGlzdC4g
IEZpbmQgaXQsIHJlbW92ZSBpdCBmcm9tIHRoZQogICAgbGlzdCwgbm90aWZ5IG1fcmVkaXIgdGhh
dCB0aGlzIGhhcyBoYXBwZW5lZCwgYW5kIGZyZWUgYWxsIHN0b3JhZ2UKICAgIHJlYWNoYWJsZSBm
cm9tIGl0LgogKi8KQEAgLTMxNiw3ICszMjAsMTMgQEAKICAgICAgICAgICpwcmV2X25leHRfcHRy
ID0gY3Vyci0+bmV4dDsKICAgICAgICAgIGlmIChjdXJyLT5oYXZlX2RpbmZvKQogICAgICAgICAg
ICAgVkdfKHJlZGlyX25vdGlmeV9kZWxldGVfRGVidWdJbmZvKSggY3VyciApOwotICAgICAgICAg
ZnJlZV9EZWJ1Z0luZm8oY3Vycik7CisgICAgICAgICBpZiAoVkdfKGNsb19rZWVwX3VubG9hZGVk
X3N5bXMpKSB7CisgICAgICAgICAgICBjdXJyLT5uZXh0ID0gdW5sb2FkZWREZWJ1Z0luZm9fbGlz
dDsKKyAgICAgICAgICAgIHVubG9hZGVkRGVidWdJbmZvX2xpc3QgPSBjdXJyOworICAgICAgICAg
ICAgY3Vyci0+bGFzdF9lY3UgPSBWR18oZWNfbGFzdF9lY3UpOworICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGZyZWVfRGVidWdJbmZvKGN1cnIpOworCSB9CiAgICAgICAgICByZXR1cm47
CiAgICAgICB9CiAgICAgICBwcmV2X25leHRfcHRyID0gJmN1cnItPm5leHQ7CkBAIC0zNTAsMTEg
KzM2MCwxMSBAQAogICAgICAgICAgICAgICYmIChzdGFydCtsZW5ndGggLSAxIDwgY3Vyci0+dGV4
dF9hdm1hIAogICAgICAgICAgICAgICAgICB8fCBjdXJyLT50ZXh0X2F2bWEgKyBjdXJyLT50ZXh0
X3NpemUgLSAxIDwgc3RhcnQpKSB7CiAgICAgICAgICAgICAvKiBubyBvdmVybGFwICovCi0JIH0g
ZWxzZSB7Ci0JICAgIGZvdW5kID0gVHJ1ZTsKLQkgICAgYnJlYWs7Ci0JIH0KLQkgY3VyciA9IGN1
cnItPm5leHQ7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm91bmQgPSBUcnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBjdXJyID0gY3Vyci0+bmV4
dDsKICAgICAgIH0KIAogICAgICAgaWYgKCFmb3VuZCkgYnJlYWs7CkBAIC00MzEsNyArNDQxLDcg
QEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgaWYgKGN1cnItPm1hcmspCiAgICAgICAg
ICAgICBicmVhazsKLQkgY3VyciA9IGN1cnItPm5leHQ7CisgICAgICAgICBjdXJyID0gY3Vyci0+
bmV4dDsKICAgICAgIH0KIAogICAgICAgaWYgKCFjdXJyKSBicmVhazsKQEAgLTQ4Nyw2ICs0OTcs
OCBAQAogICAgICAgdmdfYXNzZXJ0KGRpKTsKICAgICAgIGRpLT5uZXh0ID0gZGVidWdJbmZvX2xp
c3Q7CiAgICAgICBkZWJ1Z0luZm9fbGlzdCA9IGRpOworICAgICAgZGktPmZpcnN0X2VjdSA9IFZH
XyhlY19sYXN0X2VjdSk7CisgICAgICBkaS0+bGFzdF9lY3UgPSBFQ19FQ1VfQ1VSUkVOVDsKICAg
IH0KICAgIHJldHVybiBkaTsKIH0KQEAgLTU2NCw2ICs1NzYsNyBAQAogICAgICAgY3JlYXRlZCBh
bmQgZGVzdHJveWVkIG9uIGRlbWFuZCwgYW5kIGVhY2ggb25lIGlzIHRyZWF0ZWQgbW9yZSBvcgog
ICAgICAgbGVzcyBpbmRlcGVuZGVudGx5LiAqLwogICAgdmdfYXNzZXJ0KGRlYnVnSW5mb19saXN0
ID09IE5VTEwpOworICAgdmdfYXNzZXJ0KHVubG9hZGVkRGVidWdJbmZvX2xpc3QgPT0gTlVMTCk7
CiAKICAgIC8qIGZsdXNoIHRoZSBDRkkgZmFzdCBxdWVyeSBjYWNoZS4gKi8KICAgIGNmc2lfY2Fj
aGVfX2ludmFsaWRhdGUoKTsKQEAgLTEyMzUsMTAgKzEyNDgsMTAgQEAKIC8qLS0tICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KIAotdm9pZCBWR18oZGlfZGlzY2FyZF9BTExfZGVidWdpbmZvKSggdm9pZCApCitzdGF0aWMg
dm9pZCBkaXNjYXJkX0FMTF9kZWJ1Z2luZm9faW5fbGlzdChEZWJ1Z0luZm8qIGxpc3QpCiB7CiAg
ICBEZWJ1Z0luZm8gKmRpLCAqZGkyOwotICAgZGkgPSBkZWJ1Z0luZm9fbGlzdDsKKyAgIGRpID0g
bGlzdDsKICAgIHdoaWxlIChkaSkgewogICAgICAgZGkyID0gZGktPm5leHQ7CiAgICAgICBWR18o
cHJpbnRmKSgiWFhYIHJtICVwXG4iLCBkaSk7CkBAIC0xMjQ3LDE5ICsxMjYwLDE0IEBACiAgICB9
CiB9CiAKK3ZvaWQgVkdfKGRpX2Rpc2NhcmRfQUxMX2RlYnVnaW5mbykoIHZvaWQgKQoreworICAg
IGRpc2NhcmRfQUxMX2RlYnVnaW5mb19pbl9saXN0KGRlYnVnSW5mb19saXN0KTsKKyAgICBkaXNj
YXJkX0FMTF9kZWJ1Z2luZm9faW5fbGlzdCh1bmxvYWRlZERlYnVnSW5mb19saXN0KTsKK30KIAot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwotLyotLS0gVXNlIG9mIHN5bWJvbCB0YWJsZSAmIGxvY2F0aW9uIGluZm8gdG8gY3Jl
YXRlICAgICAgICAtLS0qLwotLyotLS0gcGxhdXNpYmxlLWxvb2tpbmcgc3RhY2sgZHVtcHMuICAg
ICAgICAgICAgICAgICAgICAgICAtLS0qLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBTZWFyY2ggYWxsIHN5bXRh
YnMgdGhhdCB3ZSBrbm93IGFib3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0Ci0gICAq
cGRpIHRvIHRoZSByZWxldmFudCBEZWJ1Z0luZm8sIGFuZCAqc3ltbm8gdG8gdGhlIHN5bXRhYiBl
bnRyeQotICAgKm51bWJlciB3aXRoaW4gdGhhdC4gIElmIG5vdCBmb3VuZCwgKnBzaSBpcyBzZXQg
dG8gTlVMTC4KLSAgIElmIGZpbmRUZXh0PT1UcnVlLCAgb25seSB0ZXh0IHN5bWJvbHMgYXJlIHNl
YXJjaGVkIGZvci4KLSAgIElmIGZpbmRUZXh0PT1GYWxzZSwgb25seSBkYXRhIHN5bWJvbHMgYXJl
IHNlYXJjaGVkIGZvci4KLSovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxsX3N5bXRhYnMgKCBBZGRy
IHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKK3N0YXRpYyB2b2lkIHNlYXJjaF9vbmVfZGVi
dWdJbmZvX2xpc3QgKERlYnVnSW5mbyogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBzeW1ubywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBmaW5kVGV4dCApCkBAIC0xMjY4LDcg
KzEyNzYsMTEgQEAKICAgIERlYnVnSW5mbyogZGk7CiAgICBCb29sICAgICAgIGluUmFuZ2U7CiAK
LSAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkg
eworICAgZm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKyAgICAg
IGlmICggKCBWR18oZWNfY3Vycl9lY3UpIDw9IGRpLT5maXJzdF9lY3UpIHx8IAorICAgICAgICAg
ICAgIFZHXyhlY19jdXJyX2VjdSkgPiBkaS0+bGFzdF9lY3UpIHsKKyAgICAgICAgICBjb250aW51
ZTsKKyAgICAgIH0KIAogICAgICAgaWYgKGZpbmRUZXh0KSB7CiAgICAgICAgICAvKiBDb25zaWRl
ciBhbnkgc3ltYm9sIGluIHRoZSByLXggbWFwcGVkIGFyZWEgdG8gYmUgdGV4dC4KQEAgLTEyODEs
MzMgKzEyOTMsMzMgQEAKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpblJhbmdlID0gKGRpLT5k
YXRhX3ByZXNlbnQKICAgICAgICAgICAgICAgICAgICAgJiYgZGktPmRhdGFfc2l6ZSA+IDAKLSAg
ICAgICAgICAgICAgICAgICAgJiYgZGktPmRhdGFfYXZtYSA8PSBwdHIgCisgICAgICAgICAgICAg
ICAgICAgICYmIGRpLT5kYXRhX2F2bWEgPD0gcHRyCiAgICAgICAgICAgICAgICAgICAgICYmIHB0
ciA8IGRpLT5kYXRhX2F2bWEgKyBkaS0+ZGF0YV9zaXplKQogICAgICAgICAgICAgICAgICAgIHx8
CiAgICAgICAgICAgICAgICAgICAgKGRpLT5zZGF0YV9wcmVzZW50CiAgICAgICAgICAgICAgICAg
ICAgICYmIGRpLT5zZGF0YV9zaXplID4gMAotICAgICAgICAgICAgICAgICAgICAmJiBkaS0+c2Rh
dGFfYXZtYSA8PSBwdHIgCisgICAgICAgICAgICAgICAgICAgICYmIGRpLT5zZGF0YV9hdm1hIDw9
IHB0cgogICAgICAgICAgICAgICAgICAgICAmJiBwdHIgPCBkaS0+c2RhdGFfYXZtYSArIGRpLT5z
ZGF0YV9zaXplKQogICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICAgKGRp
LT5ic3NfcHJlc2VudAogICAgICAgICAgICAgICAgICAgICAmJiBkaS0+YnNzX3NpemUgPiAwCi0g
ICAgICAgICAgICAgICAgICAgICYmIGRpLT5ic3NfYXZtYSA8PSBwdHIgCisgICAgICAgICAgICAg
ICAgICAgICYmIGRpLT5ic3NfYXZtYSA8PSBwdHIKICAgICAgICAgICAgICAgICAgICAgJiYgcHRy
IDwgZGktPmJzc19hdm1hICsgZGktPmJzc19zaXplKQogICAgICAgICAgICAgICAgICAgIHx8CiAg
ICAgICAgICAgICAgICAgICAgKGRpLT5zYnNzX3ByZXNlbnQKICAgICAgICAgICAgICAgICAgICAg
JiYgZGktPnNic3Nfc2l6ZSA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgZGktPnNic3NfYXZt
YSA8PSBwdHIgCisgICAgICAgICAgICAgICAgICAgICYmIGRpLT5zYnNzX2F2bWEgPD0gcHRyCiAg
ICAgICAgICAgICAgICAgICAgICYmIHB0ciA8IGRpLT5zYnNzX2F2bWEgKyBkaS0+c2Jzc19zaXpl
KQogICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICAgKGRpLT5yb2RhdGFf
cHJlc2VudAogICAgICAgICAgICAgICAgICAgICAmJiBkaS0+cm9kYXRhX3NpemUgPiAwCi0gICAg
ICAgICAgICAgICAgICAgICYmIGRpLT5yb2RhdGFfYXZtYSA8PSBwdHIgCisgICAgICAgICAgICAg
ICAgICAgICYmIGRpLT5yb2RhdGFfYXZtYSA8PSBwdHIKICAgICAgICAgICAgICAgICAgICAgJiYg
cHRyIDwgZGktPnJvZGF0YV9hdm1hICsgZGktPnJvZGF0YV9zaXplKTsKICAgICAgIH0KIAogICAg
ICAgaWYgKCFpblJhbmdlKSBjb250aW51ZTsKIAotICAgICAgc25vID0gTUxfKHNlYXJjaF9vbmVf
c3ltdGFiKSAoIAorICAgICAgc25vID0gTUxfKHNlYXJjaF9vbmVfc3ltdGFiKSAoCiAgICAgICAg
ICAgICAgICBkaSwgcHRyLCBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRUZXh0ICk7CiAgICAg
ICBpZiAoc25vID09IC0xKSBnb3RvIG5vdF9mb3VuZDsKICAgICAgICpzeW1ubyA9IHNubzsKQEAg
LTEzMTksMTcgKzEzMzEsNDcgQEAKICAgICpwZGkgPSBOVUxMOwogfQogCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0t
LSBVc2Ugb2Ygc3ltYm9sIHRhYmxlICYgbG9jYXRpb24gaW5mbyB0byBjcmVhdGUgICAgICAgIC0t
LSovCisvKi0tLSBwbGF1c2libGUtbG9va2luZyBzdGFjayBkdW1wcy4gICAgICAgICAgICAgICAg
ICAgICAgIC0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIFNlYXJjaCBhbGwgc3ltdGFicyB0aGF0IHdlIGtu
b3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkgdG8gdGhlIHJl
bGV2YW50IERlYnVnSW5mbywgYW5kICpzeW1ubyB0byB0aGUgc3ltdGFiIGVudHJ5CisgICAqbnVt
YmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLgorICAg
SWYgZmluZFRleHQ9PVRydWUsICBvbmx5IHRleHQgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgor
ICAgSWYgZmluZFRleHQ9PUZhbHNlLCBvbmx5IGRhdGEgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9y
LgorKi8KK3N0YXRpYyB2b2lkIHNlYXJjaF9hbGxfc3ltdGFicyAoIEFkZHIgcHRyLCAvKk9VVCov
RGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qT1VUKi9Xb3JkKiBzeW1ubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJvb2wgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQm9vbCBmaW5kVGV4dCApCit7CisgICBzZWFyY2hfb25lX2RlYnVnSW5mb19saXN0KGRl
YnVnSW5mb19saXN0LCBwdHIsIHBkaSwgc3ltbm8sCisgICAgICAgICAgIG1hdGNoX2FueXdoZXJl
X2luX3N5bSwgZmluZFRleHQpOworICAgLyogT25seSBzZWFyY2ggdGhlIGxpc3Qgb2YgdW5sb2Fk
ZWQgc3ltcyBpZiB3ZSBoYXZlbid0IGZvdW5kIHNvbWV0aGluZywKKyAgICAqIGFuZCB3ZSBhcmVu
J3QgZGVjb2RpbmcgYSAnY3VycmVudCcgc3RhY2t0cmFjZS4gKi8KKyAgIGlmKCEqcGRpICYmIFZH
XyhlY19jdXJyX2VjdSkgIT0gRUNfRUNVX0NVUlJFTlQpCisgICAgICAgc2VhcmNoX29uZV9kZWJ1
Z0luZm9fbGlzdCh1bmxvYWRlZERlYnVnSW5mb19saXN0LCBwdHIsIHBkaSwgc3ltbm8sCisgICAg
ICAgICAgICAgICBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRUZXh0KTsKK30KKwogLyogU2Vh
cmNoIGFsbCBsb2N0YWJzIHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91
bmQsIHNldAogICAgKnBkaSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRv
IHRoZSBsb2N0YWIgZW50cnkKICAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQs
ICpwZGkgaXMgc2V0IHRvIE5VTEwuICovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMg
KCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9jbm8gKQorc3RhdGljIHZvaWQg
c2VhcmNoX2FsbF9sb2N0YWJzX29uZV9saXN0IChEZWJ1Z0luZm8qIGxpc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZv
KiogcGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLypPVVQqL1dvcmQqIGxvY25vICkKIHsKICAgIFdvcmQgICAgICAgbG5vOwogICAgRGVidWdJ
bmZvKiBkaTsKLSAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBk
aS0+bmV4dCkgewotICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQKKyAgIGZvciAoZGkgPSBsaXN0
OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7CisgICAgICBpZiAoICggVkdfKGVjX2N1cnJf
ZWN1KSA8PSBkaS0+Zmlyc3RfZWN1KSB8fCAKKyAgICAgICAgICAgICBWR18oZWNfY3Vycl9lY3Up
ID4gZGktPmxhc3RfZWN1KSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAg
ICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50ZXh0X3NpemUgPiAwCiAg
ICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBwdHIgCiAgICAgICAgICAgJiYgcHRyIDwgZGkt
PnRleHRfYXZtYSArIGRpLT50ZXh0X3NpemUpIHsKQEAgLTEzNDQsNiArMTM4NiwxOCBAQAogICAg
KnBkaSA9IE5VTEw7CiB9CiAKKy8qIFNlYXJjaCBhbGwgbG9jdGFicyB0aGF0IHdlIGtub3cgYWJv
dXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkgdG8gdGhlIHJlbGV2YW50
IERlYnVnSW5mbywgYW5kICpsb2NubyB0byB0aGUgbG9jdGFiIGVudHJ5CisgICAqbnVtYmVyIHdp
dGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLiAqLworc3RhdGlj
IHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBw
ZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dv
cmQqIGxvY25vICkKK3sKKyAgICBzZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QoZGVidWdJbmZv
X2xpc3QsIHB0ciwgcGRpLCBsb2NubyApOworICAgIC8qIE9ubHkgc2VhcmNoIHRoZSBsaXN0IG9m
IHVubG9hZGVkIHN5bXMgaWYgd2UgaGF2ZW4ndCBmb3VuZCBzb21ldGhpbmcsCisgICAgICogYW5k
IHdlIGFyZW4ndCBkZWNvZGluZyBhICdjdXJyZW50JyBzdGFja3RyYWNlLiAqLworICAgIGlmKCEq
cGRpICYmIFZHXyhlY19jdXJyX2VjdSkgIT0gRUNfRUNVX0NVUlJFTlQpCisgICAgICAgIHNlYXJj
aF9hbGxfbG9jdGFic19vbmVfbGlzdCh1bmxvYWRlZERlYnVnSW5mb19saXN0LCBwdHIsIHBkaSwg
bG9jbm8gKTsKK30KIAogLyogVGhlIHdob2xlIHBvaW50IG9mIHRoaXMgd2hvbGUgYmlnIGRlYWw6
IG1hcCBhIGNvZGUgYWRkcmVzcyB0byBhCiAgICBwbGF1c2libGUgc3ltYm9sIG5hbWUuICBSZXR1
cm5zIEZhbHNlIGlmIG5vIGlkZWE7IG90aGVyd2lzZSBUcnVlLgpAQCAtMTM5MCwxMyArMTQ0NCwx
MyBAQAogICAgICAgSW50ICAgICAgbGVuOwogCiAgICAgICBsZW4gPSBWR18oc3ByaW50ZikoYnVm
MiwgIiVjJWxkIiwKLQkJCSBvZmZzZXQgPCAwID8gJy0nIDogJysnLAotCQkJIG9mZnNldCA8IDAg
PyAtb2Zmc2V0IDogb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPCAw
ID8gJy0nIDogJysnLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA8IDAgPyAtb2Zm
c2V0IDogb2Zmc2V0KTsKICAgICAgIHZnX2Fzc2VydChsZW4gPCAoSW50KXNpemVvZihidWYyKSk7
CiAKICAgICAgIGlmIChsZW4gPCAoZW5kIC0gc3ltZW5kKSkgewotCSBDaGFyICpjcCA9IGJ1ZjI7
Ci0JIFZHXyhtZW1jcHkpKHN5bWVuZCwgY3AsIGxlbisxKTsKKyAgICAgICAgIENoYXIgKmNwID0g
YnVmMjsKKyAgICAgICAgIFZHXyhtZW1jcHkpKHN5bWVuZCwgY3AsIGxlbisxKTsKICAgICAgIH0K
ICAgIH0KIApJbmRleDogY29yZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3RvcmFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGNvcmVncmluZC9tX2RlYnVnaW5mby9wcml2X3N0b3JhZ2UuaAkocmV2aXNpb24g
MTE1NzcpCisrKyBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9yYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NCw2ICszNTQsMTAgQEAKICAgICAgIGZvcmV2ZXIgdGhlcmVhZnRlci4gIFRo
ZSAuaGFuZGxlIGZpZWxkIGlzIHNldCBhcyBzb29uIGFzIHRoaXMKICAgICAgIHN0cnVjdHVyZSBp
cyBhbGxvY2F0ZWQuICovCiAgICBVTG9uZyBoYW5kbGU7CisgICAKKyAgIC8qIFRoZSBlY19sYXN0
X2VjdSB3aGVuIHRoaXMgaW5mbyB3YXMgY3JlYXRlZCBvciByZW1vdmVkICovCisgICBVSW50IGZp
cnN0X2VjdTsKKyAgIFVJbnQgbGFzdF9lY3U7CiAKICAgIC8qIFVzZWQgZm9yIGRlYnVnZ2luZyBv
bmx5IC0gaW5kaWNhdGUgd2hhdCBzdHVmZiB0byBkdW1wIHdoaWxzdAogICAgICAgcmVhZGluZyBz
dHVmZiBpbnRvIHRoZSBzZWdpbmZvLiAgQXJlIGNvbXB1dGVkIGFzIGVhcmx5IGluIHRoZQpJbmRl
eDogY29yZWdyaW5kL21fbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX21haW4uYwko
cmV2aXNpb24gMTE1NzcpCisrKyBjb3JlZ3JpbmQvbV9tYWluLmMJKHdvcmtpbmcgY29weSkKQEAg
LTEzMyw2ICsxMzMsMTAgQEAKICIgICAgLS1sb2ctZmQ9PG51bWJlcj4gICAgICAgICBsb2cgbWVz
c2FnZXMgdG8gZmlsZSBkZXNjcmlwdG9yIFsyPXN0ZGVycl1cbiIKICIgICAgLS1sb2ctZmlsZT08
ZmlsZT4gICAgICAgICBsb2cgbWVzc2FnZXMgdG8gPGZpbGU+XG4iCiAiICAgIC0tbG9nLXNvY2tl
dD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2VzIHRvIHNvY2tldCBpcGFkZHI6cG9ydFxuIgorIiAg
ICAtLWtlZXAtdW5sb2FkZWQtc3ltcz1ub3x5ZXMgS2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBj
b2RlIFtub11cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBz
dGFjayB0cmFjZXMgZm9yIG1lbW9yeSBsZWFrcyB0b1xuIgorIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlblxu
IgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsY2xvc2UnZCAob3Igc2ltaWxhcilc
biIKICJcbiIKICIgIHVzZXIgb3B0aW9ucyBmb3IgVmFsZ3JpbmQgdG9vbHMgdGhhdCByZXBvcnQg
ZXJyb3JzOlxuIgogIiAgICAtLXhtbD15ZXMgICAgICAgICAgICAgICAgIGVtaXQgZXJyb3Igb3V0
cHV0IGluIFhNTCAoc29tZSB0b29scyBvbmx5KVxuIgpAQCAtNTI1LDYgKzUyOSw4IEBACiAgICAg
ICAgICAgICAgICAgICAgICAgIFZHXyhjbG9fdmV4X2NvbnRyb2wpLmd1ZXN0X2NoYXNlX3RocmVz
aCwgMCwgOTkpIHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tdmV4LWd1ZXN0
LWNoYXNlLWNvbmQiLAogICAgICAgICAgICAgICAgICAgICAgICBWR18oY2xvX3ZleF9jb250cm9s
KS5ndWVzdF9jaGFzZV9jb25kKSB7fQorICAgICAgZWxzZSBpZiBWR19CT09MX0NMTyhhcmcsICIt
LWtlZXAtdW5sb2FkZWQtc3ltcyIsCisJICAgICAgICAgICAgICAgVkdfKGNsb19rZWVwX3VubG9h
ZGVkX3N5bXMpKSB7fQogCiAgICAgICBlbHNlIGlmIFZHX0lOVF9DTE8oYXJnLCAiLS1sb2ctZmQi
LCB0bXBfbG9nX2ZkKSB7CiAgICAgICAgICBsb2dfdG8gPSBWZ0xvZ1RvX0ZkOwpJbmRleDogY29y
ZWdyaW5kL21fb3B0aW9ucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX29wdGlvbnMuYwko
cmV2aXNpb24gMTE1NzcpCisrKyBjb3JlZ3JpbmQvbV9vcHRpb25zLmMJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDYgKzk5LDcgQEAKIFZnU21jICBWR18oY2xvX3NtY19jaGVjaykgICAgICA9IFZnX1Nt
Y1N0YWNrOwogSENoYXIqIFZHXyhjbG9fa2VybmVsX3ZhcmlhbnQpID0gTlVMTDsKIEJvb2wgICBW
R18oY2xvX2RzeW11dGlsKSAgICAgICA9IEZhbHNlOworQm9vbCAgIFZHXyhjbG9fa2VlcF91bmxv
YWRlZF9zeW1zKT0gRmFsc2U7CiAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkluZGV4OiBjb3JlZ3JpbmQv
cHViX2NvcmVfZXhlY29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9wdWJfY29yZV9l
eGVjb250ZXh0LmgJKHJldmlzaW9uIDExNTc3KQorKysgY29yZWdyaW5kL3B1Yl9jb3JlX2V4ZWNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsMTkgQEAKIGV4dGVybgogLypTdGFj
a1RyYWNlKi9BZGRyKiBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkgKCBFeGVDb250ZXh0
KiBlICk7CiAKKy8vIEtlZXAgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGVj
dSwgc28gdGhhdCBkZWJ1Z2luZm8gY2FuCisvLyBrbm93IGhvdyB0byB0cmFuc2xhdGUgYWRkcmVz
c2VzIHRoYXQgcmVmZXJlbmNlIGNvZGUgdGhhdCBoYXMgYmVlbiB1bmxvYWRlZAorZXh0ZXJuIFVJ
bnQgVkdfKGVjX2xhc3RfZWN1KTsKIAorLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGRpcnR5IGhhY2ss
IHRoaXMgaXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGFsbCB0aGUgd2F5CisvLyBkb3duIHRv
IGRlYnVnaW5mbyB3aGVuIGl0IGlzIGRlY29kaW5nIGFkZHJlc3NlcywgdGhpcyBsZXRzIGl0IGtu
b3cgd2hlbiB0aGlzCisvLyBleGVjb250ZXh0IHdhcyB0YWtlbiB0byBwcm9wZXJseSBkZWNvZGUg
c3ltYm9scyBmb3IgY29kZSB0aGF0IHdhcyB1bmxvYWRlZC4KK2V4dGVybiBVSW50IFZHXyhlY19j
dXJyX2VjdSk7CisKKy8vIFNwZWNpYWwgY29uc3RhbnQgdG8gcGxhY2UgaW4gVkdfKGVjX2N1cnJf
ZWN1KSB3aGVuIGRlY29kaW5nIGEgJ2N1cnJlbnQnCisvLyBzdGFjayB0cmFjZSwgdGhpcyB3aWxs
IGNhdXNlIGl0IHRvIHNraXAgbG9va2luZyBhdCBhbnkgdW5sb2FkZWQgc3ltYm9scy4KKyNkZWZp
bmUgRUNfRUNVX0NVUlJFTlQgMHhGRkZGRkZGRgorCiAjZW5kaWYgICAvLyBfX1BVQl9DT1JFX0VY
RUNPTlRFWFRfSAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58003</attachid>
            <date>2011-03-14 21:48:36 +0000</date>
            <delta_ts>2012-02-08 04:59:56 +0000</delta_ts>
            <desc>keep syms of unloaded code - less dirty hackish</desc>
            <filename>keep-syms.diff</filename>
            <type>text/plain</type>
            <size>34810</size>
            <attacher name="Kevin Fitch">kfitch42</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb2NzL3htbC9t
YW51YWwtY29yZS54bWwJKHJldmlzaW9uIDExNjQzKQorKysgZG9jcy94bWwvbWFudWFsLWNvcmUu
eG1sCSh3b3JraW5nIGNvcHkpCkBAIC04MTQsNiArODE0LDE3IEBACiAgICAgPC9saXN0aXRlbT4K
ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtdW5sb2Fk
ZWQtc3ltcyIgeHJlZmxhYmVsPSItLWtlZXAtdW5sb2FkZWQtc3ltcyI+CisgICAgPHRlcm0+Cisg
ICAgICA8b3B0aW9uPjwhW0NEQVRBWy0ta2VlcC11bmxvYWRlZC1zeW1zPTx5ZXN8bm8+IFtkZWZh
dWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg
IDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlLiBUaGlz
IGFsbG93cyBzdGFjaworICAgICAgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBm
aWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICBkbGNsb3NlJ2QgKG9y
IHNpbWlsYXIpPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorCiA8
L3ZhcmlhYmxlbGlzdD4KIDwhLS0gZW5kIG9mIHhpOmluY2x1ZGUgaW4gdGhlIG1hbnBhZ2UgLS0+
CiAKClByb3BlcnR5IGNoYW5nZXMgb246IG1lbWNoZWNrL3Rlc3RzL2xpbnV4Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TW9kaWZpZWQ6IHN2bjppZ25vcmUKICAgLSAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0
ZG91dC5kaWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmxzZnJhbWUxCmxzZnJhbWUy
Ck1ha2VmaWxlCk1ha2VmaWxlLmluCnNpZ3F1ZXVlCnN0YWNrX2NoYW5nZXMKc3RhY2tfc3dpdGNo
CnRpbWVyZmQtc3lzY2FsbAoKICAgKyAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0ZG91
dC5kaWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmxzZnJhbWUxCmxzZnJhbWUyCk1h
a2VmaWxlCk1ha2VmaWxlLmluCnNpZ3F1ZXVlCnN0YWNrX2NoYW5nZXMKc3RhY2tfc3dpdGNoCnRp
bWVyZmQtc3lzY2FsbApkbGNsb3NlX2xlYWsKZGxjbG9zZV9sZWFrX3NvLnNvCgoKSW5kZXg6IG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVt
Y2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnZndGVzdAkocmV2aXNpb24gMCkKKysrIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAuLi9maWx0ZXJf
c3RkZXJyCit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMgLS1rZWVwLXVubG9hZGVkLXN5bXM9eWVz
CkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwkocmV2aXNpb24gMCkK
KysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qKiBNYWtlcyBhIGp1bXAg
YmFzZWQgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBvcmRlciB0byBtYWtlIHN1cmUK
KyAqIGVycm9ycyByZXBvcnRlZCB3aGlsZSB0aGUgZGxvcGVuJ2VkIG9iamVjdCBpcyBsb2FkZWQg
d29yay4gKi8KK2ludCBqbXBfb25fdW5pbml0KHZvaWQpIHsKKyAgICBpbnQgdW5pbml0OworICAg
IGlmKHVuaW5pdCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
MDsKK30KKworLyoqIExlYWsgMSBieXRlIG9mIG1lbW9yeS4gVGhpcyBpcyB0byB0ZXN0IHRoZSBz
dGFjayBjaGVjayByZXBvcnRlZCBhZnRlciB0aGUKKyAqICBvYmplY3QgaGFzIGJlZW4gZGxjbG9z
ZSdkLiAqLworY2hhciogYWxsb2NfMV9ieXRlKHZvaWQpIHsKKyAgICByZXR1cm4gKGNoYXIqKW1h
bGxvYygxKTsKK30KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay1uby1r
ZWVwLnN0ZGVyci5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9z
ZV9sZWFrLW5vLWtlZXAuc3RkZXJyLmV4cAkocmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rlc3Rz
L2xpbnV4L2RsY2xvc2VfbGVhay1uby1rZWVwLnN0ZGVyci5leHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzIgQEAKKworQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0
aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHguLi4uLi4uLjogam1wX29uX3VuaW5pdCAoZGxjbG9z
ZV9sZWFrX3NvLmM6NykKKyAgIGJ5IDB4Li4uLi4uLi46IG1haW4gKGRsY2xvc2VfbGVhay5jOjIx
KQorCitJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxCisgICBhdCAweC4uLi4uLi4uOiBtYWluIChkbGNs
b3NlX2xlYWsuYzoyNCkKKyBBZGRyZXNzIDB4Li4uLi4uLi4gaXMgMSBieXRlcyBiZWZvcmUgYSBi
bG9jayBvZiBzaXplIDEgYWxsb2MnZAorICAgYXQgMHguLi4uLi4uLjogbWFsbG9jICh2Z19yZXBs
YWNlX21hbGxvYy5jOi4uLikKKyAgIGJ5IDB4Li4uLi4uLi46ID8/PworICAgYnkgMHguLi4uLi4u
LjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjIpCisKKworSEVBUCBTVU1NQVJZOgorICAgIGluIHVz
ZSBhdCBleGl0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgIHRvdGFsIGhlYXAgdXNhZ2U6IDYgYWxs
b2NzLCA1IGZyZWVzLCAxLDQ4MCBieXRlcyBhbGxvY2F0ZWQKKworMSBieXRlcyBpbiAxIGJsb2Nr
cyBhcmUgZGVmaW5pdGVseSBsb3N0IGluIGxvc3MgcmVjb3JkIC4uLiBvZiAuLi4KKyAgIGF0IDB4
Li4uLi4uLi46IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisgICBieSAweC4uLi4u
Li4uOiA/Pz8KKyAgIGJ5IDB4Li4uLi4uLi46IG1haW4gKGRsY2xvc2VfbGVhay5jOjIyKQorCitM
RUFLIFNVTU1BUlk6CisgICBkZWZpbml0ZWx5IGxvc3Q6IDEgYnl0ZXMgaW4gMSBibG9ja3MKKyAg
IGluZGlyZWN0bHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2NrcworICAgICBwb3NzaWJseSBsb3N0
OiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICBzdGlsbCByZWFjaGFibGU6IDAgYnl0ZXMgaW4gMCBi
bG9ja3MKKyAgICAgICAgc3VwcHJlc3NlZDogMCBieXRlcyBpbiAwIGJsb2NrcworCitGb3IgY291
bnRzIG9mIGRldGVjdGVkIGFuZCBzdXBwcmVzc2VkIGVycm9ycywgcmVydW4gd2l0aDogLXYKK1Vz
ZSAtLXRyYWNrLW9yaWdpbnM9eWVzIHRvIHNlZSB3aGVyZSB1bmluaXRpYWxpc2VkIHZhbHVlcyBj
b21lIGZyb20KK0VSUk9SIFNVTU1BUlk6IDMgZXJyb3JzIGZyb20gMyBjb250ZXh0cyAoc3VwcHJl
c3NlZDogMCBmcm9tIDApCkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWst
bm8ta2VlcC52Z3Rlc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9z
ZV9sZWFrLW5vLWtlZXAudmd0ZXN0CShyZXZpc2lvbiAwKQorKysgbWVtY2hlY2svdGVzdHMvbGlu
dXgvZGxjbG9zZV9sZWFrLW5vLWtlZXAudmd0ZXN0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMg
QEAKK3Byb2c6IGRsY2xvc2VfbGVhaworc3RkZXJyX2ZpbHRlcjogLi4vZmlsdGVyX3N0ZGVycgor
dmdvcHRzOiAtLWxlYWstY2hlY2s9eWVzIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vCkluZGV4OiBt
ZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVj
ay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuYwkocmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rl
c3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACisv
KiAgVGVzdCByZXBvcnRpbmcgb2YgbWVtb3J5IGxlYWtzIGluIG9iamVjdHMgdGhhdCBoYXZlIGJl
ZW4gZGxvcGVuJ2VkLgorICogICBGaWxlOiAgIGRsY2xvc2VfbGVhay5jICovCisKKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisKK2lu
dCAoKmptcF9vbl91bmluaXQpKHZvaWQpOworY2hhciogKCphbGxvY18xX2J5dGUpKHZvaWQpOwor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgICBjaGFyKiBtZW1Ub0xlYWs7
CisgICAgY2hhciB4OworICAgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigiLi9kbGNsb3NlX2xlYWtf
c28uc28iLCBSVExEX05PVyk7CisgICAgaWYoIWhhbmRsZSkgeworICAgICAgICBwcmludGYoIkZB
SUxVUkUgdG8gZGxvcGVuIGRsY2xvc2VfbGVha19zby5zb1xuIik7CisgICAgICAgIHJldHVybiBF
WElUX0ZBSUxVUkU7CisgICAgfQorICAgIGptcF9vbl91bmluaXQgPSBkbHN5bShoYW5kbGUsImpt
cF9vbl91bmluaXQiKTsKKyAgICBhbGxvY18xX2J5dGUgPSBkbHN5bShoYW5kbGUsImFsbG9jXzFf
Ynl0ZSIpOworICAgICh2b2lkKWptcF9vbl91bmluaXQoKTsKKyAgICBtZW1Ub0xlYWsgPSBhbGxv
Y18xX2J5dGUoKTsKKyAgICBkbGNsb3NlKGhhbmRsZSk7CisgICAgeCA9IG1lbVRvTGVha1stMV07
CisgICAgcmV0dXJuIChFWElUX1NVQ0NFU1MpOworfQpJbmRleDogbWVtY2hlY2svdGVzdHMvbGlu
dXgvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvTWFrZWZp
bGUuYW0JKHJldmlzaW9uIDExNjQzKQorKysgbWVtY2hlY2svdGVzdHMvbGludXgvTWFrZWZpbGUu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTEzLDcgKzEzLDkgQEAKIAkgICAgc3RhY2tfY2hhbmdlcy5z
dGRvdXQuZXhwMiBzdGFja19jaGFuZ2VzLnZndGVzdCBcCiAJc3RhY2tfc3dpdGNoLnN0ZGVyci5l
eHAgc3RhY2tfc3dpdGNoLnZndGVzdCBcCiAJdGltZXJmZC1zeXNjYWxsIHRpbWVyZmQtc3lzY2Fs
bC5zdGRlcnIuZXhwIFwKLQl3aXRoLXNwYWNlLnN0ZGVyci5leHAgd2l0aC1zcGFjZS5zdGRvdXQu
ZXhwIHdpdGgtc3BhY2Uudmd0ZXN0CisJd2l0aC1zcGFjZS5zdGRlcnIuZXhwIHdpdGgtc3BhY2Uu
c3Rkb3V0LmV4cCB3aXRoLXNwYWNlLnZndGVzdCBcCisJZGxjbG9zZV9sZWFrLW5vLWtlZXAuc3Rk
ZXJyLmV4cCBkbGNsb3NlX2xlYWstbm8ta2VlcC52Z3Rlc3QgXAorCWRsY2xvc2VfbGVhay5zdGRl
cnIuZXhwIGRsY2xvc2VfbGVhay52Z3Rlc3QKIAogY2hlY2tfUFJPR1JBTVMgPSBcCiAJYnJrIFwK
QEAgLTIzLDcgKzI1LDggQEAKIAlzaWdxdWV1ZSBcCiAJc3RhY2tfY2hhbmdlcyBcCiAJc3RhY2tf
c3dpdGNoIFwKLQl0aW1lcmZkLXN5c2NhbGwKKwl0aW1lcmZkLXN5c2NhbGwgXAorCWRsY2xvc2Vf
bGVhayBkbGNsb3NlX2xlYWtfc28uc28KIAogCiBBTV9DRkxBR1MgICArPSAkKEFNX0ZMQUdfTTMy
NjRfUFJJKQpAQCAtMzIsMyArMzUsMTYgQEAKIHN0YWNrX3N3aXRjaF9MREFERCAgICA9IC1scHRo
cmVhZAogdGltZXJmZF9zeXNjYWxsX0xEQUREID0gLWxydAogCisjIEJ1aWxkIHNoYXJlZCBvYmpl
Y3QgZm9yIGRsY2xvc2VfbGVhaworIyMjIEkgZG9uJ3QgdXNlIEdOVSBBdXRvdG9vbHMgb2Z0ZW4s
IHNvIEkgaGF2ZSBqdXN0IGtsdWRnZWQgdG9nZXRoZXIgYnVpbGRpbmcKKyMjIyBUaGUgbG9hZGFi
bGUgbGlicmFyeSBoZXJlLi4uIEkgYW0gY2VydGFpbiBzb21lb25lIGVsc2UgY291bGQgZG8gdGhp
cworIyMjIGNsZWFuZXIuCitkbGNsb3NlX2xlYWtfU09VUkNFUyAgICAgICAgICA9IGRsY2xvc2Vf
bGVhay5jCitkbGNsb3NlX2xlYWtfREVQRU5ERU5DSUVTICAgICA9IGRsY2xvc2VfbGVha19zby5z
bworZGxjbG9zZV9sZWFrX0xEQUREICAgICAgICAgICAgPSAtbGRsCitkbGNsb3NlX2xlYWtfTERG
TEFHUyAgICAgICAgICA9ICQoQU1fRkxBR19NMzI2NF9QUkkpIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwkKHRvcF9idWlsZGRpcikvbWVtY2hlY2svdGVzdHMK
K2RsY2xvc2VfbGVha19zb19zb19TT1VSQ0VTID0gZGxjbG9zZV9sZWFrX3NvLmMKK2RsY2xvc2Vf
bGVha19zb19zb19DRkxBR1MgID0gJChBTV9DRkxBR1MpIC1mcGljCitkbGNsb3NlX2xlYWtfc29f
c29fTERGTEFHUyAgPSAtZnBpYyAkKEFNX0ZMQUdfTTMyNjRfUFJJKSAtc2hhcmVkIC1XbCwtc29u
YW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCxkbGNsb3NlX2xlYWtfc28u
c28KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5zdGRlcnIuZXhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5zdGRlcnIuZXhw
CShyZXZpc2lvbiAwKQorKysgbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnN0ZGVy
ci5leHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKworQ29uZGl0aW9uYWwganVtcCBv
ciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHguLi4uLi4u
Ljogam1wX29uX3VuaW5pdCAoZGxjbG9zZV9sZWFrX3NvLmM6NykKKyAgIGJ5IDB4Li4uLi4uLi46
IG1haW4gKGRsY2xvc2VfbGVhay5jOjIxKQorCitJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxCisgICBh
dCAweC4uLi4uLi4uOiBtYWluIChkbGNsb3NlX2xlYWsuYzoyNCkKKyBBZGRyZXNzIDB4Li4uLi4u
Li4gaXMgMSBieXRlcyBiZWZvcmUgYSBibG9jayBvZiBzaXplIDEgYWxsb2MnZAorICAgYXQgMHgu
Li4uLi4uLjogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOi4uLikKKyAgIGJ5IDB4Li4uLi4u
Li46IGFsbG9jXzFfYnl0ZSAoZGxjbG9zZV9sZWFrX3NvLmM6MTYpCisgICBieSAweC4uLi4uLi4u
OiBtYWluIChkbGNsb3NlX2xlYWsuYzoyMikKKworCitIRUFQIFNVTU1BUlk6CisgICAgaW4gdXNl
IGF0IGV4aXQ6IDEgYnl0ZXMgaW4gMSBibG9ja3MKKyAgdG90YWwgaGVhcCB1c2FnZTogNiBhbGxv
Y3MsIDUgZnJlZXMsIDEsNDgwIGJ5dGVzIGFsbG9jYXRlZAorCisxIGJ5dGVzIGluIDEgYmxvY2tz
IGFyZSBkZWZpbml0ZWx5IGxvc3QgaW4gbG9zcyByZWNvcmQgLi4uIG9mIC4uLgorICAgYXQgMHgu
Li4uLi4uLjogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOi4uLikKKyAgIGJ5IDB4Li4uLi4u
Li46IGFsbG9jXzFfYnl0ZSAoZGxjbG9zZV9sZWFrX3NvLmM6MTYpCisgICBieSAweC4uLi4uLi4u
OiBtYWluIChkbGNsb3NlX2xlYWsuYzoyMikKKworTEVBSyBTVU1NQVJZOgorICAgZGVmaW5pdGVs
eSBsb3N0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgICBpbmRpcmVjdGx5IGxvc3Q6IDAgYnl0ZXMg
aW4gMCBibG9ja3MKKyAgICAgcG9zc2libHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2NrcworICAg
c3RpbGwgcmVhY2hhYmxlOiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICAgICAgIHN1cHByZXNzZWQ6
IDAgYnl0ZXMgaW4gMCBibG9ja3MKKworRm9yIGNvdW50cyBvZiBkZXRlY3RlZCBhbmQgc3VwcHJl
c3NlZCBlcnJvcnMsIHJlcnVuIHdpdGg6IC12CitVc2UgLS10cmFjay1vcmlnaW5zPXllcyB0byBz
ZWUgd2hlcmUgdW5pbml0aWFsaXNlZCB2YWx1ZXMgY29tZSBmcm9tCitFUlJPUiBTVU1NQVJZOiAz
IGVycm9ycyBmcm9tIDMgY29udGV4dHMgKHN1cHByZXNzZWQ6IDAgZnJvbSAwKQpJbmRleDogaW5j
bHVkZS9wdWJfdG9vbF9vcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9v
cHRpb25zLmgJKHJldmlzaW9uIDExNjQzKQorKysgaW5jbHVkZS9wdWJfdG9vbF9vcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsMTEgQEAKIC8qIENvbnRpbnVlIHN0YWNrIHRy
YWNlcyBiZWxvdyBtYWluKCk/ICBEZWZhdWx0OiBOTyAqLwogZXh0ZXJuIEJvb2wgVkdfKGNsb19z
aG93X2JlbG93X21haW4pOwogCisvKiBLZWVwIHN5bWJvbHMgZm9yIGNvZGUgdGhhdCBpcyB1bmxv
YWRlZCAoZGxjbG9zZSBvciBzaW1pbGFyKSBzbyB0aGF0IHN0YWNrCisgICB0cmFjZXMgY2FuIHN0
aWxsIGdpdmUgbGluZS9maWxlIGluZm8gZm9yIHByZXZpb3VzbHkgY2FwdHVyZWQgc3RhY2sgdHJh
Y2VzLgorICAgZS5nLiAuLi4gc2hvd2luZyB3aGVyZSBhIGJsb2NrIHdhcyBhbGxvY2F0ZWQgZS5n
LiBsZWFrcyBvZiBvciBhY2Nlc3NlcyBqdXN0CisgICBvdXRzdGlkZSBhIGJsb2NrLiAqLworZXh0
ZXJuIEJvb2wgVkdfKGNsb19rZWVwX3VubG9hZGVkX3N5bXMpOwogCiAvKiBVc2VkIHRvIGV4cGFu
ZCBmaWxlIG5hbWVzLiAgIm9wdGlvbl9uYW1lIiBpcyB0aGUgb3B0aW9uIG5hbWUsIGVnLgogICAg
Ii0tbG9nLWZpbGUiLiAgJ2Zvcm1hdCcgaXMgd2hhdCBmb2xsb3dzLCBlZy4gImNhY2hlZ3JpbmQu
b3V0LiVwIi4gIEluCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX3N0YWNrdHJhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29sX3N0YWNrdHJhY2UuaAkocmV2aXNpb24gMTE2NDMpCisr
KyBpbmNsdWRlL3B1Yl90b29sX3N0YWNrdHJhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiAr
NzUsNyBAQAogCiAvLyBQcmludCBhIFN0YWNrVHJhY2UuCiBleHRlcm4gdm9pZCBWR18ocHBfU3Rh
Y2tUcmFjZSkgKCBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcyApOworZXh0ZXJuIHZvaWQgVkdf
KHBwX1N0YWNrVHJhY2Vfd2l0aF9lY3UpICggVUludCBlY3UsIFN0YWNrVHJhY2UgaXBzLCBVSW50
IG5faXBzICk7CiAKIC8vIEdldHMgYW5kIGltbWVkaWF0ZWx5IHByaW50cyBhIFN0YWNrVHJhY2Uu
ICBKdXN0IGEgYml0IHNpbXBsZXIgdGhhbgogLy8gY2FsbGluZyBWR18oZ2V0X1N0YWNrVHJhY2Up
KCkgdGhlbiBWR18ocHBfU3RhY2tUcmFjZSkoKS4KSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfZGVi
dWdpbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9kZWJ1Z2luZm8uaAkocmV2
aXNpb24gMTE2NDMpCisrKyBpbmNsdWRlL3B1Yl90b29sX2RlYnVnaW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw5ICs0MywxMSBAQAogICAgc2FtZSwgZXhjZXB0IGl0IGFwcGVuZHMgIitOIiB0
byBzeW1ib2wgbmFtZXMgdG8gaW5kaWNhdGUgb2Zmc2V0cy4gICovCiBleHRlcm4gQm9vbCBWR18o
Z2V0X2ZpbGVuYW1lKSAoIEFkZHIgYSwgQ2hhciogZmlsZW5hbWUsIEludCBuX2ZpbGVuYW1lICk7
CiBleHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZSkgICAoIEFkZHIgYSwgQ2hhciogZm5uYW1lLCAg
IEludCBuX2ZubmFtZSAgICk7Ci1leHRlcm4gQm9vbCBWR18oZ2V0X2xpbmVudW0pICAoIEFkZHIg
YSwgVUludCogbGluZW51bSApOworZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWVfd2l0aF9lY3Up
ICAgKCBVSW50IGVjdSwgQWRkciBhLCBDaGFyKiBmbm5hbWUsICAgSW50IG5fZm5uYW1lICAgKTsK
IGV4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCBBZGRyIGEsIENoYXIqIGZubmFtZSwgICBJbnQgbl9mbm5hbWUgICApOwor
ZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXRfYW5kX2VjdSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciogZm5uYW1lLCAgIElu
dCBuX2ZubmFtZSAgICk7CiAKIC8qIFRoaXMgb25lIGlzIHRoZSBtb3N0IGdlbmVyYWwuICBJdCBn
aXZlcyBmaWxlbmFtZSwgbGluZSBudW1iZXIgYW5kCiAgICBvcHRpb25hbGx5IGRpcmVjdG9yeSBu
YW1lLiAgZmlsZW5hbWUgYW5kIGxpbmVudW0gbWF5IG5vdCBiZSBOVUxMLgpAQCAtNjQsNiArNjYs
MTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0NoYXIqIGRpcm5h
bWUsICBJbnQgbl9kaXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9V
VCovQm9vbCogZGlybmFtZV9hdmFpbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qT1VUKi9VSW50KiBsaW5lbnVtICk7CitleHRlcm4gQm9vbCBWR18oZ2V0X2ZpbGVuYW1l
X2xpbmVudW1fd2l0aF9lY3UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFVJbnQg
ZWN1LCBBZGRyIGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQ2hh
ciogZmlsZW5hbWUsIEludCBuX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKk9VVCovQ2hhciogZGlybmFtZSwgIEludCBuX2Rpcm5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Cb29sKiBkaXJuYW1lX2F2YWlsYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1VJbnQqIGxpbmVudW0gKTsKIAogLyog
U3VjY2VlZHMgb25seSBpZiB3ZSBmaW5kIGZyb20gZGVidWcgaW5mbyB0aGF0ICdhJyBpcyB0aGUg
YWRkcmVzcyBvZiB0aGUKICAgIGZpcnN0IGluc3RydWN0aW9uIGluIGEgZnVuY3Rpb24gLS0gYXMg
b3Bwb3NlZCB0byBWR18oZ2V0X2ZubmFtZSkgd2hpY2gKQEAgLTExNyw2ICsxMjUsNyBAQAogLyog
U3VjY2VlZHMgaWYgdGhlIGFkZHJlc3MgaXMgd2l0aGluIGEgc2hhcmVkIG9iamVjdCBvciB0aGUg
bWFpbiBleGVjdXRhYmxlLgogICAgSXQgZG9lc24ndCBtYXR0ZXIgaWYgZGVidWcgaW5mbyBpcyBw
cmVzZW50IG9yIG5vdC4gKi8KIGV4dGVybiBCb29sIFZHXyhnZXRfb2JqbmFtZSkgICggQWRkciBh
LCBDaGFyKiBvYmpuYW1lLCBJbnQgbl9vYmpuYW1lICk7CitleHRlcm4gQm9vbCBWR18oZ2V0X29i
am5hbWVfd2l0aF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciogb2JqbmFtZSwgSW50IG5f
b2JqbmFtZSApOwogCiAvKiBQdXRzIGludG8gJ2J1ZicgaW5mbyBhYm91dCB0aGUgY29kZSBhZGRy
ZXNzICVlaXA6ICB0aGUgYWRkcmVzcywgZnVuY3Rpb24KICAgIG5hbWUgKGlmIGtub3duKSBhbmQg
ZmlsZW5hbWUvbGluZSBudW1iZXIgKGlmIGtub3duKSwgbGlrZSB0aGlzOgpAQCAtMTI2LDYgKzEz
NSw3IEBACiAgICAnbl9idWYnIGdpdmVzIGxlbmd0aCBvZiAnYnVmJy4gIFJldHVybnMgJ2J1Zicu
CiAqLwogZXh0ZXJuIENoYXIqIFZHXyhkZXNjcmliZV9JUCkoQWRkciBlaXAsIENoYXIqIGJ1Ziwg
SW50IG5fYnVmKTsKK2V4dGVybiBDaGFyKiBWR18oZGVzY3JpYmVfSVBfd2l0aF9lY3UpKFVJbnQg
ZWN1LCBBZGRyIGVpcCwgQ2hhciogYnVmLCBJbnQgbl9idWYpOwogCiAKIC8qIEdldCBhbiBYQXJy
YXkgb2YgU3RhY2tCbG9jayB3aGljaCBkZXNjcmliZSB0aGUgc3RhY2sgKGF1dG8pIGJsb2NrcwpJ
bmRleDogbm9uZS90ZXN0cy9jbWRsaW5lMi5zdGRvdXQuZXhwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5vbmUv
dGVzdHMvY21kbGluZTIuc3Rkb3V0LmV4cAkocmV2aXNpb24gMTE2NDMpCisrKyBub25lL3Rlc3Rz
L2NtZGxpbmUyLnN0ZG91dC5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDEwIEBACiAg
ICAgLS1sb2ctZmQ9PG51bWJlcj4gICAgICAgICBsb2cgbWVzc2FnZXMgdG8gZmlsZSBkZXNjcmlw
dG9yIFsyPXN0ZGVycl0KICAgICAtLWxvZy1maWxlPTxmaWxlPiAgICAgICAgIGxvZyBtZXNzYWdl
cyB0byA8ZmlsZT4KICAgICAtLWxvZy1zb2NrZXQ9aXBhZGRyOnBvcnQgIGxvZyBtZXNzYWdlcyB0
byBzb2NrZXQgaXBhZGRyOnBvcnQKKyAgICAtLWtlZXAtdW5sb2FkZWQtc3ltcz1ub3x5ZXMgS2Vl
cCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlIFtub10KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRoaXMgYWxsb3dzIHN0YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGZpbGUvbGluZSBpbmZvIGZvciBjb2Rl
IHRoYXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsY2xvc2UnZCAo
b3Igc2ltaWxhcikKIAogICB1c2VyIG9wdGlvbnMgZm9yIFZhbGdyaW5kIHRvb2xzIHRoYXQgcmVw
b3J0IGVycm9yczoKICAgICAtLXhtbD15ZXMgICAgICAgICAgICAgICAgIGVtaXQgZXJyb3Igb3V0
cHV0IGluIFhNTCAoc29tZSB0b29scyBvbmx5KQpJbmRleDogbm9uZS90ZXN0cy9jbWRsaW5lMS5z
dGRvdXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG5vbmUvdGVzdHMvY21kbGluZTEuc3Rkb3V0LmV4cAko
cmV2aXNpb24gMTE2NDMpCisrKyBub25lL3Rlc3RzL2NtZGxpbmUxLnN0ZG91dC5leHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDYgKzIxLDEwIEBACiAgICAgLS1sb2ctZmQ9PG51bWJlcj4gICAgICAg
ICBsb2cgbWVzc2FnZXMgdG8gZmlsZSBkZXNjcmlwdG9yIFsyPXN0ZGVycl0KICAgICAtLWxvZy1m
aWxlPTxmaWxlPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byA8ZmlsZT4KICAgICAtLWxvZy1zb2Nr
ZXQ9aXBhZGRyOnBvcnQgIGxvZyBtZXNzYWdlcyB0byBzb2NrZXQgaXBhZGRyOnBvcnQKKyAgICAt
LWtlZXAtdW5sb2FkZWQtc3ltcz1ub3x5ZXMgS2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2Rl
IFtub10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIHN0YWNrIHRy
YWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlIGZpbGUvbGluZSBpbmZvIGZvciBjb2RlIHRoYXQgaGFzIGJlZW4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRsY2xvc2UnZCAob3Igc2ltaWxhcikKIAogICB1c2VyIG9wdGlv
bnMgZm9yIFZhbGdyaW5kIHRvb2xzIHRoYXQgcmVwb3J0IGVycm9yczoKICAgICAtLXhtbD15ZXMg
ICAgICAgICAgICAgICAgIGVtaXQgZXJyb3Igb3V0cHV0IGluIFhNTCAoc29tZSB0b29scyBvbmx5
KQpJbmRleDogY29yZWdyaW5kL21fZXhlY29udGV4dC5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmlu
ZC9tX2V4ZWNvbnRleHQuYwkocmV2aXNpb24gMTE2NDMpCisrKyBjb3JlZ3JpbmQvbV9leGVjb250
ZXh0LmMJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAKICAgICA1MDMzMTY1M1VMLCAg
ICAxMDA2NjMzMTlVTAogfTsKIAorVUludCBWR18oZWNfbGFzdF9lY3UpID0gMDsKIAogLyogRWFj
aCBlbGVtZW50IGlzIHByZXNlbnQgaW4gYSBoYXNoIGNoYWluLCBhbmQgYWxzbyBjb250YWlucyBh
CiAgICB2YXJpYWJsZSBsZW5ndGggYXJyYXkgb2YgZ3Vlc3QgY29kZSBhZGRyZXNzZXMgKHRoZSB1
c2VmdWwgcGFydCkuICovCkBAIC0xNjgsOCArMTY5LDExIEBACiAKIC8qIFByaW50IGFuIEV4ZUNv
bnRleHQuICovCiB2b2lkIFZHXyhwcF9FeGVDb250ZXh0KSAoIEV4ZUNvbnRleHQqIGVjICkKLXsK
LSAgIFZHXyhwcF9TdGFja1RyYWNlKSggZWMtPmlwcywgZWMtPm5faXBzICk7Cit7ICAvKiBTZXQg
dGhlIGN1cnJlbnQgZWN1IHRvIGRlY29kZSwgdGhpcyBoYWNrIGF2b2lkcyBjaGFuZ2luZyBhIG51
bWJlciBvZgorICAgZnVuY3Rpb24gc2lnbmF0dXJlcyBpbiBvcmRlciB0byBwYXNzIHRoaXMgaW5m
byBhbGwgdGhlIHdheSBkb3duIHRvCisgICBkZWJ1Z2luZm8gKi8KKyAgIFZHXyhwcF9TdGFja1Ry
YWNlX3dpdGhfZWN1KSggZWMtPmVjdSwgZWMtPmlwcywgZWMtPm5faXBzICk7CisgICAvKiBBbmQg
cmVzZXQgdG8gZGVjb2RpbmcgY3VycmVudCBzdGFjayB0cmFjZXMgKi8KIH0KIAogCkBAIC00MDQs
NiArNDA4LDcgQEAKIAogICAgdmdfYXNzZXJ0KFZHXyhpc19wbGF1c2libGVfRUNVKShlY19uZXh0
X2VjdSkpOwogICAgbmV3X2VjLT5lY3UgPSBlY19uZXh0X2VjdTsKKyAgIFZHXyhlY19sYXN0X2Vj
dSkgPSBlY19uZXh0X2VjdTsKICAgIGVjX25leHRfZWN1ICs9IDQ7CiAgICBpZiAoZWNfbmV4dF9l
Y3UgPT0gMCkgewogICAgICAgLyogVXJyLiAgTm93IHdlJ3JlIGhvc2VkOyB3ZSBlbWl0dGVkIDJe
MzAgRXhlQ29udGV4dHMgYWxyZWFkeQpJbmRleDogY29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVn
aW5mby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwko
cmV2aXNpb24gMTE2NDMpCisrKyBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJwdWJfY29yZV90aHJlYWRz
dGF0ZS5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2RlYnVnaW5mby5oIiAgLyogc2VsZiAqLwogI2lu
Y2x1ZGUgInB1Yl9jb3JlX2RlbWFuZ2xlLmgiCisjaW5jbHVkZSAicHViX2NvcmVfZXhlY29udGV4
dC5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2xpYmNiYXNlLmgiCiAjaW5jbHVkZSAicHViX2NvcmVf
bGliY2Fzc2VydC5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2xpYmNwcmludC5oIgpAQCAtMTE1LDYg
KzExNiw5IEBACiAgICBsaW5rZWQgbGlzdCBvZiBEZWJ1Z0luZm9zLiAqLwogc3RhdGljIERlYnVn
SW5mbyogZGVidWdJbmZvX2xpc3QgPSBOVUxMOwogCisvKiBLZWVwIGFyb3VuZCBvbGQgZGVidWcg
aW5mbyBzbyB3ZSBjYW4gaGF2ZSBhIGNoYW5jZSBvZiBkZWNvZGluZyBzdGFjayB0cmFjZXMKKyAq
IChlLmcuIGZvciBsZWFrIGNoZWNrcykgZXZlbiBhZnRlciBhIHNoYXJlZCBsaWJyYXJ5IGhhcyBi
ZWVuIHVubG9hZGVkLiAqLworc3RhdGljIERlYnVnSW5mbyogdW5sb2FkZWREZWJ1Z0luZm9fbGlz
dCA9IE5VTEw7CiAKIC8qIEZpbmQgJ2RpJyBpbiB0aGUgZGVidWdJbmZvX2xpc3QgYW5kIG1vdmUg
aXQgb25lIHN0ZXAgY2xvc2VyIHRoZSB0aGUKICAgIGZyb250IG9mIHRoZSBsaXN0LCBzbyBhcyB0
byBtYWtlIHN1YnNlcXVlbnQgc2VhcmNoZXMgZm9yIGl0CkBAIC0yODQsNyArMjg4LDcgQEAKIH0K
IAogCi0vKiAnc2knIGlzIGEgbWVtYmVyIG9mIGRlYnVnSW5mb19saXN0LiAgRmluZCBpdCwgcmVt
b3ZlIGl0IGZyb20gdGhlCisvKiAnZGknIGlzIGEgbWVtYmVyIG9mIGRlYnVnSW5mb19saXN0LiAg
RmluZCBpdCwgcmVtb3ZlIGl0IGZyb20gdGhlCiAgICBsaXN0LCBub3RpZnkgbV9yZWRpciB0aGF0
IHRoaXMgaGFzIGhhcHBlbmVkLCBhbmQgZnJlZSBhbGwgc3RvcmFnZQogICAgcmVhY2hhYmxlIGZy
b20gaXQuCiAqLwpAQCAtMzE2LDcgKzMyMCwxNyBAQAogICAgICAgICAgKnByZXZfbmV4dF9wdHIg
PSBjdXJyLT5uZXh0OwogICAgICAgICAgaWYgKGN1cnItPmhhdmVfZGluZm8pCiAgICAgICAgICAg
ICBWR18ocmVkaXJfbm90aWZ5X2RlbGV0ZV9EZWJ1Z0luZm8pKCBjdXJyICk7Ci0gICAgICAgICBm
cmVlX0RlYnVnSW5mbyhjdXJyKTsKKyAgICAgICAgIGlmIChWR18oY2xvX2tlZXBfdW5sb2FkZWRf
c3ltcykgJiYgCisgICAgICAgICAgICAgY3Vyci0+Zmlyc3RfZWN1IDwgVkdfKGVjX2xhc3RfZWN1
KSkgeworICAgICAgICAgICAgLyogT25seSBrZWVwIHRoZSBEZWJ1Z0luZm8gYXJvdW5kIGlmIHRo
ZSBjb21tYW5kIGxpbmUgc3dpdGNoCisgICAgICAgICAgICAgICByZXF1ZXN0ZWQgaXQsIGFuZCB0
aGVyZSB3YXMgYXQgbGVhc3QgMSBleGUgY29udGV4dCB0YWtlbiB3aGlsZQorICAgICAgICAgICAg
ICAgdGhpcyBEZWJ1Z0luZm8gd2FzIGxvYWRlZC4gKi8KKyAgICAgICAgICAgIGN1cnItPm5leHQg
PSB1bmxvYWRlZERlYnVnSW5mb19saXN0OworICAgICAgICAgICAgdW5sb2FkZWREZWJ1Z0luZm9f
bGlzdCA9IGN1cnI7CisgICAgICAgICAgICBjdXJyLT5sYXN0X2VjdSA9IFZHXyhlY19sYXN0X2Vj
dSk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnJlZV9EZWJ1Z0luZm8oY3Vycik7
CisgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICBwcmV2X25leHRf
cHRyID0gJmN1cnItPm5leHQ7CkBAIC00ODcsNiArNTAxLDggQEAKICAgICAgIHZnX2Fzc2VydChk
aSk7CiAgICAgICBkaS0+bmV4dCA9IGRlYnVnSW5mb19saXN0OwogICAgICAgZGVidWdJbmZvX2xp
c3QgPSBkaTsKKyAgICAgIGRpLT5maXJzdF9lY3UgPSBWR18oZWNfbGFzdF9lY3UpOworICAgICAg
ZGktPmxhc3RfZWN1ID0gRUNfRUNVX0NVUlJFTlQ7CiAgICB9CiAgICByZXR1cm4gZGk7CiB9CkBA
IC01NjQsNiArNTgwLDcgQEAKICAgICAgIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbiBkZW1hbmQs
IGFuZCBlYWNoIG9uZSBpcyB0cmVhdGVkIG1vcmUgb3IKICAgICAgIGxlc3MgaW5kZXBlbmRlbnRs
eS4gKi8KICAgIHZnX2Fzc2VydChkZWJ1Z0luZm9fbGlzdCA9PSBOVUxMKTsKKyAgIHZnX2Fzc2Vy
dCh1bmxvYWRlZERlYnVnSW5mb19saXN0ID09IE5VTEwpOwogCiAgICAvKiBmbHVzaCB0aGUgQ0ZJ
IGZhc3QgcXVlcnkgY2FjaGUuICovCiAgICBjZnNpX2NhY2hlX19pbnZhbGlkYXRlKCk7CkBAIC0x
MjQ3LDEwICsxMjY0LDEwIEBACiAvKi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgVkdfKGRpX2Rpc2Nh
cmRfQUxMX2RlYnVnaW5mbykoIHZvaWQgKQorc3RhdGljIHZvaWQgZGlzY2FyZF9BTExfZGVidWdp
bmZvX2luX2xpc3QoRGVidWdJbmZvKiBsaXN0KQogewogICAgRGVidWdJbmZvICpkaSwgKmRpMjsK
LSAgIGRpID0gZGVidWdJbmZvX2xpc3Q7CisgICBkaSA9IGxpc3Q7CiAgICB3aGlsZSAoZGkpIHsK
ICAgICAgIGRpMiA9IGRpLT5uZXh0OwogICAgICAgVkdfKHByaW50ZikoIlhYWCBybSAlcFxuIiwg
ZGkpOwpAQCAtMTI1OSwxOSArMTI3NiwyMiBAQAogICAgfQogfQogCitzdGF0aWMgaW5saW5lIEJv
b2wgZWN1X2luX2RpX3JhbmdlKFVJbnQgZWN1LCBEZWJ1Z0luZm8qIGRpKQoreyAgIC8qIGZpcnN0
X2VjdSBpcyBhY3R1YWxseSB0aGUgbGFzdCBlY3UgIyB0aGF0IHdhcyBhbGxvY2F0ZWQgYmVmb3Jl
IHRoaXMKKyAgICAgKiBEZWJ1Z0luZm8gd2FzIGxvYWRlZCwgbGFzdF9lY3UgaXMgdGhhdCBsYXN0
IGVjdSB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAgICAgKiBiZWZvcmUgdGhpcyBEZWJ1Z0luZm8gd2Fz
IHVubG9hZGVkIG9yIDB4RkZGRkZGRkYgKGFrYSBFQ19FQ1VfQ1VSUkVOVCkKKyAgICAgKiBpZiB0
aGlzIERlYnVnSW5mbyBoYXMgbm90IGJlZW4gdW5sb2FkZWQgeWV0LiAqLworICAgIHJldHVybiAo
ZWN1ID4gZGktPmZpcnN0X2VjdSkgJiYgKGVjdSA8PSBkaS0+bGFzdF9lY3UpOworfQogCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi0vKi0tLSBVc2Ugb2Ygc3ltYm9sIHRhYmxlICYgbG9jYXRpb24gaW5mbyB0byBjcmVhdGUg
ICAgICAgIC0tLSovCi0vKi0tLSBwbGF1c2libGUtbG9va2luZyBzdGFjayBkdW1wcy4gICAgICAg
ICAgICAgICAgICAgICAgIC0tLSovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIFZHXyhkaV9kaXNjYXJkX0FMTF9k
ZWJ1Z2luZm8pKCB2b2lkICkKK3sKKyAgICBkaXNjYXJkX0FMTF9kZWJ1Z2luZm9faW5fbGlzdChk
ZWJ1Z0luZm9fbGlzdCk7CisgICAgZGlzY2FyZF9BTExfZGVidWdpbmZvX2luX2xpc3QodW5sb2Fk
ZWREZWJ1Z0luZm9fbGlzdCk7Cit9CiAKLS8qIFNlYXJjaCBhbGwgc3ltdGFicyB0aGF0IHdlIGtu
b3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKLSAgICpwZGkgdG8gdGhlIHJl
bGV2YW50IERlYnVnSW5mbywgYW5kICpzeW1ubyB0byB0aGUgc3ltdGFiIGVudHJ5Ci0gICAqbnVt
YmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcHNpIGlzIHNldCB0byBOVUxMLgotICAg
SWYgZmluZFRleHQ9PVRydWUsICBvbmx5IHRleHQgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgot
ICAgSWYgZmluZFRleHQ9PUZhbHNlLCBvbmx5IGRhdGEgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9y
LgotKi8KLXN0YXRpYyB2b2lkIHNlYXJjaF9hbGxfc3ltdGFicyAoIEFkZHIgcHRyLCAvKk9VVCov
RGVidWdJbmZvKiogcGRpLAorc3RhdGljIHZvaWQgc2VhcmNoX29uZV9kZWJ1Z0luZm9fbGlzdCAo
RGVidWdJbmZvKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludCBl
Y3UsIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBzeW1ubywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJvb2wgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBmaW5kVGV4dCApCkBAIC0xMjgwLDcgKzEz
MDAsMTAgQEAKICAgIERlYnVnSW5mbyogZGk7CiAgICBCb29sICAgICAgIGluUmFuZ2U7CiAKLSAg
IGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgewor
ICAgZm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlm
ICggISBlY3VfaW5fZGlfcmFuZ2UoIGVjdSwgZGkpICkgeworICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgfQogCiAgICAgICBpZiAoZmluZFRleHQpIHsKICAgICAgICAgIC8qIENvbnNpZGVyIGFu
eSBzeW1ib2wgaW4gdGhlIHIteCBtYXBwZWQgYXJlYSB0byBiZSB0ZXh0LgpAQCAtMTMzMSwxNyAr
MTM1NCw0NiBAQAogICAgKnBkaSA9IE5VTEw7CiB9CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIFVzZSBvZiBz
eW1ib2wgdGFibGUgJiBsb2NhdGlvbiBpbmZvIHRvIGNyZWF0ZSAgICAgICAgLS0tKi8KKy8qLS0t
IHBsYXVzaWJsZS1sb29raW5nIHN0YWNrIGR1bXBzLiAgICAgICAgICAgICAgICAgICAgICAgLS0t
Ki8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KIAorLyogU2VhcmNoIGFsbCBzeW10YWJzIHRoYXQgd2Uga25vdyBhYm91dCB0
byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAorICAgKnBkaSB0byB0aGUgcmVsZXZhbnQgRGVi
dWdJbmZvLCBhbmQgKnN5bW5vIHRvIHRoZSBzeW10YWIgZW50cnkKKyAgICpudW1iZXIgd2l0aGlu
IHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMgc2V0IHRvIE5VTEwuCisgICBJZiBmaW5kVGV4
dD09VHJ1ZSwgIG9ubHkgdGV4dCBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IuCisgICBJZiBmaW5k
VGV4dD09RmFsc2UsIG9ubHkgZGF0YSBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IuCisqLworc3Rh
dGljIHZvaWQgc2VhcmNoX2FsbF9zeW10YWJzICggVUludCBlY3UsIEFkZHIgcHRyLCAvKk9VVCov
RGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qT1VUKi9Xb3JkKiBzeW1ubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJvb2wgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQm9vbCBmaW5kVGV4dCApCit7CisgICBzZWFyY2hfb25lX2RlYnVnSW5mb19saXN0KGRl
YnVnSW5mb19saXN0LCBlY3UsIHB0ciwgcGRpLCBzeW1ubywKKyAgICAgICAgICAgbWF0Y2hfYW55
d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCk7CisgICAvKiBPbmx5IHNlYXJjaCB0aGUgbGlzdCBvZiB1
bmxvYWRlZCBzeW1zIGlmIHdlIGhhdmVuJ3QgZm91bmQgc29tZXRoaW5nLAorICAgICogYW5kIHdl
IGFyZW4ndCBkZWNvZGluZyBhICdjdXJyZW50JyBzdGFja3RyYWNlLiAqLworICAgaWYoISpwZGkg
JiYgZWN1ICE9IEVDX0VDVV9DVVJSRU5UKQorICAgICAgIHNlYXJjaF9vbmVfZGVidWdJbmZvX2xp
c3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCwgZWN1LCBwdHIsIHBkaSwgc3ltbm8sCisgICAgICAg
ICAgICAgICBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRUZXh0KTsKK30KKwogLyogU2VhcmNo
IGFsbCBsb2N0YWJzIHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQs
IHNldAogICAgKnBkaSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRo
ZSBsb2N0YWIgZW50cnkKICAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpw
ZGkgaXMgc2V0IHRvIE5VTEwuICovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBB
ZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9jbm8gKQorc3RhdGljIHZvaWQgc2Vh
cmNoX2FsbF9sb2N0YWJzX29uZV9saXN0IChEZWJ1Z0luZm8qIGxpc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQgZWN1LCBBZGRyIHB0ciwgLypPVVQqL0Rl
YnVnSW5mbyoqIHBkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qT1VUKi9Xb3JkKiBsb2NubyApCiB7CiAgICBXb3JkICAgICAgIGxubzsKICAg
IERlYnVnSW5mbyogZGk7Ci0gICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7
IGRpID0gZGktPm5leHQpIHsKLSAgICAgIGlmIChkaS0+dGV4dF9wcmVzZW50CisgICBmb3IgKGRp
ID0gbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgeworICAgICAgaWYgKCAhIGVjdV9p
bl9kaV9yYW5nZSggZWN1LCBkaSkgKSB7CisgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKwor
ICAgICAgIGlmIChkaS0+dGV4dF9wcmVzZW50CiAgICAgICAgICAgJiYgZGktPnRleHRfc2l6ZSA+
IDAKICAgICAgICAgICAmJiBkaS0+dGV4dF9hdm1hIDw9IHB0ciAKICAgICAgICAgICAmJiBwdHIg
PCBkaS0+dGV4dF9hdm1hICsgZGktPnRleHRfc2l6ZSkgewpAQCAtMTM1Niw2ICsxNDA4LDE4IEBA
CiAgICAqcGRpID0gTlVMTDsKIH0KIAorLyogU2VhcmNoIGFsbCBsb2N0YWJzIHRoYXQgd2Uga25v
dyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAorICAgKnBkaSB0byB0aGUgcmVs
ZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRoZSBsb2N0YWIgZW50cnkKKyAgICpudW1i
ZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMgc2V0IHRvIE5VTEwuICovCitz
dGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBVSW50IGVjdSwgQWRkciBwdHIsIC8qT1VU
Ki9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLypPVVQqL1dvcmQqIGxvY25vICkKK3sKKyAgICBzZWFyY2hfYWxsX2xvY3RhYnNfb25l
X2xpc3QoZGVidWdJbmZvX2xpc3QsIGVjdSwgcHRyLCBwZGksIGxvY25vICk7CisgICAgLyogT25s
eSBzZWFyY2ggdGhlIGxpc3Qgb2YgdW5sb2FkZWQgc3ltcyBpZiB3ZSBoYXZlbid0IGZvdW5kIHNv
bWV0aGluZywKKyAgICAgKiBhbmQgd2UgYXJlbid0IGRlY29kaW5nIGEgJ2N1cnJlbnQnIHN0YWNr
dHJhY2UuICovCisgICAgaWYoISpwZGkgJiYgZWN1ICE9IEVDX0VDVV9DVVJSRU5UKQorICAgICAg
ICBzZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCwgZWN1
LCBwdHIsIHBkaSwgbG9jbm8gKTsKK30KIAogLyogVGhlIHdob2xlIHBvaW50IG9mIHRoaXMgd2hv
bGUgYmlnIGRlYWw6IG1hcCBhIGNvZGUgYWRkcmVzcyB0byBhCiAgICBwbGF1c2libGUgc3ltYm9s
IG5hbWUuICBSZXR1cm5zIEZhbHNlIGlmIG5vIGlkZWE7IG90aGVyd2lzZSBUcnVlLgpAQCAtMTM2
Nyw3ICsxNDMxLDcgQEAKIHN0YXRpYwogQm9vbCBnZXRfc3ltX25hbWUgKCBCb29sIGRvX2N4eF9k
ZW1hbmdsaW5nLCBCb29sIGRvX3pfZGVtYW5nbGluZywKICAgICAgICAgICAgICAgICAgICAgQm9v
bCBkb19iZWxvd19tYWluX3JlbmFtaW5nLAotICAgICAgICAgICAgICAgICAgICBBZGRyIGEsIENo
YXIqIGJ1ZiwgSW50IG5idWYsCisgICAgICAgICAgICAgICAgICAgIFVJbnQgZWN1LCBBZGRyIGEs
IENoYXIqIGJ1ZiwgSW50IG5idWYsCiAgICAgICAgICAgICAgICAgICAgIEJvb2wgbWF0Y2hfYW55
d2hlcmVfaW5fc3ltLCBCb29sIHNob3dfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICBCb29s
IGZpbmRUZXh0LCAvKk9VVCovUHRyZGlmZlQqIG9mZnNldFAgKQogewpAQCAtMTM3NSw3ICsxNDM5
LDcgQEAKICAgIFdvcmQgICAgICAgc25vOwogICAgUHRyZGlmZlQgICBvZmZzZXQ7CiAKLSAgIHNl
YXJjaF9hbGxfc3ltdGFicyAoIGEsICZkaSwgJnNubywgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBm
aW5kVGV4dCApOworICAgc2VhcmNoX2FsbF9zeW10YWJzICggZWN1LCBhLCAmZGksICZzbm8sIG1h
dGNoX2FueXdoZXJlX2luX3N5bSwgZmluZFRleHQgKTsKICAgIGlmIChkaSA9PSBOVUxMKSAKICAg
ICAgIHJldHVybiBGYWxzZTsKIApAQCAtMTQyNCw3ICsxNDg4LDcgQEAKIHsKICAgIERlYnVnSW5m
byogc2k7CiAgICBXb3JkICAgICAgIHNubzsKLSAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIGd1ZXN0
X2NvZGVfYWRkciwgCisgICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBFQ19FQ1VfQ1VSUkVOVCwgZ3Vl
c3RfY29kZV9hZGRyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICZzaSwgJnNubywKICAgICAg
ICAgICAgICAgICAgICAgICAgIFRydWUvKm1hdGNoX2FueXdoZXJlX2luX2Z1biovLAogICAgICAg
ICAgICAgICAgICAgICAgICAgVHJ1ZS8qY29uc2lkZXIgdGV4dCBzeW1ib2xzIG9ubHkqLyApOwpA
QCAtMTQzOCw5ICsxNTAyLDEzIEBACiAgICBtYXRjaCBhbnl3aGVyZSBpbiBmdW5jdGlvbiwgYnV0
IGRvbid0IHNob3cgb2Zmc2V0cy4gKi8KIEJvb2wgVkdfKGdldF9mbm5hbWUpICggQWRkciBhLCBD
aGFyKiBidWYsIEludCBuYnVmICkKIHsKKyAgICByZXR1cm4gVkdfKGdldF9mbm5hbWVfd2l0aF9l
Y3UpIChFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmKTsKK30KK0Jvb2wgVkdfKGdldF9mbm5h
bWVfd2l0aF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciogYnVmLCBJbnQgbmJ1ZiApCit7
CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL1RydWUsIC8qWi1kZW1h
bmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1p
bmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwgYnVmLCBuYnVmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGVjdSwgYSwgYnVmLCBuYnVmLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9UcnVlLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Lyp0ZXh0IHN5bXMgb25seSovVHJ1ZSwKQEAgLTE0NDksMTEgKzE1MTcsMTYgQEAKIAogLyogVGhp
cyBpcyBhdmFpbGFibGUgdG8gdG9vbHMuLi4gYWx3YXlzIGRlbWFuZ2xlIEMrKyBuYW1lcywKICAg
IG1hdGNoIGFueXdoZXJlIGluIGZ1bmN0aW9uLCBhbmQgc2hvdyBvZmZzZXQgaWYgbm9uemVyby4g
Ki8KKwogQm9vbCBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkgKCBBZGRyIGEsIENoYXIqIGJ1Ziwg
SW50IG5idWYgKQogeworICAgIHJldHVybiBWR18oZ2V0X2ZubmFtZV93X29mZnNldF9hbmRfZWN1
KSAoIEVDX0VDVV9DVVJSRU5ULCBhLCBidWYsIG5idWYgKTsKK30KK0Jvb2wgVkdfKGdldF9mbm5h
bWVfd19vZmZzZXRfYW5kX2VjdSkgKCBVSW50IGVjdSwgQWRkciBhLCBDaGFyKiBidWYsIEludCBu
YnVmICkKK3sKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwg
LypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFp
bi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsIG5idWYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgZWN1LCBhLCBidWYsIG5idWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4qL1RydWUsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9UcnVlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0xNDY3LDcgKzE1NDAsNyBAQAogewog
ICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9UcnVlLCAvKlotZGVtYW5n
bGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5n
Ki9UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwgbmJ1ZiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9GYWxzZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0xNDgxLDcgKzE1NTQsNyBAQAog
ewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRl
bWFuZ2xlKi9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVu
YW1pbmcqL0ZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwgbmJ1ZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9UcnVlLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyp0ZXh0IHN5bXMgb25seSovVHJ1ZSwKQEAgLTE0OTUsNyArMTU2OCw3
IEBACiB7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL0ZhbHNlLCAv
KlotZGVtYW5nbGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWlu
LXJlbmFtaW5nKi9UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwgbmJ1ZiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9UcnVlLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bXMgb25seSovVHJ1ZSwKQEAgLTE1NTUsNyArMTYy
OCw3IEBACiAgICB2Z19hc3NlcnQobl9kbmFtZSA+IDEpOwogICAgb2sgPSBnZXRfc3ltX25hbWUg
KCAvKkMrKy1kZW1hbmdsZSovRmFsc2UsIC8qWi1kZW1hbmdsZSovRmFsc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWluZyovRmFsc2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFfYWRkciwgZG5hbWUsIG5fZG5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgIEVDX0VDVV9DVVJSRU5ULCBkYXRhX2FkZHIsIGRuYW1lLCBuX2RuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX3N5bSovVHJ1ZSwgCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgLypkYXRhIHN5bXMgb25seSBwbGVhc2UqL0ZhbHNlLApAQCAtMTU3MSw2ICsxNjQ0LDEwIEBA
CiAgICByZXF1aXJlIGRlYnVnIGluZm8uICBDYWxsZXIgc3VwcGxpZXMgYnVmIGFuZCBuYnVmLiAq
LwogQm9vbCBWR18oZ2V0X29iam5hbWUpICggQWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmICkK
IHsKKyAgICByZXR1cm4gVkdfKGdldF9vYmpuYW1lX3dpdGhfZWN1KSAoRUNfRUNVX0NVUlJFTlQs
IGEsIGJ1ZiwgbmJ1Zik7Cit9CitCb29sIFZHXyhnZXRfb2JqbmFtZV93aXRoX2VjdSkgKCBVSW50
IGVjdSwgQWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmICkKK3sKICAgIEludCB1c2VkOwogICAg
RGVidWdJbmZvKiBkaTsKICAgIGNvbnN0IE5TZWdtZW50ICpzZWc7CkBAIC0xNTc5LDYgKzE2NTYs
MTAgQEAKICAgIC8qIExvb2sgaW4gdGhlIGRlYnVnSW5mb19saXN0IHRvIGZpbmQgdGhlIG5hbWUu
ICBJbiBtb3N0IGNhc2VzIHdlCiAgICAgICBleHBlY3QgdGhpcyB0byBwcm9kdWNlIGEgcmVzdWx0
LiAqLwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5u
ZXh0KSB7CisgICAgICBpZiAoICEgZWN1X2luX2RpX3JhbmdlKCBlY3UsIGRpKSApIHsKKyAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgfQorCiAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAg
ICAgICAgICYmIGRpLT50ZXh0X3NpemUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8
PSBhIApAQCAtMTYzNywyNiArMTcxOCwxMyBAQAogewogICAgRGVidWdJbmZvKiBzaTsKICAgIFdv
cmQgICAgICAgbG9jbm87Ci0gICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyAp
OworICAgc2VhcmNoX2FsbF9sb2N0YWJzICggRUNfRUNVX0NVUlJFTlQsIGEsICZzaSwgJmxvY25v
ICk7CiAgICBpZiAoc2kgPT0gTlVMTCkgCiAgICAgICByZXR1cm4gRmFsc2U7CiAgICBWR18oc3Ry
bmNweV9zYWZlbHkpKGZpbGVuYW1lLCBzaS0+bG9jdGFiW2xvY25vXS5maWxlbmFtZSwgbl9maWxl
bmFtZSk7CiAgICByZXR1cm4gVHJ1ZTsKIH0KIAotLyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGEg
bGluZSBudW1iZXIuICBSZXR1cm5zIFRydWUgaWYgc3VjY2Vzc2Z1bC4gKi8KLUJvb2wgVkdfKGdl
dF9saW5lbnVtKSggQWRkciBhLCBVSW50KiBsaW5lbm8gKQotewotICAgRGVidWdJbmZvKiBzaTsK
LSAgIFdvcmQgICAgICAgbG9jbm87Ci0gICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZs
b2NubyApOwotICAgaWYgKHNpID09IE5VTEwpIAotICAgICAgcmV0dXJuIEZhbHNlOwotICAgKmxp
bmVubyA9IHNpLT5sb2N0YWJbbG9jbm9dLmxpbmVubzsKLQotICAgcmV0dXJuIFRydWU7Ci19Ci0K
IC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0byBhIGZpbGVuYW1lL2xpbmUgbnVtYmVyL2RpciBuYW1l
IGluZm8uCiAgICBTZWUgcHJvdG90eXBlIGZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBiZWhh
dmlvdXIuCiAqLwpAQCAtMTY2Niw2ICsxNzM0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKk9VVCovQm9vbCogZGlybmFtZV9hdmFpbGFibGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGluZW5vICkKIHsKKyAgICByZXR1cm4g
VkdfKGdldF9maWxlbmFtZV9saW5lbnVtX3dpdGhfZWN1KSAoRUNfRUNVX0NVUlJFTlQsIGEsCisg
ICAgICAgICAgICBmaWxlbmFtZSwgbl9maWxlbmFtZSwgZGlybmFtZSwgbl9kaXJuYW1lLCBkaXJu
YW1lX2F2YWlsYWJsZSwgbGluZW5vKTsKK30KK0Jvb2wgVkdfKGdldF9maWxlbmFtZV9saW5lbnVt
X3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBBZGRyIGEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLypPVVQqL0NoYXIqIGZpbGVuYW1lLCBJbnQgbl9maWxlbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9DaGFyKiBkaXJuYW1lLCAgSW50IG5fZGly
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Cb29sKiBkaXJu
YW1lX2F2YWlsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9V
SW50KiBsaW5lbm8gKQorewogICAgRGVidWdJbmZvKiBzaTsKICAgIFdvcmQgICAgICAgbG9jbm87
CiAKQEAgLTE2NzMsNyArMTc1MCw3IEBACiAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAg
IChkaXJuYW1lICE9IE5VTEwgJiYgZGlybmFtZV9hdmFpbGFibGUgIT0gTlVMTCkgKTsKIAotICAg
c2VhcmNoX2FsbF9sb2N0YWJzICggYSwgJnNpLCAmbG9jbm8gKTsKKyAgIHNlYXJjaF9hbGxfbG9j
dGFicyAoIGVjdSwgYSwgJnNpLCAmbG9jbm8gKTsKICAgIGlmIChzaSA9PSBOVUxMKSB7CiAgICAg
ICBpZiAoZGlybmFtZV9hdmFpbGFibGUpIHsKICAgICAgICAgICpkaXJuYW1lX2F2YWlsYWJsZSA9
IEZhbHNlOwpAQCAtMTgwNSw2ICsxODgyLDEwIEBACiAKIENoYXIqIFZHXyhkZXNjcmliZV9JUCko
QWRkciBlaXAsIENoYXIqIGJ1ZiwgSW50IG5fYnVmKQogeworICAgIHJldHVybiBWR18oZGVzY3Jp
YmVfSVBfd2l0aF9lY3UpIChFQ19FQ1VfQ1VSUkVOVCwgZWlwLCBidWYsIG5fYnVmKTsKK30KK0No
YXIqIFZHXyhkZXNjcmliZV9JUF93aXRoX2VjdSkoVUludCBlY3UsIEFkZHIgZWlwLCBDaGFyKiBi
dWYsIEludCBuX2J1ZikKK3sKICMgIGRlZmluZSBBUFBFTkQoX3N0cikgXAogICAgICAgbiA9IHB1
dFN0cihuLCBuX2J1ZiwgYnVmLCBfc3RyKQogIyAgZGVmaW5lIEFQUEVORF9FU0MoX2NvdW50LF9z
dHIpIFwKQEAgLTE4MjMsMTEgKzE5MDQsMTEgQEAKIAogICAgQm9vbCAga25vd19kaXJpbmZvID0g
RmFsc2U7CiAgICBCb29sICBrbm93X2ZubmFtZSAgPSBWR18oY2xvX3N5bV9vZmZzZXRzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgPyBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkgKGVpcCwgYnVm
X2ZuLCBCVUZfTEVOKQotICAgICAgICAgICAgICAgICAgICAgICAgOiBWR18oZ2V0X2ZubmFtZSkg
KGVpcCwgYnVmX2ZuLCBCVUZfTEVOKTsKLSAgIEJvb2wgIGtub3dfb2JqbmFtZSA9IFZHXyhnZXRf
b2JqbmFtZSkoZWlwLCBidWZfb2JqLCBCVUZfTEVOKTsKLSAgIEJvb2wgIGtub3dfc3JjbG9jICA9
IFZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBl
aXAsIAorICAgICAgICAgICAgICAgICAgICAgICAgPyBWR18oZ2V0X2ZubmFtZV93X29mZnNldF9h
bmRfZWN1KSAoZWN1LCBlaXAsIGJ1Zl9mbiwgQlVGX0xFTikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDogVkdfKGdldF9mbm5hbWVfd2l0aF9lY3UpIChlY3UsIGVpcCwgYnVmX2ZuLCBCVUZfTEVO
KTsKKyAgIEJvb2wgIGtub3dfb2JqbmFtZSA9IFZHXyhnZXRfb2JqbmFtZV93aXRoX2VjdSkoZWN1
LCBlaXAsIGJ1Zl9vYmosIEJVRl9MRU4pOworICAgQm9vbCAga25vd19zcmNsb2MgID0gVkdfKGdl
dF9maWxlbmFtZV9saW5lbnVtX3dpdGhfZWN1KSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVjdSwgZWlwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9zcmNsb2MsICBCVUZf
TEVOLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9kaXJuYW1lLCBCVUZfTEVOLCAm
a25vd19kaXJpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVubyAKSW5kZXg6
IGNvcmVncmluZC9tX2RlYnVnaW5mby9wcml2X3N0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3Jl
Z3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9yYWdlLmgJKHJldmlzaW9uIDExNjQzKQorKysgY29y
ZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODYs
NiArMzg2LDEwIEBACiAgICAgICBmb3JldmVyIHRoZXJlYWZ0ZXIuICBUaGUgLmhhbmRsZSBmaWVs
ZCBpcyBzZXQgYXMgc29vbiBhcyB0aGlzCiAgICAgICBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkLiAq
LwogICAgVUxvbmcgaGFuZGxlOworICAgCisgICAvKiBUaGUgZWNfbGFzdF9lY3Ugd2hlbiB0aGlz
IGluZm8gd2FzIGNyZWF0ZWQgb3IgcmVtb3ZlZCAqLworICAgVUludCBmaXJzdF9lY3U7CisgICBV
SW50IGxhc3RfZWN1OwogCiAgICAvKiBVc2VkIGZvciBkZWJ1Z2dpbmcgb25seSAtIGluZGljYXRl
IHdoYXQgc3R1ZmYgdG8gZHVtcCB3aGlsc3QKICAgICAgIHJlYWRpbmcgc3R1ZmYgaW50byB0aGUg
c2VnaW5mby4gIEFyZSBjb21wdXRlZCBhcyBlYXJseSBpbiB0aGUKSW5kZXg6IGNvcmVncmluZC9t
X3N0YWNrdHJhY2UuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMJKHJl
dmlzaW9uIDExNjQzKQorKysgY29yZWdyaW5kL21fc3RhY2t0cmFjZS5jCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw4ICs0Myw4IEBACiAjaW5jbHVkZSAicHViX2NvcmVfeGFycmF5LmgiCiAjaW5jbHVk
ZSAicHViX2NvcmVfY2xpZW50c3RhdGUuaCIgICAvLyBWR18oY2xpZW50X19kbF9zeXNpbmZvX2lu
dDgwKQogI2luY2x1ZGUgInB1Yl9jb3JlX3RyYW1wb2xpbmUuaCIKKyNpbmNsdWRlICJwdWJfY29y
ZV9leGVjb250ZXh0LmgiICAgIC8vIEVDX0VDVV9DVVJSRU5UCiAKLQogLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0q
LwogLyotLS0gQkVHSU4gcGxhdGZvcm0tZGVwZW5kZW50IHVud2luZGVyIHdvcmtlciBmdW5jdGlv
bnMgICAtLS0qLwpAQCAtODI1LDggKzgyNSw5IEBACiAgICAjZGVmaW5lIEJVRl9MRU4gICA0MDk2
CiAgICAKICAgIHN0YXRpYyBVQ2hhciBidWZbQlVGX0xFTl07CisgICBVSW50IGVjdSA9ICooVUlu
dCopdXVfb3BhcXVlOwogCi0gICBWR18oZGVzY3JpYmVfSVApKGlwLCBidWYsIEJVRl9MRU4pOwor
ICAgVkdfKGRlc2NyaWJlX0lQX3dpdGhfZWN1KShlY3UsIGlwLCBidWYsIEJVRl9MRU4pOwogCiAg
ICBpZiAoVkdfKGNsb194bWwpKSB7CiAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgICAlc1xuIiwg
YnVmKTsKQEAgLTgzOCwxMiArODM5LDE3IEBACiAvKiBQcmludCBhIFN0YWNrVHJhY2UuICovCiB2
b2lkIFZHXyhwcF9TdGFja1RyYWNlKSAoIFN0YWNrVHJhY2UgaXBzLCBVSW50IG5faXBzICkKIHsK
KyAgICBWR18ocHBfU3RhY2tUcmFjZV93aXRoX2VjdSkgKEVDX0VDVV9DVVJSRU5ULCBpcHMsIG5f
aXBzICk7Cit9CisvKiBQcmludCBhIFN0YWNrVHJhY2UuICovCit2b2lkIFZHXyhwcF9TdGFja1Ry
YWNlX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcyApCit7
CiAgICB2Z19hc3NlcnQoIG5faXBzID4gMCApOwogCiAgICBpZiAoVkdfKGNsb194bWwpKQogICAg
ICAgVkdfKHByaW50Zl94bWwpKCIgIDxzdGFjaz5cbiIpOwogCi0gICBWR18oYXBwbHlfU3RhY2tU
cmFjZSkoIHByaW50SXBEZXNjLCBOVUxMLCBpcHMsIG5faXBzICk7CisgICBWR18oYXBwbHlfU3Rh
Y2tUcmFjZSkoIHByaW50SXBEZXNjLCAmZWN1LCBpcHMsIG5faXBzICk7CiAKICAgIGlmIChWR18o
Y2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgPC9zdGFjaz5cbiIpOwpJbmRleDog
Y29yZWdyaW5kL21fbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX21haW4uYwkocmV2
aXNpb24gMTE2NDMpCisrKyBjb3JlZ3JpbmQvbV9tYWluLmMJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw2ICsxMzMsMTAgQEAKICIgICAgLS1sb2ctZmQ9PG51bWJlcj4gICAgICAgICBsb2cgbWVzc2Fn
ZXMgdG8gZmlsZSBkZXNjcmlwdG9yIFsyPXN0ZGVycl1cbiIKICIgICAgLS1sb2ctZmlsZT08Zmls
ZT4gICAgICAgICBsb2cgbWVzc2FnZXMgdG8gPGZpbGU+XG4iCiAiICAgIC0tbG9nLXNvY2tldD1p
cGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2VzIHRvIHNvY2tldCBpcGFkZHI6cG9ydFxuIgorIiAgICAt
LWtlZXAtdW5sb2FkZWQtc3ltcz1ub3x5ZXMgS2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2Rl
IFtub11cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBzdGFj
ayB0cmFjZXMgZm9yIG1lbW9yeSBsZWFrcyB0b1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlblxuIgor
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsY2xvc2UnZCAob3Igc2ltaWxhcilcbiIK
ICJcbiIKICIgIHVzZXIgb3B0aW9ucyBmb3IgVmFsZ3JpbmQgdG9vbHMgdGhhdCByZXBvcnQgZXJy
b3JzOlxuIgogIiAgICAtLXhtbD15ZXMgICAgICAgICAgICAgICAgIGVtaXQgZXJyb3Igb3V0cHV0
IGluIFhNTCAoc29tZSB0b29scyBvbmx5KVxuIgpAQCAtNTI1LDYgKzUyOSw4IEBACiAgICAgICAg
ICAgICAgICAgICAgICAgIFZHXyhjbG9fdmV4X2NvbnRyb2wpLmd1ZXN0X2NoYXNlX3RocmVzaCwg
MCwgOTkpIHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tdmV4LWd1ZXN0LWNo
YXNlLWNvbmQiLAogICAgICAgICAgICAgICAgICAgICAgICBWR18oY2xvX3ZleF9jb250cm9sKS5n
dWVzdF9jaGFzZV9jb25kKSB7fQorICAgICAgZWxzZSBpZiBWR19CT09MX0NMTyhhcmcsICItLWtl
ZXAtdW5sb2FkZWQtc3ltcyIsCisJICAgICAgICAgICAgICAgVkdfKGNsb19rZWVwX3VubG9hZGVk
X3N5bXMpKSB7fQogCiAgICAgICBlbHNlIGlmIFZHX0lOVF9DTE8oYXJnLCAiLS1sb2ctZmQiLCB0
bXBfbG9nX2ZkKSB7CiAgICAgICAgICBsb2dfdG8gPSBWZ0xvZ1RvX0ZkOwpJbmRleDogY29yZWdy
aW5kL21fb3B0aW9ucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX29wdGlvbnMuYwkocmV2
aXNpb24gMTE2NDMpCisrKyBjb3JlZ3JpbmQvbV9vcHRpb25zLmMJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDYgKzk5LDcgQEAKIFZnU21jICBWR18oY2xvX3NtY19jaGVjaykgICAgICA9IFZnX1NtY1N0
YWNrOwogSENoYXIqIFZHXyhjbG9fa2VybmVsX3ZhcmlhbnQpID0gTlVMTDsKIEJvb2wgICBWR18o
Y2xvX2RzeW11dGlsKSAgICAgICA9IEZhbHNlOworQm9vbCAgIFZHXyhjbG9fa2VlcF91bmxvYWRl
ZF9zeW1zKT0gRmFsc2U7CiAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkluZGV4OiBjb3JlZ3JpbmQvcHVi
X2NvcmVfZXhlY29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9wdWJfY29yZV9leGVj
b250ZXh0LmgJKHJldmlzaW9uIDExNjQzKQorKysgY29yZWdyaW5kL3B1Yl9jb3JlX2V4ZWNvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsMTQgQEAKIGV4dGVybgogLypTdGFja1Ry
YWNlKi9BZGRyKiBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkgKCBFeGVDb250ZXh0KiBl
ICk7CiAKKy8vIEtlZXAgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGVjdSwg
c28gdGhhdCBkZWJ1Z2luZm8gY2FuCisvLyBrbm93IGhvdyB0byB0cmFuc2xhdGUgYWRkcmVzc2Vz
IHRoYXQgcmVmZXJlbmNlIGNvZGUgdGhhdCBoYXMgYmVlbiB1bmxvYWRlZAorZXh0ZXJuIFVJbnQg
VkdfKGVjX2xhc3RfZWN1KTsKIAorLy8gU3BlY2lhbCBjb25zdGFudCB0byB1c2UgZm9yIHRoZSAn
ZWN1JyBwYXJhbWV0ZXIgd2hlbiBkZWNvZGluZyBhICdjdXJyZW50JworLy8gc3RhY2sgdHJhY2Us
IHRoaXMgd2lsbCBjYXVzZSBpdCB0byBza2lwIGxvb2tpbmcgYXQgYW55IHVubG9hZGVkIHN5bWJv
bHMuCisjZGVmaW5lIEVDX0VDVV9DVVJSRU5UIDB4RkZGRkZGRkYKKwogI2VuZGlmICAgLy8gX19Q
VUJfQ09SRV9FWEVDT05URVhUX0gKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68205</attachid>
            <date>2012-01-26 19:48:00 +0000</date>
            <delta_ts>2012-01-26 23:22:53 +0000</delta_ts>
            <desc>Refreshed patch against svn r12356</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>28772</size>
            <attacher name="Howard Chu">hyc</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb2NzL3htbC9t
YW51YWwtY29yZS54bWwJKHJldmlzaW9uIDEyMzU2KQorKysgZG9jcy94bWwvbWFudWFsLWNvcmUu
eG1sCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsNiArODYyLDE3IEBACiAgICAgPC9saXN0aXRlbT4K
ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtdW5sb2Fk
ZWQtc3ltcyIgeHJlZmxhYmVsPSItLWtlZXAtdW5sb2FkZWQtc3ltcyI+CisgICAgPHRlcm0+Cisg
ICAgICA8b3B0aW9uPjwhW0NEQVRBWy0ta2VlcC11bmxvYWRlZC1zeW1zPTx5ZXN8bm8+IFtkZWZh
dWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg
IDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlLiBUaGlz
IGFsbG93cyBzdGFjaworICAgICAgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBm
aWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICBkbGNsb3NlJ2QgKG9y
IHNpbWlsYXIpPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorCiA8
L3ZhcmlhYmxlbGlzdD4KIDwhLS0gZW5kIG9mIHhpOmluY2x1ZGUgaW4gdGhlIG1hbnBhZ2UgLS0+
CiAKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCShyZXZpc2lvbiAxMjM1NikKKysrIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYs
OCBAQAogRVhUUkFfRElTVCA9IFwKIAlicmsuc3RkZXJyLmV4cCBicmsudmd0ZXN0IFwKIAljYXBn
ZXQudmd0ZXN0IGNhcGdldC5zdGRlcnIuZXhwIGNhcGdldC5zdGRlcnIuZXhwMiBcCisJZGxjbG9z
ZV9sZWFrLW5vLWtlZXAuc3RkZXJyLmV4cCBkbGNsb3NlX2xlYWstbm8ta2VlcC52Z3Rlc3QgXAor
CWRsY2xvc2VfbGVhay5zdGRlcnIuZXhwIGRsY2xvc2VfbGVhay52Z3Rlc3QgXAogCWxzZnJhbWUx
LnZndGVzdCBsc2ZyYW1lMS5zdGRvdXQuZXhwIGxzZnJhbWUxLnN0ZGVyci5leHAgXAogCWxzZnJh
bWUyLnZndGVzdCBsc2ZyYW1lMi5zdGRvdXQuZXhwIGxzZnJhbWUyLnN0ZGVyci5leHAgXAogCXNp
Z3F1ZXVlLnZndGVzdCBzaWdxdWV1ZS5zdGRlcnIuZXhwIFwKQEAgLTIwLDYgKzIyLDcgQEAKIGNo
ZWNrX1BST0dSQU1TID0gXAogCWJyayBcCiAJY2FwZ2V0IFwKKwlkbGNsb3NlX2xlYWsgZGxjbG9z
ZV9sZWFrX3NvLnNvIFwKIAlsc2ZyYW1lMSBcCiAJbHNmcmFtZTIgXAogCXNpZ3F1ZXVlIFwKQEAg
LTM2LDMgKzM5LDE2IEBACiBzdGFja19zd2l0Y2hfTERBREQgICAgPSAtbHB0aHJlYWQKIHRpbWVy
ZmRfc3lzY2FsbF9MREFERCA9IC1scnQKIAorIyBCdWlsZCBzaGFyZWQgb2JqZWN0IGZvciBkbGNs
b3NlX2xlYWsKKyMjIyBJIGRvbid0IHVzZSBHTlUgQXV0b3Rvb2xzIG9mdGVuLCBzbyBJIGhhdmUg
anVzdCBrbHVkZ2VkIHRvZ2V0aGVyIGJ1aWxkaW5nCisjIyMgVGhlIGxvYWRhYmxlIGxpYnJhcnkg
aGVyZS4uLiBJIGFtIGNlcnRhaW4gc29tZW9uZSBlbHNlIGNvdWxkIGRvIHRoaXMKKyMjIyBjbGVh
bmVyLgorZGxjbG9zZV9sZWFrX1NPVVJDRVMgICAgICAgICAgPSBkbGNsb3NlX2xlYWsuYworZGxj
bG9zZV9sZWFrX0RFUEVOREVOQ0lFUyAgICAgPSBkbGNsb3NlX2xlYWtfc28uc28KK2RsY2xvc2Vf
bGVha19MREFERCAgICAgICAgICAgID0gLWxkbAorZGxjbG9zZV9sZWFrX0xERkxBR1MgICAgICAg
ICAgPSAkKEFNX0ZMQUdfTTMyNjRfUFJJKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1XbCwtcnBhdGgsJCh0b3BfYnVpbGRkaXIpL21lbWNoZWNrL3Rlc3RzCitkbGNsb3NlX2xl
YWtfc29fc29fU09VUkNFUyA9IGRsY2xvc2VfbGVha19zby5jCitkbGNsb3NlX2xlYWtfc29fc29f
Q0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtZnBpYworZGxjbG9zZV9sZWFrX3NvX3NvX0xERkxBR1Mg
ID0gLWZwaWMgJChBTV9GTEFHX00zMjY0X1BSSSkgLXNoYXJlZCAtV2wsLXNvbmFtZSBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsZGxjbG9zZV9sZWFrX3NvLnNvCkluZGV4OiBp
bmNsdWRlL3B1Yl90b29sX29wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29s
X29wdGlvbnMuaAkocmV2aXNpb24gMTIzNTYpCisrKyBpbmNsdWRlL3B1Yl90b29sX29wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQAogLyogQ29udGludWUgc3RhY2sg
dHJhY2VzIGJlbG93IG1haW4oKT8gIERlZmF1bHQ6IE5PICovCiBleHRlcm4gQm9vbCBWR18oY2xv
X3Nob3dfYmVsb3dfbWFpbik7CiAKKy8qIEtlZXAgc3ltYm9scyBmb3IgY29kZSB0aGF0IGlzIHVu
bG9hZGVkIChkbGNsb3NlIG9yIHNpbWlsYXIpIHNvIHRoYXQgc3RhY2sKKyAgIHRyYWNlcyBjYW4g
c3RpbGwgZ2l2ZSBsaW5lL2ZpbGUgaW5mbyBmb3IgcHJldmlvdXNseSBjYXB0dXJlZCBzdGFjayB0
cmFjZXMuCisgICBlLmcuIC4uLiBzaG93aW5nIHdoZXJlIGEgYmxvY2sgd2FzIGFsbG9jYXRlZCBl
LmcuIGxlYWtzIG9mIG9yIGFjY2Vzc2VzIGp1c3QKKyAgIG91dHN0aWRlIGEgYmxvY2suICovCitl
eHRlcm4gQm9vbCBWR18oY2xvX2tlZXBfdW5sb2FkZWRfc3ltcyk7CiAKIC8qIFVzZWQgdG8gZXhw
YW5kIGZpbGUgbmFtZXMuICAib3B0aW9uX25hbWUiIGlzIHRoZSBvcHRpb24gbmFtZSwgZWcuCiAg
ICAiLS1sb2ctZmlsZSIuICAnZm9ybWF0JyBpcyB3aGF0IGZvbGxvd3MsIGVnLiAiY2FjaGVncmlu
ZC5vdXQuJXAiLiAgSW4KSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfc3RhY2t0cmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfc3RhY2t0cmFjZS5oCShyZXZpc2lvbiAxMjM1NikK
KysrIGluY2x1ZGUvcHViX3Rvb2xfc3RhY2t0cmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2
ICs3NSw3IEBACiAKIC8vIFByaW50IGEgU3RhY2tUcmFjZS4KIGV4dGVybiB2b2lkIFZHXyhwcF9T
dGFja1RyYWNlKSAoIFN0YWNrVHJhY2UgaXBzLCBVSW50IG5faXBzICk7CitleHRlcm4gdm9pZCBW
R18ocHBfU3RhY2tUcmFjZV93aXRoX2VjdSkgKCBVSW50IGVjdSwgU3RhY2tUcmFjZSBpcHMsIFVJ
bnQgbl9pcHMgKTsKIAogLy8gR2V0cyBhbmQgaW1tZWRpYXRlbHkgcHJpbnRzIGEgU3RhY2tUcmFj
ZS4gIEp1c3QgYSBiaXQgc2ltcGxlciB0aGFuCiAvLyBjYWxsaW5nIFZHXyhnZXRfU3RhY2tUcmFj
ZSkoKSB0aGVuIFZHXyhwcF9TdGFja1RyYWNlKSgpLgpJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9k
ZWJ1Z2luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29sX2RlYnVnaW5mby5oCShy
ZXZpc2lvbiAxMjM1NikKKysrIGluY2x1ZGUvcHViX3Rvb2xfZGVidWdpbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDkgKzQzLDExIEBACiAgICBzYW1lLCBleGNlcHQgaXQgYXBwZW5kcyAiK04i
IHRvIHN5bWJvbCBuYW1lcyB0byBpbmRpY2F0ZSBvZmZzZXRzLiAgKi8KIGV4dGVybiBCb29sIFZH
XyhnZXRfZmlsZW5hbWUpICggQWRkciBhLCBDaGFyKiBmaWxlbmFtZSwgSW50IG5fZmlsZW5hbWUg
KTsKIGV4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1lKSAgICggQWRkciBhLCBDaGFyKiBmbm5hbWUs
ICAgSW50IG5fZm5uYW1lICAgKTsKLWV4dGVybiBCb29sIFZHXyhnZXRfbGluZW51bSkgICggQWRk
ciBhLCBVSW50KiBsaW5lbnVtICk7CitleHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZV93aXRoX2Vj
dSkgICAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGZubmFtZSwgICBJbnQgbl9mbm5hbWUgICAp
OwogZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoIEFkZHIgYSwgQ2hhciogZm5uYW1lLCAgIEludCBuX2ZubmFtZSAgICk7
CitleHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZV93X29mZnNldF9hbmRfZWN1KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCBVSW50IGVjdSwgQWRkciBhLCBDaGFyKiBmbm5hbWUsICAg
SW50IG5fZm5uYW1lICAgKTsKIAogLyogVGhpcyBvbmUgaXMgdGhlIG1vc3QgZ2VuZXJhbC4gIEl0
IGdpdmVzIGZpbGVuYW1lLCBsaW5lIG51bWJlciBhbmQKICAgIG9wdGlvbmFsbHkgZGlyZWN0b3J5
IG5hbWUuICBmaWxlbmFtZSBhbmQgbGluZW51bSBtYXkgbm90IGJlIE5VTEwuCkBAIC02NCw2ICs2
NiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQ2hhciogZGly
bmFtZSwgIEludCBuX2Rpcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
T1VUKi9Cb29sKiBkaXJuYW1lX2F2YWlsYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLypPVVQqL1VJbnQqIGxpbmVudW0gKTsKK2V4dGVybiBCb29sIFZHXyhnZXRfZmlsZW5h
bWVfbGluZW51bV93aXRoX2VjdSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggVUlu
dCBlY3UsIEFkZHIgYSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9D
aGFyKiBmaWxlbmFtZSwgSW50IG5fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qT1VUKi9DaGFyKiBkaXJuYW1lLCAgSW50IG5fZGlybmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0Jvb2wqIGRpcm5hbWVfYXZhaWxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGluZW51bSApOwogCiAv
KiBTdWNjZWVkcyBvbmx5IGlmIHdlIGZpbmQgZnJvbSBkZWJ1ZyBpbmZvIHRoYXQgJ2EnIGlzIHRo
ZSBhZGRyZXNzIG9mIHRoZQogICAgZmlyc3QgaW5zdHJ1Y3Rpb24gaW4gYSBmdW5jdGlvbiAtLSBh
cyBvcHBvc2VkIHRvIFZHXyhnZXRfZm5uYW1lKSB3aGljaApAQCAtMTE3LDYgKzEyNSw3IEBACiAv
KiBTdWNjZWVkcyBpZiB0aGUgYWRkcmVzcyBpcyB3aXRoaW4gYSBzaGFyZWQgb2JqZWN0IG9yIHRo
ZSBtYWluIGV4ZWN1dGFibGUuCiAgICBJdCBkb2Vzbid0IG1hdHRlciBpZiBkZWJ1ZyBpbmZvIGlz
IHByZXNlbnQgb3Igbm90LiAqLwogZXh0ZXJuIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAgKCBBZGRy
IGEsIENoYXIqIG9iam5hbWUsIEludCBuX29iam5hbWUgKTsKK2V4dGVybiBCb29sIFZHXyhnZXRf
b2JqbmFtZV93aXRoX2VjdSkgKCBVSW50IGVjdSwgQWRkciBhLCBDaGFyKiBvYmpuYW1lLCBJbnQg
bl9vYmpuYW1lICk7CiAKIC8qIFB1dHMgaW50byAnYnVmJyBpbmZvIGFib3V0IHRoZSBjb2RlIGFk
ZHJlc3MgJWVpcDogIHRoZSBhZGRyZXNzLCBmdW5jdGlvbgogICAgbmFtZSAoaWYga25vd24pIGFu
ZCBmaWxlbmFtZS9saW5lIG51bWJlciAoaWYga25vd24pLCBsaWtlIHRoaXM6CkBAIC0xMjYsNiAr
MTM1LDcgQEAKICAgICduX2J1ZicgZ2l2ZXMgbGVuZ3RoIG9mICdidWYnLiAgUmV0dXJucyAnYnVm
Jy4KICovCiBleHRlcm4gQ2hhciogVkdfKGRlc2NyaWJlX0lQKShBZGRyIGVpcCwgQ2hhciogYnVm
LCBJbnQgbl9idWYpOworZXh0ZXJuIENoYXIqIFZHXyhkZXNjcmliZV9JUF93aXRoX2VjdSkoVUlu
dCBlY3UsIEFkZHIgZWlwLCBDaGFyKiBidWYsIEludCBuX2J1Zik7CiAKIAogLyogR2V0IGFuIFhB
cnJheSBvZiBTdGFja0Jsb2NrIHdoaWNoIGRlc2NyaWJlIHRoZSBzdGFjayAoYXV0bykgYmxvY2tz
CkluZGV4OiBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9u
ZS90ZXN0cy9jbWRsaW5lMi5zdGRvdXQuZXhwCShyZXZpc2lvbiAxMjM1NikKKysrIG5vbmUvdGVz
dHMvY21kbGluZTIuc3Rkb3V0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAK
ICAgICAtLWxvZy1mZD08bnVtYmVyPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2Ny
aXB0b3IgWzI9c3RkZXJyXQogICAgIC0tbG9nLWZpbGU9PGZpbGU+ICAgICAgICAgbG9nIG1lc3Nh
Z2VzIHRvIDxmaWxlPgogICAgIC0tbG9nLXNvY2tldD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2Vz
IHRvIHNvY2tldCBpcGFkZHI6cG9ydAorICAgIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBL
ZWVwIHN5bWJvbHMgZm9yIHVubG9hZGVkIGNvZGUgW25vXQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGhpcyBhbGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9yIGNv
ZGUgdGhhdCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxjbG9zZSdk
IChvciBzaW1pbGFyKQogCiAgIHVzZXIgb3B0aW9ucyBmb3IgVmFsZ3JpbmQgdG9vbHMgdGhhdCBy
ZXBvcnQgZXJyb3JzOgogICAgIC0teG1sPXllcyAgICAgICAgICAgICAgICAgZW1pdCBlcnJvciBv
dXRwdXQgaW4gWE1MIChzb21lIHRvb2xzIG9ubHkpCkluZGV4OiBub25lL3Rlc3RzL2NtZGxpbmUx
LnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9uZS90ZXN0cy9jbWRsaW5lMS5zdGRvdXQuZXhw
CShyZXZpc2lvbiAxMjM1NikKKysrIG5vbmUvdGVzdHMvY21kbGluZTEuc3Rkb3V0LmV4cAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAKICAgICAtLWxvZy1mZD08bnVtYmVyPiAgICAg
ICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2NyaXB0b3IgWzI9c3RkZXJyXQogICAgIC0tbG9n
LWZpbGU9PGZpbGU+ICAgICAgICAgbG9nIG1lc3NhZ2VzIHRvIDxmaWxlPgogICAgIC0tbG9nLXNv
Y2tldD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2VzIHRvIHNvY2tldCBpcGFkZHI6cG9ydAorICAg
IC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBLZWVwIHN5bWJvbHMgZm9yIHVubG9hZGVkIGNv
ZGUgW25vXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3Mgc3RhY2sg
dHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGxjbG9zZSdkIChvciBzaW1pbGFyKQogCiAgIHVzZXIgb3B0
aW9ucyBmb3IgVmFsZ3JpbmQgdG9vbHMgdGhhdCByZXBvcnQgZXJyb3JzOgogICAgIC0teG1sPXll
cyAgICAgICAgICAgICAgICAgZW1pdCBlcnJvciBvdXRwdXQgaW4gWE1MIChzb21lIHRvb2xzIG9u
bHkpCkluZGV4OiBjb3JlZ3JpbmQvbV9leGVjb250ZXh0LmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdy
aW5kL21fZXhlY29udGV4dC5jCShyZXZpc2lvbiAxMjM1NikKKysrIGNvcmVncmluZC9tX2V4ZWNv
bnRleHQuYwkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogICAgIDUwMzMxNjUzVUws
ICAgIDEwMDY2MzMxOVVMCiB9OwogCitVSW50IFZHXyhlY19sYXN0X2VjdSkgPSAwOwogCiAvKiBF
YWNoIGVsZW1lbnQgaXMgcHJlc2VudCBpbiBhIGhhc2ggY2hhaW4sIGFuZCBhbHNvIGNvbnRhaW5z
IGEKICAgIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBvZiBndWVzdCBjb2RlIGFkZHJlc3NlcyAodGhl
IHVzZWZ1bCBwYXJ0KS4gKi8KQEAgLTE3MCw3ICsxNzEsNyBAQAogLyogUHJpbnQgYW4gRXhlQ29u
dGV4dC4gKi8KIHZvaWQgVkdfKHBwX0V4ZUNvbnRleHQpICggRXhlQ29udGV4dCogZWMgKQogewot
ICAgVkdfKHBwX1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+bl9pcHMgKTsKKyAgIFZHXyhwcF9T
dGFja1RyYWNlX3dpdGhfZWN1KSggZWMtPmVjdSwgZWMtPmlwcywgZWMtPm5faXBzICk7CiB9CiAK
IApAQCAtNDA1LDYgKzQwNiw3IEBACiAKICAgIHZnX2Fzc2VydChWR18oaXNfcGxhdXNpYmxlX0VD
VSkoZWNfbmV4dF9lY3UpKTsKICAgIG5ld19lYy0+ZWN1ID0gZWNfbmV4dF9lY3U7CisgICBWR18o
ZWNfbGFzdF9lY3UpID0gZWNfbmV4dF9lY3U7CiAgICBlY19uZXh0X2VjdSArPSA0OwogICAgaWYg
KGVjX25leHRfZWN1ID09IDApIHsKICAgICAgIC8qIFVyci4gIE5vdyB3ZSdyZSBob3NlZDsgd2Ug
ZW1pdHRlZCAyXjMwIEV4ZUNvbnRleHRzIGFscmVhZHkKSW5kZXg6IGNvcmVncmluZC9tX2RlYnVn
aW5mby9kZWJ1Z2luZm8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVi
dWdpbmZvLmMJKHJldmlzaW9uIDEyMzU2KQorKysgY29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVn
aW5mby5jCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAicHViX2Nv
cmVfdGhyZWFkc3RhdGUuaCIKICNpbmNsdWRlICJwdWJfY29yZV9kZWJ1Z2luZm8uaCIgIC8qIHNl
bGYgKi8KICNpbmNsdWRlICJwdWJfY29yZV9kZW1hbmdsZS5oIgorI2luY2x1ZGUgInB1Yl9jb3Jl
X2V4ZWNvbnRleHQuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJjYmFzZS5oIgogI2luY2x1ZGUg
InB1Yl9jb3JlX2xpYmNhc3NlcnQuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJjcHJpbnQuaCIK
QEAgLTExMSw2ICsxMTIsOSBAQAogICAgbGlua2VkIGxpc3Qgb2YgRGVidWdJbmZvcy4gKi8KIHN0
YXRpYyBEZWJ1Z0luZm8qIGRlYnVnSW5mb19saXN0ID0gTlVMTDsKIAorLyogS2VlcCBhcm91bmQg
b2xkIGRlYnVnIGluZm8gc28gd2UgY2FuIGhhdmUgYSBjaGFuY2Ugb2YgZGVjb2Rpbmcgc3RhY2sg
dHJhY2VzCisgKiAoZS5nLiBmb3IgbGVhayBjaGVja3MpIGV2ZW4gYWZ0ZXIgYSBzaGFyZWQgbGli
cmFyeSBoYXMgYmVlbiB1bmxvYWRlZC4gKi8KK3N0YXRpYyBEZWJ1Z0luZm8qIHVubG9hZGVkRGVi
dWdJbmZvX2xpc3QgPSBOVUxMOwogCiAvKiBGaW5kICdkaScgaW4gdGhlIGRlYnVnSW5mb19saXN0
IGFuZCBtb3ZlIGl0IG9uZSBzdGVwIGNsb3NlciB0aGUgdGhlCiAgICBmcm9udCBvZiB0aGUgbGlz
dCwgc28gYXMgdG8gbWFrZSBzdWJzZXF1ZW50IHNlYXJjaGVzIGZvciBpdApAQCAtMjg3LDcgKzI5
MSw3IEBACiB9CiAKIAotLyogJ3NpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0luZm9fbGlzdC4gIEZp
bmQgaXQsIHJlbW92ZSBpdCBmcm9tIHRoZQorLyogJ2RpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0lu
Zm9fbGlzdC4gIEZpbmQgaXQsIHJlbW92ZSBpdCBmcm9tIHRoZQogICAgbGlzdCwgbm90aWZ5IG1f
cmVkaXIgdGhhdCB0aGlzIGhhcyBoYXBwZW5lZCwgYW5kIGZyZWUgYWxsIHN0b3JhZ2UKICAgIHJl
YWNoYWJsZSBmcm9tIGl0LgogKi8KQEAgLTMxNCw3ICszMTgsMTcgQEAKICAgICAgICAgICpwcmV2
X25leHRfcHRyID0gY3Vyci0+bmV4dDsKICAgICAgICAgIGlmIChjdXJyLT5oYXZlX2RpbmZvKQog
ICAgICAgICAgICAgVkdfKHJlZGlyX25vdGlmeV9kZWxldGVfRGVidWdJbmZvKSggY3VyciApOwot
ICAgICAgICAgZnJlZV9EZWJ1Z0luZm8oY3Vycik7CisgICAgICAgICBpZiAoVkdfKGNsb19rZWVw
X3VubG9hZGVkX3N5bXMpICYmIAorICAgICAgICAgICAgIGN1cnItPmZpcnN0X2VjdSA8IFZHXyhl
Y19sYXN0X2VjdSkpIHsKKyAgICAgICAgICAgIC8qIE9ubHkga2VlcCB0aGUgRGVidWdJbmZvIGFy
b3VuZCBpZiB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaAorICAgICAgICAgICAgICAgcmVxdWVzdGVk
IGl0LCBhbmQgdGhlcmUgd2FzIGF0IGxlYXN0IDEgZXhlIGNvbnRleHQgdGFrZW4gd2hpbGUKKyAg
ICAgICAgICAgICAgIHRoaXMgRGVidWdJbmZvIHdhcyBsb2FkZWQuICovCisgICAgICAgICAgICBj
dXJyLT5uZXh0ID0gdW5sb2FkZWREZWJ1Z0luZm9fbGlzdDsKKyAgICAgICAgICAgIHVubG9hZGVk
RGVidWdJbmZvX2xpc3QgPSBjdXJyOworICAgICAgICAgICAgY3Vyci0+bGFzdF9lY3UgPSBWR18o
ZWNfbGFzdF9lY3UpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyZWVfRGVidWdJ
bmZvKGN1cnIpOworICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgICAg
cHJldl9uZXh0X3B0ciA9ICZjdXJyLT5uZXh0OwpAQCAtNDc3LDYgKzQ5MSw4IEBACiAgICAgICB2
Z19hc3NlcnQoZGkpOwogICAgICAgZGktPm5leHQgPSBkZWJ1Z0luZm9fbGlzdDsKICAgICAgIGRl
YnVnSW5mb19saXN0ID0gZGk7CisgICAgICBkaS0+Zmlyc3RfZWN1ID0gVkdfKGVjX2xhc3RfZWN1
KTsKKyAgICAgIGRpLT5sYXN0X2VjdSA9IEVDX0VDVV9DVVJSRU5UOwogICAgfQogICAgcmV0dXJu
IGRpOwogfQpAQCAtNTU2LDYgKzU3Miw3IEBACiAgICAgICBjcmVhdGVkIGFuZCBkZXN0cm95ZWQg
b24gZGVtYW5kLCBhbmQgZWFjaCBvbmUgaXMgdHJlYXRlZCBtb3JlIG9yCiAgICAgICBsZXNzIGlu
ZGVwZW5kZW50bHkuICovCiAgICB2Z19hc3NlcnQoZGVidWdJbmZvX2xpc3QgPT0gTlVMTCk7Cisg
ICB2Z19hc3NlcnQodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9PSBOVUxMKTsKIAogICAgLyogZmx1
c2ggdGhlIENGSSBmYXN0IHF1ZXJ5IGNhY2hlLiAqLwogICAgY2ZzaV9jYWNoZV9faW52YWxpZGF0
ZSgpOwpAQCAtMTI1OSwxMCArMTI3NiwxMCBAQAogLyotLS0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwogLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIFZH
XyhkaV9kaXNjYXJkX0FMTF9kZWJ1Z2luZm8pKCB2b2lkICkKK3N0YXRpYyB2b2lkIGRpc2NhcmRf
QUxMX2RlYnVnaW5mb19pbl9saXN0KERlYnVnSW5mbyogbGlzdCkKIHsKICAgIERlYnVnSW5mbyAq
ZGksICpkaTI7Ci0gICBkaSA9IGRlYnVnSW5mb19saXN0OworICAgZGkgPSBsaXN0OwogICAgd2hp
bGUgKGRpKSB7CiAgICAgICBkaTIgPSBkaS0+bmV4dDsKICAgICAgIFZHXyhwcmludGYpKCJYWFgg
cm0gJXBcbiIsIGRpKTsKQEAgLTEyNzEsMTkgKzEyODgsMjIgQEAKICAgIH0KIH0KIAorc3RhdGlj
IGlubGluZSBCb29sIGVjdV9pbl9kaV9yYW5nZShVSW50IGVjdSwgRGVidWdJbmZvKiBkaSkKK3sg
ICAvKiBmaXJzdF9lY3UgaXMgYWN0dWFsbHkgdGhlIGxhc3QgZWN1ICMgdGhhdCB3YXMgYWxsb2Nh
dGVkIGJlZm9yZSB0aGlzCisgICAgICogRGVidWdJbmZvIHdhcyBsb2FkZWQsIGxhc3RfZWN1IGlz
IHRoYXQgbGFzdCBlY3UgdGhhdCB3YXMgYWxsb2NhdGVkCisgICAgICogYmVmb3JlIHRoaXMgRGVi
dWdJbmZvIHdhcyB1bmxvYWRlZCBvciAweEZGRkZGRkZGIChha2EgRUNfRUNVX0NVUlJFTlQpCisg
ICAgICogaWYgdGhpcyBEZWJ1Z0luZm8gaGFzIG5vdCBiZWVuIHVubG9hZGVkIHlldC4gKi8KKyAg
ICByZXR1cm4gKGVjdSA+IGRpLT5maXJzdF9lY3UpICYmIChlY3UgPD0gZGktPmxhc3RfZWN1KTsK
K30KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwotLyotLS0gVXNlIG9mIHN5bWJvbCB0YWJsZSAmIGxvY2F0aW9uIGluZm8g
dG8gY3JlYXRlICAgICAgICAtLS0qLwotLyotLS0gcGxhdXNpYmxlLWxvb2tpbmcgc3RhY2sgZHVt
cHMuICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBWR18oZGlfZGlz
Y2FyZF9BTExfZGVidWdpbmZvKSggdm9pZCApCit7CisgICAgZGlzY2FyZF9BTExfZGVidWdpbmZv
X2luX2xpc3QoZGVidWdJbmZvX2xpc3QpOworICAgIGRpc2NhcmRfQUxMX2RlYnVnaW5mb19pbl9s
aXN0KHVubG9hZGVkRGVidWdJbmZvX2xpc3QpOworfQogCi0vKiBTZWFyY2ggYWxsIHN5bXRhYnMg
dGhhdCB3ZSBrbm93IGFib3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0Ci0gICAqcGRp
IHRvIHRoZSByZWxldmFudCBEZWJ1Z0luZm8sIGFuZCAqc3ltbm8gdG8gdGhlIHN5bXRhYiBlbnRy
eQotICAgKm51bWJlciB3aXRoaW4gdGhhdC4gIElmIG5vdCBmb3VuZCwgKnBzaSBpcyBzZXQgdG8g
TlVMTC4KLSAgIElmIGZpbmRUZXh0PT1UcnVlLCAgb25seSB0ZXh0IHN5bWJvbHMgYXJlIHNlYXJj
aGVkIGZvci4KLSAgIElmIGZpbmRUZXh0PT1GYWxzZSwgb25seSBkYXRhIHN5bWJvbHMgYXJlIHNl
YXJjaGVkIGZvci4KLSovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxsX3N5bXRhYnMgKCBBZGRyIHB0
ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKK3N0YXRpYyB2b2lkIHNlYXJjaF9vbmVfZGVidWdJ
bmZvX2xpc3QgKERlYnVnSW5mbyogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVJbnQgZWN1LCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogc3ltbm8sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIG1hdGNoX2FueXdoZXJlX2luX3N5
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgZmluZFRleHQgKQpAQCAt
MTI5Miw3ICsxMzEyLDEwIEBACiAgICBEZWJ1Z0luZm8qIGRpOwogICAgQm9vbCAgICAgICBpblJh
bmdlOwogCi0gICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGkt
Pm5leHQpIHsKKyAgIGZvciAoZGkgPSBsaXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7
CisgICAgICBpZiAoICEgZWN1X2luX2RpX3JhbmdlKCBlY3UsIGRpKSApIHsKKyAgICAgICAgICBj
b250aW51ZTsKKyAgICAgIH0KIAogICAgICAgaWYgKGZpbmRUZXh0KSB7CiAgICAgICAgICAvKiBD
b25zaWRlciBhbnkgc3ltYm9sIGluIHRoZSByLXggbWFwcGVkIGFyZWEgdG8gYmUgdGV4dC4KQEAg
LTEzNDMsMTcgKzEzNjYsNDYgQEAKICAgICpwZGkgPSBOVUxMOwogfQogCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0t
LSBVc2Ugb2Ygc3ltYm9sIHRhYmxlICYgbG9jYXRpb24gaW5mbyB0byBjcmVhdGUgICAgICAgIC0t
LSovCisvKi0tLSBwbGF1c2libGUtbG9va2luZyBzdGFjayBkdW1wcy4gICAgICAgICAgICAgICAg
ICAgICAgIC0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIFNlYXJjaCBhbGwgc3ltdGFicyB0aGF0IHdlIGtu
b3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkgdG8gdGhlIHJl
bGV2YW50IERlYnVnSW5mbywgYW5kICpzeW1ubyB0byB0aGUgc3ltdGFiIGVudHJ5CisgICAqbnVt
YmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLgorICAg
SWYgZmluZFRleHQ9PVRydWUsICBvbmx5IHRleHQgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgor
ICAgSWYgZmluZFRleHQ9PUZhbHNlLCBvbmx5IGRhdGEgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9y
LgorKi8KK3N0YXRpYyB2b2lkIHNlYXJjaF9hbGxfc3ltdGFicyAoIFVJbnQgZWN1LCBBZGRyIHB0
ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKk9VVCovV29yZCogc3ltbm8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCb29sIG1hdGNoX2FueXdoZXJlX2luX3N5bSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJvb2wgZmluZFRleHQgKQoreworICAgc2VhcmNoX29uZV9kZWJ1Z0lu
Zm9fbGlzdChkZWJ1Z0luZm9fbGlzdCwgZWN1LCBwdHIsIHBkaSwgc3ltbm8sCisgICAgICAgICAg
IG1hdGNoX2FueXdoZXJlX2luX3N5bSwgZmluZFRleHQpOworICAgLyogT25seSBzZWFyY2ggdGhl
IGxpc3Qgb2YgdW5sb2FkZWQgc3ltcyBpZiB3ZSBoYXZlbid0IGZvdW5kIHNvbWV0aGluZywKKyAg
ICAqIGFuZCB3ZSBhcmVuJ3QgZGVjb2RpbmcgYSAnY3VycmVudCcgc3RhY2t0cmFjZS4gKi8KKyAg
IGlmKCEqcGRpICYmIGVjdSAhPSBFQ19FQ1VfQ1VSUkVOVCkKKyAgICAgICBzZWFyY2hfb25lX2Rl
YnVnSW5mb19saXN0KHVubG9hZGVkRGVidWdJbmZvX2xpc3QsIGVjdSwgcHRyLCBwZGksIHN5bW5v
LAorICAgICAgICAgICAgICAgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCk7Cit9CisK
IC8qIFNlYXJjaCBhbGwgbG9jdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4g
IElmIGZvdW5kLCBzZXQKICAgICpwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICps
b2NubyB0byB0aGUgbG9jdGFiIGVudHJ5CiAgICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90
IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLiAqLwotc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9s
b2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25vICkKK3N0YXRp
YyB2b2lkIHNlYXJjaF9hbGxfbG9jdGFic19vbmVfbGlzdCAoRGVidWdJbmZvKiBsaXN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50IGVjdSwgQWRkciBwdHIs
IC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9jbm8gKQogewogICAgV29yZCAgICAg
ICBsbm87CiAgICBEZWJ1Z0luZm8qIGRpOwotICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBk
aSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7Ci0gICAgICBpZiAoZGktPnRleHRfcHJlc2VudAor
ICAgZm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlm
ICggISBlY3VfaW5fZGlfcmFuZ2UoIGVjdSwgZGkpICkgeworICAgICAgICAgY29udGludWU7Cisg
ICAgICB9CisKKyAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50
ZXh0X3NpemUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBwdHIgCiAgICAgICAg
ICAgJiYgcHRyIDwgZGktPnRleHRfYXZtYSArIGRpLT50ZXh0X3NpemUpIHsKQEAgLTEzNjgsNiAr
MTQyMCwxOCBAQAogICAgKnBkaSA9IE5VTEw7CiB9CiAKKy8qIFNlYXJjaCBhbGwgbG9jdGFicyB0
aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkg
dG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICpsb2NubyB0byB0aGUgbG9jdGFiIGVudHJ5
CisgICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBO
VUxMLiAqLworc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzICggVUludCBlY3UsIEFkZHIg
cHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBsb2NubyApCit7CisgICAgc2VhcmNoX2FsbF9s
b2N0YWJzX29uZV9saXN0KGRlYnVnSW5mb19saXN0LCBlY3UsIHB0ciwgcGRpLCBsb2NubyApOwor
ICAgIC8qIE9ubHkgc2VhcmNoIHRoZSBsaXN0IG9mIHVubG9hZGVkIHN5bXMgaWYgd2UgaGF2ZW4n
dCBmb3VuZCBzb21ldGhpbmcsCisgICAgICogYW5kIHdlIGFyZW4ndCBkZWNvZGluZyBhICdjdXJy
ZW50JyBzdGFja3RyYWNlLiAqLworICAgIGlmKCEqcGRpICYmIGVjdSAhPSBFQ19FQ1VfQ1VSUkVO
VCkKKyAgICAgICAgc2VhcmNoX2FsbF9sb2N0YWJzX29uZV9saXN0KHVubG9hZGVkRGVidWdJbmZv
X2xpc3QsIGVjdSwgcHRyLCBwZGksIGxvY25vICk7Cit9CiAKIC8qIFRoZSB3aG9sZSBwb2ludCBv
ZiB0aGlzIHdob2xlIGJpZyBkZWFsOiBtYXAgYSBjb2RlIGFkZHJlc3MgdG8gYQogICAgcGxhdXNp
YmxlIHN5bWJvbCBuYW1lLiAgUmV0dXJucyBGYWxzZSBpZiBubyBpZGVhOyBvdGhlcndpc2UgVHJ1
ZS4KQEAgLTEzNzksNyArMTQ0Myw3IEBACiBzdGF0aWMKIEJvb2wgZ2V0X3N5bV9uYW1lICggQm9v
bCBkb19jeHhfZGVtYW5nbGluZywgQm9vbCBkb196X2RlbWFuZ2xpbmcsCiAgICAgICAgICAgICAg
ICAgICAgIEJvb2wgZG9fYmVsb3dfbWFpbl9yZW5hbWluZywKLSAgICAgICAgICAgICAgICAgICAg
QWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmLAorICAgICAgICAgICAgICAgICAgICBVSW50IGVj
dSwgQWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmLAogICAgICAgICAgICAgICAgICAgICBCb29s
IG1hdGNoX2FueXdoZXJlX2luX3N5bSwgQm9vbCBzaG93X29mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgQm9vbCBmaW5kVGV4dCwgLypPVVQqL1B0cmRpZmZUKiBvZmZzZXRQICkKIHsKQEAgLTEz
ODcsNyArMTQ1MSw3IEBACiAgICBXb3JkICAgICAgIHNubzsKICAgIFB0cmRpZmZUICAgb2Zmc2V0
OwogCi0gICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBhLCAmZGksICZzbm8sIG1hdGNoX2FueXdoZXJl
X2luX3N5bSwgZmluZFRleHQgKTsKKyAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIGVjdSwgYSwgJmRp
LCAmc25vLCBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRUZXh0ICk7CiAgICBpZiAoZGkgPT0g
TlVMTCkgCiAgICAgICByZXR1cm4gRmFsc2U7CiAKQEAgLTE0MzcsNyArMTUwMSw3IEBACiB7CiAg
ICBEZWJ1Z0luZm8qIHNpOwogICAgV29yZCAgICAgICBzbm87Ci0gICBzZWFyY2hfYWxsX3N5bXRh
YnMgKCBndWVzdF9jb2RlX2FkZHIsIAorICAgc2VhcmNoX2FsbF9zeW10YWJzICggRUNfRUNVX0NV
UlJFTlQsIGd1ZXN0X2NvZGVfYWRkciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAmc2ksICZz
bm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4q
LywKICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUvKmNvbnNpZGVyIHRleHQgc3ltYm9scyBv
bmx5Ki8gKTsKQEAgLTE0NTEsOSArMTUxNSwxMyBAQAogICAgbWF0Y2ggYW55d2hlcmUgaW4gZnVu
Y3Rpb24sIGJ1dCBkb24ndCBzaG93IG9mZnNldHMuICovCiBCb29sIFZHXyhnZXRfZm5uYW1lKSAo
IEFkZHIgYSwgQ2hhciogYnVmLCBJbnQgbmJ1ZiApCiB7CisgICAgcmV0dXJuIFZHXyhnZXRfZm5u
YW1lX3dpdGhfZWN1KSAoRUNfRUNVX0NVUlJFTlQsIGEsIGJ1ZiwgbmJ1Zik7Cit9CitCb29sIFZH
XyhnZXRfZm5uYW1lX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGJ1ZiwgSW50
IG5idWYgKQorewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9UcnVl
LCAvKlotZGVtYW5nbGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1t
YWluLXJlbmFtaW5nKi9UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwgbmJ1
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlY3UsIGEsIGJ1ZiwgbmJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0xNDYyLDExICsxNTMwLDE2IEBA
CiAKIC8qIFRoaXMgaXMgYXZhaWxhYmxlIHRvIHRvb2xzLi4uIGFsd2F5cyBkZW1hbmdsZSBDKysg
bmFtZXMsCiAgICBtYXRjaCBhbnl3aGVyZSBpbiBmdW5jdGlvbiwgYW5kIHNob3cgb2Zmc2V0IGlm
IG5vbnplcm8uICovCisKIEJvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpICggQWRkciBhLCBD
aGFyKiBidWYsIEludCBuYnVmICkKIHsKKyAgICByZXR1cm4gVkdfKGdldF9mbm5hbWVfd19vZmZz
ZXRfYW5kX2VjdSkgKCBFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmICk7Cit9CitCb29sIFZH
XyhnZXRfZm5uYW1lX3dfb2Zmc2V0X2FuZF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciog
YnVmLCBJbnQgbmJ1ZiApCit7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5n
bGUqL1RydWUsIC8qWi1kZW1hbmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAv
KmJlbG93LW1haW4tcmVuYW1pbmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwg
YnVmLCBuYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVjdSwgYSwgYnVmLCBuYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9UcnVlLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovVHJ1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKnRleHQgc3ltcyBvbmx5Ki9UcnVlLApAQCAtMTQ4MCw3ICsxNTUz
LDcgQEAKIHsKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwg
LypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFp
bi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsIG5idWYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgRUNfRUNVX0NVUlJFTlQsIGEsIGJ1ZiwgbmJ1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1biovRmFsc2Us
IAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKnRleHQgc3ltcyBvbmx5Ki9UcnVlLApAQCAtMTQ5NCw3ICsx
NTY3LDcgQEAKIHsKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovRmFs
c2UsIC8qWi1kZW1hbmdsZSovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxv
dy1tYWluLXJlbmFtaW5nKi9GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYs
IG5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgRUNfRUNVX0NVUlJFTlQsIGEsIGJ1Ziwg
bmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1biov
VHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0xNTA4
LDcgKzE1ODEsNyBAQAogewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xl
Ki9GYWxzZSwgLypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8q
YmVsb3ctbWFpbi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBi
dWYsIG5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgRUNfRUNVX0NVUlJFTlQsIGEsIGJ1
ZiwgbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1
biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0x
NTY2LDcgKzE2MzksNyBAQAogICAgdmdfYXNzZXJ0KG5fZG5hbWUgPiAxKTsKICAgIG9rID0gZ2V0
X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5nbGUqL0ZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcqL0ZhbHNlLAotICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhX2FkZHIsIGRuYW1lLCBuX2RuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVOVCwgZGF0YV9hZGRyLCBkbmFtZSwgbl9kbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9zeW0qL1RydWUsIAog
ICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8qZGF0YSBzeW1zIG9ubHkgcGxlYXNlKi9GYWxzZSwKQEAgLTE1ODEsNiAr
MTY1NCw5IEBACiAgICBleGVjdXRhYmxlLiAgUmV0dXJucyBGYWxzZSBpZiBubyBpZGVhOyBvdGhl
cndpc2UgVHJ1ZS4gIERvZXNuJ3QKICAgIHJlcXVpcmUgZGVidWcgaW5mby4gIENhbGxlciBzdXBw
bGllcyBidWYgYW5kIG5idWYuICovCiBCb29sIFZHXyhnZXRfb2JqbmFtZSkgKCBBZGRyIGEsIENo
YXIqIGJ1ZiwgSW50IG5idWYgKQorICAgcmV0dXJuIFZHXyhnZXRfb2JqbmFtZV93aXRoX2VjdSkg
KEVDX0VDVV9DVVJSRU5ULCBhLCBidWYsIG5idWYpOworfQorQm9vbCBWR18oZ2V0X29iam5hbWVf
d2l0aF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciogYnVmLCBJbnQgbmJ1ZiApCiB7CiAg
ICBEZWJ1Z0luZm8qIGRpOwogICAgY29uc3QgTlNlZ21lbnQgKnNlZzsKQEAgLTE1ODksNiArMTY2
NSwxMCBAQAogICAgLyogTG9vayBpbiB0aGUgZGVidWdJbmZvX2xpc3QgdG8gZmluZCB0aGUgbmFt
ZS4gIEluIG1vc3QgY2FzZXMgd2UKICAgICAgIGV4cGVjdCB0aGlzIHRvIHByb2R1Y2UgYSByZXN1
bHQuICovCiAgICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGkt
Pm5leHQpIHsKKyAgICAgIGlmICggISBlY3VfaW5fZGlfcmFuZ2UoIGVjdSwgZGkpICkgeworICAg
ICAgICAgY29udGludWU7CisgICAgICB9CisKICAgICAgIGlmIChkaS0+dGV4dF9wcmVzZW50CiAg
ICAgICAgICAgJiYgZGktPnRleHRfc2l6ZSA+IDAKICAgICAgICAgICAmJiBkaS0+dGV4dF9hdm1h
IDw9IGEgCkBAIC0xNjM2LDI2ICsxNzE2LDEzIEBACiB7CiAgICBEZWJ1Z0luZm8qIHNpOwogICAg
V29yZCAgICAgICBsb2NubzsKLSAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIGEsICZzaSwgJmxvY25v
ICk7CisgICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBFQ19FQ1VfQ1VSUkVOVCwgYSwgJnNpLCAmbG9j
bm8gKTsKICAgIGlmIChzaSA9PSBOVUxMKSAKICAgICAgIHJldHVybiBGYWxzZTsKICAgIFZHXyhz
dHJuY3B5X3NhZmVseSkoZmlsZW5hbWUsIHNpLT5sb2N0YWJbbG9jbm9dLmZpbGVuYW1lLCBuX2Zp
bGVuYW1lKTsKICAgIHJldHVybiBUcnVlOwogfQogCi0vKiBNYXAgYSBjb2RlIGFkZHJlc3MgdG8g
YSBsaW5lIG51bWJlci4gIFJldHVybnMgVHJ1ZSBpZiBzdWNjZXNzZnVsLiAqLwotQm9vbCBWR18o
Z2V0X2xpbmVudW0pKCBBZGRyIGEsIFVJbnQqIGxpbmVubyApCi17Ci0gICBEZWJ1Z0luZm8qIHNp
OwotICAgV29yZCAgICAgICBsb2NubzsKLSAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIGEsICZzaSwg
JmxvY25vICk7Ci0gICBpZiAoc2kgPT0gTlVMTCkgCi0gICAgICByZXR1cm4gRmFsc2U7Ci0gICAq
bGluZW5vID0gc2ktPmxvY3RhYltsb2Nub10ubGluZW5vOwotCi0gICByZXR1cm4gVHJ1ZTsKLX0K
LQogLyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGEgZmlsZW5hbWUvbGluZSBudW1iZXIvZGlyIG5h
bWUgaW5mby4KICAgIFNlZSBwcm90b3R5cGUgZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGJl
aGF2aW91ci4KICovCkBAIC0xNjY1LDYgKzE3MzIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qT1VUKi9Cb29sKiBkaXJuYW1lX2F2YWlsYWJsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9VSW50KiBsaW5lbm8gKQogeworICAgIHJldHVy
biBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW1fd2l0aF9lY3UpIChFQ19FQ1VfQ1VSUkVOVCwgYSwK
KyAgICAgICAgICAgIGZpbGVuYW1lLCBuX2ZpbGVuYW1lLCBkaXJuYW1lLCBuX2Rpcm5hbWUsIGRp
cm5hbWVfYXZhaWxhYmxlLCBsaW5lbm8pOworfQorQm9vbCBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVu
dW1fd2l0aF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKk9VVCovQ2hhciogZmlsZW5hbWUsIEludCBuX2ZpbGVuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0NoYXIqIGRpcm5hbWUsICBJbnQgbl9k
aXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0Jvb2wqIGRp
cm5hbWVfYXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQq
L1VJbnQqIGxpbmVubyApCit7CiAgICBEZWJ1Z0luZm8qIHNpOwogICAgV29yZCAgICAgICBsb2Nu
bzsKIApAQCAtMTY3Miw3ICsxNzQ4LDcgQEAKICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAg
ICAgKGRpcm5hbWUgIT0gTlVMTCAmJiBkaXJuYW1lX2F2YWlsYWJsZSAhPSBOVUxMKSApOwogCi0g
ICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyApOworICAgc2VhcmNoX2FsbF9s
b2N0YWJzICggZWN1LCBhLCAmc2ksICZsb2NubyApOwogICAgaWYgKHNpID09IE5VTEwpIHsKICAg
ICAgIGlmIChkaXJuYW1lX2F2YWlsYWJsZSkgewogICAgICAgICAgKmRpcm5hbWVfYXZhaWxhYmxl
ID0gRmFsc2U7CkBAIC0xODE5LDYgKzE4OTUsMTAgQEAKIAogQ2hhciogVkdfKGRlc2NyaWJlX0lQ
KShBZGRyIGVpcCwgQ2hhciogYnVmLCBJbnQgbl9idWYpCiB7CisgICAgcmV0dXJuIFZHXyhkZXNj
cmliZV9JUF93aXRoX2VjdSkgKEVDX0VDVV9DVVJSRU5ULCBlaXAsIGJ1Ziwgbl9idWYpOworfQor
Q2hhciogVkdfKGRlc2NyaWJlX0lQX3dpdGhfZWN1KShVSW50IGVjdSwgQWRkciBlaXAsIENoYXIq
IGJ1ZiwgSW50IG5fYnVmKQorewogIyAgZGVmaW5lIEFQUEVORChfc3RyKSBcCiAgICAgICBuID0g
cHV0U3RyKG4sIG5fYnVmLCBidWYsIF9zdHIpCiAjICBkZWZpbmUgQVBQRU5EX0VTQyhfY291bnQs
X3N0cikgXApAQCAtMTgzNywxMSArMTkxNywxMSBAQAogCiAgICBCb29sICBrbm93X2RpcmluZm8g
PSBGYWxzZTsKICAgIEJvb2wgIGtub3dfZm5uYW1lICA9IFZHXyhjbG9fc3ltX29mZnNldHMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICA/IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KSAoZWlwLCBi
dWZfZm4sIEJVRl9MRU4pCi0gICAgICAgICAgICAgICAgICAgICAgICA6IFZHXyhnZXRfZm5uYW1l
KSAoZWlwLCBidWZfZm4sIEJVRl9MRU4pOwotICAgQm9vbCAga25vd19vYmpuYW1lID0gVkdfKGdl
dF9vYmpuYW1lKShlaXAsIGJ1Zl9vYmosIEJVRl9MRU4pOwotICAgQm9vbCAga25vd19zcmNsb2Mg
ID0gVkdfKGdldF9maWxlbmFtZV9saW5lbnVtKSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVpcCwgCisgICAgICAgICAgICAgICAgICAgICAgICA/IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0
X2FuZF9lY3UpIChlY3UsIGVpcCwgYnVmX2ZuLCBCVUZfTEVOKQorICAgICAgICAgICAgICAgICAg
ICAgICAgOiBWR18oZ2V0X2ZubmFtZV93aXRoX2VjdSkgKGVjdSwgZWlwLCBidWZfZm4sIEJVRl9M
RU4pOworICAgQm9vbCAga25vd19vYmpuYW1lID0gVkdfKGdldF9vYmpuYW1lX3dpdGhfZWN1KShl
Y3UsIGVpcCwgYnVmX29iaiwgQlVGX0xFTik7CisgICBCb29sICBrbm93X3NyY2xvYyAgPSBWR18o
Z2V0X2ZpbGVuYW1lX2xpbmVudW1fd2l0aF9lY3UpKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWN1LCBlaXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX3NyY2xvYywgIEJV
Rl9MRU4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2Rpcm5hbWUsIEJVRl9MRU4s
ICZrbm93X2RpcmluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGluZW5vIApJbmRl
eDogY29yZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3RvcmFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNv
cmVncmluZC9tX2RlYnVnaW5mby9wcml2X3N0b3JhZ2UuaAkocmV2aXNpb24gMTIzNTYpCisrKyBj
b3JlZ3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
Miw2ICs0ODIsMTAgQEAKICAgICAgIGZvcmV2ZXIgdGhlcmVhZnRlci4gIFRoZSAuaGFuZGxlIGZp
ZWxkIGlzIHNldCBhcyBzb29uIGFzIHRoaXMKICAgICAgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQu
ICovCiAgICBVTG9uZyBoYW5kbGU7CisgICAKKyAgIC8qIFRoZSBlY19sYXN0X2VjdSB3aGVuIHRo
aXMgaW5mbyB3YXMgY3JlYXRlZCBvciByZW1vdmVkICovCisgICBVSW50IGZpcnN0X2VjdTsKKyAg
IFVJbnQgbGFzdF9lY3U7CiAKICAgIC8qIFVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5IC0gaW5kaWNh
dGUgd2hhdCBzdHVmZiB0byBkdW1wIHdoaWxzdAogICAgICAgcmVhZGluZyBzdHVmZiBpbnRvIHRo
ZSBzZWdpbmZvLiAgQXJlIGNvbXB1dGVkIGFzIGVhcmx5IGluIHRoZQpJbmRleDogY29yZWdyaW5k
L21fc3RhY2t0cmFjZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3N0YWNrdHJhY2UuYwko
cmV2aXNpb24gMTIzNTYpCisrKyBjb3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDggKzQ0LDggQEAKICNpbmNsdWRlICJwdWJfY29yZV94YXJyYXkuaCIKICNpbmNs
dWRlICJwdWJfY29yZV9jbGllbnRzdGF0ZS5oIiAgIC8vIFZHXyhjbGllbnRfX2RsX3N5c2luZm9f
aW50ODApCiAjaW5jbHVkZSAicHViX2NvcmVfdHJhbXBvbGluZS5oIgorI2luY2x1ZGUgInB1Yl9j
b3JlX2V4ZWNvbnRleHQuaCIgICAgLy8gRUNfRUNVX0NVUlJFTlQKIAotCiAvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0t
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
LSovCiAvKi0tLSBCRUdJTiBwbGF0Zm9ybS1kZXBlbmRlbnQgdW53aW5kZXIgd29ya2VyIGZ1bmN0
aW9ucyAgIC0tLSovCkBAIC04MjIsOCArODIyLDkgQEAKICAgICNkZWZpbmUgQlVGX0xFTiAgIDQw
OTYKICAgIAogICAgc3RhdGljIFVDaGFyIGJ1ZltCVUZfTEVOXTsKKyAgIFVJbnQgZWN1ID0gKihV
SW50Kil1dV9vcGFxdWU7CiAKLSAgIFZHXyhkZXNjcmliZV9JUCkoaXAsIGJ1ZiwgQlVGX0xFTik7
CisgICBWR18oZGVzY3JpYmVfSVBfd2l0aF9lY3UpKGVjdSwgaXAsIGJ1ZiwgQlVGX0xFTik7CiAK
ICAgIGlmIChWR18oY2xvX3htbCkpIHsKICAgICAgIFZHXyhwcmludGZfeG1sKSgiICAgICVzXG4i
LCBidWYpOwpAQCAtODM1LDEyICs4MzYsMTcgQEAKIC8qIFByaW50IGEgU3RhY2tUcmFjZS4gKi8K
IHZvaWQgVkdfKHBwX1N0YWNrVHJhY2UpICggU3RhY2tUcmFjZSBpcHMsIFVJbnQgbl9pcHMgKQog
eworICAgIFZHXyhwcF9TdGFja1RyYWNlX3dpdGhfZWN1KSAoRUNfRUNVX0NVUlJFTlQsIGlwcywg
bl9pcHMgKTsKK30KKy8qIFByaW50IGEgU3RhY2tUcmFjZS4gKi8KK3ZvaWQgVkdfKHBwX1N0YWNr
VHJhY2Vfd2l0aF9lY3UpICggVUludCBlY3UsIFN0YWNrVHJhY2UgaXBzLCBVSW50IG5faXBzICkK
K3sKICAgIHZnX2Fzc2VydCggbl9pcHMgPiAwICk7CiAKICAgIGlmIChWR18oY2xvX3htbCkpCiAg
ICAgICBWR18ocHJpbnRmX3htbCkoIiAgPHN0YWNrPlxuIik7CiAKLSAgIFZHXyhhcHBseV9TdGFj
a1RyYWNlKSggcHJpbnRJcERlc2MsIE5VTEwsIGlwcywgbl9pcHMgKTsKKyAgIFZHXyhhcHBseV9T
dGFja1RyYWNlKSggcHJpbnRJcERlc2MsICZlY3UsIGlwcywgbl9pcHMgKTsKIAogICAgaWYgKFZH
XyhjbG9feG1sKSkKICAgICAgIFZHXyhwcmludGZfeG1sKSgiICA8L3N0YWNrPlxuIik7CkluZGV4
OiBjb3JlZ3JpbmQvbV9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fbWFpbi5jCShy
ZXZpc2lvbiAxMjM1NikKKysrIGNvcmVncmluZC9tX21haW4uYwkod29ya2luZyBjb3B5KQpAQCAt
MTMzLDYgKzEzMywxMCBAQAogIiAgICAtLWxvZy1mZD08bnVtYmVyPiAgICAgICAgIGxvZyBtZXNz
YWdlcyB0byBmaWxlIGRlc2NyaXB0b3IgWzI9c3RkZXJyXVxuIgogIiAgICAtLWxvZy1maWxlPTxm
aWxlPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byA8ZmlsZT5cbiIKICIgICAgLS1sb2ctc29ja2V0
PWlwYWRkcjpwb3J0ICBsb2cgbWVzc2FnZXMgdG8gc29ja2V0IGlwYWRkcjpwb3J0XG4iCisiICAg
IC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBLZWVwIHN5bWJvbHMgZm9yIHVubG9hZGVkIGNv
ZGUgW25vXVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIHN0
YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvXG4iCisiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5jbHVkZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuXG4i
CisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxjbG9zZSdkIChvciBzaW1pbGFyKVxu
IgogIlxuIgogIiAgdXNlciBvcHRpb25zIGZvciBWYWxncmluZCB0b29scyB0aGF0IHJlcG9ydCBl
cnJvcnM6XG4iCiAiICAgIC0teG1sPXllcyAgICAgICAgICAgICAgICAgZW1pdCBlcnJvciBvdXRw
dXQgaW4gWE1MIChzb21lIHRvb2xzIG9ubHkpXG4iCkBAIC01NTcsNiArNTYxLDggQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgVkdfKGNsb192ZXhfY29udHJvbCkuZ3Vlc3RfY2hhc2VfdGhyZXNo
LCAwLCA5OSkge30KICAgICAgIGVsc2UgaWYgVkdfQk9PTF9DTE8oYXJnLCAiLS12ZXgtZ3Vlc3Qt
Y2hhc2UtY29uZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhjbG9fdmV4X2NvbnRyb2wp
Lmd1ZXN0X2NoYXNlX2NvbmQpIHt9CisgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0t
a2VlcC11bmxvYWRlZC1zeW1zIiwKKwkgICAgICAgICAgICAgICBWR18oY2xvX2tlZXBfdW5sb2Fk
ZWRfc3ltcykpIHt9CiAKICAgICAgIGVsc2UgaWYgVkdfSU5UX0NMTyhhcmcsICItLWxvZy1mZCIs
IHRtcF9sb2dfZmQpIHsKICAgICAgICAgIGxvZ190byA9IFZnTG9nVG9fRmQ7CkluZGV4OiBjb3Jl
Z3JpbmQvbV9vcHRpb25zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fb3B0aW9ucy5jCShy
ZXZpc2lvbiAxMjM1NikKKysrIGNvcmVncmluZC9tX29wdGlvbnMuYwkod29ya2luZyBjb3B5KQpA
QCAtMTEyLDYgKzExMiw3IEBACiBWZ1NtYyAgVkdfKGNsb19zbWNfY2hlY2spICAgICAgPSBWZ19T
bWNTdGFjazsKIEhDaGFyKiBWR18oY2xvX2tlcm5lbF92YXJpYW50KSA9IE5VTEw7CiBCb29sICAg
VkdfKGNsb19kc3ltdXRpbCkgICAgICAgPSBGYWxzZTsKK0Jvb2wgICBWR18oY2xvX2tlZXBfdW5s
b2FkZWRfc3ltcyk9IEZhbHNlOwogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpJbmRleDogY29yZWdyaW5k
L3B1Yl9jb3JlX2V4ZWNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvcHViX2NvcmVf
ZXhlY29udGV4dC5oCShyZXZpc2lvbiAxMjM1NikKKysrIGNvcmVncmluZC9wdWJfY29yZV9leGVj
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDE0IEBACiBleHRlcm4KIC8qU3Rh
Y2tUcmFjZSovQWRkciogVkdfKGdldF9FeGVDb250ZXh0X1N0YWNrVHJhY2UpICggRXhlQ29udGV4
dCogZSApOwogCisvLyBLZWVwIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2VudGx5IGFsbG9jYXRlZCBl
Y3UsIHNvIHRoYXQgZGVidWdpbmZvIGNhbgorLy8ga25vdyBob3cgdG8gdHJhbnNsYXRlIGFkZHJl
c3NlcyB0aGF0IHJlZmVyZW5jZSBjb2RlIHRoYXQgaGFzIGJlZW4gdW5sb2FkZWQKK2V4dGVybiBV
SW50IFZHXyhlY19sYXN0X2VjdSk7CiAKKy8vIFNwZWNpYWwgY29uc3RhbnQgdG8gdXNlIGZvciB0
aGUgJ2VjdScgcGFyYW1ldGVyIHdoZW4gZGVjb2RpbmcgYSAnY3VycmVudCcKKy8vIHN0YWNrIHRy
YWNlLCB0aGlzIHdpbGwgY2F1c2UgaXQgdG8gc2tpcCBsb29raW5nIGF0IGFueSB1bmxvYWRlZCBz
eW1ib2xzLgorI2RlZmluZSBFQ19FQ1VfQ1VSUkVOVCAweEZGRkZGRkZGCisKICNlbmRpZiAgIC8v
IF9fUFVCX0NPUkVfRVhFQ09OVEVYVF9ICiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68213</attachid>
            <date>2012-01-26 23:22:53 +0000</date>
            <delta_ts>2017-07-31 14:09:41 +0000</delta_ts>
            <desc>Refreshed patch against svn r12356</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>28729</size>
            <attacher name="Howard Chu">hyc</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb2NzL3htbC9t
YW51YWwtY29yZS54bWwJKHJldmlzaW9uIDEyMzU2KQorKysgZG9jcy94bWwvbWFudWFsLWNvcmUu
eG1sCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsNiArODYyLDE3IEBACiAgICAgPC9saXN0aXRlbT4K
ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtdW5sb2Fk
ZWQtc3ltcyIgeHJlZmxhYmVsPSItLWtlZXAtdW5sb2FkZWQtc3ltcyI+CisgICAgPHRlcm0+Cisg
ICAgICA8b3B0aW9uPjwhW0NEQVRBWy0ta2VlcC11bmxvYWRlZC1zeW1zPTx5ZXN8bm8+IFtkZWZh
dWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg
IDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlLiBUaGlz
IGFsbG93cyBzdGFjaworICAgICAgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBm
aWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICBkbGNsb3NlJ2QgKG9y
IHNpbWlsYXIpPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorCiA8
L3ZhcmlhYmxlbGlzdD4KIDwhLS0gZW5kIG9mIHhpOmluY2x1ZGUgaW4gdGhlIG1hbnBhZ2UgLS0+
CiAKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCShyZXZpc2lvbiAxMjM1NikKKysrIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYs
OCBAQAogRVhUUkFfRElTVCA9IFwKIAlicmsuc3RkZXJyLmV4cCBicmsudmd0ZXN0IFwKIAljYXBn
ZXQudmd0ZXN0IGNhcGdldC5zdGRlcnIuZXhwIGNhcGdldC5zdGRlcnIuZXhwMiBcCisJZGxjbG9z
ZV9sZWFrLW5vLWtlZXAuc3RkZXJyLmV4cCBkbGNsb3NlX2xlYWstbm8ta2VlcC52Z3Rlc3QgXAor
CWRsY2xvc2VfbGVhay5zdGRlcnIuZXhwIGRsY2xvc2VfbGVhay52Z3Rlc3QgXAogCWxzZnJhbWUx
LnZndGVzdCBsc2ZyYW1lMS5zdGRvdXQuZXhwIGxzZnJhbWUxLnN0ZGVyci5leHAgXAogCWxzZnJh
bWUyLnZndGVzdCBsc2ZyYW1lMi5zdGRvdXQuZXhwIGxzZnJhbWUyLnN0ZGVyci5leHAgXAogCXNp
Z3F1ZXVlLnZndGVzdCBzaWdxdWV1ZS5zdGRlcnIuZXhwIFwKQEAgLTIwLDYgKzIyLDcgQEAKIGNo
ZWNrX1BST0dSQU1TID0gXAogCWJyayBcCiAJY2FwZ2V0IFwKKwlkbGNsb3NlX2xlYWsgZGxjbG9z
ZV9sZWFrX3NvLnNvIFwKIAlsc2ZyYW1lMSBcCiAJbHNmcmFtZTIgXAogCXNpZ3F1ZXVlIFwKQEAg
LTM2LDMgKzM5LDE2IEBACiBzdGFja19zd2l0Y2hfTERBREQgICAgPSAtbHB0aHJlYWQKIHRpbWVy
ZmRfc3lzY2FsbF9MREFERCA9IC1scnQKIAorIyBCdWlsZCBzaGFyZWQgb2JqZWN0IGZvciBkbGNs
b3NlX2xlYWsKKyMjIyBJIGRvbid0IHVzZSBHTlUgQXV0b3Rvb2xzIG9mdGVuLCBzbyBJIGhhdmUg
anVzdCBrbHVkZ2VkIHRvZ2V0aGVyIGJ1aWxkaW5nCisjIyMgVGhlIGxvYWRhYmxlIGxpYnJhcnkg
aGVyZS4uLiBJIGFtIGNlcnRhaW4gc29tZW9uZSBlbHNlIGNvdWxkIGRvIHRoaXMKKyMjIyBjbGVh
bmVyLgorZGxjbG9zZV9sZWFrX1NPVVJDRVMgICAgICAgICAgPSBkbGNsb3NlX2xlYWsuYworZGxj
bG9zZV9sZWFrX0RFUEVOREVOQ0lFUyAgICAgPSBkbGNsb3NlX2xlYWtfc28uc28KK2RsY2xvc2Vf
bGVha19MREFERCAgICAgICAgICAgID0gLWxkbAorZGxjbG9zZV9sZWFrX0xERkxBR1MgICAgICAg
ICAgPSAkKEFNX0ZMQUdfTTMyNjRfUFJJKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1XbCwtcnBhdGgsJCh0b3BfYnVpbGRkaXIpL21lbWNoZWNrL3Rlc3RzCitkbGNsb3NlX2xl
YWtfc29fc29fU09VUkNFUyA9IGRsY2xvc2VfbGVha19zby5jCitkbGNsb3NlX2xlYWtfc29fc29f
Q0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtZnBpYworZGxjbG9zZV9sZWFrX3NvX3NvX0xERkxBR1Mg
ID0gLWZwaWMgJChBTV9GTEFHX00zMjY0X1BSSSkgLXNoYXJlZCAtV2wsLXNvbmFtZSBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsZGxjbG9zZV9sZWFrX3NvLnNvCkluZGV4OiBp
bmNsdWRlL3B1Yl90b29sX29wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29s
X29wdGlvbnMuaAkocmV2aXNpb24gMTIzNTYpCisrKyBpbmNsdWRlL3B1Yl90b29sX29wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQAogLyogQ29udGludWUgc3RhY2sg
dHJhY2VzIGJlbG93IG1haW4oKT8gIERlZmF1bHQ6IE5PICovCiBleHRlcm4gQm9vbCBWR18oY2xv
X3Nob3dfYmVsb3dfbWFpbik7CiAKKy8qIEtlZXAgc3ltYm9scyBmb3IgY29kZSB0aGF0IGlzIHVu
bG9hZGVkIChkbGNsb3NlIG9yIHNpbWlsYXIpIHNvIHRoYXQgc3RhY2sKKyAgIHRyYWNlcyBjYW4g
c3RpbGwgZ2l2ZSBsaW5lL2ZpbGUgaW5mbyBmb3IgcHJldmlvdXNseSBjYXB0dXJlZCBzdGFjayB0
cmFjZXMuCisgICBlLmcuIC4uLiBzaG93aW5nIHdoZXJlIGEgYmxvY2sgd2FzIGFsbG9jYXRlZCBl
LmcuIGxlYWtzIG9mIG9yIGFjY2Vzc2VzIGp1c3QKKyAgIG91dHN0aWRlIGEgYmxvY2suICovCitl
eHRlcm4gQm9vbCBWR18oY2xvX2tlZXBfdW5sb2FkZWRfc3ltcyk7CiAKIC8qIFVzZWQgdG8gZXhw
YW5kIGZpbGUgbmFtZXMuICAib3B0aW9uX25hbWUiIGlzIHRoZSBvcHRpb24gbmFtZSwgZWcuCiAg
ICAiLS1sb2ctZmlsZSIuICAnZm9ybWF0JyBpcyB3aGF0IGZvbGxvd3MsIGVnLiAiY2FjaGVncmlu
ZC5vdXQuJXAiLiAgSW4KSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfc3RhY2t0cmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfc3RhY2t0cmFjZS5oCShyZXZpc2lvbiAxMjM1NikK
KysrIGluY2x1ZGUvcHViX3Rvb2xfc3RhY2t0cmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2
ICs3NSw3IEBACiAKIC8vIFByaW50IGEgU3RhY2tUcmFjZS4KIGV4dGVybiB2b2lkIFZHXyhwcF9T
dGFja1RyYWNlKSAoIFN0YWNrVHJhY2UgaXBzLCBVSW50IG5faXBzICk7CitleHRlcm4gdm9pZCBW
R18ocHBfU3RhY2tUcmFjZV93aXRoX2VjdSkgKCBVSW50IGVjdSwgU3RhY2tUcmFjZSBpcHMsIFVJ
bnQgbl9pcHMgKTsKIAogLy8gR2V0cyBhbmQgaW1tZWRpYXRlbHkgcHJpbnRzIGEgU3RhY2tUcmFj
ZS4gIEp1c3QgYSBiaXQgc2ltcGxlciB0aGFuCiAvLyBjYWxsaW5nIFZHXyhnZXRfU3RhY2tUcmFj
ZSkoKSB0aGVuIFZHXyhwcF9TdGFja1RyYWNlKSgpLgpJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9k
ZWJ1Z2luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29sX2RlYnVnaW5mby5oCShy
ZXZpc2lvbiAxMjM1NikKKysrIGluY2x1ZGUvcHViX3Rvb2xfZGVidWdpbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDkgKzQzLDExIEBACiAgICBzYW1lLCBleGNlcHQgaXQgYXBwZW5kcyAiK04i
IHRvIHN5bWJvbCBuYW1lcyB0byBpbmRpY2F0ZSBvZmZzZXRzLiAgKi8KIGV4dGVybiBCb29sIFZH
XyhnZXRfZmlsZW5hbWUpICggQWRkciBhLCBDaGFyKiBmaWxlbmFtZSwgSW50IG5fZmlsZW5hbWUg
KTsKIGV4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1lKSAgICggQWRkciBhLCBDaGFyKiBmbm5hbWUs
ICAgSW50IG5fZm5uYW1lICAgKTsKLWV4dGVybiBCb29sIFZHXyhnZXRfbGluZW51bSkgICggQWRk
ciBhLCBVSW50KiBsaW5lbnVtICk7CitleHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZV93aXRoX2Vj
dSkgICAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGZubmFtZSwgICBJbnQgbl9mbm5hbWUgICAp
OwogZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoIEFkZHIgYSwgQ2hhciogZm5uYW1lLCAgIEludCBuX2ZubmFtZSAgICk7
CitleHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZV93X29mZnNldF9hbmRfZWN1KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCBVSW50IGVjdSwgQWRkciBhLCBDaGFyKiBmbm5hbWUsICAg
SW50IG5fZm5uYW1lICAgKTsKIAogLyogVGhpcyBvbmUgaXMgdGhlIG1vc3QgZ2VuZXJhbC4gIEl0
IGdpdmVzIGZpbGVuYW1lLCBsaW5lIG51bWJlciBhbmQKICAgIG9wdGlvbmFsbHkgZGlyZWN0b3J5
IG5hbWUuICBmaWxlbmFtZSBhbmQgbGluZW51bSBtYXkgbm90IGJlIE5VTEwuCkBAIC02NCw2ICs2
NiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQ2hhciogZGly
bmFtZSwgIEludCBuX2Rpcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
T1VUKi9Cb29sKiBkaXJuYW1lX2F2YWlsYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLypPVVQqL1VJbnQqIGxpbmVudW0gKTsKK2V4dGVybiBCb29sIFZHXyhnZXRfZmlsZW5h
bWVfbGluZW51bV93aXRoX2VjdSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggVUlu
dCBlY3UsIEFkZHIgYSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9D
aGFyKiBmaWxlbmFtZSwgSW50IG5fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qT1VUKi9DaGFyKiBkaXJuYW1lLCAgSW50IG5fZGlybmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0Jvb2wqIGRpcm5hbWVfYXZhaWxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGluZW51bSApOwogCiAv
KiBTdWNjZWVkcyBvbmx5IGlmIHdlIGZpbmQgZnJvbSBkZWJ1ZyBpbmZvIHRoYXQgJ2EnIGlzIHRo
ZSBhZGRyZXNzIG9mIHRoZQogICAgZmlyc3QgaW5zdHJ1Y3Rpb24gaW4gYSBmdW5jdGlvbiAtLSBh
cyBvcHBvc2VkIHRvIFZHXyhnZXRfZm5uYW1lKSB3aGljaApAQCAtMTE3LDYgKzEyNSw3IEBACiAv
KiBTdWNjZWVkcyBpZiB0aGUgYWRkcmVzcyBpcyB3aXRoaW4gYSBzaGFyZWQgb2JqZWN0IG9yIHRo
ZSBtYWluIGV4ZWN1dGFibGUuCiAgICBJdCBkb2Vzbid0IG1hdHRlciBpZiBkZWJ1ZyBpbmZvIGlz
IHByZXNlbnQgb3Igbm90LiAqLwogZXh0ZXJuIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAgKCBBZGRy
IGEsIENoYXIqIG9iam5hbWUsIEludCBuX29iam5hbWUgKTsKK2V4dGVybiBCb29sIFZHXyhnZXRf
b2JqbmFtZV93aXRoX2VjdSkgKCBVSW50IGVjdSwgQWRkciBhLCBDaGFyKiBvYmpuYW1lLCBJbnQg
bl9vYmpuYW1lICk7CiAKIC8qIFB1dHMgaW50byAnYnVmJyBpbmZvIGFib3V0IHRoZSBjb2RlIGFk
ZHJlc3MgJWVpcDogIHRoZSBhZGRyZXNzLCBmdW5jdGlvbgogICAgbmFtZSAoaWYga25vd24pIGFu
ZCBmaWxlbmFtZS9saW5lIG51bWJlciAoaWYga25vd24pLCBsaWtlIHRoaXM6CkBAIC0xMjYsNiAr
MTM1LDcgQEAKICAgICduX2J1ZicgZ2l2ZXMgbGVuZ3RoIG9mICdidWYnLiAgUmV0dXJucyAnYnVm
Jy4KICovCiBleHRlcm4gQ2hhciogVkdfKGRlc2NyaWJlX0lQKShBZGRyIGVpcCwgQ2hhciogYnVm
LCBJbnQgbl9idWYpOworZXh0ZXJuIENoYXIqIFZHXyhkZXNjcmliZV9JUF93aXRoX2VjdSkoVUlu
dCBlY3UsIEFkZHIgZWlwLCBDaGFyKiBidWYsIEludCBuX2J1Zik7CiAKIAogLyogR2V0IGFuIFhB
cnJheSBvZiBTdGFja0Jsb2NrIHdoaWNoIGRlc2NyaWJlIHRoZSBzdGFjayAoYXV0bykgYmxvY2tz
CkluZGV4OiBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9u
ZS90ZXN0cy9jbWRsaW5lMi5zdGRvdXQuZXhwCShyZXZpc2lvbiAxMjM1NikKKysrIG5vbmUvdGVz
dHMvY21kbGluZTIuc3Rkb3V0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAK
ICAgICAtLWxvZy1mZD08bnVtYmVyPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2Ny
aXB0b3IgWzI9c3RkZXJyXQogICAgIC0tbG9nLWZpbGU9PGZpbGU+ICAgICAgICAgbG9nIG1lc3Nh
Z2VzIHRvIDxmaWxlPgogICAgIC0tbG9nLXNvY2tldD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2Vz
IHRvIHNvY2tldCBpcGFkZHI6cG9ydAorICAgIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBL
ZWVwIHN5bWJvbHMgZm9yIHVubG9hZGVkIGNvZGUgW25vXQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGhpcyBhbGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9yIGNv
ZGUgdGhhdCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxjbG9zZSdk
IChvciBzaW1pbGFyKQogCiAgIHVzZXIgb3B0aW9ucyBmb3IgVmFsZ3JpbmQgdG9vbHMgdGhhdCBy
ZXBvcnQgZXJyb3JzOgogICAgIC0teG1sPXllcyAgICAgICAgICAgICAgICAgZW1pdCBlcnJvciBv
dXRwdXQgaW4gWE1MIChzb21lIHRvb2xzIG9ubHkpCkluZGV4OiBub25lL3Rlc3RzL2NtZGxpbmUx
LnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9uZS90ZXN0cy9jbWRsaW5lMS5zdGRvdXQuZXhw
CShyZXZpc2lvbiAxMjM1NikKKysrIG5vbmUvdGVzdHMvY21kbGluZTEuc3Rkb3V0LmV4cAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAKICAgICAtLWxvZy1mZD08bnVtYmVyPiAgICAg
ICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2NyaXB0b3IgWzI9c3RkZXJyXQogICAgIC0tbG9n
LWZpbGU9PGZpbGU+ICAgICAgICAgbG9nIG1lc3NhZ2VzIHRvIDxmaWxlPgogICAgIC0tbG9nLXNv
Y2tldD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2VzIHRvIHNvY2tldCBpcGFkZHI6cG9ydAorICAg
IC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBLZWVwIHN5bWJvbHMgZm9yIHVubG9hZGVkIGNv
ZGUgW25vXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3Mgc3RhY2sg
dHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGxjbG9zZSdkIChvciBzaW1pbGFyKQogCiAgIHVzZXIgb3B0
aW9ucyBmb3IgVmFsZ3JpbmQgdG9vbHMgdGhhdCByZXBvcnQgZXJyb3JzOgogICAgIC0teG1sPXll
cyAgICAgICAgICAgICAgICAgZW1pdCBlcnJvciBvdXRwdXQgaW4gWE1MIChzb21lIHRvb2xzIG9u
bHkpCkluZGV4OiBjb3JlZ3JpbmQvbV9leGVjb250ZXh0LmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdy
aW5kL21fZXhlY29udGV4dC5jCShyZXZpc2lvbiAxMjM1NikKKysrIGNvcmVncmluZC9tX2V4ZWNv
bnRleHQuYwkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogICAgIDUwMzMxNjUzVUws
ICAgIDEwMDY2MzMxOVVMCiB9OwogCitVSW50IFZHXyhlY19sYXN0X2VjdSkgPSAwOwogCiAvKiBF
YWNoIGVsZW1lbnQgaXMgcHJlc2VudCBpbiBhIGhhc2ggY2hhaW4sIGFuZCBhbHNvIGNvbnRhaW5z
IGEKICAgIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBvZiBndWVzdCBjb2RlIGFkZHJlc3NlcyAodGhl
IHVzZWZ1bCBwYXJ0KS4gKi8KQEAgLTE3MCw3ICsxNzEsNyBAQAogLyogUHJpbnQgYW4gRXhlQ29u
dGV4dC4gKi8KIHZvaWQgVkdfKHBwX0V4ZUNvbnRleHQpICggRXhlQ29udGV4dCogZWMgKQogewot
ICAgVkdfKHBwX1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+bl9pcHMgKTsKKyAgIFZHXyhwcF9T
dGFja1RyYWNlX3dpdGhfZWN1KSggZWMtPmVjdSwgZWMtPmlwcywgZWMtPm5faXBzICk7CiB9CiAK
IApAQCAtNDA1LDYgKzQwNiw3IEBACiAKICAgIHZnX2Fzc2VydChWR18oaXNfcGxhdXNpYmxlX0VD
VSkoZWNfbmV4dF9lY3UpKTsKICAgIG5ld19lYy0+ZWN1ID0gZWNfbmV4dF9lY3U7CisgICBWR18o
ZWNfbGFzdF9lY3UpID0gZWNfbmV4dF9lY3U7CiAgICBlY19uZXh0X2VjdSArPSA0OwogICAgaWYg
KGVjX25leHRfZWN1ID09IDApIHsKICAgICAgIC8qIFVyci4gIE5vdyB3ZSdyZSBob3NlZDsgd2Ug
ZW1pdHRlZCAyXjMwIEV4ZUNvbnRleHRzIGFscmVhZHkKSW5kZXg6IGNvcmVncmluZC9tX2RlYnVn
aW5mby9kZWJ1Z2luZm8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVi
dWdpbmZvLmMJKHJldmlzaW9uIDEyMzU2KQorKysgY29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVn
aW5mby5jCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAicHViX2Nv
cmVfdGhyZWFkc3RhdGUuaCIKICNpbmNsdWRlICJwdWJfY29yZV9kZWJ1Z2luZm8uaCIgIC8qIHNl
bGYgKi8KICNpbmNsdWRlICJwdWJfY29yZV9kZW1hbmdsZS5oIgorI2luY2x1ZGUgInB1Yl9jb3Jl
X2V4ZWNvbnRleHQuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJjYmFzZS5oIgogI2luY2x1ZGUg
InB1Yl9jb3JlX2xpYmNhc3NlcnQuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJjcHJpbnQuaCIK
QEAgLTExMSw2ICsxMTIsOSBAQAogICAgbGlua2VkIGxpc3Qgb2YgRGVidWdJbmZvcy4gKi8KIHN0
YXRpYyBEZWJ1Z0luZm8qIGRlYnVnSW5mb19saXN0ID0gTlVMTDsKIAorLyogS2VlcCBhcm91bmQg
b2xkIGRlYnVnIGluZm8gc28gd2UgY2FuIGhhdmUgYSBjaGFuY2Ugb2YgZGVjb2Rpbmcgc3RhY2sg
dHJhY2VzCisgKiAoZS5nLiBmb3IgbGVhayBjaGVja3MpIGV2ZW4gYWZ0ZXIgYSBzaGFyZWQgbGli
cmFyeSBoYXMgYmVlbiB1bmxvYWRlZC4gKi8KK3N0YXRpYyBEZWJ1Z0luZm8qIHVubG9hZGVkRGVi
dWdJbmZvX2xpc3QgPSBOVUxMOwogCiAvKiBGaW5kICdkaScgaW4gdGhlIGRlYnVnSW5mb19saXN0
IGFuZCBtb3ZlIGl0IG9uZSBzdGVwIGNsb3NlciB0aGUgdGhlCiAgICBmcm9udCBvZiB0aGUgbGlz
dCwgc28gYXMgdG8gbWFrZSBzdWJzZXF1ZW50IHNlYXJjaGVzIGZvciBpdApAQCAtMjg3LDcgKzI5
MSw3IEBACiB9CiAKIAotLyogJ3NpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0luZm9fbGlzdC4gIEZp
bmQgaXQsIHJlbW92ZSBpdCBmcm9tIHRoZQorLyogJ2RpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0lu
Zm9fbGlzdC4gIEZpbmQgaXQsIHJlbW92ZSBpdCBmcm9tIHRoZQogICAgbGlzdCwgbm90aWZ5IG1f
cmVkaXIgdGhhdCB0aGlzIGhhcyBoYXBwZW5lZCwgYW5kIGZyZWUgYWxsIHN0b3JhZ2UKICAgIHJl
YWNoYWJsZSBmcm9tIGl0LgogKi8KQEAgLTMxNCw3ICszMTgsMTcgQEAKICAgICAgICAgICpwcmV2
X25leHRfcHRyID0gY3Vyci0+bmV4dDsKICAgICAgICAgIGlmIChjdXJyLT5oYXZlX2RpbmZvKQog
ICAgICAgICAgICAgVkdfKHJlZGlyX25vdGlmeV9kZWxldGVfRGVidWdJbmZvKSggY3VyciApOwot
ICAgICAgICAgZnJlZV9EZWJ1Z0luZm8oY3Vycik7CisgICAgICAgICBpZiAoVkdfKGNsb19rZWVw
X3VubG9hZGVkX3N5bXMpICYmIAorICAgICAgICAgICAgIGN1cnItPmZpcnN0X2VjdSA8IFZHXyhl
Y19sYXN0X2VjdSkpIHsKKyAgICAgICAgICAgIC8qIE9ubHkga2VlcCB0aGUgRGVidWdJbmZvIGFy
b3VuZCBpZiB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaAorICAgICAgICAgICAgICAgcmVxdWVzdGVk
IGl0LCBhbmQgdGhlcmUgd2FzIGF0IGxlYXN0IDEgZXhlIGNvbnRleHQgdGFrZW4gd2hpbGUKKyAg
ICAgICAgICAgICAgIHRoaXMgRGVidWdJbmZvIHdhcyBsb2FkZWQuICovCisgICAgICAgICAgICBj
dXJyLT5uZXh0ID0gdW5sb2FkZWREZWJ1Z0luZm9fbGlzdDsKKyAgICAgICAgICAgIHVubG9hZGVk
RGVidWdJbmZvX2xpc3QgPSBjdXJyOworICAgICAgICAgICAgY3Vyci0+bGFzdF9lY3UgPSBWR18o
ZWNfbGFzdF9lY3UpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyZWVfRGVidWdJ
bmZvKGN1cnIpOworICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgICAg
cHJldl9uZXh0X3B0ciA9ICZjdXJyLT5uZXh0OwpAQCAtNDc3LDYgKzQ5MSw4IEBACiAgICAgICB2
Z19hc3NlcnQoZGkpOwogICAgICAgZGktPm5leHQgPSBkZWJ1Z0luZm9fbGlzdDsKICAgICAgIGRl
YnVnSW5mb19saXN0ID0gZGk7CisgICAgICBkaS0+Zmlyc3RfZWN1ID0gVkdfKGVjX2xhc3RfZWN1
KTsKKyAgICAgIGRpLT5sYXN0X2VjdSA9IEVDX0VDVV9DVVJSRU5UOwogICAgfQogICAgcmV0dXJu
IGRpOwogfQpAQCAtNTU2LDYgKzU3Miw3IEBACiAgICAgICBjcmVhdGVkIGFuZCBkZXN0cm95ZWQg
b24gZGVtYW5kLCBhbmQgZWFjaCBvbmUgaXMgdHJlYXRlZCBtb3JlIG9yCiAgICAgICBsZXNzIGlu
ZGVwZW5kZW50bHkuICovCiAgICB2Z19hc3NlcnQoZGVidWdJbmZvX2xpc3QgPT0gTlVMTCk7Cisg
ICB2Z19hc3NlcnQodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9PSBOVUxMKTsKIAogICAgLyogZmx1
c2ggdGhlIENGSSBmYXN0IHF1ZXJ5IGNhY2hlLiAqLwogICAgY2ZzaV9jYWNoZV9faW52YWxpZGF0
ZSgpOwpAQCAtMTI1OSwxMCArMTI3NiwxMCBAQAogLyotLS0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwogLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIFZH
XyhkaV9kaXNjYXJkX0FMTF9kZWJ1Z2luZm8pKCB2b2lkICkKK3N0YXRpYyB2b2lkIGRpc2NhcmRf
QUxMX2RlYnVnaW5mb19pbl9saXN0KERlYnVnSW5mbyogbGlzdCkKIHsKICAgIERlYnVnSW5mbyAq
ZGksICpkaTI7Ci0gICBkaSA9IGRlYnVnSW5mb19saXN0OworICAgZGkgPSBsaXN0OwogICAgd2hp
bGUgKGRpKSB7CiAgICAgICBkaTIgPSBkaS0+bmV4dDsKICAgICAgIFZHXyhwcmludGYpKCJYWFgg
cm0gJXBcbiIsIGRpKTsKQEAgLTEyNzEsMTkgKzEyODgsMjIgQEAKICAgIH0KIH0KIAorc3RhdGlj
IGlubGluZSBCb29sIGVjdV9pbl9kaV9yYW5nZShVSW50IGVjdSwgRGVidWdJbmZvKiBkaSkKK3sg
ICAvKiBmaXJzdF9lY3UgaXMgYWN0dWFsbHkgdGhlIGxhc3QgZWN1ICMgdGhhdCB3YXMgYWxsb2Nh
dGVkIGJlZm9yZSB0aGlzCisgICAgICogRGVidWdJbmZvIHdhcyBsb2FkZWQsIGxhc3RfZWN1IGlz
IHRoYXQgbGFzdCBlY3UgdGhhdCB3YXMgYWxsb2NhdGVkCisgICAgICogYmVmb3JlIHRoaXMgRGVi
dWdJbmZvIHdhcyB1bmxvYWRlZCBvciAweEZGRkZGRkZGIChha2EgRUNfRUNVX0NVUlJFTlQpCisg
ICAgICogaWYgdGhpcyBEZWJ1Z0luZm8gaGFzIG5vdCBiZWVuIHVubG9hZGVkIHlldC4gKi8KKyAg
ICByZXR1cm4gKGVjdSA+IGRpLT5maXJzdF9lY3UpICYmIChlY3UgPD0gZGktPmxhc3RfZWN1KTsK
K30KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwotLyotLS0gVXNlIG9mIHN5bWJvbCB0YWJsZSAmIGxvY2F0aW9uIGluZm8g
dG8gY3JlYXRlICAgICAgICAtLS0qLwotLyotLS0gcGxhdXNpYmxlLWxvb2tpbmcgc3RhY2sgZHVt
cHMuICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBWR18oZGlfZGlz
Y2FyZF9BTExfZGVidWdpbmZvKSggdm9pZCApCit7CisgICAgZGlzY2FyZF9BTExfZGVidWdpbmZv
X2luX2xpc3QoZGVidWdJbmZvX2xpc3QpOworICAgIGRpc2NhcmRfQUxMX2RlYnVnaW5mb19pbl9s
aXN0KHVubG9hZGVkRGVidWdJbmZvX2xpc3QpOworfQogCi0vKiBTZWFyY2ggYWxsIHN5bXRhYnMg
dGhhdCB3ZSBrbm93IGFib3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0Ci0gICAqcGRp
IHRvIHRoZSByZWxldmFudCBEZWJ1Z0luZm8sIGFuZCAqc3ltbm8gdG8gdGhlIHN5bXRhYiBlbnRy
eQotICAgKm51bWJlciB3aXRoaW4gdGhhdC4gIElmIG5vdCBmb3VuZCwgKnBzaSBpcyBzZXQgdG8g
TlVMTC4KLSAgIElmIGZpbmRUZXh0PT1UcnVlLCAgb25seSB0ZXh0IHN5bWJvbHMgYXJlIHNlYXJj
aGVkIGZvci4KLSAgIElmIGZpbmRUZXh0PT1GYWxzZSwgb25seSBkYXRhIHN5bWJvbHMgYXJlIHNl
YXJjaGVkIGZvci4KLSovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxsX3N5bXRhYnMgKCBBZGRyIHB0
ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKK3N0YXRpYyB2b2lkIHNlYXJjaF9vbmVfZGVidWdJ
bmZvX2xpc3QgKERlYnVnSW5mbyogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVJbnQgZWN1LCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogc3ltbm8sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIG1hdGNoX2FueXdoZXJlX2luX3N5
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgZmluZFRleHQgKQpAQCAt
MTI5Miw3ICsxMzEyLDEwIEBACiAgICBEZWJ1Z0luZm8qIGRpOwogICAgQm9vbCAgICAgICBpblJh
bmdlOwogCi0gICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGkt
Pm5leHQpIHsKKyAgIGZvciAoZGkgPSBsaXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7
CisgICAgICBpZiAoICEgZWN1X2luX2RpX3JhbmdlKCBlY3UsIGRpKSApIHsKKyAgICAgICAgICBj
b250aW51ZTsKKyAgICAgIH0KIAogICAgICAgaWYgKGZpbmRUZXh0KSB7CiAgICAgICAgICAvKiBD
b25zaWRlciBhbnkgc3ltYm9sIGluIHRoZSByLXggbWFwcGVkIGFyZWEgdG8gYmUgdGV4dC4KQEAg
LTEzNDMsMTcgKzEzNjYsNDYgQEAKICAgICpwZGkgPSBOVUxMOwogfQogCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0t
LSBVc2Ugb2Ygc3ltYm9sIHRhYmxlICYgbG9jYXRpb24gaW5mbyB0byBjcmVhdGUgICAgICAgIC0t
LSovCisvKi0tLSBwbGF1c2libGUtbG9va2luZyBzdGFjayBkdW1wcy4gICAgICAgICAgICAgICAg
ICAgICAgIC0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIFNlYXJjaCBhbGwgc3ltdGFicyB0aGF0IHdlIGtu
b3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkgdG8gdGhlIHJl
bGV2YW50IERlYnVnSW5mbywgYW5kICpzeW1ubyB0byB0aGUgc3ltdGFiIGVudHJ5CisgICAqbnVt
YmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLgorICAg
SWYgZmluZFRleHQ9PVRydWUsICBvbmx5IHRleHQgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9yLgor
ICAgSWYgZmluZFRleHQ9PUZhbHNlLCBvbmx5IGRhdGEgc3ltYm9scyBhcmUgc2VhcmNoZWQgZm9y
LgorKi8KK3N0YXRpYyB2b2lkIHNlYXJjaF9hbGxfc3ltdGFicyAoIFVJbnQgZWN1LCBBZGRyIHB0
ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKk9VVCovV29yZCogc3ltbm8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCb29sIG1hdGNoX2FueXdoZXJlX2luX3N5bSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJvb2wgZmluZFRleHQgKQoreworICAgc2VhcmNoX29uZV9kZWJ1Z0lu
Zm9fbGlzdChkZWJ1Z0luZm9fbGlzdCwgZWN1LCBwdHIsIHBkaSwgc3ltbm8sCisgICAgICAgICAg
IG1hdGNoX2FueXdoZXJlX2luX3N5bSwgZmluZFRleHQpOworICAgLyogT25seSBzZWFyY2ggdGhl
IGxpc3Qgb2YgdW5sb2FkZWQgc3ltcyBpZiB3ZSBoYXZlbid0IGZvdW5kIHNvbWV0aGluZywKKyAg
ICAqIGFuZCB3ZSBhcmVuJ3QgZGVjb2RpbmcgYSAnY3VycmVudCcgc3RhY2t0cmFjZS4gKi8KKyAg
IGlmKCEqcGRpICYmIGVjdSAhPSBFQ19FQ1VfQ1VSUkVOVCkKKyAgICAgICBzZWFyY2hfb25lX2Rl
YnVnSW5mb19saXN0KHVubG9hZGVkRGVidWdJbmZvX2xpc3QsIGVjdSwgcHRyLCBwZGksIHN5bW5v
LAorICAgICAgICAgICAgICAgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCk7Cit9CisK
IC8qIFNlYXJjaCBhbGwgbG9jdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4g
IElmIGZvdW5kLCBzZXQKICAgICpwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICps
b2NubyB0byB0aGUgbG9jdGFiIGVudHJ5CiAgICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90
IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLiAqLwotc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9s
b2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25vICkKK3N0YXRp
YyB2b2lkIHNlYXJjaF9hbGxfbG9jdGFic19vbmVfbGlzdCAoRGVidWdJbmZvKiBsaXN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50IGVjdSwgQWRkciBwdHIs
IC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9jbm8gKQogewogICAgV29yZCAgICAg
ICBsbm87CiAgICBEZWJ1Z0luZm8qIGRpOwotICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBk
aSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7Ci0gICAgICBpZiAoZGktPnRleHRfcHJlc2VudAor
ICAgZm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlm
ICggISBlY3VfaW5fZGlfcmFuZ2UoIGVjdSwgZGkpICkgeworICAgICAgICAgY29udGludWU7Cisg
ICAgICB9CisKKyAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50
ZXh0X3NpemUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBwdHIgCiAgICAgICAg
ICAgJiYgcHRyIDwgZGktPnRleHRfYXZtYSArIGRpLT50ZXh0X3NpemUpIHsKQEAgLTEzNjgsNiAr
MTQyMCwxOCBAQAogICAgKnBkaSA9IE5VTEw7CiB9CiAKKy8qIFNlYXJjaCBhbGwgbG9jdGFicyB0
aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKKyAgICpwZGkg
dG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICpsb2NubyB0byB0aGUgbG9jdGFiIGVudHJ5
CisgICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBO
VUxMLiAqLworc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzICggVUludCBlY3UsIEFkZHIg
cHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBsb2NubyApCit7CisgICAgc2VhcmNoX2FsbF9s
b2N0YWJzX29uZV9saXN0KGRlYnVnSW5mb19saXN0LCBlY3UsIHB0ciwgcGRpLCBsb2NubyApOwor
ICAgIC8qIE9ubHkgc2VhcmNoIHRoZSBsaXN0IG9mIHVubG9hZGVkIHN5bXMgaWYgd2UgaGF2ZW4n
dCBmb3VuZCBzb21ldGhpbmcsCisgICAgICogYW5kIHdlIGFyZW4ndCBkZWNvZGluZyBhICdjdXJy
ZW50JyBzdGFja3RyYWNlLiAqLworICAgIGlmKCEqcGRpICYmIGVjdSAhPSBFQ19FQ1VfQ1VSUkVO
VCkKKyAgICAgICAgc2VhcmNoX2FsbF9sb2N0YWJzX29uZV9saXN0KHVubG9hZGVkRGVidWdJbmZv
X2xpc3QsIGVjdSwgcHRyLCBwZGksIGxvY25vICk7Cit9CiAKIC8qIFRoZSB3aG9sZSBwb2ludCBv
ZiB0aGlzIHdob2xlIGJpZyBkZWFsOiBtYXAgYSBjb2RlIGFkZHJlc3MgdG8gYQogICAgcGxhdXNp
YmxlIHN5bWJvbCBuYW1lLiAgUmV0dXJucyBGYWxzZSBpZiBubyBpZGVhOyBvdGhlcndpc2UgVHJ1
ZS4KQEAgLTEzNzksNyArMTQ0Myw3IEBACiBzdGF0aWMKIEJvb2wgZ2V0X3N5bV9uYW1lICggQm9v
bCBkb19jeHhfZGVtYW5nbGluZywgQm9vbCBkb196X2RlbWFuZ2xpbmcsCiAgICAgICAgICAgICAg
ICAgICAgIEJvb2wgZG9fYmVsb3dfbWFpbl9yZW5hbWluZywKLSAgICAgICAgICAgICAgICAgICAg
QWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmLAorICAgICAgICAgICAgICAgICAgICBVSW50IGVj
dSwgQWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmLAogICAgICAgICAgICAgICAgICAgICBCb29s
IG1hdGNoX2FueXdoZXJlX2luX3N5bSwgQm9vbCBzaG93X29mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgQm9vbCBmaW5kVGV4dCwgLypPVVQqL1B0cmRpZmZUKiBvZmZzZXRQICkKIHsKQEAgLTEz
ODcsNyArMTQ1MSw3IEBACiAgICBXb3JkICAgICAgIHNubzsKICAgIFB0cmRpZmZUICAgb2Zmc2V0
OwogCi0gICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBhLCAmZGksICZzbm8sIG1hdGNoX2FueXdoZXJl
X2luX3N5bSwgZmluZFRleHQgKTsKKyAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIGVjdSwgYSwgJmRp
LCAmc25vLCBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRUZXh0ICk7CiAgICBpZiAoZGkgPT0g
TlVMTCkgCiAgICAgICByZXR1cm4gRmFsc2U7CiAKQEAgLTE0MzcsNyArMTUwMSw3IEBACiB7CiAg
ICBEZWJ1Z0luZm8qIHNpOwogICAgV29yZCAgICAgICBzbm87Ci0gICBzZWFyY2hfYWxsX3N5bXRh
YnMgKCBndWVzdF9jb2RlX2FkZHIsIAorICAgc2VhcmNoX2FsbF9zeW10YWJzICggRUNfRUNVX0NV
UlJFTlQsIGd1ZXN0X2NvZGVfYWRkciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAmc2ksICZz
bm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4q
LywKICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUvKmNvbnNpZGVyIHRleHQgc3ltYm9scyBv
bmx5Ki8gKTsKQEAgLTE0NTEsOSArMTUxNSwxMyBAQAogICAgbWF0Y2ggYW55d2hlcmUgaW4gZnVu
Y3Rpb24sIGJ1dCBkb24ndCBzaG93IG9mZnNldHMuICovCiBCb29sIFZHXyhnZXRfZm5uYW1lKSAo
IEFkZHIgYSwgQ2hhciogYnVmLCBJbnQgbmJ1ZiApCiB7CisgICAgcmV0dXJuIFZHXyhnZXRfZm5u
YW1lX3dpdGhfZWN1KSAoRUNfRUNVX0NVUlJFTlQsIGEsIGJ1ZiwgbmJ1Zik7Cit9CitCb29sIFZH
XyhnZXRfZm5uYW1lX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGJ1ZiwgSW50
IG5idWYgKQorewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9UcnVl
LCAvKlotZGVtYW5nbGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1t
YWluLXJlbmFtaW5nKi9UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwgbmJ1
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlY3UsIGEsIGJ1ZiwgbmJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0xNDYyLDExICsxNTMwLDE2IEBA
CiAKIC8qIFRoaXMgaXMgYXZhaWxhYmxlIHRvIHRvb2xzLi4uIGFsd2F5cyBkZW1hbmdsZSBDKysg
bmFtZXMsCiAgICBtYXRjaCBhbnl3aGVyZSBpbiBmdW5jdGlvbiwgYW5kIHNob3cgb2Zmc2V0IGlm
IG5vbnplcm8uICovCisKIEJvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpICggQWRkciBhLCBD
aGFyKiBidWYsIEludCBuYnVmICkKIHsKKyAgICByZXR1cm4gVkdfKGdldF9mbm5hbWVfd19vZmZz
ZXRfYW5kX2VjdSkgKCBFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmICk7Cit9CitCb29sIFZH
XyhnZXRfZm5uYW1lX3dfb2Zmc2V0X2FuZF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciog
YnVmLCBJbnQgbmJ1ZiApCit7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5n
bGUqL1RydWUsIC8qWi1kZW1hbmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAv
KmJlbG93LW1haW4tcmVuYW1pbmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwg
YnVmLCBuYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVjdSwgYSwgYnVmLCBuYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9UcnVlLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovVHJ1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKnRleHQgc3ltcyBvbmx5Ki9UcnVlLApAQCAtMTQ4MCw3ICsxNTUz
LDcgQEAKIHsKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwg
LypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFp
bi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsIG5idWYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgRUNfRUNVX0NVUlJFTlQsIGEsIGJ1ZiwgbmJ1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1biovRmFsc2Us
IAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKnRleHQgc3ltcyBvbmx5Ki9UcnVlLApAQCAtMTQ5NCw3ICsx
NTY3LDcgQEAKIHsKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovRmFs
c2UsIC8qWi1kZW1hbmdsZSovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxv
dy1tYWluLXJlbmFtaW5nKi9GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYs
IG5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgRUNfRUNVX0NVUlJFTlQsIGEsIGJ1Ziwg
bmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1biov
VHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0xNTA4
LDcgKzE1ODEsNyBAQAogewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xl
Ki9GYWxzZSwgLypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8q
YmVsb3ctbWFpbi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBi
dWYsIG5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgRUNfRUNVX0NVUlJFTlQsIGEsIGJ1
ZiwgbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1
biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0x
NTY2LDcgKzE2MzksNyBAQAogICAgdmdfYXNzZXJ0KG5fZG5hbWUgPiAxKTsKICAgIG9rID0gZ2V0
X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5nbGUqL0ZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcqL0ZhbHNlLAotICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhX2FkZHIsIGRuYW1lLCBuX2RuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVOVCwgZGF0YV9hZGRyLCBkbmFtZSwgbl9kbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9zeW0qL1RydWUsIAog
ICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgIC8qZGF0YSBzeW1zIG9ubHkgcGxlYXNlKi9GYWxzZSwKQEAgLTE1ODIsNiAr
MTY1NSwxMCBAQAogICAgcmVxdWlyZSBkZWJ1ZyBpbmZvLiAgQ2FsbGVyIHN1cHBsaWVzIGJ1ZiBh
bmQgbmJ1Zi4gKi8KIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAoIEFkZHIgYSwgQ2hhciogYnVmLCBJ
bnQgbmJ1ZiApCiB7CisgICByZXR1cm4gVkdfKGdldF9vYmpuYW1lX3dpdGhfZWN1KSAoRUNfRUNV
X0NVUlJFTlQsIGEsIGJ1ZiwgbmJ1Zik7Cit9CitCb29sIFZHXyhnZXRfb2JqbmFtZV93aXRoX2Vj
dSkgKCBVSW50IGVjdSwgQWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmICkKK3sKICAgIERlYnVn
SW5mbyogZGk7CiAgICBjb25zdCBOU2VnbWVudCAqc2VnOwogICAgSENoYXIqIGZpbGVuYW1lOwpA
QCAtMTU4OSw2ICsxNjY2LDEwIEBACiAgICAvKiBMb29rIGluIHRoZSBkZWJ1Z0luZm9fbGlzdCB0
byBmaW5kIHRoZSBuYW1lLiAgSW4gbW9zdCBjYXNlcyB3ZQogICAgICAgZXhwZWN0IHRoaXMgdG8g
cHJvZHVjZSBhIHJlc3VsdC4gKi8KICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0g
TlVMTDsgZGkgPSBkaS0+bmV4dCkgeworICAgICAgaWYgKCAhIGVjdV9pbl9kaV9yYW5nZSggZWN1
LCBkaSkgKSB7CisgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKwogICAgICAgaWYgKGRpLT50
ZXh0X3ByZXNlbnQKICAgICAgICAgICAmJiBkaS0+dGV4dF9zaXplID4gMAogICAgICAgICAgICYm
IGRpLT50ZXh0X2F2bWEgPD0gYSAKQEAgLTE2MzYsMjYgKzE3MTcsMTMgQEAKIHsKICAgIERlYnVn
SW5mbyogc2k7CiAgICBXb3JkICAgICAgIGxvY25vOwotICAgc2VhcmNoX2FsbF9sb2N0YWJzICgg
YSwgJnNpLCAmbG9jbm8gKTsKKyAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIEVDX0VDVV9DVVJSRU5U
LCBhLCAmc2ksICZsb2NubyApOwogICAgaWYgKHNpID09IE5VTEwpIAogICAgICAgcmV0dXJuIEZh
bHNlOwogICAgVkdfKHN0cm5jcHlfc2FmZWx5KShmaWxlbmFtZSwgc2ktPmxvY3RhYltsb2Nub10u
ZmlsZW5hbWUsIG5fZmlsZW5hbWUpOwogICAgcmV0dXJuIFRydWU7CiB9CiAKLS8qIE1hcCBhIGNv
ZGUgYWRkcmVzcyB0byBhIGxpbmUgbnVtYmVyLiAgUmV0dXJucyBUcnVlIGlmIHN1Y2Nlc3NmdWwu
ICovCi1Cb29sIFZHXyhnZXRfbGluZW51bSkoIEFkZHIgYSwgVUludCogbGluZW5vICkKLXsKLSAg
IERlYnVnSW5mbyogc2k7Ci0gICBXb3JkICAgICAgIGxvY25vOwotICAgc2VhcmNoX2FsbF9sb2N0
YWJzICggYSwgJnNpLCAmbG9jbm8gKTsKLSAgIGlmIChzaSA9PSBOVUxMKSAKLSAgICAgIHJldHVy
biBGYWxzZTsKLSAgICpsaW5lbm8gPSBzaS0+bG9jdGFiW2xvY25vXS5saW5lbm87Ci0KLSAgIHJl
dHVybiBUcnVlOwotfQotCiAvKiBNYXAgYSBjb2RlIGFkZHJlc3MgdG8gYSBmaWxlbmFtZS9saW5l
IG51bWJlci9kaXIgbmFtZSBpbmZvLgogICAgU2VlIHByb3RvdHlwZSBmb3IgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gb2YgYmVoYXZpb3VyLgogKi8KQEAgLTE2NjUsNiArMTczMywxNSBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0Jvb2wqIGRpcm5hbWVfYXZhaWxhYmxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1VJbnQqIGxpbmVubyAp
CiB7CisgICAgcmV0dXJuIFZHXyhnZXRfZmlsZW5hbWVfbGluZW51bV93aXRoX2VjdSkgKEVDX0VD
VV9DVVJSRU5ULCBhLAorICAgICAgICAgICAgZmlsZW5hbWUsIG5fZmlsZW5hbWUsIGRpcm5hbWUs
IG5fZGlybmFtZSwgZGlybmFtZV9hdmFpbGFibGUsIGxpbmVubyk7Cit9CitCb29sIFZHXyhnZXRf
ZmlsZW5hbWVfbGluZW51bV93aXRoX2VjdSkgKCBVSW50IGVjdSwgQWRkciBhLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9DaGFyKiBmaWxlbmFtZSwgSW50IG5fZmls
ZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQ2hhciogZGly
bmFtZSwgIEludCBuX2Rpcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
Kk9VVCovQm9vbCogZGlybmFtZV9hdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKk9VVCovVUludCogbGluZW5vICkKK3sKICAgIERlYnVnSW5mbyogc2k7CiAgICBX
b3JkICAgICAgIGxvY25vOwogCkBAIC0xNjcyLDcgKzE3NDksNyBAQAogICAgICAgICAgICAgICB8
fAogICAgICAgICAgICAgICAoZGlybmFtZSAhPSBOVUxMICYmIGRpcm5hbWVfYXZhaWxhYmxlICE9
IE5VTEwpICk7CiAKLSAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIGEsICZzaSwgJmxvY25vICk7Cisg
ICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBlY3UsIGEsICZzaSwgJmxvY25vICk7CiAgICBpZiAoc2kg
PT0gTlVMTCkgewogICAgICAgaWYgKGRpcm5hbWVfYXZhaWxhYmxlKSB7CiAgICAgICAgICAqZGly
bmFtZV9hdmFpbGFibGUgPSBGYWxzZTsKQEAgLTE4MTksNiArMTg5NiwxMCBAQAogCiBDaGFyKiBW
R18oZGVzY3JpYmVfSVApKEFkZHIgZWlwLCBDaGFyKiBidWYsIEludCBuX2J1ZikKIHsKKyAgICBy
ZXR1cm4gVkdfKGRlc2NyaWJlX0lQX3dpdGhfZWN1KSAoRUNfRUNVX0NVUlJFTlQsIGVpcCwgYnVm
LCBuX2J1Zik7Cit9CitDaGFyKiBWR18oZGVzY3JpYmVfSVBfd2l0aF9lY3UpKFVJbnQgZWN1LCBB
ZGRyIGVpcCwgQ2hhciogYnVmLCBJbnQgbl9idWYpCit7CiAjICBkZWZpbmUgQVBQRU5EKF9zdHIp
IFwKICAgICAgIG4gPSBwdXRTdHIobiwgbl9idWYsIGJ1ZiwgX3N0cikKICMgIGRlZmluZSBBUFBF
TkRfRVNDKF9jb3VudCxfc3RyKSBcCkBAIC0xODM3LDExICsxOTE4LDExIEBACiAKICAgIEJvb2wg
IGtub3dfZGlyaW5mbyA9IEZhbHNlOwogICAgQm9vbCAga25vd19mbm5hbWUgID0gVkdfKGNsb19z
eW1fb2Zmc2V0cykKLSAgICAgICAgICAgICAgICAgICAgICAgID8gVkdfKGdldF9mbm5hbWVfd19v
ZmZzZXQpIChlaXAsIGJ1Zl9mbiwgQlVGX0xFTikKLSAgICAgICAgICAgICAgICAgICAgICAgIDog
VkdfKGdldF9mbm5hbWUpIChlaXAsIGJ1Zl9mbiwgQlVGX0xFTik7Ci0gICBCb29sICBrbm93X29i
am5hbWUgPSBWR18oZ2V0X29iam5hbWUpKGVpcCwgYnVmX29iaiwgQlVGX0xFTik7Ci0gICBCb29s
ICBrbm93X3NyY2xvYyAgPSBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWlwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgID8gVkdfKGdldF9m
bm5hbWVfd19vZmZzZXRfYW5kX2VjdSkgKGVjdSwgZWlwLCBidWZfZm4sIEJVRl9MRU4pCisgICAg
ICAgICAgICAgICAgICAgICAgICA6IFZHXyhnZXRfZm5uYW1lX3dpdGhfZWN1KSAoZWN1LCBlaXAs
IGJ1Zl9mbiwgQlVGX0xFTik7CisgICBCb29sICBrbm93X29iam5hbWUgPSBWR18oZ2V0X29iam5h
bWVfd2l0aF9lY3UpKGVjdSwgZWlwLCBidWZfb2JqLCBCVUZfTEVOKTsKKyAgIEJvb2wgIGtub3df
c3JjbG9jICA9IFZHXyhnZXRfZmlsZW5hbWVfbGluZW51bV93aXRoX2VjdSkoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlY3UsIGVpcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWZfc3JjbG9jLCAgQlVGX0xFTiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfZGly
bmFtZSwgQlVGX0xFTiwgJmtub3dfZGlyaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZsaW5lbm8gCkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9yYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gY29yZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3RvcmFnZS5oCShyZXZpc2lv
biAxMjM1NikKKysrIGNvcmVncmluZC9tX2RlYnVnaW5mby9wcml2X3N0b3JhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgyLDYgKzQ4MiwxMCBAQAogICAgICAgZm9yZXZlciB0aGVyZWFmdGVyLiAg
VGhlIC5oYW5kbGUgZmllbGQgaXMgc2V0IGFzIHNvb24gYXMgdGhpcwogICAgICAgc3RydWN0dXJl
IGlzIGFsbG9jYXRlZC4gKi8KICAgIFVMb25nIGhhbmRsZTsKKyAgIAorICAgLyogVGhlIGVjX2xh
c3RfZWN1IHdoZW4gdGhpcyBpbmZvIHdhcyBjcmVhdGVkIG9yIHJlbW92ZWQgKi8KKyAgIFVJbnQg
Zmlyc3RfZWN1OworICAgVUludCBsYXN0X2VjdTsKIAogICAgLyogVXNlZCBmb3IgZGVidWdnaW5n
IG9ubHkgLSBpbmRpY2F0ZSB3aGF0IHN0dWZmIHRvIGR1bXAgd2hpbHN0CiAgICAgICByZWFkaW5n
IHN0dWZmIGludG8gdGhlIHNlZ2luZm8uICBBcmUgY29tcHV0ZWQgYXMgZWFybHkgaW4gdGhlCklu
ZGV4OiBjb3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21f
c3RhY2t0cmFjZS5jCShyZXZpc2lvbiAxMjM1NikKKysrIGNvcmVncmluZC9tX3N0YWNrdHJhY2Uu
Ywkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQAogI2luY2x1ZGUgInB1Yl9jb3JlX3hh
cnJheS5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2NsaWVudHN0YXRlLmgiICAgLy8gVkdfKGNsaWVu
dF9fZGxfc3lzaW5mb19pbnQ4MCkKICNpbmNsdWRlICJwdWJfY29yZV90cmFtcG9saW5lLmgiCisj
aW5jbHVkZSAicHViX2NvcmVfZXhlY29udGV4dC5oIiAgICAvLyBFQ19FQ1VfQ1VSUkVOVAogCi0K
IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KIC8qLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLS0tKi8KIC8qLS0tIEJFR0lOIHBsYXRmb3JtLWRlcGVuZGVudCB1bndpbmRl
ciB3b3JrZXIgZnVuY3Rpb25zICAgLS0tKi8KQEAgLTgyMiw4ICs4MjIsOSBAQAogICAgI2RlZmlu
ZSBCVUZfTEVOICAgNDA5NgogICAgCiAgICBzdGF0aWMgVUNoYXIgYnVmW0JVRl9MRU5dOworICAg
VUludCBlY3UgPSAqKFVJbnQqKXV1X29wYXF1ZTsKIAotICAgVkdfKGRlc2NyaWJlX0lQKShpcCwg
YnVmLCBCVUZfTEVOKTsKKyAgIFZHXyhkZXNjcmliZV9JUF93aXRoX2VjdSkoZWN1LCBpcCwgYnVm
LCBCVUZfTEVOKTsKIAogICAgaWYgKFZHXyhjbG9feG1sKSkgewogICAgICAgVkdfKHByaW50Zl94
bWwpKCIgICAgJXNcbiIsIGJ1Zik7CkBAIC04MzUsMTIgKzgzNiwxNyBAQAogLyogUHJpbnQgYSBT
dGFja1RyYWNlLiAqLwogdm9pZCBWR18ocHBfU3RhY2tUcmFjZSkgKCBTdGFja1RyYWNlIGlwcywg
VUludCBuX2lwcyApCiB7CisgICAgVkdfKHBwX1N0YWNrVHJhY2Vfd2l0aF9lY3UpIChFQ19FQ1Vf
Q1VSUkVOVCwgaXBzLCBuX2lwcyApOworfQorLyogUHJpbnQgYSBTdGFja1RyYWNlLiAqLwordm9p
ZCBWR18ocHBfU3RhY2tUcmFjZV93aXRoX2VjdSkgKCBVSW50IGVjdSwgU3RhY2tUcmFjZSBpcHMs
IFVJbnQgbl9pcHMgKQorewogICAgdmdfYXNzZXJ0KCBuX2lwcyA+IDAgKTsKIAogICAgaWYgKFZH
XyhjbG9feG1sKSkKICAgICAgIFZHXyhwcmludGZfeG1sKSgiICA8c3RhY2s+XG4iKTsKIAotICAg
VkdfKGFwcGx5X1N0YWNrVHJhY2UpKCBwcmludElwRGVzYywgTlVMTCwgaXBzLCBuX2lwcyApOwor
ICAgVkdfKGFwcGx5X1N0YWNrVHJhY2UpKCBwcmludElwRGVzYywgJmVjdSwgaXBzLCBuX2lwcyAp
OwogCiAgICBpZiAoVkdfKGNsb194bWwpKQogICAgICAgVkdfKHByaW50Zl94bWwpKCIgIDwvc3Rh
Y2s+XG4iKTsKSW5kZXg6IGNvcmVncmluZC9tX21haW4uYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3Jp
bmQvbV9tYWluLmMJKHJldmlzaW9uIDEyMzU2KQorKysgY29yZWdyaW5kL21fbWFpbi5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDEwIEBACiAiICAgIC0tbG9nLWZkPTxudW1iZXI+ICAg
ICAgICAgbG9nIG1lc3NhZ2VzIHRvIGZpbGUgZGVzY3JpcHRvciBbMj1zdGRlcnJdXG4iCiAiICAg
IC0tbG9nLWZpbGU9PGZpbGU+ICAgICAgICAgbG9nIG1lc3NhZ2VzIHRvIDxmaWxlPlxuIgogIiAg
ICAtLWxvZy1zb2NrZXQ9aXBhZGRyOnBvcnQgIGxvZyBtZXNzYWdlcyB0byBzb2NrZXQgaXBhZGRy
OnBvcnRcbiIKKyIgICAgLS1rZWVwLXVubG9hZGVkLXN5bXM9bm98eWVzIEtlZXAgc3ltYm9scyBm
b3IgdW5sb2FkZWQgY29kZSBbbm9dXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGhpcyBhbGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG9cbiIKKyIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGZpbGUvbGluZSBpbmZvIGZvciBjb2RlIHRo
YXQgaGFzIGJlZW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbGNsb3NlJ2Qg
KG9yIHNpbWlsYXIpXG4iCiAiXG4iCiAiICB1c2VyIG9wdGlvbnMgZm9yIFZhbGdyaW5kIHRvb2xz
IHRoYXQgcmVwb3J0IGVycm9yczpcbiIKICIgICAgLS14bWw9eWVzICAgICAgICAgICAgICAgICBl
bWl0IGVycm9yIG91dHB1dCBpbiBYTUwgKHNvbWUgdG9vbHMgb25seSlcbiIKQEAgLTU1Nyw2ICs1
NjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICBWR18oY2xvX3ZleF9jb250cm9sKS5ndWVz
dF9jaGFzZV90aHJlc2gsIDAsIDk5KSB7fQogICAgICAgZWxzZSBpZiBWR19CT09MX0NMTyhhcmcs
ICItLXZleC1ndWVzdC1jaGFzZS1jb25kIiwKICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGNs
b192ZXhfY29udHJvbCkuZ3Vlc3RfY2hhc2VfY29uZCkge30KKyAgICAgIGVsc2UgaWYgVkdfQk9P
TF9DTE8oYXJnLCAiLS1rZWVwLXVubG9hZGVkLXN5bXMiLAorCSAgICAgICAgICAgICAgIFZHXyhj
bG9fa2VlcF91bmxvYWRlZF9zeW1zKSkge30KIAogICAgICAgZWxzZSBpZiBWR19JTlRfQ0xPKGFy
ZywgIi0tbG9nLWZkIiwgdG1wX2xvZ19mZCkgewogICAgICAgICAgbG9nX3RvID0gVmdMb2dUb19G
ZDsKSW5kZXg6IGNvcmVncmluZC9tX29wdGlvbnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQv
bV9vcHRpb25zLmMJKHJldmlzaW9uIDEyMzU2KQorKysgY29yZWdyaW5kL21fb3B0aW9ucy5jCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAKIFZnU21jICBWR18oY2xvX3NtY19jaGVj
aykgICAgICA9IFZnX1NtY1N0YWNrOwogSENoYXIqIFZHXyhjbG9fa2VybmVsX3ZhcmlhbnQpID0g
TlVMTDsKIEJvb2wgICBWR18oY2xvX2RzeW11dGlsKSAgICAgICA9IEZhbHNlOworQm9vbCAgIFZH
XyhjbG9fa2VlcF91bmxvYWRlZF9zeW1zKT0gRmFsc2U7CiAKIAogLyo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCklu
ZGV4OiBjb3JlZ3JpbmQvcHViX2NvcmVfZXhlY29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVn
cmluZC9wdWJfY29yZV9leGVjb250ZXh0LmgJKHJldmlzaW9uIDEyMzU2KQorKysgY29yZWdyaW5k
L3B1Yl9jb3JlX2V4ZWNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsMTQgQEAK
IGV4dGVybgogLypTdGFja1RyYWNlKi9BZGRyKiBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFj
ZSkgKCBFeGVDb250ZXh0KiBlICk7CiAKKy8vIEtlZXAgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50
bHkgYWxsb2NhdGVkIGVjdSwgc28gdGhhdCBkZWJ1Z2luZm8gY2FuCisvLyBrbm93IGhvdyB0byB0
cmFuc2xhdGUgYWRkcmVzc2VzIHRoYXQgcmVmZXJlbmNlIGNvZGUgdGhhdCBoYXMgYmVlbiB1bmxv
YWRlZAorZXh0ZXJuIFVJbnQgVkdfKGVjX2xhc3RfZWN1KTsKIAorLy8gU3BlY2lhbCBjb25zdGFu
dCB0byB1c2UgZm9yIHRoZSAnZWN1JyBwYXJhbWV0ZXIgd2hlbiBkZWNvZGluZyBhICdjdXJyZW50
JworLy8gc3RhY2sgdHJhY2UsIHRoaXMgd2lsbCBjYXVzZSBpdCB0byBza2lwIGxvb2tpbmcgYXQg
YW55IHVubG9hZGVkIHN5bWJvbHMuCisjZGVmaW5lIEVDX0VDVV9DVVJSRU5UIDB4RkZGRkZGRkYK
KwogI2VuZGlmICAgLy8gX19QVUJfQ09SRV9FWEVDT05URVhUX0gKIAogLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68609</attachid>
            <date>2012-02-08 04:59:56 +0000</date>
            <delta_ts>2012-12-11 05:22:23 +0000</delta_ts>
            <desc>refresh patch again r12368</desc>
            <filename>dlclose-keep-syms-r12368.diff</filename>
            <type>text/plain</type>
            <size>33756</size>
            <attacher name="Kevin Fitch">kfitch42</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb2NzL3htbC9t
YW51YWwtY29yZS54bWwJKHJldmlzaW9uIDEyMzY4KQorKysgZG9jcy94bWwvbWFudWFsLWNvcmUu
eG1sCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsNiArODYyLDE3IEBACiAgICAgPC9saXN0aXRlbT4K
ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtdW5sb2Fk
ZWQtc3ltcyIgeHJlZmxhYmVsPSItLWtlZXAtdW5sb2FkZWQtc3ltcyI+CisgICAgPHRlcm0+Cisg
ICAgICA8b3B0aW9uPjwhW0NEQVRBWy0ta2VlcC11bmxvYWRlZC1zeW1zPTx5ZXN8bm8+IFtkZWZh
dWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg
IDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlLiBUaGlz
IGFsbG93cyBzdGFjaworICAgICAgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBm
aWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICBkbGNsb3NlJ2QgKG9y
IHNpbWlsYXIpPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorCiA8
L3ZhcmlhYmxlbGlzdD4KIDwhLS0gZW5kIG9mIHhpOmluY2x1ZGUgaW4gdGhlIG1hbnBhZ2UgLS0+
CiAKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnZndGVzdAkocmV2aXNp
b24gMCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVy
OiAuLi9maWx0ZXJfc3RkZXJyCit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMgLS1rZWVwLXVubG9h
ZGVkLXN5bXM9eWVzCkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28u
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwko
cmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qKiBN
YWtlcyBhIGp1bXAgYmFzZWQgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBvcmRlciB0
byBtYWtlIHN1cmUKKyAqIGVycm9ycyByZXBvcnRlZCB3aGlsZSB0aGUgZGxvcGVuJ2VkIG9iamVj
dCBpcyBsb2FkZWQgd29yay4gKi8KK2ludCBqbXBfb25fdW5pbml0KHZvaWQpIHsKKyAgICBpbnQg
dW5pbml0OworICAgIGlmKHVuaW5pdCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gMDsKK30KKworLyoqIExlYWsgMSBieXRlIG9mIG1lbW9yeS4gVGhpcyBpcyB0
byB0ZXN0IHRoZSBzdGFjayBjaGVjayByZXBvcnRlZCBhZnRlciB0aGUKKyAqICBvYmplY3QgaGFz
IGJlZW4gZGxjbG9zZSdkLiAqLworY2hhciogYWxsb2NfMV9ieXRlKHZvaWQpIHsKKyAgICByZXR1
cm4gKGNoYXIqKW1hbGxvYygxKTsKK30KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xv
c2VfbGVhay1uby1rZWVwLnN0ZGVyci5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMv
bGludXgvZGxjbG9zZV9sZWFrLW5vLWtlZXAuc3RkZXJyLmV4cAkocmV2aXNpb24gMCkKKysrIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay1uby1rZWVwLnN0ZGVyci5leHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKKworQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVu
ZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKQorICAgLi4uCisKK0ludmFsaWQgcmVhZCBvZiBz
aXplIDEKKyAgIC4uLgorIEFkZHJlc3MgMHguLi4uLi4uLiBpcyAxIGJ5dGVzIGJlZm9yZSBhIGJs
b2NrIG9mIHNpemUgMSBhbGxvYydkCisgICBhdCAweC4uLi4uLi4uOiBtYWxsb2MgKHZnX3JlcGxh
Y2VfbWFsbG9jLmM6Li4uKQorICAgLi4uCisKKworSEVBUCBTVU1NQVJZOgorICAgIGluIHVzZSBh
dCBleGl0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgIHRvdGFsIGhlYXAgdXNhZ2U6IDYgYWxsb2Nz
LCA1IGZyZWVzLCAxLDQ4MCBieXRlcyBhbGxvY2F0ZWQKKworMSBieXRlcyBpbiAxIGJsb2NrcyBh
cmUgZGVmaW5pdGVseSBsb3N0IGluIGxvc3MgcmVjb3JkIC4uLiBvZiAuLi4KKyAgIGF0IDB4Li4u
Li4uLi46IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisgICAuLi4KKworTEVBSyBT
VU1NQVJZOgorICAgZGVmaW5pdGVseSBsb3N0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgICBpbmRp
cmVjdGx5IGxvc3Q6IDAgYnl0ZXMgaW4gMCBibG9ja3MKKyAgICAgcG9zc2libHkgbG9zdDogMCBi
eXRlcyBpbiAwIGJsb2NrcworICAgc3RpbGwgcmVhY2hhYmxlOiAwIGJ5dGVzIGluIDAgYmxvY2tz
CisgICAgICAgIHN1cHByZXNzZWQ6IDAgYnl0ZXMgaW4gMCBibG9ja3MKKworRm9yIGNvdW50cyBv
ZiBkZXRlY3RlZCBhbmQgc3VwcHJlc3NlZCBlcnJvcnMsIHJlcnVuIHdpdGg6IC12CitVc2UgLS10
cmFjay1vcmlnaW5zPXllcyB0byBzZWUgd2hlcmUgdW5pbml0aWFsaXNlZCB2YWx1ZXMgY29tZSBm
cm9tCitFUlJPUiBTVU1NQVJZOiAzIGVycm9ycyBmcm9tIDMgY29udGV4dHMgKHN1cHByZXNzZWQ6
IDAgZnJvbSAwKQpJbmRleDogbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLW5vLWtl
ZXAudmd0ZXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVh
ay1uby1rZWVwLnZndGVzdAkocmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2Rs
Y2xvc2VfbGVhay1uby1rZWVwLnZndGVzdAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitw
cm9nOiBkbGNsb3NlX2xlYWsKK3N0ZGVycl9maWx0ZXI6IC4uL2ZpbHRlcl9zdGRlcnIKK3Znb3B0
czogLS1sZWFrLWNoZWNrPXllcyAtLWtlZXAtdW5sb2FkZWQtc3ltcz1ubwpJbmRleDogbWVtY2hl
Y2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVz
dHMvbGludXgvZGxjbG9zZV9sZWFrLmMJKHJldmlzaW9uIDApCisrKyBtZW1jaGVjay90ZXN0cy9s
aW51eC9kbGNsb3NlX2xlYWsuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorLyogIFRl
c3QgcmVwb3J0aW5nIG9mIG1lbW9yeSBsZWFrcyBpbiBvYmplY3RzIHRoYXQgaGF2ZSBiZWVuIGRs
b3BlbidlZC4KKyAqICAgRmlsZTogICBkbGNsb3NlX2xlYWsuYyAqLworCisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorCitpbnQgKCpq
bXBfb25fdW5pbml0KSh2b2lkKTsKK2NoYXIqICgqYWxsb2NfMV9ieXRlKSh2b2lkKTsKKworaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgICAgY2hhciogbWVtVG9MZWFrOworICAg
IGNoYXIgeDsKKyAgICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oIi4vZGxjbG9zZV9sZWFrX3NvLnNv
IiwgUlRMRF9OT1cpOworICAgIGlmKCFoYW5kbGUpIHsKKyAgICAgICAgcHJpbnRmKCJGQUlMVVJF
IHRvIGRsb3BlbiBkbGNsb3NlX2xlYWtfc28uc29cbiIpOworICAgICAgICByZXR1cm4gRVhJVF9G
QUlMVVJFOworICAgIH0KKyAgICBqbXBfb25fdW5pbml0ID0gZGxzeW0oaGFuZGxlLCJqbXBfb25f
dW5pbml0Iik7CisgICAgYWxsb2NfMV9ieXRlID0gZGxzeW0oaGFuZGxlLCJhbGxvY18xX2J5dGUi
KTsKKyAgICAodm9pZClqbXBfb25fdW5pbml0KCk7CisgICAgbWVtVG9MZWFrID0gYWxsb2NfMV9i
eXRlKCk7CisgICAgZGxjbG9zZShoYW5kbGUpOworICAgIHggPSBtZW1Ub0xlYWtbLTFdOworICAg
IHJldHVybiAoRVhJVF9TVUNDRVNTKTsKK30KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01h
a2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFt
CShyZXZpc2lvbiAxMjM2OCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsOCBAQAogRVhUUkFfRElTVCA9IFwKIAlicmsuc3RkZXJy
LmV4cCBicmsudmd0ZXN0IFwKIAljYXBnZXQudmd0ZXN0IGNhcGdldC5zdGRlcnIuZXhwIGNhcGdl
dC5zdGRlcnIuZXhwMiBcCisJZGxjbG9zZV9sZWFrLW5vLWtlZXAuc3RkZXJyLmV4cCBkbGNsb3Nl
X2xlYWstbm8ta2VlcC52Z3Rlc3QgXAorCWRsY2xvc2VfbGVhay5zdGRlcnIuZXhwIGRsY2xvc2Vf
bGVhay52Z3Rlc3QgXAogCWxzZnJhbWUxLnZndGVzdCBsc2ZyYW1lMS5zdGRvdXQuZXhwIGxzZnJh
bWUxLnN0ZGVyci5leHAgXAogCWxzZnJhbWUyLnZndGVzdCBsc2ZyYW1lMi5zdGRvdXQuZXhwIGxz
ZnJhbWUyLnN0ZGVyci5leHAgXAogCXNpZ3F1ZXVlLnZndGVzdCBzaWdxdWV1ZS5zdGRlcnIuZXhw
IFwKQEAgLTIwLDYgKzIyLDcgQEAKIGNoZWNrX1BST0dSQU1TID0gXAogCWJyayBcCiAJY2FwZ2V0
IFwKKwlkbGNsb3NlX2xlYWsgZGxjbG9zZV9sZWFrX3NvLnNvIFwKIAlsc2ZyYW1lMSBcCiAJbHNm
cmFtZTIgXAogCXNpZ3F1ZXVlIFwKQEAgLTM2LDMgKzM5LDE2IEBACiBzdGFja19zd2l0Y2hfTERB
REQgICAgPSAtbHB0aHJlYWQKIHRpbWVyZmRfc3lzY2FsbF9MREFERCA9IC1scnQKIAorIyBCdWls
ZCBzaGFyZWQgb2JqZWN0IGZvciBkbGNsb3NlX2xlYWsKKyMjIyBJIGRvbid0IHVzZSBHTlUgQXV0
b3Rvb2xzIG9mdGVuLCBzbyBJIGhhdmUganVzdCBrbHVkZ2VkIHRvZ2V0aGVyIGJ1aWxkaW5nCisj
IyMgVGhlIGxvYWRhYmxlIGxpYnJhcnkgaGVyZS4uLiBJIGFtIGNlcnRhaW4gc29tZW9uZSBlbHNl
IGNvdWxkIGRvIHRoaXMKKyMjIyBjbGVhbmVyLgorZGxjbG9zZV9sZWFrX1NPVVJDRVMgICAgICAg
ICAgPSBkbGNsb3NlX2xlYWsuYworZGxjbG9zZV9sZWFrX0RFUEVOREVOQ0lFUyAgICAgPSBkbGNs
b3NlX2xlYWtfc28uc28KK2RsY2xvc2VfbGVha19MREFERCAgICAgICAgICAgID0gLWxkbAorZGxj
bG9zZV9sZWFrX0xERkxBR1MgICAgICAgICAgPSAkKEFNX0ZMQUdfTTMyNjRfUFJJKSBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJCh0b3BfYnVpbGRkaXIpL21l
bWNoZWNrL3Rlc3RzCitkbGNsb3NlX2xlYWtfc29fc29fU09VUkNFUyA9IGRsY2xvc2VfbGVha19z
by5jCitkbGNsb3NlX2xlYWtfc29fc29fQ0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtZnBpYworZGxj
bG9zZV9sZWFrX3NvX3NvX0xERkxBR1MgID0gLWZwaWMgJChBTV9GTEFHX00zMjY0X1BSSSkgLXNo
YXJlZCAtV2wsLXNvbmFtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsZGxj
bG9zZV9sZWFrX3NvLnNvCkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsu
c3RkZXJyLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xl
YWsuc3RkZXJyLmV4cAkocmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xv
c2VfbGVhay5zdGRlcnIuZXhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisKK0NvbmRp
dGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykKKyAg
IGF0IDB4Li4uLi4uLi46IGptcF9vbl91bmluaXQgKGRsY2xvc2VfbGVha19zby5jOjcpCisgICBi
eSAweC4uLi4uLi4uOiBtYWluIChkbGNsb3NlX2xlYWsuYzoyMSkKKworSW52YWxpZCByZWFkIG9m
IHNpemUgMQorICAgYXQgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjQpCisgQWRk
cmVzcyAweC4uLi4uLi4uIGlzIDEgYnl0ZXMgYmVmb3JlIGEgYmxvY2sgb2Ygc2l6ZSAxIGFsbG9j
J2QKKyAgIGF0IDB4Li4uLi4uLi46IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisg
ICBieSAweC4uLi4uLi4uOiBhbGxvY18xX2J5dGUgKGRsY2xvc2VfbGVha19zby5jOjE2KQorICAg
YnkgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjIpCisKKworSEVBUCBTVU1NQVJZ
OgorICAgIGluIHVzZSBhdCBleGl0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgIHRvdGFsIGhlYXAg
dXNhZ2U6IDYgYWxsb2NzLCA1IGZyZWVzLCAxLDQ4MCBieXRlcyBhbGxvY2F0ZWQKKworMSBieXRl
cyBpbiAxIGJsb2NrcyBhcmUgZGVmaW5pdGVseSBsb3N0IGluIGxvc3MgcmVjb3JkIC4uLiBvZiAu
Li4KKyAgIGF0IDB4Li4uLi4uLi46IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisg
ICBieSAweC4uLi4uLi4uOiBhbGxvY18xX2J5dGUgKGRsY2xvc2VfbGVha19zby5jOjE2KQorICAg
YnkgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjIpCisKK0xFQUsgU1VNTUFSWToK
KyAgIGRlZmluaXRlbHkgbG9zdDogMSBieXRlcyBpbiAxIGJsb2NrcworICAgaW5kaXJlY3RseSBs
b3N0OiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICAgIHBvc3NpYmx5IGxvc3Q6IDAgYnl0ZXMgaW4g
MCBibG9ja3MKKyAgIHN0aWxsIHJlYWNoYWJsZTogMCBieXRlcyBpbiAwIGJsb2NrcworICAgICAg
ICBzdXBwcmVzc2VkOiAwIGJ5dGVzIGluIDAgYmxvY2tzCisKK0ZvciBjb3VudHMgb2YgZGV0ZWN0
ZWQgYW5kIHN1cHByZXNzZWQgZXJyb3JzLCByZXJ1biB3aXRoOiAtdgorVXNlIC0tdHJhY2stb3Jp
Z2lucz15ZXMgdG8gc2VlIHdoZXJlIHVuaW5pdGlhbGlzZWQgdmFsdWVzIGNvbWUgZnJvbQorRVJS
T1IgU1VNTUFSWTogMyBlcnJvcnMgZnJvbSAzIGNvbnRleHRzIChzdXBwcmVzc2VkOiAwIGZyb20g
MCkKSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfb3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1
ZGUvcHViX3Rvb2xfb3B0aW9ucy5oCShyZXZpc2lvbiAxMjM2OCkKKysrIGluY2x1ZGUvcHViX3Rv
b2xfb3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDExIEBACiAvKiBDb250
aW51ZSBzdGFjayB0cmFjZXMgYmVsb3cgbWFpbigpPyAgRGVmYXVsdDogTk8gKi8KIGV4dGVybiBC
b29sIFZHXyhjbG9fc2hvd19iZWxvd19tYWluKTsKIAorLyogS2VlcCBzeW1ib2xzIGZvciBjb2Rl
IHRoYXQgaXMgdW5sb2FkZWQgKGRsY2xvc2Ugb3Igc2ltaWxhcikgc28gdGhhdCBzdGFjaworICAg
dHJhY2VzIGNhbiBzdGlsbCBnaXZlIGxpbmUvZmlsZSBpbmZvIGZvciBwcmV2aW91c2x5IGNhcHR1
cmVkIHN0YWNrIHRyYWNlcy4KKyAgIGUuZy4gLi4uIHNob3dpbmcgd2hlcmUgYSBibG9jayB3YXMg
YWxsb2NhdGVkIGUuZy4gbGVha3Mgb2Ygb3IgYWNjZXNzZXMganVzdAorICAgb3V0c3RpZGUgYSBi
bG9jay4gKi8KK2V4dGVybiBCb29sIFZHXyhjbG9fa2VlcF91bmxvYWRlZF9zeW1zKTsKIAogLyog
VXNlZCB0byBleHBhbmQgZmlsZSBuYW1lcy4gICJvcHRpb25fbmFtZSIgaXMgdGhlIG9wdGlvbiBu
YW1lLCBlZy4KICAgICItLWxvZy1maWxlIi4gICdmb3JtYXQnIGlzIHdoYXQgZm9sbG93cywgZWcu
ICJjYWNoZWdyaW5kLm91dC4lcCIuICBJbgpJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9zdGFja3Ry
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9zdGFja3RyYWNlLmgJKHJldmlz
aW9uIDEyMzY4KQorKysgaW5jbHVkZS9wdWJfdG9vbF9zdGFja3RyYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDYgKzc1LDcgQEAKIAogLy8gUHJpbnQgYSBTdGFja1RyYWNlLgogZXh0ZXJuIHZv
aWQgVkdfKHBwX1N0YWNrVHJhY2UpICggU3RhY2tUcmFjZSBpcHMsIFVJbnQgbl9pcHMgKTsKK2V4
dGVybiB2b2lkIFZHXyhwcF9TdGFja1RyYWNlX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBTdGFja1Ry
YWNlIGlwcywgVUludCBuX2lwcyApOwogCiAvLyBHZXRzIGFuZCBpbW1lZGlhdGVseSBwcmludHMg
YSBTdGFja1RyYWNlLiAgSnVzdCBhIGJpdCBzaW1wbGVyIHRoYW4KIC8vIGNhbGxpbmcgVkdfKGdl
dF9TdGFja1RyYWNlKSgpIHRoZW4gVkdfKHBwX1N0YWNrVHJhY2UpKCkuCkluZGV4OiBpbmNsdWRl
L3B1Yl90b29sX2RlYnVnaW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfZGVi
dWdpbmZvLmgJKHJldmlzaW9uIDEyMzY4KQorKysgaW5jbHVkZS9wdWJfdG9vbF9kZWJ1Z2luZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTEgQEAKICAgIHNhbWUsIGV4Y2VwdCBpdCBh
cHBlbmRzICIrTiIgdG8gc3ltYm9sIG5hbWVzIHRvIGluZGljYXRlIG9mZnNldHMuICAqLwogZXh0
ZXJuIEJvb2wgVkdfKGdldF9maWxlbmFtZSkgKCBBZGRyIGEsIENoYXIqIGZpbGVuYW1lLCBJbnQg
bl9maWxlbmFtZSApOwogZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWUpICAgKCBBZGRyIGEsIENo
YXIqIGZubmFtZSwgICBJbnQgbl9mbm5hbWUgICApOwotZXh0ZXJuIEJvb2wgVkdfKGdldF9saW5l
bnVtKSAgKCBBZGRyIGEsIFVJbnQqIGxpbmVudW0gKTsKK2V4dGVybiBCb29sIFZHXyhnZXRfZm5u
YW1lX3dpdGhfZWN1KSAgICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciogZm5uYW1lLCAgIEludCBu
X2ZubmFtZSAgICk7CiBleHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICggQWRkciBhLCBDaGFyKiBmbm5hbWUsICAgSW50IG5f
Zm5uYW1lICAgKTsKK2V4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0X2FuZF9lY3Up
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIq
IGZubmFtZSwgICBJbnQgbl9mbm5hbWUgICApOwogCiAvKiBUaGlzIG9uZSBpcyB0aGUgbW9zdCBn
ZW5lcmFsLiAgSXQgZ2l2ZXMgZmlsZW5hbWUsIGxpbmUgbnVtYmVyIGFuZAogICAgb3B0aW9uYWxs
eSBkaXJlY3RvcnkgbmFtZS4gIGZpbGVuYW1lIGFuZCBsaW5lbnVtIG1heSBub3QgYmUgTlVMTC4K
QEAgLTY0LDYgKzY2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VU
Ki9DaGFyKiBkaXJuYW1lLCAgSW50IG5fZGlybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLypPVVQqL0Jvb2wqIGRpcm5hbWVfYXZhaWxhYmxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGluZW51bSApOworZXh0ZXJuIEJvb2wgVkdf
KGdldF9maWxlbmFtZV9saW5lbnVtX3dpdGhfZWN1KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCBVSW50IGVjdSwgQWRkciBhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLypPVVQqL0NoYXIqIGZpbGVuYW1lLCBJbnQgbl9maWxlbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypPVVQqL0NoYXIqIGRpcm5hbWUsICBJbnQgbl9kaXJuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQm9vbCogZGlybmFtZV9hdmFp
bGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9VSW50KiBsaW5l
bnVtICk7CiAKIC8qIFN1Y2NlZWRzIG9ubHkgaWYgd2UgZmluZCBmcm9tIGRlYnVnIGluZm8gdGhh
dCAnYScgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCiAgICBmaXJzdCBpbnN0cnVjdGlvbiBpbiBhIGZ1
bmN0aW9uIC0tIGFzIG9wcG9zZWQgdG8gVkdfKGdldF9mbm5hbWUpIHdoaWNoCkBAIC0xMTcsNiAr
MTI1LDcgQEAKIC8qIFN1Y2NlZWRzIGlmIHRoZSBhZGRyZXNzIGlzIHdpdGhpbiBhIHNoYXJlZCBv
YmplY3Qgb3IgdGhlIG1haW4gZXhlY3V0YWJsZS4KICAgIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIGRl
YnVnIGluZm8gaXMgcHJlc2VudCBvciBub3QuICovCiBleHRlcm4gQm9vbCBWR18oZ2V0X29iam5h
bWUpICAoIEFkZHIgYSwgQ2hhciogb2JqbmFtZSwgSW50IG5fb2JqbmFtZSApOworZXh0ZXJuIEJv
b2wgVkdfKGdldF9vYmpuYW1lX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIG9i
am5hbWUsIEludCBuX29iam5hbWUgKTsKIAogLyogUHV0cyBpbnRvICdidWYnIGluZm8gYWJvdXQg
dGhlIGNvZGUgYWRkcmVzcyAlZWlwOiAgdGhlIGFkZHJlc3MsIGZ1bmN0aW9uCiAgICBuYW1lIChp
ZiBrbm93bikgYW5kIGZpbGVuYW1lL2xpbmUgbnVtYmVyIChpZiBrbm93biksIGxpa2UgdGhpczoK
QEAgLTEyNiw2ICsxMzUsNyBAQAogICAgJ25fYnVmJyBnaXZlcyBsZW5ndGggb2YgJ2J1ZicuICBS
ZXR1cm5zICdidWYnLgogKi8KIGV4dGVybiBDaGFyKiBWR18oZGVzY3JpYmVfSVApKEFkZHIgZWlw
LCBDaGFyKiBidWYsIEludCBuX2J1Zik7CitleHRlcm4gQ2hhciogVkdfKGRlc2NyaWJlX0lQX3dp
dGhfZWN1KShVSW50IGVjdSwgQWRkciBlaXAsIENoYXIqIGJ1ZiwgSW50IG5fYnVmKTsKIAogCiAv
KiBHZXQgYW4gWEFycmF5IG9mIFN0YWNrQmxvY2sgd2hpY2ggZGVzY3JpYmUgdGhlIHN0YWNrIChh
dXRvKSBibG9ja3MKSW5kZXg6IG5vbmUvdGVzdHMvY21kbGluZTIuc3Rkb3V0LmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5leHAJKHJldmlzaW9uIDEyMzY4KQor
Kysgbm9uZS90ZXN0cy9jbWRsaW5lMi5zdGRvdXQuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiwxMCBAQAogICAgIC0tbG9nLWZkPTxudW1iZXI+ICAgICAgICAgbG9nIG1lc3NhZ2VzIHRv
IGZpbGUgZGVzY3JpcHRvciBbMj1zdGRlcnJdCiAgICAgLS1sb2ctZmlsZT08ZmlsZT4gICAgICAg
ICBsb2cgbWVzc2FnZXMgdG8gPGZpbGU+CiAgICAgLS1sb2ctc29ja2V0PWlwYWRkcjpwb3J0ICBs
b2cgbWVzc2FnZXMgdG8gc29ja2V0IGlwYWRkcjpwb3J0CisgICAgLS1rZWVwLXVubG9hZGVkLXN5
bXM9bm98eWVzIEtlZXAgc3ltYm9scyBmb3IgdW5sb2FkZWQgY29kZSBbbm9dCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBzdGFjayB0cmFjZXMgZm9yIG1lbW9yeSBs
ZWFrcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBmaWxlL2xpbmUg
aW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkbGNsb3NlJ2QgKG9yIHNpbWlsYXIpCiAKICAgdXNlciBvcHRpb25zIGZvciBWYWxncmluZCB0
b29scyB0aGF0IHJlcG9ydCBlcnJvcnM6CiAgICAgLS14bWw9eWVzICAgICAgICAgICAgICAgICBl
bWl0IGVycm9yIG91dHB1dCBpbiBYTUwgKHNvbWUgdG9vbHMgb25seSkKSW5kZXg6IG5vbmUvdGVz
dHMvY21kbGluZTEuc3Rkb3V0LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBub25lL3Rlc3RzL2NtZGxpbmUx
LnN0ZG91dC5leHAJKHJldmlzaW9uIDEyMzY4KQorKysgbm9uZS90ZXN0cy9jbWRsaW5lMS5zdGRv
dXQuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMCBAQAogICAgIC0tbG9nLWZkPTxu
dW1iZXI+ICAgICAgICAgbG9nIG1lc3NhZ2VzIHRvIGZpbGUgZGVzY3JpcHRvciBbMj1zdGRlcnJd
CiAgICAgLS1sb2ctZmlsZT08ZmlsZT4gICAgICAgICBsb2cgbWVzc2FnZXMgdG8gPGZpbGU+CiAg
ICAgLS1sb2ctc29ja2V0PWlwYWRkcjpwb3J0ICBsb2cgbWVzc2FnZXMgdG8gc29ja2V0IGlwYWRk
cjpwb3J0CisgICAgLS1rZWVwLXVubG9hZGVkLXN5bXM9bm98eWVzIEtlZXAgc3ltYm9scyBmb3Ig
dW5sb2FkZWQgY29kZSBbbm9dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFs
bG93cyBzdGFjayB0cmFjZXMgZm9yIG1lbW9yeSBsZWFrcyB0bworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5jbHVkZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbGNsb3NlJ2QgKG9yIHNpbWlsYXIpCiAK
ICAgdXNlciBvcHRpb25zIGZvciBWYWxncmluZCB0b29scyB0aGF0IHJlcG9ydCBlcnJvcnM6CiAg
ICAgLS14bWw9eWVzICAgICAgICAgICAgICAgICBlbWl0IGVycm9yIG91dHB1dCBpbiBYTUwgKHNv
bWUgdG9vbHMgb25seSkKSW5kZXg6IGNvcmVncmluZC9tX2V4ZWNvbnRleHQuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBjb3JlZ3JpbmQvbV9leGVjb250ZXh0LmMJKHJldmlzaW9uIDEyMzY4KQorKysgY29yZWdy
aW5kL21fZXhlY29udGV4dC5jCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiAgICAg
NTAzMzE2NTNVTCwgICAgMTAwNjYzMzE5VUwKIH07CiAKK1VJbnQgVkdfKGVjX2xhc3RfZWN1KSA9
IDA7CiAKIC8qIEVhY2ggZWxlbWVudCBpcyBwcmVzZW50IGluIGEgaGFzaCBjaGFpbiwgYW5kIGFs
c28gY29udGFpbnMgYQogICAgdmFyaWFibGUgbGVuZ3RoIGFycmF5IG9mIGd1ZXN0IGNvZGUgYWRk
cmVzc2VzICh0aGUgdXNlZnVsIHBhcnQpLiAqLwpAQCAtMTcwLDcgKzE3MSw3IEBACiAvKiBQcmlu
dCBhbiBFeGVDb250ZXh0LiAqLwogdm9pZCBWR18ocHBfRXhlQ29udGV4dCkgKCBFeGVDb250ZXh0
KiBlYyApCiB7Ci0gICBWR18ocHBfU3RhY2tUcmFjZSkoIGVjLT5pcHMsIGVjLT5uX2lwcyApOwor
ICAgVkdfKHBwX1N0YWNrVHJhY2Vfd2l0aF9lY3UpKCBlYy0+ZWN1LCBlYy0+aXBzLCBlYy0+bl9p
cHMgKTsKIH0KIAogCkBAIC00MDUsNiArNDA2LDcgQEAKIAogICAgdmdfYXNzZXJ0KFZHXyhpc19w
bGF1c2libGVfRUNVKShlY19uZXh0X2VjdSkpOwogICAgbmV3X2VjLT5lY3UgPSBlY19uZXh0X2Vj
dTsKKyAgIFZHXyhlY19sYXN0X2VjdSkgPSBlY19uZXh0X2VjdTsKICAgIGVjX25leHRfZWN1ICs9
IDQ7CiAgICBpZiAoZWNfbmV4dF9lY3UgPT0gMCkgewogICAgICAgLyogVXJyLiAgTm93IHdlJ3Jl
IGhvc2VkOyB3ZSBlbWl0dGVkIDJeMzAgRXhlQ29udGV4dHMgYWxyZWFkeQpJbmRleDogY29yZWdy
aW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2Rl
YnVnaW5mby9kZWJ1Z2luZm8uYwkocmV2aXNpb24gMTIzNjgpCisrKyBjb3JlZ3JpbmQvbV9kZWJ1
Z2luZm8vZGVidWdpbmZvLmMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlICJwdWJfY29yZV90aHJlYWRzdGF0ZS5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2RlYnVnaW5m
by5oIiAgLyogc2VsZiAqLwogI2luY2x1ZGUgInB1Yl9jb3JlX2RlbWFuZ2xlLmgiCisjaW5jbHVk
ZSAicHViX2NvcmVfZXhlY29udGV4dC5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2xpYmNiYXNlLmgi
CiAjaW5jbHVkZSAicHViX2NvcmVfbGliY2Fzc2VydC5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2xp
YmNwcmludC5oIgpAQCAtMTExLDYgKzExMiw5IEBACiAgICBsaW5rZWQgbGlzdCBvZiBEZWJ1Z0lu
Zm9zLiAqLwogc3RhdGljIERlYnVnSW5mbyogZGVidWdJbmZvX2xpc3QgPSBOVUxMOwogCisvKiBL
ZWVwIGFyb3VuZCBvbGQgZGVidWcgaW5mbyBzbyB3ZSBjYW4gaGF2ZSBhIGNoYW5jZSBvZiBkZWNv
ZGluZyBzdGFjayB0cmFjZXMKKyAqIChlLmcuIGZvciBsZWFrIGNoZWNrcykgZXZlbiBhZnRlciBh
IHNoYXJlZCBsaWJyYXJ5IGhhcyBiZWVuIHVubG9hZGVkLiAqLworc3RhdGljIERlYnVnSW5mbyog
dW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9IE5VTEw7CiAKIC8qIEZpbmQgJ2RpJyBpbiB0aGUgZGVi
dWdJbmZvX2xpc3QgYW5kIG1vdmUgaXQgb25lIHN0ZXAgY2xvc2VyIHRoZSB0aGUKICAgIGZyb250
IG9mIHRoZSBsaXN0LCBzbyBhcyB0byBtYWtlIHN1YnNlcXVlbnQgc2VhcmNoZXMgZm9yIGl0CkBA
IC0yODcsNyArMjkxLDcgQEAKIH0KIAogCi0vKiAnc2knIGlzIGEgbWVtYmVyIG9mIGRlYnVnSW5m
b19saXN0LiAgRmluZCBpdCwgcmVtb3ZlIGl0IGZyb20gdGhlCisvKiAnZGknIGlzIGEgbWVtYmVy
IG9mIGRlYnVnSW5mb19saXN0LiAgRmluZCBpdCwgcmVtb3ZlIGl0IGZyb20gdGhlCiAgICBsaXN0
LCBub3RpZnkgbV9yZWRpciB0aGF0IHRoaXMgaGFzIGhhcHBlbmVkLCBhbmQgZnJlZSBhbGwgc3Rv
cmFnZQogICAgcmVhY2hhYmxlIGZyb20gaXQuCiAqLwpAQCAtMzE0LDcgKzMxOCwxNyBAQAogICAg
ICAgICAgKnByZXZfbmV4dF9wdHIgPSBjdXJyLT5uZXh0OwogICAgICAgICAgaWYgKGN1cnItPmhh
dmVfZGluZm8pCiAgICAgICAgICAgICBWR18ocmVkaXJfbm90aWZ5X2RlbGV0ZV9EZWJ1Z0luZm8p
KCBjdXJyICk7Ci0gICAgICAgICBmcmVlX0RlYnVnSW5mbyhjdXJyKTsKKyAgICAgICAgIGlmIChW
R18oY2xvX2tlZXBfdW5sb2FkZWRfc3ltcykgJiYgCisgICAgICAgICAgICAgY3Vyci0+Zmlyc3Rf
ZWN1IDwgVkdfKGVjX2xhc3RfZWN1KSkgeworICAgICAgICAgICAgLyogT25seSBrZWVwIHRoZSBE
ZWJ1Z0luZm8gYXJvdW5kIGlmIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNoCisgICAgICAgICAgICAg
ICByZXF1ZXN0ZWQgaXQsIGFuZCB0aGVyZSB3YXMgYXQgbGVhc3QgMSBleGUgY29udGV4dCB0YWtl
biB3aGlsZQorICAgICAgICAgICAgICAgdGhpcyBEZWJ1Z0luZm8gd2FzIGxvYWRlZC4gKi8KKyAg
ICAgICAgICAgIGN1cnItPm5leHQgPSB1bmxvYWRlZERlYnVnSW5mb19saXN0OworICAgICAgICAg
ICAgdW5sb2FkZWREZWJ1Z0luZm9fbGlzdCA9IGN1cnI7CisgICAgICAgICAgICBjdXJyLT5sYXN0
X2VjdSA9IFZHXyhlY19sYXN0X2VjdSk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZnJlZV9EZWJ1Z0luZm8oY3Vycik7CisgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAg
ICB9CiAgICAgICBwcmV2X25leHRfcHRyID0gJmN1cnItPm5leHQ7CkBAIC00NzcsNiArNDkxLDgg
QEAKICAgICAgIHZnX2Fzc2VydChkaSk7CiAgICAgICBkaS0+bmV4dCA9IGRlYnVnSW5mb19saXN0
OwogICAgICAgZGVidWdJbmZvX2xpc3QgPSBkaTsKKyAgICAgIGRpLT5maXJzdF9lY3UgPSBWR18o
ZWNfbGFzdF9lY3UpOworICAgICAgZGktPmxhc3RfZWN1ID0gRUNfRUNVX0NVUlJFTlQ7CiAgICB9
CiAgICByZXR1cm4gZGk7CiB9CkBAIC01NTYsNiArNTcyLDcgQEAKICAgICAgIGNyZWF0ZWQgYW5k
IGRlc3Ryb3llZCBvbiBkZW1hbmQsIGFuZCBlYWNoIG9uZSBpcyB0cmVhdGVkIG1vcmUgb3IKICAg
ICAgIGxlc3MgaW5kZXBlbmRlbnRseS4gKi8KICAgIHZnX2Fzc2VydChkZWJ1Z0luZm9fbGlzdCA9
PSBOVUxMKTsKKyAgIHZnX2Fzc2VydCh1bmxvYWRlZERlYnVnSW5mb19saXN0ID09IE5VTEwpOwog
CiAgICAvKiBmbHVzaCB0aGUgQ0ZJIGZhc3QgcXVlcnkgY2FjaGUuICovCiAgICBjZnNpX2NhY2hl
X19pbnZhbGlkYXRlKCk7CkBAIC0xMjU5LDEwICsxMjc2LDEwIEBACiAvKi0tLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSovCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKLXZvaWQgVkdfKGRpX2Rpc2NhcmRfQUxMX2RlYnVnaW5mbykoIHZvaWQgKQorc3RhdGljIHZv
aWQgZGlzY2FyZF9BTExfZGVidWdpbmZvX2luX2xpc3QoRGVidWdJbmZvKiBsaXN0KQogewogICAg
RGVidWdJbmZvICpkaSwgKmRpMjsKLSAgIGRpID0gZGVidWdJbmZvX2xpc3Q7CisgICBkaSA9IGxp
c3Q7CiAgICB3aGlsZSAoZGkpIHsKICAgICAgIGRpMiA9IGRpLT5uZXh0OwogICAgICAgVkdfKHBy
aW50ZikoIlhYWCBybSAlcFxuIiwgZGkpOwpAQCAtMTI3MSwxOSArMTI4OCwyMiBAQAogICAgfQog
fQogCitzdGF0aWMgaW5saW5lIEJvb2wgZWN1X2luX2RpX3JhbmdlKFVJbnQgZWN1LCBEZWJ1Z0lu
Zm8qIGRpKQoreyAgIC8qIGZpcnN0X2VjdSBpcyBhY3R1YWxseSB0aGUgbGFzdCBlY3UgIyB0aGF0
IHdhcyBhbGxvY2F0ZWQgYmVmb3JlIHRoaXMKKyAgICAgKiBEZWJ1Z0luZm8gd2FzIGxvYWRlZCwg
bGFzdF9lY3UgaXMgdGhhdCBsYXN0IGVjdSB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAgICAgKiBiZWZv
cmUgdGhpcyBEZWJ1Z0luZm8gd2FzIHVubG9hZGVkIG9yIDB4RkZGRkZGRkYgKGFrYSBFQ19FQ1Vf
Q1VSUkVOVCkKKyAgICAgKiBpZiB0aGlzIERlYnVnSW5mbyBoYXMgbm90IGJlZW4gdW5sb2FkZWQg
eWV0LiAqLworICAgIHJldHVybiAoZWN1ID4gZGktPmZpcnN0X2VjdSkgJiYgKGVjdSA8PSBkaS0+
bGFzdF9lY3UpOworfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tLSBVc2Ugb2Ygc3ltYm9sIHRhYmxlICYgbG9j
YXRpb24gaW5mbyB0byBjcmVhdGUgICAgICAgIC0tLSovCi0vKi0tLSBwbGF1c2libGUtbG9va2lu
ZyBzdGFjayBkdW1wcy4gICAgICAgICAgICAgICAgICAgICAgIC0tLSovCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lk
IFZHXyhkaV9kaXNjYXJkX0FMTF9kZWJ1Z2luZm8pKCB2b2lkICkKK3sKKyAgICBkaXNjYXJkX0FM
TF9kZWJ1Z2luZm9faW5fbGlzdChkZWJ1Z0luZm9fbGlzdCk7CisgICAgZGlzY2FyZF9BTExfZGVi
dWdpbmZvX2luX2xpc3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCk7Cit9CiAKLS8qIFNlYXJjaCBh
bGwgc3ltdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBz
ZXQKLSAgICpwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICpzeW1ubyB0byB0aGUg
c3ltdGFiIGVudHJ5Ci0gICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcHNp
IGlzIHNldCB0byBOVUxMLgotICAgSWYgZmluZFRleHQ9PVRydWUsICBvbmx5IHRleHQgc3ltYm9s
cyBhcmUgc2VhcmNoZWQgZm9yLgotICAgSWYgZmluZFRleHQ9PUZhbHNlLCBvbmx5IGRhdGEgc3lt
Ym9scyBhcmUgc2VhcmNoZWQgZm9yLgotKi8KLXN0YXRpYyB2b2lkIHNlYXJjaF9hbGxfc3ltdGFi
cyAoIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorc3RhdGljIHZvaWQgc2VhcmNo
X29uZV9kZWJ1Z0luZm9fbGlzdCAoRGVidWdJbmZvKiBsaXN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVUludCBlY3UsIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3Jk
KiBzeW1ubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgbWF0Y2hfYW55
d2hlcmVfaW5fc3ltLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBmaW5k
VGV4dCApCkBAIC0xMjkyLDcgKzEzMTIsMTAgQEAKICAgIERlYnVnSW5mbyogZGk7CiAgICBCb29s
ICAgICAgIGluUmFuZ2U7CiAKLSAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVM
TDsgZGkgPSBkaS0+bmV4dCkgeworICAgZm9yIChkaSA9IGxpc3Q7IGRpICE9IE5VTEw7IGRpID0g
ZGktPm5leHQpIHsKKyAgICAgIGlmICggISBlY3VfaW5fZGlfcmFuZ2UoIGVjdSwgZGkpICkgewor
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQogCiAgICAgICBpZiAoZmluZFRleHQpIHsKICAg
ICAgICAgIC8qIENvbnNpZGVyIGFueSBzeW1ib2wgaW4gdGhlIHIteCBtYXBwZWQgYXJlYSB0byBi
ZSB0ZXh0LgpAQCAtMTM0MywxNyArMTM2Niw0NiBAQAogICAgKnBkaSA9IE5VTEw7CiB9CiAKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKy8qLS0tIFVzZSBvZiBzeW1ib2wgdGFibGUgJiBsb2NhdGlvbiBpbmZvIHRvIGNyZWF0
ZSAgICAgICAgLS0tKi8KKy8qLS0tIHBsYXVzaWJsZS1sb29raW5nIHN0YWNrIGR1bXBzLiAgICAg
ICAgICAgICAgICAgICAgICAgLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogU2VhcmNoIGFsbCBzeW10YWJz
IHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAorICAgKnBk
aSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKnN5bW5vIHRvIHRoZSBzeW10YWIgZW50
cnkKKyAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMgc2V0IHRv
IE5VTEwuCisgICBJZiBmaW5kVGV4dD09VHJ1ZSwgIG9ubHkgdGV4dCBzeW1ib2xzIGFyZSBzZWFy
Y2hlZCBmb3IuCisgICBJZiBmaW5kVGV4dD09RmFsc2UsIG9ubHkgZGF0YSBzeW1ib2xzIGFyZSBz
ZWFyY2hlZCBmb3IuCisqLworc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9zeW10YWJzICggVUludCBl
Y3UsIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBzeW1ubywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJvb2wgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBmaW5kVGV4dCApCit7CisgICBzZWFyY2hf
b25lX2RlYnVnSW5mb19saXN0KGRlYnVnSW5mb19saXN0LCBlY3UsIHB0ciwgcGRpLCBzeW1ubywK
KyAgICAgICAgICAgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCk7CisgICAvKiBPbmx5
IHNlYXJjaCB0aGUgbGlzdCBvZiB1bmxvYWRlZCBzeW1zIGlmIHdlIGhhdmVuJ3QgZm91bmQgc29t
ZXRoaW5nLAorICAgICogYW5kIHdlIGFyZW4ndCBkZWNvZGluZyBhICdjdXJyZW50JyBzdGFja3Ry
YWNlLiAqLworICAgaWYoISpwZGkgJiYgZWN1ICE9IEVDX0VDVV9DVVJSRU5UKQorICAgICAgIHNl
YXJjaF9vbmVfZGVidWdJbmZvX2xpc3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCwgZWN1LCBwdHIs
IHBkaSwgc3ltbm8sCisgICAgICAgICAgICAgICBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRU
ZXh0KTsKK30KKwogLyogU2VhcmNoIGFsbCBsb2N0YWJzIHRoYXQgd2Uga25vdyBhYm91dCB0byBs
b2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAogICAgKnBkaSB0byB0aGUgcmVsZXZhbnQgRGVidWdJ
bmZvLCBhbmQgKmxvY25vIHRvIHRoZSBsb2N0YWIgZW50cnkKICAgICpudW1iZXIgd2l0aGluIHRo
YXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMgc2V0IHRvIE5VTEwuICovCi1zdGF0aWMgdm9pZCBz
ZWFyY2hfYWxsX2xvY3RhYnMgKCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9j
bm8gKQorc3RhdGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzX29uZV9saXN0IChEZWJ1Z0luZm8q
IGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQgZWN1
LCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBsb2NubyApCiB7CiAg
ICBXb3JkICAgICAgIGxubzsKICAgIERlYnVnSW5mbyogZGk7Ci0gICBmb3IgKGRpID0gZGVidWdJ
bmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKLSAgICAgIGlmIChkaS0+dGV4
dF9wcmVzZW50CisgICBmb3IgKGRpID0gbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkg
eworICAgICAgaWYgKCAhIGVjdV9pbl9kaV9yYW5nZSggZWN1LCBkaSkgKSB7CisgICAgICAgICBj
b250aW51ZTsKKyAgICAgIH0KKworICAgICAgIGlmIChkaS0+dGV4dF9wcmVzZW50CiAgICAgICAg
ICAgJiYgZGktPnRleHRfc2l6ZSA+IDAKICAgICAgICAgICAmJiBkaS0+dGV4dF9hdm1hIDw9IHB0
ciAKICAgICAgICAgICAmJiBwdHIgPCBkaS0+dGV4dF9hdm1hICsgZGktPnRleHRfc2l6ZSkgewpA
QCAtMTM2OCw2ICsxNDIwLDE4IEBACiAgICAqcGRpID0gTlVMTDsKIH0KIAorLyogU2VhcmNoIGFs
bCBsb2N0YWJzIHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNl
dAorICAgKnBkaSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRoZSBs
b2N0YWIgZW50cnkKKyAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkg
aXMgc2V0IHRvIE5VTEwuICovCitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBVSW50
IGVjdSwgQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25vICkKK3sKKyAgICBz
ZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QoZGVidWdJbmZvX2xpc3QsIGVjdSwgcHRyLCBwZGks
IGxvY25vICk7CisgICAgLyogT25seSBzZWFyY2ggdGhlIGxpc3Qgb2YgdW5sb2FkZWQgc3ltcyBp
ZiB3ZSBoYXZlbid0IGZvdW5kIHNvbWV0aGluZywKKyAgICAgKiBhbmQgd2UgYXJlbid0IGRlY29k
aW5nIGEgJ2N1cnJlbnQnIHN0YWNrdHJhY2UuICovCisgICAgaWYoISpwZGkgJiYgZWN1ICE9IEVD
X0VDVV9DVVJSRU5UKQorICAgICAgICBzZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QodW5sb2Fk
ZWREZWJ1Z0luZm9fbGlzdCwgZWN1LCBwdHIsIHBkaSwgbG9jbm8gKTsKK30KIAogLyogVGhlIHdo
b2xlIHBvaW50IG9mIHRoaXMgd2hvbGUgYmlnIGRlYWw6IG1hcCBhIGNvZGUgYWRkcmVzcyB0byBh
CiAgICBwbGF1c2libGUgc3ltYm9sIG5hbWUuICBSZXR1cm5zIEZhbHNlIGlmIG5vIGlkZWE7IG90
aGVyd2lzZSBUcnVlLgpAQCAtMTM3OSw3ICsxNDQzLDcgQEAKIHN0YXRpYwogQm9vbCBnZXRfc3lt
X25hbWUgKCBCb29sIGRvX2N4eF9kZW1hbmdsaW5nLCBCb29sIGRvX3pfZGVtYW5nbGluZywKICAg
ICAgICAgICAgICAgICAgICAgQm9vbCBkb19iZWxvd19tYWluX3JlbmFtaW5nLAotICAgICAgICAg
ICAgICAgICAgICBBZGRyIGEsIENoYXIqIGJ1ZiwgSW50IG5idWYsCisgICAgICAgICAgICAgICAg
ICAgIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGJ1ZiwgSW50IG5idWYsCiAgICAgICAgICAgICAg
ICAgICAgIEJvb2wgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBCb29sIHNob3dfb2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICBCb29sIGZpbmRUZXh0LCAvKk9VVCovUHRyZGlmZlQqIG9mZnNldFAg
KQogewpAQCAtMTM4Nyw3ICsxNDUxLDcgQEAKICAgIFdvcmQgICAgICAgc25vOwogICAgUHRyZGlm
ZlQgICBvZmZzZXQ7CiAKLSAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIGEsICZkaSwgJnNubywgbWF0
Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCApOworICAgc2VhcmNoX2FsbF9zeW10YWJzICgg
ZWN1LCBhLCAmZGksICZzbm8sIG1hdGNoX2FueXdoZXJlX2luX3N5bSwgZmluZFRleHQgKTsKICAg
IGlmIChkaSA9PSBOVUxMKSAKICAgICAgIHJldHVybiBGYWxzZTsKIApAQCAtMTQzNyw3ICsxNTAx
LDcgQEAKIHsKICAgIERlYnVnSW5mbyogc2k7CiAgICBXb3JkICAgICAgIHNubzsKLSAgIHNlYXJj
aF9hbGxfc3ltdGFicyAoIGd1ZXN0X2NvZGVfYWRkciwgCisgICBzZWFyY2hfYWxsX3N5bXRhYnMg
KCBFQ19FQ1VfQ1VSUkVOVCwgZ3Vlc3RfY29kZV9hZGRyLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICZzaSwgJnNubywKICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUvKm1hdGNoX2FueXdo
ZXJlX2luX2Z1biovLAogICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZS8qY29uc2lkZXIgdGV4
dCBzeW1ib2xzIG9ubHkqLyApOwpAQCAtMTQ1MSw5ICsxNTE1LDEzIEBACiAgICBtYXRjaCBhbnl3
aGVyZSBpbiBmdW5jdGlvbiwgYnV0IGRvbid0IHNob3cgb2Zmc2V0cy4gKi8KIEJvb2wgVkdfKGdl
dF9mbm5hbWUpICggQWRkciBhLCBDaGFyKiBidWYsIEludCBuYnVmICkKIHsKKyAgICByZXR1cm4g
VkdfKGdldF9mbm5hbWVfd2l0aF9lY3UpIChFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmKTsK
K30KK0Jvb2wgVkdfKGdldF9mbm5hbWVfd2l0aF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hh
ciogYnVmLCBJbnQgbmJ1ZiApCit7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVt
YW5nbGUqL1RydWUsIC8qWi1kZW1hbmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKmJlbG93LW1haW4tcmVuYW1pbmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
YSwgYnVmLCBuYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVjdSwgYSwgYnVmLCBuYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9UcnVl
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bXMgb25seSovVHJ1ZSwKQEAgLTE0NjIsMTEg
KzE1MzAsMTYgQEAKIAogLyogVGhpcyBpcyBhdmFpbGFibGUgdG8gdG9vbHMuLi4gYWx3YXlzIGRl
bWFuZ2xlIEMrKyBuYW1lcywKICAgIG1hdGNoIGFueXdoZXJlIGluIGZ1bmN0aW9uLCBhbmQgc2hv
dyBvZmZzZXQgaWYgbm9uemVyby4gKi8KKwogQm9vbCBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkg
KCBBZGRyIGEsIENoYXIqIGJ1ZiwgSW50IG5idWYgKQogeworICAgIHJldHVybiBWR18oZ2V0X2Zu
bmFtZV93X29mZnNldF9hbmRfZWN1KSAoIEVDX0VDVV9DVVJSRU5ULCBhLCBidWYsIG5idWYgKTsK
K30KK0Jvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXRfYW5kX2VjdSkgKCBVSW50IGVjdSwgQWRk
ciBhLCBDaGFyKiBidWYsIEludCBuYnVmICkKK3sKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAv
KkMrKy1kZW1hbmdsZSovVHJ1ZSwgLypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBhLCBidWYsIG5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgZWN1LCBhLCBi
dWYsIG5idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9m
dW4qL1RydWUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9UcnVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBAIC0x
NDgwLDcgKzE1NTMsNyBAQAogewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFu
Z2xlKi9UcnVlLCAvKlotZGVtYW5nbGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
LypiZWxvdy1tYWluLXJlbmFtaW5nKi9UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEs
IGJ1ZiwgbmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVOVCwgYSwg
YnVmLCBuYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5f
ZnVuKi9GYWxzZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL0Zh
bHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW1zIG9ubHkqL1RydWUsCkBA
IC0xNDk0LDcgKzE1NjcsNyBAQAogewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRl
bWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xlKi9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcqL0ZhbHNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGEsIGJ1ZiwgbmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVO
VCwgYSwgYnVmLCBuYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hl
cmVfaW5fZnVuKi9UcnVlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0
PyovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bXMgb25seSovVHJ1
ZSwKQEAgLTE1MDgsNyArMTU4MSw3IEBACiB7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypD
KystZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5nbGUqL1RydWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5nKi9UcnVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGEsIGJ1ZiwgbmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VS
UkVOVCwgYSwgYnVmLCBuYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55
d2hlcmVfaW5fZnVuKi9UcnVlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zm
c2V0PyovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bXMgb25seSov
VHJ1ZSwKQEAgLTE1NjYsNyArMTYzOSw3IEBACiAgICB2Z19hc3NlcnQobl9kbmFtZSA+IDEpOwog
ICAgb2sgPSBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovRmFsc2UsIC8qWi1kZW1hbmds
ZSovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWluZyov
RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYWRkciwgZG5hbWUsIG5fZG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgIEVDX0VDVV9DVVJSRU5ULCBkYXRhX2FkZHIsIGRuYW1l
LCBuX2RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX3N5
bSovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgLypkYXRhIHN5bXMgb25seSBwbGVhc2UqL0ZhbHNlLApA
QCAtMTU4Miw2ICsxNjU1LDEwIEBACiAgICByZXF1aXJlIGRlYnVnIGluZm8uICBDYWxsZXIgc3Vw
cGxpZXMgYnVmIGFuZCBuYnVmLiAqLwogQm9vbCBWR18oZ2V0X29iam5hbWUpICggQWRkciBhLCBD
aGFyKiBidWYsIEludCBuYnVmICkKIHsKKyAgIHJldHVybiBWR18oZ2V0X29iam5hbWVfd2l0aF9l
Y3UpIChFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmKTsKK30KK0Jvb2wgVkdfKGdldF9vYmpu
YW1lX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGJ1ZiwgSW50IG5idWYgKQor
ewogICAgRGVidWdJbmZvKiBkaTsKICAgIGNvbnN0IE5TZWdtZW50ICpzZWc7CiAgICBIQ2hhciog
ZmlsZW5hbWU7CkBAIC0xNTg5LDYgKzE2NjYsMTAgQEAKICAgIC8qIExvb2sgaW4gdGhlIGRlYnVn
SW5mb19saXN0IHRvIGZpbmQgdGhlIG5hbWUuICBJbiBtb3N0IGNhc2VzIHdlCiAgICAgICBleHBl
Y3QgdGhpcyB0byBwcm9kdWNlIGEgcmVzdWx0LiAqLwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19s
aXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7CisgICAgICBpZiAoICEgZWN1X2luX2Rp
X3JhbmdlKCBlY3UsIGRpKSApIHsKKyAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCiAgICAg
ICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50ZXh0X3NpemUgPiAwCiAg
ICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBhIApAQCAtMTYzNiwyNiArMTcxNywxMyBAQAog
ewogICAgRGVidWdJbmZvKiBzaTsKICAgIFdvcmQgICAgICAgbG9jbm87Ci0gICBzZWFyY2hfYWxs
X2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyApOworICAgc2VhcmNoX2FsbF9sb2N0YWJzICggRUNf
RUNVX0NVUlJFTlQsIGEsICZzaSwgJmxvY25vICk7CiAgICBpZiAoc2kgPT0gTlVMTCkgCiAgICAg
ICByZXR1cm4gRmFsc2U7CiAgICBWR18oc3RybmNweV9zYWZlbHkpKGZpbGVuYW1lLCBzaS0+bG9j
dGFiW2xvY25vXS5maWxlbmFtZSwgbl9maWxlbmFtZSk7CiAgICByZXR1cm4gVHJ1ZTsKIH0KIAot
LyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGEgbGluZSBudW1iZXIuICBSZXR1cm5zIFRydWUgaWYg
c3VjY2Vzc2Z1bC4gKi8KLUJvb2wgVkdfKGdldF9saW5lbnVtKSggQWRkciBhLCBVSW50KiBsaW5l
bm8gKQotewotICAgRGVidWdJbmZvKiBzaTsKLSAgIFdvcmQgICAgICAgbG9jbm87Ci0gICBzZWFy
Y2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyApOwotICAgaWYgKHNpID09IE5VTEwpIAot
ICAgICAgcmV0dXJuIEZhbHNlOwotICAgKmxpbmVubyA9IHNpLT5sb2N0YWJbbG9jbm9dLmxpbmVu
bzsKLQotICAgcmV0dXJuIFRydWU7Ci19Ci0KIC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0byBhIGZp
bGVuYW1lL2xpbmUgbnVtYmVyL2RpciBuYW1lIGluZm8uCiAgICBTZWUgcHJvdG90eXBlIGZvciBk
ZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBiZWhhdmlvdXIuCiAqLwpAQCAtMTY2NSw2ICsxNzMzLDE1
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQm9vbCogZGlybmFt
ZV9hdmFpbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUlu
dCogbGluZW5vICkKIHsKKyAgICByZXR1cm4gVkdfKGdldF9maWxlbmFtZV9saW5lbnVtX3dpdGhf
ZWN1KSAoRUNfRUNVX0NVUlJFTlQsIGEsCisgICAgICAgICAgICBmaWxlbmFtZSwgbl9maWxlbmFt
ZSwgZGlybmFtZSwgbl9kaXJuYW1lLCBkaXJuYW1lX2F2YWlsYWJsZSwgbGluZW5vKTsKK30KK0Jv
b2wgVkdfKGdldF9maWxlbmFtZV9saW5lbnVtX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBBZGRyIGEs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0NoYXIqIGZpbGVuYW1l
LCBJbnQgbl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VU
Ki9DaGFyKiBkaXJuYW1lLCAgSW50IG5fZGlybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qT1VUKi9Cb29sKiBkaXJuYW1lX2F2YWlsYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qT1VUKi9VSW50KiBsaW5lbm8gKQorewogICAgRGVidWdJbmZv
KiBzaTsKICAgIFdvcmQgICAgICAgbG9jbm87CiAKQEAgLTE2NzIsNyArMTc0OSw3IEBACiAgICAg
ICAgICAgICAgIHx8CiAgICAgICAgICAgICAgIChkaXJuYW1lICE9IE5VTEwgJiYgZGlybmFtZV9h
dmFpbGFibGUgIT0gTlVMTCkgKTsKIAotICAgc2VhcmNoX2FsbF9sb2N0YWJzICggYSwgJnNpLCAm
bG9jbm8gKTsKKyAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIGVjdSwgYSwgJnNpLCAmbG9jbm8gKTsK
ICAgIGlmIChzaSA9PSBOVUxMKSB7CiAgICAgICBpZiAoZGlybmFtZV9hdmFpbGFibGUpIHsKICAg
ICAgICAgICpkaXJuYW1lX2F2YWlsYWJsZSA9IEZhbHNlOwpAQCAtMTgxOSw2ICsxODk2LDEwIEBA
CiAKIENoYXIqIFZHXyhkZXNjcmliZV9JUCkoQWRkciBlaXAsIENoYXIqIGJ1ZiwgSW50IG5fYnVm
KQogeworICAgIHJldHVybiBWR18oZGVzY3JpYmVfSVBfd2l0aF9lY3UpIChFQ19FQ1VfQ1VSUkVO
VCwgZWlwLCBidWYsIG5fYnVmKTsKK30KK0NoYXIqIFZHXyhkZXNjcmliZV9JUF93aXRoX2VjdSko
VUludCBlY3UsIEFkZHIgZWlwLCBDaGFyKiBidWYsIEludCBuX2J1ZikKK3sKICMgIGRlZmluZSBB
UFBFTkQoX3N0cikgXAogICAgICAgbiA9IHB1dFN0cihuLCBuX2J1ZiwgYnVmLCBfc3RyKQogIyAg
ZGVmaW5lIEFQUEVORF9FU0MoX2NvdW50LF9zdHIpIFwKQEAgLTE4MzcsMTEgKzE5MTgsMTEgQEAK
IAogICAgQm9vbCAga25vd19kaXJpbmZvID0gRmFsc2U7CiAgICBCb29sICBrbm93X2ZubmFtZSAg
PSBWR18oY2xvX3N5bV9vZmZzZXRzKQotICAgICAgICAgICAgICAgICAgICAgICAgPyBWR18oZ2V0
X2ZubmFtZV93X29mZnNldCkgKGVpcCwgYnVmX2ZuLCBCVUZfTEVOKQotICAgICAgICAgICAgICAg
ICAgICAgICAgOiBWR18oZ2V0X2ZubmFtZSkgKGVpcCwgYnVmX2ZuLCBCVUZfTEVOKTsKLSAgIEJv
b2wgIGtub3dfb2JqbmFtZSA9IFZHXyhnZXRfb2JqbmFtZSkoZWlwLCBidWZfb2JqLCBCVUZfTEVO
KTsKLSAgIEJvb2wgIGtub3dfc3JjbG9jICA9IFZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSkoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBlaXAsIAorICAgICAgICAgICAgICAgICAgICAgICAg
PyBWR18oZ2V0X2ZubmFtZV93X29mZnNldF9hbmRfZWN1KSAoZWN1LCBlaXAsIGJ1Zl9mbiwgQlVG
X0xFTikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogVkdfKGdldF9mbm5hbWVfd2l0aF9lY3Up
IChlY3UsIGVpcCwgYnVmX2ZuLCBCVUZfTEVOKTsKKyAgIEJvb2wgIGtub3dfb2JqbmFtZSA9IFZH
XyhnZXRfb2JqbmFtZV93aXRoX2VjdSkoZWN1LCBlaXAsIGJ1Zl9vYmosIEJVRl9MRU4pOworICAg
Qm9vbCAga25vd19zcmNsb2MgID0gVkdfKGdldF9maWxlbmFtZV9saW5lbnVtX3dpdGhfZWN1KSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjdSwgZWlwLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1Zl9zcmNsb2MsICBCVUZfTEVOLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ1Zl9kaXJuYW1lLCBCVUZfTEVOLCAma25vd19kaXJpbmZvLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmxpbmVubyAKSW5kZXg6IGNvcmVncmluZC9tX2RlYnVnaW5mby9wcml2X3N0
b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9yYWdl
LmgJKHJldmlzaW9uIDEyMzY4KQorKysgY29yZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3RvcmFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgyLDEwIEBACiAgICAgICBmb3JldmVyIHRo
ZXJlYWZ0ZXIuICBUaGUgLmhhbmRsZSBmaWVsZCBpcyBzZXQgYXMgc29vbiBhcyB0aGlzCiAgICAg
ICBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkLiAqLwogICAgVUxvbmcgaGFuZGxlOworICAgCisgICAv
KiBUaGUgZWNfbGFzdF9lY3Ugd2hlbiB0aGlzIGluZm8gd2FzIGNyZWF0ZWQgb3IgcmVtb3ZlZCAq
LworICAgVUludCBmaXJzdF9lY3U7CisgICBVSW50IGxhc3RfZWN1OwogCiAgICAvKiBVc2VkIGZv
ciBkZWJ1Z2dpbmcgb25seSAtIGluZGljYXRlIHdoYXQgc3R1ZmYgdG8gZHVtcCB3aGlsc3QKICAg
ICAgIHJlYWRpbmcgc3R1ZmYgaW50byB0aGUgc2VnaW5mby4gIEFyZSBjb21wdXRlZCBhcyBlYXJs
eSBpbiB0aGUKSW5kZXg6IGNvcmVncmluZC9tX3N0YWNrdHJhY2UuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBj
b3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMJKHJldmlzaW9uIDEyMzY4KQorKysgY29yZWdyaW5kL21f
c3RhY2t0cmFjZS5jCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBACiAjaW5jbHVkZSAi
cHViX2NvcmVfeGFycmF5LmgiCiAjaW5jbHVkZSAicHViX2NvcmVfY2xpZW50c3RhdGUuaCIgICAv
LyBWR18oY2xpZW50X19kbF9zeXNpbmZvX2ludDgwKQogI2luY2x1ZGUgInB1Yl9jb3JlX3RyYW1w
b2xpbmUuaCIKKyNpbmNsdWRlICJwdWJfY29yZV9leGVjb250ZXh0LmgiICAgIC8vIEVDX0VDVV9D
VVJSRU5UCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwogLyotLS0gQkVHSU4gcGxhdGZvcm0tZGVwZW5k
ZW50IHVud2luZGVyIHdvcmtlciBmdW5jdGlvbnMgICAtLS0qLwpAQCAtODIyLDggKzgyMiw5IEBA
CiAgICAjZGVmaW5lIEJVRl9MRU4gICA0MDk2CiAgICAKICAgIHN0YXRpYyBVQ2hhciBidWZbQlVG
X0xFTl07CisgICBVSW50IGVjdSA9ICooVUludCopdXVfb3BhcXVlOwogCi0gICBWR18oZGVzY3Jp
YmVfSVApKGlwLCBidWYsIEJVRl9MRU4pOworICAgVkdfKGRlc2NyaWJlX0lQX3dpdGhfZWN1KShl
Y3UsIGlwLCBidWYsIEJVRl9MRU4pOwogCiAgICBpZiAoVkdfKGNsb194bWwpKSB7CiAgICAgICBW
R18ocHJpbnRmX3htbCkoIiAgICAlc1xuIiwgYnVmKTsKQEAgLTgzNSwxMiArODM2LDE3IEBACiAv
KiBQcmludCBhIFN0YWNrVHJhY2UuICovCiB2b2lkIFZHXyhwcF9TdGFja1RyYWNlKSAoIFN0YWNr
VHJhY2UgaXBzLCBVSW50IG5faXBzICkKIHsKKyAgICBWR18ocHBfU3RhY2tUcmFjZV93aXRoX2Vj
dSkgKEVDX0VDVV9DVVJSRU5ULCBpcHMsIG5faXBzICk7Cit9CisvKiBQcmludCBhIFN0YWNrVHJh
Y2UuICovCit2b2lkIFZHXyhwcF9TdGFja1RyYWNlX3dpdGhfZWN1KSAoIFVJbnQgZWN1LCBTdGFj
a1RyYWNlIGlwcywgVUludCBuX2lwcyApCit7CiAgICB2Z19hc3NlcnQoIG5faXBzID4gMCApOwog
CiAgICBpZiAoVkdfKGNsb194bWwpKQogICAgICAgVkdfKHByaW50Zl94bWwpKCIgIDxzdGFjaz5c
biIpOwogCi0gICBWR18oYXBwbHlfU3RhY2tUcmFjZSkoIHByaW50SXBEZXNjLCBOVUxMLCBpcHMs
IG5faXBzICk7CisgICBWR18oYXBwbHlfU3RhY2tUcmFjZSkoIHByaW50SXBEZXNjLCAmZWN1LCBp
cHMsIG5faXBzICk7CiAKICAgIGlmIChWR18oY2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRmX3ht
bCkoIiAgPC9zdGFjaz5cbiIpOwpJbmRleDogY29yZWdyaW5kL21fbWFpbi5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGNvcmVncmluZC9tX21haW4uYwkocmV2aXNpb24gMTIzNjgpCisrKyBjb3JlZ3JpbmQvbV9t
YWluLmMJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsMTAgQEAKICIgICAgLS1sb2ctZmQ9
PG51bWJlcj4gICAgICAgICBsb2cgbWVzc2FnZXMgdG8gZmlsZSBkZXNjcmlwdG9yIFsyPXN0ZGVy
cl1cbiIKICIgICAgLS1sb2ctZmlsZT08ZmlsZT4gICAgICAgICBsb2cgbWVzc2FnZXMgdG8gPGZp
bGU+XG4iCiAiICAgIC0tbG9nLXNvY2tldD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2VzIHRvIHNv
Y2tldCBpcGFkZHI6cG9ydFxuIgorIiAgICAtLWtlZXAtdW5sb2FkZWQtc3ltcz1ub3x5ZXMgS2Vl
cCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlIFtub11cbiIKKyIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUaGlzIGFsbG93cyBzdGFjayB0cmFjZXMgZm9yIG1lbW9yeSBsZWFrcyB0b1xu
IgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGluZm8g
Zm9yIGNvZGUgdGhhdCBoYXMgYmVlblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRsY2xvc2UnZCAob3Igc2ltaWxhcilcbiIKICJcbiIKICIgIHVzZXIgb3B0aW9ucyBmb3IgVmFs
Z3JpbmQgdG9vbHMgdGhhdCByZXBvcnQgZXJyb3JzOlxuIgogIiAgICAtLXhtbD15ZXMgICAgICAg
ICAgICAgICAgIGVtaXQgZXJyb3Igb3V0cHV0IGluIFhNTCAoc29tZSB0b29scyBvbmx5KVxuIgpA
QCAtNTU3LDYgKzU2MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhjbG9fdmV4X2Nv
bnRyb2wpLmd1ZXN0X2NoYXNlX3RocmVzaCwgMCwgOTkpIHt9CiAgICAgICBlbHNlIGlmIFZHX0JP
T0xfQ0xPKGFyZywgIi0tdmV4LWd1ZXN0LWNoYXNlLWNvbmQiLAogICAgICAgICAgICAgICAgICAg
ICAgICBWR18oY2xvX3ZleF9jb250cm9sKS5ndWVzdF9jaGFzZV9jb25kKSB7fQorICAgICAgZWxz
ZSBpZiBWR19CT09MX0NMTyhhcmcsICItLWtlZXAtdW5sb2FkZWQtc3ltcyIsCisJICAgICAgICAg
ICAgICAgVkdfKGNsb19rZWVwX3VubG9hZGVkX3N5bXMpKSB7fQogCiAgICAgICBlbHNlIGlmIFZH
X0lOVF9DTE8oYXJnLCAiLS1sb2ctZmQiLCB0bXBfbG9nX2ZkKSB7CiAgICAgICAgICBsb2dfdG8g
PSBWZ0xvZ1RvX0ZkOwpJbmRleDogY29yZWdyaW5kL21fb3B0aW9ucy5jCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNvcmVncmluZC9tX29wdGlvbnMuYwkocmV2aXNpb24gMTIzNjgpCisrKyBjb3JlZ3JpbmQvbV9v
cHRpb25zLmMJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQAogVmdTbWMgIFZHXyhj
bG9fc21jX2NoZWNrKSAgICAgID0gVmdfU21jU3RhY2s7CiBIQ2hhciogVkdfKGNsb19rZXJuZWxf
dmFyaWFudCkgPSBOVUxMOwogQm9vbCAgIFZHXyhjbG9fZHN5bXV0aWwpICAgICAgID0gRmFsc2U7
CitCb29sICAgVkdfKGNsb19rZWVwX3VubG9hZGVkX3N5bXMpPSBGYWxzZTsKIAogCiAvKj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ki8KSW5kZXg6IGNvcmVncmluZC9wdWJfY29yZV9leGVjb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY29yZWdyaW5kL3B1Yl9jb3JlX2V4ZWNvbnRleHQuaAkocmV2aXNpb24gMTIzNjgpCisr
KyBjb3JlZ3JpbmQvcHViX2NvcmVfZXhlY29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3
ICs1MywxNCBAQAogZXh0ZXJuCiAvKlN0YWNrVHJhY2UqL0FkZHIqIFZHXyhnZXRfRXhlQ29udGV4
dF9TdGFja1RyYWNlKSAoIEV4ZUNvbnRleHQqIGUgKTsKIAorLy8gS2VlcCB0cmFjayBvZiB0aGUg
bW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgZWN1LCBzbyB0aGF0IGRlYnVnaW5mbyBjYW4KKy8vIGtu
b3cgaG93IHRvIHRyYW5zbGF0ZSBhZGRyZXNzZXMgdGhhdCByZWZlcmVuY2UgY29kZSB0aGF0IGhh
cyBiZWVuIHVubG9hZGVkCitleHRlcm4gVUludCBWR18oZWNfbGFzdF9lY3UpOwogCisvLyBTcGVj
aWFsIGNvbnN0YW50IHRvIHVzZSBmb3IgdGhlICdlY3UnIHBhcmFtZXRlciB3aGVuIGRlY29kaW5n
IGEgJ2N1cnJlbnQnCisvLyBzdGFjayB0cmFjZSwgdGhpcyB3aWxsIGNhdXNlIGl0IHRvIHNraXAg
bG9va2luZyBhdCBhbnkgdW5sb2FkZWQgc3ltYm9scy4KKyNkZWZpbmUgRUNfRUNVX0NVUlJFTlQg
MHhGRkZGRkZGRgorCiAjZW5kaWYgICAvLyBfX1BVQl9DT1JFX0VYRUNPTlRFWFRfSAogCiAvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75779</attachid>
            <date>2012-12-11 05:22:23 +0000</date>
            <delta_ts>2017-07-31 14:09:41 +0000</delta_ts>
            <desc>Refresh patch against r13174.</desc>
            <filename>dlclose.patch</filename>
            <type>text/plain</type>
            <size>35346</size>
            <attacher name="Kevin Fitch">kfitch42</attacher>
            
              <data encoding="base64">ClByb3BlcnR5IGNoYW5nZXMgb246IG1lbWNoZWNrL3Rlc3RzL2xpbnV4Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTW9k
aWZpZWQ6IHN2bjppZ25vcmUKICAgLSAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0ZG91
dC5kaWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmdldHJlZ3NldApsc2ZyYW1lMQps
c2ZyYW1lMgpNYWtlZmlsZQpNYWtlZmlsZS5pbgpzaWdxdWV1ZQpzdGFja19jaGFuZ2VzCnN0YWNr
X3N3aXRjaApzeXNjYWxscy0yMDA3CnN5c2xvZy1zeXNjYWxsCnRpbWVyZmQtc3lzY2FsbApwcm9j
LWF1eHYKc3lzLW9wZW5hdAoKICAgKyAqLnN0ZGVyci5kaWZmCiouc3RkZXJyLm91dAoqLnN0ZG91
dC5kaWZmCiouc3Rkb3V0Lm91dAouZGVwcwpicmsKY2FwZ2V0CmRsY2xvc2VfbGVhawpkbGNsb3Nl
X2xlYWtfc28uc28KZ2V0cmVnc2V0CmxzZnJhbWUxCmxzZnJhbWUyCk1ha2VmaWxlCk1ha2VmaWxl
LmluCnNpZ3F1ZXVlCnN0YWNrX2NoYW5nZXMKc3RhY2tfc3dpdGNoCnN5c2NhbGxzLTIwMDcKc3lz
bG9nLXN5c2NhbGwKdGltZXJmZC1zeXNjYWxsCnByb2MtYXV4dgpzeXMtb3BlbmF0CgoKSW5kZXg6
IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
bWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLnZndGVzdAkocmV2aXNpb24gMCkKKysr
IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAuLi9maWx0
ZXJfc3RkZXJyCit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMgLS1rZWVwLXVubG9hZGVkLXN5bXM9
eWVzCkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWtfc28uYwkocmV2aXNpb24g
MCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE5IEBACisvKiBkbGNsb3NlX2xlYWtfc28uYyAqLworCisjaW5jbHVkZSA8
c3RkbGliLmg+CisKKy8qKiBNYWtlcyBhIGp1bXAgYmFzZWQgb24gYW4gdW5pbml0aWFsaXplZCB2
YXJpYWJsZSBpbiBvcmRlciB0byBtYWtlIHN1cmUKKyAqIGVycm9ycyByZXBvcnRlZCB3aGlsZSB0
aGUgZGxvcGVuJ2VkIG9iamVjdCBpcyBsb2FkZWQgd29yay4gKi8KK2ludCBqbXBfb25fdW5pbml0
KHZvaWQpIHsKKyAgICBpbnQgdW5pbml0OworICAgIGlmKHVuaW5pdCkKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworLyoqIExlYWsgMSBieXRlIG9m
IG1lbW9yeS4gVGhpcyBpcyB0byB0ZXN0IHRoZSBzdGFjayBjaGVjayByZXBvcnRlZCBhZnRlciB0
aGUKKyAqICBvYmplY3QgaGFzIGJlZW4gZGxjbG9zZSdkLiAqLworY2hhciogYWxsb2NfMV9ieXRl
KHZvaWQpIHsKKyAgICByZXR1cm4gKGNoYXIqKW1hbGxvYygxKTsKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBtZW1jaGVjay90ZXN0cy9s
aW51eC9kbGNsb3NlX2xlYWstbm8ta2VlcC5zdGRlcnIuZXhwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNo
ZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay1uby1rZWVwLnN0ZGVyci5leHAJKHJldmlzaW9u
IDApCisrKyBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWstbm8ta2VlcC5zdGRlcnIu
ZXhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACisKK0NvbmRpdGlvbmFsIGp1bXAgb3Ig
bW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykKKyAgIC4uLgorCitJbnZhbGlk
IHJlYWQgb2Ygc2l6ZSAxCisgICAuLi4KKyBBZGRyZXNzIDB4Li4uLi4uLi4gaXMgMSBieXRlcyBi
ZWZvcmUgYSBibG9jayBvZiBzaXplIDEgYWxsb2MnZAorICAgYXQgMHguLi4uLi4uLjogbWFsbG9j
ICh2Z19yZXBsYWNlX21hbGxvYy5jOi4uLikKKyAgIC4uLgorCisKK0hFQVAgU1VNTUFSWToKKyAg
ICBpbiB1c2UgYXQgZXhpdDogMSBieXRlcyBpbiAxIGJsb2NrcworICB0b3RhbCBoZWFwIHVzYWdl
OiA2IGFsbG9jcywgNSBmcmVlcywgMSw0ODAgYnl0ZXMgYWxsb2NhdGVkCisKKzEgYnl0ZXMgaW4g
MSBibG9ja3MgYXJlIGRlZmluaXRlbHkgbG9zdCBpbiBsb3NzIHJlY29yZCAuLi4gb2YgLi4uCisg
ICBhdCAweC4uLi4uLi4uOiBtYWxsb2MgKHZnX3JlcGxhY2VfbWFsbG9jLmM6Li4uKQorICAgLi4u
CisKK0xFQUsgU1VNTUFSWToKKyAgIGRlZmluaXRlbHkgbG9zdDogMSBieXRlcyBpbiAxIGJsb2Nr
cworICAgaW5kaXJlY3RseSBsb3N0OiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICAgIHBvc3NpYmx5
IGxvc3Q6IDAgYnl0ZXMgaW4gMCBibG9ja3MKKyAgIHN0aWxsIHJlYWNoYWJsZTogMCBieXRlcyBp
biAwIGJsb2NrcworICAgICAgICBzdXBwcmVzc2VkOiAwIGJ5dGVzIGluIDAgYmxvY2tzCisKK0Zv
ciBjb3VudHMgb2YgZGV0ZWN0ZWQgYW5kIHN1cHByZXNzZWQgZXJyb3JzLCByZXJ1biB3aXRoOiAt
dgorVXNlIC0tdHJhY2stb3JpZ2lucz15ZXMgdG8gc2VlIHdoZXJlIHVuaW5pdGlhbGlzZWQgdmFs
dWVzIGNvbWUgZnJvbQorRVJST1IgU1VNTUFSWTogMyBlcnJvcnMgZnJvbSAzIGNvbnRleHRzIChz
dXBwcmVzc2VkOiAwIGZyb20gMCkKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2Vf
bGVhay1uby1rZWVwLnZndGVzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9k
bGNsb3NlX2xlYWstbm8ta2VlcC52Z3Rlc3QJKHJldmlzaW9uIDApCisrKyBtZW1jaGVjay90ZXN0
cy9saW51eC9kbGNsb3NlX2xlYWstbm8ta2VlcC52Z3Rlc3QJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAuLi9maWx0ZXJfc3Rk
ZXJyCit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMgLS1rZWVwLXVubG9hZGVkLXN5bXM9bm8KSW5k
ZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCShyZXZpc2lvbiAwKQorKysgbWVtY2hl
Y2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYg
QEAKKy8qICBUZXN0IHJlcG9ydGluZyBvZiBtZW1vcnkgbGVha3MgaW4gb2JqZWN0cyB0aGF0IGhh
dmUgYmVlbiBkbG9wZW4nZWQuCisgKiAgIEZpbGU6ICAgZGxjbG9zZV9sZWFrLmMgKi8KKworI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4K
KworaW50ICgqam1wX29uX3VuaW5pdCkodm9pZCk7CitjaGFyKiAoKmFsbG9jXzFfYnl0ZSkodm9p
ZCk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICAgIGNoYXIqIG1lbVRv
TGVhazsKKyAgICBjaGFyIHg7CisgICAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCIuL2RsY2xvc2Vf
bGVha19zby5zbyIsIFJUTERfTk9XKTsKKyAgICBpZighaGFuZGxlKSB7CisgICAgICAgIHByaW50
ZigiRkFJTFVSRSB0byBkbG9wZW4gZGxjbG9zZV9sZWFrX3NvLnNvXG4iKTsKKyAgICAgICAgcmV0
dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisgICAgam1wX29uX3VuaW5pdCA9IGRsc3ltKGhhbmRs
ZSwiam1wX29uX3VuaW5pdCIpOworICAgIGFsbG9jXzFfYnl0ZSA9IGRsc3ltKGhhbmRsZSwiYWxs
b2NfMV9ieXRlIik7CisgICAgKHZvaWQpam1wX29uX3VuaW5pdCgpOworICAgIG1lbVRvTGVhayA9
IGFsbG9jXzFfYnl0ZSgpOworICAgIGRsY2xvc2UoaGFuZGxlKTsKKyAgICB4ID0gbWVtVG9MZWFr
Wy0xXTsKKyAgICByZXR1cm4gKEVYSVRfU1VDQ0VTUyk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuYwpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogbWVtY2hlY2svdGVzdHMvbGludXgvTWFr
ZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvTWFrZWZpbGUuYW0J
KHJldmlzaW9uIDEzMTc0KQorKysgbWVtY2hlY2svdGVzdHMvbGludXgvTWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTYsNiArNiw4IEBACiBFWFRSQV9ESVNUID0gXAogCWJyay5zdGRlcnIu
ZXhwIGJyay52Z3Rlc3QgXAogCWNhcGdldC52Z3Rlc3QgY2FwZ2V0LnN0ZGVyci5leHAgY2FwZ2V0
LnN0ZGVyci5leHAyIFwKKwlkbGNsb3NlX2xlYWstbm8ta2VlcC5zdGRlcnIuZXhwIGRsY2xvc2Vf
bGVhay1uby1rZWVwLnZndGVzdCBcCisJZGxjbG9zZV9sZWFrLnN0ZGVyci5leHAgZGxjbG9zZV9s
ZWFrLnZndGVzdCBcCiAJbHNmcmFtZTEudmd0ZXN0IGxzZnJhbWUxLnN0ZG91dC5leHAgbHNmcmFt
ZTEuc3RkZXJyLmV4cCBcCiAJbHNmcmFtZTIudmd0ZXN0IGxzZnJhbWUyLnN0ZG91dC5leHAgbHNm
cmFtZTIuc3RkZXJyLmV4cCBcCiAJc2lncXVldWUudmd0ZXN0IHNpZ3F1ZXVlLnN0ZGVyci5leHAg
XApAQCAtMjMsNiArMjUsNyBAQAogY2hlY2tfUFJPR1JBTVMgPSBcCiAJYnJrIFwKIAljYXBnZXQg
XAorCWRsY2xvc2VfbGVhayBkbGNsb3NlX2xlYWtfc28uc28gXAogCWdldHJlZ3NldCBcCiAJbHNm
cmFtZTEgXAogCWxzZnJhbWUyIFwKQEAgLTQ0LDMgKzQ3LDE2IEBACiBzdGFja19zd2l0Y2hfTERB
REQgICAgPSAtbHB0aHJlYWQKIHRpbWVyZmRfc3lzY2FsbF9MREFERCA9IC1scnQKIAorIyBCdWls
ZCBzaGFyZWQgb2JqZWN0IGZvciBkbGNsb3NlX2xlYWsKKyMjIyBJIGRvbid0IHVzZSBHTlUgQXV0
b3Rvb2xzIG9mdGVuLCBzbyBJIGhhdmUganVzdCBrbHVkZ2VkIHRvZ2V0aGVyIGJ1aWxkaW5nCisj
IyMgVGhlIGxvYWRhYmxlIGxpYnJhcnkgaGVyZS4uLiBJIGFtIGNlcnRhaW4gc29tZW9uZSBlbHNl
IGNvdWxkIGRvIHRoaXMKKyMjIyBjbGVhbmVyLgorZGxjbG9zZV9sZWFrX1NPVVJDRVMgICAgICAg
ICAgPSBkbGNsb3NlX2xlYWsuYworZGxjbG9zZV9sZWFrX0RFUEVOREVOQ0lFUyAgICAgPSBkbGNs
b3NlX2xlYWtfc28uc28KK2RsY2xvc2VfbGVha19MREFERCAgICAgICAgICAgID0gLWxkbAorZGxj
bG9zZV9sZWFrX0xERkxBR1MgICAgICAgICAgPSAkKEFNX0ZMQUdfTTMyNjRfUFJJKSBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJCh0b3BfYnVpbGRkaXIpL21l
bWNoZWNrL3Rlc3RzCitkbGNsb3NlX2xlYWtfc29fc29fU09VUkNFUyA9IGRsY2xvc2VfbGVha19z
by5jCitkbGNsb3NlX2xlYWtfc29fc29fQ0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtZnBpYworZGxj
bG9zZV9sZWFrX3NvX3NvX0xERkxBR1MgID0gLWZwaWMgJChBTV9GTEFHX00zMjY0X1BSSSkgLXNo
YXJlZCAtV2wsLXNvbmFtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsZGxj
bG9zZV9sZWFrX3NvLnNvCkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsu
c3RkZXJyLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xl
YWsuc3RkZXJyLmV4cAkocmV2aXNpb24gMCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xv
c2VfbGVhay5zdGRlcnIuZXhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisKK0NvbmRp
dGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykKKyAg
IGF0IDB4Li4uLi4uLi46IGptcF9vbl91bmluaXQgKGRsY2xvc2VfbGVha19zby5jOjkpCisgICBi
eSAweC4uLi4uLi4uOiBtYWluIChkbGNsb3NlX2xlYWsuYzoyMSkKKworSW52YWxpZCByZWFkIG9m
IHNpemUgMQorICAgYXQgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjQpCisgQWRk
cmVzcyAweC4uLi4uLi4uIGlzIDEgYnl0ZXMgYmVmb3JlIGEgYmxvY2sgb2Ygc2l6ZSAxIGFsbG9j
J2QKKyAgIGF0IDB4Li4uLi4uLi46IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisg
ICBieSAweC4uLi4uLi4uOiBhbGxvY18xX2J5dGUgKGRsY2xvc2VfbGVha19zby5jOjE4KQorICAg
YnkgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjIpCisKKworSEVBUCBTVU1NQVJZ
OgorICAgIGluIHVzZSBhdCBleGl0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgIHRvdGFsIGhlYXAg
dXNhZ2U6IDYgYWxsb2NzLCA1IGZyZWVzLCAxLDQ4MCBieXRlcyBhbGxvY2F0ZWQKKworMSBieXRl
cyBpbiAxIGJsb2NrcyBhcmUgZGVmaW5pdGVseSBsb3N0IGluIGxvc3MgcmVjb3JkIC4uLiBvZiAu
Li4KKyAgIGF0IDB4Li4uLi4uLi46IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisg
ICBieSAweC4uLi4uLi4uOiBhbGxvY18xX2J5dGUgKGRsY2xvc2VfbGVha19zby5jOjE4KQorICAg
YnkgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9zZV9sZWFrLmM6MjIpCisKK0xFQUsgU1VNTUFSWToK
KyAgIGRlZmluaXRlbHkgbG9zdDogMSBieXRlcyBpbiAxIGJsb2NrcworICAgaW5kaXJlY3RseSBs
b3N0OiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICAgIHBvc3NpYmx5IGxvc3Q6IDAgYnl0ZXMgaW4g
MCBibG9ja3MKKyAgIHN0aWxsIHJlYWNoYWJsZTogMCBieXRlcyBpbiAwIGJsb2NrcworICAgICAg
ICBzdXBwcmVzc2VkOiAwIGJ5dGVzIGluIDAgYmxvY2tzCisKK0ZvciBjb3VudHMgb2YgZGV0ZWN0
ZWQgYW5kIHN1cHByZXNzZWQgZXJyb3JzLCByZXJ1biB3aXRoOiAtdgorVXNlIC0tdHJhY2stb3Jp
Z2lucz15ZXMgdG8gc2VlIHdoZXJlIHVuaW5pdGlhbGlzZWQgdmFsdWVzIGNvbWUgZnJvbQorRVJS
T1IgU1VNTUFSWTogMyBlcnJvcnMgZnJvbSAzIGNvbnRleHRzIChzdXBwcmVzc2VkOiAwIGZyb20g
MCkKSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfb3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1
ZGUvcHViX3Rvb2xfb3B0aW9ucy5oCShyZXZpc2lvbiAxMzE3NCkKKysrIGluY2x1ZGUvcHViX3Rv
b2xfb3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDExIEBACiAvKiBDb250
aW51ZSBzdGFjayB0cmFjZXMgYmVsb3cgbWFpbigpPyAgRGVmYXVsdDogTk8gKi8KIGV4dGVybiBC
b29sIFZHXyhjbG9fc2hvd19iZWxvd19tYWluKTsKIAorLyogS2VlcCBzeW1ib2xzIGZvciBjb2Rl
IHRoYXQgaXMgdW5sb2FkZWQgKGRsY2xvc2Ugb3Igc2ltaWxhcikgc28gdGhhdCBzdGFjaworICAg
dHJhY2VzIGNhbiBzdGlsbCBnaXZlIGxpbmUvZmlsZSBpbmZvIGZvciBwcmV2aW91c2x5IGNhcHR1
cmVkIHN0YWNrIHRyYWNlcy4KKyAgIGUuZy4gLi4uIHNob3dpbmcgd2hlcmUgYSBibG9jayB3YXMg
YWxsb2NhdGVkIGUuZy4gbGVha3Mgb2Ygb3IgYWNjZXNzZXMganVzdAorICAgb3V0c2lkZSBhIGJs
b2NrLiAqLworZXh0ZXJuIEJvb2wgVkdfKGNsb19rZWVwX3VubG9hZGVkX3N5bXMpOwogCiAvKiBV
c2VkIHRvIGV4cGFuZCBmaWxlIG5hbWVzLiAgIm9wdGlvbl9uYW1lIiBpcyB0aGUgb3B0aW9uIG5h
bWUsIGVnLgogICAgIi0tbG9nLWZpbGUiLiAgJ2Zvcm1hdCcgaXMgd2hhdCBmb2xsb3dzLCBlZy4g
ImNhY2hlZ3JpbmQub3V0LiVwIi4gIEluCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX3N0YWNrdHJh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29sX3N0YWNrdHJhY2UuaAkocmV2aXNp
b24gMTMxNzQpCisrKyBpbmNsdWRlL3B1Yl90b29sX3N0YWNrdHJhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNiArNzUsNyBAQAogCiAvLyBQcmludCBhIFN0YWNrVHJhY2UuCiBleHRlcm4gdm9p
ZCBWR18ocHBfU3RhY2tUcmFjZSkgKCBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcyApOworZXh0
ZXJuIHZvaWQgVkdfKHBwX1N0YWNrVHJhY2Vfd2l0aF9lY3UpICggVUludCBlY3UsIFN0YWNrVHJh
Y2UgaXBzLCBVSW50IG5faXBzICk7CiAKIC8vIEdldHMgYW5kIGltbWVkaWF0ZWx5IHByaW50cyBh
IFN0YWNrVHJhY2UuICBKdXN0IGEgYml0IHNpbXBsZXIgdGhhbgogLy8gY2FsbGluZyBWR18oZ2V0
X1N0YWNrVHJhY2UpKCkgdGhlbiBWR18ocHBfU3RhY2tUcmFjZSkoKS4KSW5kZXg6IGluY2x1ZGUv
cHViX3Rvb2xfZGVidWdpbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9kZWJ1
Z2luZm8uaAkocmV2aXNpb24gMTMxNzQpCisrKyBpbmNsdWRlL3B1Yl90b29sX2RlYnVnaW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMiBAQAogICAgc2FtZSwgZXhjZXB0IGl0IGFw
cGVuZHMgIitOIiB0byBzeW1ib2wgbmFtZXMgdG8gaW5kaWNhdGUgb2Zmc2V0cy4gICovCiBleHRl
cm4gQm9vbCBWR18oZ2V0X2ZpbGVuYW1lKSAoIEFkZHIgYSwgSENoYXIqIGZpbGVuYW1lLCBJbnQg
bl9maWxlbmFtZSApOwogZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWUpICAgKCBBZGRyIGEsIEhD
aGFyKiBmbm5hbWUsICAgSW50IG5fZm5uYW1lICAgKTsKLWV4dGVybiBCb29sIFZHXyhnZXRfbGlu
ZW51bSkgICggQWRkciBhLCBVSW50KiBsaW5lbnVtICk7CiBleHRlcm4gQm9vbCBWR18oZ2V0X2Zu
bmFtZV93X29mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggQWRkciBhLCBI
Q2hhciogZm5uYW1lLCAgIEludCBuX2ZubmFtZSAgICk7CitleHRlcm4gQm9vbCBWR18oZ2V0X2Zu
bmFtZV93aXRoX2VjdSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggVUludCBlY3Us
IEFkZHIgYSwgQ2hhciogZm5uYW1lLCBJbnQgbl9mbm5hbWUgKTsKK2V4dGVybiBCb29sIFZHXyhn
ZXRfZm5uYW1lX3dfb2Zmc2V0X2FuZF9lY3UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGZubmFtZSwgSW50IG5fZm5uYW1lICk7CiAKIC8q
IFRoaXMgb25lIGlzIHRoZSBtb3N0IGdlbmVyYWwuICBJdCBnaXZlcyBmaWxlbmFtZSwgbGluZSBu
dW1iZXIgYW5kCiAgICBvcHRpb25hbGx5IGRpcmVjdG9yeSBuYW1lLiAgZmlsZW5hbWUgYW5kIGxp
bmVudW0gbWF5IG5vdCBiZSBOVUxMLgpAQCAtNjQsNyArNjcsMTIgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypPVVQqL0hDaGFyKiBkaXJuYW1lLCAgSW50IG5fZGlybmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0Jvb2wqIGRpcm5hbWVfYXZh
aWxhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGlu
ZW51bSApOwotCitleHRlcm4gQm9vbCBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW1fd2l0aF9lY3Up
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFVJbnQgZWN1LCBBZGRyIGEsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQ2hhciogZmlsZW5hbWUsIEludCBu
X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQ2hhciog
ZGlybmFtZSwgIEludCBuX2Rpcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qT1VUKi9Cb29sKiBkaXJuYW1lX2F2YWlsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLypPVVQqL1VJbnQqIGxpbmVudW0gKTsKIC8qIFN1Y2NlZWRzIG9ubHkgaWYgd2Ug
ZmluZCBmcm9tIGRlYnVnIGluZm8gdGhhdCAnYScgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCiAgICBm
aXJzdCBpbnN0cnVjdGlvbiBpbiBhIGZ1bmN0aW9uIC0tIGFzIG9wcG9zZWQgdG8gVkdfKGdldF9m
bm5hbWUpIHdoaWNoCiAgICBzdWNjZWVkcyBpZiB3ZSBmaW5kIGZyb20gZGVidWcgaW5mbyB0aGF0
ICdhJyBpcyB0aGUgYWRkcmVzcyBvZiBhbnkKQEAgLTExNyw2ICsxMjUsOCBAQAogLyogU3VjY2Vl
ZHMgaWYgdGhlIGFkZHJlc3MgaXMgd2l0aGluIGEgc2hhcmVkIG9iamVjdCBvciB0aGUgbWFpbiBl
eGVjdXRhYmxlLgogICAgSXQgZG9lc24ndCBtYXR0ZXIgaWYgZGVidWcgaW5mbyBpcyBwcmVzZW50
IG9yIG5vdC4gKi8KIGV4dGVybiBCb29sIFZHXyhnZXRfb2JqbmFtZSkgICggQWRkciBhLCBIQ2hh
ciogb2JqbmFtZSwgSW50IG5fb2JqbmFtZSApOworZXh0ZXJuIEJvb2wgVkdfKGdldF9vYmpuYW1l
X3dpdGhfZWN1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBVSW50IGVjdSwgQWRk
ciBhLCBDaGFyKiBvYmpuYW1lLCBJbnQgbl9vYmpuYW1lICk7CiAKIC8qIFB1dHMgaW50byAnYnVm
JyBpbmZvIGFib3V0IHRoZSBjb2RlIGFkZHJlc3MgJWVpcDogIHRoZSBhZGRyZXNzLCBmdW5jdGlv
bgogICAgbmFtZSAoaWYga25vd24pIGFuZCBmaWxlbmFtZS9saW5lIG51bWJlciAoaWYga25vd24p
LCBsaWtlIHRoaXM6CkBAIC0xMjYsOCArMTM2LDggQEAKICAgICduX2J1ZicgZ2l2ZXMgbGVuZ3Ro
IG9mICdidWYnLiAgUmV0dXJucyAnYnVmJy4KICovCiBleHRlcm4gSENoYXIqIFZHXyhkZXNjcmli
ZV9JUCkoQWRkciBlaXAsIEhDaGFyKiBidWYsIEludCBuX2J1Zik7CitleHRlcm4gQ2hhciogVkdf
KGRlc2NyaWJlX0lQX3dpdGhfZWN1KShVSW50IGVjdSwgQWRkciBlaXAsIENoYXIqIGJ1ZiwgSW50
IG5fYnVmKTsKIAotCiAvKiBHZXQgYW4gWEFycmF5IG9mIFN0YWNrQmxvY2sgd2hpY2ggZGVzY3Jp
YmUgdGhlIHN0YWNrIChhdXRvKSBibG9ja3MKICAgIGZvciB0aGlzIGlwLiAgVGhlIGNhbGxlciBp
cyBleHBlY3RlZCB0byBmcmVlIHRoZSBYQXJyYXkgYXQgc29tZQogICAgcG9pbnQuICBJZiAnYXJy
YXlzX29ubHknIGlzIFRydWUsIG9ubHkgYXJyYXktdHlwZWQgYmxvY2tzIGFyZQpJbmRleDogY29y
ZWdyaW5kL21fZXhlY29udGV4dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2V4ZWNvbnRl
eHQuYwkocmV2aXNpb24gMTMxNzQpCisrKyBjb3JlZ3JpbmQvbV9leGVjb250ZXh0LmMJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAKICAgICA1MDMzMTY1M1VMLCAgICAxMDA2NjMzMTlV
TAogfTsKIAorVUludCBWR18oZWNfbGFzdF9lY3UpID0gMDsKIAogLyogRWFjaCBlbGVtZW50IGlz
IHByZXNlbnQgaW4gYSBoYXNoIGNoYWluLCBhbmQgYWxzbyBjb250YWlucyBhCiAgICB2YXJpYWJs
ZSBsZW5ndGggYXJyYXkgb2YgZ3Vlc3QgY29kZSBhZGRyZXNzZXMgKHRoZSB1c2VmdWwgcGFydCku
ICovCkBAIC0xNzAsNyArMTcxLDcgQEAKIC8qIFByaW50IGFuIEV4ZUNvbnRleHQuICovCiB2b2lk
IFZHXyhwcF9FeGVDb250ZXh0KSAoIEV4ZUNvbnRleHQqIGVjICkKIHsKLSAgIFZHXyhwcF9TdGFj
a1RyYWNlKSggZWMtPmlwcywgZWMtPm5faXBzICk7CisgICBWR18ocHBfU3RhY2tUcmFjZV93aXRo
X2VjdSkoIGVjLT5lY3UsIGVjLT5pcHMsIGVjLT5uX2lwcyApOwogfQogCiAKQEAgLTQwMiw2ICs0
MDMsNyBAQAogCiAgICB2Z19hc3NlcnQoVkdfKGlzX3BsYXVzaWJsZV9FQ1UpKGVjX25leHRfZWN1
KSk7CiAgICBuZXdfZWMtPmVjdSA9IGVjX25leHRfZWN1OworICAgVkdfKGVjX2xhc3RfZWN1KSA9
IGVjX25leHRfZWN1OwogICAgZWNfbmV4dF9lY3UgKz0gNDsKICAgIGlmIChlY19uZXh0X2VjdSA9
PSAwKSB7CiAgICAgICAvKiBVcnIuICBOb3cgd2UncmUgaG9zZWQ7IHdlIGVtaXR0ZWQgMl4zMCBF
eGVDb250ZXh0cyBhbHJlYWR5CkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZv
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCShyZXZp
c2lvbiAxMzE3NCkKKysrIGNvcmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgInB1Yl9jb3JlX3RocmVhZHN0YXRl
LmgiCiAjaW5jbHVkZSAicHViX2NvcmVfZGVidWdpbmZvLmgiICAvKiBzZWxmICovCiAjaW5jbHVk
ZSAicHViX2NvcmVfZGVtYW5nbGUuaCIKKyNpbmNsdWRlICJwdWJfY29yZV9leGVjb250ZXh0Lmgi
CiAjaW5jbHVkZSAicHViX2NvcmVfbGliY2Jhc2UuaCIKICNpbmNsdWRlICJwdWJfY29yZV9saWJj
YXNzZXJ0LmgiCiAjaW5jbHVkZSAicHViX2NvcmVfbGliY3ByaW50LmgiCkBAIC0xMTEsNiArMTEy
LDkgQEAKICAgIGxpbmtlZCBsaXN0IG9mIERlYnVnSW5mb3MuICovCiBzdGF0aWMgRGVidWdJbmZv
KiBkZWJ1Z0luZm9fbGlzdCA9IE5VTEw7CiAKKy8qIEtlZXAgYXJvdW5kIG9sZCBkZWJ1ZyBpbmZv
IHNvIHdlIGNhbiBoYXZlIGEgY2hhbmNlIG9mIGRlY29kaW5nIHN0YWNrIHRyYWNlcworICogKGUu
Zy4gZm9yIGxlYWsgY2hlY2tzKSBldmVuIGFmdGVyIGEgc2hhcmVkIGxpYnJhcnkgaGFzIGJlZW4g
dW5sb2FkZWQuICovCitzdGF0aWMgRGVidWdJbmZvKiB1bmxvYWRlZERlYnVnSW5mb19saXN0ID0g
TlVMTDsKIAogLyogRmluZCAnZGknIGluIHRoZSBkZWJ1Z0luZm9fbGlzdCBhbmQgbW92ZSBpdCBv
bmUgc3RlcCBjbG9zZXIgdGhlIHRoZQogICAgZnJvbnQgb2YgdGhlIGxpc3QsIHNvIGFzIHRvIG1h
a2Ugc3Vic2VxdWVudCBzZWFyY2hlcyBmb3IgaXQKQEAgLTI5Miw3ICsyOTYsNyBAQAogfQogCiAK
LS8qICdzaScgaXMgYSBtZW1iZXIgb2YgZGVidWdJbmZvX2xpc3QuICBGaW5kIGl0LCByZW1vdmUg
aXQgZnJvbSB0aGUKKy8qICdkaScgaXMgYSBtZW1iZXIgb2YgZGVidWdJbmZvX2xpc3QuICBGaW5k
IGl0LCByZW1vdmUgaXQgZnJvbSB0aGUKICAgIGxpc3QsIG5vdGlmeSBtX3JlZGlyIHRoYXQgdGhp
cyBoYXMgaGFwcGVuZWQsIGFuZCBmcmVlIGFsbCBzdG9yYWdlCiAgICByZWFjaGFibGUgZnJvbSBp
dC4KICovCkBAIC0zMTksNyArMzIzLDE3IEBACiAgICAgICAgICAqcHJldl9uZXh0X3B0ciA9IGN1
cnItPm5leHQ7CiAgICAgICAgICBpZiAoY3Vyci0+aGF2ZV9kaW5mbykKICAgICAgICAgICAgIFZH
XyhyZWRpcl9ub3RpZnlfZGVsZXRlX0RlYnVnSW5mbykoIGN1cnIgKTsKLSAgICAgICAgIGZyZWVf
RGVidWdJbmZvKGN1cnIpOworICAgICAgICAgaWYgKFZHXyhjbG9fa2VlcF91bmxvYWRlZF9zeW1z
KSAmJiAKKyAgICAgICAgICAgICBjdXJyLT5maXJzdF9lY3UgPCBWR18oZWNfbGFzdF9lY3UpKSB7
CisgICAgICAgICAgICAvKiBPbmx5IGtlZXAgdGhlIERlYnVnSW5mbyBhcm91bmQgaWYgdGhlIGNv
bW1hbmQgbGluZSBzd2l0Y2gKKyAgICAgICAgICAgICAgIHJlcXVlc3RlZCBpdCwgYW5kIHRoZXJl
IHdhcyBhdCBsZWFzdCAxIGV4ZSBjb250ZXh0IHRha2VuIHdoaWxlCisgICAgICAgICAgICAgICB0
aGlzIERlYnVnSW5mbyB3YXMgbG9hZGVkLiAqLworICAgICAgICAgICAgY3Vyci0+bmV4dCA9IHVu
bG9hZGVkRGVidWdJbmZvX2xpc3Q7CisgICAgICAgICAgICB1bmxvYWRlZERlYnVnSW5mb19saXN0
ID0gY3VycjsKKyAgICAgICAgICAgIGN1cnItPmxhc3RfZWN1ID0gVkdfKGVjX2xhc3RfZWN1KTsK
KyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmcmVlX0RlYnVnSW5mbyhjdXJyKTsKKyAg
ICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIHByZXZfbmV4dF9wdHIg
PSAmY3Vyci0+bmV4dDsKQEAgLTQ2OSw2ICs0ODMsOCBAQAogICAgICAgdmdfYXNzZXJ0KGRpKTsK
ICAgICAgIGRpLT5uZXh0ID0gZGVidWdJbmZvX2xpc3Q7CiAgICAgICBkZWJ1Z0luZm9fbGlzdCA9
IGRpOworICAgICAgZGktPmZpcnN0X2VjdSA9IFZHXyhlY19sYXN0X2VjdSk7CisgICAgICBkaS0+
bGFzdF9lY3UgPSBFQ19FQ1VfQ1VSUkVOVDsKICAgIH0KICAgIHJldHVybiBkaTsKIH0KQEAgLTU3
NCw2ICs1OTAsNyBAQAogICAgICAgY3JlYXRlZCBhbmQgZGVzdHJveWVkIG9uIGRlbWFuZCwgYW5k
IGVhY2ggb25lIGlzIHRyZWF0ZWQgbW9yZSBvcgogICAgICAgbGVzcyBpbmRlcGVuZGVudGx5LiAq
LwogICAgdmdfYXNzZXJ0KGRlYnVnSW5mb19saXN0ID09IE5VTEwpOworICAgdmdfYXNzZXJ0KHVu
bG9hZGVkRGVidWdJbmZvX2xpc3QgPT0gTlVMTCk7CiAKICAgIC8qIGZsdXNoIHRoZSBDRkkgZmFz
dCBxdWVyeSBjYWNoZS4gKi8KICAgIGNmc2lfY2FjaGVfX2ludmFsaWRhdGUoKTsKQEAgLTEyNzUs
MTAgKzEyOTIsMTAgQEAKIC8qLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCBWR18oZGlfZGlzY2FyZF9B
TExfZGVidWdpbmZvKSggdm9pZCApCitzdGF0aWMgdm9pZCBkaXNjYXJkX0FMTF9kZWJ1Z2luZm9f
aW5fbGlzdCggRGVidWdJbmZvKiBsaXN0ICkKIHsKICAgIERlYnVnSW5mbyAqZGksICpkaTI7Ci0g
ICBkaSA9IGRlYnVnSW5mb19saXN0OworICAgZGkgPSBsaXN0OwogICAgd2hpbGUgKGRpKSB7CiAg
ICAgICBkaTIgPSBkaS0+bmV4dDsKICAgICAgIFZHXyhwcmludGYpKCJYWFggcm0gJXBcbiIsIGRp
KTsKQEAgLTEzMTIsMjAgKzEzMjksMjIgQEAKICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMg
aW5saW5lIEJvb2wgZWN1X2luX2RpX3JhbmdlKFVJbnQgZWN1LCBEZWJ1Z0luZm8qIGRpKQoreyAg
IC8qIGZpcnN0X2VjdSBpcyBhY3R1YWxseSB0aGUgbGFzdCBlY3UgIyB0aGF0IHdhcyBhbGxvY2F0
ZWQgYmVmb3JlIHRoaXMKKyAgICAgKiBEZWJ1Z0luZm8gd2FzIGxvYWRlZCwgbGFzdF9lY3UgaXMg
dGhhdCBsYXN0IGVjdSB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAgICAgKiBiZWZvcmUgdGhpcyBEZWJ1
Z0luZm8gd2FzIHVubG9hZGVkIG9yIDB4RkZGRkZGRkYgKGFrYSBFQ19FQ1VfQ1VSUkVOVCkKKyAg
ICAgKiBpZiB0aGlzIERlYnVnSW5mbyBoYXMgbm90IGJlZW4gdW5sb2FkZWQgeWV0LiAqLworICAg
IHJldHVybiAoZWN1ID4gZGktPmZpcnN0X2VjdSkgJiYgKGVjdSA8PSBkaS0+bGFzdF9lY3UpOwor
fQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0vKi0tLSBVc2Ugb2Ygc3ltYm9sIHRhYmxlICYgbG9jYXRpb24gaW5mbyB0
byBjcmVhdGUgICAgICAgIC0tLSovCi0vKi0tLSBwbGF1c2libGUtbG9va2luZyBzdGFjayBkdW1w
cy4gICAgICAgICAgICAgICAgICAgICAgIC0tLSovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIFZHXyhkaV9kaXNj
YXJkX0FMTF9kZWJ1Z2luZm8pKCB2b2lkICkKK3sKKyAgICBkaXNjYXJkX0FMTF9kZWJ1Z2luZm9f
aW5fbGlzdChkZWJ1Z0luZm9fbGlzdCk7CisgICAgZGlzY2FyZF9BTExfZGVidWdpbmZvX2luX2xp
c3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCk7Cit9CiAKLS8qIFNlYXJjaCBhbGwgc3ltdGFicyB0
aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ci4gIElmIGZvdW5kLCBzZXQKLSAgICpwZGkg
dG8gdGhlIHJlbGV2YW50IERlYnVnSW5mbywgYW5kICpzeW1ubyB0byB0aGUgc3ltdGFiIGVudHJ5
Ci0gICAqbnVtYmVyIHdpdGhpbiB0aGF0LiAgSWYgbm90IGZvdW5kLCAqcHNpIGlzIHNldCB0byBO
VUxMLgotICAgSWYgZmluZFRleHQ9PVRydWUsICBvbmx5IHRleHQgc3ltYm9scyBhcmUgc2VhcmNo
ZWQgZm9yLgotICAgSWYgZmluZFRleHQ9PUZhbHNlLCBvbmx5IGRhdGEgc3ltYm9scyBhcmUgc2Vh
cmNoZWQgZm9yLgotKi8KLXN0YXRpYyB2b2lkIHNlYXJjaF9hbGxfc3ltdGFicyAoIEFkZHIgcHRy
LCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qT1VUKi9Xb3JkKiBzeW1ubywKK3N0YXRpYyB2b2lkIHNlYXJjaF9vbmVf
ZGVidWdJbmZvX2xpc3QgKERlYnVnSW5mbyogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVJbnQgZWN1LCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIHN5bW5vLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBtYXRjaF9hbnl3aGVyZV9pbl9zeW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGZpbmRUZXh0ICkKIHsKQEAg
LTEzMzMsNyArMTM1MiwxMCBAQAogICAgRGVidWdJbmZvKiBkaTsKICAgIEJvb2wgICAgICAgaW5S
YW5nZTsKIAotICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRp
LT5uZXh0KSB7CisgICBmb3IgKGRpID0gbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkg
eworICAgICAgIGlmICggISBlY3VfaW5fZGlfcmFuZ2UoIGVjdSwgZGkpICkgeworICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICB9CiAKICAgICAgIGlmIChmaW5kVGV4dCkgewogICAgICAgICAg
LyogQ29uc2lkZXIgYW55IHN5bWJvbCBpbiB0aGUgci14IG1hcHBlZCBhcmVhIHRvIGJlIHRleHQu
CkBAIC0xMzgxLDE3ICsxNDAzLDQ2IEBACiAgIG5vdF9mb3VuZDoKICAgICpwZGkgPSBOVUxMOwog
fQorIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworLyotLS0gVXNlIG9mIHN5bWJvbCB0YWJsZSAmIGxvY2F0aW9uIGluZm8g
dG8gY3JlYXRlICAgICAgICAtLS0qLworLyotLS0gcGxhdXNpYmxlLWxvb2tpbmcgc3RhY2sgZHVt
cHMuICAgICAgICAgICAgICAgICAgICAgICAtLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBTZWFyY2ggYWxs
IHN5bXRhYnMgdGhhdCB3ZSBrbm93IGFib3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0
CisgICAqcGRpIHRvIHRoZSByZWxldmFudCBEZWJ1Z0luZm8sIGFuZCAqc3ltbm8gdG8gdGhlIHN5
bXRhYiBlbnRyeQorICAgKm51bWJlciB3aXRoaW4gdGhhdC4gIElmIG5vdCBmb3VuZCwgKnBkaSBp
cyBzZXQgdG8gTlVMTC4KKyAgIElmIGZpbmRUZXh0PT1UcnVlLCAgb25seSB0ZXh0IHN5bWJvbHMg
YXJlIHNlYXJjaGVkIGZvci4KKyAgIElmIGZpbmRUZXh0PT1GYWxzZSwgb25seSBkYXRhIHN5bWJv
bHMgYXJlIHNlYXJjaGVkIGZvci4KKyovCitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX3N5bXRhYnMg
KCBVSW50IGVjdSwgQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIHN5bW5vLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBtYXRjaF9hbnl3aGVyZV9pbl9zeW0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGZpbmRUZXh0ICkKK3sKKyAg
IHNlYXJjaF9vbmVfZGVidWdJbmZvX2xpc3QoZGVidWdJbmZvX2xpc3QsIGVjdSwgcHRyLCBwZGks
IHN5bW5vLAorICAgICAgICAgICBtYXRjaF9hbnl3aGVyZV9pbl9zeW0sIGZpbmRUZXh0KTsKKyAg
IC8qIE9ubHkgc2VhcmNoIHRoZSBsaXN0IG9mIHVubG9hZGVkIHN5bXMgaWYgd2UgaGF2ZW4ndCBm
b3VuZCBzb21ldGhpbmcsCisgICAgKiBhbmQgd2UgYXJlbid0IGRlY29kaW5nIGEgJ2N1cnJlbnQn
IHN0YWNrdHJhY2UuICovCisgICBpZighKnBkaSAmJiBlY3UgIT0gRUNfRUNVX0NVUlJFTlQpCisg
ICAgICAgc2VhcmNoX29uZV9kZWJ1Z0luZm9fbGlzdCh1bmxvYWRlZERlYnVnSW5mb19saXN0LCBl
Y3UsIHB0ciwgcGRpLCBzeW1ubywKKyAgICAgICAgICAgICAgIG1hdGNoX2FueXdoZXJlX2luX3N5
bSwgZmluZFRleHQpOworfQogCiAvKiBTZWFyY2ggYWxsIGxvY3RhYnMgdGhhdCB3ZSBrbm93IGFi
b3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0CiAgICAqcGRpIHRvIHRoZSByZWxldmFu
dCBEZWJ1Z0luZm8sIGFuZCAqbG9jbm8gdG8gdGhlIGxvY3RhYiBlbnRyeQogICAgKm51bWJlciB3
aXRoaW4gdGhhdC4gIElmIG5vdCBmb3VuZCwgKnBkaSBpcyBzZXQgdG8gTlVMTC4gKi8KLXN0YXRp
YyB2b2lkIHNlYXJjaF9hbGxfbG9jdGFicyAoIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiog
cGRpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9X
b3JkKiBsb2NubyApCitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QgKERl
YnVnSW5mbyogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUludCBlY3UsIEFkZHIgcHRyLCAvKk9VVCovRGVidWdJbmZvKiogcGRpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25v
ICkKKwogewogICAgV29yZCAgICAgICBsbm87CiAgICBEZWJ1Z0luZm8qIGRpOwotICAgZm9yIChk
aSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7CisgICBmb3Ig
KGRpID0gbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgeworICAgICAgaWYgKCAhIGVj
dV9pbl9kaV9yYW5nZSggZWN1LCBkaSkgKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQog
ICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQKICAgICAgICAgICAmJiBkaS0+dGV4dF9zaXplID4g
MAogICAgICAgICAgICYmIGRpLT50ZXh0X2F2bWEgPD0gcHRyIApAQCAtMTQwNyw2ICsxNDU4LDE4
IEBACiAgICAqcGRpID0gTlVMTDsKIH0KIAorLyogU2VhcmNoIGFsbCBsb2N0YWJzIHRoYXQgd2Ug
a25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAorICAgKnBkaSB0byB0aGUg
cmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRoZSBsb2N0YWIgZW50cnkKKyAgICpu
dW1iZXIgd2l0aGluIHRoYXQuICBJZiBub3QgZm91bmQsICpwZGkgaXMgc2V0IHRvIE5VTEwuICov
CitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBVSW50IGVjdSwgQWRkciBwdHIsIC8q
T1VUKi9EZWJ1Z0luZm8qKiBwZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLypPVVQqL1dvcmQqIGxvY25vICkKK3sKKyAgICBzZWFyY2hfYWxsX2xvY3RhYnNf
b25lX2xpc3QoZGVidWdJbmZvX2xpc3QsIGVjdSwgcHRyLCBwZGksIGxvY25vICk7CisgICAgLyog
T25seSBzZWFyY2ggdGhlIGxpc3Qgb2YgdW5sb2FkZWQgc3ltcyBpZiB3ZSBoYXZlbid0IGZvdW5k
IHNvbWV0aGluZywKKyAgICAgKiBhbmQgd2UgYXJlbid0IGRlY29kaW5nIGEgJ2N1cnJlbnQnIHN0
YWNrdHJhY2UuICovCisgICAgaWYoISpwZGkgJiYgZWN1ICE9IEVDX0VDVV9DVVJSRU5UKQorICAg
ICAgICBzZWFyY2hfYWxsX2xvY3RhYnNfb25lX2xpc3QodW5sb2FkZWREZWJ1Z0luZm9fbGlzdCwg
ZWN1LCBwdHIsIHBkaSwgbG9jbm8gKTsKK30KIAogLyogVGhlIHdob2xlIHBvaW50IG9mIHRoaXMg
d2hvbGUgYmlnIGRlYWw6IG1hcCBhIGNvZGUgYWRkcmVzcyB0byBhCiAgICBwbGF1c2libGUgc3lt
Ym9sIG5hbWUuICBSZXR1cm5zIEZhbHNlIGlmIG5vIGlkZWE7IG90aGVyd2lzZSBUcnVlLgpAQCAt
MTQxOCw3ICsxNDgxLDcgQEAKIHN0YXRpYwogQm9vbCBnZXRfc3ltX25hbWUgKCBCb29sIGRvX2N4
eF9kZW1hbmdsaW5nLCBCb29sIGRvX3pfZGVtYW5nbGluZywKICAgICAgICAgICAgICAgICAgICAg
Qm9vbCBkb19iZWxvd19tYWluX3JlbmFtaW5nLAotICAgICAgICAgICAgICAgICAgICBBZGRyIGEs
IEhDaGFyKiBidWYsIEludCBuYnVmLAorICAgICAgICAgICAgICAgICAgICBVSW50IGVjdSwgQWRk
ciBhLCBIQ2hhciogYnVmLCBJbnQgbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgQm9vbCBtYXRj
aF9hbnl3aGVyZV9pbl9zeW0sIEJvb2wgc2hvd19vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAg
IEJvb2wgZmluZFRleHQsIC8qT1VUKi9QdHJkaWZmVCogb2Zmc2V0UCApCiB7CkBAIC0xNDI2LDcg
KzE0ODksNyBAQAogICAgV29yZCAgICAgICBzbm87CiAgICBQdHJkaWZmVCAgIG9mZnNldDsKIAot
ICAgc2VhcmNoX2FsbF9zeW10YWJzICggYSwgJmRpLCAmc25vLCBtYXRjaF9hbnl3aGVyZV9pbl9z
eW0sIGZpbmRUZXh0ICk7CisgICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBlY3UsIGEsICZkaSwgJnNu
bywgbWF0Y2hfYW55d2hlcmVfaW5fc3ltLCBmaW5kVGV4dCApOwogICAgaWYgKGRpID09IE5VTEwp
IAogICAgICAgcmV0dXJuIEZhbHNlOwogCkBAIC0xNDc2LDcgKzE1MzksNyBAQAogewogICAgRGVi
dWdJbmZvKiBzaTsKICAgIFdvcmQgICAgICAgc25vOwotICAgc2VhcmNoX2FsbF9zeW10YWJzICgg
Z3Vlc3RfY29kZV9hZGRyLCAKKyAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIEVDX0VDVV9DVVJSRU5U
LCBndWVzdF9jb2RlX2FkZHIsIAogICAgICAgICAgICAgICAgICAgICAgICAgJnNpLCAmc25vLAog
ICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZS8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi8sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBUcnVlLypjb25zaWRlciB0ZXh0IHN5bWJvbHMgb25seSov
ICk7CkBAIC0xNDkwLDkgKzE1NTMsMTMgQEAKICAgIG1hdGNoIGFueXdoZXJlIGluIGZ1bmN0aW9u
LCBidXQgZG9uJ3Qgc2hvdyBvZmZzZXRzLiAqLwogQm9vbCBWR18oZ2V0X2ZubmFtZSkgKCBBZGRy
IGEsIEhDaGFyKiBidWYsIEludCBuYnVmICkKIHsKKyAgICByZXR1cm4gVkdfKGdldF9mbm5hbWVf
d2l0aF9lY3UpIChFQ19FQ1VfQ1VSUkVOVCwgYSwgYnVmLCBuYnVmKTsKK30KK0Jvb2wgVkdfKGdl
dF9mbm5hbWVfd2l0aF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciogYnVmLCBJbnQgbmJ1
ZiApCit7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL1RydWUsIC8q
Wi1kZW1hbmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4t
cmVuYW1pbmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwgYnVmLCBuYnVmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGVjdSwgYSwgYnVmLCBuYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9UcnVlLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyp0ZXh0IHN5bXMgb25seSovVHJ1ZSwKQEAgLTE1MDMsOSArMTU3MCwxMyBAQAogICAg
bWF0Y2ggYW55d2hlcmUgaW4gZnVuY3Rpb24sIGFuZCBzaG93IG9mZnNldCBpZiBub256ZXJvLiAq
LwogQm9vbCBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkgKCBBZGRyIGEsIEhDaGFyKiBidWYsIElu
dCBuYnVmICkKIHsKKyAgcmV0dXJuIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0X2FuZF9lY3UpICgg
RUNfRUNVX0NVUlJFTlQsIGEsIGJ1ZiwgbmJ1ZiApOworfQorQm9vbCBWR18oZ2V0X2ZubmFtZV93
X29mZnNldF9hbmRfZWN1KSAoIFVJbnQgZWN1LCBBZGRyIGEsIENoYXIqIGJ1ZiwgSW50IG5idWYg
KQorewogICAgcmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9UcnVlLCAvKlot
ZGVtYW5nbGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJl
bmFtaW5nKi9UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwgbmJ1ZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBlY3UsIGEsIGJ1ZiwgbmJ1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgLypzaG93IG9mZnNldD8qL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyp0ZXh0IHN5bXMgb25seSovVHJ1ZSwKQEAgLTE1MTksNyArMTU5MCw3IEBACiB7CiAgICBy
ZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL1RydWUsIC8qWi1kZW1hbmdsZSov
VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcqL1Ry
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwgYnVmLCBuYnVmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIEVDX0VDVV9DVVJSRU5ULCBhLCBidWYsIG5idWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4qL0ZhbHNlLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyp0ZXh0IHN5bXMgb25seSovVHJ1ZSwKQEAgLTE1MzMsNyArMTYwNCw3IEBACiB7CiAg
ICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5n
bGUqL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWlu
ZyovRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwgYnVmLCBuYnVmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEVDX0VDVV9DVVJSRU5ULCBhLCBidWYsIG5idWYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4qL1RydWUsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKnRleHQgc3ltcyBvbmx5Ki9UcnVlLApAQCAtMTU0Nyw3ICsxNjE4LDcgQEAK
IHsKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovRmFsc2UsIC8qWi1k
ZW1hbmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVu
YW1pbmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwgYnVmLCBuYnVmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIEVDX0VDVV9DVVJSRU5ULCBhLCBidWYsIG5idWYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4qL1RydWUsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKnRleHQgc3ltcyBvbmx5Ki9UcnVlLApAQCAtMTU2Myw3ICsxNjM0LDcg
QEAKICAgIEhDaGFyIGZubmFtZVs2NF07CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKyst
ZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5nbGUqL0ZhbHNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWluZyovRmFsc2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgYSwgZm5uYW1lLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VS
UkVOVCwgYSwgZm5uYW1lLCA2NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2Fu
eXdoZXJlX2luX3N5bSovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9m
ZnNldD8qL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypkYXRhIHN5bXMgb25seSBw
bGVhc2UqL1RydWUsCkBAIC0xNjIxLDcgKzE2OTIsNyBAQAogICAgdmdfYXNzZXJ0KG5fZG5hbWUg
PiAxKTsKICAgIG9rID0gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL0ZhbHNlLCAvKlot
ZGVtYW5nbGUqL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVu
YW1pbmcqL0ZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2FkZHIsIGRuYW1lLCBu
X2RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBFQ19FQ1VfQ1VSUkVOVCwgZGF0YV9hZGRy
LCBkbmFtZSwgbl9kbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3aGVy
ZV9pbl9zeW0qL1RydWUsIAogICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0Pyov
RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIC8qZGF0YSBzeW1zIG9ubHkgcGxlYXNlKi9G
YWxzZSwKQEAgLTE2MzcsNiArMTcwOCwxMCBAQAogICAgcmVxdWlyZSBkZWJ1ZyBpbmZvLiAgQ2Fs
bGVyIHN1cHBsaWVzIGJ1ZiBhbmQgbmJ1Zi4gKi8KIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAoIEFk
ZHIgYSwgSENoYXIqIGJ1ZiwgSW50IG5idWYgKQogeworICAgcmV0dXJuIFZHXyhnZXRfb2JqbmFt
ZV93aXRoX2VjdSkgKEVDX0VDVV9DVVJSRU5ULCBhLCBidWYsIG5idWYpOworfQorQm9vbCBWR18o
Z2V0X29iam5hbWVfd2l0aF9lY3UpICggVUludCBlY3UsIEFkZHIgYSwgQ2hhciogYnVmLCBJbnQg
bmJ1ZiApCit7CiAgICBEZWJ1Z0luZm8qIGRpOwogICAgY29uc3QgTlNlZ21lbnQgKnNlZzsKICAg
IEhDaGFyKiBmaWxlbmFtZTsKQEAgLTE2NDQsNiArMTcxOSwxMCBAQAogICAgLyogTG9vayBpbiB0
aGUgZGVidWdJbmZvX2xpc3QgdG8gZmluZCB0aGUgbmFtZS4gIEluIG1vc3QgY2FzZXMgd2UKICAg
ICAgIGV4cGVjdCB0aGlzIHRvIHByb2R1Y2UgYSByZXN1bHQuICovCiAgICBmb3IgKGRpID0gZGVi
dWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlmICggISBl
Y3VfaW5fZGlfcmFuZ2UoIGVjdSwgZGkpICkgeworICAgICAgICAgY29udGludWU7CisgICAgICB9
CisKICAgICAgIGlmIChkaS0+dGV4dF9wcmVzZW50CiAgICAgICAgICAgJiYgZGktPnRleHRfc2l6
ZSA+IDAKICAgICAgICAgICAmJiBkaS0+dGV4dF9hdm1hIDw9IGEgCkBAIC0xNjkxLDI2ICsxNzcw
LDEzIEBACiB7CiAgICBEZWJ1Z0luZm8qIHNpOwogICAgV29yZCAgICAgICBsb2NubzsKLSAgIHNl
YXJjaF9hbGxfbG9jdGFicyAoIGEsICZzaSwgJmxvY25vICk7CisgICBzZWFyY2hfYWxsX2xvY3Rh
YnMgKCBFQ19FQ1VfQ1VSUkVOVCwgYSwgJnNpLCAmbG9jbm8gKTsKICAgIGlmIChzaSA9PSBOVUxM
KSAKICAgICAgIHJldHVybiBGYWxzZTsKICAgIFZHXyhzdHJuY3B5X3NhZmVseSkoZmlsZW5hbWUs
IHNpLT5sb2N0YWJbbG9jbm9dLmZpbGVuYW1lLCBuX2ZpbGVuYW1lKTsKICAgIHJldHVybiBUcnVl
OwogfQogCi0vKiBNYXAgYSBjb2RlIGFkZHJlc3MgdG8gYSBsaW5lIG51bWJlci4gIFJldHVybnMg
VHJ1ZSBpZiBzdWNjZXNzZnVsLiAqLwotQm9vbCBWR18oZ2V0X2xpbmVudW0pKCBBZGRyIGEsIFVJ
bnQqIGxpbmVubyApCi17Ci0gICBEZWJ1Z0luZm8qIHNpOwotICAgV29yZCAgICAgICBsb2NubzsK
LSAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIGEsICZzaSwgJmxvY25vICk7Ci0gICBpZiAoc2kgPT0g
TlVMTCkgCi0gICAgICByZXR1cm4gRmFsc2U7Ci0gICAqbGluZW5vID0gc2ktPmxvY3RhYltsb2Nu
b10ubGluZW5vOwotCi0gICByZXR1cm4gVHJ1ZTsKLX0KLQogLyogTWFwIGEgY29kZSBhZGRyZXNz
IHRvIGEgZmlsZW5hbWUvbGluZSBudW1iZXIvZGlyIG5hbWUgaW5mby4KICAgIFNlZSBwcm90b3R5
cGUgZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGJlaGF2aW91ci4KICovCkBAIC0xNzIwLDYg
KzE3ODYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9Cb29s
KiBkaXJuYW1lX2F2YWlsYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
T1VUKi9VSW50KiBsaW5lbm8gKQogeworICAgIHJldHVybiBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVu
dW1fd2l0aF9lY3UpIChFQ19FQ1VfQ1VSUkVOVCwgYSwKKyAgICAgICAgICAgIGZpbGVuYW1lLCBu
X2ZpbGVuYW1lLCBkaXJuYW1lLCBuX2Rpcm5hbWUsIGRpcm5hbWVfYXZhaWxhYmxlLCBsaW5lbm8p
OworfQorQm9vbCBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW1fd2l0aF9lY3UpICggVUludCBlY3Us
IEFkZHIgYSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovQ2hhciog
ZmlsZW5hbWUsIEludCBuX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLypPVVQqL0NoYXIqIGRpcm5hbWUsICBJbnQgbl9kaXJuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypPVVQqL0Jvb2wqIGRpcm5hbWVfYXZhaWxhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1VJbnQqIGxpbmVubyApCit7CiAgICBE
ZWJ1Z0luZm8qIHNpOwogICAgV29yZCAgICAgICBsb2NubzsKIApAQCAtMTcyNyw3ICsxODAyLDcg
QEAKICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgICAgKGRpcm5hbWUgIT0gTlVMTCAmJiBk
aXJuYW1lX2F2YWlsYWJsZSAhPSBOVUxMKSApOwogCi0gICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBh
LCAmc2ksICZsb2NubyApOworICAgc2VhcmNoX2FsbF9sb2N0YWJzICggZWN1LCBhLCAmc2ksICZs
b2NubyApOwogICAgaWYgKHNpID09IE5VTEwpIHsKICAgICAgIGlmIChkaXJuYW1lX2F2YWlsYWJs
ZSkgewogICAgICAgICAgKmRpcm5hbWVfYXZhaWxhYmxlID0gRmFsc2U7CkBAIC0xODc0LDYgKzE5
NDksMTAgQEAKIAogSENoYXIqIFZHXyhkZXNjcmliZV9JUCkoQWRkciBlaXAsIEhDaGFyKiBidWYs
IEludCBuX2J1ZikKIHsKKyAgICByZXR1cm4gVkdfKGRlc2NyaWJlX0lQX3dpdGhfZWN1KSAoRUNf
RUNVX0NVUlJFTlQsIGVpcCwgYnVmLCBuX2J1Zik7Cit9CitDaGFyKiBWR18oZGVzY3JpYmVfSVBf
d2l0aF9lY3UpKFVJbnQgZWN1LCBBZGRyIGVpcCwgQ2hhciogYnVmLCBJbnQgbl9idWYpCit7CiAj
ICBkZWZpbmUgQVBQRU5EKF9zdHIpIFwKICAgICAgIG4gPSBwdXRTdHIobiwgbl9idWYsIGJ1Ziwg
X3N0cikKICMgIGRlZmluZSBBUFBFTkRfRVNDKF9jb3VudCxfc3RyKSBcCkBAIC0xODkyLDExICsx
OTcxLDExIEBACiAKICAgIEJvb2wgIGtub3dfZGlyaW5mbyA9IEZhbHNlOwogICAgQm9vbCAga25v
d19mbm5hbWUgID0gVkdfKGNsb19zeW1fb2Zmc2V0cykKLSAgICAgICAgICAgICAgICAgICAgICAg
ID8gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpIChlaXAsIGJ1Zl9mbiwgQlVGX0xFTikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIDogVkdfKGdldF9mbm5hbWUpIChlaXAsIGJ1Zl9mbiwgQlVGX0xF
Tik7Ci0gICBCb29sICBrbm93X29iam5hbWUgPSBWR18oZ2V0X29iam5hbWUpKGVpcCwgYnVmX29i
aiwgQlVGX0xFTik7Ci0gICBCb29sICBrbm93X3NyY2xvYyAgPSBWR18oZ2V0X2ZpbGVuYW1lX2xp
bmVudW0pKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZWlwLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgID8gVkdfKGdldF9mbm5hbWVfd19vZmZzZXRfYW5kX2VjdSkgKGVjdSwgZWlwLCBi
dWZfZm4sIEJVRl9MRU4pCisgICAgICAgICAgICAgICAgICAgICAgICA6IFZHXyhnZXRfZm5uYW1l
X3dpdGhfZWN1KSAoZWN1LCBlaXAsIGJ1Zl9mbiwgQlVGX0xFTik7CisgICBCb29sICBrbm93X29i
am5hbWUgPSBWR18oZ2V0X29iam5hbWVfd2l0aF9lY3UpKGVjdSwgZWlwLCBidWZfb2JqLCBCVUZf
TEVOKTsKKyAgIEJvb2wgIGtub3dfc3JjbG9jICA9IFZHXyhnZXRfZmlsZW5hbWVfbGluZW51bV93
aXRoX2VjdSkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlY3UsIGVpcCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWZfc3JjbG9jLCAgQlVGX0xFTiwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZfZGlybmFtZSwgQlVGX0xFTiwgJmtub3dfZGlyaW5mbywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZsaW5lbm8gCkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1Z2lu
Zm8vcHJpdl9zdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZGVidWdpbmZvL3By
aXZfc3RvcmFnZS5oCShyZXZpc2lvbiAxMzE3NCkKKysrIGNvcmVncmluZC9tX2RlYnVnaW5mby9w
cml2X3N0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDYgKzUwMywxMCBAQAogICAgICAg
c3RydWN0dXJlIGlzIGFsbG9jYXRlZC4gKi8KICAgIFVMb25nIGhhbmRsZTsKIAorICAgLyogVGhl
IGVjX2xhc3RfZWN1IHdoZW4gdGhpcyBpbmZvIHdhcyBjcmVhdGVkIG9yIHJlbW92ZWQgKi8KKyAg
IFVJbnQgZmlyc3RfZWN1OworICAgVUludCBsYXN0X2VjdTsKKwogICAgLyogVXNlZCBmb3IgZGVi
dWdnaW5nIG9ubHkgLSBpbmRpY2F0ZSB3aGF0IHN0dWZmIHRvIGR1bXAgd2hpbHN0CiAgICAgICBy
ZWFkaW5nIHN0dWZmIGludG8gdGhlIHNlZ2luZm8uICBBcmUgY29tcHV0ZWQgYXMgZWFybHkgaW4g
dGhlCiAgICAgICBsaWZldGltZSBvZiB0aGUgRGVidWdJbmZvIGFzIHBvc3NpYmxlIC0tIGF0IHRo
ZSBwb2ludCB3aGVuIGl0IGlzCkluZGV4OiBjb3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY29yZWdyaW5kL21fc3RhY2t0cmFjZS5jCShyZXZpc2lvbiAxMzE3NCkKKysrIGNv
cmVncmluZC9tX3N0YWNrdHJhY2UuYwkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgInB1Yl9jb3JlX3hhcnJheS5oIgogI2luY2x1ZGUgInB1Yl9jb3JlX2NsaWVudHN0
YXRlLmgiICAgLy8gVkdfKGNsaWVudF9fZGxfc3lzaW5mb19pbnQ4MCkKICNpbmNsdWRlICJwdWJf
Y29yZV90cmFtcG9saW5lLmgiCisjaW5jbHVkZSAicHViX2NvcmVfZXhlY29udGV4dC5oIiAgICAv
LyBFQ19FQ1VfQ1VSUkVOVAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEwOTcsOCArMTA5OCw5IEBACiAgICAj
ZGVmaW5lIEJVRl9MRU4gICA0MDk2CiAgICAKICAgIHN0YXRpYyBIQ2hhciBidWZbQlVGX0xFTl07
CisgICBVSW50IGVjdSA9ICooVUludCopdXVfb3BhcXVlOwogCi0gICBWR18oZGVzY3JpYmVfSVAp
KGlwLCBidWYsIEJVRl9MRU4pOworICAgVkdfKGRlc2NyaWJlX0lQX3dpdGhfZWN1KShlY3UsIGlw
LCBidWYsIEJVRl9MRU4pOwogCiAgICBpZiAoVkdfKGNsb194bWwpKSB7CiAgICAgICBWR18ocHJp
bnRmX3htbCkoIiAgICAlc1xuIiwgYnVmKTsKQEAgLTExMTAsMTIgKzExMTIsMTcgQEAKIC8qIFBy
aW50IGEgU3RhY2tUcmFjZS4gKi8KIHZvaWQgVkdfKHBwX1N0YWNrVHJhY2UpICggU3RhY2tUcmFj
ZSBpcHMsIFVJbnQgbl9pcHMgKQogeworICAgIFZHXyhwcF9TdGFja1RyYWNlX3dpdGhfZWN1KSAo
RUNfRUNVX0NVUlJFTlQsIGlwcywgbl9pcHMgKTsKK30KKy8qIFByaW50IGEgU3RhY2tUcmFjZS4g
Ki8KK3ZvaWQgVkdfKHBwX1N0YWNrVHJhY2Vfd2l0aF9lY3UpICggVUludCBlY3UsIFN0YWNrVHJh
Y2UgaXBzLCBVSW50IG5faXBzICkKK3sKICAgIHZnX2Fzc2VydCggbl9pcHMgPiAwICk7CiAKICAg
IGlmIChWR18oY2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgPHN0YWNrPlxuIik7
CiAKLSAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJpbnRJcERlc2MsIE5VTEwsIGlwcywgbl9p
cHMgKTsKKyAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJpbnRJcERlc2MsICZlY3UsIGlwcywg
bl9pcHMgKTsKIAogICAgaWYgKFZHXyhjbG9feG1sKSkKICAgICAgIFZHXyhwcmludGZfeG1sKSgi
ICA8L3N0YWNrPlxuIik7CkluZGV4OiBjb3JlZ3JpbmQvbV9tYWluLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y29yZWdyaW5kL21fbWFpbi5jCShyZXZpc2lvbiAxMzE3NCkKKysrIGNvcmVncmluZC9tX21haW4u
Ywkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxMCBAQAogIiAgICAtLWxvZy1mZD08bnVt
YmVyPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2NyaXB0b3IgWzI9c3RkZXJyXVxu
IgogIiAgICAtLWxvZy1maWxlPTxmaWxlPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byA8ZmlsZT5c
biIKICIgICAgLS1sb2ctc29ja2V0PWlwYWRkcjpwb3J0ICBsb2cgbWVzc2FnZXMgdG8gc29ja2V0
IGlwYWRkcjpwb3J0XG4iCisiICAgIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBLZWVwIHN5
bWJvbHMgZm9yIHVubG9hZGVkIGNvZGUgW3llc11cbiIKKyIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUaGlzIGFsbG93cyBzdGFjayB0cmFjZXMgZm9yIG1lbW9yeSBsZWFrcyB0b1xuIgor
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGluZm8gZm9y
IGNvZGUgdGhhdCBoYXMgYmVlblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRs
Y2xvc2UnZCAob3Igc2ltaWxhcilcbiIKICJcbiIKICIgIHVzZXIgb3B0aW9ucyBmb3IgVmFsZ3Jp
bmQgdG9vbHMgdGhhdCByZXBvcnQgZXJyb3JzOlxuIgogIiAgICAtLXhtbD15ZXMgICAgICAgICAg
ICAgICAgIGVtaXQgZXJyb3Igb3V0cHV0IGluIFhNTCAoc29tZSB0b29scyBvbmx5KVxuIgpAQCAt
NjQyLDYgKzY0Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhjbG9fdmV4X2NvbnRy
b2wpLmd1ZXN0X2NoYXNlX3RocmVzaCwgMCwgOTkpIHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xf
Q0xPKGFyZywgIi0tdmV4LWd1ZXN0LWNoYXNlLWNvbmQiLAogICAgICAgICAgICAgICAgICAgICAg
ICBWR18oY2xvX3ZleF9jb250cm9sKS5ndWVzdF9jaGFzZV9jb25kKSB7fQorICAgICAgZWxzZSBp
ZiBWR19CT09MX0NMTyhhcmcsICItLWtlZXAtdW5sb2FkZWQtc3ltcyIsCisJICAgICAgICAgICAg
ICAgVkdfKGNsb19rZWVwX3VubG9hZGVkX3N5bXMpKSB7fQogCiAgICAgICBlbHNlIGlmIFZHX0lO
VF9DTE8oYXJnLCAiLS1sb2ctZmQiLCB0bXBfbG9nX2ZkKSB7CiAgICAgICAgICBsb2dfdG8gPSBW
Z0xvZ1RvX0ZkOwpJbmRleDogY29yZWdyaW5kL21fb3B0aW9ucy5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNv
cmVncmluZC9tX29wdGlvbnMuYwkocmV2aXNpb24gMTMxNzQpCisrKyBjb3JlZ3JpbmQvbV9vcHRp
b25zLmMJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsNyBAQAogY29uc3QgSENoYXIqIFZH
XyhjbG9fa2VybmVsX3ZhcmlhbnQpID0gTlVMTDsKIEJvb2wgICBWR18oY2xvX2RzeW11dGlsKSAg
ICAgICA9IEZhbHNlOwogQm9vbCAgIFZHXyhjbG9fc2lnaWxsX2RpYWcpICAgID0gVHJ1ZTsKK0Jv
b2wgICBWR18oY2xvX2tlZXBfdW5sb2FkZWRfc3ltcyk9IFRydWU7CiAKIC8qPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0q
LwogLyo9PT0gRmlsZSBleHBhbnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID09PSovCkluZGV4OiBjb3JlZ3JpbmQvcHViX2NvcmVfZXhlY29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9wdWJfY29yZV9leGVjb250ZXh0LmgJKHJldmlzaW9u
IDEzMTc0KQorKysgY29yZWdyaW5kL3B1Yl9jb3JlX2V4ZWNvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsMTUgQEAKIGV4dGVybgogLypTdGFja1RyYWNlKi9BZGRyKiBWR18oZ2V0
X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkgKCBFeGVDb250ZXh0KiBlICk7CiAKKy8vIEtlZXAgdHJh
Y2sgb2YgdGhlIG1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGVjdSwgc28gdGhhdCBkZWJ1Z2luZm8g
Y2FuCisvLyBrbm93IGhvdyB0byB0cmFuc2xhdGUgYWRkcmVzc2VzIHRoYXQgcmVmZXJlbmNlIGNv
ZGUgdGhhdCBoYXMgYmVlbiB1bmxvYWRlZAorZXh0ZXJuIFVJbnQgVkdfKGVjX2xhc3RfZWN1KTsK
KyAKKy8vIFNwZWNpYWwgY29uc3RhbnQgdG8gdXNlIGZvciB0aGUgJ2VjdScgcGFyYW1ldGVyIHdo
ZW4gZGVjb2RpbmcgYSAnY3VycmVudCcKKy8vIHN0YWNrIHRyYWNlLCB0aGlzIHdpbGwgY2F1c2Ug
aXQgdG8gc2tpcCBsb29raW5nIGF0IGFueSB1bmxvYWRlZCBzeW1ib2xzLgorI2RlZmluZSBFQ19F
Q1VfQ1VSUkVOVCAweEZGRkZGRkZGCiAKKwogI2VuZGlmICAgLy8gX19QVUJfQ09SRV9FWEVDT05U
RVhUX0gKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkluZGV4OiBkb2NzL3htbC9tYW51YWwtY29yZS54bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZG9jcy94bWwvbWFudWFsLWNvcmUueG1sCShyZXZpc2lvbiAxMzE3NCkK
KysrIGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAkod29ya2luZyBjb3B5KQpAQCAtODYxLDYgKzg2
MSwxNyBAQAogICAgICAgaW4gdGhlIG1hbnVhbC48L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAg
PC92YXJsaXN0ZW50cnk+CisgIAorICA8dmFybGlzdGVudHJ5IGlkPSJvcHQua2VlcC11bmxvYWRl
ZC1zeW1zIiB4cmVmbGFiZWw9Ii0ta2VlcC11bmxvYWRlZC1zeW1zIj4KKyAgICA8dGVybT4KKyAg
ICAgIDxvcHRpb24+PCFbQ0RBVEFbLS1rZWVwLXVubG9hZGVkLXN5bXM9PHllc3xubz4gW2RlZmF1
bHQ6IHllc10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg
IDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBjb2RlLiBUaGlz
IGFsbG93cyBzdGFjaworICAgICAgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBm
aWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICBkbGNsb3NlJ2QgKG9y
IHNpbWlsYXIpPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgogCiA8
L3ZhcmlhYmxlbGlzdD4KIDwhLS0gZW5kIG9mIHhpOmluY2x1ZGUgaW4gdGhlIG1hbnBhZ2UgLS0+
CkluZGV4OiBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9u
ZS90ZXN0cy9jbWRsaW5lMi5zdGRvdXQuZXhwCShyZXZpc2lvbiAxMzE3NCkKKysrIG5vbmUvdGVz
dHMvY21kbGluZTIuc3Rkb3V0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAK
ICAgICAtLWxvZy1mZD08bnVtYmVyPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byBmaWxlIGRlc2Ny
aXB0b3IgWzI9c3RkZXJyXQogICAgIC0tbG9nLWZpbGU9PGZpbGU+ICAgICAgICAgbG9nIG1lc3Nh
Z2VzIHRvIDxmaWxlPgogICAgIC0tbG9nLXNvY2tldD1pcGFkZHI6cG9ydCAgbG9nIG1lc3NhZ2Vz
IHRvIHNvY2tldCBpcGFkZHI6cG9ydAorICAgIC0ta2VlcC11bmxvYWRlZC1zeW1zPW5vfHllcyBL
ZWVwIHN5bWJvbHMgZm9yIHVubG9hZGVkIGNvZGUgW3llc10KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRoaXMgYWxsb3dzIHN0YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGZpbGUvbGluZSBpbmZvIGZvciBj
b2RlIHRoYXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsY2xvc2Un
ZCAob3Igc2ltaWxhcikKIAogICB1c2VyIG9wdGlvbnMgZm9yIFZhbGdyaW5kIHRvb2xzIHRoYXQg
cmVwb3J0IGVycm9yczoKICAgICAtLXhtbD15ZXMgICAgICAgICAgICAgICAgIGVtaXQgZXJyb3Ig
b3V0cHV0IGluIFhNTCAoc29tZSB0b29scyBvbmx5KQpJbmRleDogbm9uZS90ZXN0cy9jbWRsaW5l
MS5zdGRvdXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5vbmUvdGVzdHMvY21kbGluZTEuc3Rkb3V0LmV4
cAkocmV2aXNpb24gMTMxNzQpCisrKyBub25lL3Rlc3RzL2NtZGxpbmUxLnN0ZG91dC5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEwIEBACiAgICAgLS1sb2ctZmQ9PG51bWJlcj4gICAg
ICAgICBsb2cgbWVzc2FnZXMgdG8gZmlsZSBkZXNjcmlwdG9yIFsyPXN0ZGVycl0KICAgICAtLWxv
Zy1maWxlPTxmaWxlPiAgICAgICAgIGxvZyBtZXNzYWdlcyB0byA8ZmlsZT4KICAgICAtLWxvZy1z
b2NrZXQ9aXBhZGRyOnBvcnQgIGxvZyBtZXNzYWdlcyB0byBzb2NrZXQgaXBhZGRyOnBvcnQKKyAg
ICAtLWtlZXAtdW5sb2FkZWQtc3ltcz1ub3x5ZXMgS2VlcCBzeW1ib2xzIGZvciB1bmxvYWRlZCBj
b2RlIFt5ZXNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBzdGFj
ayB0cmFjZXMgZm9yIG1lbW9yeSBsZWFrcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5jbHVkZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkbGNsb3NlJ2QgKG9yIHNpbWlsYXIpCiAKICAgdXNlciBv
cHRpb25zIGZvciBWYWxncmluZCB0b29scyB0aGF0IHJlcG9ydCBlcnJvcnM6CiAgICAgLS14bWw9
eWVzICAgICAgICAgICAgICAgICBlbWl0IGVycm9yIG91dHB1dCBpbiBYTUwgKHNvbWUgdG9vbHMg
b25seSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106984</attachid>
            <date>2017-07-31 14:09:41 +0000</date>
            <delta_ts>2017-08-01 06:41:44 +0000</delta_ts>
            <desc>epochs-3.diff</desc>
            <filename>epochs-3.diff</filename>
            <type>text/plain</type>
            <size>143974</size>
            <attacher name="Julian Seward">jseward</attacher>
            
              <data encoding="base64">SW5kZXg6IE1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlLmFtCShyZXZpc2lvbiAx
NjQ2MSkKKysrIE1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDE5ICszLDIzIEBACiAK
IGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9NYWtlZmlsZS5hbGwuYW0gCiAKLVRPT0xTID0JCW1lbWNo
ZWNrIFwKLQkJY2FjaGVncmluZCBcCi0JCWNhbGxncmluZCBcCi0JCW1hc3NpZiBcCi0JCWxhY2tl
eSBcCi0JCW5vbmUgXAotCQloZWxncmluZCBcCi0JCWRyZAorI1RPT0xTID0JCW1lbWNoZWNrIFwK
KyMJCWNhY2hlZ3JpbmQgXAorIwkJY2FsbGdyaW5kIFwKKyMJCW1hc3NpZiBcCisjCQlsYWNrZXkg
XAorIwkJbm9uZSBcCisjCQloZWxncmluZCBcCisjCQlkcmQKKyMKKyNFWFBfVE9PTFMgPSAJZXhw
LXNnY2hlY2sgXAorIwkJZXhwLWJidiBcCisjCQlleHAtZGhhdAogCi1FWFBfVE9PTFMgPSAJZXhw
LXNnY2hlY2sgXAotCQlleHAtYmJ2IFwKLQkJZXhwLWRoYXQKK1RPT0xTID0gbm9uZSBtZW1jaGVj
aworRVhQX1RPT0xTID0KIAorCiAjIFB1dCBkb2NzIGxhc3QgYmVjYXVzZSBidWlsZGluZyB0aGUg
SFRNTCBpcyBzbG93IGFuZCB3ZSB3YW50IHRvIGdldAogIyBldmVyeXRoaW5nIGVsc2Ugd29ya2lu
ZyBiZWZvcmUgd2UgdHJ5IGl0LgogU1VCRElSUyA9IFwKSW5kZXg6IGNvcmVncmluZC9tX2FkZHJp
bmZvLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fYWRkcmluZm8uYwkocmV2aXNpb24gMTY0
NjEpCisrKyBjb3JlZ3JpbmQvbV9hZGRyaW5mby5jCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4
Niw3IEBACiAgICByZXR1cm4gVkdfSU5WQUxJRF9USFJFQURJRDsKIH0KIAotdm9pZCBWR18oZGVz
Y3JpYmVfYWRkcikgKCBBZGRyIGEsIC8qT1VUKi9BZGRySW5mbyogYWkgKQordm9pZCBWR18oZGVz
Y3JpYmVfYWRkcikgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIC8qT1VUKi9BZGRySW5mbyogYWkgKQog
ewogICAgVmdTZWN0S2luZCBzZWN0OwogCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgICAg
ICAgICAgIFZHXyhmcmVlKSwgc2l6ZW9mKEhDaGFyKSApOwogCiAgICAodm9pZCkgVkdfKGdldF9k
YXRhX2Rlc2NyaXB0aW9uKSggYWktPkFkZHIuVmFyaWFibGUuZGVzY3IxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5BZGRyLlZhcmlhYmxlLmRlc2NyMiwgYSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5BZGRyLlZhcmlhYmxlLmRl
c2NyMiwgZXAsIGEgKTsKICAgIC8qIElmIHRoZXJlJ3Mgbm90aGluZyBpbiBkZXNjcjEvMiwgZnJl
ZSB0aGVtLiAgV2h5IGlzIGl0IHNhZmUgdG8KICAgICAgIFZHXyhpbmRleFhBKSBhdCB6ZXJvIGhl
cmU/ICBCZWNhdXNlIFZHXyhnZXRfZGF0YV9kZXNjcmlwdGlvbikKICAgICAgIGd1YXJhbnRlZXMg
dG8gemVybyB0ZXJtaW5hdGUgZGVzY3IxLzIgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZQpAQCAt
MTI3LDcgKzEyNyw3IEBACiAgICAgICB0aGVyZS4gLS0gKi8KICAgIGNvbnN0IEhDaGFyICpuYW1l
OwogICAgaWYgKFZHXyhnZXRfZGF0YXN5bV9hbmRfb2Zmc2V0KSgKLSAgICAgICAgICAgICBhLCAm
bmFtZSwKKyAgICAgICAgICAgICBlcCwgYSwgJm5hbWUsCiAgICAgICAgICAgICAgJmFpLT5BZGRy
LkRhdGFTeW0ub2Zmc2V0ICkpIHsKICAgICAgIGFpLT5BZGRyLkRhdGFTeW0ubmFtZSA9IFZHXyhz
dHJkdXApKCJtYy5kYS5kc25hbWUiLCBuYW1lKTsKICAgICAgIGFpLT50YWcgPSBBZGRyX0RhdGFT
eW07CkBAIC0xNDgsNiArMTQ4LDcgQEAKICAgICAgICAgICAgIGFpLT50YWcgICAgICAgICAgICA9
IEFkZHJfU3RhY2s7CiAgICAgICAgICAgICBWR18oaW5pdFRocmVhZEluZm8pKCZhaS0+QWRkci5T
dGFjay50aW5mbyk7CiAgICAgICAgICAgICBhaS0+QWRkci5TdGFjay50aW5mby50aWQgPSB0aWQ7
CisgICAgICAgICAgICBhaS0+QWRkci5TdGFjay5lcG9jaCA9IGVwOwogICAgICAgICAgICAgYWkt
PkFkZHIuU3RhY2suSVAgPSAwOwogICAgICAgICAgICAgYWktPkFkZHIuU3RhY2suZnJhbWVObyA9
IC0xOwogICAgICAgICAgICAgYWktPkFkZHIuU3RhY2suc3RhY2tQb3MgPSBTdGFja1Bvc19zdGFj
a2VkOwpAQCAtMTk2LDkgKzE5Nyw5IEBACiAgICAgICAgICBhaS0+QWRkci5CbG9jay5ibG9ja19k
ZXNjID0gYWFpLm5hbWU7CiAgICAgICAgICBhaS0+QWRkci5CbG9jay5ibG9ja19zekIgPSBhYWku
YmxvY2tfc3pCOwogICAgICAgICAgYWktPkFkZHIuQmxvY2sucndvZmZzZXQgPSBhYWkucndvZmZz
ZXQ7Ci0gICAgICAgICBhaS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQgPSBWR18obnVsbF9FeGVD
b250ZXh0KSgpOworICAgICAgICAgYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0ID0gVkdfKG51
bGxfRXhlQ29udGV4dEFuZEVwb2NoKSgpOwogICAgICAgICAgVkdfKGluaXRUaHJlYWRJbmZvKSAo
JmFpLT5BZGRyLkJsb2NrLmFsbG9jX3RpbmZvKTsKLSAgICAgICAgIGFpLT5BZGRyLkJsb2NrLmZy
ZWVkX2F0ID0gVkdfKG51bGxfRXhlQ29udGV4dCkoKTsKKyAgICAgICAgIGFpLT5BZGRyLkJsb2Nr
LmZyZWVkX2F0ID0gVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSgpOwogICAgICAgICAgcmV0
dXJuOwogICAgICAgfQogICAgfQpAQCAtMjQ4LDYgKzI0OSw3IEBACiAgICAgICAgICBhaS0+dGFn
ICA9IEFkZHJfU3RhY2s7CiAgICAgICAgICBWR18oaW5pdFRocmVhZEluZm8pKCZhaS0+QWRkci5T
dGFjay50aW5mbyk7CiAgICAgICAgICBhaS0+QWRkci5TdGFjay50aW5mby50aWQgPSB0aWQ7Cisg
ICAgICAgICBhaS0+QWRkci5TdGFjay5lcG9jaCA9IGVwOwogICAgICAgICAgYWktPkFkZHIuU3Rh
Y2suSVAgPSAwOwogICAgICAgICAgYWktPkFkZHIuU3RhY2suZnJhbWVObyA9IC0xOwogICAgICAg
ICAgdmdfYXNzZXJ0IChzdGFja1BvcyAhPSBTdGFja1Bvc19zdGFja2VkKTsKQEAgLTQ0NywyMCAr
NDQ5LDI0IEBACiAgICAgICAgICAgICBCb29sIGhhc2xpbmVudW07CiAgICAgICAgICAgICBQdHJk
aWZmVCBvZmZzZXQ7CiAKLSAgICAgICAgICAgIGlmIChWR18oZ2V0X2luc3Rfb2Zmc2V0X2luX2Z1
bmN0aW9uKSggYWktPkFkZHIuU3RhY2suSVAsCisgICAgICAgICAgICBpZiAoVkdfKGdldF9pbnN0
X29mZnNldF9pbl9mdW5jdGlvbikoIGFpLT5BZGRyLlN0YWNrLmVwb2NoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+QWRkci5TdGFjay5JUCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNl
dCkpCi0gICAgICAgICAgICAgICBoYXNsaW5lbnVtID0gVkdfKGdldF9saW5lbnVtKSAoYWktPkFk
ZHIuU3RhY2suSVAgLSBvZmZzZXQsCisgICAgICAgICAgICAgICBoYXNsaW5lbnVtID0gVkdfKGdl
dF9saW5lbnVtKSAoYWktPkFkZHIuU3RhY2suZXBvY2gsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWktPkFkZHIuU3RhY2suSVAgLSBvZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVudW0pOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgaGFzbGluZW51bSA9IEZhbHNlOwogCi0gICAg
ICAgICAgICBoYXNmaWxlID0gVkdfKGdldF9maWxlbmFtZSkoYWktPkFkZHIuU3RhY2suSVAsICZm
aWxlKTsKKyAgICAgICAgICAgIGhhc2ZpbGUgPSBWR18oZ2V0X2ZpbGVuYW1lKShhaS0+QWRkci5T
dGFjay5lcG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+
QWRkci5TdGFjay5JUCwgJmZpbGUpOwogCiAgICAgICAgICAgICBIQ2hhciBzdHJsaW5lbnVtWzE2
XSA9ICIiOyAgIC8vIGxhcmdlIGVub3VnaAogICAgICAgICAgICAgaWYgKGhhc2ZpbGUgJiYgaGFz
bGluZW51bSkKICAgICAgICAgICAgICAgIFZHXyhzcHJpbnRmKShzdHJsaW5lbnVtLCAiJXUiLCBs
aW5lbnVtKTsKIAotICAgICAgICAgICAgaGFzZm4gPSBWR18oZ2V0X2ZubmFtZSkoYWktPkFkZHIu
U3RhY2suSVAsICZmbik7CisgICAgICAgICAgICBoYXNmbiA9IFZHXyhnZXRfZm5uYW1lKShhaS0+
QWRkci5TdGFjay5lcG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFp
LT5BZGRyLlN0YWNrLklQLCAmZm4pOwogCiAgICAgICAgICAgICBpZiAoaGFzZm4gfHwgaGFzZmls
ZSkKICAgICAgICAgICAgICAgIFZHXyhlbWl0KSggIiVzaW4gZnJhbWUgIyVkLCBjcmVhdGVkIGJ5
ICVwcyAoJXBzOiVzKSVzXG4iLApAQCAtNTMzLDMyICs1MzksMzUgQEAKICAgICAgICAgICAgICAg
IHhwb3N0CiAgICAgICAgICAgICApOwogICAgICAgICAgaWYgKGFpLT5BZGRyLkJsb2NrLmJsb2Nr
X2tpbmQ9PUJsb2NrX01hbGxvY2QpIHsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShh
aS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQpOwotICAgICAgICAgICAgdmdfYXNzZXJ0IChhaS0+
QWRkci5CbG9jay5mcmVlZF9hdCA9PSBWR18obnVsbF9FeGVDb250ZXh0KSgpKTsKKyAgICAgICAg
ICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9h
dCk7CisgICAgICAgICAgICB2Z19hc3NlcnQoCisgICAgICAgICAgICAgICBWR18oaXNfbnVsbF9F
eGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmZyZWVkX2F0KSk7CiAgICAgICAgICB9
CiAgICAgICAgICBlbHNlIGlmIChhaS0+QWRkci5CbG9jay5ibG9ja19raW5kPT1CbG9ja19GcmVl
ZCkgewotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKGFpLT5BZGRyLkJsb2NrLmZyZWVk
X2F0KTsKLSAgICAgICAgICAgIGlmIChhaS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQgIT0gVkdf
KG51bGxfRXhlQ29udGV4dCkoKSkgeworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoYWktPkFkZHIuQmxvY2suZnJlZWRfYXQpOworICAgICAgICAgICAgaWYgKCFWR18oaXNf
bnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCkpIHsK
ICAgICAgICAgICAgICAgIFZHXyhlbWl0KSgKICAgICAgICAgICAgICAgICAgICIlc0Jsb2NrIHdh
cyBhbGxvYydkIGF0JXNcbiIsCiAgICAgICAgICAgICAgICAgICB4cHJlLAogICAgICAgICAgICAg
ICAgICAgeHBvc3QKICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0KTsKKyAgICAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChhaS0+QWRkci5CbG9j
ay5ibG9ja19raW5kPT1CbG9ja19NZW1wb29sQ2h1bmsKICAgICAgICAgICAgICAgICAgIHx8IGFp
LT5BZGRyLkJsb2NrLmJsb2NrX2tpbmQ9PUJsb2NrX1VzZXJHKSB7CiAgICAgICAgICAgICAvLyBj
bGllbnQtZGVmaW5lZAotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKGFpLT5BZGRyLkJs
b2NrLmFsbG9jYXRlZF9hdCk7Ci0gICAgICAgICAgICB2Z19hc3NlcnQgKGFpLT5BZGRyLkJsb2Nr
LmZyZWVkX2F0ID09IFZHXyhudWxsX0V4ZUNvbnRleHQpKCkpOworICAgICAgICAgICAgVkdfKHBw
X0V4ZUNvbnRleHRBbmRFcG9jaCkoYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0KTsKKyAgICAg
ICAgICAgIHZnX2Fzc2VydChWR18oaXNfbnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRy
LkJsb2NrLmZyZWVkX2F0KSk7CiAgICAgICAgICAgICAvKiBOYjogY2Fubm90IGhhdmUgYSBmcmVl
ZF9hdCwgYXMgYSBmcmVlZCBjbGllbnQtZGVmaW5lZCBibG9jawogICAgICAgICAgICAgICAgaGFz
IGEgQmxvY2tfRnJlZWQgYmxvY2tfa2luZC4gKi8KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBDbGllbnQgb3IgVmFsZ3JpbmQgYXJlbmEuIEF0IGxlYXN0IGN1cnJlbnRseSwgd2Ug
bmV2ZXIKICAgICAgICAgICAgIC8vIGhhdmUgc3RhY2t0cmFjZXMgZm9yIHRoZXNlLgotICAgICAg
ICAgICAgdmdfYXNzZXJ0IChhaS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQgPT0gVkdfKG51bGxf
RXhlQ29udGV4dCkoKSk7Ci0gICAgICAgICAgICB2Z19hc3NlcnQgKGFpLT5BZGRyLkJsb2NrLmZy
ZWVkX2F0ID09IFZHXyhudWxsX0V4ZUNvbnRleHQpKCkpOworICAgICAgICAgICAgdmdfYXNzZXJ0
KFZHXyhpc19udWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAoYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0KSk7CisgICAgICAgICAgICB2Z19hc3NlcnQo
VkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2NoKQorICAgICAgICAgICAgICAgICAgICAgICAg
IChhaS0+QWRkci5CbG9jay5mcmVlZF9hdCkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGFp
LT5BZGRyLkJsb2NrLmFsbG9jX3RpbmZvLnRuciB8fCBhaS0+QWRkci5CbG9jay5hbGxvY190aW5m
by50aWQpCiAgICAgICAgICAgICBWR18oZW1pdCkoCkBAIC02MDMsNyArNjEyLDcgQEAKICAgICAg
ICAgIGlmIChhaS0+QWRkci5TZWN0S2luZC5raW5kID09IFZnX1NlY3RUZXh0KSB7CiAgICAgICAg
ICAgICAvKiBUbyBiZXR0ZXIgZGVzY3JpYmUgdGhlIGFkZHJlc3MgaW4gYSB0ZXh0IHNlZ21lbnQs
CiAgICAgICAgICAgICAgICBwcCBhIGR1bW15IHN0YWNrdHJhY2UgbWFkZSBvZiB0aGlzIHNpbmds
ZSBhZGRyZXNzLiAqLwotICAgICAgICAgICAgVkdfKHBwX1N0YWNrVHJhY2UpKCAmYSwgMSApOwor
ICAgICAgICAgICAgVkdfKHBwX1N0YWNrVHJhY2UpKCAmYSwgMSwgVkdfKGN1cnJlbnRfRGlFcG9j
aCgpKSApOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IGNvcmVncmluZC9t
X2RlYnVnaW5mby9kZWJ1Z2luZm8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2lu
Zm8vZGVidWdpbmZvLmMJKHJldmlzaW9uIDE2NDYxKQorKysgY29yZWdyaW5kL21fZGVidWdpbmZv
L2RlYnVnaW5mby5jCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCwxMSBAQAogICAgc2hvdWxk
LXdlLWxvYWQtZGVidWdpbmZvLW5vdz8gZmluaXRlIHN0YXRlIG1hY2hpbmUuICovCiAjZGVmaW5l
IERFQlVHX0ZTTSAwCiAKKy8qIFNldCB0aGlzIHRvIDEgdG8gZW5hYmxlIHNvbWV3aGF0IG1pbmlt
YWwgZGVidWcgcHJpbnRpbmcgZm9yIHRoZQorICAgZGVidWdpbmZvLWVwb2NoIG1hY2hpbmVyeS4g
Ki8KKyNkZWZpbmUgREVCVUdfRVBPQ0hTIDAKIAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLSBUaGUgX3N2bWEg
LyBfYXZtYSAvIF9pbWFnZSAvIF9iaWFzIG5hbWluZyBzY2hlbWUgICAgIC0tLSovCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CkBAIC0xMDksNiArMTEzLDEyNCBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIEVwb2NocyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LyogVGhlIERlYnVnSW5mbyBlcG9jaCBpcyBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIHdlIGVpdGhl
ciBsb2FkIGRlYnVnaW5mbyBpbgorICAgcmVzcG9uc2UgdG8gYW4gb2JqZWN0IG1hcHBpbmcsIG9y
IGFuIGV4aXN0aW5nIERlYnVnSW5mbyBiZWNvbWVzCisgICBub24tY3VycmVudCAob3Igd2lsbCBi
ZSBkaXNjYXJkZWQpIGR1ZSB0byBhbiBvYmplY3QgdW5tYXAuICBCeSBzdG9yaW5nLAorICAgaW4g
ZWFjaCBEZWJ1Z0luZm8sIHRoZSBmaXJzdCBhbmQgbGFzdCBlcG9jaCBmb3Igd2hpY2ggaXQgaXMg
dmFsaWQsIHdlIGNhbgorICAgdW5hbWJpZ3VvdXNseSBpZGVudGlmeSB0aGUgc2V0IG9mIERlYnVn
SW5mb3Mgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8KKyAgIHByb3ZpZGUgbWV0YWRhdGEgZm9yIGEg
Y29kZSBvciBkYXRhIGFkZHJlc3MsIHByb3ZpZGVkIHdlIGtub3cgdGhlIGVwb2NoCisgICB0byB3
aGljaCB0aGF0IGFkZHJlc3MgcGVydGFpbnMuCisKKyAgIE5vdGUsIHRoaXMgaXNuJ3QgdGhlIHNh
bWUgYXMgdGhlICJoYW5kbGVfY291bnRlciIgYmVsb3cuICBUaGF0IG9ubHkKKyAgIGFkdmFuY2Vz
IHdoZW4gbmV3IERlYnVnSW5mb3MgYXJlIGNyZWF0ZWQuICAiY3VycmVudF9lcG9jaCIgYWR2YW5j
ZXMgYm90aAorICAgYXQgRGVidWdJbmZvIGNyZWF0ZWQgYW5kIGRlc3RydWN0aW9uLW9yLW1ha2lu
Zy1ub24tY3VycmVudC4KKyovCisKKy8vIFRoZSB2YWx1ZSB6ZXJvIGlzIHJlc2VydmVkIGZvciBp
bmRpY2F0aW5nIGFuIGludmFsaWQgZXBvY2ggbnVtYmVyLgorc3RhdGljIFVJbnQgY3VycmVudF9l
cG9jaCA9IDE7CisKK2lubGluZSBEaUVwb2NoIFZHXyhjdXJyZW50X0RpRXBvY2gpICggdm9pZCAp
IHsKKyAgIERpRXBvY2ggZGVwOyBkZXAubiA9IGN1cnJlbnRfZXBvY2g7IHJldHVybiBkZXA7Cit9
CisKK3N0YXRpYyB2b2lkIGFkdmFuY2VfY3VycmVudF9EaUVwb2NoICggY29uc3QgSENoYXIqIG1z
ZyApIHsKKyAgIGN1cnJlbnRfZXBvY2grKzsKKyAgIGlmIChERUJVR19FUE9DSFMpCisgICAgICBW
R18ocHJpbnRmKSgiQWR2YW5jaW5nIGN1cnJlbnQgZXBvY2ggdG8gJXUgZHVlIHRvICVzXG4iLAor
ICAgICAgICAgICAgICAgICAgY3VycmVudF9lcG9jaCwgbXNnKTsKK30KKworc3RhdGljIGlubGlu
ZSBEaUVwb2NoIERpRXBvY2hfSU5WQUxJRCAoIHZvaWQgKSB7CisgICBEaUVwb2NoIGRlcDsgZGVw
Lm4gPSAwOyByZXR1cm4gZGVwOworfQorCitzdGF0aWMgaW5saW5lIEJvb2wgaXNfRGlFcG9jaF9J
TlZBTElEICggRGlFcG9jaCBkZXAgKSB7CisgICByZXR1cm4gZGVwLm4gPT0gMDsKK30KKworc3Rh
dGljIGlubGluZSBCb29sIGVxX0RpRXBvY2ggKCBEaUVwb2NoIGRlcDEsIERpRXBvY2ggZGVwMiAp
IHsKKyAgIHJldHVybiBkZXAxLm4gPT0gZGVwMi5uICYmIC8qbmVpdGhlciBpcyBpbnZhbGlkKi9k
ZXAxLm4gIT0gMDsKK30KKworLy8gSXMgdGhpcyBEZWJ1Z0luZm8gY3VycmVudGx5ICJhbGxvY2F0
ZWQiIChwcmUtdXNlIHN0YXRlLCBvbmx5IEZTTSBhY3RpdmUpID8KK3N0YXRpYyBpbmxpbmUgQm9v
bCBpc19EZWJ1Z0luZm9fYWxsb2NhdGVkICggY29uc3QgRGVidWdJbmZvKiBkaSApCit7CisgICBp
ZiAoaXNfRGlFcG9jaF9JTlZBTElEKGRpLT5maXJzdF9lcG9jaCkKKyAgICAgICAmJiBpc19EaUVw
b2NoX0lOVkFMSUQoZGktPmxhc3RfZXBvY2gpKSB7CisgICAgICByZXR1cm4gVHJ1ZTsKKyAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gRmFsc2U7CisgICB9Cit9CisKKy8vIElzIHRoaXMgRGVidWdJ
bmZvIGN1cnJlbnRseSAiYWN0aXZlIiAodmFsaWQgZm9yIHRoZSBjdXJyZW50IGVwb2NoKSA/Citz
dGF0aWMgaW5saW5lIEJvb2wgaXNfRGVidWdJbmZvX2FjdGl2ZSAoIGNvbnN0IERlYnVnSW5mbyog
ZGkgKQoreworICAgaWYgKCFpc19EaUVwb2NoX0lOVkFMSUQoZGktPmZpcnN0X2Vwb2NoKQorICAg
ICAgICYmIGlzX0RpRXBvY2hfSU5WQUxJRChkaS0+bGFzdF9lcG9jaCkpIHsKKyAgICAgIC8vIFll
cyBpdCBpcyBhY3RpdmUuICBTYW5pdHkgY2hlY2sgLi4KKyAgICAgIHRsX2Fzc2VydChkaS0+Zmly
c3RfZXBvY2gubiA8PSBjdXJyZW50X2Vwb2NoKTsKKyAgICAgIHJldHVybiBUcnVlOworICAgfSBl
bHNlIHsKKyAgICAgIHJldHVybiBGYWxzZTsKKyAgIH0KK30KKworLy8gSXMgdGhpcyBEZWJ1Z0lu
Zm8gY3VycmVudGx5ICJhcmNoaXZlZCIgPworc3RhdGljIGlubGluZSBCb29sIGlzX0RlYnVnSW5m
b19hcmNoaXZlZCAoIGNvbnN0IERlYnVnSW5mbyogZGkgKQoreworICAgaWYgKCFpc19EaUVwb2No
X0lOVkFMSUQoZGktPmZpcnN0X2Vwb2NoKQorICAgICAgICYmICFpc19EaUVwb2NoX0lOVkFMSUQo
ZGktPmxhc3RfZXBvY2gpKSB7CisgICAgICAvLyBZZXMgaXQgaXMgYXJjaGl2ZWQuICBTYW5pdHkg
Y2hlY2tzIC4uCisgICAgICB0bF9hc3NlcnQoZGktPmZpcnN0X2Vwb2NoLm4gPD0gZGktPmxhc3Rf
ZXBvY2gubik7CisgICAgICB0bF9hc3NlcnQoZGktPmxhc3RfZXBvY2gubiA8PSBjdXJyZW50X2Vw
b2NoKTsKKyAgICAgIHJldHVybiBUcnVlOworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBGYWxz
ZTsKKyAgIH0KK30KKworLy8gSXMgdGhpcyBEZWJ1Z0luZm8gdmFsaWQgZm9yIHRoZSBzcGVjaWZp
ZWQgZXBvY2g/CitzdGF0aWMgaW5saW5lIEJvb2wgaXNfRElfdmFsaWRfZm9yX2Vwb2NoICggY29u
c3QgRGVidWdJbmZvKiBkaSwgRGlFcG9jaCBlcCApCit7CisgICAvLyBTdGF5IHNhbmUKKyAgIHZn
X2Fzc2VydChlcC5uID4gMCAmJiBlcC5uIDw9IGN1cnJlbnRfZXBvY2gpOworCisgICBCb29sIGZp
cnN0X3ZhbGlkID0gIWlzX0RpRXBvY2hfSU5WQUxJRChkaS0+Zmlyc3RfZXBvY2gpOworICAgQm9v
bCBsYXN0X3ZhbGlkICA9ICFpc19EaUVwb2NoX0lOVkFMSUQoZGktPmxhc3RfZXBvY2gpOworCisg
ICBpZiAoZmlyc3RfdmFsaWQpIHsKKyAgICAgIGlmIChsYXN0X3ZhbGlkKSB7CisgICAgICAgICAv
LyBCb3RoIHZhbGlkLiAgZGkgaXMgaW4gQXJjaGl2ZWQgc3RhdGUuCisgICAgICAgICByZXR1cm4g
ZGktPmZpcnN0X2Vwb2NoLm4gPD0gZXAubiAmJiBlcC5uIDw9IGRpLT5sYXN0X2Vwb2NoLm47Cisg
ICAgICB9IGVsc2UgeworICAgICAgICAgLy8gRmlyc3QgaXMgdmFsaWQsIGxhc3QgaXMgaW52YWxp
ZC4gIGRpIGlzIGluIEFjdGl2ZSBzdGF0ZS4KKyAgICAgICAgIHJldHVybiBkaS0+Zmlyc3RfZXBv
Y2gubiA8PSBlcC5uOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIGlmIChsYXN0X3ZhbGlk
KSB7CisgICAgICAgICAvLyBGaXJzdCBpcyBpbnZhbGlkLCBsYXN0IGlzIHZhbGlkLiAgVGhpcyBp
cyBhbiBpbXBvc3NpYmxlIHN0YXRlLgorICAgICAgICAgdmdfYXNzZXJ0KDApOworICAgICAgICAg
LypOT1RSRUFDSEVEKi8KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAvLyBOZWl0aGVyIGlzIHZhbGlkLiAgZGkgaXMgaW4gQWxsb2NhdGVkIHN0YXRlLgor
ICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgfQorICAgfQorCit9CisKK3N0YXRpYyBpbmxp
bmUgVUludCBST0wzMiAoIFVJbnQgeCwgVUludCBuICkKK3sKKyAgIHJldHVybiAoeCA8PCBuKSB8
ICh4ID4+ICgzMi1uKSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0gUm9vdCBzdHJ1Y3R1cmUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwogLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0x
NjIsNiArMjg0LDIzIEBACiB9CiAKIAorLy8gRGVidWdnaW5nIGhlbHBlciBmb3IgZXBvY2hzCitz
dGF0aWMgdm9pZCBzaG93X2Vwb2NocyAoIGNvbnN0IEhDaGFyKiBtc2cgKQoreworICAgaWYgKERF
QlVHX0VQT0NIUykgeworICAgICAgRGVidWdJbmZvKiBkaTsKKyAgICAgIFZHXyhwcmludGYpKCJc
bkRlYnVnSW5mbyBlcG9jaCBkaXNwbGF5LCByZXF1ZXN0ZWQgYnkgXCIlc1wiXG4iLCBtc2cpOwor
ICAgICAgVkdfKHByaW50ZikoIiAgQ3VycmVudCBlcG9jaCAobm90ZTogMCBtZWFucyBcImludmFs
aWQgZXBvY2hcIikgPSAldVxuIiwKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZXBvY2gpOwor
ICAgICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaTsgZGkgPSBkaS0+bmV4dCkgeworICAg
ICAgICAgVkdfKHByaW50ZikoIiAgW2RpPSVwXSAgZmlyc3QgJXUgIGxhc3QgJXUgICVzXG4iLCAK
KyAgICAgICAgICAgICAgICAgICAgIGRpLCBkaS0+Zmlyc3RfZXBvY2gubiwgZGktPmxhc3RfZXBv
Y2gubiwgZGktPmZzbS5maWxlbmFtZSk7CisgICAgICB9CisgICAgICBWR18ocHJpbnRmKSgiXG4i
KTsKKyAgIH0KK30KKworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLSBOb3RpZmljYXRpb24gKGFjcXVpcmUvZGlz
Y2FyZCkgaGVscGVycyAgICAgICAgICAgICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODIsNiArMzIx
LDggQEAKIAogICAgZGkgPSBNTF8oZGluZm9femFsbG9jKSgiZGkuZGVidWdpbmZvLmFESS4xIiwg
c2l6ZW9mKERlYnVnSW5mbykpOwogICAgZGktPmhhbmRsZSAgICAgICA9IGhhbmRsZV9jb3VudGVy
Kys7CisgICBkaS0+Zmlyc3RfZXBvY2ggID0gRGlFcG9jaF9JTlZBTElEKCk7CisgICBkaS0+bGFz
dF9lcG9jaCAgID0gRGlFcG9jaF9JTlZBTElEKCk7CiAgICBkaS0+ZnNtLmZpbGVuYW1lID0gTUxf
KGRpbmZvX3N0cmR1cCkoImRpLmRlYnVnaW5mby5hREkuMiIsIGZpbGVuYW1lKTsKICAgIGRpLT5m
c20ubWFwcyAgICAgPSBWR18obmV3WEEpKAogICAgICAgICAgICAgICAgICAgICAgICAgIE1MXyhk
aW5mb196YWxsb2MpLCAiZGkuZGVidWdpbmZvLmFESS4zIiwKQEAgLTMwMiwxMyArNDQzLDIwIEBA
CiB9CiAKIAotLyogJ3NpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0luZm9fbGlzdC4gIEZpbmQgaXQs
IHJlbW92ZSBpdCBmcm9tIHRoZQotICAgbGlzdCwgbm90aWZ5IG1fcmVkaXIgdGhhdCB0aGlzIGhh
cyBoYXBwZW5lZCwgYW5kIGZyZWUgYWxsIHN0b3JhZ2UKLSAgIHJlYWNoYWJsZSBmcm9tIGl0Lgor
LyogJ2RpJyBpcyBhIG1lbWJlciBvZiBkZWJ1Z0luZm9fbGlzdC4gIEZpbmQgaXQsIGFuZCBlaXRo
ZXIgKHJlbW92ZSBpdCBmcm9tCisgICB0aGUgbGlzdCBhbmQgZnJlZSBhbGwgc3RvcmFnZSByZWFj
aGFibGUgZnJvbSBpdCkgb3IgYXJjaGl2ZSBpdCwgbm90aWZ5CisgICBtX3JlZGlyIHRoYXQgdGhp
cyBoYXMgaGFwcGVuZWQsIGFuZCBmcmVlIGFsbCBzdG9yYWdlIHJlYWNoYWJsZSBmcm9tIGl0Lgor
CisgICBOb3RlIHRoYXQgJ2RpJyBjYW4ndCBiZSBhcmNoaXZlZC4gIElzIGEgRGVidWdJbmZvIGlz
IGFyY2hpdmVkIHRoZW4gd2UKKyAgIHdhbnQgdG8gaG9sZCBvbiB0byBpdCBmb3JldmVyLiAgVGhp
cyBpcyBhc3NlcnRlZCBmb3IuCisKKyAgIE5vdGUgYWxzbywgd2UgZG9uJ3QgYWR2YW5jZSB0aGUg
Y3VycmVudCBlcG9jaCBoZXJlLiAgVGhhdCdzIHRoZQorICAgcmVzcG9uc2liaWxpdHkgb2Ygc29t
ZSAobm9uLWltbWVkaWF0ZSkgY2FsbGVyLgogKi8KLXN0YXRpYyB2b2lkIGRpc2NhcmRfRGVidWdJ
bmZvICggRGVidWdJbmZvKiBkaSApCitzdGF0aWMgdm9pZCBkaXNjYXJkX29yX2FyY2hpdmVfRGVi
dWdJbmZvICggRGVidWdJbmZvKiBkaSApCiB7Ci0gICBjb25zdCBIQ2hhciogcmVhc29uID0gIm11
bm1hcCI7CisgICBjb25zdCBIQ2hhciogcmVhc29uICA9ICJtdW5tYXAiOworICAgY29uc3QgQm9v
bCAgIGFyY2hpdmUgPSBWR18oY2xvX2tlZXBfZGVidWdpbmZvKTsKIAogICAgRGVidWdJbmZvKiog
cHJldl9uZXh0X3B0ciA9ICZkZWJ1Z0luZm9fbGlzdDsKICAgIERlYnVnSW5mbyogIGN1cnIgICAg
ICAgICAgPSAgZGVidWdJbmZvX2xpc3Q7CkBAIC0zMTUsMTEgKzQ2MywxNCBAQAogCiAgICB3aGls
ZSAoY3VycikgewogICAgICAgaWYgKGN1cnIgPT0gZGkpIHsKLSAgICAgICAgIC8qIEZvdW5kIGl0
OyAgcmVtb3ZlIGZyb20gbGlzdCBhbmQgZnJlZSBpdC4gKi8KKyAgICAgICAgIC8qIEl0IG11c3Qg
YmUgYWN0aXZlISAqLworICAgICAgICAgdmdfYXNzZXJ0KCBpc19EZWJ1Z0luZm9fYWN0aXZlKGRp
KSk7CisgICAgICAgICAvKiBGb3VuZCBpdDsgKHJlbW92ZSBmcm9tIGxpc3QgYW5kIGZyZWUgaXQp
LCBvciBhcmNoaXZlIGl0LiAqLwogICAgICAgICAgaWYgKGN1cnItPmhhdmVfZGluZm8KICAgICAg
ICAgICAgICAmJiAoVkdfKGNsb192ZXJib3NpdHkpID4gMSB8fCBWR18oY2xvX3RyYWNlX3JlZGly
KSkpCiAgICAgICAgICAgICBWR18obWVzc2FnZSkoVmdfRGVidWdNc2csIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICJEaXNjYXJkaW5nIHN5bXMgYXQgJSNseC0lI2x4IGluICVzIGR1ZSB0byAl
cygpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBzeW1zIGF0ICUjbHgtJSNseCBp
biAlcyBkdWUgdG8gJXMoKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlID8g
IkFyY2hpdmluZyIgOiAiRGlzY2FyZGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGkt
PnRleHRfYXZtYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGktPnRleHRfYXZtYSArIGRp
LT50ZXh0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci0+ZnNtLmZpbGVuYW1l
ID8gY3Vyci0+ZnNtLmZpbGVuYW1lCkBAIC0zMjYsMTAgKzQ3NywxOCBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI/Pz8iLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYXNvbik7CiAgICAgICAgICB2Z19hc3NlcnQoKnByZXZfbmV4dF9wdHIgPT0g
Y3Vycik7Ci0gICAgICAgICAqcHJldl9uZXh0X3B0ciA9IGN1cnItPm5leHQ7Ci0gICAgICAgICBp
ZiAoY3Vyci0+aGF2ZV9kaW5mbykKKyAgICAgICAgIGlmICghYXJjaGl2ZSkgeworICAgICAgICAg
ICAgKnByZXZfbmV4dF9wdHIgPSBjdXJyLT5uZXh0OworICAgICAgICAgfQorICAgICAgICAgaWYg
KGN1cnItPmhhdmVfZGluZm8pIHsKICAgICAgICAgICAgIFZHXyhyZWRpcl9ub3RpZnlfZGVsZXRl
X0RlYnVnSW5mbykoIGN1cnIgKTsKLSAgICAgICAgIGZyZWVfRGVidWdJbmZvKGN1cnIpOworICAg
ICAgICAgfQorICAgICAgICAgaWYgKGFyY2hpdmUpIHsKKyAgICAgICAgICAgIC8qIEFkanVzdCB0
aGUgZXBvY2ggbWFya2VycyBhcHByb3ByaWF0ZWx5LiAqLworICAgICAgICAgICAgZGktPmxhc3Rf
ZXBvY2ggPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGZyZWVfRGVidWdJbmZvKGN1cnIpOworICAgICAgICAgfQogICAgICAgICAgcmV0dXJu
OwogICAgICAgfQogICAgICAgcHJldl9uZXh0X3B0ciA9ICZjdXJyLT5uZXh0OwpAQCAtMzU4LDEw
ICs1MTcsMTEgQEAKICAgICAgIHdoaWxlIChUcnVlKSB7CiAgICAgICAgICBpZiAoY3VyciA9PSBO
VUxMKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBpZiAoY3Vyci0+dGV4dF9wcmVzZW50
Ci0gICAgICAgICAgICAgJiYgY3Vyci0+dGV4dF9zaXplID4gMAotICAgICAgICAgICAgICYmIChz
dGFydCtsZW5ndGggLSAxIDwgY3Vyci0+dGV4dF9hdm1hIAotICAgICAgICAgICAgICAgICB8fCBj
dXJyLT50ZXh0X2F2bWEgKyBjdXJyLT50ZXh0X3NpemUgLSAxIDwgc3RhcnQpKSB7CisgICAgICAg
ICBpZiAoaXNfRGVidWdJbmZvX2FyY2hpdmVkKGN1cnIpCisgICAgICAgICAgICAgfHwgKGN1cnIt
PnRleHRfcHJlc2VudAorICAgICAgICAgICAgICAgICAmJiBjdXJyLT50ZXh0X3NpemUgPiAwCisg
ICAgICAgICAgICAgICAgICYmIChzdGFydCtsZW5ndGggLSAxIDwgY3Vyci0+dGV4dF9hdm1hIAor
ICAgICAgICAgICAgICAgICAgICAgfHwgY3Vyci0+dGV4dF9hdm1hICsgY3Vyci0+dGV4dF9zaXpl
IC0gMSA8IHN0YXJ0KSkpIHsKICAgICAgICAgICAgIC8qIG5vIG92ZXJsYXAgKi8KIAkgfSBlbHNl
IHsKIAkgICAgZm91bmQgPSBUcnVlOwpAQCAtMzcyLDcgKzUzMiw3IEBACiAKICAgICAgIGlmICgh
Zm91bmQpIGJyZWFrOwogICAgICAgYW55Rm91bmQgPSBUcnVlOwotICAgICAgZGlzY2FyZF9EZWJ1
Z0luZm8oIGN1cnIgKTsKKyAgICAgIGRpc2NhcmRfb3JfYXJjaGl2ZV9EZWJ1Z0luZm8oIGN1cnIg
KTsKICAgIH0KIAogICAgcmV0dXJuIGFueUZvdW5kOwpAQCAtNDE4LDkgKzU3OCw5IEBACiB9CiAK
IAotLyogRGlzY2FyZCBhbGwgZWxlbWVudHMgb2YgZGVidWdJbmZvX2xpc3Qgd2hvc2UgLm1hcmsg
Yml0IGlzIHNldC4KKy8qIERpc2NhcmQgb3IgYXJjaGl2ZSBhbGwgZWxlbWVudHMgb2YgZGVidWdJ
bmZvX2xpc3Qgd2hvc2UgLm1hcmsgYml0IGlzIHNldC4KICovCi1zdGF0aWMgdm9pZCBkaXNjYXJk
X21hcmtlZF9EZWJ1Z0luZm9zICggdm9pZCApCitzdGF0aWMgdm9pZCBkaXNjYXJkX29yX2FyY2hp
dmVfbWFya2VkX0RlYnVnSW5mb3MgKCB2b2lkICkKIHsKICAgIERlYnVnSW5mbyogY3VycjsKIApA
QCAtNDM2LDcgKzU5Niw3IEBACiAgICAgICB9CiAKICAgICAgIGlmICghY3VycikgYnJlYWs7Ci0g
ICAgICBkaXNjYXJkX0RlYnVnSW5mbyggY3VyciApOworICAgICAgZGlzY2FyZF9vcl9hcmNoaXZl
X0RlYnVnSW5mbyggY3VyciApOwogCiAgICB9CiB9CkBAIC00NDYsNiArNjA2LDcgQEAKICAgIENs
ZWFybHkgZGlSZWYgbXVzdCBoYXZlIGl0cyBtYXBwaW5nIGluZm9ybWF0aW9uIHNldCB0byBzb21l
dGhpbmcgc2FuZS4gKi8KIHN0YXRpYyB2b2lkIGRpc2NhcmRfRGVidWdJbmZvc193aGljaF9vdmVy
bGFwX3dpdGggKCBEZWJ1Z0luZm8qIGRpUmVmICkKIHsKKyAgIHZnX2Fzc2VydChpc19EZWJ1Z0lu
Zm9fYWxsb2NhdGVkKGRpUmVmKSk7CiAgICBEZWJ1Z0luZm8qIGRpOwogICAgLyogTWFyayBhbGwg
dGhlIERlYnVnSW5mb3MgaW4gZGVidWdJbmZvX2xpc3QgdGhhdCBuZWVkIHRvIGJlCiAgICAgICBk
ZWxldGVkLiAgRmlyc3QsIGNsZWFyIGFsbCB0aGUgbWFyayBiaXRzOyB0aGVuIHNldCB0aGVtIGlm
IHRoZXkKQEAgLTQ1Miw2ICs2MTMsOCBAQAogICAgICAgb3ZlcmxhcCB3aXRoIHNpUmVmLiAgU2lu
Y2Ugc2lSZWYgaXRzZWxmIGlzIGluIHRoaXMgbGlzdCB3ZSBhdAogICAgICAgbGVhc3QgZXhwZWN0
IGl0cyBvd24gbWFyayBiaXQgdG8gYmUgc2V0LiAqLwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19s
aXN0OyBkaTsgZGkgPSBkaS0+bmV4dCkgeworICAgICAgaWYgKGlzX0RlYnVnSW5mb19hcmNoaXZl
ZChkaSkpCisgICAgICAgICBjb250aW51ZTsKICAgICAgIGRpLT5tYXJrID0gZG9fRGVidWdJbmZv
c19vdmVybGFwKCBkaSwgZGlSZWYgKTsKICAgICAgIGlmIChkaSA9PSBkaVJlZikgewogICAgICAg
ICAgdmdfYXNzZXJ0KGRpLT5tYXJrKTsKQEAgLTQ1OCw3ICs2MjEsNyBAQAogICAgICAgICAgZGkt
Pm1hcmsgPSBGYWxzZTsKICAgICAgIH0KICAgIH0KLSAgIGRpc2NhcmRfbWFya2VkX0RlYnVnSW5m
b3MoKTsKKyAgIGRpc2NhcmRfb3JfYXJjaGl2ZV9tYXJrZWRfRGVidWdJbmZvcygpOwogfQogCiAK
QEAgLTQ3MCw2ICs2MzMsOCBAQAogICAgRGVidWdJbmZvKiBkaTsKICAgIHZnX2Fzc2VydChmaWxl
bmFtZSk7CiAgICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpOyBkaSA9IGRpLT5uZXh0KSB7
CisgICAgICBpZiAoaXNfRGVidWdJbmZvX2FyY2hpdmVkKGRpKSkKKyAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgdmdfYXNzZXJ0KGRpLT5mc20uZmlsZW5hbWUpOwogICAgICAgaWYgKDA9PVZHXyhz
dHJjbXApKGRpLT5mc20uZmlsZW5hbWUsIGZpbGVuYW1lKSkKICAgICAgICAgIGJyZWFrOwpAQCAt
NDgwLDYgKzY0NSw3IEBACiAgICAgICBkaS0+bmV4dCA9IGRlYnVnSW5mb19saXN0OwogICAgICAg
ZGVidWdJbmZvX2xpc3QgPSBkaTsKICAgIH0KKyAgIHZnX2Fzc2VydCghaXNfRGVidWdJbmZvX2Fy
Y2hpdmVkKGRpKSk7CiAgICByZXR1cm4gZGk7CiB9CiAKQEAgLTcyMyw2ICs4ODksOCBAQAogICAg
VUxvbmcgZGlfaGFuZGxlOwogICAgQm9vbCAgb2s7CiAKKyAgIGFkdmFuY2VfY3VycmVudF9EaUVw
b2NoKCJkaV9ub3RpZnlfQUNISUVWRV9BQ0NFUFRfU1RBVEUiKTsKKwogICAgdmdfYXNzZXJ0KGRp
LT5mc20uZmlsZW5hbWUpOwogICAgVFJBQ0VfU1lNVEFCKCJcbiIpOwogICAgVFJBQ0VfU1lNVEFC
KCItLS0tLS0gc3RhcnQgRUxGIE9CSkVDVCAiCkBAIC03MzQsNyArOTAyLDggQEAKICAgIC8qIFdl
J3JlIGdvaW5nIHRvIHJlYWQgc3ltYm9scyBhbmQgZGVidWcgaW5mbyBmb3IgdGhlIGF2bWEKICAg
ICAgIHJhbmdlcyBzcGVjaWZpZWQgaW4gdGhlIF9EZWJ1Z0luZm9Gc20gbWFwcGluZyBhcnJheS4g
Rmlyc3QKICAgICAgIGdldCByaWQgb2YgYW55IG90aGVyIERlYnVnSW5mb3Mgd2hpY2ggb3Zlcmxh
cCBhbnkgb2YgdGhvc2UKLSAgICAgIHJhbmdlcyAodG8gYXZvaWQgdG90YWwgY29uZnVzaW9uKS4g
Ki8KKyAgICAgIHJhbmdlcyAodG8gYXZvaWQgdG90YWwgY29uZnVzaW9uKS4gIEJ1dCBvbmx5IHRo
b3NlIHZhbGlkIGluCisgICAgIHRoZSBjdXJyZW50IGVwb2NoLiAgV2UgZG9uJ3Qgd2FudCB0byBk
aXNjYXJkIGFyY2hpdmVkIERlYnVnSW5mb3MuICovCiAgICBkaXNjYXJkX0RlYnVnSW5mb3Nfd2hp
Y2hfb3ZlcmxhcF93aXRoKCBkaSApOwogCiAgICAvKiBUaGUgRGVidWdJbmZvTWFwcGluZ3MgdGhh
dCBub3cgZXhpc3QgaW4gdGhlIEZTTSBtYXkgaW52b2x2ZQpAQCAtNzY1LDYgKzkzNCwxNSBAQAog
ICAgICAgICAgcHJpdl9zdG9yYWdlLmguICovCiAgICAgICBjaGVja19DRlNJX3JlbGF0ZWRfaW52
YXJpYW50cyhkaSk7CiAgICAgICBNTF8oZmluaXNoX0NGU0lfYXJyYXlzKShkaSk7CisKKyAgICAg
IC8vIE1hcmsgZGkncyBmaXJzdCBlcG9jaCBwb2ludCBhcyBhIHZhbGlkIGVwb2NoLiAgQmVjYXVz
ZSBpdHMKKyAgICAgIC8vIGxhc3RfZXBvY2ggdmFsdWUgaXMgc3RpbGwgaW52YWxpZCwgdGhpcyBj
aGFuZ2VzIGRpJ3Mgc3RhdGUgZnJvbQorICAgICAgLy8gImFsbG9jYXRlZCIgdG8gImFjdGl2ZSIu
CisgICAgICB2Z19hc3NlcnQoaXNfRGVidWdJbmZvX2FsbG9jYXRlZChkaSkpOworICAgICAgZGkt
PmZpcnN0X2Vwb2NoID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKyAgICAgIHZnX2Fzc2VydChp
c19EZWJ1Z0luZm9fYWN0aXZlKGRpKSk7CisgICAgICBzaG93X2Vwb2NocygiZGlfbm90aWZ5X0FD
SElFVkVfQUNDRVBUX1NUQVRFIHN1Y2Nlc3MiKTsKKwogICAgICAgLyogbm90aWZ5IG1fcmVkaXIg
YWJvdXQgaXQgKi8KICAgICAgIFRSQUNFX1NZTVRBQigiXG4tLS0tLS0gTm90aWZ5aW5nIG1fcmVk
aXIgLS0tLS0tXG4iKTsKICAgICAgIFZHXyhyZWRpcl9ub3RpZnlfbmV3X0RlYnVnSW5mbykoIGRp
ICk7CkBAIC0xMDc3LDggKzEyNTUsMTEgQEAKICAgIEJvb2wgYW55Rm91bmQ7CiAgICBpZiAoMCkg
VkdfKHByaW50ZikoIkRJU0NBUkQgJSNseCAlI2x4XG4iLCBhLCBhK2xlbik7CiAgICBhbnlGb3Vu
ZCA9IGRpc2NhcmRfc3ltc19pbl9yYW5nZShhLCBsZW4pOwotICAgaWYgKGFueUZvdW5kKQorICAg
aWYgKGFueUZvdW5kKSB7CiAgICAgICBjYWNoZXNfX2ludmFsaWRhdGUoKTsKKyAgICAgIGFkdmFu
Y2VfY3VycmVudF9EaUVwb2NoKCJWR18oZGlfbm90aWZ5X211bm1hcCkiKTsKKyAgICAgIHNob3df
ZXBvY2hzKCJWR18oZGlfbm90aWZ5X211bm1hcCkiKTsKKyAgIH0KIH0KIAogCkBAIC0xMDk0LDgg
KzEyNzUsMTAgQEAKICMgIGVuZGlmCiAgICBpZiAoMCAmJiAhZXhlX29rKSB7CiAgICAgICBCb29s
IGFueUZvdW5kID0gZGlzY2FyZF9zeW1zX2luX3JhbmdlKGEsIGxlbik7Ci0gICAgICBpZiAoYW55
Rm91bmQpCisgICAgICBpZiAoYW55Rm91bmQpIHsKICAgICAgICAgIGNhY2hlc19faW52YWxpZGF0
ZSgpOworICAgICAgICAgYWR2YW5jZV9jdXJyZW50X0RpRXBvY2goIlZHXyhkaV9ub3RpZnlfbXBy
b3RlY3QpIik7CisgICAgICB9CiAgICB9CiB9CiAKQEAgLTEzOTUsNiArMTU3OCw3IEBACiAgICBj
YWNoZXNfX2ludmFsaWRhdGUoKTsKICAgIC8qIGR1bXAgb2xkIGluZm8gZm9yIHRoaXMgcmFuZ2Us
IGlmIGFueSAqLwogICAgZGlzY2FyZF9zeW1zX2luX3JhbmdlKCBhdm1hX29iaiwgdG90YWxfc2l6
ZSApOworICAgYWR2YW5jZV9jdXJyZW50X0RpRXBvY2goIlZHXyhkaV9ub3RpZnlfcGRiX2RlYnVn
aW5mbykiKTsKIAogICAgeyBEZWJ1Z0luZm8qIGRpID0gZmluZF9vcl9jcmVhdGVfRGVidWdJbmZv
X2ZvcihleGVuYW1lKTsKIApAQCAtMTQ3MSw2ICsxNjU1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tIFR5
cGVzIGFuZCBmdW5jdGlvbnMgZm9yIGlubGluZWQgSVAgY3Vyc29yICAgICAgICAgICAgLS0tKi8K
IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKwogc3RydWN0IF9JbmxJUEN1cnNvciB7CiAgICBBZGRyIGVpcDsgICAgICAgICAg
ICAgLy8gQ3Vyc29yIHVzZWQgdG8gZGVzY3JpYmUgY2FsbHMgYXQgZWlwLgogICAgRGVidWdJbmZv
KiBkaTsgICAgICAgIC8vIERlYnVnSW5mbyBkZXNjcmliaW5nIGlubGluZWQgY2FsbHMgYXQgZWlw
CkBAIC0xNTM0LDggKzE3MTksOCBAQAogfQogCiAvKiBGb3J3YXJkICovCi1zdGF0aWMgdm9pZCBz
ZWFyY2hfYWxsX2xvY3RhYnMgKCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9j
bm8gKTsKK3N0YXRpYyB2b2lkIHNlYXJjaF9hbGxfbG9jdGFicyAoIERpRXBvY2ggZXAsIEFkZHIg
cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0RlYnVnSW5mbyoq
IHBkaSwgLypPVVQqL1dvcmQqIGxvY25vICk7CiAKIC8qIFJldHVybnMgdGhlIHBvc2l0aW9uIGFm
dGVyIHdoaWNoIGVpcCB3b3VsZCBiZSBpbnNlcnRlZCBpbiBpbmx0YWIuCiAgICAoLTEgaWYgZWlw
IHNob3VsZCBiZSBpbnNlcnRlZCBiZWZvcmUgcG9zaXRpb24gMCkuCkBAIC0xNTY1LDcgKzE3NTAs
NyBAQAogICAgcmV0dXJuIGxvIC0gMTsKIH0KIAotSW5sSVBDdXJzb3IqIFZHXyhuZXdfSUlQQyko
QWRkciBlaXApCitJbmxJUEN1cnNvciogVkdfKG5ld19JSVBDKShEaUVwb2NoIGVwLCBBZGRyIGVp
cCkKIHsKICAgIERlYnVnSW5mbyogIGRpOwogICAgV29yZCAgICAgICAgbG9jbm87CkBAIC0xNTc2
LDggKzE3NjEsOCBAQAogICAgaWYgKCFWR18oY2xvX3JlYWRfaW5saW5lX2luZm8pKQogICAgICAg
cmV0dXJuIE5VTEw7IC8vIE5vIHdheSB3ZSBjYW4gZmluZCBpbmxpbmVkIGNhbGxzLgogCi0gICAv
KiBTZWFyY2ggdGhlIERlYnVnSW5mbyBmb3IgZWlwICovCi0gICBzZWFyY2hfYWxsX2xvY3RhYnMg
KCBlaXAsICZkaSwgJmxvY25vICk7CisgICAvKiBTZWFyY2ggdGhlIERlYnVnSW5mbyBmb3IgKGVw
LCBlaXApICovCisgICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBlcCwgZWlwLCAmZGksICZsb2NubyAp
OwogICAgaWYgKGRpID09IE5VTEwgfHwgZGktPmlubHRhYl91c2VkID09IDApCiAgICAgICByZXR1
cm4gTlVMTDsgLy8gTm8gZGkgKHdpdGggaW5sdGFiKSBjb250YWluaW5nIGVpcC4KIApAQCAtMTY0
MSw4ICsxODI2LDggQEAKICAgIElmIGZpbmRUZXh0PT1UcnVlLCAgb25seSB0ZXh0IHN5bWJvbHMg
YXJlIHNlYXJjaGVkIGZvci4KICAgIElmIGZpbmRUZXh0PT1GYWxzZSwgb25seSBkYXRhIHN5bWJv
bHMgYXJlIHNlYXJjaGVkIGZvci4KICovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxsX3N5bXRhYnMg
KCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogc3ltbm8sCitzdGF0aWMgdm9pZCBz
ZWFyY2hfYWxsX3N5bXRhYnMgKCBEaUVwb2NoIGVwLCBBZGRyIHB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksIC8qT1VUKi9Xb3JkKiBz
eW1ubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgZmluZFRleHQgKQog
ewogICAgV29yZCAgICAgICBzbm87CkBAIC0xNjUxLDYgKzE4MzYsOSBAQAogCiAgICBmb3IgKGRp
ID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKIAorICAgICAg
aWYgKCFpc19ESV92YWxpZF9mb3JfZXBvY2goZGksIGVwKSkKKyAgICAgICAgIGNvbnRpbnVlOwor
CiAgICAgICBpZiAoZmluZFRleHQpIHsKICAgICAgICAgIC8qIENvbnNpZGVyIGFueSBzeW1ib2wg
aW4gdGhlIHIteCBtYXBwZWQgYXJlYSB0byBiZSB0ZXh0LgogICAgICAgICAgICAgU2VlIENvbW1l
bnRfUmVnYXJkaW5nX1RleHRfUmFuZ2VfQ2hlY2tzIGluIHN0b3JhZ2UuYyBmb3IKQEAgLTE2OTgs
MTUgKzE4ODYsMTcgQEAKIH0KIAogCi0vKiBTZWFyY2ggYWxsIGxvY3RhYnMgdGhhdCB3ZSBrbm93
IGFib3V0IHRvIGxvY2F0ZSBwdHIuICBJZiBmb3VuZCwgc2V0Ci0gICAqcGRpIHRvIHRoZSByZWxl
dmFudCBEZWJ1Z0luZm8sIGFuZCAqbG9jbm8gdG8gdGhlIGxvY3RhYiBlbnRyeQorLyogU2VhcmNo
IGFsbCBsb2N0YWJzIHRoYXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyIGF0IGVwb2NoIGVw
LiAgSWYKKyAgICpmb3VuZCwgc2V0IHBkaSB0byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQg
KmxvY25vIHRvIHRoZSBsb2N0YWIgZW50cnkKICAgICpudW1iZXIgd2l0aGluIHRoYXQuICBJZiBu
b3QgZm91bmQsICpwZGkgaXMgc2V0IHRvIE5VTEwuICovCi1zdGF0aWMgdm9pZCBzZWFyY2hfYWxs
X2xvY3RhYnMgKCBBZGRyIHB0ciwgLypPVVQqL0RlYnVnSW5mbyoqIHBkaSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovV29yZCogbG9jbm8gKQorc3Rh
dGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzICggRGlFcG9jaCBlcCwgQWRkciBwdHIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovRGVidWdJbmZvKiogcGRpLCAvKk9V
VCovV29yZCogbG9jbm8gKQogewogICAgV29yZCAgICAgICBsbm87CiAgICBEZWJ1Z0luZm8qIGRp
OwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0
KSB7CisgICAgICBpZiAoIWlzX0RJX3ZhbGlkX2Zvcl9lcG9jaChkaSwgZXApKQorICAgICAgICAg
Y29udGludWU7CiAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50
ZXh0X3NpemUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBwdHIgCkBAIC0xNzI5
LDE5ICsxOTE5LDIyIEBACiAKIHR5cGVkZWYKICAgIHN0cnVjdCB7Ci0gICAgICBBZGRyIHN5bV9h
dm1hOworICAgICAgLy8gKHN5bV9lcG9jaCwgc3ltX2F2bWEpIGFyZSB0aGUgaGFzaCB0YWJsZSBr
ZXkuCisgICAgICBEaUVwb2NoIHN5bV9lcG9jaDsKKyAgICAgIEFkZHIgICAgc3ltX2F2bWE7Cisg
ICAgICAvLyBGaWVsZHMgYmVsb3cgaGVyZSBhcmUgbm90IHBhcnQgb2YgdGhlIGtleS4KICAgICAg
IGNvbnN0IEhDaGFyKiBzeW1fbmFtZTsKICAgICAgIFB0cmRpZmZUIG9mZnNldCA6IChzaXplb2Yo
UHRyZGlmZlQpKjgpLTE7IAogICAgICAgQm9vbCBpc1RleHQgOiAxOwogICAgfQogICAgU3ltX05h
bWVfQ2FjaGVFbnQ7Ci0vKiBTeW1fTmFtZV9DYWNoZUVudCBhc3NvY2lhdGVzIGEgcXVlcmllZCBh
ZGRyZXNzIHRvIHRoZSBzeW0gbmFtZSBmb3VuZC4KLSAgIEJ5IG5hdHVyZSwgaWYgYSBzeW0gbmFt
ZSB3YXMgZm91bmQsIGl0IG1lYW5zIHRoZSBzZWFyY2hlZCBhZGRyZXNzCi0gICBzdG9yZWQgaW4g
dGhlIGNhY2hlIGlzIGFuIGF2bWEgKHNlZSBlLmcuIHNlYXJjaF9hbGxfc3ltdGFicykuCi0gICBO
b3RlIGhvd2V2ZXIgdGhhdCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmUgdG8gd29yayB3aXRoICdh
dm1hJwotICAgYWRkcmVzc2VzIGUuZy4gd2hlbiBjYWxsaW5nIFZHXyhnZXRfZm5uYW1lKSA6IG1f
ZGVidWdpbmZvLmMgaGFzCi0gICBubyB3YXkgdG8gZGlmZmVyZW50aWF0ZSBhbiAnc3ZtYSBhJyBm
cm9tIGFuICdhdm1hIGEnLiBJdCBpcyBob3dldmVyCi0gICB1bmxpa2VseSB0aGF0IHN2bWEgd291
bGQgcGVyY29sYXRlIG91dHNpZGUgb2YgdGhpcyBtb2R1bGUuICovCisvKiBTeW1fTmFtZV9DYWNo
ZUVudCBhc3NvY2lhdGVzIGEgcXVlcmllZCAoZXBvY2gsIGFkZHJlc3MpIHBhaXIgdG8gdGhlIHN5
bQorICAgbmFtZSBmb3VuZC4gIEJ5IG5hdHVyZSwgaWYgYSBzeW0gbmFtZSB3YXMgZm91bmQsIGl0
IG1lYW5zIHRoZSBzZWFyY2hlZAorICAgYWRkcmVzcyBzdG9yZWQgaW4gdGhlIGNhY2hlIGlzIGFu
IGF2bWEgKHNlZSBlLmcuIHNlYXJjaF9hbGxfc3ltdGFicykuCisgICBOb3RlIGhvd2V2ZXIgdGhh
dCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmUgdG8gd29yayB3aXRoICdhdm1hJyBhZGRyZXNzZXMK
KyAgIGUuZy4gd2hlbiBjYWxsaW5nIFZHXyhnZXRfZm5uYW1lKSA6IG1fZGVidWdpbmZvLmMgaGFz
IG5vIHdheSB0bworICAgZGlmZmVyZW50aWF0ZSBhbiAnc3ZtYSBhJyBmcm9tIGFuICdhdm1hIGEn
LiBJdCBpcyBob3dldmVyIHVubGlrZWx5IHRoYXQKKyAgIHN2bWEgd291bGQgcGVyY29sYXRlIG91
dHNpZGUgb2YgdGhpcyBtb2R1bGUuICovCiAKIHN0YXRpYyBTeW1fTmFtZV9DYWNoZUVudCBzeW1f
bmFtZV9jYWNoZVtOX1NZTV9OQU1FX0NBQ0hFXTsKIApAQCAtMTc1NywxMyArMTk1MCwxNSBAQAog
ICAgc3ltX25hbWVfY2FjaGVbMF0uc3ltX25hbWUgPSBub19zeW1fbmFtZTsKIH0KIAotLyogVGhl
IHdob2xlIHBvaW50IG9mIHRoaXMgd2hvbGUgYmlnIGRlYWw6IG1hcCBhIGNvZGUgYWRkcmVzcyB0
byBhCi0gICBwbGF1c2libGUgc3ltYm9sIG5hbWUuICBSZXR1cm5zIEZhbHNlIGlmIG5vIGlkZWE7
IG90aGVyd2lzZSBUcnVlLgorLyogVGhlIHdob2xlIHBvaW50IG9mIHRoaXMgd2hvbGUgYmlnIGRl
YWw6IG1hcCBhbiAoZXBvY2gsIGNvZGUgYWRkcmVzcykgcGFpcgorICAgdG8gYSBwbGF1c2libGUg
c3ltYm9sIG5hbWUuICBSZXR1cm5zIEZhbHNlIGlmIG5vIGlkZWE7IG90aGVyd2lzZSBUcnVlLgor
CiAgICBDYWxsZXIgc3VwcGxpZXMgYnVmLiAgSWYgZG9fY3h4X2RlbWFuZ2xpbmcgaXMgRmFsc2Us
IGRvbid0IGRvCiAgICBDKysgZGVtYW5nbGluZywgcmVnYXJkbGVzcyBvZiBWR18oY2xvX2RlbWFu
Z2xlKSAtLSBwcm9iYWJseSBiZWNhdXNlIHRoZQogICAgY2FsbCBoYXMgY29tZSBmcm9tIFZHXyhn
ZXRfZm5uYW1lX3JhdykoKS4gIGZpbmRUZXh0CiAgICBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBs
b29raW5nIGZvciBhIHRleHQgc3ltYm9sIG9yIGEgZGF0YSBzeW1ib2wKICAgIC0tIGNhbGxlciBt
dXN0IGNob29zZSBvbmUga2luZCBvciB0aGUgb3RoZXIuCisKICAgIE5PVEU6IFNlZSBJTVBPUlRB
TlQgQ09NTUVOVCBhYm92ZSBhYm91dCBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwCiAgICBpbiBw
dWJfdG9vbF9kZWJ1Z2luZm8uaCAKICAgIGdldF9zeW1fbmFtZSBhbmQgdGhlIGZhY3QgaXQgY2Fs
bHMgdGhlIGRlbWFuZ2xlciBpcyB0aGUgbWFpbiByZWFzb24KQEAgLTE3NzIsMjIgKzE5NjcsMzIg
QEAKICAgICgxKSB0aGUgRGVidWdJbmZvIGl0IGJlbG9uZ3MgdG8gaXMgbm90IGRpc2NhcmRlZAog
ICAgKDIpIHRoZSBkZW1hbmdsZXIgaXMgbm90IGludm9rZWQgYWdhaW4KICAgIEFsc28sIHRoZSBy
ZXR1cm5lZCBzdHJpbmcgaXMgb3duZWQgYnkgInNvbWVib2R5IGVsc2UiLiBDYWxsZXJzIG11c3QK
LSAgIG5vdCBmcmVlIGl0IG9yIG1vZGlmeSBpdC4qLworICAgbm90IGZyZWUgaXQgb3IgbW9kaWZ5
IGl0LiAqLwogc3RhdGljCiBCb29sIGdldF9zeW1fbmFtZSAoIEJvb2wgZG9fY3h4X2RlbWFuZ2xp
bmcsIEJvb2wgZG9fel9kZW1hbmdsaW5nLAogICAgICAgICAgICAgICAgICAgICBCb29sIGRvX2Jl
bG93X21haW5fcmVuYW1pbmcsCi0gICAgICAgICAgICAgICAgICAgIEFkZHIgYSwgY29uc3QgSENo
YXIqKiBidWYsCisgICAgICAgICAgICAgICAgICAgIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3Qg
SENoYXIqKiBidWYsCiAgICAgICAgICAgICAgICAgICAgIEJvb2wgbWF0Y2hfYW55d2hlcmVfaW5f
c3ltLCBCb29sIHNob3dfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICBCb29sIGZpbmRUZXh0
LCAvKk9VVCovUHRyZGlmZlQqIG9mZnNldFAgKQogewotICAgVVdvcmQgICAgICAgICBoYXNoID0g
YSAlIE5fU1lNX05BTUVfQ0FDSEU7Ci0gICBTeW1fTmFtZV9DYWNoZUVudCogc2UgPSAgJnN5bV9u
YW1lX2NhY2hlW2hhc2hdOworICAgLy8gQ29tcHV0ZSB0aGUgaGFzaCBmcm9tICdlcCcgYW5kICdh
Jy4gIFRoZSBsYXR0ZXIgY29udGFpbnMgbG90cyBvZgorICAgLy8gc2lnbmlmaWNhbnQgYml0cywg
YnV0ICdlcCcgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzbWFsbCBudW1iZXIsIHR5cGljYWxseQorICAg
Ly8gbGVzcyB0aGFuIDUwMC4gIFNvIHJvdGF0ZSBpdCBhcm91bmQgYSBiaXQgaW4gdGhlIGhvcGUg
b2Ygc3ByZWFkaW5nIHRoZQorICAgLy8gYml0cyBvdXQgc29tZXdoYXQuCisgICB2Z19hc3NlcnQo
IWlzX0RpRXBvY2hfSU5WQUxJRChlcCkpOworICAgVVdvcmQgaGFzaCA9IGEgXiAoVVdvcmQpKGVw
Lm4gXiBST0wzMihlcC5uLCA1KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4g
Uk9MMzIoZXAubiwgMTMpIF4gUk9MMzIoZXAubiwgMTkpKTsKKyAgIGhhc2ggJT0gTl9TWU1fTkFN
RV9DQUNIRTsKIAotICAgaWYgKFVOTElLRUxZKHNlLT5zeW1fYXZtYSAhPSBhIHx8IHNlLT5pc1Rl
eHQgIT0gZmluZFRleHQpKSB7CisgICBTeW1fTmFtZV9DYWNoZUVudCogc2UgPSAmc3ltX25hbWVf
Y2FjaGVbaGFzaF07CisKKyAgIGlmIChVTkxJS0VMWShzZS0+c3ltX2Vwb2NoLm4gIT0gZXAubiB8
fCBzZS0+c3ltX2F2bWEgIT0gYQorICAgICAgICAgICAgICAgIHx8IHNlLT5pc1RleHQgIT0gZmlu
ZFRleHQpKSB7CiAgICAgICBEZWJ1Z0luZm8qIGRpOwogICAgICAgV29yZCAgICAgICBzbm87CiAK
LSAgICAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIGEsICZkaSwgJnNubywgZmluZFRleHQgKTsKKyAg
ICAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIGVwLCBhLCAmZGksICZzbm8sIGZpbmRUZXh0ICk7Cisg
ICAgICBzZS0+c3ltX2Vwb2NoID0gZXA7CiAgICAgICBzZS0+c3ltX2F2bWEgPSBhOwogICAgICAg
c2UtPmlzVGV4dCA9IGZpbmRUZXh0OwogICAgICAgaWYgKGRpID09IE5VTEwgfHwgYSA9PSAwKQpA
QCAtMTg0NiwxMiArMjA1MSwxMiBAQAogLyogcHBjNjRiZS1saW51eCBvbmx5OiBmaW5kIHRoZSBU
T0MgcG9pbnRlciAoUjIgdmFsdWUpIHRoYXQgc2hvdWxkIGJlIGluCiAgICBmb3JjZSBhdCB0aGUg
ZW50cnkgcG9pbnQgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gY29udGFpbmluZwogICAgZ3Vlc3Rf
Y29kZV9hZGRyLiAgUmV0dXJucyAwIGlmIG5vdCBrbm93bi4gKi8KLUFkZHIgVkdfKGdldF90b2Nw
dHIpICggQWRkciBndWVzdF9jb2RlX2FkZHIgKQorQWRkciBWR18oZ2V0X3RvY3B0cikgKCBEaUVw
b2NoIGVwLCBBZGRyIGd1ZXN0X2NvZGVfYWRkciApCiB7CiAjaWYgZGVmaW5lZChWR0FfcHBjNjRi
ZSkgfHwgZGVmaW5lZChWR0FfcHBjNjRsZSkKICAgIERlYnVnSW5mbyogc2k7CiAgICBXb3JkICAg
ICAgIHNubzsKLSAgIHNlYXJjaF9hbGxfc3ltdGFicyAoIGd1ZXN0X2NvZGVfYWRkciwgCisgICBz
ZWFyY2hfYWxsX3N5bXRhYnMgKCBlcCwgZ3Vlc3RfY29kZV9hZGRyLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICZzaSwgJnNubywKICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUvKmNvbnNp
ZGVyIHRleHQgc3ltYm9scyBvbmx5Ki8gKTsKICAgIGlmIChzaSA9PSBOVUxMKSAKQEAgLTE4Njcs
MTEgKzIwNzIsMTEgQEAKICAgIG1hdGNoIGFueXdoZXJlIGluIGZ1bmN0aW9uLCBidXQgZG9uJ3Qg
c2hvdyBvZmZzZXRzLgogICAgTk9URTogU2VlIElNUE9SVEFOVCBDT01NRU5UIGFib3ZlIGFib3V0
IHBlcnNpc3RlbmNlIGFuZCBvd25lcnNoaXAKICAgIGluIHB1Yl90b29sX2RlYnVnaW5mby5oICov
Ci1Cb29sIFZHXyhnZXRfZm5uYW1lKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQorQm9v
bCBWR18oZ2V0X2ZubmFtZSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVm
ICkKIHsKICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwgLypa
LWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1y
ZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZXAsIGEsIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAv
Km1hdGNoX2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
LypzaG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBz
eW0qL1RydWUsCkBAIC0xODgyLDExICsyMDg3LDExIEBACiAgICBtYXRjaCBhbnl3aGVyZSBpbiBm
dW5jdGlvbiwgYW5kIHNob3cgb2Zmc2V0IGlmIG5vbnplcm8uCiAgICBOT1RFOiBTZWUgSU1QT1JU
QU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hpcAogICAgaW4g
cHViX3Rvb2xfZGVidWdpbmZvLmggKi8KLUJvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpICgg
QWRkciBhLCBjb25zdCBIQ2hhcioqIGJ1ZiApCitCb29sIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0
KSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQogewogICAgcmV0dXJu
IGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9UcnVlLCAvKlotZGVtYW5nbGUqL1RydWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5nKi9UcnVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBlcCwgYSwgYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVf
aW5fZnVuKi9UcnVlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0Pyov
VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRleHQgc3ltKi9UcnVlLApAQCAtMTg5
OCw3ICsyMTAzLDcgQEAKICAgIGFuZCBkb24ndCBzaG93IG9mZnNldHMuCiAgICBOT1RFOiBTZWUg
SU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hpcAog
ICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggKi8KLUJvb2wgVkdfKGdldF9mbm5hbWVfaWZfZW50
cnkpICggQWRkciBhLCBjb25zdCBIQ2hhcioqIGJ1ZiApCitCb29sIFZHXyhnZXRfZm5uYW1lX2lm
X2VudHJ5KSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQogewogICAg
Y29uc3QgSENoYXIgKnRtcDsKICAgIEJvb2wgcmVzOwpAQCAtMTkwNSw3ICsyMTEwLDcgQEAKIAog
ICAgcmVzID0gIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9UcnVlLCAvKlotZGVtYW5n
bGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5n
Ki9UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsICZ0bXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZXAsIGEsICZ0bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyptYXRj
aF9hbnl3aGVyZV9pbl9mdW4qL0ZhbHNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNo
b3cgb2Zmc2V0PyovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bSov
VHJ1ZSwKQEAgLTE5MjAsMTEgKzIxMjUsMTEgQEAKICAgIG9mZnNldHMuCiAgICBOT1RFOiBTZWUg
SU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hpcAog
ICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggICovCi1Cb29sIFZHXyhnZXRfZm5uYW1lX3Jhdykg
KCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVmICkKK0Jvb2wgVkdfKGdldF9mbm5hbWVfcmF3KSAo
IERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQogewogICAgcmV0dXJuIGdl
dF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xlKi9GYWxzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcqL0ZhbHNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBlcCwgYSwgYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVf
aW5fZnVuKi9UcnVlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0Pyov
RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bSovVHJ1ZSwKQEAgLTE5
MzYsMTQgKzIxNDEsMjIgQEAKICAgIGRvbid0IHNob3cgb2Zmc2V0cy4KICAgIE5PVEU6IFNlZSBJ
TVBPUlRBTlQgQ09NTUVOVCBhYm92ZSBhYm91dCBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwCiAg
ICBpbiBwdWJfdG9vbF9kZWJ1Z2luZm8uaCAqLwotQm9vbCBWR18oZ2V0X2ZubmFtZV9ub19jeHhf
ZGVtYW5nbGUpICggQWRkciBhLCBjb25zdCBIQ2hhcioqIGJ1ZiwKK0Jvb2wgVkdfKGdldF9mbm5h
bWVfbm9fY3h4X2RlbWFuZ2xlKSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBi
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmxJUEN1
cnNvciogaWlwYyApCiB7CisgICAvLyBGSVhNRSBKUlMgMjggSnVuZSAyMDE3OiBzaG91bGQgd2Ug
dXNlICdpaXBjLT5kaS0+Zmlyc3RfZXBvY2gnCisgICAvLyBpbnN0ZWFkIG9mICdlcCcgaW4gdGhl
IGNhbGwgdG8gZ2V0X3N5bV9uYW1lPyAgQXQgbGVhc3QgbGV0J3MKKyAgIC8vIGFzc2VydCB0aGF0
IHRoZSBEZWJ1Z0luZm8gdGhhdCAnaWlwYycgbWVudGlvbnMgaXMgdmFsaWQgZm9yIHRoZQorICAg
Ly8gc3BlY2lmaWVkIGVwb2NoLgorICAgaWYgKGlpcGMpIHsKKyAgICAgIHZnX2Fzc2VydChpc19E
SV92YWxpZF9mb3JfZXBvY2goaWlwYy0+ZGksIGVwKSk7CisgICB9CisKICAgIGlmIChpc19ib3R0
b20oaWlwYykpIHsKICAgICAgIC8vIEF0IHRoZSBib3R0b20gKHRvd2FyZHMgbWFpbiksIHdlIGRl
c2NyaWJlIHRoZSBmbiBhdCBlaXAuCiAgICAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKyst
ZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5nbGUqL1RydWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5nKi9UcnVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGEsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcCwgYSwgYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9U
cnVlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0PyovRmFsc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bSovVHJ1ZSwKQEAgLTE5NjIs
MTMgKzIxNzUsMTMgQEAKIC8qIG1pcHMtbGludXggb25seTogZmluZCB0aGUgb2Zmc2V0IG9mIGN1
cnJlbnQgYWRkcmVzcy4gVGhpcyBpcyBuZWVkZWQgZm9yIAogICAgc3RhY2sgdW53aW5kaW5nIGZv
ciBNSVBTLgogKi8KLUJvb2wgVkdfKGdldF9pbnN0X29mZnNldF9pbl9mdW5jdGlvbikoIEFkZHIg
YSwKK0Jvb2wgVkdfKGdldF9pbnN0X29mZnNldF9pbl9mdW5jdGlvbikoIERpRXBvY2ggZXAsIEFk
ZHIgYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9QdHJk
aWZmVCogb2Zmc2V0ICkKIHsKICAgIGNvbnN0IEhDaGFyICpmbm5hbWU7CiAgICByZXR1cm4gZ2V0
X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5nbGUqL0ZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWluZyovRmFsc2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgYSwgJmZubmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBlcCwgYSwgJmZubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2Fu
eXdoZXJlX2luX3N5bSovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9m
ZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW0qL1RydWUs
CkBAIC0yMDAwLDEzICsyMjEzLDEzIEBACiAgICB9CiB9CiAKLVZnX0ZuTmFtZUtpbmQgVkdfKGdl
dF9mbm5hbWVfa2luZF9mcm9tX0lQKSAoIEFkZHIgaXAgKQorVmdfRm5OYW1lS2luZCBWR18oZ2V0
X2ZubmFtZV9raW5kX2Zyb21fSVApICggRGlFcG9jaCBlcCwgQWRkciBpcCApCiB7CiAgICBjb25z
dCBIQ2hhciAqYnVmOwogCiAgICAvLyBXZSBkb24ndCBkZW1hbmdsZSwgYmVjYXVzZSBpdCdzIGZh
c3RlciBub3QgdG8sIGFuZCB0aGUgc3BlY2lhbCBuYW1lcwogICAgLy8gd2UncmUgbG9va2luZyBm
b3Igd29uJ3QgYmUgbWFuZ2xlZC4KLSAgIGlmIChWR18oZ2V0X2ZubmFtZV9yYXcpICggaXAsICZi
dWYgKSkgeworICAgaWYgKFZHXyhnZXRfZm5uYW1lX3JhdykgKCBlcCwgaXAsICZidWYgKSkgewog
CiAgICAgICByZXR1cm4gVkdfKGdldF9mbm5hbWVfa2luZCkoYnVmKTsKICAgIH0gZWxzZSB7CkBA
IC0yMDE5LDEzICsyMjMyLDEzIEBACiAgICBBbHNvIGRhdGFfYWRkcidzIG9mZnNldCBmcm9tIHRo
ZSBzeW1ib2wgc3RhcnQgaXMgcHV0IGludG8gKm9mZnNldC4KICAgIE5PVEU6IFNlZSBJTVBPUlRB
TlQgQ09NTUVOVCBhYm92ZSBhYm91dCBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwCiAgICBpbiBw
dWJfdG9vbF9kZWJ1Z2luZm8uaCAgKi8KLUJvb2wgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQp
KCBBZGRyIGRhdGFfYWRkciwKK0Jvb2wgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQpKCBEaUVw
b2NoIGVwLCBBZGRyIGRhdGFfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKk9VVCovY29uc3QgSENoYXIqKiBkbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKk9VVCovUHRyZGlmZlQqIG9mZnNldCApCiB7CiAgICByZXR1cm4gZ2V0X3N5bV9u
YW1lICggLypDKystZGVtYW5nbGUqL0ZhbHNlLCAvKlotZGVtYW5nbGUqL0ZhbHNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcqL0ZhbHNlLAotICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhX2FkZHIsIGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBl
cCwgZGF0YV9hZGRyLCBkbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgLyptYXRjaF9hbnl3
aGVyZV9pbl9zeW0qL1RydWUsIAogICAgICAgICAgICAgICAgICAgICAgICAvKnNob3cgb2Zmc2V0
PyovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW0qL0ZhbHNlLApAQCAt
MjAzOCw3ICsyMjUxLDcgQEAKICAgICgxKSB0aGUgRGVidWdJbmZvIGl0IGJlbG9uZ3MgdG8gaXMg
bm90IGRpc2NhcmRlZAogICAgKDIpIHRoZSBzZWdtZW50IGNvbnRhaW5pbmcgdGhlIGFkZHJlc3Mg
aXMgbm90IG1lcmdlZCB3aXRoIGFub3RoZXIgc2VnbWVudAogKi8KLUJvb2wgVkdfKGdldF9vYmpu
YW1lKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBvYmpuYW1lICkKK0Jvb2wgVkdfKGdldF9vYmpu
YW1lKSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBvYmpuYW1lICkKIHsKICAg
IERlYnVnSW5mbyogZGk7CiAgICBjb25zdCBOU2VnbWVudCAqc2VnOwpAQCAtMjA0Nyw2ICsyMjYw
LDggQEAKICAgIC8qIExvb2sgaW4gdGhlIGRlYnVnSW5mb19saXN0IHRvIGZpbmQgdGhlIG5hbWUu
ICBJbiBtb3N0IGNhc2VzIHdlCiAgICAgICBleHBlY3QgdGhpcyB0byBwcm9kdWNlIGEgcmVzdWx0
LiAqLwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5u
ZXh0KSB7CisgICAgICBpZiAoIWlzX0RJX3ZhbGlkX2Zvcl9lcG9jaChkaSwgZXApKQorICAgICAg
ICAgY29udGludWU7CiAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRp
LT50ZXh0X3NpemUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBhIApAQCAtMjA1
OSw4ICsyMjc0LDEzIEBACiAgICAgICB0aGUgZGVidWdJbmZvX2xpc3QsIGFzayB0aGUgYWRkcmVz
cyBzcGFjZSBtYW5hZ2VyIHdoZXRoZXIgaXQKICAgICAgIGtub3dzIHRoZSBuYW1lIG9mIHRoZSBm
aWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcHBpbmcuICBUaGlzCiAgICAgICBhbGxvd3MgdXMg
dG8gcHJpbnQgdGhlIG5hbWVzIG9mIGV4ZS9kbGwgZmlsZXMgaW4gdGhlIHN0YWNrIHRyYWNlCi0g
ICAgICB3aGVuIHJ1bm5pbmcgcHJvZ3JhbXMgdW5kZXIgd2luZS4gKi8KLSAgIGlmICggKHNlZyA9
IFZHXyhhbV9maW5kX25zZWdtZW50KShhKSkgIT0gTlVMTCAKKyAgICAgIHdoZW4gcnVubmluZyBw
cm9ncmFtcyB1bmRlciB3aW5lLgorCisgICAgICBSZXN0cmljdCB0aGlzIHRvIHRoZSBjYXNlIHdo
ZXJlICdlcCcgaXMgdGhlIGN1cnJlbnQgZXBvY2gsIHRob3VnaCwgc28KKyAgICAgIHRoYXQgd2Ug
ZG9uJ3QgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZXBvY2ggd2hlbiB0aGUgY2FsbGVy
IHdhcworICAgICAgZW5xdWlyaW5nIGFib3V0IGEgZGlmZmVyZW50IG9uZS4gKi8KKyAgIGlmICgg
ZXFfRGlFcG9jaChlcCwgVkdfKGN1cnJlbnRfRGlFcG9jaCkoKSkKKyAgICAgICAgJiYgKHNlZyA9
IFZHXyhhbV9maW5kX25zZWdtZW50KShhKSkgIT0gTlVMTCAKICAgICAgICAgJiYgKGZpbGVuYW1l
ID0gVkdfKGFtX2dldF9maWxlbmFtZSkoc2VnKSkgIT0gTlVMTCApIHsKICAgICAgICpvYmpuYW1l
ID0gZmlsZW5hbWU7CiAgICAgICByZXR1cm4gVHJ1ZTsKQEAgLTIwNzAsMTIgKzIyOTAsMTQgQEAK
IAogLyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGl0cyBEZWJ1Z0luZm8uICBSZXR1cm5zIE5VTEwg
aWYgbm90IGZvdW5kLiAgRG9lc24ndAogICAgcmVxdWlyZSBkZWJ1ZyBpbmZvLiAqLwotRGVidWdJ
bmZvKiBWR18oZmluZF9EZWJ1Z0luZm8pICggQWRkciBhICkKK0RlYnVnSW5mbyogVkdfKGZpbmRf
RGVidWdJbmZvKSAoIERpRXBvY2ggZXAsIEFkZHIgYSApCiB7CiAgICBzdGF0aWMgVVdvcmQgbl9z
ZWFyY2ggPSAwOwogICAgRGVidWdJbmZvKiBkaTsKICAgIG5fc2VhcmNoKys7CiAgICBmb3IgKGRp
ID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlm
ICghaXNfRElfdmFsaWRfZm9yX2Vwb2NoKGRpLCBlcCkpCisgICAgICAgICBjb250aW51ZTsKICAg
ICAgIGlmIChkaS0+dGV4dF9wcmVzZW50CiAgICAgICAgICAgJiYgZGktPnRleHRfc2l6ZSA+IDAK
ICAgICAgICAgICAmJiBkaS0+dGV4dF9hdm1hIDw9IGEgCkBAIC0yMDkxLDEzICsyMzEzLDEzIEBA
CiAvKiBNYXAgYSBjb2RlIGFkZHJlc3MgdG8gYSBmaWxlbmFtZS4gIFJldHVybnMgVHJ1ZSBpZiBz
dWNjZXNzZnVsLiBUaGUKICAgIHJldHVybmVkIHN0cmluZyBpcyBwZXJzaXN0ZW50IGFzIGxvbmcg
YXMgdGhlIERlYnVnSW5mbyB0byB3aGljaCBpdAogICAgYmVsb25ncyBpcyBub3QgZGlzY2FyZGVk
LiAqLwotQm9vbCBWR18oZ2V0X2ZpbGVuYW1lKSggQWRkciBhLCBjb25zdCBIQ2hhcioqIGZpbGVu
YW1lICkKK0Jvb2wgVkdfKGdldF9maWxlbmFtZSkoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3Qg
SENoYXIqKiBmaWxlbmFtZSApCiB7CiAgICBEZWJ1Z0luZm8qIHNpOwogICAgV29yZCAgICAgICBs
b2NubzsKICAgIFVJbnQgICAgICAgZm5kbl9peDsKIAotICAgc2VhcmNoX2FsbF9sb2N0YWJzICgg
YSwgJnNpLCAmbG9jbm8gKTsKKyAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIGVwLCBhLCAmc2ksICZs
b2NubyApOwogICAgaWYgKHNpID09IE5VTEwpIAogICAgICAgcmV0dXJuIEZhbHNlOwogICAgZm5k
bl9peCA9IE1MXyhmbmRuX2l4KSAoc2ksIGxvY25vKTsKQEAgLTIxMDYsMTEgKzIzMjgsMTEgQEAK
IH0KIAogLyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGEgbGluZSBudW1iZXIuICBSZXR1cm5zIFRy
dWUgaWYgc3VjY2Vzc2Z1bC4gKi8KLUJvb2wgVkdfKGdldF9saW5lbnVtKSggQWRkciBhLCBVSW50
KiBsaW5lbm8gKQorQm9vbCBWR18oZ2V0X2xpbmVudW0pKCBEaUVwb2NoIGVwLCBBZGRyIGEsIFVJ
bnQqIGxpbmVubyApCiB7CiAgICBEZWJ1Z0luZm8qIHNpOwogICAgV29yZCAgICAgICBsb2NubzsK
LSAgIHNlYXJjaF9hbGxfbG9jdGFicyAoIGEsICZzaSwgJmxvY25vICk7CisgICBzZWFyY2hfYWxs
X2xvY3RhYnMgKCBlcCwgYSwgJnNpLCAmbG9jbm8gKTsKICAgIGlmIChzaSA9PSBOVUxMKSAKICAg
ICAgIHJldHVybiBGYWxzZTsKICAgICpsaW5lbm8gPSBzaS0+bG9jdGFiW2xvY25vXS5saW5lbm87
CkBAIC0yMTIxLDcgKzIzNDMsNyBAQAogLyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGEgZmlsZW5h
bWUvbGluZSBudW1iZXIvZGlyIG5hbWUgaW5mby4KICAgIFNlZSBwcm90b3R5cGUgZm9yIGRldGFp
bGVkIGRlc2NyaXB0aW9uIG9mIGJlaGF2aW91ci4KICovCi1Cb29sIFZHXyhnZXRfZmlsZW5hbWVf
bGluZW51bSkgKCBBZGRyIGEsIAorQm9vbCBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pICggRGlF
cG9jaCBlcCwgQWRkciBhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VU
Ki9jb25zdCBIQ2hhcioqIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLypPVVQqL2NvbnN0IEhDaGFyKiogZGlybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qT1VUKi9VSW50KiBsaW5lbm8gKQpAQCAtMjEzMCw3ICsyMzUyLDcgQEAKICAg
IFdvcmQgICAgICAgbG9jbm87CiAgICBVSW50ICAgICAgIGZuZG5faXg7CiAKLSAgIHNlYXJjaF9h
bGxfbG9jdGFicyAoIGEsICZzaSwgJmxvY25vICk7CisgICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBl
cCwgYSwgJnNpLCAmbG9jbm8gKTsKICAgIGlmIChzaSA9PSBOVUxMKSB7CiAgICAgICBpZiAoZGly
bmFtZSkgewogICAgICAgICAgKmRpcm5hbWUgPSAiIjsKQEAgLTIxNTksNyArMjM4MSw4IEBACiAg
ICBUaGVyZWZvcmUgc3BlY2lmeSAiKiIgdG8gc2VhcmNoIGFsbCB0aGUgb2JqZWN0cy4gIE9uIFRP
Qy1hZmZsaWN0ZWQKICAgIHBsYXRmb3JtcywgYSBzeW1ib2wgaXMgZGVlbWVkIHRvIGJlIGZvdW5k
IG9ubHkgaWYgaXQgaGFzIGEgbm9uemVybwogICAgVE9DIHBvaW50ZXIuICAqLwotQm9vbCBWR18o
bG9va3VwX3N5bWJvbF9TTE9XKShjb25zdCBIQ2hhciogc29wYXR0LCBjb25zdCBIQ2hhciogbmFt
ZSwKK0Jvb2wgVkdfKGxvb2t1cF9zeW1ib2xfU0xPVykoRGlFcG9jaCBlcCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSENoYXIqIHNvcGF0dCwgY29uc3QgSENoYXIqIG5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bUFWTUFzKiBhdm1hcykKIHsKICAgIEJv
b2wgICAgIHJlcXVpcmVfcFRvYyA9IEZhbHNlOwpAQCAtMjE3Miw2ICsyMzk1LDggQEAKICAgIGZv
ciAoc2kgPSBkZWJ1Z0luZm9fbGlzdDsgc2k7IHNpID0gc2ktPm5leHQpIHsKICAgICAgIGlmIChk
ZWJ1ZykKICAgICAgICAgIFZHXyhwcmludGYpKCJsb29rdXBfc3ltYm9sX1NMT1c6IGNvbnNpZGVy
aW5nICVzXG4iLCBzaS0+c29uYW1lKTsKKyAgICAgIGlmICghaXNfRElfdmFsaWRfZm9yX2Vwb2No
KHNpLCBlcCkpCisgICAgICAgICBjb250aW51ZTsKICAgICAgIGlmICghVkdfKHN0cmluZ19tYXRj
aCkoc29wYXR0LCBzaS0+c29uYW1lKSkgewogICAgICAgICAgaWYgKGRlYnVnKQogICAgICAgICAg
ICAgVkdfKHByaW50ZikoIiAuLi4gc2tpcFxuIik7CkBAIC0yMjU0LDcgKzI0NzksNyBAQAogICAg
cmV0dXJuIG47CiB9CiAKLWNvbnN0IEhDaGFyKiBWR18oZGVzY3JpYmVfSVApKEFkZHIgZWlwLCBj
b25zdCBJbmxJUEN1cnNvciAqaWlwYykKK2NvbnN0IEhDaGFyKiBWR18oZGVzY3JpYmVfSVApKERp
RXBvY2ggZXAsIEFkZHIgZWlwLCBjb25zdCBJbmxJUEN1cnNvciAqaWlwYykKIHsKICAgIHN0YXRp
YyBIQ2hhciAqYnVmID0gTlVMTDsKICAgIHN0YXRpYyBTaXplVCBidWZzaXogPSAwOwpAQCAtMjI2
Nyw3ICsyNDkyLDEwIEBACiAgICBIQ2hhciBpYnVmWzUwXTsgICAvLyBsYXJnZSBlbm91Z2gKICAg
IFNpemVUIG4gPSAwOwogCi0gICB2Z19hc3NlcnQgKCFpaXBjIHx8IGlpcGMtPmVpcCA9PSBlaXAp
OworICAgLy8gQW4gSW5sSVBDdXJzb3IgaXMgYXNzb2NpYXRlZCB3aXRoIG9uZSBzcGVjaWZpYyBE
ZWJ1Z0luZm8uICBTbyBpZgorICAgLy8gaXQgZXhpc3RzLCBtYWtlIHN1cmUgdGhhdCBpdCBpcyB2
YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBEaUVwb2NoLgorICAgdmdfYXNzZXJ0ICghaWlwYworICAg
ICAgICAgICAgICB8fCAoaXNfRElfdmFsaWRfZm9yX2Vwb2NoKGlpcGMtPmRpLCBlcCkgJiYgaWlw
Yy0+ZWlwID09IGVpcCkpOwogCiAgICBjb25zdCBIQ2hhciAqYnVmX2ZuOwogICAgY29uc3QgSENo
YXIgKmJ1Zl9vYmo7CkBAIC0yMjgyLDggKzI1MTAsOCBAQAogICAgaWYgKGlzX2JvdHRvbShpaXBj
KSkgewogICAgICAgLy8gQXQgdGhlIGJvdHRvbSAodG93YXJkcyBtYWluKSwgd2UgZGVzY3JpYmUg
dGhlIGZuIGF0IGVpcC4KICAgICAgIGtub3dfZm5uYW1lID0gVkdfKGNsb19zeW1fb2Zmc2V0cykK
LSAgICAgICAgICAgICAgICAgICAgPyBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkgKGVpcCwgJmJ1
Zl9mbikKLSAgICAgICAgICAgICAgICAgICAgOiBWR18oZ2V0X2ZubmFtZSkgKGVpcCwgJmJ1Zl9m
bik7CisgICAgICAgICAgICAgICAgICAgID8gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpIChlcCwg
ZWlwLCAmYnVmX2ZuKQorICAgICAgICAgICAgICAgICAgICA6IFZHXyhnZXRfZm5uYW1lKSAoZXAs
IGVpcCwgJmJ1Zl9mbik7CiAgICB9IGVsc2UgewogICAgICAgY29uc3QgRGlJbmxMb2MgKm5leHRf
aW5sID0gaWlwYyAmJiBpaXBjLT5uZXh0X2lubHRhYiA+PSAwCiAgICAgICAgICA/ICYgaWlwYy0+
ZGktPmlubHRhYltpaXBjLT5uZXh0X2lubHRhYl0KQEAgLTIzMDEsMTIgKzI1MjksMTIgQEAKICAg
ICAgIC8vID8/PyBDdXJyZW50bHkgbmV2ZXIgc2hvd2luZyBhbiBvZmZzZXQuCiAgICB9CiAKLSAg
IGtub3dfb2JqbmFtZSA9IFZHXyhnZXRfb2JqbmFtZSkoZWlwLCAmYnVmX29iaik7CisgICBrbm93
X29iam5hbWUgPSBWR18oZ2V0X29iam5hbWUpKGVwLCBlaXAsICZidWZfb2JqKTsKIAogICAgaWYg
KGlzX3RvcChpaXBjKSkgewogICAgICAgLy8gVGhlIHNvdXJjZSBmb3IgdGhlIGhpZ2hlc3QgbGV2
ZWwgaXMgaW4gdGhlIGxvY3RhYiBlbnRyeS4KICAgICAgIGtub3dfc3JjbG9jICA9IFZHXyhnZXRf
ZmlsZW5hbWVfbGluZW51bSkoCi0gICAgICAgICAgICAgICAgICAgICAgICBlaXAsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZXAsIGVpcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAmYnVm
X3NyY2xvYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmX2Rpcm5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAmbGluZW5vIApAQCAtMjQ1OSw2ICsyNjg3LDIwIEBACiAvKi0tLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0t
Ki8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwogCisvKiBOb3RlIHRoYXQgdGhlIENGSSBtYWNoaW5lcnkgcGVydGFpbnMg
dG8gdW53aW5kaW5nIHRoZSBzdGFjayAicmlnaHQgbm93Ii4KKyAgIFRoZXJlIGlzIG5vIHN1cHBv
cnQgZm9yIHVud2luZGluZyBzdGFjayBpbWFnZXMgb2J0YWluZWQgZnJvbSBzb21lIHRpbWUgaW4K
KyAgIHRoZSBwYXN0LiAgVGhhdCBtZWFucyB0aGF0OgorCisgICAoMSkgV2Ugb25seSBkZWFsIHdp
dGggQ0ZJIGZyb20gRGVidWdJbmZvcyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhlIGN1cnJlbnQKKyAg
ICAgICBkZWJ1Z2luZm8gZXBvY2guICBVbmxpa2UgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRo
ZXJlIGlzIG5vCisgICAgICAgZXBvY2gtYXdhcmVuZXNzLgorCisgICAoMikgV2UgYXNzdW1lIHRo
YXQgdGhlIENGSSBjYWNoZSB3aWxsIGJlIGludmFsaWRhdGVkIGV2ZXJ5IHRpbWUgdGhlIHRoZQor
ICAgICAgIGVwb2NoIGNoYW5nZXMuICBUaGlzIGlzIGRvbmUgYnkgZW5zdXJpbmcgKGluIHRoZSBm
aWxlIGFib3ZlKSB0aGF0CisgICAgICAgZXZlcnkgY2FsbCB0byBhZHZhbmNlX2N1cnJlbnRfRGlF
cG9jaCBoYXMgYSBjYWxsIHRvCisgICAgICAgY2FjaGVzX19pbnZhbGlkYXRlIGFsb25nc2lkZSBp
dC4KKyovCisKIC8qIEdhdGhlciB1cCBhbGwgdGhlIGNvbnN0YW50IHBpZWNlcyBvZiBpbmZvIG5l
ZWRlZCB0byBldmFsdWF0ZQogICAgYSBDZmlFeHByIGludG8gb25lIGNvbnZlbmllbnQgc3RydWN0
LiAqLwogdHlwZWRlZgpAQCAtMjU3OSw2ICsyODIxLDkgQEAKICAgICpjZnNpX21QIHRvIHRoZSBj
ZnNpX20gcG9pbnRlciBpbiB0aGF0IERlYnVnSW5mbydzIGNmc2lfbV9wb29sLgogCiAgICBJZiBu
b3QgZm91bmQsIHNldCAqZGlQIHRvIChEZWJ1Z0luZm8qKTEgYW5kICpjZnNpX21QIHRvIHplcm8u
CisKKyAgIFBlciBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoaXMgc2VjdGlvbiwgd2Ugb25seSBs
b29rIGZvciBDRkkgaW4KKyAgIERlYnVnSW5mb3MgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZSBjdXJy
ZW50IGVwb2NoLgogKi8KIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKIHN0YXRpYyB2b2lkIGZp
bmRfRGlDZlNJICggLypPVVQqL0RlYnVnSW5mbyoqIGRpUCwgCkBAIC0yNTk0LDEwICsyODM5LDE1
IEBACiAKICAgIGlmICgwKSBWR18ocHJpbnRmKSgic2VhcmNoIGZvciAlI2x4XG4iLCBpcCk7CiAK
KyAgIERpRXBvY2ggY3Vycl9lcG9jaCA9IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CisKICAgIGZv
ciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgewogICAg
ICAgV29yZCBqOwogICAgICAgbl9zdGVwcysrOwogCisgICAgICBpZiAoIWlzX0RJX3ZhbGlkX2Zv
cl9lcG9jaChkaSwgY3Vycl9lcG9jaCkpCisgICAgICAgICBjb250aW51ZTsKKwogICAgICAgLyog
VXNlIHRoZSBwZXItRGVidWdJbmZvIHN1bW1hcnkgYWRkcmVzcyByYW5nZXMgdG8gc2tpcAogICAg
ICAgICAgaW5hcHBsaWNhYmxlIERlYnVnSW5mb3MgcXVpY2tseS4gKi8KICAgICAgIGlmIChkaS0+
Y2ZzaV91c2VkID09IDApCkBAIC0yNjA1LDYgKzI4NTUsMTEgQEAKICAgICAgIGlmIChpcCA8IGRp
LT5jZnNpX21pbmF2bWEgfHwgaXAgPiBkaS0+Y2ZzaV9tYXhhdm1hKQogICAgICAgICAgY29udGlu
dWU7CiAKKyAgICAgIC8vIFRoaXMgZGkgbXVzdCBiZSBhY3RpdmUgKGJlY2F1c2Ugd2UgaGF2ZSBl
eHBsaWNpdGx5IGNob3NlbiBub3QgdG8KKyAgICAgIC8vIGFsbG93IHVud2luZGluZyBzdGFja3Mg
dGhhdCBwZXJ0YWluIHRvIHNvbWUgcGFzdCBlcG9jaCkuICBJdCBjYW4ndAorICAgICAgLy8gYmUg
YXJjaGl2ZWQgb3Igbm90LXlldC1hY3RpdmUuCisgICAgICB2Z19hc3NlcnQoaXNfRGVidWdJbmZv
X2FjdGl2ZShkaSkpOworCiAgICAgICAvKiBJdCBtaWdodCBiZSBpbiB0aGlzIERlYnVnSW5mby4g
IFNlYXJjaCBpdC4gKi8KICAgICAgIGogPSBNTF8oc2VhcmNoX29uZV9jZml0YWIpKCBkaSwgaXAg
KTsKICAgICAgIHZnX2Fzc2VydChqID49IC0xICYmIGogPCAoV29yZClkaS0+Y2ZzaV91c2VkKTsK
QEAgLTMwMzIsNiArMzI4Nyw3IEBACiBCb29sIFZHXyh1c2VfRlBPX2luZm8pICggLypNT0QqL0Fk
ZHIqIGlwUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKk1PRCovQWRkciogc3BQLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qTU9EKi9BZGRyKiBmcFAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgRGlFcG9jaCBlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIG1pbl9h
Y2Nlc3NpYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgbWF4X2FjY2Vzc2libGUg
KQogewpAQCAtMzA0OSw2ICszMzA1LDkgQEAKICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsg
ZGkgIT0gTlVMTDsgZGkgPSBkaS0+bmV4dCkgewogICAgICAgbl9zdGVwcysrOwogCisgICAgICBp
ZiAoIWlzX0RJX3ZhbGlkX2Zvcl9lcG9jaChkaSwgZXApKQorICAgICAgICAgY29udGludWU7CisK
ICAgICAgIC8qIFVzZSB0aGUgcGVyLURlYnVnSW5mbyBzdW1tYXJ5IGFkZHJlc3MgcmFuZ2VzIHRv
IHNraXAKICAgICAgICAgIGluYXBwbGljYWJsZSBEZWJ1Z0luZm9zIHF1aWNrbHkuICovCiAgICAg
ICBpZiAoZGktPmZwbyA9PSBOVUxMKQpAQCAtMzU1Miw2ICszODExLDcgQEAKIHN0YXRpYyAKIEJv
b2wgY29uc2lkZXJfdmFyc19pbl9mcmFtZSAoIC8qTU9EKi9YQXJyYXkqIC8qIG9mIEhDaGFyICov
IGRuYW1lMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qTU9EKi9YQXJyYXkqIC8q
IG9mIEhDaGFyICovIGRuYW1lMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpRXBv
Y2ggZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIGRhdGFfYWRkciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgaXAsIEFkZHIgc3AsIEFkZHIgZnAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaG93biB0byB1c2VyOiAqLwpAQCAtMzU3
MCw2ICszODMwLDggQEAKICAgIC8qIGZpcnN0LCBmaW5kIHRoZSBEZWJ1Z0luZm8gdGhhdCBwZXJ0
YWlucyB0byAnaXAnLiAqLwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaTsgZGkgPSBk
aS0+bmV4dCkgewogICAgICAgbl9zdGVwcysrOworICAgICAgaWYgKCFpc19ESV92YWxpZF9mb3Jf
ZXBvY2goZGksIGVwKSkKKyAgICAgICAgIGNvbnRpbnVlOwogICAgICAgLyogdGV4dCBzZWdtZW50
IG1pc3Npbmc/IHVubGlrZWx5LCBidXQgaGFuZGxlIGl0IC4uICovCiAgICAgICBpZiAoIWRpLT50
ZXh0X3ByZXNlbnQgfHwgZGktPnRleHRfc2l6ZSA9PSAwKQogICAgICAgICAgY29udGludWU7CkBA
IC0zNjg3LDcgKzM5NDksNyBAQAogQm9vbCBWR18oZ2V0X2RhdGFfZGVzY3JpcHRpb24pKCAKICAg
ICAgICAgLypNT0QqLyBYQXJyYXkqIC8qIG9mIEhDaGFyICovIGRuYW1lMSwKICAgICAgICAgLypN
T0QqLyBYQXJyYXkqIC8qIG9mIEhDaGFyICovIGRuYW1lMiwKLSAgICAgICAgQWRkciBkYXRhX2Fk
ZHIKKyAgICAgICAgRGlFcG9jaCBlcCwgQWRkciBkYXRhX2FkZHIKICAgICAgKQogewogIyAgZGVm
aW5lIE5fRlJBTUVTIDgKQEAgLTM4MDcsNyArNDA2OSw3IEBACiAgICB2Z19hc3NlcnQobl9mcmFt
ZXMgPj0gMCAmJiBuX2ZyYW1lcyA8PSBOX0ZSQU1FUyk7CiAgICBmb3IgKGogPSAwOyBqIDwgbl9m
cmFtZXM7IGorKykgewogICAgICAgaWYgKGNvbnNpZGVyX3ZhcnNfaW5fZnJhbWUoIGRuYW1lMSwg
ZG5hbWUyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYWRkciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcCwgZGF0YV9hZGRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlwc1tqXSwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3BzW2pdLCBmcHNbal0sIHRpZCwgaiApKSB7CiAgICAgICAgICB6dGVybV9Y
QSggZG5hbWUxICk7CkBAIC0zODM0LDcgKzQwOTYsNyBAQAogICAgICAgICAgZXF1aXZhbGVudCBr
bHVkZ2UuICovCiAgICAgICBpZiAoaiA+IDAgLyogdGhpcyBpcyBhIG5vbi1pbm5lcm1vc3QgZnJh
bWUgKi8KICAgICAgICAgICAmJiBjb25zaWRlcl92YXJzX2luX2ZyYW1lKCBkbmFtZTEsIGRuYW1l
MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2FkZHIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAsIGRhdGFfYWRkciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHNbal0gKyAxLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcHNbal0sIGZwc1tqXSwgdGlkLCBqICkpIHsKICAgICAg
ICAgIHp0ZXJtX1hBKCBkbmFtZTEgKTsKSW5kZXg6IGNvcmVncmluZC9tX2RlYnVnaW5mby9wcml2
X3N0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vcHJpdl9zdG9y
YWdlLmgJKHJldmlzaW9uIDE2NDYxKQorKysgY29yZWdyaW5kL21fZGVidWdpbmZvL3ByaXZfc3Rv
cmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODgsNiArNTg4LDM2IEBACiAgICAgICBzdHJ1Y3R1
cmUgaXMgYWxsb2NhdGVkLiAqLwogICAgVUxvbmcgaGFuZGxlOwogCisgICAvKiBUaGUgcmFuZ2Ug
b2YgZXBvY2hzIGZvciB3aGljaCB0aGlzIERlYnVnSW5mbyBpcyB2YWxpZC4gIFRoZXNlIGFsc28K
KyAgICAgIGRpdmlkZSB0aGUgRGVidWdJbmZvJ3MgbGlmZXRpbWUgaW50byB0aHJlZSBwYXJ0czoK
KworICAgICAgKDEpIEFsbG9jYXRlZDogYnV0IHdpdGggb25seSAuZnNtIGhvbGRpbmcgdXNlZnVs
IGluZm8gLS0gaW4KKyAgICAgICAgICBwYXJ0aWN1bGFyLCBub3QgeWV0IGhvbGRpbmcgYW55IGRl
YnVnIGluZm8uCisgICAgICAgICAgLmZpcnN0X2Vwb2NoID09IERlYnVnSW5mb0Vwb2NoX0lOVkFM
SUQKKyAgICAgICAgICAubGFzdF9lcG9jaCAgPT0gRGVidWdJbmZvRXBvY2hfSU5WQUxJRAorCisg
ICAgICAoMikgQWN0aXZlOiBjb250YWluaW5nIGRlYnVnIGluZm8sIGFuZCBjdXJyZW50LgorICAg
ICAgICAgIC5maXJzdF9lcG9jaCAhPSBEZWJ1Z0luZm9FcG9jaF9JTlZBTElECisgICAgICAgICAg
Lmxhc3RfZXBvY2ggID09IERlYnVnSW5mb0Vwb2NoX0lOVkFMSUQKKworICAgICAgKDMpIEFyY2hp
dmVkOiBjb250YWluaW5nIGRlYnVnIGluZm8sIGJ1dCBubyBsb25nZXIgY3VycmVudC4KKyAgICAg
ICAgICAuZmlyc3RfZXBvY2ggIT0gRGVidWdJbmZvRXBvY2hfSU5WQUxJRAorICAgICAgICAgIC5s
YXN0X2Vwb2NoICAhPSBEZWJ1Z0luZm9FcG9jaF9JTlZBTElECisKKyAgICAgIFN0YXRlICgyKSBj
b3JyZXNwb25kcyB0byBhbiBvYmplY3Qgd2hpY2ggaXMgY3VycmVudGx5IG1hcHBlZC4gIFdoZW4K
KyAgICAgIHRoZSBvYmplY3QgaXMgdW5tYXBwZWQsIHdoYXQgaGFwcGVucyBkZXBlbmRzIG9uIHRo
ZSBzZXR0aW5nIG9mCisgICAgICAtLWtlZXAtZGVidWdpbmZvOgorICAgICAgCisgICAgICAqIHdo
ZW4gPW5vLCB0aGUgRGVidWdJbmZvIGlzIHJlbW92ZWQgZnJvbSBkZWJ1Z0luZm9fbGlzdCBhbmQK
KyAgICAgICAgZGVsZXRlZC4KKworICAgICAgKiB3aGVuID15ZXMsIHRoZSBEZWJ1Z0luZm8gaXMg
cmV0YWluZWQgaW4gZGVidWdJbmZvX2xpc3QsIGJ1dCBpdHMKKyAgICAgICAgLmxhc3RfZXBvY2gg
ZmllbGQgaXMgZmlsbGVkIGluLCBhbmQgY3VycmVudF9lcG9jaCBpcyBhZHZhbmNlZC4gIFRoaXMK
KyAgICAgICAgZWZmZWN0aXZlbHkgbW92ZXMgdGhlIERlYnVnSW5mbyBpbnRvIHN0YXRlICgzKS4K
KyAgICovCisgICBEaUVwb2NoIGZpcnN0X2Vwb2NoOworICAgRGlFcG9jaCBsYXN0X2Vwb2NoOwor
CiAgICAvKiBVc2VkIGZvciBkZWJ1Z2dpbmcgb25seSAtIGluZGljYXRlIHdoYXQgc3R1ZmYgdG8g
ZHVtcCB3aGlsc3QKICAgICAgIHJlYWRpbmcgc3R1ZmYgaW50byB0aGUgc2VnaW5mby4gIEFyZSBj
b21wdXRlZCBhcyBlYXJseSBpbiB0aGUKICAgICAgIGxpZmV0aW1lIG9mIHRoZSBEZWJ1Z0luZm8g
YXMgcG9zc2libGUgLS0gYXQgdGhlIHBvaW50IHdoZW4gaXQgaXMKSW5kZXg6IGNvcmVncmluZC9t
X2Vycm9ybWdyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZXJyb3JtZ3IuYwkocmV2aXNp
b24gMTY0NjEpCisrKyBjb3JlZ3JpbmQvbV9lcnJvcm1nci5jCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsMTYgKzEzNiwxNiBAQAogICAgSW50IGNvdW50OwogCiAgICAvLyBUaGUgdG9vbC1zcGVjaWZp
YyBwYXJ0Ci0gICBUaHJlYWRJZCB0aWQ7ICAgICAgICAgICAvLyBJbml0aWFsaXNlZCBieSBjb3Jl
Ci0gICBFeGVDb250ZXh0KiB3aGVyZTsgICAgICAvLyBJbml0aWFsaXNlZCBieSBjb3JlCi0gICBF
cnJvcktpbmQgZWtpbmQ7ICAgICAgICAvLyBVc2VkIGJ5IEFMTC4gIE11c3QgYmUgaW4gdGhlIHJh
bmdlICgwLi4pCi0gICBBZGRyIGFkZHI7ICAgICAgICAgICAgICAvLyBVc2VkIGZyZXF1ZW50bHkK
LSAgIGNvbnN0IEhDaGFyKiBzdHJpbmc7ICAgIC8vIFVzZWQgZnJlcXVlbnRseQotICAgdm9pZCog
ZXh0cmE7ICAgICAgICAgICAgLy8gRm9yIGFueSB0b29sLXNwZWNpZmljIGV4dHJhcworICAgVGhy
ZWFkSWQgdGlkOyAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzZWQgYnkgY29yZQorICAgRXhlQ29u
dGV4dEFuZEVwb2NoIHdoZXJlOyAgLy8gSW5pdGlhbGlzZWQgYnkgY29yZQorICAgRXJyb3JLaW5k
IGVraW5kOyAgICAgICAgICAgLy8gVXNlZCBieSBBTEwuICBNdXN0IGJlIGluIHRoZSByYW5nZSAo
MC4uKQorICAgQWRkciBhZGRyOyAgICAgICAgICAgICAgICAgLy8gVXNlZCBmcmVxdWVudGx5Cisg
ICBjb25zdCBIQ2hhciogc3RyaW5nOyAgICAgICAvLyBVc2VkIGZyZXF1ZW50bHkKKyAgIHZvaWQq
IGV4dHJhOyAgICAgICAgICAgICAgIC8vIEZvciBhbnkgdG9vbC1zcGVjaWZpYyBleHRyYXMKIH07
CiAKIAotRXhlQ29udGV4dCogVkdfKGdldF9lcnJvcl93aGVyZSkgKCBjb25zdCBFcnJvciogZXJy
ICkKK0V4ZUNvbnRleHRBbmRFcG9jaCBWR18oZ2V0X2Vycm9yX3doZXJlKSAoIGNvbnN0IEVycm9y
KiBlcnIgKQogewogICAgcmV0dXJuIGVyci0+d2hlcmU7CiB9CkBAIC0yOTMsNyArMjkzLDEwIEBA
CiB7CiAgICBpZiAoZTEtPmVraW5kICE9IGUyLT5la2luZCkgCiAgICAgICByZXR1cm4gRmFsc2U7
Ci0gICBpZiAoIVZHXyhlcV9FeGVDb250ZXh0KShyZXMsIGUxLT53aGVyZSwgZTItPndoZXJlKSkK
KyAgIC8vIFRoaXMgY29tcGFyaXNvbiBpZ25vcmVzIHRoZSBkZWJ1Z2luZm8gZXBvY2guICBSZXN1
bHQgaXMgdGhhdCB3ZQorICAgLy8gY291bGQgY29uY2x1ZGUgdGhpcyBlcnJvciBpcyB0aGUgc2Ft
ZSBhcyBvbmUgZnJvbSBzb21lIG90aGVyIGVwb2NoLgorICAgLy8gSSBkb24ndCB0aGluayB0aGF0
J3MgYSBiaWcgZGVhbCBpbiBwcmFjdGljZS4KKyAgIGlmICghVkdfKGVxX0V4ZUNvbnRleHQpKHJl
cywgZTEtPndoZXJlLmVjLCBlMi0+d2hlcmUuZWMpKQogICAgICAgcmV0dXJuIEZhbHNlOwogCiAg
ICBzd2l0Y2ggKGUxLT5la2luZCkgewpAQCAtMzIxLDE1ICszMjQsMTUgQEAKICovCiAjZGVmaW5l
IEVSUlRYVF9MRU4gICA0MDk2CiAKLXN0YXRpYyB2b2lkIHByaW50U3VwcEZvcklwX1hNTChVSW50
IG4sIEFkZHIgaXAsIHZvaWQqIHV1X29wYXF1ZSkKK3N0YXRpYyB2b2lkIHByaW50U3VwcEZvcklw
X1hNTChVSW50IG4sIERpRXBvY2ggZXAsIEFkZHIgaXAsIHZvaWQqIHV1X29wYXF1ZSkKIHsKICAg
IGNvbnN0IEhDaGFyICpidWY7Ci0gICBJbmxJUEN1cnNvciogaWlwYyA9IFZHXyhuZXdfSUlQQyko
aXApOworICAgSW5sSVBDdXJzb3IqIGlpcGMgPSBWR18obmV3X0lJUEMpKGVwLCBpcCk7CiAgICBk
byB7Ci0gICAgICBpZiAoIFZHXyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKGlwLCAmYnVm
LCBpaXBjKSApIHsKKyAgICAgIGlmICggVkdfKGdldF9mbm5hbWVfbm9fY3h4X2RlbWFuZ2xlKSAo
ZXAsIGlwLCAmYnVmLCBpaXBjKSApIHsKICAgICAgICAgIFZHXyhwcmludGZfeG1sKSgiICAgIDxz
ZnJhbWU+IDxmdW4+JXBTPC9mdW4+IDwvc2ZyYW1lPlxuIiwgYnVmKTsKICAgICAgIH0gZWxzZQot
ICAgICAgaWYgKCBWR18oZ2V0X29iam5hbWUpKGlwLCAmYnVmKSApIHsKKyAgICAgIGlmICggVkdf
KGdldF9vYmpuYW1lKShlcCwgaXAsICZidWYpICkgewogICAgICAgICAgVkdfKHByaW50Zl94bWwp
KCIgICAgPHNmcmFtZT4gPG9iaj4lcFM8L29iaj4gPC9zZnJhbWU+XG4iLCBidWYpOwogICAgICAg
fSBlbHNlIHsKICAgICAgICAgIFZHXyhwcmludGZfeG1sKSgiICAgIDxzZnJhbWU+IDxvYmo+Kjwv
b2JqPiA8L3NmcmFtZT5cbiIpOwpAQCAtMzM4LDE2ICszNDEsMTYgQEAKICAgIFZHXyhkZWxldGVf
SUlQQykoaWlwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50U3VwcEZvcklwX25vblhNTChVSW50
IG4sIEFkZHIgaXAsIHZvaWQqIHRleHRWKQorc3RhdGljIHZvaWQgcHJpbnRTdXBwRm9ySXBfbm9u
WE1MKFVJbnQgbiwgRGlFcG9jaCBlcCwgQWRkciBpcCwgdm9pZCogdGV4dFYpCiB7CiAgICBjb25z
dCBIQ2hhciAqYnVmOwogICAgWEFycmF5KiAvKiBvZiBIQ2hhciAqLyB0ZXh0ID0gKFhBcnJheSop
dGV4dFY7Ci0gICBJbmxJUEN1cnNvciogaWlwYyA9IFZHXyhuZXdfSUlQQykoaXApOworICAgSW5s
SVBDdXJzb3IqIGlpcGMgPSBWR18obmV3X0lJUEMpKGVwLCBpcCk7CiAgICBkbyB7Ci0gICAgICBp
ZiAoIFZHXyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKGlwLCAmYnVmLCBpaXBjKSApIHsK
KyAgICAgIGlmICggVkdfKGdldF9mbm5hbWVfbm9fY3h4X2RlbWFuZ2xlKSAoZXAsIGlwLCAmYnVm
LCBpaXBjKSApIHsKICAgICAgICAgIFZHXyh4YXByaW50ZikodGV4dCwgIiAgIGZ1bjolc1xuIiwg
YnVmKTsKICAgICAgIH0gZWxzZQotICAgICAgaWYgKCBWR18oZ2V0X29iam5hbWUpKGlwLCAmYnVm
KSApIHsKKyAgICAgIGlmICggVkdfKGdldF9vYmpuYW1lKShlcCwgaXAsICZidWYpICkgewogICAg
ICAgICAgVkdfKHhhcHJpbnRmKSh0ZXh0LCAiICAgb2JqOiVzXG4iLCBidWYpOwogICAgICAgfSBl
bHNlIHsKICAgICAgICAgIFZHXyh4YXByaW50ZikodGV4dCwgIiAgIG9iajoqXG4iKTsKQEAgLTM2
MSw3ICszNjQsNyBAQAogc3RhdGljIHZvaWQgZ2VuX3N1cHByZXNzaW9uKGNvbnN0IEVycm9yKiBl
cnIpCiB7CiAgICBjb25zdCBIQ2hhciogbmFtZTsKLSAgIEV4ZUNvbnRleHQqIGVjOworICAgRXhl
Q29udGV4dEFuZEVwb2NoIGVjZTsKICAgIFhBcnJheSogLyogSENoYXIgKi8gdGV4dDsKIAogICAg
Y29uc3QgSENoYXIqIGR1bW15X25hbWUgPSAiaW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJl
IjsKQEAgLTM2OCw4ICszNzEsOCBAQAogCiAgICB2Z19hc3NlcnQoZXJyKTsKIAotICAgZWMgPSBW
R18oZ2V0X2Vycm9yX3doZXJlKShlcnIpOwotICAgdmdfYXNzZXJ0KGVjKTsKKyAgIGVjZSA9IFZH
XyhnZXRfZXJyb3Jfd2hlcmUpKGVycik7CisgICB2Z19hc3NlcnQoZWNlLmVjKTsKIAogICAgbmFt
ZSA9IFZHX1RESUNUX0NBTEwodG9vbF9nZXRfZXJyb3JfbmFtZSwgZXJyKTsKICAgIGlmIChOVUxM
ID09IG5hbWUpIHsKQEAgLTQwOCwxMiArNDExLDEyIEBACiAgICAgICBWR18oeGFwcmludGYpKHRl
eHQsICIgICAlc1xuIiwgeHRyYSk7CiAKICAgIC8vIFByaW50IHN0YWNrIHRyYWNlIGVsZW1lbnRz
Ci0gICBVSW50IG5faXBzID0gVkdfKGdldF9FeGVDb250ZXh0X25faXBzKShlYyk7CisgICBVSW50
IG5faXBzID0gVkdfKGdldF9FeGVDb250ZXh0X25faXBzKShlY2UuZWMpOwogICAgdmdfYXNzZXJ0
KG5faXBzID4gMCk7CiAgICB2Z19hc3NlcnQobl9pcHMgPD0gVkdfREVFUEVTVF9CQUNLVFJBQ0Up
OwogICAgVkdfKGFwcGx5X1N0YWNrVHJhY2UpKHByaW50U3VwcEZvcklwX25vblhNTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhn
ZXRfRXhlQ29udGV4dF9TdGFja1RyYWNlKShlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dCwgZWNlLmVwb2NoLAorICAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhnZXRfRXhlQ29u
dGV4dF9TdGFja1RyYWNlKShlY2UuZWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5faXBz
KTsKIAogICAgVkdfKHhhcHJpbnRmKSh0ZXh0LCAifVxuIik7CkBAIC00NDEsOSArNDQ0LDkgQEAK
IAogICAgICAgLy8gUHJpbnQgc3RhY2sgdHJhY2UgZWxlbWVudHMKICAgICAgIFZHXyhhcHBseV9T
dGFja1RyYWNlKShwcmludFN1cHBGb3JJcF9YTUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWR18oZ2V0X0V4ZUNvbnRleHRf
U3RhY2tUcmFjZSkoZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhnZXRfRXhl
Q29udGV4dF9uX2lwcykoZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBl
Y2UuZXBvY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGdldF9FeGVDb250ZXh0
X1N0YWNrVHJhY2UpKGVjZS5lYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGdl
dF9FeGVDb250ZXh0X25faXBzKShlY2UuZWMpKTsKIAogICAgICAgLy8gQW5kIG5vdyB0aGUgY2Rh
dGEgYml0CiAgICAgICAvLyBYWFggRklYTUUhICBwcm9wZXJseSBoYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgdGhlIHJhdyB0ZXh0CkBAIC02MzcsNyArNjQwLDcgQEAKIC8qIENvbnN0cnVjdCBhbiBlcnJv
ciAqLwogc3RhdGljCiB2b2lkIGNvbnN0cnVjdF9lcnJvciAoIEVycm9yKiBlcnIsIFRocmVhZElk
IHRpZCwgRXJyb3JLaW5kIGVraW5kLCBBZGRyIGEsCi0gICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEhDaGFyKiBzLCB2b2lkKiBleHRyYSwgRXhlQ29udGV4dCogd2hlcmUgKQorICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBIQ2hhciogcywgdm9pZCogZXh0cmEsIEV4ZUNvbnRleHRBbmRF
cG9jaCB3aGVyZSApCiB7CiAgICAvKiBETyBOT1QgTUFLRSB1bmlxdWVfY291bnRlciBOT04tU1RB
VElDICovCiAgICBzdGF0aWMgVUludCB1bmlxdWVfY291bnRlciA9IDA7CkBAIC02NTAsMTAgKzY1
Myw3IEBACiAgICBlcnItPnN1cHAgICAgID0gTlVMTDsKICAgIGVyci0+Y291bnQgICAgPSAxOwog
ICAgZXJyLT50aWQgICAgICA9IHRpZDsKLSAgIGlmIChOVUxMID09IHdoZXJlKQotICAgICBlcnIt
PndoZXJlID0gVkdfKHJlY29yZF9FeGVDb250ZXh0KSggdGlkLCAwICk7Ci0gICBlbHNlCi0gICAg
ICBlcnItPndoZXJlID0gd2hlcmU7CisgICBlcnItPndoZXJlICAgID0gd2hlcmU7CiAKICAgIC8q
IFRvb2wtcmVsZXZhbnQgcGFydHMgKi8KICAgIGVyci0+ZWtpbmQgID0gZWtpbmQ7CkBAIC03NDQs
NyArNzQ0LDEwIEBACiAgICB9CiAKICAgIC8qIEJ1aWxkIG91cnNlbHZlcyB0aGUgZXJyb3IgKi8K
LSAgIGNvbnN0cnVjdF9lcnJvciAoICZlcnIsIHRpZCwgZWtpbmQsIGEsIHMsIGV4dHJhLCBOVUxM
ICk7CisgICB7IEV4ZUNvbnRleHRBbmRFcG9jaCBlY2UKKyAgICAgICAgPSBWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoIFZHXyhyZWNvcmRfRXhlQ29udGV4dCkoIHRpZCwgMCApICk7Cisg
ICAgICBjb25zdHJ1Y3RfZXJyb3IgKCAmZXJyLCB0aWQsIGVraW5kLCBhLCBzLCBleHRyYSwgZWNl
ICk7CisgICB9CiAKICAgIC8qIEZpcnN0LCBzZWUgaWYgd2UndmUgZ290IGFuIGVycm9yIHJlY29y
ZCBtYXRjaGluZyB0aGlzIG9uZS4gKi8KICAgIGVtX2Vycmxpc3Rfc2VhcmNoZXMrKzsKQEAgLTg1
Myw3ICs4NTYsOCBAQAogICAgQm9vbCAnY291bnRfZXJyb3InIGRpY3RhdGVzIHdoZXRoZXIgdG8g
Y291bnQgdGhlIGVycm9yIGluIG5fZXJyc19mb3VuZC4KICovCiBCb29sIFZHXyh1bmlxdWVfZXJy
b3IpICggVGhyZWFkSWQgdGlkLCBFcnJvcktpbmQgZWtpbmQsIEFkZHIgYSwgY29uc3QgSENoYXIq
IHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogZXh0cmEsIEV4ZUNvbnRleHQqIHdo
ZXJlLCBCb29sIHByaW50X2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGV4
dHJhLCBFeGVDb250ZXh0QW5kRXBvY2ggd2hlcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Qm9vbCBwcmludF9lcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGFsbG93X2Ri
X2F0dGFjaCwgQm9vbCBjb3VudF9lcnJvciApCiB7CiAgICBFcnJvciBlcnI7CkBAIC0xMDE2LDcg
KzEwMjAsNyBAQAogICAgICAgdmdfYXNzZXJ0KCEgeG1sKTsKIAogICAgICAgaWYgKChpKzEgPT0g
VkdfKGNsb19kdW1wX2Vycm9yKSkpIHsKLSAgICAgICAgIFN0YWNrVHJhY2UgaXBzID0gVkdfKGdl
dF9FeGVDb250ZXh0X1N0YWNrVHJhY2UpKHBfbWluLT53aGVyZSk7CisgICAgICAgICBTdGFja1Ry
YWNlIGlwcyA9IFZHXyhnZXRfRXhlQ29udGV4dF9TdGFja1RyYWNlKShwX21pbi0+d2hlcmUuZWMp
OwogICAgICAgICAgVkdfKHRyYW5zbGF0ZSkgKCAwIC8qIGR1bW15IFRocmVhZElkOyBpcnJlbGV2
YW50IGR1ZSB0byBkZWJ1Z2dpbmcqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBzWzBd
LCAvKmRlYnVnZ2luZyovVHJ1ZSwgMHhGRS8qdmVyYm9zaXR5Ki8sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qYmJzX2RvbmUqLzAsCkBAIC0xNTAwLDYgKzE1MDQsNyBAQAogICAgYWxsb2Nh
dGlvbnMgYW5kIHRoZSBuciBvZiBkZWJ1Z2luZm8gc2VhcmNoLiAqLwogdHlwZWRlZgogICAgc3Ry
dWN0IHsKKyAgICAgIERpRXBvY2ggZXBvY2g7ICAvLyB1c2VkIHRvIGludGVycHJldCAuaXBzCiAg
ICAgICBTdGFja1RyYWNlIGlwczsgLy8gc3RhY2sgdHJhY2Ugd2UgYXJlIGxhemlseSBjb21wbGV0
aW5nLgogICAgICAgVVdvcmQgbl9pcHM7IC8vIG5yIG9mIGVsZW1lbnRzIGluIGlwcy4KIApAQCAt
MTU5NSw5ICsxNjAwLDExIEBACiAgICAgICAgICAgICAgICAgICAgc3UtPnNuYW1lLAogICAgICAg
ICAgICAgICAgICAgIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIHN1LT5zbmFtZV9saW5l
bm8pOwotICAgICAgfSBlbHNlCisgICAgICB9IGVsc2UgewogICAgICAgICAgVkdfKGRtc2cpKCJl
cnJvcm1nciBtYXRjaGluZyBlbmQgbm8gc3VwcHJlc3Npb24gbWF0Y2hlZDpcbiIpOwotICAgICAg
VkdfKHBwX1N0YWNrVHJhY2UpIChpcDJmby0+aXBzLCBpcDJmby0+bl9pcHMpOworICAgICAgfQor
ICAgICAgLy8gSlJTIDI3IEp1bHkgMjAxNzogaXMgaXQgT0sgdG8gdXNlIHRoZSBjdXJyZW50IGVw
b2NoIGhlcmU/CisgICAgICBWR18ocHBfU3RhY2tUcmFjZSkgKGlwMmZvLT5pcHMsIGlwMmZvLT5u
X2lwcywgaXAyZm8tPmVwb2NoKTsKICAgICAgIHBwX2lwMmZvKGlwMmZvKTsKICAgIH0KICAgIGlm
IChpcDJmby0+bl9vZmZzZXRzX3Blcl9pcCkgVkdfKGZyZWUpKGlwMmZvLT5uX29mZnNldHNfcGVy
X2lwKTsKQEAgLTE2NjAsNyArMTY2Nyw4IEBACiAgICAgICAgICAvLyB1cCBjb21wYXJpbmcgIm1h
bGxvYyIgaW4gdGhlIHN1cHByZXNzaW9uIGFnYWluc3QKICAgICAgICAgIC8vICJfdmdyWlVfbGli
Y1pkc29aYV9tYWxsb2MiIGluIHRoZSBiYWNrdHJhY2UsIGFuZCB0aGUKICAgICAgICAgIC8vIHR3
byBvZiB0aGVtIG5lZWQgdG8gYmUgbWFkZSB0byBtYXRjaC4KLSAgICAgICAgIGlmICghVkdfKGdl
dF9mbm5hbWVfbm9fY3h4X2RlbWFuZ2xlKShpcDJmby0+aXBzW2l4SW5wdXRdLAorICAgICAgICAg
aWYgKCFWR18oZ2V0X2ZubmFtZV9ub19jeHhfZGVtYW5nbGUpKGlwMmZvLT5lcG9jaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcDJmby0+aXBzW2l4SW5w
dXRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWxs
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkp
CiAgICAgICAgICAgICBjYWxsZXIgPSAiPz8/IjsKQEAgLTE2ODEsNyArMTY4OSw3IEBACiAgICAg
ICAgICAgICBsYXN0X2V4cGFuZF9wb3NfaXBzIGlzIHRoZSBsYXN0IG9mZnNldCBpbiBmdW4vb2Jq
IHdoZXJlCiAgICAgICAgICAgICBpcHNbcG9zX2lwc10gaGFzIGJlZW4gZXhwYW5kZWQuICovCiAK
LSAgICAgICAgIGlmICghVkdfKGdldF9vYmpuYW1lKShpcDJmby0+aXBzW3Bvc19pcHNdLCAmY2Fs
bGVyKSkKKyAgICAgICAgIGlmICghVkdfKGdldF9vYmpuYW1lKShpcDJmby0+ZXBvY2gsIGlwMmZv
LT5pcHNbcG9zX2lwc10sICZjYWxsZXIpKQogICAgICAgICAgICAgY2FsbGVyID0gIj8/PyI7CiAK
ICAgICAgICAgIC8vIEhhdmUgYWxsIGlubGluZWQgY2FsbHMgcG9pbnRpbmcgYXQgdGhpcyBvYmpl
Y3QgbmFtZQpAQCAtMTc1MSw3ICsxNzU5LDcgQEAKICAgICAgICAgIGNvbnN0IEFkZHIgSVAgPSBp
cDJmby0+aXBzW2lwMmZvLT5uX2lwc19leHBhbmRlZF07CiAgICAgICAgICBJbmxJUEN1cnNvciAq
aWlwYzsKIAotICAgICAgICAgaWlwYyA9IFZHXyhuZXdfSUlQQykoSVApOworICAgICAgICAgaWlw
YyA9IFZHXyhuZXdfSUlQQykoaXAyZm8tPmVwb2NoLCBJUCk7CiAgICAgICAgICAvLyBUaGUgb25s
eSB0aGluZyB3ZSByZWFsbHkgbmVlZCBpcyB0aGUgbnIgb2YgaW5saW5lZCBmbiBjYWxscwogICAg
ICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgSVAgd2Ugd2lsbCBleHBhbmQuCiAgICAgICAg
ICAvLyBIb3dldmVyLCBjb21wdXRpbmcgdGhpcyBpcyBtb3N0bHkgdGhlIHNhbWUgYXMgZmluZGlu
ZwpAQCAtMTc2MCw3ICsxNzY4LDcgQEAKICAgICAgICAgICAgIGNvbnN0IEhDaGFyICpjYWxsZXI7
CiAgICAgICAgICAgICBncm93X29mZnNldHMoaXAyZm8sIGlwMmZvLT5uX2V4cGFuZGVkKzEpOwog
ICAgICAgICAgICAgaXAyZm8tPmZ1bl9vZmZzZXRzW2lwMmZvLT5uX2V4cGFuZGVkXSA9IGlwMmZv
LT5uYW1lc19mcmVlOwotICAgICAgICAgICAgaWYgKCFWR18oZ2V0X2ZubmFtZV9ub19jeHhfZGVt
YW5nbGUpKElQLCAKKyAgICAgICAgICAgIGlmICghVkdfKGdldF9mbm5hbWVfbm9fY3h4X2RlbWFu
Z2xlKShpcDJmby0+ZXBvY2gsIElQLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmY2FsbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlpcGMpKQogICAgICAgICAgICAgICAgY2FsbGVyID0gIj8/PyI7
CkBAIC0xNzg4LDE4ICsxNzk2LDE4IEBACiAgICB9CiB9CiAKLXN0YXRpYyBCb29sIGhhdmVJbnB1
dElucEMgKHZvaWQqIGlucHV0Q29tcGxldGVyLCBVV29yZCBpeElucHV0ICkKK3N0YXRpYyBCb29s
IGhhdmVJbnB1dElucEMgKHZvaWQqIGlucHV0Q29tcGxldGVyViwgVVdvcmQgaXhJbnB1dCApCiB7
Ci0gICBJUHRvRnVuT3JPYmpDb21wbGV0ZXIqIGlwMmZvID0gaW5wdXRDb21wbGV0ZXI7CisgICBJ
UHRvRnVuT3JPYmpDb21wbGV0ZXIqIGlwMmZvID0gKElQdG9GdW5Pck9iakNvbXBsZXRlciopaW5w
dXRDb21wbGV0ZXJWOwogICAgZXhwYW5kSW5wdXQoaXAyZm8sIGl4SW5wdXQpOwogICAgcmV0dXJu
IGl4SW5wdXQgPCBpcDJmby0+bl9leHBhbmRlZDsKIH0KIAogc3RhdGljIEJvb2wgc3VwcF9wYXR0
RVFpbnAgKCBjb25zdCB2b2lkKiBzdXBwbG9jViwgY29uc3Qgdm9pZCogYWRkclYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGlucHV0Q29tcGxldGVyLCBVV29yZCBpeElucHV0
ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogaW5wdXRDb21wbGV0ZXJWLCBV
V29yZCBpeElucHV0ICkKIHsKLSAgIGNvbnN0IFN1cHBMb2MqIHN1cHBsb2MgPSBzdXBwbG9jVjsg
LyogUEFUVEVSTiAqLwotICAgSVB0b0Z1bk9yT2JqQ29tcGxldGVyKiBpcDJmbyA9IGlucHV0Q29t
cGxldGVyOworICAgY29uc3QgU3VwcExvYyogc3VwcGxvYyA9IChjb25zdCBTdXBwTG9jKilzdXBw
bG9jVjsgLyogUEFUVEVSTiAqLworICAgSVB0b0Z1bk9yT2JqQ29tcGxldGVyKiBpcDJmbyA9IChJ
UHRvRnVuT3JPYmpDb21wbGV0ZXIqKWlucHV0Q29tcGxldGVyVjsKICAgIEhDaGFyKiBmdW5vYmpf
bmFtZTsgLy8gRnVuIG9yIE9iaiBuYW1lLgogICAgQm9vbCByZXQ7CiAKQEAgLTE5MjYsOCArMTkz
NCw5IEBACiAgICBlbV9zdXBwbGlzdF9zZWFyY2hlcysrOwogCiAgICAvKiBQcmVwYXJlIHRoZSBs
YXp5IGlucHV0IGNvbXBsZXRlci4gKi8KLSAgIGlwMmZvLmlwcyA9IFZHXyhnZXRfRXhlQ29udGV4
dF9TdGFja1RyYWNlKShlcnItPndoZXJlKTsKLSAgIGlwMmZvLm5faXBzID0gVkdfKGdldF9FeGVD
b250ZXh0X25faXBzKShlcnItPndoZXJlKTsKKyAgIGlwMmZvLmVwb2NoID0gZXJyLT53aGVyZS5l
cG9jaDsKKyAgIGlwMmZvLmlwcyA9IFZHXyhnZXRfRXhlQ29udGV4dF9TdGFja1RyYWNlKShlcnIt
PndoZXJlLmVjKTsKKyAgIGlwMmZvLm5faXBzID0gVkdfKGdldF9FeGVDb250ZXh0X25faXBzKShl
cnItPndoZXJlLmVjKTsKICAgIGlwMmZvLm5faXBzX2V4cGFuZGVkID0gMDsKICAgIGlwMmZvLm5f
ZXhwYW5kZWQgPSAwOwogICAgaXAyZm8uc3pfb2Zmc2V0cyA9IDA7CkluZGV4OiBjb3JlZ3JpbmQv
bV9leGVjb250ZXh0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZXhlY29udGV4dC5jCShy
ZXZpc2lvbiAxNjQ2MSkKKysrIGNvcmVncmluZC9tX2V4ZWNvbnRleHQuYwkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBACiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyotLS0gRXhwb3J0ZWQgZnVuY3Rp
b25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0qLworLyotLS0gRXhlQ29u
dGV4dCBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0qLwogLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogCiBzdGF0aWMgRXhlQ29udGV4dCogcmVjb3JkX0V4ZUNvbnRleHRfd3JrMiAoIGNvbnN0
IEFkZHIqIGlwcywgVUludCBuX2lwcyApOwpAQCAtMTY5LDcgKzE2OSw5IEBACiAgICAgICAgICBm
b3IgKGVjID0gZWNfaHRhYltpXTsgZWM7IGVjID0gZWMtPmNoYWluKSB7CiAgICAgICAgICAgICBW
R18obWVzc2FnZSkoVmdfRGVidWdNc2csICIgICBleGVjdHg6IHN0YWNrdHJhY2UgZWN1ICV1IG5f
aXBzICV1XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVjLT5lY3UsIGVjLT5uX2lwcyk7
Ci0gICAgICAgICAgICBWR18ocHBfU3RhY2tUcmFjZSkoIGVjLT5pcHMsIGVjLT5uX2lwcyApOwor
ICAgICAgICAgICAgLy8gRklYTUUgSlJTIDI3IEp1bHkgMjAxNzogaXMgYSBmYWtlIGVwb2NoIGhl
cmUgT0s/CisgICAgICAgICAgICBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsK
KyAgICAgICAgICAgIFZHXyhwcF9TdGFja1RyYWNlKSggZWMtPmlwcywgZWMtPm5faXBzLCBlcCAp
OwogICAgICAgICAgfQogICAgICAgfQogICAgICAgVkdfKG1lc3NhZ2UpKFZnX0RlYnVnTXNnLCAK
QEAgLTIwMiwxMyArMjA0LDYgQEAKIH0KIAogCi0vKiBQcmludCBhbiBFeGVDb250ZXh0LiAqLwot
dm9pZCBWR18ocHBfRXhlQ29udGV4dCkgKCBFeGVDb250ZXh0KiBlYyApCi17Ci0gICBWR18ocHBf
U3RhY2tUcmFjZSkoIGVjLT5pcHMsIGVjLT5uX2lwcyApOwotfQotCi0KIC8qIENvbXBhcmUgdHdv
IEV4ZUNvbnRleHRzLiAgTnVtYmVyIG9mIGNhbGxlcnMgY29uc2lkZXJlZCBkZXBlbmRzIG9uIHJl
cy4gKi8KIEJvb2wgVkdfKGVxX0V4ZUNvbnRleHQpICggVmdSZXMgcmVzLCBjb25zdCBFeGVDb250
ZXh0KiBlMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXhlQ29udGV4dCogZTIg
KQpAQCAtNTQ0LDEyICs1MzksNDcgQEAKICAgIHJldHVybiByZWNvcmRfRXhlQ29udGV4dF93cmsy
KGlwcywgbl9pcHMpOwogfQogCi1FeGVDb250ZXh0KiBWR18obnVsbF9FeGVDb250ZXh0KSAodm9p
ZCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworLyotLS0gRXhlQ29udGV4dEFuZEVwb2NoIGZ1bmN0aW9ucy4gICAgICAg
ICAgICAgICAgICAgICAgICAtLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitFeGVDb250ZXh0QW5kRXBvY2ggVkdf
KHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKCBFeGVDb250ZXh0KiBlYyApCiB7CisgICBFeGVD
b250ZXh0QW5kRXBvY2ggZWNlOworICAgZWNlLmVjICAgID0gZWM7CisgICBlY2UuZXBvY2ggPSBW
R18oY3VycmVudF9EaUVwb2NoKSgpOworICAgcmV0dXJuIGVjZTsKK30KKworRXhlQ29udGV4dEFu
ZEVwb2NoIFZHXyhpbnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCB2b2lkICkKK3sKKyAgIEV4
ZUNvbnRleHRBbmRFcG9jaCBlY2U7CisgICBlY2UuZWMgICAgICA9IE5VTEwvKmludmFsaWQgRXhl
Q29udGV4dCovOworICAgZWNlLmVwb2NoLm4gPSAwLyppbnZhbGlkIGVwb2NoKi87CisgICByZXR1
cm4gZWNlOworfQorCisKK3ZvaWQgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCBFeGVDb250
ZXh0QW5kRXBvY2ggZWNlICkKK3sKKyAgIFZHXyhwcF9TdGFja1RyYWNlKSggZWNlLmVjLT5pcHMs
IGVjZS5lYy0+bl9pcHMsIGVjZS5lcG9jaCApOworfQorCitFeGVDb250ZXh0QW5kRXBvY2ggVkdf
KG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSAoIHZvaWQgKQorewogICAgaW5pdF9FeGVDb250ZXh0
X3N0b3JhZ2UoKTsKLSAgIHJldHVybiBudWxsX0V4ZUNvbnRleHQ7CisgICBFeGVDb250ZXh0QW5k
RXBvY2ggZWNlID0geyBudWxsX0V4ZUNvbnRleHQsIFZHXyhjdXJyZW50X0RpRXBvY2gpKCkgfTsK
KyAgIHJldHVybiBlY2U7CiB9CiAKK0Jvb2wgVkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2No
KSggRXhlQ29udGV4dEFuZEVwb2NoIGVjZSApCit7CisgICBpbml0X0V4ZUNvbnRleHRfc3RvcmFn
ZSgpOworICAgcmV0dXJuIGVjZS5lYyA9PSBudWxsX0V4ZUNvbnRleHQ7Cit9CisKKwogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAvKi0tLSBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9leGVjb250ZXh0LmMgLS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpJbmRleDogY29yZWdy
aW5kL21fZ2Ric2VydmVyL21fZ2Ric2VydmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21f
Z2Ric2VydmVyL21fZ2Ric2VydmVyLmMJKHJldmlzaW9uIDE2NDYxKQorKysgY29yZWdyaW5kL21f
Z2Ric2VydmVyL21fZ2Ric2VydmVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxNCArMTQyLDE3
IEBACiAgICBQdHJkaWZmVCBvZmZzZXQ7CiAgICBpZiAodyA9PSAyKSB3ID0gMDsKIAorICAgLy8g
RklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0
IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworCiAgICBpZiAoaXNfY29kZSkg
ewogICAgICAgY29uc3QgSENoYXIgKm5hbWU7Ci0gICAgICBuYW1lID0gVkdfKGRlc2NyaWJlX0lQ
KSAoYWRkciwgTlVMTCk7CisgICAgICBuYW1lID0gVkdfKGRlc2NyaWJlX0lQKSAoZXAsIGFkZHIs
IE5VTEwpOwogICAgICAgaWYgKGJ1Zlt3XSkgVkdfKGZyZWUpKGJ1Zlt3XSk7CiAgICAgICBidWZb
d10gPSBWR18oc3RyZHVwKSgiZ2Ric2VydmVyIHN5bSIsIG5hbWUpOwogICAgfSBlbHNlIHsKICAg
ICAgIGNvbnN0IEhDaGFyICpuYW1lOwotICAgICAgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQp
IChhZGRyLCAmbmFtZSwgJm9mZnNldCk7CisgICAgICBWR18oZ2V0X2RhdGFzeW1fYW5kX29mZnNl
dCkgKGVwLCBhZGRyLCAmbmFtZSwgJm9mZnNldCk7CiAgICAgICBpZiAoYnVmW3ddKSBWR18oZnJl
ZSkoYnVmW3ddKTsKICAgICAgIGJ1Zlt3XSA9IFZHXyhzdHJkdXApKCJnZGJzZXJ2ZXIgc3ltIiwg
bmFtZSk7CiAgICB9CkluZGV4OiBjb3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvc2VydmVyLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY29yZWdyaW5kL21fZ2Ric2VydmVyL3NlcnZlci5jCShyZXZpc2lvbiAxNjQ2MSkK
KysrIGNvcmVncmluZC9tX2dkYnNlcnZlci9zZXJ2ZXIuYwkod29ya2luZyBjb3B5KQpAQCAtMTk1
LDYgKzE5NSw5IEBACiAgICBpbnQgICBrd2RpZDsKICAgIGludCBpbnRfdmFsdWU7CiAKKyAgIC8v
IEZJWE1FIEpSUyAyOCBKdWx5IDIwMTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25z
dCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKwogICAgdmdfYXNzZXJ0IChp
bml0aWFsX3ZhbGdyaW5kX3Npbmtfc2F2ZWQpOwogCiAgICBzdHJjcHkgKHMsIG1vbik7CkBAIC0z
MzQsNyArMzM3LDcgQEAKICAgICAgICAgIH0KICAgICAgICAgIGlmIChob3N0dmlzaWJpbGl0eSkg
ewogICAgICAgICAgICAgY29uc3QgRGVidWdJbmZvICp0b29sZGkgCi0gICAgICAgICAgICAgICA9
IFZHXyhmaW5kX0RlYnVnSW5mbykgKChBZGRyKWhhbmRsZV9nZGJfdmFsZ3JpbmRfY29tbWFuZCk7
CisgICAgICAgICAgICAgICA9IFZHXyhmaW5kX0RlYnVnSW5mbykgKGVwLCAoQWRkciloYW5kbGVf
Z2RiX3ZhbGdyaW5kX2NvbW1hbmQpOwogICAgICAgICAgICAgLyogTm9ybWFsbHksIHdlIHNob3Vs
ZCBhbHdheXMgZmluZCB0aGUgdG9vbGRpLiBJbiBjYXNlIHdlCiAgICAgICAgICAgICAgICBkbyBu
b3QsIHN1Z2dlc3QgYSAnbGlrZWx5IHNvbWV3aGF0IHdvcmtpbmcnIGFkZHJlc3M6ICovCiAgICAg
ICAgICAgICBjb25zdCBBZGRyIHRvb2xfdGV4dF9zdGFydApAQCAtNDQyLDcgKzQ0NSw3IEBACiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teV9zeiwg
JnNzYXZlcHRyKSkgewogICAgICAgICAgICAgLy8gSWYgdG9vbCBwcm92aWRlcyBsb2NhdGlvbiBp
bmZvcm1hdGlvbiwgdXNlIHRoYXQuCiAgICAgICAgICAgICBpZiAoVkdfKG5lZWRzKS5pbmZvX2xv
Y2F0aW9uKSB7Ci0gICAgICAgICAgICAgICBWR19URElDVF9DQUxMKHRvb2xfaW5mb19sb2NhdGlv
biwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICBWR19URElDVF9DQUxMKHRvb2xfaW5mb19sb2Nh
dGlvbiwgZXAsIGFkZHJlc3MpOwogICAgICAgICAgICAgfSAKICAgICAgICAgICAgIC8vIElmIHRv
b2wgZG9lcyBub3QgcHJvdmlkZSBsb2NhdGlvbiBpbmZvLCB1c2UgdGhlIGNvbW1vbiBvbmUuCiAg
ICAgICAgICAgICAvLyBBbHNvIHVzZSB0aGUgY29tbW9uIHRvIGNvbXBhcmUgd2l0aCB0b29sIHdo
ZW4gZGVidWcgbG9nIGlzIHNldC4KQEAgLTQ0OSw3ICs0NTIsNyBAQAogICAgICAgICAgICAgaWYg
KCFWR18obmVlZHMpLmluZm9fbG9jYXRpb24gfHwgVkdfKGRlYnVnTG9nX2dldExldmVsKSgpID4g
MCApIHsKICAgICAgICAgICAgICAgIEFkZHJJbmZvIGFpOwogICAgICAgICAgICAgICAgYWkudGFn
ID0gQWRkcl9VbmRlc2NyaWJlZDsKLSAgICAgICAgICAgICAgIFZHXyhkZXNjcmliZV9hZGRyKSAo
YWRkcmVzcywgJmFpKTsKKyAgICAgICAgICAgICAgIFZHXyhkZXNjcmliZV9hZGRyKSAoZXAsIGFk
ZHJlc3MsICZhaSk7CiAgICAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm8pIChhZGRyZXNzLCAm
YWkpOwogICAgICAgICAgICAgICAgVkdfKGNsZWFyX2FkZHJpbmZvKSAoJmFpKTsKICAgICAgICAg
ICAgIH0KSW5kZXg6IGNvcmVncmluZC9tX2dkYnNlcnZlci90YXJnZXQuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBjb3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvdGFyZ2V0LmMJKHJldmlzaW9uIDE2NDYxKQorKysgY29y
ZWdyaW5kL21fZ2Ric2VydmVyL3RhcmdldC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5
LDEwIEBACiBzdGF0aWMKIGNvbnN0IEhDaGFyKiBzeW0gKEFkZHIgYWRkcikKIHsKLSAgIHJldHVy
biBWR18oZGVzY3JpYmVfSVApIChhZGRyLCBOVUxMKTsKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5
IDIwMTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdf
KGN1cnJlbnRfRGlFcG9jaCkoKTsKKworICAgcmV0dXJuIFZHXyhkZXNjcmliZV9JUCkgKGVwLCBh
ZGRyLCBOVUxMKTsKIH0KIAogVGhyZWFkSWQgdmdkYl9pbnRlcnJ1cHRlZF90aWQgPSAwOwpJbmRl
eDogY29yZWdyaW5kL21fZ2Ric2VydmVyL3ZhbGdyaW5kLWxvdy1hcm0uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBjb3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvdmFsZ3JpbmQtbG93LWFybS5jCShyZXZpc2lvbiAxNjQ2
MSkKKysrIGNvcmVncmluZC9tX2dkYnNlcnZlci92YWxncmluZC1sb3ctYXJtLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OSw4ICsxNDksMTIgQEAKICAgICAgIC8vIHRoZSBkZWJ1ZyBpbmZvIHdpdGgg
dGhlIGJpdDAgc2V0CiAgICAgICAvLyAod2h5IGNhbid0IGRlYnVnIGluZm8gZG8gdGhhdCBmb3Ig
dXMgPz8/KQogICAgICAgLy8gKHdoeSBpZiB0aGlzIGlzIGEgNCBieXRlcyB0aHVtYiBpbnN0cnVj
dGlvbiA/Pz8pCi0gICAgICBpZiAoVkdfKGdldF9mbm5hbWVfcmF3KSAocGMgfCAxLCAmZm5uYW1l
KSkgewotICAgICAgICAgaWYgKFZHXyhsb29rdXBfc3ltYm9sX1NMT1cpKCAiKiIsIGZubmFtZSwg
JmF2bWFzICkpIHsKKworICAgICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElz
IHRoaXMgY29ycmVjdD8KKyAgICAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVw
b2NoKSgpOworCisgICAgICBpZiAoVkdfKGdldF9mbm5hbWVfcmF3KSAoZXAsIHBjIHwgMSwgJmZu
bmFtZSkpIHsKKyAgICAgICAgIGlmIChWR18obG9va3VwX3N5bWJvbF9TTE9XKSggZXAsICIqIiwg
Zm5uYW1lLCAmYXZtYXMgKSkgewogICAgICAgICAgICAgZGxvZyAoMSwgImZubmFtZSAlcyBsb29r
dXBzeW0gJXAgPT4gJXAgJXMuXG4iLAogICAgICAgICAgICAgICAgICAgZm5uYW1lLCBDMnYoYXZt
YXMubWFpbiksIEMydihwYyksCiAgICAgICAgICAgICAgICAgICAoYXZtYXMubWFpbiAmIDEgPyAi
dGh1bWIiIDogImFybSIpKTsKSW5kZXg6IGNvcmVncmluZC9tX2dkYnNlcnZlci92YWxncmluZC1s
b3ctbWlwczMyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZ2Ric2VydmVyL3ZhbGdyaW5k
LWxvdy1taXBzMzIuYwkocmV2aXNpb24gMTY0NjEpCisrKyBjb3JlZ3JpbmQvbV9nZGJzZXJ2ZXIv
dmFsZ3JpbmQtbG93LW1pcHMzMi5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDExIEBA
CiAgICAvKiBNYWtlIHN1cmUgd2UgZG9uJ3Qgc2NhbiBiYWNrIGJlZm9yZSB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBjdXJyZW50CiAgICAgICBmdW5jdGlvbiwgc2luY2Ugd2UgbWF5IGZldGNoIGNvbnN0
YW50IGRhdGEgb3IgaW5zbnMgdGhhdCBsb29rIGxpa2UKICAgICAgIGEganVtcC4gKi8KLSAgIGlm
IChWR18oZ2V0X2luc3Rfb2Zmc2V0X2luX2Z1bmN0aW9uKSAoYnBhZGRyLCAmb2Zmc2V0KSkgewor
CisgICAvLyBGSVhNRSBKUlMgMjggSnVseSAyMDE3OiBIQUNLISAgSXMgdGhpcyBjb3JyZWN0Pwor
ICAgY29uc3QgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CisKKyAgIGlmIChW
R18oZ2V0X2luc3Rfb2Zmc2V0X2luX2Z1bmN0aW9uKSAoZXAsIGJwYWRkciwgJm9mZnNldCkpIHsK
ICAgICAgIGZ1bmNfYWRkciA9IGJwYWRkciAtIG9mZnNldDsKICAgICAgIGlmIChmdW5jX2FkZHIg
PiBib3VuZGFyeSAmJiBmdW5jX2FkZHIgPD0gYnBhZGRyKQogICAgICAgICAgYm91bmRhcnkgPSBm
dW5jX2FkZHI7CkluZGV4OiBjb3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvdmFsZ3JpbmQtbG93LW1pcHM2
NC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2dkYnNlcnZlci92YWxncmluZC1sb3ctbWlw
czY0LmMJKHJldmlzaW9uIDE2NDYxKQorKysgY29yZWdyaW5kL21fZ2Ric2VydmVyL3ZhbGdyaW5k
LWxvdy1taXBzNjQuYwkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSwxMSBAQAogICAgLyog
TWFrZSBzdXJlIHdlIGRvbid0IHNjYW4gYmFjayBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUg
Y3VycmVudAogICAgICAgZnVuY3Rpb24sIHNpbmNlIHdlIG1heSBmZXRjaCBjb25zdGFudCBkYXRh
IG9yIGluc25zIHRoYXQgbG9vayBsaWtlCiAgICAgICBhIGp1bXAuICovCi0gICBpZiAoVkdfKGdl
dF9pbnN0X29mZnNldF9pbl9mdW5jdGlvbikgKGJwYWRkciwgJm9mZnNldCkpIHsKKworICAgLy8g
RklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0
IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworCisgICBpZiAoVkdfKGdldF9p
bnN0X29mZnNldF9pbl9mdW5jdGlvbikgKGVwLCBicGFkZHIsICZvZmZzZXQpKSB7CiAgICAgICBm
dW5jX2FkZHIgPSBicGFkZHIgLSBvZmZzZXQ7CiAgICAgICBpZiAoZnVuY19hZGRyID4gYm91bmRh
cnkgJiYgZnVuY19hZGRyIDw9IGJwYWRkcikKICAgICAgICAgIGJvdW5kYXJ5ID0gZnVuY19hZGRy
OwpJbmRleDogY29yZWdyaW5kL21fbGliY2Fzc2VydC5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmlu
ZC9tX2xpYmNhc3NlcnQuYwkocmV2aXNpb24gMTY0NjEpCisrKyBjb3JlZ3JpbmQvbV9saWJjYXNz
ZXJ0LmMJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBAQAogICAgICAgICAgKTsKICAg
ICAgIFZHXyhwcmludGYpKCJcbmhvc3Qgc3RhY2t0cmFjZTpcbiIpOyAKICAgICAgIFZHXyhjbG9f
eG1sKSA9IEZhbHNlOwotICAgICAgVkdfKHBwX1N0YWNrVHJhY2UpIChpcHMsIG5faXBzKTsKKyAg
ICAgIFZHXyhwcF9TdGFja1RyYWNlKSAoaXBzLCBuX2lwcywgVkdfKGN1cnJlbnRfRGlFcG9jaCko
KSk7CiAgICAgICBWR18oY2xvX3htbCkgPSBzYXZlX2Nsb194bWw7CiAgICB9CiAKSW5kZXg6IGNv
cmVncmluZC9tX21haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9tYWluLmMJKHJldmlz
aW9uIDE2NDYxKQorKysgY29yZWdyaW5kL21fbWFpbi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgs
NiArMTI4LDEwIEBACiAiICAgIC0tZXJyb3ItZXhpdGNvZGU9PG51bWJlcj4gZXhpdCBjb2RlIHRv
IHJldHVybiBpZiBlcnJvcnMgZm91bmQgWzA9ZGlzYWJsZV1cbiIKICIgICAgLS1lcnJvci1tYXJr
ZXJzPTxiZWdpbj4sPGVuZD4gYWRkIGxpbmVzIHdpdGggYmVnaW4vZW5kIG1hcmtlcnMgYmVmb3Jl
L2FmdGVyXG4iCiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBlcnJvciBvdXRw
dXQgaW4gcGxhaW4gdGV4dCBtb2RlIFtub25lXVxuIgorIiAgICAtLWtlZXAtZGVidWdpbmZvPW5v
fHllcyAgIEtlZXAgc3ltYm9scyBldGMgZm9yIHVubG9hZGVkIGNvZGUgW25vXVxuIgorIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIHN0YWNrIHRyYWNlcyBmb3IgbWVt
b3J5IGxlYWtzIHRvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBm
aWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuXG4iCisiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGxjbG9zZSdkIChvciBzaW1pbGFyKVxuIgogIiAgICAtLXNob3ctYmVs
b3ctbWFpbj1ub3x5ZXMgIGNvbnRpbnVlIHN0YWNrIHRyYWNlcyBiZWxvdyBtYWluKCkgW25vXVxu
IgogIiAgICAtLWRlZmF1bHQtc3VwcHJlc3Npb25zPXllc3xub1xuIgogIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvYWQgZGVmYXVsdCBzdXBwcmVzc2lvbnMgW3llc11cbiIKQEAgLTYy
Niw2ICs2MzAsNyBAQAogICAgICAgZWxzZSBpZiBWR19CT09MX0NMTyhhcmcsICItLXJ1bi1saWJj
LWZyZWVyZXMiLCBWR18oY2xvX3J1bl9saWJjX2ZyZWVyZXMpKSB7fQogICAgICAgZWxzZSBpZiBW
R19CT09MX0NMTyhhcmcsICItLXJ1bi1jeHgtZnJlZXJlcyIsICBWR18oY2xvX3J1bl9jeHhfZnJl
ZXJlcykpIHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tc2hvdy1iZWxvdy1t
YWluIiwgIFZHXyhjbG9fc2hvd19iZWxvd19tYWluKSkge30KKyAgICAgIGVsc2UgaWYgVkdfQk9P
TF9DTE8oYXJnLCAiLS1rZWVwLWRlYnVnaW5mbyIsICAgVkdfKGNsb19rZWVwX2RlYnVnaW5mbykp
IHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tdGltZS1zdGFtcCIsICAgICAg
IFZHXyhjbG9fdGltZV9zdGFtcCkpIHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywg
Ii0tdHJhY2stZmRzIiwgICAgICAgIFZHXyhjbG9fdHJhY2tfZmRzKSkge30KICAgICAgIGVsc2Ug
aWYgVkdfQk9PTF9DTE8oYXJnLCAiLS10cmFjZS1jaGlsZHJlbiIsICAgVkdfKGNsb190cmFjZV9j
aGlsZHJlbikpIHt9CkluZGV4OiBjb3JlZ3JpbmQvbV9vcHRpb25zLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y29yZWdyaW5kL21fb3B0aW9ucy5jCShyZXZpc2lvbiAxNjQ2MSkKKysrIGNvcmVncmluZC9tX29w
dGlvbnMuYwkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw3IEBACiBCb29sICAgVkdfKGNs
b19ydW5fY3h4X2ZyZWVyZXMpID0gVHJ1ZTsKIEJvb2wgICBWR18oY2xvX3RyYWNrX2ZkcykgICAg
ICA9IEZhbHNlOwogQm9vbCAgIFZHXyhjbG9fc2hvd19iZWxvd19tYWluKT0gRmFsc2U7CitCb29s
ICAgVkdfKGNsb19rZWVwX2RlYnVnaW5mbykgPSBGYWxzZTsKIEJvb2wgICBWR18oY2xvX3Nob3df
ZW13YXJucykgICA9IEZhbHNlOwogV29yZCAgIFZHXyhjbG9fbWF4X3N0YWNrZnJhbWUpID0gMjAw
MDAwMDsKIFVJbnQgICBWR18oY2xvX21heF90aHJlYWRzKSAgICA9IE1BWF9USFJFQURTX0RFRkFV
TFQ7CkluZGV4OiBjb3JlZ3JpbmQvbV9yZWRpci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9t
X3JlZGlyLmMJKHJldmlzaW9uIDE2NDYxKQorKysgY29yZWdyaW5kL21fcmVkaXIuYwkod29ya2lu
ZyBjb3B5KQpAQCAtMTg1OSw4ICsxODU5LDkgQEAKIHsKICAgIEJvb2wgb2s7CiAgICBjb25zdCBI
Q2hhciAqYnVmOwotIAotICAgb2sgPSBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoYWN0LT5mcm9t
X2FkZHIsICZidWYpOworCisgICBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsg
CisgICBvayA9IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KShlcCwgYWN0LT5mcm9tX2FkZHIsICZi
dWYpOwogICAgaWYgKCFvaykgYnVmID0gIj8/PyI7CiAgICAvLyBTdGFzaCBhd2F5IG5hbWUxCiAg
ICBIQ2hhciBuYW1lMVtWR18oc3RybGVuKShidWYpICsgMV07CkBAIC0xODY3LDcgKzE4NjgsNyBA
QAogICAgVkdfKHN0cmNweSkobmFtZTEsIGJ1Zik7CiAKICAgIGNvbnN0IEhDaGFyICpuYW1lMjsK
LSAgIG9rID0gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKGFjdC0+dG9fYWRkciwgJm5hbWUyKTsK
KyAgIG9rID0gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKGVwLCBhY3QtPnRvX2FkZHIsICZuYW1l
Mik7CiAgICBpZiAoIW9rKSBuYW1lMiA9ICI/Pz8iOwogCiAgICBWR18obWVzc2FnZSkoVmdfRGVi
dWdNc2csICIlczB4JTA4bHggKCUtMjBzKSAlcy0+ICglMDRkLiVkKSAweCUwOGx4ICVzXG4iLCAK
SW5kZXg6IGNvcmVncmluZC9tX3NicHJvZmlsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9t
X3NicHJvZmlsZS5jCShyZXZpc2lvbiAxNjQ2MSkKKysrIGNvcmVncmluZC9tX3NicHJvZmlsZS5j
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5IEBACiAKICAgIFZHXyhwcmludGYpKCJUb3Rh
bCBzY29yZSA9ICUnbGx1XG5cbiIsIHNjb3JlX3RvdGFsKTsKIAorICAgLy8gRklYTUUgSlJTIDI4
IEp1bHkgMjAxNzogdGhpcyBpcyBwcm9iYWJseSBub3QgcmlnaHQgaW4gZ2VuZXJhbAorICAgRGlF
cG9jaCBlcCA9IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CisKICAgIC8qIFByaW50IGFuIGluaXRp
YWwgcGVyLWJsb2NrIHN1bW1hcnkuICovCiAgICBWR18ocHJpbnRmKSgicmFuayAgLS0tY3VtdWxh
dGl2ZS0tLSAgICAgIC0tLS0tc2VsZi0tLS0tXG4iKTsKICAgIHNjb3JlX2N1bXVsID0gMDsKQEAg
LTg0LDcgKzg3LDcgQEAKICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBjb25zdCBIQ2hhciAq
bmFtZTsKLSAgICAgIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KSh0b3BzW3JdLmFkZHIsICZuYW1l
KTsKKyAgICAgIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KShlcCwgdG9wc1tyXS5hZGRyLCAmbmFt
ZSk7CiAKICAgICAgIHNjb3JlX2hlcmUgPSB0b3BzW3JdLnNjb3JlOwogICAgICAgc2NvcmVfY3Vt
dWwgKz0gc2NvcmVfaGVyZTsKQEAgLTEyMyw3ICsxMjYsNyBAQAogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgIGNvbnN0IEhDaGFyICpuYW1lOwotICAgICAgICAgVkdfKGdldF9mbm5h
bWVfd19vZmZzZXQpKHRvcHNbcl0uYWRkciwgJm5hbWUpOworICAgICAgICAgVkdfKGdldF9mbm5h
bWVfd19vZmZzZXQpKGVwLCB0b3BzW3JdLmFkZHIsICZuYW1lKTsKIAogICAgICAgICAgc2NvcmVf
aGVyZSA9IHRvcHNbcl0uc2NvcmU7CiAgICAgICAgICBzY29yZV9jdW11bCArPSBzY29yZV9oZXJl
OwpAQCAtMTU5LDcgKzE2Miw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
Y29uc3QgSENoYXIgKm5hbWU7Ci0gICAgICAgICBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkodG9w
c1tyXS5hZGRyLCAmbmFtZSk7CisgICAgICAgICBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoZXAs
IHRvcHNbcl0uYWRkciwgJm5hbWUpOwogCiAgICAgICAgICBzY29yZV9oZXJlID0gdG9wc1tyXS5z
Y29yZTsKIApJbmRleDogY29yZWdyaW5kL21fc2NoZWR1bGVyL3NjaGVkdWxlci5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGNvcmVncmluZC9tX3NjaGVkdWxlci9zY2hlZHVsZXIuYwkocmV2aXNpb24gMTY0NjEp
CisrKyBjb3JlZ3JpbmQvbV9zY2hlZHVsZXIvc2NoZWR1bGVyLmMJKHdvcmtpbmcgY29weSkKQEAg
LTIwMzcsOCArMjAzNywxMiBAQAogCiAgICAgICAgICBWR18obWVtc2V0KShidWY2NCwgMCwgNjQp
OwogICAgICAgICAgVUludCBsaW5lbnVtID0gMDsKKworICAgICAgICAgLy8gRklYTUUgSlJTIDI4
IEp1bHkgMjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgICAgICAgIGNvbnN0IERpRXBv
Y2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworCiAgICAgICAgICBCb29sIG9rID0gVkdf
KGdldF9maWxlbmFtZV9saW5lbnVtKSgKLSAgICAgICAgICAgICAgICAgICAgICBpcCwgJmJ1Ziwg
TlVMTCwgJmxpbmVudW0KKyAgICAgICAgICAgICAgICAgICAgICBlcCwgaXAsICZidWYsIE5VTEws
ICZsaW5lbnVtCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgIGlmIChvaykgewogICAg
ICAgICAgICAgLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdHJ1bmNhdGUgdGhlIGZpbGVu
YW1lIHRvCkluZGV4OiBjb3JlZ3JpbmQvbV9zaWduYWxzLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdy
aW5kL21fc2lnbmFscy5jCShyZXZpc2lvbiAxNjQ2MSkKKysrIGNvcmVncmluZC9tX3NpZ25hbHMu
Ywkod29ya2luZyBjb3B5KQpAQCAtMTg3OCw3ICsxODc4LDcgQEAKICAgICAgICAgICAgICAgICAg
ICAgICA6IFZHXyhyZWNvcmRfZGVwdGhfMV9FeGVDb250ZXh0KSggdGlkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9pcF9kZWx0
YSApOwogICAgICAgICAgdmdfYXNzZXJ0KGVjKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
KSggZWMgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18odGFnX0VD
X3dpdGhfY3VycmVudF9lcG9jaCkoZWMpICk7CiAgICAgICB9CiAgICAgICBpZiAoc2lnTm8gPT0g
VktJX1NJR1NFR1YgCiAgICAgICAgICAgJiYgaXNfc2lnbmFsX2Zyb21fa2VybmVsKHRpZCwgc2ln
Tm8sIGluZm8tPnNpX2NvZGUpCkluZGV4OiBjb3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY29yZWdyaW5kL21fc3RhY2t0cmFjZS5jCShyZXZpc2lvbiAxNjQ2MSkKKysrIGNv
cmVncmluZC9tX3N0YWNrdHJhY2UuYwkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDYgKzQ0Niw3IEBA
CiAgICAgICAvKiBBbmQsIHNpbWlsYXJseSwgdHJ5IGZvciBNU1ZDIEZQTyB1bndpbmQgaW5mby4g
Ki8KICAgICAgIGlmIChGUE9faW5mb19wcmVzZW50CiAgICAgICAgICAgJiYgVkdfKHVzZV9GUE9f
aW5mbykoICZ1cmVncy54aXAsICZ1cmVncy54c3AsICZ1cmVncy54YnAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZHXyhjdXJyZW50X0RpRXBvY2gpKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZwX21pbiwgZnBfbWF4ICkgKSB7CiAgICAgICAgICBpZiAoZGVi
dWcpIHVud2luZF9jYXNlID0gIk1TIjsKICAgICAgICAgIGlmIChkb19zdGF0cykgc3RhdHMuTVMr
KzsKQEAgLTE1MzksMTIgKzE1NDAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YWNrX2hpZ2hlc3RfYnl0ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50SXBE
ZXNjKFVJbnQgbiwgQWRkciBpcCwgdm9pZCogdXVfb3BhcXVlKQorc3RhdGljIHZvaWQgcHJpbnRJ
cERlc2MoVUludCBuLCBEaUVwb2NoIGVwLCBBZGRyIGlwLCB2b2lkKiB1dV9vcGFxdWUpCiB7Ci0g
ICBJbmxJUEN1cnNvciAqaWlwYyA9IFZHXyhuZXdfSUlQQykoaXApOworICAgSW5sSVBDdXJzb3Ig
KmlpcGMgPSBWR18obmV3X0lJUEMpKGVwLCBpcCk7CiAKICAgIGRvIHsKLSAgICAgIGNvbnN0IEhD
aGFyICpidWYgPSBWR18oZGVzY3JpYmVfSVApKGlwLCBpaXBjKTsKKyAgICAgIGNvbnN0IEhDaGFy
ICpidWYgPSBWR18oZGVzY3JpYmVfSVApKGVwLCBpcCwgaWlwYyk7CiAgICAgICBpZiAoVkdfKGNs
b194bWwpKSB7CiAgICAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgICAlc1xuIiwgYnVmKTsKICAg
ICAgIH0gZWxzZSB7CkBAIC0xNTU4LDcgKzE1NTksNyBAQAogfQogCiAvKiBQcmludCBhIFN0YWNr
VHJhY2UuICovCi12b2lkIFZHXyhwcF9TdGFja1RyYWNlKSAoIFN0YWNrVHJhY2UgaXBzLCBVSW50
IG5faXBzICkKK3ZvaWQgVkdfKHBwX1N0YWNrVHJhY2UpICggU3RhY2tUcmFjZSBpcHMsIFVJbnQg
bl9pcHMsIERpRXBvY2ggZXAgKQogewogICAgdmdfYXNzZXJ0KCBuX2lwcyA+IDAgKTsKIApAQCAt
MTU2NSw3ICsxNTY2LDcgQEAKICAgIGlmIChWR18oY2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRm
X3htbCkoIiAgPHN0YWNrPlxuIik7CiAKLSAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJpbnRJ
cERlc2MsIE5VTEwsIGlwcywgbl9pcHMgKTsKKyAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJp
bnRJcERlc2MsIE5VTEwsIGVwLCBpcHMsIG5faXBzICk7CiAKICAgIGlmIChWR18oY2xvX3htbCkp
CiAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgPC9zdGFjaz5cbiIpOwpAQCAtMTU4MCwxMyArMTU4
MSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwvKmFycmF5IHRvIGR1bXAg
U1AgdmFsdWVzIGluKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTC8qYXJyYXkg
dG8gZHVtcCBGUCB2YWx1ZXMgaW4qLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLypm
aXJzdF9pcF9kZWx0YSovKTsKLSAgIFZHXyhwcF9TdGFja1RyYWNlKShpcHMsIG5faXBzKTsKKyAg
IFZHXyhwcF9TdGFja1RyYWNlKShpcHMsIG5faXBzLCBWR18oY3VycmVudF9EaUVwb2NoKCkpKTsK
IH0KIAogdm9pZCBWR18oYXBwbHlfU3RhY2tUcmFjZSkoCi0gICAgICAgIHZvaWQoKmFjdGlvbiko
VUludCBuLCBBZGRyIGlwLCB2b2lkKiBvcGFxdWUpLAorICAgICAgICB2b2lkKCphY3Rpb24pKFVJ
bnQgbiwgRGlFcG9jaCBlcCwgQWRkciBpcCwgdm9pZCogb3BhcXVlKSwKICAgICAgICAgdm9pZCog
b3BhcXVlLAotICAgICAgICBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcworICAgICAgICBEaUVw
b2NoIGVwLCBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcwogICAgICApCiB7CiAgICBJbnQgaTsK
QEAgLTE1OTcsNyArMTU5OCw3IEBACiAgICAgICAvLyBvciB0aGUgbGFzdCBhcHBlYXJhbmNlIG9m
IGEgYmVsb3cgbWFpbiBmdW5jdGlvbi4KICAgICAgIC8vIFRoZW4gZGVjcmVhc2Ugbl9pcHMgc28g
YXMgdG8gbm90IGNhbGwgYWN0aW9uIGZvciB0aGUgYmVsb3cgbWFpbgogICAgICAgZm9yIChpID0g
bl9pcHMgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgVmdfRm5OYW1lS2luZCBraW5kID0g
VkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQKShpcHNbaV0pOworICAgICAgICAgVmdfRm5OYW1l
S2luZCBraW5kID0gVkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAg
ICAgICAgIGlmIChWZ19Gbk5hbWVNYWluID09IGtpbmQgfHwgVmdfRm5OYW1lQmVsb3dNYWluID09
IGtpbmQpCiAgICAgICAgICAgICBuX2lwcyA9IGkgKyAxOwogICAgICAgICAgaWYgKFZnX0ZuTmFt
ZU1haW4gPT0ga2luZCkKQEAgLTE2MDcsNyArMTYwOCw3IEBACiAKICAgIGZvciAoaSA9IDA7IGkg
PCBuX2lwczsgaSsrKQogICAgICAgLy8gQWN0IG9uIHRoZSBpcAotICAgICAgYWN0aW9uKGksIGlw
c1tpXSwgb3BhcXVlKTsKKyAgICAgIGFjdGlvbihpLCBlcCwgaXBzW2ldLCBvcGFxdWUpOwogfQog
CiAKSW5kZXg6IGNvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1nZW5lcmljLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLWdlbmVyaWMuYwkocmV2aXNpb24gMTY0
NjEpCisrKyBjb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtZ2VuZXJpYy5jCSh3b3JraW5nIGNv
cHkpCkBAIC01NDAsNyArNTQwLDggQEAKIHsKICAgIEludCBmZDsgICAgICAgICAgICAgICAgICAg
ICAgICAvKiBUaGUgZmlsZSBkZXNjcmlwdG9yICovCiAgICBIQ2hhciAqcGF0aG5hbWU7ICAgICAg
ICAgICAgICAgLyogTlVMTCBpZiBub3QgYSByZWd1bGFyIGZpbGUgb3IgdW5rbm93biAqLwotICAg
RXhlQ29udGV4dCAqd2hlcmU7ICAgICAgICAgICAgIC8qIE5VTEwgaWYgaW5oZXJpdGVkIGZyb20g
cGFyZW50ICovCisgICBFeGVDb250ZXh0QW5kRXBvY2ggd2hlcmU7ICAgICAgLyogVkdfKG51bGxf
RXhlQ29udGV4dEFuZEVwb2NoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGluaGVyaXRlZCBmcm9tIHBhcmVudCAqLwogICAgc3RydWN0IE9wZW5GZCAqbmV4dCwgKnBy
ZXY7CiB9IE9wZW5GZDsKIApAQCAtNjE0LDcgKzYxNSwxMCBAQAogCiAgICBpLT5mZCA9IGZkOwog
ICAgaS0+cGF0aG5hbWUgPSBWR18oc3RyZHVwKSgic3lzd3JhcC5yZmRvd2duLjIiLCBwYXRobmFt
ZSk7Ci0gICBpLT53aGVyZSA9ICh0aWQgPT0gLTEpID8gTlVMTCA6IFZHXyhyZWNvcmRfRXhlQ29u
dGV4dCkodGlkLCAwLypmaXJzdF9pcF9kZWx0YSovKTsKKyAgIGktPndoZXJlID0gKHRpZCA9PSAt
MSkKKyAgICAgICAgICAgICAgICAgPyBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpKCkKKyAg
ICAgICAgICAgICAgICAgOiBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAg
ICAgICAgICAgICAgICAgVkdfKHJlY29yZF9FeGVDb250ZXh0KSh0aWQsIDAvKmZpcnN0X2lwX2Rl
bHRhKi8pKTsKIH0KIAogLy8gUmVjb3JkIG9wZW5pbmcgb2YgYW4gZmQsIGFuZCBmaW5kIGl0cyBu
YW1lLgpAQCAtODQ2LDggKzg1MCw4IEBACiAgICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGlm
KGktPndoZXJlKSB7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoaS0+d2hlcmUpOworICAg
ICAgaWYgKCFWR18oaXNfbnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpKGktPndoZXJlKSkgeworICAg
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoaS0+d2hlcmUpOwogICAgICAgICAgVkdf
KG1lc3NhZ2UpKFZnX1VzZXJNc2csICJcbiIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgIFZH
XyhtZXNzYWdlKShWZ19Vc2VyTXNnLCAiICAgPGluaGVyaXRlZCBmcm9tIHBhcmVudD5cbiIpOwpJ
bmRleDogY29yZWdyaW5kL21fdG9vbGlmYWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21f
dG9vbGlmYWNlLmMJKHJldmlzaW9uIDE2NDYxKQorKysgY29yZWdyaW5kL21fdG9vbGlmYWNlLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQAogfQogCiB2b2lkIFZHXyhuZWVkc19p
bmZvX2xvY2F0aW9uKSAoCi0gICB2b2lkICgqaW5mb19sb2NhdGlvbikoQWRkcikKKyAgIHZvaWQg
KCppbmZvX2xvY2F0aW9uKShEaUVwb2NoLCBBZGRyKQogKQogewogICAgVkdfKG5lZWRzKS5pbmZv
X2xvY2F0aW9uID0gVHJ1ZTsKSW5kZXg6IGNvcmVncmluZC9tX3RyYW5zbGF0ZS5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGNvcmVncmluZC9tX3RyYW5zbGF0ZS5jCShyZXZpc2lvbiAxNjQ2MSkKKysrIGNvcmVn
cmluZC9tX3RyYW5zbGF0ZS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI3LDEyICsxNTI3LDEzIEBA
CiAgICAgICBCb29sIG9rOwogICAgICAgY29uc3QgSENoYXIgKmJ1ZjsKICAgICAgIGNvbnN0IEhD
aGFyICpuYW1lMjsKKyAgICAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2No
KSgpOwogCiAgICAgICAvKiBUcnkgYWxzbyB0byBnZXQgdGhlIHNvbmFtZSAobm90IHRoZSBmaWxl
bmFtZSkgb2YgdGhlICJmcm9tIgogICAgICAgICAgb2JqZWN0LiAgVGhpcyBtYWtlcyBpdCBtdWNo
IGVhc2llciB0byBkZWJ1ZyByZWRpcmVjdGlvbgogICAgICAgICAgcHJvYmxlbXMuICovCiAgICAg
ICBjb25zdCBIQ2hhciogbnJhZGRyX3NvbmFtZSA9ICI/Pz8iOwotICAgICAgRGVidWdJbmZvKiAg
IG5yYWRkcl9kaSAgICAgPSBWR18oZmluZF9EZWJ1Z0luZm8pKG5yYWRkcik7CisgICAgICBEZWJ1
Z0luZm8qICAgbnJhZGRyX2RpICAgICA9IFZHXyhmaW5kX0RlYnVnSW5mbykoZXAsIG5yYWRkcik7
CiAgICAgICBpZiAobnJhZGRyX2RpKSB7CiAgICAgICAgICBjb25zdCBIQ2hhciogdCA9IFZHXyhE
ZWJ1Z0luZm9fZ2V0X3NvbmFtZSkobnJhZGRyX2RpKTsKICAgICAgICAgIGlmICh0KQpAQCAtMTUz
OSwxMiArMTU0MCwxMiBAQAogICAgICAgICAgICAgbnJhZGRyX3NvbmFtZSA9IHQ7CiAgICAgICB9
CiAKLSAgICAgIG9rID0gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKG5yYWRkciwgJmJ1Zik7Cisg
ICAgICBvayA9IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KShlcCwgbnJhZGRyLCAmYnVmKTsKICAg
ICAgIGlmICghb2spIGJ1ZiA9ICI/Pz8iOwogICAgICAgLy8gU3Rhc2ggYXdheSBuYW1lMQogICAg
ICAgSENoYXIgbmFtZTFbVkdfKHN0cmxlbikoYnVmKSArIDFdOwogICAgICAgVkdfKHN0cmNweSko
bmFtZTEsIGJ1Zik7Ci0gICAgICBvayA9IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KShhZGRyLCAm
bmFtZTIpOworICAgICAgb2sgPSBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoZXAsIGFkZHIsICZu
YW1lMik7CiAgICAgICBpZiAoIW9rKSBuYW1lMiA9ICI/Pz8iOwogCiAgICAgICBWR18obWVzc2Fn
ZSkoVmdfRGVidWdNc2csIApAQCAtMTU2MSw3ICsxNTYyLDggQEAKICAgIGlmIChWR18oY2xvX3Ry
YWNlX2ZsYWdzKSB8fCBkZWJ1Z2dpbmdfdHJhbnNsYXRpb24pIHsKICAgICAgIGNvbnN0IEhDaGFy
KiBvYmpuYW1lID0gIlVOS05PV05fT0JKRUNUIjsKICAgICAgIE9mZlQgICAgICAgICBvYmpvZmYg
ID0gMDsKLSAgICAgIERlYnVnSW5mbyogICBkaSAgICAgID0gVkdfKGZpbmRfRGVidWdJbmZvKSgg
YWRkciApOworICAgICAgY29uc3QgRGlFcG9jaCBlcCAgICAgPSBWR18oY3VycmVudF9EaUVwb2No
KSgpOworICAgICAgRGVidWdJbmZvKiAgIGRpICAgICAgPSBWR18oZmluZF9EZWJ1Z0luZm8pKCBl
cCwgYWRkciApOwogICAgICAgaWYgKGRpKSB7CiAgICAgICAgICBvYmpuYW1lID0gVkdfKERlYnVn
SW5mb19nZXRfZmlsZW5hbWUpKGRpKTsKICAgICAgICAgIG9iam9mZiAgPSBhZGRyIC0gVkdfKERl
YnVnSW5mb19nZXRfdGV4dF9iaWFzKShkaSk7CkBAIC0xNTY5LDcgKzE1NzEsNyBAQAogICAgICAg
dmdfYXNzZXJ0KG9iam5hbWUpOwogIAogICAgICAgY29uc3QgSENoYXIgKmZubmFtZTsKLSAgICAg
IEJvb2wgb2sgPSBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoYWRkciwgJmZubmFtZSk7CisgICAg
ICBCb29sIG9rID0gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKGVwLCBhZGRyLCAmZm5uYW1lKTsK
ICAgICAgIGlmICghb2spIGZubmFtZSA9ICJVTktOT1dOX0ZVTkNUSU9OIjsKICAgICAgIFZHXyhw
cmludGYpKAogICAgICAgICAgIj09PT0gU0IgJXUgKGV2Y2hlY2tzICVsbHUpIFt0aWQgJXVdIDB4
JWx4ICVzICVzJWMweCVseFxuIiwKSW5kZXg6IGNvcmVncmluZC9tX3h0cmVlLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY29yZWdyaW5kL21feHRyZWUuYwkocmV2aXNpb24gMTY0NjEpCisrKyBjb3JlZ3JpbmQv
bV94dHJlZS5jCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNiArNDM4LDkgQEAKICAgIGNvbnN0IEhD
aGFyKiBmaWxlbmFtZV9kaXI7CiAgICBjb25zdCBIQ2hhciogZmlsZW5hbWVfbmFtZTsKIAorICAg
Ly8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNv
bnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworCiAgICBpZiAoZnAgPT0g
TlVMTCkKICAgICAgIHJldHVybjsKIApAQCAtNTAxLDcgKzUwNCw3IEBACiAgICAgICAvLyB0aGUg
c3RyaW5ncyAgY2FsbGVkX2ZpbGVuYW1lL2NhbGxlZF9mbm5hbWUuCiAjZGVmaW5lIENBTExFRF9G
TEYobikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgICBpZiAoKG4pIDwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfHwgIVZHXyhnZXRfZmlsZW5hbWVfbGluZW51
bSkoaXBzWyhuKV0sICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfHwgIVZHXyhn
ZXRfZmlsZW5hbWVfbGluZW51bSkoZXAsIGlwc1sobildLCAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lX25hbWUsICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmZpbGVuYW1lX2RpciwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmNhbGxlZF9saW5lbnVtKSkgeyAgICAgICAgICAgICBcCkBAIC01
MDksNyArNTEyLDcgQEAKICAgICAgICAgIGNhbGxlZF9saW5lbnVtID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
IGlmICgobikgPCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICB8fCAhVkdfKGdldF9mbm5hbWUpKGlwc1sobildLCAmY2Fs
bGVkX2ZubmFtZSkpIHsgICAgICAgICAgICAgIFwKKyAgICAgICAgICB8fCAhVkdfKGdldF9mbm5h
bWUpKGVwLCBpcHNbKG4pXSwgJmNhbGxlZF9mbm5hbWUpKSB7ICAgICAgICAgIFwKICAgICAgICAg
IGNhbGxlZF9mbm5hbWUgPSAiVW5rbm93bkZuPz8/IjsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCw3ICs1
NTcsOSBAQAogCiAgICAgICAgICBpZiAoMCkgewogICAgICAgICAgICAgVkdfKHByaW50ZikoImVu
dHJ5IGltZyAlc1xuIiwgaW1nKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSh4ZS0+
ZWMpOworICAgICAgICAgICAgLy8gSlJTIDI3IEp1bHkgMjAxNzogaXQgbWF5IGJlIGEgaGFjayB0
byB1c2UgdGhlIGN1cnJlbnQgZXBvY2gKKyAgICAgICAgICAgIC8vIGhlcmUuICBJIGRvbid0IGtu
b3cuCisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoeGUtPmVjKSk7CiAgICAgICAgICAgICBWR18ocHJpbnRmKSgiXG4i
KTsKICAgICAgICAgIH0KICAgICAgICAgIHh0LT5hZGRfZGF0YV9mbih4dC0+dG1wX2RhdGEsIFZH
XyhpbmRleFhBKSh4dC0+ZGF0YSwgeGVjdSkpOwpAQCAtNzYyLDExICs3NjcsMTQgQEAKICAgIG1z
X21ha2VfZ3JvdXBzKGRlcHRoKzEsIGdyb3VwLT5tc19lYywgZ3JvdXAtPm5fZWMsIHNpZ19zeiwK
ICAgICAgICAgICAgICAgICAgICZuX2dyb3VwcywgJmdyb3Vwcyk7CiAKKyAgIC8vIEZJWE1FIEpS
UyAyOCBKdWx5IDIwMTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2No
IGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKwogICAgRlAoIiUqcyIgIm4ldTogJWxkICVz
XG4iLCAKICAgICAgIGRlcHRoICsgMSwgIiIsCiAgICAgICBuX2dyb3VwcywgCiAgICAgICBncm91
cC0+dG90YWwsCi0gICAgICBWR18oZGVzY3JpYmVfSVApKGdyb3VwLT5tc19lYy0+aXBzW2RlcHRo
XSAtIDEsIE5VTEwpKTsKKyAgICAgIFZHXyhkZXNjcmliZV9JUCkoZXAsIGdyb3VwLT5tc19lYy0+
aXBzW2RlcHRoXSAtIDEsIE5VTEwpKTsKICAgIC8qIFhUUkVFPz8/IE1hc3NpZiBvcmlnaW5hbCBj
b2RlIHJlbW92ZXMgMSB0byBnZXQgdGhlIElQIGRlc2NyaXB0aW9uLiBJIGFtCiAgICAgICB3b25k
ZXJpbmcgaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgcHJlZGF0ZXMgcmV2aXNpb24gcjg4
MTgsCiAgICAgICB3aGljaCBpbnRyb2R1Y2VkIGEgLTEgaW4gdGhlIHN0YWNrIHVud2luZCAoc2Vl
IG1fc3RhY2t0cmFjZS5jKQpAQCAtOTYzLDYgKzk3MSwxMCBAQAogICAgICAgZnJvbSB0aGVyZS4K
ICAgICAgIElmIG5vIG1haW4gaXMgZm91bmQsIHdlIHdpbGwgdGhlbiBkbyBhIHNlYXJjaCBmb3Ig
bWFpbiBvcgogICAgICAgYmVsb3cgbWFpbiBmdW5jdGlvbiB0aWxsIHRoZSB0b3AuICovCisKKyAg
IC8vIEZJWE1FIEpSUyAyOCBKdWx5IDIwMTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBj
b25zdCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKwogICAgc3RhdGljIElu
dCBkZWVwZXN0X21haW4gPSAwOwogICAgVmdfRm5OYW1lS2luZCBraW5kID0gVmdfRm5OYW1lTm9y
bWFsOwogICAgSW50IG1ibSA9IG5faXBzIC0gMTsgLy8gUG9zaXRpb24gb2YgZGVlcGVzdCBtYWlu
IG9yIGJlbG93IG1haW4uCkBAIC05NzIsNyArOTg0LDcgQEAKICAgIGZvciAoaSA9IG5faXBzIC0g
MSAtIGRlZXBlc3RfbWFpbjsKICAgICAgICAgaSA8IG5faXBzOwogICAgICAgICBpKyspIHsKLSAg
ICAgIG1ibWtpbmQgPSBWR18oZ2V0X2ZubmFtZV9raW5kX2Zyb21fSVApKGlwc1tpXSk7CisgICAg
ICBtYm1raW5kID0gVkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAg
ICAgIGlmIChtYm1raW5kICE9IFZnX0ZuTmFtZU5vcm1hbCkgewogICAgICAgICAgbWJtID0gaTsK
ICAgICAgICAgIGJyZWFrOwpAQCAtOTgzLDcgKzk5NSw3IEBACiAgICBmb3IgKGkgPSBtYm0gLSAx
OwogICAgICAgICBpID49IDAgJiYgbWJta2luZCAhPSBWZ19Gbk5hbWVNYWluOwogICAgICAgICBp
LS0pIHsKLSAgICAgIGtpbmQgPSBWR18oZ2V0X2ZubmFtZV9raW5kX2Zyb21fSVApKGlwc1tpXSk7
CisgICAgICBraW5kID0gVkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsK
ICAgICAgIGlmIChraW5kICE9IFZnX0ZuTmFtZU5vcm1hbCkgewogICAgICAgICAgbWJtID0gaTsK
ICAgICAgICAgIG1ibWtpbmQgPSBraW5kOwpJbmRleDogY29yZWdyaW5kL3B1Yl9jb3JlX2RlYnVn
aW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9wdWJfY29yZV9kZWJ1Z2luZm8uaAkocmV2
aXNpb24gMTY0NjEpCisrKyBjb3JlZ3JpbmQvcHViX2NvcmVfZGVidWdpbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDEzICs4NiwxMyBAQAogICogSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBj
YXNlcyB3aGVyZSB0aGUgbmFtZXMgb2YgaW50ZXJlc3Qgd2lsbCBoYXZlCiAgKiBwYXJ0aWN1bGFy
IChpZS4gbm9uLW1hbmdsZWQpIGZvcm1zLCBvciB0aGUgbWFuZ2xlZCBmb3JtIGlzIGFjY2VwdGFi
bGUuICovCiBleHRlcm4KLUJvb2wgVkdfKGdldF9mbm5hbWVfcmF3KSAoIEFkZHIgYSwgY29uc3Qg
SENoYXIqKiBidWYgKTsKK0Jvb2wgVkdfKGdldF9mbm5hbWVfcmF3KSAoIERpRXBvY2ggZXAsIEFk
ZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKTsKIAogLyogTGlrZSBWR18oZ2V0X2ZubmFtZSksIGJ1
dCB3aXRob3V0IEMrKyBkZW1hbmdsaW5nLiAgKEJ1dCBpdCBkb2VzCiAgWi1kZW1hbmdsaW5nIGFu
ZCBiZWxvdy1tYWluIHJlbmFtaW5nLikKICBpaXBjIGFyZ3VtZW50OiBzYW1lIHVzYWdlIGFzIGlu
IFZHXyhkZXNjcmliZV9JUCkgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmguICovCiBleHRlcm4KLUJv
b2wgVkdfKGdldF9mbm5hbWVfbm9fY3h4X2RlbWFuZ2xlKSAoIEFkZHIgYSwgY29uc3QgSENoYXIq
KiBidWYsCitCb29sIFZHXyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKCBEaUVwb2NoIGVw
LCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW5sSVBDdXJzb3IqIGlpcGMgKTsKIAogLyogbWlwcy1saW51eCBv
bmx5OiBmaW5kIHRoZSBvZmZzZXQgb2YgY3VycmVudCBhZGRyZXNzLiBUaGlzIGlzIG5lZWRlZCBm
b3IgCkBAIC05OSw3ICs5OSw4IEBACiAgICBzdGFjayB1bndpbmRpbmcgZm9yIE1JUFMuCiAqLwog
ZXh0ZXJuCi1Cb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBBZGRyIGEsIC8q
T1VUKi9QdHJkaWZmVCogb2Zmc2V0ICk7CitCb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVu
Y3Rpb24pKCBEaUVwb2NoIGVwLCBBZGRyIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKk9VVCovUHRyZGlmZlQqIG9mZnNldCApOwogCiAKIC8qIFVzZSBEV0FSRjIv
MyBDRkEgaW5mb3JtYXRpb24gdG8gZG8gb25lIHN0ZXAgb2Ygc3RhY2sgdW53aW5kaW5nLgpAQCAt
MTU4LDYgKzE1OSw3IEBACiBleHRlcm4gQm9vbCBWR18odXNlX0ZQT19pbmZvKSAoIC8qTU9EKi9B
ZGRyKiBpcFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qTU9EKi9BZGRyKiBz
cFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qTU9EKi9BZGRyKiBmcFAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpRXBvY2ggZXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFkZHIgbWluX2FjY2Vzc2libGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFkZHIgbWF4X2FjY2Vzc2libGUgKTsKIApAQCAtMjE3LDcgKzIxOSw3
IEBACiAvKiBwcGM2NC1saW51eCBvbmx5OiBmaW5kIHRoZSBUT0MgcG9pbnRlciAoUjIgdmFsdWUp
IHRoYXQgc2hvdWxkIGJlIGluCiAgICBmb3JjZSBhdCB0aGUgZW50cnkgcG9pbnQgYWRkcmVzcyBv
ZiB0aGUgZnVuY3Rpb24gY29udGFpbmluZwogICAgZ3Vlc3RfY29kZV9hZGRyLiAgUmV0dXJucyAw
IGlmIG5vdCBrbm93bi4gKi8KLWV4dGVybiBBZGRyIFZHXyhnZXRfdG9jcHRyKSAoIEFkZHIgZ3Vl
c3RfY29kZV9hZGRyICk7CitleHRlcm4gQWRkciBWR18oZ2V0X3RvY3B0cikgKCBEaUVwb2NoIGVw
LCBBZGRyIGd1ZXN0X2NvZGVfYWRkciApOwogCiAvKiBNYXAgYSBmdW5jdGlvbiBuYW1lIHRvIGl0
cyBTeW1BVk1Bcy4gIElzIGRvbmUgYnkKICAgIHNlcXVlbnRpYWwgc2VhcmNoIG9mIGFsbCBzeW1i
b2wgdGFibGVzLCBzbyBpcyB2ZXJ5IHNsb3cuICBUbwpAQCAtMjI3LDcgKzIyOSw4IEBACiAgICBw
bGF0Zm9ybXMsIGEgc3ltYm9sIGlzIGRlZW1lZCB0byBiZSBmb3VuZCBvbmx5IGlmIGl0IGhhcyBh
IG5vbnplcm8KICAgIFRPQyBwb2ludGVyLiAgKi8KIGV4dGVybgotQm9vbCBWR18obG9va3VwX3N5
bWJvbF9TTE9XKShjb25zdCBIQ2hhciogc29wYXR0LCBjb25zdCBIQ2hhciogbmFtZSwKK0Jvb2wg
VkdfKGxvb2t1cF9zeW1ib2xfU0xPVykoRGlFcG9jaCBlcCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEhDaGFyKiBzb3BhdHQsIGNvbnN0IEhDaGFyKiBuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1BVk1BcyogYXZtYXMpOwogCiAjZW5kaWYgICAvLyBf
X1BVQl9DT1JFX0RFQlVHSU5GT19ICkluZGV4OiBjb3JlZ3JpbmQvcHViX2NvcmVfdG9vbGlmYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL3B1Yl9jb3JlX3Rvb2xpZmFjZS5oCShyZXZpc2lv
biAxNjQ2MSkKKysrIGNvcmVncmluZC9wdWJfY29yZV90b29saWZhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICB2b2lkICgqdG9vbF9wcmludF9zdGF0cykodm9pZCk7
CiAKICAgIC8vIFZHXyhuZWVkcykuaW5mb19sb2NhdGlvbgotICAgdm9pZCAoKnRvb2xfaW5mb19s
b2NhdGlvbikoQWRkciBhKTsKKyAgIHZvaWQgKCp0b29sX2luZm9fbG9jYXRpb24pKERpRXBvY2gg
ZXAsIEFkZHIgYSk7CiAKICAgIC8vIFZHXyhuZWVkcykubWFsbG9jX3JlcGxhY2VtZW50CiAgICB2
b2lkKiAoKnRvb2xfbWFsbG9jKSAgICAgICAgICAgICAgKFRocmVhZElkLCBTaXplVCk7CkluZGV4
OiBkb2NzL3htbC9tYW51YWwtY29yZS54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9jcy94bWwvbWFudWFs
LWNvcmUueG1sCShyZXZpc2lvbiAxNjQ2MSkKKysrIGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAko
d29ya2luZyBjb3B5KQpAQCAtMTIxOSw2ICsxMjE5LDE5IEBACiAgICAgPC9saXN0aXRlbT4KICAg
PC92YXJsaXN0ZW50cnk+CiAKKyAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtZGVidWdpbmZv
IiB4cmVmbGFiZWw9Ii0ta2VlcC1kZWJ1Z2luZm8iPgorICAgIDx0ZXJtPgorICAgICAgPG9wdGlv
bj48IVtDREFUQVstLWtlZXAtZGVidWdpbmZvPTx5ZXN8bm8+IFtkZWZhdWx0OiBub10gXV0+PC9v
cHRpb24+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPldoZW4gZW5h
YmxlZCwga2VlcCBzeW1ib2xzIGFuZCBhbGwgb3RoZXIgZGVidWdpbmZvIGZvciB1bmxvYWRlZAor
ICAgICAgY29kZS4gVGhpcyBhbGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8g
aW5jbHVkZSBmaWxlL2xpbmUKKyAgICAgIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbiBkbGNs
b3NlJ2QgKG9yIHNpbWlsYXIpLiAgQmUgY2FyZWZ1bCB3aXRoCisgICAgICB0aGlzLCBzaW5jZSBp
dCBjYW4gbGVhZCB0byB1bmJvdW5kZWQgbWVtb3J5IHVzZSBmb3IgcHJvZ3JhbXMgd2hpY2gKKyAg
ICAgIHJlcGVhdGVkbHkgbG9hZCBhbmQgdW5sb2FkIHNoYXJkIG9iamVjdHMuPC9wYXJhPgorICAg
IDwvbGlzdGl0ZW0+CisgIDwvdmFybGlzdGVudHJ5PgorICAKICAgPHZhcmxpc3RlbnRyeSBpZD0i
b3B0LnNob3ctYmVsb3ctbWFpbiIgeHJlZmxhYmVsPSItLXNob3ctYmVsb3ctbWFpbiI+CiAgICAg
PHRlcm0+CiAgICAgICA8b3B0aW9uPjwhW0NEQVRBWy0tc2hvdy1iZWxvdy1tYWluPTx5ZXN8bm8+
IFtkZWZhdWx0OiBub10gXV0+PC9vcHRpb24+CkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX2FkZHJp
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9hZGRyaW5mby5oCShyZXZpc2lv
biAxNjQ2MSkKKysrIGluY2x1ZGUvcHViX3Rvb2xfYWRkcmluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMTM1LDYgKzEzNSw3IEBACiAgICAgICAvLyAoc3BvZmZzZXQgd2lsbCBiZSBuZWdhdGl2ZSwg
YXMgc3RhY2tzIGFyZSBhc3N1bWVkIGdyb3dpbmcgZG93bikuCiAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgVGhyZWFkSW5mbyB0aW5mbzsKKyAgICAgICAgIERpRXBvY2ggIGVwb2NoOwogICAgICAg
ICAgQWRkciAgICAgSVA7CiAgICAgICAgICBJbnQgICAgICBmcmFtZU5vOwogICAgICAgICAgU3Rh
Y2tQb3Mgc3RhY2tQb3M7CkBAIC0xNTEsOSArMTUyLDkgQEAKICAgICAgICAgIGNvbnN0IEhDaGFy
KiBibG9ja19kZXNjOyAgIC8vICJibG9jayIsIm1lbXBvb2wiLCJ1c2VyLWRlZmluZWQiLGFyZW5h
CiAgICAgICAgICBTaXplVCAgICAgICBibG9ja19zekI7CiAgICAgICAgICBQdHJkaWZmVCAgICBy
d29mZnNldDsKLSAgICAgICAgIEV4ZUNvbnRleHQqIGFsbG9jYXRlZF9hdDsgIC8vIG1pZ2h0IGJl
IG51bGxfRXhlQ29udGV4dC4KLSAgICAgICAgIFRocmVhZEluZm8gIGFsbG9jX3RpbmZvOyAgIC8v
IHdoaWNoIHRocmVhZCBkaWQgYWxsb2MgdGhpcyBibG9jay4KLSAgICAgICAgIEV4ZUNvbnRleHQq
IGZyZWVkX2F0OyAgICAgIC8vIG1pZ2h0IGJlIG51bGxfRXhlQ29udGV4dC4KKyAgICAgICAgIEV4
ZUNvbnRleHRBbmRFcG9jaCBhbGxvY2F0ZWRfYXQ7IC8vIG1pZ2h0IGNvbnRhaW4gbnVsbF9FeGVD
b250ZXh0LgorICAgICAgICAgVGhyZWFkSW5mbyAgICAgICAgIGFsbG9jX3RpbmZvOyAgLy8gd2hp
Y2ggdGhyZWFkIGFsbG9jJ2QgdGhpcyBibG9jay4KKyAgICAgICAgIEV4ZUNvbnRleHRBbmRFcG9j
aCBmcmVlZF9hdDsgICAgIC8vIG1pZ2h0IGNvbnRhaW4gbnVsbF9FeGVDb250ZXh0LgogICAgICAg
fSBCbG9jazsKIAogICAgICAgLy8gSW4gYSBnbG9iYWwgLmRhdGEgc3ltYm9sLiAgVGhpcyBob2xk
cwpAQCAtMjA0LDcgKzIwNSw3IEBACiAgICBPbiBlbnRyeSwgYWktPnRhZyBtdXN0IGJlIGVxdWFs
IHRvIEFkZHJfVW5kZXNjcmliZWQuCiAgICBUaGlzIG1pZ2h0IGFsbG9jYXRlIHNvbWUgbWVtb3J5
LCB0aGF0IGNhbiBiZSBjbGVhcmVkIHdpdGgKICAgIFZHXyhjbGVhcl9hZGRyaW5mbykuICovCi1l
eHRlcm4gdm9pZCBWR18oZGVzY3JpYmVfYWRkcikgKCBBZGRyIGEsIC8qT1VUKi9BZGRySW5mbyog
YWkgKTsKK2V4dGVybiB2b2lkIFZHXyhkZXNjcmliZV9hZGRyKSAoIERpRXBvY2ggZXAsIEFkZHIg
YSwgLypPVVQqL0FkZHJJbmZvKiBhaSApOwogCiBleHRlcm4gdm9pZCBWR18oY2xlYXJfYWRkcmlu
Zm8pICggQWRkckluZm8qIGFpKTsKIApJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9iYXNpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBpbmNsdWRlL3B1Yl90b29sX2Jhc2ljcy5oCShyZXZpc2lvbiAxNjQ2MSkK
KysrIGluY2x1ZGUvcHViX3Rvb2xfYmFzaWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsx
MjksMTYgQEAKIC8qIFRocmVhZElkcyBhcmUgc2ltcGx5IGluZGljZXMgaW50byB0aGUgVkdfKHRo
cmVhZHMpW10gYXJyYXkuICovCiB0eXBlZGVmIFVJbnQgVGhyZWFkSWQ7CiAKKworLyogWW91IG5l
ZWQgYSBkZWJ1Z2luZm8gZXBvY2ggaW4gb3JkZXIgdG8gY29udmVydCBhbiBhZGRyZXNzIGludG8g
YW55IHNvdXJjZQorICAgbGV2ZWwgZW50aXR5LCBzaW5jZSB0aGF0IGNvbnZlcnNpb24gZGVwZW5k
cyBvbiB3aGF0IG9iamVjdHMgd2VyZSBtYXBwZWQKKyAgIGluIGF0IHRoZSB0aW1lLiAgQW4gZXBv
Y2ggaXMgc2ltcGx5IGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGNvdW50ZXIsCisgICB3aGlj
aCB3ZSB3cmFwIHVwIGluIGEgc3RydWN0IHNvIGFzIHRvIGVuYWJsZSB0aGUgQyB0eXBlIHN5c3Rl
bSB0bworICAgZGlzdGluZ3Vpc2ggaXQgZnJvbSBvdGhlciBraW5kcyBvZiBudW1iZXJzLiAgbV9k
ZWJ1Z2luZm8gaG9sZHMgYW5kCisgICBtYWludGFpbnMgdGhlIGN1cnJlbnQgZXBvY2ggbnVtYmVy
LiAqLwordHlwZWRlZiAgc3RydWN0IHsgVUludCBuOyB9ICBEaUVwb2NoOworCisKIC8qIE1hbnkg
ZGF0YSBzdHJ1Y3R1cmVzIG5lZWQgdG8gYWxsb2NhdGUgYW5kIHJlbGVhc2UgbWVtb3J5LgogICAg
VGhlIGFsbG9jYXRpb24vcmVsZWFzZSBmdW5jdGlvbnMgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUg
Y2FsbGVyLgogICAgVGhlIEFsbG9jX0ZuX3QgZnVuY3Rpb24gbXVzdCBhbGxvY2F0ZSBhIGNodW5r
IG9mIG1lbW9yeSBvZiBzaXplIHN6Qi4KSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfZGVidWdpbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9kZWJ1Z2luZm8uaAkocmV2aXNpb24g
MTY0NjEpCisrKyBpbmNsdWRlL3B1Yl90b29sX2RlYnVnaW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMyArMzEsMjIgQEAKICNpZm5kZWYgX19QVUJfVE9PTF9ERUJVR0lORk9fSAogI2RlZmlu
ZSBfX1BVQl9UT09MX0RFQlVHSU5GT19ICiAKLSNpbmNsdWRlICJwdWJfdG9vbF9iYXNpY3MuaCIg
ICAvLyBWR18gbWFjcm8KKyNpbmNsdWRlICJwdWJfdG9vbF9iYXNpY3MuaCIgICAvLyBWR18gbWFj
cm8sIERpRXBvY2gKICNpbmNsdWRlICJwdWJfdG9vbF94YXJyYXkuaCIgICAvLyBYQXJyYXkKIAor
CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ki8KLS8qPT09IE9idGFpbmluZyBkZWJ1ZyBpbmZvcm1hdGlvbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0qLworLyo9PT0gRGVidWdpbmZvIGVwb2No
cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSovCiAvKj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ki8KIAorLy8gVGhpcyByZXR1cm5zIHRoZSBjdXJyZW50IGVwb2NoLgorRGlFcG9j
aCBWR18oY3VycmVudF9EaUVwb2NoKSh2b2lkKTsKKworCisvKj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qPT09
IE9idGFpbmluZyBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIHNvdXJjZSBhcnRlZmFjdHMuICAg
ICAgICA9PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKIC8qIElNUE9SVEFOVCBDT01NRU5UIGFib3V0
IG1lbW9yeSBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwLgogCiAgICBNYW55IGZ1bmN0aW9ucyBi
ZWxvdyBhcmUgcmV0dXJuaW5nIGEgc3RyaW5nIGluIGEgSENoYXIqKiBhcmd1bWVudC4KQEAgLTc2
LDExICs4NSwxMSBAQAogICAgZGVtYW5nbGVzIEMrKyBmdW5jdGlvbiBuYW1lcy4gIFZHXyhnZXRf
Zm5uYW1lX3dfb2Zmc2V0KSBpcyB0aGUKICAgIHNhbWUsIGV4Y2VwdCBpdCBhcHBlbmRzICIrTiIg
dG8gc3ltYm9sIG5hbWVzIHRvIGluZGljYXRlIG9mZnNldHMuCiAgICBOT1RFOiBTZWUgSU1QT1JU
QU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hpcC4gKi8KLWV4
dGVybiBCb29sIFZHXyhnZXRfZmlsZW5hbWUpICggQWRkciBhLCBjb25zdCBIQ2hhcioqIGZpbGVu
YW1lICk7Ci1leHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZSkgICAoIEFkZHIgYSwgY29uc3QgSENo
YXIqKiBmbm5hbWUgKTsKLWV4dGVybiBCb29sIFZHXyhnZXRfbGluZW51bSkgICggQWRkciBhLCBV
SW50KiBsaW5lbnVtICk7CitleHRlcm4gQm9vbCBWR18oZ2V0X2ZpbGVuYW1lKSAoIERpRXBvY2gg
ZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBmaWxlbmFtZSApOworZXh0ZXJuIEJvb2wgVkdfKGdl
dF9mbm5hbWUpICAgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogZm5uYW1lICk7
CitleHRlcm4gQm9vbCBWR18oZ2V0X2xpbmVudW0pICAoIERpRXBvY2ggZXAsIEFkZHIgYSwgVUlu
dCogbGluZW51bSApOwogZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBmbm5hbWUg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggRGlFcG9jaCBlcCwgQWRkciBhLCBj
b25zdCBIQ2hhcioqIGZubmFtZSApOwogCiAvKiBUaGlzIG9uZSBpcyB0aGUgbW9zdCBnZW5lcmFs
LiAgSXQgZ2l2ZXMgZmlsZW5hbWUsIGxpbmUgbnVtYmVyIGFuZAogICAgb3B0aW9uYWxseSBkaXJl
Y3RvcnkgbmFtZS4gIGZpbGVuYW1lIGFuZCBsaW5lbnVtIG1heSBub3QgYmUgTlVMTC4KQEAgLTk1
LDcgKzEwNCw3IEBACiAgICBSZXR1cm5lZCB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhbnkgZmls
ZW5hbWUvbGluZSBpbmZvIGNvdWxkIGJlCiAgICBmb3VuZC4gKi8KIGV4dGVybiBCb29sIFZHXyhn
ZXRfZmlsZW5hbWVfbGluZW51bSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggQWRk
ciBhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggRGlFcG9jaCBlcCwgQWRkciBh
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL2NvbnN0IEhDaGFyKiog
ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9jb25zdCBI
Q2hhcioqIGRpcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9V
SW50KiBsaW5lbnVtICk7CkBAIC0xMDgsNyArMTE3LDggQEAKICAgIG9mIGl0cyBzeW1ib2xzLCB0
aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGFibGUgdG8gcmVjb2duaXNlIGZ1bmN0aW9uCiAgICBl
bnRyeSBwb2ludHMgd2l0aGluIGl0LgogICAgTk9URTogU2VlIElNUE9SVEFOVCBDT01NRU5UIGFi
b3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBvd25lcnNoaXAuICovCi1leHRlcm4gQm9vbCBWR18o
Z2V0X2ZubmFtZV9pZl9lbnRyeSkgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogZm5uYW1lICk7Citl
eHRlcm4gQm9vbCBWR18oZ2V0X2ZubmFtZV9pZl9lbnRyeSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIQ2hhcioqIGZu
bmFtZSApOwogCiB0eXBlZGVmCiAgICBlbnVtIHsKQEAgLTEyMSwxMyArMTMxLDEzIEBACiBleHRl
cm4gVmdfRm5OYW1lS2luZCBWR18oZ2V0X2ZubmFtZV9raW5kKSAoIGNvbnN0IEhDaGFyKiBuYW1l
ICk7CiAKIC8qIExpa2UgVkdfKGdldF9mbm5hbWVfa2luZCksIGJ1dCB0YWtlcyBhIGNvZGUgYWRk
cmVzcy4gKi8KLWV4dGVybiBWZ19Gbk5hbWVLaW5kIFZHXyhnZXRfZm5uYW1lX2tpbmRfZnJvbV9J
UCkgKCBBZGRyIGlwICk7CitleHRlcm4gVmdfRm5OYW1lS2luZCBWR18oZ2V0X2ZubmFtZV9raW5k
X2Zyb21fSVApICggRGlFcG9jaCBlcCwgQWRkciBpcCApOwogCiAvKiBMb29rcyB1cCBkYXRhX2Fk
ZHIgaW4gdGhlIGNvbGxlY3Rpb24gb2YgZGF0YSBzeW1ib2xzLCBhbmQgaWYgZm91bmQKICAgIHB1
dHMgaXRzIG5hbWUgKG9yIGFzIG11Y2ggYXMgd2lsbCBmaXQpIGludG8gZG5hbWVbMCAuLiBuX2Ru
YW1lLTFdLAogICAgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIHRlcm1pbmF0ZWQuICBB
bHNvIGRhdGFfYWRkcidzIG9mZnNldAogICAgZnJvbSB0aGUgc3ltYm9sIHN0YXJ0IGlzIHB1dCBp
bnRvICpvZmZzZXQuICovCi1leHRlcm4gQm9vbCBWR18oZ2V0X2RhdGFzeW1fYW5kX29mZnNldCko
IEFkZHIgZGF0YV9hZGRyLAorZXh0ZXJuIEJvb2wgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQp
KCBEaUVwb2NoIGVwLCBBZGRyIGRhdGFfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLypPVVQqL2NvbnN0IEhDaGFyKiogZG5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9QdHJkaWZmVCogb2Zmc2V0ICk7CiAK
QEAgLTE0Nyw3ICsxNTcsNyBAQAogQm9vbCBWR18oZ2V0X2RhdGFfZGVzY3JpcHRpb24pKCAKICAg
ICAgICAgLypNT0QqLyBYQXJyYXkqIC8qIG9mIEhDaGFyICovIGRuYW1lMXYsCiAgICAgICAgIC8q
TU9EKi8gWEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTJ2LAotICAgICAgICBBZGRyIGRhdGFf
YWRkcgorICAgICAgICBEaUVwb2NoIGVwLCBBZGRyIGRhdGFfYWRkcgogICAgICApOwogCiAvKiBT
dWNjZWVkcyBpZiB0aGUgYWRkcmVzcyBpcyB3aXRoaW4gYSBzaGFyZWQgb2JqZWN0IG9yIHRoZSBt
YWluIGV4ZWN1dGFibGUuCkBAIC0xNTQsNyArMTY0LDcgQEAKICAgIEl0IGZpcnN0IHNlYXJjaGVz
IGlmIEFkZHIgYSBiZWxvbmdzIHRvIHRoZSB0ZXh0IHNlZ21lbnQgb2YgZGVidWcgaW5mby4KICAg
IElmIG5vdCBmb3VuZCwgaXQgYXNrcyB0aGUgYWRkcmVzcyBzcGFjZSBtYW5hZ2VyIHdoZXRoZXIg
aXQKICAgIGtub3dzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1h
cHBpbmcuICovCi1leHRlcm4gQm9vbCBWR18oZ2V0X29iam5hbWUpICAoIEFkZHIgYSwgY29uc3Qg
SENoYXIqKiBvYmpuYW1lICk7CitleHRlcm4gQm9vbCBWR18oZ2V0X29iam5hbWUpICggRGlFcG9j
aCBlcCwgQWRkciBhLCBjb25zdCBIQ2hhcioqIG9iam5hbWUgKTsKIAogCiAvKiBDdXJzb3IgYWxs
b3dpbmcgdG8gZGVzY3JpYmUgaW5saW5lZCBmdW5jdGlvbiBjYWxscyBhdCBhbiBJUCwKQEAgLTE2
OSw3ICsxNzksNyBAQAogICAgZWlwIGNhbiBwb3NzaWJseSBjb3JyZXNwb25kcyB0byBpbmxpbmVk
IGZ1bmN0aW9uIGNhbGwocykuCiAgICBUbyBkZXNjcmliZSBlaXAgYW5kIHRoZSBpbmxpbmVkIGZ1
bmN0aW9uIGNhbGxzLCB0aGUgZm9sbG93aW5nIG11c3QKICAgIGJlIGRvbmU6Ci0gICAgICAgSW5s
SVBDdXJzb3IgKmlpcGMgPSBWR18obmV3X0lJUEMpKGVpcCk7CisgICAgICAgSW5sSVBDdXJzb3Ig
KmlpcGMgPSBWR18obmV3X0lJUEMpKGVwLCBlaXApOwogICAgICAgIGRvIHsKICAgICAgICAgICBi
dWYgPSBWR18oZGVzY3JpYmVfSVApKGVpcCwgaWlwYyk7CiAgICAgICAgICAgLi4uIHVzZSBidWYg
Li4uCkBAIC0xODIsMTIgKzE5MiwxNiBAQAogICAgTm90ZSwgdGhhdCB0aGUgcmV0dXJuZWQgc3Ry
aW5nIGlzIGFsbG9jYXRlZCBpbiBhIHN0YXRpYyBidWZmZXIgbG9jYWwgdG8KICAgIFZHXyhkZXNj
cmliZV9JUCkuIFRoYXQgYnVmZmVyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBldmVyeSBpbnZv
Y2F0aW9uLgogICAgVGhlcmVmb3JlLCBjYWxsZXJzIG5lZWQgdG8gcG9zc2libHkgc3Rhc2ggYXdh
eSB0aGUgc3RyaW5nLgorCisgICBTaW5jZSB0aGlzIG1hcHMgYSBjb2RlIGxvY2F0aW9uIHRvIGEg
c291cmNlIGFydGVmYWN0IChmdW5jdGlvbiBuYW1lcyksCisgICBuZXdfSUlQQyByZXF1aXJlcyBh
IERpRXBvY2ggYXJndW1lbnQgKGVwKSB0b28uCiAqLwotZXh0ZXJuIGNvbnN0IEhDaGFyKiBWR18o
ZGVzY3JpYmVfSVApKEFkZHIgZWlwLCBjb25zdCBJbmxJUEN1cnNvciogaWlwYyk7CitleHRlcm4g
Y29uc3QgSENoYXIqIFZHXyhkZXNjcmliZV9JUCkoRGlFcG9jaCBlcCwgQWRkciBlaXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5sSVBDdXJzb3IqIGlpcGMp
OwogCiAvKiBCdWlsZHMgYSBJSVBDIChJbmxpbmVkIElQIEN1cnNvcikgdG8gZGVzY3JpYmUgZWlw
IGFuZCBhbGwgdGhlIGlubGluZWQgY2FsbHMKICAgIGF0IGVpcC4gU3VjaCBhIGN1cnNvciBtdXN0
IGJlIGRlbGV0ZWQgYWZ0ZXIgdXNlIHVzaW5nIFZHXyhkZWxldGVfSUlQQykuICovCi1leHRlcm4g
SW5sSVBDdXJzb3IqIFZHXyhuZXdfSUlQQykoQWRkciBlaXApOworZXh0ZXJuIElubElQQ3Vyc29y
KiBWR18obmV3X0lJUEMpKERpRXBvY2ggZXAsIEFkZHIgZWlwKTsKIC8qIE1vdmUgdGhlIGN1cnNv
ciB0byB0aGUgbmV4dCBjYWxsIHRvIGRlc2NyaWJlLgogICAgUmV0dXJucyBUcnVlIGlmIHRoZXJl
IGFyZSBzdGlsbCBjYWxscyB0byBkZXNjcmliZS4KICAgIEZhbHNlIGlmIG5vdGhpbmcgdG8gZGVz
Y3JpYmUgYW55bW9yZS4gKi8KQEAgLTIzOSw3ICsyNTMsNyBAQAogCiAKIC8qPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0q
LwotLyo9PT0gT2J0YWluaW5nIGRlYnVnIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID09PSovCisvKj09PSBPYnRhaW5pbmcgaW5mb3JtYXRpb24gcGVydGFpbmlu
ZyB0byBzaGFyZWQgb2JqZWN0cy4gICAgICAgICAgPT09Ki8KIC8qPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAv
KiBBIHdheSB0byBtYWtlIGxpbWl0ZWQgZGVidWdpbmZvIHF1ZXJpZXMgb24gYSBwZXItbWFwcGVk
LW9iamVjdApAQCAtMjQ4LDcgKzI2Miw3IEBACiAKIC8qIFJldHVybnMgTlVMTCBpZiB0aGUgRGVi
dWdJbmZvIGlzbid0IGZvdW5kLiAgSXQgZG9lc24ndCBtYXR0ZXIgaWYKICAgIGRlYnVnIGluZm8g
aXMgcHJlc2VudCBvciBub3QuICovCi1EZWJ1Z0luZm8qIFZHXyhmaW5kX0RlYnVnSW5mbykgKCBB
ZGRyIGEgKTsKK0RlYnVnSW5mbyogVkdfKGZpbmRfRGVidWdJbmZvKSAoIERpRXBvY2ggZXAsIEFk
ZHIgYSApOwogCiAvKiBGaXNoIGJpdHMgb3V0IG9mIERlYnVnSW5mb3MuICovCiBBZGRyICAgICAg
ICAgIFZHXyhEZWJ1Z0luZm9fZ2V0X3RleHRfYXZtYSkgICAoIGNvbnN0IERlYnVnSW5mbyAqZGkg
KTsKSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfZXJyb3JtZ3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNs
dWRlL3B1Yl90b29sX2Vycm9ybWdyLmgJKHJldmlzaW9uIDE2NDYxKQorKysgaW5jbHVkZS9wdWJf
dG9vbF9lcnJvcm1nci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYsMTEgQEAKIAogLyog
VXNlZnVsIGluIFZHXyh0ZGljdCkudG9vbF9lcnJvcl9tYXRjaGVzX3N1cHByZXNzaW9uKCksCiAg
KiBWR18odGRpY3QpLnRvb2xfcHBfRXJyb3IoKSwgZXRjICovCi1FeGVDb250ZXh0KiAgVkdfKGdl
dF9lcnJvcl93aGVyZSkgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKLUVycm9yS2luZCAgICBWR18o
Z2V0X2Vycm9yX2tpbmQpICAgICggY29uc3QgRXJyb3IqIGVyciApOwotQWRkciAgICAgICAgIFZH
XyhnZXRfZXJyb3JfYWRkcmVzcykgKCBjb25zdCBFcnJvciogZXJyICk7Ci1jb25zdCBIQ2hhciog
VkdfKGdldF9lcnJvcl9zdHJpbmcpICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKLXZvaWQqICAgICAg
ICBWR18oZ2V0X2Vycm9yX2V4dHJhKSAgICggY29uc3QgRXJyb3IqIGVyciApOworRXhlQ29udGV4
dEFuZEVwb2NoICBWR18oZ2V0X2Vycm9yX3doZXJlKSAgICggY29uc3QgRXJyb3IqIGVyciApOwor
RXJyb3JLaW5kICAgICAgICAgICBWR18oZ2V0X2Vycm9yX2tpbmQpICAgICggY29uc3QgRXJyb3Iq
IGVyciApOworQWRkciAgICAgICAgICAgICAgICBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpICggY29u
c3QgRXJyb3IqIGVyciApOworY29uc3QgSENoYXIqICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmlu
ZykgICggY29uc3QgRXJyb3IqIGVyciApOwordm9pZCogICAgICAgICAgICAgICBWR18oZ2V0X2Vy
cm9yX2V4dHJhKSAgICggY29uc3QgRXJyb3IqIGVyciApOwogCiAvKiBDYWxsIHRoaXMgd2hlbiBh
biBlcnJvciBvY2N1cnMuICBJdCB3aWxsIGJlIHJlY29yZGVkIGlmIGl0IGhhc24ndCBiZWVuCiAg
ICBzZWVuIGJlZm9yZS4gIElmIGl0IGhhcywgdGhlIGV4aXN0aW5nIGVycm9yIHJlY29yZCB3aWxs
IGhhdmUgaXRzIGNvdW50CkBAIC05MCw3ICs5MCw3IEBACiAgICB3aGV0aGVyIHRvIGFkZCB0aGUg
ZXJyb3IgaW4gdGhlIGVycm9yIHRvdGFsIGNvdW50IChhbm90aGVyIG1pbGQgaGFjaykuICovCiBl
eHRlcm4gQm9vbCBWR18odW5pcXVlX2Vycm9yKSAoIFRocmVhZElkIHRpZCwgRXJyb3JLaW5kIGVr
aW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIGEsIGNvbnN0IEhDaGFy
KiBzLCB2b2lkKiBleHRyYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhlQ29u
dGV4dCogd2hlcmUsIEJvb2wgcHJpbnRfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEV4ZUNvbnRleHRBbmRFcG9jaCB3aGVyZSwgQm9vbCBwcmludF9lcnJvciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBhbGxvd19HREJfYXR0YWNoLCBCb29sIGNv
dW50X2Vycm9yICk7CiAKIC8qIEdldHMgZnJvbSBmZCAoYW4gb3BlbmVkIHN1cHByZXNzaW9uIGZp
bGUpIGEgbm9uLWJsYW5rLCBub24tY29tbWVudApJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9leGVj
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJfdG9vbF9leGVjb250ZXh0LmgJKHJl
dmlzaW9uIDE2NDYxKQorKysgaW5jbHVkZS9wdWJfdG9vbF9leGVjb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDggKzMwLDE0IEBACiAjaWZuZGVmIF9fUFVCX1RPT0xfRVhFQ09OVEVYVF9I
CiAjZGVmaW5lIF9fUFVCX1RPT0xfRVhFQ09OVEVYVF9ICiAKLSNpbmNsdWRlICJwdWJfdG9vbF9i
YXNpY3MuaCIgICAvLyBUaHJlYWRJRAorI2luY2x1ZGUgInB1Yl90b29sX2Jhc2ljcy5oIiAgICAg
Ly8gVGhyZWFkSUQKKyNpbmNsdWRlICJwdWJfdG9vbF9kZWJ1Z2luZm8uaCIgIC8vIERpRXBvY2gK
IAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ki8KKy8qPT09IEV4ZUNvbnRleHQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0qLworLyo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisK
IC8vIEl0J3MgYW4gYWJzdHJhY3QgdHlwZS4KIHR5cGVkZWYKICAgIHN0cnVjdCBfRXhlQ29udGV4
dApAQCAtODQsOSArOTAsNiBAQAogZXh0ZXJuIEJvb2wgVkdfKGVxX0V4ZUNvbnRleHQpICggVmdS
ZXMgcmVzLCBjb25zdCBFeGVDb250ZXh0KiBlMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEV4ZUNvbnRleHQqIGUyICk7CiAKLS8vIFByaW50IGFuIEV4ZUNvbnRleHQu
Ci1leHRlcm4gdm9pZCBWR18ocHBfRXhlQ29udGV4dCkgKCBFeGVDb250ZXh0KiBlYyApOwotCiAv
LyBHZXQgdGhlIDMyLWJpdCB1bmlxdWUgcmVmZXJlbmNlIG51bWJlciBmb3IgdGhpcyBFeGVDb250
ZXh0CiAvLyAodGhlICJFeGVDb250ZXh0IFVuaXF1ZSIpLiAgR3VhcmFudGVlZCB0byBiZSBub256
ZXJvIGFuZCB0byBiZSBhCiAvLyBtdWx0aXBsZSBvZiBmb3VyIChpb3csIHRoZSBsb3dlc3QgdHdv
IGJpdHMgYXJlIGd1YXJhbnRlZWQgdG8KQEAgLTExMywxMSArMTE2LDU2IEBACiAvLyBNYWtlIGFu
IEV4ZUNvbnRleHQgY29udGFpbmluZyBleGFjdGx5IHRoZSBzcGVjaWZpZWQgc3RhY2sgZnJhbWVz
LgogRXhlQ29udGV4dCogVkdfKG1ha2VfRXhlQ29udGV4dF9mcm9tX1N0YWNrVHJhY2UpKCBjb25z
dCBBZGRyKiBpcHMsIFVJbnQgbl9pcHMgKTsKIAotLy8gUmV0dXJucyB0aGUgIm51bGwiIGV4ZSBj
b250ZXh0LiBUaGUgbnVsbCBleGVjb250ZXh0IGlzIGFuIGFydGlmaWNpYWwKLS8vIGV4ZSBjb250
ZXh0LCB3aXRoIGEgc3RhY2sgdHJhY2UgbWFkZSBvZiBvbmUgQWRkciAodGhlIE5VTEwgYWRkcmVz
cykuCi1leHRlcm4gCi1FeGVDb250ZXh0KiBWR18obnVsbF9FeGVDb250ZXh0KSAodm9pZCk7CiAK
Ky8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0qLworLyo9PT0gRXhlQ29udGV4dEFuZEVwb2NoICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSovCisvKj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyog
QSBwbGFpbiBFeGVDb250ZXh0IGlzIG5vdCBnZW5lcmFsbHkgc3ltYm9saXNhYmxlLCBzaW5jZSB3
ZSBhbHNvIG5lZWQgdG8KKyAgIGtub3cgd2hpY2ggRGVidWdJbmZvIGVwb2NoIGl0IHBlcnRhaW5z
IHRvLiAgRXhlQ29udGV4dEFuZEVwb2NoIHBhaXJzIHRoZW0KKyAgIHVwLiAgTm90ZSB0aGlzIGlz
IGp1c3QgdHdvIHdvcmRzLCBzbyBwYXNzaW5nIGl0IGFyb3VuZCBieSB2YWx1ZSBpcworICAgZmlu
ZS4gKi8KK3R5cGVkZWYKKyAgIHN0cnVjdCB7CisgICAgICBFeGVDb250ZXh0KiBlYzsKKyAgICAg
IERpRXBvY2ggICAgIGVwb2NoOworICAgfQorICAgRXhlQ29udGV4dEFuZEVwb2NoOworCisvLyBH
ZW5lcmF0ZXMgYSBjb21wbGV0ZWx5IGludmFsaWQgRXhlQ29udGV4dEFuZEVwb2NoLCB3aXRoIE5V
TEwgZm9yIC5lYyBhbmQKKy8vIHplcm8gZm9yIC5lcG9jaC4gIEJvdGggdmFsdWVzIGFyZSBpbnZh
bGlkLgorRXhlQ29udGV4dEFuZEVwb2NoIFZHXyhpbnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkg
KCB2b2lkICk7CisKKy8vIFRha2VzIGFuIEV4ZUNvbnRleHQgYW5kIHRhZ3MgaXQgd2l0aCB0aGUg
Y3VycmVudCBlcG9jaCwgd2hpY2ggaXMKKy8vIGdlbmVyYWxseSB3aGF0IHdlIHdhbnQgdG8gZG8u
CitFeGVDb250ZXh0QW5kRXBvY2ggVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKCBFeGVD
b250ZXh0KiBlYyApOworCisvLyBQcmludCBhbiBFeGVDb250ZXh0QW5kRXBvY2guICBXZSBjYW4n
dCBwcmludCBhIHBsYWluIEV4ZUNvbnRleHQKKy8vIGJlY2F1c2Ugd2UgY2FuJ3Qgc3ltYm9saXNp
bmcgaXQgd2l0aG91dCBrbm93aW5nIHdoaWNoIGRlYnVnaW5mbworLy8gZXBvY2ggaXQgcGVydGFp
bnMgdG8uCit2b2lkIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpICggRXhlQ29udGV4dEFuZEVw
b2NoIGVjZSApOworCisvLyBSZXR1cm5zIHRoZSAibnVsbCIgZXhlIGNvbnRleHQgdGFnZ2VkIHdp
dGggdGhlIGN1cnJlbnQgZGVidWdpbmZvCisvLyBlcG9jaC4gVGhlIG51bGwgZXhlY29udGV4dCBp
cyBhbiBhcnRpZmljaWFsIGV4ZSBjb250ZXh0LCB3aXRoIGEgc3RhY2sKKy8vIHRyYWNlIG1hZGUg
b2Ygb25lIEFkZHIgKHRoZSBOVUxMIGFkZHJlc3MpLCBhbmQgdGhlIGN1cnJlbnQgZXBvY2guCitF
eGVDb250ZXh0QW5kRXBvY2ggVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSAoIHZvaWQgKTsK
KworLy8gSXMgdGhpcyBhIHZhbHVlIG9idGFpbmVkIGZyb20gVkdfKG51bGxfRXhlQ29udGV4dEFu
ZEVwb2NoKSA/CitCb29sIFZHXyhpc19udWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkoIEV4ZUNvbnRl
eHRBbmRFcG9jaCBlY2UgKTsKKworI2lmIDAKKy8vIENvbXBhcmUgdHdvIEV4ZUNvbnRleHRBbmRF
cG9jaHMgZm9yIGVxdWFsaXR5LgorLy8gJ3JlcycgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgd2l0
aCBWR18oZXFfRXhlQ29udGV4dCkuCitCb29sIFZHXyhlcV9FeGVDb250ZXh0QW5kRXBvY2gpICgg
VmdSZXMgcmVzLCBFeGVDb250ZXh0QW5kRXBvY2ggZWNlMSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZUNvbnRleHRBbmRFcG9jaCBlY2UyICk7CisKKy8v
IEdlbmVyYXRlIGFuIGFyYml0cmFyeSB0b3RhbCBvcmRlciBvbiBFeGVDb250ZXh0QW5kRXBvY2hz
LiAgTm90ZSB0aGlzCisvLyBpcyBzaGFsbG93LCB0aGF0IGlzLCBpdCBkb2Vzbid0IGxvb2sgaW5z
aWRlIHRoZSBFeGVDb250ZXh0KiBhdCBhbGwuCisvLyBSZXR1cm5zIC0xIGZvciA8LCAwIGZvciA9
PSwgYW5kIDEgZm9yID4uCitXb3JkIFZHXyhjbXBPcmRfRXhlQ29udGV4dEFuZEVwb2NoX3NoYWxs
b3cpICggRXhlQ29udGV4dEFuZEVwb2NoIGVjZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRXhlQ29udGV4dEFuZEVwb2NoIGVjZTIgKTsKKyNlbmRpZgor
CiAjZW5kaWYgICAvLyBfX1BVQl9UT09MX0VYRUNPTlRFWFRfSAogCiAvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
SW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfb3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUv
cHViX3Rvb2xfb3B0aW9ucy5oCShyZXZpc2lvbiAxNjQ2MSkKKysrIGluY2x1ZGUvcHViX3Rvb2xf
b3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDEzIEBACiAvKiBDb250aW51
ZSBzdGFjayB0cmFjZXMgYmVsb3cgbWFpbigpPyAgRGVmYXVsdDogTk8gKi8KIGV4dGVybiBCb29s
IFZHXyhjbG9fc2hvd19iZWxvd19tYWluKTsKIAorLyogS2VlcCBzeW1ib2xzIChhbmQgYWxsIG90
aGVyIGRlYnVnaW5mbykgZm9yIGNvZGUgdGhhdCBpcyB1bmxvYWRlZCAoZGxjbG9zZQorICAgb3Ig
c2ltaWxhcikgc28gdGhhdCBzdGFjayB0cmFjZXMgY2FuIHN0aWxsIGdpdmUgbGluZS9maWxlIGlu
Zm8gZm9yCisgICBwcmV2aW91c2x5IGNhcHR1cmVkIHN0YWNrIHRyYWNlcy4gIGUuZy4gLi4uIHNo
b3dpbmcgd2hlcmUgYSBibG9jayB3YXMKKyAgIGFsbG9jYXRlZCBlLmcuIGxlYWtzIG9mIG9yIGFj
Y2Vzc2VzIGp1c3Qgb3V0c2lkZSBhIGJsb2NrLiAqLworZXh0ZXJuIEJvb2wgVkdfKGNsb19rZWVw
X2RlYnVnaW5mbyk7CiAKKwogLyogVXNlZCB0byBleHBhbmQgZmlsZSBuYW1lcy4gICJvcHRpb25f
bmFtZSIgaXMgdGhlIG9wdGlvbiBuYW1lLCBlZy4KICAgICItLWxvZy1maWxlIi4gICdmb3JtYXQn
IGlzIHdoYXQgZm9sbG93cywgZWcuICJjYWNoZWdyaW5kLm91dC4lcCIuICBJbgogICAgJ2Zvcm1h
dCc6IApJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9zdGFja3RyYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aW5jbHVkZS9wdWJfdG9vbF9zdGFja3RyYWNlLmgJKHJldmlzaW9uIDE2NDYxKQorKysgaW5jbHVk
ZS9wdWJfdG9vbF9zdGFja3RyYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpZm5kZWYgX19QVUJfVE9PTF9TVEFDS1RSQUNFX0gKICNkZWZpbmUgX19QVUJfVE9PTF9TVEFD
S1RSQUNFX0gKIAotI2luY2x1ZGUgInB1Yl90b29sX2Jhc2ljcy5oIiAgIC8vIEFkZHIKKyNpbmNs
dWRlICJwdWJfdG9vbF9iYXNpY3MuaCIgICAvLyBBZGRyLCBEaUVwb2NoCiAKIC8vIFRoZSBiYXNp
YyBzdGFjayB0cmFjZSB0eXBlOiAganVzdCBhbiBhcnJheSBvZiBjb2RlIGFkZHJlc3Nlcy4KIHR5
cGVkZWYgQWRkciogU3RhY2tUcmFjZTsKQEAgLTY0LDE5ICs2NCwxOSBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9TdGFja1RyYWNlIGZwcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXb3JkIGZpcnN0X2lwX2RlbHRhICk7CiAKLS8vIEFwcGx5
IGEgZnVuY3Rpb24gdG8gZXZlcnkgZWxlbWVudCBpbiB0aGUgU3RhY2tUcmFjZS4gIFRoZSBwYXJh
bWV0ZXIKLS8vICduJyBnaXZlcyB0aGUgaW5kZXggb2YgdGhlIHBhc3NlZCBpcC4gICdvcGFxdWUn
IGlzIGFuIGFyYml0cmFyeQotLy8gcG9pbnRlciBwcm92aWRlZCB0byBlYWNoIGludm9jYXRpb24g
b2YgJ2FjdGlvbicgKGEgcG9vciBtYW4ncwotLy8gY2xvc3VyZSkuICBEb2Vzbid0IGdvIGJlbG93
IG1haW4oKSB1bmxlc3MgLS1zaG93LWJlbG93LW1haW49eWVzIGlzCi0vLyBzZXQuCisvLyBBcHBs
eSBhIGZ1bmN0aW9uIHRvIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIFN0YWNrVHJhY2UuICBUaGUgcGFy
YW1ldGVyICduJworLy8gZ2l2ZXMgdGhlIGluZGV4IG9mIHRoZSBwYXNzZWQgaXAuICAnb3BhcXVl
JyBpcyBhbiBhcmJpdHJhcnkgcG9pbnRlcgorLy8gcHJvdmlkZWQgdG8gZWFjaCBpbnZvY2F0aW9u
IG9mICdhY3Rpb24nIChhIHBvb3IgbWFuJ3MgY2xvc3VyZSkuICAnZXAnIGlzCisvLyB0aGUgZGVi
dWdpbmZvIGVwb2NoIGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvZGUgYWRkcmVzc2VzIGluIHRo
ZSBzdGFjaworLy8gdHJhY2UuICBEb2Vzbid0IGdvIGJlbG93IG1haW4oKSB1bmxlc3MgLS1zaG93
LWJlbG93LW1haW49eWVzIGlzIHNldC4KIGV4dGVybiB2b2lkIFZHXyhhcHBseV9TdGFja1RyYWNl
KSgKLSAgICAgICAgICAgICAgIHZvaWQoKmFjdGlvbikoVUludCBuLCBBZGRyIGlwLCB2b2lkKiBv
cGFxdWUpLAorICAgICAgICAgICAgICAgdm9pZCgqYWN0aW9uKShVSW50IG4sIERpRXBvY2ggZXAs
IEFkZHIgaXAsIHZvaWQqIG9wYXF1ZSksCiAgICAgICAgICAgICAgICB2b2lkKiBvcGFxdWUsCi0g
ICAgICAgICAgICAgICBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcworICAgICAgICAgICAgICAg
RGlFcG9jaCBlcCwgU3RhY2tUcmFjZSBpcHMsIFVJbnQgbl9pcHMKICAgICAgICAgICAgICk7CiAK
IC8vIFByaW50IGEgU3RhY2tUcmFjZS4KLWV4dGVybiB2b2lkIFZHXyhwcF9TdGFja1RyYWNlKSAo
IFN0YWNrVHJhY2UgaXBzLCBVSW50IG5faXBzICk7CitleHRlcm4gdm9pZCBWR18ocHBfU3RhY2tU
cmFjZSkgKCBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcywgRGlFcG9jaCBlcCApOwogCiAvLyBH
ZXRzIGFuZCBpbW1lZGlhdGVseSBwcmludHMgYSBTdGFja1RyYWNlLiAgSnVzdCBhIGJpdCBzaW1w
bGVyIHRoYW4KIC8vIGNhbGxpbmcgVkdfKGdldF9TdGFja1RyYWNlKSgpIHRoZW4gVkdfKHBwX1N0
YWNrVHJhY2UpKCkuCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX3Rvb2xpZmFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfdG9vbGlmYWNlLmgJKHJldmlzaW9uIDE2NDYxKQorKysg
aW5jbHVkZS9wdWJfdG9vbF90b29saWZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2
Myw3IEBACiAgICBvZiBhbiBhZGRyZXNzID8gKi8KIGV4dGVybiB2b2lkIFZHXyhuZWVkc19pbmZv
X2xvY2F0aW9uKSAoCiAgICAvLyBHZXQgYW5kIHBwIGluZm9ybWF0aW9uIGFib3V0IEFkZHIKLSAg
IHZvaWQgKCppbmZvX2xvY2F0aW9uKShBZGRyKQorICAgdm9pZCAoKmluZm9fbG9jYXRpb24pKERp
RXBvY2gsIEFkZHIpCiApOwogCiAvKiBEbyB3ZSBuZWVkIHRvIHNlZSB2YXJpYWJsZSB0eXBlIGFu
ZCBsb2NhdGlvbiBpbmZvcm1hdGlvbj8gKi8KSW5kZXg6IG1lbWNoZWNrL21jX2Vycm9ycy5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIG1lbWNoZWNrL21jX2Vycm9ycy5jCShyZXZpc2lvbiAxNjQ2MSkKKysrIG1l
bWNoZWNrL21jX2Vycm9ycy5jCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxNSArOTQsMTUgQEAKICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICBTaXplVCBzekI7ICAgLy8gc2l6ZSBvZiB2YWx1ZSBpbiBi
eXRlcwogICAgICAgICAgLy8gT3JpZ2luIGluZm8KLSAgICAgICAgIFVJbnQgICAgICAgIG90YWc7
ICAgICAgLy8gb3JpZ2luIHRhZwotICAgICAgICAgRXhlQ29udGV4dCogb3JpZ2luX2VjOyAvLyBm
aWxsZWQgaW4gbGF0ZXIKKyAgICAgICAgIFVJbnQgICAgICAgICAgICAgICBvdGFnOyAgICAgICAv
LyBvcmlnaW4gdGFnCisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggb3JpZ2luX2VjZTsgLy8g
ZmlsbGVkIGluIGxhdGVyCiAgICAgICB9IFZhbHVlOwogCiAgICAgICAvLyBVc2Ugb2YgYW4gdW5k
ZWZpbmVkIHZhbHVlIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoIG9yIG1vdmUuCiAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgLy8gT3JpZ2luIGluZm8KLSAgICAgICAgIFVJbnQgICAgICAgIG90YWc7
ICAgICAgLy8gb3JpZ2luIHRhZwotICAgICAgICAgRXhlQ29udGV4dCogb3JpZ2luX2VjOyAvLyBm
aWxsZWQgaW4gbGF0ZXIKKyAgICAgICAgIFVJbnQgICAgICAgICAgICAgICBvdGFnOyAgICAgICAv
LyBvcmlnaW4gdGFnCisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggb3JpZ2luX2VjZTsgLy8g
ZmlsbGVkIGluIGxhdGVyCiAgICAgICB9IENvbmQ7CiAKICAgICAgIC8vIEFkZHJlc3NhYmlsaXR5
IGVycm9yIGluIGNvcmUgKHNpZ25hbC1oYW5kbGluZykgb3BlcmF0aW9uLgpAQCAtMTI3LDggKzEy
Nyw4IEBACiAgICAgICAvLyBTeXN0ZW0gY2FsbCByZWdpc3RlciBpbnB1dCBjb250YWlucyB1bmRl
ZmluZWQgYnl0ZXMuCiAgICAgICBzdHJ1Y3QgewogICAgICAgICAgLy8gT3JpZ2luIGluZm8KLSAg
ICAgICAgIFVJbnQgICAgICAgIG90YWc7ICAgICAgLy8gb3JpZ2luIHRhZwotICAgICAgICAgRXhl
Q29udGV4dCogb3JpZ2luX2VjOyAvLyBmaWxsZWQgaW4gbGF0ZXIKKyAgICAgICAgIFVJbnQgICAg
ICAgICAgICAgICBvdGFnOyAgICAgICAvLyBvcmlnaW4gdGFnCisgICAgICAgICBFeGVDb250ZXh0
QW5kRXBvY2ggb3JpZ2luX2VjZTsgLy8gZmlsbGVkIGluIGxhdGVyCiAgICAgICB9IFJlZ1BhcmFt
OwogCiAgICAgICAvLyBTeXN0ZW0gY2FsbCBtZW1vcnkgaW5wdXQgY29udGFpbnMgdW5kZWZpbmVk
L3VuYWRkcmVzc2FibGUgYnl0ZXMKQEAgLTEzNiw4ICsxMzYsOCBAQAogICAgICAgICAgQm9vbCAg
ICAgaXNBZGRyRXJyOyAgLy8gQWRkcmVzc2FiaWxpdHkgb3IgZGVmaW5lZG5lc3MgZXJyb3I/CiAg
ICAgICAgICBBZGRySW5mbyBhaTsKICAgICAgICAgIC8vIE9yaWdpbiBpbmZvCi0gICAgICAgICBV
SW50ICAgICAgICBvdGFnOyAgICAgIC8vIG9yaWdpbiB0YWcKLSAgICAgICAgIEV4ZUNvbnRleHQq
IG9yaWdpbl9lYzsgLy8gZmlsbGVkIGluIGxhdGVyCisgICAgICAgICBVSW50ICAgICAgICAgICAg
ICAgb3RhZzsgICAgICAgLy8gb3JpZ2luIHRhZworICAgICAgICAgRXhlQ29udGV4dEFuZEVwb2No
IG9yaWdpbl9lY2U7IC8vIGZpbGxlZCBpbiBsYXRlcgogICAgICAgfSBNZW1QYXJhbTsKIAogICAg
ICAgLy8gUHJvYmxlbSBmb3VuZCBmcm9tIGEgY2xpZW50IHJlcXVlc3QgbGlrZSBDSEVDS19NRU1f
SVNfQUREUkVTU0FCTEUuCkBAIC0xNDUsOCArMTQ1LDggQEAKICAgICAgICAgIEJvb2wgICAgIGlz
QWRkckVycjsgIC8vIEFkZHJlc3NhYmlsaXR5IG9yIGRlZmluZWRuZXNzIGVycm9yPwogICAgICAg
ICAgQWRkckluZm8gYWk7CiAgICAgICAgICAvLyBPcmlnaW4gaW5mbwotICAgICAgICAgVUludCAg
ICAgICAgb3RhZzsgICAgICAvLyBvcmlnaW4gdGFnCi0gICAgICAgICBFeGVDb250ZXh0KiBvcmln
aW5fZWM7IC8vIGZpbGxlZCBpbiBsYXRlcgorICAgICAgICAgVUludCAgICAgICAgICAgICAgIG90
YWc7ICAgICAgIC8vIG9yaWdpbiB0YWcKKyAgICAgICAgIEV4ZUNvbnRleHRBbmRFcG9jaCBvcmln
aW5fZWNlOyAvLyBmaWxsZWQgaW4gbGF0ZXIKICAgICAgIH0gVXNlcjsKIAogICAgICAgLy8gUHJv
Z3JhbSB0cmllZCB0byBmcmVlKCkgc29tZXRoaW5nIHRoYXQncyBub3QgYSBoZWFwIGJsb2NrICh0
aGlzCkBAIC0yNzksMTAgKzI3OSwxMCBAQAogICAgfQogfQogCi1zdGF0aWMgdm9pZCBtY19wcF9v
cmlnaW4gKCBFeGVDb250ZXh0KiBlYywgVUludCBva2luZCApCitzdGF0aWMgdm9pZCBtY19wcF9v
cmlnaW4gKCBFeGVDb250ZXh0QW5kRXBvY2ggZWNlLCBVSW50IG9raW5kICkKIHsKICAgIGNvbnN0
IEhDaGFyKiBzcmMgPSBOVUxMOwotICAgdGxfYXNzZXJ0KGVjKTsKKyAgIHRsX2Fzc2VydChlY2Uu
ZWMpOwogCiAgICBzd2l0Y2ggKG9raW5kKSB7CiAgICAgICBjYXNlIE1DX09LSU5EX1NUQUNLOiAg
IHNyYyA9ICIgYnkgYSBzdGFjayBhbGxvY2F0aW9uIjsgYnJlYWs7CkBAIC0yOTUsMTAgKzI5NSwx
MCBAQAogICAgaWYgKFZHXyhjbG9feG1sKSkgewogICAgICAgZW1pdCggIiAgPGF1eHdoYXQ+VW5p
bml0aWFsaXNlZCB2YWx1ZSB3YXMgY3JlYXRlZCVzPC9hdXh3aGF0PlxuIiwKICAgICAgICAgICAg
IHNyYyk7Ci0gICAgICBWR18ocHBfRXhlQ29udGV4dCkoIGVjICk7CisgICAgICBWR18ocHBfRXhl
Q29udGV4dEFuZEVwb2NoKSggZWNlICk7CiAgICB9IGVsc2UgewogICAgICAgZW1pdCggIiBVbmlu
aXRpYWxpc2VkIHZhbHVlIHdhcyBjcmVhdGVkJXNcbiIsIHNyYyk7Ci0gICAgICBWR18ocHBfRXhl
Q29udGV4dCkoIGVjICk7CisgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggZWNlICk7
CiAgICB9CiB9CiAKQEAgLTM3OSw3ICszNzksNyBAQAogICAgICAgICAgZW1pdCggIiAgICA8bGVh
a2VkYmxvY2tzPiV1PC9sZWFrZWRibG9ja3M+XG4iLCBsci0+bnVtX2Jsb2Nrcyk7CiAgICAgICAg
ICBlbWl0KCAiICA8L3h3aGF0PlxuIiApOwogICAgICAgfQotICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHQpKGxyLT5rZXkuYWxsb2NhdGVkX2F0KTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBv
Y2gpKGxyLT5rZXkuYWxsb2NhdGVkX2F0KTsKICAgIH0gZWxzZSB7IC8qICEgaWYgKHhtbCkgKi8K
ICAgICAgIGlmIChsci0+aW5kaXJlY3Rfc3pCID4gMCkgewogICAgICAgICAgZW1pdCgKQEAgLTQw
MSw3ICs0MDEsNyBAQAogICAgICAgICAgICAgbl90aGlzX3JlY29yZCwgbl90b3RhbF9yZWNvcmRz
CiAgICAgICAgICApOwogICAgICAgfQotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKGxyLT5rZXku
YWxsb2NhdGVkX2F0KTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKGxyLT5rZXku
YWxsb2NhdGVkX2F0KTsKICAgIH0gLyogaWYgKHhtbCkgKi8KIH0KIApAQCAtNDI3LDExICs0Mjcs
MTEgQEAKICAgICAgICAgICAgIGVtaXQoICIgIDxraW5kPkNvcmVNZW1FcnJvcjwva2luZD5cbiIg
KTsKICAgICAgICAgICAgIGVtaXQoICIgIDx3aGF0PiVwUyBjb250YWlucyB1bmFkZHJlc3NhYmxl
IGJ5dGUocyk8L3doYXQ+XG4iLAogICAgICAgICAgICAgICAgICAgVkdfKGdldF9lcnJvcl9zdHJp
bmcpKGVycikpOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgg
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGVtaXQoICIlcyBjb250YWlucyB1bmFkZHJlc3NhYmxlIGJ5dGUocylcbiIsCiAgICAgICAg
ICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZXJyKSk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7
CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgIApAQCAtNDQxLDE5ICs0NDEsMTkg
QEAKICAgICAgICAgICAgIGVtaXQoICIgIDxraW5kPlVuaW5pdFZhbHVlPC9raW5kPlxuIiApOwog
ICAgICAgICAgICAgZW1pdCggIiAgPHdoYXQ+VXNlIG9mIHVuaW5pdGlhbGlzZWQgdmFsdWUgb2Yg
c2l6ZSAlbHU8L3doYXQ+XG4iLAogICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5WYWx1ZS5z
ekIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVy
ZSkoZXJyKSApOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjKQot
ICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9lYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlZhbHVlLm90YWcgJiAzICk7
CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOworICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2Vj
ZS5lYykKKyAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5WYWx1ZS5vcmln
aW5fZWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlZhbHVlLm90
YWcgJiAzICk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogQ291bGQgYWxzbyBz
aG93IGV4dHJhLT5FcnIuQ29uZC5vdGFnIGlmIGRlYnVnZ2luZyBvcmlnaW4KICAgICAgICAgICAg
ICAgIHRyYWNraW5nICovCiAgICAgICAgICAgICBlbWl0KCAiVXNlIG9mIHVuaW5pdGlhbGlzZWQg
dmFsdWUgb2Ygc2l6ZSAlbHVcbiIsCiAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlZhbHVl
LnN6QiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3do
ZXJlKShlcnIpICk7Ci0gICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5fZWMp
Ci0gICAgICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2Vj
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuVmFsdWUub3RhZyAmIDMg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5f
ZWNlLmVjKQorICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJyLlZhbHVlLm9y
aWdpbl9lY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuVmFsdWUu
b3RhZyAmIDMgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogCkBAIC00NjMsOSArNDYz
LDkgQEAKICAgICAgICAgICAgIGVtaXQoICIgIDxraW5kPlVuaW5pdENvbmRpdGlvbjwva2luZD5c
biIgKTsKICAgICAgICAgICAgIGVtaXQoICIgIDx3aGF0PkNvbmRpdGlvbmFsIGp1bXAgb3IgbW92
ZSBkZXBlbmRzIgogICAgICAgICAgICAgICAgICAgIiBvbiB1bmluaXRpYWxpc2VkIHZhbHVlKHMp
PC93aGF0PlxuIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vy
cm9yX3doZXJlKShlcnIpICk7Ci0gICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5Db25kLm9yaWdp
bl9lYykKLSAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5Db25kLm9yaWdp
bl9lYywKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vy
cm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5Db25kLm9yaWdp
bl9lY2UuZWMpCisgICAgICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuQ29uZC5v
cmlnaW5fZWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLkNvbmQu
b3RhZyAmIDMgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBDb3VsZCBhbHNv
IHNob3cgZXh0cmEtPkVyci5Db25kLm90YWcgaWYgZGVidWdnaW5nIG9yaWdpbgpAQCAtNDcyLDkg
KzQ3Miw5IEBACiAgICAgICAgICAgICAgICB0cmFja2luZyAqLwogICAgICAgICAgICAgZW1pdCgg
IkNvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIgogICAgICAgICAgICAgICAgICAgIiBv
biB1bmluaXRpYWxpc2VkIHZhbHVlKHMpXG4iICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKLSAgICAgICAgICAgIGlmIChleHRy
YS0+RXJyLkNvbmQub3JpZ2luX2VjKQotICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRy
YS0+RXJyLkNvbmQub3JpZ2luX2VjLAorICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIGlmIChleHRy
YS0+RXJyLkNvbmQub3JpZ2luX2VjZS5lYykKKyAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbigg
ZXh0cmEtPkVyci5Db25kLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4dHJhLT5FcnIuQ29uZC5vdGFnICYgMyApOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7
CkBAIC00ODYsMTYgKzQ4NiwxNiBAQAogICAgICAgICAgICAgZW1pdCggIiAgPHdoYXQ+U3lzY2Fs
bCBwYXJhbSAlcFMgY29udGFpbnMgIgogICAgICAgICAgICAgICAgICAgInVuaW5pdGlhbGlzZWQg
Ynl0ZShzKTwvd2hhdD5cbiIsCiAgICAgICAgICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmlu
ZykoZXJyKSApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7Ci0gICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5SZWdQYXJhbS5vcmln
aW5fZWMpCi0gICAgICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuUmVnUGFyYW0u
b3JpZ2luX2VjLAorICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhn
ZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIGlmIChleHRyYS0+RXJyLlJlZ1Bh
cmFtLm9yaWdpbl9lY2UuZWMpCisgICAgICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5F
cnIuUmVnUGFyYW0ub3JpZ2luX2VjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0
cmEtPkVyci5SZWdQYXJhbS5vdGFnICYgMyApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGVtaXQoICJTeXNjYWxsIHBhcmFtICVzIGNvbnRhaW5zIHVuaW5pdGlhbGlzZWQgYnl0ZShz
KVxuIiwKICAgICAgICAgICAgICAgICAgIFZHXyhnZXRfZXJyb3Jfc3RyaW5nKShlcnIpICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKLSAgICAgICAgICAgIGlmIChleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lYykKLSAgICAg
ICAgICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5SZWdQYXJhbS5vcmlnaW5fZWMsCisg
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVy
ZSkoZXJyKSApOworICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuUmVnUGFyYW0ub3JpZ2luX2Vj
ZS5lYykKKyAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5SZWdQYXJhbS5v
cmlnaW5fZWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlJlZ1Bh
cmFtLm90YWcgJiAzICk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKQEAgLTUwOSwxMiAr
NTA5LDEyIEBACiAgICAgICAgICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZXJyKSwK
ICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuTWVtUGFyYW0uaXNBZGRyRXJyIAogICAgICAg
ICAgICAgICAgICAgICAgPyAidW5hZGRyZXNzYWJsZSIgOiAidW5pbml0aWFsaXNlZCIgKTsKLSAg
ICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSAp
OworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jf
d2hlcmUpKGVycikgKTsKICAgICAgICAgICAgIFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdldF9l
cnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0
cmEtPkVyci5NZW1QYXJhbS5haSwgRmFsc2UpOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIu
TWVtUGFyYW0ub3JpZ2luX2VjIAorICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuTWVtUGFyYW0u
b3JpZ2luX2VjZS5lYyAKICAgICAgICAgICAgICAgICAmJiAhZXh0cmEtPkVyci5NZW1QYXJhbS5p
c0FkZHJFcnIpCi0gICAgICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuTWVtUGFy
YW0ub3JpZ2luX2VjLAorICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJyLk1l
bVBhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5F
cnIuTWVtUGFyYW0ub3RhZyAmIDMgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBl
bWl0KCAiU3lzY2FsbCBwYXJhbSAlcyBwb2ludHMgdG8gJXMgYnl0ZShzKVxuIiwKQEAgLTUyMSwx
MiArNTIxLDEyIEBACiAgICAgICAgICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZXJy
KSwKICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuTWVtUGFyYW0uaXNBZGRyRXJyIAogICAg
ICAgICAgICAgICAgICAgICAgPyAidW5hZGRyZXNzYWJsZSIgOiAidW5pbml0aWFsaXNlZCIgKTsK
LSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJy
KSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJy
b3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAgIFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdl
dF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZXh0cmEtPkVyci5NZW1QYXJhbS5haSwgRmFsc2UpOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5F
cnIuTWVtUGFyYW0ub3JpZ2luX2VjIAorICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuTWVtUGFy
YW0ub3JpZ2luX2VjZS5lYyAKICAgICAgICAgICAgICAgICAmJiAhZXh0cmEtPkVyci5NZW1QYXJh
bS5pc0FkZHJFcnIpCi0gICAgICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuTWVt
UGFyYW0ub3JpZ2luX2VjLAorICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJy
Lk1lbVBhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJh
LT5FcnIuTWVtUGFyYW0ub3RhZyAmIDMgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwpA
QCAtNTQwLDIxICs1NDAsMjEgQEAKICAgICAgICAgICAgICAgICAgICJkdXJpbmcgY2xpZW50IGNo
ZWNrIHJlcXVlc3Q8L3doYXQ+XG4iLCAKICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlVz
ZXIuaXNBZGRyRXJyCiAgICAgICAgICAgICAgICAgICAgICAgPyAiVW5hZGRyZXNzYWJsZSIgOiAi
VW5pbml0aWFsaXNlZCIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdl
dF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAgIFZHXyhwcF9h
ZGRyaW5mb19tYykoVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLCAmZXh0cmEtPkVyci5Vc2Vy
LmFpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSk7Ci0gICAgICAgICAg
ICBpZiAoZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lYyAmJiAhZXh0cmEtPkVyci5Vc2VyLmlzQWRk
ckVycikKLSAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5Vc2VyLm9yaWdp
bl9lYywKKyAgICAgICAgICAgIGlmIChleHRyYS0+RXJyLlVzZXIub3JpZ2luX2VjZS5lYyAmJiAh
ZXh0cmEtPkVyci5Vc2VyLmlzQWRkckVycikKKyAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbigg
ZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4dHJhLT5FcnIuVXNlci5vdGFnICYgMyApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGVtaXQoICIlcyBieXRlKHMpIGZvdW5kIGR1cmluZyBjbGllbnQgY2hlY2sgcmVxdWVzdFxu
IiwgCiAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5Vc2VyLmlzQWRkckVycgogICAgICAg
ICAgICAgICAgICAgICAgID8gIlVuYWRkcmVzc2FibGUiIDogIlVuaW5pdGlhbGlzZWQiICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKFZHXyhnZXRf
ZXJyb3JfYWRkcmVzcykoZXJyKSwgJmV4dHJhLT5FcnIuVXNlci5haSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmFsc2UpOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuVXNl
ci5vcmlnaW5fZWMgJiYgIWV4dHJhLT5FcnIuVXNlci5pc0FkZHJFcnIpCi0gICAgICAgICAgICAg
ICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuVXNlci5vcmlnaW5fZWMsCisgICAgICAgICAgICBp
ZiAoZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lY2UuZWMgJiYgIWV4dHJhLT5FcnIuVXNlci5pc0Fk
ZHJFcnIpCisgICAgICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuVXNlci5vcmln
aW5fZWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlVzZXIub3Rh
ZyAmIDMgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwpAQCAtNTY0LDEyICs1NjQsMTIg
QEAKICAgICAgICAgICAgIGVtaXQoICIgIDxraW5kPkludmFsaWRGcmVlPC9raW5kPlxuIiApOwog
ICAgICAgICAgICAgZW1pdCggIiAgPHdoYXQ+SW52YWxpZCBmcmVlKCkgLyBkZWxldGUgLyBkZWxl
dGVbXSIKICAgICAgICAgICAgICAgICAgICIgLyByZWFsbG9jKCk8L3doYXQ+XG4iICk7Ci0gICAg
ICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsK
KyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3do
ZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0X2Vy
cm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0
cmEtPkVyci5GcmVlLmFpLCBGYWxzZSApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGVtaXQoICJJbnZhbGlkIGZyZWUoKSAvIGRlbGV0ZSAvIGRlbGV0ZVtdIC8gcmVhbGxvYygpXG4i
ICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUp
KGVycikgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0
X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBW
R18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZXh0cmEtPkVyci5GcmVlLmFpLCBGYWxzZSApOwogICAgICAgICAgfQpAQCAtNTc5LDEy
ICs1NzksMTIgQEAKICAgICAgICAgIGlmICh4bWwpIHsKICAgICAgICAgICAgIGVtaXQoICIgIDxr
aW5kPk1pc21hdGNoZWRGcmVlPC9raW5kPlxuIiApOwogICAgICAgICAgICAgZW1pdCggIiAgPHdo
YXQ+TWlzbWF0Y2hlZCBmcmVlKCkgLyBkZWxldGUgLyBkZWxldGUgW108L3doYXQ+XG4iICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKFZHXyhnZXRf
ZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4
dHJhLT5FcnIuRnJlZU1pc21hdGNoLmFpLCBGYWxzZSk7CiAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgZW1pdCggIk1pc21hdGNoZWQgZnJlZSgpIC8gZGVsZXRlIC8gZGVsZXRlIFtdXG4i
ICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUp
KGVycikgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0
X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKFZH
XyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmV4dHJhLT5FcnIuRnJlZU1pc21hdGNoLmFpLCBGYWxzZSk7CiAgICAgICAgICB9CkBAIC01
OTcsNyArNTk3LDcgQEAKICAgICAgICAgICAgIGVtaXQoICIgIDx3aGF0PkludmFsaWQgJXMgb2Yg
c2l6ZSAlbHU8L3doYXQ+XG4iLAogICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5BZGRyLmlz
V3JpdGUgPyAid3JpdGUiIDogInJlYWQiLAogICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5B
ZGRyLnN6QiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgg
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgICAgVkdfKHBwX2FkZHJpbmZv
X21jKSggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmV4dHJhLT5FcnIuQWRkci5haSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLT5FcnIuQWRkci5tYXliZV9nY2MgKTsKQEAgLTYwNSw3ICs2MDUsNyBA
QAogICAgICAgICAgICAgZW1pdCggIkludmFsaWQgJXMgb2Ygc2l6ZSAlbHVcbiIsCiAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLkFkZHIuaXNXcml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsCiAg
ICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLkFkZHIuc3pCICk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7
CiAKICAgICAgICAgICAgIFZHXyhwcF9hZGRyaW5mb19tYykoIFZHXyhnZXRfZXJyb3JfYWRkcmVz
cykoZXJyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkFk
ZHIuYWksCkBAIC02MTgsMTIgKzYxOCwxMiBAQAogICAgICAgICAgICAgZW1pdCggIiAgPGtpbmQ+
SW52YWxpZEp1bXA8L2tpbmQ+XG4iICk7CiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD5KdW1w
IHRvIHRoZSBpbnZhbGlkIGFkZHJlc3Mgc3RhdGVkICIKICAgICAgICAgICAgICAgICAgICJvbiB0
aGUgbmV4dCBsaW5lPC93aGF0PlxuIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQp
KCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgICAg
VkdfKHBwX2FkZHJpbmZvX21jKSggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLCAmZXh0cmEt
PkVyci5KdW1wLmFpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UgKTsK
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlbWl0KCAiSnVtcCB0byB0aGUgaW52YWxp
ZCBhZGRyZXNzIHN0YXRlZCBvbiB0aGUgbmV4dCBsaW5lXG4iICk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7
CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0X2Vycm9yX2FkZHJlc3Mp
KGVyciksICZleHRyYS0+RXJyLkp1bXAuYWksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGYWxzZSApOwogICAgICAgICAgfQpAQCAtNjQ0LDcgKzY0NCw3IEBACiAgICAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLk92ZXJsYXAuZHN0LCBleHRyYS0+RXJyLk92ZXJsYXAuc3Jj
LAogICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5PdmVybGFwLnN6QiApOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3do
ZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdf
KGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGlmIChleHRyYS0+RXJyLk92ZXJsYXAuc3pCID09IDApIHsKICAgICAgICAgICAgICAgIGVtaXQo
ICJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG92ZXJsYXAgaW4gJXMoJSNseCwgJSNseClcbiIsCkBA
IC02NTYsNyArNjU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuT3Zlcmxh
cC5kc3QsIGV4dHJhLT5FcnIuT3ZlcmxhcC5zcmMsCiAgICAgICAgICAgICAgICAgICAgICBleHRy
YS0+RXJyLk92ZXJsYXAuc3pCICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAg
ICAgICAgICB9CiAgICAgICAgICBicmVhazsKIApAQCAtNjY2LDEyICs2NjYsMTIgQEAKICAgICAg
ICAgIGlmICh4bWwpIHsKICAgICAgICAgICAgIGVtaXQoICIgIDxraW5kPkludmFsaWRNZW1Qb29s
PC9raW5kPlxuIiApOwogICAgICAgICAgICAgZW1pdCggIiAgPHdoYXQ+SWxsZWdhbCBtZW1vcnkg
cG9vbCBhZGRyZXNzPC93aGF0PlxuIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQp
KCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgICAg
VkdfKHBwX2FkZHJpbmZvX21jKSggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuSWxsZWdhbE1lbXBvb2wuYWks
IEZhbHNlICk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIklsbGVnYWwg
bWVtb3J5IHBvb2wgYWRkcmVzc1xuIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQp
KCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgICAg
VkdfKHBwX2FkZHJpbmZvX21jKSggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuSWxsZWdhbE1lbXBvb2wuYWks
IEZhbHNlICk7CiAgICAgICAgICB9CkBAIC02OTUsNyArNjk1LDcgQEAKICAgICAgICAgICAgICAg
ICAgIGV4dHJhLT5FcnIuRmlzaHlWYWx1ZS5mdW5jdGlvbl9uYW1lLAogICAgICAgICAgICAgICAg
ICAgKFNTaXplVClleHRyYS0+RXJyLkZpc2h5VmFsdWUudmFsdWUpOwogICAgICAgICAgICAgZW1p
dCggIjwvd2hhdD4iKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9l
cnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9j
aCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBlbWl0KCAiQXJndW1lbnQgJyVzJyBvZiBmdW5jdGlvbiAlcyBoYXMgYSBmaXNoeSAi
CiAgICAgICAgICAgICAgICAgICAiKHBvc3NpYmx5IG5lZ2F0aXZlKSB2YWx1ZTogJWxkXG4iLApA
QCAtNzAyLDcgKzcwMiw3IEBACiAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLkZpc2h5VmFs
dWUuYXJndW1lbnRfbmFtZSwKICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuRmlzaHlWYWx1
ZS5mdW5jdGlvbl9uYW1lLAogICAgICAgICAgICAgICAgICAgKFNTaXplVClleHRyYS0+RXJyLkZp
c2h5VmFsdWUudmFsdWUpOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0
X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVw
b2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgfQogICAgICAgICAg
YnJlYWs7CiAKQEAgLTc3Myw5ICs3NzMsMTAgQEAKICAgIHRsX2Fzc2VydCggTUNfKGNsb19tY19s
ZXZlbCkgPj0gMiApOwogICAgaWYgKG90YWcgPiAwKQogICAgICAgdGxfYXNzZXJ0KCBNQ18oY2xv
X21jX2xldmVsKSA9PSAzICk7Ci0gICBleHRyYS5FcnIuVmFsdWUuc3pCICAgICAgID0gc3pCOwot
ICAgZXh0cmEuRXJyLlZhbHVlLm90YWcgICAgICA9IG90YWc7Ci0gICBleHRyYS5FcnIuVmFsdWUu
b3JpZ2luX2VjID0gTlVMTDsgIC8qIEZpbGxlZCBpbiBsYXRlciAqLworICAgZXh0cmEuRXJyLlZh
bHVlLnN6QiAgICAgICAgPSBzekI7CisgICBleHRyYS5FcnIuVmFsdWUub3RhZyAgICAgICA9IG90
YWc7CisgICBleHRyYS5FcnIuVmFsdWUub3JpZ2luX2VjZSA9IFZHXyhpbnZhbGlkX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsbGVk
IGluIGxhdGVyICovCiAgICBWR18obWF5YmVfcmVjb3JkX2Vycm9yKSggdGlkLCBFcnJfVmFsdWUs
IC8qYWRkciovMCwgLypzKi9OVUxMLCAmZXh0cmEgKTsKIH0KIApAQCAtNzg1LDggKzc4Niw5IEBA
CiAgICB0bF9hc3NlcnQoIE1DXyhjbG9fbWNfbGV2ZWwpID49IDIgKTsKICAgIGlmIChvdGFnID4g
MCkKICAgICAgIHRsX2Fzc2VydCggTUNfKGNsb19tY19sZXZlbCkgPT0gMyApOwotICAgZXh0cmEu
RXJyLkNvbmQub3RhZyAgICAgID0gb3RhZzsKLSAgIGV4dHJhLkVyci5Db25kLm9yaWdpbl9lYyA9
IE5VTEw7ICAvKiBGaWxsZWQgaW4gbGF0ZXIgKi8KKyAgIGV4dHJhLkVyci5Db25kLm90YWcgICAg
ICAgPSBvdGFnOworICAgZXh0cmEuRXJyLkNvbmQub3JpZ2luX2VjZSA9IFZHXyhpbnZhbGlkX0V4
ZUNvbnRleHRBbmRFcG9jaCkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG
aWxsZWQgaW4gbGF0ZXIgKi8KICAgIFZHXyhtYXliZV9yZWNvcmRfZXJyb3IpKCB0aWQsIEVycl9D
b25kLCAvKmFkZHIqLzAsIC8qcyovTlVMTCwgJmV4dHJhICk7CiB9CiAKQEAgLTgwNCw4ICs4MDYs
OSBAQAogICAgdGxfYXNzZXJ0KFZHX0lOVkFMSURfVEhSRUFESUQgIT0gdGlkKTsKICAgIGlmIChv
dGFnID4gMCkKICAgICAgIHRsX2Fzc2VydCggTUNfKGNsb19tY19sZXZlbCkgPT0gMyApOwotICAg
ZXh0cmEuRXJyLlJlZ1BhcmFtLm90YWcgICAgICA9IG90YWc7Ci0gICBleHRyYS5FcnIuUmVnUGFy
YW0ub3JpZ2luX2VjID0gTlVMTDsgIC8qIEZpbGxlZCBpbiBsYXRlciAqLworICAgZXh0cmEuRXJy
LlJlZ1BhcmFtLm90YWcgICAgICAgPSBvdGFnOworICAgZXh0cmEuRXJyLlJlZ1BhcmFtLm9yaWdp
bl9lY2UgPSBWR18oaW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBGaWxsZWQgaW4gbGF0ZXIgKi8KICAgIFZHXyhtYXliZV9y
ZWNvcmRfZXJyb3IpKCB0aWQsIEVycl9SZWdQYXJhbSwgLyphZGRyKi8wLCBtc2csICZleHRyYSAp
OwogfQogCkBAIC04MjAsMTAgKzgyMywxMSBAQAogICAgICAgdGxfYXNzZXJ0KCBNQ18oY2xvX21j
X2xldmVsKSA9PSAzICk7CiAgICAgICB0bF9hc3NlcnQoICFpc0FkZHJFcnIgKTsKICAgIH0KLSAg
IGV4dHJhLkVyci5NZW1QYXJhbS5pc0FkZHJFcnIgPSBpc0FkZHJFcnI7Ci0gICBleHRyYS5FcnIu
TWVtUGFyYW0uYWkudGFnICAgID0gQWRkcl9VbmRlc2NyaWJlZDsKLSAgIGV4dHJhLkVyci5NZW1Q
YXJhbS5vdGFnICAgICAgPSBvdGFnOwotICAgZXh0cmEuRXJyLk1lbVBhcmFtLm9yaWdpbl9lYyA9
IE5VTEw7ICAvKiBGaWxsZWQgaW4gbGF0ZXIgKi8KKyAgIGV4dHJhLkVyci5NZW1QYXJhbS5pc0Fk
ZHJFcnIgID0gaXNBZGRyRXJyOworICAgZXh0cmEuRXJyLk1lbVBhcmFtLmFpLnRhZyAgICAgPSBB
ZGRyX1VuZGVzY3JpYmVkOworICAgZXh0cmEuRXJyLk1lbVBhcmFtLm90YWcgICAgICAgPSBvdGFn
OworICAgZXh0cmEuRXJyLk1lbVBhcmFtLm9yaWdpbl9lY2UgPSBWR18oaW52YWxpZF9FeGVDb250
ZXh0QW5kRXBvY2gpKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxs
ZWQgaW4gbGF0ZXIgKi8KICAgIFZHXyhtYXliZV9yZWNvcmRfZXJyb3IpKCB0aWQsIEVycl9NZW1Q
YXJhbSwgYSwgbXNnLCAmZXh0cmEgKTsKIH0KIApAQCAtOTI1LDEwICs5MjksMTEgQEAKICAgICAg
IHRsX2Fzc2VydCggTUNfKGNsb19tY19sZXZlbCkgPj0gMiApOwogICAgfQogICAgdGxfYXNzZXJ0
KFZHX0lOVkFMSURfVEhSRUFESUQgIT0gdGlkKTsKLSAgIGV4dHJhLkVyci5Vc2VyLmlzQWRkckVy
ciA9IGlzQWRkckVycjsKLSAgIGV4dHJhLkVyci5Vc2VyLmFpLnRhZyAgICA9IEFkZHJfVW5kZXNj
cmliZWQ7Ci0gICBleHRyYS5FcnIuVXNlci5vdGFnICAgICAgPSBvdGFnOwotICAgZXh0cmEuRXJy
LlVzZXIub3JpZ2luX2VjID0gTlVMTDsgIC8qIEZpbGxlZCBpbiBsYXRlciAqLworICAgZXh0cmEu
RXJyLlVzZXIuaXNBZGRyRXJyICA9IGlzQWRkckVycjsKKyAgIGV4dHJhLkVyci5Vc2VyLmFpLnRh
ZyAgICAgPSBBZGRyX1VuZGVzY3JpYmVkOworICAgZXh0cmEuRXJyLlVzZXIub3RhZyAgICAgICA9
IG90YWc7CisgICBleHRyYS5FcnIuVXNlci5vcmlnaW5fZWNlID0gVkdfKGludmFsaWRfRXhlQ29u
dGV4dEFuZEVwb2NoKSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxsZWQg
aW4gbGF0ZXIgKi8KICAgIFZHXyhtYXliZV9yZWNvcmRfZXJyb3IpKCB0aWQsIEVycl9Vc2VyLCBh
LCAvKnMqL05VTEwsICZleHRyYSApOwogfQogCkBAIC0xMDUzLDcgKzEwNTgsNyBAQAogCiAvKiBE
ZXNjcmliZSBhbiBhZGRyZXNzIGFzIGJlc3QgeW91IGNhbiwgZm9yIGVycm9yIG1lc3NhZ2VzLAog
ICAgcHV0dGluZyB0aGUgcmVzdWx0IGluIGFpLiAqLwotc3RhdGljIHZvaWQgZGVzY3JpYmVfYWRk
ciAoIEFkZHIgYSwgLypPVVQqL0FkZHJJbmZvKiBhaSApCitzdGF0aWMgdm9pZCBkZXNjcmliZV9h
ZGRyICggRGlFcG9jaCBlcCwgQWRkciBhLCAvKk9VVCovQWRkckluZm8qIGFpICkKIHsKICAgIE1D
X0NodW5rKiAgbWM7CiAKQEAgLTExMjEsMjggKzExMjYsMzAgQEAKICAgIH0KIAogICAgLyogTm8g
YmxvY2sgZm91bmQuIFNlYXJjaCBhIG5vbi1oZWFwIGJsb2NrIGRlc2NyaXB0aW9uLiAqLwotICAg
VkdfKGRlc2NyaWJlX2FkZHIpIChhLCBhaSk7CisgICBWR18oZGVzY3JpYmVfYWRkcikgKGVwLCBh
LCBhaSk7CiB9CiAKLXZvaWQgTUNfKHBwX2Rlc2NyaWJlX2FkZHIpICggQWRkciBhICkKK3ZvaWQg
TUNfKHBwX2Rlc2NyaWJlX2FkZHIpICggRGlFcG9jaCBlcCwgQWRkciBhICkKIHsKICAgIEFkZHJJ
bmZvIGFpOwogCiAgICBhaS50YWcgPSBBZGRyX1VuZGVzY3JpYmVkOwotICAgZGVzY3JpYmVfYWRk
ciAoYSwgJmFpKTsKKyAgIGRlc2NyaWJlX2FkZHIgKGVwLCBhLCAmYWkpOwogICAgVkdfKHBwX2Fk
ZHJpbmZvX21jKSAoYSwgJmFpLCAvKiBtYXliZV9nY2MgKi8gRmFsc2UpOwogICAgVkdfKGNsZWFy
X2FkZHJpbmZvKSAoJmFpKTsKIH0KIAotLyogRmlsbCBpbiAqb3JpZ2luX2VjIGFzIHNwZWNpZmll
ZCBieSBvdGFnLCBvciBOVUxMIGl0IG91dCBpZiBvdGFnCisvKiBGaWxsIGluICpvcmlnaW5fZWNl
IGFzIHNwZWNpZmllZCBieSBvdGFnLCBvciBOVUxMIGl0IG91dCBpZiBvdGFnCiAgICBkb2VzIG5v
dCByZWZlciB0byBhIGtub3duIG9yaWdpbi4gKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9vcmlnaW4g
KCAvKk9VVCovRXhlQ29udGV4dCoqIG9yaWdpbl9lYywKK3N0YXRpYyB2b2lkIHVwZGF0ZV9vcmln
aW4gKCAvKk9VVCovRXhlQ29udGV4dEFuZEVwb2NoKiBvcmlnaW5fZWNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVJbnQgb3RhZyApCiB7CiAgICBVSW50IGVjdSA9IG90YWcgJiB+MzsK
LSAgICpvcmlnaW5fZWMgPSBOVUxMOwogICAgaWYgKFZHXyhpc19wbGF1c2libGVfRUNVKShlY3Up
KSB7Ci0gICAgICAqb3JpZ2luX2VjID0gVkdfKGdldF9FeGVDb250ZXh0X2Zyb21fRUNVKSggZWN1
ICk7CisgICAgICAqb3JpZ2luX2VjZQorICAgICAgICAgPSBWR18odGFnX0VDX3dpdGhfY3VycmVu
dF9lcG9jaCkoVkdfKGdldF9FeGVDb250ZXh0X2Zyb21fRUNVKSggZWN1ICkpOworICAgfSBlbHNl
IHsKKyAgICAgICpvcmlnaW5fZWNlID0gVkdfKGludmFsaWRfRXhlQ29udGV4dEFuZEVwb2NoKSgp
OwogICAgfQogfQogCkBAIC0xMTUwLDYgKzExNTcsNyBAQAogVUludCBNQ18odXBkYXRlX0Vycm9y
X2V4dHJhKSggY29uc3QgRXJyb3IqIGVyciApCiB7CiAgICBNQ19FcnJvciogZXh0cmEgPSBWR18o
Z2V0X2Vycm9yX2V4dHJhKShlcnIpOworICAgRGlFcG9jaCAgIGVwICAgID0gVkdfKGdldF9lcnJv
cl93aGVyZSkoZXJyKS5lcG9jaDsKIAogICAgc3dpdGNoIChWR18oZ2V0X2Vycm9yX2tpbmQpKGVy
cikpIHsKICAgIC8vIFRoZXNlIG9uZXMgZG9uJ3QgaGF2ZSBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0sIGFuZCBzbyBkb24ndApAQCAtMTE2OSw0NSArMTE3Nyw0NSBAQAogICAgLy8gb3Jp
Z2luIHRhZy4gIE5vdGUgdGhhdCBpdCBpcyBhIGtsdWRnZSB0byBhc3N1bWUgdGhhdCAKICAgIC8v
IGEgbGVuZ3RoLTEgdHJhY2UgaW5kaWNhdGVzIGEgc3RhY2sgb3JpZ2luLiAgRklYTUUuCiAgICBj
YXNlIEVycl9WYWx1ZToKLSAgICAgIHVwZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLlZhbHVlLm9y
aWdpbl9lYywKKyAgICAgIHVwZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9l
Y2UsCiAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlZhbHVlLm90YWcgKTsKICAgICAg
IHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfQ29uZDoKLSAgICAgIHVwZGF0
ZV9vcmlnaW4oICZleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjLAorICAgICAgdXBkYXRlX29yaWdp
biggJmV4dHJhLT5FcnIuQ29uZC5vcmlnaW5fZWNlLAogICAgICAgICAgICAgICAgICAgICAgZXh0
cmEtPkVyci5Db25kLm90YWcgKTsKICAgICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogICAg
Y2FzZSBFcnJfUmVnUGFyYW06Ci0gICAgICB1cGRhdGVfb3JpZ2luKCAmZXh0cmEtPkVyci5SZWdQ
YXJhbS5vcmlnaW5fZWMsCisgICAgICB1cGRhdGVfb3JpZ2luKCAmZXh0cmEtPkVyci5SZWdQYXJh
bS5vcmlnaW5fZWNlLAogICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5SZWdQYXJhbS5v
dGFnICk7CiAgICAgICByZXR1cm4gc2l6ZW9mKE1DX0Vycm9yKTsKIAogICAgLy8gVGhlc2Ugb25l
cyBhbHdheXMgaW52b2x2ZSBhIG1lbW9yeSBhZGRyZXNzLgogICAgY2FzZSBFcnJfQWRkcjoKLSAg
ICAgIGRlc2NyaWJlX2FkZHIgKCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCisgICAgICBk
ZXNjcmliZV9hZGRyICggZXAsIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAg
ICAgICAgICAgICAgICAmZXh0cmEtPkVyci5BZGRyLmFpICk7CiAgICAgICByZXR1cm4gc2l6ZW9m
KE1DX0Vycm9yKTsKICAgIGNhc2UgRXJyX01lbVBhcmFtOgotICAgICAgZGVzY3JpYmVfYWRkciAo
IFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKKyAgICAgIGRlc2NyaWJlX2FkZHIgKCBlcCwg
VkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICZleHRy
YS0+RXJyLk1lbVBhcmFtLmFpICk7Ci0gICAgICB1cGRhdGVfb3JpZ2luKCAmZXh0cmEtPkVyci5N
ZW1QYXJhbS5vcmlnaW5fZWMsCisgICAgICB1cGRhdGVfb3JpZ2luKCAmZXh0cmEtPkVyci5NZW1Q
YXJhbS5vcmlnaW5fZWNlLAogICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5NZW1QYXJh
bS5vdGFnICk7CiAgICAgICByZXR1cm4gc2l6ZW9mKE1DX0Vycm9yKTsKICAgIGNhc2UgRXJyX0p1
bXA6Ci0gICAgICBkZXNjcmliZV9hZGRyICggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAor
ICAgICAgZGVzY3JpYmVfYWRkciAoIGVwLCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCiAg
ICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuSnVtcC5haSApOwogICAgICAgcmV0dXJu
IHNpemVvZihNQ19FcnJvcik7CiAgICBjYXNlIEVycl9Vc2VyOgotICAgICAgZGVzY3JpYmVfYWRk
ciAoIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKKyAgICAgIGRlc2NyaWJlX2FkZHIgKCBl
cCwgVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICZl
eHRyYS0+RXJyLlVzZXIuYWkgKTsKLSAgICAgIHVwZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLlVz
ZXIub3JpZ2luX2VjLAorICAgICAgdXBkYXRlX29yaWdpbiggJmV4dHJhLT5FcnIuVXNlci5vcmln
aW5fZWNlLAogICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5Vc2VyLm90YWcgKTsKICAg
ICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfRnJlZToKLSAgICAgIGRl
c2NyaWJlX2FkZHIgKCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCisgICAgICBkZXNjcmli
ZV9hZGRyICggZXAsIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAgICAgICAg
ICAgICAgICAmZXh0cmEtPkVyci5GcmVlLmFpICk7CiAgICAgICByZXR1cm4gc2l6ZW9mKE1DX0Vy
cm9yKTsKICAgIGNhc2UgRXJyX0lsbGVnYWxNZW1wb29sOgotICAgICAgZGVzY3JpYmVfYWRkciAo
IFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKKyAgICAgIGRlc2NyaWJlX2FkZHIgKCBlcCwg
VkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICZleHRy
YS0+RXJyLklsbGVnYWxNZW1wb29sLmFpICk7CiAgICAgICByZXR1cm4gc2l6ZW9mKE1DX0Vycm9y
KTsKIApAQCAtMTI1Miw3ICsxMjYwLDcgQEAKICAgICAgICAgIGFpLT5BZGRyLkJsb2NrLnJ3b2Zm
c2V0ICAgPSAoV29yZCkoYSkgLSAoV29yZCkoY2dic1tpXS5zdGFydCk7CiAgICAgICAgICBhaS0+
QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQgPSBjZ2JzW2ldLndoZXJlOwogICAgICAgICAgVkdfKGlu
aXRUaHJlYWRJbmZvKSAoJmFpLT5BZGRyLkJsb2NrLmFsbG9jX3RpbmZvKTsKLSAgICAgICAgIGFp
LT5BZGRyLkJsb2NrLmZyZWVkX2F0ID0gVkdfKG51bGxfRXhlQ29udGV4dCkoKTs7CisgICAgICAg
ICBhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCko
KTsKICAgICAgICAgIHJldHVybiBUcnVlOwogICAgICAgfQogICAgfQpJbmRleDogbWVtY2hlY2sv
bWNfaW5jbHVkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL21jX2luY2x1ZGUuaAkocmV2aXNp
b24gMTY0NjEpCisrKyBtZW1jaGVjay9tY19pbmNsdWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDE3ICs2NywxNyBAQAogICAgICAgQWRkciAgICAgICAgIGRhdGE7ICAgICAgICAgICAgLy8gQWRk
cmVzcyBvZiB0aGUgYWN0dWFsIGJsb2NrLgogICAgICAgU2l6ZVQgICAgICAgIHN6QiA6IChzaXpl
b2YoU2l6ZVQpKjgpLTI7IC8vIFNpemUgcmVxdWVzdGVkOyAzMCBvciA2MiBiaXRzLgogICAgICAg
TUNfQWxsb2NLaW5kIGFsbG9ja2luZCA6IDI7ICAgLy8gV2hpY2ggb3BlcmF0aW9uIGRpZCB0aGUg
YWxsb2NhdGlvbi4KLSAgICAgIEV4ZUNvbnRleHQqICB3aGVyZVswXTsKKyAgICAgIEV4ZUNvbnRl
eHRBbmRFcG9jaCB3aGVyZVswXTsKICAgICAgIC8qIFZhcmlhYmxlLWxlbmd0aCBhcnJheS4gVGhl
IHNpemUgZGVwZW5kcyBvbiBNQ18oY2xvX2tlZXBfc3RhY2t0cmFjZXMpLgogICAgICAgICAgVGhp
cyBhcnJheSBvcHRpb25hbGx5IHN0b3JlcyB0aGUgYWxsb2MgYW5kL29yIGZyZWUgc3RhY2sgdHJh
Y2UuICovCiAgICB9CiAgICBNQ19DaHVuazsKIAotLyogUmV0dXJucyB0aGUgZXhlY29udGV4dCB3
aGVyZSB0aGUgTUNfQ2h1bmsgd2FzIGFsbG9jYXRlZC9mcmVlZC4KKy8qIFJldHVybnMgdGhlIGV4
ZWNvbnRleHQgYW5kIGVwb2NoIHdoZXJlIHRoZSBNQ19DaHVuayB3YXMgYWxsb2NhdGVkL2ZyZWVk
LgogICAgUmV0dXJucyBWR18obnVsbF9FeGVDb250ZXh0KSgpIGlmIHRoZSBleGVjb250ZXh0IGhh
cyBub3QgYmVlbiByZWNvcmRlZCAoZHVlCiAgICB0byBNQ18oY2xvX2tlZXBfc3RhY2t0cmFjZXMp
IGFuZC9vciBiZWNhdXNlIGJsb2NrIG5vdCB5ZXQgZnJlZWQpLiAqLwotRXhlQ29udGV4dCogTUNf
KGFsbG9jYXRlZF9hdCkgKE1DX0NodW5rKik7Ci1FeGVDb250ZXh0KiBNQ18oZnJlZWRfYXQpIChN
Q19DaHVuayopOworRXhlQ29udGV4dEFuZEVwb2NoIE1DXyhhbGxvY2F0ZWRfYXQpIChNQ19DaHVu
ayopOworRXhlQ29udGV4dEFuZEVwb2NoIE1DXyhmcmVlZF9hdCkgKE1DX0NodW5rKik7CiAKIC8q
IFJlY29yZHMgYW5kIHNldHMgZXhlY29udGV4dCBhY2NvcmRpbmcgdG8gTUNfKGNsb19rZWVwX3N0
YWNrdHJhY2VzKSAqLwogdm9pZCAgTUNfKHNldF9hbGxvY2F0ZWRfYXQpIChUaHJlYWRJZCwgTUNf
Q2h1bmsqKTsKQEAgLTQzMiw4ICs0MzIsOCBAQAogLyogV2hlbiBhIExvc3NSZWNvcmQgaXMgcHV0
IGludG8gYW4gT1NldCwgdGhlc2UgZWxlbWVudHMgcmVwcmVzZW50IHRoZSBrZXkuICovCiB0eXBl
ZGVmCiAgICBzdHJ1Y3QgX0xvc3NSZWNvcmRLZXkgewotICAgICAgUmVhY2hlZG5lc3MgIHN0YXRl
OyAgICAgICAgLy8gTENfRXh0cmEuc3RhdGUgdmFsdWUgc2hhcmVkIGJ5IGFsbCBibG9ja3MuCi0g
ICAgICBFeGVDb250ZXh0KiAgYWxsb2NhdGVkX2F0OyAvLyBXaGVyZSB0aGV5IHdlcmUgYWxsb2Nh
dGVkLgorICAgICAgUmVhY2hlZG5lc3MgICAgICAgICBzdGF0ZTsgIC8vIExDX0V4dHJhLnN0YXRl
IHZhbHVlIHNoYXJlZCBieSBhbGwgYmxvY2tzLgorICAgICAgRXhlQ29udGV4dEFuZEVwb2NoICBh
bGxvY2F0ZWRfYXQ7IC8vIFdoZXJlIHRoZXkgd2VyZSBhbGxvY2F0ZWQuCiAgICB9IAogICAgTG9z
c1JlY29yZEtleTsKIApAQCAtNTY5LDggKzU2OSw4IEBACiAvKiBMZWFrIGtpbmRzIHRva2VucyB0
byBjYWxsIFZHXyhwYXJzZV9lbnVtX3NldCkuICovCiBleHRlcm4gY29uc3QgSENoYXIqIE1DXyhw
YXJzZV9sZWFrX2tpbmRzX3Rva2Vucyk7CiAKLS8qIHByaW50cyBhIGRlc2NyaXB0aW9uIG9mIGFk
ZHJlc3MgYSAqLwotdm9pZCBNQ18ocHBfZGVzY3JpYmVfYWRkcikgKEFkZHIgYSk7CisvKiBwcmlu
dHMgYSBkZXNjcmlwdGlvbiBvZiBhZGRyZXNzIGEgaW4gdGhlIHNwZWNpZmllZCBkZWJ1Z2luZm8g
ZXBvY2ggKi8KK3ZvaWQgTUNfKHBwX2Rlc2NyaWJlX2FkZHIpICggRGlFcG9jaCBlcCwgQWRkciBh
ICk7CiAKIC8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIHVzZXItc3BlY2lmaWVkICJpZ25vcmVkIHJh
bmdlIiA/ICovCiBCb29sIE1DXyhpbl9pZ25vcmVkX3JhbmdlKSAoIEFkZHIgYSApOwpAQCAtNTg4
LDEwICs1ODgsMTAgQEAKICAgIHN0YXJ0ID09IHNpemUgPT0gMC4gICovCiB0eXBlZGVmCiAgICBz
dHJ1Y3QgewotICAgICAgQWRkciAgICAgICAgc3RhcnQ7Ci0gICAgICBTaXplVCAgICAgICBzaXpl
OwotICAgICAgRXhlQ29udGV4dCogd2hlcmU7Ci0gICAgICBIQ2hhciogICAgICBkZXNjOworICAg
ICAgQWRkciAgICAgICAgICAgICAgIHN0YXJ0OworICAgICAgU2l6ZVQgICAgICAgICAgICAgIHNp
emU7CisgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggd2hlcmU7CisgICAgICBIQ2hhciogICAgICAg
ICAgICAgZGVzYzsKICAgIH0gCiAgICBDR2VuQmxvY2s7CiAKSW5kZXg6IG1lbWNoZWNrL21jX2xl
YWtjaGVjay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL21jX2xlYWtjaGVjay5jCShyZXZpc2lv
biAxNjQ2MSkKKysrIG1lbWNoZWNrL21jX2xlYWtjaGVjay5jCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDYwLDYgKzEwNjAsOCBAQAogICAgY29uc3QgQWRkciBlbmQgPSBWR19ST1VOREROKHN0YXJ0K2xl
biwgc2l6ZW9mKEFkZHIpKTsKICAgIGZhdWx0X2NhdGNoZXJfdCBwcmV2X2NhdGNoZXI7CiAKKyAg
IGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworCiAgICBpZiAoVkdf
REVCVUdfTEVBS0NIRUNLKQogICAgICAgVkdfKHByaW50ZikoInNjYW4gJSNseC0lI2x4ICglbHUp
XG4iLCBzdGFydCwgZW5kLCBsZW4pOwogCkBAIC0xMTM5LDcgKzExNDEsNyBAQAogICAgICAgICAg
ICAgaWYgKGFkZHIgPj0gc2VhcmNoZWQgJiYgYWRkciA8IHNlYXJjaGVkICsgc3pCKSB7CiAgICAg
ICAgICAgICAgICBpZiAoYWRkciA9PSBzZWFyY2hlZCkgewogICAgICAgICAgICAgICAgICAgVkdf
KHVtc2cpKCIqJSNseCBwb2ludHMgYXQgJSNseFxuIiwgcHRyLCBzZWFyY2hlZCk7Ci0gICAgICAg
ICAgICAgICAgICBNQ18ocHBfZGVzY3JpYmVfYWRkcikgKHB0cik7CisgICAgICAgICAgICAgICAg
ICBNQ18ocHBfZGVzY3JpYmVfYWRkcikgKGVwLCBwdHIpOyAvLyBGSVhNRSBKUlM6IGVwIGNvcnJl
Y3Q/CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgSW50IGNoX25v
OwogICAgICAgICAgICAgICAgICAgTUNfQ2h1bmsgKmNoOwpAQCAtMTE0Niw3ICsxMTQ4LDcgQEAK
ICAgICAgICAgICAgICAgICAgIExDX0V4dHJhICpleDsKICAgICAgICAgICAgICAgICAgIFZHXyh1
bXNnKSgiKiUjbHggaW50ZXJpb3IgcG9pbnRzIGF0ICVsdSBieXRlcyBpbnNpZGUgJSNseFxuIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIsIChsb25nIHVuc2lnbmVkKSBhZGRyIC0g
c2VhcmNoZWQsIHNlYXJjaGVkKTsKLSAgICAgICAgICAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9h
ZGRyKSAocHRyKTsKKyAgICAgICAgICAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9hZGRyKSAoZXAs
IHB0cik7IC8vIEZJWE1FIEpSUzogZXAgY29ycmVjdD8KICAgICAgICAgICAgICAgICAgIGlmIChs
Y19pc19hX2NodW5rX3B0cihhZGRyLCAmY2hfbm8sICZjaCwgJmV4KSApIHsKICAgICAgICAgICAg
ICAgICAgICAgIEludCBoOwogICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gTGNoU3RkU3Ry
aW5nOyBoIDwgTl9MRUFLX0NIRUNLX0hFVVJJU1RJQ1M7IGgrKykgewpAQCAtMTIwMywxMyArMTIw
NSwxNyBAQAogICAgLy8gQ29tcGFyZSBvbiBzdGF0ZXMgZmlyc3QgYmVjYXVzZSB0aGF0J3MgZmFz
dC4KICAgIGlmIChhLT5zdGF0ZSA8IGItPnN0YXRlKSByZXR1cm4gLTE7CiAgICBpZiAoYS0+c3Rh
dGUgPiBiLT5zdGF0ZSkgcmV0dXJuICAxOwotICAgLy8gT2ssIHRoZSBzdGF0ZXMgYXJlIGVxdWFs
LiAgTm93IGNvbXBhcmUgdGhlIGxvY2F0aW9ucywgd2hpY2ggaXMgc2xvd2VyLgorICAgLy8gQWxz
byBvbiBlcG9jaHMsIGZvciB0aGUgc2FtZSByZWFzb24uCisgICBpZiAoYS0+YWxsb2NhdGVkX2F0
LmVwb2NoLm4gPCBiLT5hbGxvY2F0ZWRfYXQuZXBvY2gubikgcmV0dXJuIC0xOworICAgaWYgKGEt
PmFsbG9jYXRlZF9hdC5lcG9jaC5uID4gYi0+YWxsb2NhdGVkX2F0LmVwb2NoLm4pIHJldHVybiAx
OworICAgLy8gT2ssIHRoZSBzdGF0ZXMgYW5kIGVwb2NocyBhcmUgZXF1YWwuICBOb3cgY29tcGFy
ZSB0aGUgbG9jYXRpb25zLCB3aGljaAorICAgLy8gaXMgc2xvd2VyLgogICAgaWYgKFZHXyhlcV9F
eGVDb250ZXh0KSgKLSAgICAgICAgICAgIE1DXyhjbG9fbGVha19yZXNvbHV0aW9uKSwgYS0+YWxs
b2NhdGVkX2F0LCBiLT5hbGxvY2F0ZWRfYXQpKQorICAgICAgICAgICAgTUNfKGNsb19sZWFrX3Jl
c29sdXRpb24pLCBhLT5hbGxvY2F0ZWRfYXQuZWMsIGItPmFsbG9jYXRlZF9hdC5lYykpCiAgICAg
ICByZXR1cm4gMDsKICAgIC8vIERpZmZlcmVudCBsb2NhdGlvbnMuICBPcmRlcmluZyBpcyBhcmJp
dHJhcnksIGp1c3QgdXNlIHRoZSBlYyBwb2ludGVyLgotICAgaWYgKGEtPmFsbG9jYXRlZF9hdCA8
IGItPmFsbG9jYXRlZF9hdCkgcmV0dXJuIC0xOwotICAgaWYgKGEtPmFsbG9jYXRlZF9hdCA+IGIt
PmFsbG9jYXRlZF9hdCkgcmV0dXJuICAxOworICAgaWYgKGEtPmFsbG9jYXRlZF9hdC5lYyA8IGIt
PmFsbG9jYXRlZF9hdC5lYykgcmV0dXJuIC0xOworICAgaWYgKGEtPmFsbG9jYXRlZF9hdC5lYyA+
IGItPmFsbG9jYXRlZF9hdC5lYykgcmV0dXJuICAxOwogICAgVkdfKHRvb2xfcGFuaWMpKCJiYWQg
TG9zc1JlY29yZCBjb21wYXJpc29uIik7CiB9CiAKQEAgLTEyMzEsMTAgKzEyMzcsMTUgQEAKICAg
IC8vIHBvc3NpYmxlLiAgU286ICBjb21wYXJlIG51bV9ibG9ja3MuCiAgICBpZiAobHJfYS0+bnVt
X2Jsb2NrcyA8IGxyX2ItPm51bV9ibG9ja3MpIHJldHVybiAtMTsKICAgIGlmIChscl9hLT5udW1f
YmxvY2tzID4gbHJfYi0+bnVtX2Jsb2NrcykgcmV0dXJuICAxOworICAgLy8gVGhlbiBlcG9jaHMu
CisgICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9hdC5lcG9jaC5uIDwgbHJfYi0+a2V5LmFsbG9j
YXRlZF9hdC5lcG9jaC5uKQorICAgICAgcmV0dXJuIC0xOworICAgaWYgKGxyX2EtPmtleS5hbGxv
Y2F0ZWRfYXQuZXBvY2gubiA+IGxyX2ItPmtleS5hbGxvY2F0ZWRfYXQuZXBvY2gubikKKyAgICAg
IHJldHVybiAxOwogICAgLy8gRmluYWxseSwgY29tcGFyZSBFeGVDb250ZXh0IGFkZHJlc3Nlcy4u
LiBvbGRlciBvbmVzIGFyZSBsaWtlbHkgdG8gaGF2ZQogICAgLy8gbG93ZXIgYWRkcmVzc2VzLgot
ICAgaWYgKGxyX2EtPmtleS5hbGxvY2F0ZWRfYXQgPCBscl9iLT5rZXkuYWxsb2NhdGVkX2F0KSBy
ZXR1cm4gLTE7Ci0gICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9hdCA+IGxyX2ItPmtleS5hbGxv
Y2F0ZWRfYXQpIHJldHVybiAgMTsKKyAgIGlmIChscl9hLT5rZXkuYWxsb2NhdGVkX2F0LmVjIDwg
bHJfYi0+a2V5LmFsbG9jYXRlZF9hdC5lYykgcmV0dXJuIC0xOworICAgaWYgKGxyX2EtPmtleS5h
bGxvY2F0ZWRfYXQuZWMgPiBscl9iLT5rZXkuYWxsb2NhdGVkX2F0LmVjKSByZXR1cm4gIDE7CiAg
ICByZXR1cm4gMDsKIH0KIApAQCAtMTM4MSw3ICsxMzkyLDcgQEAKICAgICAgIHh0bC54dF9scltp
XS52aWRbWFRfRGVjcmVhc2VdLm51bV9ibG9ja3MgCiAgICAgICAgICA9IGxyLT5vbGRfbnVtX2Js
b2NrcyAtIGxyLT5udW1fYmxvY2tzOwogCi0gICBWR18oWFRfYWRkX3RvX2VjKShsZWFrX3h0LCBs
ci0+a2V5LmFsbG9jYXRlZF9hdCwgJnh0bCk7CisgICBWR18oWFRfYWRkX3RvX2VjKShsZWFrX3h0
LCBsci0+a2V5LmFsbG9jYXRlZF9hdC5lYywgJnh0bCk7CiB9CiAKIHN0YXRpYyB2b2lkIE1DXyhY
VF9MZWFrX3N1YikgKHZvaWQqIGZyb20sIGNvbnN0IHZvaWQqIHh0bGVhaykKQEAgLTIxMzMsOSAr
MjE0NCw5IEBACiAgICAgICAgICAgICBWR18odW1zZykoIkJsb2NrIDB4JWx4Li4weCVseCBvdmVy
bGFwcyB3aXRoIGJsb2NrIDB4JWx4Li4weCVseFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBz
dGFydDEsIGVuZDEsIHN0YXJ0MiwgZW5kMik7CiAgICAgICAgICAgICBWR18odW1zZykoIkJsb2Nr
cyBhbGxvY2F0aW9uIGNvbnRleHRzOlxuIiksCi0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dCkoIE1DXyhhbGxvY2F0ZWRfYXQpKGNoMSkpOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoIE1DXyhhbGxvY2F0ZWRfYXQpKGNoMSkpOwogICAgICAgICAgICAgVkdfKHVt
c2cpKCJcbiIpLAotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCAgTUNfKGFsbG9jYXRl
ZF9hdCkoY2gyKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggIE1D
XyhhbGxvY2F0ZWRfYXQpKGNoMikpOwogICAgICAgICAgICAgVkdfKHVtc2cpKCJUaGlzIGlzIHVz
dWFsbHkgY2F1c2VkIGJ5IHVzaW5nICIpOwogICAgICAgICAgICAgVkdfKHVtc2cpKCJWQUxHUklO
RF9NQUxMT0NMSUtFX0JMT0NLIGluIGFuIGluYXBwcm9wcmlhdGUgd2F5LlxuIik7CiAgICAgICAg
ICAgICB0bF9hc3NlcnQgKDApOwpJbmRleDogbWVtY2hlY2svbWNfbWFpbi5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIG1lbWNoZWNrL21jX21haW4uYwkocmV2aXNpb24gMTY0NjEpCisrKyBtZW1jaGVjay9tY19t
YWluLmMJKHdvcmtpbmcgY29weSkKQEAgLTY3MTksOSArNjcxOSwxMSBAQAogICAgICAgY29uc3Qg
SENoYXIqIHNyYzsKICAgICAgIFVJbnQgb3RhZzsKICAgICAgIFVJbnQgZWN1OwotICAgICAgRXhl
Q29udGV4dCogb3JpZ2luX2VjOworICAgICAgRXhlQ29udGV4dEFuZEVwb2NoIG9yaWdpbl9lY2U7
CiAgICAgICBNQ19SZWFkUmVzdWx0IHJlczsKIAorICAgICAgY29uc3QgRGlFcG9jaCBlcCA9IFZH
XyhjdXJyZW50X0RpRXBvY2gpKCk7CisKICAgICAgIEludCBrd2RpZCA9IFZHXyhrZXl3b3JkX2lk
KSAKICAgICAgICAgICgiYWRkcmVzc2FibGUgZGVmaW5lZCIsCiAgICAgICAgICAgVkdfKHN0cnRv
a19yKSAoTlVMTCwgIiAiLCAmc3NhdmVwdHIpLCBrd2RfcmVwb3J0X2FsbCk7CkBAIC02NzM4LDcg
KzY3NDAsOCBAQAogICAgICAgICAgICAgVkdfKHByaW50ZikKICAgICAgICAgICAgICAgICgiQWRk
cmVzcyAlcCBsZW4gJWx1IG5vdCBhZGRyZXNzYWJsZTpcbmJhZCBhZGRyZXNzICVwXG4iLAogICAg
ICAgICAgICAgICAgICh2b2lkICopYWRkcmVzcywgc3pCLCAodm9pZCAqKSBiYWRfYWRkcik7Ci0g
ICAgICAgICBNQ18ocHBfZGVzY3JpYmVfYWRkcikgKGFkZHJlc3MpOworICAgICAgICAgLy8gRklY
TUUgSlJTIGVwb2NoIG9rPworICAgICAgICAgTUNfKHBwX2Rlc2NyaWJlX2FkZHIpIChlcCwgYWRk
cmVzcyk7CiAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgIDE6IC8qIGRlZmluZWQgKi8KICAg
ICAgICAgIHJlcyA9IGlzX21lbV9kZWZpbmVkICggYWRkcmVzcywgc3pCLCAmYmFkX2FkZHIsICZv
dGFnICk7CkBAIC02NzY1LDE0ICs2NzY4LDE2IEBACiAgICAgICAgICAgICAgICAgKHZvaWQgKilh
ZGRyZXNzLCBzekIsICh2b2lkICopIGJhZF9hZGRyLCBzcmMpOwogICAgICAgICAgICAgZWN1ID0g
b3RhZyAmIH4zOwogICAgICAgICAgICAgaWYgKFZHXyhpc19wbGF1c2libGVfRUNVKShlY3UpKSB7
Ci0gICAgICAgICAgICAgICBvcmlnaW5fZWMgPSBWR18oZ2V0X0V4ZUNvbnRleHRfZnJvbV9FQ1Up
KCBlY3UgKTsKLSAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggb3JpZ2luX2VjICk7
CisgICAgICAgICAgICAgICBvcmlnaW5fZWNlID0gVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBv
Y2gpKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhnZXRfRXhlQ29udGV4dF9m
cm9tX0VDVSkoIGVjdSApKTsKKyAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBv
Y2gpKCBvcmlnaW5fZWNlICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICBWR18ocHJpbnRmKSAoIkFkZHJlc3MgJXAgbGVuICVsdSBkZWZpbmVk
XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYWRkcmVzcywgc3pCKTsKLSAg
ICAgICAgIE1DXyhwcF9kZXNjcmliZV9hZGRyKSAoYWRkcmVzcyk7CisgICAgICAgICAvLyBGSVhN
RSBKUlMgZXBvY2ggb2s/CisgICAgICAgICBNQ18ocHBfZGVzY3JpYmVfYWRkcikgKGVwLCBhZGRy
ZXNzKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogdGxfYXNzZXJ0KDApOwogICAg
ICAgfQpAQCAtNzA0OSw3ICs3MDU0LDkgQEAKICAgICAgICAgICAgIGNnYnNbaV0uc3RhcnQgPSBh
cmdbMV07CiAgICAgICAgICAgICBjZ2JzW2ldLnNpemUgID0gYXJnWzJdOwogICAgICAgICAgICAg
Y2dic1tpXS5kZXNjICA9IFZHXyhzdHJkdXApKCJtYy5taGNyLjEiLCAoSENoYXIgKilhcmdbM10p
OwotICAgICAgICAgICAgY2dic1tpXS53aGVyZSA9IFZHXyhyZWNvcmRfRXhlQ29udGV4dCkgKCB0
aWQsIDAvKmZpcnN0X2lwX2RlbHRhKi8gKTsKKyAgICAgICAgICAgIGNnYnNbaV0ud2hlcmUgPSBW
R18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVkdfKHJlY29yZF9FeGVDb250ZXh0KSAoIHRpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC8qZmlyc3RfaXBfZGVsdGEqLyAp
KTsKICAgICAgICAgICAgICpyZXQgPSBpOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAq
cmV0ID0gLTE7CkBAIC03OTE3LDcgKzc5MjQsNyBAQAogICAgfQogCiAgICBNQ18oY2h1bmtfcG9v
bGFsbG9jKSA9IFZHXyhuZXdQQSkKLSAgICAgIChzaXplb2YoTUNfQ2h1bmspICsgTUNfKG5fd2hl
cmVfcG9pbnRlcnMpKCkgKiBzaXplb2YoRXhlQ29udGV4dCopLAorICAgICAgKHNpemVvZihNQ19D
aHVuaykgKyBNQ18obl93aGVyZV9wb2ludGVycykoKSAqIHNpemVvZihFeGVDb250ZXh0QW5kRXBv
Y2gpLAogICAgICAgIDEwMDAsCiAgICAgICAgVkdfKG1hbGxvYyksCiAgICAgICAgIm1jLmNNQy4x
IChNQ19DaHVuayBwb29scykiLApJbmRleDogbWVtY2hlY2svbWNfbWFsbG9jX3dyYXBwZXJzLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbWVtY2hlY2svbWNfbWFsbG9jX3dyYXBwZXJzLmMJKHJldmlzaW9uIDE2
NDYxKQorKysgbWVtY2hlY2svbWNfbWFsbG9jX3dyYXBwZXJzLmMJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSw4ICsxOTksOCBAQAogICAgbWMtPnN6QiAgICAgICA9IHN6QjsKICAgIG1jLT5hbGxvY2tp
bmQgPSBraW5kOwogICAgc3dpdGNoICggTUNfKG5fd2hlcmVfcG9pbnRlcnMpKCkgKSB7Ci0gICAg
ICBjYXNlIDI6IG1jLT53aGVyZVsxXSA9IDA7IC8vIGZhbGxiYWNrIHRvIDEKLSAgICAgIGNhc2Ug
MTogbWMtPndoZXJlWzBdID0gMDsgLy8gZmFsbGJhY2sgdG8gMAorICAgICAgY2FzZSAyOiBtYy0+
d2hlcmVbMV0gPSBWR18oaW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpKCk7IC8vIGZhbGwgdGhy
dQorICAgICAgY2FzZSAxOiBtYy0+d2hlcmVbMF0gPSBWR18oaW52YWxpZF9FeGVDb250ZXh0QW5k
RXBvY2gpKCk7IC8vIGZhbGwgdGhydQogICAgICAgY2FzZSAwOiBicmVhazsKICAgICAgIGRlZmF1
bHQ6IHRsX2Fzc2VydCgwKTsKICAgIH0KQEAgLTI2OCwzMCArMjY4LDM0IEBACiAgICByZXR1cm4g
aW5fYmxvY2tfbGlzdCAoIE1DXyhtYWxsb2NfbGlzdCksIG1jICk7CiB9CiAKLUV4ZUNvbnRleHQq
IE1DXyhhbGxvY2F0ZWRfYXQpIChNQ19DaHVuayogbWMpCitFeGVDb250ZXh0QW5kRXBvY2ggTUNf
KGFsbG9jYXRlZF9hdCkgKE1DX0NodW5rKiBtYykKIHsKICAgIHN3aXRjaCAoTUNfKGNsb19rZWVw
X3N0YWNrdHJhY2VzKSkgewotICAgICAgY2FzZSBLU19ub25lOiAgICAgICAgICAgIHJldHVybiBW
R18obnVsbF9FeGVDb250ZXh0KSAoKTsKKyAgICAgIGNhc2UgS1Nfbm9uZTogICAgICAgICAgICBy
ZXR1cm4gVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSAoKTsKICAgICAgIGNhc2UgS1NfYWxs
b2M6ICAgICAgICAgICByZXR1cm4gbWMtPndoZXJlWzBdOwotICAgICAgY2FzZSBLU19mcmVlOiAg
ICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0KSAoKTsKLSAgICAgIGNhc2UgS1Nf
YWxsb2NfdGhlbl9mcmVlOiByZXR1cm4gKGxpdmVfYmxvY2sobWMpID8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1jLT53aGVyZVswXSA6IFZHXyhudWxsX0V4ZUNvbnRl
eHQpICgpKTsKKyAgICAgIGNhc2UgS1NfZnJlZTogICAgICAgICAgICByZXR1cm4gVkdfKG51bGxf
RXhlQ29udGV4dEFuZEVwb2NoKSAoKTsKKyAgICAgIGNhc2UgS1NfYWxsb2NfdGhlbl9mcmVlOiBy
ZXR1cm4gbGl2ZV9ibG9jayhtYykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gbWMtPndoZXJlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSAoKTsKICAgICAgIGNhc2UgS1Nf
YWxsb2NfYW5kX2ZyZWU6ICByZXR1cm4gbWMtPndoZXJlWzBdOwogICAgICAgZGVmYXVsdDogdGxf
YXNzZXJ0ICgwKTsKICAgIH0KIH0KIAotRXhlQ29udGV4dCogTUNfKGZyZWVkX2F0KSAoTUNfQ2h1
bmsqIG1jKQorRXhlQ29udGV4dEFuZEVwb2NoIE1DXyhmcmVlZF9hdCkgKE1DX0NodW5rKiBtYykK
IHsKICAgIHN3aXRjaCAoTUNfKGNsb19rZWVwX3N0YWNrdHJhY2VzKSkgewotICAgICAgY2FzZSBL
U19ub25lOiAgICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0KSAoKTsKLSAgICAg
IGNhc2UgS1NfYWxsb2M6ICAgICAgICAgICByZXR1cm4gVkdfKG51bGxfRXhlQ29udGV4dCkgKCk7
Ci0gICAgICBjYXNlIEtTX2ZyZWU6ICAgICAgICAgICAgcmV0dXJuIChtYy0+d2hlcmVbMF0gPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWMtPndoZXJlWzBdIDogVkdf
KG51bGxfRXhlQ29udGV4dCkgKCkpOwotICAgICAgY2FzZSBLU19hbGxvY190aGVuX2ZyZWU6IHJl
dHVybiAobGl2ZV9ibG9jayhtYykgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVkdfKG51bGxfRXhlQ29udGV4dCkgKCkgOiBtYy0+d2hlcmVbMF0pOwotICAgICAgY2Fz
ZSBLU19hbGxvY19hbmRfZnJlZTogIHJldHVybiAobWMtPndoZXJlWzFdID8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jLT53aGVyZVsxXSA6IFZHXyhudWxsX0V4ZUNv
bnRleHQpICgpKTsKKyAgICAgIGNhc2UgS1Nfbm9uZTogICAgICAgICAgICByZXR1cm4gVkdfKG51
bGxfRXhlQ29udGV4dEFuZEVwb2NoKSAoKTsKKyAgICAgIGNhc2UgS1NfYWxsb2M6ICAgICAgICAg
ICByZXR1cm4gVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSAoKTsKKyAgICAgIGNhc2UgS1Nf
ZnJlZTogICAgICAgICAgICByZXR1cm4gbWMtPndoZXJlWzBdLmVjCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gbWMtPndoZXJlWzBdCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSAo
KTsKKyAgICAgIGNhc2UgS1NfYWxsb2NfdGhlbl9mcmVlOiByZXR1cm4gbGl2ZV9ibG9jayhtYykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBWR18obnVsbF9FeGVD
b250ZXh0QW5kRXBvY2gpICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogbWMtPndoZXJlWzBdOworICAgICAgY2FzZSBLU19hbGxvY19hbmRfZnJlZTogIHJldHVy
biBtYy0+d2hlcmVbMV0uZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBtYy0+d2hlcmVbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpICgpOwogICAgICAgZGVmYXVsdDogdGxf
YXNzZXJ0ICgwKTsKICAgIH0KIH0KQEAgLTMwNiwxNSArMzEwLDE2IEBACiAgICAgICBjYXNlIEtT
X2FsbG9jX2FuZF9mcmVlOiAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiB0bF9hc3NlcnQgKDApOwog
ICAgfQotICAgbWMtPndoZXJlWzBdID0gVkdfKHJlY29yZF9FeGVDb250ZXh0KSAoIHRpZCwgMC8q
Zmlyc3RfaXBfZGVsdGEqLyApOworICAgbWMtPndoZXJlWzBdID0gVkdfKHRhZ19FQ193aXRoX2N1
cnJlbnRfZXBvY2gpKAorICAgICAgICAgICAgICAgICAgICAgVkdfKHJlY29yZF9FeGVDb250ZXh0
KSAoIHRpZCwgMC8qZmlyc3RfaXBfZGVsdGEqLyApKTsKICAgIGlmIChVTkxJS0VMWShWR18oY2xv
X3h0cmVlX21lbW9yeSkgPT0gVmdfWFRNZW1vcnlfRnVsbCkpCi0gICAgICAgVkdfKFhUTWVtb3J5
X0Z1bGxfYWxsb2MpKG1jLT5zekIsIG1jLT53aGVyZVswXSk7CisgICAgICAgVkdfKFhUTWVtb3J5
X0Z1bGxfYWxsb2MpKG1jLT5zekIsIG1jLT53aGVyZVswXS5lYyk7CiB9CiAKIHZvaWQgIE1DXyhz
ZXRfZnJlZWRfYXQpIChUaHJlYWRJZCB0aWQsIE1DX0NodW5rKiBtYykKIHsKICAgIEludCBwb3M7
Ci0gICBFeGVDb250ZXh0KiBlY19mcmVlOworICAgRXhlQ29udGV4dEFuZEVwb2NoIGVjX2ZyZWU7
CiAKICAgIHN3aXRjaCAoTUNfKGNsb19rZWVwX3N0YWNrdHJhY2VzKSkgewogICAgICAgY2FzZSBL
U19ub25lOiAgICAgICAgICAgIHJldHVybjsKQEAgLTMzMyw5ICszMzgsMTAgQEAKICAgICAgIE5v
dGU6IHdlIGFyZSBndWFyYW50ZWVkIHRvIGZpbmQgdGhlIGVjX2FsbG9jIGluIG1jLT53aGVyZVsw
XSwgYXMKICAgICAgIG1jX3Bvc3RfY2xvX2luaXQgdmVyaWZpZXMgdGhlIGNvbnNpc3RlbmN5IG9m
IC0teHRyZWUtbWVtb3J5IGFuZAogICAgICAgLS1rZWVwLXN0YWNrdHJhY2VzLiAqLwotICAgZWNf
ZnJlZSA9IFZHXyhyZWNvcmRfRXhlQ29udGV4dCkgKCB0aWQsIDAvKmZpcnN0X2lwX2RlbHRhKi8g
KTsKKyAgIGVjX2ZyZWUgPSBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAg
ICAgICAgICAgVkdfKHJlY29yZF9FeGVDb250ZXh0KSAoIHRpZCwgMC8qZmlyc3RfaXBfZGVsdGEq
LyApKTsKICAgIGlmIChVTkxJS0VMWShWR18oY2xvX3h0cmVlX21lbW9yeSkgPT0gVmdfWFRNZW1v
cnlfRnVsbCkpCi0gICAgICAgVkdfKFhUTWVtb3J5X0Z1bGxfZnJlZSkobWMtPnN6QiwgbWMtPndo
ZXJlWzBdLCBlY19mcmVlKTsKKyAgICAgICBWR18oWFRNZW1vcnlfRnVsbF9mcmVlKShtYy0+c3pC
LCBtYy0+d2hlcmVbMF0uZWMsIGVjX2ZyZWUuZWMpOwogICAgaWYgKExJS0VMWShwb3MgPj0gMCkp
CiAgICAgICBtYy0+d2hlcmVbcG9zXSA9IGVjX2ZyZWU7CiB9CkBAIC0zOTEsNyArMzk3LDcgQEAK
ICAgIGlmIChpc196ZXJvZWQpCiAgICAgICBNQ18obWFrZV9tZW1fZGVmaW5lZCkoIHAsIHN6QiAp
OwogICAgZWxzZSB7Ci0gICAgICBVSW50IGVjdSA9IFZHXyhnZXRfRUNVX2Zyb21fRXhlQ29udGV4
dCkoTUNfKGFsbG9jYXRlZF9hdCkobWMpKTsKKyAgICAgIFVJbnQgZWN1ID0gVkdfKGdldF9FQ1Vf
ZnJvbV9FeGVDb250ZXh0KShNQ18oYWxsb2NhdGVkX2F0KShtYykuZWMpOwogICAgICAgdGxfYXNz
ZXJ0KFZHXyhpc19wbGF1c2libGVfRUNVKShlY3UpKTsKICAgICAgIE1DXyhtYWtlX21lbV91bmRl
ZmluZWRfd19vdGFnKSggcCwgc3pCLCBlY3UgfCBNQ19PS0lORF9IRUFQICk7CiAgICB9CkBAIC02
MDUsNyArNjExLDcgQEAKICAgICAgICAgIC8vIElmIHRoZSBibG9jayBoYXMgZ3Jvd24sIHdlIG1h
cmsgdGhlIGdyb3duIGFyZWEgYXMgdW5kZWZpbmVkLgogICAgICAgICAgLy8gV2UgaGF2ZSB0byBk
byB0aGF0IGFmdGVyIFZHXyhIVF9hZGRfbm9kZSkgdG8gZW5zdXJlIHRoZSBlY3UKICAgICAgICAg
IC8vIGV4ZWNvbnRleHQgaXMgZm9yIGEgZnVsbHkgYWxsb2NhdGVkIGJsb2NrLgotICAgICAgICAg
ZWN1ID0gVkdfKGdldF9FQ1VfZnJvbV9FeGVDb250ZXh0KShNQ18oYWxsb2NhdGVkX2F0KShuZXdf
bWMpKTsKKyAgICAgICAgIGVjdSA9IFZHXyhnZXRfRUNVX2Zyb21fRXhlQ29udGV4dCkoTUNfKGFs
bG9jYXRlZF9hdCkobmV3X21jKS5lYyk7CiAgICAgICAgICB0bF9hc3NlcnQoVkdfKGlzX3BsYXVz
aWJsZV9FQ1UpKGVjdSkpOwogICAgICAgICAgTUNfKG1ha2VfbWVtX3VuZGVmaW5lZF93X290YWcp
KCBhX25ldytvbGRfc3pCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdfc3pCLW9sZF9zekIsCkBAIC02NzMsNyArNjc5LDcgQEAKICAgICAgIHJldHVybjsKIAog
ICAgaWYgKFVOTElLRUxZKFZHXyhjbG9feHRyZWVfbWVtb3J5KSA9PSBWZ19YVE1lbW9yeV9GdWxs
KSkKLSAgICAgICBWR18oWFRNZW1vcnlfRnVsbF9yZXNpemVfaW5fcGxhY2UpKG9sZFNpemVCLCAg
bmV3U2l6ZUIsIG1jLT53aGVyZVswXSk7CisgICAgICAgVkdfKFhUTWVtb3J5X0Z1bGxfcmVzaXpl
X2luX3BsYWNlKShvbGRTaXplQiwgbmV3U2l6ZUIsIG1jLT53aGVyZVswXS5lYyk7CiAKICAgIG1j
LT5zekIgPSBuZXdTaXplQjsKICAgIGlmIChuZXdTaXplQiA8IG9sZFNpemVCKSB7CkBAIC04ODcs
NyArODkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3NbaV0tPmRhdGEsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rc1tpXS0+ZGF0YSArIGNodW5rc1tpXS0+c3pC
KTsKIAotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKE1DXyhhbGxvY2F0ZWRfYXQpKGNo
dW5rc1tpXSkpOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoTUNfKGFs
bG9jYXRlZF9hdCkoY2h1bmtzW2ldKSk7CiAgICAgICAgICB9CiAgICB9CiAgICBWR18oZnJlZSko
Y2h1bmtzKTsKQEAgLTExNDcsNyArMTE1Myw3IEBACiAgICBpZiAobWMpIHsKICAgICAgIHh0YS0+
bmJ5dGVzID0gbWMtPnN6QjsKICAgICAgIHh0YS0+bmJsb2NrcyA9IDE7Ci0gICAgICAqZWNfYWxs
b2MgPSBNQ18oYWxsb2NhdGVkX2F0KShtYyk7CisgICAgICAqZWNfYWxsb2MgPSBNQ18oYWxsb2Nh
dGVkX2F0KShtYykuZWM7CiAgICB9IGVsc2UKICAgICAgIHh0YS0+bmJsb2NrcyA9IDA7CiB9Cklu
ZGV4OiBub25lL3Rlc3RzL2NtZGxpbmUxLnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9uZS90
ZXN0cy9jbWRsaW5lMS5zdGRvdXQuZXhwCShyZXZpc2lvbiAxNjQ2MSkKKysrIG5vbmUvdGVzdHMv
Y21kbGluZTEuc3Rkb3V0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTAgQEAKICAg
ICAtLWVycm9yLWV4aXRjb2RlPTxudW1iZXI+IGV4aXQgY29kZSB0byByZXR1cm4gaWYgZXJyb3Jz
IGZvdW5kIFswPWRpc2FibGVdCiAgICAgLS1lcnJvci1tYXJrZXJzPTxiZWdpbj4sPGVuZD4gYWRk
IGxpbmVzIHdpdGggYmVnaW4vZW5kIG1hcmtlcnMgYmVmb3JlL2FmdGVyCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlYWNoIGVycm9yIG91dHB1dCBpbiBwbGFpbiB0ZXh0IG1vZGUgW25v
bmVdCisgICAgLS1rZWVwLWRlYnVnaW5mbz1ub3x5ZXMgICBLZWVwIHN5bWJvbHMgZXRjIGZvciB1
bmxvYWRlZCBjb2RlIFtub10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxs
b3dzIHN0YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmNsdWRlIGZpbGUvbGluZSBpbmZvIGZvciBjb2RlIHRoYXQgaGFzIGJlZW4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsY2xvc2UnZCAob3Igc2ltaWxhcikKICAg
ICAtLXNob3ctYmVsb3ctbWFpbj1ub3x5ZXMgIGNvbnRpbnVlIHN0YWNrIHRyYWNlcyBiZWxvdyBt
YWluKCkgW25vXQogICAgIC0tZGVmYXVsdC1zdXBwcmVzc2lvbnM9eWVzfG5vCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkIGRlZmF1bHQgc3VwcHJlc3Npb25zIFt5ZXNdCkluZGV4
OiBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbm9uZS90ZXN0
cy9jbWRsaW5lMi5zdGRvdXQuZXhwCShyZXZpc2lvbiAxNjQ2MSkKKysrIG5vbmUvdGVzdHMvY21k
bGluZTIuc3Rkb3V0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTAgQEAKICAgICAt
LWVycm9yLWV4aXRjb2RlPTxudW1iZXI+IGV4aXQgY29kZSB0byByZXR1cm4gaWYgZXJyb3JzIGZv
dW5kIFswPWRpc2FibGVdCiAgICAgLS1lcnJvci1tYXJrZXJzPTxiZWdpbj4sPGVuZD4gYWRkIGxp
bmVzIHdpdGggYmVnaW4vZW5kIG1hcmtlcnMgYmVmb3JlL2FmdGVyCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlYWNoIGVycm9yIG91dHB1dCBpbiBwbGFpbiB0ZXh0IG1vZGUgW25vbmVd
CisgICAgLS1rZWVwLWRlYnVnaW5mbz1ub3x5ZXMgICBLZWVwIHN5bWJvbHMgZXRjIGZvciB1bmxv
YWRlZCBjb2RlIFtub10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dz
IHN0YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlIGZpbGUvbGluZSBpbmZvIGZvciBjb2RlIHRoYXQgaGFzIGJlZW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsY2xvc2UnZCAob3Igc2ltaWxhcikKICAgICAt
LXNob3ctYmVsb3ctbWFpbj1ub3x5ZXMgIGNvbnRpbnVlIHN0YWNrIHRyYWNlcyBiZWxvdyBtYWlu
KCkgW25vXQogICAgIC0tZGVmYXVsdC1zdXBwcmVzc2lvbnM9eWVzfG5vCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2FkIGRlZmF1bHQgc3VwcHJlc3Npb25zIFt5ZXNdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107001</attachid>
            <date>2017-08-01 06:41:44 +0000</date>
            <delta_ts>2017-08-01 07:39:16 +0000</delta_ts>
            <desc>epochs-4.diff</desc>
            <filename>epochs-4.diff</filename>
            <type>text/plain</type>
            <size>187209</size>
            <attacher name="Julian Seward">jseward</attacher>
            
              <data encoding="base64">SW5kZXg6IE1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlLmFtCShyZXZpc2lvbiAx
NjQ2NSkKKysrIE1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw2ICsxNiwxMCBAQAog
CQlleHAtYmJ2IFwKIAkJZXhwLWRoYXQKIAorI1RPT0xTID0gbm9uZSBtZW1jaGVjaworI0VYUF9U
T09MUyA9CisKKwogIyBQdXQgZG9jcyBsYXN0IGJlY2F1c2UgYnVpbGRpbmcgdGhlIEhUTUwgaXMg
c2xvdyBhbmQgd2Ugd2FudCB0byBnZXQKICMgZXZlcnl0aGluZyBlbHNlIHdvcmtpbmcgYmVmb3Jl
IHdlIHRyeSBpdC4KIFNVQkRJUlMgPSBcCkluZGV4OiBjYWNoZWdyaW5kL2NnX21haW4uYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjYWNoZWdyaW5kL2NnX21haW4uYwkocmV2aXNpb24gMTY0NjUpCisrKyBjYWNo
ZWdyaW5kL2NnX21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtMjEwLDEyICsyMTAsMTQgQEAKIHN0
YXRpYyB2b2lkIGdldF9kZWJ1Z19pbmZvKEFkZHIgaW5zdHJfYWRkciwgY29uc3QgSENoYXIgKipk
aXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIQ2hhciAqKmZpbGUsIGNvbnN0
IEhDaGFyICoqZm4sIFVJbnQqIGxpbmUpCiB7CisgICBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRf
RGlFcG9jaCkoKTsKICAgIEJvb2wgZm91bmRfZmlsZV9saW5lID0gVkdfKGdldF9maWxlbmFtZV9s
aW5lbnVtKSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc3RyX2FkZHIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlLCBkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgIEJvb2wgZm91bmRfZm4gICAgICAgID0gVkdfKGdldF9m
bm5hbWUpKGluc3RyX2FkZHIsIGZuKTsKKyAgIEJvb2wgZm91bmRfZm4gICAgICAgID0gVkdfKGdl
dF9mbm5hbWUpKGVwLCBpbnN0cl9hZGRyLCBmbik7CiAKICAgIGlmICghZm91bmRfZmlsZV9saW5l
KSB7CiAgICAgICAqZmlsZSA9ICI/Pz8iOwpJbmRleDogY2FsbGdyaW5kL2JiLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY2FsbGdyaW5kL2JiLmMJKHJldmlzaW9uIDE2NDY1KQorKysgY2FsbGdyaW5kL2JiLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksOCBAQAogICBEZWJ1Z0luZm8qIGRpOwogICBQ
dHJkaWZmVCBvZmZzZXQ7CiAKLSAgZGkgPSBWR18oZmluZF9EZWJ1Z0luZm8pKGFkZHIpOworICBE
aUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKyAgZGkgPSBWR18oZmluZF9EZWJ1
Z0luZm8pKGVwLCBhZGRyKTsKICAgb2JqID0gQ0xHXyhnZXRfb2JqX25vZGUpKCBkaSApOwogCiAg
IC8qIFVwZGF0ZSBzeW1ib2wgb2Zmc2V0IGluIG9iamVjdCBpZiByZW1hcHBlZCAqLwpJbmRleDog
Y2FsbGdyaW5kL2R1bXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjYWxsZ3JpbmQvZHVtcC5jCShyZXZpc2lv
biAxNjQ2NSkKKysrIGNhbGxncmluZC9kdW1wLmMJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw3ICsz
NzMsOCBAQAogCWZvdW5kX2ZpbGVfbGluZSA9IGRlYnVnX2NhY2hlX2luZm9bY2FjaGVwb3NdOwog
ICAgIH0KICAgICBlbHNlIHsKLQlmb3VuZF9maWxlX2xpbmUgPSBWR18oZ2V0X2ZpbGVuYW1lX2xp
bmVudW0pKGFkZHIsCisgICAgICAgIERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgp
OworCWZvdW5kX2ZpbGVfbGluZSA9IFZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSkoZXAsIGFkZHIs
CiAJCQkJCQkgICAgJmZpbGUsCiAJCQkJCQkgICAgJmRpciwKIAkJCQkJCSAgICAmKHAtPmxpbmUp
KTsKSW5kZXg6IGNhbGxncmluZC9mbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNhbGxncmluZC9mbi5jCShy
ZXZpc2lvbiAxNjQ2NSkKKysrIGNhbGxncmluZC9mbi5jCSh3b3JraW5nIGNvcHkpCkBAIC00MzQs
MTcgKzQzNCwxOCBAQAogICAKICAgQ0xHX0RFQlVHKDYsICIgICsgZ2V0X2RlYnVnX2luZm8oJSNs
eClcbiIsIGluc3RyX2FkZHIpOwogCisgIERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2No
KSgpOwogICBpZiAocERlYnVnSW5mbykgewotICAgICAgKnBEZWJ1Z0luZm8gPSBWR18oZmluZF9E
ZWJ1Z0luZm8pKGluc3RyX2FkZHIpOworICAgICAgKnBEZWJ1Z0luZm8gPSBWR18oZmluZF9EZWJ1
Z0luZm8pKGVwLCBpbnN0cl9hZGRyKTsKIAogICAgICAgLy8gZm9yIGdlbmVyYXRlZCBjb2RlIGlu
IGFub255bW91cyBzcGFjZSwgcFNlZ0luZm8gaXMgMAogICAgfQogCi0gICBmb3VuZF9maWxlX2xp
bmUgPSBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pKGluc3RyX2FkZHIsCisgICBmb3VuZF9maWxl
X2xpbmUgPSBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pKGVwLCBpbnN0cl9hZGRyLAogCQkJCQkg
ICAgICAgZmlsZSwKIAkJCQkJICAgICAgIGRpciwKIAkJCQkJICAgICAgICZsaW5lKTsKLSAgIGZv
dW5kX2ZuID0gVkdfKGdldF9mbm5hbWUpKGluc3RyX2FkZHIsIGZuX25hbWUpOworICAgZm91bmRf
Zm4gPSBWR18oZ2V0X2ZubmFtZSkoZXAsIGluc3RyX2FkZHIsIGZuX25hbWUpOwogCiAgICBpZiAo
IWZvdW5kX2ZpbGVfbGluZSAmJiAhZm91bmRfZm4pIHsKICAgICAgQ0xHXyhzdGF0KS5ub19kZWJ1
Z19CQnMrKzsKQEAgLTUwMyw2ICs1MDQsNyBAQAogICAgIENMR18oZ2V0X2RlYnVnX2luZm8pKGJi
X2FkZHIoYmIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICZkaXJuYW1lLCAmZmlsZW5hbWUs
ICZmbm5hbWUsICZsaW5lX251bSwgJmRpKTsKIAorICAgIERpRXBvY2ggZXAgPSBWR18oY3VycmVu
dF9EaUVwb2NoKSgpOwogICAgIGlmICgwID09IFZHXyhzdHJjbXApKGZubmFtZSwgIj8/PyIpKSB7
CiAJaW50IHA7CiAgICAgICAgIHN0YXRpYyBIQ2hhciBidWZbMzJdOyAgLy8gZm9yIHN1cmUgbGFy
Z2UgZW5vdWdoCkBAIC01MjEsNyArNTIzLDcgQEAKICAgICAgICAgZm5uYW1lID0gYnVmOwogICAg
IH0KICAgICBlbHNlIHsKLSAgICAgIGlmIChWR18oZ2V0X2ZubmFtZV9pZl9lbnRyeSkoYmJfYWRk
cihiYiksICZmbm5hbWUpKQorICAgICAgaWYgKFZHXyhnZXRfZm5uYW1lX2lmX2VudHJ5KShlcCwg
YmJfYWRkcihiYiksICZmbm5hbWUpKQogCWJiLT5pc19lbnRyeSA9IDE7CiAgICAgfQogCkluZGV4
OiBjb3JlZ3JpbmQvbV9hZGRyaW5mby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2FkZHJp
bmZvLmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fYWRkcmluZm8uYwkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQAogICAgcmV0dXJuIFZHX0lOVkFMSURfVEhSRUFESUQ7
CiB9CiAKLXZvaWQgVkdfKGRlc2NyaWJlX2FkZHIpICggQWRkciBhLCAvKk9VVCovQWRkckluZm8q
IGFpICkKK3ZvaWQgVkdfKGRlc2NyaWJlX2FkZHIpICggRGlFcG9jaCBlcCwgQWRkciBhLCAvKk9V
VCovQWRkckluZm8qIGFpICkKIHsKICAgIFZnU2VjdEtpbmQgc2VjdDsKIApAQCAtOTksNyArOTks
NyBAQAogICAgICAgICAgICAgICAgICAgICBWR18oZnJlZSksIHNpemVvZihIQ2hhcikgKTsKIAog
ICAgKHZvaWQpIFZHXyhnZXRfZGF0YV9kZXNjcmlwdGlvbikoIGFpLT5BZGRyLlZhcmlhYmxlLmRl
c2NyMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+QWRkci5WYXJp
YWJsZS5kZXNjcjIsIGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
aS0+QWRkci5WYXJpYWJsZS5kZXNjcjIsIGVwLCBhICk7CiAgICAvKiBJZiB0aGVyZSdzIG5vdGhp
bmcgaW4gZGVzY3IxLzIsIGZyZWUgdGhlbS4gIFdoeSBpcyBpdCBzYWZlIHRvCiAgICAgICBWR18o
aW5kZXhYQSkgYXQgemVybyBoZXJlPyAgQmVjYXVzZSBWR18oZ2V0X2RhdGFfZGVzY3JpcHRpb24p
CiAgICAgICBndWFyYW50ZWVzIHRvIHplcm8gdGVybWluYXRlIGRlc2NyMS8yIHJlZ2FyZGxlc3Mg
b2YgdGhlIG91dGNvbWUKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgdGhlcmUuIC0tICovCiAg
ICBjb25zdCBIQ2hhciAqbmFtZTsKICAgIGlmIChWR18oZ2V0X2RhdGFzeW1fYW5kX29mZnNldCko
Ci0gICAgICAgICAgICAgYSwgJm5hbWUsCisgICAgICAgICAgICAgZXAsIGEsICZuYW1lLAogICAg
ICAgICAgICAgICZhaS0+QWRkci5EYXRhU3ltLm9mZnNldCApKSB7CiAgICAgICBhaS0+QWRkci5E
YXRhU3ltLm5hbWUgPSBWR18oc3RyZHVwKSgibWMuZGEuZHNuYW1lIiwgbmFtZSk7CiAgICAgICBh
aS0+dGFnID0gQWRkcl9EYXRhU3ltOwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAgICAgICAgICAgICBh
aS0+dGFnICAgICAgICAgICAgPSBBZGRyX1N0YWNrOwogICAgICAgICAgICAgVkdfKGluaXRUaHJl
YWRJbmZvKSgmYWktPkFkZHIuU3RhY2sudGluZm8pOwogICAgICAgICAgICAgYWktPkFkZHIuU3Rh
Y2sudGluZm8udGlkID0gdGlkOworICAgICAgICAgICAgYWktPkFkZHIuU3RhY2suZXBvY2ggPSBl
cDsKICAgICAgICAgICAgIGFpLT5BZGRyLlN0YWNrLklQID0gMDsKICAgICAgICAgICAgIGFpLT5B
ZGRyLlN0YWNrLmZyYW1lTm8gPSAtMTsKICAgICAgICAgICAgIGFpLT5BZGRyLlN0YWNrLnN0YWNr
UG9zID0gU3RhY2tQb3Nfc3RhY2tlZDsKQEAgLTE5Niw5ICsxOTcsOSBAQAogICAgICAgICAgYWkt
PkFkZHIuQmxvY2suYmxvY2tfZGVzYyA9IGFhaS5uYW1lOwogICAgICAgICAgYWktPkFkZHIuQmxv
Y2suYmxvY2tfc3pCID0gYWFpLmJsb2NrX3N6QjsKICAgICAgICAgIGFpLT5BZGRyLkJsb2NrLnJ3
b2Zmc2V0ID0gYWFpLnJ3b2Zmc2V0OwotICAgICAgICAgYWktPkFkZHIuQmxvY2suYWxsb2NhdGVk
X2F0ID0gVkdfKG51bGxfRXhlQ29udGV4dCkoKTsKKyAgICAgICAgIGFpLT5BZGRyLkJsb2NrLmFs
bG9jYXRlZF9hdCA9IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsKICAgICAgICAgIFZH
Xyhpbml0VGhyZWFkSW5mbykgKCZhaS0+QWRkci5CbG9jay5hbGxvY190aW5mbyk7Ci0gICAgICAg
ICBhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9IFZHXyhudWxsX0V4ZUNvbnRleHQpKCk7CisgICAg
ICAgICBhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9j
aCkoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgIH0KQEAgLTI0OCw2ICsyNDksNyBA
QAogICAgICAgICAgYWktPnRhZyAgPSBBZGRyX1N0YWNrOwogICAgICAgICAgVkdfKGluaXRUaHJl
YWRJbmZvKSgmYWktPkFkZHIuU3RhY2sudGluZm8pOwogICAgICAgICAgYWktPkFkZHIuU3RhY2su
dGluZm8udGlkID0gdGlkOworICAgICAgICAgYWktPkFkZHIuU3RhY2suZXBvY2ggPSBlcDsKICAg
ICAgICAgIGFpLT5BZGRyLlN0YWNrLklQID0gMDsKICAgICAgICAgIGFpLT5BZGRyLlN0YWNrLmZy
YW1lTm8gPSAtMTsKICAgICAgICAgIHZnX2Fzc2VydCAoc3RhY2tQb3MgIT0gU3RhY2tQb3Nfc3Rh
Y2tlZCk7CkBAIC00NDcsMjAgKzQ0OSwyNCBAQAogICAgICAgICAgICAgQm9vbCBoYXNsaW5lbnVt
OwogICAgICAgICAgICAgUHRyZGlmZlQgb2Zmc2V0OwogCi0gICAgICAgICAgICBpZiAoVkdfKGdl
dF9pbnN0X29mZnNldF9pbl9mdW5jdGlvbikoIGFpLT5BZGRyLlN0YWNrLklQLAorICAgICAgICAg
ICAgaWYgKFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBhaS0+QWRkci5TdGFjay5l
cG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWktPkFkZHIuU3RhY2suSVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZvZmZzZXQpKQotICAgICAgICAgICAgICAgaGFzbGluZW51bSA9IFZHXyhn
ZXRfbGluZW51bSkgKGFpLT5BZGRyLlN0YWNrLklQIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAg
aGFzbGluZW51bSA9IFZHXyhnZXRfbGluZW51bSkgKGFpLT5BZGRyLlN0YWNrLmVwb2NoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5BZGRyLlN0YWNr
LklQIC0gb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZsaW5lbnVtKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGhhc2xpbmVu
dW0gPSBGYWxzZTsKIAotICAgICAgICAgICAgaGFzZmlsZSA9IFZHXyhnZXRfZmlsZW5hbWUpKGFp
LT5BZGRyLlN0YWNrLklQLCAmZmlsZSk7CisgICAgICAgICAgICBoYXNmaWxlID0gVkdfKGdldF9m
aWxlbmFtZSkoYWktPkFkZHIuU3RhY2suZXBvY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWktPkFkZHIuU3RhY2suSVAsICZmaWxlKTsKIAogICAgICAgICAgICAg
SENoYXIgc3RybGluZW51bVsxNl0gPSAiIjsgICAvLyBsYXJnZSBlbm91Z2gKICAgICAgICAgICAg
IGlmIChoYXNmaWxlICYmIGhhc2xpbmVudW0pCiAgICAgICAgICAgICAgICBWR18oc3ByaW50Ziko
c3RybGluZW51bSwgIiV1IiwgbGluZW51bSk7CiAKLSAgICAgICAgICAgIGhhc2ZuID0gVkdfKGdl
dF9mbm5hbWUpKGFpLT5BZGRyLlN0YWNrLklQLCAmZm4pOworICAgICAgICAgICAgaGFzZm4gPSBW
R18oZ2V0X2ZubmFtZSkoYWktPkFkZHIuU3RhY2suZXBvY2gsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhaS0+QWRkci5TdGFjay5JUCwgJmZuKTsKIAogICAgICAgICAgICAg
aWYgKGhhc2ZuIHx8IGhhc2ZpbGUpCiAgICAgICAgICAgICAgICBWR18oZW1pdCkoICIlc2luIGZy
YW1lICMlZCwgY3JlYXRlZCBieSAlcHMgKCVwczolcyklc1xuIiwKQEAgLTUzMywzMiArNTM5LDM1
IEBACiAgICAgICAgICAgICAgICB4cG9zdAogICAgICAgICAgICAgKTsKICAgICAgICAgIGlmIChh
aS0+QWRkci5CbG9jay5ibG9ja19raW5kPT1CbG9ja19NYWxsb2NkKSB7Ci0gICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dCkoYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0KTsKLSAgICAgICAg
ICAgIHZnX2Fzc2VydCAoYWktPkFkZHIuQmxvY2suZnJlZWRfYXQgPT0gVkdfKG51bGxfRXhlQ29u
dGV4dCkoKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRk
ci5CbG9jay5hbGxvY2F0ZWRfYXQpOworICAgICAgICAgICAgdmdfYXNzZXJ0KAorICAgICAgICAg
ICAgICAgVkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRkci5CbG9jay5mcmVl
ZF9hdCkpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoYWktPkFkZHIuQmxvY2suYmxv
Y2tfa2luZD09QmxvY2tfRnJlZWQpIHsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShh
aS0+QWRkci5CbG9jay5mcmVlZF9hdCk7Ci0gICAgICAgICAgICBpZiAoYWktPkFkZHIuQmxvY2su
YWxsb2NhdGVkX2F0ICE9IFZHXyhudWxsX0V4ZUNvbnRleHQpKCkpIHsKKyAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmZyZWVkX2F0KTsKKyAgICAg
ICAgICAgIGlmICghVkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRkci5CbG9j
ay5hbGxvY2F0ZWRfYXQpKSB7CiAgICAgICAgICAgICAgICBWR18oZW1pdCkoCiAgICAgICAgICAg
ICAgICAgICAiJXNCbG9jayB3YXMgYWxsb2MnZCBhdCVzXG4iLAogICAgICAgICAgICAgICAgICAg
eHByZSwKICAgICAgICAgICAgICAgICAgIHhwb3N0CiAgICAgICAgICAgICAgICApOwotICAgICAg
ICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCk7
CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRkci5CbG9j
ay5hbGxvY2F0ZWRfYXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxz
ZSBpZiAoYWktPkFkZHIuQmxvY2suYmxvY2tfa2luZD09QmxvY2tfTWVtcG9vbENodW5rCiAgICAg
ICAgICAgICAgICAgICB8fCBhaS0+QWRkci5CbG9jay5ibG9ja19raW5kPT1CbG9ja19Vc2VyRykg
ewogICAgICAgICAgICAgLy8gY2xpZW50LWRlZmluZWQKLSAgICAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0KShhaS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQpOwotICAgICAgICAgICAgdmdfYXNz
ZXJ0IChhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9PSBWR18obnVsbF9FeGVDb250ZXh0KSgpKTsK
KyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmFs
bG9jYXRlZF9hdCk7CisgICAgICAgICAgICB2Z19hc3NlcnQoVkdfKGlzX251bGxfRXhlQ29udGV4
dEFuZEVwb2NoKShhaS0+QWRkci5CbG9jay5mcmVlZF9hdCkpOwogICAgICAgICAgICAgLyogTmI6
IGNhbm5vdCBoYXZlIGEgZnJlZWRfYXQsIGFzIGEgZnJlZWQgY2xpZW50LWRlZmluZWQgYmxvY2sK
ICAgICAgICAgICAgICAgIGhhcyBhIEJsb2NrX0ZyZWVkIGJsb2NrX2tpbmQuICovCiAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gQ2xpZW50IG9yIFZhbGdyaW5kIGFyZW5hLiBBdCBs
ZWFzdCBjdXJyZW50bHksIHdlIG5ldmVyCiAgICAgICAgICAgICAvLyBoYXZlIHN0YWNrdHJhY2Vz
IGZvciB0aGVzZS4KLSAgICAgICAgICAgIHZnX2Fzc2VydCAoYWktPkFkZHIuQmxvY2suYWxsb2Nh
dGVkX2F0ID09IFZHXyhudWxsX0V4ZUNvbnRleHQpKCkpOwotICAgICAgICAgICAgdmdfYXNzZXJ0
IChhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9PSBWR18obnVsbF9FeGVDb250ZXh0KSgpKTsKKyAg
ICAgICAgICAgIHZnX2Fzc2VydChWR18oaXNfbnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgKGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCkpOworICAg
ICAgICAgICAgdmdfYXNzZXJ0KFZHXyhpc19udWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAoYWktPkFkZHIuQmxvY2suZnJlZWRfYXQpKTsKICAgICAgICAg
IH0KICAgICAgICAgIGlmIChhaS0+QWRkci5CbG9jay5hbGxvY190aW5mby50bnIgfHwgYWktPkFk
ZHIuQmxvY2suYWxsb2NfdGluZm8udGlkKQogICAgICAgICAgICAgVkdfKGVtaXQpKApAQCAtNjAz
LDcgKzYxMiw3IEBACiAgICAgICAgICBpZiAoYWktPkFkZHIuU2VjdEtpbmQua2luZCA9PSBWZ19T
ZWN0VGV4dCkgewogICAgICAgICAgICAgLyogVG8gYmV0dGVyIGRlc2NyaWJlIHRoZSBhZGRyZXNz
IGluIGEgdGV4dCBzZWdtZW50LAogICAgICAgICAgICAgICAgcHAgYSBkdW1teSBzdGFja3RyYWNl
IG1hZGUgb2YgdGhpcyBzaW5nbGUgYWRkcmVzcy4gKi8KLSAgICAgICAgICAgIFZHXyhwcF9TdGFj
a1RyYWNlKSggJmEsIDEgKTsKKyAgICAgICAgICAgIFZHXyhwcF9TdGFja1RyYWNlKSggVkdfKGN1
cnJlbnRfRGlFcG9jaCkoKSwgJmEsIDEgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwog
CkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNv
cmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsMTEgQEAKICAgIHNob3VsZC13ZS1sb2FkLWRlYnVnaW5mby1ub3c/IGZpbml0ZSBzdGF0ZSBt
YWNoaW5lLiAqLwogI2RlZmluZSBERUJVR19GU00gMAogCisvKiBTZXQgdGhpcyB0byAxIHRvIGVu
YWJsZSBzb21ld2hhdCBtaW5pbWFsIGRlYnVnIHByaW50aW5nIGZvciB0aGUKKyAgIGRlYnVnaW5m
by1lcG9jaCBtYWNoaW5lcnkuICovCisjZGVmaW5lIERFQlVHX0VQT0NIUyAwCiAKKwogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwogLyotLS0gVGhlIF9zdm1hIC8gX2F2bWEgLyBfaW1hZ2UgLyBfYmlhcyBuYW1pbmcgc2NoZW1l
ICAgICAtLS0qLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTA5LDYgKzExMywxMTYgQEAKIAogCiAvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisv
Ki0tLSBFcG9jaHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZSBEZWJ1Z0luZm8gZXBvY2ggaXMgaW5jcmVtZW50ZWQg
ZXZlcnkgdGltZSB3ZSBlaXRoZXIgbG9hZCBkZWJ1Z2luZm8gaW4KKyAgIHJlc3BvbnNlIHRvIGFu
IG9iamVjdCBtYXBwaW5nLCBvciBhbiBleGlzdGluZyBEZWJ1Z0luZm8gYmVjb21lcworICAgbm9u
LWN1cnJlbnQgKG9yIHdpbGwgYmUgZGlzY2FyZGVkKSBkdWUgdG8gYW4gb2JqZWN0IHVubWFwLiAg
Qnkgc3RvcmluZywKKyAgIGluIGVhY2ggRGVidWdJbmZvLCB0aGUgZmlyc3QgYW5kIGxhc3QgZXBv
Y2ggZm9yIHdoaWNoIGl0IGlzIHZhbGlkLCB3ZSBjYW4KKyAgIHVuYW1iaWd1b3VzbHkgaWRlbnRp
ZnkgdGhlIHNldCBvZiBEZWJ1Z0luZm9zIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvCisgICBwcm92
aWRlIG1ldGFkYXRhIGZvciBhIGNvZGUgb3IgZGF0YSBhZGRyZXNzLCBwcm92aWRlZCB3ZSBrbm93
IHRoZSBlcG9jaAorICAgdG8gd2hpY2ggdGhhdCBhZGRyZXNzIHBlcnRhaW5zLgorCisgICBOb3Rl
LCB0aGlzIGlzbid0IHRoZSBzYW1lIGFzIHRoZSAiaGFuZGxlX2NvdW50ZXIiIGJlbG93LiAgVGhh
dCBvbmx5CisgICBhZHZhbmNlcyB3aGVuIG5ldyBEZWJ1Z0luZm9zIGFyZSBjcmVhdGVkLiAgImN1
cnJlbnRfZXBvY2giIGFkdmFuY2VzIGJvdGgKKyAgIGF0IERlYnVnSW5mbyBjcmVhdGVkIGFuZCBk
ZXN0cnVjdGlvbi1vci1tYWtpbmctbm9uLWN1cnJlbnQuCisqLworCisvLyBUaGUgdmFsdWUgemVy
byBpcyByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyBhbiBpbnZhbGlkIGVwb2NoIG51bWJlci4KK3N0
YXRpYyBVSW50IGN1cnJlbnRfZXBvY2ggPSAxOworCitpbmxpbmUgRGlFcG9jaCBWR18oY3VycmVu
dF9EaUVwb2NoKSAoIHZvaWQgKSB7CisgICBEaUVwb2NoIGRlcDsgZGVwLm4gPSBjdXJyZW50X2Vw
b2NoOyByZXR1cm4gZGVwOworfQorCitzdGF0aWMgdm9pZCBhZHZhbmNlX2N1cnJlbnRfRGlFcG9j
aCAoIGNvbnN0IEhDaGFyKiBtc2cgKSB7CisgICBjdXJyZW50X2Vwb2NoKys7CisgICBpZiAoREVC
VUdfRVBPQ0hTKQorICAgICAgVkdfKHByaW50ZikoIkFkdmFuY2luZyBjdXJyZW50IGVwb2NoIHRv
ICV1IGR1ZSB0byAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZXBvY2gsIG1zZyk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgQm9vbCBlcV9EaUVwb2NoICggRGlFcG9jaCBkZXAxLCBEaUVw
b2NoIGRlcDIgKSB7CisgICByZXR1cm4gZGVwMS5uID09IGRlcDIubiAmJiAvKm5laXRoZXIgaXMg
aW52YWxpZCovZGVwMS5uICE9IDA7Cit9CisKKy8vIElzIHRoaXMgRGVidWdJbmZvIGN1cnJlbnRs
eSAiYWxsb2NhdGVkIiAocHJlLXVzZSBzdGF0ZSwgb25seSBGU00gYWN0aXZlKSA/CitzdGF0aWMg
aW5saW5lIEJvb2wgaXNfRGVidWdJbmZvX2FsbG9jYXRlZCAoIGNvbnN0IERlYnVnSW5mbyogZGkg
KQoreworICAgaWYgKGlzX0RpRXBvY2hfSU5WQUxJRChkaS0+Zmlyc3RfZXBvY2gpCisgICAgICAg
JiYgaXNfRGlFcG9jaF9JTlZBTElEKGRpLT5sYXN0X2Vwb2NoKSkgeworICAgICAgcmV0dXJuIFRy
dWU7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIEZhbHNlOworICAgfQorfQorCisvLyBJcyB0
aGlzIERlYnVnSW5mbyBjdXJyZW50bHkgImFjdGl2ZSIgKHZhbGlkIGZvciB0aGUgY3VycmVudCBl
cG9jaCkgPworc3RhdGljIGlubGluZSBCb29sIGlzX0RlYnVnSW5mb19hY3RpdmUgKCBjb25zdCBE
ZWJ1Z0luZm8qIGRpICkKK3sKKyAgIGlmICghaXNfRGlFcG9jaF9JTlZBTElEKGRpLT5maXJzdF9l
cG9jaCkKKyAgICAgICAmJiBpc19EaUVwb2NoX0lOVkFMSUQoZGktPmxhc3RfZXBvY2gpKSB7Cisg
ICAgICAvLyBZZXMgaXQgaXMgYWN0aXZlLiAgU2FuaXR5IGNoZWNrIC4uCisgICAgICB0bF9hc3Nl
cnQoZGktPmZpcnN0X2Vwb2NoLm4gPD0gY3VycmVudF9lcG9jaCk7CisgICAgICByZXR1cm4gVHJ1
ZTsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gRmFsc2U7CisgICB9Cit9CisKKy8vIElzIHRo
aXMgRGVidWdJbmZvIGN1cnJlbnRseSAiYXJjaGl2ZWQiID8KK3N0YXRpYyBpbmxpbmUgQm9vbCBp
c19EZWJ1Z0luZm9fYXJjaGl2ZWQgKCBjb25zdCBEZWJ1Z0luZm8qIGRpICkKK3sKKyAgIGlmICgh
aXNfRGlFcG9jaF9JTlZBTElEKGRpLT5maXJzdF9lcG9jaCkKKyAgICAgICAmJiAhaXNfRGlFcG9j
aF9JTlZBTElEKGRpLT5sYXN0X2Vwb2NoKSkgeworICAgICAgLy8gWWVzIGl0IGlzIGFyY2hpdmVk
LiAgU2FuaXR5IGNoZWNrcyAuLgorICAgICAgdGxfYXNzZXJ0KGRpLT5maXJzdF9lcG9jaC5uIDw9
IGRpLT5sYXN0X2Vwb2NoLm4pOworICAgICAgdGxfYXNzZXJ0KGRpLT5sYXN0X2Vwb2NoLm4gPD0g
Y3VycmVudF9lcG9jaCk7CisgICAgICByZXR1cm4gVHJ1ZTsKKyAgIH0gZWxzZSB7CisgICAgICBy
ZXR1cm4gRmFsc2U7CisgICB9Cit9CisKKy8vIElzIHRoaXMgRGVidWdJbmZvIHZhbGlkIGZvciB0
aGUgc3BlY2lmaWVkIGVwb2NoPworc3RhdGljIGlubGluZSBCb29sIGlzX0RJX3ZhbGlkX2Zvcl9l
cG9jaCAoIGNvbnN0IERlYnVnSW5mbyogZGksIERpRXBvY2ggZXAgKQoreworICAgLy8gU3RheSBz
YW5lCisgICB2Z19hc3NlcnQoZXAubiA+IDAgJiYgZXAubiA8PSBjdXJyZW50X2Vwb2NoKTsKKwor
ICAgQm9vbCBmaXJzdF92YWxpZCA9ICFpc19EaUVwb2NoX0lOVkFMSUQoZGktPmZpcnN0X2Vwb2No
KTsKKyAgIEJvb2wgbGFzdF92YWxpZCAgPSAhaXNfRGlFcG9jaF9JTlZBTElEKGRpLT5sYXN0X2Vw
b2NoKTsKKworICAgaWYgKGZpcnN0X3ZhbGlkKSB7CisgICAgICBpZiAobGFzdF92YWxpZCkgewor
ICAgICAgICAgLy8gQm90aCB2YWxpZC4gIGRpIGlzIGluIEFyY2hpdmVkIHN0YXRlLgorICAgICAg
ICAgcmV0dXJuIGRpLT5maXJzdF9lcG9jaC5uIDw9IGVwLm4gJiYgZXAubiA8PSBkaS0+bGFzdF9l
cG9jaC5uOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIC8vIEZpcnN0IGlzIHZhbGlkLCBsYXN0
IGlzIGludmFsaWQuICBkaSBpcyBpbiBBY3RpdmUgc3RhdGUuCisgICAgICAgICByZXR1cm4gZGkt
PmZpcnN0X2Vwb2NoLm4gPD0gZXAubjsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBpZiAo
bGFzdF92YWxpZCkgeworICAgICAgICAgLy8gRmlyc3QgaXMgaW52YWxpZCwgbGFzdCBpcyB2YWxp
ZC4gIFRoaXMgaXMgYW4gaW1wb3NzaWJsZSBzdGF0ZS4KKyAgICAgICAgIHZnX2Fzc2VydCgwKTsK
KyAgICAgICAgIC8qTk9UUkVBQ0hFRCovCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICB9
IGVsc2UgeworICAgICAgICAgLy8gTmVpdGhlciBpcyB2YWxpZC4gIGRpIGlzIGluIEFsbG9jYXRl
ZCBzdGF0ZS4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIH0KKyAgIH0KKworfQorCitz
dGF0aWMgaW5saW5lIFVJbnQgUk9MMzIgKCBVSW50IHgsIFVJbnQgbiApCit7CisgICByZXR1cm4g
KHggPDwgbikgfCAoeCA+PiAoMzItbikpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tIFJvb3Qgc3Ry
dWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KIApAQCAtMTYyLDYgKzI3NiwyMyBAQAogfQogCiAKKy8vIERlYnVnZ2luZyBoZWxwZXIgZm9y
IGVwb2Nocworc3RhdGljIHZvaWQgc2hvd19lcG9jaHMgKCBjb25zdCBIQ2hhciogbXNnICkKK3sK
KyAgIGlmIChERUJVR19FUE9DSFMpIHsKKyAgICAgIERlYnVnSW5mbyogZGk7CisgICAgICBWR18o
cHJpbnRmKSgiXG5EZWJ1Z0luZm8gZXBvY2ggZGlzcGxheSwgcmVxdWVzdGVkIGJ5IFwiJXNcIlxu
IiwgbXNnKTsKKyAgICAgIFZHXyhwcmludGYpKCIgIEN1cnJlbnQgZXBvY2ggKG5vdGU6IDAgbWVh
bnMgXCJpbnZhbGlkIGVwb2NoXCIpID0gJXVcbiIsCisgICAgICAgICAgICAgICAgICBjdXJyZW50
X2Vwb2NoKTsKKyAgICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGk7IGRpID0gZGktPm5l
eHQpIHsKKyAgICAgICAgIFZHXyhwcmludGYpKCIgIFtkaT0lcF0gIGZpcnN0ICV1ICBsYXN0ICV1
ICAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICBkaSwgZGktPmZpcnN0X2Vwb2NoLm4sIGRp
LT5sYXN0X2Vwb2NoLm4sIGRpLT5mc20uZmlsZW5hbWUpOworICAgICAgfQorICAgICAgVkdfKHBy
aW50ZikoIlxuIik7CisgICB9Cit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0gTm90aWZpY2F0aW9uIChh
Y3F1aXJlL2Rpc2NhcmQpIGhlbHBlcnMgICAgICAgICAgICAgICAtLS0qLwogLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAt
MTgyLDYgKzMxMyw4IEBACiAKICAgIGRpID0gTUxfKGRpbmZvX3phbGxvYykoImRpLmRlYnVnaW5m
by5hREkuMSIsIHNpemVvZihEZWJ1Z0luZm8pKTsKICAgIGRpLT5oYW5kbGUgICAgICAgPSBoYW5k
bGVfY291bnRlcisrOworICAgZGktPmZpcnN0X2Vwb2NoICA9IERpRXBvY2hfSU5WQUxJRCgpOwor
ICAgZGktPmxhc3RfZXBvY2ggICA9IERpRXBvY2hfSU5WQUxJRCgpOwogICAgZGktPmZzbS5maWxl
bmFtZSA9IE1MXyhkaW5mb19zdHJkdXApKCJkaS5kZWJ1Z2luZm8uYURJLjIiLCBmaWxlbmFtZSk7
CiAgICBkaS0+ZnNtLm1hcHMgICAgID0gVkdfKG5ld1hBKSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICBNTF8oZGluZm9femFsbG9jKSwgImRpLmRlYnVnaW5mby5hREkuMyIsCkBAIC0zMDIsMTMg
KzQzNSwyMCBAQAogfQogCiAKLS8qICdzaScgaXMgYSBtZW1iZXIgb2YgZGVidWdJbmZvX2xpc3Qu
ICBGaW5kIGl0LCByZW1vdmUgaXQgZnJvbSB0aGUKLSAgIGxpc3QsIG5vdGlmeSBtX3JlZGlyIHRo
YXQgdGhpcyBoYXMgaGFwcGVuZWQsIGFuZCBmcmVlIGFsbCBzdG9yYWdlCi0gICByZWFjaGFibGUg
ZnJvbSBpdC4KKy8qICdkaScgaXMgYSBtZW1iZXIgb2YgZGVidWdJbmZvX2xpc3QuICBGaW5kIGl0
LCBhbmQgZWl0aGVyIChyZW1vdmUgaXQgZnJvbQorICAgdGhlIGxpc3QgYW5kIGZyZWUgYWxsIHN0
b3JhZ2UgcmVhY2hhYmxlIGZyb20gaXQpIG9yIGFyY2hpdmUgaXQsIG5vdGlmeQorICAgbV9yZWRp
ciB0aGF0IHRoaXMgaGFzIGhhcHBlbmVkLCBhbmQgZnJlZSBhbGwgc3RvcmFnZSByZWFjaGFibGUg
ZnJvbSBpdC4KKworICAgTm90ZSB0aGF0ICdkaScgY2FuJ3QgYmUgYXJjaGl2ZWQuICBJcyBhIERl
YnVnSW5mbyBpcyBhcmNoaXZlZCB0aGVuIHdlCisgICB3YW50IHRvIGhvbGQgb24gdG8gaXQgZm9y
ZXZlci4gIFRoaXMgaXMgYXNzZXJ0ZWQgZm9yLgorCisgICBOb3RlIGFsc28sIHdlIGRvbid0IGFk
dmFuY2UgdGhlIGN1cnJlbnQgZXBvY2ggaGVyZS4gIFRoYXQncyB0aGUKKyAgIHJlc3BvbnNpYmls
aXR5IG9mIHNvbWUgKG5vbi1pbW1lZGlhdGUpIGNhbGxlci4KICovCi1zdGF0aWMgdm9pZCBkaXNj
YXJkX0RlYnVnSW5mbyAoIERlYnVnSW5mbyogZGkgKQorc3RhdGljIHZvaWQgZGlzY2FyZF9vcl9h
cmNoaXZlX0RlYnVnSW5mbyAoIERlYnVnSW5mbyogZGkgKQogewotICAgY29uc3QgSENoYXIqIHJl
YXNvbiA9ICJtdW5tYXAiOworICAgY29uc3QgSENoYXIqIHJlYXNvbiAgPSAibXVubWFwIjsKKyAg
IGNvbnN0IEJvb2wgICBhcmNoaXZlID0gVkdfKGNsb19rZWVwX2RlYnVnaW5mbyk7CiAKICAgIERl
YnVnSW5mbyoqIHByZXZfbmV4dF9wdHIgPSAmZGVidWdJbmZvX2xpc3Q7CiAgICBEZWJ1Z0luZm8q
ICBjdXJyICAgICAgICAgID0gIGRlYnVnSW5mb19saXN0OwpAQCAtMzE1LDExICs0NTUsMTQgQEAK
IAogICAgd2hpbGUgKGN1cnIpIHsKICAgICAgIGlmIChjdXJyID09IGRpKSB7Ci0gICAgICAgICAv
KiBGb3VuZCBpdDsgIHJlbW92ZSBmcm9tIGxpc3QgYW5kIGZyZWUgaXQuICovCisgICAgICAgICAv
KiBJdCBtdXN0IGJlIGFjdGl2ZSEgKi8KKyAgICAgICAgIHZnX2Fzc2VydCggaXNfRGVidWdJbmZv
X2FjdGl2ZShkaSkpOworICAgICAgICAgLyogRm91bmQgaXQ7IChyZW1vdmUgZnJvbSBsaXN0IGFu
ZCBmcmVlIGl0KSwgb3IgYXJjaGl2ZSBpdC4gKi8KICAgICAgICAgIGlmIChjdXJyLT5oYXZlX2Rp
bmZvCiAgICAgICAgICAgICAgJiYgKFZHXyhjbG9fdmVyYm9zaXR5KSA+IDEgfHwgVkdfKGNsb190
cmFjZV9yZWRpcikpKQogICAgICAgICAgICAgVkdfKG1lc3NhZ2UpKFZnX0RlYnVnTXNnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAiRGlzY2FyZGluZyBzeW1zIGF0ICUjbHgtJSNseCBpbiAl
cyBkdWUgdG8gJXMoKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgc3ltcyBhdCAl
I2x4LSUjbHggaW4gJXMgZHVlIHRvICVzKClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
YXJjaGl2ZSA/ICJBcmNoaXZpbmciIDogIkRpc2NhcmRpbmciLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpLT50ZXh0X2F2bWEsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRpLT50ZXh0
X2F2bWEgKyBkaS0+dGV4dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnItPmZz
bS5maWxlbmFtZSA/IGN1cnItPmZzbS5maWxlbmFtZQpAQCAtMzI2LDEwICs0NjksMTggQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPz8/IiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWFzb24pOwogICAgICAgICAgdmdfYXNzZXJ0KCpwcmV2X25l
eHRfcHRyID09IGN1cnIpOwotICAgICAgICAgKnByZXZfbmV4dF9wdHIgPSBjdXJyLT5uZXh0Owot
ICAgICAgICAgaWYgKGN1cnItPmhhdmVfZGluZm8pCisgICAgICAgICBpZiAoIWFyY2hpdmUpIHsK
KyAgICAgICAgICAgICpwcmV2X25leHRfcHRyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgIH0KKyAg
ICAgICAgIGlmIChjdXJyLT5oYXZlX2RpbmZvKSB7CiAgICAgICAgICAgICBWR18ocmVkaXJfbm90
aWZ5X2RlbGV0ZV9EZWJ1Z0luZm8pKCBjdXJyICk7Ci0gICAgICAgICBmcmVlX0RlYnVnSW5mbyhj
dXJyKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChhcmNoaXZlKSB7CisgICAgICAgICAgICAv
KiBBZGp1c3QgdGhlIGVwb2NoIG1hcmtlcnMgYXBwcm9wcmlhdGVseS4gKi8KKyAgICAgICAgICAg
IGRpLT5sYXN0X2Vwb2NoID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKyAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBmcmVlX0RlYnVnSW5mbyhjdXJyKTsKKyAgICAgICAgIH0KICAgICAg
ICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIHByZXZfbmV4dF9wdHIgPSAmY3Vyci0+bmV4dDsK
QEAgLTM1OCwxMCArNTA5LDExIEBACiAgICAgICB3aGlsZSAoVHJ1ZSkgewogICAgICAgICAgaWYg
KGN1cnIgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgaWYgKGN1cnItPnRl
eHRfcHJlc2VudAotICAgICAgICAgICAgICYmIGN1cnItPnRleHRfc2l6ZSA+IDAKLSAgICAgICAg
ICAgICAmJiAoc3RhcnQrbGVuZ3RoIC0gMSA8IGN1cnItPnRleHRfYXZtYSAKLSAgICAgICAgICAg
ICAgICAgfHwgY3Vyci0+dGV4dF9hdm1hICsgY3Vyci0+dGV4dF9zaXplIC0gMSA8IHN0YXJ0KSkg
eworICAgICAgICAgaWYgKGlzX0RlYnVnSW5mb19hcmNoaXZlZChjdXJyKQorICAgICAgICAgICAg
IHx8IChjdXJyLT50ZXh0X3ByZXNlbnQKKyAgICAgICAgICAgICAgICAgJiYgY3Vyci0+dGV4dF9z
aXplID4gMAorICAgICAgICAgICAgICAgICAmJiAoc3RhcnQrbGVuZ3RoIC0gMSA8IGN1cnItPnRl
eHRfYXZtYSAKKyAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnItPnRleHRfYXZtYSArIGN1cnIt
PnRleHRfc2l6ZSAtIDEgPCBzdGFydCkpKSB7CiAgICAgICAgICAgICAvKiBubyBvdmVybGFwICov
CiAJIH0gZWxzZSB7CiAJICAgIGZvdW5kID0gVHJ1ZTsKQEAgLTM3Miw3ICs1MjQsNyBAQAogCiAg
ICAgICBpZiAoIWZvdW5kKSBicmVhazsKICAgICAgIGFueUZvdW5kID0gVHJ1ZTsKLSAgICAgIGRp
c2NhcmRfRGVidWdJbmZvKCBjdXJyICk7CisgICAgICBkaXNjYXJkX29yX2FyY2hpdmVfRGVidWdJ
bmZvKCBjdXJyICk7CiAgICB9CiAKICAgIHJldHVybiBhbnlGb3VuZDsKQEAgLTQxOCw5ICs1NzAs
OSBAQAogfQogCiAKLS8qIERpc2NhcmQgYWxsIGVsZW1lbnRzIG9mIGRlYnVnSW5mb19saXN0IHdo
b3NlIC5tYXJrIGJpdCBpcyBzZXQuCisvKiBEaXNjYXJkIG9yIGFyY2hpdmUgYWxsIGVsZW1lbnRz
IG9mIGRlYnVnSW5mb19saXN0IHdob3NlIC5tYXJrIGJpdCBpcyBzZXQuCiAqLwotc3RhdGljIHZv
aWQgZGlzY2FyZF9tYXJrZWRfRGVidWdJbmZvcyAoIHZvaWQgKQorc3RhdGljIHZvaWQgZGlzY2Fy
ZF9vcl9hcmNoaXZlX21hcmtlZF9EZWJ1Z0luZm9zICggdm9pZCApCiB7CiAgICBEZWJ1Z0luZm8q
IGN1cnI7CiAKQEAgLTQzNiw3ICs1ODgsNyBAQAogICAgICAgfQogCiAgICAgICBpZiAoIWN1cnIp
IGJyZWFrOwotICAgICAgZGlzY2FyZF9EZWJ1Z0luZm8oIGN1cnIgKTsKKyAgICAgIGRpc2NhcmRf
b3JfYXJjaGl2ZV9EZWJ1Z0luZm8oIGN1cnIgKTsKIAogICAgfQogfQpAQCAtNDQ2LDYgKzU5OCw3
IEBACiAgICBDbGVhcmx5IGRpUmVmIG11c3QgaGF2ZSBpdHMgbWFwcGluZyBpbmZvcm1hdGlvbiBz
ZXQgdG8gc29tZXRoaW5nIHNhbmUuICovCiBzdGF0aWMgdm9pZCBkaXNjYXJkX0RlYnVnSW5mb3Nf
d2hpY2hfb3ZlcmxhcF93aXRoICggRGVidWdJbmZvKiBkaVJlZiApCiB7CisgICB2Z19hc3NlcnQo
aXNfRGVidWdJbmZvX2FsbG9jYXRlZChkaVJlZikpOwogICAgRGVidWdJbmZvKiBkaTsKICAgIC8q
IE1hcmsgYWxsIHRoZSBEZWJ1Z0luZm9zIGluIGRlYnVnSW5mb19saXN0IHRoYXQgbmVlZCB0byBi
ZQogICAgICAgZGVsZXRlZC4gIEZpcnN0LCBjbGVhciBhbGwgdGhlIG1hcmsgYml0czsgdGhlbiBz
ZXQgdGhlbSBpZiB0aGV5CkBAIC00NTIsNiArNjA1LDggQEAKICAgICAgIG92ZXJsYXAgd2l0aCBz
aVJlZi4gIFNpbmNlIHNpUmVmIGl0c2VsZiBpcyBpbiB0aGlzIGxpc3Qgd2UgYXQKICAgICAgIGxl
YXN0IGV4cGVjdCBpdHMgb3duIG1hcmsgYml0IHRvIGJlIHNldC4gKi8KICAgIGZvciAoZGkgPSBk
ZWJ1Z0luZm9fbGlzdDsgZGk7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlmIChpc19EZWJ1Z0lu
Zm9fYXJjaGl2ZWQoZGkpKQorICAgICAgICAgY29udGludWU7CiAgICAgICBkaS0+bWFyayA9IGRv
X0RlYnVnSW5mb3Nfb3ZlcmxhcCggZGksIGRpUmVmICk7CiAgICAgICBpZiAoZGkgPT0gZGlSZWYp
IHsKICAgICAgICAgIHZnX2Fzc2VydChkaS0+bWFyayk7CkBAIC00NTgsNyArNjEzLDcgQEAKICAg
ICAgICAgIGRpLT5tYXJrID0gRmFsc2U7CiAgICAgICB9CiAgICB9Ci0gICBkaXNjYXJkX21hcmtl
ZF9EZWJ1Z0luZm9zKCk7CisgICBkaXNjYXJkX29yX2FyY2hpdmVfbWFya2VkX0RlYnVnSW5mb3Mo
KTsKIH0KIAogCkBAIC00NzAsNiArNjI1LDggQEAKICAgIERlYnVnSW5mbyogZGk7CiAgICB2Z19h
c3NlcnQoZmlsZW5hbWUpOwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaTsgZGkgPSBk
aS0+bmV4dCkgeworICAgICAgaWYgKGlzX0RlYnVnSW5mb19hcmNoaXZlZChkaSkpCisgICAgICAg
ICBjb250aW51ZTsKICAgICAgIHZnX2Fzc2VydChkaS0+ZnNtLmZpbGVuYW1lKTsKICAgICAgIGlm
ICgwPT1WR18oc3RyY21wKShkaS0+ZnNtLmZpbGVuYW1lLCBmaWxlbmFtZSkpCiAgICAgICAgICBi
cmVhazsKQEAgLTQ4MCw2ICs2MzcsNyBAQAogICAgICAgZGktPm5leHQgPSBkZWJ1Z0luZm9fbGlz
dDsKICAgICAgIGRlYnVnSW5mb19saXN0ID0gZGk7CiAgICB9CisgICB2Z19hc3NlcnQoIWlzX0Rl
YnVnSW5mb19hcmNoaXZlZChkaSkpOwogICAgcmV0dXJuIGRpOwogfQogCkBAIC03MjMsNiArODgx
LDggQEAKICAgIFVMb25nIGRpX2hhbmRsZTsKICAgIEJvb2wgIG9rOwogCisgICBhZHZhbmNlX2N1
cnJlbnRfRGlFcG9jaCgiZGlfbm90aWZ5X0FDSElFVkVfQUNDRVBUX1NUQVRFIik7CisKICAgIHZn
X2Fzc2VydChkaS0+ZnNtLmZpbGVuYW1lKTsKICAgIFRSQUNFX1NZTVRBQigiXG4iKTsKICAgIFRS
QUNFX1NZTVRBQigiLS0tLS0tIHN0YXJ0IEVMRiBPQkpFQ1QgIgpAQCAtNzM0LDcgKzg5NCw4IEBA
CiAgICAvKiBXZSdyZSBnb2luZyB0byByZWFkIHN5bWJvbHMgYW5kIGRlYnVnIGluZm8gZm9yIHRo
ZSBhdm1hCiAgICAgICByYW5nZXMgc3BlY2lmaWVkIGluIHRoZSBfRGVidWdJbmZvRnNtIG1hcHBp
bmcgYXJyYXkuIEZpcnN0CiAgICAgICBnZXQgcmlkIG9mIGFueSBvdGhlciBEZWJ1Z0luZm9zIHdo
aWNoIG92ZXJsYXAgYW55IG9mIHRob3NlCi0gICAgICByYW5nZXMgKHRvIGF2b2lkIHRvdGFsIGNv
bmZ1c2lvbikuICovCisgICAgICByYW5nZXMgKHRvIGF2b2lkIHRvdGFsIGNvbmZ1c2lvbikuICBC
dXQgb25seSB0aG9zZSB2YWxpZCBpbgorICAgICB0aGUgY3VycmVudCBlcG9jaC4gIFdlIGRvbid0
IHdhbnQgdG8gZGlzY2FyZCBhcmNoaXZlZCBEZWJ1Z0luZm9zLiAqLwogICAgZGlzY2FyZF9EZWJ1
Z0luZm9zX3doaWNoX292ZXJsYXBfd2l0aCggZGkgKTsKIAogICAgLyogVGhlIERlYnVnSW5mb01h
cHBpbmdzIHRoYXQgbm93IGV4aXN0IGluIHRoZSBGU00gbWF5IGludm9sdmUKQEAgLTc2NSw2ICs5
MjYsMTUgQEAKICAgICAgICAgIHByaXZfc3RvcmFnZS5oLiAqLwogICAgICAgY2hlY2tfQ0ZTSV9y
ZWxhdGVkX2ludmFyaWFudHMoZGkpOwogICAgICAgTUxfKGZpbmlzaF9DRlNJX2FycmF5cykoZGkp
OworCisgICAgICAvLyBNYXJrIGRpJ3MgZmlyc3QgZXBvY2ggcG9pbnQgYXMgYSB2YWxpZCBlcG9j
aC4gIEJlY2F1c2UgaXRzCisgICAgICAvLyBsYXN0X2Vwb2NoIHZhbHVlIGlzIHN0aWxsIGludmFs
aWQsIHRoaXMgY2hhbmdlcyBkaSdzIHN0YXRlIGZyb20KKyAgICAgIC8vICJhbGxvY2F0ZWQiIHRv
ICJhY3RpdmUiLgorICAgICAgdmdfYXNzZXJ0KGlzX0RlYnVnSW5mb19hbGxvY2F0ZWQoZGkpKTsK
KyAgICAgIGRpLT5maXJzdF9lcG9jaCA9IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CisgICAgICB2
Z19hc3NlcnQoaXNfRGVidWdJbmZvX2FjdGl2ZShkaSkpOworICAgICAgc2hvd19lcG9jaHMoImRp
X25vdGlmeV9BQ0hJRVZFX0FDQ0VQVF9TVEFURSBzdWNjZXNzIik7CisKICAgICAgIC8qIG5vdGlm
eSBtX3JlZGlyIGFib3V0IGl0ICovCiAgICAgICBUUkFDRV9TWU1UQUIoIlxuLS0tLS0tIE5vdGlm
eWluZyBtX3JlZGlyIC0tLS0tLVxuIik7CiAgICAgICBWR18ocmVkaXJfbm90aWZ5X25ld19EZWJ1
Z0luZm8pKCBkaSApOwpAQCAtMTA3Nyw4ICsxMjQ3LDExIEBACiAgICBCb29sIGFueUZvdW5kOwog
ICAgaWYgKDApIFZHXyhwcmludGYpKCJESVNDQVJEICUjbHggJSNseFxuIiwgYSwgYStsZW4pOwog
ICAgYW55Rm91bmQgPSBkaXNjYXJkX3N5bXNfaW5fcmFuZ2UoYSwgbGVuKTsKLSAgIGlmIChhbnlG
b3VuZCkKKyAgIGlmIChhbnlGb3VuZCkgewogICAgICAgY2FjaGVzX19pbnZhbGlkYXRlKCk7Cisg
ICAgICBhZHZhbmNlX2N1cnJlbnRfRGlFcG9jaCgiVkdfKGRpX25vdGlmeV9tdW5tYXApIik7Cisg
ICAgICBzaG93X2Vwb2NocygiVkdfKGRpX25vdGlmeV9tdW5tYXApIik7CisgICB9CiB9CiAKIApA
QCAtMTA5NCw4ICsxMjY3LDEwIEBACiAjICBlbmRpZgogICAgaWYgKDAgJiYgIWV4ZV9vaykgewog
ICAgICAgQm9vbCBhbnlGb3VuZCA9IGRpc2NhcmRfc3ltc19pbl9yYW5nZShhLCBsZW4pOwotICAg
ICAgaWYgKGFueUZvdW5kKQorICAgICAgaWYgKGFueUZvdW5kKSB7CiAgICAgICAgICBjYWNoZXNf
X2ludmFsaWRhdGUoKTsKKyAgICAgICAgIGFkdmFuY2VfY3VycmVudF9EaUVwb2NoKCJWR18oZGlf
bm90aWZ5X21wcm90ZWN0KSIpOworICAgICAgfQogICAgfQogfQogCkBAIC0xMzk1LDYgKzE1NzAs
NyBAQAogICAgY2FjaGVzX19pbnZhbGlkYXRlKCk7CiAgICAvKiBkdW1wIG9sZCBpbmZvIGZvciB0
aGlzIHJhbmdlLCBpZiBhbnkgKi8KICAgIGRpc2NhcmRfc3ltc19pbl9yYW5nZSggYXZtYV9vYmos
IHRvdGFsX3NpemUgKTsKKyAgIGFkdmFuY2VfY3VycmVudF9EaUVwb2NoKCJWR18oZGlfbm90aWZ5
X3BkYl9kZWJ1Z2luZm8pIik7CiAKICAgIHsgRGVidWdJbmZvKiBkaSA9IGZpbmRfb3JfY3JlYXRl
X0RlYnVnSW5mb19mb3IoZXhlbmFtZSk7CiAKQEAgLTE0NzEsNiArMTY0Nyw3IEBACiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAvKi0tLSBUeXBlcyBhbmQgZnVuY3Rpb25zIGZvciBpbmxpbmVkIElQIGN1cnNvciAgICAgICAg
ICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKIHN0cnVjdCBfSW5sSVBDdXJzb3IgewogICAgQWRkciBlaXA7
ICAgICAgICAgICAgIC8vIEN1cnNvciB1c2VkIHRvIGRlc2NyaWJlIGNhbGxzIGF0IGVpcC4KICAg
IERlYnVnSW5mbyogZGk7ICAgICAgICAvLyBEZWJ1Z0luZm8gZGVzY3JpYmluZyBpbmxpbmVkIGNh
bGxzIGF0IGVpcApAQCAtMTUzNCw4ICsxNzExLDggQEAKIH0KIAogLyogRm9yd2FyZCAqLwotc3Rh
dGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8q
KiBwZGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQq
L1dvcmQqIGxvY25vICk7CitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBEaUVwb2No
IGVwLCBBZGRyIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9E
ZWJ1Z0luZm8qKiBwZGksIC8qT1VUKi9Xb3JkKiBsb2NubyApOwogCiAvKiBSZXR1cm5zIHRoZSBw
b3NpdGlvbiBhZnRlciB3aGljaCBlaXAgd291bGQgYmUgaW5zZXJ0ZWQgaW4gaW5sdGFiLgogICAg
KC0xIGlmIGVpcCBzaG91bGQgYmUgaW5zZXJ0ZWQgYmVmb3JlIHBvc2l0aW9uIDApLgpAQCAtMTU2
NSw3ICsxNzQyLDcgQEAKICAgIHJldHVybiBsbyAtIDE7CiB9CiAKLUlubElQQ3Vyc29yKiBWR18o
bmV3X0lJUEMpKEFkZHIgZWlwKQorSW5sSVBDdXJzb3IqIFZHXyhuZXdfSUlQQykoRGlFcG9jaCBl
cCwgQWRkciBlaXApCiB7CiAgICBEZWJ1Z0luZm8qICBkaTsKICAgIFdvcmQgICAgICAgIGxvY25v
OwpAQCAtMTU3Niw4ICsxNzUzLDggQEAKICAgIGlmICghVkdfKGNsb19yZWFkX2lubGluZV9pbmZv
KSkKICAgICAgIHJldHVybiBOVUxMOyAvLyBObyB3YXkgd2UgY2FuIGZpbmQgaW5saW5lZCBjYWxs
cy4KIAotICAgLyogU2VhcmNoIHRoZSBEZWJ1Z0luZm8gZm9yIGVpcCAqLwotICAgc2VhcmNoX2Fs
bF9sb2N0YWJzICggZWlwLCAmZGksICZsb2NubyApOworICAgLyogU2VhcmNoIHRoZSBEZWJ1Z0lu
Zm8gZm9yIChlcCwgZWlwKSAqLworICAgc2VhcmNoX2FsbF9sb2N0YWJzICggZXAsIGVpcCwgJmRp
LCAmbG9jbm8gKTsKICAgIGlmIChkaSA9PSBOVUxMIHx8IGRpLT5pbmx0YWJfdXNlZCA9PSAwKQog
ICAgICAgcmV0dXJuIE5VTEw7IC8vIE5vIGRpICh3aXRoIGlubHRhYikgY29udGFpbmluZyBlaXAu
CiAKQEAgLTE2NDEsOCArMTgxOCw4IEBACiAgICBJZiBmaW5kVGV4dD09VHJ1ZSwgIG9ubHkgdGV4
dCBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IuCiAgICBJZiBmaW5kVGV4dD09RmFsc2UsIG9ubHkg
ZGF0YSBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IuCiAqLwotc3RhdGljIHZvaWQgc2VhcmNoX2Fs
bF9zeW10YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIHN5bW5vLAorc3Rh
dGljIHZvaWQgc2VhcmNoX2FsbF9zeW10YWJzICggRGlFcG9jaCBlcCwgQWRkciBwdHIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovRGVidWdJbmZvKiogcGRpLCAvKk9V
VCovV29yZCogc3ltbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGZp
bmRUZXh0ICkKIHsKICAgIFdvcmQgICAgICAgc25vOwpAQCAtMTY1MSw2ICsxODI4LDkgQEAKIAog
ICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7
CiAKKyAgICAgIGlmICghaXNfRElfdmFsaWRfZm9yX2Vwb2NoKGRpLCBlcCkpCisgICAgICAgICBj
b250aW51ZTsKKwogICAgICAgaWYgKGZpbmRUZXh0KSB7CiAgICAgICAgICAvKiBDb25zaWRlciBh
bnkgc3ltYm9sIGluIHRoZSByLXggbWFwcGVkIGFyZWEgdG8gYmUgdGV4dC4KICAgICAgICAgICAg
IFNlZSBDb21tZW50X1JlZ2FyZGluZ19UZXh0X1JhbmdlX0NoZWNrcyBpbiBzdG9yYWdlLmMgZm9y
CkBAIC0xNjk4LDE1ICsxODc4LDE3IEBACiB9CiAKIAotLyogU2VhcmNoIGFsbCBsb2N0YWJzIHRo
YXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAotICAgKnBkaSB0
byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRoZSBsb2N0YWIgZW50cnkK
Ky8qIFNlYXJjaCBhbGwgbG9jdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ciBh
dCBlcG9jaCBlcC4gIElmCisgICAqZm91bmQsIHNldCBwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVn
SW5mbywgYW5kICpsb2NubyB0byB0aGUgbG9jdGFiIGVudHJ5CiAgICAqbnVtYmVyIHdpdGhpbiB0
aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLiAqLwotc3RhdGljIHZvaWQg
c2VhcmNoX2FsbF9sb2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxv
Y25vICkKK3N0YXRpYyB2b2lkIHNlYXJjaF9hbGxfbG9jdGFicyAoIERpRXBvY2ggZXAsIEFkZHIg
cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0RlYnVnSW5mbyoq
IHBkaSwgLypPVVQqL1dvcmQqIGxvY25vICkKIHsKICAgIFdvcmQgICAgICAgbG5vOwogICAgRGVi
dWdJbmZvKiBkaTsKICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkg
PSBkaS0+bmV4dCkgeworICAgICAgaWYgKCFpc19ESV92YWxpZF9mb3JfZXBvY2goZGksIGVwKSkK
KyAgICAgICAgIGNvbnRpbnVlOwogICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQKICAgICAgICAg
ICAmJiBkaS0+dGV4dF9zaXplID4gMAogICAgICAgICAgICYmIGRpLT50ZXh0X2F2bWEgPD0gcHRy
IApAQCAtMTcyOSwxOSArMTkxMSwyMiBAQAogCiB0eXBlZGVmCiAgICBzdHJ1Y3QgewotICAgICAg
QWRkciBzeW1fYXZtYTsKKyAgICAgIC8vIChzeW1fZXBvY2gsIHN5bV9hdm1hKSBhcmUgdGhlIGhh
c2ggdGFibGUga2V5LgorICAgICAgRGlFcG9jaCBzeW1fZXBvY2g7CisgICAgICBBZGRyICAgIHN5
bV9hdm1hOworICAgICAgLy8gRmllbGRzIGJlbG93IGhlcmUgYXJlIG5vdCBwYXJ0IG9mIHRoZSBr
ZXkuCiAgICAgICBjb25zdCBIQ2hhciogc3ltX25hbWU7CiAgICAgICBQdHJkaWZmVCBvZmZzZXQg
OiAoc2l6ZW9mKFB0cmRpZmZUKSo4KS0xOyAKICAgICAgIEJvb2wgaXNUZXh0IDogMTsKICAgIH0K
ICAgIFN5bV9OYW1lX0NhY2hlRW50OwotLyogU3ltX05hbWVfQ2FjaGVFbnQgYXNzb2NpYXRlcyBh
IHF1ZXJpZWQgYWRkcmVzcyB0byB0aGUgc3ltIG5hbWUgZm91bmQuCi0gICBCeSBuYXR1cmUsIGlm
IGEgc3ltIG5hbWUgd2FzIGZvdW5kLCBpdCBtZWFucyB0aGUgc2VhcmNoZWQgYWRkcmVzcwotICAg
c3RvcmVkIGluIHRoZSBjYWNoZSBpcyBhbiBhdm1hIChzZWUgZS5nLiBzZWFyY2hfYWxsX3N5bXRh
YnMpLgotICAgTm90ZSBob3dldmVyIHRoYXQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJlIHRvIHdv
cmsgd2l0aCAnYXZtYScKLSAgIGFkZHJlc3NlcyBlLmcuIHdoZW4gY2FsbGluZyBWR18oZ2V0X2Zu
bmFtZSkgOiBtX2RlYnVnaW5mby5jIGhhcwotICAgbm8gd2F5IHRvIGRpZmZlcmVudGlhdGUgYW4g
J3N2bWEgYScgZnJvbSBhbiAnYXZtYSBhJy4gSXQgaXMgaG93ZXZlcgotICAgdW5saWtlbHkgdGhh
dCBzdm1hIHdvdWxkIHBlcmNvbGF0ZSBvdXRzaWRlIG9mIHRoaXMgbW9kdWxlLiAqLworLyogU3lt
X05hbWVfQ2FjaGVFbnQgYXNzb2NpYXRlcyBhIHF1ZXJpZWQgKGVwb2NoLCBhZGRyZXNzKSBwYWly
IHRvIHRoZSBzeW0KKyAgIG5hbWUgZm91bmQuICBCeSBuYXR1cmUsIGlmIGEgc3ltIG5hbWUgd2Fz
IGZvdW5kLCBpdCBtZWFucyB0aGUgc2VhcmNoZWQKKyAgIGFkZHJlc3Mgc3RvcmVkIGluIHRoZSBj
YWNoZSBpcyBhbiBhdm1hIChzZWUgZS5nLiBzZWFyY2hfYWxsX3N5bXRhYnMpLgorICAgTm90ZSBo
b3dldmVyIHRoYXQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJlIHRvIHdvcmsgd2l0aCAnYXZtYScg
YWRkcmVzc2VzCisgICBlLmcuIHdoZW4gY2FsbGluZyBWR18oZ2V0X2ZubmFtZSkgOiBtX2RlYnVn
aW5mby5jIGhhcyBubyB3YXkgdG8KKyAgIGRpZmZlcmVudGlhdGUgYW4gJ3N2bWEgYScgZnJvbSBh
biAnYXZtYSBhJy4gSXQgaXMgaG93ZXZlciB1bmxpa2VseSB0aGF0CisgICBzdm1hIHdvdWxkIHBl
cmNvbGF0ZSBvdXRzaWRlIG9mIHRoaXMgbW9kdWxlLiAqLwogCiBzdGF0aWMgU3ltX05hbWVfQ2Fj
aGVFbnQgc3ltX25hbWVfY2FjaGVbTl9TWU1fTkFNRV9DQUNIRV07CiAKQEAgLTE3NTcsMTMgKzE5
NDIsMTUgQEAKICAgIHN5bV9uYW1lX2NhY2hlWzBdLnN5bV9uYW1lID0gbm9fc3ltX25hbWU7CiB9
CiAKLS8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGlzIHdob2xlIGJpZyBkZWFsOiBtYXAgYSBjb2Rl
IGFkZHJlc3MgdG8gYQotICAgcGxhdXNpYmxlIHN5bWJvbCBuYW1lLiAgUmV0dXJucyBGYWxzZSBp
ZiBubyBpZGVhOyBvdGhlcndpc2UgVHJ1ZS4KKy8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGlzIHdo
b2xlIGJpZyBkZWFsOiBtYXAgYW4gKGVwb2NoLCBjb2RlIGFkZHJlc3MpIHBhaXIKKyAgIHRvIGEg
cGxhdXNpYmxlIHN5bWJvbCBuYW1lLiAgUmV0dXJucyBGYWxzZSBpZiBubyBpZGVhOyBvdGhlcndp
c2UgVHJ1ZS4KKwogICAgQ2FsbGVyIHN1cHBsaWVzIGJ1Zi4gIElmIGRvX2N4eF9kZW1hbmdsaW5n
IGlzIEZhbHNlLCBkb24ndCBkbwogICAgQysrIGRlbWFuZ2xpbmcsIHJlZ2FyZGxlc3Mgb2YgVkdf
KGNsb19kZW1hbmdsZSkgLS0gcHJvYmFibHkgYmVjYXVzZSB0aGUKICAgIGNhbGwgaGFzIGNvbWUg
ZnJvbSBWR18oZ2V0X2ZubmFtZV9yYXcpKCkuICBmaW5kVGV4dAogICAgaW5kaWNhdGVzIHdoZXRo
ZXIgd2UncmUgbG9va2luZyBmb3IgYSB0ZXh0IHN5bWJvbCBvciBhIGRhdGEgc3ltYm9sCiAgICAt
LSBjYWxsZXIgbXVzdCBjaG9vc2Ugb25lIGtpbmQgb3IgdGhlIG90aGVyLgorCiAgICBOT1RFOiBT
ZWUgSU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hp
cAogICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggCiAgICBnZXRfc3ltX25hbWUgYW5kIHRoZSBm
YWN0IGl0IGNhbGxzIHRoZSBkZW1hbmdsZXIgaXMgdGhlIG1haW4gcmVhc29uCkBAIC0xNzcyLDIy
ICsxOTU5LDMyIEBACiAgICAoMSkgdGhlIERlYnVnSW5mbyBpdCBiZWxvbmdzIHRvIGlzIG5vdCBk
aXNjYXJkZWQKICAgICgyKSB0aGUgZGVtYW5nbGVyIGlzIG5vdCBpbnZva2VkIGFnYWluCiAgICBB
bHNvLCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIG93bmVkIGJ5ICJzb21lYm9keSBlbHNlIi4gQ2Fs
bGVycyBtdXN0Ci0gICBub3QgZnJlZSBpdCBvciBtb2RpZnkgaXQuKi8KKyAgIG5vdCBmcmVlIGl0
IG9yIG1vZGlmeSBpdC4gKi8KIHN0YXRpYwogQm9vbCBnZXRfc3ltX25hbWUgKCBCb29sIGRvX2N4
eF9kZW1hbmdsaW5nLCBCb29sIGRvX3pfZGVtYW5nbGluZywKICAgICAgICAgICAgICAgICAgICAg
Qm9vbCBkb19iZWxvd19tYWluX3JlbmFtaW5nLAotICAgICAgICAgICAgICAgICAgICBBZGRyIGEs
IGNvbnN0IEhDaGFyKiogYnVmLAorICAgICAgICAgICAgICAgICAgICBEaUVwb2NoIGVwLCBBZGRy
IGEsIGNvbnN0IEhDaGFyKiogYnVmLAogICAgICAgICAgICAgICAgICAgICBCb29sIG1hdGNoX2Fu
eXdoZXJlX2luX3N5bSwgQm9vbCBzaG93X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgQm9v
bCBmaW5kVGV4dCwgLypPVVQqL1B0cmRpZmZUKiBvZmZzZXRQICkKIHsKLSAgIFVXb3JkICAgICAg
ICAgaGFzaCA9IGEgJSBOX1NZTV9OQU1FX0NBQ0hFOwotICAgU3ltX05hbWVfQ2FjaGVFbnQqIHNl
ID0gICZzeW1fbmFtZV9jYWNoZVtoYXNoXTsKKyAgIC8vIENvbXB1dGUgdGhlIGhhc2ggZnJvbSAn
ZXAnIGFuZCAnYScuICBUaGUgbGF0dGVyIGNvbnRhaW5zIGxvdHMgb2YKKyAgIC8vIHNpZ25pZmlj
YW50IGJpdHMsIGJ1dCAnZXAnIGlzIGV4cGVjdGVkIHRvIGJlIGEgc21hbGwgbnVtYmVyLCB0eXBp
Y2FsbHkKKyAgIC8vIGxlc3MgdGhhbiA1MDAuICBTbyByb3RhdGUgaXQgYXJvdW5kIGEgYml0IGlu
IHRoZSBob3BlIG9mIHNwcmVhZGluZyB0aGUKKyAgIC8vIGJpdHMgb3V0IHNvbWV3aGF0LgorICAg
dmdfYXNzZXJ0KCFpc19EaUVwb2NoX0lOVkFMSUQoZXApKTsKKyAgIFVXb3JkIGhhc2ggPSBhIF4g
KFVXb3JkKShlcC5uIF4gUk9MMzIoZXAubiwgNSkgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBeIFJPTDMyKGVwLm4sIDEzKSBeIFJPTDMyKGVwLm4sIDE5KSk7CisgICBoYXNoICU9
IE5fU1lNX05BTUVfQ0FDSEU7CiAKLSAgIGlmIChVTkxJS0VMWShzZS0+c3ltX2F2bWEgIT0gYSB8
fCBzZS0+aXNUZXh0ICE9IGZpbmRUZXh0KSkgeworICAgU3ltX05hbWVfQ2FjaGVFbnQqIHNlID0g
JnN5bV9uYW1lX2NhY2hlW2hhc2hdOworCisgICBpZiAoVU5MSUtFTFkoc2UtPnN5bV9lcG9jaC5u
ICE9IGVwLm4gfHwgc2UtPnN5bV9hdm1hICE9IGEKKyAgICAgICAgICAgICAgICB8fCBzZS0+aXNU
ZXh0ICE9IGZpbmRUZXh0KSkgewogICAgICAgRGVidWdJbmZvKiBkaTsKICAgICAgIFdvcmQgICAg
ICAgc25vOwogCi0gICAgICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBhLCAmZGksICZzbm8sIGZpbmRU
ZXh0ICk7CisgICAgICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBlcCwgYSwgJmRpLCAmc25vLCBmaW5k
VGV4dCApOworICAgICAgc2UtPnN5bV9lcG9jaCA9IGVwOwogICAgICAgc2UtPnN5bV9hdm1hID0g
YTsKICAgICAgIHNlLT5pc1RleHQgPSBmaW5kVGV4dDsKICAgICAgIGlmIChkaSA9PSBOVUxMIHx8
IGEgPT0gMCkKQEAgLTE4NDYsMTIgKzIwNDMsMTIgQEAKIC8qIHBwYzY0YmUtbGludXggb25seTog
ZmluZCB0aGUgVE9DIHBvaW50ZXIgKFIyIHZhbHVlKSB0aGF0IHNob3VsZCBiZSBpbgogICAgZm9y
Y2UgYXQgdGhlIGVudHJ5IHBvaW50IGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIGNvbnRhaW5pbmcK
ICAgIGd1ZXN0X2NvZGVfYWRkci4gIFJldHVybnMgMCBpZiBub3Qga25vd24uICovCi1BZGRyIFZH
XyhnZXRfdG9jcHRyKSAoIEFkZHIgZ3Vlc3RfY29kZV9hZGRyICkKK0FkZHIgVkdfKGdldF90b2Nw
dHIpICggRGlFcG9jaCBlcCwgQWRkciBndWVzdF9jb2RlX2FkZHIgKQogewogI2lmIGRlZmluZWQo
VkdBX3BwYzY0YmUpIHx8IGRlZmluZWQoVkdBX3BwYzY0bGUpCiAgICBEZWJ1Z0luZm8qIHNpOwog
ICAgV29yZCAgICAgICBzbm87Ci0gICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBndWVzdF9jb2RlX2Fk
ZHIsIAorICAgc2VhcmNoX2FsbF9zeW10YWJzICggZXAsIGd1ZXN0X2NvZGVfYWRkciwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmc2ksICZzbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBU
cnVlLypjb25zaWRlciB0ZXh0IHN5bWJvbHMgb25seSovICk7CiAgICBpZiAoc2kgPT0gTlVMTCkg
CkBAIC0xODY3LDExICsyMDY0LDExIEBACiAgICBtYXRjaCBhbnl3aGVyZSBpbiBmdW5jdGlvbiwg
YnV0IGRvbid0IHNob3cgb2Zmc2V0cy4KICAgIE5PVEU6IFNlZSBJTVBPUlRBTlQgQ09NTUVOVCBh
Ym92ZSBhYm91dCBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwCiAgICBpbiBwdWJfdG9vbF9kZWJ1
Z2luZm8uaCAqLwotQm9vbCBWR18oZ2V0X2ZubmFtZSkgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiog
YnVmICkKK0Jvb2wgVkdfKGdldF9mbm5hbWUpICggRGlFcG9jaCBlcCwgQWRkciBhLCBjb25zdCBI
Q2hhcioqIGJ1ZiApCiB7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUq
L1RydWUsIC8qWi1kZW1hbmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJl
bG93LW1haW4tcmVuYW1pbmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwgYnVm
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGVwLCBhLCBidWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4qL1RydWUsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKnRleHQgc3ltKi9UcnVlLApAQCAtMTg4MiwxMSArMjA3OSwxMSBAQAogICAgbWF0Y2ggYW55
d2hlcmUgaW4gZnVuY3Rpb24sIGFuZCBzaG93IG9mZnNldCBpZiBub256ZXJvLgogICAgTk9URTog
U2VlIElNUE9SVEFOVCBDT01NRU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBvd25lcnNo
aXAKICAgIGluIHB1Yl90b29sX2RlYnVnaW5mby5oICovCi1Cb29sIFZHXyhnZXRfZm5uYW1lX3df
b2Zmc2V0KSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQorQm9vbCBWR18oZ2V0X2ZubmFt
ZV93X29mZnNldCkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVmICkKIHsK
ICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwgLypaLWRlbWFu
Z2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWlu
ZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZXAsIGEsIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNo
X2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93
IG9mZnNldD8qL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bSovVHJ1
ZSwKQEAgLTE4OTgsNyArMjA5NSw3IEBACiAgICBhbmQgZG9uJ3Qgc2hvdyBvZmZzZXRzLgogICAg
Tk9URTogU2VlIElNUE9SVEFOVCBDT01NRU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBv
d25lcnNoaXAKICAgIGluIHB1Yl90b29sX2RlYnVnaW5mby5oICovCi1Cb29sIFZHXyhnZXRfZm5u
YW1lX2lmX2VudHJ5KSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQorQm9vbCBWR18oZ2V0
X2ZubmFtZV9pZl9lbnRyeSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVm
ICkKIHsKICAgIGNvbnN0IEhDaGFyICp0bXA7CiAgICBCb29sIHJlczsKQEAgLTE5MDUsNyArMjEw
Miw3IEBACiAKICAgIHJlcyA9ICBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwg
LypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFp
bi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCAmdG1wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGVwLCBhLCAmdG1wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9GYWxzZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8q
dGV4dCBzeW0qL1RydWUsCkBAIC0xOTIwLDExICsyMTE3LDExIEBACiAgICBvZmZzZXRzLgogICAg
Tk9URTogU2VlIElNUE9SVEFOVCBDT01NRU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBv
d25lcnNoaXAKICAgIGluIHB1Yl90b29sX2RlYnVnaW5mby5oICAqLwotQm9vbCBWR18oZ2V0X2Zu
bmFtZV9yYXcpICggQWRkciBhLCBjb25zdCBIQ2hhcioqIGJ1ZiApCitCb29sIFZHXyhnZXRfZm5u
YW1lX3JhdykgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVmICkKIHsKICAg
IHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovRmFsc2UsIC8qWi1kZW1hbmds
ZSovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5n
Ki9GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZXAsIGEsIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNo
X2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93
IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW0qL1Ry
dWUsCkBAIC0xOTM2LDE0ICsyMTMzLDIyIEBACiAgICBkb24ndCBzaG93IG9mZnNldHMuCiAgICBO
T1RFOiBTZWUgSU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93
bmVyc2hpcAogICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggKi8KLUJvb2wgVkdfKGdldF9mbm5h
bWVfbm9fY3h4X2RlbWFuZ2xlKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYsCitCb29sIFZH
XyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0
IEhDaGFyKiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW5sSVBDdXJzb3IqIGlpcGMgKQogeworICAgLy8gRklYTUUgSlJTIDI4IEp1bmUgMjAxNzog
c2hvdWxkIHdlIHVzZSAnaWlwYy0+ZGktPmZpcnN0X2Vwb2NoJworICAgLy8gaW5zdGVhZCBvZiAn
ZXAnIGluIHRoZSBjYWxsIHRvIGdldF9zeW1fbmFtZT8gIEF0IGxlYXN0IGxldCdzCisgICAvLyBh
c3NlcnQgdGhhdCB0aGUgRGVidWdJbmZvIHRoYXQgJ2lpcGMnIG1lbnRpb25zIGlzIHZhbGlkIGZv
ciB0aGUKKyAgIC8vIHNwZWNpZmllZCBlcG9jaC4KKyAgIGlmIChpaXBjKSB7CisgICAgICB2Z19h
c3NlcnQoaXNfRElfdmFsaWRfZm9yX2Vwb2NoKGlpcGMtPmRpLCBlcCkpOworICAgfQorCiAgICBp
ZiAoaXNfYm90dG9tKGlpcGMpKSB7CiAgICAgICAvLyBBdCB0aGUgYm90dG9tICh0b3dhcmRzIG1h
aW4pLCB3ZSBkZXNjcmliZSB0aGUgZm4gYXQgZWlwLgogICAgICAgcmV0dXJuIGdldF9zeW1fbmFt
ZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXAsIGEsIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJl
X2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNl
dD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW0qL1RydWUs
CkBAIC0xOTYyLDEzICsyMTY3LDEzIEBACiAvKiBtaXBzLWxpbnV4IG9ubHk6IGZpbmQgdGhlIG9m
ZnNldCBvZiBjdXJyZW50IGFkZHJlc3MuIFRoaXMgaXMgbmVlZGVkIGZvciAKICAgIHN0YWNrIHVu
d2luZGluZyBmb3IgTUlQUy4KICovCi1Cb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rp
b24pKCBBZGRyIGEsCitCb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBEaUVw
b2NoIGVwLCBBZGRyIGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
Kk9VVCovUHRyZGlmZlQqIG9mZnNldCApCiB7CiAgICBjb25zdCBIQ2hhciAqZm5uYW1lOwogICAg
cmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xl
Ki9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcq
L0ZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsICZmbm5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZXAsIGEsICZmbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
LyptYXRjaF9hbnl3aGVyZV9pbl9zeW0qL1RydWUsIAogICAgICAgICAgICAgICAgICAgICAgICAg
IC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRleHQg
c3ltKi9UcnVlLApAQCAtMjAwMCwxMyArMjIwNSwxMyBAQAogICAgfQogfQogCi1WZ19Gbk5hbWVL
aW5kIFZHXyhnZXRfZm5uYW1lX2tpbmRfZnJvbV9JUCkgKCBBZGRyIGlwICkKK1ZnX0ZuTmFtZUtp
bmQgVkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQKSAoIERpRXBvY2ggZXAsIEFkZHIgaXAgKQog
ewogICAgY29uc3QgSENoYXIgKmJ1ZjsKIAogICAgLy8gV2UgZG9uJ3QgZGVtYW5nbGUsIGJlY2F1
c2UgaXQncyBmYXN0ZXIgbm90IHRvLCBhbmQgdGhlIHNwZWNpYWwgbmFtZXMKICAgIC8vIHdlJ3Jl
IGxvb2tpbmcgZm9yIHdvbid0IGJlIG1hbmdsZWQuCi0gICBpZiAoVkdfKGdldF9mbm5hbWVfcmF3
KSAoIGlwLCAmYnVmICkpIHsKKyAgIGlmIChWR18oZ2V0X2ZubmFtZV9yYXcpICggZXAsIGlwLCAm
YnVmICkpIHsKIAogICAgICAgcmV0dXJuIFZHXyhnZXRfZm5uYW1lX2tpbmQpKGJ1Zik7CiAgICB9
IGVsc2UgewpAQCAtMjAxOSwxMyArMjIyNCwxMyBAQAogICAgQWxzbyBkYXRhX2FkZHIncyBvZmZz
ZXQgZnJvbSB0aGUgc3ltYm9sIHN0YXJ0IGlzIHB1dCBpbnRvICpvZmZzZXQuCiAgICBOT1RFOiBT
ZWUgSU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hp
cAogICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggICovCi1Cb29sIFZHXyhnZXRfZGF0YXN5bV9h
bmRfb2Zmc2V0KSggQWRkciBkYXRhX2FkZHIsCitCb29sIFZHXyhnZXRfZGF0YXN5bV9hbmRfb2Zm
c2V0KSggRGlFcG9jaCBlcCwgQWRkciBkYXRhX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLypPVVQqL2NvbnN0IEhDaGFyKiogZG5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypPVVQqL1B0cmRpZmZUKiBvZmZzZXQgKQogewogICAgcmV0dXJu
IGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xlKi9GYWxz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5nKi9GYWxzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9hZGRyLCBkbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgZXAsIGRhdGFfYWRkciwgZG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8q
bWF0Y2hfYW55d2hlcmVfaW5fc3ltKi9UcnVlLCAKICAgICAgICAgICAgICAgICAgICAgICAgLypz
aG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAvKnRleHQgc3ltKi9G
YWxzZSwKQEAgLTIwMzgsNyArMjI0Myw3IEBACiAgICAoMSkgdGhlIERlYnVnSW5mbyBpdCBiZWxv
bmdzIHRvIGlzIG5vdCBkaXNjYXJkZWQKICAgICgyKSB0aGUgc2VnbWVudCBjb250YWluaW5nIHRo
ZSBhZGRyZXNzIGlzIG5vdCBtZXJnZWQgd2l0aCBhbm90aGVyIHNlZ21lbnQKICovCi1Cb29sIFZH
XyhnZXRfb2JqbmFtZSkgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogb2JqbmFtZSApCitCb29sIFZH
XyhnZXRfb2JqbmFtZSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogb2JqbmFt
ZSApCiB7CiAgICBEZWJ1Z0luZm8qIGRpOwogICAgY29uc3QgTlNlZ21lbnQgKnNlZzsKQEAgLTIw
NDcsNiArMjI1Miw4IEBACiAgICAvKiBMb29rIGluIHRoZSBkZWJ1Z0luZm9fbGlzdCB0byBmaW5k
IHRoZSBuYW1lLiAgSW4gbW9zdCBjYXNlcyB3ZQogICAgICAgZXhwZWN0IHRoaXMgdG8gcHJvZHVj
ZSBhIHJlc3VsdC4gKi8KICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsg
ZGkgPSBkaS0+bmV4dCkgeworICAgICAgaWYgKCFpc19ESV92YWxpZF9mb3JfZXBvY2goZGksIGVw
KSkKKyAgICAgICAgIGNvbnRpbnVlOwogICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQKICAgICAg
ICAgICAmJiBkaS0+dGV4dF9zaXplID4gMAogICAgICAgICAgICYmIGRpLT50ZXh0X2F2bWEgPD0g
YSAKQEAgLTIwNTksOCArMjI2NiwxMyBAQAogICAgICAgdGhlIGRlYnVnSW5mb19saXN0LCBhc2sg
dGhlIGFkZHJlc3Mgc3BhY2UgbWFuYWdlciB3aGV0aGVyIGl0CiAgICAgICBrbm93cyB0aGUgbmFt
ZSBvZiB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXBwaW5nLiAgVGhpcwogICAgICAg
YWxsb3dzIHVzIHRvIHByaW50IHRoZSBuYW1lcyBvZiBleGUvZGxsIGZpbGVzIGluIHRoZSBzdGFj
ayB0cmFjZQotICAgICAgd2hlbiBydW5uaW5nIHByb2dyYW1zIHVuZGVyIHdpbmUuICovCi0gICBp
ZiAoIChzZWcgPSBWR18oYW1fZmluZF9uc2VnbWVudCkoYSkpICE9IE5VTEwgCisgICAgICB3aGVu
IHJ1bm5pbmcgcHJvZ3JhbXMgdW5kZXIgd2luZS4KKworICAgICAgUmVzdHJpY3QgdGhpcyB0byB0
aGUgY2FzZSB3aGVyZSAnZXAnIGlzIHRoZSBjdXJyZW50IGVwb2NoLCB0aG91Z2gsIHNvCisgICAg
ICB0aGF0IHdlIGRvbid0IHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGVwb2NoIHdoZW4g
dGhlIGNhbGxlciB3YXMKKyAgICAgIGVucXVpcmluZyBhYm91dCBhIGRpZmZlcmVudCBvbmUuICov
CisgICBpZiAoIGVxX0RpRXBvY2goZXAsIFZHXyhjdXJyZW50X0RpRXBvY2gpKCkpCisgICAgICAg
ICYmIChzZWcgPSBWR18oYW1fZmluZF9uc2VnbWVudCkoYSkpICE9IE5VTEwgCiAgICAgICAgICYm
IChmaWxlbmFtZSA9IFZHXyhhbV9nZXRfZmlsZW5hbWUpKHNlZykpICE9IE5VTEwgKSB7CiAgICAg
ICAqb2JqbmFtZSA9IGZpbGVuYW1lOwogICAgICAgcmV0dXJuIFRydWU7CkBAIC0yMDcwLDEyICsy
MjgyLDE0IEBACiAKIC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0byBpdHMgRGVidWdJbmZvLiAgUmV0
dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4gIERvZXNuJ3QKICAgIHJlcXVpcmUgZGVidWcgaW5mby4g
Ki8KLURlYnVnSW5mbyogVkdfKGZpbmRfRGVidWdJbmZvKSAoIEFkZHIgYSApCitEZWJ1Z0luZm8q
IFZHXyhmaW5kX0RlYnVnSW5mbykgKCBEaUVwb2NoIGVwLCBBZGRyIGEgKQogewogICAgc3RhdGlj
IFVXb3JkIG5fc2VhcmNoID0gMDsKICAgIERlYnVnSW5mbyogZGk7CiAgICBuX3NlYXJjaCsrOwog
ICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7
CisgICAgICBpZiAoIWlzX0RJX3ZhbGlkX2Zvcl9lcG9jaChkaSwgZXApKQorICAgICAgICAgY29u
dGludWU7CiAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50ZXh0
X3NpemUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBhIApAQCAtMjA5MSwxMyAr
MjMwNSwxMyBAQAogLyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGEgZmlsZW5hbWUuICBSZXR1cm5z
IFRydWUgaWYgc3VjY2Vzc2Z1bC4gVGhlCiAgICByZXR1cm5lZCBzdHJpbmcgaXMgcGVyc2lzdGVu
dCBhcyBsb25nIGFzIHRoZSBEZWJ1Z0luZm8gdG8gd2hpY2ggaXQKICAgIGJlbG9uZ3MgaXMgbm90
IGRpc2NhcmRlZC4gKi8KLUJvb2wgVkdfKGdldF9maWxlbmFtZSkoIEFkZHIgYSwgY29uc3QgSENo
YXIqKiBmaWxlbmFtZSApCitCb29sIFZHXyhnZXRfZmlsZW5hbWUpKCBEaUVwb2NoIGVwLCBBZGRy
IGEsIGNvbnN0IEhDaGFyKiogZmlsZW5hbWUgKQogewogICAgRGVidWdJbmZvKiBzaTsKICAgIFdv
cmQgICAgICAgbG9jbm87CiAgICBVSW50ICAgICAgIGZuZG5faXg7CiAKLSAgIHNlYXJjaF9hbGxf
bG9jdGFicyAoIGEsICZzaSwgJmxvY25vICk7CisgICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBlcCwg
YSwgJnNpLCAmbG9jbm8gKTsKICAgIGlmIChzaSA9PSBOVUxMKSAKICAgICAgIHJldHVybiBGYWxz
ZTsKICAgIGZuZG5faXggPSBNTF8oZm5kbl9peCkgKHNpLCBsb2Nubyk7CkBAIC0yMTA2LDExICsy
MzIwLDExIEBACiB9CiAKIC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0byBhIGxpbmUgbnVtYmVyLiAg
UmV0dXJucyBUcnVlIGlmIHN1Y2Nlc3NmdWwuICovCi1Cb29sIFZHXyhnZXRfbGluZW51bSkoIEFk
ZHIgYSwgVUludCogbGluZW5vICkKK0Jvb2wgVkdfKGdldF9saW5lbnVtKSggRGlFcG9jaCBlcCwg
QWRkciBhLCBVSW50KiBsaW5lbm8gKQogewogICAgRGVidWdJbmZvKiBzaTsKICAgIFdvcmQgICAg
ICAgbG9jbm87Ci0gICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyApOworICAg
c2VhcmNoX2FsbF9sb2N0YWJzICggZXAsIGEsICZzaSwgJmxvY25vICk7CiAgICBpZiAoc2kgPT0g
TlVMTCkgCiAgICAgICByZXR1cm4gRmFsc2U7CiAgICAqbGluZW5vID0gc2ktPmxvY3RhYltsb2Nu
b10ubGluZW5vOwpAQCAtMjEyMSw3ICsyMzM1LDcgQEAKIC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0
byBhIGZpbGVuYW1lL2xpbmUgbnVtYmVyL2RpciBuYW1lIGluZm8uCiAgICBTZWUgcHJvdG90eXBl
IGZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBiZWhhdmlvdXIuCiAqLwotQm9vbCBWR18oZ2V0
X2ZpbGVuYW1lX2xpbmVudW0pICggQWRkciBhLCAKK0Jvb2wgVkdfKGdldF9maWxlbmFtZV9saW5l
bnVtKSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKk9VVCovY29uc3QgSENoYXIqKiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qT1VUKi9jb25zdCBIQ2hhcioqIGRpcm5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGluZW5vICkKQEAgLTIxMzAsNyArMjM0
NCw3IEBACiAgICBXb3JkICAgICAgIGxvY25vOwogICAgVUludCAgICAgICBmbmRuX2l4OwogCi0g
ICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyApOworICAgc2VhcmNoX2FsbF9s
b2N0YWJzICggZXAsIGEsICZzaSwgJmxvY25vICk7CiAgICBpZiAoc2kgPT0gTlVMTCkgewogICAg
ICAgaWYgKGRpcm5hbWUpIHsKICAgICAgICAgICpkaXJuYW1lID0gIiI7CkBAIC0yMTU5LDcgKzIz
NzMsOCBAQAogICAgVGhlcmVmb3JlIHNwZWNpZnkgIioiIHRvIHNlYXJjaCBhbGwgdGhlIG9iamVj
dHMuICBPbiBUT0MtYWZmbGljdGVkCiAgICBwbGF0Zm9ybXMsIGEgc3ltYm9sIGlzIGRlZW1lZCB0
byBiZSBmb3VuZCBvbmx5IGlmIGl0IGhhcyBhIG5vbnplcm8KICAgIFRPQyBwb2ludGVyLiAgKi8K
LUJvb2wgVkdfKGxvb2t1cF9zeW1ib2xfU0xPVykoY29uc3QgSENoYXIqIHNvcGF0dCwgY29uc3Qg
SENoYXIqIG5hbWUsCitCb29sIFZHXyhsb29rdXBfc3ltYm9sX1NMT1cpKERpRXBvY2ggZXAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhDaGFyKiBzb3BhdHQsIGNvbnN0IEhD
aGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1BVk1BcyogYXZtYXMp
CiB7CiAgICBCb29sICAgICByZXF1aXJlX3BUb2MgPSBGYWxzZTsKQEAgLTIxNzIsNiArMjM4Nyw4
IEBACiAgICBmb3IgKHNpID0gZGVidWdJbmZvX2xpc3Q7IHNpOyBzaSA9IHNpLT5uZXh0KSB7CiAg
ICAgICBpZiAoZGVidWcpCiAgICAgICAgICBWR18ocHJpbnRmKSgibG9va3VwX3N5bWJvbF9TTE9X
OiBjb25zaWRlcmluZyAlc1xuIiwgc2ktPnNvbmFtZSk7CisgICAgICBpZiAoIWlzX0RJX3ZhbGlk
X2Zvcl9lcG9jaChzaSwgZXApKQorICAgICAgICAgY29udGludWU7CiAgICAgICBpZiAoIVZHXyhz
dHJpbmdfbWF0Y2gpKHNvcGF0dCwgc2ktPnNvbmFtZSkpIHsKICAgICAgICAgIGlmIChkZWJ1ZykK
ICAgICAgICAgICAgIFZHXyhwcmludGYpKCIgLi4uIHNraXBcbiIpOwpAQCAtMjI1NCw3ICsyNDcx
LDcgQEAKICAgIHJldHVybiBuOwogfQogCi1jb25zdCBIQ2hhciogVkdfKGRlc2NyaWJlX0lQKShB
ZGRyIGVpcCwgY29uc3QgSW5sSVBDdXJzb3IgKmlpcGMpCitjb25zdCBIQ2hhciogVkdfKGRlc2Ny
aWJlX0lQKShEaUVwb2NoIGVwLCBBZGRyIGVpcCwgY29uc3QgSW5sSVBDdXJzb3IgKmlpcGMpCiB7
CiAgICBzdGF0aWMgSENoYXIgKmJ1ZiA9IE5VTEw7CiAgICBzdGF0aWMgU2l6ZVQgYnVmc2l6ID0g
MDsKQEAgLTIyNjcsNyArMjQ4NCwxMCBAQAogICAgSENoYXIgaWJ1Zls1MF07ICAgLy8gbGFyZ2Ug
ZW5vdWdoCiAgICBTaXplVCBuID0gMDsKIAotICAgdmdfYXNzZXJ0ICghaWlwYyB8fCBpaXBjLT5l
aXAgPT0gZWlwKTsKKyAgIC8vIEFuIElubElQQ3Vyc29yIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmUg
c3BlY2lmaWMgRGVidWdJbmZvLiAgU28gaWYKKyAgIC8vIGl0IGV4aXN0cywgbWFrZSBzdXJlIHRo
YXQgaXQgaXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgRGlFcG9jaC4KKyAgIHZnX2Fzc2VydCAo
IWlpcGMKKyAgICAgICAgICAgICAgfHwgKGlzX0RJX3ZhbGlkX2Zvcl9lcG9jaChpaXBjLT5kaSwg
ZXApICYmIGlpcGMtPmVpcCA9PSBlaXApKTsKIAogICAgY29uc3QgSENoYXIgKmJ1Zl9mbjsKICAg
IGNvbnN0IEhDaGFyICpidWZfb2JqOwpAQCAtMjI4Miw4ICsyNTAyLDggQEAKICAgIGlmIChpc19i
b3R0b20oaWlwYykpIHsKICAgICAgIC8vIEF0IHRoZSBib3R0b20gKHRvd2FyZHMgbWFpbiksIHdl
IGRlc2NyaWJlIHRoZSBmbiBhdCBlaXAuCiAgICAgICBrbm93X2ZubmFtZSA9IFZHXyhjbG9fc3lt
X29mZnNldHMpCi0gICAgICAgICAgICAgICAgICAgID8gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQp
IChlaXAsICZidWZfZm4pCi0gICAgICAgICAgICAgICAgICAgIDogVkdfKGdldF9mbm5hbWUpIChl
aXAsICZidWZfZm4pOworICAgICAgICAgICAgICAgICAgICA/IFZHXyhnZXRfZm5uYW1lX3dfb2Zm
c2V0KSAoZXAsIGVpcCwgJmJ1Zl9mbikKKyAgICAgICAgICAgICAgICAgICAgOiBWR18oZ2V0X2Zu
bmFtZSkgKGVwLCBlaXAsICZidWZfZm4pOwogICAgfSBlbHNlIHsKICAgICAgIGNvbnN0IERpSW5s
TG9jICpuZXh0X2lubCA9IGlpcGMgJiYgaWlwYy0+bmV4dF9pbmx0YWIgPj0gMAogICAgICAgICAg
PyAmIGlpcGMtPmRpLT5pbmx0YWJbaWlwYy0+bmV4dF9pbmx0YWJdCkBAIC0yMzAxLDEyICsyNTIx
LDEyIEBACiAgICAgICAvLyA/Pz8gQ3VycmVudGx5IG5ldmVyIHNob3dpbmcgYW4gb2Zmc2V0Lgog
ICAgfQogCi0gICBrbm93X29iam5hbWUgPSBWR18oZ2V0X29iam5hbWUpKGVpcCwgJmJ1Zl9vYmop
OworICAga25vd19vYmpuYW1lID0gVkdfKGdldF9vYmpuYW1lKShlcCwgZWlwLCAmYnVmX29iaik7
CiAKICAgIGlmIChpc190b3AoaWlwYykpIHsKICAgICAgIC8vIFRoZSBzb3VyY2UgZm9yIHRoZSBo
aWdoZXN0IGxldmVsIGlzIGluIHRoZSBsb2N0YWIgZW50cnkuCiAgICAgICBrbm93X3NyY2xvYyAg
PSBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pKAotICAgICAgICAgICAgICAgICAgICAgICAgZWlw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVwLCBlaXAsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgJmJ1Zl9zcmNsb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zl9kaXJuYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVubyAKQEAgLTI0NTksNiArMjY3OSwyMCBA
QAogLyotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogTm90ZSB0aGF0IHRoZSBDRkkgbWFjaGluZXJ5
IHBlcnRhaW5zIHRvIHVud2luZGluZyB0aGUgc3RhY2sgInJpZ2h0IG5vdyIuCisgICBUaGVyZSBp
cyBubyBzdXBwb3J0IGZvciB1bndpbmRpbmcgc3RhY2sgaW1hZ2VzIG9idGFpbmVkIGZyb20gc29t
ZSB0aW1lIGluCisgICB0aGUgcGFzdC4gIFRoYXQgbWVhbnMgdGhhdDoKKworICAgKDEpIFdlIG9u
bHkgZGVhbCB3aXRoIENGSSBmcm9tIERlYnVnSW5mb3MgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZSBj
dXJyZW50CisgICAgICAgZGVidWdpbmZvIGVwb2NoLiAgVW5saWtlIGluIHRoZSByZXN0IG9mIHRo
ZSBmaWxlLCB0aGVyZSBpcyBubworICAgICAgIGVwb2NoLWF3YXJlbmVzcy4KKworICAgKDIpIFdl
IGFzc3VtZSB0aGF0IHRoZSBDRkkgY2FjaGUgd2lsbCBiZSBpbnZhbGlkYXRlZCBldmVyeSB0aW1l
IHRoZSB0aGUKKyAgICAgICBlcG9jaCBjaGFuZ2VzLiAgVGhpcyBpcyBkb25lIGJ5IGVuc3VyaW5n
IChpbiB0aGUgZmlsZSBhYm92ZSkgdGhhdAorICAgICAgIGV2ZXJ5IGNhbGwgdG8gYWR2YW5jZV9j
dXJyZW50X0RpRXBvY2ggaGFzIGEgY2FsbCB0bworICAgICAgIGNhY2hlc19faW52YWxpZGF0ZSBh
bG9uZ3NpZGUgaXQuCisqLworCiAvKiBHYXRoZXIgdXAgYWxsIHRoZSBjb25zdGFudCBwaWVjZXMg
b2YgaW5mbyBuZWVkZWQgdG8gZXZhbHVhdGUKICAgIGEgQ2ZpRXhwciBpbnRvIG9uZSBjb252ZW5p
ZW50IHN0cnVjdC4gKi8KIHR5cGVkZWYKQEAgLTI1NzksNiArMjgxMyw5IEBACiAgICAqY2ZzaV9t
UCB0byB0aGUgY2ZzaV9tIHBvaW50ZXIgaW4gdGhhdCBEZWJ1Z0luZm8ncyBjZnNpX21fcG9vbC4K
IAogICAgSWYgbm90IGZvdW5kLCBzZXQgKmRpUCB0byAoRGVidWdJbmZvKikxIGFuZCAqY2ZzaV9t
UCB0byB6ZXJvLgorCisgICBQZXIgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGlzIHNlY3Rpb24s
IHdlIG9ubHkgbG9vayBmb3IgQ0ZJIGluCisgICBEZWJ1Z0luZm9zIHRoYXQgYXJlIHZhbGlkIGZv
ciB0aGUgY3VycmVudCBlcG9jaC4KICovCiBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCiBzdGF0
aWMgdm9pZCBmaW5kX0RpQ2ZTSSAoIC8qT1VUKi9EZWJ1Z0luZm8qKiBkaVAsIApAQCAtMjU5NCwx
MCArMjgzMSwxNSBAQAogCiAgICBpZiAoMCkgVkdfKHByaW50ZikoInNlYXJjaCBmb3IgJSNseFxu
IiwgaXApOwogCisgICBEaUVwb2NoIGN1cnJfZXBvY2ggPSBWR18oY3VycmVudF9EaUVwb2NoKSgp
OworCiAgICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5l
eHQpIHsKICAgICAgIFdvcmQgajsKICAgICAgIG5fc3RlcHMrKzsKIAorICAgICAgaWYgKCFpc19E
SV92YWxpZF9mb3JfZXBvY2goZGksIGN1cnJfZXBvY2gpKQorICAgICAgICAgY29udGludWU7CisK
ICAgICAgIC8qIFVzZSB0aGUgcGVyLURlYnVnSW5mbyBzdW1tYXJ5IGFkZHJlc3MgcmFuZ2VzIHRv
IHNraXAKICAgICAgICAgIGluYXBwbGljYWJsZSBEZWJ1Z0luZm9zIHF1aWNrbHkuICovCiAgICAg
ICBpZiAoZGktPmNmc2lfdXNlZCA9PSAwKQpAQCAtMjYwNSw2ICsyODQ3LDExIEBACiAgICAgICBp
ZiAoaXAgPCBkaS0+Y2ZzaV9taW5hdm1hIHx8IGlwID4gZGktPmNmc2lfbWF4YXZtYSkKICAgICAg
ICAgIGNvbnRpbnVlOwogCisgICAgICAvLyBUaGlzIGRpIG11c3QgYmUgYWN0aXZlIChiZWNhdXNl
IHdlIGhhdmUgZXhwbGljaXRseSBjaG9zZW4gbm90IHRvCisgICAgICAvLyBhbGxvdyB1bndpbmRp
bmcgc3RhY2tzIHRoYXQgcGVydGFpbiB0byBzb21lIHBhc3QgZXBvY2gpLiAgSXQgY2FuJ3QKKyAg
ICAgIC8vIGJlIGFyY2hpdmVkIG9yIG5vdC15ZXQtYWN0aXZlLgorICAgICAgdmdfYXNzZXJ0KGlz
X0RlYnVnSW5mb19hY3RpdmUoZGkpKTsKKwogICAgICAgLyogSXQgbWlnaHQgYmUgaW4gdGhpcyBE
ZWJ1Z0luZm8uICBTZWFyY2ggaXQuICovCiAgICAgICBqID0gTUxfKHNlYXJjaF9vbmVfY2ZpdGFi
KSggZGksIGlwICk7CiAgICAgICB2Z19hc3NlcnQoaiA+PSAtMSAmJiBqIDwgKFdvcmQpZGktPmNm
c2lfdXNlZCk7CkBAIC0zMDMyLDYgKzMyNzksNyBAQAogQm9vbCBWR18odXNlX0ZQT19pbmZvKSAo
IC8qTU9EKi9BZGRyKiBpcFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypNT0QqL0FkZHIq
IHNwUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKk1PRCovQWRkciogZnBQLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIERpRXBvY2ggZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
QWRkciBtaW5fYWNjZXNzaWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIG1heF9h
Y2Nlc3NpYmxlICkKIHsKQEAgLTMwNDksNiArMzI5Nyw5IEBACiAgICBmb3IgKGRpID0gZGVidWdJ
bmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKICAgICAgIG5fc3RlcHMrKzsK
IAorICAgICAgaWYgKCFpc19ESV92YWxpZF9mb3JfZXBvY2goZGksIGVwKSkKKyAgICAgICAgIGNv
bnRpbnVlOworCiAgICAgICAvKiBVc2UgdGhlIHBlci1EZWJ1Z0luZm8gc3VtbWFyeSBhZGRyZXNz
IHJhbmdlcyB0byBza2lwCiAgICAgICAgICBpbmFwcGxpY2FibGUgRGVidWdJbmZvcyBxdWlja2x5
LiAqLwogICAgICAgaWYgKGRpLT5mcG8gPT0gTlVMTCkKQEAgLTM1NTIsNiArMzgwMyw3IEBACiBz
dGF0aWMgCiBCb29sIGNvbnNpZGVyX3ZhcnNfaW5fZnJhbWUgKCAvKk1PRCovWEFycmF5KiAvKiBv
ZiBIQ2hhciAqLyBkbmFtZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk1PRCov
WEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEaUVwb2NoIGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciBkYXRh
X2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIGlwLCBBZGRyIHNwLCBB
ZGRyIGZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvd24gdG8gdXNlcjog
Ki8KQEAgLTM1NzAsNiArMzgyMiw4IEBACiAgICAvKiBmaXJzdCwgZmluZCB0aGUgRGVidWdJbmZv
IHRoYXQgcGVydGFpbnMgdG8gJ2lwJy4gKi8KICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsg
ZGk7IGRpID0gZGktPm5leHQpIHsKICAgICAgIG5fc3RlcHMrKzsKKyAgICAgIGlmICghaXNfRElf
dmFsaWRfZm9yX2Vwb2NoKGRpLCBlcCkpCisgICAgICAgICBjb250aW51ZTsKICAgICAgIC8qIHRl
eHQgc2VnbWVudCBtaXNzaW5nPyB1bmxpa2VseSwgYnV0IGhhbmRsZSBpdCAuLiAqLwogICAgICAg
aWYgKCFkaS0+dGV4dF9wcmVzZW50IHx8IGRpLT50ZXh0X3NpemUgPT0gMCkKICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMzY4Nyw3ICszOTQxLDcgQEAKIEJvb2wgVkdfKGdldF9kYXRhX2Rlc2NyaXB0
aW9uKSggCiAgICAgICAgIC8qTU9EKi8gWEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTEsCiAg
ICAgICAgIC8qTU9EKi8gWEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTIsCi0gICAgICAgIEFk
ZHIgZGF0YV9hZGRyCisgICAgICAgIERpRXBvY2ggZXAsIEFkZHIgZGF0YV9hZGRyCiAgICAgICkK
IHsKICMgIGRlZmluZSBOX0ZSQU1FUyA4CkBAIC0zODA3LDcgKzQwNjEsNyBAQAogICAgdmdfYXNz
ZXJ0KG5fZnJhbWVzID49IDAgJiYgbl9mcmFtZXMgPD0gTl9GUkFNRVMpOwogICAgZm9yIChqID0g
MDsgaiA8IG5fZnJhbWVzOyBqKyspIHsKICAgICAgIGlmIChjb25zaWRlcl92YXJzX2luX2ZyYW1l
KCBkbmFtZTEsIGRuYW1lMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAsIGRhdGFfYWRkciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHNbal0sIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwc1tqXSwgZnBzW2pdLCB0aWQsIGogKSkgewogICAgICAg
ICAgenRlcm1fWEEoIGRuYW1lMSApOwpAQCAtMzgzNCw3ICs0MDg4LDcgQEAKICAgICAgICAgIGVx
dWl2YWxlbnQga2x1ZGdlLiAqLwogICAgICAgaWYgKGogPiAwIC8qIHRoaXMgaXMgYSBub24taW5u
ZXJtb3N0IGZyYW1lICovCiAgICAgICAgICAgJiYgY29uc2lkZXJfdmFyc19pbl9mcmFtZSggZG5h
bWUxLCBkbmFtZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9h
ZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLCBkYXRhX2FkZHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBzW2pdICsgMSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BzW2pdLCBmcHNbal0sIHRpZCwgaiAp
KSB7CiAgICAgICAgICB6dGVybV9YQSggZG5hbWUxICk7CkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1
Z2luZm8vcHJpdl9zdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZGVidWdpbmZv
L3ByaXZfc3RvcmFnZS5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX2RlYnVnaW5m
by9wcml2X3N0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTg4LDYgKzU4OCwzNiBAQAogICAg
ICAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZC4gKi8KICAgIFVMb25nIGhhbmRsZTsKIAorICAgLyog
VGhlIHJhbmdlIG9mIGVwb2NocyBmb3Igd2hpY2ggdGhpcyBEZWJ1Z0luZm8gaXMgdmFsaWQuICBU
aGVzZSBhbHNvCisgICAgICBkaXZpZGUgdGhlIERlYnVnSW5mbydzIGxpZmV0aW1lIGludG8gdGhy
ZWUgcGFydHM6CisKKyAgICAgICgxKSBBbGxvY2F0ZWQ6IGJ1dCB3aXRoIG9ubHkgLmZzbSBob2xk
aW5nIHVzZWZ1bCBpbmZvIC0tIGluCisgICAgICAgICAgcGFydGljdWxhciwgbm90IHlldCBob2xk
aW5nIGFueSBkZWJ1ZyBpbmZvLgorICAgICAgICAgIC5maXJzdF9lcG9jaCA9PSBEZWJ1Z0luZm9F
cG9jaF9JTlZBTElECisgICAgICAgICAgLmxhc3RfZXBvY2ggID09IERlYnVnSW5mb0Vwb2NoX0lO
VkFMSUQKKworICAgICAgKDIpIEFjdGl2ZTogY29udGFpbmluZyBkZWJ1ZyBpbmZvLCBhbmQgY3Vy
cmVudC4KKyAgICAgICAgICAuZmlyc3RfZXBvY2ggIT0gRGVidWdJbmZvRXBvY2hfSU5WQUxJRAor
ICAgICAgICAgIC5sYXN0X2Vwb2NoICA9PSBEZWJ1Z0luZm9FcG9jaF9JTlZBTElECisKKyAgICAg
ICgzKSBBcmNoaXZlZDogY29udGFpbmluZyBkZWJ1ZyBpbmZvLCBidXQgbm8gbG9uZ2VyIGN1cnJl
bnQuCisgICAgICAgICAgLmZpcnN0X2Vwb2NoICE9IERlYnVnSW5mb0Vwb2NoX0lOVkFMSUQKKyAg
ICAgICAgICAubGFzdF9lcG9jaCAgIT0gRGVidWdJbmZvRXBvY2hfSU5WQUxJRAorCisgICAgICBT
dGF0ZSAoMikgY29ycmVzcG9uZHMgdG8gYW4gb2JqZWN0IHdoaWNoIGlzIGN1cnJlbnRseSBtYXBw
ZWQuICBXaGVuCisgICAgICB0aGUgb2JqZWN0IGlzIHVubWFwcGVkLCB3aGF0IGhhcHBlbnMgZGVw
ZW5kcyBvbiB0aGUgc2V0dGluZyBvZgorICAgICAgLS1rZWVwLWRlYnVnaW5mbzoKKyAgICAgIAor
ICAgICAgKiB3aGVuID1ubywgdGhlIERlYnVnSW5mbyBpcyByZW1vdmVkIGZyb20gZGVidWdJbmZv
X2xpc3QgYW5kCisgICAgICAgIGRlbGV0ZWQuCisKKyAgICAgICogd2hlbiA9eWVzLCB0aGUgRGVi
dWdJbmZvIGlzIHJldGFpbmVkIGluIGRlYnVnSW5mb19saXN0LCBidXQgaXRzCisgICAgICAgIC5s
YXN0X2Vwb2NoIGZpZWxkIGlzIGZpbGxlZCBpbiwgYW5kIGN1cnJlbnRfZXBvY2ggaXMgYWR2YW5j
ZWQuICBUaGlzCisgICAgICAgIGVmZmVjdGl2ZWx5IG1vdmVzIHRoZSBEZWJ1Z0luZm8gaW50byBz
dGF0ZSAoMykuCisgICAqLworICAgRGlFcG9jaCBmaXJzdF9lcG9jaDsKKyAgIERpRXBvY2ggbGFz
dF9lcG9jaDsKKwogICAgLyogVXNlZCBmb3IgZGVidWdnaW5nIG9ubHkgLSBpbmRpY2F0ZSB3aGF0
IHN0dWZmIHRvIGR1bXAgd2hpbHN0CiAgICAgICByZWFkaW5nIHN0dWZmIGludG8gdGhlIHNlZ2lu
Zm8uICBBcmUgY29tcHV0ZWQgYXMgZWFybHkgaW4gdGhlCiAgICAgICBsaWZldGltZSBvZiB0aGUg
RGVidWdJbmZvIGFzIHBvc3NpYmxlIC0tIGF0IHRoZSBwb2ludCB3aGVuIGl0IGlzCkluZGV4OiBj
b3JlZ3JpbmQvbV9lcnJvcm1nci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2Vycm9ybWdy
LmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fZXJyb3JtZ3IuYwkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDE2ICsxMzYsMTYgQEAKICAgIEludCBjb3VudDsKIAogICAgLy8gVGhlIHRv
b2wtc3BlY2lmaWMgcGFydAotICAgVGhyZWFkSWQgdGlkOyAgICAgICAgICAgLy8gSW5pdGlhbGlz
ZWQgYnkgY29yZQotICAgRXhlQ29udGV4dCogd2hlcmU7ICAgICAgLy8gSW5pdGlhbGlzZWQgYnkg
Y29yZQotICAgRXJyb3JLaW5kIGVraW5kOyAgICAgICAgLy8gVXNlZCBieSBBTEwuICBNdXN0IGJl
IGluIHRoZSByYW5nZSAoMC4uKQotICAgQWRkciBhZGRyOyAgICAgICAgICAgICAgLy8gVXNlZCBm
cmVxdWVudGx5Ci0gICBjb25zdCBIQ2hhciogc3RyaW5nOyAgICAvLyBVc2VkIGZyZXF1ZW50bHkK
LSAgIHZvaWQqIGV4dHJhOyAgICAgICAgICAgIC8vIEZvciBhbnkgdG9vbC1zcGVjaWZpYyBleHRy
YXMKKyAgIFRocmVhZElkIHRpZDsgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2VkIGJ5IGNvcmUK
KyAgIEV4ZUNvbnRleHRBbmRFcG9jaCB3aGVyZTsgIC8vIEluaXRpYWxpc2VkIGJ5IGNvcmUKKyAg
IEVycm9yS2luZCBla2luZDsgICAgICAgICAgIC8vIFVzZWQgYnkgQUxMLiAgTXVzdCBiZSBpbiB0
aGUgcmFuZ2UgKDAuLikKKyAgIEFkZHIgYWRkcjsgICAgICAgICAgICAgICAgIC8vIFVzZWQgZnJl
cXVlbnRseQorICAgY29uc3QgSENoYXIqIHN0cmluZzsgICAgICAgLy8gVXNlZCBmcmVxdWVudGx5
CisgICB2b2lkKiBleHRyYTsgICAgICAgICAgICAgICAvLyBGb3IgYW55IHRvb2wtc3BlY2lmaWMg
ZXh0cmFzCiB9OwogCiAKLUV4ZUNvbnRleHQqIFZHXyhnZXRfZXJyb3Jfd2hlcmUpICggY29uc3Qg
RXJyb3IqIGVyciApCitFeGVDb250ZXh0QW5kRXBvY2ggVkdfKGdldF9lcnJvcl93aGVyZSkgKCBj
b25zdCBFcnJvciogZXJyICkKIHsKICAgIHJldHVybiBlcnItPndoZXJlOwogfQpAQCAtMjkzLDcg
KzI5MywxMCBAQAogewogICAgaWYgKGUxLT5la2luZCAhPSBlMi0+ZWtpbmQpIAogICAgICAgcmV0
dXJuIEZhbHNlOwotICAgaWYgKCFWR18oZXFfRXhlQ29udGV4dCkocmVzLCBlMS0+d2hlcmUsIGUy
LT53aGVyZSkpCisgICAvLyBUaGlzIGNvbXBhcmlzb24gaWdub3JlcyB0aGUgZGVidWdpbmZvIGVw
b2NoLiAgUmVzdWx0IGlzIHRoYXQgd2UKKyAgIC8vIGNvdWxkIGNvbmNsdWRlIHRoaXMgZXJyb3Ig
aXMgdGhlIHNhbWUgYXMgb25lIGZyb20gc29tZSBvdGhlciBlcG9jaC4KKyAgIC8vIEkgZG9uJ3Qg
dGhpbmsgdGhhdCdzIGEgYmlnIGRlYWwgaW4gcHJhY3RpY2UuCisgICBpZiAoIVZHXyhlcV9FeGVD
b250ZXh0KShyZXMsIGUxLT53aGVyZS5lYywgZTItPndoZXJlLmVjKSkKICAgICAgIHJldHVybiBG
YWxzZTsKIAogICAgc3dpdGNoIChlMS0+ZWtpbmQpIHsKQEAgLTMyMSwxNSArMzI0LDE1IEBACiAq
LwogI2RlZmluZSBFUlJUWFRfTEVOICAgNDA5NgogCi1zdGF0aWMgdm9pZCBwcmludFN1cHBGb3JJ
cF9YTUwoVUludCBuLCBBZGRyIGlwLCB2b2lkKiB1dV9vcGFxdWUpCitzdGF0aWMgdm9pZCBwcmlu
dFN1cHBGb3JJcF9YTUwoVUludCBuLCBEaUVwb2NoIGVwLCBBZGRyIGlwLCB2b2lkKiB1dV9vcGFx
dWUpCiB7CiAgICBjb25zdCBIQ2hhciAqYnVmOwotICAgSW5sSVBDdXJzb3IqIGlpcGMgPSBWR18o
bmV3X0lJUEMpKGlwKTsKKyAgIElubElQQ3Vyc29yKiBpaXBjID0gVkdfKG5ld19JSVBDKShlcCwg
aXApOwogICAgZG8gewotICAgICAgaWYgKCBWR18oZ2V0X2ZubmFtZV9ub19jeHhfZGVtYW5nbGUp
IChpcCwgJmJ1ZiwgaWlwYykgKSB7CisgICAgICBpZiAoIFZHXyhnZXRfZm5uYW1lX25vX2N4eF9k
ZW1hbmdsZSkgKGVwLCBpcCwgJmJ1ZiwgaWlwYykgKSB7CiAgICAgICAgICBWR18ocHJpbnRmX3ht
bCkoIiAgICA8c2ZyYW1lPiA8ZnVuPiVwUzwvZnVuPiA8L3NmcmFtZT5cbiIsIGJ1Zik7CiAgICAg
ICB9IGVsc2UKLSAgICAgIGlmICggVkdfKGdldF9vYmpuYW1lKShpcCwgJmJ1ZikgKSB7CisgICAg
ICBpZiAoIFZHXyhnZXRfb2JqbmFtZSkoZXAsIGlwLCAmYnVmKSApIHsKICAgICAgICAgIFZHXyhw
cmludGZfeG1sKSgiICAgIDxzZnJhbWU+IDxvYmo+JXBTPC9vYmo+IDwvc2ZyYW1lPlxuIiwgYnVm
KTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgICA8c2ZyYW1l
PiA8b2JqPio8L29iaj4gPC9zZnJhbWU+XG4iKTsKQEAgLTMzOCwxNiArMzQxLDE2IEBACiAgICBW
R18oZGVsZXRlX0lJUEMpKGlpcGMpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludFN1cHBGb3JJcF9u
b25YTUwoVUludCBuLCBBZGRyIGlwLCB2b2lkKiB0ZXh0VikKK3N0YXRpYyB2b2lkIHByaW50U3Vw
cEZvcklwX25vblhNTChVSW50IG4sIERpRXBvY2ggZXAsIEFkZHIgaXAsIHZvaWQqIHRleHRWKQog
ewogICAgY29uc3QgSENoYXIgKmJ1ZjsKICAgIFhBcnJheSogLyogb2YgSENoYXIgKi8gdGV4dCA9
IChYQXJyYXkqKXRleHRWOwotICAgSW5sSVBDdXJzb3IqIGlpcGMgPSBWR18obmV3X0lJUEMpKGlw
KTsKKyAgIElubElQQ3Vyc29yKiBpaXBjID0gVkdfKG5ld19JSVBDKShlcCwgaXApOwogICAgZG8g
ewotICAgICAgaWYgKCBWR18oZ2V0X2ZubmFtZV9ub19jeHhfZGVtYW5nbGUpIChpcCwgJmJ1Ziwg
aWlwYykgKSB7CisgICAgICBpZiAoIFZHXyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKGVw
LCBpcCwgJmJ1ZiwgaWlwYykgKSB7CiAgICAgICAgICBWR18oeGFwcmludGYpKHRleHQsICIgICBm
dW46JXNcbiIsIGJ1Zik7CiAgICAgICB9IGVsc2UKLSAgICAgIGlmICggVkdfKGdldF9vYmpuYW1l
KShpcCwgJmJ1ZikgKSB7CisgICAgICBpZiAoIFZHXyhnZXRfb2JqbmFtZSkoZXAsIGlwLCAmYnVm
KSApIHsKICAgICAgICAgIFZHXyh4YXByaW50ZikodGV4dCwgIiAgIG9iajolc1xuIiwgYnVmKTsK
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBWR18oeGFwcmludGYpKHRleHQsICIgICBvYmo6Klxu
Iik7CkBAIC0zNjEsNyArMzY0LDcgQEAKIHN0YXRpYyB2b2lkIGdlbl9zdXBwcmVzc2lvbihjb25z
dCBFcnJvciogZXJyKQogewogICAgY29uc3QgSENoYXIqIG5hbWU7Ci0gICBFeGVDb250ZXh0KiBl
YzsKKyAgIEV4ZUNvbnRleHRBbmRFcG9jaCBlY2U7CiAgICBYQXJyYXkqIC8qIEhDaGFyICovIHRl
eHQ7CiAKICAgIGNvbnN0IEhDaGFyKiBkdW1teV9uYW1lID0gImluc2VydF9hX3N1cHByZXNzaW9u
X25hbWVfaGVyZSI7CkBAIC0zNjgsOCArMzcxLDggQEAKIAogICAgdmdfYXNzZXJ0KGVycik7CiAK
LSAgIGVjID0gVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKTsKLSAgIHZnX2Fzc2VydChlYyk7Cisg
ICBlY2UgPSBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpOworICAgdmdfYXNzZXJ0KGVjZS5lYyk7
CiAKICAgIG5hbWUgPSBWR19URElDVF9DQUxMKHRvb2xfZ2V0X2Vycm9yX25hbWUsIGVycik7CiAg
ICBpZiAoTlVMTCA9PSBuYW1lKSB7CkBAIC00MDgsMTIgKzQxMSwxMiBAQAogICAgICAgVkdfKHhh
cHJpbnRmKSh0ZXh0LCAiICAgJXNcbiIsIHh0cmEpOwogCiAgICAvLyBQcmludCBzdGFjayB0cmFj
ZSBlbGVtZW50cwotICAgVUludCBuX2lwcyA9IFZHXyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZWMp
OworICAgVUludCBuX2lwcyA9IFZHXyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZWNlLmVjKTsKICAg
IHZnX2Fzc2VydChuX2lwcyA+IDApOwogICAgdmdfYXNzZXJ0KG5faXBzIDw9IFZHX0RFRVBFU1Rf
QkFDS1RSQUNFKTsKICAgIFZHXyhhcHBseV9TdGFja1RyYWNlKShwcmludFN1cHBGb3JJcF9ub25Y
TUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkoZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQsIGVjZS5lcG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWR18o
Z2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkoZWNlLmVjKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuX2lwcyk7CiAKICAgIFZHXyh4YXByaW50ZikodGV4dCwgIn1cbiIpOwpAQCAtNDQxLDkg
KzQ0NCw5IEBACiAKICAgICAgIC8vIFByaW50IHN0YWNrIHRyYWNlIGVsZW1lbnRzCiAgICAgICBW
R18oYXBwbHlfU3RhY2tUcmFjZSkocHJpbnRTdXBwRm9ySXBfWE1MLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGdldF9F
eGVDb250ZXh0X1N0YWNrVHJhY2UpKGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
R18oZ2V0X0V4ZUNvbnRleHRfbl9pcHMpKGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCwgZWNlLmVwb2NoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhnZXRf
RXhlQ29udGV4dF9TdGFja1RyYWNlKShlY2UuZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZHXyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZWNlLmVjKSk7CiAKICAgICAgIC8vIEFuZCBu
b3cgdGhlIGNkYXRhIGJpdAogICAgICAgLy8gWFhYIEZJWE1FISAgcHJvcGVybHkgaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIHRoZSByYXcgdGV4dApAQCAtNjM3LDcgKzY0MCw3IEBACiAvKiBDb25zdHJ1
Y3QgYW4gZXJyb3IgKi8KIHN0YXRpYwogdm9pZCBjb25zdHJ1Y3RfZXJyb3IgKCBFcnJvciogZXJy
LCBUaHJlYWRJZCB0aWQsIEVycm9yS2luZCBla2luZCwgQWRkciBhLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBIQ2hhciogcywgdm9pZCogZXh0cmEsIEV4ZUNvbnRleHQqIHdoZXJlICkK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSENoYXIqIHMsIHZvaWQqIGV4dHJhLCBFeGVD
b250ZXh0QW5kRXBvY2ggd2hlcmUgKQogewogICAgLyogRE8gTk9UIE1BS0UgdW5pcXVlX2NvdW50
ZXIgTk9OLVNUQVRJQyAqLwogICAgc3RhdGljIFVJbnQgdW5pcXVlX2NvdW50ZXIgPSAwOwpAQCAt
NjUwLDEwICs2NTMsNyBAQAogICAgZXJyLT5zdXBwICAgICA9IE5VTEw7CiAgICBlcnItPmNvdW50
ICAgID0gMTsKICAgIGVyci0+dGlkICAgICAgPSB0aWQ7Ci0gICBpZiAoTlVMTCA9PSB3aGVyZSkK
LSAgICAgZXJyLT53aGVyZSA9IFZHXyhyZWNvcmRfRXhlQ29udGV4dCkoIHRpZCwgMCApOwotICAg
ZWxzZQotICAgICAgZXJyLT53aGVyZSA9IHdoZXJlOworICAgZXJyLT53aGVyZSAgICA9IHdoZXJl
OwogCiAgICAvKiBUb29sLXJlbGV2YW50IHBhcnRzICovCiAgICBlcnItPmVraW5kICA9IGVraW5k
OwpAQCAtNzQ0LDcgKzc0NCwxMCBAQAogICAgfQogCiAgICAvKiBCdWlsZCBvdXJzZWx2ZXMgdGhl
IGVycm9yICovCi0gICBjb25zdHJ1Y3RfZXJyb3IgKCAmZXJyLCB0aWQsIGVraW5kLCBhLCBzLCBl
eHRyYSwgTlVMTCApOworICAgeyBFeGVDb250ZXh0QW5kRXBvY2ggZWNlCisgICAgICAgID0gVkdf
KHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKCBWR18ocmVjb3JkX0V4ZUNvbnRleHQpKCB0aWQs
IDAgKSApOworICAgICAgY29uc3RydWN0X2Vycm9yICggJmVyciwgdGlkLCBla2luZCwgYSwgcywg
ZXh0cmEsIGVjZSApOworICAgfQogCiAgICAvKiBGaXJzdCwgc2VlIGlmIHdlJ3ZlIGdvdCBhbiBl
cnJvciByZWNvcmQgbWF0Y2hpbmcgdGhpcyBvbmUuICovCiAgICBlbV9lcnJsaXN0X3NlYXJjaGVz
Kys7CkBAIC04NTMsNyArODU2LDggQEAKICAgIEJvb2wgJ2NvdW50X2Vycm9yJyBkaWN0YXRlcyB3
aGV0aGVyIHRvIGNvdW50IHRoZSBlcnJvciBpbiBuX2VycnNfZm91bmQuCiAqLwogQm9vbCBWR18o
dW5pcXVlX2Vycm9yKSAoIFRocmVhZElkIHRpZCwgRXJyb3JLaW5kIGVraW5kLCBBZGRyIGEsIGNv
bnN0IEhDaGFyKiBzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGV4dHJhLCBFeGVD
b250ZXh0KiB3aGVyZSwgQm9vbCBwcmludF9lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkKiBleHRyYSwgRXhlQ29udGV4dEFuZEVwb2NoIHdoZXJlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIEJvb2wgcHJpbnRfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQm9v
bCBhbGxvd19kYl9hdHRhY2gsIEJvb2wgY291bnRfZXJyb3IgKQogewogICAgRXJyb3IgZXJyOwpA
QCAtMTAxNiw3ICsxMDIwLDcgQEAKICAgICAgIHZnX2Fzc2VydCghIHhtbCk7CiAKICAgICAgIGlm
ICgoaSsxID09IFZHXyhjbG9fZHVtcF9lcnJvcikpKSB7Ci0gICAgICAgICBTdGFja1RyYWNlIGlw
cyA9IFZHXyhnZXRfRXhlQ29udGV4dF9TdGFja1RyYWNlKShwX21pbi0+d2hlcmUpOworICAgICAg
ICAgU3RhY2tUcmFjZSBpcHMgPSBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkocF9taW4t
PndoZXJlLmVjKTsKICAgICAgICAgIFZHXyh0cmFuc2xhdGUpICggMCAvKiBkdW1teSBUaHJlYWRJ
ZDsgaXJyZWxldmFudCBkdWUgdG8gZGVidWdnaW5nKi8sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlwc1swXSwgLypkZWJ1Z2dpbmcqL1RydWUsIDB4RkUvKnZlcmJvc2l0eSovLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKmJic19kb25lKi8wLApAQCAtMTUwMCw2ICsxNTA0LDcgQEAK
ICAgIGFsbG9jYXRpb25zIGFuZCB0aGUgbnIgb2YgZGVidWdpbmZvIHNlYXJjaC4gKi8KIHR5cGVk
ZWYKICAgIHN0cnVjdCB7CisgICAgICBEaUVwb2NoIGVwb2NoOyAgLy8gdXNlZCB0byBpbnRlcnBy
ZXQgLmlwcwogICAgICAgU3RhY2tUcmFjZSBpcHM7IC8vIHN0YWNrIHRyYWNlIHdlIGFyZSBsYXpp
bHkgY29tcGxldGluZy4KICAgICAgIFVXb3JkIG5faXBzOyAvLyBuciBvZiBlbGVtZW50cyBpbiBp
cHMuCiAKQEAgLTE1OTUsOSArMTYwMCwxMSBAQAogICAgICAgICAgICAgICAgICAgIHN1LT5zbmFt
ZSwKICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBzdS0+
c25hbWVfbGluZW5vKTsKLSAgICAgIH0gZWxzZQorICAgICAgfSBlbHNlIHsKICAgICAgICAgIFZH
XyhkbXNnKSgiZXJyb3JtZ3IgbWF0Y2hpbmcgZW5kIG5vIHN1cHByZXNzaW9uIG1hdGNoZWQ6XG4i
KTsKLSAgICAgIFZHXyhwcF9TdGFja1RyYWNlKSAoaXAyZm8tPmlwcywgaXAyZm8tPm5faXBzKTsK
KyAgICAgIH0KKyAgICAgIC8vIEpSUyAyNyBKdWx5IDIwMTc6IGlzIGl0IE9LIHRvIHVzZSB0aGUg
Y3VycmVudCBlcG9jaCBoZXJlPworICAgICAgVkdfKHBwX1N0YWNrVHJhY2UpIChpcDJmby0+ZXBv
Y2gsIGlwMmZvLT5pcHMsIGlwMmZvLT5uX2lwcyk7CiAgICAgICBwcF9pcDJmbyhpcDJmbyk7CiAg
ICB9CiAgICBpZiAoaXAyZm8tPm5fb2Zmc2V0c19wZXJfaXApIFZHXyhmcmVlKShpcDJmby0+bl9v
ZmZzZXRzX3Blcl9pcCk7CkBAIC0xNjYwLDcgKzE2NjcsOCBAQAogICAgICAgICAgLy8gdXAgY29t
cGFyaW5nICJtYWxsb2MiIGluIHRoZSBzdXBwcmVzc2lvbiBhZ2FpbnN0CiAgICAgICAgICAvLyAi
X3ZnclpVX2xpYmNaZHNvWmFfbWFsbG9jIiBpbiB0aGUgYmFja3RyYWNlLCBhbmQgdGhlCiAgICAg
ICAgICAvLyB0d28gb2YgdGhlbSBuZWVkIHRvIGJlIG1hZGUgdG8gbWF0Y2guCi0gICAgICAgICBp
ZiAoIVZHXyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkoaXAyZm8tPmlwc1tpeElucHV0XSwK
KyAgICAgICAgIGlmICghVkdfKGdldF9mbm5hbWVfbm9fY3h4X2RlbWFuZ2xlKShpcDJmby0+ZXBv
Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAyZm8t
Pmlwc1tpeElucHV0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmY2FsbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpKQogICAgICAgICAgICAgY2FsbGVyID0gIj8/PyI7CkBAIC0xNjgxLDcgKzE2ODks
NyBAQAogICAgICAgICAgICAgbGFzdF9leHBhbmRfcG9zX2lwcyBpcyB0aGUgbGFzdCBvZmZzZXQg
aW4gZnVuL29iaiB3aGVyZQogICAgICAgICAgICAgaXBzW3Bvc19pcHNdIGhhcyBiZWVuIGV4cGFu
ZGVkLiAqLwogCi0gICAgICAgICBpZiAoIVZHXyhnZXRfb2JqbmFtZSkoaXAyZm8tPmlwc1twb3Nf
aXBzXSwgJmNhbGxlcikpCisgICAgICAgICBpZiAoIVZHXyhnZXRfb2JqbmFtZSkoaXAyZm8tPmVw
b2NoLCBpcDJmby0+aXBzW3Bvc19pcHNdLCAmY2FsbGVyKSkKICAgICAgICAgICAgIGNhbGxlciA9
ICI/Pz8iOwogCiAgICAgICAgICAvLyBIYXZlIGFsbCBpbmxpbmVkIGNhbGxzIHBvaW50aW5nIGF0
IHRoaXMgb2JqZWN0IG5hbWUKQEAgLTE3NTEsNyArMTc1OSw3IEBACiAgICAgICAgICBjb25zdCBB
ZGRyIElQID0gaXAyZm8tPmlwc1tpcDJmby0+bl9pcHNfZXhwYW5kZWRdOwogICAgICAgICAgSW5s
SVBDdXJzb3IgKmlpcGM7CiAKLSAgICAgICAgIGlpcGMgPSBWR18obmV3X0lJUEMpKElQKTsKKyAg
ICAgICAgIGlpcGMgPSBWR18obmV3X0lJUEMpKGlwMmZvLT5lcG9jaCwgSVApOwogICAgICAgICAg
Ly8gVGhlIG9ubHkgdGhpbmcgd2UgcmVhbGx5IG5lZWQgaXMgdGhlIG5yIG9mIGlubGluZWQgZm4g
Y2FsbHMKICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIElQIHdlIHdpbGwgZXhwYW5k
LgogICAgICAgICAgLy8gSG93ZXZlciwgY29tcHV0aW5nIHRoaXMgaXMgbW9zdGx5IHRoZSBzYW1l
IGFzIGZpbmRpbmcKQEAgLTE3NjAsNyArMTc2OCw3IEBACiAgICAgICAgICAgICBjb25zdCBIQ2hh
ciAqY2FsbGVyOwogICAgICAgICAgICAgZ3Jvd19vZmZzZXRzKGlwMmZvLCBpcDJmby0+bl9leHBh
bmRlZCsxKTsKICAgICAgICAgICAgIGlwMmZvLT5mdW5fb2Zmc2V0c1tpcDJmby0+bl9leHBhbmRl
ZF0gPSBpcDJmby0+bmFtZXNfZnJlZTsKLSAgICAgICAgICAgIGlmICghVkdfKGdldF9mbm5hbWVf
bm9fY3h4X2RlbWFuZ2xlKShJUCwgCisgICAgICAgICAgICBpZiAoIVZHXyhnZXRfZm5uYW1lX25v
X2N4eF9kZW1hbmdsZSkoaXAyZm8tPmVwb2NoLCBJUCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbGxlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaXBjKSkKICAgICAgICAgICAgICAgIGNhbGxl
ciA9ICI/Pz8iOwpAQCAtMTc4OCwxOCArMTc5NiwxOCBAQAogICAgfQogfQogCi1zdGF0aWMgQm9v
bCBoYXZlSW5wdXRJbnBDICh2b2lkKiBpbnB1dENvbXBsZXRlciwgVVdvcmQgaXhJbnB1dCApCitz
dGF0aWMgQm9vbCBoYXZlSW5wdXRJbnBDICh2b2lkKiBpbnB1dENvbXBsZXRlclYsIFVXb3JkIGl4
SW5wdXQgKQogewotICAgSVB0b0Z1bk9yT2JqQ29tcGxldGVyKiBpcDJmbyA9IGlucHV0Q29tcGxl
dGVyOworICAgSVB0b0Z1bk9yT2JqQ29tcGxldGVyKiBpcDJmbyA9IChJUHRvRnVuT3JPYmpDb21w
bGV0ZXIqKWlucHV0Q29tcGxldGVyVjsKICAgIGV4cGFuZElucHV0KGlwMmZvLCBpeElucHV0KTsK
ICAgIHJldHVybiBpeElucHV0IDwgaXAyZm8tPm5fZXhwYW5kZWQ7CiB9CiAKIHN0YXRpYyBCb29s
IHN1cHBfcGF0dEVRaW5wICggY29uc3Qgdm9pZCogc3VwcGxvY1YsIGNvbnN0IHZvaWQqIGFkZHJW
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBpbnB1dENvbXBsZXRlciwgVVdv
cmQgaXhJbnB1dCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGlucHV0Q29t
cGxldGVyViwgVVdvcmQgaXhJbnB1dCApCiB7Ci0gICBjb25zdCBTdXBwTG9jKiBzdXBwbG9jID0g
c3VwcGxvY1Y7IC8qIFBBVFRFUk4gKi8KLSAgIElQdG9GdW5Pck9iakNvbXBsZXRlciogaXAyZm8g
PSBpbnB1dENvbXBsZXRlcjsKKyAgIGNvbnN0IFN1cHBMb2MqIHN1cHBsb2MgPSAoY29uc3QgU3Vw
cExvYyopc3VwcGxvY1Y7IC8qIFBBVFRFUk4gKi8KKyAgIElQdG9GdW5Pck9iakNvbXBsZXRlciog
aXAyZm8gPSAoSVB0b0Z1bk9yT2JqQ29tcGxldGVyKilpbnB1dENvbXBsZXRlclY7CiAgICBIQ2hh
ciogZnVub2JqX25hbWU7IC8vIEZ1biBvciBPYmogbmFtZS4KICAgIEJvb2wgcmV0OwogCkBAIC0x
OTI2LDggKzE5MzQsOSBAQAogICAgZW1fc3VwcGxpc3Rfc2VhcmNoZXMrKzsKIAogICAgLyogUHJl
cGFyZSB0aGUgbGF6eSBpbnB1dCBjb21wbGV0ZXIuICovCi0gICBpcDJmby5pcHMgPSBWR18oZ2V0
X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkoZXJyLT53aGVyZSk7Ci0gICBpcDJmby5uX2lwcyA9IFZH
XyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZXJyLT53aGVyZSk7CisgICBpcDJmby5lcG9jaCA9IGVy
ci0+d2hlcmUuZXBvY2g7CisgICBpcDJmby5pcHMgPSBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tU
cmFjZSkoZXJyLT53aGVyZS5lYyk7CisgICBpcDJmby5uX2lwcyA9IFZHXyhnZXRfRXhlQ29udGV4
dF9uX2lwcykoZXJyLT53aGVyZS5lYyk7CiAgICBpcDJmby5uX2lwc19leHBhbmRlZCA9IDA7CiAg
ICBpcDJmby5uX2V4cGFuZGVkID0gMDsKICAgIGlwMmZvLnN6X29mZnNldHMgPSAwOwpJbmRleDog
Y29yZWdyaW5kL21fZXhlY29udGV4dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2V4ZWNv
bnRleHQuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9leGVjb250ZXh0LmMJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qLS0tIEV4cG9y
dGVkIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KKy8q
LS0tIEV4ZUNvbnRleHQgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIEV4ZUNvbnRleHQqIHJlY29yZF9FeGVDb250ZXh0X3dy
azIgKCBjb25zdCBBZGRyKiBpcHMsIFVJbnQgbl9pcHMgKTsKQEAgLTE2OSw3ICsxNjksOSBAQAog
ICAgICAgICAgZm9yIChlYyA9IGVjX2h0YWJbaV07IGVjOyBlYyA9IGVjLT5jaGFpbikgewogICAg
ICAgICAgICAgVkdfKG1lc3NhZ2UpKFZnX0RlYnVnTXNnLCAiICAgZXhlY3R4OiBzdGFja3RyYWNl
IGVjdSAldSBuX2lwcyAldVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBlYy0+ZWN1LCBl
Yy0+bl9pcHMpOwotICAgICAgICAgICAgVkdfKHBwX1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+
bl9pcHMgKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIEpSUyAyNyBKdWx5IDIwMTc6IGlzIGEgZmFr
ZSBlcG9jaCBoZXJlIE9LPworICAgICAgICAgICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50X0Rp
RXBvY2gpKCk7CisgICAgICAgICAgICBWR18ocHBfU3RhY2tUcmFjZSkoIGVwLCBlYy0+aXBzLCBl
Yy0+bl9pcHMgKTsKICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIFZHXyhtZXNzYWdlKShWZ19E
ZWJ1Z01zZywgCkBAIC0yMDIsMTMgKzIwNCw2IEBACiB9CiAKIAotLyogUHJpbnQgYW4gRXhlQ29u
dGV4dC4gKi8KLXZvaWQgVkdfKHBwX0V4ZUNvbnRleHQpICggRXhlQ29udGV4dCogZWMgKQotewot
ICAgVkdfKHBwX1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+bl9pcHMgKTsKLX0KLQotCiAvKiBD
b21wYXJlIHR3byBFeGVDb250ZXh0cy4gIE51bWJlciBvZiBjYWxsZXJzIGNvbnNpZGVyZWQgZGVw
ZW5kcyBvbiByZXMuICovCiBCb29sIFZHXyhlcV9FeGVDb250ZXh0KSAoIFZnUmVzIHJlcywgY29u
c3QgRXhlQ29udGV4dCogZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4ZUNv
bnRleHQqIGUyICkKQEAgLTU0NCwxMiArNTM5LDQ4IEBACiAgICByZXR1cm4gcmVjb3JkX0V4ZUNv
bnRleHRfd3JrMihpcHMsIG5faXBzKTsKIH0KIAotRXhlQ29udGV4dCogVkdfKG51bGxfRXhlQ29u
dGV4dCkgKHZvaWQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIEV4ZUNvbnRleHRBbmRFcG9jaCBmdW5jdGlv
bnMuICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworRXhlQ29udGV4dEFu
ZEVwb2NoIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKSggRXhlQ29udGV4dCogZWMgKQog
eworICAgRXhlQ29udGV4dEFuZEVwb2NoIGVjZTsKKyAgIGVjZS5lYyAgICA9IGVjOworICAgZWNl
LmVwb2NoID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKyAgIHJldHVybiBlY2U7Cit9CisKK0V4
ZUNvbnRleHRBbmRFcG9jaCBWR18oaW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpICggdm9pZCAp
Cit7CisgICBFeGVDb250ZXh0QW5kRXBvY2ggZWNlOworICAgZWNlLmVjICAgICAgPSBOVUxMLypp
bnZhbGlkIEV4ZUNvbnRleHQqLzsKKyAgIGVjZS5lcG9jaC5uID0gMC8qaW52YWxpZCBlcG9jaCov
OworICAgcmV0dXJuIGVjZTsKK30KKworCit2b2lkIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gp
ICggRXhlQ29udGV4dEFuZEVwb2NoIGVjZSApCit7CisgICBWR18ocHBfU3RhY2tUcmFjZSkoIGVj
ZS5lcG9jaCwgZWNlLmVjLT5pcHMsIGVjZS5lYy0+bl9pcHMgKTsKK30KKworRXhlQ29udGV4dEFu
ZEVwb2NoIFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCB2b2lkICkKK3sKICAgIGluaXRf
RXhlQ29udGV4dF9zdG9yYWdlKCk7Ci0gICByZXR1cm4gbnVsbF9FeGVDb250ZXh0OworICAgRXhl
Q29udGV4dEFuZEVwb2NoIGVjZQorICAgICAgPSBta19FeGVDb250ZXh0QW5kRXBvY2gobnVsbF9F
eGVDb250ZXh0LCBWR18oY3VycmVudF9EaUVwb2NoKSgpKTsKKyAgIHJldHVybiBlY2U7CiB9CiAK
K0Jvb2wgVkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2NoKSggRXhlQ29udGV4dEFuZEVwb2No
IGVjZSApCit7CisgICBpbml0X0V4ZUNvbnRleHRfc3RvcmFnZSgpOworICAgcmV0dXJuIGVjZS5l
YyA9PSBudWxsX0V4ZUNvbnRleHQ7Cit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLSBlbmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leGVjb250ZXh0LmMg
LS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpJbmRleDogY29yZWdyaW5kL21fZ2Ric2VydmVyL21fZ2Ri
c2VydmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZ2Ric2VydmVyL21fZ2Ric2VydmVy
LmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fZ2Ric2VydmVyL21fZ2Ric2VydmVy
LmMJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxNCArMTQyLDE3IEBACiAgICBQdHJkaWZmVCBvZmZz
ZXQ7CiAgICBpZiAodyA9PSAyKSB3ID0gMDsKIAorICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAx
NzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3Vy
cmVudF9EaUVwb2NoKSgpOworCiAgICBpZiAoaXNfY29kZSkgewogICAgICAgY29uc3QgSENoYXIg
Km5hbWU7Ci0gICAgICBuYW1lID0gVkdfKGRlc2NyaWJlX0lQKSAoYWRkciwgTlVMTCk7CisgICAg
ICBuYW1lID0gVkdfKGRlc2NyaWJlX0lQKSAoZXAsIGFkZHIsIE5VTEwpOwogICAgICAgaWYgKGJ1
Zlt3XSkgVkdfKGZyZWUpKGJ1Zlt3XSk7CiAgICAgICBidWZbd10gPSBWR18oc3RyZHVwKSgiZ2Ri
c2VydmVyIHN5bSIsIG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgIGNvbnN0IEhDaGFyICpuYW1l
OwotICAgICAgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQpIChhZGRyLCAmbmFtZSwgJm9mZnNl
dCk7CisgICAgICBWR18oZ2V0X2RhdGFzeW1fYW5kX29mZnNldCkgKGVwLCBhZGRyLCAmbmFtZSwg
Jm9mZnNldCk7CiAgICAgICBpZiAoYnVmW3ddKSBWR18oZnJlZSkoYnVmW3ddKTsKICAgICAgIGJ1
Zlt3XSA9IFZHXyhzdHJkdXApKCJnZGJzZXJ2ZXIgc3ltIiwgbmFtZSk7CiAgICB9CkluZGV4OiBj
b3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvc2VydmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21f
Z2Ric2VydmVyL3NlcnZlci5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX2dkYnNl
cnZlci9zZXJ2ZXIuYwkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw5IEBACiAgICBpbnQg
ICBrd2RpZDsKICAgIGludCBpbnRfdmFsdWU7CiAKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5IDIw
MTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1
cnJlbnRfRGlFcG9jaCkoKTsKKwogICAgdmdfYXNzZXJ0IChpbml0aWFsX3ZhbGdyaW5kX3Npbmtf
c2F2ZWQpOwogCiAgICBzdHJjcHkgKHMsIG1vbik7CkBAIC0zMzQsNyArMzM3LDcgQEAKICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChob3N0dmlzaWJpbGl0eSkgewogICAgICAgICAgICAgY29uc3Qg
RGVidWdJbmZvICp0b29sZGkgCi0gICAgICAgICAgICAgICA9IFZHXyhmaW5kX0RlYnVnSW5mbykg
KChBZGRyKWhhbmRsZV9nZGJfdmFsZ3JpbmRfY29tbWFuZCk7CisgICAgICAgICAgICAgICA9IFZH
XyhmaW5kX0RlYnVnSW5mbykgKGVwLCAoQWRkciloYW5kbGVfZ2RiX3ZhbGdyaW5kX2NvbW1hbmQp
OwogICAgICAgICAgICAgLyogTm9ybWFsbHksIHdlIHNob3VsZCBhbHdheXMgZmluZCB0aGUgdG9v
bGRpLiBJbiBjYXNlIHdlCiAgICAgICAgICAgICAgICBkbyBub3QsIHN1Z2dlc3QgYSAnbGlrZWx5
IHNvbWV3aGF0IHdvcmtpbmcnIGFkZHJlc3M6ICovCiAgICAgICAgICAgICBjb25zdCBBZGRyIHRv
b2xfdGV4dF9zdGFydApAQCAtNDQyLDcgKzQ0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teV9zeiwgJnNzYXZlcHRyKSkgewogICAgICAg
ICAgICAgLy8gSWYgdG9vbCBwcm92aWRlcyBsb2NhdGlvbiBpbmZvcm1hdGlvbiwgdXNlIHRoYXQu
CiAgICAgICAgICAgICBpZiAoVkdfKG5lZWRzKS5pbmZvX2xvY2F0aW9uKSB7Ci0gICAgICAgICAg
ICAgICBWR19URElDVF9DQUxMKHRvb2xfaW5mb19sb2NhdGlvbiwgYWRkcmVzcyk7CisgICAgICAg
ICAgICAgICBWR19URElDVF9DQUxMKHRvb2xfaW5mb19sb2NhdGlvbiwgZXAsIGFkZHJlc3MpOwog
ICAgICAgICAgICAgfSAKICAgICAgICAgICAgIC8vIElmIHRvb2wgZG9lcyBub3QgcHJvdmlkZSBs
b2NhdGlvbiBpbmZvLCB1c2UgdGhlIGNvbW1vbiBvbmUuCiAgICAgICAgICAgICAvLyBBbHNvIHVz
ZSB0aGUgY29tbW9uIHRvIGNvbXBhcmUgd2l0aCB0b29sIHdoZW4gZGVidWcgbG9nIGlzIHNldC4K
QEAgLTQ0OSw3ICs0NTIsNyBAQAogICAgICAgICAgICAgaWYgKCFWR18obmVlZHMpLmluZm9fbG9j
YXRpb24gfHwgVkdfKGRlYnVnTG9nX2dldExldmVsKSgpID4gMCApIHsKICAgICAgICAgICAgICAg
IEFkZHJJbmZvIGFpOwogICAgICAgICAgICAgICAgYWkudGFnID0gQWRkcl9VbmRlc2NyaWJlZDsK
LSAgICAgICAgICAgICAgIFZHXyhkZXNjcmliZV9hZGRyKSAoYWRkcmVzcywgJmFpKTsKKyAgICAg
ICAgICAgICAgIFZHXyhkZXNjcmliZV9hZGRyKSAoZXAsIGFkZHJlc3MsICZhaSk7CiAgICAgICAg
ICAgICAgICBWR18ocHBfYWRkcmluZm8pIChhZGRyZXNzLCAmYWkpOwogICAgICAgICAgICAgICAg
VkdfKGNsZWFyX2FkZHJpbmZvKSAoJmFpKTsKICAgICAgICAgICAgIH0KSW5kZXg6IGNvcmVncmlu
ZC9tX2dkYnNlcnZlci90YXJnZXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9nZGJzZXJ2
ZXIvdGFyZ2V0LmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fZ2Ric2VydmVyL3Rh
cmdldC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDEwIEBACiBzdGF0aWMKIGNvbnN0
IEhDaGFyKiBzeW0gKEFkZHIgYWRkcikKIHsKLSAgIHJldHVybiBWR18oZGVzY3JpYmVfSVApIChh
ZGRyLCBOVUxMKTsKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5IDIwMTc6IEhBQ0shICBJcyB0aGlz
IGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsK
KworICAgcmV0dXJuIFZHXyhkZXNjcmliZV9JUCkgKGVwLCBhZGRyLCBOVUxMKTsKIH0KIAogVGhy
ZWFkSWQgdmdkYl9pbnRlcnJ1cHRlZF90aWQgPSAwOwpJbmRleDogY29yZWdyaW5kL21fZ2Ric2Vy
dmVyL3ZhbGdyaW5kLWxvdy1hcm0uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9nZGJzZXJ2
ZXIvdmFsZ3JpbmQtbG93LWFybS5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX2dk
YnNlcnZlci92YWxncmluZC1sb3ctYXJtLmMJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDks
MTIgQEAKICAgICAgIC8vIHRoZSBkZWJ1ZyBpbmZvIHdpdGggdGhlIGJpdDAgc2V0CiAgICAgICAv
LyAod2h5IGNhbid0IGRlYnVnIGluZm8gZG8gdGhhdCBmb3IgdXMgPz8/KQogICAgICAgLy8gKHdo
eSBpZiB0aGlzIGlzIGEgNCBieXRlcyB0aHVtYiBpbnN0cnVjdGlvbiA/Pz8pCi0gICAgICBpZiAo
VkdfKGdldF9mbm5hbWVfcmF3KSAocGMgfCAxLCAmZm5uYW1lKSkgewotICAgICAgICAgaWYgKFZH
Xyhsb29rdXBfc3ltYm9sX1NMT1cpKCAiKiIsIGZubmFtZSwgJmF2bWFzICkpIHsKKworICAgICAg
Ly8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgICAg
IGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworCisgICAgICBpZiAo
VkdfKGdldF9mbm5hbWVfcmF3KSAoZXAsIHBjIHwgMSwgJmZubmFtZSkpIHsKKyAgICAgICAgIGlm
IChWR18obG9va3VwX3N5bWJvbF9TTE9XKSggZXAsICIqIiwgZm5uYW1lLCAmYXZtYXMgKSkgewog
ICAgICAgICAgICAgZGxvZyAoMSwgImZubmFtZSAlcyBsb29rdXBzeW0gJXAgPT4gJXAgJXMuXG4i
LAogICAgICAgICAgICAgICAgICAgZm5uYW1lLCBDMnYoYXZtYXMubWFpbiksIEMydihwYyksCiAg
ICAgICAgICAgICAgICAgICAoYXZtYXMubWFpbiAmIDEgPyAidGh1bWIiIDogImFybSIpKTsKSW5k
ZXg6IGNvcmVncmluZC9tX2dkYnNlcnZlci92YWxncmluZC1sb3ctbWlwczMyLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY29yZWdyaW5kL21fZ2Ric2VydmVyL3ZhbGdyaW5kLWxvdy1taXBzMzIuYwkocmV2aXNp
b24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvdmFsZ3JpbmQtbG93LW1pcHMzMi5j
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDExIEBACiAgICAvKiBNYWtlIHN1cmUgd2Ug
ZG9uJ3Qgc2NhbiBiYWNrIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50CiAgICAg
ICBmdW5jdGlvbiwgc2luY2Ugd2UgbWF5IGZldGNoIGNvbnN0YW50IGRhdGEgb3IgaW5zbnMgdGhh
dCBsb29rIGxpa2UKICAgICAgIGEganVtcC4gKi8KLSAgIGlmIChWR18oZ2V0X2luc3Rfb2Zmc2V0
X2luX2Z1bmN0aW9uKSAoYnBhZGRyLCAmb2Zmc2V0KSkgeworCisgICAvLyBGSVhNRSBKUlMgMjgg
SnVseSAyMDE3OiBIQUNLISAgSXMgdGhpcyBjb3JyZWN0PworICAgY29uc3QgRGlFcG9jaCBlcCA9
IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CisKKyAgIGlmIChWR18oZ2V0X2luc3Rfb2Zmc2V0X2lu
X2Z1bmN0aW9uKSAoZXAsIGJwYWRkciwgJm9mZnNldCkpIHsKICAgICAgIGZ1bmNfYWRkciA9IGJw
YWRkciAtIG9mZnNldDsKICAgICAgIGlmIChmdW5jX2FkZHIgPiBib3VuZGFyeSAmJiBmdW5jX2Fk
ZHIgPD0gYnBhZGRyKQogICAgICAgICAgYm91bmRhcnkgPSBmdW5jX2FkZHI7CkluZGV4OiBjb3Jl
Z3JpbmQvbV9nZGJzZXJ2ZXIvdmFsZ3JpbmQtbG93LW1pcHM2NC5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNv
cmVncmluZC9tX2dkYnNlcnZlci92YWxncmluZC1sb3ctbWlwczY0LmMJKHJldmlzaW9uIDE2NDY1
KQorKysgY29yZWdyaW5kL21fZ2Ric2VydmVyL3ZhbGdyaW5kLWxvdy1taXBzNjQuYwkod29ya2lu
ZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSwxMSBAQAogICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IHNj
YW4gYmFjayBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudAogICAgICAgZnVuY3Rp
b24sIHNpbmNlIHdlIG1heSBmZXRjaCBjb25zdGFudCBkYXRhIG9yIGluc25zIHRoYXQgbG9vayBs
aWtlCiAgICAgICBhIGp1bXAuICovCi0gICBpZiAoVkdfKGdldF9pbnN0X29mZnNldF9pbl9mdW5j
dGlvbikgKGJwYWRkciwgJm9mZnNldCkpIHsKKworICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAx
NzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3Vy
cmVudF9EaUVwb2NoKSgpOworCisgICBpZiAoVkdfKGdldF9pbnN0X29mZnNldF9pbl9mdW5jdGlv
bikgKGVwLCBicGFkZHIsICZvZmZzZXQpKSB7CiAgICAgICBmdW5jX2FkZHIgPSBicGFkZHIgLSBv
ZmZzZXQ7CiAgICAgICBpZiAoZnVuY19hZGRyID4gYm91bmRhcnkgJiYgZnVuY19hZGRyIDw9IGJw
YWRkcikKICAgICAgICAgIGJvdW5kYXJ5ID0gZnVuY19hZGRyOwpJbmRleDogY29yZWdyaW5kL21f
bGliY2Fzc2VydC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2xpYmNhc3NlcnQuYwkocmV2
aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9saWJjYXNzZXJ0LmMJKHdvcmtpbmcgY29weSkK
QEAgLTM2OSw3ICszNjksNyBAQAogICAgICAgICAgKTsKICAgICAgIFZHXyhwcmludGYpKCJcbmhv
c3Qgc3RhY2t0cmFjZTpcbiIpOyAKICAgICAgIFZHXyhjbG9feG1sKSA9IEZhbHNlOwotICAgICAg
VkdfKHBwX1N0YWNrVHJhY2UpIChpcHMsIG5faXBzKTsKKyAgICAgIFZHXyhwcF9TdGFja1RyYWNl
KSAoVkdfKGN1cnJlbnRfRGlFcG9jaCkoKSwgaXBzLCBuX2lwcyk7CiAgICAgICBWR18oY2xvX3ht
bCkgPSBzYXZlX2Nsb194bWw7CiAgICB9CiAKSW5kZXg6IGNvcmVncmluZC9tX21haW4uYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9tYWluLmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdy
aW5kL21fbWFpbi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDEwIEBACiAiICAgIC0t
ZXJyb3ItZXhpdGNvZGU9PG51bWJlcj4gZXhpdCBjb2RlIHRvIHJldHVybiBpZiBlcnJvcnMgZm91
bmQgWzA9ZGlzYWJsZV1cbiIKICIgICAgLS1lcnJvci1tYXJrZXJzPTxiZWdpbj4sPGVuZD4gYWRk
IGxpbmVzIHdpdGggYmVnaW4vZW5kIG1hcmtlcnMgYmVmb3JlL2FmdGVyXG4iCiAiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWFjaCBlcnJvciBvdXRwdXQgaW4gcGxhaW4gdGV4dCBtb2Rl
IFtub25lXVxuIgorIiAgICAtLWtlZXAtZGVidWdpbmZvPW5vfHllcyAgIEtlZXAgc3ltYm9scyBl
dGMgZm9yIHVubG9hZGVkIGNvZGUgW25vXVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRoaXMgYWxsb3dzIHN0YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvXG4iCisiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29k
ZSB0aGF0IGhhcyBiZWVuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxjbG9z
ZSdkIChvciBzaW1pbGFyKVxuIgogIiAgICAtLXNob3ctYmVsb3ctbWFpbj1ub3x5ZXMgIGNvbnRp
bnVlIHN0YWNrIHRyYWNlcyBiZWxvdyBtYWluKCkgW25vXVxuIgogIiAgICAtLWRlZmF1bHQtc3Vw
cHJlc3Npb25zPXllc3xub1xuIgogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQg
ZGVmYXVsdCBzdXBwcmVzc2lvbnMgW3llc11cbiIKQEAgLTYyNiw2ICs2MzAsNyBAQAogICAgICAg
ZWxzZSBpZiBWR19CT09MX0NMTyhhcmcsICItLXJ1bi1saWJjLWZyZWVyZXMiLCBWR18oY2xvX3J1
bl9saWJjX2ZyZWVyZXMpKSB7fQogICAgICAgZWxzZSBpZiBWR19CT09MX0NMTyhhcmcsICItLXJ1
bi1jeHgtZnJlZXJlcyIsICBWR18oY2xvX3J1bl9jeHhfZnJlZXJlcykpIHt9CiAgICAgICBlbHNl
IGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tc2hvdy1iZWxvdy1tYWluIiwgIFZHXyhjbG9fc2hvd19i
ZWxvd19tYWluKSkge30KKyAgICAgIGVsc2UgaWYgVkdfQk9PTF9DTE8oYXJnLCAiLS1rZWVwLWRl
YnVnaW5mbyIsICAgVkdfKGNsb19rZWVwX2RlYnVnaW5mbykpIHt9CiAgICAgICBlbHNlIGlmIFZH
X0JPT0xfQ0xPKGFyZywgIi0tdGltZS1zdGFtcCIsICAgICAgIFZHXyhjbG9fdGltZV9zdGFtcCkp
IHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tdHJhY2stZmRzIiwgICAgICAg
IFZHXyhjbG9fdHJhY2tfZmRzKSkge30KICAgICAgIGVsc2UgaWYgVkdfQk9PTF9DTE8oYXJnLCAi
LS10cmFjZS1jaGlsZHJlbiIsICAgVkdfKGNsb190cmFjZV9jaGlsZHJlbikpIHt9CkluZGV4OiBj
b3JlZ3JpbmQvbV9vcHRpb25zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fb3B0aW9ucy5j
CShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX29wdGlvbnMuYwkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDYgKzEyOSw3IEBACiBCb29sICAgVkdfKGNsb19ydW5fY3h4X2ZyZWVyZXMpID0g
VHJ1ZTsKIEJvb2wgICBWR18oY2xvX3RyYWNrX2ZkcykgICAgICA9IEZhbHNlOwogQm9vbCAgIFZH
XyhjbG9fc2hvd19iZWxvd19tYWluKT0gRmFsc2U7CitCb29sICAgVkdfKGNsb19rZWVwX2RlYnVn
aW5mbykgPSBGYWxzZTsKIEJvb2wgICBWR18oY2xvX3Nob3dfZW13YXJucykgICA9IEZhbHNlOwog
V29yZCAgIFZHXyhjbG9fbWF4X3N0YWNrZnJhbWUpID0gMjAwMDAwMDsKIFVJbnQgICBWR18oY2xv
X21heF90aHJlYWRzKSAgICA9IE1BWF9USFJFQURTX0RFRkFVTFQ7CkluZGV4OiBjb3JlZ3JpbmQv
bV9yZWRpci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3JlZGlyLmMJKHJldmlzaW9uIDE2
NDY1KQorKysgY29yZWdyaW5kL21fcmVkaXIuYwkod29ya2luZyBjb3B5KQpAQCAtMTg1OSw4ICsx
ODU5LDkgQEAKIHsKICAgIEJvb2wgb2s7CiAgICBjb25zdCBIQ2hhciAqYnVmOwotIAotICAgb2sg
PSBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoYWN0LT5mcm9tX2FkZHIsICZidWYpOworCisgICBE
aUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsgCisgICBvayA9IFZHXyhnZXRfZm5u
YW1lX3dfb2Zmc2V0KShlcCwgYWN0LT5mcm9tX2FkZHIsICZidWYpOwogICAgaWYgKCFvaykgYnVm
ID0gIj8/PyI7CiAgICAvLyBTdGFzaCBhd2F5IG5hbWUxCiAgICBIQ2hhciBuYW1lMVtWR18oc3Ry
bGVuKShidWYpICsgMV07CkBAIC0xODY3LDcgKzE4NjgsNyBAQAogICAgVkdfKHN0cmNweSkobmFt
ZTEsIGJ1Zik7CiAKICAgIGNvbnN0IEhDaGFyICpuYW1lMjsKLSAgIG9rID0gVkdfKGdldF9mbm5h
bWVfd19vZmZzZXQpKGFjdC0+dG9fYWRkciwgJm5hbWUyKTsKKyAgIG9rID0gVkdfKGdldF9mbm5h
bWVfd19vZmZzZXQpKGVwLCBhY3QtPnRvX2FkZHIsICZuYW1lMik7CiAgICBpZiAoIW9rKSBuYW1l
MiA9ICI/Pz8iOwogCiAgICBWR18obWVzc2FnZSkoVmdfRGVidWdNc2csICIlczB4JTA4bHggKCUt
MjBzKSAlcy0+ICglMDRkLiVkKSAweCUwOGx4ICVzXG4iLCAKSW5kZXg6IGNvcmVncmluZC9tX3Ni
cHJvZmlsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3NicHJvZmlsZS5jCShyZXZpc2lv
biAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3NicHJvZmlsZS5jCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw2ICs3NCw5IEBACiAKICAgIFZHXyhwcmludGYpKCJUb3RhbCBzY29yZSA9ICUnbGx1XG5cbiIs
IHNjb3JlX3RvdGFsKTsKIAorICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogdGhpcyBpcyBw
cm9iYWJseSBub3QgcmlnaHQgaW4gZ2VuZXJhbAorICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50
X0RpRXBvY2gpKCk7CisKICAgIC8qIFByaW50IGFuIGluaXRpYWwgcGVyLWJsb2NrIHN1bW1hcnku
ICovCiAgICBWR18ocHJpbnRmKSgicmFuayAgLS0tY3VtdWxhdGl2ZS0tLSAgICAgIC0tLS0tc2Vs
Zi0tLS0tXG4iKTsKICAgIHNjb3JlX2N1bXVsID0gMDsKQEAgLTg0LDcgKzg3LDcgQEAKICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICBjb25zdCBIQ2hhciAqbmFtZTsKLSAgICAgIFZHXyhnZXRf
Zm5uYW1lX3dfb2Zmc2V0KSh0b3BzW3JdLmFkZHIsICZuYW1lKTsKKyAgICAgIFZHXyhnZXRfZm5u
YW1lX3dfb2Zmc2V0KShlcCwgdG9wc1tyXS5hZGRyLCAmbmFtZSk7CiAKICAgICAgIHNjb3JlX2hl
cmUgPSB0b3BzW3JdLnNjb3JlOwogICAgICAgc2NvcmVfY3VtdWwgKz0gc2NvcmVfaGVyZTsKQEAg
LTEyMyw3ICsxMjYsNyBAQAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgIGNvbnN0
IEhDaGFyICpuYW1lOwotICAgICAgICAgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKHRvcHNbcl0u
YWRkciwgJm5hbWUpOworICAgICAgICAgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKGVwLCB0b3Bz
W3JdLmFkZHIsICZuYW1lKTsKIAogICAgICAgICAgc2NvcmVfaGVyZSA9IHRvcHNbcl0uc2NvcmU7
CiAgICAgICAgICBzY29yZV9jdW11bCArPSBzY29yZV9oZXJlOwpAQCAtMTU5LDcgKzE2Miw3IEBA
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgY29uc3QgSENoYXIgKm5hbWU7Ci0g
ICAgICAgICBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkodG9wc1tyXS5hZGRyLCAmbmFtZSk7Cisg
ICAgICAgICBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoZXAsIHRvcHNbcl0uYWRkciwgJm5hbWUp
OwogCiAgICAgICAgICBzY29yZV9oZXJlID0gdG9wc1tyXS5zY29yZTsKIApJbmRleDogY29yZWdy
aW5kL21fc2NoZWR1bGVyL3NjaGVkdWxlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3Nj
aGVkdWxlci9zY2hlZHVsZXIuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9zY2hl
ZHVsZXIvc2NoZWR1bGVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTIwMzcsOCArMjAzNywxMiBAQAog
CiAgICAgICAgICBWR18obWVtc2V0KShidWY2NCwgMCwgNjQpOwogICAgICAgICAgVUludCBsaW5l
bnVtID0gMDsKKworICAgICAgICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElz
IHRoaXMgY29ycmVjdD8KKyAgICAgICAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9E
aUVwb2NoKSgpOworCiAgICAgICAgICBCb29sIG9rID0gVkdfKGdldF9maWxlbmFtZV9saW5lbnVt
KSgKLSAgICAgICAgICAgICAgICAgICAgICBpcCwgJmJ1ZiwgTlVMTCwgJmxpbmVudW0KKyAgICAg
ICAgICAgICAgICAgICAgICBlcCwgaXAsICZidWYsIE5VTEwsICZsaW5lbnVtCiAgICAgICAgICAg
ICAgICAgICAgKTsKICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgLyogRm9yIGJhY2t3
YXJkIGNvbXBhdGliaWxpdHkgdHJ1bmNhdGUgdGhlIGZpbGVuYW1lIHRvCkluZGV4OiBjb3JlZ3Jp
bmQvbV9zaWduYWxzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fc2lnbmFscy5jCShyZXZp
c2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3NpZ25hbHMuYwkod29ya2luZyBjb3B5KQpAQCAt
MTg3OCw3ICsxODc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICA6IFZHXyhyZWNvcmRfZGVw
dGhfMV9FeGVDb250ZXh0KSggdGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9pcF9kZWx0YSApOwogICAgICAgICAgdmdfYXNz
ZXJ0KGVjKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggZWMgKTsKKyAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCko
ZWMpICk7CiAgICAgICB9CiAgICAgICBpZiAoc2lnTm8gPT0gVktJX1NJR1NFR1YgCiAgICAgICAg
ICAgJiYgaXNfc2lnbmFsX2Zyb21fa2VybmVsKHRpZCwgc2lnTm8sIGluZm8tPnNpX2NvZGUpCklu
ZGV4OiBjb3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21f
c3RhY2t0cmFjZS5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3N0YWNrdHJhY2Uu
Ywkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDYgKzQ0Niw3IEBACiAgICAgICAvKiBBbmQsIHNpbWls
YXJseSwgdHJ5IGZvciBNU1ZDIEZQTyB1bndpbmQgaW5mby4gKi8KICAgICAgIGlmIChGUE9faW5m
b19wcmVzZW50CiAgICAgICAgICAgJiYgVkdfKHVzZV9GUE9faW5mbykoICZ1cmVncy54aXAsICZ1
cmVncy54c3AsICZ1cmVncy54YnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZH
XyhjdXJyZW50X0RpRXBvY2gpKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZw
X21pbiwgZnBfbWF4ICkgKSB7CiAgICAgICAgICBpZiAoZGVidWcpIHVud2luZF9jYXNlID0gIk1T
IjsKICAgICAgICAgIGlmIChkb19zdGF0cykgc3RhdHMuTVMrKzsKQEAgLTE1MzksMTIgKzE1NDAs
MTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX2hpZ2hl
c3RfYnl0ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50SXBEZXNjKFVJbnQgbiwgQWRkciBpcCwg
dm9pZCogdXVfb3BhcXVlKQorc3RhdGljIHZvaWQgcHJpbnRJcERlc2MoVUludCBuLCBEaUVwb2No
IGVwLCBBZGRyIGlwLCB2b2lkKiB1dV9vcGFxdWUpCiB7Ci0gICBJbmxJUEN1cnNvciAqaWlwYyA9
IFZHXyhuZXdfSUlQQykoaXApOworICAgSW5sSVBDdXJzb3IgKmlpcGMgPSBWR18obmV3X0lJUEMp
KGVwLCBpcCk7CiAKICAgIGRvIHsKLSAgICAgIGNvbnN0IEhDaGFyICpidWYgPSBWR18oZGVzY3Jp
YmVfSVApKGlwLCBpaXBjKTsKKyAgICAgIGNvbnN0IEhDaGFyICpidWYgPSBWR18oZGVzY3JpYmVf
SVApKGVwLCBpcCwgaWlwYyk7CiAgICAgICBpZiAoVkdfKGNsb194bWwpKSB7CiAgICAgICAgICBW
R18ocHJpbnRmX3htbCkoIiAgICAlc1xuIiwgYnVmKTsKICAgICAgIH0gZWxzZSB7CkBAIC0xNTU4
LDcgKzE1NTksNyBAQAogfQogCiAvKiBQcmludCBhIFN0YWNrVHJhY2UuICovCi12b2lkIFZHXyhw
cF9TdGFja1RyYWNlKSAoIFN0YWNrVHJhY2UgaXBzLCBVSW50IG5faXBzICkKK3ZvaWQgVkdfKHBw
X1N0YWNrVHJhY2UpICggRGlFcG9jaCBlcCwgU3RhY2tUcmFjZSBpcHMsIFVJbnQgbl9pcHMgKQog
ewogICAgdmdfYXNzZXJ0KCBuX2lwcyA+IDAgKTsKIApAQCAtMTU2NSw3ICsxNTY2LDcgQEAKICAg
IGlmIChWR18oY2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgPHN0YWNrPlxuIik7
CiAKLSAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJpbnRJcERlc2MsIE5VTEwsIGlwcywgbl9p
cHMgKTsKKyAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJpbnRJcERlc2MsIE5VTEwsIGVwLCBp
cHMsIG5faXBzICk7CiAKICAgIGlmIChWR18oY2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRmX3ht
bCkoIiAgPC9zdGFjaz5cbiIpOwpAQCAtMTU4MCwxMyArMTU4MSwxMyBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwvKmFycmF5IHRvIGR1bXAgU1AgdmFsdWVzIGluKi8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTC8qYXJyYXkgdG8gZHVtcCBGUCB2YWx1ZXMgaW4q
LywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLypmaXJzdF9pcF9kZWx0YSovKTsKLSAg
IFZHXyhwcF9TdGFja1RyYWNlKShpcHMsIG5faXBzKTsKKyAgIFZHXyhwcF9TdGFja1RyYWNlKShW
R18oY3VycmVudF9EaUVwb2NoKSgpLCBpcHMsIG5faXBzKTsKIH0KIAogdm9pZCBWR18oYXBwbHlf
U3RhY2tUcmFjZSkoCi0gICAgICAgIHZvaWQoKmFjdGlvbikoVUludCBuLCBBZGRyIGlwLCB2b2lk
KiBvcGFxdWUpLAorICAgICAgICB2b2lkKCphY3Rpb24pKFVJbnQgbiwgRGlFcG9jaCBlcCwgQWRk
ciBpcCwgdm9pZCogb3BhcXVlKSwKICAgICAgICAgdm9pZCogb3BhcXVlLAotICAgICAgICBTdGFj
a1RyYWNlIGlwcywgVUludCBuX2lwcworICAgICAgICBEaUVwb2NoIGVwLCBTdGFja1RyYWNlIGlw
cywgVUludCBuX2lwcwogICAgICApCiB7CiAgICBJbnQgaTsKQEAgLTE1OTcsNyArMTU5OCw3IEBA
CiAgICAgICAvLyBvciB0aGUgbGFzdCBhcHBlYXJhbmNlIG9mIGEgYmVsb3cgbWFpbiBmdW5jdGlv
bi4KICAgICAgIC8vIFRoZW4gZGVjcmVhc2Ugbl9pcHMgc28gYXMgdG8gbm90IGNhbGwgYWN0aW9u
IGZvciB0aGUgYmVsb3cgbWFpbgogICAgICAgZm9yIChpID0gbl9pcHMgLSAxOyBpID49IDA7IGkt
LSkgewotICAgICAgICAgVmdfRm5OYW1lS2luZCBraW5kID0gVkdfKGdldF9mbm5hbWVfa2luZF9m
cm9tX0lQKShpcHNbaV0pOworICAgICAgICAgVmdfRm5OYW1lS2luZCBraW5kID0gVkdfKGdldF9m
bm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAgICAgICAgIGlmIChWZ19Gbk5hbWVN
YWluID09IGtpbmQgfHwgVmdfRm5OYW1lQmVsb3dNYWluID09IGtpbmQpCiAgICAgICAgICAgICBu
X2lwcyA9IGkgKyAxOwogICAgICAgICAgaWYgKFZnX0ZuTmFtZU1haW4gPT0ga2luZCkKQEAgLTE2
MDcsNyArMTYwOCw3IEBACiAKICAgIGZvciAoaSA9IDA7IGkgPCBuX2lwczsgaSsrKQogICAgICAg
Ly8gQWN0IG9uIHRoZSBpcAotICAgICAgYWN0aW9uKGksIGlwc1tpXSwgb3BhcXVlKTsKKyAgICAg
IGFjdGlvbihpLCBlcCwgaXBzW2ldLCBvcGFxdWUpOwogfQogCiAKSW5kZXg6IGNvcmVncmluZC9t
X3N5c3dyYXAvc3lzd3JhcC1nZW5lcmljLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fc3lz
d3JhcC9zeXN3cmFwLWdlbmVyaWMuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9z
eXN3cmFwL3N5c3dyYXAtZ2VuZXJpYy5jCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDgg
QEAKIHsKICAgIEludCBmZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZmlsZSBkZXNj
cmlwdG9yICovCiAgICBIQ2hhciAqcGF0aG5hbWU7ICAgICAgICAgICAgICAgLyogTlVMTCBpZiBu
b3QgYSByZWd1bGFyIGZpbGUgb3IgdW5rbm93biAqLwotICAgRXhlQ29udGV4dCAqd2hlcmU7ICAg
ICAgICAgICAgIC8qIE5VTEwgaWYgaW5oZXJpdGVkIGZyb20gcGFyZW50ICovCisgICBFeGVDb250
ZXh0QW5kRXBvY2ggd2hlcmU7ICAgICAgLyogVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluaGVyaXRlZCBmcm9tIHBh
cmVudCAqLwogICAgc3RydWN0IE9wZW5GZCAqbmV4dCwgKnByZXY7CiB9IE9wZW5GZDsKIApAQCAt
NjE0LDcgKzYxNSwxMCBAQAogCiAgICBpLT5mZCA9IGZkOwogICAgaS0+cGF0aG5hbWUgPSBWR18o
c3RyZHVwKSgic3lzd3JhcC5yZmRvd2duLjIiLCBwYXRobmFtZSk7Ci0gICBpLT53aGVyZSA9ICh0
aWQgPT0gLTEpID8gTlVMTCA6IFZHXyhyZWNvcmRfRXhlQ29udGV4dCkodGlkLCAwLypmaXJzdF9p
cF9kZWx0YSovKTsKKyAgIGktPndoZXJlID0gKHRpZCA9PSAtMSkKKyAgICAgICAgICAgICAgICAg
PyBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpKCkKKyAgICAgICAgICAgICAgICAgOiBWR18o
dGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAgICAgICAgVkdfKHJl
Y29yZF9FeGVDb250ZXh0KSh0aWQsIDAvKmZpcnN0X2lwX2RlbHRhKi8pKTsKIH0KIAogLy8gUmVj
b3JkIG9wZW5pbmcgb2YgYW4gZmQsIGFuZCBmaW5kIGl0cyBuYW1lLgpAQCAtODQ2LDggKzg1MCw4
IEBACiAgICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGlmKGktPndoZXJlKSB7Ci0gICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoaS0+d2hlcmUpOworICAgICAgaWYgKCFWR18oaXNfbnVsbF9F
eGVDb250ZXh0QW5kRXBvY2gpKGktPndoZXJlKSkgeworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoaS0+d2hlcmUpOwogICAgICAgICAgVkdfKG1lc3NhZ2UpKFZnX1VzZXJNc2cs
ICJcbiIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgIFZHXyhtZXNzYWdlKShWZ19Vc2VyTXNn
LCAiICAgPGluaGVyaXRlZCBmcm9tIHBhcmVudD5cbiIpOwpJbmRleDogY29yZWdyaW5kL21fdG9v
bGlmYWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fdG9vbGlmYWNlLmMJKHJldmlzaW9u
IDE2NDY1KQorKysgY29yZWdyaW5kL21fdG9vbGlmYWNlLmMJKHdvcmtpbmcgY29weSkKQEAgLTMy
Myw3ICszMjMsNyBAQAogfQogCiB2b2lkIFZHXyhuZWVkc19pbmZvX2xvY2F0aW9uKSAoCi0gICB2
b2lkICgqaW5mb19sb2NhdGlvbikoQWRkcikKKyAgIHZvaWQgKCppbmZvX2xvY2F0aW9uKShEaUVw
b2NoLCBBZGRyKQogKQogewogICAgVkdfKG5lZWRzKS5pbmZvX2xvY2F0aW9uID0gVHJ1ZTsKSW5k
ZXg6IGNvcmVncmluZC9tX3RyYW5zbGF0ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3Ry
YW5zbGF0ZS5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3RyYW5zbGF0ZS5jCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTI3LDEyICsxNTI3LDEzIEBACiAgICAgICBCb29sIG9rOwogICAg
ICAgY29uc3QgSENoYXIgKmJ1ZjsKICAgICAgIGNvbnN0IEhDaGFyICpuYW1lMjsKKyAgICAgIGNv
bnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOwogCiAgICAgICAvKiBUcnkg
YWxzbyB0byBnZXQgdGhlIHNvbmFtZSAobm90IHRoZSBmaWxlbmFtZSkgb2YgdGhlICJmcm9tIgog
ICAgICAgICAgb2JqZWN0LiAgVGhpcyBtYWtlcyBpdCBtdWNoIGVhc2llciB0byBkZWJ1ZyByZWRp
cmVjdGlvbgogICAgICAgICAgcHJvYmxlbXMuICovCiAgICAgICBjb25zdCBIQ2hhciogbnJhZGRy
X3NvbmFtZSA9ICI/Pz8iOwotICAgICAgRGVidWdJbmZvKiAgIG5yYWRkcl9kaSAgICAgPSBWR18o
ZmluZF9EZWJ1Z0luZm8pKG5yYWRkcik7CisgICAgICBEZWJ1Z0luZm8qICAgbnJhZGRyX2RpICAg
ICA9IFZHXyhmaW5kX0RlYnVnSW5mbykoZXAsIG5yYWRkcik7CiAgICAgICBpZiAobnJhZGRyX2Rp
KSB7CiAgICAgICAgICBjb25zdCBIQ2hhciogdCA9IFZHXyhEZWJ1Z0luZm9fZ2V0X3NvbmFtZSko
bnJhZGRyX2RpKTsKICAgICAgICAgIGlmICh0KQpAQCAtMTUzOSwxMiArMTU0MCwxMiBAQAogICAg
ICAgICAgICAgbnJhZGRyX3NvbmFtZSA9IHQ7CiAgICAgICB9CiAKLSAgICAgIG9rID0gVkdfKGdl
dF9mbm5hbWVfd19vZmZzZXQpKG5yYWRkciwgJmJ1Zik7CisgICAgICBvayA9IFZHXyhnZXRfZm5u
YW1lX3dfb2Zmc2V0KShlcCwgbnJhZGRyLCAmYnVmKTsKICAgICAgIGlmICghb2spIGJ1ZiA9ICI/
Pz8iOwogICAgICAgLy8gU3Rhc2ggYXdheSBuYW1lMQogICAgICAgSENoYXIgbmFtZTFbVkdfKHN0
cmxlbikoYnVmKSArIDFdOwogICAgICAgVkdfKHN0cmNweSkobmFtZTEsIGJ1Zik7Ci0gICAgICBv
ayA9IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KShhZGRyLCAmbmFtZTIpOworICAgICAgb2sgPSBW
R18oZ2V0X2ZubmFtZV93X29mZnNldCkoZXAsIGFkZHIsICZuYW1lMik7CiAgICAgICBpZiAoIW9r
KSBuYW1lMiA9ICI/Pz8iOwogCiAgICAgICBWR18obWVzc2FnZSkoVmdfRGVidWdNc2csIApAQCAt
MTU2MSw3ICsxNTYyLDggQEAKICAgIGlmIChWR18oY2xvX3RyYWNlX2ZsYWdzKSB8fCBkZWJ1Z2dp
bmdfdHJhbnNsYXRpb24pIHsKICAgICAgIGNvbnN0IEhDaGFyKiBvYmpuYW1lID0gIlVOS05PV05f
T0JKRUNUIjsKICAgICAgIE9mZlQgICAgICAgICBvYmpvZmYgID0gMDsKLSAgICAgIERlYnVnSW5m
byogICBkaSAgICAgID0gVkdfKGZpbmRfRGVidWdJbmZvKSggYWRkciApOworICAgICAgY29uc3Qg
RGlFcG9jaCBlcCAgICAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworICAgICAgRGVidWdJbmZv
KiAgIGRpICAgICAgPSBWR18oZmluZF9EZWJ1Z0luZm8pKCBlcCwgYWRkciApOwogICAgICAgaWYg
KGRpKSB7CiAgICAgICAgICBvYmpuYW1lID0gVkdfKERlYnVnSW5mb19nZXRfZmlsZW5hbWUpKGRp
KTsKICAgICAgICAgIG9iam9mZiAgPSBhZGRyIC0gVkdfKERlYnVnSW5mb19nZXRfdGV4dF9iaWFz
KShkaSk7CkBAIC0xNTY5LDcgKzE1NzEsNyBAQAogICAgICAgdmdfYXNzZXJ0KG9iam5hbWUpOwog
IAogICAgICAgY29uc3QgSENoYXIgKmZubmFtZTsKLSAgICAgIEJvb2wgb2sgPSBWR18oZ2V0X2Zu
bmFtZV93X29mZnNldCkoYWRkciwgJmZubmFtZSk7CisgICAgICBCb29sIG9rID0gVkdfKGdldF9m
bm5hbWVfd19vZmZzZXQpKGVwLCBhZGRyLCAmZm5uYW1lKTsKICAgICAgIGlmICghb2spIGZubmFt
ZSA9ICJVTktOT1dOX0ZVTkNUSU9OIjsKICAgICAgIFZHXyhwcmludGYpKAogICAgICAgICAgIj09
PT0gU0IgJXUgKGV2Y2hlY2tzICVsbHUpIFt0aWQgJXVdIDB4JWx4ICVzICVzJWMweCVseFxuIiwK
SW5kZXg6IGNvcmVncmluZC9tX3h0cmVlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21feHRy
ZWUuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV94dHJlZS5jCSh3b3JraW5nIGNv
cHkpCkBAIC00MzgsNiArNDM4LDkgQEAKICAgIGNvbnN0IEhDaGFyKiBmaWxlbmFtZV9kaXI7CiAg
ICBjb25zdCBIQ2hhciogZmlsZW5hbWVfbmFtZTsKIAorICAgLy8gRklYTUUgSlJTIDI4IEp1bHkg
MjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18o
Y3VycmVudF9EaUVwb2NoKSgpOworCiAgICBpZiAoZnAgPT0gTlVMTCkKICAgICAgIHJldHVybjsK
IApAQCAtNTAxLDcgKzUwNCw3IEBACiAgICAgICAvLyB0aGUgc3RyaW5ncyAgY2FsbGVkX2ZpbGVu
YW1lL2NhbGxlZF9mbm5hbWUuCiAjZGVmaW5lIENBTExFRF9GTEYobikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBpZiAoKG4pIDwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgfHwgIVZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSkoaXBzWyhuKV0sICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgfHwgIVZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSko
ZXAsIGlwc1sobildLCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lX25hbWUsICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lX2RpciwgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNh
bGxlZF9saW5lbnVtKSkgeyAgICAgICAgICAgICBcCkBAIC01MDksNyArNTEyLDcgQEAKICAgICAg
ICAgIGNhbGxlZF9saW5lbnVtID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIGlmICgobikgPCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICB8fCAhVkdfKGdldF9mbm5hbWUpKGlwc1sobildLCAmY2FsbGVkX2ZubmFtZSkpIHsgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICB8fCAhVkdfKGdldF9mbm5hbWUpKGVwLCBpcHNbKG4pXSwgJmNh
bGxlZF9mbm5hbWUpKSB7ICAgICAgICAgIFwKICAgICAgICAgIGNhbGxlZF9mbm5hbWUgPSAiVW5r
bm93bkZuPz8/IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCw3ICs1NTcsOSBAQAogCiAgICAgICAgICBp
ZiAoMCkgewogICAgICAgICAgICAgVkdfKHByaW50ZikoImVudHJ5IGltZyAlc1xuIiwgaW1nKTsK
LSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSh4ZS0+ZWMpOworICAgICAgICAgICAgLy8g
SlJTIDI3IEp1bHkgMjAxNzogaXQgbWF5IGJlIGEgaGFjayB0byB1c2UgdGhlIGN1cnJlbnQgZXBv
Y2gKKyAgICAgICAgICAgIC8vIGhlcmUuICBJIGRvbid0IGtub3cuCisgICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoeGUt
PmVjKSk7CiAgICAgICAgICAgICBWR18ocHJpbnRmKSgiXG4iKTsKICAgICAgICAgIH0KICAgICAg
ICAgIHh0LT5hZGRfZGF0YV9mbih4dC0+dG1wX2RhdGEsIFZHXyhpbmRleFhBKSh4dC0+ZGF0YSwg
eGVjdSkpOwpAQCAtNzYyLDExICs3NjcsMTQgQEAKICAgIG1zX21ha2VfZ3JvdXBzKGRlcHRoKzEs
IGdyb3VwLT5tc19lYywgZ3JvdXAtPm5fZWMsIHNpZ19zeiwKICAgICAgICAgICAgICAgICAgICZu
X2dyb3VwcywgJmdyb3Vwcyk7CiAKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5IDIwMTc6IEhBQ0sh
ICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlF
cG9jaCkoKTsKKwogICAgRlAoIiUqcyIgIm4ldTogJWxkICVzXG4iLCAKICAgICAgIGRlcHRoICsg
MSwgIiIsCiAgICAgICBuX2dyb3VwcywgCiAgICAgICBncm91cC0+dG90YWwsCi0gICAgICBWR18o
ZGVzY3JpYmVfSVApKGdyb3VwLT5tc19lYy0+aXBzW2RlcHRoXSAtIDEsIE5VTEwpKTsKKyAgICAg
IFZHXyhkZXNjcmliZV9JUCkoZXAsIGdyb3VwLT5tc19lYy0+aXBzW2RlcHRoXSAtIDEsIE5VTEwp
KTsKICAgIC8qIFhUUkVFPz8/IE1hc3NpZiBvcmlnaW5hbCBjb2RlIHJlbW92ZXMgMSB0byBnZXQg
dGhlIElQIGRlc2NyaXB0aW9uLiBJIGFtCiAgICAgICB3b25kZXJpbmcgaWYgdGhpcyBpcyBub3Qg
c29tZXRoaW5nIHRoYXQgcHJlZGF0ZXMgcmV2aXNpb24gcjg4MTgsCiAgICAgICB3aGljaCBpbnRy
b2R1Y2VkIGEgLTEgaW4gdGhlIHN0YWNrIHVud2luZCAoc2VlIG1fc3RhY2t0cmFjZS5jKQpAQCAt
OTYzLDYgKzk3MSwxMCBAQAogICAgICAgZnJvbSB0aGVyZS4KICAgICAgIElmIG5vIG1haW4gaXMg
Zm91bmQsIHdlIHdpbGwgdGhlbiBkbyBhIHNlYXJjaCBmb3IgbWFpbiBvcgogICAgICAgYmVsb3cg
bWFpbiBmdW5jdGlvbiB0aWxsIHRoZSB0b3AuICovCisKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5
IDIwMTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdf
KGN1cnJlbnRfRGlFcG9jaCkoKTsKKwogICAgc3RhdGljIEludCBkZWVwZXN0X21haW4gPSAwOwog
ICAgVmdfRm5OYW1lS2luZCBraW5kID0gVmdfRm5OYW1lTm9ybWFsOwogICAgSW50IG1ibSA9IG5f
aXBzIC0gMTsgLy8gUG9zaXRpb24gb2YgZGVlcGVzdCBtYWluIG9yIGJlbG93IG1haW4uCkBAIC05
NzIsNyArOTg0LDcgQEAKICAgIGZvciAoaSA9IG5faXBzIC0gMSAtIGRlZXBlc3RfbWFpbjsKICAg
ICAgICAgaSA8IG5faXBzOwogICAgICAgICBpKyspIHsKLSAgICAgIG1ibWtpbmQgPSBWR18oZ2V0
X2ZubmFtZV9raW5kX2Zyb21fSVApKGlwc1tpXSk7CisgICAgICBtYm1raW5kID0gVkdfKGdldF9m
bm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAgICAgIGlmIChtYm1raW5kICE9IFZn
X0ZuTmFtZU5vcm1hbCkgewogICAgICAgICAgbWJtID0gaTsKICAgICAgICAgIGJyZWFrOwpAQCAt
OTgzLDcgKzk5NSw3IEBACiAgICBmb3IgKGkgPSBtYm0gLSAxOwogICAgICAgICBpID49IDAgJiYg
bWJta2luZCAhPSBWZ19Gbk5hbWVNYWluOwogICAgICAgICBpLS0pIHsKLSAgICAgIGtpbmQgPSBW
R18oZ2V0X2ZubmFtZV9raW5kX2Zyb21fSVApKGlwc1tpXSk7CisgICAgICBraW5kID0gVkdfKGdl
dF9mbm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAgICAgIGlmIChraW5kICE9IFZn
X0ZuTmFtZU5vcm1hbCkgewogICAgICAgICAgbWJtID0gaTsKICAgICAgICAgIG1ibWtpbmQgPSBr
aW5kOwpJbmRleDogY29yZWdyaW5kL3B1Yl9jb3JlX2RlYnVnaW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNvcmVncmluZC9wdWJfY29yZV9kZWJ1Z2luZm8uaAkocmV2aXNpb24gMTY0NjUpCisrKyBjb3Jl
Z3JpbmQvcHViX2NvcmVfZGVidWdpbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEzICs4Niwx
MyBAQAogICogSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB0aGUgbmFtZXMg
b2YgaW50ZXJlc3Qgd2lsbCBoYXZlCiAgKiBwYXJ0aWN1bGFyIChpZS4gbm9uLW1hbmdsZWQpIGZv
cm1zLCBvciB0aGUgbWFuZ2xlZCBmb3JtIGlzIGFjY2VwdGFibGUuICovCiBleHRlcm4KLUJvb2wg
VkdfKGdldF9mbm5hbWVfcmF3KSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKTsKK0Jvb2wg
VkdfKGdldF9mbm5hbWVfcmF3KSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBi
dWYgKTsKIAogLyogTGlrZSBWR18oZ2V0X2ZubmFtZSksIGJ1dCB3aXRob3V0IEMrKyBkZW1hbmds
aW5nLiAgKEJ1dCBpdCBkb2VzCiAgWi1kZW1hbmdsaW5nIGFuZCBiZWxvdy1tYWluIHJlbmFtaW5n
LikKICBpaXBjIGFyZ3VtZW50OiBzYW1lIHVzYWdlIGFzIGluIFZHXyhkZXNjcmliZV9JUCkgaW4g
cHViX3Rvb2xfZGVidWdpbmZvLmguICovCiBleHRlcm4KLUJvb2wgVkdfKGdldF9mbm5hbWVfbm9f
Y3h4X2RlbWFuZ2xlKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYsCitCb29sIFZHXyhnZXRf
Zm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFy
KiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5s
SVBDdXJzb3IqIGlpcGMgKTsKIAogLyogbWlwcy1saW51eCBvbmx5OiBmaW5kIHRoZSBvZmZzZXQg
b2YgY3VycmVudCBhZGRyZXNzLiBUaGlzIGlzIG5lZWRlZCBmb3IgCkBAIC05OSw3ICs5OSw4IEBA
CiAgICBzdGFjayB1bndpbmRpbmcgZm9yIE1JUFMuCiAqLwogZXh0ZXJuCi1Cb29sIFZHXyhnZXRf
aW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBBZGRyIGEsIC8qT1VUKi9QdHJkaWZmVCogb2Zmc2V0
ICk7CitCb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBEaUVwb2NoIGVwLCBB
ZGRyIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovUHRy
ZGlmZlQqIG9mZnNldCApOwogCiAKIC8qIFVzZSBEV0FSRjIvMyBDRkEgaW5mb3JtYXRpb24gdG8g
ZG8gb25lIHN0ZXAgb2Ygc3RhY2sgdW53aW5kaW5nLgpAQCAtMTU4LDYgKzE1OSw3IEBACiBleHRl
cm4gQm9vbCBWR18odXNlX0ZQT19pbmZvKSAoIC8qTU9EKi9BZGRyKiBpcFAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qTU9EKi9BZGRyKiBzcFAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qTU9EKi9BZGRyKiBmcFAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERpRXBvY2ggZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk
ZHIgbWluX2FjY2Vzc2libGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIg
bWF4X2FjY2Vzc2libGUgKTsKIApAQCAtMjE3LDcgKzIxOSw3IEBACiAvKiBwcGM2NC1saW51eCBv
bmx5OiBmaW5kIHRoZSBUT0MgcG9pbnRlciAoUjIgdmFsdWUpIHRoYXQgc2hvdWxkIGJlIGluCiAg
ICBmb3JjZSBhdCB0aGUgZW50cnkgcG9pbnQgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gY29udGFp
bmluZwogICAgZ3Vlc3RfY29kZV9hZGRyLiAgUmV0dXJucyAwIGlmIG5vdCBrbm93bi4gKi8KLWV4
dGVybiBBZGRyIFZHXyhnZXRfdG9jcHRyKSAoIEFkZHIgZ3Vlc3RfY29kZV9hZGRyICk7CitleHRl
cm4gQWRkciBWR18oZ2V0X3RvY3B0cikgKCBEaUVwb2NoIGVwLCBBZGRyIGd1ZXN0X2NvZGVfYWRk
ciApOwogCiAvKiBNYXAgYSBmdW5jdGlvbiBuYW1lIHRvIGl0cyBTeW1BVk1Bcy4gIElzIGRvbmUg
YnkKICAgIHNlcXVlbnRpYWwgc2VhcmNoIG9mIGFsbCBzeW1ib2wgdGFibGVzLCBzbyBpcyB2ZXJ5
IHNsb3cuICBUbwpAQCAtMjI3LDcgKzIyOSw4IEBACiAgICBwbGF0Zm9ybXMsIGEgc3ltYm9sIGlz
IGRlZW1lZCB0byBiZSBmb3VuZCBvbmx5IGlmIGl0IGhhcyBhIG5vbnplcm8KICAgIFRPQyBwb2lu
dGVyLiAgKi8KIGV4dGVybgotQm9vbCBWR18obG9va3VwX3N5bWJvbF9TTE9XKShjb25zdCBIQ2hh
ciogc29wYXR0LCBjb25zdCBIQ2hhciogbmFtZSwKK0Jvb2wgVkdfKGxvb2t1cF9zeW1ib2xfU0xP
VykoRGlFcG9jaCBlcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhDaGFy
KiBzb3BhdHQsIGNvbnN0IEhDaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTeW1BVk1BcyogYXZtYXMpOwogCiAjZW5kaWYgICAvLyBfX1BVQl9DT1JFX0RFQlVHSU5GT19I
CkluZGV4OiBjb3JlZ3JpbmQvcHViX2NvcmVfdG9vbGlmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29y
ZWdyaW5kL3B1Yl9jb3JlX3Rvb2xpZmFjZS5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmlu
ZC9wdWJfY29yZV90b29saWZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBA
CiAgICB2b2lkICgqdG9vbF9wcmludF9zdGF0cykodm9pZCk7CiAKICAgIC8vIFZHXyhuZWVkcyku
aW5mb19sb2NhdGlvbgotICAgdm9pZCAoKnRvb2xfaW5mb19sb2NhdGlvbikoQWRkciBhKTsKKyAg
IHZvaWQgKCp0b29sX2luZm9fbG9jYXRpb24pKERpRXBvY2ggZXAsIEFkZHIgYSk7CiAKICAgIC8v
IFZHXyhuZWVkcykubWFsbG9jX3JlcGxhY2VtZW50CiAgICB2b2lkKiAoKnRvb2xfbWFsbG9jKSAg
ICAgICAgICAgICAgKFRocmVhZElkLCBTaXplVCk7CkluZGV4OiBkb2NzL3htbC9tYW51YWwtY29y
ZS54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZG9jcy94bWwvbWFudWFsLWNvcmUueG1sCShyZXZpc2lvbiAx
NjQ2NSkKKysrIGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAkod29ya2luZyBjb3B5KQpAQCAtMTIx
OSw2ICsxMjE5LDE5IEBACiAgICAgPC9saXN0aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg
PHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtZGVidWdpbmZvIiB4cmVmbGFiZWw9Ii0ta2VlcC1k
ZWJ1Z2luZm8iPgorICAgIDx0ZXJtPgorICAgICAgPG9wdGlvbj48IVtDREFUQVstLWtlZXAtZGVi
dWdpbmZvPTx5ZXN8bm8+IFtkZWZhdWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgor
ICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGFu
ZCBhbGwgb3RoZXIgZGVidWdpbmZvIGZvciB1bmxvYWRlZAorICAgICAgY29kZS4gVGhpcyBhbGxv
d3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBmaWxlL2xpbmUKKyAg
ICAgIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbiBkbGNsb3NlJ2QgKG9yIHNpbWlsYXIpLiAg
QmUgY2FyZWZ1bCB3aXRoCisgICAgICB0aGlzLCBzaW5jZSBpdCBjYW4gbGVhZCB0byB1bmJvdW5k
ZWQgbWVtb3J5IHVzZSBmb3IgcHJvZ3JhbXMgd2hpY2gKKyAgICAgIHJlcGVhdGVkbHkgbG9hZCBh
bmQgdW5sb2FkIHNoYXJkIG9iamVjdHMuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFy
bGlzdGVudHJ5PgorICAKICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnNob3ctYmVsb3ctbWFpbiIg
eHJlZmxhYmVsPSItLXNob3ctYmVsb3ctbWFpbiI+CiAgICAgPHRlcm0+CiAgICAgICA8b3B0aW9u
PjwhW0NEQVRBWy0tc2hvdy1iZWxvdy1tYWluPTx5ZXN8bm8+IFtkZWZhdWx0OiBub10gXV0+PC9v
cHRpb24+CkluZGV4OiBkcmQvZHJkX2Vycm9yLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZHJkL2RyZF9lcnJv
ci5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGRyZC9kcmRfZXJyb3IuYwkod29ya2luZyBjb3B5KQpA
QCAtMTM5LDEyICsxMzksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8d2hh
dD4lcFM8L3doYXQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPGFkZHJlc3M+
MHglbHg8L2FkZHJlc3M+XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBEUkRfKGNsaWVu
dG9ial90eXBlX25hbWUpKGNsLT5hbnkudHlwZSksIG9iaik7Ci0gICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoY2wtPmFueS5maXJzdF9vYnNlcnZlZF9hdCk7CisgICAgICAgICBWR18ocHBfRXhl
Q29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vw
b2NoKShjbC0+YW55LmZpcnN0X29ic2VydmVkX2F0KSk7CiAgICAgICAgICBwcmludF9lcnJfZGV0
YWlsKCIgIDwvZmlyc3Rfb2JzZXJ2ZWRfYXQ+XG4iKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICBwcmludF9lcnJfZGV0YWlsKCIlcyAweCVseCB3YXMgZmlyc3Qgb2JzZXJ2ZWQgYXQ6XG4iLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBEUkRfKGNsaWVudG9ial90eXBlX25hbWUpKGNsLT5h
bnkudHlwZSksIG9iaik7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoY2wtPmFueS5maXJz
dF9vYnNlcnZlZF9hdCk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAg
ICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShjbC0+YW55LmZpcnN0X29i
c2VydmVkX2F0KSk7CiAgICAgICB9CiAgICB9CiB9CkBAIC0xNjEsNiArMTYzLDcgQEAKICAgIGNv
bnN0IEhDaGFyKiBjb25zdCBpbmRlbnQgPSB4bWwgPyAiICAiIDogIiI7CiAgICBBZGRySW5mbyBh
aTsKIAorICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CiAgICBYQXJyYXkq
IC8qIG9mIEhDaGFyICovIGRlc2NyMQogICAgICAgPSBWR18obmV3WEEpKCBWR18obWFsbG9jKSwg
ImRyZC5lcnJvci5kcmRyMi4xIiwKICAgICAgICAgICAgICAgICAgICAgVkdfKGZyZWUpLCBzaXpl
b2YoSENoYXIpICk7CkBAIC0xNzIsNyArMTc1LDcgQEAKICAgIHRsX2Fzc2VydChkcmktPmFkZHIp
OwogICAgdGxfYXNzZXJ0KGRyaS0+c2l6ZSA+IDApOwogCi0gICAodm9pZCkgVkdfKGdldF9kYXRh
X2Rlc2NyaXB0aW9uKShkZXNjcjEsIGRlc2NyMiwgZHJpLT5hZGRyKTsKKyAgICh2b2lkKSBWR18o
Z2V0X2RhdGFfZGVzY3JpcHRpb24pKGRlc2NyMSwgZGVzY3IyLCBlcCwgZHJpLT5hZGRyKTsKICAg
IC8qIElmIHRoZXJlJ3Mgbm90aGluZyBpbiBkZXNjcjEvMiwgZnJlZSB0aGVtLiAgV2h5IGlzIGl0
IHNhZmUgdG8KICAgICAgIFZHXyhpbmRleFhBKSBhdCB6ZXJvIGhlcmU/ICBCZWNhdXNlIFZHXyhn
ZXRfZGF0YV9kZXNjcmlwdGlvbikKICAgICAgIGd1YXJhbnRlZXMgdG8gemVybyB0ZXJtaW5hdGUg
ZGVzY3IxLzIgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZQpAQCAtMjAyLDcgKzIwNSw3IEBACiAg
ICAgICAgICAgICAgICAgICAgIHdoYXRfcHJlZml4LCBkcmktPmFjY2Vzc190eXBlID09IGVTdG9y
ZSA/ICJzdG9yZSIgOiAibG9hZCIsCiAgICAgICAgICAgICAgICAgICAgIGRyaS0+dGlkLCBkcmkt
PmFkZHIsIGRyaS0+c2l6ZSwgd2hhdF9zdWZmaXgpOwogCi0gICBWR18ocHBfRXhlQ29udGV4dCko
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSk7CisgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2No
KShWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpKTsKICAgIGlmIChkZXNjcjEgIT0gTlVMTCkgewog
ICAgICAgcHJpbnRfZXJyX2RldGFpbCgiJXMlc1xuIiwgaW5kZW50LCAoSENoYXIqKVZHXyhpbmRl
eFhBKShkZXNjcjEsIDApKTsKICAgICAgIGlmIChkZXNjcjIgIT0gTlVMTCkKQEAgLTIxNiw3ICsy
MTksNyBAQAogICAgICAgICAgcHJpbnRfZXJyX2RldGFpbCgiICA8YWxsb2NhdGlvbl9jb250ZXh0
PlxuIik7CiAgICAgICBlbHNlCiAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCIgQWxsb2NhdGlv
biBjb250ZXh0OlxuIik7Ci0gICAgICBWR18ocHBfRXhlQ29udGV4dCkoYWkubGFzdGNoYW5nZSk7
CisgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShta19FeGVDb250ZXh0QW5kRXBvY2go
YWkubGFzdGNoYW5nZSwgZXApKTsKICAgICAgIGlmICh4bWwpCiAgICAgICAgICBwcmludF9lcnJf
ZGV0YWlsKCIgIDwvYWxsb2NhdGlvbl9jb250ZXh0PlxuIik7CiAgICB9IGVsc2UgewpAQCAtMzIy
LDcgKzMyNSw3IEBACiAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCIlc1RoZSBvYmplY3QgYXQg
YWRkcmVzcyAweCVseCBpcyBub3QgYSBtdXRleC4lc1xuIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hhdF9wcmVmaXgsIHAtPm11dGV4LCB3aGF0X3N1ZmZpeCk7CiAgICAgICB9Ci0gICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOworICAgICAgVkdf
KHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOwogICAgICAg
Zmlyc3Rfb2JzZXJ2ZWQocC0+bXV0ZXgpOwogICAgICAgYnJlYWs7CiAgICB9CkBAIC0zMzAsNyAr
MzMzLDcgQEAKICAgICAgIENvbmRFcnJJbmZvKiBjZGVpID0oQ29uZEVyckluZm8qKShWR18oZ2V0
X2Vycm9yX2V4dHJhKShlKSk7CiAgICAgICBwcmludF9lcnJfZGV0YWlsKCIlcyVzOiBjb25kIDB4
JWx4JXNcbiIsIHdoYXRfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICBWR18oZ2V0X2Vy
cm9yX3N0cmluZykoZSksIGNkZWktPmNvbmQsIHdoYXRfc3VmZml4KTsKLSAgICAgIFZHXyhwcF9F
eGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAgICAgICBmaXJzdF9vYnNl
cnZlZChjZGVpLT5jb25kKTsKICAgICAgIGJyZWFrOwogICAgfQpAQCAtMzM5LDcgKzM0Miw3IEBA
CiAgICAgICBwcmludF9lcnJfZGV0YWlsKCIlcyVzOiBjb25kIDB4JWx4LCBtdXRleCAweCVseCBs
b2NrZWQgYnkgdGhyZWFkICV1JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdoYXRfcHJl
Zml4LCBWR18oZ2V0X2Vycm9yX3N0cmluZykoZSksIGNkaS0+Y29uZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgY2RpLT5tdXRleCwgY2RpLT5vd25lciwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGZpcnN0
X29ic2VydmVkKGNkaS0+bXV0ZXgpOwogICAgICAgYnJlYWs7CiAgICB9CkBAIC0zNDksNyArMzUy
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIiBoYXMgYmVlbiBzaWduYWxlZCBidXQgdGhl
IGFzc29jaWF0ZWQgbXV0ZXggMHglbHggaXMiCiAgICAgICAgICAgICAgICAgICAgICAgICIgbm90
IGxvY2tlZCBieSB0aGUgc2lnbmFsbGluZyB0aHJlYWQuJXNcbiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHdoYXRfcHJlZml4LCBjZWktPmNvbmQsIGNlaS0+bXV0ZXgsIHdoYXRfc3VmZml4KTsK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAg
ICAgICBmaXJzdF9vYnNlcnZlZChjZWktPmNvbmQpOwogICAgICAgZmlyc3Rfb2JzZXJ2ZWQoY2Vp
LT5tdXRleCk7CiAgICAgICBicmVhazsKQEAgLTM1OSw3ICszNjIsNyBAQAogICAgICAgcHJpbnRf
ZXJyX2RldGFpbCgiJXMlczogY29uZGl0aW9uIHZhcmlhYmxlIDB4JWx4LCBtdXRleGVzIDB4JWx4
IGFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgIiAweCVseCVzXG4iLCB3aGF0X3ByZWZpeCwg
VkdfKGdldF9lcnJvcl9zdHJpbmcpKGUpLAogICAgICAgICAgICAgICAgICAgICAgICBjd2VpLT5j
b25kLCBjd2VpLT5tdXRleDEsIGN3ZWktPm11dGV4Miwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGZpcnN0
X29ic2VydmVkKGN3ZWktPmNvbmQpOwogICAgICAgZmlyc3Rfb2JzZXJ2ZWQoY3dlaS0+bXV0ZXgx
KTsKICAgICAgIGZpcnN0X29ic2VydmVkKGN3ZWktPm11dGV4Mik7CkBAIC0zNzAsNyArMzczLDcg
QEAKICAgICAgIHRsX2Fzc2VydChzZWkpOwogICAgICAgcHJpbnRfZXJyX2RldGFpbCgiJXMlczog
c2VtYXBob3JlIDB4JWx4JXNcbiIsIHdoYXRfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAg
ICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZSksIHNlaS0+c2VtYXBob3JlLCB3aGF0X3N1ZmZpeCk7
Ci0gICAgICBWR18ocHBfRXhlQ29udGV4dCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOworICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOwog
ICAgICAgZmlyc3Rfb2JzZXJ2ZWQoc2VpLT5zZW1hcGhvcmUpOwogICAgICAgYnJlYWs7CiAgICB9
CkBAIC0zNzksMTMgKzM4MiwxNCBAQAogICAgICAgdGxfYXNzZXJ0KGJlaSk7CiAgICAgICBwcmlu
dF9lcnJfZGV0YWlsKCIlcyVzOiBiYXJyaWVyIDB4JWx4JXNcbiIsIHdoYXRfcHJlZml4LAogICAg
ICAgICAgICAgICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZSksIGJlaS0+YmFycmll
ciwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jf
d2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJy
b3Jfd2hlcmUpKGUpKTsKICAgICAgIGlmIChiZWktPm90aGVyX2NvbnRleHQpIHsKICAgICAgICAg
IGlmICh4bWwpCiAgICAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCIgIDxjb25mbF93YWl0X2Nh
bGw+XG4iKTsKICAgICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiVzQ29uZmxpY3Rpbmcgd2FpdCBj
YWxsIGJ5IHRocmVhZCAldTolc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hhdF9w
cmVmaXgsIGJlaS0+b3RoZXJfdGlkLCB3aGF0X3N1ZmZpeCk7Ci0gICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoYmVpLT5vdGhlcl9jb250ZXh0KTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpKAorICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKGJl
aS0+b3RoZXJfY29udGV4dCkpOwogICAgICAgICAgaWYgKHhtbCkKICAgICAgICAgICAgIHByaW50
X2Vycl9kZXRhaWwoIiAgPC9jb25mbF93YWl0X2NhbGw+XG4iKTsKICAgICAgIH0KQEAgLTM5Nyw3
ICs0MDEsNyBAQAogICAgICAgdGxfYXNzZXJ0KHApOwogICAgICAgcHJpbnRfZXJyX2RldGFpbCgi
JXMlczogcndsb2NrIDB4JWx4LiVzXG4iLCB3aGF0X3ByZWZpeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgVkdfKGdldF9lcnJvcl9zdHJpbmcpKGUpLCBwLT5yd2xvY2ssIHdoYXRfc3VmZml4KTsK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAg
ICAgICBmaXJzdF9vYnNlcnZlZChwLT5yd2xvY2spOwogICAgICAgYnJlYWs7CiAgICB9CkBAIC00
MDksNyArNDEzLDggQEAKICAgICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiAgPGFjcXVpcmVkX2F0
PlxuIik7CiAgICAgICBlbHNlCiAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCJBY3F1aXJlZCBh
dDpcbiIpOwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKHAtPmFjcXVpcmVkX2F0KTsKKyAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1
cnJlbnRfZXBvY2gpKHAtPmFjcXVpcmVkX2F0KSk7CiAgICAgICBpZiAoeG1sKQogICAgICAgICAg
cHJpbnRfZXJyX2RldGFpbCgiICA8L2FjcXVpcmVkX2F0PlxuIik7CiAgICAgICBwcmludF9lcnJf
ZGV0YWlsKCIlc0xvY2sgb24gJXMgMHglbHggd2FzIGhlbGQgZHVyaW5nICV1IG1zIgpAQCAtNDE2
LDcgKzQyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICIgKHRocmVzaG9sZDogJXUgbXMp
LiVzXG4iLCB3aGF0X3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGdldF9lcnJv
cl9zdHJpbmcpKGUpLCBwLT5zeW5jaHJvbml6YXRpb25fb2JqZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBwLT5ob2xkX3RpbWVfbXMsIHAtPnRocmVzaG9sZF9tcywgd2hhdF9zdWZmaXgpOwot
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAg
ICAgIGZpcnN0X29ic2VydmVkKHAtPnN5bmNocm9uaXphdGlvbl9vYmplY3QpOwogICAgICAgYnJl
YWs7CiAgICB9CkBAIC00MjQsNyArNDI5LDcgQEAKICAgICAgIEdlbmVyaWNFcnJJbmZvKiBnZWkg
PSAoR2VuZXJpY0VyckluZm8qKShWR18oZ2V0X2Vycm9yX2V4dHJhKShlKSk7CiAgICAgICBwcmlu
dF9lcnJfZGV0YWlsKCIlcyVzJXNcbiIsIHdoYXRfcHJlZml4LCBWR18oZ2V0X2Vycm9yX3N0cmlu
ZykoZSksCiAgICAgICAgICAgICAgICAgICAgICAgIHdoYXRfc3VmZml4KTsKLSAgICAgIFZHXyhw
cF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAgICBWR18ocHBfRXhl
Q29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAgICAgICBpZiAoZ2Vp
LT5hZGRyKQogCSBmaXJzdF9vYnNlcnZlZChnZWktPmFkZHIpOwogICAgICAgYnJlYWs7CkBAIC00
MzMsNyArNDM4LDcgQEAKICAgICAgIEludmFsaWRUaHJlYWRJZEluZm8qIGl0aSA9KEludmFsaWRU
aHJlYWRJZEluZm8qKShWR18oZ2V0X2Vycm9yX2V4dHJhKShlKSk7CiAgICAgICBwcmludF9lcnJf
ZGV0YWlsKCIlcyVzIDB4JWxseCVzXG4iLCB3aGF0X3ByZWZpeCwgVkdfKGdldF9lcnJvcl9zdHJp
bmcpKGUpLAogICAgICAgICAgICAgICAgICAgICAgICBpdGktPnB0aWQsIHdoYXRfc3VmZml4KTsK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAg
ICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgVW5pbXBIZ0NsUmVxOiB7CkBAIC00NDEsNyArNDQ2
LDcgQEAKICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiVzVGhlIGFubm90YXRpb24gbWFjcm8gJXMg
aGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCIKICAgICAgICAgICAgICAgICAgICAgICAgIiBp
biAlcHMlc1xuIiwgd2hhdF9wcmVmaXgsIHVpY3ItPmRlc2NyLAogICAgICAgICAgICAgICAgICAg
ICAgICAiPHZhbGdyaW5kL2hlbGdyaW5kLmg+Iiwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdfKHBw
X0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9FeGVD
b250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGJyZWFrOwog
ICAgfQogICAgY2FzZSBVbmltcERyZENsUmVxOiB7CkBAIC00NDksMTMgKzQ1NCwxMyBAQAogICAg
ICAgcHJpbnRfZXJyX2RldGFpbCgiJXNUaGUgYW5ub3RhdGlvbiBtYWNybyAlcyBoYXMgbm90IHll
dCBiZWVuIGltcGxlbWVudGVkIgogICAgICAgICAgICAgICAgICAgICAgICAiIGluICVwcyVzXG4i
LCB3aGF0X3ByZWZpeCwgdWljci0+ZGVzY3IsCiAgICAgICAgICAgICAgICAgICAgICAgICI8dmFs
Z3JpbmQvZHJkLmg+Iiwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZH
XyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gp
KFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGJyZWFrOwogICAgfQogICAgZGVmYXVs
dDoKICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiVzJXMlc1xuIiwgd2hhdF9wcmVmaXgsIFZHXyhn
ZXRfZXJyb3Jfc3RyaW5nKShlKSwKICAgICAgICAgICAgICAgICAgICAgICAgd2hhdF9zdWZmaXgp
OwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAg
ICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsK
ICAgICAgIGJyZWFrOwogICAgfQogfQpJbmRleDogZHJkL2RyZF90aHJlYWQuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkcmQvZHJkX3RocmVhZC5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGRyZC9kcmRfdGhyZWFk
LmMJKHdvcmtpbmcgY29weSkKQEAgLTEzMzgsNyArMTMzOCw4IEBACiAKICAgIGlmICh2Z190aWQg
IT0gVkdfSU5WQUxJRF9USFJFQURJRCkgewogICAgICAgaWYgKGNhbGxzdGFjaykKLSAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KShjYWxsc3RhY2spOworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoCisgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCko
Y2FsbHN0YWNrKSk7CiAgICAgICBlbHNlCiAgICAgICAgICBWR18oZ2V0X2FuZF9wcF9TdGFja1Ry
YWNlKSh2Z190aWQsIFZHXyhjbG9fYmFja3RyYWNlX3NpemUpKTsKICAgIH0gZWxzZSB7CkluZGV4
OiBleHAtYmJ2L2Jidl9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXhwLWJidi9iYnZfbWFpbi5jCShy
ZXZpc2lvbiAxNjQ2NSkKKysrIGV4cC1iYnYvYmJ2X21haW4uYwkod29ya2luZyBjb3B5KQpAQCAt
MzQ2LDYgKzM0Niw3IEBACiAgICBJUkRpcnR5ICAqZGk7CiAgICBJUkV4cHIgICAqKmFyZ3YsICph
cmcxOwogICAgSW50ICAgICAgcmVncGFybXMsb3Bjb2RlX3R5cGU7CisgICBEaUVwb2NoICBlcCA9
IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CiAKICAgICAgIC8qIFdlIGRvbid0IGhhbmRsZSBhIGhv
c3QvZ3Vlc3Qgd29yZCBzaXplIG1pc21hdGNoICovCiAgICBpZiAoZ1dvcmRUeSAhPSBoV29yZFR5
KSB7CkBAIC0zOTIsOCArMzkzLDggQEAKICAgICAgIGJsb2NrX251bSsrOwogICAgICAgICAgLyog
Z2V0IGZ1bmN0aW9uIG5hbWUgYW5kIGVudHJ5IHBvaW50IGluZm9ybWF0aW9uICovCiAgICAgICBj
b25zdCBIQ2hhciAqZm5fbmFtZTsKLSAgICAgIFZHXyhnZXRfZm5uYW1lKShvcmlnQWRkciwgJmZu
X25hbWUpOwotICAgICAgYmJJbmZvLT5pc19lbnRyeT1WR18oZ2V0X2ZubmFtZV9pZl9lbnRyeSko
b3JpZ0FkZHIsICZmbl9uYW1lKTsKKyAgICAgIFZHXyhnZXRfZm5uYW1lKShlcCwgb3JpZ0FkZHIs
ICZmbl9uYW1lKTsKKyAgICAgIGJiSW5mby0+aXNfZW50cnk9VkdfKGdldF9mbm5hbWVfaWZfZW50
cnkpKGVwLCBvcmlnQWRkciwgJmZuX25hbWUpOwogICAgICAgYmJJbmZvLT5mbl9uYW1lID1WR18o
c3RyZHVwKSgiYmJ2X3N0cmluZ3MiLCBmbl9uYW1lKTsKICAgICAgICAgIC8qIGluc2VydCBzdHJ1
Y3R1cmUgaW50byB0YWJsZSAqLwogICAgICAgVkdfKE9TZXRHZW5fSW5zZXJ0KSggaW5zdHJfaW5m
b190YWJsZSwgYmJJbmZvICk7CkluZGV4OiBleHAtZGhhdC9kaF9tYWluLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZXhwLWRoYXQvZGhfbWFpbi5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGV4cC1kaGF0L2RoX21h
aW4uYwkod29ya2luZyBjb3B5KQpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAKICAgICAgICAgICAgICBi
dWZSLCBidWZXLAogICAgICAgICAgICAgIGFwaS0+bl9yZWFkcywgYXBpLT5uX3dyaXRlcyk7CiAK
LSAgIFZHXyhwcF9FeGVDb250ZXh0KShhcGktPmFwKTsKKyAgIFZHXyhwcF9FeGVDb250ZXh0QW5k
RXBvY2gpKFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShhcGktPmFwKSk7CiAKICAgIGlm
IChhcGktPmhpc3RvICYmIGFwaS0+eHNpemVfdGFnID09IEV4YWN0bHkpIHsKICAgICAgIFZHXyh1
bXNnKSgiXG5BZ2dyZWdhdGVkIGFjY2VzcyBjb3VudHMgYnkgb2Zmc2V0OlxuIik7CkluZGV4OiBl
eHAtc2djaGVjay9wY19jb21tb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleHAtc2djaGVjay9wY19jb21t
b24uYwkocmV2aXNpb24gMTY0NjUpCisrKyBleHAtc2djaGVjay9wY19jb21tb24uYwkod29ya2lu
ZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBACiAgICAgICAgICBlbWl0KCAiICA8d2hhdD5JbnZh
bGlkICVzIG9mIHNpemUgJWxkPC93aGF0PlxuIiwKICAgICAgICAgICAgICAgIHhlLT5YRS5Tb3JH
LnNzekIgPCAwID8gIndyaXRlIiA6ICJyZWFkIiwKICAgICAgICAgICAgICAgIFdvcmRfX2Ficyh4
ZS0+WEUuU29yRy5zc3pCKSApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0
X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2No
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAgICAgICAgICBlbWl0KCAiICA8
YXV4d2hhdD5BZGRyZXNzICUjbHggZXhwZWN0ZWQgdnMgYWN0dWFsOjwvYXV4d2hhdD5cbiIsCiAg
ICAgICAgICAgICAgICB4ZS0+WEUuU29yRy5hZGRyICk7CkBAIC0zMzYsNyArMzM2LDcgQEAKICAg
ICAgICAgIGVtaXQoICJJbnZhbGlkICVzIG9mIHNpemUgJWxkXG4iLCAKICAgICAgICAgICAgICAg
IHhlLT5YRS5Tb3JHLnNzekIgPCAwID8gIndyaXRlIiA6ICJyZWFkIiwKICAgICAgICAgICAgICAg
IFdvcmRfX2Ficyh4ZS0+WEUuU29yRy5zc3pCKSApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAgICAgICAg
ICBlbWl0KCAiIEFkZHJlc3MgJSNseCBleHBlY3RlZCB2cyBhY3R1YWw6XG4iLCB4ZS0+WEUuU29y
Ry5hZGRyICk7CiAgICAgICAgICBlbWl0KCAiIEV4cGVjdGVkOiAlc1xuIiwgJnhlLT5YRS5Tb3JH
LmV4cGVjdFswXSApOwpAQCAtMzYyLDcgKzM2Miw3IEBACiAgICAgICAgICAgICBlbWl0KCAiICA8
d2hhdD5JbnZhbGlkICVzIG9mIHNpemUgJWxkPC93aGF0PlxuIiwKICAgICAgICAgICAgICAgICAg
IHJlYWR3cml0ZSh4ZS0+WEUuSGVhcC5zc3pCKSwKICAgICAgICAgICAgICAgICAgIFdvcmRfX2Fi
cyh4ZS0+WEUuSGVhcC5zc3pCKSApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBW
R18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAgICAgICAgICAg
ICBlbWl0KCAiICA8YXV4d2hhdD5BZGRyZXNzICUjbHggaXMgbm90IGRlcml2ZWQgZnJvbSAiCiAg
ICAgICAgICAgICAgICAgICAiYW55IGtub3duIGJsb2NrPC9hdXh3aGF0PlxuIiwgYSApOwpAQCAt
MzcyLDcgKzM3Miw3IEBACiAgICAgICAgICAgICBlbWl0KCAiSW52YWxpZCAlcyBvZiBzaXplICVs
ZFxuIiwKICAgICAgICAgICAgICAgICAgIHJlYWR3cml0ZSh4ZS0+WEUuSGVhcC5zc3pCKSwKICAg
ICAgICAgICAgICAgICAgIFdvcmRfX2Ficyh4ZS0+WEUuSGVhcC5zc3pCKSApOwotICAgICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAg
ICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOwogICAgCiAgICAgICAgICAgICBlbWl0KCAiIEFkZHJlc3MgJSNseCBpcyBub3QgZGVy
aXZlZCBmcm9tICIKICAgICAgICAgICAgICAgICAgICJhbnkga25vd24gYmxvY2tcbiIsIGEgKTsK
QEAgLTM5Nyw3ICszOTcsNyBAQAogICAgICAgICAgICAgICAgICAgaG93X2ludmFsaWQsCiAgICAg
ICAgICAgICAgICAgICByZWFkd3JpdGUoeGUtPlhFLkhlYXAuc3N6QiksCiAgICAgICAgICAgICAg
ICAgICBXb3JkX19hYnMoeGUtPlhFLkhlYXAuc3N6QikgKTsKLSAgICAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAg
IAogICAgICAgICAgICAgZW1pdCggIiAgPGF1eHdoYXQ+QWRkcmVzcyAlI2x4IGlzICVsdSBieXRl
cyAlcyAiCiAgICAgICAgICAgICAgICAgICAgICAidGhlIGFjY2Vzc2luZyBwb2ludGVyJ3M8L2F1
eHdoYXQ+XG4iLApAQCAtNDA2LDcgKzQwNiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAiYSBi
bG9jayBvZiBzaXplICVsdSAlczwvYXV4d2hhdD5cbiIsCiAgICAgICAgICAgICAgICAgICBsZWdp
dCwgU2VnX19zaXplKHZzZWcpLAogICAgICAgICAgICAgICAgICAgU2VnX19pc19mcmVlZCh2c2Vn
KSA/ICJmcmVlJ2QiIDogImFsbG9jJ2QiICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dCkoU2VnX193aGVyZSh2c2VnKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVw
b2NoKSgKKyAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdf
X3doZXJlKHZzZWcpKSk7CiAKICAgICAgICAgIH0gZWxzZSB7CiAKQEAgLTQxNCw3ICs0MTUsNyBA
QAogICAgICAgICAgICAgICAgICAgaG93X2ludmFsaWQsCiAgICAgICAgICAgICAgICAgICByZWFk
d3JpdGUoeGUtPlhFLkhlYXAuc3N6QiksCiAgICAgICAgICAgICAgICAgICBXb3JkX19hYnMoeGUt
PlhFLkhlYXAuc3N6QikgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdl
dF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgIAogICAgICAgICAgICAgZW1p
dCggIiBBZGRyZXNzICUjbHggaXMgJWx1IGJ5dGVzICVzIHRoZSBhY2Nlc3NpbmcgcG9pbnRlcidz
XG4iLAogICAgICAgICAgICAgICAgICAgYSwgbWlzc19zaXplLCBwbGFjZSApOwpAQCAtNDIxLDcg
KzQyMiw4IEBACiAgICAgICAgICAgICBlbWl0KCAiICVzbGVnaXRpbWF0ZSByYW5nZSwgYSBibG9j
ayBvZiBzaXplICVsdSAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGxlZ2l0LCBTZWdfX3NpemUo
dnNlZyksCiAgICAgICAgICAgICAgICAgICBTZWdfX2lzX2ZyZWVkKHZzZWcpID8gImZyZWUnZCIg
OiAiYWxsb2MnZCIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJl
KHZzZWcpKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAg
ICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKFNlZ19fd2hlcmUodnNlZykp
KTsKIAogICAgICAgICAgfQogICAgICAgfQpAQCAtNDc3LDcgKzQ3OSw3IEBACiAKICAgICAgICAg
IGVtaXQoICIgIDx3aGF0PkludmFsaWQgYXJndW1lbnRzIHRvICVzPC93aGF0PlxuIiwKICAgICAg
ICAgICAgICAgIHhlLT5YRS5Bcml0aC5vcG5hbWUgKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgIAogICAgICAg
ICAgaWYgKHNlZzEgIT0gc2VnMikgewogICAgICAgICAgICAgaWYgKE5PTlBUUiA9PSBzZWcxKSB7
CkBAIC00ODgsNyArNDkwLDggQEAKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0PkZp
cnN0IGFyZyBkZXJpdmVkIGZyb20gYWRkcmVzcyAlI2x4IG9mICIKICAgICAgICAgICAgICAgICAg
ICAgICIlbHUtYnl0ZSBibG9jayBhbGxvYydkPC9hdXh3aGF0PlxuIiwKICAgICAgICAgICAgICAg
ICAgICAgIFNlZ19fYWRkcihzZWcxKSwgU2VnX19zaXplKHNlZzEpICk7Ci0gICAgICAgICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoU2VnX193aGVyZShzZWcxKSk7CisgICAgICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNlZzEpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB3aGljaCA9ICJTZWNvbmQgYXJnIjsKICAgICAgICAgIH0gZWxzZSB7CkBAIC01
MDAsNyArNTAzLDggQEAKICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0PiVzIGRlcml2ZWQg
ZnJvbSBhZGRyZXNzICUjbHggb2YgIgogICAgICAgICAgICAgICAgICAgIiVsdS1ieXRlIGJsb2Nr
IGFsbG9jJ2Q8L2F1eHdoYXQ+XG4iLAogICAgICAgICAgICAgICAgICAgd2hpY2gsIFNlZ19fYWRk
cihzZWcyKSwgU2VnX19zaXplKHNlZzIpICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dCkoU2VnX193aGVyZShzZWcyKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVw
b2NoKSgKKyAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdf
X3doZXJlKHNlZzIpKSk7CiAgICAgICAgICB9CiAKICAgICAgIH0gZWxzZSB7CkBAIC01MDcsNyAr
NTExLDcgQEAKIAogICAgICAgICAgZW1pdCggIkludmFsaWQgYXJndW1lbnRzIHRvICVzXG4iLAog
ICAgICAgICAgICAgICAgeGUtPlhFLkFyaXRoLm9wbmFtZSApOwotICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAg
ICAgICAgICBpZiAoc2VnMSAhPSBzZWcyKSB7CiAgICAgICAgICAgICBpZiAoTk9OUFRSID09IHNl
ZzEpIHsKQEAgLTUxOCw3ICs1MjIsOCBAQAogICAgICAgICAgICAgICAgZW1pdCggIiBGaXJzdCBh
cmcgZGVyaXZlZCBmcm9tIGFkZHJlc3MgJSNseCBvZiAiCiAgICAgICAgICAgICAgICAgICAgICAi
JWx1LWJ5dGUgYmxvY2sgYWxsb2MnZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIFNlZ19fYWRk
cihzZWcxKSwgU2VnX19zaXplKHNlZzEpICk7Ci0gICAgICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dCkoU2VnX193aGVyZShzZWcxKSk7CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vw
b2NoKShTZWdfX3doZXJlKHNlZzEpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3aGlj
aCA9ICJTZWNvbmQgYXJnIjsKICAgICAgICAgIH0gZWxzZSB7CkBAIC01MzAsNyArNTM1LDggQEAK
ICAgICAgICAgICAgIGVtaXQoICIgJXMgZGVyaXZlZCBmcm9tIGFkZHJlc3MgJSNseCBvZiAiCiAg
ICAgICAgICAgICAgICAgICAiJWx1LWJ5dGUgYmxvY2sgYWxsb2MnZFxuIiwKICAgICAgICAgICAg
ICAgICAgIHdoaWNoLCBTZWdfX2FkZHIoc2VnMiksIFNlZ19fc2l6ZShzZWcyKSApOwotICAgICAg
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFNlZ19fd2hlcmUoc2VnMikpOworICAgICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICAgICBWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoU2VnX193aGVyZShzZWcyKSkpOwogICAgICAgICAgfQogCiAgICAg
ICB9CkBAIC01NjIsMjMgKzU2OCwyNSBAQAogCiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD4l
cyVzIGNvbnRhaW5zIHVuYWRkcmVzc2FibGUgYnl0ZShzKTwvd2hhdD5cbiIsCiAgICAgICAgICAg
ICAgICAgICB3aGF0LCBzICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhn
ZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5k
RXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAKICAgICAgICAgICAgIGVt
aXQoICIgIDxhdXh3aGF0PkFkZHJlc3MgJSNseCBpcyAlbHUgYnl0ZXMgaW5zaWRlIGEgIgogICAg
ICAgICAgICAgICAgICAgIiVsdS1ieXRlIGJsb2NrIGZyZWUnZDwvYXV4d2hhdD5cbiIsCiAgICAg
ICAgICAgICAgICAgICBsbywgbG8tU2VnX19hZGRyKHNlZ2xvKSwgU2VnX19zaXplKHNlZ2xvKSAp
OwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFNlZ19fd2hlcmUoc2VnbG8pKTsKKyAg
ICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgICAgVkdf
KHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKFNlZ19fd2hlcmUoc2VnbG8pKSk7CiAKICAgICAg
ICAgIH0gZWxzZSB7CiAKICAgICAgICAgICAgIGVtaXQoICIgJXMlcyBjb250YWlucyB1bmFkZHJl
c3NhYmxlIGJ5dGUocylcbiIsCiAgICAgICAgICAgICAgICAgICB3aGF0LCBzICk7Ci0gICAgICAg
ICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAg
ICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJl
KShlcnIpICk7CiAgICAKICAgICAgICAgICAgIGVtaXQoICIgQWRkcmVzcyAlI2x4IGlzICVsdSBi
eXRlcyBpbnNpZGUgYSAiCiAgICAgICAgICAgICAgICAgICAiJWx1LWJ5dGUgYmxvY2sgZnJlZSdk
XG4iLAogICAgICAgICAgICAgICAgICAgbG8sIGxvLVNlZ19fYWRkcihzZWdsbyksIFNlZ19fc2l6
ZShzZWdsbykgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJlKHNl
Z2xvKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAg
ICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNlZ2xvKSkp
OwogCiAgICAgICAgICB9CiAKQEAgLTU4OSw3ICs1OTcsNyBAQAogCiAgICAgICAgICAgICBlbWl0
KCAiICA8d2hhdD4lcyVzIGlzIG5vbi1jb250aWd1b3VzPC93aGF0PlxuIiwKICAgICAgICAgICAg
ICAgICAgIHdoYXQsIHMgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdl
dF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgIAogICAgICAgICAgICAgaWYg
KFVOS05PV04gPT0gc2VnbG8pIHsKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0PkZp
cnN0IGJ5dGUgaXMgIgpAQCAtNTk4LDcgKzYwNiw4IEBACiAgICAgICAgICAgICAgICBlbWl0KCAi
ICA8YXV4d2hhdD5GaXJzdCBieXRlICglI2x4KSBpcyAlbHUgYnl0ZXMgaW5zaWRlIGEgIgogICAg
ICAgICAgICAgICAgICAgICAgIiVsdS1ieXRlIGJsb2NrIGFsbG9jJ2Q8L2F1eHdoYXQ+XG4iLAog
ICAgICAgICAgICAgICAgICAgICAgbG8sIGxvLVNlZ19fYWRkcihzZWdsbyksIFNlZ19fc2l6ZShz
ZWdsbykgKTsKLSAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJlKHNl
Z2xvKSk7CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAg
ICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNl
Z2xvKSkpOwogICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgICBpZiAoVU5LTk9XTiA9PSBz
ZWdoaSkgewpAQCAtNjA4LDcgKzYxNyw4IEBACiAgICAgICAgICAgICAgICBlbWl0KCAiICA8YXV4
d2hhdD5MYXN0IGJ5dGUgKCUjbHgpIGlzICVsdSBieXRlcyBpbnNpZGUgYSAiCiAgICAgICAgICAg
ICAgICAgICAgICAiJWx1LWJ5dGUgYmxvY2sgYWxsb2MnZDwvYXV4d2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICAgICBoaSwgaGktU2VnX19hZGRyKHNlZ2hpKSwgU2VnX19zaXplKHNlZ2hpKSAp
OwotICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFNlZ19fd2hlcmUoc2VnaGkpKTsK
KyAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAg
ICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKFNlZ19fd2hlcmUoc2VnaGkpKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgIH0gZWxzZSB7CkBAIC02MTUsNyArNjI1LDcgQEAK
IAogICAgICAgICAgICAgZW1pdCggIiVzJXMgaXMgbm9uLWNvbnRpZ3VvdXNcbiIsCiAgICAgICAg
ICAgICAgICAgICB3aGF0LCBzICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZH
XyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAKICAgICAgICAgICAg
IGlmIChVTktOT1dOID09IHNlZ2xvKSB7CiAgICAgICAgICAgICAgICBlbWl0KCAiIEZpcnN0IGJ5
dGUgaXMgbm90IGluc2lkZSBhIGtub3duIGJsb2NrXG4iICk7CkBAIC02MjMsNyArNjMzLDggQEAK
ICAgICAgICAgICAgICAgIGVtaXQoICIgRmlyc3QgYnl0ZSAoJSNseCkgaXMgJWx1IGJ5dGVzIGlu
c2lkZSBhICIKICAgICAgICAgICAgICAgICAgICAgICIlbHUtYnl0ZSBibG9jayBhbGxvYydkXG4i
LAogICAgICAgICAgICAgICAgICAgICAgbG8sIGxvLVNlZ19fYWRkcihzZWdsbyksIFNlZ19fc2l6
ZShzZWdsbykgKTsKLSAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJl
KHNlZ2xvKSk7CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAg
ICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJl
KHNlZ2xvKSkpOwogICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgICBpZiAoVU5LTk9XTiA9
PSBzZWdoaSkgewpAQCAtNjMyLDcgKzY0Myw4IEBACiAgICAgICAgICAgICAgICBlbWl0KCAiIExh
c3QgYnl0ZSAoJSNseCkgaXMgJWx1IGJ5dGVzIGluc2lkZSBhICIKICAgICAgICAgICAgICAgICAg
ICAgICIlbHUtYnl0ZSBibG9jayBhbGxvYydkXG4iLAogICAgICAgICAgICAgICAgICAgICAgaGks
IGhpLVNlZ19fYWRkcihzZWdoaSksIFNlZ19fc2l6ZShzZWdoaSkgKTsKLSAgICAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJlKHNlZ2hpKSk7CisgICAgICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNlZ2hpKSkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICB9CkBAIC02NTAsNiArNjYyLDggQEAKIFVJbnQgcGNfdXBkYXRlX0Vycm9yX2V4
dHJhICggY29uc3QgRXJyb3IqIGVyciApCiB7CiAgICBYRXJyb3IgKnhlID0gKFhFcnJvciopVkdf
KGdldF9lcnJvcl9leHRyYSkoZXJyKTsKKyAgIERpRXBvY2ggZXAgPSBWR18oZ2V0X2Vycm9yX3do
ZXJlKShlcnIpLmVwb2NoOworCiAgICB0bF9hc3NlcnQoeGUpOwogICAgc3dpdGNoICh4ZS0+dGFn
KSB7CiAgICAgICBjYXNlIFhFX1Nvckc6CkBAIC02NzUsNyArNjg5LDcgQEAKICAgICAgICAgIGhh
dmVfZGVzY3IKICAgICAgICAgICAgID0gVkdfKGdldF9kYXRhX2Rlc2NyaXB0aW9uKSggeGUtPlhF
LkhlYXAuZGVzY3IxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
ZS0+WEUuSGVhcC5kZXNjcjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhlLT5YRS5IZWFwLmFkZHIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXAsIHhlLT5YRS5IZWFwLmFkZHIgKTsKIAogICAgICAgICAgLyogSWYgdGhlcmUn
cyBub3RoaW5nIGluIGRlc2NyMS8yLCBmcmVlIGl0LiAgV2h5IGlzIGl0IHNhZmUgdG8KICAgICAg
ICAgICAgIHRvIFZHXyhpbmRleFhBKSBhdCB6ZXJvIGhlcmU/ICBCZWNhdXNlCkBAIC02OTksNyAr
NzEzLDcgQEAKICAgICAgICAgIGlmICghaGF2ZV9kZXNjcikgewogICAgICAgICAgICAgY29uc3Qg
SENoYXIgKm5hbWU7CiAgICAgICAgICAgICBpZiAoVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQp
KAotICAgICAgICAgICAgICAgICAgIHhlLT5YRS5IZWFwLmFkZHIsICZuYW1lLAorICAgICAgICAg
ICAgICAgICAgIGVwLCB4ZS0+WEUuSGVhcC5hZGRyLCAmbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAmeGUtPlhFLkhlYXAuZGF0YXN5bW9mZiApCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAg
ICAgICAgeGUtPlhFLkhlYXAuZGF0YXN5bSA9CkluZGV4OiBleHAtc2djaGVjay9zZ19tYWluLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZXhwLXNnY2hlY2svc2dfbWFpbi5jCShyZXZpc2lvbiAxNjQ2NSkKKysr
IGV4cC1zZ2NoZWNrL3NnX21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtMTkzNiw3ICsxOTM2LDgg
QEAKICAgICAgY29uc3QgSENoYXIgKmZubmFtZTsKICAgICAgQm9vbCBvazsKICAgICAgQWRkciBp
cCA9IGlwX3Bvc3RfY2FsbF9pbnNuOwotICAgICBvayA9IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0
KSggaXAsICZmbm5hbWUgKTsKKyAgICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50X0RpRXBvY2gp
KCk7CisgICAgIG9rID0gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKCBlcCwgaXAsICZmbm5hbWUg
KTsKICAgICAgd2hpbGUgKGQgPiAwKSB7CiAgICAgICAgIFZHXyhwcmludGYpKCIgIik7CiAgICAg
ICAgIGQtLTsKSW5kZXg6IGhlbGdyaW5kL2hnX2FkZHJkZXNjci5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhl
bGdyaW5kL2hnX2FkZHJkZXNjci5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGhlbGdyaW5kL2hnX2Fk
ZHJkZXNjci5jCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAiaGdf
bG9ja19uX3RocmVhZC5oIgogI2luY2x1ZGUgImhnX2FkZHJkZXNjci5oIiAgICAgICAgICAgIC8q
IHNlbGYgKi8KIAotdm9pZCBIR18oZGVzY3JpYmVfYWRkcikgKCBBZGRyIGEsIC8qT1VUKi9BZGRy
SW5mbyogYWkgKQordm9pZCBIR18oZGVzY3JpYmVfYWRkcikgKCBEaUVwb2NoIGVwLCBBZGRyIGEs
IC8qT1VUKi9BZGRySW5mbyogYWkgKQogewogICAgdGxfYXNzZXJ0KGFpLT50YWcgPT0gQWRkcl9V
bmRlc2NyaWJlZCk7CiAKQEAgLTc1LDEzICs3NSwxNCBAQAogICAgICAgYWktPkFkZHIuQmxvY2su
YmxvY2tfZGVzYyA9ICJibG9jayI7CiAgICAgICBhaS0+QWRkci5CbG9jay5ibG9ja19zekIgID0g
aHN6QjsKICAgICAgIGFpLT5BZGRyLkJsb2NrLnJ3b2Zmc2V0ICAgPSAoV29yZCkoYSkgLSAoV29y
ZCkoaGFkZHIpOwotICAgICAgYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0ID0gaGN0eHQ7Cisg
ICAgICBhaS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQuZWMgPSBoY3R4dDsKKyAgICAgIGFpLT5B
ZGRyLkJsb2NrLmFsbG9jYXRlZF9hdC5lcG9jaCA9IGVwOwogICAgICAgVkdfKGluaXRUaHJlYWRJ
bmZvKSAoJmFpLT5BZGRyLkJsb2NrLmFsbG9jX3RpbmZvKTsKICAgICAgIGFpLT5BZGRyLkJsb2Nr
LmFsbG9jX3RpbmZvLnRuciA9IHRucjsKLSAgICAgIGFpLT5BZGRyLkJsb2NrLmZyZWVkX2F0ID0g
VkdfKG51bGxfRXhlQ29udGV4dCkoKTs7CisgICAgICBhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9
IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsKICAgIH0gZWxzZSB7CiAgICAgICAvKiBO
byBibG9jayBmb3VuZC4gU2VhcmNoIGEgbm9uLWhlYXAgYmxvY2sgZGVzY3JpcHRpb24uICovCi0g
ICAgICBWR18oZGVzY3JpYmVfYWRkcikgKGEsIGFpKTsKKyAgICAgIFZHXyhkZXNjcmliZV9hZGRy
KSAoZXAsIGEsIGFpKTsKIAogICAgICAgLyogSW4gY2FzZSBhaSBjb250YWlucyBhIHRpZCwgc2V0
IHRuciB0byB0aGUgY29ycmVzcG9uZGluZyBoZWxncmluZAogICAgICAgICAgdGhyZWFkIG51bWJl
ci4gKi8KQEAgLTEwMCw3ICsxMDEsNyBAQAogICAgfQogfQogCi1Cb29sIEhHXyhnZXRfYW5kX3Bw
X2FkZHJkZXNjcikgKEFkZHIgYWRkcikKK0Jvb2wgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAo
RGlFcG9jaCBlcCwgQWRkciBhZGRyKQogewogCiAgICBCb29sIHJldDsKQEAgLTEwNyw3ICsxMDgs
NyBAQAogICAgQWRkckluZm8gZ2xhaTsKIAogICAgZ2xhaS50YWcgPSBBZGRyX1VuZGVzY3JpYmVk
OwotICAgSEdfKGRlc2NyaWJlX2FkZHIpIChhZGRyLCAmZ2xhaSk7CisgICBIR18oZGVzY3JpYmVf
YWRkcikgKGVwLCBhZGRyLCAmZ2xhaSk7CiAgICBWR18ocHBfYWRkcmluZm8pIChhZGRyLCAmZ2xh
aSk7CiAgICByZXQgPSBnbGFpLnRhZyAhPSBBZGRyX1Vua25vd247CiAKSW5kZXg6IGhlbGdyaW5k
L2hnX2FkZHJkZXNjci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhlbGdyaW5kL2hnX2FkZHJkZXNjci5oCShy
ZXZpc2lvbiAxNjQ2NSkKKysrIGhlbGdyaW5kL2hnX2FkZHJkZXNjci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMiArMzcsMTIgQEAKICAgIGxvY2sgZGVzY3JpcHRpb24sIHB1dHRpbmcgdGhlIHJl
c3VsdCBpbiBhaS4KICAgIFRoaXMgbWlnaHQgYWxsb2NhdGUgc29tZSBtZW1vcnkgaW4gYWksIHRv
IGJlIGNsZWFyZWQgd2l0aAogICAgVkdfKGNsZWFyX2FkZHJpbmZvKS4gKi8KLWV4dGVybiB2b2lk
IEhHXyhkZXNjcmliZV9hZGRyKSAoIEFkZHIgYSwgLypPVVQqL0FkZHJJbmZvKiBhaSApOworZXh0
ZXJuIHZvaWQgSEdfKGRlc2NyaWJlX2FkZHIpICggRGlFcG9jaCBlcCwgQWRkciBhLCAvKk9VVCov
QWRkckluZm8qIGFpICk7CiAKIC8qIEdldCBhIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIGFkZHIs
IHRoZW4gcHJpbnQgaXQgdXNpbmcgSEdfKHBwX2FkZHJkZXNjcikKICAgIHVzaW5nIHhtbCBGYWxz
ZSBhbmQgVkdfKHByaW50ZikgdG8gZW1pdCB0aGUgY2hhcmFjdGVycy4KICAgIFJldHVybnMgVHJ1
ZSBpZiBhIGRlc2NyaXB0aW9uIHdhcyBmb3VuZC9wcmludGVkLCBGYWxzZSBvdGhlcndpc2UuICov
Ci1leHRlcm4gQm9vbCBIR18oZ2V0X2FuZF9wcF9hZGRyZGVzY3IpIChBZGRyIGEpOworZXh0ZXJu
IEJvb2wgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoRGlFcG9jaCBlcCwgQWRkciBhKTsKIAog
LyogRm9yIGVycm9yIGNyZWF0aW9uL2FkZHJlc3MgZGVzY3JpcHRpb246CiAgICBtYXAgJ2RhdGFf
YWRkcicgdG8gYSBtYWxsb2MnZCBjaHVuaywgaWYgYW55LgpJbmRleDogaGVsZ3JpbmQvaGdfZXJy
b3JzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaGVsZ3JpbmQvaGdfZXJyb3JzLmMJKHJldmlzaW9uIDE2NDY1
KQorKysgaGVsZ3JpbmQvaGdfZXJyb3JzLmMJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw3ICs0MjEs
OCBAQAogICAgICAgICAgVkdfKHByaW50ZikoIkhHXyh1cGRhdGVfZXh0cmEpOiAiCiAgICAgICAg
ICAgICAgICAgICAgICAiJWQgY29uZmxpY3RpbmctZXZlbnQgcXVlcmllc1xuIiwgeHh4KTsKIAot
ICAgICAgSEdfKGRlc2NyaWJlX2FkZHIpICh4ZS0+WEUuUmFjZS5kYXRhX2FkZHIsICZ4ZS0+WEUu
UmFjZS5kYXRhX2FkZHJpbmZvKTsKKyAgICAgIEhHXyhkZXNjcmliZV9hZGRyKSAoVkdfKGdldF9l
cnJvcl93aGVyZSkoZXJyKS5lcG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeGUtPlhF
LlJhY2UuZGF0YV9hZGRyLCAmeGUtPlhFLlJhY2UuZGF0YV9hZGRyaW5mbyk7CiAKICAgICAgIC8q
IEFuZCBwb2tlIGFyb3VuZCBpbiB0aGUgY29uZmxpY3RpbmctZXZlbnQgbWFwLCB0byBzZWUgaWYg
d2UKICAgICAgICAgIGNhbiBydXN0bGUgdXAgYSBwbGF1c2libGUtbG9va2luZyBjb25mbGljdGlu
ZyBtZW1vcnkgYWNjZXNzCkBAIC03NDgsNyArNzQ5LDggQEAKICAgICAgICAgIFZHXyhwcmludGZf
eG1sKSgiICA8aXNyb290dGhyZWFkPjwvaXNyb290dGhyZWFkPlxuIik7CiAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgdGxfYXNzZXJ0KHRoci0+Y3JlYXRlZF9hdCAhPSBOVUxMKTsKLSAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KSggdGhyLT5jcmVhdGVkX2F0ICk7CisgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50
X2Vwb2NoKSggdGhyLT5jcmVhdGVkX2F0ICkgKTsKICAgICAgIH0KICAgICAgIFZHXyhwcmludGZf
eG1sKSgiPC9hbm5vdW5jZXRocmVhZD5cblxuIik7CiAKQEAgLTc2Nyw3ICs3NjksOCBAQAogICAg
ICAgICAgdGxfYXNzZXJ0KHRoci0+Y3JlYXRlZF9hdCAhPSBOVUxMKTsKICAgICAgICAgIFZHXyht
ZXNzYWdlKShWZ19Vc2VyTXNnLCAiVGhyZWFkICMlZCB3YXMgY3JlYXRlZFxuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHItPmVycm1zZ19pbmRleCk7Ci0gICAgICAgICBW
R18ocHBfRXhlQ29udGV4dCkoIHRoci0+Y3JlYXRlZF9hdCApOworICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9l
cG9jaCkoIHRoci0+Y3JlYXRlZF9hdCApICk7CiAgICAgICB9CiAgICAgICBWR18obWVzc2FnZSko
VmdfVXNlck1zZywgIlxuIik7CiAKQEAgLTc4OSw3ICs3OTIsOCBAQAogICAgICAgaWYgKGxrLT5h
cHBlYXJlZF9hdCkgewogICAgICAgICAgZW1pdCggIiAgPGF1eHdoYXQ+TG9jayBhdCAlcCB3YXMg
Zmlyc3Qgb2JzZXJ2ZWQ8L2F1eHdoYXQ+XG4iLAogICAgICAgICAgICAgICAgKHZvaWQqKWxrICk7
Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIGxrLT5hcHBlYXJlZF9hdCApOworICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICBWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoIGxrLT5hcHBlYXJlZF9hdCApICk7CiAgICAgICB9CiAKICAgIH0g
ZWxzZSB7CkBAIC03OTYsMTIgKzgwMCwxMyBAQAogICAgICAgaWYgKGxrLT5hcHBlYXJlZF9hdCkg
ewogICAgICAgICAgVkdfKHVtc2cpKCAiIExvY2sgYXQgJXAgd2FzIGZpcnN0IG9ic2VydmVkXG4i
LAogICAgICAgICAgICAgICAgICAgICAodm9pZCopbGstPmd1ZXN0YWRkciApOwotICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHQpKCBsay0+YXBwZWFyZWRfYXQgKTsKKyAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRf
ZXBvY2gpKCBsay0+YXBwZWFyZWRfYXQgKSApOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgIFZH
Xyh1bXNnKSggIiBMb2NrIGF0ICVwIDogbm8gc3RhY2t0cmFjZSBmb3IgZmlyc3Qgb2JzZXJ2YXRp
b25cbiIsCiAgICAgICAgICAgICAgICAgICAgICh2b2lkKilsay0+Z3Vlc3RhZGRyICk7CiAgICAg
ICB9Ci0gICAgICBIR18oZ2V0X2FuZF9wcF9hZGRyZGVzY3IpIChsay0+Z3Vlc3RhZGRyKTsKKyAg
ICAgIEhHXyhnZXRfYW5kX3BwX2FkZHJkZXNjcikgKFZHXyhjdXJyZW50X0RpRXBvY2gpKCksIGxr
LT5ndWVzdGFkZHIpOwogICAgICAgVkdfKHVtc2cpKCJcbiIpOwogICAgfQogfQpAQCAtOTQxLDEx
ICs5NDYsMTIgQEAKICAgICAgICAgIGVtaXQoICIgICAgPGh0aHJlYWRpZD4lZDwvaHRocmVhZGlk
PlxuIiwKICAgICAgICAgICAgICAgIChJbnQpeGUtPlhFLk1pc2MudGhyLT5lcnJtc2dfaW5kZXgg
KTsKICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7Ci0gICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAg
ICBpZiAoeGUtPlhFLk1pc2MuYXV4c3RyKSB7CiAgICAgICAgICAgICBlbWl0KCIgIDxhdXh3aGF0
PiVzPC9hdXh3aGF0PlxuIiwgeGUtPlhFLk1pc2MuYXV4c3RyKTsKICAgICAgICAgICAgIGlmICh4
ZS0+WEUuTWlzYy5hdXhjdHgpCi0gICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIHhl
LT5YRS5NaXNjLmF1eGN0eCApOworICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoCisgICAgICAgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCko
IHhlLT5YRS5NaXNjLmF1eGN0eCApKTsKICAgICAgICAgIH0KIAogICAgICAgfSBlbHNlIHsKQEAg
LTk1MywxMSArOTU5LDEyIEBACiAgICAgICAgICBlbWl0KCAiVGhyZWFkICMlZDogJXNcbiIsCiAg
ICAgICAgICAgICAgICAoSW50KXhlLT5YRS5NaXNjLnRoci0+ZXJybXNnX2luZGV4LAogICAgICAg
ICAgICAgICAgeGUtPlhFLk1pc2MuZXJyc3RyICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4
dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICBpZiAo
eGUtPlhFLk1pc2MuYXV4c3RyKSB7CiAgICAgICAgICAgICBlbWl0KCIgJXNcbiIsIHhlLT5YRS5N
aXNjLmF1eHN0cik7CiAgICAgICAgICAgICBpZiAoeGUtPlhFLk1pc2MuYXV4Y3R4KQotICAgICAg
ICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuTWlzYy5hdXhjdHggKTsKKyAgICAg
ICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgICAgICAg
VkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKCB4ZS0+WEUuTWlzYy5hdXhjdHggKSk7CiAg
ICAgICAgICB9CiAKICAgICAgIH0KQEAgLTk3OCwxNyArOTg1LDIxIEBACiAgICAgICAgICBlbWl0
KCAiICAgIDxodGhyZWFkaWQ+JWQ8L2h0aHJlYWRpZD5cbiIsCiAgICAgICAgICAgICAgICAoSW50
KXhlLT5YRS5Mb2NrT3JkZXIudGhyLT5lcnJtc2dfaW5kZXggKTsKICAgICAgICAgIGVtaXQoICIg
IDwveHdoYXQ+XG4iICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJy
b3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBW
R18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICBpZiAoeGUtPlhFLkxvY2tPcmRl
ci5zaG91bGRiZV9lYXJsaWVyX2VjCiAgICAgICAgICAgICAgJiYgeGUtPlhFLkxvY2tPcmRlci5z
aG91bGRiZV9sYXRlcl9lYykgewogICAgICAgICAgICAgZW1pdCggIiAgPGF1eHdoYXQ+UmVxdWly
ZWQgb3JkZXIgd2FzIGVzdGFibGlzaGVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICJhY3F1aXNp
dGlvbiBvZiBsb2NrIGF0ICVwPC9hdXh3aGF0PlxuIiwKICAgICAgICAgICAgICAgICAgICh2b2lk
Kil4ZS0+WEUuTG9ja09yZGVyLnNob3VsZGJlX2VhcmxpZXJfbGstPmd1ZXN0YWRkciApOwotICAg
ICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuTG9ja09yZGVyLnNob3VsZGJlX2Vh
cmxpZXJfZWMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAg
ICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAorICAgICAgICAgICAg
ICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9lYXJsaWVyX2VjICkpOwogICAgICAgICAg
ICAgZW1pdCggIiAgPGF1eHdoYXQ+Zm9sbG93ZWQgYnkgYSBsYXRlciBhY3F1aXNpdGlvbiAiCiAg
ICAgICAgICAgICAgICAgICAib2YgbG9jayBhdCAlcDwvYXV4d2hhdD5cbiIsCiAgICAgICAgICAg
ICAgICAgICAodm9pZCopeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9sYXRlcl9say0+Z3Vlc3Rh
ZGRyICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIHhlLT5YRS5Mb2NrT3JkZXIu
c2hvdWxkYmVfbGF0ZXJfZWMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBv
Y2gpKAorICAgICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAorICAg
ICAgICAgICAgICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9sYXRlcl9lYyApKTsKICAg
ICAgICAgIH0KICAgICAgICAgIGFubm91bmNlX0xvY2tQICggeGUtPlhFLkxvY2tPcmRlci5zaG91
bGRiZV9lYXJsaWVyX2xrICk7CiAgICAgICAgICBhbm5vdW5jZV9Mb2NrUCAoIHhlLT5YRS5Mb2Nr
T3JkZXIuc2hvdWxkYmVfbGF0ZXJfbGsgKTsKQEAgLTEwMDQsNyArMTAxNSw5IEBACiAgICAgICAg
ICAgICAgICAiYWNxdWlzaXRpb24gb2YgbG9jayBhdCAlcFxuIiwKICAgICAgICAgICAgICAgICh2
b2lkKil4ZS0+WEUuTG9ja09yZGVyLnNob3VsZGJlX2xhdGVyX2xrLT5ndWVzdGFkZHIpOwogICAg
ICAgICAgaWYgKHhlLT5YRS5Mb2NrT3JkZXIuYWN0dWFsX2VhcmxpZXJfZWMpIHsKLSAgICAgICAg
ICAgICBWR18ocHBfRXhlQ29udGV4dCkoeGUtPlhFLkxvY2tPcmRlci5hY3R1YWxfZWFybGllcl9l
Yyk7CisgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAg
ICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAorICAgICAgICAgICAgICAgICAg
IHhlLT5YRS5Mb2NrT3JkZXIuYWN0dWFsX2VhcmxpZXJfZWMpKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBlbWl0KCIgICAoc3RhY2sgdW5hdmFpbGFibGUpXG4iKTsKICAgICAgICAg
IH0KQEAgLTEwMTEsNyArMTAyNCw3IEBACiAgICAgICAgICBlbWl0KCAiXG4iICk7CiAgICAgICAg
ICBlbWl0KCIgZm9sbG93ZWQgYnkgYSBsYXRlciBhY3F1aXNpdGlvbiBvZiBsb2NrIGF0ICVwXG4i
LAogICAgICAgICAgICAgICAodm9pZCopeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9lYXJsaWVy
X2xrLT5ndWVzdGFkZHIpOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vy
cm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgg
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgaWYgKHhlLT5YRS5Mb2NrT3Jk
ZXIuc2hvdWxkYmVfZWFybGllcl9lYwogICAgICAgICAgICAgICYmIHhlLT5YRS5Mb2NrT3JkZXIu
c2hvdWxkYmVfbGF0ZXJfZWMpIHsKICAgICAgICAgICAgIGVtaXQoIlxuIik7CkBAIC0xMDE4LDEx
ICsxMDMxLDE1IEBACiAgICAgICAgICAgICBlbWl0KCAiUmVxdWlyZWQgb3JkZXIgd2FzIGVzdGFi
bGlzaGVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICJhY3F1aXNpdGlvbiBvZiBsb2NrIGF0ICVw
XG4iLAogICAgICAgICAgICAgICAgICAgKHZvaWQqKXhlLT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVf
ZWFybGllcl9say0+Z3Vlc3RhZGRyICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCko
IHhlLT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVfZWFybGllcl9lYyApOworICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhf
Y3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91
bGRiZV9lYXJsaWVyX2VjICkpOwogICAgICAgICAgICAgZW1pdCggIlxuIiApOwogICAgICAgICAg
ICAgZW1pdCggIiBmb2xsb3dlZCBieSBhIGxhdGVyIGFjcXVpc2l0aW9uIG9mIGxvY2sgYXQgJXBc
biIsCiAgICAgICAgICAgICAgICAgICAodm9pZCopeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9s
YXRlcl9say0+Z3Vlc3RhZGRyICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIHhl
LT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVfbGF0ZXJfZWMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJl
bnRfZXBvY2gpKAorICAgICAgICAgICAgICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9s
YXRlcl9lYyApKTsKICAgICAgICAgIH0KICAgICAgICAgIGVtaXQoIlxuIik7CiAgICAgICAgICBh
bm5vdW5jZV9Mb2NrUCAoIHhlLT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVfZWFybGllcl9sayApOwpA
QCAtMTA0OCw3ICsxMDY1LDcgQEAKICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7CiAg
ICAgICAgICBlbWl0KCAiICA8d2hhdD53aXRoIGVycm9yIGNvZGUgJWxkICglcyk8L3doYXQ+XG4i
LAogICAgICAgICAgICAgICAgeGUtPlhFLlB0aEFQSWVycm9yLmVyciwgeGUtPlhFLlB0aEFQSWVy
cm9yLmVycnN0ciApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdf
KGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogCiAgICAgICB9IGVsc2UgewogCkBAIC0xMDU3LDcg
KzEwNzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIHhlLT5YRS5QdGhBUEllcnJvci5mbm5h
bWUgKTsKICAgICAgICAgIGVtaXQoICIgICB3aXRoIGVycm9yIGNvZGUgJWxkICglcylcbiIsCiAg
ICAgICAgICAgICAgICB4ZS0+WEUuUHRoQVBJZXJyb3IuZXJyLCB4ZS0+WEUuUHRoQVBJZXJyb3Iu
ZXJyc3RyICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hl
cmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0
X2Vycm9yX3doZXJlKShlcnIpICk7CiAKICAgICAgIH0KIApAQCAtMTA3Nyw3ICsxMDk0LDcgQEAK
ICAgICAgICAgIGVtaXQoICIgICAgPGh0aHJlYWRpZD4lZDwvaHRocmVhZGlkPlxuIiwKICAgICAg
ICAgICAgICAgIChJbnQpeGUtPlhFLlVubG9ja0JvZ3VzLnRoci0+ZXJybXNnX2luZGV4ICk7CiAg
ICAgICAgICBlbWl0KCAiICA8L3h3aGF0PlxuIiApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogCiAgICAgICB9IGVs
c2UgewogCkBAIC0xMDg0LDcgKzExMDEsNyBAQAogICAgICAgICAgZW1pdCggIlRocmVhZCAjJWQg
dW5sb2NrZWQgYW4gaW52YWxpZCBsb2NrIGF0ICVwXG4iLAogICAgICAgICAgICAgICAgKEludCl4
ZS0+WEUuVW5sb2NrQm9ndXMudGhyLT5lcnJtc2dfaW5kZXgsCiAgICAgICAgICAgICAgICAodm9p
ZCopeGUtPlhFLlVubG9ja0JvZ3VzLmxvY2tfZ2EgKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKIAogICAgICAgfQog
CkBAIC0xMTA5LDcgKzExMjYsNyBAQAogICAgICAgICAgZW1pdCggIiAgICA8aHRocmVhZGlkPiVk
PC9odGhyZWFkaWQ+XG4iLAogICAgICAgICAgICAgICAgKEludCl4ZS0+WEUuVW5sb2NrRm9yZWln
bi5vd25lci0+ZXJybXNnX2luZGV4ICk7CiAgICAgICAgICBlbWl0KCAiICA8L3h3aGF0PlxuIiAp
OwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIp
ICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOwogICAgICAgICAgYW5ub3VuY2VfTG9ja1AgKCB4ZS0+WEUuVW5sb2NrRm9y
ZWlnbi5sb2NrICk7CiAKICAgICAgIH0gZWxzZSB7CkBAIC0xMTE5LDcgKzExMzYsNyBAQAogICAg
ICAgICAgICAgICAgKEludCl4ZS0+WEUuVW5sb2NrRm9yZWlnbi50aHItPmVycm1zZ19pbmRleCwK
ICAgICAgICAgICAgICAgICh2b2lkKil4ZS0+WEUuVW5sb2NrRm9yZWlnbi5sb2NrLT5ndWVzdGFk
ZHIsCiAgICAgICAgICAgICAgICAoSW50KXhlLT5YRS5VbmxvY2tGb3JlaWduLm93bmVyLT5lcnJt
c2dfaW5kZXggKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhn
ZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgIGFubm91bmNlX0xvY2tQICggeGUtPlhF
LlVubG9ja0ZvcmVpZ24ubG9jayApOwogCiAgICAgICB9CkBAIC0xMTQxLDcgKzExNTgsNyBAQAog
ICAgICAgICAgZW1pdCggIiAgICA8aHRocmVhZGlkPiVkPC9odGhyZWFkaWQ+XG4iLAogICAgICAg
ICAgICAgICAgKEludCl4ZS0+WEUuVW5sb2NrVW5sb2NrZWQudGhyLT5lcnJtc2dfaW5kZXggKTsK
ICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICBh
bm5vdW5jZV9Mb2NrUCAoIHhlLT5YRS5VbmxvY2tVbmxvY2tlZC5sb2NrKTsKIAogICAgICAgfSBl
bHNlIHsKQEAgLTExNDksNyArMTE2Niw3IEBACiAgICAgICAgICBlbWl0KCAiVGhyZWFkICMlZCB1
bmxvY2tlZCBhIG5vdC1sb2NrZWQgbG9jayBhdCAlcFxuIiwKICAgICAgICAgICAgICAgIChJbnQp
eGUtPlhFLlVubG9ja1VubG9ja2VkLnRoci0+ZXJybXNnX2luZGV4LAogICAgICAgICAgICAgICAg
KHZvaWQqKXhlLT5YRS5VbmxvY2tVbmxvY2tlZC5sb2NrLT5ndWVzdGFkZHIgKTsKLSAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKICAgICAgICAgIGFubm91bmNlX0xvY2tQICggeGUtPlhFLlVubG9ja1VubG9ja2VkLmxvY2sp
OwogCiAgICAgICB9CkBAIC0xMTc5LDcgKzExOTYsNyBAQAogICAgICAgICAgZW1pdCggIiAgICA8
aHRocmVhZGlkPiVkPC9odGhyZWFkaWQ+XG4iLAogICAgICAgICAgICAgICAgKEludCl4ZS0+WEUu
UmFjZS50aHItPmVycm1zZ19pbmRleCApOwogICAgICAgICAgZW1pdCggIiAgPC94d2hhdD5cbiIg
KTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJy
KSApOworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jf
d2hlcmUpKGVycikgKTsKIAogICAgICAgICAgaWYgKHhlLT5YRS5SYWNlLmgyX2N0KSB7CiAgICAg
ICAgICAgICB0bF9hc3NlcnQoeGUtPlhFLlJhY2UuaDJfY3RfYWNjRUMpOyAvLyBhc3N1cmVkIGJ5
IHVwZGF0ZV9leHRyYQpAQCAtMTE5Miw3ICsxMjA5LDggQEAKICAgICAgICAgICAgIGVtaXQoICIg
ICAgPGh0aHJlYWRpZD4lZDwvaHRocmVhZGlkPlxuIiwgCiAgICAgICAgICAgICAgICAgICB4ZS0+
WEUuUmFjZS5oMl9jdC0+ZXJybXNnX2luZGV4KTsKICAgICAgICAgICAgIGVtaXQoIiAgPC94YXV4
d2hhdD5cbiIpOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5o
Ml9jdF9hY2NFQyApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisg
ICAgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoIHhlLT5YRS5SYWNl
LmgyX2N0X2FjY0VDICkpOwogICAgICAgICAgfQogCiAgICAgICAgICBpZiAoeGUtPlhFLlJhY2Uu
aDFfY3QpIHsKQEAgLTEyMDQsMTMgKzEyMjIsMTcgQEAKICAgICAgICAgICAgICAgICAgIHhlLT5Y
RS5SYWNlLmgxX2N0LT5lcnJtc2dfaW5kZXggKTsKICAgICAgICAgICAgIGVtaXQoIiAgPC94YXV4
d2hhdD5cbiIpOwogICAgICAgICAgICAgaWYgKHhlLT5YRS5SYWNlLmgxX2N0X21ic2Vnc3RhcnRF
QykgewotICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5oMV9j
dF9tYnNlZ3N0YXJ0RUMgKTsKKyAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBv
Y2gpKAorICAgICAgICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAor
ICAgICAgICAgICAgICAgICAgICAgeGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdzdGFydEVDICkpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0Pih0
aGUgc3RhcnQgb2YgdGhlIHRocmVhZCk8L2F1eHdoYXQ+XG4iICk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbWl0KCAiICA8YXV4d2hhdD5idXQgYmVmb3JlPC9hdXh3aGF0PlxuIiApOwog
ICAgICAgICAgICAgaWYgKHhlLT5YRS5SYWNlLmgxX2N0X21ic2VnZW5kRUMpIHsKLSAgICAgICAg
ICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggeGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdlbmRFQyAp
OworICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAg
ICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAg
ICAgICB4ZS0+WEUuUmFjZS5oMV9jdF9tYnNlZ2VuZEVDICkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0Pih0aGUgZW5kIG9mIHRoZSB0aHJl
YWQpPC9hdXh3aGF0PlxuIiApOwogICAgICAgICAgICAgfQpAQCAtMTIyOCw3ICsxMjUwLDcgQEAK
IAogICAgICAgICAgdGxfYXNzZXJ0KHhlLT5YRS5SYWNlLmxvY2tzSGVsZFcpOwogICAgICAgICAg
c2hvd19Mb2NrUF9zdW1tYXJ5X3RleHRtb2RlKCB4ZS0+WEUuUmFjZS5sb2Nrc0hlbGRXLCAiIiAp
OwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIp
ICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOwogCiAgICAgICAgICBpZiAoeGUtPlhFLlJhY2UuaDJfY3QpIHsKICAgICAg
ICAgICAgIHRsX2Fzc2VydCh4ZS0+WEUuUmFjZS5oMl9jdF9hY2NFQyk7IC8vIGFzc3VyZWQgYnkg
dXBkYXRlX2V4dHJhCkBAIC0xMjQwLDcgKzEyNjIsOCBAQAogICAgICAgICAgICAgICAgICAgeGUt
PlhFLlJhY2UuaDJfY3RfYWNjU3pCLAogICAgICAgICAgICAgICAgICAgeGUtPlhFLlJhY2UuaDJf
Y3QtPmVycm1zZ19pbmRleCApOwogICAgICAgICAgICAgc2hvd19Mb2NrUF9zdW1tYXJ5X3RleHRt
b2RlKCB4ZS0+WEUuUmFjZS5oMl9jdF9sb2Nrc0hlbGRXLCAiIiApOwotICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5oMl9jdF9hY2NFQyApOworICAgICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICAgICBWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoIHhlLT5YRS5SYWNlLmgyX2N0X2FjY0VDICkpOwogICAgICAgICAg
fQogCiAgICAgICAgICBpZiAoeGUtPlhFLlJhY2UuaDFfY3QpIHsKQEAgLTEyNDgsMTMgKzEyNzEs
MTcgQEAKICAgICAgICAgICAgICAgICAgICJhZnRlclxuIiwKICAgICAgICAgICAgICAgICAgIHhl
LT5YRS5SYWNlLmgxX2N0LT5lcnJtc2dfaW5kZXggKTsKICAgICAgICAgICAgIGlmICh4ZS0+WEUu
UmFjZS5oMV9jdF9tYnNlZ3N0YXJ0RUMpIHsKLSAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggeGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdzdGFydEVDICk7CisgICAgICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKSgKKyAgICAgICAgICAgICAgICAgICAgIHhlLT5YRS5SYWNlLmgx
X2N0X21ic2Vnc3RhcnRFQyApKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICBlbWl0KCAiICAgKHRoZSBzdGFydCBvZiB0aGUgdGhyZWFkKVxuIiApOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZW1pdCggIiBidXQgYmVmb3JlXG4iICk7CiAgICAgICAgICAgICBpZiAo
eGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdlbmRFQykgewotICAgICAgICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5oMV9jdF9tYnNlZ2VuZEVDICk7CisgICAgICAgICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdf
RUNfd2l0aF9jdXJyZW50X2Vwb2NoKSgKKyAgICAgICAgICAgICAgICAgICAgIHhlLT5YRS5SYWNl
LmgxX2N0X21ic2VnZW5kRUMgKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgZW1pdCggIiAgICh0aGUgZW5kIG9mIHRoZSB0aHJlYWQpXG4iICk7CiAgICAgICAgICAgICB9
CkBAIC0xMzA3LDcgKzEzMzQsNyBAQAogICAgICAgc2hvd19Mb2NrUF9zdW1tYXJ5X3RleHRtb2Rl
KCBsb2Nrc0hlbGRXX1AsICIiICk7CiAgICAgICBIR18oZnJlZSkgKGxvY2tzSGVsZFdfUCk7CiAg
ICB9Ci0gICBWR18ocHBfU3RhY2tUcmFjZSkgKGlwcywgbl9pcHMpOworICAgVkdfKHBwX1N0YWNr
VHJhY2UpKCBWR18oY3VycmVudF9EaUVwb2NoKSgpLCBpcHMsIG5faXBzICk7CiAgICBWR18ocHJp
bnRmKSAoIlxuIik7CiB9CiAKSW5kZXg6IGhlbGdyaW5kL2hnX21haW4uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBoZWxncmluZC9oZ19tYWluLmMJKHJldmlzaW9uIDE2NDY1KQorKysgaGVsZ3JpbmQvaGdfbWFp
bi5jCSh3b3JraW5nIGNvcHkpCkBAIC00ODMsNiArNDgzLDcgQEAKICAgICAgICAgICAgICAgICAg
ICAgICBCb29sIHNob3dfbG9ja19hZGRyZGVzY3IsCiAgICAgICAgICAgICAgICAgICAgICAgQm9v
bCBzaG93X2ludGVybmFsX2RhdGEpCiB7CisgICBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlF
cG9jaCkoKTsKICAgIHNwYWNlKGQrMCk7IAogICAgaWYgKHNob3dfaW50ZXJuYWxfZGF0YSkKICAg
ICAgIFZHXyhwcmludGYpKCJMb2NrICVwIChnYSAlI2x4KSB7XG4iLCBsaywgbGstPmd1ZXN0YWRk
cik7CkBAIC00ODksNyArNDkwLDcgQEAKICAgIGVsc2UKICAgICAgIFZHXyhwcmludGYpKCJMb2Nr
IGdhICUjbHgge1xuIiwgbGstPmd1ZXN0YWRkcik7CiAgICBpZiAoIXNob3dfbG9ja19hZGRyZGVz
Y3IgCi0gICAgICAgfHwgIUhHXyhnZXRfYW5kX3BwX2FkZHJkZXNjcikgKChBZGRyKSBsay0+Z3Vl
c3RhZGRyKSkKKyAgICAgICB8fCAhSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoZXAsIChBZGRy
KSBsay0+Z3Vlc3RhZGRyKSkKICAgICAgIFZHXyhwcmludGYpKCJcbiIpOwogICAgICAgCiAgICBp
ZiAoc0hPV19BRE1JTikgewpAQCAtNDU5OCw3ICs0NTk5LDcgQEAKICAgIERlYnVnSW5mbyogZGlu
Zm87CiAgICBjb25zdCBIQ2hhciogc29uYW1lOwogCi0gICBkaW5mbyA9IFZHXyhmaW5kX0RlYnVn
SW5mbykoIGdhICk7CisgICBkaW5mbyA9IFZHXyhmaW5kX0RlYnVnSW5mbykoIFZHXyhjdXJyZW50
X0RpRXBvY2gpKCksIGdhICk7CiAgICBpZiAoIWRpbmZvKSByZXR1cm4gRmFsc2U7CiAKICAgIHNv
bmFtZSA9IFZHXyhEZWJ1Z0luZm9fZ2V0X3NvbmFtZSkoZGluZm8pOwpAQCAtNTgxNyw5ICs1ODE4
LDkgQEAKICAgICAgIFZHXyhYVE1lbW9yeV9GdWxsX2luaXQpKFZHXyhYVF9maWx0ZXJfMXRvcF9h
bmRfbWF5YmVfYmVsb3dfbWFpbikpOwogfQogCi1zdGF0aWMgdm9pZCBoZ19pbmZvX2xvY2F0aW9u
IChBZGRyIGEpCitzdGF0aWMgdm9pZCBoZ19pbmZvX2xvY2F0aW9uIChEaUVwb2NoIGVwLCBBZGRy
IGEpCiB7Ci0gICAodm9pZCkgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoYSk7CisgICAodm9p
ZCkgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoZXAsIGEpOwogfQogCiBzdGF0aWMgdm9pZCBo
Z19wcmVfY2xvX2luaXQgKCB2b2lkICkKSW5kZXg6IGhlbGdyaW5kL2xpYmhiX2NvcmUuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBoZWxncmluZC9saWJoYl9jb3JlLmMJKHJldmlzaW9uIDE2NDY1KQorKysgaGVs
Z3JpbmQvbGliaGJfY29yZS5jCSh3b3JraW5nIGNvcHkpCkBAIC00MDk1LDcgKzQwOTUsNyBAQAog
ICAgICAgVkdfKHByaW50ZikoIkxPQ0FMIEt3OiB0aHIgJXAsICBLdyAlbGx1LCAgZWMgJXBcbiIs
CiAgICAgICAgICAgICAgICAgICB0aHIsIHBhaXIudWxsLCBwYWlyLmVjICk7CiAgICBpZiAoMCkK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShwYWlyLmVjKTsKKyAgICAgIFZHXyhwcF9FeGVDb250
ZXh0QW5kRXBvY2gpKFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShwYWlyLmVjKSk7CiB9
CiAKIHN0YXRpYyBJbnQgY21wX19VTG9uZ19uX0VDX19ieV9VTG9uZyAoIGNvbnN0IFVMb25nX25f
RUMqIHBhaXIxLApJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9hZGRyaW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGluY2x1ZGUvcHViX3Rvb2xfYWRkcmluZm8uaAkocmV2aXNpb24gMTY0NjUpCisrKyBpbmNs
dWRlL3B1Yl90b29sX2FkZHJpbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsNyBA
QAogICAgICAgLy8gKHNwb2Zmc2V0IHdpbGwgYmUgbmVnYXRpdmUsIGFzIHN0YWNrcyBhcmUgYXNz
dW1lZCBncm93aW5nIGRvd24pLgogICAgICAgc3RydWN0IHsKICAgICAgICAgIFRocmVhZEluZm8g
dGluZm87CisgICAgICAgICBEaUVwb2NoICBlcG9jaDsKICAgICAgICAgIEFkZHIgICAgIElQOwog
ICAgICAgICAgSW50ICAgICAgZnJhbWVObzsKICAgICAgICAgIFN0YWNrUG9zIHN0YWNrUG9zOwpA
QCAtMTUxLDkgKzE1Miw5IEBACiAgICAgICAgICBjb25zdCBIQ2hhciogYmxvY2tfZGVzYzsgICAv
LyAiYmxvY2siLCJtZW1wb29sIiwidXNlci1kZWZpbmVkIixhcmVuYQogICAgICAgICAgU2l6ZVQg
ICAgICAgYmxvY2tfc3pCOwogICAgICAgICAgUHRyZGlmZlQgICAgcndvZmZzZXQ7Ci0gICAgICAg
ICBFeGVDb250ZXh0KiBhbGxvY2F0ZWRfYXQ7ICAvLyBtaWdodCBiZSBudWxsX0V4ZUNvbnRleHQu
Ci0gICAgICAgICBUaHJlYWRJbmZvICBhbGxvY190aW5mbzsgICAvLyB3aGljaCB0aHJlYWQgZGlk
IGFsbG9jIHRoaXMgYmxvY2suCi0gICAgICAgICBFeGVDb250ZXh0KiBmcmVlZF9hdDsgICAgICAv
LyBtaWdodCBiZSBudWxsX0V4ZUNvbnRleHQuCisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2gg
YWxsb2NhdGVkX2F0OyAvLyBtaWdodCBjb250YWluIG51bGxfRXhlQ29udGV4dC4KKyAgICAgICAg
IFRocmVhZEluZm8gICAgICAgICBhbGxvY190aW5mbzsgIC8vIHdoaWNoIHRocmVhZCBhbGxvYydk
IHRoaXMgYmxvY2suCisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggZnJlZWRfYXQ7ICAgICAv
LyBtaWdodCBjb250YWluIG51bGxfRXhlQ29udGV4dC4KICAgICAgIH0gQmxvY2s7CiAKICAgICAg
IC8vIEluIGEgZ2xvYmFsIC5kYXRhIHN5bWJvbC4gIFRoaXMgaG9sZHMKQEAgLTIwNCw3ICsyMDUs
NyBAQAogICAgT24gZW50cnksIGFpLT50YWcgbXVzdCBiZSBlcXVhbCB0byBBZGRyX1VuZGVzY3Jp
YmVkLgogICAgVGhpcyBtaWdodCBhbGxvY2F0ZSBzb21lIG1lbW9yeSwgdGhhdCBjYW4gYmUgY2xl
YXJlZCB3aXRoCiAgICBWR18oY2xlYXJfYWRkcmluZm8pLiAqLwotZXh0ZXJuIHZvaWQgVkdfKGRl
c2NyaWJlX2FkZHIpICggQWRkciBhLCAvKk9VVCovQWRkckluZm8qIGFpICk7CitleHRlcm4gdm9p
ZCBWR18oZGVzY3JpYmVfYWRkcikgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIC8qT1VUKi9BZGRySW5m
byogYWkgKTsKIAogZXh0ZXJuIHZvaWQgVkdfKGNsZWFyX2FkZHJpbmZvKSAoIEFkZHJJbmZvKiBh
aSk7CiAKSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfYmFzaWNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5j
bHVkZS9wdWJfdG9vbF9iYXNpY3MuaAkocmV2aXNpb24gMTY0NjUpCisrKyBpbmNsdWRlL3B1Yl90
b29sX2Jhc2ljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNiArMTI5LDI0IEBACiAvKiBUaHJl
YWRJZHMgYXJlIHNpbXBseSBpbmRpY2VzIGludG8gdGhlIFZHXyh0aHJlYWRzKVtdIGFycmF5LiAq
LwogdHlwZWRlZiBVSW50IFRocmVhZElkOwogCisKKy8qIFlvdSBuZWVkIGEgZGVidWdpbmZvIGVw
b2NoIGluIG9yZGVyIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBpbnRvIGFueSBzb3VyY2UKKyAgIGxl
dmVsIGVudGl0eSwgc2luY2UgdGhhdCBjb252ZXJzaW9uIGRlcGVuZHMgb24gd2hhdCBvYmplY3Rz
IHdlcmUgbWFwcGVkCisgICBpbiBhdCB0aGUgdGltZS4gIEFuIGVwb2NoIGlzIHNpbXBseSBhIG1v
bm90b25pY2FsbHkgaW5jcmVhc2luZyBjb3VudGVyLAorICAgd2hpY2ggd2Ugd3JhcCB1cCBpbiBh
IHN0cnVjdCBzbyBhcyB0byBlbmFibGUgdGhlIEMgdHlwZSBzeXN0ZW0gdG8KKyAgIGRpc3Rpbmd1
aXNoIGl0IGZyb20gb3RoZXIga2luZHMgb2YgbnVtYmVycy4gIG1fZGVidWdpbmZvIGhvbGRzIGFu
ZAorICAgbWFpbnRhaW5zIHRoZSBjdXJyZW50IGVwb2NoIG51bWJlci4gKi8KK3R5cGVkZWYgIHN0
cnVjdCB7IFVJbnQgbjsgfSAgRGlFcG9jaDsKKworc3RhdGljIGlubGluZSBEaUVwb2NoIERpRXBv
Y2hfSU5WQUxJRCAoIHZvaWQgKSB7CisgICBEaUVwb2NoIGRlcDsgZGVwLm4gPSAwOyByZXR1cm4g
ZGVwOworfQorCitzdGF0aWMgaW5saW5lIEJvb2wgaXNfRGlFcG9jaF9JTlZBTElEICggRGlFcG9j
aCBkZXAgKSB7CisgICByZXR1cm4gZGVwLm4gPT0gMDsKK30KKworCiAvKiBNYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWVkIHRvIGFsbG9jYXRlIGFuZCByZWxlYXNlIG1lbW9yeS4KICAgIFRoZSBhbGxv
Y2F0aW9uL3JlbGVhc2UgZnVuY3Rpb25zIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4K
ICAgIFRoZSBBbGxvY19Gbl90IGZ1bmN0aW9uIG11c3QgYWxsb2NhdGUgYSBjaHVuayBvZiBtZW1v
cnkgb2Ygc2l6ZSBzekIuCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX2RlYnVnaW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfZGVidWdpbmZvLmgJKHJldmlzaW9uIDE2NDY1KQor
KysgaW5jbHVkZS9wdWJfdG9vbF9kZWJ1Z2luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMg
KzMxLDIyIEBACiAjaWZuZGVmIF9fUFVCX1RPT0xfREVCVUdJTkZPX0gKICNkZWZpbmUgX19QVUJf
VE9PTF9ERUJVR0lORk9fSAogCi0jaW5jbHVkZSAicHViX3Rvb2xfYmFzaWNzLmgiICAgLy8gVkdf
IG1hY3JvCisjaW5jbHVkZSAicHViX3Rvb2xfYmFzaWNzLmgiICAgLy8gVkdfIG1hY3JvLCBEaUVw
b2NoCiAjaW5jbHVkZSAicHViX3Rvb2xfeGFycmF5LmgiICAgLy8gWEFycmF5CiAKKwogLyo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSovCi0vKj09PSBPYnRhaW5pbmcgZGVidWcgaW5mb3JtYXRpb24gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPT09Ki8KKy8qPT09IERlYnVnaW5mbyBlcG9jaHMuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0qLwogLyo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PSovCiAKKy8vIFRoaXMgcmV0dXJucyB0aGUgY3VycmVudCBlcG9jaC4KK0RpRXBvY2ggVkdfKGN1
cnJlbnRfRGlFcG9jaCkodm9pZCk7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKj09PSBPYnRhaW5p
bmcgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBzb3VyY2UgYXJ0ZWZhY3RzLiAgICAgICAgPT09
Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0qLworCiAvKiBJTVBPUlRBTlQgQ09NTUVOVCBhYm91dCBtZW1vcnkg
cGVyc2lzdGVuY2UgYW5kIG93bmVyc2hpcC4KIAogICAgTWFueSBmdW5jdGlvbnMgYmVsb3cgYXJl
IHJldHVybmluZyBhIHN0cmluZyBpbiBhIEhDaGFyKiogYXJndW1lbnQuCkBAIC03NiwxMSArODUs
MTEgQEAKICAgIGRlbWFuZ2xlcyBDKysgZnVuY3Rpb24gbmFtZXMuICBWR18oZ2V0X2ZubmFtZV93
X29mZnNldCkgaXMgdGhlCiAgICBzYW1lLCBleGNlcHQgaXQgYXBwZW5kcyAiK04iIHRvIHN5bWJv
bCBuYW1lcyB0byBpbmRpY2F0ZSBvZmZzZXRzLgogICAgTk9URTogU2VlIElNUE9SVEFOVCBDT01N
RU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBvd25lcnNoaXAuICovCi1leHRlcm4gQm9v
bCBWR18oZ2V0X2ZpbGVuYW1lKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBmaWxlbmFtZSApOwot
ZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWUpICAgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogZm5u
YW1lICk7Ci1leHRlcm4gQm9vbCBWR18oZ2V0X2xpbmVudW0pICAoIEFkZHIgYSwgVUludCogbGlu
ZW51bSApOworZXh0ZXJuIEJvb2wgVkdfKGdldF9maWxlbmFtZSkgKCBEaUVwb2NoIGVwLCBBZGRy
IGEsIGNvbnN0IEhDaGFyKiogZmlsZW5hbWUgKTsKK2V4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1l
KSAgICggRGlFcG9jaCBlcCwgQWRkciBhLCBjb25zdCBIQ2hhcioqIGZubmFtZSApOworZXh0ZXJu
IEJvb2wgVkdfKGdldF9saW5lbnVtKSAgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIFVJbnQqIGxpbmVu
dW0gKTsKIGV4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogZm5uYW1lICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENo
YXIqKiBmbm5hbWUgKTsKIAogLyogVGhpcyBvbmUgaXMgdGhlIG1vc3QgZ2VuZXJhbC4gIEl0IGdp
dmVzIGZpbGVuYW1lLCBsaW5lIG51bWJlciBhbmQKICAgIG9wdGlvbmFsbHkgZGlyZWN0b3J5IG5h
bWUuICBmaWxlbmFtZSBhbmQgbGluZW51bSBtYXkgbm90IGJlIE5VTEwuCkBAIC05NSw3ICsxMDQs
NyBAQAogICAgUmV0dXJuZWQgdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgYW55IGZpbGVuYW1lL2xp
bmUgaW5mbyBjb3VsZCBiZQogICAgZm91bmQuICovCiBleHRlcm4gQm9vbCBWR18oZ2V0X2ZpbGVu
YW1lX2xpbmVudW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIEFkZHIgYSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIERpRXBvY2ggZXAsIEFkZHIgYSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9jb25zdCBIQ2hhcioqIGZpbGVuYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovY29uc3QgSENoYXIqKiBk
aXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGlu
ZW51bSApOwpAQCAtMTA4LDcgKzExNyw4IEBACiAgICBvZiBpdHMgc3ltYm9scywgdGhpcyBmdW5j
dGlvbiB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlY29nbmlzZSBmdW5jdGlvbgogICAgZW50cnkgcG9p
bnRzIHdpdGhpbiBpdC4KICAgIE5PVEU6IFNlZSBJTVBPUlRBTlQgQ09NTUVOVCBhYm92ZSBhYm91
dCBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwLiAqLwotZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5h
bWVfaWZfZW50cnkpICggQWRkciBhLCBjb25zdCBIQ2hhcioqIGZubmFtZSApOworZXh0ZXJuIEJv
b2wgVkdfKGdldF9mbm5hbWVfaWZfZW50cnkpICggRGlFcG9jaCBlcCwgQWRkciBhLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSENoYXIqKiBmbm5hbWUgKTsK
IAogdHlwZWRlZgogICAgZW51bSB7CkBAIC0xMjEsMTMgKzEzMSwxMyBAQAogZXh0ZXJuIFZnX0Zu
TmFtZUtpbmQgVkdfKGdldF9mbm5hbWVfa2luZCkgKCBjb25zdCBIQ2hhciogbmFtZSApOwogCiAv
KiBMaWtlIFZHXyhnZXRfZm5uYW1lX2tpbmQpLCBidXQgdGFrZXMgYSBjb2RlIGFkZHJlc3MuICov
Ci1leHRlcm4gVmdfRm5OYW1lS2luZCBWR18oZ2V0X2ZubmFtZV9raW5kX2Zyb21fSVApICggQWRk
ciBpcCApOworZXh0ZXJuIFZnX0ZuTmFtZUtpbmQgVkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQ
KSAoIERpRXBvY2ggZXAsIEFkZHIgaXAgKTsKIAogLyogTG9va3MgdXAgZGF0YV9hZGRyIGluIHRo
ZSBjb2xsZWN0aW9uIG9mIGRhdGEgc3ltYm9scywgYW5kIGlmIGZvdW5kCiAgICBwdXRzIGl0cyBu
YW1lIChvciBhcyBtdWNoIGFzIHdpbGwgZml0KSBpbnRvIGRuYW1lWzAgLi4gbl9kbmFtZS0xXSwK
ICAgIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVybyB0ZXJtaW5hdGVkLiAgQWxzbyBkYXRh
X2FkZHIncyBvZmZzZXQKICAgIGZyb20gdGhlIHN5bWJvbCBzdGFydCBpcyBwdXQgaW50byAqb2Zm
c2V0LiAqLwotZXh0ZXJuIEJvb2wgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQpKCBBZGRyIGRh
dGFfYWRkciwKK2V4dGVybiBCb29sIFZHXyhnZXRfZGF0YXN5bV9hbmRfb2Zmc2V0KSggRGlFcG9j
aCBlcCwgQWRkciBkYXRhX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qT1VUKi9jb25zdCBIQ2hhcioqIGRuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovUHRyZGlmZlQqIG9mZnNldCApOwogCkBAIC0xNDcs
NyArMTU3LDcgQEAKIEJvb2wgVkdfKGdldF9kYXRhX2Rlc2NyaXB0aW9uKSggCiAgICAgICAgIC8q
TU9EKi8gWEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTF2LAogICAgICAgICAvKk1PRCovIFhB
cnJheSogLyogb2YgSENoYXIgKi8gZG5hbWUydiwKLSAgICAgICAgQWRkciBkYXRhX2FkZHIKKyAg
ICAgICAgRGlFcG9jaCBlcCwgQWRkciBkYXRhX2FkZHIKICAgICAgKTsKIAogLyogU3VjY2VlZHMg
aWYgdGhlIGFkZHJlc3MgaXMgd2l0aGluIGEgc2hhcmVkIG9iamVjdCBvciB0aGUgbWFpbiBleGVj
dXRhYmxlLgpAQCAtMTU0LDcgKzE2NCw3IEBACiAgICBJdCBmaXJzdCBzZWFyY2hlcyBpZiBBZGRy
IGEgYmVsb25ncyB0byB0aGUgdGV4dCBzZWdtZW50IG9mIGRlYnVnIGluZm8uCiAgICBJZiBub3Qg
Zm91bmQsIGl0IGFza3MgdGhlIGFkZHJlc3Mgc3BhY2UgbWFuYWdlciB3aGV0aGVyIGl0CiAgICBr
bm93cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXBwaW5nLiAq
LwotZXh0ZXJuIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiog
b2JqbmFtZSApOworZXh0ZXJuIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAoIERpRXBvY2ggZXAsIEFk
ZHIgYSwgY29uc3QgSENoYXIqKiBvYmpuYW1lICk7CiAKIAogLyogQ3Vyc29yIGFsbG93aW5nIHRv
IGRlc2NyaWJlIGlubGluZWQgZnVuY3Rpb24gY2FsbHMgYXQgYW4gSVAsCkBAIC0xNjksNyArMTc5
LDcgQEAKICAgIGVpcCBjYW4gcG9zc2libHkgY29ycmVzcG9uZHMgdG8gaW5saW5lZCBmdW5jdGlv
biBjYWxsKHMpLgogICAgVG8gZGVzY3JpYmUgZWlwIGFuZCB0aGUgaW5saW5lZCBmdW5jdGlvbiBj
YWxscywgdGhlIGZvbGxvd2luZyBtdXN0CiAgICBiZSBkb25lOgotICAgICAgIElubElQQ3Vyc29y
ICppaXBjID0gVkdfKG5ld19JSVBDKShlaXApOworICAgICAgIElubElQQ3Vyc29yICppaXBjID0g
VkdfKG5ld19JSVBDKShlcCwgZWlwKTsKICAgICAgICBkbyB7CiAgICAgICAgICAgYnVmID0gVkdf
KGRlc2NyaWJlX0lQKShlaXAsIGlpcGMpOwogICAgICAgICAgIC4uLiB1c2UgYnVmIC4uLgpAQCAt
MTgyLDEyICsxOTIsMTYgQEAKICAgIE5vdGUsIHRoYXQgdGhlIHJldHVybmVkIHN0cmluZyBpcyBh
bGxvY2F0ZWQgaW4gYSBzdGF0aWMgYnVmZmVyIGxvY2FsIHRvCiAgICBWR18oZGVzY3JpYmVfSVAp
LiBUaGF0IGJ1ZmZlciB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggZXZlcnkgaW52b2NhdGlvbi4K
ICAgIFRoZXJlZm9yZSwgY2FsbGVycyBuZWVkIHRvIHBvc3NpYmx5IHN0YXNoIGF3YXkgdGhlIHN0
cmluZy4KKworICAgU2luY2UgdGhpcyBtYXBzIGEgY29kZSBsb2NhdGlvbiB0byBhIHNvdXJjZSBh
cnRlZmFjdCAoZnVuY3Rpb24gbmFtZXMpLAorICAgbmV3X0lJUEMgcmVxdWlyZXMgYSBEaUVwb2No
IGFyZ3VtZW50IChlcCkgdG9vLgogKi8KLWV4dGVybiBjb25zdCBIQ2hhciogVkdfKGRlc2NyaWJl
X0lQKShBZGRyIGVpcCwgY29uc3QgSW5sSVBDdXJzb3IqIGlpcGMpOworZXh0ZXJuIGNvbnN0IEhD
aGFyKiBWR18oZGVzY3JpYmVfSVApKERpRXBvY2ggZXAsIEFkZHIgZWlwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElubElQQ3Vyc29yKiBpaXBjKTsKIAogLyog
QnVpbGRzIGEgSUlQQyAoSW5saW5lZCBJUCBDdXJzb3IpIHRvIGRlc2NyaWJlIGVpcCBhbmQgYWxs
IHRoZSBpbmxpbmVkIGNhbGxzCiAgICBhdCBlaXAuIFN1Y2ggYSBjdXJzb3IgbXVzdCBiZSBkZWxl
dGVkIGFmdGVyIHVzZSB1c2luZyBWR18oZGVsZXRlX0lJUEMpLiAqLwotZXh0ZXJuIElubElQQ3Vy
c29yKiBWR18obmV3X0lJUEMpKEFkZHIgZWlwKTsKK2V4dGVybiBJbmxJUEN1cnNvciogVkdfKG5l
d19JSVBDKShEaUVwb2NoIGVwLCBBZGRyIGVpcCk7CiAvKiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhl
IG5leHQgY2FsbCB0byBkZXNjcmliZS4KICAgIFJldHVybnMgVHJ1ZSBpZiB0aGVyZSBhcmUgc3Rp
bGwgY2FsbHMgdG8gZGVzY3JpYmUuCiAgICBGYWxzZSBpZiBub3RoaW5nIHRvIGRlc2NyaWJlIGFu
eW1vcmUuICovCkBAIC0yMzksNyArMjUzLDcgQEAKIAogCiAvKj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qPT09
IE9idGFpbmluZyBkZWJ1ZyBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9PT0qLworLyo9PT0gT2J0YWluaW5nIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gc2hh
cmVkIG9iamVjdHMuICAgICAgICAgID09PSovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyogQSB3YXkg
dG8gbWFrZSBsaW1pdGVkIGRlYnVnaW5mbyBxdWVyaWVzIG9uIGEgcGVyLW1hcHBlZC1vYmplY3QK
QEAgLTI0OCw3ICsyNjIsNyBAQAogCiAvKiBSZXR1cm5zIE5VTEwgaWYgdGhlIERlYnVnSW5mbyBp
c24ndCBmb3VuZC4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmCiAgICBkZWJ1ZyBpbmZvIGlzIHByZXNl
bnQgb3Igbm90LiAqLwotRGVidWdJbmZvKiBWR18oZmluZF9EZWJ1Z0luZm8pICggQWRkciBhICk7
CitEZWJ1Z0luZm8qIFZHXyhmaW5kX0RlYnVnSW5mbykgKCBEaUVwb2NoIGVwLCBBZGRyIGEgKTsK
IAogLyogRmlzaCBiaXRzIG91dCBvZiBEZWJ1Z0luZm9zLiAqLwogQWRkciAgICAgICAgICBWR18o
RGVidWdJbmZvX2dldF90ZXh0X2F2bWEpICAgKCBjb25zdCBEZWJ1Z0luZm8gKmRpICk7CkluZGV4
OiBpbmNsdWRlL3B1Yl90b29sX2Vycm9ybWdyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJf
dG9vbF9lcnJvcm1nci5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGluY2x1ZGUvcHViX3Rvb2xfZXJy
b3JtZ3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDExIEBACiAKIC8qIFVzZWZ1bCBp
biBWR18odGRpY3QpLnRvb2xfZXJyb3JfbWF0Y2hlc19zdXBwcmVzc2lvbigpLAogICogVkdfKHRk
aWN0KS50b29sX3BwX0Vycm9yKCksIGV0YyAqLwotRXhlQ29udGV4dCogIFZHXyhnZXRfZXJyb3Jf
d2hlcmUpICAgKCBjb25zdCBFcnJvciogZXJyICk7Ci1FcnJvcktpbmQgICAgVkdfKGdldF9lcnJv
cl9raW5kKSAgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKLUFkZHIgICAgICAgICBWR18oZ2V0X2Vy
cm9yX2FkZHJlc3MpICggY29uc3QgRXJyb3IqIGVyciApOwotY29uc3QgSENoYXIqIFZHXyhnZXRf
ZXJyb3Jfc3RyaW5nKSAgKCBjb25zdCBFcnJvciogZXJyICk7Ci12b2lkKiAgICAgICAgVkdfKGdl
dF9lcnJvcl9leHRyYSkgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKK0V4ZUNvbnRleHRBbmRFcG9j
aCAgVkdfKGdldF9lcnJvcl93aGVyZSkgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKK0Vycm9yS2lu
ZCAgICAgICAgICAgVkdfKGdldF9lcnJvcl9raW5kKSAgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsK
K0FkZHIgICAgICAgICAgICAgICAgVkdfKGdldF9lcnJvcl9hZGRyZXNzKSAoIGNvbnN0IEVycm9y
KiBlcnIgKTsKK2NvbnN0IEhDaGFyKiAgICAgICAgVkdfKGdldF9lcnJvcl9zdHJpbmcpICAoIGNv
bnN0IEVycm9yKiBlcnIgKTsKK3ZvaWQqICAgICAgICAgICAgICAgVkdfKGdldF9lcnJvcl9leHRy
YSkgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKIAogLyogQ2FsbCB0aGlzIHdoZW4gYW4gZXJyb3Ig
b2NjdXJzLiAgSXQgd2lsbCBiZSByZWNvcmRlZCBpZiBpdCBoYXNuJ3QgYmVlbgogICAgc2VlbiBi
ZWZvcmUuICBJZiBpdCBoYXMsIHRoZSBleGlzdGluZyBlcnJvciByZWNvcmQgd2lsbCBoYXZlIGl0
cyBjb3VudApAQCAtOTAsNyArOTAsNyBAQAogICAgd2hldGhlciB0byBhZGQgdGhlIGVycm9yIGlu
IHRoZSBlcnJvciB0b3RhbCBjb3VudCAoYW5vdGhlciBtaWxkIGhhY2spLiAqLwogZXh0ZXJuIEJv
b2wgVkdfKHVuaXF1ZV9lcnJvcikgKCBUaHJlYWRJZCB0aWQsIEVycm9yS2luZCBla2luZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciBhLCBjb25zdCBIQ2hhciogcywgdm9p
ZCogZXh0cmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZUNvbnRleHQqIHdo
ZXJlLCBCb29sIHByaW50X2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
eGVDb250ZXh0QW5kRXBvY2ggd2hlcmUsIEJvb2wgcHJpbnRfZXJyb3IsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJvb2wgYWxsb3dfR0RCX2F0dGFjaCwgQm9vbCBjb3VudF9lcnJv
ciApOwogCiAvKiBHZXRzIGZyb20gZmQgKGFuIG9wZW5lZCBzdXBwcmVzc2lvbiBmaWxlKSBhIG5v
bi1ibGFuaywgbm9uLWNvbW1lbnQKSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfZXhlY29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfZXhlY29udGV4dC5oCShyZXZpc2lvbiAx
NjQ2NSkKKysrIGluY2x1ZGUvcHViX3Rvb2xfZXhlY29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCwxNCBAQAogI2lmbmRlZiBfX1BVQl9UT09MX0VYRUNPTlRFWFRfSAogI2RlZmlu
ZSBfX1BVQl9UT09MX0VYRUNPTlRFWFRfSAogCi0jaW5jbHVkZSAicHViX3Rvb2xfYmFzaWNzLmgi
ICAgLy8gVGhyZWFkSUQKKyNpbmNsdWRlICJwdWJfdG9vbF9iYXNpY3MuaCIgICAgIC8vIFRocmVh
ZElECisjaW5jbHVkZSAicHViX3Rvb2xfZGVidWdpbmZvLmgiICAvLyBEaUVwb2NoCiAKKworLyo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PSovCisvKj09PSBFeGVDb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCiAvLyBJdCdz
IGFuIGFic3RyYWN0IHR5cGUuCiB0eXBlZGVmCiAgICBzdHJ1Y3QgX0V4ZUNvbnRleHQKQEAgLTg0
LDkgKzkwLDYgQEAKIGV4dGVybiBCb29sIFZHXyhlcV9FeGVDb250ZXh0KSAoIFZnUmVzIHJlcywg
Y29uc3QgRXhlQ29udGV4dCogZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBFeGVDb250ZXh0KiBlMiApOwogCi0vLyBQcmludCBhbiBFeGVDb250ZXh0LgotZXh0ZXJu
IHZvaWQgVkdfKHBwX0V4ZUNvbnRleHQpICggRXhlQ29udGV4dCogZWMgKTsKLQogLy8gR2V0IHRo
ZSAzMi1iaXQgdW5pcXVlIHJlZmVyZW5jZSBudW1iZXIgZm9yIHRoaXMgRXhlQ29udGV4dAogLy8g
KHRoZSAiRXhlQ29udGV4dCBVbmlxdWUiKS4gIEd1YXJhbnRlZWQgdG8gYmUgbm9uemVybyBhbmQg
dG8gYmUgYQogLy8gbXVsdGlwbGUgb2YgZm91ciAoaW93LCB0aGUgbG93ZXN0IHR3byBiaXRzIGFy
ZSBndWFyYW50ZWVkIHRvCkBAIC0xMTMsMTEgKzExNiw1MyBAQAogLy8gTWFrZSBhbiBFeGVDb250
ZXh0IGNvbnRhaW5pbmcgZXhhY3RseSB0aGUgc3BlY2lmaWVkIHN0YWNrIGZyYW1lcy4KIEV4ZUNv
bnRleHQqIFZHXyhtYWtlX0V4ZUNvbnRleHRfZnJvbV9TdGFja1RyYWNlKSggY29uc3QgQWRkciog
aXBzLCBVSW50IG5faXBzICk7CiAKLS8vIFJldHVybnMgdGhlICJudWxsIiBleGUgY29udGV4dC4g
VGhlIG51bGwgZXhlY29udGV4dCBpcyBhbiBhcnRpZmljaWFsCi0vLyBleGUgY29udGV4dCwgd2l0
aCBhIHN0YWNrIHRyYWNlIG1hZGUgb2Ygb25lIEFkZHIgKHRoZSBOVUxMIGFkZHJlc3MpLgotZXh0
ZXJuIAotRXhlQ29udGV4dCogVkdfKG51bGxfRXhlQ29udGV4dCkgKHZvaWQpOwogCisvKj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ki8KKy8qPT09IEV4ZUNvbnRleHRBbmRFcG9jaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIEEgcGxhaW4g
RXhlQ29udGV4dCBpcyBub3QgZ2VuZXJhbGx5IHN5bWJvbGlzYWJsZSwgc2luY2Ugd2UgYWxzbyBu
ZWVkIHRvCisgICBrbm93IHdoaWNoIERlYnVnSW5mbyBlcG9jaCBpdCBwZXJ0YWlucyB0by4gIEV4
ZUNvbnRleHRBbmRFcG9jaCBwYWlycyB0aGVtCisgICB1cC4gIE5vdGUgdGhpcyBpcyBqdXN0IHR3
byB3b3Jkcywgc28gcGFzc2luZyBpdCBhcm91bmQgYnkgdmFsdWUgaXMKKyAgIGZpbmUuICovCit0
eXBlZGVmCisgICBzdHJ1Y3QgeworICAgICAgRXhlQ29udGV4dCogZWM7CisgICAgICBEaUVwb2No
ICAgICBlcG9jaDsKKyAgIH0KKyAgIEV4ZUNvbnRleHRBbmRFcG9jaDsKKworLy8gQSB0cml2aWFs
IGNvbnN0cnVjdG9yLgorc3RhdGljIGlubGluZSBFeGVDb250ZXh0QW5kRXBvY2ggbWtfRXhlQ29u
dGV4dEFuZEVwb2NoICggRXhlQ29udGV4dCogZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaUVwb2NoIGVwICkgeworICAgRXhlQ29u
dGV4dEFuZEVwb2NoIGVjZTsKKyAgIGVjZS5lYyAgICA9IGVjOworICAgZWNlLmVwb2NoID0gZXA7
CisgICByZXR1cm4gZWNlOworfQorCisvLyBHZW5lcmF0ZXMgYSBjb21wbGV0ZWx5IGludmFsaWQg
RXhlQ29udGV4dEFuZEVwb2NoLCB3aXRoIE5VTEwgZm9yIC5lYyBhbmQKKy8vIHplcm8gZm9yIC5l
cG9jaC4gIEJvdGggdmFsdWVzIGFyZSBpbnZhbGlkLgorRXhlQ29udGV4dEFuZEVwb2NoIFZHXyhp
bnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCB2b2lkICk7CisKKy8vIFRha2VzIGFuIEV4ZUNv
bnRleHQgYW5kIHRhZ3MgaXQgd2l0aCB0aGUgY3VycmVudCBlcG9jaCwgd2hpY2ggaXMKKy8vIGdl
bmVyYWxseSB3aGF0IHdlIHdhbnQgdG8gZG8uCitFeGVDb250ZXh0QW5kRXBvY2ggVkdfKHRhZ19F
Q193aXRoX2N1cnJlbnRfZXBvY2gpKCBFeGVDb250ZXh0KiBlYyApOworCisvLyBQcmludCBhbiBF
eGVDb250ZXh0QW5kRXBvY2guICBXZSBjYW4ndCBwcmludCBhIHBsYWluIEV4ZUNvbnRleHQKKy8v
IGJlY2F1c2Ugd2UgY2FuJ3Qgc3ltYm9saXNpbmcgaXQgd2l0aG91dCBrbm93aW5nIHdoaWNoIGRl
YnVnaW5mbworLy8gZXBvY2ggaXQgcGVydGFpbnMgdG8uCit2b2lkIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpICggRXhlQ29udGV4dEFuZEVwb2NoIGVjZSApOworCisvLyBSZXR1cm5zIHRoZSAi
bnVsbCIgZXhlIGNvbnRleHQgdGFnZ2VkIHdpdGggdGhlIGN1cnJlbnQgZGVidWdpbmZvCisvLyBl
cG9jaC4gVGhlIG51bGwgZXhlY29udGV4dCBpcyBhbiBhcnRpZmljaWFsIGV4ZSBjb250ZXh0LCB3
aXRoIGEgc3RhY2sKKy8vIHRyYWNlIG1hZGUgb2Ygb25lIEFkZHIgKHRoZSBOVUxMIGFkZHJlc3Mp
LCBhbmQgdGhlIGN1cnJlbnQgZXBvY2guCitFeGVDb250ZXh0QW5kRXBvY2ggVkdfKG51bGxfRXhl
Q29udGV4dEFuZEVwb2NoKSAoIHZvaWQgKTsKKworLy8gSXMgdGhpcyBhIHZhbHVlIG9idGFpbmVk
IGZyb20gVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSA/CitCb29sIFZHXyhpc19udWxsX0V4
ZUNvbnRleHRBbmRFcG9jaCkoIEV4ZUNvbnRleHRBbmRFcG9jaCBlY2UgKTsKKworCiAjZW5kaWYg
ICAvLyBfX1BVQl9UT09MX0VYRUNPTlRFWFRfSAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KSW5kZXg6IGlu
Y2x1ZGUvcHViX3Rvb2xfb3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xf
b3B0aW9ucy5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGluY2x1ZGUvcHViX3Rvb2xfb3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDEzIEBACiAvKiBDb250aW51ZSBzdGFjayB0
cmFjZXMgYmVsb3cgbWFpbigpPyAgRGVmYXVsdDogTk8gKi8KIGV4dGVybiBCb29sIFZHXyhjbG9f
c2hvd19iZWxvd19tYWluKTsKIAorLyogS2VlcCBzeW1ib2xzIChhbmQgYWxsIG90aGVyIGRlYnVn
aW5mbykgZm9yIGNvZGUgdGhhdCBpcyB1bmxvYWRlZCAoZGxjbG9zZQorICAgb3Igc2ltaWxhcikg
c28gdGhhdCBzdGFjayB0cmFjZXMgY2FuIHN0aWxsIGdpdmUgbGluZS9maWxlIGluZm8gZm9yCisg
ICBwcmV2aW91c2x5IGNhcHR1cmVkIHN0YWNrIHRyYWNlcy4gIGUuZy4gLi4uIHNob3dpbmcgd2hl
cmUgYSBibG9jayB3YXMKKyAgIGFsbG9jYXRlZCBlLmcuIGxlYWtzIG9mIG9yIGFjY2Vzc2VzIGp1
c3Qgb3V0c2lkZSBhIGJsb2NrLiAqLworZXh0ZXJuIEJvb2wgVkdfKGNsb19rZWVwX2RlYnVnaW5m
byk7CiAKKwogLyogVXNlZCB0byBleHBhbmQgZmlsZSBuYW1lcy4gICJvcHRpb25fbmFtZSIgaXMg
dGhlIG9wdGlvbiBuYW1lLCBlZy4KICAgICItLWxvZy1maWxlIi4gICdmb3JtYXQnIGlzIHdoYXQg
Zm9sbG93cywgZWcuICJjYWNoZWdyaW5kLm91dC4lcCIuICBJbgogICAgJ2Zvcm1hdCc6IApJbmRl
eDogaW5jbHVkZS9wdWJfdG9vbF9zdGFja3RyYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9w
dWJfdG9vbF9zdGFja3RyYWNlLmgJKHJldmlzaW9uIDE2NDY1KQorKysgaW5jbHVkZS9wdWJfdG9v
bF9zdGFja3RyYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpZm5kZWYg
X19QVUJfVE9PTF9TVEFDS1RSQUNFX0gKICNkZWZpbmUgX19QVUJfVE9PTF9TVEFDS1RSQUNFX0gK
IAotI2luY2x1ZGUgInB1Yl90b29sX2Jhc2ljcy5oIiAgIC8vIEFkZHIKKyNpbmNsdWRlICJwdWJf
dG9vbF9iYXNpY3MuaCIgICAvLyBBZGRyLCBEaUVwb2NoCiAKIC8vIFRoZSBiYXNpYyBzdGFjayB0
cmFjZSB0eXBlOiAganVzdCBhbiBhcnJheSBvZiBjb2RlIGFkZHJlc3Nlcy4KIHR5cGVkZWYgQWRk
ciogU3RhY2tUcmFjZTsKQEAgLTY0LDE5ICs2NCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qT1VUKi9TdGFja1RyYWNlIGZwcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXb3JkIGZpcnN0X2lwX2RlbHRhICk7CiAKLS8vIEFwcGx5IGEgZnVuY3Rp
b24gdG8gZXZlcnkgZWxlbWVudCBpbiB0aGUgU3RhY2tUcmFjZS4gIFRoZSBwYXJhbWV0ZXIKLS8v
ICduJyBnaXZlcyB0aGUgaW5kZXggb2YgdGhlIHBhc3NlZCBpcC4gICdvcGFxdWUnIGlzIGFuIGFy
Yml0cmFyeQotLy8gcG9pbnRlciBwcm92aWRlZCB0byBlYWNoIGludm9jYXRpb24gb2YgJ2FjdGlv
bicgKGEgcG9vciBtYW4ncwotLy8gY2xvc3VyZSkuICBEb2Vzbid0IGdvIGJlbG93IG1haW4oKSB1
bmxlc3MgLS1zaG93LWJlbG93LW1haW49eWVzIGlzCi0vLyBzZXQuCisvLyBBcHBseSBhIGZ1bmN0
aW9uIHRvIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIFN0YWNrVHJhY2UuICBUaGUgcGFyYW1ldGVyICdu
JworLy8gZ2l2ZXMgdGhlIGluZGV4IG9mIHRoZSBwYXNzZWQgaXAuICAnb3BhcXVlJyBpcyBhbiBh
cmJpdHJhcnkgcG9pbnRlcgorLy8gcHJvdmlkZWQgdG8gZWFjaCBpbnZvY2F0aW9uIG9mICdhY3Rp
b24nIChhIHBvb3IgbWFuJ3MgY2xvc3VyZSkuICAnZXAnIGlzCisvLyB0aGUgZGVidWdpbmZvIGVw
b2NoIGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvZGUgYWRkcmVzc2VzIGluIHRoZSBzdGFjawor
Ly8gdHJhY2UuICBEb2Vzbid0IGdvIGJlbG93IG1haW4oKSB1bmxlc3MgLS1zaG93LWJlbG93LW1h
aW49eWVzIGlzIHNldC4KIGV4dGVybiB2b2lkIFZHXyhhcHBseV9TdGFja1RyYWNlKSgKLSAgICAg
ICAgICAgICAgIHZvaWQoKmFjdGlvbikoVUludCBuLCBBZGRyIGlwLCB2b2lkKiBvcGFxdWUpLAor
ICAgICAgICAgICAgICAgdm9pZCgqYWN0aW9uKShVSW50IG4sIERpRXBvY2ggZXAsIEFkZHIgaXAs
IHZvaWQqIG9wYXF1ZSksCiAgICAgICAgICAgICAgICB2b2lkKiBvcGFxdWUsCi0gICAgICAgICAg
ICAgICBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcworICAgICAgICAgICAgICAgRGlFcG9jaCBl
cCwgU3RhY2tUcmFjZSBpcHMsIFVJbnQgbl9pcHMKICAgICAgICAgICAgICk7CiAKIC8vIFByaW50
IGEgU3RhY2tUcmFjZS4KLWV4dGVybiB2b2lkIFZHXyhwcF9TdGFja1RyYWNlKSAoIFN0YWNrVHJh
Y2UgaXBzLCBVSW50IG5faXBzICk7CitleHRlcm4gdm9pZCBWR18ocHBfU3RhY2tUcmFjZSkgKCBE
aUVwb2NoIGVwLCBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcyApOwogCiAvLyBHZXRzIGFuZCBp
bW1lZGlhdGVseSBwcmludHMgYSBTdGFja1RyYWNlLiAgSnVzdCBhIGJpdCBzaW1wbGVyIHRoYW4K
IC8vIGNhbGxpbmcgVkdfKGdldF9TdGFja1RyYWNlKSgpIHRoZW4gVkdfKHBwX1N0YWNrVHJhY2Up
KCkuCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX3Rvb2xpZmFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlu
Y2x1ZGUvcHViX3Rvb2xfdG9vbGlmYWNlLmgJKHJldmlzaW9uIDE2NDY1KQorKysgaW5jbHVkZS9w
dWJfdG9vbF90b29saWZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBACiAg
ICBvZiBhbiBhZGRyZXNzID8gKi8KIGV4dGVybiB2b2lkIFZHXyhuZWVkc19pbmZvX2xvY2F0aW9u
KSAoCiAgICAvLyBHZXQgYW5kIHBwIGluZm9ybWF0aW9uIGFib3V0IEFkZHIKLSAgIHZvaWQgKCpp
bmZvX2xvY2F0aW9uKShBZGRyKQorICAgdm9pZCAoKmluZm9fbG9jYXRpb24pKERpRXBvY2gsIEFk
ZHIpCiApOwogCiAvKiBEbyB3ZSBuZWVkIHRvIHNlZSB2YXJpYWJsZSB0eXBlIGFuZCBsb2NhdGlv
biBpbmZvcm1hdGlvbj8gKi8KSW5kZXg6IGxhY2tleS9sa19tYWluLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
bGFja2V5L2xrX21haW4uYwkocmV2aXNpb24gMTY0NjUpCisrKyBsYWNrZXkvbGtfbWFpbi5jCSh3
b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDcgQEAKICAgIEFkZHIgICAgICAgaWFkZHIgPSAw
LCBkc3Q7CiAgICBVSW50ICAgICAgIGlsZW4gPSAwOwogICAgQm9vbCAgICAgICBjb25kaXRpb25f
aW52ZXJ0ZWQgPSBGYWxzZTsKKyAgIERpRXBvY2ggICAgZXAgPSBWR18oY3VycmVudF9EaUVwb2No
KSgpOwogCiAgICBpZiAoZ1dvcmRUeSAhPSBoV29yZFR5KSB7CiAgICAgICAvKiBXZSBkb24ndCBj
dXJyZW50bHkgc3VwcG9ydCB0aGlzIGNhc2UuICovCkBAIC03NTAsNyArNzUxLDcgQEAKICAgICAg
ICAgICAgICAgIHRsX2Fzc2VydChjbG9fZm5uYW1lKTsKICAgICAgICAgICAgICAgIHRsX2Fzc2Vy
dChjbG9fZm5uYW1lWzBdKTsKICAgICAgICAgICAgICAgIGNvbnN0IEhDaGFyICpmbm5hbWU7Ci0g
ICAgICAgICAgICAgICBpZiAoVkdfKGdldF9mbm5hbWVfaWZfZW50cnkpKHN0LT5Jc3QuSU1hcmsu
YWRkciwgCisgICAgICAgICAgICAgICBpZiAoVkdfKGdldF9mbm5hbWVfaWZfZW50cnkpKGVwLCBz
dC0+SXN0LklNYXJrLmFkZHIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmZm5uYW1lKQogICAgICAgICAgICAgICAgICAgICYmIDAgPT0gVkdfKHN0cmNtcCko
Zm5uYW1lLCBjbG9fZm5uYW1lKSkgewogICAgICAgICAgICAgICAgICAgZGkgPSB1bnNhZmVJUkRp
cnR5XzBfTiggCkluZGV4OiBtYXNzaWYvbXNfbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hc3NpZi9t
c19tYWluLmMJKHJldmlzaW9uIDE2NDY1KQorKysgbWFzc2lmL21zX21haW4uYwkod29ya2luZyBj
b3B5KQpAQCAtNTIwLDggKzUyMCw5IEBACiAgICAvLyAgYWxsb2MgZnVuY3Rpb24gJ2luc2lkZScg
YSBzdGFja3RyYWNlIGUuZy4KICAgIC8vICAgIDB4MSAweDIgMHgzIGFsbG9jIGZ1bmMxIG1haW4K
ICAgIC8vICBiZWNvbWVzICAgMHgxIDB4MiAweDMgZnVuYzEgbWFpbgorICAgRGlFcG9jaCBlcCA9
IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CiAgICBmb3IgKGkgPSAqdG9wOyBpIDwgbl9pcHM7IGkr
KykgewotICAgICAgdG9wX2hhc19mbm5hbWUgPSBWR18oZ2V0X2ZubmFtZSkoaXBzWyp0b3BdLCAm
Zm5uYW1lKTsKKyAgICAgIHRvcF9oYXNfZm5uYW1lID0gVkdfKGdldF9mbm5hbWUpKGVwLCBpcHNb
KnRvcF0sICZmbm5hbWUpOwogICAgICAgaWYgKHRvcF9oYXNfZm5uYW1lICYmICBWR18oc3RySXNN
ZW1iZXJYQSkoYWxsb2NfZm5zLCBmbm5hbWUpKSB7CiAgICAgICAgICBWRVJCKDQsICJmaWx0ZXJp
bmcgYWxsb2MgZm4gJXNcbiIsIGZubmFtZSk7CiAgICAgICAgICAoKnRvcCkrKzsKQEAgLTU3Niw3
ICs1NzcsOCBAQAogICAgaWYgKGV4Y2x1ZGVfZmlyc3RfZW50cnkgJiYgbl9pcHMgPiAwKSB7CiAg
ICAgICBjb25zdCBIQ2hhciAqZm5uYW1lOwogICAgICAgVkVSQig0LCAicmVtb3ZpbmcgdG9wIGZu
ICVzIGZyb20gc3RhY2t0cmFjZVxuIiwgCi0gICAgICAgICAgIFZHXyhnZXRfZm5uYW1lKShpcHNb
MF0sICZmbm5hbWUpID8gZm5uYW1lIDogIj8/PyIpOworICAgICAgICAgICAgICBWR18oZ2V0X2Zu
bmFtZSkoVkdfKGN1cnJlbnRfRGlFcG9jaCkoKSwgaXBzWzBdLCAmZm5uYW1lKQorICAgICAgICAg
ICAgICAgICA/IGZubmFtZSA6ICI/Pz8iKTsKICAgICAgIHJldHVybiBWR18obWFrZV9FeGVDb250
ZXh0X2Zyb21fU3RhY2tUcmFjZSkoaXBzKzEsIG5faXBzLTEpOwogICAgfSBlbHNlCiAgICAgICBy
ZXR1cm4gVkdfKG1ha2VfRXhlQ29udGV4dF9mcm9tX1N0YWNrVHJhY2UpKGlwcywgbl9pcHMpOwpJ
bmRleDogbWVtY2hlY2svbWNfZXJyb3JzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svbWNfZXJy
b3JzLmMJKHJldmlzaW9uIDE2NDY1KQorKysgbWVtY2hlY2svbWNfZXJyb3JzLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDE1ICs5NCwxNSBAQAogICAgICAgc3RydWN0IHsKICAgICAgICAgIFNpemVU
IHN6QjsgICAvLyBzaXplIG9mIHZhbHVlIGluIGJ5dGVzCiAgICAgICAgICAvLyBPcmlnaW4gaW5m
bwotICAgICAgICAgVUludCAgICAgICAgb3RhZzsgICAgICAvLyBvcmlnaW4gdGFnCi0gICAgICAg
ICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7IC8vIGZpbGxlZCBpbiBsYXRlcgorICAgICAgICAgVUlu
dCAgICAgICAgICAgICAgIG90YWc7ICAgICAgIC8vIG9yaWdpbiB0YWcKKyAgICAgICAgIEV4ZUNv
bnRleHRBbmRFcG9jaCBvcmlnaW5fZWNlOyAvLyBmaWxsZWQgaW4gbGF0ZXIKICAgICAgIH0gVmFs
dWU7CiAKICAgICAgIC8vIFVzZSBvZiBhbiB1bmRlZmluZWQgdmFsdWUgaW4gYSBjb25kaXRpb25h
bCBicmFuY2ggb3IgbW92ZS4KICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAvLyBPcmlnaW4gaW5m
bwotICAgICAgICAgVUludCAgICAgICAgb3RhZzsgICAgICAvLyBvcmlnaW4gdGFnCi0gICAgICAg
ICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7IC8vIGZpbGxlZCBpbiBsYXRlcgorICAgICAgICAgVUlu
dCAgICAgICAgICAgICAgIG90YWc7ICAgICAgIC8vIG9yaWdpbiB0YWcKKyAgICAgICAgIEV4ZUNv
bnRleHRBbmRFcG9jaCBvcmlnaW5fZWNlOyAvLyBmaWxsZWQgaW4gbGF0ZXIKICAgICAgIH0gQ29u
ZDsKIAogICAgICAgLy8gQWRkcmVzc2FiaWxpdHkgZXJyb3IgaW4gY29yZSAoc2lnbmFsLWhhbmRs
aW5nKSBvcGVyYXRpb24uCkBAIC0xMjcsOCArMTI3LDggQEAKICAgICAgIC8vIFN5c3RlbSBjYWxs
IHJlZ2lzdGVyIGlucHV0IGNvbnRhaW5zIHVuZGVmaW5lZCBieXRlcy4KICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAvLyBPcmlnaW4gaW5mbwotICAgICAgICAgVUludCAgICAgICAgb3RhZzsgICAg
ICAvLyBvcmlnaW4gdGFnCi0gICAgICAgICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7IC8vIGZpbGxl
ZCBpbiBsYXRlcgorICAgICAgICAgVUludCAgICAgICAgICAgICAgIG90YWc7ICAgICAgIC8vIG9y
aWdpbiB0YWcKKyAgICAgICAgIEV4ZUNvbnRleHRBbmRFcG9jaCBvcmlnaW5fZWNlOyAvLyBmaWxs
ZWQgaW4gbGF0ZXIKICAgICAgIH0gUmVnUGFyYW07CiAKICAgICAgIC8vIFN5c3RlbSBjYWxsIG1l
bW9yeSBpbnB1dCBjb250YWlucyB1bmRlZmluZWQvdW5hZGRyZXNzYWJsZSBieXRlcwpAQCAtMTM2
LDggKzEzNiw4IEBACiAgICAgICAgICBCb29sICAgICBpc0FkZHJFcnI7ICAvLyBBZGRyZXNzYWJp
bGl0eSBvciBkZWZpbmVkbmVzcyBlcnJvcj8KICAgICAgICAgIEFkZHJJbmZvIGFpOwogICAgICAg
ICAgLy8gT3JpZ2luIGluZm8KLSAgICAgICAgIFVJbnQgICAgICAgIG90YWc7ICAgICAgLy8gb3Jp
Z2luIHRhZwotICAgICAgICAgRXhlQ29udGV4dCogb3JpZ2luX2VjOyAvLyBmaWxsZWQgaW4gbGF0
ZXIKKyAgICAgICAgIFVJbnQgICAgICAgICAgICAgICBvdGFnOyAgICAgICAvLyBvcmlnaW4gdGFn
CisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggb3JpZ2luX2VjZTsgLy8gZmlsbGVkIGluIGxh
dGVyCiAgICAgICB9IE1lbVBhcmFtOwogCiAgICAgICAvLyBQcm9ibGVtIGZvdW5kIGZyb20gYSBj
bGllbnQgcmVxdWVzdCBsaWtlIENIRUNLX01FTV9JU19BRERSRVNTQUJMRS4KQEAgLTE0NSw4ICsx
NDUsOCBAQAogICAgICAgICAgQm9vbCAgICAgaXNBZGRyRXJyOyAgLy8gQWRkcmVzc2FiaWxpdHkg
b3IgZGVmaW5lZG5lc3MgZXJyb3I/CiAgICAgICAgICBBZGRySW5mbyBhaTsKICAgICAgICAgIC8v
IE9yaWdpbiBpbmZvCi0gICAgICAgICBVSW50ICAgICAgICBvdGFnOyAgICAgIC8vIG9yaWdpbiB0
YWcKLSAgICAgICAgIEV4ZUNvbnRleHQqIG9yaWdpbl9lYzsgLy8gZmlsbGVkIGluIGxhdGVyCisg
ICAgICAgICBVSW50ICAgICAgICAgICAgICAgb3RhZzsgICAgICAgLy8gb3JpZ2luIHRhZworICAg
ICAgICAgRXhlQ29udGV4dEFuZEVwb2NoIG9yaWdpbl9lY2U7IC8vIGZpbGxlZCBpbiBsYXRlcgog
ICAgICAgfSBVc2VyOwogCiAgICAgICAvLyBQcm9ncmFtIHRyaWVkIHRvIGZyZWUoKSBzb21ldGhp
bmcgdGhhdCdzIG5vdCBhIGhlYXAgYmxvY2sgKHRoaXMKQEAgLTI3OSwxMCArMjc5LDEwIEBACiAg
ICB9CiB9CiAKLXN0YXRpYyB2b2lkIG1jX3BwX29yaWdpbiAoIEV4ZUNvbnRleHQqIGVjLCBVSW50
IG9raW5kICkKK3N0YXRpYyB2b2lkIG1jX3BwX29yaWdpbiAoIEV4ZUNvbnRleHRBbmRFcG9jaCBl
Y2UsIFVJbnQgb2tpbmQgKQogewogICAgY29uc3QgSENoYXIqIHNyYyA9IE5VTEw7Ci0gICB0bF9h
c3NlcnQoZWMpOworICAgdGxfYXNzZXJ0KGVjZS5lYyk7CiAKICAgIHN3aXRjaCAob2tpbmQpIHsK
ICAgICAgIGNhc2UgTUNfT0tJTkRfU1RBQ0s6ICAgc3JjID0gIiBieSBhIHN0YWNrIGFsbG9jYXRp
b24iOyBicmVhazsKQEAgLTI5NSwxMCArMjk1LDEwIEBACiAgICBpZiAoVkdfKGNsb194bWwpKSB7
CiAgICAgICBlbWl0KCAiICA8YXV4d2hhdD5VbmluaXRpYWxpc2VkIHZhbHVlIHdhcyBjcmVhdGVk
JXM8L2F1eHdoYXQ+XG4iLAogICAgICAgICAgICAgc3JjKTsKLSAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggZWMgKTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBlY2UgKTsKICAg
IH0gZWxzZSB7CiAgICAgICBlbWl0KCAiIFVuaW5pdGlhbGlzZWQgdmFsdWUgd2FzIGNyZWF0ZWQl
c1xuIiwgc3JjKTsKLSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggZWMgKTsKKyAgICAgIFZHXyhw
cF9FeGVDb250ZXh0QW5kRXBvY2gpKCBlY2UgKTsKICAgIH0KIH0KIApAQCAtMzc5LDcgKzM3OSw3
IEBACiAgICAgICAgICBlbWl0KCAiICAgIDxsZWFrZWRibG9ja3M+JXU8L2xlYWtlZGJsb2Nrcz5c
biIsIGxyLT5udW1fYmxvY2tzKTsKICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7CiAg
ICAgICB9Ci0gICAgICBWR18ocHBfRXhlQ29udGV4dCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOwor
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOwog
ICAgfSBlbHNlIHsgLyogISBpZiAoeG1sKSAqLwogICAgICAgaWYgKGxyLT5pbmRpcmVjdF9zekIg
PiAwKSB7CiAgICAgICAgICBlbWl0KApAQCAtNDAxLDcgKzQwMSw3IEBACiAgICAgICAgICAgICBu
X3RoaXNfcmVjb3JkLCBuX3RvdGFsX3JlY29yZHMKICAgICAgICAgICk7CiAgICAgICB9Ci0gICAg
ICBWR18ocHBfRXhlQ29udGV4dCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOworICAgICAgVkdfKHBw
X0V4ZUNvbnRleHRBbmRFcG9jaCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOwogICAgfSAvKiBpZiAo
eG1sKSAqLwogfQogCkBAIC00MjcsMTEgKzQyNywxMSBAQAogICAgICAgICAgICAgZW1pdCggIiAg
PGtpbmQ+Q29yZU1lbUVycm9yPC9raW5kPlxuIiApOwogICAgICAgICAgICAgZW1pdCggIiAgPHdo
YXQ+JXBTIGNvbnRhaW5zIHVuYWRkcmVzc2FibGUgYnl0ZShzKTwvd2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZXJyKSk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7
CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIiVzIGNvbnRhaW5zIHVuYWRk
cmVzc2FibGUgYnl0ZShzKVxuIiwKICAgICAgICAgICAgICAgICAgIFZHXyhnZXRfZXJyb3Jfc3Ry
aW5nKShlcnIpKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJv
cl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCko
IFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFr
OwogICAgICAgCkBAIC00NDEsMTkgKzQ0MSwxOSBAQAogICAgICAgICAgICAgZW1pdCggIiAgPGtp
bmQ+VW5pbml0VmFsdWU8L2tpbmQ+XG4iICk7CiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD5V
c2Ugb2YgdW5pbml0aWFsaXNlZCB2YWx1ZSBvZiBzaXplICVsdTwvd2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLlZhbHVlLnN6QiApOwotICAgICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7Ci0gICAgICAgICAgICBpZiAo
ZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5fZWMpCi0gICAgICAgICAgICAgICBtY19wcF9vcmlnaW4o
IGV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4dHJhLT5FcnIuVmFsdWUub3RhZyAmIDMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBp
ZiAoZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5fZWNlLmVjKQorICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9lY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLT5FcnIuVmFsdWUub3RhZyAmIDMgKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvKiBDb3VsZCBhbHNvIHNob3cgZXh0cmEtPkVyci5Db25kLm90YWcgaWYg
ZGVidWdnaW5nIG9yaWdpbgogICAgICAgICAgICAgICAgdHJhY2tpbmcgKi8KICAgICAgICAgICAg
IGVtaXQoICJVc2Ugb2YgdW5pbml0aWFsaXNlZCB2YWx1ZSBvZiBzaXplICVsdVxuIiwKICAgICAg
ICAgICAgICAgICAgIGV4dHJhLT5FcnIuVmFsdWUuc3pCICk7Ci0gICAgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKLSAgICAgICAgICAgIGlm
IChleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9lYykKLSAgICAgICAgICAgICAgIG1jX3BwX29yaWdp
biggZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5fZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0cmEtPkVyci5WYWx1ZS5vdGFnICYgMyApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IGlmIChleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9lY2UuZWMpCisgICAgICAgICAgICAgICBtY19w
cF9vcmlnaW4oIGV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEtPkVyci5WYWx1ZS5vdGFnICYgMyApOwogICAgICAgICAgfQogICAg
ICAgICAgYnJlYWs7CiAKQEAgLTQ2Myw5ICs0NjMsOSBAQAogICAgICAgICAgICAgZW1pdCggIiAg
PGtpbmQ+VW5pbml0Q29uZGl0aW9uPC9raW5kPlxuIiApOwogICAgICAgICAgICAgZW1pdCggIiAg
PHdoYXQ+Q29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMiCiAgICAgICAgICAgICAgICAg
ICAiIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocyk8L3doYXQ+XG4iICk7Ci0gICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKLSAgICAgICAg
ICAgIGlmIChleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjKQotICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjLAorICAgICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAg
ICAgIGlmIChleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjZS5lYykKKyAgICAgICAgICAgICAgIG1j
X3BwX29yaWdpbiggZXh0cmEtPkVyci5Db25kLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhLT5FcnIuQ29uZC5vdGFnICYgMyApOwogICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIC8qIENvdWxkIGFsc28gc2hvdyBleHRyYS0+RXJyLkNvbmQub3RhZyBp
ZiBkZWJ1Z2dpbmcgb3JpZ2luCkBAIC00NzIsOSArNDcyLDkgQEAKICAgICAgICAgICAgICAgIHRy
YWNraW5nICovCiAgICAgICAgICAgICBlbWl0KCAiQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRl
cGVuZHMiCiAgICAgICAgICAgICAgICAgICAiIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocylcbiIg
KTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuQ29uZC5vcmlnaW5fZWMpCi0gICAg
ICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuQ29uZC5vcmlnaW5fZWMsCisgICAg
ICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOworICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuQ29uZC5vcmlnaW5fZWNlLmVjKQor
ICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5Db25kLm90YWcgJiAzICk7
CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKQEAgLTQ4NiwxNiArNDg2LDE2IEBACiAgICAg
ICAgICAgICBlbWl0KCAiICA8d2hhdD5TeXNjYWxsIHBhcmFtICVwUyBjb250YWlucyAiCiAgICAg
ICAgICAgICAgICAgICAidW5pbml0aWFsaXNlZCBieXRlKHMpPC93aGF0PlxuIiwKICAgICAgICAg
ICAgICAgICAgIFZHXyhnZXRfZXJyb3Jfc3RyaW5nKShlcnIpICk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKLSAgICAgICAgICAg
IGlmIChleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lYykKLSAgICAgICAgICAgICAgIG1jX3Bw
X29yaWdpbiggZXh0cmEtPkVyci5SZWdQYXJhbS5vcmlnaW5fZWMsCisgICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAg
ICAgICAgICAgaWYgKGV4dHJhLT5FcnIuUmVnUGFyYW0ub3JpZ2luX2VjZS5lYykKKyAgICAgICAg
ICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5SZWdQYXJhbS5vcmlnaW5fZWNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlJlZ1BhcmFtLm90YWcgJiAzICk7
CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIlN5c2NhbGwgcGFyYW0gJXMg
Y29udGFpbnMgdW5pbml0aWFsaXNlZCBieXRlKHMpXG4iLAogICAgICAgICAgICAgICAgICAgVkdf
KGdldF9lcnJvcl9zdHJpbmcpKGVycikgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5F
cnIuUmVnUGFyYW0ub3JpZ2luX2VjKQotICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRy
YS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lYywKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBpZiAo
ZXh0cmEtPkVyci5SZWdQYXJhbS5vcmlnaW5fZWNlLmVjKQorICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhLT5FcnIuUmVnUGFyYW0ub3RhZyAmIDMgKTsKICAgICAgICAgIH0K
ICAgICAgICAgIGJyZWFrOwpAQCAtNTA5LDEyICs1MDksMTIgQEAKICAgICAgICAgICAgICAgICAg
IFZHXyhnZXRfZXJyb3Jfc3RyaW5nKShlcnIpLAogICAgICAgICAgICAgICAgICAgZXh0cmEtPkVy
ci5NZW1QYXJhbS5pc0FkZHJFcnIgCiAgICAgICAgICAgICAgICAgICAgICA/ICJ1bmFkZHJlc3Nh
YmxlIiA6ICJ1bmluaXRpYWxpc2VkIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQp
KCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgICAg
VkdfKHBwX2FkZHJpbmZvX21jKShWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLk1lbVBhcmFtLmFpLCBGYWxzZSk7
Ci0gICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMgCisgICAgICAg
ICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWNlLmVjIAogICAgICAgICAgICAg
ICAgICYmICFleHRyYS0+RXJyLk1lbVBhcmFtLmlzQWRkckVycikKLSAgICAgICAgICAgICAgIG1j
X3BwX29yaWdpbiggZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMsCisgICAgICAgICAgICAg
ICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuTWVtUGFyYW0ub3JpZ2luX2VjZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5NZW1QYXJhbS5vdGFnICYgMyApOwogICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVtaXQoICJTeXNjYWxsIHBhcmFtICVzIHBvaW50
cyB0byAlcyBieXRlKHMpXG4iLApAQCAtNTIxLDEyICs1MjEsMTIgQEAKICAgICAgICAgICAgICAg
ICAgIFZHXyhnZXRfZXJyb3Jfc3RyaW5nKShlcnIpLAogICAgICAgICAgICAgICAgICAgZXh0cmEt
PkVyci5NZW1QYXJhbS5pc0FkZHJFcnIgCiAgICAgICAgICAgICAgICAgICAgICA/ICJ1bmFkZHJl
c3NhYmxlIiA6ICJ1bmluaXRpYWxpc2VkIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhl
Q29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAg
ICAgVkdfKHBwX2FkZHJpbmZvX21jKShWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLk1lbVBhcmFtLmFpLCBGYWxz
ZSk7Ci0gICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMgCisgICAg
ICAgICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWNlLmVjIAogICAgICAgICAg
ICAgICAgICYmICFleHRyYS0+RXJyLk1lbVBhcmFtLmlzQWRkckVycikKLSAgICAgICAgICAgICAg
IG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMsCisgICAgICAgICAg
ICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuTWVtUGFyYW0ub3JpZ2luX2VjZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5NZW1QYXJhbS5vdGFnICYgMyApOwog
ICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CkBAIC01NDAsMjEgKzU0MCwyMSBAQAogICAgICAg
ICAgICAgICAgICAgImR1cmluZyBjbGllbnQgY2hlY2sgcmVxdWVzdDwvd2hhdD5cbiIsIAogICAg
ICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuVXNlci5pc0FkZHJFcnIKICAgICAgICAgICAgICAg
ICAgICAgICA/ICJVbmFkZHJlc3NhYmxlIiA6ICJVbmluaXRpYWxpc2VkIiApOwotICAgICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAg
ICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOwogICAgICAgICAgICAgVkdfKHBwX2FkZHJpbmZvX21jKShWR18oZ2V0X2Vycm9yX2Fk
ZHJlc3MpKGVyciksICZleHRyYS0+RXJyLlVzZXIuYWksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZhbHNlKTsKLSAgICAgICAgICAgIGlmIChleHRyYS0+RXJyLlVzZXIub3JpZ2lu
X2VjICYmICFleHRyYS0+RXJyLlVzZXIuaXNBZGRyRXJyKQotICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLlVzZXIub3JpZ2luX2VjLAorICAgICAgICAgICAgaWYgKGV4dHJh
LT5FcnIuVXNlci5vcmlnaW5fZWNlLmVjICYmICFleHRyYS0+RXJyLlVzZXIuaXNBZGRyRXJyKQor
ICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJyLlVzZXIub3JpZ2luX2VjZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5Vc2VyLm90YWcgJiAzICk7
CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIiVzIGJ5dGUocykgZm91bmQg
ZHVyaW5nIGNsaWVudCBjaGVjayByZXF1ZXN0XG4iLCAKICAgICAgICAgICAgICAgICAgICBleHRy
YS0+RXJyLlVzZXIuaXNBZGRyRXJyCiAgICAgICAgICAgICAgICAgICAgICAgPyAiVW5hZGRyZXNz
YWJsZSIgOiAiVW5pbml0aWFsaXNlZCIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAg
IFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLCAmZXh0cmEt
PkVyci5Vc2VyLmFpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSk7Ci0g
ICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lYyAmJiAhZXh0cmEtPkVyci5V
c2VyLmlzQWRkckVycikKLSAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5V
c2VyLm9yaWdpbl9lYywKKyAgICAgICAgICAgIGlmIChleHRyYS0+RXJyLlVzZXIub3JpZ2luX2Vj
ZS5lYyAmJiAhZXh0cmEtPkVyci5Vc2VyLmlzQWRkckVycikKKyAgICAgICAgICAgICAgIG1jX3Bw
X29yaWdpbiggZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLT5FcnIuVXNlci5vdGFnICYgMyApOwogICAgICAgICAgfQogICAgICAg
ICAgYnJlYWs7CkBAIC01NjQsMTIgKzU2NCwxMiBAQAogICAgICAgICAgICAgZW1pdCggIiAgPGtp
bmQ+SW52YWxpZEZyZWU8L2tpbmQ+XG4iICk7CiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD5J
bnZhbGlkIGZyZWUoKSAvIGRlbGV0ZSAvIGRlbGV0ZVtdIgogICAgICAgICAgICAgICAgICAgIiAv
IHJlYWxsb2MoKTwvd2hhdD5cbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSgg
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAgIFZH
XyhwcF9hZGRyaW5mb19tYykoIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkZyZWUuYWksIEZhbHNlICk7CiAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIkludmFsaWQgZnJlZSgpIC8gZGVs
ZXRlIC8gZGVsZXRlW10gLyByZWFsbG9jKClcbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBw
X0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAg
ICAgICAgIFZHXyhwcF9hZGRyaW5mb19tYykoIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkZyZWUuYWksIEZh
bHNlICk7CiAgICAgICAgICB9CkBAIC01NzksMTIgKzU3OSwxMiBAQAogICAgICAgICAgaWYgKHht
bCkgewogICAgICAgICAgICAgZW1pdCggIiAgPGtpbmQ+TWlzbWF0Y2hlZEZyZWU8L2tpbmQ+XG4i
ICk7CiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD5NaXNtYXRjaGVkIGZyZWUoKSAvIGRlbGV0
ZSAvIGRlbGV0ZSBbXTwvd2hhdD5cbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAg
IFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEtPkVyci5GcmVlTWlzbWF0Y2guYWksIEZh
bHNlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlbWl0KCAiTWlzbWF0Y2hlZCBm
cmVlKCkgLyBkZWxldGUgLyBkZWxldGUgW11cbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBw
X0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAg
ICAgICAgIFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEtPkVyci5GcmVlTWlzbWF0Y2gu
YWksIEZhbHNlKTsKICAgICAgICAgIH0KQEAgLTU5Nyw3ICs1OTcsNyBAQAogICAgICAgICAgICAg
ZW1pdCggIiAgPHdoYXQ+SW52YWxpZCAlcyBvZiBzaXplICVsdTwvd2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLkFkZHIuaXNXcml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsCiAg
ICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLkFkZHIuc3pCICk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7
CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0X2Vycm9yX2FkZHJlc3Mp
KGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEtPkVyci5BZGRy
LmFpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5BZGRyLm1h
eWJlX2djYyApOwpAQCAtNjA1LDcgKzYwNSw3IEBACiAgICAgICAgICAgICBlbWl0KCAiSW52YWxp
ZCAlcyBvZiBzaXplICVsdVxuIiwKICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuQWRkci5p
c1dyaXRlID8gIndyaXRlIiA6ICJyZWFkIiwKICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIu
QWRkci5zekIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJv
cl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCko
IFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKIAogICAgICAgICAgICAgVkdfKHBwX2FkZHJp
bmZvX21jKSggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuQWRkci5haSwKQEAgLTYxOCwxMiArNjE4LDEyIEBA
CiAgICAgICAgICAgICBlbWl0KCAiICA8a2luZD5JbnZhbGlkSnVtcDwva2luZD5cbiIgKTsKICAg
ICAgICAgICAgIGVtaXQoICIgIDx3aGF0Pkp1bXAgdG8gdGhlIGludmFsaWQgYWRkcmVzcyBzdGF0
ZWQgIgogICAgICAgICAgICAgICAgICAgIm9uIHRoZSBuZXh0IGxpbmU8L3doYXQ+XG4iICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0
X2Vycm9yX2FkZHJlc3MpKGVyciksICZleHRyYS0+RXJyLkp1bXAuYWksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGYWxzZSApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGVtaXQoICJKdW1wIHRvIHRoZSBpbnZhbGlkIGFkZHJlc3Mgc3RhdGVkIG9uIHRoZSBuZXh0
IGxpbmVcbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJv
cl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCko
IFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAgIFZHXyhwcF9hZGRyaW5m
b19tYykoIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwgJmV4dHJhLT5FcnIuSnVtcC5haSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlICk7CiAgICAgICAgICB9CkBA
IC02NDQsNyArNjQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuT3Zlcmxh
cC5kc3QsIGV4dHJhLT5FcnIuT3ZlcmxhcC5zcmMsCiAgICAgICAgICAgICAgICAgICAgICBleHRy
YS0+RXJyLk92ZXJsYXAuc3pCICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuT3ZlcmxhcC5zekIg
PT0gMCkgewogICAgICAgICAgICAgICAgZW1pdCggIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gb3Zl
cmxhcCBpbiAlcyglI2x4LCAlI2x4KVxuIiwKQEAgLTY1Niw3ICs2NTYsNyBAQAogICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEtPkVyci5PdmVybGFwLmRzdCwgZXh0cmEtPkVyci5PdmVybGFwLnNy
YywKICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuT3ZlcmxhcC5zekIgKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZH
XyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwog
CkBAIC02NjYsMTIgKzY2NiwxMiBAQAogICAgICAgICAgaWYgKHhtbCkgewogICAgICAgICAgICAg
ZW1pdCggIiAgPGtpbmQ+SW52YWxpZE1lbVBvb2w8L2tpbmQ+XG4iICk7CiAgICAgICAgICAgICBl
bWl0KCAiICA8d2hhdD5JbGxlZ2FsIG1lbW9yeSBwb29sIGFkZHJlc3M8L3doYXQ+XG4iICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0
X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZXh0cmEtPkVyci5JbGxlZ2FsTWVtcG9vbC5haSwgRmFsc2UgKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBlbWl0KCAiSWxsZWdhbCBtZW1vcnkgcG9vbCBhZGRyZXNzXG4iICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0
X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZXh0cmEtPkVyci5JbGxlZ2FsTWVtcG9vbC5haSwgRmFsc2UgKTsKICAgICAgICAgIH0KQEAgLTY5
NSw3ICs2OTUsNyBAQAogICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5GaXNoeVZhbHVlLmZ1
bmN0aW9uX25hbWUsCiAgICAgICAgICAgICAgICAgICAoU1NpemVUKWV4dHJhLT5FcnIuRmlzaHlW
YWx1ZS52YWx1ZSk7CiAgICAgICAgICAgICBlbWl0KCAiPC93aGF0PiIpOwotICAgICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAg
ICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJy
KSApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVtaXQoICJBcmd1bWVudCAnJXMn
IG9mIGZ1bmN0aW9uICVzIGhhcyBhIGZpc2h5ICIKICAgICAgICAgICAgICAgICAgICIocG9zc2li
bHkgbmVnYXRpdmUpIHZhbHVlOiAlbGRcbiIsCkBAIC03MDIsNyArNzAyLDcgQEAKICAgICAgICAg
ICAgICAgICAgIGV4dHJhLT5FcnIuRmlzaHlWYWx1ZS5hcmd1bWVudF9uYW1lLAogICAgICAgICAg
ICAgICAgICAgZXh0cmEtPkVyci5GaXNoeVZhbHVlLmZ1bmN0aW9uX25hbWUsCiAgICAgICAgICAg
ICAgICAgICAoU1NpemVUKWV4dHJhLT5FcnIuRmlzaHlWYWx1ZS52YWx1ZSk7Ci0gICAgICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAg
ICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShl
cnIpICk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKIApAQCAtNzczLDkgKzc3MywxMCBA
QAogICAgdGxfYXNzZXJ0KCBNQ18oY2xvX21jX2xldmVsKSA+PSAyICk7CiAgICBpZiAob3RhZyA+
IDApCiAgICAgICB0bF9hc3NlcnQoIE1DXyhjbG9fbWNfbGV2ZWwpID09IDMgKTsKLSAgIGV4dHJh
LkVyci5WYWx1ZS5zekIgICAgICAgPSBzekI7Ci0gICBleHRyYS5FcnIuVmFsdWUub3RhZyAgICAg
ID0gb3RhZzsKLSAgIGV4dHJhLkVyci5WYWx1ZS5vcmlnaW5fZWMgPSBOVUxMOyAgLyogRmlsbGVk
IGluIGxhdGVyICovCisgICBleHRyYS5FcnIuVmFsdWUuc3pCICAgICAgICA9IHN6QjsKKyAgIGV4
dHJhLkVyci5WYWx1ZS5vdGFnICAgICAgID0gb3RhZzsKKyAgIGV4dHJhLkVyci5WYWx1ZS5vcmln
aW5fZWNlID0gVkdfKGludmFsaWRfRXhlQ29udGV4dEFuZEVwb2NoKSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBGaWxsZWQgaW4gbGF0ZXIgKi8KICAgIFZHXyhtYXliZV9y
ZWNvcmRfZXJyb3IpKCB0aWQsIEVycl9WYWx1ZSwgLyphZGRyKi8wLCAvKnMqL05VTEwsICZleHRy
YSApOwogfQogCkBAIC03ODUsOCArNzg2LDkgQEAKICAgIHRsX2Fzc2VydCggTUNfKGNsb19tY19s
ZXZlbCkgPj0gMiApOwogICAgaWYgKG90YWcgPiAwKQogICAgICAgdGxfYXNzZXJ0KCBNQ18oY2xv
X21jX2xldmVsKSA9PSAzICk7Ci0gICBleHRyYS5FcnIuQ29uZC5vdGFnICAgICAgPSBvdGFnOwot
ICAgZXh0cmEuRXJyLkNvbmQub3JpZ2luX2VjID0gTlVMTDsgIC8qIEZpbGxlZCBpbiBsYXRlciAq
LworICAgZXh0cmEuRXJyLkNvbmQub3RhZyAgICAgICA9IG90YWc7CisgICBleHRyYS5FcnIuQ29u
ZC5vcmlnaW5fZWNlID0gVkdfKGludmFsaWRfRXhlQ29udGV4dEFuZEVwb2NoKSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGxlZCBpbiBsYXRlciAqLwogICAgVkdfKG1h
eWJlX3JlY29yZF9lcnJvcikoIHRpZCwgRXJyX0NvbmQsIC8qYWRkciovMCwgLypzKi9OVUxMLCAm
ZXh0cmEgKTsKIH0KIApAQCAtODA0LDggKzgwNiw5IEBACiAgICB0bF9hc3NlcnQoVkdfSU5WQUxJ
RF9USFJFQURJRCAhPSB0aWQpOwogICAgaWYgKG90YWcgPiAwKQogICAgICAgdGxfYXNzZXJ0KCBN
Q18oY2xvX21jX2xldmVsKSA9PSAzICk7Ci0gICBleHRyYS5FcnIuUmVnUGFyYW0ub3RhZyAgICAg
ID0gb3RhZzsKLSAgIGV4dHJhLkVyci5SZWdQYXJhbS5vcmlnaW5fZWMgPSBOVUxMOyAgLyogRmls
bGVkIGluIGxhdGVyICovCisgICBleHRyYS5FcnIuUmVnUGFyYW0ub3RhZyAgICAgICA9IG90YWc7
CisgICBleHRyYS5FcnIuUmVnUGFyYW0ub3JpZ2luX2VjZSA9IFZHXyhpbnZhbGlkX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGxl
ZCBpbiBsYXRlciAqLwogICAgVkdfKG1heWJlX3JlY29yZF9lcnJvcikoIHRpZCwgRXJyX1JlZ1Bh
cmFtLCAvKmFkZHIqLzAsIG1zZywgJmV4dHJhICk7CiB9CiAKQEAgLTgyMCwxMCArODIzLDExIEBA
CiAgICAgICB0bF9hc3NlcnQoIE1DXyhjbG9fbWNfbGV2ZWwpID09IDMgKTsKICAgICAgIHRsX2Fz
c2VydCggIWlzQWRkckVyciApOwogICAgfQotICAgZXh0cmEuRXJyLk1lbVBhcmFtLmlzQWRkckVy
ciA9IGlzQWRkckVycjsKLSAgIGV4dHJhLkVyci5NZW1QYXJhbS5haS50YWcgICAgPSBBZGRyX1Vu
ZGVzY3JpYmVkOwotICAgZXh0cmEuRXJyLk1lbVBhcmFtLm90YWcgICAgICA9IG90YWc7Ci0gICBl
eHRyYS5FcnIuTWVtUGFyYW0ub3JpZ2luX2VjID0gTlVMTDsgIC8qIEZpbGxlZCBpbiBsYXRlciAq
LworICAgZXh0cmEuRXJyLk1lbVBhcmFtLmlzQWRkckVyciAgPSBpc0FkZHJFcnI7CisgICBleHRy
YS5FcnIuTWVtUGFyYW0uYWkudGFnICAgICA9IEFkZHJfVW5kZXNjcmliZWQ7CisgICBleHRyYS5F
cnIuTWVtUGFyYW0ub3RhZyAgICAgICA9IG90YWc7CisgICBleHRyYS5FcnIuTWVtUGFyYW0ub3Jp
Z2luX2VjZSA9IFZHXyhpbnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGxlZCBpbiBsYXRlciAqLwogICAgVkdfKG1heWJl
X3JlY29yZF9lcnJvcikoIHRpZCwgRXJyX01lbVBhcmFtLCBhLCBtc2csICZleHRyYSApOwogfQog
CkBAIC05MjUsMTAgKzkyOSwxMSBAQAogICAgICAgdGxfYXNzZXJ0KCBNQ18oY2xvX21jX2xldmVs
KSA+PSAyICk7CiAgICB9CiAgICB0bF9hc3NlcnQoVkdfSU5WQUxJRF9USFJFQURJRCAhPSB0aWQp
OwotICAgZXh0cmEuRXJyLlVzZXIuaXNBZGRyRXJyID0gaXNBZGRyRXJyOwotICAgZXh0cmEuRXJy
LlVzZXIuYWkudGFnICAgID0gQWRkcl9VbmRlc2NyaWJlZDsKLSAgIGV4dHJhLkVyci5Vc2VyLm90
YWcgICAgICA9IG90YWc7Ci0gICBleHRyYS5FcnIuVXNlci5vcmlnaW5fZWMgPSBOVUxMOyAgLyog
RmlsbGVkIGluIGxhdGVyICovCisgICBleHRyYS5FcnIuVXNlci5pc0FkZHJFcnIgID0gaXNBZGRy
RXJyOworICAgZXh0cmEuRXJyLlVzZXIuYWkudGFnICAgICA9IEFkZHJfVW5kZXNjcmliZWQ7Cisg
ICBleHRyYS5FcnIuVXNlci5vdGFnICAgICAgID0gb3RhZzsKKyAgIGV4dHJhLkVyci5Vc2VyLm9y
aWdpbl9lY2UgPSBWR18oaW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIEZpbGxlZCBpbiBsYXRlciAqLwogICAgVkdfKG1heWJlX3Jl
Y29yZF9lcnJvcikoIHRpZCwgRXJyX1VzZXIsIGEsIC8qcyovTlVMTCwgJmV4dHJhICk7CiB9CiAK
QEAgLTEwNTMsNyArMTA1OCw3IEBACiAKIC8qIERlc2NyaWJlIGFuIGFkZHJlc3MgYXMgYmVzdCB5
b3UgY2FuLCBmb3IgZXJyb3IgbWVzc2FnZXMsCiAgICBwdXR0aW5nIHRoZSByZXN1bHQgaW4gYWku
ICovCi1zdGF0aWMgdm9pZCBkZXNjcmliZV9hZGRyICggQWRkciBhLCAvKk9VVCovQWRkckluZm8q
IGFpICkKK3N0YXRpYyB2b2lkIGRlc2NyaWJlX2FkZHIgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIC8q
T1VUKi9BZGRySW5mbyogYWkgKQogewogICAgTUNfQ2h1bmsqICBtYzsKIApAQCAtMTEyMSwyOCAr
MTEyNiwzMCBAQAogICAgfQogCiAgICAvKiBObyBibG9jayBmb3VuZC4gU2VhcmNoIGEgbm9uLWhl
YXAgYmxvY2sgZGVzY3JpcHRpb24uICovCi0gICBWR18oZGVzY3JpYmVfYWRkcikgKGEsIGFpKTsK
KyAgIFZHXyhkZXNjcmliZV9hZGRyKSAoZXAsIGEsIGFpKTsKIH0KIAotdm9pZCBNQ18ocHBfZGVz
Y3JpYmVfYWRkcikgKCBBZGRyIGEgKQordm9pZCBNQ18ocHBfZGVzY3JpYmVfYWRkcikgKCBEaUVw
b2NoIGVwLCBBZGRyIGEgKQogewogICAgQWRkckluZm8gYWk7CiAKICAgIGFpLnRhZyA9IEFkZHJf
VW5kZXNjcmliZWQ7Ci0gICBkZXNjcmliZV9hZGRyIChhLCAmYWkpOworICAgZGVzY3JpYmVfYWRk
ciAoZXAsIGEsICZhaSk7CiAgICBWR18ocHBfYWRkcmluZm9fbWMpIChhLCAmYWksIC8qIG1heWJl
X2djYyAqLyBGYWxzZSk7CiAgICBWR18oY2xlYXJfYWRkcmluZm8pICgmYWkpOwogfQogCi0vKiBG
aWxsIGluICpvcmlnaW5fZWMgYXMgc3BlY2lmaWVkIGJ5IG90YWcsIG9yIE5VTEwgaXQgb3V0IGlm
IG90YWcKKy8qIEZpbGwgaW4gKm9yaWdpbl9lY2UgYXMgc3BlY2lmaWVkIGJ5IG90YWcsIG9yIE5V
TEwgaXQgb3V0IGlmIG90YWcKICAgIGRvZXMgbm90IHJlZmVyIHRvIGEga25vd24gb3JpZ2luLiAq
Lwotc3RhdGljIHZvaWQgdXBkYXRlX29yaWdpbiAoIC8qT1VUKi9FeGVDb250ZXh0Kiogb3JpZ2lu
X2VjLAorc3RhdGljIHZvaWQgdXBkYXRlX29yaWdpbiAoIC8qT1VUKi9FeGVDb250ZXh0QW5kRXBv
Y2gqIG9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludCBvdGFnICkK
IHsKICAgIFVJbnQgZWN1ID0gb3RhZyAmIH4zOwotICAgKm9yaWdpbl9lYyA9IE5VTEw7CiAgICBp
ZiAoVkdfKGlzX3BsYXVzaWJsZV9FQ1UpKGVjdSkpIHsKLSAgICAgICpvcmlnaW5fZWMgPSBWR18o
Z2V0X0V4ZUNvbnRleHRfZnJvbV9FQ1UpKCBlY3UgKTsKKyAgICAgICpvcmlnaW5fZWNlCisgICAg
ICAgICA9IFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShWR18oZ2V0X0V4ZUNvbnRleHRf
ZnJvbV9FQ1UpKCBlY3UgKSk7CisgICB9IGVsc2UgeworICAgICAgKm9yaWdpbl9lY2UgPSBWR18o
aW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpKCk7CiAgICB9CiB9CiAKQEAgLTExNTAsNiArMTE1
Nyw3IEBACiBVSW50IE1DXyh1cGRhdGVfRXJyb3JfZXh0cmEpKCBjb25zdCBFcnJvciogZXJyICkK
IHsKICAgIE1DX0Vycm9yKiBleHRyYSA9IFZHXyhnZXRfZXJyb3JfZXh0cmEpKGVycik7CisgICBE
aUVwb2NoICAgZXAgICAgPSBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpLmVwb2NoOwogCiAgICBz
d2l0Y2ggKFZHXyhnZXRfZXJyb3Jfa2luZCkoZXJyKSkgewogICAgLy8gVGhlc2Ugb25lcyBkb24n
dCBoYXZlIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhlbSwgYW5kIHNvIGRvbid0CkBAIC0x
MTY5LDQ1ICsxMTc3LDQ1IEBACiAgICAvLyBvcmlnaW4gdGFnLiAgTm90ZSB0aGF0IGl0IGlzIGEg
a2x1ZGdlIHRvIGFzc3VtZSB0aGF0IAogICAgLy8gYSBsZW5ndGgtMSB0cmFjZSBpbmRpY2F0ZXMg
YSBzdGFjayBvcmlnaW4uICBGSVhNRS4KICAgIGNhc2UgRXJyX1ZhbHVlOgotICAgICAgdXBkYXRl
X29yaWdpbiggJmV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjLAorICAgICAgdXBkYXRlX29yaWdp
biggJmV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjZSwKICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhLT5FcnIuVmFsdWUub3RhZyApOwogICAgICAgcmV0dXJuIHNpemVvZihNQ19FcnJvcik7CiAg
ICBjYXNlIEVycl9Db25kOgotICAgICAgdXBkYXRlX29yaWdpbiggJmV4dHJhLT5FcnIuQ29uZC5v
cmlnaW5fZWMsCisgICAgICB1cGRhdGVfb3JpZ2luKCAmZXh0cmEtPkVyci5Db25kLm9yaWdpbl9l
Y2UsCiAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLkNvbmQub3RhZyApOwogICAgICAg
cmV0dXJuIHNpemVvZihNQ19FcnJvcik7CiAgICBjYXNlIEVycl9SZWdQYXJhbToKLSAgICAgIHVw
ZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lYywKKyAgICAgIHVwZGF0
ZV9vcmlnaW4oICZleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAg
ICAgICAgICBleHRyYS0+RXJyLlJlZ1BhcmFtLm90YWcgKTsKICAgICAgIHJldHVybiBzaXplb2Yo
TUNfRXJyb3IpOwogCiAgICAvLyBUaGVzZSBvbmVzIGFsd2F5cyBpbnZvbHZlIGEgbWVtb3J5IGFk
ZHJlc3MuCiAgICBjYXNlIEVycl9BZGRyOgotICAgICAgZGVzY3JpYmVfYWRkciAoIFZHXyhnZXRf
ZXJyb3JfYWRkcmVzcykoZXJyKSwKKyAgICAgIGRlc2NyaWJlX2FkZHIgKCBlcCwgVkdfKGdldF9l
cnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkFk
ZHIuYWkgKTsKICAgICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfTWVt
UGFyYW06Ci0gICAgICBkZXNjcmliZV9hZGRyICggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIp
LAorICAgICAgZGVzY3JpYmVfYWRkciAoIGVwLCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciks
CiAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuTWVtUGFyYW0uYWkgKTsKLSAgICAg
IHVwZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLk1lbVBhcmFtLm9yaWdpbl9lYywKKyAgICAgIHVw
ZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLk1lbVBhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLk1lbVBhcmFtLm90YWcgKTsKICAgICAgIHJldHVybiBzaXpl
b2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfSnVtcDoKLSAgICAgIGRlc2NyaWJlX2FkZHIgKCBW
R18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCisgICAgICBkZXNjcmliZV9hZGRyICggZXAsIFZH
XyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEt
PkVyci5KdW1wLmFpICk7CiAgICAgICByZXR1cm4gc2l6ZW9mKE1DX0Vycm9yKTsKICAgIGNhc2Ug
RXJyX1VzZXI6Ci0gICAgICBkZXNjcmliZV9hZGRyICggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShl
cnIpLAorICAgICAgZGVzY3JpYmVfYWRkciAoIGVwLCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVy
ciksCiAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuVXNlci5haSApOwotICAgICAg
dXBkYXRlX29yaWdpbiggJmV4dHJhLT5FcnIuVXNlci5vcmlnaW5fZWMsCisgICAgICB1cGRhdGVf
b3JpZ2luKCAmZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAg
ICBleHRyYS0+RXJyLlVzZXIub3RhZyApOwogICAgICAgcmV0dXJuIHNpemVvZihNQ19FcnJvcik7
CiAgICBjYXNlIEVycl9GcmVlOgotICAgICAgZGVzY3JpYmVfYWRkciAoIFZHXyhnZXRfZXJyb3Jf
YWRkcmVzcykoZXJyKSwKKyAgICAgIGRlc2NyaWJlX2FkZHIgKCBlcCwgVkdfKGdldF9lcnJvcl9h
ZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkZyZWUuYWkg
KTsKICAgICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfSWxsZWdhbE1l
bXBvb2w6Ci0gICAgICBkZXNjcmliZV9hZGRyICggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIp
LAorICAgICAgZGVzY3JpYmVfYWRkciAoIGVwLCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciks
CiAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuSWxsZWdhbE1lbXBvb2wuYWkgKTsK
ICAgICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogCkBAIC0xMjUyLDcgKzEyNjAsNyBAQAog
ICAgICAgICAgYWktPkFkZHIuQmxvY2sucndvZmZzZXQgICA9IChXb3JkKShhKSAtIChXb3JkKShj
Z2JzW2ldLnN0YXJ0KTsKICAgICAgICAgIGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCA9IGNn
YnNbaV0ud2hlcmU7CiAgICAgICAgICBWR18oaW5pdFRocmVhZEluZm8pICgmYWktPkFkZHIuQmxv
Y2suYWxsb2NfdGluZm8pOwotICAgICAgICAgYWktPkFkZHIuQmxvY2suZnJlZWRfYXQgPSBWR18o
bnVsbF9FeGVDb250ZXh0KSgpOzsKKyAgICAgICAgIGFpLT5BZGRyLkJsb2NrLmZyZWVkX2F0ID0g
VkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSgpOwogICAgICAgICAgcmV0dXJuIFRydWU7CiAg
ICAgICB9CiAgICB9CkluZGV4OiBtZW1jaGVjay9tY19pbmNsdWRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
bWVtY2hlY2svbWNfaW5jbHVkZS5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIG1lbWNoZWNrL21jX2lu
Y2x1ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTcgKzY3LDE3IEBACiAgICAgICBBZGRyICAg
ICAgICAgZGF0YTsgICAgICAgICAgICAvLyBBZGRyZXNzIG9mIHRoZSBhY3R1YWwgYmxvY2suCiAg
ICAgICBTaXplVCAgICAgICAgc3pCIDogKHNpemVvZihTaXplVCkqOCktMjsgLy8gU2l6ZSByZXF1
ZXN0ZWQ7IDMwIG9yIDYyIGJpdHMuCiAgICAgICBNQ19BbGxvY0tpbmQgYWxsb2NraW5kIDogMjsg
ICAvLyBXaGljaCBvcGVyYXRpb24gZGlkIHRoZSBhbGxvY2F0aW9uLgotICAgICAgRXhlQ29udGV4
dCogIHdoZXJlWzBdOworICAgICAgRXhlQ29udGV4dEFuZEVwb2NoIHdoZXJlWzBdOwogICAgICAg
LyogVmFyaWFibGUtbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBkZXBlbmRzIG9uIE1DXyhjbG9fa2Vl
cF9zdGFja3RyYWNlcykuCiAgICAgICAgICBUaGlzIGFycmF5IG9wdGlvbmFsbHkgc3RvcmVzIHRo
ZSBhbGxvYyBhbmQvb3IgZnJlZSBzdGFjayB0cmFjZS4gKi8KICAgIH0KICAgIE1DX0NodW5rOwog
Ci0vKiBSZXR1cm5zIHRoZSBleGVjb250ZXh0IHdoZXJlIHRoZSBNQ19DaHVuayB3YXMgYWxsb2Nh
dGVkL2ZyZWVkLgorLyogUmV0dXJucyB0aGUgZXhlY29udGV4dCBhbmQgZXBvY2ggd2hlcmUgdGhl
IE1DX0NodW5rIHdhcyBhbGxvY2F0ZWQvZnJlZWQuCiAgICBSZXR1cm5zIFZHXyhudWxsX0V4ZUNv
bnRleHQpKCkgaWYgdGhlIGV4ZWNvbnRleHQgaGFzIG5vdCBiZWVuIHJlY29yZGVkIChkdWUKICAg
IHRvIE1DXyhjbG9fa2VlcF9zdGFja3RyYWNlcykgYW5kL29yIGJlY2F1c2UgYmxvY2sgbm90IHll
dCBmcmVlZCkuICovCi1FeGVDb250ZXh0KiBNQ18oYWxsb2NhdGVkX2F0KSAoTUNfQ2h1bmsqKTsK
LUV4ZUNvbnRleHQqIE1DXyhmcmVlZF9hdCkgKE1DX0NodW5rKik7CitFeGVDb250ZXh0QW5kRXBv
Y2ggTUNfKGFsbG9jYXRlZF9hdCkgKE1DX0NodW5rKik7CitFeGVDb250ZXh0QW5kRXBvY2ggTUNf
KGZyZWVkX2F0KSAoTUNfQ2h1bmsqKTsKIAogLyogUmVjb3JkcyBhbmQgc2V0cyBleGVjb250ZXh0
IGFjY29yZGluZyB0byBNQ18oY2xvX2tlZXBfc3RhY2t0cmFjZXMpICovCiB2b2lkICBNQ18oc2V0
X2FsbG9jYXRlZF9hdCkgKFRocmVhZElkLCBNQ19DaHVuayopOwpAQCAtNDMyLDggKzQzMiw4IEBA
CiAvKiBXaGVuIGEgTG9zc1JlY29yZCBpcyBwdXQgaW50byBhbiBPU2V0LCB0aGVzZSBlbGVtZW50
cyByZXByZXNlbnQgdGhlIGtleS4gKi8KIHR5cGVkZWYKICAgIHN0cnVjdCBfTG9zc1JlY29yZEtl
eSB7Ci0gICAgICBSZWFjaGVkbmVzcyAgc3RhdGU7ICAgICAgICAvLyBMQ19FeHRyYS5zdGF0ZSB2
YWx1ZSBzaGFyZWQgYnkgYWxsIGJsb2Nrcy4KLSAgICAgIEV4ZUNvbnRleHQqICBhbGxvY2F0ZWRf
YXQ7IC8vIFdoZXJlIHRoZXkgd2VyZSBhbGxvY2F0ZWQuCisgICAgICBSZWFjaGVkbmVzcyAgICAg
ICAgIHN0YXRlOyAgLy8gTENfRXh0cmEuc3RhdGUgdmFsdWUgc2hhcmVkIGJ5IGFsbCBibG9ja3Mu
CisgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggIGFsbG9jYXRlZF9hdDsgLy8gV2hlcmUgdGhleSB3
ZXJlIGFsbG9jYXRlZC4KICAgIH0gCiAgICBMb3NzUmVjb3JkS2V5OwogCkBAIC01NjksOCArNTY5
LDggQEAKIC8qIExlYWsga2luZHMgdG9rZW5zIHRvIGNhbGwgVkdfKHBhcnNlX2VudW1fc2V0KS4g
Ki8KIGV4dGVybiBjb25zdCBIQ2hhciogTUNfKHBhcnNlX2xlYWtfa2luZHNfdG9rZW5zKTsKIAot
LyogcHJpbnRzIGEgZGVzY3JpcHRpb24gb2YgYWRkcmVzcyBhICovCi12b2lkIE1DXyhwcF9kZXNj
cmliZV9hZGRyKSAoQWRkciBhKTsKKy8qIHByaW50cyBhIGRlc2NyaXB0aW9uIG9mIGFkZHJlc3Mg
YSBpbiB0aGUgc3BlY2lmaWVkIGRlYnVnaW5mbyBlcG9jaCAqLwordm9pZCBNQ18ocHBfZGVzY3Jp
YmVfYWRkcikgKCBEaUVwb2NoIGVwLCBBZGRyIGEgKTsKIAogLyogSXMgdGhpcyBhZGRyZXNzIGlu
IGEgdXNlci1zcGVjaWZpZWQgImlnbm9yZWQgcmFuZ2UiID8gKi8KIEJvb2wgTUNfKGluX2lnbm9y
ZWRfcmFuZ2UpICggQWRkciBhICk7CkBAIC01ODgsMTAgKzU4OCwxMCBAQAogICAgc3RhcnQgPT0g
c2l6ZSA9PSAwLiAgKi8KIHR5cGVkZWYKICAgIHN0cnVjdCB7Ci0gICAgICBBZGRyICAgICAgICBz
dGFydDsKLSAgICAgIFNpemVUICAgICAgIHNpemU7Ci0gICAgICBFeGVDb250ZXh0KiB3aGVyZTsK
LSAgICAgIEhDaGFyKiAgICAgIGRlc2M7CisgICAgICBBZGRyICAgICAgICAgICAgICAgc3RhcnQ7
CisgICAgICBTaXplVCAgICAgICAgICAgICAgc2l6ZTsKKyAgICAgIEV4ZUNvbnRleHRBbmRFcG9j
aCB3aGVyZTsKKyAgICAgIEhDaGFyKiAgICAgICAgICAgICBkZXNjOwogICAgfSAKICAgIENHZW5C
bG9jazsKIApJbmRleDogbWVtY2hlY2svbWNfbGVha2NoZWNrLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVt
Y2hlY2svbWNfbGVha2NoZWNrLmMJKHJldmlzaW9uIDE2NDY1KQorKysgbWVtY2hlY2svbWNfbGVh
a2NoZWNrLmMJKHdvcmtpbmcgY29weSkKQEAgLTEwNjAsNiArMTA2MCw4IEBACiAgICBjb25zdCBB
ZGRyIGVuZCA9IFZHX1JPVU5ERE4oc3RhcnQrbGVuLCBzaXplb2YoQWRkcikpOwogICAgZmF1bHRf
Y2F0Y2hlcl90IHByZXZfY2F0Y2hlcjsKIAorICAgY29uc3QgRGlFcG9jaCBlcCA9IFZHXyhjdXJy
ZW50X0RpRXBvY2gpKCk7CisKICAgIGlmIChWR19ERUJVR19MRUFLQ0hFQ0spCiAgICAgICBWR18o
cHJpbnRmKSgic2NhbiAlI2x4LSUjbHggKCVsdSlcbiIsIHN0YXJ0LCBlbmQsIGxlbik7CiAKQEAg
LTExMzksNyArMTE0MSw3IEBACiAgICAgICAgICAgICBpZiAoYWRkciA+PSBzZWFyY2hlZCAmJiBh
ZGRyIDwgc2VhcmNoZWQgKyBzekIpIHsKICAgICAgICAgICAgICAgIGlmIChhZGRyID09IHNlYXJj
aGVkKSB7CiAgICAgICAgICAgICAgICAgICBWR18odW1zZykoIiolI2x4IHBvaW50cyBhdCAlI2x4
XG4iLCBwdHIsIHNlYXJjaGVkKTsKLSAgICAgICAgICAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9h
ZGRyKSAocHRyKTsKKyAgICAgICAgICAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9hZGRyKSAoZXAs
IHB0cik7IC8vIEZJWE1FIEpSUzogZXAgY29ycmVjdD8KICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICBJbnQgY2hfbm87CiAgICAgICAgICAgICAgICAgICBNQ19DaHVu
ayAqY2g7CkBAIC0xMTQ2LDcgKzExNDgsNyBAQAogICAgICAgICAgICAgICAgICAgTENfRXh0cmEg
KmV4OwogICAgICAgICAgICAgICAgICAgVkdfKHVtc2cpKCIqJSNseCBpbnRlcmlvciBwb2ludHMg
YXQgJWx1IGJ5dGVzIGluc2lkZSAlI2x4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB0ciwgKGxvbmcgdW5zaWduZWQpIGFkZHIgLSBzZWFyY2hlZCwgc2VhcmNoZWQpOwotICAgICAg
ICAgICAgICAgICAgTUNfKHBwX2Rlc2NyaWJlX2FkZHIpIChwdHIpOworICAgICAgICAgICAgICAg
ICAgTUNfKHBwX2Rlc2NyaWJlX2FkZHIpIChlcCwgcHRyKTsgLy8gRklYTUUgSlJTOiBlcCBjb3Jy
ZWN0PwogICAgICAgICAgICAgICAgICAgaWYgKGxjX2lzX2FfY2h1bmtfcHRyKGFkZHIsICZjaF9u
bywgJmNoLCAmZXgpICkgewogICAgICAgICAgICAgICAgICAgICAgSW50IGg7CiAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGggPSBMY2hTdGRTdHJpbmc7IGggPCBOX0xFQUtfQ0hFQ0tfSEVVUklT
VElDUzsgaCsrKSB7CkBAIC0xMjAzLDEzICsxMjA1LDE3IEBACiAgICAvLyBDb21wYXJlIG9uIHN0
YXRlcyBmaXJzdCBiZWNhdXNlIHRoYXQncyBmYXN0LgogICAgaWYgKGEtPnN0YXRlIDwgYi0+c3Rh
dGUpIHJldHVybiAtMTsKICAgIGlmIChhLT5zdGF0ZSA+IGItPnN0YXRlKSByZXR1cm4gIDE7Ci0g
ICAvLyBPaywgdGhlIHN0YXRlcyBhcmUgZXF1YWwuICBOb3cgY29tcGFyZSB0aGUgbG9jYXRpb25z
LCB3aGljaCBpcyBzbG93ZXIuCisgICAvLyBBbHNvIG9uIGVwb2NocywgZm9yIHRoZSBzYW1lIHJl
YXNvbi4KKyAgIGlmIChhLT5hbGxvY2F0ZWRfYXQuZXBvY2gubiA8IGItPmFsbG9jYXRlZF9hdC5l
cG9jaC5uKSByZXR1cm4gLTE7CisgICBpZiAoYS0+YWxsb2NhdGVkX2F0LmVwb2NoLm4gPiBiLT5h
bGxvY2F0ZWRfYXQuZXBvY2gubikgcmV0dXJuIDE7CisgICAvLyBPaywgdGhlIHN0YXRlcyBhbmQg
ZXBvY2hzIGFyZSBlcXVhbC4gIE5vdyBjb21wYXJlIHRoZSBsb2NhdGlvbnMsIHdoaWNoCisgICAv
LyBpcyBzbG93ZXIuCiAgICBpZiAoVkdfKGVxX0V4ZUNvbnRleHQpKAotICAgICAgICAgICAgTUNf
KGNsb19sZWFrX3Jlc29sdXRpb24pLCBhLT5hbGxvY2F0ZWRfYXQsIGItPmFsbG9jYXRlZF9hdCkp
CisgICAgICAgICAgICBNQ18oY2xvX2xlYWtfcmVzb2x1dGlvbiksIGEtPmFsbG9jYXRlZF9hdC5l
YywgYi0+YWxsb2NhdGVkX2F0LmVjKSkKICAgICAgIHJldHVybiAwOwogICAgLy8gRGlmZmVyZW50
IGxvY2F0aW9ucy4gIE9yZGVyaW5nIGlzIGFyYml0cmFyeSwganVzdCB1c2UgdGhlIGVjIHBvaW50
ZXIuCi0gICBpZiAoYS0+YWxsb2NhdGVkX2F0IDwgYi0+YWxsb2NhdGVkX2F0KSByZXR1cm4gLTE7
Ci0gICBpZiAoYS0+YWxsb2NhdGVkX2F0ID4gYi0+YWxsb2NhdGVkX2F0KSByZXR1cm4gIDE7Cisg
ICBpZiAoYS0+YWxsb2NhdGVkX2F0LmVjIDwgYi0+YWxsb2NhdGVkX2F0LmVjKSByZXR1cm4gLTE7
CisgICBpZiAoYS0+YWxsb2NhdGVkX2F0LmVjID4gYi0+YWxsb2NhdGVkX2F0LmVjKSByZXR1cm4g
IDE7CiAgICBWR18odG9vbF9wYW5pYykoImJhZCBMb3NzUmVjb3JkIGNvbXBhcmlzb24iKTsKIH0K
IApAQCAtMTIzMSwxMCArMTIzNywxNSBAQAogICAgLy8gcG9zc2libGUuICBTbzogIGNvbXBhcmUg
bnVtX2Jsb2Nrcy4KICAgIGlmIChscl9hLT5udW1fYmxvY2tzIDwgbHJfYi0+bnVtX2Jsb2Nrcykg
cmV0dXJuIC0xOwogICAgaWYgKGxyX2EtPm51bV9ibG9ja3MgPiBscl9iLT5udW1fYmxvY2tzKSBy
ZXR1cm4gIDE7CisgICAvLyBUaGVuIGVwb2Nocy4KKyAgIGlmIChscl9hLT5rZXkuYWxsb2NhdGVk
X2F0LmVwb2NoLm4gPCBscl9iLT5rZXkuYWxsb2NhdGVkX2F0LmVwb2NoLm4pCisgICAgICByZXR1
cm4gLTE7CisgICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9hdC5lcG9jaC5uID4gbHJfYi0+a2V5
LmFsbG9jYXRlZF9hdC5lcG9jaC5uKQorICAgICAgcmV0dXJuIDE7CiAgICAvLyBGaW5hbGx5LCBj
b21wYXJlIEV4ZUNvbnRleHQgYWRkcmVzc2VzLi4uIG9sZGVyIG9uZXMgYXJlIGxpa2VseSB0byBo
YXZlCiAgICAvLyBsb3dlciBhZGRyZXNzZXMuCi0gICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9h
dCA8IGxyX2ItPmtleS5hbGxvY2F0ZWRfYXQpIHJldHVybiAtMTsKLSAgIGlmIChscl9hLT5rZXku
YWxsb2NhdGVkX2F0ID4gbHJfYi0+a2V5LmFsbG9jYXRlZF9hdCkgcmV0dXJuICAxOworICAgaWYg
KGxyX2EtPmtleS5hbGxvY2F0ZWRfYXQuZWMgPCBscl9iLT5rZXkuYWxsb2NhdGVkX2F0LmVjKSBy
ZXR1cm4gLTE7CisgICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9hdC5lYyA+IGxyX2ItPmtleS5h
bGxvY2F0ZWRfYXQuZWMpIHJldHVybiAgMTsKICAgIHJldHVybiAwOwogfQogCkBAIC0xMzgxLDcg
KzEzOTIsNyBAQAogICAgICAgeHRsLnh0X2xyW2ldLnZpZFtYVF9EZWNyZWFzZV0ubnVtX2Jsb2Nr
cyAKICAgICAgICAgID0gbHItPm9sZF9udW1fYmxvY2tzIC0gbHItPm51bV9ibG9ja3M7CiAKLSAg
IFZHXyhYVF9hZGRfdG9fZWMpKGxlYWtfeHQsIGxyLT5rZXkuYWxsb2NhdGVkX2F0LCAmeHRsKTsK
KyAgIFZHXyhYVF9hZGRfdG9fZWMpKGxlYWtfeHQsIGxyLT5rZXkuYWxsb2NhdGVkX2F0LmVjLCAm
eHRsKTsKIH0KIAogc3RhdGljIHZvaWQgTUNfKFhUX0xlYWtfc3ViKSAodm9pZCogZnJvbSwgY29u
c3Qgdm9pZCogeHRsZWFrKQpAQCAtMjEzMyw5ICsyMTQ0LDkgQEAKICAgICAgICAgICAgIFZHXyh1
bXNnKSgiQmxvY2sgMHglbHguLjB4JWx4IG92ZXJsYXBzIHdpdGggYmxvY2sgMHglbHguLjB4JWx4
XG4iLAogICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKTsK
ICAgICAgICAgICAgIFZHXyh1bXNnKSgiQmxvY2tzIGFsbG9jYXRpb24gY29udGV4dHM6XG4iKSwK
LSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggTUNfKGFsbG9jYXRlZF9hdCkoY2gxKSk7
CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggTUNfKGFsbG9jYXRlZF9h
dCkoY2gxKSk7CiAgICAgICAgICAgICBWR18odW1zZykoIlxuIiksCi0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoICBNQ18oYWxsb2NhdGVkX2F0KShjaDIpKTsKKyAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCAgTUNfKGFsbG9jYXRlZF9hdCkoY2gyKSk7CiAgICAg
ICAgICAgICBWR18odW1zZykoIlRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgdXNpbmcgIik7CiAg
ICAgICAgICAgICBWR18odW1zZykoIlZBTEdSSU5EX01BTExPQ0xJS0VfQkxPQ0sgaW4gYW4gaW5h
cHByb3ByaWF0ZSB3YXkuXG4iKTsKICAgICAgICAgICAgIHRsX2Fzc2VydCAoMCk7CkluZGV4OiBt
ZW1jaGVjay9tY19tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svbWNfbWFpbi5jCShyZXZp
c2lvbiAxNjQ2NSkKKysrIG1lbWNoZWNrL21jX21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtNjcx
OSw5ICs2NzE5LDExIEBACiAgICAgICBjb25zdCBIQ2hhciogc3JjOwogICAgICAgVUludCBvdGFn
OwogICAgICAgVUludCBlY3U7Ci0gICAgICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7CisgICAgICBF
eGVDb250ZXh0QW5kRXBvY2ggb3JpZ2luX2VjZTsKICAgICAgIE1DX1JlYWRSZXN1bHQgcmVzOwog
CisgICAgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKwogICAg
ICAgSW50IGt3ZGlkID0gVkdfKGtleXdvcmRfaWQpIAogICAgICAgICAgKCJhZGRyZXNzYWJsZSBk
ZWZpbmVkIiwKICAgICAgICAgICBWR18oc3RydG9rX3IpIChOVUxMLCAiICIsICZzc2F2ZXB0ciks
IGt3ZF9yZXBvcnRfYWxsKTsKQEAgLTY3MzgsNyArNjc0MCw4IEBACiAgICAgICAgICAgICBWR18o
cHJpbnRmKQogICAgICAgICAgICAgICAgKCJBZGRyZXNzICVwIGxlbiAlbHUgbm90IGFkZHJlc3Nh
YmxlOlxuYmFkIGFkZHJlc3MgJXBcbiIsCiAgICAgICAgICAgICAgICAgKHZvaWQgKilhZGRyZXNz
LCBzekIsICh2b2lkICopIGJhZF9hZGRyKTsKLSAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9hZGRy
KSAoYWRkcmVzcyk7CisgICAgICAgICAvLyBGSVhNRSBKUlMgZXBvY2ggb2s/CisgICAgICAgICBN
Q18ocHBfZGVzY3JpYmVfYWRkcikgKGVwLCBhZGRyZXNzKTsKICAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSAgMTogLyogZGVmaW5lZCAqLwogICAgICAgICAgcmVzID0gaXNfbWVtX2RlZmluZWQg
KCBhZGRyZXNzLCBzekIsICZiYWRfYWRkciwgJm90YWcgKTsKQEAgLTY3NjUsMTQgKzY3NjgsMTYg
QEAKICAgICAgICAgICAgICAgICAodm9pZCAqKWFkZHJlc3MsIHN6QiwgKHZvaWQgKikgYmFkX2Fk
ZHIsIHNyYyk7CiAgICAgICAgICAgICBlY3UgPSBvdGFnICYgfjM7CiAgICAgICAgICAgICBpZiAo
VkdfKGlzX3BsYXVzaWJsZV9FQ1UpKGVjdSkpIHsKLSAgICAgICAgICAgICAgIG9yaWdpbl9lYyA9
IFZHXyhnZXRfRXhlQ29udGV4dF9mcm9tX0VDVSkoIGVjdSApOwotICAgICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKCBvcmlnaW5fZWMgKTsKKyAgICAgICAgICAgICAgIG9yaWdpbl9lY2Ug
PSBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVkdfKGdldF9FeGVDb250ZXh0X2Zyb21fRUNVKSggZWN1ICkpOworICAgICAgICAg
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIG9yaWdpbl9lY2UgKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFZHXyhwcmludGYp
ICgiQWRkcmVzcyAlcCBsZW4gJWx1IGRlZmluZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQgKilhZGRyZXNzLCBzekIpOwotICAgICAgICAgTUNfKHBwX2Rlc2NyaWJlX2FkZHIp
IChhZGRyZXNzKTsKKyAgICAgICAgIC8vIEZJWE1FIEpSUyBlcG9jaCBvaz8KKyAgICAgICAgIE1D
XyhwcF9kZXNjcmliZV9hZGRyKSAoZXAsIGFkZHJlc3MpOwogICAgICAgICAgYnJlYWs7CiAgICAg
ICBkZWZhdWx0OiB0bF9hc3NlcnQoMCk7CiAgICAgICB9CkBAIC03MDQ5LDcgKzcwNTQsOSBAQAog
ICAgICAgICAgICAgY2dic1tpXS5zdGFydCA9IGFyZ1sxXTsKICAgICAgICAgICAgIGNnYnNbaV0u
c2l6ZSAgPSBhcmdbMl07CiAgICAgICAgICAgICBjZ2JzW2ldLmRlc2MgID0gVkdfKHN0cmR1cCko
Im1jLm1oY3IuMSIsIChIQ2hhciAqKWFyZ1szXSk7Ci0gICAgICAgICAgICBjZ2JzW2ldLndoZXJl
ID0gVkdfKHJlY29yZF9FeGVDb250ZXh0KSAoIHRpZCwgMC8qZmlyc3RfaXBfZGVsdGEqLyApOwor
ICAgICAgICAgICAgY2dic1tpXS53aGVyZSA9IFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2No
KSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWR18ocmVjb3JkX0V4ZUNvbnRleHQp
ICggdGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLypmaXJzdF9pcF9kZWx0YSovICkpOwogICAgICAgICAgICAgKnJldCA9IGk7CiAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICpyZXQgPSAtMTsKQEAgLTc5MTcsNyArNzkyNCw3
IEBACiAgICB9CiAKICAgIE1DXyhjaHVua19wb29sYWxsb2MpID0gVkdfKG5ld1BBKQotICAgICAg
KHNpemVvZihNQ19DaHVuaykgKyBNQ18obl93aGVyZV9wb2ludGVycykoKSAqIHNpemVvZihFeGVD
b250ZXh0KiksCisgICAgICAoc2l6ZW9mKE1DX0NodW5rKSArIE1DXyhuX3doZXJlX3BvaW50ZXJz
KSgpICogc2l6ZW9mKEV4ZUNvbnRleHRBbmRFcG9jaCksCiAgICAgICAgMTAwMCwKICAgICAgICBW
R18obWFsbG9jKSwKICAgICAgICAibWMuY01DLjEgKE1DX0NodW5rIHBvb2xzKSIsCkluZGV4OiBt
ZW1jaGVjay9tY19tYWxsb2Nfd3JhcHBlcnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay9tY19t
YWxsb2Nfd3JhcHBlcnMuYwkocmV2aXNpb24gMTY0NjUpCisrKyBtZW1jaGVjay9tY19tYWxsb2Nf
d3JhcHBlcnMuYwkod29ya2luZyBjb3B5KQpAQCAtMTk5LDggKzE5OSw4IEBACiAgICBtYy0+c3pC
ICAgICAgID0gc3pCOwogICAgbWMtPmFsbG9ja2luZCA9IGtpbmQ7CiAgICBzd2l0Y2ggKCBNQ18o
bl93aGVyZV9wb2ludGVycykoKSApIHsKLSAgICAgIGNhc2UgMjogbWMtPndoZXJlWzFdID0gMDsg
Ly8gZmFsbGJhY2sgdG8gMQotICAgICAgY2FzZSAxOiBtYy0+d2hlcmVbMF0gPSAwOyAvLyBmYWxs
YmFjayB0byAwCisgICAgICBjYXNlIDI6IG1jLT53aGVyZVsxXSA9IFZHXyhpbnZhbGlkX0V4ZUNv
bnRleHRBbmRFcG9jaCkoKTsgLy8gZmFsbCB0aHJ1CisgICAgICBjYXNlIDE6IG1jLT53aGVyZVsw
XSA9IFZHXyhpbnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsgLy8gZmFsbCB0aHJ1CiAgICAg
ICBjYXNlIDA6IGJyZWFrOwogICAgICAgZGVmYXVsdDogdGxfYXNzZXJ0KDApOwogICAgfQpAQCAt
MjY4LDMwICsyNjgsMzQgQEAKICAgIHJldHVybiBpbl9ibG9ja19saXN0ICggTUNfKG1hbGxvY19s
aXN0KSwgbWMgKTsKIH0KIAotRXhlQ29udGV4dCogTUNfKGFsbG9jYXRlZF9hdCkgKE1DX0NodW5r
KiBtYykKK0V4ZUNvbnRleHRBbmRFcG9jaCBNQ18oYWxsb2NhdGVkX2F0KSAoTUNfQ2h1bmsqIG1j
KQogewogICAgc3dpdGNoIChNQ18oY2xvX2tlZXBfc3RhY2t0cmFjZXMpKSB7Ci0gICAgICBjYXNl
IEtTX25vbmU6ICAgICAgICAgICAgcmV0dXJuIFZHXyhudWxsX0V4ZUNvbnRleHQpICgpOworICAg
ICAgY2FzZSBLU19ub25lOiAgICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0QW5k
RXBvY2gpICgpOwogICAgICAgY2FzZSBLU19hbGxvYzogICAgICAgICAgIHJldHVybiBtYy0+d2hl
cmVbMF07Ci0gICAgICBjYXNlIEtTX2ZyZWU6ICAgICAgICAgICAgcmV0dXJuIFZHXyhudWxsX0V4
ZUNvbnRleHQpICgpOwotICAgICAgY2FzZSBLU19hbGxvY190aGVuX2ZyZWU6IHJldHVybiAobGl2
ZV9ibG9jayhtYykgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWMt
PndoZXJlWzBdIDogVkdfKG51bGxfRXhlQ29udGV4dCkgKCkpOworICAgICAgY2FzZSBLU19mcmVl
OiAgICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpICgpOworICAg
ICAgY2FzZSBLU19hbGxvY190aGVuX2ZyZWU6IHJldHVybiBsaXZlX2Jsb2NrKG1jKSAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYy0+d2hlcmVbMF0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWR18obnVsbF9FeGVDb250ZXh0
QW5kRXBvY2gpICgpOwogICAgICAgY2FzZSBLU19hbGxvY19hbmRfZnJlZTogIHJldHVybiBtYy0+
d2hlcmVbMF07CiAgICAgICBkZWZhdWx0OiB0bF9hc3NlcnQgKDApOwogICAgfQogfQogCi1FeGVD
b250ZXh0KiBNQ18oZnJlZWRfYXQpIChNQ19DaHVuayogbWMpCitFeGVDb250ZXh0QW5kRXBvY2gg
TUNfKGZyZWVkX2F0KSAoTUNfQ2h1bmsqIG1jKQogewogICAgc3dpdGNoIChNQ18oY2xvX2tlZXBf
c3RhY2t0cmFjZXMpKSB7Ci0gICAgICBjYXNlIEtTX25vbmU6ICAgICAgICAgICAgcmV0dXJuIFZH
XyhudWxsX0V4ZUNvbnRleHQpICgpOwotICAgICAgY2FzZSBLU19hbGxvYzogICAgICAgICAgIHJl
dHVybiBWR18obnVsbF9FeGVDb250ZXh0KSAoKTsKLSAgICAgIGNhc2UgS1NfZnJlZTogICAgICAg
ICAgICByZXR1cm4gKG1jLT53aGVyZVswXSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYy0+d2hlcmVbMF0gOiBWR18obnVsbF9FeGVDb250ZXh0KSAoKSk7Ci0gICAg
ICBjYXNlIEtTX2FsbG9jX3RoZW5fZnJlZTogcmV0dXJuIChsaXZlX2Jsb2NrKG1jKSA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWR18obnVsbF9FeGVDb250ZXh0KSAo
KSA6IG1jLT53aGVyZVswXSk7Ci0gICAgICBjYXNlIEtTX2FsbG9jX2FuZF9mcmVlOiAgcmV0dXJu
IChtYy0+d2hlcmVbMV0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWMtPndoZXJlWzFdIDogVkdfKG51bGxfRXhlQ29udGV4dCkgKCkpOworICAgICAgY2FzZSBLU19u
b25lOiAgICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpICgpOwor
ICAgICAgY2FzZSBLU19hbGxvYzogICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0
QW5kRXBvY2gpICgpOworICAgICAgY2FzZSBLU19mcmVlOiAgICAgICAgICAgIHJldHVybiBtYy0+
d2hlcmVbMF0uZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBt
Yy0+d2hlcmVbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBW
R18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpICgpOworICAgICAgY2FzZSBLU19hbGxvY190aGVu
X2ZyZWU6IHJldHVybiBsaXZlX2Jsb2NrKG1jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYy0+d2hlcmVbMF07CisgICAgICBj
YXNlIEtTX2FsbG9jX2FuZF9mcmVlOiAgcmV0dXJuIG1jLT53aGVyZVsxXS5lYworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1jLT53aGVyZVsxXQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRF
cG9jaCkgKCk7CiAgICAgICBkZWZhdWx0OiB0bF9hc3NlcnQgKDApOwogICAgfQogfQpAQCAtMzA2
LDE1ICszMTAsMTYgQEAKICAgICAgIGNhc2UgS1NfYWxsb2NfYW5kX2ZyZWU6ICBicmVhazsKICAg
ICAgIGRlZmF1bHQ6IHRsX2Fzc2VydCAoMCk7CiAgICB9Ci0gICBtYy0+d2hlcmVbMF0gPSBWR18o
cmVjb3JkX0V4ZUNvbnRleHQpICggdGlkLCAwLypmaXJzdF9pcF9kZWx0YSovICk7CisgICBtYy0+
d2hlcmVbMF0gPSBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAg
ICAgICAgICBWR18ocmVjb3JkX0V4ZUNvbnRleHQpICggdGlkLCAwLypmaXJzdF9pcF9kZWx0YSov
ICkpOwogICAgaWYgKFVOTElLRUxZKFZHXyhjbG9feHRyZWVfbWVtb3J5KSA9PSBWZ19YVE1lbW9y
eV9GdWxsKSkKLSAgICAgICBWR18oWFRNZW1vcnlfRnVsbF9hbGxvYykobWMtPnN6QiwgbWMtPndo
ZXJlWzBdKTsKKyAgICAgICBWR18oWFRNZW1vcnlfRnVsbF9hbGxvYykobWMtPnN6QiwgbWMtPndo
ZXJlWzBdLmVjKTsKIH0KIAogdm9pZCAgTUNfKHNldF9mcmVlZF9hdCkgKFRocmVhZElkIHRpZCwg
TUNfQ2h1bmsqIG1jKQogewogICAgSW50IHBvczsKLSAgIEV4ZUNvbnRleHQqIGVjX2ZyZWU7Cisg
ICBFeGVDb250ZXh0QW5kRXBvY2ggZWNfZnJlZTsKIAogICAgc3dpdGNoIChNQ18oY2xvX2tlZXBf
c3RhY2t0cmFjZXMpKSB7CiAgICAgICBjYXNlIEtTX25vbmU6ICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMzMzLDkgKzMzOCwxMCBAQAogICAgICAgTm90ZTogd2UgYXJlIGd1YXJhbnRlZWQgdG8gZmlu
ZCB0aGUgZWNfYWxsb2MgaW4gbWMtPndoZXJlWzBdLCBhcwogICAgICAgbWNfcG9zdF9jbG9faW5p
dCB2ZXJpZmllcyB0aGUgY29uc2lzdGVuY3kgb2YgLS14dHJlZS1tZW1vcnkgYW5kCiAgICAgICAt
LWtlZXAtc3RhY2t0cmFjZXMuICovCi0gICBlY19mcmVlID0gVkdfKHJlY29yZF9FeGVDb250ZXh0
KSAoIHRpZCwgMC8qZmlyc3RfaXBfZGVsdGEqLyApOworICAgZWNfZnJlZSA9IFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKSgKKyAgICAgICAgICAgICAgICBWR18ocmVjb3JkX0V4ZUNvbnRl
eHQpICggdGlkLCAwLypmaXJzdF9pcF9kZWx0YSovICkpOwogICAgaWYgKFVOTElLRUxZKFZHXyhj
bG9feHRyZWVfbWVtb3J5KSA9PSBWZ19YVE1lbW9yeV9GdWxsKSkKLSAgICAgICBWR18oWFRNZW1v
cnlfRnVsbF9mcmVlKShtYy0+c3pCLCBtYy0+d2hlcmVbMF0sIGVjX2ZyZWUpOworICAgICAgIFZH
XyhYVE1lbW9yeV9GdWxsX2ZyZWUpKG1jLT5zekIsIG1jLT53aGVyZVswXS5lYywgZWNfZnJlZS5l
Yyk7CiAgICBpZiAoTElLRUxZKHBvcyA+PSAwKSkKICAgICAgIG1jLT53aGVyZVtwb3NdID0gZWNf
ZnJlZTsKIH0KQEAgLTM5MSw3ICszOTcsNyBAQAogICAgaWYgKGlzX3plcm9lZCkKICAgICAgIE1D
XyhtYWtlX21lbV9kZWZpbmVkKSggcCwgc3pCICk7CiAgICBlbHNlIHsKLSAgICAgIFVJbnQgZWN1
ID0gVkdfKGdldF9FQ1VfZnJvbV9FeGVDb250ZXh0KShNQ18oYWxsb2NhdGVkX2F0KShtYykpOwor
ICAgICAgVUludCBlY3UgPSBWR18oZ2V0X0VDVV9mcm9tX0V4ZUNvbnRleHQpKE1DXyhhbGxvY2F0
ZWRfYXQpKG1jKS5lYyk7CiAgICAgICB0bF9hc3NlcnQoVkdfKGlzX3BsYXVzaWJsZV9FQ1UpKGVj
dSkpOwogICAgICAgTUNfKG1ha2VfbWVtX3VuZGVmaW5lZF93X290YWcpKCBwLCBzekIsIGVjdSB8
IE1DX09LSU5EX0hFQVAgKTsKICAgIH0KQEAgLTYwNSw3ICs2MTEsNyBAQAogICAgICAgICAgLy8g
SWYgdGhlIGJsb2NrIGhhcyBncm93biwgd2UgbWFyayB0aGUgZ3Jvd24gYXJlYSBhcyB1bmRlZmlu
ZWQuCiAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoYXQgYWZ0ZXIgVkdfKEhUX2FkZF9ub2Rl
KSB0byBlbnN1cmUgdGhlIGVjdQogICAgICAgICAgLy8gZXhlY29udGV4dCBpcyBmb3IgYSBmdWxs
eSBhbGxvY2F0ZWQgYmxvY2suCi0gICAgICAgICBlY3UgPSBWR18oZ2V0X0VDVV9mcm9tX0V4ZUNv
bnRleHQpKE1DXyhhbGxvY2F0ZWRfYXQpKG5ld19tYykpOworICAgICAgICAgZWN1ID0gVkdfKGdl
dF9FQ1VfZnJvbV9FeGVDb250ZXh0KShNQ18oYWxsb2NhdGVkX2F0KShuZXdfbWMpLmVjKTsKICAg
ICAgICAgIHRsX2Fzc2VydChWR18oaXNfcGxhdXNpYmxlX0VDVSkoZWN1KSk7CiAgICAgICAgICBN
Q18obWFrZV9tZW1fdW5kZWZpbmVkX3dfb3RhZykoIGFfbmV3K29sZF9zekIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zekItb2xkX3N6QiwKQEAgLTY3Myw3
ICs2NzksNyBAQAogICAgICAgcmV0dXJuOwogCiAgICBpZiAoVU5MSUtFTFkoVkdfKGNsb194dHJl
ZV9tZW1vcnkpID09IFZnX1hUTWVtb3J5X0Z1bGwpKQotICAgICAgIFZHXyhYVE1lbW9yeV9GdWxs
X3Jlc2l6ZV9pbl9wbGFjZSkob2xkU2l6ZUIsICBuZXdTaXplQiwgbWMtPndoZXJlWzBdKTsKKyAg
ICAgICBWR18oWFRNZW1vcnlfRnVsbF9yZXNpemVfaW5fcGxhY2UpKG9sZFNpemVCLCBuZXdTaXpl
QiwgbWMtPndoZXJlWzBdLmVjKTsKIAogICAgbWMtPnN6QiA9IG5ld1NpemVCOwogICAgaWYgKG5l
d1NpemVCIDwgb2xkU2l6ZUIpIHsKQEAgLTg4Nyw3ICs4OTMsNyBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNodW5rc1tpXS0+ZGF0YSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1
bmtzW2ldLT5kYXRhICsgY2h1bmtzW2ldLT5zekIpOwogCi0gICAgICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoTUNfKGFsbG9jYXRlZF9hdCkoY2h1bmtzW2ldKSk7CisgICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dEFuZEVwb2NoKShNQ18oYWxsb2NhdGVkX2F0KShjaHVua3NbaV0pKTsKICAg
ICAgICAgIH0KICAgIH0KICAgIFZHXyhmcmVlKShjaHVua3MpOwpAQCAtMTE0Nyw3ICsxMTUzLDcg
QEAKICAgIGlmIChtYykgewogICAgICAgeHRhLT5uYnl0ZXMgPSBtYy0+c3pCOwogICAgICAgeHRh
LT5uYmxvY2tzID0gMTsKLSAgICAgICplY19hbGxvYyA9IE1DXyhhbGxvY2F0ZWRfYXQpKG1jKTsK
KyAgICAgICplY19hbGxvYyA9IE1DXyhhbGxvY2F0ZWRfYXQpKG1jKS5lYzsKICAgIH0gZWxzZQog
ICAgICAgeHRhLT5uYmxvY2tzID0gMDsKIH0KSW5kZXg6IG5vbmUvdGVzdHMvY21kbGluZTEuc3Rk
b3V0LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBub25lL3Rlc3RzL2NtZGxpbmUxLnN0ZG91dC5leHAJKHJl
dmlzaW9uIDE2NDY1KQorKysgbm9uZS90ZXN0cy9jbWRsaW5lMS5zdGRvdXQuZXhwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0MiwxMCBAQAogICAgIC0tZXJyb3ItZXhpdGNvZGU9PG51bWJlcj4g
ZXhpdCBjb2RlIHRvIHJldHVybiBpZiBlcnJvcnMgZm91bmQgWzA9ZGlzYWJsZV0KICAgICAtLWVy
cm9yLW1hcmtlcnM9PGJlZ2luPiw8ZW5kPiBhZGQgbGluZXMgd2l0aCBiZWdpbi9lbmQgbWFya2Vy
cyBiZWZvcmUvYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZXJyb3Ig
b3V0cHV0IGluIHBsYWluIHRleHQgbW9kZSBbbm9uZV0KKyAgICAtLWtlZXAtZGVidWdpbmZvPW5v
fHllcyAgIEtlZXAgc3ltYm9scyBldGMgZm9yIHVubG9hZGVkIGNvZGUgW25vXQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkg
bGVha3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5l
IGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGxjbG9zZSdkIChvciBzaW1pbGFyKQogICAgIC0tc2hvdy1iZWxvdy1tYWluPW5vfHllcyAg
Y29udGludWUgc3RhY2sgdHJhY2VzIGJlbG93IG1haW4oKSBbbm9dCiAgICAgLS1kZWZhdWx0LXN1
cHByZXNzaW9ucz15ZXN8bm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgZGVm
YXVsdCBzdXBwcmVzc2lvbnMgW3llc10KSW5kZXg6IG5vbmUvdGVzdHMvY21kbGluZTIuc3Rkb3V0
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5leHAJKHJldmlz
aW9uIDE2NDY1KQorKysgbm9uZS90ZXN0cy9jbWRsaW5lMi5zdGRvdXQuZXhwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0MiwxMCBAQAogICAgIC0tZXJyb3ItZXhpdGNvZGU9PG51bWJlcj4gZXhp
dCBjb2RlIHRvIHJldHVybiBpZiBlcnJvcnMgZm91bmQgWzA9ZGlzYWJsZV0KICAgICAtLWVycm9y
LW1hcmtlcnM9PGJlZ2luPiw8ZW5kPiBhZGQgbGluZXMgd2l0aCBiZWdpbi9lbmQgbWFya2VycyBi
ZWZvcmUvYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZXJyb3Igb3V0
cHV0IGluIHBsYWluIHRleHQgbW9kZSBbbm9uZV0KKyAgICAtLWtlZXAtZGVidWdpbmZvPW5vfHll
cyAgIEtlZXAgc3ltYm9scyBldGMgZm9yIHVubG9hZGVkIGNvZGUgW25vXQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVh
a3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZS9saW5lIGlu
Zm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGxjbG9zZSdkIChvciBzaW1pbGFyKQogICAgIC0tc2hvdy1iZWxvdy1tYWluPW5vfHllcyAgY29u
dGludWUgc3RhY2sgdHJhY2VzIGJlbG93IG1haW4oKSBbbm9dCiAgICAgLS1kZWZhdWx0LXN1cHBy
ZXNzaW9ucz15ZXN8bm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgZGVmYXVs
dCBzdXBwcmVzc2lvbnMgW3llc10K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107003</attachid>
            <date>2017-08-01 07:39:16 +0000</date>
            <delta_ts>2017-08-01 07:39:16 +0000</delta_ts>
            <desc>epochs-5.diff</desc>
            <filename>epochs-5.diff</filename>
            <type>text/plain</type>
            <size>194348</size>
            <attacher name="Julian Seward">jseward</attacher>
            
              <data encoding="base64">SW5kZXg6IE1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1ha2VmaWxlLmFtCShyZXZpc2lvbiAx
NjQ2NSkKKysrIE1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw2ICsxNiwxMCBAQAog
CQlleHAtYmJ2IFwKIAkJZXhwLWRoYXQKIAorI1RPT0xTID0gbm9uZSBtZW1jaGVjaworI0VYUF9U
T09MUyA9CisKKwogIyBQdXQgZG9jcyBsYXN0IGJlY2F1c2UgYnVpbGRpbmcgdGhlIEhUTUwgaXMg
c2xvdyBhbmQgd2Ugd2FudCB0byBnZXQKICMgZXZlcnl0aGluZyBlbHNlIHdvcmtpbmcgYmVmb3Jl
IHdlIHRyeSBpdC4KIFNVQkRJUlMgPSBcCkluZGV4OiBjYWNoZWdyaW5kL2NnX21haW4uYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjYWNoZWdyaW5kL2NnX21haW4uYwkocmV2aXNpb24gMTY0NjUpCisrKyBjYWNo
ZWdyaW5kL2NnX21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtMjEwLDEyICsyMTAsMTQgQEAKIHN0
YXRpYyB2b2lkIGdldF9kZWJ1Z19pbmZvKEFkZHIgaW5zdHJfYWRkciwgY29uc3QgSENoYXIgKipk
aXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIQ2hhciAqKmZpbGUsIGNvbnN0
IEhDaGFyICoqZm4sIFVJbnQqIGxpbmUpCiB7CisgICBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRf
RGlFcG9jaCkoKTsKICAgIEJvb2wgZm91bmRfZmlsZV9saW5lID0gVkdfKGdldF9maWxlbmFtZV9s
aW5lbnVtKSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc3RyX2FkZHIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlLCBkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgIEJvb2wgZm91bmRfZm4gICAgICAgID0gVkdfKGdldF9m
bm5hbWUpKGluc3RyX2FkZHIsIGZuKTsKKyAgIEJvb2wgZm91bmRfZm4gICAgICAgID0gVkdfKGdl
dF9mbm5hbWUpKGVwLCBpbnN0cl9hZGRyLCBmbik7CiAKICAgIGlmICghZm91bmRfZmlsZV9saW5l
KSB7CiAgICAgICAqZmlsZSA9ICI/Pz8iOwpJbmRleDogY2FsbGdyaW5kL2JiLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY2FsbGdyaW5kL2JiLmMJKHJldmlzaW9uIDE2NDY1KQorKysgY2FsbGdyaW5kL2JiLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksOCBAQAogICBEZWJ1Z0luZm8qIGRpOwogICBQ
dHJkaWZmVCBvZmZzZXQ7CiAKLSAgZGkgPSBWR18oZmluZF9EZWJ1Z0luZm8pKGFkZHIpOworICBE
aUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKyAgZGkgPSBWR18oZmluZF9EZWJ1
Z0luZm8pKGVwLCBhZGRyKTsKICAgb2JqID0gQ0xHXyhnZXRfb2JqX25vZGUpKCBkaSApOwogCiAg
IC8qIFVwZGF0ZSBzeW1ib2wgb2Zmc2V0IGluIG9iamVjdCBpZiByZW1hcHBlZCAqLwpJbmRleDog
Y2FsbGdyaW5kL2R1bXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjYWxsZ3JpbmQvZHVtcC5jCShyZXZpc2lv
biAxNjQ2NSkKKysrIGNhbGxncmluZC9kdW1wLmMJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw3ICsz
NzMsOCBAQAogCWZvdW5kX2ZpbGVfbGluZSA9IGRlYnVnX2NhY2hlX2luZm9bY2FjaGVwb3NdOwog
ICAgIH0KICAgICBlbHNlIHsKLQlmb3VuZF9maWxlX2xpbmUgPSBWR18oZ2V0X2ZpbGVuYW1lX2xp
bmVudW0pKGFkZHIsCisgICAgICAgIERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgp
OworCWZvdW5kX2ZpbGVfbGluZSA9IFZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSkoZXAsIGFkZHIs
CiAJCQkJCQkgICAgJmZpbGUsCiAJCQkJCQkgICAgJmRpciwKIAkJCQkJCSAgICAmKHAtPmxpbmUp
KTsKSW5kZXg6IGNhbGxncmluZC9mbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNhbGxncmluZC9mbi5jCShy
ZXZpc2lvbiAxNjQ2NSkKKysrIGNhbGxncmluZC9mbi5jCSh3b3JraW5nIGNvcHkpCkBAIC00MzQs
MTcgKzQzNCwxOCBAQAogICAKICAgQ0xHX0RFQlVHKDYsICIgICsgZ2V0X2RlYnVnX2luZm8oJSNs
eClcbiIsIGluc3RyX2FkZHIpOwogCisgIERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2No
KSgpOwogICBpZiAocERlYnVnSW5mbykgewotICAgICAgKnBEZWJ1Z0luZm8gPSBWR18oZmluZF9E
ZWJ1Z0luZm8pKGluc3RyX2FkZHIpOworICAgICAgKnBEZWJ1Z0luZm8gPSBWR18oZmluZF9EZWJ1
Z0luZm8pKGVwLCBpbnN0cl9hZGRyKTsKIAogICAgICAgLy8gZm9yIGdlbmVyYXRlZCBjb2RlIGlu
IGFub255bW91cyBzcGFjZSwgcFNlZ0luZm8gaXMgMAogICAgfQogCi0gICBmb3VuZF9maWxlX2xp
bmUgPSBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pKGluc3RyX2FkZHIsCisgICBmb3VuZF9maWxl
X2xpbmUgPSBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pKGVwLCBpbnN0cl9hZGRyLAogCQkJCQkg
ICAgICAgZmlsZSwKIAkJCQkJICAgICAgIGRpciwKIAkJCQkJICAgICAgICZsaW5lKTsKLSAgIGZv
dW5kX2ZuID0gVkdfKGdldF9mbm5hbWUpKGluc3RyX2FkZHIsIGZuX25hbWUpOworICAgZm91bmRf
Zm4gPSBWR18oZ2V0X2ZubmFtZSkoZXAsIGluc3RyX2FkZHIsIGZuX25hbWUpOwogCiAgICBpZiAo
IWZvdW5kX2ZpbGVfbGluZSAmJiAhZm91bmRfZm4pIHsKICAgICAgQ0xHXyhzdGF0KS5ub19kZWJ1
Z19CQnMrKzsKQEAgLTUwMyw2ICs1MDQsNyBAQAogICAgIENMR18oZ2V0X2RlYnVnX2luZm8pKGJi
X2FkZHIoYmIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICZkaXJuYW1lLCAmZmlsZW5hbWUs
ICZmbm5hbWUsICZsaW5lX251bSwgJmRpKTsKIAorICAgIERpRXBvY2ggZXAgPSBWR18oY3VycmVu
dF9EaUVwb2NoKSgpOwogICAgIGlmICgwID09IFZHXyhzdHJjbXApKGZubmFtZSwgIj8/PyIpKSB7
CiAJaW50IHA7CiAgICAgICAgIHN0YXRpYyBIQ2hhciBidWZbMzJdOyAgLy8gZm9yIHN1cmUgbGFy
Z2UgZW5vdWdoCkBAIC01MjEsNyArNTIzLDcgQEAKICAgICAgICAgZm5uYW1lID0gYnVmOwogICAg
IH0KICAgICBlbHNlIHsKLSAgICAgIGlmIChWR18oZ2V0X2ZubmFtZV9pZl9lbnRyeSkoYmJfYWRk
cihiYiksICZmbm5hbWUpKQorICAgICAgaWYgKFZHXyhnZXRfZm5uYW1lX2lmX2VudHJ5KShlcCwg
YmJfYWRkcihiYiksICZmbm5hbWUpKQogCWJiLT5pc19lbnRyeSA9IDE7CiAgICAgfQogCkluZGV4
OiBjb3JlZ3JpbmQvbV9hZGRyaW5mby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2FkZHJp
bmZvLmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fYWRkcmluZm8uYwkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQAogICAgcmV0dXJuIFZHX0lOVkFMSURfVEhSRUFESUQ7
CiB9CiAKLXZvaWQgVkdfKGRlc2NyaWJlX2FkZHIpICggQWRkciBhLCAvKk9VVCovQWRkckluZm8q
IGFpICkKK3ZvaWQgVkdfKGRlc2NyaWJlX2FkZHIpICggRGlFcG9jaCBlcCwgQWRkciBhLCAvKk9V
VCovQWRkckluZm8qIGFpICkKIHsKICAgIFZnU2VjdEtpbmQgc2VjdDsKIApAQCAtOTksNyArOTks
NyBAQAogICAgICAgICAgICAgICAgICAgICBWR18oZnJlZSksIHNpemVvZihIQ2hhcikgKTsKIAog
ICAgKHZvaWQpIFZHXyhnZXRfZGF0YV9kZXNjcmlwdGlvbikoIGFpLT5BZGRyLlZhcmlhYmxlLmRl
c2NyMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+QWRkci5WYXJp
YWJsZS5kZXNjcjIsIGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
aS0+QWRkci5WYXJpYWJsZS5kZXNjcjIsIGVwLCBhICk7CiAgICAvKiBJZiB0aGVyZSdzIG5vdGhp
bmcgaW4gZGVzY3IxLzIsIGZyZWUgdGhlbS4gIFdoeSBpcyBpdCBzYWZlIHRvCiAgICAgICBWR18o
aW5kZXhYQSkgYXQgemVybyBoZXJlPyAgQmVjYXVzZSBWR18oZ2V0X2RhdGFfZGVzY3JpcHRpb24p
CiAgICAgICBndWFyYW50ZWVzIHRvIHplcm8gdGVybWluYXRlIGRlc2NyMS8yIHJlZ2FyZGxlc3Mg
b2YgdGhlIG91dGNvbWUKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgdGhlcmUuIC0tICovCiAg
ICBjb25zdCBIQ2hhciAqbmFtZTsKICAgIGlmIChWR18oZ2V0X2RhdGFzeW1fYW5kX29mZnNldCko
Ci0gICAgICAgICAgICAgYSwgJm5hbWUsCisgICAgICAgICAgICAgZXAsIGEsICZuYW1lLAogICAg
ICAgICAgICAgICZhaS0+QWRkci5EYXRhU3ltLm9mZnNldCApKSB7CiAgICAgICBhaS0+QWRkci5E
YXRhU3ltLm5hbWUgPSBWR18oc3RyZHVwKSgibWMuZGEuZHNuYW1lIiwgbmFtZSk7CiAgICAgICBh
aS0+dGFnID0gQWRkcl9EYXRhU3ltOwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAgICAgICAgICAgICBh
aS0+dGFnICAgICAgICAgICAgPSBBZGRyX1N0YWNrOwogICAgICAgICAgICAgVkdfKGluaXRUaHJl
YWRJbmZvKSgmYWktPkFkZHIuU3RhY2sudGluZm8pOwogICAgICAgICAgICAgYWktPkFkZHIuU3Rh
Y2sudGluZm8udGlkID0gdGlkOworICAgICAgICAgICAgYWktPkFkZHIuU3RhY2suZXBvY2ggPSBl
cDsKICAgICAgICAgICAgIGFpLT5BZGRyLlN0YWNrLklQID0gMDsKICAgICAgICAgICAgIGFpLT5B
ZGRyLlN0YWNrLmZyYW1lTm8gPSAtMTsKICAgICAgICAgICAgIGFpLT5BZGRyLlN0YWNrLnN0YWNr
UG9zID0gU3RhY2tQb3Nfc3RhY2tlZDsKQEAgLTE5Niw5ICsxOTcsOSBAQAogICAgICAgICAgYWkt
PkFkZHIuQmxvY2suYmxvY2tfZGVzYyA9IGFhaS5uYW1lOwogICAgICAgICAgYWktPkFkZHIuQmxv
Y2suYmxvY2tfc3pCID0gYWFpLmJsb2NrX3N6QjsKICAgICAgICAgIGFpLT5BZGRyLkJsb2NrLnJ3
b2Zmc2V0ID0gYWFpLnJ3b2Zmc2V0OwotICAgICAgICAgYWktPkFkZHIuQmxvY2suYWxsb2NhdGVk
X2F0ID0gVkdfKG51bGxfRXhlQ29udGV4dCkoKTsKKyAgICAgICAgIGFpLT5BZGRyLkJsb2NrLmFs
bG9jYXRlZF9hdCA9IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsKICAgICAgICAgIFZH
Xyhpbml0VGhyZWFkSW5mbykgKCZhaS0+QWRkci5CbG9jay5hbGxvY190aW5mbyk7Ci0gICAgICAg
ICBhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9IFZHXyhudWxsX0V4ZUNvbnRleHQpKCk7CisgICAg
ICAgICBhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9j
aCkoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgIH0KQEAgLTI0OCw2ICsyNDksNyBA
QAogICAgICAgICAgYWktPnRhZyAgPSBBZGRyX1N0YWNrOwogICAgICAgICAgVkdfKGluaXRUaHJl
YWRJbmZvKSgmYWktPkFkZHIuU3RhY2sudGluZm8pOwogICAgICAgICAgYWktPkFkZHIuU3RhY2su
dGluZm8udGlkID0gdGlkOworICAgICAgICAgYWktPkFkZHIuU3RhY2suZXBvY2ggPSBlcDsKICAg
ICAgICAgIGFpLT5BZGRyLlN0YWNrLklQID0gMDsKICAgICAgICAgIGFpLT5BZGRyLlN0YWNrLmZy
YW1lTm8gPSAtMTsKICAgICAgICAgIHZnX2Fzc2VydCAoc3RhY2tQb3MgIT0gU3RhY2tQb3Nfc3Rh
Y2tlZCk7CkBAIC00NDcsMjAgKzQ0OSwyNCBAQAogICAgICAgICAgICAgQm9vbCBoYXNsaW5lbnVt
OwogICAgICAgICAgICAgUHRyZGlmZlQgb2Zmc2V0OwogCi0gICAgICAgICAgICBpZiAoVkdfKGdl
dF9pbnN0X29mZnNldF9pbl9mdW5jdGlvbikoIGFpLT5BZGRyLlN0YWNrLklQLAorICAgICAgICAg
ICAgaWYgKFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBhaS0+QWRkci5TdGFjay5l
cG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWktPkFkZHIuU3RhY2suSVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZvZmZzZXQpKQotICAgICAgICAgICAgICAgaGFzbGluZW51bSA9IFZHXyhn
ZXRfbGluZW51bSkgKGFpLT5BZGRyLlN0YWNrLklQIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAg
aGFzbGluZW51bSA9IFZHXyhnZXRfbGluZW51bSkgKGFpLT5BZGRyLlN0YWNrLmVwb2NoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5BZGRyLlN0YWNr
LklQIC0gb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZsaW5lbnVtKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGhhc2xpbmVu
dW0gPSBGYWxzZTsKIAotICAgICAgICAgICAgaGFzZmlsZSA9IFZHXyhnZXRfZmlsZW5hbWUpKGFp
LT5BZGRyLlN0YWNrLklQLCAmZmlsZSk7CisgICAgICAgICAgICBoYXNmaWxlID0gVkdfKGdldF9m
aWxlbmFtZSkoYWktPkFkZHIuU3RhY2suZXBvY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWktPkFkZHIuU3RhY2suSVAsICZmaWxlKTsKIAogICAgICAgICAgICAg
SENoYXIgc3RybGluZW51bVsxNl0gPSAiIjsgICAvLyBsYXJnZSBlbm91Z2gKICAgICAgICAgICAg
IGlmIChoYXNmaWxlICYmIGhhc2xpbmVudW0pCiAgICAgICAgICAgICAgICBWR18oc3ByaW50Ziko
c3RybGluZW51bSwgIiV1IiwgbGluZW51bSk7CiAKLSAgICAgICAgICAgIGhhc2ZuID0gVkdfKGdl
dF9mbm5hbWUpKGFpLT5BZGRyLlN0YWNrLklQLCAmZm4pOworICAgICAgICAgICAgaGFzZm4gPSBW
R18oZ2V0X2ZubmFtZSkoYWktPkFkZHIuU3RhY2suZXBvY2gsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhaS0+QWRkci5TdGFjay5JUCwgJmZuKTsKIAogICAgICAgICAgICAg
aWYgKGhhc2ZuIHx8IGhhc2ZpbGUpCiAgICAgICAgICAgICAgICBWR18oZW1pdCkoICIlc2luIGZy
YW1lICMlZCwgY3JlYXRlZCBieSAlcHMgKCVwczolcyklc1xuIiwKQEAgLTUzMywzMiArNTM5LDM1
IEBACiAgICAgICAgICAgICAgICB4cG9zdAogICAgICAgICAgICAgKTsKICAgICAgICAgIGlmIChh
aS0+QWRkci5CbG9jay5ibG9ja19raW5kPT1CbG9ja19NYWxsb2NkKSB7Ci0gICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dCkoYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0KTsKLSAgICAgICAg
ICAgIHZnX2Fzc2VydCAoYWktPkFkZHIuQmxvY2suZnJlZWRfYXQgPT0gVkdfKG51bGxfRXhlQ29u
dGV4dCkoKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRk
ci5CbG9jay5hbGxvY2F0ZWRfYXQpOworICAgICAgICAgICAgdmdfYXNzZXJ0KAorICAgICAgICAg
ICAgICAgVkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRkci5CbG9jay5mcmVl
ZF9hdCkpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoYWktPkFkZHIuQmxvY2suYmxv
Y2tfa2luZD09QmxvY2tfRnJlZWQpIHsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShh
aS0+QWRkci5CbG9jay5mcmVlZF9hdCk7Ci0gICAgICAgICAgICBpZiAoYWktPkFkZHIuQmxvY2su
YWxsb2NhdGVkX2F0ICE9IFZHXyhudWxsX0V4ZUNvbnRleHQpKCkpIHsKKyAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmZyZWVkX2F0KTsKKyAgICAg
ICAgICAgIGlmICghVkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRkci5CbG9j
ay5hbGxvY2F0ZWRfYXQpKSB7CiAgICAgICAgICAgICAgICBWR18oZW1pdCkoCiAgICAgICAgICAg
ICAgICAgICAiJXNCbG9jayB3YXMgYWxsb2MnZCBhdCVzXG4iLAogICAgICAgICAgICAgICAgICAg
eHByZSwKICAgICAgICAgICAgICAgICAgIHhwb3N0CiAgICAgICAgICAgICAgICApOwotICAgICAg
ICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCk7
CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShhaS0+QWRkci5CbG9j
ay5hbGxvY2F0ZWRfYXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxz
ZSBpZiAoYWktPkFkZHIuQmxvY2suYmxvY2tfa2luZD09QmxvY2tfTWVtcG9vbENodW5rCiAgICAg
ICAgICAgICAgICAgICB8fCBhaS0+QWRkci5CbG9jay5ibG9ja19raW5kPT1CbG9ja19Vc2VyRykg
ewogICAgICAgICAgICAgLy8gY2xpZW50LWRlZmluZWQKLSAgICAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0KShhaS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQpOwotICAgICAgICAgICAgdmdfYXNz
ZXJ0IChhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9PSBWR18obnVsbF9FeGVDb250ZXh0KSgpKTsK
KyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKGFpLT5BZGRyLkJsb2NrLmFs
bG9jYXRlZF9hdCk7CisgICAgICAgICAgICB2Z19hc3NlcnQoVkdfKGlzX251bGxfRXhlQ29udGV4
dEFuZEVwb2NoKShhaS0+QWRkci5CbG9jay5mcmVlZF9hdCkpOwogICAgICAgICAgICAgLyogTmI6
IGNhbm5vdCBoYXZlIGEgZnJlZWRfYXQsIGFzIGEgZnJlZWQgY2xpZW50LWRlZmluZWQgYmxvY2sK
ICAgICAgICAgICAgICAgIGhhcyBhIEJsb2NrX0ZyZWVkIGJsb2NrX2tpbmQuICovCiAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gQ2xpZW50IG9yIFZhbGdyaW5kIGFyZW5hLiBBdCBs
ZWFzdCBjdXJyZW50bHksIHdlIG5ldmVyCiAgICAgICAgICAgICAvLyBoYXZlIHN0YWNrdHJhY2Vz
IGZvciB0aGVzZS4KLSAgICAgICAgICAgIHZnX2Fzc2VydCAoYWktPkFkZHIuQmxvY2suYWxsb2Nh
dGVkX2F0ID09IFZHXyhudWxsX0V4ZUNvbnRleHQpKCkpOwotICAgICAgICAgICAgdmdfYXNzZXJ0
IChhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9PSBWR18obnVsbF9FeGVDb250ZXh0KSgpKTsKKyAg
ICAgICAgICAgIHZnX2Fzc2VydChWR18oaXNfbnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgKGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCkpOworICAg
ICAgICAgICAgdmdfYXNzZXJ0KFZHXyhpc19udWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAoYWktPkFkZHIuQmxvY2suZnJlZWRfYXQpKTsKICAgICAgICAg
IH0KICAgICAgICAgIGlmIChhaS0+QWRkci5CbG9jay5hbGxvY190aW5mby50bnIgfHwgYWktPkFk
ZHIuQmxvY2suYWxsb2NfdGluZm8udGlkKQogICAgICAgICAgICAgVkdfKGVtaXQpKApAQCAtNjAz
LDcgKzYxMiw3IEBACiAgICAgICAgICBpZiAoYWktPkFkZHIuU2VjdEtpbmQua2luZCA9PSBWZ19T
ZWN0VGV4dCkgewogICAgICAgICAgICAgLyogVG8gYmV0dGVyIGRlc2NyaWJlIHRoZSBhZGRyZXNz
IGluIGEgdGV4dCBzZWdtZW50LAogICAgICAgICAgICAgICAgcHAgYSBkdW1teSBzdGFja3RyYWNl
IG1hZGUgb2YgdGhpcyBzaW5nbGUgYWRkcmVzcy4gKi8KLSAgICAgICAgICAgIFZHXyhwcF9TdGFj
a1RyYWNlKSggJmEsIDEgKTsKKyAgICAgICAgICAgIFZHXyhwcF9TdGFja1RyYWNlKSggVkdfKGN1
cnJlbnRfRGlFcG9jaCkoKSwgJmEsIDEgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwog
CkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1Z2luZm8vZGVidWdpbmZvLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y29yZWdyaW5kL21fZGVidWdpbmZvL2RlYnVnaW5mby5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNv
cmVncmluZC9tX2RlYnVnaW5mby9kZWJ1Z2luZm8uYwkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsMTEgQEAKICAgIHNob3VsZC13ZS1sb2FkLWRlYnVnaW5mby1ub3c/IGZpbml0ZSBzdGF0ZSBt
YWNoaW5lLiAqLwogI2RlZmluZSBERUJVR19GU00gMAogCisvKiBTZXQgdGhpcyB0byAxIHRvIGVu
YWJsZSBzb21ld2hhdCBtaW5pbWFsIGRlYnVnIHByaW50aW5nIGZvciB0aGUKKyAgIGRlYnVnaW5m
by1lcG9jaCBtYWNoaW5lcnkuICovCisjZGVmaW5lIERFQlVHX0VQT0NIUyAwCiAKKwogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwogLyotLS0gVGhlIF9zdm1hIC8gX2F2bWEgLyBfaW1hZ2UgLyBfYmlhcyBuYW1pbmcgc2NoZW1l
ICAgICAtLS0qLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTA5LDYgKzExMywxMTYgQEAKIAogCiAvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisv
Ki0tLSBFcG9jaHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZSBEZWJ1Z0luZm8gZXBvY2ggaXMgaW5jcmVtZW50ZWQg
ZXZlcnkgdGltZSB3ZSBlaXRoZXIgbG9hZCBkZWJ1Z2luZm8gaW4KKyAgIHJlc3BvbnNlIHRvIGFu
IG9iamVjdCBtYXBwaW5nLCBvciBhbiBleGlzdGluZyBEZWJ1Z0luZm8gYmVjb21lcworICAgbm9u
LWN1cnJlbnQgKG9yIHdpbGwgYmUgZGlzY2FyZGVkKSBkdWUgdG8gYW4gb2JqZWN0IHVubWFwLiAg
Qnkgc3RvcmluZywKKyAgIGluIGVhY2ggRGVidWdJbmZvLCB0aGUgZmlyc3QgYW5kIGxhc3QgZXBv
Y2ggZm9yIHdoaWNoIGl0IGlzIHZhbGlkLCB3ZSBjYW4KKyAgIHVuYW1iaWd1b3VzbHkgaWRlbnRp
ZnkgdGhlIHNldCBvZiBEZWJ1Z0luZm9zIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvCisgICBwcm92
aWRlIG1ldGFkYXRhIGZvciBhIGNvZGUgb3IgZGF0YSBhZGRyZXNzLCBwcm92aWRlZCB3ZSBrbm93
IHRoZSBlcG9jaAorICAgdG8gd2hpY2ggdGhhdCBhZGRyZXNzIHBlcnRhaW5zLgorCisgICBOb3Rl
LCB0aGlzIGlzbid0IHRoZSBzYW1lIGFzIHRoZSAiaGFuZGxlX2NvdW50ZXIiIGJlbG93LiAgVGhh
dCBvbmx5CisgICBhZHZhbmNlcyB3aGVuIG5ldyBEZWJ1Z0luZm9zIGFyZSBjcmVhdGVkLiAgImN1
cnJlbnRfZXBvY2giIGFkdmFuY2VzIGJvdGgKKyAgIGF0IERlYnVnSW5mbyBjcmVhdGVkIGFuZCBk
ZXN0cnVjdGlvbi1vci1tYWtpbmctbm9uLWN1cnJlbnQuCisqLworCisvLyBUaGUgdmFsdWUgemVy
byBpcyByZXNlcnZlZCBmb3IgaW5kaWNhdGluZyBhbiBpbnZhbGlkIGVwb2NoIG51bWJlci4KK3N0
YXRpYyBVSW50IGN1cnJlbnRfZXBvY2ggPSAxOworCitpbmxpbmUgRGlFcG9jaCBWR18oY3VycmVu
dF9EaUVwb2NoKSAoIHZvaWQgKSB7CisgICBEaUVwb2NoIGRlcDsgZGVwLm4gPSBjdXJyZW50X2Vw
b2NoOyByZXR1cm4gZGVwOworfQorCitzdGF0aWMgdm9pZCBhZHZhbmNlX2N1cnJlbnRfRGlFcG9j
aCAoIGNvbnN0IEhDaGFyKiBtc2cgKSB7CisgICBjdXJyZW50X2Vwb2NoKys7CisgICBpZiAoREVC
VUdfRVBPQ0hTKQorICAgICAgVkdfKHByaW50ZikoIkFkdmFuY2luZyBjdXJyZW50IGVwb2NoIHRv
ICV1IGR1ZSB0byAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZXBvY2gsIG1zZyk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgQm9vbCBlcV9EaUVwb2NoICggRGlFcG9jaCBkZXAxLCBEaUVw
b2NoIGRlcDIgKSB7CisgICByZXR1cm4gZGVwMS5uID09IGRlcDIubiAmJiAvKm5laXRoZXIgaXMg
aW52YWxpZCovZGVwMS5uICE9IDA7Cit9CisKKy8vIElzIHRoaXMgRGVidWdJbmZvIGN1cnJlbnRs
eSAiYWxsb2NhdGVkIiAocHJlLXVzZSBzdGF0ZSwgb25seSBGU00gYWN0aXZlKSA/CitzdGF0aWMg
aW5saW5lIEJvb2wgaXNfRGVidWdJbmZvX2FsbG9jYXRlZCAoIGNvbnN0IERlYnVnSW5mbyogZGkg
KQoreworICAgaWYgKGlzX0RpRXBvY2hfSU5WQUxJRChkaS0+Zmlyc3RfZXBvY2gpCisgICAgICAg
JiYgaXNfRGlFcG9jaF9JTlZBTElEKGRpLT5sYXN0X2Vwb2NoKSkgeworICAgICAgcmV0dXJuIFRy
dWU7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIEZhbHNlOworICAgfQorfQorCisvLyBJcyB0
aGlzIERlYnVnSW5mbyBjdXJyZW50bHkgImFjdGl2ZSIgKHZhbGlkIGZvciB0aGUgY3VycmVudCBl
cG9jaCkgPworc3RhdGljIGlubGluZSBCb29sIGlzX0RlYnVnSW5mb19hY3RpdmUgKCBjb25zdCBE
ZWJ1Z0luZm8qIGRpICkKK3sKKyAgIGlmICghaXNfRGlFcG9jaF9JTlZBTElEKGRpLT5maXJzdF9l
cG9jaCkKKyAgICAgICAmJiBpc19EaUVwb2NoX0lOVkFMSUQoZGktPmxhc3RfZXBvY2gpKSB7Cisg
ICAgICAvLyBZZXMgaXQgaXMgYWN0aXZlLiAgU2FuaXR5IGNoZWNrIC4uCisgICAgICB0bF9hc3Nl
cnQoZGktPmZpcnN0X2Vwb2NoLm4gPD0gY3VycmVudF9lcG9jaCk7CisgICAgICByZXR1cm4gVHJ1
ZTsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gRmFsc2U7CisgICB9Cit9CisKKy8vIElzIHRo
aXMgRGVidWdJbmZvIGN1cnJlbnRseSAiYXJjaGl2ZWQiID8KK3N0YXRpYyBpbmxpbmUgQm9vbCBp
c19EZWJ1Z0luZm9fYXJjaGl2ZWQgKCBjb25zdCBEZWJ1Z0luZm8qIGRpICkKK3sKKyAgIGlmICgh
aXNfRGlFcG9jaF9JTlZBTElEKGRpLT5maXJzdF9lcG9jaCkKKyAgICAgICAmJiAhaXNfRGlFcG9j
aF9JTlZBTElEKGRpLT5sYXN0X2Vwb2NoKSkgeworICAgICAgLy8gWWVzIGl0IGlzIGFyY2hpdmVk
LiAgU2FuaXR5IGNoZWNrcyAuLgorICAgICAgdGxfYXNzZXJ0KGRpLT5maXJzdF9lcG9jaC5uIDw9
IGRpLT5sYXN0X2Vwb2NoLm4pOworICAgICAgdGxfYXNzZXJ0KGRpLT5sYXN0X2Vwb2NoLm4gPD0g
Y3VycmVudF9lcG9jaCk7CisgICAgICByZXR1cm4gVHJ1ZTsKKyAgIH0gZWxzZSB7CisgICAgICBy
ZXR1cm4gRmFsc2U7CisgICB9Cit9CisKKy8vIElzIHRoaXMgRGVidWdJbmZvIHZhbGlkIGZvciB0
aGUgc3BlY2lmaWVkIGVwb2NoPworc3RhdGljIGlubGluZSBCb29sIGlzX0RJX3ZhbGlkX2Zvcl9l
cG9jaCAoIGNvbnN0IERlYnVnSW5mbyogZGksIERpRXBvY2ggZXAgKQoreworICAgLy8gU3RheSBz
YW5lCisgICB2Z19hc3NlcnQoZXAubiA+IDAgJiYgZXAubiA8PSBjdXJyZW50X2Vwb2NoKTsKKwor
ICAgQm9vbCBmaXJzdF92YWxpZCA9ICFpc19EaUVwb2NoX0lOVkFMSUQoZGktPmZpcnN0X2Vwb2No
KTsKKyAgIEJvb2wgbGFzdF92YWxpZCAgPSAhaXNfRGlFcG9jaF9JTlZBTElEKGRpLT5sYXN0X2Vw
b2NoKTsKKworICAgaWYgKGZpcnN0X3ZhbGlkKSB7CisgICAgICBpZiAobGFzdF92YWxpZCkgewor
ICAgICAgICAgLy8gQm90aCB2YWxpZC4gIGRpIGlzIGluIEFyY2hpdmVkIHN0YXRlLgorICAgICAg
ICAgcmV0dXJuIGRpLT5maXJzdF9lcG9jaC5uIDw9IGVwLm4gJiYgZXAubiA8PSBkaS0+bGFzdF9l
cG9jaC5uOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIC8vIEZpcnN0IGlzIHZhbGlkLCBsYXN0
IGlzIGludmFsaWQuICBkaSBpcyBpbiBBY3RpdmUgc3RhdGUuCisgICAgICAgICByZXR1cm4gZGkt
PmZpcnN0X2Vwb2NoLm4gPD0gZXAubjsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBpZiAo
bGFzdF92YWxpZCkgeworICAgICAgICAgLy8gRmlyc3QgaXMgaW52YWxpZCwgbGFzdCBpcyB2YWxp
ZC4gIFRoaXMgaXMgYW4gaW1wb3NzaWJsZSBzdGF0ZS4KKyAgICAgICAgIHZnX2Fzc2VydCgwKTsK
KyAgICAgICAgIC8qTk9UUkVBQ0hFRCovCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICB9
IGVsc2UgeworICAgICAgICAgLy8gTmVpdGhlciBpcyB2YWxpZC4gIGRpIGlzIGluIEFsbG9jYXRl
ZCBzdGF0ZS4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIH0KKyAgIH0KKworfQorCitz
dGF0aWMgaW5saW5lIFVJbnQgUk9MMzIgKCBVSW50IHgsIFVJbnQgbiApCit7CisgICByZXR1cm4g
KHggPDwgbikgfCAoeCA+PiAoMzItbikpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tIFJvb3Qgc3Ry
dWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KIApAQCAtMTYyLDYgKzI3NiwyMyBAQAogfQogCiAKKy8vIERlYnVnZ2luZyBoZWxwZXIgZm9y
IGVwb2Nocworc3RhdGljIHZvaWQgc2hvd19lcG9jaHMgKCBjb25zdCBIQ2hhciogbXNnICkKK3sK
KyAgIGlmIChERUJVR19FUE9DSFMpIHsKKyAgICAgIERlYnVnSW5mbyogZGk7CisgICAgICBWR18o
cHJpbnRmKSgiXG5EZWJ1Z0luZm8gZXBvY2ggZGlzcGxheSwgcmVxdWVzdGVkIGJ5IFwiJXNcIlxu
IiwgbXNnKTsKKyAgICAgIFZHXyhwcmludGYpKCIgIEN1cnJlbnQgZXBvY2ggKG5vdGU6IDAgbWVh
bnMgXCJpbnZhbGlkIGVwb2NoXCIpID0gJXVcbiIsCisgICAgICAgICAgICAgICAgICBjdXJyZW50
X2Vwb2NoKTsKKyAgICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGk7IGRpID0gZGktPm5l
eHQpIHsKKyAgICAgICAgIFZHXyhwcmludGYpKCIgIFtkaT0lcF0gIGZpcnN0ICV1ICBsYXN0ICV1
ICAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICBkaSwgZGktPmZpcnN0X2Vwb2NoLm4sIGRp
LT5sYXN0X2Vwb2NoLm4sIGRpLT5mc20uZmlsZW5hbWUpOworICAgICAgfQorICAgICAgVkdfKHBy
aW50ZikoIlxuIik7CisgICB9Cit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0gTm90aWZpY2F0aW9uIChh
Y3F1aXJlL2Rpc2NhcmQpIGhlbHBlcnMgICAgICAgICAgICAgICAtLS0qLwogLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAt
MTgyLDYgKzMxMyw4IEBACiAKICAgIGRpID0gTUxfKGRpbmZvX3phbGxvYykoImRpLmRlYnVnaW5m
by5hREkuMSIsIHNpemVvZihEZWJ1Z0luZm8pKTsKICAgIGRpLT5oYW5kbGUgICAgICAgPSBoYW5k
bGVfY291bnRlcisrOworICAgZGktPmZpcnN0X2Vwb2NoICA9IERpRXBvY2hfSU5WQUxJRCgpOwor
ICAgZGktPmxhc3RfZXBvY2ggICA9IERpRXBvY2hfSU5WQUxJRCgpOwogICAgZGktPmZzbS5maWxl
bmFtZSA9IE1MXyhkaW5mb19zdHJkdXApKCJkaS5kZWJ1Z2luZm8uYURJLjIiLCBmaWxlbmFtZSk7
CiAgICBkaS0+ZnNtLm1hcHMgICAgID0gVkdfKG5ld1hBKSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICBNTF8oZGluZm9femFsbG9jKSwgImRpLmRlYnVnaW5mby5hREkuMyIsCkBAIC0zMDIsMTMg
KzQzNSwyMCBAQAogfQogCiAKLS8qICdzaScgaXMgYSBtZW1iZXIgb2YgZGVidWdJbmZvX2xpc3Qu
ICBGaW5kIGl0LCByZW1vdmUgaXQgZnJvbSB0aGUKLSAgIGxpc3QsIG5vdGlmeSBtX3JlZGlyIHRo
YXQgdGhpcyBoYXMgaGFwcGVuZWQsIGFuZCBmcmVlIGFsbCBzdG9yYWdlCi0gICByZWFjaGFibGUg
ZnJvbSBpdC4KKy8qICdkaScgaXMgYSBtZW1iZXIgb2YgZGVidWdJbmZvX2xpc3QuICBGaW5kIGl0
LCBhbmQgZWl0aGVyIChyZW1vdmUgaXQgZnJvbQorICAgdGhlIGxpc3QgYW5kIGZyZWUgYWxsIHN0
b3JhZ2UgcmVhY2hhYmxlIGZyb20gaXQpIG9yIGFyY2hpdmUgaXQsIG5vdGlmeQorICAgbV9yZWRp
ciB0aGF0IHRoaXMgaGFzIGhhcHBlbmVkLCBhbmQgZnJlZSBhbGwgc3RvcmFnZSByZWFjaGFibGUg
ZnJvbSBpdC4KKworICAgTm90ZSB0aGF0ICdkaScgY2FuJ3QgYmUgYXJjaGl2ZWQuICBJcyBhIERl
YnVnSW5mbyBpcyBhcmNoaXZlZCB0aGVuIHdlCisgICB3YW50IHRvIGhvbGQgb24gdG8gaXQgZm9y
ZXZlci4gIFRoaXMgaXMgYXNzZXJ0ZWQgZm9yLgorCisgICBOb3RlIGFsc28sIHdlIGRvbid0IGFk
dmFuY2UgdGhlIGN1cnJlbnQgZXBvY2ggaGVyZS4gIFRoYXQncyB0aGUKKyAgIHJlc3BvbnNpYmls
aXR5IG9mIHNvbWUgKG5vbi1pbW1lZGlhdGUpIGNhbGxlci4KICovCi1zdGF0aWMgdm9pZCBkaXNj
YXJkX0RlYnVnSW5mbyAoIERlYnVnSW5mbyogZGkgKQorc3RhdGljIHZvaWQgZGlzY2FyZF9vcl9h
cmNoaXZlX0RlYnVnSW5mbyAoIERlYnVnSW5mbyogZGkgKQogewotICAgY29uc3QgSENoYXIqIHJl
YXNvbiA9ICJtdW5tYXAiOworICAgY29uc3QgSENoYXIqIHJlYXNvbiAgPSAibXVubWFwIjsKKyAg
IGNvbnN0IEJvb2wgICBhcmNoaXZlID0gVkdfKGNsb19rZWVwX2RlYnVnaW5mbyk7CiAKICAgIERl
YnVnSW5mbyoqIHByZXZfbmV4dF9wdHIgPSAmZGVidWdJbmZvX2xpc3Q7CiAgICBEZWJ1Z0luZm8q
ICBjdXJyICAgICAgICAgID0gIGRlYnVnSW5mb19saXN0OwpAQCAtMzE1LDExICs0NTUsMTQgQEAK
IAogICAgd2hpbGUgKGN1cnIpIHsKICAgICAgIGlmIChjdXJyID09IGRpKSB7Ci0gICAgICAgICAv
KiBGb3VuZCBpdDsgIHJlbW92ZSBmcm9tIGxpc3QgYW5kIGZyZWUgaXQuICovCisgICAgICAgICAv
KiBJdCBtdXN0IGJlIGFjdGl2ZSEgKi8KKyAgICAgICAgIHZnX2Fzc2VydCggaXNfRGVidWdJbmZv
X2FjdGl2ZShkaSkpOworICAgICAgICAgLyogRm91bmQgaXQ7IChyZW1vdmUgZnJvbSBsaXN0IGFu
ZCBmcmVlIGl0KSwgb3IgYXJjaGl2ZSBpdC4gKi8KICAgICAgICAgIGlmIChjdXJyLT5oYXZlX2Rp
bmZvCiAgICAgICAgICAgICAgJiYgKFZHXyhjbG9fdmVyYm9zaXR5KSA+IDEgfHwgVkdfKGNsb190
cmFjZV9yZWRpcikpKQogICAgICAgICAgICAgVkdfKG1lc3NhZ2UpKFZnX0RlYnVnTXNnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAiRGlzY2FyZGluZyBzeW1zIGF0ICUjbHgtJSNseCBpbiAl
cyBkdWUgdG8gJXMoKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgc3ltcyBhdCAl
I2x4LSUjbHggaW4gJXMgZHVlIHRvICVzKClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
YXJjaGl2ZSA/ICJBcmNoaXZpbmciIDogIkRpc2NhcmRpbmciLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpLT50ZXh0X2F2bWEsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRpLT50ZXh0
X2F2bWEgKyBkaS0+dGV4dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnItPmZz
bS5maWxlbmFtZSA/IGN1cnItPmZzbS5maWxlbmFtZQpAQCAtMzI2LDEwICs0NjksMTggQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPz8/IiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWFzb24pOwogICAgICAgICAgdmdfYXNzZXJ0KCpwcmV2X25l
eHRfcHRyID09IGN1cnIpOwotICAgICAgICAgKnByZXZfbmV4dF9wdHIgPSBjdXJyLT5uZXh0Owot
ICAgICAgICAgaWYgKGN1cnItPmhhdmVfZGluZm8pCisgICAgICAgICBpZiAoIWFyY2hpdmUpIHsK
KyAgICAgICAgICAgICpwcmV2X25leHRfcHRyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgIH0KKyAg
ICAgICAgIGlmIChjdXJyLT5oYXZlX2RpbmZvKSB7CiAgICAgICAgICAgICBWR18ocmVkaXJfbm90
aWZ5X2RlbGV0ZV9EZWJ1Z0luZm8pKCBjdXJyICk7Ci0gICAgICAgICBmcmVlX0RlYnVnSW5mbyhj
dXJyKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChhcmNoaXZlKSB7CisgICAgICAgICAgICAv
KiBBZGp1c3QgdGhlIGVwb2NoIG1hcmtlcnMgYXBwcm9wcmlhdGVseS4gKi8KKyAgICAgICAgICAg
IGRpLT5sYXN0X2Vwb2NoID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKyAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBmcmVlX0RlYnVnSW5mbyhjdXJyKTsKKyAgICAgICAgIH0KICAgICAg
ICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIHByZXZfbmV4dF9wdHIgPSAmY3Vyci0+bmV4dDsK
QEAgLTM1OCwxMCArNTA5LDExIEBACiAgICAgICB3aGlsZSAoVHJ1ZSkgewogICAgICAgICAgaWYg
KGN1cnIgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgaWYgKGN1cnItPnRl
eHRfcHJlc2VudAotICAgICAgICAgICAgICYmIGN1cnItPnRleHRfc2l6ZSA+IDAKLSAgICAgICAg
ICAgICAmJiAoc3RhcnQrbGVuZ3RoIC0gMSA8IGN1cnItPnRleHRfYXZtYSAKLSAgICAgICAgICAg
ICAgICAgfHwgY3Vyci0+dGV4dF9hdm1hICsgY3Vyci0+dGV4dF9zaXplIC0gMSA8IHN0YXJ0KSkg
eworICAgICAgICAgaWYgKGlzX0RlYnVnSW5mb19hcmNoaXZlZChjdXJyKQorICAgICAgICAgICAg
IHx8IChjdXJyLT50ZXh0X3ByZXNlbnQKKyAgICAgICAgICAgICAgICAgJiYgY3Vyci0+dGV4dF9z
aXplID4gMAorICAgICAgICAgICAgICAgICAmJiAoc3RhcnQrbGVuZ3RoIC0gMSA8IGN1cnItPnRl
eHRfYXZtYSAKKyAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnItPnRleHRfYXZtYSArIGN1cnIt
PnRleHRfc2l6ZSAtIDEgPCBzdGFydCkpKSB7CiAgICAgICAgICAgICAvKiBubyBvdmVybGFwICov
CiAJIH0gZWxzZSB7CiAJICAgIGZvdW5kID0gVHJ1ZTsKQEAgLTM3Miw3ICs1MjQsNyBAQAogCiAg
ICAgICBpZiAoIWZvdW5kKSBicmVhazsKICAgICAgIGFueUZvdW5kID0gVHJ1ZTsKLSAgICAgIGRp
c2NhcmRfRGVidWdJbmZvKCBjdXJyICk7CisgICAgICBkaXNjYXJkX29yX2FyY2hpdmVfRGVidWdJ
bmZvKCBjdXJyICk7CiAgICB9CiAKICAgIHJldHVybiBhbnlGb3VuZDsKQEAgLTQxOCw5ICs1NzAs
OSBAQAogfQogCiAKLS8qIERpc2NhcmQgYWxsIGVsZW1lbnRzIG9mIGRlYnVnSW5mb19saXN0IHdo
b3NlIC5tYXJrIGJpdCBpcyBzZXQuCisvKiBEaXNjYXJkIG9yIGFyY2hpdmUgYWxsIGVsZW1lbnRz
IG9mIGRlYnVnSW5mb19saXN0IHdob3NlIC5tYXJrIGJpdCBpcyBzZXQuCiAqLwotc3RhdGljIHZv
aWQgZGlzY2FyZF9tYXJrZWRfRGVidWdJbmZvcyAoIHZvaWQgKQorc3RhdGljIHZvaWQgZGlzY2Fy
ZF9vcl9hcmNoaXZlX21hcmtlZF9EZWJ1Z0luZm9zICggdm9pZCApCiB7CiAgICBEZWJ1Z0luZm8q
IGN1cnI7CiAKQEAgLTQzNiw3ICs1ODgsNyBAQAogICAgICAgfQogCiAgICAgICBpZiAoIWN1cnIp
IGJyZWFrOwotICAgICAgZGlzY2FyZF9EZWJ1Z0luZm8oIGN1cnIgKTsKKyAgICAgIGRpc2NhcmRf
b3JfYXJjaGl2ZV9EZWJ1Z0luZm8oIGN1cnIgKTsKIAogICAgfQogfQpAQCAtNDQ2LDYgKzU5OCw3
IEBACiAgICBDbGVhcmx5IGRpUmVmIG11c3QgaGF2ZSBpdHMgbWFwcGluZyBpbmZvcm1hdGlvbiBz
ZXQgdG8gc29tZXRoaW5nIHNhbmUuICovCiBzdGF0aWMgdm9pZCBkaXNjYXJkX0RlYnVnSW5mb3Nf
d2hpY2hfb3ZlcmxhcF93aXRoICggRGVidWdJbmZvKiBkaVJlZiApCiB7CisgICB2Z19hc3NlcnQo
aXNfRGVidWdJbmZvX2FsbG9jYXRlZChkaVJlZikpOwogICAgRGVidWdJbmZvKiBkaTsKICAgIC8q
IE1hcmsgYWxsIHRoZSBEZWJ1Z0luZm9zIGluIGRlYnVnSW5mb19saXN0IHRoYXQgbmVlZCB0byBi
ZQogICAgICAgZGVsZXRlZC4gIEZpcnN0LCBjbGVhciBhbGwgdGhlIG1hcmsgYml0czsgdGhlbiBz
ZXQgdGhlbSBpZiB0aGV5CkBAIC00NTIsNiArNjA1LDggQEAKICAgICAgIG92ZXJsYXAgd2l0aCBz
aVJlZi4gIFNpbmNlIHNpUmVmIGl0c2VsZiBpcyBpbiB0aGlzIGxpc3Qgd2UgYXQKICAgICAgIGxl
YXN0IGV4cGVjdCBpdHMgb3duIG1hcmsgYml0IHRvIGJlIHNldC4gKi8KICAgIGZvciAoZGkgPSBk
ZWJ1Z0luZm9fbGlzdDsgZGk7IGRpID0gZGktPm5leHQpIHsKKyAgICAgIGlmIChpc19EZWJ1Z0lu
Zm9fYXJjaGl2ZWQoZGkpKQorICAgICAgICAgY29udGludWU7CiAgICAgICBkaS0+bWFyayA9IGRv
X0RlYnVnSW5mb3Nfb3ZlcmxhcCggZGksIGRpUmVmICk7CiAgICAgICBpZiAoZGkgPT0gZGlSZWYp
IHsKICAgICAgICAgIHZnX2Fzc2VydChkaS0+bWFyayk7CkBAIC00NTgsNyArNjEzLDcgQEAKICAg
ICAgICAgIGRpLT5tYXJrID0gRmFsc2U7CiAgICAgICB9CiAgICB9Ci0gICBkaXNjYXJkX21hcmtl
ZF9EZWJ1Z0luZm9zKCk7CisgICBkaXNjYXJkX29yX2FyY2hpdmVfbWFya2VkX0RlYnVnSW5mb3Mo
KTsKIH0KIAogCkBAIC00NzAsNiArNjI1LDggQEAKICAgIERlYnVnSW5mbyogZGk7CiAgICB2Z19h
c3NlcnQoZmlsZW5hbWUpOwogICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaTsgZGkgPSBk
aS0+bmV4dCkgeworICAgICAgaWYgKGlzX0RlYnVnSW5mb19hcmNoaXZlZChkaSkpCisgICAgICAg
ICBjb250aW51ZTsKICAgICAgIHZnX2Fzc2VydChkaS0+ZnNtLmZpbGVuYW1lKTsKICAgICAgIGlm
ICgwPT1WR18oc3RyY21wKShkaS0+ZnNtLmZpbGVuYW1lLCBmaWxlbmFtZSkpCiAgICAgICAgICBi
cmVhazsKQEAgLTQ4MCw2ICs2MzcsNyBAQAogICAgICAgZGktPm5leHQgPSBkZWJ1Z0luZm9fbGlz
dDsKICAgICAgIGRlYnVnSW5mb19saXN0ID0gZGk7CiAgICB9CisgICB2Z19hc3NlcnQoIWlzX0Rl
YnVnSW5mb19hcmNoaXZlZChkaSkpOwogICAgcmV0dXJuIGRpOwogfQogCkBAIC03MjMsNiArODgx
LDggQEAKICAgIFVMb25nIGRpX2hhbmRsZTsKICAgIEJvb2wgIG9rOwogCisgICBhZHZhbmNlX2N1
cnJlbnRfRGlFcG9jaCgiZGlfbm90aWZ5X0FDSElFVkVfQUNDRVBUX1NUQVRFIik7CisKICAgIHZn
X2Fzc2VydChkaS0+ZnNtLmZpbGVuYW1lKTsKICAgIFRSQUNFX1NZTVRBQigiXG4iKTsKICAgIFRS
QUNFX1NZTVRBQigiLS0tLS0tIHN0YXJ0IEVMRiBPQkpFQ1QgIgpAQCAtNzM0LDcgKzg5NCw4IEBA
CiAgICAvKiBXZSdyZSBnb2luZyB0byByZWFkIHN5bWJvbHMgYW5kIGRlYnVnIGluZm8gZm9yIHRo
ZSBhdm1hCiAgICAgICByYW5nZXMgc3BlY2lmaWVkIGluIHRoZSBfRGVidWdJbmZvRnNtIG1hcHBp
bmcgYXJyYXkuIEZpcnN0CiAgICAgICBnZXQgcmlkIG9mIGFueSBvdGhlciBEZWJ1Z0luZm9zIHdo
aWNoIG92ZXJsYXAgYW55IG9mIHRob3NlCi0gICAgICByYW5nZXMgKHRvIGF2b2lkIHRvdGFsIGNv
bmZ1c2lvbikuICovCisgICAgICByYW5nZXMgKHRvIGF2b2lkIHRvdGFsIGNvbmZ1c2lvbikuICBC
dXQgb25seSB0aG9zZSB2YWxpZCBpbgorICAgICB0aGUgY3VycmVudCBlcG9jaC4gIFdlIGRvbid0
IHdhbnQgdG8gZGlzY2FyZCBhcmNoaXZlZCBEZWJ1Z0luZm9zLiAqLwogICAgZGlzY2FyZF9EZWJ1
Z0luZm9zX3doaWNoX292ZXJsYXBfd2l0aCggZGkgKTsKIAogICAgLyogVGhlIERlYnVnSW5mb01h
cHBpbmdzIHRoYXQgbm93IGV4aXN0IGluIHRoZSBGU00gbWF5IGludm9sdmUKQEAgLTc2NSw2ICs5
MjYsMTUgQEAKICAgICAgICAgIHByaXZfc3RvcmFnZS5oLiAqLwogICAgICAgY2hlY2tfQ0ZTSV9y
ZWxhdGVkX2ludmFyaWFudHMoZGkpOwogICAgICAgTUxfKGZpbmlzaF9DRlNJX2FycmF5cykoZGkp
OworCisgICAgICAvLyBNYXJrIGRpJ3MgZmlyc3QgZXBvY2ggcG9pbnQgYXMgYSB2YWxpZCBlcG9j
aC4gIEJlY2F1c2UgaXRzCisgICAgICAvLyBsYXN0X2Vwb2NoIHZhbHVlIGlzIHN0aWxsIGludmFs
aWQsIHRoaXMgY2hhbmdlcyBkaSdzIHN0YXRlIGZyb20KKyAgICAgIC8vICJhbGxvY2F0ZWQiIHRv
ICJhY3RpdmUiLgorICAgICAgdmdfYXNzZXJ0KGlzX0RlYnVnSW5mb19hbGxvY2F0ZWQoZGkpKTsK
KyAgICAgIGRpLT5maXJzdF9lcG9jaCA9IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CisgICAgICB2
Z19hc3NlcnQoaXNfRGVidWdJbmZvX2FjdGl2ZShkaSkpOworICAgICAgc2hvd19lcG9jaHMoImRp
X25vdGlmeV9BQ0hJRVZFX0FDQ0VQVF9TVEFURSBzdWNjZXNzIik7CisKICAgICAgIC8qIG5vdGlm
eSBtX3JlZGlyIGFib3V0IGl0ICovCiAgICAgICBUUkFDRV9TWU1UQUIoIlxuLS0tLS0tIE5vdGlm
eWluZyBtX3JlZGlyIC0tLS0tLVxuIik7CiAgICAgICBWR18ocmVkaXJfbm90aWZ5X25ld19EZWJ1
Z0luZm8pKCBkaSApOwpAQCAtMTA3Nyw4ICsxMjQ3LDExIEBACiAgICBCb29sIGFueUZvdW5kOwog
ICAgaWYgKDApIFZHXyhwcmludGYpKCJESVNDQVJEICUjbHggJSNseFxuIiwgYSwgYStsZW4pOwog
ICAgYW55Rm91bmQgPSBkaXNjYXJkX3N5bXNfaW5fcmFuZ2UoYSwgbGVuKTsKLSAgIGlmIChhbnlG
b3VuZCkKKyAgIGlmIChhbnlGb3VuZCkgewogICAgICAgY2FjaGVzX19pbnZhbGlkYXRlKCk7Cisg
ICAgICBhZHZhbmNlX2N1cnJlbnRfRGlFcG9jaCgiVkdfKGRpX25vdGlmeV9tdW5tYXApIik7Cisg
ICAgICBzaG93X2Vwb2NocygiVkdfKGRpX25vdGlmeV9tdW5tYXApIik7CisgICB9CiB9CiAKIApA
QCAtMTA5NCw4ICsxMjY3LDEwIEBACiAjICBlbmRpZgogICAgaWYgKDAgJiYgIWV4ZV9vaykgewog
ICAgICAgQm9vbCBhbnlGb3VuZCA9IGRpc2NhcmRfc3ltc19pbl9yYW5nZShhLCBsZW4pOwotICAg
ICAgaWYgKGFueUZvdW5kKQorICAgICAgaWYgKGFueUZvdW5kKSB7CiAgICAgICAgICBjYWNoZXNf
X2ludmFsaWRhdGUoKTsKKyAgICAgICAgIGFkdmFuY2VfY3VycmVudF9EaUVwb2NoKCJWR18oZGlf
bm90aWZ5X21wcm90ZWN0KSIpOworICAgICAgfQogICAgfQogfQogCkBAIC0xMzk1LDYgKzE1NzAs
NyBAQAogICAgY2FjaGVzX19pbnZhbGlkYXRlKCk7CiAgICAvKiBkdW1wIG9sZCBpbmZvIGZvciB0
aGlzIHJhbmdlLCBpZiBhbnkgKi8KICAgIGRpc2NhcmRfc3ltc19pbl9yYW5nZSggYXZtYV9vYmos
IHRvdGFsX3NpemUgKTsKKyAgIGFkdmFuY2VfY3VycmVudF9EaUVwb2NoKCJWR18oZGlfbm90aWZ5
X3BkYl9kZWJ1Z2luZm8pIik7CiAKICAgIHsgRGVidWdJbmZvKiBkaSA9IGZpbmRfb3JfY3JlYXRl
X0RlYnVnSW5mb19mb3IoZXhlbmFtZSk7CiAKQEAgLTE0NzEsNiArMTY0Nyw3IEBACiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAvKi0tLSBUeXBlcyBhbmQgZnVuY3Rpb25zIGZvciBpbmxpbmVkIElQIGN1cnNvciAgICAgICAg
ICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKIHN0cnVjdCBfSW5sSVBDdXJzb3IgewogICAgQWRkciBlaXA7
ICAgICAgICAgICAgIC8vIEN1cnNvciB1c2VkIHRvIGRlc2NyaWJlIGNhbGxzIGF0IGVpcC4KICAg
IERlYnVnSW5mbyogZGk7ICAgICAgICAvLyBEZWJ1Z0luZm8gZGVzY3JpYmluZyBpbmxpbmVkIGNh
bGxzIGF0IGVpcApAQCAtMTUzNCw4ICsxNzExLDggQEAKIH0KIAogLyogRm9yd2FyZCAqLwotc3Rh
dGljIHZvaWQgc2VhcmNoX2FsbF9sb2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8q
KiBwZGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQq
L1dvcmQqIGxvY25vICk7CitzdGF0aWMgdm9pZCBzZWFyY2hfYWxsX2xvY3RhYnMgKCBEaUVwb2No
IGVwLCBBZGRyIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9E
ZWJ1Z0luZm8qKiBwZGksIC8qT1VUKi9Xb3JkKiBsb2NubyApOwogCiAvKiBSZXR1cm5zIHRoZSBw
b3NpdGlvbiBhZnRlciB3aGljaCBlaXAgd291bGQgYmUgaW5zZXJ0ZWQgaW4gaW5sdGFiLgogICAg
KC0xIGlmIGVpcCBzaG91bGQgYmUgaW5zZXJ0ZWQgYmVmb3JlIHBvc2l0aW9uIDApLgpAQCAtMTU2
NSw3ICsxNzQyLDcgQEAKICAgIHJldHVybiBsbyAtIDE7CiB9CiAKLUlubElQQ3Vyc29yKiBWR18o
bmV3X0lJUEMpKEFkZHIgZWlwKQorSW5sSVBDdXJzb3IqIFZHXyhuZXdfSUlQQykoRGlFcG9jaCBl
cCwgQWRkciBlaXApCiB7CiAgICBEZWJ1Z0luZm8qICBkaTsKICAgIFdvcmQgICAgICAgIGxvY25v
OwpAQCAtMTU3Niw4ICsxNzUzLDggQEAKICAgIGlmICghVkdfKGNsb19yZWFkX2lubGluZV9pbmZv
KSkKICAgICAgIHJldHVybiBOVUxMOyAvLyBObyB3YXkgd2UgY2FuIGZpbmQgaW5saW5lZCBjYWxs
cy4KIAotICAgLyogU2VhcmNoIHRoZSBEZWJ1Z0luZm8gZm9yIGVpcCAqLwotICAgc2VhcmNoX2Fs
bF9sb2N0YWJzICggZWlwLCAmZGksICZsb2NubyApOworICAgLyogU2VhcmNoIHRoZSBEZWJ1Z0lu
Zm8gZm9yIChlcCwgZWlwKSAqLworICAgc2VhcmNoX2FsbF9sb2N0YWJzICggZXAsIGVpcCwgJmRp
LCAmbG9jbm8gKTsKICAgIGlmIChkaSA9PSBOVUxMIHx8IGRpLT5pbmx0YWJfdXNlZCA9PSAwKQog
ICAgICAgcmV0dXJuIE5VTEw7IC8vIE5vIGRpICh3aXRoIGlubHRhYikgY29udGFpbmluZyBlaXAu
CiAKQEAgLTE2NDEsOCArMTgxOCw4IEBACiAgICBJZiBmaW5kVGV4dD09VHJ1ZSwgIG9ubHkgdGV4
dCBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IuCiAgICBJZiBmaW5kVGV4dD09RmFsc2UsIG9ubHkg
ZGF0YSBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IuCiAqLwotc3RhdGljIHZvaWQgc2VhcmNoX2Fs
bF9zeW10YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIHN5bW5vLAorc3Rh
dGljIHZvaWQgc2VhcmNoX2FsbF9zeW10YWJzICggRGlFcG9jaCBlcCwgQWRkciBwdHIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovRGVidWdJbmZvKiogcGRpLCAvKk9V
VCovV29yZCogc3ltbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sIGZp
bmRUZXh0ICkKIHsKICAgIFdvcmQgICAgICAgc25vOwpAQCAtMTY1MSw2ICsxODI4LDkgQEAKIAog
ICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7
CiAKKyAgICAgIGlmICghaXNfRElfdmFsaWRfZm9yX2Vwb2NoKGRpLCBlcCkpCisgICAgICAgICBj
b250aW51ZTsKKwogICAgICAgaWYgKGZpbmRUZXh0KSB7CiAgICAgICAgICAvKiBDb25zaWRlciBh
bnkgc3ltYm9sIGluIHRoZSByLXggbWFwcGVkIGFyZWEgdG8gYmUgdGV4dC4KICAgICAgICAgICAg
IFNlZSBDb21tZW50X1JlZ2FyZGluZ19UZXh0X1JhbmdlX0NoZWNrcyBpbiBzdG9yYWdlLmMgZm9y
CkBAIC0xNjk4LDE1ICsxODc4LDE3IEBACiB9CiAKIAotLyogU2VhcmNoIGFsbCBsb2N0YWJzIHRo
YXQgd2Uga25vdyBhYm91dCB0byBsb2NhdGUgcHRyLiAgSWYgZm91bmQsIHNldAotICAgKnBkaSB0
byB0aGUgcmVsZXZhbnQgRGVidWdJbmZvLCBhbmQgKmxvY25vIHRvIHRoZSBsb2N0YWIgZW50cnkK
Ky8qIFNlYXJjaCBhbGwgbG9jdGFicyB0aGF0IHdlIGtub3cgYWJvdXQgdG8gbG9jYXRlIHB0ciBh
dCBlcG9jaCBlcC4gIElmCisgICAqZm91bmQsIHNldCBwZGkgdG8gdGhlIHJlbGV2YW50IERlYnVn
SW5mbywgYW5kICpsb2NubyB0byB0aGUgbG9jdGFiIGVudHJ5CiAgICAqbnVtYmVyIHdpdGhpbiB0
aGF0LiAgSWYgbm90IGZvdW5kLCAqcGRpIGlzIHNldCB0byBOVUxMLiAqLwotc3RhdGljIHZvaWQg
c2VhcmNoX2FsbF9sb2N0YWJzICggQWRkciBwdHIsIC8qT1VUKi9EZWJ1Z0luZm8qKiBwZGksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL1dvcmQqIGxv
Y25vICkKK3N0YXRpYyB2b2lkIHNlYXJjaF9hbGxfbG9jdGFicyAoIERpRXBvY2ggZXAsIEFkZHIg
cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPVVQqL0RlYnVnSW5mbyoq
IHBkaSwgLypPVVQqL1dvcmQqIGxvY25vICkKIHsKICAgIFdvcmQgICAgICAgbG5vOwogICAgRGVi
dWdJbmZvKiBkaTsKICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsgZGkg
PSBkaS0+bmV4dCkgeworICAgICAgaWYgKCFpc19ESV92YWxpZF9mb3JfZXBvY2goZGksIGVwKSkK
KyAgICAgICAgIGNvbnRpbnVlOwogICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQKICAgICAgICAg
ICAmJiBkaS0+dGV4dF9zaXplID4gMAogICAgICAgICAgICYmIGRpLT50ZXh0X2F2bWEgPD0gcHRy
IApAQCAtMTcyOSwxOSArMTkxMSwyMiBAQAogCiB0eXBlZGVmCiAgICBzdHJ1Y3QgewotICAgICAg
QWRkciBzeW1fYXZtYTsKKyAgICAgIC8vIChzeW1fZXBvY2gsIHN5bV9hdm1hKSBhcmUgdGhlIGhh
c2ggdGFibGUga2V5LgorICAgICAgRGlFcG9jaCBzeW1fZXBvY2g7CisgICAgICBBZGRyICAgIHN5
bV9hdm1hOworICAgICAgLy8gRmllbGRzIGJlbG93IGhlcmUgYXJlIG5vdCBwYXJ0IG9mIHRoZSBr
ZXkuCiAgICAgICBjb25zdCBIQ2hhciogc3ltX25hbWU7CiAgICAgICBQdHJkaWZmVCBvZmZzZXQg
OiAoc2l6ZW9mKFB0cmRpZmZUKSo4KS0xOyAKICAgICAgIEJvb2wgaXNUZXh0IDogMTsKICAgIH0K
ICAgIFN5bV9OYW1lX0NhY2hlRW50OwotLyogU3ltX05hbWVfQ2FjaGVFbnQgYXNzb2NpYXRlcyBh
IHF1ZXJpZWQgYWRkcmVzcyB0byB0aGUgc3ltIG5hbWUgZm91bmQuCi0gICBCeSBuYXR1cmUsIGlm
IGEgc3ltIG5hbWUgd2FzIGZvdW5kLCBpdCBtZWFucyB0aGUgc2VhcmNoZWQgYWRkcmVzcwotICAg
c3RvcmVkIGluIHRoZSBjYWNoZSBpcyBhbiBhdm1hIChzZWUgZS5nLiBzZWFyY2hfYWxsX3N5bXRh
YnMpLgotICAgTm90ZSBob3dldmVyIHRoYXQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJlIHRvIHdv
cmsgd2l0aCAnYXZtYScKLSAgIGFkZHJlc3NlcyBlLmcuIHdoZW4gY2FsbGluZyBWR18oZ2V0X2Zu
bmFtZSkgOiBtX2RlYnVnaW5mby5jIGhhcwotICAgbm8gd2F5IHRvIGRpZmZlcmVudGlhdGUgYW4g
J3N2bWEgYScgZnJvbSBhbiAnYXZtYSBhJy4gSXQgaXMgaG93ZXZlcgotICAgdW5saWtlbHkgdGhh
dCBzdm1hIHdvdWxkIHBlcmNvbGF0ZSBvdXRzaWRlIG9mIHRoaXMgbW9kdWxlLiAqLworLyogU3lt
X05hbWVfQ2FjaGVFbnQgYXNzb2NpYXRlcyBhIHF1ZXJpZWQgKGVwb2NoLCBhZGRyZXNzKSBwYWly
IHRvIHRoZSBzeW0KKyAgIG5hbWUgZm91bmQuICBCeSBuYXR1cmUsIGlmIGEgc3ltIG5hbWUgd2Fz
IGZvdW5kLCBpdCBtZWFucyB0aGUgc2VhcmNoZWQKKyAgIGFkZHJlc3Mgc3RvcmVkIGluIHRoZSBj
YWNoZSBpcyBhbiBhdm1hIChzZWUgZS5nLiBzZWFyY2hfYWxsX3N5bXRhYnMpLgorICAgTm90ZSBo
b3dldmVyIHRoYXQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJlIHRvIHdvcmsgd2l0aCAnYXZtYScg
YWRkcmVzc2VzCisgICBlLmcuIHdoZW4gY2FsbGluZyBWR18oZ2V0X2ZubmFtZSkgOiBtX2RlYnVn
aW5mby5jIGhhcyBubyB3YXkgdG8KKyAgIGRpZmZlcmVudGlhdGUgYW4gJ3N2bWEgYScgZnJvbSBh
biAnYXZtYSBhJy4gSXQgaXMgaG93ZXZlciB1bmxpa2VseSB0aGF0CisgICBzdm1hIHdvdWxkIHBl
cmNvbGF0ZSBvdXRzaWRlIG9mIHRoaXMgbW9kdWxlLiAqLwogCiBzdGF0aWMgU3ltX05hbWVfQ2Fj
aGVFbnQgc3ltX25hbWVfY2FjaGVbTl9TWU1fTkFNRV9DQUNIRV07CiAKQEAgLTE3NTcsMTMgKzE5
NDIsMTUgQEAKICAgIHN5bV9uYW1lX2NhY2hlWzBdLnN5bV9uYW1lID0gbm9fc3ltX25hbWU7CiB9
CiAKLS8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGlzIHdob2xlIGJpZyBkZWFsOiBtYXAgYSBjb2Rl
IGFkZHJlc3MgdG8gYQotICAgcGxhdXNpYmxlIHN5bWJvbCBuYW1lLiAgUmV0dXJucyBGYWxzZSBp
ZiBubyBpZGVhOyBvdGhlcndpc2UgVHJ1ZS4KKy8qIFRoZSB3aG9sZSBwb2ludCBvZiB0aGlzIHdo
b2xlIGJpZyBkZWFsOiBtYXAgYW4gKGVwb2NoLCBjb2RlIGFkZHJlc3MpIHBhaXIKKyAgIHRvIGEg
cGxhdXNpYmxlIHN5bWJvbCBuYW1lLiAgUmV0dXJucyBGYWxzZSBpZiBubyBpZGVhOyBvdGhlcndp
c2UgVHJ1ZS4KKwogICAgQ2FsbGVyIHN1cHBsaWVzIGJ1Zi4gIElmIGRvX2N4eF9kZW1hbmdsaW5n
IGlzIEZhbHNlLCBkb24ndCBkbwogICAgQysrIGRlbWFuZ2xpbmcsIHJlZ2FyZGxlc3Mgb2YgVkdf
KGNsb19kZW1hbmdsZSkgLS0gcHJvYmFibHkgYmVjYXVzZSB0aGUKICAgIGNhbGwgaGFzIGNvbWUg
ZnJvbSBWR18oZ2V0X2ZubmFtZV9yYXcpKCkuICBmaW5kVGV4dAogICAgaW5kaWNhdGVzIHdoZXRo
ZXIgd2UncmUgbG9va2luZyBmb3IgYSB0ZXh0IHN5bWJvbCBvciBhIGRhdGEgc3ltYm9sCiAgICAt
LSBjYWxsZXIgbXVzdCBjaG9vc2Ugb25lIGtpbmQgb3IgdGhlIG90aGVyLgorCiAgICBOT1RFOiBT
ZWUgSU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hp
cAogICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggCiAgICBnZXRfc3ltX25hbWUgYW5kIHRoZSBm
YWN0IGl0IGNhbGxzIHRoZSBkZW1hbmdsZXIgaXMgdGhlIG1haW4gcmVhc29uCkBAIC0xNzcyLDIy
ICsxOTU5LDMyIEBACiAgICAoMSkgdGhlIERlYnVnSW5mbyBpdCBiZWxvbmdzIHRvIGlzIG5vdCBk
aXNjYXJkZWQKICAgICgyKSB0aGUgZGVtYW5nbGVyIGlzIG5vdCBpbnZva2VkIGFnYWluCiAgICBB
bHNvLCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIG93bmVkIGJ5ICJzb21lYm9keSBlbHNlIi4gQ2Fs
bGVycyBtdXN0Ci0gICBub3QgZnJlZSBpdCBvciBtb2RpZnkgaXQuKi8KKyAgIG5vdCBmcmVlIGl0
IG9yIG1vZGlmeSBpdC4gKi8KIHN0YXRpYwogQm9vbCBnZXRfc3ltX25hbWUgKCBCb29sIGRvX2N4
eF9kZW1hbmdsaW5nLCBCb29sIGRvX3pfZGVtYW5nbGluZywKICAgICAgICAgICAgICAgICAgICAg
Qm9vbCBkb19iZWxvd19tYWluX3JlbmFtaW5nLAotICAgICAgICAgICAgICAgICAgICBBZGRyIGEs
IGNvbnN0IEhDaGFyKiogYnVmLAorICAgICAgICAgICAgICAgICAgICBEaUVwb2NoIGVwLCBBZGRy
IGEsIGNvbnN0IEhDaGFyKiogYnVmLAogICAgICAgICAgICAgICAgICAgICBCb29sIG1hdGNoX2Fu
eXdoZXJlX2luX3N5bSwgQm9vbCBzaG93X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgQm9v
bCBmaW5kVGV4dCwgLypPVVQqL1B0cmRpZmZUKiBvZmZzZXRQICkKIHsKLSAgIFVXb3JkICAgICAg
ICAgaGFzaCA9IGEgJSBOX1NZTV9OQU1FX0NBQ0hFOwotICAgU3ltX05hbWVfQ2FjaGVFbnQqIHNl
ID0gICZzeW1fbmFtZV9jYWNoZVtoYXNoXTsKKyAgIC8vIENvbXB1dGUgdGhlIGhhc2ggZnJvbSAn
ZXAnIGFuZCAnYScuICBUaGUgbGF0dGVyIGNvbnRhaW5zIGxvdHMgb2YKKyAgIC8vIHNpZ25pZmlj
YW50IGJpdHMsIGJ1dCAnZXAnIGlzIGV4cGVjdGVkIHRvIGJlIGEgc21hbGwgbnVtYmVyLCB0eXBp
Y2FsbHkKKyAgIC8vIGxlc3MgdGhhbiA1MDAuICBTbyByb3RhdGUgaXQgYXJvdW5kIGEgYml0IGlu
IHRoZSBob3BlIG9mIHNwcmVhZGluZyB0aGUKKyAgIC8vIGJpdHMgb3V0IHNvbWV3aGF0LgorICAg
dmdfYXNzZXJ0KCFpc19EaUVwb2NoX0lOVkFMSUQoZXApKTsKKyAgIFVXb3JkIGhhc2ggPSBhIF4g
KFVXb3JkKShlcC5uIF4gUk9MMzIoZXAubiwgNSkgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBeIFJPTDMyKGVwLm4sIDEzKSBeIFJPTDMyKGVwLm4sIDE5KSk7CisgICBoYXNoICU9
IE5fU1lNX05BTUVfQ0FDSEU7CiAKLSAgIGlmIChVTkxJS0VMWShzZS0+c3ltX2F2bWEgIT0gYSB8
fCBzZS0+aXNUZXh0ICE9IGZpbmRUZXh0KSkgeworICAgU3ltX05hbWVfQ2FjaGVFbnQqIHNlID0g
JnN5bV9uYW1lX2NhY2hlW2hhc2hdOworCisgICBpZiAoVU5MSUtFTFkoc2UtPnN5bV9lcG9jaC5u
ICE9IGVwLm4gfHwgc2UtPnN5bV9hdm1hICE9IGEKKyAgICAgICAgICAgICAgICB8fCBzZS0+aXNU
ZXh0ICE9IGZpbmRUZXh0KSkgewogICAgICAgRGVidWdJbmZvKiBkaTsKICAgICAgIFdvcmQgICAg
ICAgc25vOwogCi0gICAgICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBhLCAmZGksICZzbm8sIGZpbmRU
ZXh0ICk7CisgICAgICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBlcCwgYSwgJmRpLCAmc25vLCBmaW5k
VGV4dCApOworICAgICAgc2UtPnN5bV9lcG9jaCA9IGVwOwogICAgICAgc2UtPnN5bV9hdm1hID0g
YTsKICAgICAgIHNlLT5pc1RleHQgPSBmaW5kVGV4dDsKICAgICAgIGlmIChkaSA9PSBOVUxMIHx8
IGEgPT0gMCkKQEAgLTE4NDYsMTIgKzIwNDMsMTIgQEAKIC8qIHBwYzY0YmUtbGludXggb25seTog
ZmluZCB0aGUgVE9DIHBvaW50ZXIgKFIyIHZhbHVlKSB0aGF0IHNob3VsZCBiZSBpbgogICAgZm9y
Y2UgYXQgdGhlIGVudHJ5IHBvaW50IGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIGNvbnRhaW5pbmcK
ICAgIGd1ZXN0X2NvZGVfYWRkci4gIFJldHVybnMgMCBpZiBub3Qga25vd24uICovCi1BZGRyIFZH
XyhnZXRfdG9jcHRyKSAoIEFkZHIgZ3Vlc3RfY29kZV9hZGRyICkKK0FkZHIgVkdfKGdldF90b2Nw
dHIpICggRGlFcG9jaCBlcCwgQWRkciBndWVzdF9jb2RlX2FkZHIgKQogewogI2lmIGRlZmluZWQo
VkdBX3BwYzY0YmUpIHx8IGRlZmluZWQoVkdBX3BwYzY0bGUpCiAgICBEZWJ1Z0luZm8qIHNpOwog
ICAgV29yZCAgICAgICBzbm87Ci0gICBzZWFyY2hfYWxsX3N5bXRhYnMgKCBndWVzdF9jb2RlX2Fk
ZHIsIAorICAgc2VhcmNoX2FsbF9zeW10YWJzICggZXAsIGd1ZXN0X2NvZGVfYWRkciwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmc2ksICZzbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBU
cnVlLypjb25zaWRlciB0ZXh0IHN5bWJvbHMgb25seSovICk7CiAgICBpZiAoc2kgPT0gTlVMTCkg
CkBAIC0xODY3LDExICsyMDY0LDExIEBACiAgICBtYXRjaCBhbnl3aGVyZSBpbiBmdW5jdGlvbiwg
YnV0IGRvbid0IHNob3cgb2Zmc2V0cy4KICAgIE5PVEU6IFNlZSBJTVBPUlRBTlQgQ09NTUVOVCBh
Ym92ZSBhYm91dCBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwCiAgICBpbiBwdWJfdG9vbF9kZWJ1
Z2luZm8uaCAqLwotQm9vbCBWR18oZ2V0X2ZubmFtZSkgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiog
YnVmICkKK0Jvb2wgVkdfKGdldF9mbm5hbWUpICggRGlFcG9jaCBlcCwgQWRkciBhLCBjb25zdCBI
Q2hhcioqIGJ1ZiApCiB7CiAgICByZXR1cm4gZ2V0X3N5bV9uYW1lICggLypDKystZGVtYW5nbGUq
L1RydWUsIC8qWi1kZW1hbmdsZSovVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJl
bG93LW1haW4tcmVuYW1pbmcqL1RydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYSwgYnVm
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGVwLCBhLCBidWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyptYXRjaF9hbnl3aGVyZV9pbl9mdW4qL1RydWUsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKnRleHQgc3ltKi9UcnVlLApAQCAtMTg4MiwxMSArMjA3OSwxMSBAQAogICAgbWF0Y2ggYW55
d2hlcmUgaW4gZnVuY3Rpb24sIGFuZCBzaG93IG9mZnNldCBpZiBub256ZXJvLgogICAgTk9URTog
U2VlIElNUE9SVEFOVCBDT01NRU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBvd25lcnNo
aXAKICAgIGluIHB1Yl90b29sX2RlYnVnaW5mby5oICovCi1Cb29sIFZHXyhnZXRfZm5uYW1lX3df
b2Zmc2V0KSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQorQm9vbCBWR18oZ2V0X2ZubmFt
ZV93X29mZnNldCkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVmICkKIHsK
ICAgIHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwgLypaLWRlbWFu
Z2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWlu
ZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZXAsIGEsIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNo
X2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93
IG9mZnNldD8qL1RydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0ZXh0IHN5bSovVHJ1
ZSwKQEAgLTE4OTgsNyArMjA5NSw3IEBACiAgICBhbmQgZG9uJ3Qgc2hvdyBvZmZzZXRzLgogICAg
Tk9URTogU2VlIElNUE9SVEFOVCBDT01NRU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBv
d25lcnNoaXAKICAgIGluIHB1Yl90b29sX2RlYnVnaW5mby5oICovCi1Cb29sIFZHXyhnZXRfZm5u
YW1lX2lmX2VudHJ5KSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKQorQm9vbCBWR18oZ2V0
X2ZubmFtZV9pZl9lbnRyeSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVm
ICkKIHsKICAgIGNvbnN0IEhDaGFyICp0bXA7CiAgICBCb29sIHJlczsKQEAgLTE5MDUsNyArMjEw
Miw3IEBACiAKICAgIHJlcyA9ICBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovVHJ1ZSwg
LypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFp
bi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCAmdG1wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGVwLCBhLCAmdG1wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qbWF0Y2hfYW55d2hlcmVfaW5fZnVuKi9GYWxzZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgLypzaG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8q
dGV4dCBzeW0qL1RydWUsCkBAIC0xOTIwLDExICsyMTE3LDExIEBACiAgICBvZmZzZXRzLgogICAg
Tk9URTogU2VlIElNUE9SVEFOVCBDT01NRU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBv
d25lcnNoaXAKICAgIGluIHB1Yl90b29sX2RlYnVnaW5mby5oICAqLwotQm9vbCBWR18oZ2V0X2Zu
bmFtZV9yYXcpICggQWRkciBhLCBjb25zdCBIQ2hhcioqIGJ1ZiApCitCb29sIFZHXyhnZXRfZm5u
YW1lX3JhdykgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogYnVmICkKIHsKICAg
IHJldHVybiBnZXRfc3ltX25hbWUgKCAvKkMrKy1kZW1hbmdsZSovRmFsc2UsIC8qWi1kZW1hbmds
ZSovRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5n
Ki9GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhLCBidWYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZXAsIGEsIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNo
X2FueXdoZXJlX2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93
IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW0qL1Ry
dWUsCkBAIC0xOTM2LDE0ICsyMTMzLDIyIEBACiAgICBkb24ndCBzaG93IG9mZnNldHMuCiAgICBO
T1RFOiBTZWUgSU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93
bmVyc2hpcAogICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggKi8KLUJvb2wgVkdfKGdldF9mbm5h
bWVfbm9fY3h4X2RlbWFuZ2xlKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYsCitCb29sIFZH
XyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0
IEhDaGFyKiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW5sSVBDdXJzb3IqIGlpcGMgKQogeworICAgLy8gRklYTUUgSlJTIDI4IEp1bmUgMjAxNzog
c2hvdWxkIHdlIHVzZSAnaWlwYy0+ZGktPmZpcnN0X2Vwb2NoJworICAgLy8gaW5zdGVhZCBvZiAn
ZXAnIGluIHRoZSBjYWxsIHRvIGdldF9zeW1fbmFtZT8gIEF0IGxlYXN0IGxldCdzCisgICAvLyBh
c3NlcnQgdGhhdCB0aGUgRGVidWdJbmZvIHRoYXQgJ2lpcGMnIG1lbnRpb25zIGlzIHZhbGlkIGZv
ciB0aGUKKyAgIC8vIHNwZWNpZmllZCBlcG9jaC4KKyAgIGlmIChpaXBjKSB7CisgICAgICB2Z19h
c3NlcnQoaXNfRElfdmFsaWRfZm9yX2Vwb2NoKGlpcGMtPmRpLCBlcCkpOworICAgfQorCiAgICBp
ZiAoaXNfYm90dG9tKGlpcGMpKSB7CiAgICAgICAvLyBBdCB0aGUgYm90dG9tICh0b3dhcmRzIG1h
aW4pLCB3ZSBkZXNjcmliZSB0aGUgZm4gYXQgZWlwLgogICAgICAgcmV0dXJuIGdldF9zeW1fbmFt
ZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xlKi9UcnVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qYmVsb3ctbWFpbi1yZW5hbWluZyovVHJ1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXAsIGEsIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1hdGNoX2FueXdoZXJl
X2luX2Z1biovVHJ1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG93IG9mZnNl
dD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdGV4dCBzeW0qL1RydWUs
CkBAIC0xOTYyLDEzICsyMTY3LDEzIEBACiAvKiBtaXBzLWxpbnV4IG9ubHk6IGZpbmQgdGhlIG9m
ZnNldCBvZiBjdXJyZW50IGFkZHJlc3MuIFRoaXMgaXMgbmVlZGVkIGZvciAKICAgIHN0YWNrIHVu
d2luZGluZyBmb3IgTUlQUy4KICovCi1Cb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rp
b24pKCBBZGRyIGEsCitCb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBEaUVw
b2NoIGVwLCBBZGRyIGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
Kk9VVCovUHRyZGlmZlQqIG9mZnNldCApCiB7CiAgICBjb25zdCBIQ2hhciAqZm5uYW1lOwogICAg
cmV0dXJuIGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xl
Ki9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKmJlbG93LW1haW4tcmVuYW1pbmcq
L0ZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGEsICZmbm5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZXAsIGEsICZmbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
LyptYXRjaF9hbnl3aGVyZV9pbl9zeW0qL1RydWUsIAogICAgICAgICAgICAgICAgICAgICAgICAg
IC8qc2hvdyBvZmZzZXQ/Ki9GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRleHQg
c3ltKi9UcnVlLApAQCAtMjAwMCwxMyArMjIwNSwxMyBAQAogICAgfQogfQogCi1WZ19Gbk5hbWVL
aW5kIFZHXyhnZXRfZm5uYW1lX2tpbmRfZnJvbV9JUCkgKCBBZGRyIGlwICkKK1ZnX0ZuTmFtZUtp
bmQgVkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQKSAoIERpRXBvY2ggZXAsIEFkZHIgaXAgKQog
ewogICAgY29uc3QgSENoYXIgKmJ1ZjsKIAogICAgLy8gV2UgZG9uJ3QgZGVtYW5nbGUsIGJlY2F1
c2UgaXQncyBmYXN0ZXIgbm90IHRvLCBhbmQgdGhlIHNwZWNpYWwgbmFtZXMKICAgIC8vIHdlJ3Jl
IGxvb2tpbmcgZm9yIHdvbid0IGJlIG1hbmdsZWQuCi0gICBpZiAoVkdfKGdldF9mbm5hbWVfcmF3
KSAoIGlwLCAmYnVmICkpIHsKKyAgIGlmIChWR18oZ2V0X2ZubmFtZV9yYXcpICggZXAsIGlwLCAm
YnVmICkpIHsKIAogICAgICAgcmV0dXJuIFZHXyhnZXRfZm5uYW1lX2tpbmQpKGJ1Zik7CiAgICB9
IGVsc2UgewpAQCAtMjAxOSwxMyArMjIyNCwxMyBAQAogICAgQWxzbyBkYXRhX2FkZHIncyBvZmZz
ZXQgZnJvbSB0aGUgc3ltYm9sIHN0YXJ0IGlzIHB1dCBpbnRvICpvZmZzZXQuCiAgICBOT1RFOiBT
ZWUgSU1QT1JUQU5UIENPTU1FTlQgYWJvdmUgYWJvdXQgcGVyc2lzdGVuY2UgYW5kIG93bmVyc2hp
cAogICAgaW4gcHViX3Rvb2xfZGVidWdpbmZvLmggICovCi1Cb29sIFZHXyhnZXRfZGF0YXN5bV9h
bmRfb2Zmc2V0KSggQWRkciBkYXRhX2FkZHIsCitCb29sIFZHXyhnZXRfZGF0YXN5bV9hbmRfb2Zm
c2V0KSggRGlFcG9jaCBlcCwgQWRkciBkYXRhX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLypPVVQqL2NvbnN0IEhDaGFyKiogZG5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLypPVVQqL1B0cmRpZmZUKiBvZmZzZXQgKQogewogICAgcmV0dXJu
IGdldF9zeW1fbmFtZSAoIC8qQysrLWRlbWFuZ2xlKi9GYWxzZSwgLypaLWRlbWFuZ2xlKi9GYWxz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgLypiZWxvdy1tYWluLXJlbmFtaW5nKi9GYWxzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9hZGRyLCBkbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgZXAsIGRhdGFfYWRkciwgZG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8q
bWF0Y2hfYW55d2hlcmVfaW5fc3ltKi9UcnVlLCAKICAgICAgICAgICAgICAgICAgICAgICAgLypz
aG93IG9mZnNldD8qL0ZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAvKnRleHQgc3ltKi9G
YWxzZSwKQEAgLTIwMzgsNyArMjI0Myw3IEBACiAgICAoMSkgdGhlIERlYnVnSW5mbyBpdCBiZWxv
bmdzIHRvIGlzIG5vdCBkaXNjYXJkZWQKICAgICgyKSB0aGUgc2VnbWVudCBjb250YWluaW5nIHRo
ZSBhZGRyZXNzIGlzIG5vdCBtZXJnZWQgd2l0aCBhbm90aGVyIHNlZ21lbnQKICovCi1Cb29sIFZH
XyhnZXRfb2JqbmFtZSkgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogb2JqbmFtZSApCitCb29sIFZH
XyhnZXRfb2JqbmFtZSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogb2JqbmFt
ZSApCiB7CiAgICBEZWJ1Z0luZm8qIGRpOwogICAgY29uc3QgTlNlZ21lbnQgKnNlZzsKQEAgLTIw
NDcsNiArMjI1Miw4IEBACiAgICAvKiBMb29rIGluIHRoZSBkZWJ1Z0luZm9fbGlzdCB0byBmaW5k
IHRoZSBuYW1lLiAgSW4gbW9zdCBjYXNlcyB3ZQogICAgICAgZXhwZWN0IHRoaXMgdG8gcHJvZHVj
ZSBhIHJlc3VsdC4gKi8KICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsgZGkgIT0gTlVMTDsg
ZGkgPSBkaS0+bmV4dCkgeworICAgICAgaWYgKCFpc19ESV92YWxpZF9mb3JfZXBvY2goZGksIGVw
KSkKKyAgICAgICAgIGNvbnRpbnVlOwogICAgICAgaWYgKGRpLT50ZXh0X3ByZXNlbnQKICAgICAg
ICAgICAmJiBkaS0+dGV4dF9zaXplID4gMAogICAgICAgICAgICYmIGRpLT50ZXh0X2F2bWEgPD0g
YSAKQEAgLTIwNTksOCArMjI2NiwxMyBAQAogICAgICAgdGhlIGRlYnVnSW5mb19saXN0LCBhc2sg
dGhlIGFkZHJlc3Mgc3BhY2UgbWFuYWdlciB3aGV0aGVyIGl0CiAgICAgICBrbm93cyB0aGUgbmFt
ZSBvZiB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXBwaW5nLiAgVGhpcwogICAgICAg
YWxsb3dzIHVzIHRvIHByaW50IHRoZSBuYW1lcyBvZiBleGUvZGxsIGZpbGVzIGluIHRoZSBzdGFj
ayB0cmFjZQotICAgICAgd2hlbiBydW5uaW5nIHByb2dyYW1zIHVuZGVyIHdpbmUuICovCi0gICBp
ZiAoIChzZWcgPSBWR18oYW1fZmluZF9uc2VnbWVudCkoYSkpICE9IE5VTEwgCisgICAgICB3aGVu
IHJ1bm5pbmcgcHJvZ3JhbXMgdW5kZXIgd2luZS4KKworICAgICAgUmVzdHJpY3QgdGhpcyB0byB0
aGUgY2FzZSB3aGVyZSAnZXAnIGlzIHRoZSBjdXJyZW50IGVwb2NoLCB0aG91Z2gsIHNvCisgICAg
ICB0aGF0IHdlIGRvbid0IHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGVwb2NoIHdoZW4g
dGhlIGNhbGxlciB3YXMKKyAgICAgIGVucXVpcmluZyBhYm91dCBhIGRpZmZlcmVudCBvbmUuICov
CisgICBpZiAoIGVxX0RpRXBvY2goZXAsIFZHXyhjdXJyZW50X0RpRXBvY2gpKCkpCisgICAgICAg
ICYmIChzZWcgPSBWR18oYW1fZmluZF9uc2VnbWVudCkoYSkpICE9IE5VTEwgCiAgICAgICAgICYm
IChmaWxlbmFtZSA9IFZHXyhhbV9nZXRfZmlsZW5hbWUpKHNlZykpICE9IE5VTEwgKSB7CiAgICAg
ICAqb2JqbmFtZSA9IGZpbGVuYW1lOwogICAgICAgcmV0dXJuIFRydWU7CkBAIC0yMDcwLDEyICsy
MjgyLDE0IEBACiAKIC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0byBpdHMgRGVidWdJbmZvLiAgUmV0
dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4gIERvZXNuJ3QKICAgIHJlcXVpcmUgZGVidWcgaW5mby4g
Ki8KLURlYnVnSW5mbyogVkdfKGZpbmRfRGVidWdJbmZvKSAoIEFkZHIgYSApCitEZWJ1Z0luZm8q
IFZHXyhmaW5kX0RlYnVnSW5mbykgKCBEaUVwb2NoIGVwLCBBZGRyIGEgKQogewogICAgc3RhdGlj
IFVXb3JkIG5fc2VhcmNoID0gMDsKICAgIERlYnVnSW5mbyogZGk7CiAgICBuX3NlYXJjaCsrOwog
ICAgZm9yIChkaSA9IGRlYnVnSW5mb19saXN0OyBkaSAhPSBOVUxMOyBkaSA9IGRpLT5uZXh0KSB7
CisgICAgICBpZiAoIWlzX0RJX3ZhbGlkX2Zvcl9lcG9jaChkaSwgZXApKQorICAgICAgICAgY29u
dGludWU7CiAgICAgICBpZiAoZGktPnRleHRfcHJlc2VudAogICAgICAgICAgICYmIGRpLT50ZXh0
X3NpemUgPiAwCiAgICAgICAgICAgJiYgZGktPnRleHRfYXZtYSA8PSBhIApAQCAtMjA5MSwxMyAr
MjMwNSwxMyBAQAogLyogTWFwIGEgY29kZSBhZGRyZXNzIHRvIGEgZmlsZW5hbWUuICBSZXR1cm5z
IFRydWUgaWYgc3VjY2Vzc2Z1bC4gVGhlCiAgICByZXR1cm5lZCBzdHJpbmcgaXMgcGVyc2lzdGVu
dCBhcyBsb25nIGFzIHRoZSBEZWJ1Z0luZm8gdG8gd2hpY2ggaXQKICAgIGJlbG9uZ3MgaXMgbm90
IGRpc2NhcmRlZC4gKi8KLUJvb2wgVkdfKGdldF9maWxlbmFtZSkoIEFkZHIgYSwgY29uc3QgSENo
YXIqKiBmaWxlbmFtZSApCitCb29sIFZHXyhnZXRfZmlsZW5hbWUpKCBEaUVwb2NoIGVwLCBBZGRy
IGEsIGNvbnN0IEhDaGFyKiogZmlsZW5hbWUgKQogewogICAgRGVidWdJbmZvKiBzaTsKICAgIFdv
cmQgICAgICAgbG9jbm87CiAgICBVSW50ICAgICAgIGZuZG5faXg7CiAKLSAgIHNlYXJjaF9hbGxf
bG9jdGFicyAoIGEsICZzaSwgJmxvY25vICk7CisgICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBlcCwg
YSwgJnNpLCAmbG9jbm8gKTsKICAgIGlmIChzaSA9PSBOVUxMKSAKICAgICAgIHJldHVybiBGYWxz
ZTsKICAgIGZuZG5faXggPSBNTF8oZm5kbl9peCkgKHNpLCBsb2Nubyk7CkBAIC0yMTA2LDExICsy
MzIwLDExIEBACiB9CiAKIC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0byBhIGxpbmUgbnVtYmVyLiAg
UmV0dXJucyBUcnVlIGlmIHN1Y2Nlc3NmdWwuICovCi1Cb29sIFZHXyhnZXRfbGluZW51bSkoIEFk
ZHIgYSwgVUludCogbGluZW5vICkKK0Jvb2wgVkdfKGdldF9saW5lbnVtKSggRGlFcG9jaCBlcCwg
QWRkciBhLCBVSW50KiBsaW5lbm8gKQogewogICAgRGVidWdJbmZvKiBzaTsKICAgIFdvcmQgICAg
ICAgbG9jbm87Ci0gICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyApOworICAg
c2VhcmNoX2FsbF9sb2N0YWJzICggZXAsIGEsICZzaSwgJmxvY25vICk7CiAgICBpZiAoc2kgPT0g
TlVMTCkgCiAgICAgICByZXR1cm4gRmFsc2U7CiAgICAqbGluZW5vID0gc2ktPmxvY3RhYltsb2Nu
b10ubGluZW5vOwpAQCAtMjEyMSw3ICsyMzM1LDcgQEAKIC8qIE1hcCBhIGNvZGUgYWRkcmVzcyB0
byBhIGZpbGVuYW1lL2xpbmUgbnVtYmVyL2RpciBuYW1lIGluZm8uCiAgICBTZWUgcHJvdG90eXBl
IGZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBiZWhhdmlvdXIuCiAqLwotQm9vbCBWR18oZ2V0
X2ZpbGVuYW1lX2xpbmVudW0pICggQWRkciBhLCAKK0Jvb2wgVkdfKGdldF9maWxlbmFtZV9saW5l
bnVtKSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKk9VVCovY29uc3QgSENoYXIqKiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qT1VUKi9jb25zdCBIQ2hhcioqIGRpcm5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGluZW5vICkKQEAgLTIxMzAsNyArMjM0
NCw3IEBACiAgICBXb3JkICAgICAgIGxvY25vOwogICAgVUludCAgICAgICBmbmRuX2l4OwogCi0g
ICBzZWFyY2hfYWxsX2xvY3RhYnMgKCBhLCAmc2ksICZsb2NubyApOworICAgc2VhcmNoX2FsbF9s
b2N0YWJzICggZXAsIGEsICZzaSwgJmxvY25vICk7CiAgICBpZiAoc2kgPT0gTlVMTCkgewogICAg
ICAgaWYgKGRpcm5hbWUpIHsKICAgICAgICAgICpkaXJuYW1lID0gIiI7CkBAIC0yMTU5LDcgKzIz
NzMsOCBAQAogICAgVGhlcmVmb3JlIHNwZWNpZnkgIioiIHRvIHNlYXJjaCBhbGwgdGhlIG9iamVj
dHMuICBPbiBUT0MtYWZmbGljdGVkCiAgICBwbGF0Zm9ybXMsIGEgc3ltYm9sIGlzIGRlZW1lZCB0
byBiZSBmb3VuZCBvbmx5IGlmIGl0IGhhcyBhIG5vbnplcm8KICAgIFRPQyBwb2ludGVyLiAgKi8K
LUJvb2wgVkdfKGxvb2t1cF9zeW1ib2xfU0xPVykoY29uc3QgSENoYXIqIHNvcGF0dCwgY29uc3Qg
SENoYXIqIG5hbWUsCitCb29sIFZHXyhsb29rdXBfc3ltYm9sX1NMT1cpKERpRXBvY2ggZXAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhDaGFyKiBzb3BhdHQsIGNvbnN0IEhD
aGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1BVk1BcyogYXZtYXMp
CiB7CiAgICBCb29sICAgICByZXF1aXJlX3BUb2MgPSBGYWxzZTsKQEAgLTIxNzIsNiArMjM4Nyw4
IEBACiAgICBmb3IgKHNpID0gZGVidWdJbmZvX2xpc3Q7IHNpOyBzaSA9IHNpLT5uZXh0KSB7CiAg
ICAgICBpZiAoZGVidWcpCiAgICAgICAgICBWR18ocHJpbnRmKSgibG9va3VwX3N5bWJvbF9TTE9X
OiBjb25zaWRlcmluZyAlc1xuIiwgc2ktPnNvbmFtZSk7CisgICAgICBpZiAoIWlzX0RJX3ZhbGlk
X2Zvcl9lcG9jaChzaSwgZXApKQorICAgICAgICAgY29udGludWU7CiAgICAgICBpZiAoIVZHXyhz
dHJpbmdfbWF0Y2gpKHNvcGF0dCwgc2ktPnNvbmFtZSkpIHsKICAgICAgICAgIGlmIChkZWJ1ZykK
ICAgICAgICAgICAgIFZHXyhwcmludGYpKCIgLi4uIHNraXBcbiIpOwpAQCAtMjI1NCw3ICsyNDcx
LDcgQEAKICAgIHJldHVybiBuOwogfQogCi1jb25zdCBIQ2hhciogVkdfKGRlc2NyaWJlX0lQKShB
ZGRyIGVpcCwgY29uc3QgSW5sSVBDdXJzb3IgKmlpcGMpCitjb25zdCBIQ2hhciogVkdfKGRlc2Ny
aWJlX0lQKShEaUVwb2NoIGVwLCBBZGRyIGVpcCwgY29uc3QgSW5sSVBDdXJzb3IgKmlpcGMpCiB7
CiAgICBzdGF0aWMgSENoYXIgKmJ1ZiA9IE5VTEw7CiAgICBzdGF0aWMgU2l6ZVQgYnVmc2l6ID0g
MDsKQEAgLTIyNjcsNyArMjQ4NCwxMCBAQAogICAgSENoYXIgaWJ1Zls1MF07ICAgLy8gbGFyZ2Ug
ZW5vdWdoCiAgICBTaXplVCBuID0gMDsKIAotICAgdmdfYXNzZXJ0ICghaWlwYyB8fCBpaXBjLT5l
aXAgPT0gZWlwKTsKKyAgIC8vIEFuIElubElQQ3Vyc29yIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmUg
c3BlY2lmaWMgRGVidWdJbmZvLiAgU28gaWYKKyAgIC8vIGl0IGV4aXN0cywgbWFrZSBzdXJlIHRo
YXQgaXQgaXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgRGlFcG9jaC4KKyAgIHZnX2Fzc2VydCAo
IWlpcGMKKyAgICAgICAgICAgICAgfHwgKGlzX0RJX3ZhbGlkX2Zvcl9lcG9jaChpaXBjLT5kaSwg
ZXApICYmIGlpcGMtPmVpcCA9PSBlaXApKTsKIAogICAgY29uc3QgSENoYXIgKmJ1Zl9mbjsKICAg
IGNvbnN0IEhDaGFyICpidWZfb2JqOwpAQCAtMjI4Miw4ICsyNTAyLDggQEAKICAgIGlmIChpc19i
b3R0b20oaWlwYykpIHsKICAgICAgIC8vIEF0IHRoZSBib3R0b20gKHRvd2FyZHMgbWFpbiksIHdl
IGRlc2NyaWJlIHRoZSBmbiBhdCBlaXAuCiAgICAgICBrbm93X2ZubmFtZSA9IFZHXyhjbG9fc3lt
X29mZnNldHMpCi0gICAgICAgICAgICAgICAgICAgID8gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQp
IChlaXAsICZidWZfZm4pCi0gICAgICAgICAgICAgICAgICAgIDogVkdfKGdldF9mbm5hbWUpIChl
aXAsICZidWZfZm4pOworICAgICAgICAgICAgICAgICAgICA/IFZHXyhnZXRfZm5uYW1lX3dfb2Zm
c2V0KSAoZXAsIGVpcCwgJmJ1Zl9mbikKKyAgICAgICAgICAgICAgICAgICAgOiBWR18oZ2V0X2Zu
bmFtZSkgKGVwLCBlaXAsICZidWZfZm4pOwogICAgfSBlbHNlIHsKICAgICAgIGNvbnN0IERpSW5s
TG9jICpuZXh0X2lubCA9IGlpcGMgJiYgaWlwYy0+bmV4dF9pbmx0YWIgPj0gMAogICAgICAgICAg
PyAmIGlpcGMtPmRpLT5pbmx0YWJbaWlwYy0+bmV4dF9pbmx0YWJdCkBAIC0yMzAxLDEyICsyNTIx
LDEyIEBACiAgICAgICAvLyA/Pz8gQ3VycmVudGx5IG5ldmVyIHNob3dpbmcgYW4gb2Zmc2V0Lgog
ICAgfQogCi0gICBrbm93X29iam5hbWUgPSBWR18oZ2V0X29iam5hbWUpKGVpcCwgJmJ1Zl9vYmop
OworICAga25vd19vYmpuYW1lID0gVkdfKGdldF9vYmpuYW1lKShlcCwgZWlwLCAmYnVmX29iaik7
CiAKICAgIGlmIChpc190b3AoaWlwYykpIHsKICAgICAgIC8vIFRoZSBzb3VyY2UgZm9yIHRoZSBo
aWdoZXN0IGxldmVsIGlzIGluIHRoZSBsb2N0YWIgZW50cnkuCiAgICAgICBrbm93X3NyY2xvYyAg
PSBWR18oZ2V0X2ZpbGVuYW1lX2xpbmVudW0pKAotICAgICAgICAgICAgICAgICAgICAgICAgZWlw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVwLCBlaXAsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgJmJ1Zl9zcmNsb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zl9kaXJuYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVubyAKQEAgLTI0NTksNiArMjY3OSwyMCBA
QAogLyotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0tLSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogTm90ZSB0aGF0IHRoZSBDRkkgbWFjaGluZXJ5
IHBlcnRhaW5zIHRvIHVud2luZGluZyB0aGUgc3RhY2sgInJpZ2h0IG5vdyIuCisgICBUaGVyZSBp
cyBubyBzdXBwb3J0IGZvciB1bndpbmRpbmcgc3RhY2sgaW1hZ2VzIG9idGFpbmVkIGZyb20gc29t
ZSB0aW1lIGluCisgICB0aGUgcGFzdC4gIFRoYXQgbWVhbnMgdGhhdDoKKworICAgKDEpIFdlIG9u
bHkgZGVhbCB3aXRoIENGSSBmcm9tIERlYnVnSW5mb3MgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZSBj
dXJyZW50CisgICAgICAgZGVidWdpbmZvIGVwb2NoLiAgVW5saWtlIGluIHRoZSByZXN0IG9mIHRo
ZSBmaWxlLCB0aGVyZSBpcyBubworICAgICAgIGVwb2NoLWF3YXJlbmVzcy4KKworICAgKDIpIFdl
IGFzc3VtZSB0aGF0IHRoZSBDRkkgY2FjaGUgd2lsbCBiZSBpbnZhbGlkYXRlZCBldmVyeSB0aW1l
IHRoZSB0aGUKKyAgICAgICBlcG9jaCBjaGFuZ2VzLiAgVGhpcyBpcyBkb25lIGJ5IGVuc3VyaW5n
IChpbiB0aGUgZmlsZSBhYm92ZSkgdGhhdAorICAgICAgIGV2ZXJ5IGNhbGwgdG8gYWR2YW5jZV9j
dXJyZW50X0RpRXBvY2ggaGFzIGEgY2FsbCB0bworICAgICAgIGNhY2hlc19faW52YWxpZGF0ZSBh
bG9uZ3NpZGUgaXQuCisqLworCiAvKiBHYXRoZXIgdXAgYWxsIHRoZSBjb25zdGFudCBwaWVjZXMg
b2YgaW5mbyBuZWVkZWQgdG8gZXZhbHVhdGUKICAgIGEgQ2ZpRXhwciBpbnRvIG9uZSBjb252ZW5p
ZW50IHN0cnVjdC4gKi8KIHR5cGVkZWYKQEAgLTI1NzksNiArMjgxMyw5IEBACiAgICAqY2ZzaV9t
UCB0byB0aGUgY2ZzaV9tIHBvaW50ZXIgaW4gdGhhdCBEZWJ1Z0luZm8ncyBjZnNpX21fcG9vbC4K
IAogICAgSWYgbm90IGZvdW5kLCBzZXQgKmRpUCB0byAoRGVidWdJbmZvKikxIGFuZCAqY2ZzaV9t
UCB0byB6ZXJvLgorCisgICBQZXIgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGlzIHNlY3Rpb24s
IHdlIG9ubHkgbG9vayBmb3IgQ0ZJIGluCisgICBEZWJ1Z0luZm9zIHRoYXQgYXJlIHZhbGlkIGZv
ciB0aGUgY3VycmVudCBlcG9jaC4KICovCiBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCiBzdGF0
aWMgdm9pZCBmaW5kX0RpQ2ZTSSAoIC8qT1VUKi9EZWJ1Z0luZm8qKiBkaVAsIApAQCAtMjU5NCwx
MCArMjgzMSwxNSBAQAogCiAgICBpZiAoMCkgVkdfKHByaW50ZikoInNlYXJjaCBmb3IgJSNseFxu
IiwgaXApOwogCisgICBEaUVwb2NoIGN1cnJfZXBvY2ggPSBWR18oY3VycmVudF9EaUVwb2NoKSgp
OworCiAgICBmb3IgKGRpID0gZGVidWdJbmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5l
eHQpIHsKICAgICAgIFdvcmQgajsKICAgICAgIG5fc3RlcHMrKzsKIAorICAgICAgaWYgKCFpc19E
SV92YWxpZF9mb3JfZXBvY2goZGksIGN1cnJfZXBvY2gpKQorICAgICAgICAgY29udGludWU7CisK
ICAgICAgIC8qIFVzZSB0aGUgcGVyLURlYnVnSW5mbyBzdW1tYXJ5IGFkZHJlc3MgcmFuZ2VzIHRv
IHNraXAKICAgICAgICAgIGluYXBwbGljYWJsZSBEZWJ1Z0luZm9zIHF1aWNrbHkuICovCiAgICAg
ICBpZiAoZGktPmNmc2lfdXNlZCA9PSAwKQpAQCAtMjYwNSw2ICsyODQ3LDExIEBACiAgICAgICBp
ZiAoaXAgPCBkaS0+Y2ZzaV9taW5hdm1hIHx8IGlwID4gZGktPmNmc2lfbWF4YXZtYSkKICAgICAg
ICAgIGNvbnRpbnVlOwogCisgICAgICAvLyBUaGlzIGRpIG11c3QgYmUgYWN0aXZlIChiZWNhdXNl
IHdlIGhhdmUgZXhwbGljaXRseSBjaG9zZW4gbm90IHRvCisgICAgICAvLyBhbGxvdyB1bndpbmRp
bmcgc3RhY2tzIHRoYXQgcGVydGFpbiB0byBzb21lIHBhc3QgZXBvY2gpLiAgSXQgY2FuJ3QKKyAg
ICAgIC8vIGJlIGFyY2hpdmVkIG9yIG5vdC15ZXQtYWN0aXZlLgorICAgICAgdmdfYXNzZXJ0KGlz
X0RlYnVnSW5mb19hY3RpdmUoZGkpKTsKKwogICAgICAgLyogSXQgbWlnaHQgYmUgaW4gdGhpcyBE
ZWJ1Z0luZm8uICBTZWFyY2ggaXQuICovCiAgICAgICBqID0gTUxfKHNlYXJjaF9vbmVfY2ZpdGFi
KSggZGksIGlwICk7CiAgICAgICB2Z19hc3NlcnQoaiA+PSAtMSAmJiBqIDwgKFdvcmQpZGktPmNm
c2lfdXNlZCk7CkBAIC0zMDMyLDYgKzMyNzksNyBAQAogQm9vbCBWR18odXNlX0ZQT19pbmZvKSAo
IC8qTU9EKi9BZGRyKiBpcFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypNT0QqL0FkZHIq
IHNwUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAvKk1PRCovQWRkciogZnBQLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIERpRXBvY2ggZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
QWRkciBtaW5fYWNjZXNzaWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIG1heF9h
Y2Nlc3NpYmxlICkKIHsKQEAgLTMwNDksNiArMzI5Nyw5IEBACiAgICBmb3IgKGRpID0gZGVidWdJ
bmZvX2xpc3Q7IGRpICE9IE5VTEw7IGRpID0gZGktPm5leHQpIHsKICAgICAgIG5fc3RlcHMrKzsK
IAorICAgICAgaWYgKCFpc19ESV92YWxpZF9mb3JfZXBvY2goZGksIGVwKSkKKyAgICAgICAgIGNv
bnRpbnVlOworCiAgICAgICAvKiBVc2UgdGhlIHBlci1EZWJ1Z0luZm8gc3VtbWFyeSBhZGRyZXNz
IHJhbmdlcyB0byBza2lwCiAgICAgICAgICBpbmFwcGxpY2FibGUgRGVidWdJbmZvcyBxdWlja2x5
LiAqLwogICAgICAgaWYgKGRpLT5mcG8gPT0gTlVMTCkKQEAgLTM1NTIsNiArMzgwMyw3IEBACiBz
dGF0aWMgCiBCb29sIGNvbnNpZGVyX3ZhcnNfaW5fZnJhbWUgKCAvKk1PRCovWEFycmF5KiAvKiBv
ZiBIQ2hhciAqLyBkbmFtZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk1PRCov
WEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEaUVwb2NoIGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciBkYXRh
X2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIGlwLCBBZGRyIHNwLCBB
ZGRyIGZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvd24gdG8gdXNlcjog
Ki8KQEAgLTM1NzAsNiArMzgyMiw4IEBACiAgICAvKiBmaXJzdCwgZmluZCB0aGUgRGVidWdJbmZv
IHRoYXQgcGVydGFpbnMgdG8gJ2lwJy4gKi8KICAgIGZvciAoZGkgPSBkZWJ1Z0luZm9fbGlzdDsg
ZGk7IGRpID0gZGktPm5leHQpIHsKICAgICAgIG5fc3RlcHMrKzsKKyAgICAgIGlmICghaXNfRElf
dmFsaWRfZm9yX2Vwb2NoKGRpLCBlcCkpCisgICAgICAgICBjb250aW51ZTsKICAgICAgIC8qIHRl
eHQgc2VnbWVudCBtaXNzaW5nPyB1bmxpa2VseSwgYnV0IGhhbmRsZSBpdCAuLiAqLwogICAgICAg
aWYgKCFkaS0+dGV4dF9wcmVzZW50IHx8IGRpLT50ZXh0X3NpemUgPT0gMCkKICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMzY4Nyw3ICszOTQxLDcgQEAKIEJvb2wgVkdfKGdldF9kYXRhX2Rlc2NyaXB0
aW9uKSggCiAgICAgICAgIC8qTU9EKi8gWEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTEsCiAg
ICAgICAgIC8qTU9EKi8gWEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTIsCi0gICAgICAgIEFk
ZHIgZGF0YV9hZGRyCisgICAgICAgIERpRXBvY2ggZXAsIEFkZHIgZGF0YV9hZGRyCiAgICAgICkK
IHsKICMgIGRlZmluZSBOX0ZSQU1FUyA4CkBAIC0zODA3LDcgKzQwNjEsNyBAQAogICAgdmdfYXNz
ZXJ0KG5fZnJhbWVzID49IDAgJiYgbl9mcmFtZXMgPD0gTl9GUkFNRVMpOwogICAgZm9yIChqID0g
MDsgaiA8IG5fZnJhbWVzOyBqKyspIHsKICAgICAgIGlmIChjb25zaWRlcl92YXJzX2luX2ZyYW1l
KCBkbmFtZTEsIGRuYW1lMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAsIGRhdGFfYWRkciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHNbal0sIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwc1tqXSwgZnBzW2pdLCB0aWQsIGogKSkgewogICAgICAg
ICAgenRlcm1fWEEoIGRuYW1lMSApOwpAQCAtMzgzNCw3ICs0MDg4LDcgQEAKICAgICAgICAgIGVx
dWl2YWxlbnQga2x1ZGdlLiAqLwogICAgICAgaWYgKGogPiAwIC8qIHRoaXMgaXMgYSBub24taW5u
ZXJtb3N0IGZyYW1lICovCiAgICAgICAgICAgJiYgY29uc2lkZXJfdmFyc19pbl9mcmFtZSggZG5h
bWUxLCBkbmFtZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9h
ZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLCBkYXRhX2FkZHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBzW2pdICsgMSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BzW2pdLCBmcHNbal0sIHRpZCwgaiAp
KSB7CiAgICAgICAgICB6dGVybV9YQSggZG5hbWUxICk7CkluZGV4OiBjb3JlZ3JpbmQvbV9kZWJ1
Z2luZm8vcHJpdl9zdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZGVidWdpbmZv
L3ByaXZfc3RvcmFnZS5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX2RlYnVnaW5m
by9wcml2X3N0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTg4LDYgKzU4OCwzNiBAQAogICAg
ICAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZC4gKi8KICAgIFVMb25nIGhhbmRsZTsKIAorICAgLyog
VGhlIHJhbmdlIG9mIGVwb2NocyBmb3Igd2hpY2ggdGhpcyBEZWJ1Z0luZm8gaXMgdmFsaWQuICBU
aGVzZSBhbHNvCisgICAgICBkaXZpZGUgdGhlIERlYnVnSW5mbydzIGxpZmV0aW1lIGludG8gdGhy
ZWUgcGFydHM6CisKKyAgICAgICgxKSBBbGxvY2F0ZWQ6IGJ1dCB3aXRoIG9ubHkgLmZzbSBob2xk
aW5nIHVzZWZ1bCBpbmZvIC0tIGluCisgICAgICAgICAgcGFydGljdWxhciwgbm90IHlldCBob2xk
aW5nIGFueSBkZWJ1ZyBpbmZvLgorICAgICAgICAgIC5maXJzdF9lcG9jaCA9PSBEZWJ1Z0luZm9F
cG9jaF9JTlZBTElECisgICAgICAgICAgLmxhc3RfZXBvY2ggID09IERlYnVnSW5mb0Vwb2NoX0lO
VkFMSUQKKworICAgICAgKDIpIEFjdGl2ZTogY29udGFpbmluZyBkZWJ1ZyBpbmZvLCBhbmQgY3Vy
cmVudC4KKyAgICAgICAgICAuZmlyc3RfZXBvY2ggIT0gRGVidWdJbmZvRXBvY2hfSU5WQUxJRAor
ICAgICAgICAgIC5sYXN0X2Vwb2NoICA9PSBEZWJ1Z0luZm9FcG9jaF9JTlZBTElECisKKyAgICAg
ICgzKSBBcmNoaXZlZDogY29udGFpbmluZyBkZWJ1ZyBpbmZvLCBidXQgbm8gbG9uZ2VyIGN1cnJl
bnQuCisgICAgICAgICAgLmZpcnN0X2Vwb2NoICE9IERlYnVnSW5mb0Vwb2NoX0lOVkFMSUQKKyAg
ICAgICAgICAubGFzdF9lcG9jaCAgIT0gRGVidWdJbmZvRXBvY2hfSU5WQUxJRAorCisgICAgICBT
dGF0ZSAoMikgY29ycmVzcG9uZHMgdG8gYW4gb2JqZWN0IHdoaWNoIGlzIGN1cnJlbnRseSBtYXBw
ZWQuICBXaGVuCisgICAgICB0aGUgb2JqZWN0IGlzIHVubWFwcGVkLCB3aGF0IGhhcHBlbnMgZGVw
ZW5kcyBvbiB0aGUgc2V0dGluZyBvZgorICAgICAgLS1rZWVwLWRlYnVnaW5mbzoKKyAgICAgIAor
ICAgICAgKiB3aGVuID1ubywgdGhlIERlYnVnSW5mbyBpcyByZW1vdmVkIGZyb20gZGVidWdJbmZv
X2xpc3QgYW5kCisgICAgICAgIGRlbGV0ZWQuCisKKyAgICAgICogd2hlbiA9eWVzLCB0aGUgRGVi
dWdJbmZvIGlzIHJldGFpbmVkIGluIGRlYnVnSW5mb19saXN0LCBidXQgaXRzCisgICAgICAgIC5s
YXN0X2Vwb2NoIGZpZWxkIGlzIGZpbGxlZCBpbiwgYW5kIGN1cnJlbnRfZXBvY2ggaXMgYWR2YW5j
ZWQuICBUaGlzCisgICAgICAgIGVmZmVjdGl2ZWx5IG1vdmVzIHRoZSBEZWJ1Z0luZm8gaW50byBz
dGF0ZSAoMykuCisgICAqLworICAgRGlFcG9jaCBmaXJzdF9lcG9jaDsKKyAgIERpRXBvY2ggbGFz
dF9lcG9jaDsKKwogICAgLyogVXNlZCBmb3IgZGVidWdnaW5nIG9ubHkgLSBpbmRpY2F0ZSB3aGF0
IHN0dWZmIHRvIGR1bXAgd2hpbHN0CiAgICAgICByZWFkaW5nIHN0dWZmIGludG8gdGhlIHNlZ2lu
Zm8uICBBcmUgY29tcHV0ZWQgYXMgZWFybHkgaW4gdGhlCiAgICAgICBsaWZldGltZSBvZiB0aGUg
RGVidWdJbmZvIGFzIHBvc3NpYmxlIC0tIGF0IHRoZSBwb2ludCB3aGVuIGl0IGlzCkluZGV4OiBj
b3JlZ3JpbmQvbV9lcnJvcm1nci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2Vycm9ybWdy
LmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fZXJyb3JtZ3IuYwkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDE2ICsxMzYsMTYgQEAKICAgIEludCBjb3VudDsKIAogICAgLy8gVGhlIHRv
b2wtc3BlY2lmaWMgcGFydAotICAgVGhyZWFkSWQgdGlkOyAgICAgICAgICAgLy8gSW5pdGlhbGlz
ZWQgYnkgY29yZQotICAgRXhlQ29udGV4dCogd2hlcmU7ICAgICAgLy8gSW5pdGlhbGlzZWQgYnkg
Y29yZQotICAgRXJyb3JLaW5kIGVraW5kOyAgICAgICAgLy8gVXNlZCBieSBBTEwuICBNdXN0IGJl
IGluIHRoZSByYW5nZSAoMC4uKQotICAgQWRkciBhZGRyOyAgICAgICAgICAgICAgLy8gVXNlZCBm
cmVxdWVudGx5Ci0gICBjb25zdCBIQ2hhciogc3RyaW5nOyAgICAvLyBVc2VkIGZyZXF1ZW50bHkK
LSAgIHZvaWQqIGV4dHJhOyAgICAgICAgICAgIC8vIEZvciBhbnkgdG9vbC1zcGVjaWZpYyBleHRy
YXMKKyAgIFRocmVhZElkIHRpZDsgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2VkIGJ5IGNvcmUK
KyAgIEV4ZUNvbnRleHRBbmRFcG9jaCB3aGVyZTsgIC8vIEluaXRpYWxpc2VkIGJ5IGNvcmUKKyAg
IEVycm9yS2luZCBla2luZDsgICAgICAgICAgIC8vIFVzZWQgYnkgQUxMLiAgTXVzdCBiZSBpbiB0
aGUgcmFuZ2UgKDAuLikKKyAgIEFkZHIgYWRkcjsgICAgICAgICAgICAgICAgIC8vIFVzZWQgZnJl
cXVlbnRseQorICAgY29uc3QgSENoYXIqIHN0cmluZzsgICAgICAgLy8gVXNlZCBmcmVxdWVudGx5
CisgICB2b2lkKiBleHRyYTsgICAgICAgICAgICAgICAvLyBGb3IgYW55IHRvb2wtc3BlY2lmaWMg
ZXh0cmFzCiB9OwogCiAKLUV4ZUNvbnRleHQqIFZHXyhnZXRfZXJyb3Jfd2hlcmUpICggY29uc3Qg
RXJyb3IqIGVyciApCitFeGVDb250ZXh0QW5kRXBvY2ggVkdfKGdldF9lcnJvcl93aGVyZSkgKCBj
b25zdCBFcnJvciogZXJyICkKIHsKICAgIHJldHVybiBlcnItPndoZXJlOwogfQpAQCAtMjkzLDcg
KzI5MywxMCBAQAogewogICAgaWYgKGUxLT5la2luZCAhPSBlMi0+ZWtpbmQpIAogICAgICAgcmV0
dXJuIEZhbHNlOwotICAgaWYgKCFWR18oZXFfRXhlQ29udGV4dCkocmVzLCBlMS0+d2hlcmUsIGUy
LT53aGVyZSkpCisgICAvLyBUaGlzIGNvbXBhcmlzb24gaWdub3JlcyB0aGUgZGVidWdpbmZvIGVw
b2NoLiAgUmVzdWx0IGlzIHRoYXQgd2UKKyAgIC8vIGNvdWxkIGNvbmNsdWRlIHRoaXMgZXJyb3Ig
aXMgdGhlIHNhbWUgYXMgb25lIGZyb20gc29tZSBvdGhlciBlcG9jaC4KKyAgIC8vIEkgZG9uJ3Qg
dGhpbmsgdGhhdCdzIGEgYmlnIGRlYWwgaW4gcHJhY3RpY2UuCisgICBpZiAoIVZHXyhlcV9FeGVD
b250ZXh0KShyZXMsIGUxLT53aGVyZS5lYywgZTItPndoZXJlLmVjKSkKICAgICAgIHJldHVybiBG
YWxzZTsKIAogICAgc3dpdGNoIChlMS0+ZWtpbmQpIHsKQEAgLTMyMSwxNSArMzI0LDE1IEBACiAq
LwogI2RlZmluZSBFUlJUWFRfTEVOICAgNDA5NgogCi1zdGF0aWMgdm9pZCBwcmludFN1cHBGb3JJ
cF9YTUwoVUludCBuLCBBZGRyIGlwLCB2b2lkKiB1dV9vcGFxdWUpCitzdGF0aWMgdm9pZCBwcmlu
dFN1cHBGb3JJcF9YTUwoVUludCBuLCBEaUVwb2NoIGVwLCBBZGRyIGlwLCB2b2lkKiB1dV9vcGFx
dWUpCiB7CiAgICBjb25zdCBIQ2hhciAqYnVmOwotICAgSW5sSVBDdXJzb3IqIGlpcGMgPSBWR18o
bmV3X0lJUEMpKGlwKTsKKyAgIElubElQQ3Vyc29yKiBpaXBjID0gVkdfKG5ld19JSVBDKShlcCwg
aXApOwogICAgZG8gewotICAgICAgaWYgKCBWR18oZ2V0X2ZubmFtZV9ub19jeHhfZGVtYW5nbGUp
IChpcCwgJmJ1ZiwgaWlwYykgKSB7CisgICAgICBpZiAoIFZHXyhnZXRfZm5uYW1lX25vX2N4eF9k
ZW1hbmdsZSkgKGVwLCBpcCwgJmJ1ZiwgaWlwYykgKSB7CiAgICAgICAgICBWR18ocHJpbnRmX3ht
bCkoIiAgICA8c2ZyYW1lPiA8ZnVuPiVwUzwvZnVuPiA8L3NmcmFtZT5cbiIsIGJ1Zik7CiAgICAg
ICB9IGVsc2UKLSAgICAgIGlmICggVkdfKGdldF9vYmpuYW1lKShpcCwgJmJ1ZikgKSB7CisgICAg
ICBpZiAoIFZHXyhnZXRfb2JqbmFtZSkoZXAsIGlwLCAmYnVmKSApIHsKICAgICAgICAgIFZHXyhw
cmludGZfeG1sKSgiICAgIDxzZnJhbWU+IDxvYmo+JXBTPC9vYmo+IDwvc2ZyYW1lPlxuIiwgYnVm
KTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgICA8c2ZyYW1l
PiA8b2JqPio8L29iaj4gPC9zZnJhbWU+XG4iKTsKQEAgLTMzOCwxNiArMzQxLDE2IEBACiAgICBW
R18oZGVsZXRlX0lJUEMpKGlpcGMpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludFN1cHBGb3JJcF9u
b25YTUwoVUludCBuLCBBZGRyIGlwLCB2b2lkKiB0ZXh0VikKK3N0YXRpYyB2b2lkIHByaW50U3Vw
cEZvcklwX25vblhNTChVSW50IG4sIERpRXBvY2ggZXAsIEFkZHIgaXAsIHZvaWQqIHRleHRWKQog
ewogICAgY29uc3QgSENoYXIgKmJ1ZjsKICAgIFhBcnJheSogLyogb2YgSENoYXIgKi8gdGV4dCA9
IChYQXJyYXkqKXRleHRWOwotICAgSW5sSVBDdXJzb3IqIGlpcGMgPSBWR18obmV3X0lJUEMpKGlw
KTsKKyAgIElubElQQ3Vyc29yKiBpaXBjID0gVkdfKG5ld19JSVBDKShlcCwgaXApOwogICAgZG8g
ewotICAgICAgaWYgKCBWR18oZ2V0X2ZubmFtZV9ub19jeHhfZGVtYW5nbGUpIChpcCwgJmJ1Ziwg
aWlwYykgKSB7CisgICAgICBpZiAoIFZHXyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKGVw
LCBpcCwgJmJ1ZiwgaWlwYykgKSB7CiAgICAgICAgICBWR18oeGFwcmludGYpKHRleHQsICIgICBm
dW46JXNcbiIsIGJ1Zik7CiAgICAgICB9IGVsc2UKLSAgICAgIGlmICggVkdfKGdldF9vYmpuYW1l
KShpcCwgJmJ1ZikgKSB7CisgICAgICBpZiAoIFZHXyhnZXRfb2JqbmFtZSkoZXAsIGlwLCAmYnVm
KSApIHsKICAgICAgICAgIFZHXyh4YXByaW50ZikodGV4dCwgIiAgIG9iajolc1xuIiwgYnVmKTsK
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBWR18oeGFwcmludGYpKHRleHQsICIgICBvYmo6Klxu
Iik7CkBAIC0zNjEsNyArMzY0LDcgQEAKIHN0YXRpYyB2b2lkIGdlbl9zdXBwcmVzc2lvbihjb25z
dCBFcnJvciogZXJyKQogewogICAgY29uc3QgSENoYXIqIG5hbWU7Ci0gICBFeGVDb250ZXh0KiBl
YzsKKyAgIEV4ZUNvbnRleHRBbmRFcG9jaCBlY2U7CiAgICBYQXJyYXkqIC8qIEhDaGFyICovIHRl
eHQ7CiAKICAgIGNvbnN0IEhDaGFyKiBkdW1teV9uYW1lID0gImluc2VydF9hX3N1cHByZXNzaW9u
X25hbWVfaGVyZSI7CkBAIC0zNjgsOCArMzcxLDggQEAKIAogICAgdmdfYXNzZXJ0KGVycik7CiAK
LSAgIGVjID0gVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKTsKLSAgIHZnX2Fzc2VydChlYyk7Cisg
ICBlY2UgPSBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpOworICAgdmdfYXNzZXJ0KGVjZS5lYyk7
CiAKICAgIG5hbWUgPSBWR19URElDVF9DQUxMKHRvb2xfZ2V0X2Vycm9yX25hbWUsIGVycik7CiAg
ICBpZiAoTlVMTCA9PSBuYW1lKSB7CkBAIC00MDgsMTIgKzQxMSwxMiBAQAogICAgICAgVkdfKHhh
cHJpbnRmKSh0ZXh0LCAiICAgJXNcbiIsIHh0cmEpOwogCiAgICAvLyBQcmludCBzdGFjayB0cmFj
ZSBlbGVtZW50cwotICAgVUludCBuX2lwcyA9IFZHXyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZWMp
OworICAgVUludCBuX2lwcyA9IFZHXyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZWNlLmVjKTsKICAg
IHZnX2Fzc2VydChuX2lwcyA+IDApOwogICAgdmdfYXNzZXJ0KG5faXBzIDw9IFZHX0RFRVBFU1Rf
QkFDS1RSQUNFKTsKICAgIFZHXyhhcHBseV9TdGFja1RyYWNlKShwcmludFN1cHBGb3JJcF9ub25Y
TUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkoZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQsIGVjZS5lcG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWR18o
Z2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkoZWNlLmVjKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBuX2lwcyk7CiAKICAgIFZHXyh4YXByaW50ZikodGV4dCwgIn1cbiIpOwpAQCAtNDQxLDkg
KzQ0NCw5IEBACiAKICAgICAgIC8vIFByaW50IHN0YWNrIHRyYWNlIGVsZW1lbnRzCiAgICAgICBW
R18oYXBwbHlfU3RhY2tUcmFjZSkocHJpbnRTdXBwRm9ySXBfWE1MLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGdldF9F
eGVDb250ZXh0X1N0YWNrVHJhY2UpKGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
R18oZ2V0X0V4ZUNvbnRleHRfbl9pcHMpKGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCwgZWNlLmVwb2NoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZHXyhnZXRf
RXhlQ29udGV4dF9TdGFja1RyYWNlKShlY2UuZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZHXyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZWNlLmVjKSk7CiAKICAgICAgIC8vIEFuZCBu
b3cgdGhlIGNkYXRhIGJpdAogICAgICAgLy8gWFhYIEZJWE1FISAgcHJvcGVybHkgaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIHRoZSByYXcgdGV4dApAQCAtNjM3LDcgKzY0MCw3IEBACiAvKiBDb25zdHJ1
Y3QgYW4gZXJyb3IgKi8KIHN0YXRpYwogdm9pZCBjb25zdHJ1Y3RfZXJyb3IgKCBFcnJvciogZXJy
LCBUaHJlYWRJZCB0aWQsIEVycm9yS2luZCBla2luZCwgQWRkciBhLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBIQ2hhciogcywgdm9pZCogZXh0cmEsIEV4ZUNvbnRleHQqIHdoZXJlICkK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSENoYXIqIHMsIHZvaWQqIGV4dHJhLCBFeGVD
b250ZXh0QW5kRXBvY2ggd2hlcmUgKQogewogICAgLyogRE8gTk9UIE1BS0UgdW5pcXVlX2NvdW50
ZXIgTk9OLVNUQVRJQyAqLwogICAgc3RhdGljIFVJbnQgdW5pcXVlX2NvdW50ZXIgPSAwOwpAQCAt
NjUwLDEwICs2NTMsNyBAQAogICAgZXJyLT5zdXBwICAgICA9IE5VTEw7CiAgICBlcnItPmNvdW50
ICAgID0gMTsKICAgIGVyci0+dGlkICAgICAgPSB0aWQ7Ci0gICBpZiAoTlVMTCA9PSB3aGVyZSkK
LSAgICAgZXJyLT53aGVyZSA9IFZHXyhyZWNvcmRfRXhlQ29udGV4dCkoIHRpZCwgMCApOwotICAg
ZWxzZQotICAgICAgZXJyLT53aGVyZSA9IHdoZXJlOworICAgZXJyLT53aGVyZSAgICA9IHdoZXJl
OwogCiAgICAvKiBUb29sLXJlbGV2YW50IHBhcnRzICovCiAgICBlcnItPmVraW5kICA9IGVraW5k
OwpAQCAtNzQ0LDcgKzc0NCwxMCBAQAogICAgfQogCiAgICAvKiBCdWlsZCBvdXJzZWx2ZXMgdGhl
IGVycm9yICovCi0gICBjb25zdHJ1Y3RfZXJyb3IgKCAmZXJyLCB0aWQsIGVraW5kLCBhLCBzLCBl
eHRyYSwgTlVMTCApOworICAgeyBFeGVDb250ZXh0QW5kRXBvY2ggZWNlCisgICAgICAgID0gVkdf
KHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKCBWR18ocmVjb3JkX0V4ZUNvbnRleHQpKCB0aWQs
IDAgKSApOworICAgICAgY29uc3RydWN0X2Vycm9yICggJmVyciwgdGlkLCBla2luZCwgYSwgcywg
ZXh0cmEsIGVjZSApOworICAgfQogCiAgICAvKiBGaXJzdCwgc2VlIGlmIHdlJ3ZlIGdvdCBhbiBl
cnJvciByZWNvcmQgbWF0Y2hpbmcgdGhpcyBvbmUuICovCiAgICBlbV9lcnJsaXN0X3NlYXJjaGVz
Kys7CkBAIC04NTMsNyArODU2LDggQEAKICAgIEJvb2wgJ2NvdW50X2Vycm9yJyBkaWN0YXRlcyB3
aGV0aGVyIHRvIGNvdW50IHRoZSBlcnJvciBpbiBuX2VycnNfZm91bmQuCiAqLwogQm9vbCBWR18o
dW5pcXVlX2Vycm9yKSAoIFRocmVhZElkIHRpZCwgRXJyb3JLaW5kIGVraW5kLCBBZGRyIGEsIGNv
bnN0IEhDaGFyKiBzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGV4dHJhLCBFeGVD
b250ZXh0KiB3aGVyZSwgQm9vbCBwcmludF9lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkKiBleHRyYSwgRXhlQ29udGV4dEFuZEVwb2NoIHdoZXJlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIEJvb2wgcHJpbnRfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQm9v
bCBhbGxvd19kYl9hdHRhY2gsIEJvb2wgY291bnRfZXJyb3IgKQogewogICAgRXJyb3IgZXJyOwpA
QCAtMTAxNiw3ICsxMDIwLDcgQEAKICAgICAgIHZnX2Fzc2VydCghIHhtbCk7CiAKICAgICAgIGlm
ICgoaSsxID09IFZHXyhjbG9fZHVtcF9lcnJvcikpKSB7Ci0gICAgICAgICBTdGFja1RyYWNlIGlw
cyA9IFZHXyhnZXRfRXhlQ29udGV4dF9TdGFja1RyYWNlKShwX21pbi0+d2hlcmUpOworICAgICAg
ICAgU3RhY2tUcmFjZSBpcHMgPSBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkocF9taW4t
PndoZXJlLmVjKTsKICAgICAgICAgIFZHXyh0cmFuc2xhdGUpICggMCAvKiBkdW1teSBUaHJlYWRJ
ZDsgaXJyZWxldmFudCBkdWUgdG8gZGVidWdnaW5nKi8sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlwc1swXSwgLypkZWJ1Z2dpbmcqL1RydWUsIDB4RkUvKnZlcmJvc2l0eSovLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKmJic19kb25lKi8wLApAQCAtMTUwMCw2ICsxNTA0LDcgQEAK
ICAgIGFsbG9jYXRpb25zIGFuZCB0aGUgbnIgb2YgZGVidWdpbmZvIHNlYXJjaC4gKi8KIHR5cGVk
ZWYKICAgIHN0cnVjdCB7CisgICAgICBEaUVwb2NoIGVwb2NoOyAgLy8gdXNlZCB0byBpbnRlcnBy
ZXQgLmlwcwogICAgICAgU3RhY2tUcmFjZSBpcHM7IC8vIHN0YWNrIHRyYWNlIHdlIGFyZSBsYXpp
bHkgY29tcGxldGluZy4KICAgICAgIFVXb3JkIG5faXBzOyAvLyBuciBvZiBlbGVtZW50cyBpbiBp
cHMuCiAKQEAgLTE1OTUsOSArMTYwMCwxMSBAQAogICAgICAgICAgICAgICAgICAgIHN1LT5zbmFt
ZSwKICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBzdS0+
c25hbWVfbGluZW5vKTsKLSAgICAgIH0gZWxzZQorICAgICAgfSBlbHNlIHsKICAgICAgICAgIFZH
XyhkbXNnKSgiZXJyb3JtZ3IgbWF0Y2hpbmcgZW5kIG5vIHN1cHByZXNzaW9uIG1hdGNoZWQ6XG4i
KTsKLSAgICAgIFZHXyhwcF9TdGFja1RyYWNlKSAoaXAyZm8tPmlwcywgaXAyZm8tPm5faXBzKTsK
KyAgICAgIH0KKyAgICAgIC8vIEpSUyAyNyBKdWx5IDIwMTc6IGlzIGl0IE9LIHRvIHVzZSB0aGUg
Y3VycmVudCBlcG9jaCBoZXJlPworICAgICAgVkdfKHBwX1N0YWNrVHJhY2UpIChpcDJmby0+ZXBv
Y2gsIGlwMmZvLT5pcHMsIGlwMmZvLT5uX2lwcyk7CiAgICAgICBwcF9pcDJmbyhpcDJmbyk7CiAg
ICB9CiAgICBpZiAoaXAyZm8tPm5fb2Zmc2V0c19wZXJfaXApIFZHXyhmcmVlKShpcDJmby0+bl9v
ZmZzZXRzX3Blcl9pcCk7CkBAIC0xNjYwLDcgKzE2NjcsOCBAQAogICAgICAgICAgLy8gdXAgY29t
cGFyaW5nICJtYWxsb2MiIGluIHRoZSBzdXBwcmVzc2lvbiBhZ2FpbnN0CiAgICAgICAgICAvLyAi
X3ZnclpVX2xpYmNaZHNvWmFfbWFsbG9jIiBpbiB0aGUgYmFja3RyYWNlLCBhbmQgdGhlCiAgICAg
ICAgICAvLyB0d28gb2YgdGhlbSBuZWVkIHRvIGJlIG1hZGUgdG8gbWF0Y2guCi0gICAgICAgICBp
ZiAoIVZHXyhnZXRfZm5uYW1lX25vX2N4eF9kZW1hbmdsZSkoaXAyZm8tPmlwc1tpeElucHV0XSwK
KyAgICAgICAgIGlmICghVkdfKGdldF9mbm5hbWVfbm9fY3h4X2RlbWFuZ2xlKShpcDJmby0+ZXBv
Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAyZm8t
Pmlwc1tpeElucHV0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmY2FsbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpKQogICAgICAgICAgICAgY2FsbGVyID0gIj8/PyI7CkBAIC0xNjgxLDcgKzE2ODks
NyBAQAogICAgICAgICAgICAgbGFzdF9leHBhbmRfcG9zX2lwcyBpcyB0aGUgbGFzdCBvZmZzZXQg
aW4gZnVuL29iaiB3aGVyZQogICAgICAgICAgICAgaXBzW3Bvc19pcHNdIGhhcyBiZWVuIGV4cGFu
ZGVkLiAqLwogCi0gICAgICAgICBpZiAoIVZHXyhnZXRfb2JqbmFtZSkoaXAyZm8tPmlwc1twb3Nf
aXBzXSwgJmNhbGxlcikpCisgICAgICAgICBpZiAoIVZHXyhnZXRfb2JqbmFtZSkoaXAyZm8tPmVw
b2NoLCBpcDJmby0+aXBzW3Bvc19pcHNdLCAmY2FsbGVyKSkKICAgICAgICAgICAgIGNhbGxlciA9
ICI/Pz8iOwogCiAgICAgICAgICAvLyBIYXZlIGFsbCBpbmxpbmVkIGNhbGxzIHBvaW50aW5nIGF0
IHRoaXMgb2JqZWN0IG5hbWUKQEAgLTE3NTEsNyArMTc1OSw3IEBACiAgICAgICAgICBjb25zdCBB
ZGRyIElQID0gaXAyZm8tPmlwc1tpcDJmby0+bl9pcHNfZXhwYW5kZWRdOwogICAgICAgICAgSW5s
SVBDdXJzb3IgKmlpcGM7CiAKLSAgICAgICAgIGlpcGMgPSBWR18obmV3X0lJUEMpKElQKTsKKyAg
ICAgICAgIGlpcGMgPSBWR18obmV3X0lJUEMpKGlwMmZvLT5lcG9jaCwgSVApOwogICAgICAgICAg
Ly8gVGhlIG9ubHkgdGhpbmcgd2UgcmVhbGx5IG5lZWQgaXMgdGhlIG5yIG9mIGlubGluZWQgZm4g
Y2FsbHMKICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIElQIHdlIHdpbGwgZXhwYW5k
LgogICAgICAgICAgLy8gSG93ZXZlciwgY29tcHV0aW5nIHRoaXMgaXMgbW9zdGx5IHRoZSBzYW1l
IGFzIGZpbmRpbmcKQEAgLTE3NjAsNyArMTc2OCw3IEBACiAgICAgICAgICAgICBjb25zdCBIQ2hh
ciAqY2FsbGVyOwogICAgICAgICAgICAgZ3Jvd19vZmZzZXRzKGlwMmZvLCBpcDJmby0+bl9leHBh
bmRlZCsxKTsKICAgICAgICAgICAgIGlwMmZvLT5mdW5fb2Zmc2V0c1tpcDJmby0+bl9leHBhbmRl
ZF0gPSBpcDJmby0+bmFtZXNfZnJlZTsKLSAgICAgICAgICAgIGlmICghVkdfKGdldF9mbm5hbWVf
bm9fY3h4X2RlbWFuZ2xlKShJUCwgCisgICAgICAgICAgICBpZiAoIVZHXyhnZXRfZm5uYW1lX25v
X2N4eF9kZW1hbmdsZSkoaXAyZm8tPmVwb2NoLCBJUCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbGxlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaXBjKSkKICAgICAgICAgICAgICAgIGNhbGxl
ciA9ICI/Pz8iOwpAQCAtMTc4OCwxOCArMTc5NiwxOCBAQAogICAgfQogfQogCi1zdGF0aWMgQm9v
bCBoYXZlSW5wdXRJbnBDICh2b2lkKiBpbnB1dENvbXBsZXRlciwgVVdvcmQgaXhJbnB1dCApCitz
dGF0aWMgQm9vbCBoYXZlSW5wdXRJbnBDICh2b2lkKiBpbnB1dENvbXBsZXRlclYsIFVXb3JkIGl4
SW5wdXQgKQogewotICAgSVB0b0Z1bk9yT2JqQ29tcGxldGVyKiBpcDJmbyA9IGlucHV0Q29tcGxl
dGVyOworICAgSVB0b0Z1bk9yT2JqQ29tcGxldGVyKiBpcDJmbyA9IChJUHRvRnVuT3JPYmpDb21w
bGV0ZXIqKWlucHV0Q29tcGxldGVyVjsKICAgIGV4cGFuZElucHV0KGlwMmZvLCBpeElucHV0KTsK
ICAgIHJldHVybiBpeElucHV0IDwgaXAyZm8tPm5fZXhwYW5kZWQ7CiB9CiAKIHN0YXRpYyBCb29s
IHN1cHBfcGF0dEVRaW5wICggY29uc3Qgdm9pZCogc3VwcGxvY1YsIGNvbnN0IHZvaWQqIGFkZHJW
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBpbnB1dENvbXBsZXRlciwgVVdv
cmQgaXhJbnB1dCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGlucHV0Q29t
cGxldGVyViwgVVdvcmQgaXhJbnB1dCApCiB7Ci0gICBjb25zdCBTdXBwTG9jKiBzdXBwbG9jID0g
c3VwcGxvY1Y7IC8qIFBBVFRFUk4gKi8KLSAgIElQdG9GdW5Pck9iakNvbXBsZXRlciogaXAyZm8g
PSBpbnB1dENvbXBsZXRlcjsKKyAgIGNvbnN0IFN1cHBMb2MqIHN1cHBsb2MgPSAoY29uc3QgU3Vw
cExvYyopc3VwcGxvY1Y7IC8qIFBBVFRFUk4gKi8KKyAgIElQdG9GdW5Pck9iakNvbXBsZXRlciog
aXAyZm8gPSAoSVB0b0Z1bk9yT2JqQ29tcGxldGVyKilpbnB1dENvbXBsZXRlclY7CiAgICBIQ2hh
ciogZnVub2JqX25hbWU7IC8vIEZ1biBvciBPYmogbmFtZS4KICAgIEJvb2wgcmV0OwogCkBAIC0x
OTI2LDggKzE5MzQsOSBAQAogICAgZW1fc3VwcGxpc3Rfc2VhcmNoZXMrKzsKIAogICAgLyogUHJl
cGFyZSB0aGUgbGF6eSBpbnB1dCBjb21wbGV0ZXIuICovCi0gICBpcDJmby5pcHMgPSBWR18oZ2V0
X0V4ZUNvbnRleHRfU3RhY2tUcmFjZSkoZXJyLT53aGVyZSk7Ci0gICBpcDJmby5uX2lwcyA9IFZH
XyhnZXRfRXhlQ29udGV4dF9uX2lwcykoZXJyLT53aGVyZSk7CisgICBpcDJmby5lcG9jaCA9IGVy
ci0+d2hlcmUuZXBvY2g7CisgICBpcDJmby5pcHMgPSBWR18oZ2V0X0V4ZUNvbnRleHRfU3RhY2tU
cmFjZSkoZXJyLT53aGVyZS5lYyk7CisgICBpcDJmby5uX2lwcyA9IFZHXyhnZXRfRXhlQ29udGV4
dF9uX2lwcykoZXJyLT53aGVyZS5lYyk7CiAgICBpcDJmby5uX2lwc19leHBhbmRlZCA9IDA7CiAg
ICBpcDJmby5uX2V4cGFuZGVkID0gMDsKICAgIGlwMmZvLnN6X29mZnNldHMgPSAwOwpJbmRleDog
Y29yZWdyaW5kL21fZXhlY29udGV4dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2V4ZWNv
bnRleHQuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9leGVjb250ZXh0LmMJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qLS0tIEV4cG9y
dGVkIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KKy8q
LS0tIEV4ZUNvbnRleHQgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIEV4ZUNvbnRleHQqIHJlY29yZF9FeGVDb250ZXh0X3dy
azIgKCBjb25zdCBBZGRyKiBpcHMsIFVJbnQgbl9pcHMgKTsKQEAgLTE2OSw3ICsxNjksOSBAQAog
ICAgICAgICAgZm9yIChlYyA9IGVjX2h0YWJbaV07IGVjOyBlYyA9IGVjLT5jaGFpbikgewogICAg
ICAgICAgICAgVkdfKG1lc3NhZ2UpKFZnX0RlYnVnTXNnLCAiICAgZXhlY3R4OiBzdGFja3RyYWNl
IGVjdSAldSBuX2lwcyAldVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBlYy0+ZWN1LCBl
Yy0+bl9pcHMpOwotICAgICAgICAgICAgVkdfKHBwX1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+
bl9pcHMgKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIEpSUyAyNyBKdWx5IDIwMTc6IGlzIGEgZmFr
ZSBlcG9jaCBoZXJlIE9LPworICAgICAgICAgICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50X0Rp
RXBvY2gpKCk7CisgICAgICAgICAgICBWR18ocHBfU3RhY2tUcmFjZSkoIGVwLCBlYy0+aXBzLCBl
Yy0+bl9pcHMgKTsKICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIFZHXyhtZXNzYWdlKShWZ19E
ZWJ1Z01zZywgCkBAIC0yMDIsMTMgKzIwNCw2IEBACiB9CiAKIAotLyogUHJpbnQgYW4gRXhlQ29u
dGV4dC4gKi8KLXZvaWQgVkdfKHBwX0V4ZUNvbnRleHQpICggRXhlQ29udGV4dCogZWMgKQotewot
ICAgVkdfKHBwX1N0YWNrVHJhY2UpKCBlYy0+aXBzLCBlYy0+bl9pcHMgKTsKLX0KLQotCiAvKiBD
b21wYXJlIHR3byBFeGVDb250ZXh0cy4gIE51bWJlciBvZiBjYWxsZXJzIGNvbnNpZGVyZWQgZGVw
ZW5kcyBvbiByZXMuICovCiBCb29sIFZHXyhlcV9FeGVDb250ZXh0KSAoIFZnUmVzIHJlcywgY29u
c3QgRXhlQ29udGV4dCogZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4ZUNv
bnRleHQqIGUyICkKQEAgLTU0NCwxMiArNTM5LDQ4IEBACiAgICByZXR1cm4gcmVjb3JkX0V4ZUNv
bnRleHRfd3JrMihpcHMsIG5faXBzKTsKIH0KIAotRXhlQ29udGV4dCogVkdfKG51bGxfRXhlQ29u
dGV4dCkgKHZvaWQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIEV4ZUNvbnRleHRBbmRFcG9jaCBmdW5jdGlv
bnMuICAgICAgICAgICAgICAgICAgICAgICAgLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworRXhlQ29udGV4dEFu
ZEVwb2NoIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKSggRXhlQ29udGV4dCogZWMgKQog
eworICAgRXhlQ29udGV4dEFuZEVwb2NoIGVjZTsKKyAgIGVjZS5lYyAgICA9IGVjOworICAgZWNl
LmVwb2NoID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKyAgIHJldHVybiBlY2U7Cit9CisKK0V4
ZUNvbnRleHRBbmRFcG9jaCBWR18oaW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpICggdm9pZCAp
Cit7CisgICBFeGVDb250ZXh0QW5kRXBvY2ggZWNlOworICAgZWNlLmVjICAgICAgPSBOVUxMLypp
bnZhbGlkIEV4ZUNvbnRleHQqLzsKKyAgIGVjZS5lcG9jaC5uID0gMC8qaW52YWxpZCBlcG9jaCov
OworICAgcmV0dXJuIGVjZTsKK30KKworCit2b2lkIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gp
ICggRXhlQ29udGV4dEFuZEVwb2NoIGVjZSApCit7CisgICBWR18ocHBfU3RhY2tUcmFjZSkoIGVj
ZS5lcG9jaCwgZWNlLmVjLT5pcHMsIGVjZS5lYy0+bl9pcHMgKTsKK30KKworRXhlQ29udGV4dEFu
ZEVwb2NoIFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCB2b2lkICkKK3sKICAgIGluaXRf
RXhlQ29udGV4dF9zdG9yYWdlKCk7Ci0gICByZXR1cm4gbnVsbF9FeGVDb250ZXh0OworICAgRXhl
Q29udGV4dEFuZEVwb2NoIGVjZQorICAgICAgPSBta19FeGVDb250ZXh0QW5kRXBvY2gobnVsbF9F
eGVDb250ZXh0LCBWR18oY3VycmVudF9EaUVwb2NoKSgpKTsKKyAgIHJldHVybiBlY2U7CiB9CiAK
K0Jvb2wgVkdfKGlzX251bGxfRXhlQ29udGV4dEFuZEVwb2NoKSggRXhlQ29udGV4dEFuZEVwb2No
IGVjZSApCit7CisgICBpbml0X0V4ZUNvbnRleHRfc3RvcmFnZSgpOworICAgcmV0dXJuIGVjZS5l
YyA9PSBudWxsX0V4ZUNvbnRleHQ7Cit9CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLSBlbmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leGVjb250ZXh0LmMg
LS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpJbmRleDogY29yZWdyaW5kL21fZ2Ric2VydmVyL21fZ2Ri
c2VydmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fZ2Ric2VydmVyL21fZ2Ric2VydmVy
LmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fZ2Ric2VydmVyL21fZ2Ric2VydmVy
LmMJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxNCArMTQyLDE3IEBACiAgICBQdHJkaWZmVCBvZmZz
ZXQ7CiAgICBpZiAodyA9PSAyKSB3ID0gMDsKIAorICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAx
NzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3Vy
cmVudF9EaUVwb2NoKSgpOworCiAgICBpZiAoaXNfY29kZSkgewogICAgICAgY29uc3QgSENoYXIg
Km5hbWU7Ci0gICAgICBuYW1lID0gVkdfKGRlc2NyaWJlX0lQKSAoYWRkciwgTlVMTCk7CisgICAg
ICBuYW1lID0gVkdfKGRlc2NyaWJlX0lQKSAoZXAsIGFkZHIsIE5VTEwpOwogICAgICAgaWYgKGJ1
Zlt3XSkgVkdfKGZyZWUpKGJ1Zlt3XSk7CiAgICAgICBidWZbd10gPSBWR18oc3RyZHVwKSgiZ2Ri
c2VydmVyIHN5bSIsIG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgIGNvbnN0IEhDaGFyICpuYW1l
OwotICAgICAgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQpIChhZGRyLCAmbmFtZSwgJm9mZnNl
dCk7CisgICAgICBWR18oZ2V0X2RhdGFzeW1fYW5kX29mZnNldCkgKGVwLCBhZGRyLCAmbmFtZSwg
Jm9mZnNldCk7CiAgICAgICBpZiAoYnVmW3ddKSBWR18oZnJlZSkoYnVmW3ddKTsKICAgICAgIGJ1
Zlt3XSA9IFZHXyhzdHJkdXApKCJnZGJzZXJ2ZXIgc3ltIiwgbmFtZSk7CiAgICB9CkluZGV4OiBj
b3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvc2VydmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21f
Z2Ric2VydmVyL3NlcnZlci5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX2dkYnNl
cnZlci9zZXJ2ZXIuYwkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw5IEBACiAgICBpbnQg
ICBrd2RpZDsKICAgIGludCBpbnRfdmFsdWU7CiAKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5IDIw
MTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1
cnJlbnRfRGlFcG9jaCkoKTsKKwogICAgdmdfYXNzZXJ0IChpbml0aWFsX3ZhbGdyaW5kX3Npbmtf
c2F2ZWQpOwogCiAgICBzdHJjcHkgKHMsIG1vbik7CkBAIC0zMzQsNyArMzM3LDcgQEAKICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChob3N0dmlzaWJpbGl0eSkgewogICAgICAgICAgICAgY29uc3Qg
RGVidWdJbmZvICp0b29sZGkgCi0gICAgICAgICAgICAgICA9IFZHXyhmaW5kX0RlYnVnSW5mbykg
KChBZGRyKWhhbmRsZV9nZGJfdmFsZ3JpbmRfY29tbWFuZCk7CisgICAgICAgICAgICAgICA9IFZH
XyhmaW5kX0RlYnVnSW5mbykgKGVwLCAoQWRkciloYW5kbGVfZ2RiX3ZhbGdyaW5kX2NvbW1hbmQp
OwogICAgICAgICAgICAgLyogTm9ybWFsbHksIHdlIHNob3VsZCBhbHdheXMgZmluZCB0aGUgdG9v
bGRpLiBJbiBjYXNlIHdlCiAgICAgICAgICAgICAgICBkbyBub3QsIHN1Z2dlc3QgYSAnbGlrZWx5
IHNvbWV3aGF0IHdvcmtpbmcnIGFkZHJlc3M6ICovCiAgICAgICAgICAgICBjb25zdCBBZGRyIHRv
b2xfdGV4dF9zdGFydApAQCAtNDQyLDcgKzQ0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teV9zeiwgJnNzYXZlcHRyKSkgewogICAgICAg
ICAgICAgLy8gSWYgdG9vbCBwcm92aWRlcyBsb2NhdGlvbiBpbmZvcm1hdGlvbiwgdXNlIHRoYXQu
CiAgICAgICAgICAgICBpZiAoVkdfKG5lZWRzKS5pbmZvX2xvY2F0aW9uKSB7Ci0gICAgICAgICAg
ICAgICBWR19URElDVF9DQUxMKHRvb2xfaW5mb19sb2NhdGlvbiwgYWRkcmVzcyk7CisgICAgICAg
ICAgICAgICBWR19URElDVF9DQUxMKHRvb2xfaW5mb19sb2NhdGlvbiwgZXAsIGFkZHJlc3MpOwog
ICAgICAgICAgICAgfSAKICAgICAgICAgICAgIC8vIElmIHRvb2wgZG9lcyBub3QgcHJvdmlkZSBs
b2NhdGlvbiBpbmZvLCB1c2UgdGhlIGNvbW1vbiBvbmUuCiAgICAgICAgICAgICAvLyBBbHNvIHVz
ZSB0aGUgY29tbW9uIHRvIGNvbXBhcmUgd2l0aCB0b29sIHdoZW4gZGVidWcgbG9nIGlzIHNldC4K
QEAgLTQ0OSw3ICs0NTIsNyBAQAogICAgICAgICAgICAgaWYgKCFWR18obmVlZHMpLmluZm9fbG9j
YXRpb24gfHwgVkdfKGRlYnVnTG9nX2dldExldmVsKSgpID4gMCApIHsKICAgICAgICAgICAgICAg
IEFkZHJJbmZvIGFpOwogICAgICAgICAgICAgICAgYWkudGFnID0gQWRkcl9VbmRlc2NyaWJlZDsK
LSAgICAgICAgICAgICAgIFZHXyhkZXNjcmliZV9hZGRyKSAoYWRkcmVzcywgJmFpKTsKKyAgICAg
ICAgICAgICAgIFZHXyhkZXNjcmliZV9hZGRyKSAoZXAsIGFkZHJlc3MsICZhaSk7CiAgICAgICAg
ICAgICAgICBWR18ocHBfYWRkcmluZm8pIChhZGRyZXNzLCAmYWkpOwogICAgICAgICAgICAgICAg
VkdfKGNsZWFyX2FkZHJpbmZvKSAoJmFpKTsKICAgICAgICAgICAgIH0KSW5kZXg6IGNvcmVncmlu
ZC9tX2dkYnNlcnZlci90YXJnZXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9nZGJzZXJ2
ZXIvdGFyZ2V0LmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdyaW5kL21fZ2Ric2VydmVyL3Rh
cmdldC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDEwIEBACiBzdGF0aWMKIGNvbnN0
IEhDaGFyKiBzeW0gKEFkZHIgYWRkcikKIHsKLSAgIHJldHVybiBWR18oZGVzY3JpYmVfSVApIChh
ZGRyLCBOVUxMKTsKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5IDIwMTc6IEhBQ0shICBJcyB0aGlz
IGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsK
KworICAgcmV0dXJuIFZHXyhkZXNjcmliZV9JUCkgKGVwLCBhZGRyLCBOVUxMKTsKIH0KIAogVGhy
ZWFkSWQgdmdkYl9pbnRlcnJ1cHRlZF90aWQgPSAwOwpJbmRleDogY29yZWdyaW5kL21fZ2Ric2Vy
dmVyL3ZhbGdyaW5kLWxvdy1hcm0uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9nZGJzZXJ2
ZXIvdmFsZ3JpbmQtbG93LWFybS5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX2dk
YnNlcnZlci92YWxncmluZC1sb3ctYXJtLmMJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDks
MTIgQEAKICAgICAgIC8vIHRoZSBkZWJ1ZyBpbmZvIHdpdGggdGhlIGJpdDAgc2V0CiAgICAgICAv
LyAod2h5IGNhbid0IGRlYnVnIGluZm8gZG8gdGhhdCBmb3IgdXMgPz8/KQogICAgICAgLy8gKHdo
eSBpZiB0aGlzIGlzIGEgNCBieXRlcyB0aHVtYiBpbnN0cnVjdGlvbiA/Pz8pCi0gICAgICBpZiAo
VkdfKGdldF9mbm5hbWVfcmF3KSAocGMgfCAxLCAmZm5uYW1lKSkgewotICAgICAgICAgaWYgKFZH
Xyhsb29rdXBfc3ltYm9sX1NMT1cpKCAiKiIsIGZubmFtZSwgJmF2bWFzICkpIHsKKworICAgICAg
Ly8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgICAg
IGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworCisgICAgICBpZiAo
VkdfKGdldF9mbm5hbWVfcmF3KSAoZXAsIHBjIHwgMSwgJmZubmFtZSkpIHsKKyAgICAgICAgIGlm
IChWR18obG9va3VwX3N5bWJvbF9TTE9XKSggZXAsICIqIiwgZm5uYW1lLCAmYXZtYXMgKSkgewog
ICAgICAgICAgICAgZGxvZyAoMSwgImZubmFtZSAlcyBsb29rdXBzeW0gJXAgPT4gJXAgJXMuXG4i
LAogICAgICAgICAgICAgICAgICAgZm5uYW1lLCBDMnYoYXZtYXMubWFpbiksIEMydihwYyksCiAg
ICAgICAgICAgICAgICAgICAoYXZtYXMubWFpbiAmIDEgPyAidGh1bWIiIDogImFybSIpKTsKSW5k
ZXg6IGNvcmVncmluZC9tX2dkYnNlcnZlci92YWxncmluZC1sb3ctbWlwczMyLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY29yZWdyaW5kL21fZ2Ric2VydmVyL3ZhbGdyaW5kLWxvdy1taXBzMzIuYwkocmV2aXNp
b24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9nZGJzZXJ2ZXIvdmFsZ3JpbmQtbG93LW1pcHMzMi5j
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4LDExIEBACiAgICAvKiBNYWtlIHN1cmUgd2Ug
ZG9uJ3Qgc2NhbiBiYWNrIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50CiAgICAg
ICBmdW5jdGlvbiwgc2luY2Ugd2UgbWF5IGZldGNoIGNvbnN0YW50IGRhdGEgb3IgaW5zbnMgdGhh
dCBsb29rIGxpa2UKICAgICAgIGEganVtcC4gKi8KLSAgIGlmIChWR18oZ2V0X2luc3Rfb2Zmc2V0
X2luX2Z1bmN0aW9uKSAoYnBhZGRyLCAmb2Zmc2V0KSkgeworCisgICAvLyBGSVhNRSBKUlMgMjgg
SnVseSAyMDE3OiBIQUNLISAgSXMgdGhpcyBjb3JyZWN0PworICAgY29uc3QgRGlFcG9jaCBlcCA9
IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CisKKyAgIGlmIChWR18oZ2V0X2luc3Rfb2Zmc2V0X2lu
X2Z1bmN0aW9uKSAoZXAsIGJwYWRkciwgJm9mZnNldCkpIHsKICAgICAgIGZ1bmNfYWRkciA9IGJw
YWRkciAtIG9mZnNldDsKICAgICAgIGlmIChmdW5jX2FkZHIgPiBib3VuZGFyeSAmJiBmdW5jX2Fk
ZHIgPD0gYnBhZGRyKQogICAgICAgICAgYm91bmRhcnkgPSBmdW5jX2FkZHI7CkluZGV4OiBjb3Jl
Z3JpbmQvbV9nZGJzZXJ2ZXIvdmFsZ3JpbmQtbG93LW1pcHM2NC5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNv
cmVncmluZC9tX2dkYnNlcnZlci92YWxncmluZC1sb3ctbWlwczY0LmMJKHJldmlzaW9uIDE2NDY1
KQorKysgY29yZWdyaW5kL21fZ2Ric2VydmVyL3ZhbGdyaW5kLWxvdy1taXBzNjQuYwkod29ya2lu
ZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSwxMSBAQAogICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IHNj
YW4gYmFjayBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudAogICAgICAgZnVuY3Rp
b24sIHNpbmNlIHdlIG1heSBmZXRjaCBjb25zdGFudCBkYXRhIG9yIGluc25zIHRoYXQgbG9vayBs
aWtlCiAgICAgICBhIGp1bXAuICovCi0gICBpZiAoVkdfKGdldF9pbnN0X29mZnNldF9pbl9mdW5j
dGlvbikgKGJwYWRkciwgJm9mZnNldCkpIHsKKworICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAx
NzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3Vy
cmVudF9EaUVwb2NoKSgpOworCisgICBpZiAoVkdfKGdldF9pbnN0X29mZnNldF9pbl9mdW5jdGlv
bikgKGVwLCBicGFkZHIsICZvZmZzZXQpKSB7CiAgICAgICBmdW5jX2FkZHIgPSBicGFkZHIgLSBv
ZmZzZXQ7CiAgICAgICBpZiAoZnVuY19hZGRyID4gYm91bmRhcnkgJiYgZnVuY19hZGRyIDw9IGJw
YWRkcikKICAgICAgICAgIGJvdW5kYXJ5ID0gZnVuY19hZGRyOwpJbmRleDogY29yZWdyaW5kL21f
bGliY2Fzc2VydC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX2xpYmNhc3NlcnQuYwkocmV2
aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9saWJjYXNzZXJ0LmMJKHdvcmtpbmcgY29weSkK
QEAgLTM2OSw3ICszNjksNyBAQAogICAgICAgICAgKTsKICAgICAgIFZHXyhwcmludGYpKCJcbmhv
c3Qgc3RhY2t0cmFjZTpcbiIpOyAKICAgICAgIFZHXyhjbG9feG1sKSA9IEZhbHNlOwotICAgICAg
VkdfKHBwX1N0YWNrVHJhY2UpIChpcHMsIG5faXBzKTsKKyAgICAgIFZHXyhwcF9TdGFja1RyYWNl
KSAoVkdfKGN1cnJlbnRfRGlFcG9jaCkoKSwgaXBzLCBuX2lwcyk7CiAgICAgICBWR18oY2xvX3ht
bCkgPSBzYXZlX2Nsb194bWw7CiAgICB9CiAKSW5kZXg6IGNvcmVncmluZC9tX21haW4uYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjb3JlZ3JpbmQvbV9tYWluLmMJKHJldmlzaW9uIDE2NDY1KQorKysgY29yZWdy
aW5kL21fbWFpbi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDEwIEBACiAiICAgIC0t
ZXJyb3ItZXhpdGNvZGU9PG51bWJlcj4gZXhpdCBjb2RlIHRvIHJldHVybiBpZiBlcnJvcnMgZm91
bmQgWzA9ZGlzYWJsZV1cbiIKICIgICAgLS1lcnJvci1tYXJrZXJzPTxiZWdpbj4sPGVuZD4gYWRk
IGxpbmVzIHdpdGggYmVnaW4vZW5kIG1hcmtlcnMgYmVmb3JlL2FmdGVyXG4iCiAiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWFjaCBlcnJvciBvdXRwdXQgaW4gcGxhaW4gdGV4dCBtb2Rl
IFtub25lXVxuIgorIiAgICAtLWtlZXAtZGVidWdpbmZvPW5vfHllcyAgIEtlZXAgc3ltYm9scyBl
dGMgZm9yIHVubG9hZGVkIGNvZGUgW25vXVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRoaXMgYWxsb3dzIHN0YWNrIHRyYWNlcyBmb3IgbWVtb3J5IGxlYWtzIHRvXG4iCisiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29k
ZSB0aGF0IGhhcyBiZWVuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxjbG9z
ZSdkIChvciBzaW1pbGFyKVxuIgogIiAgICAtLXNob3ctYmVsb3ctbWFpbj1ub3x5ZXMgIGNvbnRp
bnVlIHN0YWNrIHRyYWNlcyBiZWxvdyBtYWluKCkgW25vXVxuIgogIiAgICAtLWRlZmF1bHQtc3Vw
cHJlc3Npb25zPXllc3xub1xuIgogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQg
ZGVmYXVsdCBzdXBwcmVzc2lvbnMgW3llc11cbiIKQEAgLTYyNiw2ICs2MzAsNyBAQAogICAgICAg
ZWxzZSBpZiBWR19CT09MX0NMTyhhcmcsICItLXJ1bi1saWJjLWZyZWVyZXMiLCBWR18oY2xvX3J1
bl9saWJjX2ZyZWVyZXMpKSB7fQogICAgICAgZWxzZSBpZiBWR19CT09MX0NMTyhhcmcsICItLXJ1
bi1jeHgtZnJlZXJlcyIsICBWR18oY2xvX3J1bl9jeHhfZnJlZXJlcykpIHt9CiAgICAgICBlbHNl
IGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tc2hvdy1iZWxvdy1tYWluIiwgIFZHXyhjbG9fc2hvd19i
ZWxvd19tYWluKSkge30KKyAgICAgIGVsc2UgaWYgVkdfQk9PTF9DTE8oYXJnLCAiLS1rZWVwLWRl
YnVnaW5mbyIsICAgVkdfKGNsb19rZWVwX2RlYnVnaW5mbykpIHt9CiAgICAgICBlbHNlIGlmIFZH
X0JPT0xfQ0xPKGFyZywgIi0tdGltZS1zdGFtcCIsICAgICAgIFZHXyhjbG9fdGltZV9zdGFtcCkp
IHt9CiAgICAgICBlbHNlIGlmIFZHX0JPT0xfQ0xPKGFyZywgIi0tdHJhY2stZmRzIiwgICAgICAg
IFZHXyhjbG9fdHJhY2tfZmRzKSkge30KICAgICAgIGVsc2UgaWYgVkdfQk9PTF9DTE8oYXJnLCAi
LS10cmFjZS1jaGlsZHJlbiIsICAgVkdfKGNsb190cmFjZV9jaGlsZHJlbikpIHt9CkluZGV4OiBj
b3JlZ3JpbmQvbV9vcHRpb25zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fb3B0aW9ucy5j
CShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX29wdGlvbnMuYwkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDYgKzEyOSw3IEBACiBCb29sICAgVkdfKGNsb19ydW5fY3h4X2ZyZWVyZXMpID0g
VHJ1ZTsKIEJvb2wgICBWR18oY2xvX3RyYWNrX2ZkcykgICAgICA9IEZhbHNlOwogQm9vbCAgIFZH
XyhjbG9fc2hvd19iZWxvd19tYWluKT0gRmFsc2U7CitCb29sICAgVkdfKGNsb19rZWVwX2RlYnVn
aW5mbykgPSBGYWxzZTsKIEJvb2wgICBWR18oY2xvX3Nob3dfZW13YXJucykgICA9IEZhbHNlOwog
V29yZCAgIFZHXyhjbG9fbWF4X3N0YWNrZnJhbWUpID0gMjAwMDAwMDsKIFVJbnQgICBWR18oY2xv
X21heF90aHJlYWRzKSAgICA9IE1BWF9USFJFQURTX0RFRkFVTFQ7CkluZGV4OiBjb3JlZ3JpbmQv
bV9yZWRpci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3JlZGlyLmMJKHJldmlzaW9uIDE2
NDY1KQorKysgY29yZWdyaW5kL21fcmVkaXIuYwkod29ya2luZyBjb3B5KQpAQCAtMTg1OSw4ICsx
ODU5LDkgQEAKIHsKICAgIEJvb2wgb2s7CiAgICBjb25zdCBIQ2hhciAqYnVmOwotIAotICAgb2sg
PSBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoYWN0LT5mcm9tX2FkZHIsICZidWYpOworCisgICBE
aUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsgCisgICBvayA9IFZHXyhnZXRfZm5u
YW1lX3dfb2Zmc2V0KShlcCwgYWN0LT5mcm9tX2FkZHIsICZidWYpOwogICAgaWYgKCFvaykgYnVm
ID0gIj8/PyI7CiAgICAvLyBTdGFzaCBhd2F5IG5hbWUxCiAgICBIQ2hhciBuYW1lMVtWR18oc3Ry
bGVuKShidWYpICsgMV07CkBAIC0xODY3LDcgKzE4NjgsNyBAQAogICAgVkdfKHN0cmNweSkobmFt
ZTEsIGJ1Zik7CiAKICAgIGNvbnN0IEhDaGFyICpuYW1lMjsKLSAgIG9rID0gVkdfKGdldF9mbm5h
bWVfd19vZmZzZXQpKGFjdC0+dG9fYWRkciwgJm5hbWUyKTsKKyAgIG9rID0gVkdfKGdldF9mbm5h
bWVfd19vZmZzZXQpKGVwLCBhY3QtPnRvX2FkZHIsICZuYW1lMik7CiAgICBpZiAoIW9rKSBuYW1l
MiA9ICI/Pz8iOwogCiAgICBWR18obWVzc2FnZSkoVmdfRGVidWdNc2csICIlczB4JTA4bHggKCUt
MjBzKSAlcy0+ICglMDRkLiVkKSAweCUwOGx4ICVzXG4iLCAKSW5kZXg6IGNvcmVncmluZC9tX3Ni
cHJvZmlsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3NicHJvZmlsZS5jCShyZXZpc2lv
biAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3NicHJvZmlsZS5jCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw2ICs3NCw5IEBACiAKICAgIFZHXyhwcmludGYpKCJUb3RhbCBzY29yZSA9ICUnbGx1XG5cbiIs
IHNjb3JlX3RvdGFsKTsKIAorICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogdGhpcyBpcyBw
cm9iYWJseSBub3QgcmlnaHQgaW4gZ2VuZXJhbAorICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50
X0RpRXBvY2gpKCk7CisKICAgIC8qIFByaW50IGFuIGluaXRpYWwgcGVyLWJsb2NrIHN1bW1hcnku
ICovCiAgICBWR18ocHJpbnRmKSgicmFuayAgLS0tY3VtdWxhdGl2ZS0tLSAgICAgIC0tLS0tc2Vs
Zi0tLS0tXG4iKTsKICAgIHNjb3JlX2N1bXVsID0gMDsKQEAgLTg0LDcgKzg3LDcgQEAKICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICBjb25zdCBIQ2hhciAqbmFtZTsKLSAgICAgIFZHXyhnZXRf
Zm5uYW1lX3dfb2Zmc2V0KSh0b3BzW3JdLmFkZHIsICZuYW1lKTsKKyAgICAgIFZHXyhnZXRfZm5u
YW1lX3dfb2Zmc2V0KShlcCwgdG9wc1tyXS5hZGRyLCAmbmFtZSk7CiAKICAgICAgIHNjb3JlX2hl
cmUgPSB0b3BzW3JdLnNjb3JlOwogICAgICAgc2NvcmVfY3VtdWwgKz0gc2NvcmVfaGVyZTsKQEAg
LTEyMyw3ICsxMjYsNyBAQAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgIGNvbnN0
IEhDaGFyICpuYW1lOwotICAgICAgICAgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKHRvcHNbcl0u
YWRkciwgJm5hbWUpOworICAgICAgICAgVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKGVwLCB0b3Bz
W3JdLmFkZHIsICZuYW1lKTsKIAogICAgICAgICAgc2NvcmVfaGVyZSA9IHRvcHNbcl0uc2NvcmU7
CiAgICAgICAgICBzY29yZV9jdW11bCArPSBzY29yZV9oZXJlOwpAQCAtMTU5LDcgKzE2Miw3IEBA
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgY29uc3QgSENoYXIgKm5hbWU7Ci0g
ICAgICAgICBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkodG9wc1tyXS5hZGRyLCAmbmFtZSk7Cisg
ICAgICAgICBWR18oZ2V0X2ZubmFtZV93X29mZnNldCkoZXAsIHRvcHNbcl0uYWRkciwgJm5hbWUp
OwogCiAgICAgICAgICBzY29yZV9oZXJlID0gdG9wc1tyXS5zY29yZTsKIApJbmRleDogY29yZWdy
aW5kL21fc2NoZWR1bGVyL3NjaGVkdWxlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3Nj
aGVkdWxlci9zY2hlZHVsZXIuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9zY2hl
ZHVsZXIvc2NoZWR1bGVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTIwMzcsOCArMjAzNywxMiBAQAog
CiAgICAgICAgICBWR18obWVtc2V0KShidWY2NCwgMCwgNjQpOwogICAgICAgICAgVUludCBsaW5l
bnVtID0gMDsKKworICAgICAgICAgLy8gRklYTUUgSlJTIDI4IEp1bHkgMjAxNzogSEFDSyEgIElz
IHRoaXMgY29ycmVjdD8KKyAgICAgICAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9E
aUVwb2NoKSgpOworCiAgICAgICAgICBCb29sIG9rID0gVkdfKGdldF9maWxlbmFtZV9saW5lbnVt
KSgKLSAgICAgICAgICAgICAgICAgICAgICBpcCwgJmJ1ZiwgTlVMTCwgJmxpbmVudW0KKyAgICAg
ICAgICAgICAgICAgICAgICBlcCwgaXAsICZidWYsIE5VTEwsICZsaW5lbnVtCiAgICAgICAgICAg
ICAgICAgICAgKTsKICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgLyogRm9yIGJhY2t3
YXJkIGNvbXBhdGliaWxpdHkgdHJ1bmNhdGUgdGhlIGZpbGVuYW1lIHRvCkluZGV4OiBjb3JlZ3Jp
bmQvbV9zaWduYWxzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fc2lnbmFscy5jCShyZXZp
c2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3NpZ25hbHMuYwkod29ya2luZyBjb3B5KQpAQCAt
MTg3OCw3ICsxODc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICA6IFZHXyhyZWNvcmRfZGVw
dGhfMV9FeGVDb250ZXh0KSggdGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9pcF9kZWx0YSApOwogICAgICAgICAgdmdfYXNz
ZXJ0KGVjKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggZWMgKTsKKyAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCko
ZWMpICk7CiAgICAgICB9CiAgICAgICBpZiAoc2lnTm8gPT0gVktJX1NJR1NFR1YgCiAgICAgICAg
ICAgJiYgaXNfc2lnbmFsX2Zyb21fa2VybmVsKHRpZCwgc2lnTm8sIGluZm8tPnNpX2NvZGUpCklu
ZGV4OiBjb3JlZ3JpbmQvbV9zdGFja3RyYWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21f
c3RhY2t0cmFjZS5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3N0YWNrdHJhY2Uu
Ywkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDYgKzQ0Niw3IEBACiAgICAgICAvKiBBbmQsIHNpbWls
YXJseSwgdHJ5IGZvciBNU1ZDIEZQTyB1bndpbmQgaW5mby4gKi8KICAgICAgIGlmIChGUE9faW5m
b19wcmVzZW50CiAgICAgICAgICAgJiYgVkdfKHVzZV9GUE9faW5mbykoICZ1cmVncy54aXAsICZ1
cmVncy54c3AsICZ1cmVncy54YnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZH
XyhjdXJyZW50X0RpRXBvY2gpKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZw
X21pbiwgZnBfbWF4ICkgKSB7CiAgICAgICAgICBpZiAoZGVidWcpIHVud2luZF9jYXNlID0gIk1T
IjsKICAgICAgICAgIGlmIChkb19zdGF0cykgc3RhdHMuTVMrKzsKQEAgLTE1MzksMTIgKzE1NDAs
MTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX2hpZ2hl
c3RfYnl0ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50SXBEZXNjKFVJbnQgbiwgQWRkciBpcCwg
dm9pZCogdXVfb3BhcXVlKQorc3RhdGljIHZvaWQgcHJpbnRJcERlc2MoVUludCBuLCBEaUVwb2No
IGVwLCBBZGRyIGlwLCB2b2lkKiB1dV9vcGFxdWUpCiB7Ci0gICBJbmxJUEN1cnNvciAqaWlwYyA9
IFZHXyhuZXdfSUlQQykoaXApOworICAgSW5sSVBDdXJzb3IgKmlpcGMgPSBWR18obmV3X0lJUEMp
KGVwLCBpcCk7CiAKICAgIGRvIHsKLSAgICAgIGNvbnN0IEhDaGFyICpidWYgPSBWR18oZGVzY3Jp
YmVfSVApKGlwLCBpaXBjKTsKKyAgICAgIGNvbnN0IEhDaGFyICpidWYgPSBWR18oZGVzY3JpYmVf
SVApKGVwLCBpcCwgaWlwYyk7CiAgICAgICBpZiAoVkdfKGNsb194bWwpKSB7CiAgICAgICAgICBW
R18ocHJpbnRmX3htbCkoIiAgICAlc1xuIiwgYnVmKTsKICAgICAgIH0gZWxzZSB7CkBAIC0xNTU4
LDcgKzE1NTksNyBAQAogfQogCiAvKiBQcmludCBhIFN0YWNrVHJhY2UuICovCi12b2lkIFZHXyhw
cF9TdGFja1RyYWNlKSAoIFN0YWNrVHJhY2UgaXBzLCBVSW50IG5faXBzICkKK3ZvaWQgVkdfKHBw
X1N0YWNrVHJhY2UpICggRGlFcG9jaCBlcCwgU3RhY2tUcmFjZSBpcHMsIFVJbnQgbl9pcHMgKQog
ewogICAgdmdfYXNzZXJ0KCBuX2lwcyA+IDAgKTsKIApAQCAtMTU2NSw3ICsxNTY2LDcgQEAKICAg
IGlmIChWR18oY2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRmX3htbCkoIiAgPHN0YWNrPlxuIik7
CiAKLSAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJpbnRJcERlc2MsIE5VTEwsIGlwcywgbl9p
cHMgKTsKKyAgIFZHXyhhcHBseV9TdGFja1RyYWNlKSggcHJpbnRJcERlc2MsIE5VTEwsIGVwLCBp
cHMsIG5faXBzICk7CiAKICAgIGlmIChWR18oY2xvX3htbCkpCiAgICAgICBWR18ocHJpbnRmX3ht
bCkoIiAgPC9zdGFjaz5cbiIpOwpAQCAtMTU4MCwxMyArMTU4MSwxMyBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwvKmFycmF5IHRvIGR1bXAgU1AgdmFsdWVzIGluKi8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTC8qYXJyYXkgdG8gZHVtcCBGUCB2YWx1ZXMgaW4q
LywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLypmaXJzdF9pcF9kZWx0YSovKTsKLSAg
IFZHXyhwcF9TdGFja1RyYWNlKShpcHMsIG5faXBzKTsKKyAgIFZHXyhwcF9TdGFja1RyYWNlKShW
R18oY3VycmVudF9EaUVwb2NoKSgpLCBpcHMsIG5faXBzKTsKIH0KIAogdm9pZCBWR18oYXBwbHlf
U3RhY2tUcmFjZSkoCi0gICAgICAgIHZvaWQoKmFjdGlvbikoVUludCBuLCBBZGRyIGlwLCB2b2lk
KiBvcGFxdWUpLAorICAgICAgICB2b2lkKCphY3Rpb24pKFVJbnQgbiwgRGlFcG9jaCBlcCwgQWRk
ciBpcCwgdm9pZCogb3BhcXVlKSwKICAgICAgICAgdm9pZCogb3BhcXVlLAotICAgICAgICBTdGFj
a1RyYWNlIGlwcywgVUludCBuX2lwcworICAgICAgICBEaUVwb2NoIGVwLCBTdGFja1RyYWNlIGlw
cywgVUludCBuX2lwcwogICAgICApCiB7CiAgICBJbnQgaTsKQEAgLTE1OTcsNyArMTU5OCw3IEBA
CiAgICAgICAvLyBvciB0aGUgbGFzdCBhcHBlYXJhbmNlIG9mIGEgYmVsb3cgbWFpbiBmdW5jdGlv
bi4KICAgICAgIC8vIFRoZW4gZGVjcmVhc2Ugbl9pcHMgc28gYXMgdG8gbm90IGNhbGwgYWN0aW9u
IGZvciB0aGUgYmVsb3cgbWFpbgogICAgICAgZm9yIChpID0gbl9pcHMgLSAxOyBpID49IDA7IGkt
LSkgewotICAgICAgICAgVmdfRm5OYW1lS2luZCBraW5kID0gVkdfKGdldF9mbm5hbWVfa2luZF9m
cm9tX0lQKShpcHNbaV0pOworICAgICAgICAgVmdfRm5OYW1lS2luZCBraW5kID0gVkdfKGdldF9m
bm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAgICAgICAgIGlmIChWZ19Gbk5hbWVN
YWluID09IGtpbmQgfHwgVmdfRm5OYW1lQmVsb3dNYWluID09IGtpbmQpCiAgICAgICAgICAgICBu
X2lwcyA9IGkgKyAxOwogICAgICAgICAgaWYgKFZnX0ZuTmFtZU1haW4gPT0ga2luZCkKQEAgLTE2
MDcsNyArMTYwOCw3IEBACiAKICAgIGZvciAoaSA9IDA7IGkgPCBuX2lwczsgaSsrKQogICAgICAg
Ly8gQWN0IG9uIHRoZSBpcAotICAgICAgYWN0aW9uKGksIGlwc1tpXSwgb3BhcXVlKTsKKyAgICAg
IGFjdGlvbihpLCBlcCwgaXBzW2ldLCBvcGFxdWUpOwogfQogCiAKSW5kZXg6IGNvcmVncmluZC9t
X3N5c3dyYXAvc3lzd3JhcC1nZW5lcmljLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fc3lz
d3JhcC9zeXN3cmFwLWdlbmVyaWMuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV9z
eXN3cmFwL3N5c3dyYXAtZ2VuZXJpYy5jCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDgg
QEAKIHsKICAgIEludCBmZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZmlsZSBkZXNj
cmlwdG9yICovCiAgICBIQ2hhciAqcGF0aG5hbWU7ICAgICAgICAgICAgICAgLyogTlVMTCBpZiBu
b3QgYSByZWd1bGFyIGZpbGUgb3IgdW5rbm93biAqLwotICAgRXhlQ29udGV4dCAqd2hlcmU7ICAg
ICAgICAgICAgIC8qIE5VTEwgaWYgaW5oZXJpdGVkIGZyb20gcGFyZW50ICovCisgICBFeGVDb250
ZXh0QW5kRXBvY2ggd2hlcmU7ICAgICAgLyogVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluaGVyaXRlZCBmcm9tIHBh
cmVudCAqLwogICAgc3RydWN0IE9wZW5GZCAqbmV4dCwgKnByZXY7CiB9IE9wZW5GZDsKIApAQCAt
NjE0LDcgKzYxNSwxMCBAQAogCiAgICBpLT5mZCA9IGZkOwogICAgaS0+cGF0aG5hbWUgPSBWR18o
c3RyZHVwKSgic3lzd3JhcC5yZmRvd2duLjIiLCBwYXRobmFtZSk7Ci0gICBpLT53aGVyZSA9ICh0
aWQgPT0gLTEpID8gTlVMTCA6IFZHXyhyZWNvcmRfRXhlQ29udGV4dCkodGlkLCAwLypmaXJzdF9p
cF9kZWx0YSovKTsKKyAgIGktPndoZXJlID0gKHRpZCA9PSAtMSkKKyAgICAgICAgICAgICAgICAg
PyBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpKCkKKyAgICAgICAgICAgICAgICAgOiBWR18o
dGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAgICAgICAgVkdfKHJl
Y29yZF9FeGVDb250ZXh0KSh0aWQsIDAvKmZpcnN0X2lwX2RlbHRhKi8pKTsKIH0KIAogLy8gUmVj
b3JkIG9wZW5pbmcgb2YgYW4gZmQsIGFuZCBmaW5kIGl0cyBuYW1lLgpAQCAtODQ2LDggKzg1MCw4
IEBACiAgICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGlmKGktPndoZXJlKSB7Ci0gICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoaS0+d2hlcmUpOworICAgICAgaWYgKCFWR18oaXNfbnVsbF9F
eGVDb250ZXh0QW5kRXBvY2gpKGktPndoZXJlKSkgeworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoaS0+d2hlcmUpOwogICAgICAgICAgVkdfKG1lc3NhZ2UpKFZnX1VzZXJNc2cs
ICJcbiIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgIFZHXyhtZXNzYWdlKShWZ19Vc2VyTXNn
LCAiICAgPGluaGVyaXRlZCBmcm9tIHBhcmVudD5cbiIpOwpJbmRleDogY29yZWdyaW5kL21fdG9v
bGlmYWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21fdG9vbGlmYWNlLmMJKHJldmlzaW9u
IDE2NDY1KQorKysgY29yZWdyaW5kL21fdG9vbGlmYWNlLmMJKHdvcmtpbmcgY29weSkKQEAgLTMy
Myw3ICszMjMsNyBAQAogfQogCiB2b2lkIFZHXyhuZWVkc19pbmZvX2xvY2F0aW9uKSAoCi0gICB2
b2lkICgqaW5mb19sb2NhdGlvbikoQWRkcikKKyAgIHZvaWQgKCppbmZvX2xvY2F0aW9uKShEaUVw
b2NoLCBBZGRyKQogKQogewogICAgVkdfKG5lZWRzKS5pbmZvX2xvY2F0aW9uID0gVHJ1ZTsKSW5k
ZXg6IGNvcmVncmluZC9tX3RyYW5zbGF0ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvcmVncmluZC9tX3Ry
YW5zbGF0ZS5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmluZC9tX3RyYW5zbGF0ZS5jCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTI3LDEyICsxNTI3LDEzIEBACiAgICAgICBCb29sIG9rOwogICAg
ICAgY29uc3QgSENoYXIgKmJ1ZjsKICAgICAgIGNvbnN0IEhDaGFyICpuYW1lMjsKKyAgICAgIGNv
bnN0IERpRXBvY2ggZXAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOwogCiAgICAgICAvKiBUcnkg
YWxzbyB0byBnZXQgdGhlIHNvbmFtZSAobm90IHRoZSBmaWxlbmFtZSkgb2YgdGhlICJmcm9tIgog
ICAgICAgICAgb2JqZWN0LiAgVGhpcyBtYWtlcyBpdCBtdWNoIGVhc2llciB0byBkZWJ1ZyByZWRp
cmVjdGlvbgogICAgICAgICAgcHJvYmxlbXMuICovCiAgICAgICBjb25zdCBIQ2hhciogbnJhZGRy
X3NvbmFtZSA9ICI/Pz8iOwotICAgICAgRGVidWdJbmZvKiAgIG5yYWRkcl9kaSAgICAgPSBWR18o
ZmluZF9EZWJ1Z0luZm8pKG5yYWRkcik7CisgICAgICBEZWJ1Z0luZm8qICAgbnJhZGRyX2RpICAg
ICA9IFZHXyhmaW5kX0RlYnVnSW5mbykoZXAsIG5yYWRkcik7CiAgICAgICBpZiAobnJhZGRyX2Rp
KSB7CiAgICAgICAgICBjb25zdCBIQ2hhciogdCA9IFZHXyhEZWJ1Z0luZm9fZ2V0X3NvbmFtZSko
bnJhZGRyX2RpKTsKICAgICAgICAgIGlmICh0KQpAQCAtMTUzOSwxMiArMTU0MCwxMiBAQAogICAg
ICAgICAgICAgbnJhZGRyX3NvbmFtZSA9IHQ7CiAgICAgICB9CiAKLSAgICAgIG9rID0gVkdfKGdl
dF9mbm5hbWVfd19vZmZzZXQpKG5yYWRkciwgJmJ1Zik7CisgICAgICBvayA9IFZHXyhnZXRfZm5u
YW1lX3dfb2Zmc2V0KShlcCwgbnJhZGRyLCAmYnVmKTsKICAgICAgIGlmICghb2spIGJ1ZiA9ICI/
Pz8iOwogICAgICAgLy8gU3Rhc2ggYXdheSBuYW1lMQogICAgICAgSENoYXIgbmFtZTFbVkdfKHN0
cmxlbikoYnVmKSArIDFdOwogICAgICAgVkdfKHN0cmNweSkobmFtZTEsIGJ1Zik7Ci0gICAgICBv
ayA9IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KShhZGRyLCAmbmFtZTIpOworICAgICAgb2sgPSBW
R18oZ2V0X2ZubmFtZV93X29mZnNldCkoZXAsIGFkZHIsICZuYW1lMik7CiAgICAgICBpZiAoIW9r
KSBuYW1lMiA9ICI/Pz8iOwogCiAgICAgICBWR18obWVzc2FnZSkoVmdfRGVidWdNc2csIApAQCAt
MTU2MSw3ICsxNTYyLDggQEAKICAgIGlmIChWR18oY2xvX3RyYWNlX2ZsYWdzKSB8fCBkZWJ1Z2dp
bmdfdHJhbnNsYXRpb24pIHsKICAgICAgIGNvbnN0IEhDaGFyKiBvYmpuYW1lID0gIlVOS05PV05f
T0JKRUNUIjsKICAgICAgIE9mZlQgICAgICAgICBvYmpvZmYgID0gMDsKLSAgICAgIERlYnVnSW5m
byogICBkaSAgICAgID0gVkdfKGZpbmRfRGVidWdJbmZvKSggYWRkciApOworICAgICAgY29uc3Qg
RGlFcG9jaCBlcCAgICAgPSBWR18oY3VycmVudF9EaUVwb2NoKSgpOworICAgICAgRGVidWdJbmZv
KiAgIGRpICAgICAgPSBWR18oZmluZF9EZWJ1Z0luZm8pKCBlcCwgYWRkciApOwogICAgICAgaWYg
KGRpKSB7CiAgICAgICAgICBvYmpuYW1lID0gVkdfKERlYnVnSW5mb19nZXRfZmlsZW5hbWUpKGRp
KTsKICAgICAgICAgIG9iam9mZiAgPSBhZGRyIC0gVkdfKERlYnVnSW5mb19nZXRfdGV4dF9iaWFz
KShkaSk7CkBAIC0xNTY5LDcgKzE1NzEsNyBAQAogICAgICAgdmdfYXNzZXJ0KG9iam5hbWUpOwog
IAogICAgICAgY29uc3QgSENoYXIgKmZubmFtZTsKLSAgICAgIEJvb2wgb2sgPSBWR18oZ2V0X2Zu
bmFtZV93X29mZnNldCkoYWRkciwgJmZubmFtZSk7CisgICAgICBCb29sIG9rID0gVkdfKGdldF9m
bm5hbWVfd19vZmZzZXQpKGVwLCBhZGRyLCAmZm5uYW1lKTsKICAgICAgIGlmICghb2spIGZubmFt
ZSA9ICJVTktOT1dOX0ZVTkNUSU9OIjsKICAgICAgIFZHXyhwcmludGYpKAogICAgICAgICAgIj09
PT0gU0IgJXUgKGV2Y2hlY2tzICVsbHUpIFt0aWQgJXVdIDB4JWx4ICVzICVzJWMweCVseFxuIiwK
SW5kZXg6IGNvcmVncmluZC9tX3h0cmVlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29yZWdyaW5kL21feHRy
ZWUuYwkocmV2aXNpb24gMTY0NjUpCisrKyBjb3JlZ3JpbmQvbV94dHJlZS5jCSh3b3JraW5nIGNv
cHkpCkBAIC00MzgsNiArNDM4LDkgQEAKICAgIGNvbnN0IEhDaGFyKiBmaWxlbmFtZV9kaXI7CiAg
ICBjb25zdCBIQ2hhciogZmlsZW5hbWVfbmFtZTsKIAorICAgLy8gRklYTUUgSlJTIDI4IEp1bHkg
MjAxNzogSEFDSyEgIElzIHRoaXMgY29ycmVjdD8KKyAgIGNvbnN0IERpRXBvY2ggZXAgPSBWR18o
Y3VycmVudF9EaUVwb2NoKSgpOworCiAgICBpZiAoZnAgPT0gTlVMTCkKICAgICAgIHJldHVybjsK
IApAQCAtNTAxLDcgKzUwNCw3IEBACiAgICAgICAvLyB0aGUgc3RyaW5ncyAgY2FsbGVkX2ZpbGVu
YW1lL2NhbGxlZF9mbm5hbWUuCiAjZGVmaW5lIENBTExFRF9GTEYobikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBpZiAoKG4pIDwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgfHwgIVZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSkoaXBzWyhuKV0sICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgfHwgIVZHXyhnZXRfZmlsZW5hbWVfbGluZW51bSko
ZXAsIGlwc1sobildLCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lX25hbWUsICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lX2RpciwgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNh
bGxlZF9saW5lbnVtKSkgeyAgICAgICAgICAgICBcCkBAIC01MDksNyArNTEyLDcgQEAKICAgICAg
ICAgIGNhbGxlZF9saW5lbnVtID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIGlmICgobikgPCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICB8fCAhVkdfKGdldF9mbm5hbWUpKGlwc1sobildLCAmY2FsbGVkX2ZubmFtZSkpIHsgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICB8fCAhVkdfKGdldF9mbm5hbWUpKGVwLCBpcHNbKG4pXSwgJmNh
bGxlZF9mbm5hbWUpKSB7ICAgICAgICAgIFwKICAgICAgICAgIGNhbGxlZF9mbm5hbWUgPSAiVW5r
bm93bkZuPz8/IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCw3ICs1NTcsOSBAQAogCiAgICAgICAgICBp
ZiAoMCkgewogICAgICAgICAgICAgVkdfKHByaW50ZikoImVudHJ5IGltZyAlc1xuIiwgaW1nKTsK
LSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSh4ZS0+ZWMpOworICAgICAgICAgICAgLy8g
SlJTIDI3IEp1bHkgMjAxNzogaXQgbWF5IGJlIGEgaGFjayB0byB1c2UgdGhlIGN1cnJlbnQgZXBv
Y2gKKyAgICAgICAgICAgIC8vIGhlcmUuICBJIGRvbid0IGtub3cuCisgICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoeGUt
PmVjKSk7CiAgICAgICAgICAgICBWR18ocHJpbnRmKSgiXG4iKTsKICAgICAgICAgIH0KICAgICAg
ICAgIHh0LT5hZGRfZGF0YV9mbih4dC0+dG1wX2RhdGEsIFZHXyhpbmRleFhBKSh4dC0+ZGF0YSwg
eGVjdSkpOwpAQCAtNzYyLDExICs3NjcsMTQgQEAKICAgIG1zX21ha2VfZ3JvdXBzKGRlcHRoKzEs
IGdyb3VwLT5tc19lYywgZ3JvdXAtPm5fZWMsIHNpZ19zeiwKICAgICAgICAgICAgICAgICAgICZu
X2dyb3VwcywgJmdyb3Vwcyk7CiAKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5IDIwMTc6IEhBQ0sh
ICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlF
cG9jaCkoKTsKKwogICAgRlAoIiUqcyIgIm4ldTogJWxkICVzXG4iLCAKICAgICAgIGRlcHRoICsg
MSwgIiIsCiAgICAgICBuX2dyb3VwcywgCiAgICAgICBncm91cC0+dG90YWwsCi0gICAgICBWR18o
ZGVzY3JpYmVfSVApKGdyb3VwLT5tc19lYy0+aXBzW2RlcHRoXSAtIDEsIE5VTEwpKTsKKyAgICAg
IFZHXyhkZXNjcmliZV9JUCkoZXAsIGdyb3VwLT5tc19lYy0+aXBzW2RlcHRoXSAtIDEsIE5VTEwp
KTsKICAgIC8qIFhUUkVFPz8/IE1hc3NpZiBvcmlnaW5hbCBjb2RlIHJlbW92ZXMgMSB0byBnZXQg
dGhlIElQIGRlc2NyaXB0aW9uLiBJIGFtCiAgICAgICB3b25kZXJpbmcgaWYgdGhpcyBpcyBub3Qg
c29tZXRoaW5nIHRoYXQgcHJlZGF0ZXMgcmV2aXNpb24gcjg4MTgsCiAgICAgICB3aGljaCBpbnRy
b2R1Y2VkIGEgLTEgaW4gdGhlIHN0YWNrIHVud2luZCAoc2VlIG1fc3RhY2t0cmFjZS5jKQpAQCAt
OTYzLDYgKzk3MSwxMCBAQAogICAgICAgZnJvbSB0aGVyZS4KICAgICAgIElmIG5vIG1haW4gaXMg
Zm91bmQsIHdlIHdpbGwgdGhlbiBkbyBhIHNlYXJjaCBmb3IgbWFpbiBvcgogICAgICAgYmVsb3cg
bWFpbiBmdW5jdGlvbiB0aWxsIHRoZSB0b3AuICovCisKKyAgIC8vIEZJWE1FIEpSUyAyOCBKdWx5
IDIwMTc6IEhBQ0shICBJcyB0aGlzIGNvcnJlY3Q/CisgICBjb25zdCBEaUVwb2NoIGVwID0gVkdf
KGN1cnJlbnRfRGlFcG9jaCkoKTsKKwogICAgc3RhdGljIEludCBkZWVwZXN0X21haW4gPSAwOwog
ICAgVmdfRm5OYW1lS2luZCBraW5kID0gVmdfRm5OYW1lTm9ybWFsOwogICAgSW50IG1ibSA9IG5f
aXBzIC0gMTsgLy8gUG9zaXRpb24gb2YgZGVlcGVzdCBtYWluIG9yIGJlbG93IG1haW4uCkBAIC05
NzIsNyArOTg0LDcgQEAKICAgIGZvciAoaSA9IG5faXBzIC0gMSAtIGRlZXBlc3RfbWFpbjsKICAg
ICAgICAgaSA8IG5faXBzOwogICAgICAgICBpKyspIHsKLSAgICAgIG1ibWtpbmQgPSBWR18oZ2V0
X2ZubmFtZV9raW5kX2Zyb21fSVApKGlwc1tpXSk7CisgICAgICBtYm1raW5kID0gVkdfKGdldF9m
bm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAgICAgIGlmIChtYm1raW5kICE9IFZn
X0ZuTmFtZU5vcm1hbCkgewogICAgICAgICAgbWJtID0gaTsKICAgICAgICAgIGJyZWFrOwpAQCAt
OTgzLDcgKzk5NSw3IEBACiAgICBmb3IgKGkgPSBtYm0gLSAxOwogICAgICAgICBpID49IDAgJiYg
bWJta2luZCAhPSBWZ19Gbk5hbWVNYWluOwogICAgICAgICBpLS0pIHsKLSAgICAgIGtpbmQgPSBW
R18oZ2V0X2ZubmFtZV9raW5kX2Zyb21fSVApKGlwc1tpXSk7CisgICAgICBraW5kID0gVkdfKGdl
dF9mbm5hbWVfa2luZF9mcm9tX0lQKShlcCwgaXBzW2ldKTsKICAgICAgIGlmIChraW5kICE9IFZn
X0ZuTmFtZU5vcm1hbCkgewogICAgICAgICAgbWJtID0gaTsKICAgICAgICAgIG1ibWtpbmQgPSBr
aW5kOwpJbmRleDogY29yZWdyaW5kL3B1Yl9jb3JlX2RlYnVnaW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNvcmVncmluZC9wdWJfY29yZV9kZWJ1Z2luZm8uaAkocmV2aXNpb24gMTY0NjUpCisrKyBjb3Jl
Z3JpbmQvcHViX2NvcmVfZGVidWdpbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEzICs4Niwx
MyBAQAogICogSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB0aGUgbmFtZXMg
b2YgaW50ZXJlc3Qgd2lsbCBoYXZlCiAgKiBwYXJ0aWN1bGFyIChpZS4gbm9uLW1hbmdsZWQpIGZv
cm1zLCBvciB0aGUgbWFuZ2xlZCBmb3JtIGlzIGFjY2VwdGFibGUuICovCiBleHRlcm4KLUJvb2wg
VkdfKGdldF9mbm5hbWVfcmF3KSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYgKTsKK0Jvb2wg
VkdfKGdldF9mbm5hbWVfcmF3KSAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENoYXIqKiBi
dWYgKTsKIAogLyogTGlrZSBWR18oZ2V0X2ZubmFtZSksIGJ1dCB3aXRob3V0IEMrKyBkZW1hbmds
aW5nLiAgKEJ1dCBpdCBkb2VzCiAgWi1kZW1hbmdsaW5nIGFuZCBiZWxvdy1tYWluIHJlbmFtaW5n
LikKICBpaXBjIGFyZ3VtZW50OiBzYW1lIHVzYWdlIGFzIGluIFZHXyhkZXNjcmliZV9JUCkgaW4g
cHViX3Rvb2xfZGVidWdpbmZvLmguICovCiBleHRlcm4KLUJvb2wgVkdfKGdldF9mbm5hbWVfbm9f
Y3h4X2RlbWFuZ2xlKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBidWYsCitCb29sIFZHXyhnZXRf
Zm5uYW1lX25vX2N4eF9kZW1hbmdsZSkgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIGNvbnN0IEhDaGFy
KiogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5s
SVBDdXJzb3IqIGlpcGMgKTsKIAogLyogbWlwcy1saW51eCBvbmx5OiBmaW5kIHRoZSBvZmZzZXQg
b2YgY3VycmVudCBhZGRyZXNzLiBUaGlzIGlzIG5lZWRlZCBmb3IgCkBAIC05OSw3ICs5OSw4IEBA
CiAgICBzdGFjayB1bndpbmRpbmcgZm9yIE1JUFMuCiAqLwogZXh0ZXJuCi1Cb29sIFZHXyhnZXRf
aW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBBZGRyIGEsIC8qT1VUKi9QdHJkaWZmVCogb2Zmc2V0
ICk7CitCb29sIFZHXyhnZXRfaW5zdF9vZmZzZXRfaW5fZnVuY3Rpb24pKCBEaUVwb2NoIGVwLCBB
ZGRyIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovUHRy
ZGlmZlQqIG9mZnNldCApOwogCiAKIC8qIFVzZSBEV0FSRjIvMyBDRkEgaW5mb3JtYXRpb24gdG8g
ZG8gb25lIHN0ZXAgb2Ygc3RhY2sgdW53aW5kaW5nLgpAQCAtMTU4LDYgKzE1OSw3IEBACiBleHRl
cm4gQm9vbCBWR18odXNlX0ZQT19pbmZvKSAoIC8qTU9EKi9BZGRyKiBpcFAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qTU9EKi9BZGRyKiBzcFAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qTU9EKi9BZGRyKiBmcFAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERpRXBvY2ggZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk
ZHIgbWluX2FjY2Vzc2libGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIg
bWF4X2FjY2Vzc2libGUgKTsKIApAQCAtMjE3LDcgKzIxOSw3IEBACiAvKiBwcGM2NC1saW51eCBv
bmx5OiBmaW5kIHRoZSBUT0MgcG9pbnRlciAoUjIgdmFsdWUpIHRoYXQgc2hvdWxkIGJlIGluCiAg
ICBmb3JjZSBhdCB0aGUgZW50cnkgcG9pbnQgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gY29udGFp
bmluZwogICAgZ3Vlc3RfY29kZV9hZGRyLiAgUmV0dXJucyAwIGlmIG5vdCBrbm93bi4gKi8KLWV4
dGVybiBBZGRyIFZHXyhnZXRfdG9jcHRyKSAoIEFkZHIgZ3Vlc3RfY29kZV9hZGRyICk7CitleHRl
cm4gQWRkciBWR18oZ2V0X3RvY3B0cikgKCBEaUVwb2NoIGVwLCBBZGRyIGd1ZXN0X2NvZGVfYWRk
ciApOwogCiAvKiBNYXAgYSBmdW5jdGlvbiBuYW1lIHRvIGl0cyBTeW1BVk1Bcy4gIElzIGRvbmUg
YnkKICAgIHNlcXVlbnRpYWwgc2VhcmNoIG9mIGFsbCBzeW1ib2wgdGFibGVzLCBzbyBpcyB2ZXJ5
IHNsb3cuICBUbwpAQCAtMjI3LDcgKzIyOSw4IEBACiAgICBwbGF0Zm9ybXMsIGEgc3ltYm9sIGlz
IGRlZW1lZCB0byBiZSBmb3VuZCBvbmx5IGlmIGl0IGhhcyBhIG5vbnplcm8KICAgIFRPQyBwb2lu
dGVyLiAgKi8KIGV4dGVybgotQm9vbCBWR18obG9va3VwX3N5bWJvbF9TTE9XKShjb25zdCBIQ2hh
ciogc29wYXR0LCBjb25zdCBIQ2hhciogbmFtZSwKK0Jvb2wgVkdfKGxvb2t1cF9zeW1ib2xfU0xP
VykoRGlFcG9jaCBlcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhDaGFy
KiBzb3BhdHQsIGNvbnN0IEhDaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTeW1BVk1BcyogYXZtYXMpOwogCiAjZW5kaWYgICAvLyBfX1BVQl9DT1JFX0RFQlVHSU5GT19I
CkluZGV4OiBjb3JlZ3JpbmQvcHViX2NvcmVfdG9vbGlmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29y
ZWdyaW5kL3B1Yl9jb3JlX3Rvb2xpZmFjZS5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGNvcmVncmlu
ZC9wdWJfY29yZV90b29saWZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBA
CiAgICB2b2lkICgqdG9vbF9wcmludF9zdGF0cykodm9pZCk7CiAKICAgIC8vIFZHXyhuZWVkcyku
aW5mb19sb2NhdGlvbgotICAgdm9pZCAoKnRvb2xfaW5mb19sb2NhdGlvbikoQWRkciBhKTsKKyAg
IHZvaWQgKCp0b29sX2luZm9fbG9jYXRpb24pKERpRXBvY2ggZXAsIEFkZHIgYSk7CiAKICAgIC8v
IFZHXyhuZWVkcykubWFsbG9jX3JlcGxhY2VtZW50CiAgICB2b2lkKiAoKnRvb2xfbWFsbG9jKSAg
ICAgICAgICAgICAgKFRocmVhZElkLCBTaXplVCk7CkluZGV4OiBkb2NzL3htbC9tYW51YWwtY29y
ZS54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZG9jcy94bWwvbWFudWFsLWNvcmUueG1sCShyZXZpc2lvbiAx
NjQ2NSkKKysrIGRvY3MveG1sL21hbnVhbC1jb3JlLnhtbAkod29ya2luZyBjb3B5KQpAQCAtMTIx
OSw2ICsxMjE5LDE5IEBACiAgICAgPC9saXN0aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg
PHZhcmxpc3RlbnRyeSBpZD0ib3B0LmtlZXAtZGVidWdpbmZvIiB4cmVmbGFiZWw9Ii0ta2VlcC1k
ZWJ1Z2luZm8iPgorICAgIDx0ZXJtPgorICAgICAgPG9wdGlvbj48IVtDREFUQVstLWtlZXAtZGVi
dWdpbmZvPTx5ZXN8bm8+IFtkZWZhdWx0OiBub10gXV0+PC9vcHRpb24+CisgICAgPC90ZXJtPgor
ICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPldoZW4gZW5hYmxlZCwga2VlcCBzeW1ib2xzIGFu
ZCBhbGwgb3RoZXIgZGVidWdpbmZvIGZvciB1bmxvYWRlZAorICAgICAgY29kZS4gVGhpcyBhbGxv
d3Mgc3RhY2sgdHJhY2VzIGZvciBtZW1vcnkgbGVha3MgdG8gaW5jbHVkZSBmaWxlL2xpbmUKKyAg
ICAgIGluZm8gZm9yIGNvZGUgdGhhdCBoYXMgYmVlbiBkbGNsb3NlJ2QgKG9yIHNpbWlsYXIpLiAg
QmUgY2FyZWZ1bCB3aXRoCisgICAgICB0aGlzLCBzaW5jZSBpdCBjYW4gbGVhZCB0byB1bmJvdW5k
ZWQgbWVtb3J5IHVzZSBmb3IgcHJvZ3JhbXMgd2hpY2gKKyAgICAgIHJlcGVhdGVkbHkgbG9hZCBh
bmQgdW5sb2FkIHNoYXJkIG9iamVjdHMuPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvdmFy
bGlzdGVudHJ5PgorICAKICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnNob3ctYmVsb3ctbWFpbiIg
eHJlZmxhYmVsPSItLXNob3ctYmVsb3ctbWFpbiI+CiAgICAgPHRlcm0+CiAgICAgICA8b3B0aW9u
PjwhW0NEQVRBWy0tc2hvdy1iZWxvdy1tYWluPTx5ZXN8bm8+IFtkZWZhdWx0OiBub10gXV0+PC9v
cHRpb24+CkluZGV4OiBkcmQvZHJkX2Vycm9yLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZHJkL2RyZF9lcnJv
ci5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGRyZC9kcmRfZXJyb3IuYwkod29ya2luZyBjb3B5KQpA
QCAtMTM5LDEyICsxMzksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8d2hh
dD4lcFM8L3doYXQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPGFkZHJlc3M+
MHglbHg8L2FkZHJlc3M+XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBEUkRfKGNsaWVu
dG9ial90eXBlX25hbWUpKGNsLT5hbnkudHlwZSksIG9iaik7Ci0gICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoY2wtPmFueS5maXJzdF9vYnNlcnZlZF9hdCk7CisgICAgICAgICBWR18ocHBfRXhl
Q29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vw
b2NoKShjbC0+YW55LmZpcnN0X29ic2VydmVkX2F0KSk7CiAgICAgICAgICBwcmludF9lcnJfZGV0
YWlsKCIgIDwvZmlyc3Rfb2JzZXJ2ZWRfYXQ+XG4iKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICBwcmludF9lcnJfZGV0YWlsKCIlcyAweCVseCB3YXMgZmlyc3Qgb2JzZXJ2ZWQgYXQ6XG4iLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBEUkRfKGNsaWVudG9ial90eXBlX25hbWUpKGNsLT5h
bnkudHlwZSksIG9iaik7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoY2wtPmFueS5maXJz
dF9vYnNlcnZlZF9hdCk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAg
ICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShjbC0+YW55LmZpcnN0X29i
c2VydmVkX2F0KSk7CiAgICAgICB9CiAgICB9CiB9CkBAIC0xNjEsNiArMTYzLDcgQEAKICAgIGNv
bnN0IEhDaGFyKiBjb25zdCBpbmRlbnQgPSB4bWwgPyAiICAiIDogIiI7CiAgICBBZGRySW5mbyBh
aTsKIAorICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CiAgICBYQXJyYXkq
IC8qIG9mIEhDaGFyICovIGRlc2NyMQogICAgICAgPSBWR18obmV3WEEpKCBWR18obWFsbG9jKSwg
ImRyZC5lcnJvci5kcmRyMi4xIiwKICAgICAgICAgICAgICAgICAgICAgVkdfKGZyZWUpLCBzaXpl
b2YoSENoYXIpICk7CkBAIC0xNzIsNyArMTc1LDcgQEAKICAgIHRsX2Fzc2VydChkcmktPmFkZHIp
OwogICAgdGxfYXNzZXJ0KGRyaS0+c2l6ZSA+IDApOwogCi0gICAodm9pZCkgVkdfKGdldF9kYXRh
X2Rlc2NyaXB0aW9uKShkZXNjcjEsIGRlc2NyMiwgZHJpLT5hZGRyKTsKKyAgICh2b2lkKSBWR18o
Z2V0X2RhdGFfZGVzY3JpcHRpb24pKGRlc2NyMSwgZGVzY3IyLCBlcCwgZHJpLT5hZGRyKTsKICAg
IC8qIElmIHRoZXJlJ3Mgbm90aGluZyBpbiBkZXNjcjEvMiwgZnJlZSB0aGVtLiAgV2h5IGlzIGl0
IHNhZmUgdG8KICAgICAgIFZHXyhpbmRleFhBKSBhdCB6ZXJvIGhlcmU/ICBCZWNhdXNlIFZHXyhn
ZXRfZGF0YV9kZXNjcmlwdGlvbikKICAgICAgIGd1YXJhbnRlZXMgdG8gemVybyB0ZXJtaW5hdGUg
ZGVzY3IxLzIgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZQpAQCAtMjAyLDcgKzIwNSw3IEBACiAg
ICAgICAgICAgICAgICAgICAgIHdoYXRfcHJlZml4LCBkcmktPmFjY2Vzc190eXBlID09IGVTdG9y
ZSA/ICJzdG9yZSIgOiAibG9hZCIsCiAgICAgICAgICAgICAgICAgICAgIGRyaS0+dGlkLCBkcmkt
PmFkZHIsIGRyaS0+c2l6ZSwgd2hhdF9zdWZmaXgpOwogCi0gICBWR18ocHBfRXhlQ29udGV4dCko
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSk7CisgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2No
KShWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpKTsKICAgIGlmIChkZXNjcjEgIT0gTlVMTCkgewog
ICAgICAgcHJpbnRfZXJyX2RldGFpbCgiJXMlc1xuIiwgaW5kZW50LCAoSENoYXIqKVZHXyhpbmRl
eFhBKShkZXNjcjEsIDApKTsKICAgICAgIGlmIChkZXNjcjIgIT0gTlVMTCkKQEAgLTIxNiw3ICsy
MTksNyBAQAogICAgICAgICAgcHJpbnRfZXJyX2RldGFpbCgiICA8YWxsb2NhdGlvbl9jb250ZXh0
PlxuIik7CiAgICAgICBlbHNlCiAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCIgQWxsb2NhdGlv
biBjb250ZXh0OlxuIik7Ci0gICAgICBWR18ocHBfRXhlQ29udGV4dCkoYWkubGFzdGNoYW5nZSk7
CisgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShta19FeGVDb250ZXh0QW5kRXBvY2go
YWkubGFzdGNoYW5nZSwgZXApKTsKICAgICAgIGlmICh4bWwpCiAgICAgICAgICBwcmludF9lcnJf
ZGV0YWlsKCIgIDwvYWxsb2NhdGlvbl9jb250ZXh0PlxuIik7CiAgICB9IGVsc2UgewpAQCAtMzIy
LDcgKzMyNSw3IEBACiAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCIlc1RoZSBvYmplY3QgYXQg
YWRkcmVzcyAweCVseCBpcyBub3QgYSBtdXRleC4lc1xuIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hhdF9wcmVmaXgsIHAtPm11dGV4LCB3aGF0X3N1ZmZpeCk7CiAgICAgICB9Ci0gICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOworICAgICAgVkdf
KHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOwogICAgICAg
Zmlyc3Rfb2JzZXJ2ZWQocC0+bXV0ZXgpOwogICAgICAgYnJlYWs7CiAgICB9CkBAIC0zMzAsNyAr
MzMzLDcgQEAKICAgICAgIENvbmRFcnJJbmZvKiBjZGVpID0oQ29uZEVyckluZm8qKShWR18oZ2V0
X2Vycm9yX2V4dHJhKShlKSk7CiAgICAgICBwcmludF9lcnJfZGV0YWlsKCIlcyVzOiBjb25kIDB4
JWx4JXNcbiIsIHdoYXRfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICBWR18oZ2V0X2Vy
cm9yX3N0cmluZykoZSksIGNkZWktPmNvbmQsIHdoYXRfc3VmZml4KTsKLSAgICAgIFZHXyhwcF9F
eGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAgICAgICBmaXJzdF9vYnNl
cnZlZChjZGVpLT5jb25kKTsKICAgICAgIGJyZWFrOwogICAgfQpAQCAtMzM5LDcgKzM0Miw3IEBA
CiAgICAgICBwcmludF9lcnJfZGV0YWlsKCIlcyVzOiBjb25kIDB4JWx4LCBtdXRleCAweCVseCBs
b2NrZWQgYnkgdGhyZWFkICV1JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdoYXRfcHJl
Zml4LCBWR18oZ2V0X2Vycm9yX3N0cmluZykoZSksIGNkaS0+Y29uZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgY2RpLT5tdXRleCwgY2RpLT5vd25lciwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGZpcnN0
X29ic2VydmVkKGNkaS0+bXV0ZXgpOwogICAgICAgYnJlYWs7CiAgICB9CkBAIC0zNDksNyArMzUy
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIiBoYXMgYmVlbiBzaWduYWxlZCBidXQgdGhl
IGFzc29jaWF0ZWQgbXV0ZXggMHglbHggaXMiCiAgICAgICAgICAgICAgICAgICAgICAgICIgbm90
IGxvY2tlZCBieSB0aGUgc2lnbmFsbGluZyB0aHJlYWQuJXNcbiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHdoYXRfcHJlZml4LCBjZWktPmNvbmQsIGNlaS0+bXV0ZXgsIHdoYXRfc3VmZml4KTsK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAg
ICAgICBmaXJzdF9vYnNlcnZlZChjZWktPmNvbmQpOwogICAgICAgZmlyc3Rfb2JzZXJ2ZWQoY2Vp
LT5tdXRleCk7CiAgICAgICBicmVhazsKQEAgLTM1OSw3ICszNjIsNyBAQAogICAgICAgcHJpbnRf
ZXJyX2RldGFpbCgiJXMlczogY29uZGl0aW9uIHZhcmlhYmxlIDB4JWx4LCBtdXRleGVzIDB4JWx4
IGFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgIiAweCVseCVzXG4iLCB3aGF0X3ByZWZpeCwg
VkdfKGdldF9lcnJvcl9zdHJpbmcpKGUpLAogICAgICAgICAgICAgICAgICAgICAgICBjd2VpLT5j
b25kLCBjd2VpLT5tdXRleDEsIGN3ZWktPm11dGV4Miwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGZpcnN0
X29ic2VydmVkKGN3ZWktPmNvbmQpOwogICAgICAgZmlyc3Rfb2JzZXJ2ZWQoY3dlaS0+bXV0ZXgx
KTsKICAgICAgIGZpcnN0X29ic2VydmVkKGN3ZWktPm11dGV4Mik7CkBAIC0zNzAsNyArMzczLDcg
QEAKICAgICAgIHRsX2Fzc2VydChzZWkpOwogICAgICAgcHJpbnRfZXJyX2RldGFpbCgiJXMlczog
c2VtYXBob3JlIDB4JWx4JXNcbiIsIHdoYXRfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAg
ICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZSksIHNlaS0+c2VtYXBob3JlLCB3aGF0X3N1ZmZpeCk7
Ci0gICAgICBWR18ocHBfRXhlQ29udGV4dCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOworICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoVkdfKGdldF9lcnJvcl93aGVyZSkoZSkpOwog
ICAgICAgZmlyc3Rfb2JzZXJ2ZWQoc2VpLT5zZW1hcGhvcmUpOwogICAgICAgYnJlYWs7CiAgICB9
CkBAIC0zNzksMTMgKzM4MiwxNCBAQAogICAgICAgdGxfYXNzZXJ0KGJlaSk7CiAgICAgICBwcmlu
dF9lcnJfZGV0YWlsKCIlcyVzOiBiYXJyaWVyIDB4JWx4JXNcbiIsIHdoYXRfcHJlZml4LAogICAg
ICAgICAgICAgICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZSksIGJlaS0+YmFycmll
ciwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jf
d2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJy
b3Jfd2hlcmUpKGUpKTsKICAgICAgIGlmIChiZWktPm90aGVyX2NvbnRleHQpIHsKICAgICAgICAg
IGlmICh4bWwpCiAgICAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCIgIDxjb25mbF93YWl0X2Nh
bGw+XG4iKTsKICAgICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiVzQ29uZmxpY3Rpbmcgd2FpdCBj
YWxsIGJ5IHRocmVhZCAldTolc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hhdF9w
cmVmaXgsIGJlaS0+b3RoZXJfdGlkLCB3aGF0X3N1ZmZpeCk7Ci0gICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoYmVpLT5vdGhlcl9jb250ZXh0KTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpKAorICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKGJl
aS0+b3RoZXJfY29udGV4dCkpOwogICAgICAgICAgaWYgKHhtbCkKICAgICAgICAgICAgIHByaW50
X2Vycl9kZXRhaWwoIiAgPC9jb25mbF93YWl0X2NhbGw+XG4iKTsKICAgICAgIH0KQEAgLTM5Nyw3
ICs0MDEsNyBAQAogICAgICAgdGxfYXNzZXJ0KHApOwogICAgICAgcHJpbnRfZXJyX2RldGFpbCgi
JXMlczogcndsb2NrIDB4JWx4LiVzXG4iLCB3aGF0X3ByZWZpeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgVkdfKGdldF9lcnJvcl9zdHJpbmcpKGUpLCBwLT5yd2xvY2ssIHdoYXRfc3VmZml4KTsK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAg
ICAgICBmaXJzdF9vYnNlcnZlZChwLT5yd2xvY2spOwogICAgICAgYnJlYWs7CiAgICB9CkBAIC00
MDksNyArNDEzLDggQEAKICAgICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiAgPGFjcXVpcmVkX2F0
PlxuIik7CiAgICAgICBlbHNlCiAgICAgICAgICBwcmludF9lcnJfZGV0YWlsKCJBY3F1aXJlZCBh
dDpcbiIpOwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKHAtPmFjcXVpcmVkX2F0KTsKKyAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1
cnJlbnRfZXBvY2gpKHAtPmFjcXVpcmVkX2F0KSk7CiAgICAgICBpZiAoeG1sKQogICAgICAgICAg
cHJpbnRfZXJyX2RldGFpbCgiICA8L2FjcXVpcmVkX2F0PlxuIik7CiAgICAgICBwcmludF9lcnJf
ZGV0YWlsKCIlc0xvY2sgb24gJXMgMHglbHggd2FzIGhlbGQgZHVyaW5nICV1IG1zIgpAQCAtNDE2
LDcgKzQyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICIgKHRocmVzaG9sZDogJXUgbXMp
LiVzXG4iLCB3aGF0X3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgVkdfKGdldF9lcnJv
cl9zdHJpbmcpKGUpLCBwLT5zeW5jaHJvbml6YXRpb25fb2JqZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBwLT5ob2xkX3RpbWVfbXMsIHAtPnRocmVzaG9sZF9tcywgd2hhdF9zdWZmaXgpOwot
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAg
ICAgIGZpcnN0X29ic2VydmVkKHAtPnN5bmNocm9uaXphdGlvbl9vYmplY3QpOwogICAgICAgYnJl
YWs7CiAgICB9CkBAIC00MjQsNyArNDI5LDcgQEAKICAgICAgIEdlbmVyaWNFcnJJbmZvKiBnZWkg
PSAoR2VuZXJpY0VyckluZm8qKShWR18oZ2V0X2Vycm9yX2V4dHJhKShlKSk7CiAgICAgICBwcmlu
dF9lcnJfZGV0YWlsKCIlcyVzJXNcbiIsIHdoYXRfcHJlZml4LCBWR18oZ2V0X2Vycm9yX3N0cmlu
ZykoZSksCiAgICAgICAgICAgICAgICAgICAgICAgIHdoYXRfc3VmZml4KTsKLSAgICAgIFZHXyhw
cF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAgICBWR18ocHBfRXhl
Q29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAgICAgICBpZiAoZ2Vp
LT5hZGRyKQogCSBmaXJzdF9vYnNlcnZlZChnZWktPmFkZHIpOwogICAgICAgYnJlYWs7CkBAIC00
MzMsNyArNDM4LDcgQEAKICAgICAgIEludmFsaWRUaHJlYWRJZEluZm8qIGl0aSA9KEludmFsaWRU
aHJlYWRJZEluZm8qKShWR18oZ2V0X2Vycm9yX2V4dHJhKShlKSk7CiAgICAgICBwcmludF9lcnJf
ZGV0YWlsKCIlcyVzIDB4JWxseCVzXG4iLCB3aGF0X3ByZWZpeCwgVkdfKGdldF9lcnJvcl9zdHJp
bmcpKGUpLAogICAgICAgICAgICAgICAgICAgICAgICBpdGktPnB0aWQsIHdoYXRfc3VmZml4KTsK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CisgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKShWR18oZ2V0X2Vycm9yX3doZXJlKShlKSk7CiAg
ICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgVW5pbXBIZ0NsUmVxOiB7CkBAIC00NDEsNyArNDQ2
LDcgQEAKICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiVzVGhlIGFubm90YXRpb24gbWFjcm8gJXMg
aGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCIKICAgICAgICAgICAgICAgICAgICAgICAgIiBp
biAlcHMlc1xuIiwgd2hhdF9wcmVmaXgsIHVpY3ItPmRlc2NyLAogICAgICAgICAgICAgICAgICAg
ICAgICAiPHZhbGdyaW5kL2hlbGdyaW5kLmg+Iiwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdfKHBw
X0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9FeGVD
b250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGJyZWFrOwog
ICAgfQogICAgY2FzZSBVbmltcERyZENsUmVxOiB7CkBAIC00NDksMTMgKzQ1NCwxMyBAQAogICAg
ICAgcHJpbnRfZXJyX2RldGFpbCgiJXNUaGUgYW5ub3RhdGlvbiBtYWNybyAlcyBoYXMgbm90IHll
dCBiZWVuIGltcGxlbWVudGVkIgogICAgICAgICAgICAgICAgICAgICAgICAiIGluICVwcyVzXG4i
LCB3aGF0X3ByZWZpeCwgdWljci0+ZGVzY3IsCiAgICAgICAgICAgICAgICAgICAgICAgICI8dmFs
Z3JpbmQvZHJkLmg+Iiwgd2hhdF9zdWZmaXgpOwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZH
XyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gp
KFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKICAgICAgIGJyZWFrOwogICAgfQogICAgZGVmYXVs
dDoKICAgICAgIHByaW50X2Vycl9kZXRhaWwoIiVzJXMlc1xuIiwgd2hhdF9wcmVmaXgsIFZHXyhn
ZXRfZXJyb3Jfc3RyaW5nKShlKSwKICAgICAgICAgICAgICAgICAgICAgICAgd2hhdF9zdWZmaXgp
OwotICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsKKyAg
ICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGUpKTsK
ICAgICAgIGJyZWFrOwogICAgfQogfQpJbmRleDogZHJkL2RyZF90aHJlYWQuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkcmQvZHJkX3RocmVhZC5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGRyZC9kcmRfdGhyZWFk
LmMJKHdvcmtpbmcgY29weSkKQEAgLTEzMzgsNyArMTMzOCw4IEBACiAKICAgIGlmICh2Z190aWQg
IT0gVkdfSU5WQUxJRF9USFJFQURJRCkgewogICAgICAgaWYgKGNhbGxzdGFjaykKLSAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KShjYWxsc3RhY2spOworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoCisgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCko
Y2FsbHN0YWNrKSk7CiAgICAgICBlbHNlCiAgICAgICAgICBWR18oZ2V0X2FuZF9wcF9TdGFja1Ry
YWNlKSh2Z190aWQsIFZHXyhjbG9fYmFja3RyYWNlX3NpemUpKTsKICAgIH0gZWxzZSB7CkluZGV4
OiBleHAtYmJ2L2Jidl9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXhwLWJidi9iYnZfbWFpbi5jCShy
ZXZpc2lvbiAxNjQ2NSkKKysrIGV4cC1iYnYvYmJ2X21haW4uYwkod29ya2luZyBjb3B5KQpAQCAt
MzQ2LDYgKzM0Niw3IEBACiAgICBJUkRpcnR5ICAqZGk7CiAgICBJUkV4cHIgICAqKmFyZ3YsICph
cmcxOwogICAgSW50ICAgICAgcmVncGFybXMsb3Bjb2RlX3R5cGU7CisgICBEaUVwb2NoICBlcCA9
IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CiAKICAgICAgIC8qIFdlIGRvbid0IGhhbmRsZSBhIGhv
c3QvZ3Vlc3Qgd29yZCBzaXplIG1pc21hdGNoICovCiAgICBpZiAoZ1dvcmRUeSAhPSBoV29yZFR5
KSB7CkBAIC0zOTIsOCArMzkzLDggQEAKICAgICAgIGJsb2NrX251bSsrOwogICAgICAgICAgLyog
Z2V0IGZ1bmN0aW9uIG5hbWUgYW5kIGVudHJ5IHBvaW50IGluZm9ybWF0aW9uICovCiAgICAgICBj
b25zdCBIQ2hhciAqZm5fbmFtZTsKLSAgICAgIFZHXyhnZXRfZm5uYW1lKShvcmlnQWRkciwgJmZu
X25hbWUpOwotICAgICAgYmJJbmZvLT5pc19lbnRyeT1WR18oZ2V0X2ZubmFtZV9pZl9lbnRyeSko
b3JpZ0FkZHIsICZmbl9uYW1lKTsKKyAgICAgIFZHXyhnZXRfZm5uYW1lKShlcCwgb3JpZ0FkZHIs
ICZmbl9uYW1lKTsKKyAgICAgIGJiSW5mby0+aXNfZW50cnk9VkdfKGdldF9mbm5hbWVfaWZfZW50
cnkpKGVwLCBvcmlnQWRkciwgJmZuX25hbWUpOwogICAgICAgYmJJbmZvLT5mbl9uYW1lID1WR18o
c3RyZHVwKSgiYmJ2X3N0cmluZ3MiLCBmbl9uYW1lKTsKICAgICAgICAgIC8qIGluc2VydCBzdHJ1
Y3R1cmUgaW50byB0YWJsZSAqLwogICAgICAgVkdfKE9TZXRHZW5fSW5zZXJ0KSggaW5zdHJfaW5m
b190YWJsZSwgYmJJbmZvICk7CkluZGV4OiBleHAtZGhhdC9kaF9tYWluLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZXhwLWRoYXQvZGhfbWFpbi5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGV4cC1kaGF0L2RoX21h
aW4uYwkod29ya2luZyBjb3B5KQpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAKICAgICAgICAgICAgICBi
dWZSLCBidWZXLAogICAgICAgICAgICAgIGFwaS0+bl9yZWFkcywgYXBpLT5uX3dyaXRlcyk7CiAK
LSAgIFZHXyhwcF9FeGVDb250ZXh0KShhcGktPmFwKTsKKyAgIFZHXyhwcF9FeGVDb250ZXh0QW5k
RXBvY2gpKFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShhcGktPmFwKSk7CiAKICAgIGlm
IChhcGktPmhpc3RvICYmIGFwaS0+eHNpemVfdGFnID09IEV4YWN0bHkpIHsKICAgICAgIFZHXyh1
bXNnKSgiXG5BZ2dyZWdhdGVkIGFjY2VzcyBjb3VudHMgYnkgb2Zmc2V0OlxuIik7CkluZGV4OiBl
eHAtc2djaGVjay9wY19jb21tb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleHAtc2djaGVjay9wY19jb21t
b24uYwkocmV2aXNpb24gMTY0NjUpCisrKyBleHAtc2djaGVjay9wY19jb21tb24uYwkod29ya2lu
ZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBACiAgICAgICAgICBlbWl0KCAiICA8d2hhdD5JbnZh
bGlkICVzIG9mIHNpemUgJWxkPC93aGF0PlxuIiwKICAgICAgICAgICAgICAgIHhlLT5YRS5Tb3JH
LnNzekIgPCAwID8gIndyaXRlIiA6ICJyZWFkIiwKICAgICAgICAgICAgICAgIFdvcmRfX2Ficyh4
ZS0+WEUuU29yRy5zc3pCKSApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0
X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2No
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAgICAgICAgICBlbWl0KCAiICA8
YXV4d2hhdD5BZGRyZXNzICUjbHggZXhwZWN0ZWQgdnMgYWN0dWFsOjwvYXV4d2hhdD5cbiIsCiAg
ICAgICAgICAgICAgICB4ZS0+WEUuU29yRy5hZGRyICk7CkBAIC0zMzYsNyArMzM2LDcgQEAKICAg
ICAgICAgIGVtaXQoICJJbnZhbGlkICVzIG9mIHNpemUgJWxkXG4iLCAKICAgICAgICAgICAgICAg
IHhlLT5YRS5Tb3JHLnNzekIgPCAwID8gIndyaXRlIiA6ICJyZWFkIiwKICAgICAgICAgICAgICAg
IFdvcmRfX2Ficyh4ZS0+WEUuU29yRy5zc3pCKSApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAgICAgICAg
ICBlbWl0KCAiIEFkZHJlc3MgJSNseCBleHBlY3RlZCB2cyBhY3R1YWw6XG4iLCB4ZS0+WEUuU29y
Ry5hZGRyICk7CiAgICAgICAgICBlbWl0KCAiIEV4cGVjdGVkOiAlc1xuIiwgJnhlLT5YRS5Tb3JH
LmV4cGVjdFswXSApOwpAQCAtMzYyLDcgKzM2Miw3IEBACiAgICAgICAgICAgICBlbWl0KCAiICA8
d2hhdD5JbnZhbGlkICVzIG9mIHNpemUgJWxkPC93aGF0PlxuIiwKICAgICAgICAgICAgICAgICAg
IHJlYWR3cml0ZSh4ZS0+WEUuSGVhcC5zc3pCKSwKICAgICAgICAgICAgICAgICAgIFdvcmRfX2Fi
cyh4ZS0+WEUuSGVhcC5zc3pCKSApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBW
R18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAgICAgICAgICAg
ICBlbWl0KCAiICA8YXV4d2hhdD5BZGRyZXNzICUjbHggaXMgbm90IGRlcml2ZWQgZnJvbSAiCiAg
ICAgICAgICAgICAgICAgICAiYW55IGtub3duIGJsb2NrPC9hdXh3aGF0PlxuIiwgYSApOwpAQCAt
MzcyLDcgKzM3Miw3IEBACiAgICAgICAgICAgICBlbWl0KCAiSW52YWxpZCAlcyBvZiBzaXplICVs
ZFxuIiwKICAgICAgICAgICAgICAgICAgIHJlYWR3cml0ZSh4ZS0+WEUuSGVhcC5zc3pCKSwKICAg
ICAgICAgICAgICAgICAgIFdvcmRfX2Ficyh4ZS0+WEUuSGVhcC5zc3pCKSApOwotICAgICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAg
ICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOwogICAgCiAgICAgICAgICAgICBlbWl0KCAiIEFkZHJlc3MgJSNseCBpcyBub3QgZGVy
aXZlZCBmcm9tICIKICAgICAgICAgICAgICAgICAgICJhbnkga25vd24gYmxvY2tcbiIsIGEgKTsK
QEAgLTM5Nyw3ICszOTcsNyBAQAogICAgICAgICAgICAgICAgICAgaG93X2ludmFsaWQsCiAgICAg
ICAgICAgICAgICAgICByZWFkd3JpdGUoeGUtPlhFLkhlYXAuc3N6QiksCiAgICAgICAgICAgICAg
ICAgICBXb3JkX19hYnMoeGUtPlhFLkhlYXAuc3N6QikgKTsKLSAgICAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAg
IAogICAgICAgICAgICAgZW1pdCggIiAgPGF1eHdoYXQ+QWRkcmVzcyAlI2x4IGlzICVsdSBieXRl
cyAlcyAiCiAgICAgICAgICAgICAgICAgICAgICAidGhlIGFjY2Vzc2luZyBwb2ludGVyJ3M8L2F1
eHdoYXQ+XG4iLApAQCAtNDA2LDcgKzQwNiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAiYSBi
bG9jayBvZiBzaXplICVsdSAlczwvYXV4d2hhdD5cbiIsCiAgICAgICAgICAgICAgICAgICBsZWdp
dCwgU2VnX19zaXplKHZzZWcpLAogICAgICAgICAgICAgICAgICAgU2VnX19pc19mcmVlZCh2c2Vn
KSA/ICJmcmVlJ2QiIDogImFsbG9jJ2QiICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dCkoU2VnX193aGVyZSh2c2VnKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVw
b2NoKSgKKyAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdf
X3doZXJlKHZzZWcpKSk7CiAKICAgICAgICAgIH0gZWxzZSB7CiAKQEAgLTQxNCw3ICs0MTUsNyBA
QAogICAgICAgICAgICAgICAgICAgaG93X2ludmFsaWQsCiAgICAgICAgICAgICAgICAgICByZWFk
d3JpdGUoeGUtPlhFLkhlYXAuc3N6QiksCiAgICAgICAgICAgICAgICAgICBXb3JkX19hYnMoeGUt
PlhFLkhlYXAuc3N6QikgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdl
dF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgIAogICAgICAgICAgICAgZW1p
dCggIiBBZGRyZXNzICUjbHggaXMgJWx1IGJ5dGVzICVzIHRoZSBhY2Nlc3NpbmcgcG9pbnRlcidz
XG4iLAogICAgICAgICAgICAgICAgICAgYSwgbWlzc19zaXplLCBwbGFjZSApOwpAQCAtNDIxLDcg
KzQyMiw4IEBACiAgICAgICAgICAgICBlbWl0KCAiICVzbGVnaXRpbWF0ZSByYW5nZSwgYSBibG9j
ayBvZiBzaXplICVsdSAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGxlZ2l0LCBTZWdfX3NpemUo
dnNlZyksCiAgICAgICAgICAgICAgICAgICBTZWdfX2lzX2ZyZWVkKHZzZWcpID8gImZyZWUnZCIg
OiAiYWxsb2MnZCIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJl
KHZzZWcpKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAg
ICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKFNlZ19fd2hlcmUodnNlZykp
KTsKIAogICAgICAgICAgfQogICAgICAgfQpAQCAtNDc3LDcgKzQ3OSw3IEBACiAKICAgICAgICAg
IGVtaXQoICIgIDx3aGF0PkludmFsaWQgYXJndW1lbnRzIHRvICVzPC93aGF0PlxuIiwKICAgICAg
ICAgICAgICAgIHhlLT5YRS5Bcml0aC5vcG5hbWUgKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgIAogICAgICAg
ICAgaWYgKHNlZzEgIT0gc2VnMikgewogICAgICAgICAgICAgaWYgKE5PTlBUUiA9PSBzZWcxKSB7
CkBAIC00ODgsNyArNDkwLDggQEAKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0PkZp
cnN0IGFyZyBkZXJpdmVkIGZyb20gYWRkcmVzcyAlI2x4IG9mICIKICAgICAgICAgICAgICAgICAg
ICAgICIlbHUtYnl0ZSBibG9jayBhbGxvYydkPC9hdXh3aGF0PlxuIiwKICAgICAgICAgICAgICAg
ICAgICAgIFNlZ19fYWRkcihzZWcxKSwgU2VnX19zaXplKHNlZzEpICk7Ci0gICAgICAgICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoU2VnX193aGVyZShzZWcxKSk7CisgICAgICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNlZzEpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB3aGljaCA9ICJTZWNvbmQgYXJnIjsKICAgICAgICAgIH0gZWxzZSB7CkBAIC01
MDAsNyArNTAzLDggQEAKICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0PiVzIGRlcml2ZWQg
ZnJvbSBhZGRyZXNzICUjbHggb2YgIgogICAgICAgICAgICAgICAgICAgIiVsdS1ieXRlIGJsb2Nr
IGFsbG9jJ2Q8L2F1eHdoYXQ+XG4iLAogICAgICAgICAgICAgICAgICAgd2hpY2gsIFNlZ19fYWRk
cihzZWcyKSwgU2VnX19zaXplKHNlZzIpICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dCkoU2VnX193aGVyZShzZWcyKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVw
b2NoKSgKKyAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdf
X3doZXJlKHNlZzIpKSk7CiAgICAgICAgICB9CiAKICAgICAgIH0gZWxzZSB7CkBAIC01MDcsNyAr
NTExLDcgQEAKIAogICAgICAgICAgZW1pdCggIkludmFsaWQgYXJndW1lbnRzIHRvICVzXG4iLAog
ICAgICAgICAgICAgICAgeGUtPlhFLkFyaXRoLm9wbmFtZSApOwotICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgCiAg
ICAgICAgICBpZiAoc2VnMSAhPSBzZWcyKSB7CiAgICAgICAgICAgICBpZiAoTk9OUFRSID09IHNl
ZzEpIHsKQEAgLTUxOCw3ICs1MjIsOCBAQAogICAgICAgICAgICAgICAgZW1pdCggIiBGaXJzdCBh
cmcgZGVyaXZlZCBmcm9tIGFkZHJlc3MgJSNseCBvZiAiCiAgICAgICAgICAgICAgICAgICAgICAi
JWx1LWJ5dGUgYmxvY2sgYWxsb2MnZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIFNlZ19fYWRk
cihzZWcxKSwgU2VnX19zaXplKHNlZzEpICk7Ci0gICAgICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dCkoU2VnX193aGVyZShzZWcxKSk7CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4
dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vw
b2NoKShTZWdfX3doZXJlKHNlZzEpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3aGlj
aCA9ICJTZWNvbmQgYXJnIjsKICAgICAgICAgIH0gZWxzZSB7CkBAIC01MzAsNyArNTM1LDggQEAK
ICAgICAgICAgICAgIGVtaXQoICIgJXMgZGVyaXZlZCBmcm9tIGFkZHJlc3MgJSNseCBvZiAiCiAg
ICAgICAgICAgICAgICAgICAiJWx1LWJ5dGUgYmxvY2sgYWxsb2MnZFxuIiwKICAgICAgICAgICAg
ICAgICAgIHdoaWNoLCBTZWdfX2FkZHIoc2VnMiksIFNlZ19fc2l6ZShzZWcyKSApOwotICAgICAg
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFNlZ19fd2hlcmUoc2VnMikpOworICAgICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICAgICBWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoU2VnX193aGVyZShzZWcyKSkpOwogICAgICAgICAgfQogCiAgICAg
ICB9CkBAIC01NjIsMjMgKzU2OCwyNSBAQAogCiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD4l
cyVzIGNvbnRhaW5zIHVuYWRkcmVzc2FibGUgYnl0ZShzKTwvd2hhdD5cbiIsCiAgICAgICAgICAg
ICAgICAgICB3aGF0LCBzICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhn
ZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5k
RXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAKICAgICAgICAgICAgIGVt
aXQoICIgIDxhdXh3aGF0PkFkZHJlc3MgJSNseCBpcyAlbHUgYnl0ZXMgaW5zaWRlIGEgIgogICAg
ICAgICAgICAgICAgICAgIiVsdS1ieXRlIGJsb2NrIGZyZWUnZDwvYXV4d2hhdD5cbiIsCiAgICAg
ICAgICAgICAgICAgICBsbywgbG8tU2VnX19hZGRyKHNlZ2xvKSwgU2VnX19zaXplKHNlZ2xvKSAp
OwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFNlZ19fd2hlcmUoc2VnbG8pKTsKKyAg
ICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgICAgVkdf
KHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKFNlZ19fd2hlcmUoc2VnbG8pKSk7CiAKICAgICAg
ICAgIH0gZWxzZSB7CiAKICAgICAgICAgICAgIGVtaXQoICIgJXMlcyBjb250YWlucyB1bmFkZHJl
c3NhYmxlIGJ5dGUocylcbiIsCiAgICAgICAgICAgICAgICAgICB3aGF0LCBzICk7Ci0gICAgICAg
ICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAg
ICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJl
KShlcnIpICk7CiAgICAKICAgICAgICAgICAgIGVtaXQoICIgQWRkcmVzcyAlI2x4IGlzICVsdSBi
eXRlcyBpbnNpZGUgYSAiCiAgICAgICAgICAgICAgICAgICAiJWx1LWJ5dGUgYmxvY2sgZnJlZSdk
XG4iLAogICAgICAgICAgICAgICAgICAgbG8sIGxvLVNlZ19fYWRkcihzZWdsbyksIFNlZ19fc2l6
ZShzZWdsbykgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJlKHNl
Z2xvKSk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAg
ICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNlZ2xvKSkp
OwogCiAgICAgICAgICB9CiAKQEAgLTU4OSw3ICs1OTcsNyBAQAogCiAgICAgICAgICAgICBlbWl0
KCAiICA8d2hhdD4lcyVzIGlzIG5vbi1jb250aWd1b3VzPC93aGF0PlxuIiwKICAgICAgICAgICAg
ICAgICAgIHdoYXQsIHMgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdl
dF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgIAogICAgICAgICAgICAgaWYg
KFVOS05PV04gPT0gc2VnbG8pIHsKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0PkZp
cnN0IGJ5dGUgaXMgIgpAQCAtNTk4LDcgKzYwNiw4IEBACiAgICAgICAgICAgICAgICBlbWl0KCAi
ICA8YXV4d2hhdD5GaXJzdCBieXRlICglI2x4KSBpcyAlbHUgYnl0ZXMgaW5zaWRlIGEgIgogICAg
ICAgICAgICAgICAgICAgICAgIiVsdS1ieXRlIGJsb2NrIGFsbG9jJ2Q8L2F1eHdoYXQ+XG4iLAog
ICAgICAgICAgICAgICAgICAgICAgbG8sIGxvLVNlZ19fYWRkcihzZWdsbyksIFNlZ19fc2l6ZShz
ZWdsbykgKTsKLSAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJlKHNl
Z2xvKSk7CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAg
ICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNl
Z2xvKSkpOwogICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgICBpZiAoVU5LTk9XTiA9PSBz
ZWdoaSkgewpAQCAtNjA4LDcgKzYxNyw4IEBACiAgICAgICAgICAgICAgICBlbWl0KCAiICA8YXV4
d2hhdD5MYXN0IGJ5dGUgKCUjbHgpIGlzICVsdSBieXRlcyBpbnNpZGUgYSAiCiAgICAgICAgICAg
ICAgICAgICAgICAiJWx1LWJ5dGUgYmxvY2sgYWxsb2MnZDwvYXV4d2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICAgICBoaSwgaGktU2VnX19hZGRyKHNlZ2hpKSwgU2VnX19zaXplKHNlZ2hpKSAp
OwotICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKFNlZ19fd2hlcmUoc2VnaGkpKTsK
KyAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAg
ICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKFNlZ19fd2hlcmUoc2VnaGkpKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgIH0gZWxzZSB7CkBAIC02MTUsNyArNjI1LDcgQEAK
IAogICAgICAgICAgICAgZW1pdCggIiVzJXMgaXMgbm9uLWNvbnRpZ3VvdXNcbiIsCiAgICAgICAg
ICAgICAgICAgICB3aGF0LCBzICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZH
XyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAKICAgICAgICAgICAg
IGlmIChVTktOT1dOID09IHNlZ2xvKSB7CiAgICAgICAgICAgICAgICBlbWl0KCAiIEZpcnN0IGJ5
dGUgaXMgbm90IGluc2lkZSBhIGtub3duIGJsb2NrXG4iICk7CkBAIC02MjMsNyArNjMzLDggQEAK
ICAgICAgICAgICAgICAgIGVtaXQoICIgRmlyc3QgYnl0ZSAoJSNseCkgaXMgJWx1IGJ5dGVzIGlu
c2lkZSBhICIKICAgICAgICAgICAgICAgICAgICAgICIlbHUtYnl0ZSBibG9jayBhbGxvYydkXG4i
LAogICAgICAgICAgICAgICAgICAgICAgbG8sIGxvLVNlZ19fYWRkcihzZWdsbyksIFNlZ19fc2l6
ZShzZWdsbykgKTsKLSAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJl
KHNlZ2xvKSk7CisgICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAg
ICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJl
KHNlZ2xvKSkpOwogICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgICBpZiAoVU5LTk9XTiA9
PSBzZWdoaSkgewpAQCAtNjMyLDcgKzY0Myw4IEBACiAgICAgICAgICAgICAgICBlbWl0KCAiIExh
c3QgYnl0ZSAoJSNseCkgaXMgJWx1IGJ5dGVzIGluc2lkZSBhICIKICAgICAgICAgICAgICAgICAg
ICAgICIlbHUtYnl0ZSBibG9jayBhbGxvYydkXG4iLAogICAgICAgICAgICAgICAgICAgICAgaGks
IGhpLVNlZ19fYWRkcihzZWdoaSksIFNlZ19fc2l6ZShzZWdoaSkgKTsKLSAgICAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KShTZWdfX3doZXJlKHNlZ2hpKSk7CisgICAgICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKShTZWdfX3doZXJlKHNlZ2hpKSkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICB9CkBAIC02NTAsNiArNjYyLDggQEAKIFVJbnQgcGNfdXBkYXRlX0Vycm9yX2V4
dHJhICggY29uc3QgRXJyb3IqIGVyciApCiB7CiAgICBYRXJyb3IgKnhlID0gKFhFcnJvciopVkdf
KGdldF9lcnJvcl9leHRyYSkoZXJyKTsKKyAgIERpRXBvY2ggZXAgPSBWR18oZ2V0X2Vycm9yX3do
ZXJlKShlcnIpLmVwb2NoOworCiAgICB0bF9hc3NlcnQoeGUpOwogICAgc3dpdGNoICh4ZS0+dGFn
KSB7CiAgICAgICBjYXNlIFhFX1Nvckc6CkBAIC02NzUsNyArNjg5LDcgQEAKICAgICAgICAgIGhh
dmVfZGVzY3IKICAgICAgICAgICAgID0gVkdfKGdldF9kYXRhX2Rlc2NyaXB0aW9uKSggeGUtPlhF
LkhlYXAuZGVzY3IxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
ZS0+WEUuSGVhcC5kZXNjcjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhlLT5YRS5IZWFwLmFkZHIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXAsIHhlLT5YRS5IZWFwLmFkZHIgKTsKIAogICAgICAgICAgLyogSWYgdGhlcmUn
cyBub3RoaW5nIGluIGRlc2NyMS8yLCBmcmVlIGl0LiAgV2h5IGlzIGl0IHNhZmUgdG8KICAgICAg
ICAgICAgIHRvIFZHXyhpbmRleFhBKSBhdCB6ZXJvIGhlcmU/ICBCZWNhdXNlCkBAIC02OTksNyAr
NzEzLDcgQEAKICAgICAgICAgIGlmICghaGF2ZV9kZXNjcikgewogICAgICAgICAgICAgY29uc3Qg
SENoYXIgKm5hbWU7CiAgICAgICAgICAgICBpZiAoVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQp
KAotICAgICAgICAgICAgICAgICAgIHhlLT5YRS5IZWFwLmFkZHIsICZuYW1lLAorICAgICAgICAg
ICAgICAgICAgIGVwLCB4ZS0+WEUuSGVhcC5hZGRyLCAmbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAmeGUtPlhFLkhlYXAuZGF0YXN5bW9mZiApCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAg
ICAgICAgeGUtPlhFLkhlYXAuZGF0YXN5bSA9CkluZGV4OiBleHAtc2djaGVjay9zZ19tYWluLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZXhwLXNnY2hlY2svc2dfbWFpbi5jCShyZXZpc2lvbiAxNjQ2NSkKKysr
IGV4cC1zZ2NoZWNrL3NnX21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtMTkzNiw3ICsxOTM2LDgg
QEAKICAgICAgY29uc3QgSENoYXIgKmZubmFtZTsKICAgICAgQm9vbCBvazsKICAgICAgQWRkciBp
cCA9IGlwX3Bvc3RfY2FsbF9pbnNuOwotICAgICBvayA9IFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0
KSggaXAsICZmbm5hbWUgKTsKKyAgICAgRGlFcG9jaCBlcCA9IFZHXyhjdXJyZW50X0RpRXBvY2gp
KCk7CisgICAgIG9rID0gVkdfKGdldF9mbm5hbWVfd19vZmZzZXQpKCBlcCwgaXAsICZmbm5hbWUg
KTsKICAgICAgd2hpbGUgKGQgPiAwKSB7CiAgICAgICAgIFZHXyhwcmludGYpKCIgIik7CiAgICAg
ICAgIGQtLTsKSW5kZXg6IGhlbGdyaW5kL2hnX2FkZHJkZXNjci5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhl
bGdyaW5kL2hnX2FkZHJkZXNjci5jCShyZXZpc2lvbiAxNjQ2NSkKKysrIGhlbGdyaW5kL2hnX2Fk
ZHJkZXNjci5jCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAiaGdf
bG9ja19uX3RocmVhZC5oIgogI2luY2x1ZGUgImhnX2FkZHJkZXNjci5oIiAgICAgICAgICAgIC8q
IHNlbGYgKi8KIAotdm9pZCBIR18oZGVzY3JpYmVfYWRkcikgKCBBZGRyIGEsIC8qT1VUKi9BZGRy
SW5mbyogYWkgKQordm9pZCBIR18oZGVzY3JpYmVfYWRkcikgKCBEaUVwb2NoIGVwLCBBZGRyIGEs
IC8qT1VUKi9BZGRySW5mbyogYWkgKQogewogICAgdGxfYXNzZXJ0KGFpLT50YWcgPT0gQWRkcl9V
bmRlc2NyaWJlZCk7CiAKQEAgLTc1LDEzICs3NSwxNCBAQAogICAgICAgYWktPkFkZHIuQmxvY2su
YmxvY2tfZGVzYyA9ICJibG9jayI7CiAgICAgICBhaS0+QWRkci5CbG9jay5ibG9ja19zekIgID0g
aHN6QjsKICAgICAgIGFpLT5BZGRyLkJsb2NrLnJ3b2Zmc2V0ICAgPSAoV29yZCkoYSkgLSAoV29y
ZCkoaGFkZHIpOwotICAgICAgYWktPkFkZHIuQmxvY2suYWxsb2NhdGVkX2F0ID0gaGN0eHQ7Cisg
ICAgICBhaS0+QWRkci5CbG9jay5hbGxvY2F0ZWRfYXQuZWMgPSBoY3R4dDsKKyAgICAgIGFpLT5B
ZGRyLkJsb2NrLmFsbG9jYXRlZF9hdC5lcG9jaCA9IGVwOwogICAgICAgVkdfKGluaXRUaHJlYWRJ
bmZvKSAoJmFpLT5BZGRyLkJsb2NrLmFsbG9jX3RpbmZvKTsKICAgICAgIGFpLT5BZGRyLkJsb2Nr
LmFsbG9jX3RpbmZvLnRuciA9IHRucjsKLSAgICAgIGFpLT5BZGRyLkJsb2NrLmZyZWVkX2F0ID0g
VkdfKG51bGxfRXhlQ29udGV4dCkoKTs7CisgICAgICBhaS0+QWRkci5CbG9jay5mcmVlZF9hdCA9
IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsKICAgIH0gZWxzZSB7CiAgICAgICAvKiBO
byBibG9jayBmb3VuZC4gU2VhcmNoIGEgbm9uLWhlYXAgYmxvY2sgZGVzY3JpcHRpb24uICovCi0g
ICAgICBWR18oZGVzY3JpYmVfYWRkcikgKGEsIGFpKTsKKyAgICAgIFZHXyhkZXNjcmliZV9hZGRy
KSAoZXAsIGEsIGFpKTsKIAogICAgICAgLyogSW4gY2FzZSBhaSBjb250YWlucyBhIHRpZCwgc2V0
IHRuciB0byB0aGUgY29ycmVzcG9uZGluZyBoZWxncmluZAogICAgICAgICAgdGhyZWFkIG51bWJl
ci4gKi8KQEAgLTEwMCw3ICsxMDEsNyBAQAogICAgfQogfQogCi1Cb29sIEhHXyhnZXRfYW5kX3Bw
X2FkZHJkZXNjcikgKEFkZHIgYWRkcikKK0Jvb2wgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAo
RGlFcG9jaCBlcCwgQWRkciBhZGRyKQogewogCiAgICBCb29sIHJldDsKQEAgLTEwNyw3ICsxMDgs
NyBAQAogICAgQWRkckluZm8gZ2xhaTsKIAogICAgZ2xhaS50YWcgPSBBZGRyX1VuZGVzY3JpYmVk
OwotICAgSEdfKGRlc2NyaWJlX2FkZHIpIChhZGRyLCAmZ2xhaSk7CisgICBIR18oZGVzY3JpYmVf
YWRkcikgKGVwLCBhZGRyLCAmZ2xhaSk7CiAgICBWR18ocHBfYWRkcmluZm8pIChhZGRyLCAmZ2xh
aSk7CiAgICByZXQgPSBnbGFpLnRhZyAhPSBBZGRyX1Vua25vd247CiAKSW5kZXg6IGhlbGdyaW5k
L2hnX2FkZHJkZXNjci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhlbGdyaW5kL2hnX2FkZHJkZXNjci5oCShy
ZXZpc2lvbiAxNjQ2NSkKKysrIGhlbGdyaW5kL2hnX2FkZHJkZXNjci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMiArMzcsMTIgQEAKICAgIGxvY2sgZGVzY3JpcHRpb24sIHB1dHRpbmcgdGhlIHJl
c3VsdCBpbiBhaS4KICAgIFRoaXMgbWlnaHQgYWxsb2NhdGUgc29tZSBtZW1vcnkgaW4gYWksIHRv
IGJlIGNsZWFyZWQgd2l0aAogICAgVkdfKGNsZWFyX2FkZHJpbmZvKS4gKi8KLWV4dGVybiB2b2lk
IEhHXyhkZXNjcmliZV9hZGRyKSAoIEFkZHIgYSwgLypPVVQqL0FkZHJJbmZvKiBhaSApOworZXh0
ZXJuIHZvaWQgSEdfKGRlc2NyaWJlX2FkZHIpICggRGlFcG9jaCBlcCwgQWRkciBhLCAvKk9VVCov
QWRkckluZm8qIGFpICk7CiAKIC8qIEdldCBhIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIGFkZHIs
IHRoZW4gcHJpbnQgaXQgdXNpbmcgSEdfKHBwX2FkZHJkZXNjcikKICAgIHVzaW5nIHhtbCBGYWxz
ZSBhbmQgVkdfKHByaW50ZikgdG8gZW1pdCB0aGUgY2hhcmFjdGVycy4KICAgIFJldHVybnMgVHJ1
ZSBpZiBhIGRlc2NyaXB0aW9uIHdhcyBmb3VuZC9wcmludGVkLCBGYWxzZSBvdGhlcndpc2UuICov
Ci1leHRlcm4gQm9vbCBIR18oZ2V0X2FuZF9wcF9hZGRyZGVzY3IpIChBZGRyIGEpOworZXh0ZXJu
IEJvb2wgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoRGlFcG9jaCBlcCwgQWRkciBhKTsKIAog
LyogRm9yIGVycm9yIGNyZWF0aW9uL2FkZHJlc3MgZGVzY3JpcHRpb246CiAgICBtYXAgJ2RhdGFf
YWRkcicgdG8gYSBtYWxsb2MnZCBjaHVuaywgaWYgYW55LgpJbmRleDogaGVsZ3JpbmQvaGdfZXJy
b3JzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaGVsZ3JpbmQvaGdfZXJyb3JzLmMJKHJldmlzaW9uIDE2NDY1
KQorKysgaGVsZ3JpbmQvaGdfZXJyb3JzLmMJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw3ICs0MjEs
OCBAQAogICAgICAgICAgVkdfKHByaW50ZikoIkhHXyh1cGRhdGVfZXh0cmEpOiAiCiAgICAgICAg
ICAgICAgICAgICAgICAiJWQgY29uZmxpY3RpbmctZXZlbnQgcXVlcmllc1xuIiwgeHh4KTsKIAot
ICAgICAgSEdfKGRlc2NyaWJlX2FkZHIpICh4ZS0+WEUuUmFjZS5kYXRhX2FkZHIsICZ4ZS0+WEUu
UmFjZS5kYXRhX2FkZHJpbmZvKTsKKyAgICAgIEhHXyhkZXNjcmliZV9hZGRyKSAoVkdfKGdldF9l
cnJvcl93aGVyZSkoZXJyKS5lcG9jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeGUtPlhF
LlJhY2UuZGF0YV9hZGRyLCAmeGUtPlhFLlJhY2UuZGF0YV9hZGRyaW5mbyk7CiAKICAgICAgIC8q
IEFuZCBwb2tlIGFyb3VuZCBpbiB0aGUgY29uZmxpY3RpbmctZXZlbnQgbWFwLCB0byBzZWUgaWYg
d2UKICAgICAgICAgIGNhbiBydXN0bGUgdXAgYSBwbGF1c2libGUtbG9va2luZyBjb25mbGljdGlu
ZyBtZW1vcnkgYWNjZXNzCkBAIC03NDgsNyArNzQ5LDggQEAKICAgICAgICAgIFZHXyhwcmludGZf
eG1sKSgiICA8aXNyb290dGhyZWFkPjwvaXNyb290dGhyZWFkPlxuIik7CiAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgdGxfYXNzZXJ0KHRoci0+Y3JlYXRlZF9hdCAhPSBOVUxMKTsKLSAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KSggdGhyLT5jcmVhdGVkX2F0ICk7CisgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgIFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50
X2Vwb2NoKSggdGhyLT5jcmVhdGVkX2F0ICkgKTsKICAgICAgIH0KICAgICAgIFZHXyhwcmludGZf
eG1sKSgiPC9hbm5vdW5jZXRocmVhZD5cblxuIik7CiAKQEAgLTc2Nyw3ICs3NjksOCBAQAogICAg
ICAgICAgdGxfYXNzZXJ0KHRoci0+Y3JlYXRlZF9hdCAhPSBOVUxMKTsKICAgICAgICAgIFZHXyht
ZXNzYWdlKShWZ19Vc2VyTXNnLCAiVGhyZWFkICMlZCB3YXMgY3JlYXRlZFxuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHItPmVycm1zZ19pbmRleCk7Ci0gICAgICAgICBW
R18ocHBfRXhlQ29udGV4dCkoIHRoci0+Y3JlYXRlZF9hdCApOworICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9l
cG9jaCkoIHRoci0+Y3JlYXRlZF9hdCApICk7CiAgICAgICB9CiAgICAgICBWR18obWVzc2FnZSko
VmdfVXNlck1zZywgIlxuIik7CiAKQEAgLTc4OSw3ICs3OTIsOCBAQAogICAgICAgaWYgKGxrLT5h
cHBlYXJlZF9hdCkgewogICAgICAgICAgZW1pdCggIiAgPGF1eHdoYXQ+TG9jayBhdCAlcCB3YXMg
Zmlyc3Qgb2JzZXJ2ZWQ8L2F1eHdoYXQ+XG4iLAogICAgICAgICAgICAgICAgKHZvaWQqKWxrICk7
Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIGxrLT5hcHBlYXJlZF9hdCApOworICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICBWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoIGxrLT5hcHBlYXJlZF9hdCApICk7CiAgICAgICB9CiAKICAgIH0g
ZWxzZSB7CkBAIC03OTYsMTIgKzgwMCwxMyBAQAogICAgICAgaWYgKGxrLT5hcHBlYXJlZF9hdCkg
ewogICAgICAgICAgVkdfKHVtc2cpKCAiIExvY2sgYXQgJXAgd2FzIGZpcnN0IG9ic2VydmVkXG4i
LAogICAgICAgICAgICAgICAgICAgICAodm9pZCopbGstPmd1ZXN0YWRkciApOwotICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHQpKCBsay0+YXBwZWFyZWRfYXQgKTsKKyAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRf
ZXBvY2gpKCBsay0+YXBwZWFyZWRfYXQgKSApOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgIFZH
Xyh1bXNnKSggIiBMb2NrIGF0ICVwIDogbm8gc3RhY2t0cmFjZSBmb3IgZmlyc3Qgb2JzZXJ2YXRp
b25cbiIsCiAgICAgICAgICAgICAgICAgICAgICh2b2lkKilsay0+Z3Vlc3RhZGRyICk7CiAgICAg
ICB9Ci0gICAgICBIR18oZ2V0X2FuZF9wcF9hZGRyZGVzY3IpIChsay0+Z3Vlc3RhZGRyKTsKKyAg
ICAgIEhHXyhnZXRfYW5kX3BwX2FkZHJkZXNjcikgKFZHXyhjdXJyZW50X0RpRXBvY2gpKCksIGxr
LT5ndWVzdGFkZHIpOwogICAgICAgVkdfKHVtc2cpKCJcbiIpOwogICAgfQogfQpAQCAtOTQxLDEx
ICs5NDYsMTIgQEAKICAgICAgICAgIGVtaXQoICIgICAgPGh0aHJlYWRpZD4lZDwvaHRocmVhZGlk
PlxuIiwKICAgICAgICAgICAgICAgIChJbnQpeGUtPlhFLk1pc2MudGhyLT5lcnJtc2dfaW5kZXgg
KTsKICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7Ci0gICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAg
ICBpZiAoeGUtPlhFLk1pc2MuYXV4c3RyKSB7CiAgICAgICAgICAgICBlbWl0KCIgIDxhdXh3aGF0
PiVzPC9hdXh3aGF0PlxuIiwgeGUtPlhFLk1pc2MuYXV4c3RyKTsKICAgICAgICAgICAgIGlmICh4
ZS0+WEUuTWlzYy5hdXhjdHgpCi0gICAgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIHhl
LT5YRS5NaXNjLmF1eGN0eCApOworICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRF
cG9jaCkoCisgICAgICAgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCko
IHhlLT5YRS5NaXNjLmF1eGN0eCApKTsKICAgICAgICAgIH0KIAogICAgICAgfSBlbHNlIHsKQEAg
LTk1MywxMSArOTU5LDEyIEBACiAgICAgICAgICBlbWl0KCAiVGhyZWFkICMlZDogJXNcbiIsCiAg
ICAgICAgICAgICAgICAoSW50KXhlLT5YRS5NaXNjLnRoci0+ZXJybXNnX2luZGV4LAogICAgICAg
ICAgICAgICAgeGUtPlhFLk1pc2MuZXJyc3RyICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4
dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICBpZiAo
eGUtPlhFLk1pc2MuYXV4c3RyKSB7CiAgICAgICAgICAgICBlbWl0KCIgJXNcbiIsIHhlLT5YRS5N
aXNjLmF1eHN0cik7CiAgICAgICAgICAgICBpZiAoeGUtPlhFLk1pc2MuYXV4Y3R4KQotICAgICAg
ICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuTWlzYy5hdXhjdHggKTsKKyAgICAg
ICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgICAgICAg
VkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKCB4ZS0+WEUuTWlzYy5hdXhjdHggKSk7CiAg
ICAgICAgICB9CiAKICAgICAgIH0KQEAgLTk3OCwxNyArOTg1LDIxIEBACiAgICAgICAgICBlbWl0
KCAiICAgIDxodGhyZWFkaWQ+JWQ8L2h0aHJlYWRpZD5cbiIsCiAgICAgICAgICAgICAgICAoSW50
KXhlLT5YRS5Mb2NrT3JkZXIudGhyLT5lcnJtc2dfaW5kZXggKTsKICAgICAgICAgIGVtaXQoICIg
IDwveHdoYXQ+XG4iICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJy
b3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBW
R18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICBpZiAoeGUtPlhFLkxvY2tPcmRl
ci5zaG91bGRiZV9lYXJsaWVyX2VjCiAgICAgICAgICAgICAgJiYgeGUtPlhFLkxvY2tPcmRlci5z
aG91bGRiZV9sYXRlcl9lYykgewogICAgICAgICAgICAgZW1pdCggIiAgPGF1eHdoYXQ+UmVxdWly
ZWQgb3JkZXIgd2FzIGVzdGFibGlzaGVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICJhY3F1aXNp
dGlvbiBvZiBsb2NrIGF0ICVwPC9hdXh3aGF0PlxuIiwKICAgICAgICAgICAgICAgICAgICh2b2lk
Kil4ZS0+WEUuTG9ja09yZGVyLnNob3VsZGJlX2VhcmxpZXJfbGstPmd1ZXN0YWRkciApOwotICAg
ICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuTG9ja09yZGVyLnNob3VsZGJlX2Vh
cmxpZXJfZWMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKAorICAg
ICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAorICAgICAgICAgICAg
ICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9lYXJsaWVyX2VjICkpOwogICAgICAgICAg
ICAgZW1pdCggIiAgPGF1eHdoYXQ+Zm9sbG93ZWQgYnkgYSBsYXRlciBhY3F1aXNpdGlvbiAiCiAg
ICAgICAgICAgICAgICAgICAib2YgbG9jayBhdCAlcDwvYXV4d2hhdD5cbiIsCiAgICAgICAgICAg
ICAgICAgICAodm9pZCopeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9sYXRlcl9say0+Z3Vlc3Rh
ZGRyICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIHhlLT5YRS5Mb2NrT3JkZXIu
c2hvdWxkYmVfbGF0ZXJfZWMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBv
Y2gpKAorICAgICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAorICAg
ICAgICAgICAgICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9sYXRlcl9lYyApKTsKICAg
ICAgICAgIH0KICAgICAgICAgIGFubm91bmNlX0xvY2tQICggeGUtPlhFLkxvY2tPcmRlci5zaG91
bGRiZV9lYXJsaWVyX2xrICk7CiAgICAgICAgICBhbm5vdW5jZV9Mb2NrUCAoIHhlLT5YRS5Mb2Nr
T3JkZXIuc2hvdWxkYmVfbGF0ZXJfbGsgKTsKQEAgLTEwMDQsNyArMTAxNSw5IEBACiAgICAgICAg
ICAgICAgICAiYWNxdWlzaXRpb24gb2YgbG9jayBhdCAlcFxuIiwKICAgICAgICAgICAgICAgICh2
b2lkKil4ZS0+WEUuTG9ja09yZGVyLnNob3VsZGJlX2xhdGVyX2xrLT5ndWVzdGFkZHIpOwogICAg
ICAgICAgaWYgKHhlLT5YRS5Mb2NrT3JkZXIuYWN0dWFsX2VhcmxpZXJfZWMpIHsKLSAgICAgICAg
ICAgICBWR18ocHBfRXhlQ29udGV4dCkoeGUtPlhFLkxvY2tPcmRlci5hY3R1YWxfZWFybGllcl9l
Yyk7CisgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAg
ICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAorICAgICAgICAgICAgICAgICAg
IHhlLT5YRS5Mb2NrT3JkZXIuYWN0dWFsX2VhcmxpZXJfZWMpKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBlbWl0KCIgICAoc3RhY2sgdW5hdmFpbGFibGUpXG4iKTsKICAgICAgICAg
IH0KQEAgLTEwMTEsNyArMTAyNCw3IEBACiAgICAgICAgICBlbWl0KCAiXG4iICk7CiAgICAgICAg
ICBlbWl0KCIgZm9sbG93ZWQgYnkgYSBsYXRlciBhY3F1aXNpdGlvbiBvZiBsb2NrIGF0ICVwXG4i
LAogICAgICAgICAgICAgICAodm9pZCopeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9lYXJsaWVy
X2xrLT5ndWVzdGFkZHIpOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vy
cm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgg
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgaWYgKHhlLT5YRS5Mb2NrT3Jk
ZXIuc2hvdWxkYmVfZWFybGllcl9lYwogICAgICAgICAgICAgICYmIHhlLT5YRS5Mb2NrT3JkZXIu
c2hvdWxkYmVfbGF0ZXJfZWMpIHsKICAgICAgICAgICAgIGVtaXQoIlxuIik7CkBAIC0xMDE4LDEx
ICsxMDMxLDE1IEBACiAgICAgICAgICAgICBlbWl0KCAiUmVxdWlyZWQgb3JkZXIgd2FzIGVzdGFi
bGlzaGVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICJhY3F1aXNpdGlvbiBvZiBsb2NrIGF0ICVw
XG4iLAogICAgICAgICAgICAgICAgICAgKHZvaWQqKXhlLT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVf
ZWFybGllcl9say0+Z3Vlc3RhZGRyICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCko
IHhlLT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVfZWFybGllcl9lYyApOworICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhf
Y3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91
bGRiZV9lYXJsaWVyX2VjICkpOwogICAgICAgICAgICAgZW1pdCggIlxuIiApOwogICAgICAgICAg
ICAgZW1pdCggIiBmb2xsb3dlZCBieSBhIGxhdGVyIGFjcXVpc2l0aW9uIG9mIGxvY2sgYXQgJXBc
biIsCiAgICAgICAgICAgICAgICAgICAodm9pZCopeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9s
YXRlcl9say0+Z3Vlc3RhZGRyICk7Ci0gICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIHhl
LT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVfbGF0ZXJfZWMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9F
eGVDb250ZXh0QW5kRXBvY2gpKAorICAgICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJl
bnRfZXBvY2gpKAorICAgICAgICAgICAgICAgICAgeGUtPlhFLkxvY2tPcmRlci5zaG91bGRiZV9s
YXRlcl9lYyApKTsKICAgICAgICAgIH0KICAgICAgICAgIGVtaXQoIlxuIik7CiAgICAgICAgICBh
bm5vdW5jZV9Mb2NrUCAoIHhlLT5YRS5Mb2NrT3JkZXIuc2hvdWxkYmVfZWFybGllcl9sayApOwpA
QCAtMTA0OCw3ICsxMDY1LDcgQEAKICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7CiAg
ICAgICAgICBlbWl0KCAiICA8d2hhdD53aXRoIGVycm9yIGNvZGUgJWxkICglcyk8L3doYXQ+XG4i
LAogICAgICAgICAgICAgICAgeGUtPlhFLlB0aEFQSWVycm9yLmVyciwgeGUtPlhFLlB0aEFQSWVy
cm9yLmVycnN0ciApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdf
KGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogCiAgICAgICB9IGVsc2UgewogCkBAIC0xMDU3LDcg
KzEwNzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIHhlLT5YRS5QdGhBUEllcnJvci5mbm5h
bWUgKTsKICAgICAgICAgIGVtaXQoICIgICB3aXRoIGVycm9yIGNvZGUgJWxkICglcylcbiIsCiAg
ICAgICAgICAgICAgICB4ZS0+WEUuUHRoQVBJZXJyb3IuZXJyLCB4ZS0+WEUuUHRoQVBJZXJyb3Iu
ZXJyc3RyICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hl
cmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0
X2Vycm9yX3doZXJlKShlcnIpICk7CiAKICAgICAgIH0KIApAQCAtMTA3Nyw3ICsxMDk0LDcgQEAK
ICAgICAgICAgIGVtaXQoICIgICAgPGh0aHJlYWRpZD4lZDwvaHRocmVhZGlkPlxuIiwKICAgICAg
ICAgICAgICAgIChJbnQpeGUtPlhFLlVubG9ja0JvZ3VzLnRoci0+ZXJybXNnX2luZGV4ICk7CiAg
ICAgICAgICBlbWl0KCAiICA8L3h3aGF0PlxuIiApOwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogCiAgICAgICB9IGVs
c2UgewogCkBAIC0xMDg0LDcgKzExMDEsNyBAQAogICAgICAgICAgZW1pdCggIlRocmVhZCAjJWQg
dW5sb2NrZWQgYW4gaW52YWxpZCBsb2NrIGF0ICVwXG4iLAogICAgICAgICAgICAgICAgKEludCl4
ZS0+WEUuVW5sb2NrQm9ndXMudGhyLT5lcnJtc2dfaW5kZXgsCiAgICAgICAgICAgICAgICAodm9p
ZCopeGUtPlhFLlVubG9ja0JvZ3VzLmxvY2tfZ2EgKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKIAogICAgICAgfQog
CkBAIC0xMTA5LDcgKzExMjYsNyBAQAogICAgICAgICAgZW1pdCggIiAgICA8aHRocmVhZGlkPiVk
PC9odGhyZWFkaWQ+XG4iLAogICAgICAgICAgICAgICAgKEludCl4ZS0+WEUuVW5sb2NrRm9yZWln
bi5vd25lci0+ZXJybXNnX2luZGV4ICk7CiAgICAgICAgICBlbWl0KCAiICA8L3h3aGF0PlxuIiAp
OwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIp
ICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOwogICAgICAgICAgYW5ub3VuY2VfTG9ja1AgKCB4ZS0+WEUuVW5sb2NrRm9y
ZWlnbi5sb2NrICk7CiAKICAgICAgIH0gZWxzZSB7CkBAIC0xMTE5LDcgKzExMzYsNyBAQAogICAg
ICAgICAgICAgICAgKEludCl4ZS0+WEUuVW5sb2NrRm9yZWlnbi50aHItPmVycm1zZ19pbmRleCwK
ICAgICAgICAgICAgICAgICh2b2lkKil4ZS0+WEUuVW5sb2NrRm9yZWlnbi5sb2NrLT5ndWVzdGFk
ZHIsCiAgICAgICAgICAgICAgICAoSW50KXhlLT5YRS5VbmxvY2tGb3JlaWduLm93bmVyLT5lcnJt
c2dfaW5kZXggKTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhn
ZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgIGFubm91bmNlX0xvY2tQICggeGUtPlhF
LlVubG9ja0ZvcmVpZ24ubG9jayApOwogCiAgICAgICB9CkBAIC0xMTQxLDcgKzExNTgsNyBAQAog
ICAgICAgICAgZW1pdCggIiAgICA8aHRocmVhZGlkPiVkPC9odGhyZWFkaWQ+XG4iLAogICAgICAg
ICAgICAgICAgKEludCl4ZS0+WEUuVW5sb2NrVW5sb2NrZWQudGhyLT5lcnJtc2dfaW5kZXggKTsK
ICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7Ci0gICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAgICAgICAgICBh
bm5vdW5jZV9Mb2NrUCAoIHhlLT5YRS5VbmxvY2tVbmxvY2tlZC5sb2NrKTsKIAogICAgICAgfSBl
bHNlIHsKQEAgLTExNDksNyArMTE2Niw3IEBACiAgICAgICAgICBlbWl0KCAiVGhyZWFkICMlZCB1
bmxvY2tlZCBhIG5vdC1sb2NrZWQgbG9jayBhdCAlcFxuIiwKICAgICAgICAgICAgICAgIChJbnQp
eGUtPlhFLlVubG9ja1VubG9ja2VkLnRoci0+ZXJybXNnX2luZGV4LAogICAgICAgICAgICAgICAg
KHZvaWQqKXhlLT5YRS5VbmxvY2tVbmxvY2tlZC5sb2NrLT5ndWVzdGFkZHIgKTsKLSAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKICAgICAgICAgIGFubm91bmNlX0xvY2tQICggeGUtPlhFLlVubG9ja1VubG9ja2VkLmxvY2sp
OwogCiAgICAgICB9CkBAIC0xMTc5LDcgKzExOTYsNyBAQAogICAgICAgICAgZW1pdCggIiAgICA8
aHRocmVhZGlkPiVkPC9odGhyZWFkaWQ+XG4iLAogICAgICAgICAgICAgICAgKEludCl4ZS0+WEUu
UmFjZS50aHItPmVycm1zZ19pbmRleCApOwogICAgICAgICAgZW1pdCggIiAgPC94d2hhdD5cbiIg
KTsKLSAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJy
KSApOworICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jf
d2hlcmUpKGVycikgKTsKIAogICAgICAgICAgaWYgKHhlLT5YRS5SYWNlLmgyX2N0KSB7CiAgICAg
ICAgICAgICB0bF9hc3NlcnQoeGUtPlhFLlJhY2UuaDJfY3RfYWNjRUMpOyAvLyBhc3N1cmVkIGJ5
IHVwZGF0ZV9leHRyYQpAQCAtMTE5Miw3ICsxMjA5LDggQEAKICAgICAgICAgICAgIGVtaXQoICIg
ICAgPGh0aHJlYWRpZD4lZDwvaHRocmVhZGlkPlxuIiwgCiAgICAgICAgICAgICAgICAgICB4ZS0+
WEUuUmFjZS5oMl9jdC0+ZXJybXNnX2luZGV4KTsKICAgICAgICAgICAgIGVtaXQoIiAgPC94YXV4
d2hhdD5cbiIpOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5o
Ml9jdF9hY2NFQyApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisg
ICAgICAgICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoIHhlLT5YRS5SYWNl
LmgyX2N0X2FjY0VDICkpOwogICAgICAgICAgfQogCiAgICAgICAgICBpZiAoeGUtPlhFLlJhY2Uu
aDFfY3QpIHsKQEAgLTEyMDQsMTMgKzEyMjIsMTcgQEAKICAgICAgICAgICAgICAgICAgIHhlLT5Y
RS5SYWNlLmgxX2N0LT5lcnJtc2dfaW5kZXggKTsKICAgICAgICAgICAgIGVtaXQoIiAgPC94YXV4
d2hhdD5cbiIpOwogICAgICAgICAgICAgaWYgKHhlLT5YRS5SYWNlLmgxX2N0X21ic2Vnc3RhcnRF
QykgewotICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5oMV9j
dF9tYnNlZ3N0YXJ0RUMgKTsKKyAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBv
Y2gpKAorICAgICAgICAgICAgICAgICAgVkdfKHRhZ19FQ193aXRoX2N1cnJlbnRfZXBvY2gpKAor
ICAgICAgICAgICAgICAgICAgICAgeGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdzdGFydEVDICkpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0Pih0
aGUgc3RhcnQgb2YgdGhlIHRocmVhZCk8L2F1eHdoYXQ+XG4iICk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbWl0KCAiICA8YXV4d2hhdD5idXQgYmVmb3JlPC9hdXh3aGF0PlxuIiApOwog
ICAgICAgICAgICAgaWYgKHhlLT5YRS5SYWNlLmgxX2N0X21ic2VnZW5kRUMpIHsKLSAgICAgICAg
ICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggeGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdlbmRFQyAp
OworICAgICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAg
ICAgICAgICBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAg
ICAgICB4ZS0+WEUuUmFjZS5oMV9jdF9tYnNlZ2VuZEVDICkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgIGVtaXQoICIgIDxhdXh3aGF0Pih0aGUgZW5kIG9mIHRoZSB0aHJl
YWQpPC9hdXh3aGF0PlxuIiApOwogICAgICAgICAgICAgfQpAQCAtMTIyOCw3ICsxMjUwLDcgQEAK
IAogICAgICAgICAgdGxfYXNzZXJ0KHhlLT5YRS5SYWNlLmxvY2tzSGVsZFcpOwogICAgICAgICAg
c2hvd19Mb2NrUF9zdW1tYXJ5X3RleHRtb2RlKCB4ZS0+WEUuUmFjZS5sb2Nrc0hlbGRXLCAiIiAp
OwotICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIp
ICk7CisgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOwogCiAgICAgICAgICBpZiAoeGUtPlhFLlJhY2UuaDJfY3QpIHsKICAgICAg
ICAgICAgIHRsX2Fzc2VydCh4ZS0+WEUuUmFjZS5oMl9jdF9hY2NFQyk7IC8vIGFzc3VyZWQgYnkg
dXBkYXRlX2V4dHJhCkBAIC0xMjQwLDcgKzEyNjIsOCBAQAogICAgICAgICAgICAgICAgICAgeGUt
PlhFLlJhY2UuaDJfY3RfYWNjU3pCLAogICAgICAgICAgICAgICAgICAgeGUtPlhFLlJhY2UuaDJf
Y3QtPmVycm1zZ19pbmRleCApOwogICAgICAgICAgICAgc2hvd19Mb2NrUF9zdW1tYXJ5X3RleHRt
b2RlKCB4ZS0+WEUuUmFjZS5oMl9jdF9sb2Nrc0hlbGRXLCAiIiApOwotICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5oMl9jdF9hY2NFQyApOworICAgICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoCisgICAgICAgICAgICAgICBWR18odGFnX0VDX3dp
dGhfY3VycmVudF9lcG9jaCkoIHhlLT5YRS5SYWNlLmgyX2N0X2FjY0VDICkpOwogICAgICAgICAg
fQogCiAgICAgICAgICBpZiAoeGUtPlhFLlJhY2UuaDFfY3QpIHsKQEAgLTEyNDgsMTMgKzEyNzEs
MTcgQEAKICAgICAgICAgICAgICAgICAgICJhZnRlclxuIiwKICAgICAgICAgICAgICAgICAgIHhl
LT5YRS5SYWNlLmgxX2N0LT5lcnJtc2dfaW5kZXggKTsKICAgICAgICAgICAgIGlmICh4ZS0+WEUu
UmFjZS5oMV9jdF9tYnNlZ3N0YXJ0RUMpIHsKLSAgICAgICAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggeGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdzdGFydEVDICk7CisgICAgICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKSgKKyAgICAgICAgICAgICAgICAgICAgIHhlLT5YRS5SYWNlLmgx
X2N0X21ic2Vnc3RhcnRFQyApKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICBlbWl0KCAiICAgKHRoZSBzdGFydCBvZiB0aGUgdGhyZWFkKVxuIiApOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZW1pdCggIiBidXQgYmVmb3JlXG4iICk7CiAgICAgICAgICAgICBpZiAo
eGUtPlhFLlJhY2UuaDFfY3RfbWJzZWdlbmRFQykgewotICAgICAgICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHQpKCB4ZS0+WEUuUmFjZS5oMV9jdF9tYnNlZ2VuZEVDICk7CisgICAgICAgICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSgKKyAgICAgICAgICAgICAgICAgIFZHXyh0YWdf
RUNfd2l0aF9jdXJyZW50X2Vwb2NoKSgKKyAgICAgICAgICAgICAgICAgICAgIHhlLT5YRS5SYWNl
LmgxX2N0X21ic2VnZW5kRUMgKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgZW1pdCggIiAgICh0aGUgZW5kIG9mIHRoZSB0aHJlYWQpXG4iICk7CiAgICAgICAgICAgICB9
CkBAIC0xMzA3LDcgKzEzMzQsNyBAQAogICAgICAgc2hvd19Mb2NrUF9zdW1tYXJ5X3RleHRtb2Rl
KCBsb2Nrc0hlbGRXX1AsICIiICk7CiAgICAgICBIR18oZnJlZSkgKGxvY2tzSGVsZFdfUCk7CiAg
ICB9Ci0gICBWR18ocHBfU3RhY2tUcmFjZSkgKGlwcywgbl9pcHMpOworICAgVkdfKHBwX1N0YWNr
VHJhY2UpKCBWR18oY3VycmVudF9EaUVwb2NoKSgpLCBpcHMsIG5faXBzICk7CiAgICBWR18ocHJp
bnRmKSAoIlxuIik7CiB9CiAKSW5kZXg6IGhlbGdyaW5kL2hnX21haW4uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBoZWxncmluZC9oZ19tYWluLmMJKHJldmlzaW9uIDE2NDY1KQorKysgaGVsZ3JpbmQvaGdfbWFp
bi5jCSh3b3JraW5nIGNvcHkpCkBAIC00ODMsNiArNDgzLDcgQEAKICAgICAgICAgICAgICAgICAg
ICAgICBCb29sIHNob3dfbG9ja19hZGRyZGVzY3IsCiAgICAgICAgICAgICAgICAgICAgICAgQm9v
bCBzaG93X2ludGVybmFsX2RhdGEpCiB7CisgICBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlF
cG9jaCkoKTsKICAgIHNwYWNlKGQrMCk7IAogICAgaWYgKHNob3dfaW50ZXJuYWxfZGF0YSkKICAg
ICAgIFZHXyhwcmludGYpKCJMb2NrICVwIChnYSAlI2x4KSB7XG4iLCBsaywgbGstPmd1ZXN0YWRk
cik7CkBAIC00ODksNyArNDkwLDcgQEAKICAgIGVsc2UKICAgICAgIFZHXyhwcmludGYpKCJMb2Nr
IGdhICUjbHgge1xuIiwgbGstPmd1ZXN0YWRkcik7CiAgICBpZiAoIXNob3dfbG9ja19hZGRyZGVz
Y3IgCi0gICAgICAgfHwgIUhHXyhnZXRfYW5kX3BwX2FkZHJkZXNjcikgKChBZGRyKSBsay0+Z3Vl
c3RhZGRyKSkKKyAgICAgICB8fCAhSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoZXAsIChBZGRy
KSBsay0+Z3Vlc3RhZGRyKSkKICAgICAgIFZHXyhwcmludGYpKCJcbiIpOwogICAgICAgCiAgICBp
ZiAoc0hPV19BRE1JTikgewpAQCAtNDU5OCw3ICs0NTk5LDcgQEAKICAgIERlYnVnSW5mbyogZGlu
Zm87CiAgICBjb25zdCBIQ2hhciogc29uYW1lOwogCi0gICBkaW5mbyA9IFZHXyhmaW5kX0RlYnVn
SW5mbykoIGdhICk7CisgICBkaW5mbyA9IFZHXyhmaW5kX0RlYnVnSW5mbykoIFZHXyhjdXJyZW50
X0RpRXBvY2gpKCksIGdhICk7CiAgICBpZiAoIWRpbmZvKSByZXR1cm4gRmFsc2U7CiAKICAgIHNv
bmFtZSA9IFZHXyhEZWJ1Z0luZm9fZ2V0X3NvbmFtZSkoZGluZm8pOwpAQCAtNTgxNyw5ICs1ODE4
LDkgQEAKICAgICAgIFZHXyhYVE1lbW9yeV9GdWxsX2luaXQpKFZHXyhYVF9maWx0ZXJfMXRvcF9h
bmRfbWF5YmVfYmVsb3dfbWFpbikpOwogfQogCi1zdGF0aWMgdm9pZCBoZ19pbmZvX2xvY2F0aW9u
IChBZGRyIGEpCitzdGF0aWMgdm9pZCBoZ19pbmZvX2xvY2F0aW9uIChEaUVwb2NoIGVwLCBBZGRy
IGEpCiB7Ci0gICAodm9pZCkgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoYSk7CisgICAodm9p
ZCkgSEdfKGdldF9hbmRfcHBfYWRkcmRlc2NyKSAoZXAsIGEpOwogfQogCiBzdGF0aWMgdm9pZCBo
Z19wcmVfY2xvX2luaXQgKCB2b2lkICkKSW5kZXg6IGhlbGdyaW5kL2xpYmhiX2NvcmUuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBoZWxncmluZC9saWJoYl9jb3JlLmMJKHJldmlzaW9uIDE2NDY1KQorKysgaGVs
Z3JpbmQvbGliaGJfY29yZS5jCSh3b3JraW5nIGNvcHkpCkBAIC00MDk1LDcgKzQwOTUsNyBAQAog
ICAgICAgVkdfKHByaW50ZikoIkxPQ0FMIEt3OiB0aHIgJXAsICBLdyAlbGx1LCAgZWMgJXBcbiIs
CiAgICAgICAgICAgICAgICAgICB0aHIsIHBhaXIudWxsLCBwYWlyLmVjICk7CiAgICBpZiAoMCkK
LSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KShwYWlyLmVjKTsKKyAgICAgIFZHXyhwcF9FeGVDb250
ZXh0QW5kRXBvY2gpKFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShwYWlyLmVjKSk7CiB9
CiAKIHN0YXRpYyBJbnQgY21wX19VTG9uZ19uX0VDX19ieV9VTG9uZyAoIGNvbnN0IFVMb25nX25f
RUMqIHBhaXIxLApJbmRleDogaW5jbHVkZS9wdWJfdG9vbF9hZGRyaW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGluY2x1ZGUvcHViX3Rvb2xfYWRkcmluZm8uaAkocmV2aXNpb24gMTY0NjUpCisrKyBpbmNs
dWRlL3B1Yl90b29sX2FkZHJpbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsNyBA
QAogICAgICAgLy8gKHNwb2Zmc2V0IHdpbGwgYmUgbmVnYXRpdmUsIGFzIHN0YWNrcyBhcmUgYXNz
dW1lZCBncm93aW5nIGRvd24pLgogICAgICAgc3RydWN0IHsKICAgICAgICAgIFRocmVhZEluZm8g
dGluZm87CisgICAgICAgICBEaUVwb2NoICBlcG9jaDsKICAgICAgICAgIEFkZHIgICAgIElQOwog
ICAgICAgICAgSW50ICAgICAgZnJhbWVObzsKICAgICAgICAgIFN0YWNrUG9zIHN0YWNrUG9zOwpA
QCAtMTUxLDkgKzE1Miw5IEBACiAgICAgICAgICBjb25zdCBIQ2hhciogYmxvY2tfZGVzYzsgICAv
LyAiYmxvY2siLCJtZW1wb29sIiwidXNlci1kZWZpbmVkIixhcmVuYQogICAgICAgICAgU2l6ZVQg
ICAgICAgYmxvY2tfc3pCOwogICAgICAgICAgUHRyZGlmZlQgICAgcndvZmZzZXQ7Ci0gICAgICAg
ICBFeGVDb250ZXh0KiBhbGxvY2F0ZWRfYXQ7ICAvLyBtaWdodCBiZSBudWxsX0V4ZUNvbnRleHQu
Ci0gICAgICAgICBUaHJlYWRJbmZvICBhbGxvY190aW5mbzsgICAvLyB3aGljaCB0aHJlYWQgZGlk
IGFsbG9jIHRoaXMgYmxvY2suCi0gICAgICAgICBFeGVDb250ZXh0KiBmcmVlZF9hdDsgICAgICAv
LyBtaWdodCBiZSBudWxsX0V4ZUNvbnRleHQuCisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2gg
YWxsb2NhdGVkX2F0OyAvLyBtaWdodCBjb250YWluIG51bGxfRXhlQ29udGV4dC4KKyAgICAgICAg
IFRocmVhZEluZm8gICAgICAgICBhbGxvY190aW5mbzsgIC8vIHdoaWNoIHRocmVhZCBhbGxvYydk
IHRoaXMgYmxvY2suCisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggZnJlZWRfYXQ7ICAgICAv
LyBtaWdodCBjb250YWluIG51bGxfRXhlQ29udGV4dC4KICAgICAgIH0gQmxvY2s7CiAKICAgICAg
IC8vIEluIGEgZ2xvYmFsIC5kYXRhIHN5bWJvbC4gIFRoaXMgaG9sZHMKQEAgLTIwNCw3ICsyMDUs
NyBAQAogICAgT24gZW50cnksIGFpLT50YWcgbXVzdCBiZSBlcXVhbCB0byBBZGRyX1VuZGVzY3Jp
YmVkLgogICAgVGhpcyBtaWdodCBhbGxvY2F0ZSBzb21lIG1lbW9yeSwgdGhhdCBjYW4gYmUgY2xl
YXJlZCB3aXRoCiAgICBWR18oY2xlYXJfYWRkcmluZm8pLiAqLwotZXh0ZXJuIHZvaWQgVkdfKGRl
c2NyaWJlX2FkZHIpICggQWRkciBhLCAvKk9VVCovQWRkckluZm8qIGFpICk7CitleHRlcm4gdm9p
ZCBWR18oZGVzY3JpYmVfYWRkcikgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIC8qT1VUKi9BZGRySW5m
byogYWkgKTsKIAogZXh0ZXJuIHZvaWQgVkdfKGNsZWFyX2FkZHJpbmZvKSAoIEFkZHJJbmZvKiBh
aSk7CiAKSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfYmFzaWNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5j
bHVkZS9wdWJfdG9vbF9iYXNpY3MuaAkocmV2aXNpb24gMTY0NjUpCisrKyBpbmNsdWRlL3B1Yl90
b29sX2Jhc2ljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNiArMTI5LDI0IEBACiAvKiBUaHJl
YWRJZHMgYXJlIHNpbXBseSBpbmRpY2VzIGludG8gdGhlIFZHXyh0aHJlYWRzKVtdIGFycmF5LiAq
LwogdHlwZWRlZiBVSW50IFRocmVhZElkOwogCisKKy8qIFlvdSBuZWVkIGEgZGVidWdpbmZvIGVw
b2NoIGluIG9yZGVyIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBpbnRvIGFueSBzb3VyY2UKKyAgIGxl
dmVsIGVudGl0eSwgc2luY2UgdGhhdCBjb252ZXJzaW9uIGRlcGVuZHMgb24gd2hhdCBvYmplY3Rz
IHdlcmUgbWFwcGVkCisgICBpbiBhdCB0aGUgdGltZS4gIEFuIGVwb2NoIGlzIHNpbXBseSBhIG1v
bm90b25pY2FsbHkgaW5jcmVhc2luZyBjb3VudGVyLAorICAgd2hpY2ggd2Ugd3JhcCB1cCBpbiBh
IHN0cnVjdCBzbyBhcyB0byBlbmFibGUgdGhlIEMgdHlwZSBzeXN0ZW0gdG8KKyAgIGRpc3Rpbmd1
aXNoIGl0IGZyb20gb3RoZXIga2luZHMgb2YgbnVtYmVycy4gIG1fZGVidWdpbmZvIGhvbGRzIGFu
ZAorICAgbWFpbnRhaW5zIHRoZSBjdXJyZW50IGVwb2NoIG51bWJlci4gKi8KK3R5cGVkZWYgIHN0
cnVjdCB7IFVJbnQgbjsgfSAgRGlFcG9jaDsKKworc3RhdGljIGlubGluZSBEaUVwb2NoIERpRXBv
Y2hfSU5WQUxJRCAoIHZvaWQgKSB7CisgICBEaUVwb2NoIGRlcDsgZGVwLm4gPSAwOyByZXR1cm4g
ZGVwOworfQorCitzdGF0aWMgaW5saW5lIEJvb2wgaXNfRGlFcG9jaF9JTlZBTElEICggRGlFcG9j
aCBkZXAgKSB7CisgICByZXR1cm4gZGVwLm4gPT0gMDsKK30KKworCiAvKiBNYW55IGRhdGEgc3Ry
dWN0dXJlcyBuZWVkIHRvIGFsbG9jYXRlIGFuZCByZWxlYXNlIG1lbW9yeS4KICAgIFRoZSBhbGxv
Y2F0aW9uL3JlbGVhc2UgZnVuY3Rpb25zIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4K
ICAgIFRoZSBBbGxvY19Gbl90IGZ1bmN0aW9uIG11c3QgYWxsb2NhdGUgYSBjaHVuayBvZiBtZW1v
cnkgb2Ygc2l6ZSBzekIuCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX2RlYnVnaW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfZGVidWdpbmZvLmgJKHJldmlzaW9uIDE2NDY1KQor
KysgaW5jbHVkZS9wdWJfdG9vbF9kZWJ1Z2luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMg
KzMxLDIyIEBACiAjaWZuZGVmIF9fUFVCX1RPT0xfREVCVUdJTkZPX0gKICNkZWZpbmUgX19QVUJf
VE9PTF9ERUJVR0lORk9fSAogCi0jaW5jbHVkZSAicHViX3Rvb2xfYmFzaWNzLmgiICAgLy8gVkdf
IG1hY3JvCisjaW5jbHVkZSAicHViX3Rvb2xfYmFzaWNzLmgiICAgLy8gVkdfIG1hY3JvLCBEaUVw
b2NoCiAjaW5jbHVkZSAicHViX3Rvb2xfeGFycmF5LmgiICAgLy8gWEFycmF5CiAKKwogLyo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSovCi0vKj09PSBPYnRhaW5pbmcgZGVidWcgaW5mb3JtYXRpb24gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPT09Ki8KKy8qPT09IERlYnVnaW5mbyBlcG9jaHMuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0qLwogLyo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PSovCiAKKy8vIFRoaXMgcmV0dXJucyB0aGUgY3VycmVudCBlcG9jaC4KK0RpRXBvY2ggVkdfKGN1
cnJlbnRfRGlFcG9jaCkodm9pZCk7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKj09PSBPYnRhaW5p
bmcgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBzb3VyY2UgYXJ0ZWZhY3RzLiAgICAgICAgPT09
Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0qLworCiAvKiBJTVBPUlRBTlQgQ09NTUVOVCBhYm91dCBtZW1vcnkg
cGVyc2lzdGVuY2UgYW5kIG93bmVyc2hpcC4KIAogICAgTWFueSBmdW5jdGlvbnMgYmVsb3cgYXJl
IHJldHVybmluZyBhIHN0cmluZyBpbiBhIEhDaGFyKiogYXJndW1lbnQuCkBAIC03NiwxMSArODUs
MTEgQEAKICAgIGRlbWFuZ2xlcyBDKysgZnVuY3Rpb24gbmFtZXMuICBWR18oZ2V0X2ZubmFtZV93
X29mZnNldCkgaXMgdGhlCiAgICBzYW1lLCBleGNlcHQgaXQgYXBwZW5kcyAiK04iIHRvIHN5bWJv
bCBuYW1lcyB0byBpbmRpY2F0ZSBvZmZzZXRzLgogICAgTk9URTogU2VlIElNUE9SVEFOVCBDT01N
RU5UIGFib3ZlIGFib3V0IHBlcnNpc3RlbmNlIGFuZCBvd25lcnNoaXAuICovCi1leHRlcm4gQm9v
bCBWR18oZ2V0X2ZpbGVuYW1lKSAoIEFkZHIgYSwgY29uc3QgSENoYXIqKiBmaWxlbmFtZSApOwot
ZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5hbWUpICAgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogZm5u
YW1lICk7Ci1leHRlcm4gQm9vbCBWR18oZ2V0X2xpbmVudW0pICAoIEFkZHIgYSwgVUludCogbGlu
ZW51bSApOworZXh0ZXJuIEJvb2wgVkdfKGdldF9maWxlbmFtZSkgKCBEaUVwb2NoIGVwLCBBZGRy
IGEsIGNvbnN0IEhDaGFyKiogZmlsZW5hbWUgKTsKK2V4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1l
KSAgICggRGlFcG9jaCBlcCwgQWRkciBhLCBjb25zdCBIQ2hhcioqIGZubmFtZSApOworZXh0ZXJu
IEJvb2wgVkdfKGdldF9saW5lbnVtKSAgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIFVJbnQqIGxpbmVu
dW0gKTsKIGV4dGVybiBCb29sIFZHXyhnZXRfZm5uYW1lX3dfb2Zmc2V0KQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiogZm5uYW1lICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoIERpRXBvY2ggZXAsIEFkZHIgYSwgY29uc3QgSENo
YXIqKiBmbm5hbWUgKTsKIAogLyogVGhpcyBvbmUgaXMgdGhlIG1vc3QgZ2VuZXJhbC4gIEl0IGdp
dmVzIGZpbGVuYW1lLCBsaW5lIG51bWJlciBhbmQKICAgIG9wdGlvbmFsbHkgZGlyZWN0b3J5IG5h
bWUuICBmaWxlbmFtZSBhbmQgbGluZW51bSBtYXkgbm90IGJlIE5VTEwuCkBAIC05NSw3ICsxMDQs
NyBAQAogICAgUmV0dXJuZWQgdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgYW55IGZpbGVuYW1lL2xp
bmUgaW5mbyBjb3VsZCBiZQogICAgZm91bmQuICovCiBleHRlcm4gQm9vbCBWR18oZ2V0X2ZpbGVu
YW1lX2xpbmVudW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIEFkZHIgYSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIERpRXBvY2ggZXAsIEFkZHIgYSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qT1VUKi9jb25zdCBIQ2hhcioqIGZpbGVuYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovY29uc3QgSENoYXIqKiBk
aXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKk9VVCovVUludCogbGlu
ZW51bSApOwpAQCAtMTA4LDcgKzExNyw4IEBACiAgICBvZiBpdHMgc3ltYm9scywgdGhpcyBmdW5j
dGlvbiB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlY29nbmlzZSBmdW5jdGlvbgogICAgZW50cnkgcG9p
bnRzIHdpdGhpbiBpdC4KICAgIE5PVEU6IFNlZSBJTVBPUlRBTlQgQ09NTUVOVCBhYm92ZSBhYm91
dCBwZXJzaXN0ZW5jZSBhbmQgb3duZXJzaGlwLiAqLwotZXh0ZXJuIEJvb2wgVkdfKGdldF9mbm5h
bWVfaWZfZW50cnkpICggQWRkciBhLCBjb25zdCBIQ2hhcioqIGZubmFtZSApOworZXh0ZXJuIEJv
b2wgVkdfKGdldF9mbm5hbWVfaWZfZW50cnkpICggRGlFcG9jaCBlcCwgQWRkciBhLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSENoYXIqKiBmbm5hbWUgKTsK
IAogdHlwZWRlZgogICAgZW51bSB7CkBAIC0xMjEsMTMgKzEzMSwxMyBAQAogZXh0ZXJuIFZnX0Zu
TmFtZUtpbmQgVkdfKGdldF9mbm5hbWVfa2luZCkgKCBjb25zdCBIQ2hhciogbmFtZSApOwogCiAv
KiBMaWtlIFZHXyhnZXRfZm5uYW1lX2tpbmQpLCBidXQgdGFrZXMgYSBjb2RlIGFkZHJlc3MuICov
Ci1leHRlcm4gVmdfRm5OYW1lS2luZCBWR18oZ2V0X2ZubmFtZV9raW5kX2Zyb21fSVApICggQWRk
ciBpcCApOworZXh0ZXJuIFZnX0ZuTmFtZUtpbmQgVkdfKGdldF9mbm5hbWVfa2luZF9mcm9tX0lQ
KSAoIERpRXBvY2ggZXAsIEFkZHIgaXAgKTsKIAogLyogTG9va3MgdXAgZGF0YV9hZGRyIGluIHRo
ZSBjb2xsZWN0aW9uIG9mIGRhdGEgc3ltYm9scywgYW5kIGlmIGZvdW5kCiAgICBwdXRzIGl0cyBu
YW1lIChvciBhcyBtdWNoIGFzIHdpbGwgZml0KSBpbnRvIGRuYW1lWzAgLi4gbl9kbmFtZS0xXSwK
ICAgIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVybyB0ZXJtaW5hdGVkLiAgQWxzbyBkYXRh
X2FkZHIncyBvZmZzZXQKICAgIGZyb20gdGhlIHN5bWJvbCBzdGFydCBpcyBwdXQgaW50byAqb2Zm
c2V0LiAqLwotZXh0ZXJuIEJvb2wgVkdfKGdldF9kYXRhc3ltX2FuZF9vZmZzZXQpKCBBZGRyIGRh
dGFfYWRkciwKK2V4dGVybiBCb29sIFZHXyhnZXRfZGF0YXN5bV9hbmRfb2Zmc2V0KSggRGlFcG9j
aCBlcCwgQWRkciBkYXRhX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qT1VUKi9jb25zdCBIQ2hhcioqIGRuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKk9VVCovUHRyZGlmZlQqIG9mZnNldCApOwogCkBAIC0xNDcs
NyArMTU3LDcgQEAKIEJvb2wgVkdfKGdldF9kYXRhX2Rlc2NyaXB0aW9uKSggCiAgICAgICAgIC8q
TU9EKi8gWEFycmF5KiAvKiBvZiBIQ2hhciAqLyBkbmFtZTF2LAogICAgICAgICAvKk1PRCovIFhB
cnJheSogLyogb2YgSENoYXIgKi8gZG5hbWUydiwKLSAgICAgICAgQWRkciBkYXRhX2FkZHIKKyAg
ICAgICAgRGlFcG9jaCBlcCwgQWRkciBkYXRhX2FkZHIKICAgICAgKTsKIAogLyogU3VjY2VlZHMg
aWYgdGhlIGFkZHJlc3MgaXMgd2l0aGluIGEgc2hhcmVkIG9iamVjdCBvciB0aGUgbWFpbiBleGVj
dXRhYmxlLgpAQCAtMTU0LDcgKzE2NCw3IEBACiAgICBJdCBmaXJzdCBzZWFyY2hlcyBpZiBBZGRy
IGEgYmVsb25ncyB0byB0aGUgdGV4dCBzZWdtZW50IG9mIGRlYnVnIGluZm8uCiAgICBJZiBub3Qg
Zm91bmQsIGl0IGFza3MgdGhlIGFkZHJlc3Mgc3BhY2UgbWFuYWdlciB3aGV0aGVyIGl0CiAgICBr
bm93cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXBwaW5nLiAq
LwotZXh0ZXJuIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAgKCBBZGRyIGEsIGNvbnN0IEhDaGFyKiog
b2JqbmFtZSApOworZXh0ZXJuIEJvb2wgVkdfKGdldF9vYmpuYW1lKSAoIERpRXBvY2ggZXAsIEFk
ZHIgYSwgY29uc3QgSENoYXIqKiBvYmpuYW1lICk7CiAKIAogLyogQ3Vyc29yIGFsbG93aW5nIHRv
IGRlc2NyaWJlIGlubGluZWQgZnVuY3Rpb24gY2FsbHMgYXQgYW4gSVAsCkBAIC0xNjksNyArMTc5
LDcgQEAKICAgIGVpcCBjYW4gcG9zc2libHkgY29ycmVzcG9uZHMgdG8gaW5saW5lZCBmdW5jdGlv
biBjYWxsKHMpLgogICAgVG8gZGVzY3JpYmUgZWlwIGFuZCB0aGUgaW5saW5lZCBmdW5jdGlvbiBj
YWxscywgdGhlIGZvbGxvd2luZyBtdXN0CiAgICBiZSBkb25lOgotICAgICAgIElubElQQ3Vyc29y
ICppaXBjID0gVkdfKG5ld19JSVBDKShlaXApOworICAgICAgIElubElQQ3Vyc29yICppaXBjID0g
VkdfKG5ld19JSVBDKShlcCwgZWlwKTsKICAgICAgICBkbyB7CiAgICAgICAgICAgYnVmID0gVkdf
KGRlc2NyaWJlX0lQKShlaXAsIGlpcGMpOwogICAgICAgICAgIC4uLiB1c2UgYnVmIC4uLgpAQCAt
MTgyLDEyICsxOTIsMTYgQEAKICAgIE5vdGUsIHRoYXQgdGhlIHJldHVybmVkIHN0cmluZyBpcyBh
bGxvY2F0ZWQgaW4gYSBzdGF0aWMgYnVmZmVyIGxvY2FsIHRvCiAgICBWR18oZGVzY3JpYmVfSVAp
LiBUaGF0IGJ1ZmZlciB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggZXZlcnkgaW52b2NhdGlvbi4K
ICAgIFRoZXJlZm9yZSwgY2FsbGVycyBuZWVkIHRvIHBvc3NpYmx5IHN0YXNoIGF3YXkgdGhlIHN0
cmluZy4KKworICAgU2luY2UgdGhpcyBtYXBzIGEgY29kZSBsb2NhdGlvbiB0byBhIHNvdXJjZSBh
cnRlZmFjdCAoZnVuY3Rpb24gbmFtZXMpLAorICAgbmV3X0lJUEMgcmVxdWlyZXMgYSBEaUVwb2No
IGFyZ3VtZW50IChlcCkgdG9vLgogKi8KLWV4dGVybiBjb25zdCBIQ2hhciogVkdfKGRlc2NyaWJl
X0lQKShBZGRyIGVpcCwgY29uc3QgSW5sSVBDdXJzb3IqIGlpcGMpOworZXh0ZXJuIGNvbnN0IEhD
aGFyKiBWR18oZGVzY3JpYmVfSVApKERpRXBvY2ggZXAsIEFkZHIgZWlwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElubElQQ3Vyc29yKiBpaXBjKTsKIAogLyog
QnVpbGRzIGEgSUlQQyAoSW5saW5lZCBJUCBDdXJzb3IpIHRvIGRlc2NyaWJlIGVpcCBhbmQgYWxs
IHRoZSBpbmxpbmVkIGNhbGxzCiAgICBhdCBlaXAuIFN1Y2ggYSBjdXJzb3IgbXVzdCBiZSBkZWxl
dGVkIGFmdGVyIHVzZSB1c2luZyBWR18oZGVsZXRlX0lJUEMpLiAqLwotZXh0ZXJuIElubElQQ3Vy
c29yKiBWR18obmV3X0lJUEMpKEFkZHIgZWlwKTsKK2V4dGVybiBJbmxJUEN1cnNvciogVkdfKG5l
d19JSVBDKShEaUVwb2NoIGVwLCBBZGRyIGVpcCk7CiAvKiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhl
IG5leHQgY2FsbCB0byBkZXNjcmliZS4KICAgIFJldHVybnMgVHJ1ZSBpZiB0aGVyZSBhcmUgc3Rp
bGwgY2FsbHMgdG8gZGVzY3JpYmUuCiAgICBGYWxzZSBpZiBub3RoaW5nIHRvIGRlc2NyaWJlIGFu
eW1vcmUuICovCkBAIC0yMzksNyArMjUzLDcgQEAKIAogCiAvKj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qPT09
IE9idGFpbmluZyBkZWJ1ZyBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9PT0qLworLyo9PT0gT2J0YWluaW5nIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gc2hh
cmVkIG9iamVjdHMuICAgICAgICAgID09PSovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyogQSB3YXkg
dG8gbWFrZSBsaW1pdGVkIGRlYnVnaW5mbyBxdWVyaWVzIG9uIGEgcGVyLW1hcHBlZC1vYmplY3QK
QEAgLTI0OCw3ICsyNjIsNyBAQAogCiAvKiBSZXR1cm5zIE5VTEwgaWYgdGhlIERlYnVnSW5mbyBp
c24ndCBmb3VuZC4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmCiAgICBkZWJ1ZyBpbmZvIGlzIHByZXNl
bnQgb3Igbm90LiAqLwotRGVidWdJbmZvKiBWR18oZmluZF9EZWJ1Z0luZm8pICggQWRkciBhICk7
CitEZWJ1Z0luZm8qIFZHXyhmaW5kX0RlYnVnSW5mbykgKCBEaUVwb2NoIGVwLCBBZGRyIGEgKTsK
IAogLyogRmlzaCBiaXRzIG91dCBvZiBEZWJ1Z0luZm9zLiAqLwogQWRkciAgICAgICAgICBWR18o
RGVidWdJbmZvX2dldF90ZXh0X2F2bWEpICAgKCBjb25zdCBEZWJ1Z0luZm8gKmRpICk7CkluZGV4
OiBpbmNsdWRlL3B1Yl90b29sX2Vycm9ybWdyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9wdWJf
dG9vbF9lcnJvcm1nci5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGluY2x1ZGUvcHViX3Rvb2xfZXJy
b3JtZ3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDExIEBACiAKIC8qIFVzZWZ1bCBp
biBWR18odGRpY3QpLnRvb2xfZXJyb3JfbWF0Y2hlc19zdXBwcmVzc2lvbigpLAogICogVkdfKHRk
aWN0KS50b29sX3BwX0Vycm9yKCksIGV0YyAqLwotRXhlQ29udGV4dCogIFZHXyhnZXRfZXJyb3Jf
d2hlcmUpICAgKCBjb25zdCBFcnJvciogZXJyICk7Ci1FcnJvcktpbmQgICAgVkdfKGdldF9lcnJv
cl9raW5kKSAgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKLUFkZHIgICAgICAgICBWR18oZ2V0X2Vy
cm9yX2FkZHJlc3MpICggY29uc3QgRXJyb3IqIGVyciApOwotY29uc3QgSENoYXIqIFZHXyhnZXRf
ZXJyb3Jfc3RyaW5nKSAgKCBjb25zdCBFcnJvciogZXJyICk7Ci12b2lkKiAgICAgICAgVkdfKGdl
dF9lcnJvcl9leHRyYSkgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKK0V4ZUNvbnRleHRBbmRFcG9j
aCAgVkdfKGdldF9lcnJvcl93aGVyZSkgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKK0Vycm9yS2lu
ZCAgICAgICAgICAgVkdfKGdldF9lcnJvcl9raW5kKSAgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsK
K0FkZHIgICAgICAgICAgICAgICAgVkdfKGdldF9lcnJvcl9hZGRyZXNzKSAoIGNvbnN0IEVycm9y
KiBlcnIgKTsKK2NvbnN0IEhDaGFyKiAgICAgICAgVkdfKGdldF9lcnJvcl9zdHJpbmcpICAoIGNv
bnN0IEVycm9yKiBlcnIgKTsKK3ZvaWQqICAgICAgICAgICAgICAgVkdfKGdldF9lcnJvcl9leHRy
YSkgICAoIGNvbnN0IEVycm9yKiBlcnIgKTsKIAogLyogQ2FsbCB0aGlzIHdoZW4gYW4gZXJyb3Ig
b2NjdXJzLiAgSXQgd2lsbCBiZSByZWNvcmRlZCBpZiBpdCBoYXNuJ3QgYmVlbgogICAgc2VlbiBi
ZWZvcmUuICBJZiBpdCBoYXMsIHRoZSBleGlzdGluZyBlcnJvciByZWNvcmQgd2lsbCBoYXZlIGl0
cyBjb3VudApAQCAtOTAsNyArOTAsNyBAQAogICAgd2hldGhlciB0byBhZGQgdGhlIGVycm9yIGlu
IHRoZSBlcnJvciB0b3RhbCBjb3VudCAoYW5vdGhlciBtaWxkIGhhY2spLiAqLwogZXh0ZXJuIEJv
b2wgVkdfKHVuaXF1ZV9lcnJvcikgKCBUaHJlYWRJZCB0aWQsIEVycm9yS2luZCBla2luZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciBhLCBjb25zdCBIQ2hhciogcywgdm9p
ZCogZXh0cmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZUNvbnRleHQqIHdo
ZXJlLCBCb29sIHByaW50X2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
eGVDb250ZXh0QW5kRXBvY2ggd2hlcmUsIEJvb2wgcHJpbnRfZXJyb3IsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJvb2wgYWxsb3dfR0RCX2F0dGFjaCwgQm9vbCBjb3VudF9lcnJv
ciApOwogCiAvKiBHZXRzIGZyb20gZmQgKGFuIG9wZW5lZCBzdXBwcmVzc2lvbiBmaWxlKSBhIG5v
bi1ibGFuaywgbm9uLWNvbW1lbnQKSW5kZXg6IGluY2x1ZGUvcHViX3Rvb2xfZXhlY29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xfZXhlY29udGV4dC5oCShyZXZpc2lvbiAx
NjQ2NSkKKysrIGluY2x1ZGUvcHViX3Rvb2xfZXhlY29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCwxNCBAQAogI2lmbmRlZiBfX1BVQl9UT09MX0VYRUNPTlRFWFRfSAogI2RlZmlu
ZSBfX1BVQl9UT09MX0VYRUNPTlRFWFRfSAogCi0jaW5jbHVkZSAicHViX3Rvb2xfYmFzaWNzLmgi
ICAgLy8gVGhyZWFkSUQKKyNpbmNsdWRlICJwdWJfdG9vbF9iYXNpY3MuaCIgICAgIC8vIFRocmVh
ZElECisjaW5jbHVkZSAicHViX3Rvb2xfZGVidWdpbmZvLmgiICAvLyBEaUVwb2NoCiAKKworLyo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PSovCisvKj09PSBFeGVDb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCiAvLyBJdCdz
IGFuIGFic3RyYWN0IHR5cGUuCiB0eXBlZGVmCiAgICBzdHJ1Y3QgX0V4ZUNvbnRleHQKQEAgLTg0
LDkgKzkwLDYgQEAKIGV4dGVybiBCb29sIFZHXyhlcV9FeGVDb250ZXh0KSAoIFZnUmVzIHJlcywg
Y29uc3QgRXhlQ29udGV4dCogZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBFeGVDb250ZXh0KiBlMiApOwogCi0vLyBQcmludCBhbiBFeGVDb250ZXh0LgotZXh0ZXJu
IHZvaWQgVkdfKHBwX0V4ZUNvbnRleHQpICggRXhlQ29udGV4dCogZWMgKTsKLQogLy8gR2V0IHRo
ZSAzMi1iaXQgdW5pcXVlIHJlZmVyZW5jZSBudW1iZXIgZm9yIHRoaXMgRXhlQ29udGV4dAogLy8g
KHRoZSAiRXhlQ29udGV4dCBVbmlxdWUiKS4gIEd1YXJhbnRlZWQgdG8gYmUgbm9uemVybyBhbmQg
dG8gYmUgYQogLy8gbXVsdGlwbGUgb2YgZm91ciAoaW93LCB0aGUgbG93ZXN0IHR3byBiaXRzIGFy
ZSBndWFyYW50ZWVkIHRvCkBAIC0xMTMsMTEgKzExNiw1MyBAQAogLy8gTWFrZSBhbiBFeGVDb250
ZXh0IGNvbnRhaW5pbmcgZXhhY3RseSB0aGUgc3BlY2lmaWVkIHN0YWNrIGZyYW1lcy4KIEV4ZUNv
bnRleHQqIFZHXyhtYWtlX0V4ZUNvbnRleHRfZnJvbV9TdGFja1RyYWNlKSggY29uc3QgQWRkciog
aXBzLCBVSW50IG5faXBzICk7CiAKLS8vIFJldHVybnMgdGhlICJudWxsIiBleGUgY29udGV4dC4g
VGhlIG51bGwgZXhlY29udGV4dCBpcyBhbiBhcnRpZmljaWFsCi0vLyBleGUgY29udGV4dCwgd2l0
aCBhIHN0YWNrIHRyYWNlIG1hZGUgb2Ygb25lIEFkZHIgKHRoZSBOVUxMIGFkZHJlc3MpLgotZXh0
ZXJuIAotRXhlQ29udGV4dCogVkdfKG51bGxfRXhlQ29udGV4dCkgKHZvaWQpOwogCisvKj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ki8KKy8qPT09IEV4ZUNvbnRleHRBbmRFcG9jaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIEEgcGxhaW4g
RXhlQ29udGV4dCBpcyBub3QgZ2VuZXJhbGx5IHN5bWJvbGlzYWJsZSwgc2luY2Ugd2UgYWxzbyBu
ZWVkIHRvCisgICBrbm93IHdoaWNoIERlYnVnSW5mbyBlcG9jaCBpdCBwZXJ0YWlucyB0by4gIEV4
ZUNvbnRleHRBbmRFcG9jaCBwYWlycyB0aGVtCisgICB1cC4gIE5vdGUgdGhpcyBpcyBqdXN0IHR3
byB3b3Jkcywgc28gcGFzc2luZyBpdCBhcm91bmQgYnkgdmFsdWUgaXMKKyAgIGZpbmUuICovCit0
eXBlZGVmCisgICBzdHJ1Y3QgeworICAgICAgRXhlQ29udGV4dCogZWM7CisgICAgICBEaUVwb2No
ICAgICBlcG9jaDsKKyAgIH0KKyAgIEV4ZUNvbnRleHRBbmRFcG9jaDsKKworLy8gQSB0cml2aWFs
IGNvbnN0cnVjdG9yLgorc3RhdGljIGlubGluZSBFeGVDb250ZXh0QW5kRXBvY2ggbWtfRXhlQ29u
dGV4dEFuZEVwb2NoICggRXhlQ29udGV4dCogZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaUVwb2NoIGVwICkgeworICAgRXhlQ29u
dGV4dEFuZEVwb2NoIGVjZTsKKyAgIGVjZS5lYyAgICA9IGVjOworICAgZWNlLmVwb2NoID0gZXA7
CisgICByZXR1cm4gZWNlOworfQorCisvLyBHZW5lcmF0ZXMgYSBjb21wbGV0ZWx5IGludmFsaWQg
RXhlQ29udGV4dEFuZEVwb2NoLCB3aXRoIE5VTEwgZm9yIC5lYyBhbmQKKy8vIHplcm8gZm9yIC5l
cG9jaC4gIEJvdGggdmFsdWVzIGFyZSBpbnZhbGlkLgorRXhlQ29udGV4dEFuZEVwb2NoIFZHXyhp
bnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCB2b2lkICk7CisKKy8vIFRha2VzIGFuIEV4ZUNv
bnRleHQgYW5kIHRhZ3MgaXQgd2l0aCB0aGUgY3VycmVudCBlcG9jaCwgd2hpY2ggaXMKKy8vIGdl
bmVyYWxseSB3aGF0IHdlIHdhbnQgdG8gZG8uCitFeGVDb250ZXh0QW5kRXBvY2ggVkdfKHRhZ19F
Q193aXRoX2N1cnJlbnRfZXBvY2gpKCBFeGVDb250ZXh0KiBlYyApOworCisvLyBQcmludCBhbiBF
eGVDb250ZXh0QW5kRXBvY2guICBXZSBjYW4ndCBwcmludCBhIHBsYWluIEV4ZUNvbnRleHQKKy8v
IGJlY2F1c2Ugd2UgY2FuJ3Qgc3ltYm9saXNpbmcgaXQgd2l0aG91dCBrbm93aW5nIHdoaWNoIGRl
YnVnaW5mbworLy8gZXBvY2ggaXQgcGVydGFpbnMgdG8uCit2b2lkIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpICggRXhlQ29udGV4dEFuZEVwb2NoIGVjZSApOworCisvLyBSZXR1cm5zIHRoZSAi
bnVsbCIgZXhlIGNvbnRleHQgdGFnZ2VkIHdpdGggdGhlIGN1cnJlbnQgZGVidWdpbmZvCisvLyBl
cG9jaC4gVGhlIG51bGwgZXhlY29udGV4dCBpcyBhbiBhcnRpZmljaWFsIGV4ZSBjb250ZXh0LCB3
aXRoIGEgc3RhY2sKKy8vIHRyYWNlIG1hZGUgb2Ygb25lIEFkZHIgKHRoZSBOVUxMIGFkZHJlc3Mp
LCBhbmQgdGhlIGN1cnJlbnQgZXBvY2guCitFeGVDb250ZXh0QW5kRXBvY2ggVkdfKG51bGxfRXhl
Q29udGV4dEFuZEVwb2NoKSAoIHZvaWQgKTsKKworLy8gSXMgdGhpcyBhIHZhbHVlIG9idGFpbmVk
IGZyb20gVkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSA/CitCb29sIFZHXyhpc19udWxsX0V4
ZUNvbnRleHRBbmRFcG9jaCkoIEV4ZUNvbnRleHRBbmRFcG9jaCBlY2UgKTsKKworCiAjZW5kaWYg
ICAvLyBfX1BVQl9UT09MX0VYRUNPTlRFWFRfSAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KSW5kZXg6IGlu
Y2x1ZGUvcHViX3Rvb2xfb3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvcHViX3Rvb2xf
b3B0aW9ucy5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIGluY2x1ZGUvcHViX3Rvb2xfb3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDEzIEBACiAvKiBDb250aW51ZSBzdGFjayB0
cmFjZXMgYmVsb3cgbWFpbigpPyAgRGVmYXVsdDogTk8gKi8KIGV4dGVybiBCb29sIFZHXyhjbG9f
c2hvd19iZWxvd19tYWluKTsKIAorLyogS2VlcCBzeW1ib2xzIChhbmQgYWxsIG90aGVyIGRlYnVn
aW5mbykgZm9yIGNvZGUgdGhhdCBpcyB1bmxvYWRlZCAoZGxjbG9zZQorICAgb3Igc2ltaWxhcikg
c28gdGhhdCBzdGFjayB0cmFjZXMgY2FuIHN0aWxsIGdpdmUgbGluZS9maWxlIGluZm8gZm9yCisg
ICBwcmV2aW91c2x5IGNhcHR1cmVkIHN0YWNrIHRyYWNlcy4gIGUuZy4gLi4uIHNob3dpbmcgd2hl
cmUgYSBibG9jayB3YXMKKyAgIGFsbG9jYXRlZCBlLmcuIGxlYWtzIG9mIG9yIGFjY2Vzc2VzIGp1
c3Qgb3V0c2lkZSBhIGJsb2NrLiAqLworZXh0ZXJuIEJvb2wgVkdfKGNsb19rZWVwX2RlYnVnaW5m
byk7CiAKKwogLyogVXNlZCB0byBleHBhbmQgZmlsZSBuYW1lcy4gICJvcHRpb25fbmFtZSIgaXMg
dGhlIG9wdGlvbiBuYW1lLCBlZy4KICAgICItLWxvZy1maWxlIi4gICdmb3JtYXQnIGlzIHdoYXQg
Zm9sbG93cywgZWcuICJjYWNoZWdyaW5kLm91dC4lcCIuICBJbgogICAgJ2Zvcm1hdCc6IApJbmRl
eDogaW5jbHVkZS9wdWJfdG9vbF9zdGFja3RyYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9w
dWJfdG9vbF9zdGFja3RyYWNlLmgJKHJldmlzaW9uIDE2NDY1KQorKysgaW5jbHVkZS9wdWJfdG9v
bF9zdGFja3RyYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpZm5kZWYg
X19QVUJfVE9PTF9TVEFDS1RSQUNFX0gKICNkZWZpbmUgX19QVUJfVE9PTF9TVEFDS1RSQUNFX0gK
IAotI2luY2x1ZGUgInB1Yl90b29sX2Jhc2ljcy5oIiAgIC8vIEFkZHIKKyNpbmNsdWRlICJwdWJf
dG9vbF9iYXNpY3MuaCIgICAvLyBBZGRyLCBEaUVwb2NoCiAKIC8vIFRoZSBiYXNpYyBzdGFjayB0
cmFjZSB0eXBlOiAganVzdCBhbiBhcnJheSBvZiBjb2RlIGFkZHJlc3Nlcy4KIHR5cGVkZWYgQWRk
ciogU3RhY2tUcmFjZTsKQEAgLTY0LDE5ICs2NCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qT1VUKi9TdGFja1RyYWNlIGZwcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXb3JkIGZpcnN0X2lwX2RlbHRhICk7CiAKLS8vIEFwcGx5IGEgZnVuY3Rp
b24gdG8gZXZlcnkgZWxlbWVudCBpbiB0aGUgU3RhY2tUcmFjZS4gIFRoZSBwYXJhbWV0ZXIKLS8v
ICduJyBnaXZlcyB0aGUgaW5kZXggb2YgdGhlIHBhc3NlZCBpcC4gICdvcGFxdWUnIGlzIGFuIGFy
Yml0cmFyeQotLy8gcG9pbnRlciBwcm92aWRlZCB0byBlYWNoIGludm9jYXRpb24gb2YgJ2FjdGlv
bicgKGEgcG9vciBtYW4ncwotLy8gY2xvc3VyZSkuICBEb2Vzbid0IGdvIGJlbG93IG1haW4oKSB1
bmxlc3MgLS1zaG93LWJlbG93LW1haW49eWVzIGlzCi0vLyBzZXQuCisvLyBBcHBseSBhIGZ1bmN0
aW9uIHRvIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIFN0YWNrVHJhY2UuICBUaGUgcGFyYW1ldGVyICdu
JworLy8gZ2l2ZXMgdGhlIGluZGV4IG9mIHRoZSBwYXNzZWQgaXAuICAnb3BhcXVlJyBpcyBhbiBh
cmJpdHJhcnkgcG9pbnRlcgorLy8gcHJvdmlkZWQgdG8gZWFjaCBpbnZvY2F0aW9uIG9mICdhY3Rp
b24nIChhIHBvb3IgbWFuJ3MgY2xvc3VyZSkuICAnZXAnIGlzCisvLyB0aGUgZGVidWdpbmZvIGVw
b2NoIGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvZGUgYWRkcmVzc2VzIGluIHRoZSBzdGFjawor
Ly8gdHJhY2UuICBEb2Vzbid0IGdvIGJlbG93IG1haW4oKSB1bmxlc3MgLS1zaG93LWJlbG93LW1h
aW49eWVzIGlzIHNldC4KIGV4dGVybiB2b2lkIFZHXyhhcHBseV9TdGFja1RyYWNlKSgKLSAgICAg
ICAgICAgICAgIHZvaWQoKmFjdGlvbikoVUludCBuLCBBZGRyIGlwLCB2b2lkKiBvcGFxdWUpLAor
ICAgICAgICAgICAgICAgdm9pZCgqYWN0aW9uKShVSW50IG4sIERpRXBvY2ggZXAsIEFkZHIgaXAs
IHZvaWQqIG9wYXF1ZSksCiAgICAgICAgICAgICAgICB2b2lkKiBvcGFxdWUsCi0gICAgICAgICAg
ICAgICBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcworICAgICAgICAgICAgICAgRGlFcG9jaCBl
cCwgU3RhY2tUcmFjZSBpcHMsIFVJbnQgbl9pcHMKICAgICAgICAgICAgICk7CiAKIC8vIFByaW50
IGEgU3RhY2tUcmFjZS4KLWV4dGVybiB2b2lkIFZHXyhwcF9TdGFja1RyYWNlKSAoIFN0YWNrVHJh
Y2UgaXBzLCBVSW50IG5faXBzICk7CitleHRlcm4gdm9pZCBWR18ocHBfU3RhY2tUcmFjZSkgKCBE
aUVwb2NoIGVwLCBTdGFja1RyYWNlIGlwcywgVUludCBuX2lwcyApOwogCiAvLyBHZXRzIGFuZCBp
bW1lZGlhdGVseSBwcmludHMgYSBTdGFja1RyYWNlLiAgSnVzdCBhIGJpdCBzaW1wbGVyIHRoYW4K
IC8vIGNhbGxpbmcgVkdfKGdldF9TdGFja1RyYWNlKSgpIHRoZW4gVkdfKHBwX1N0YWNrVHJhY2Up
KCkuCkluZGV4OiBpbmNsdWRlL3B1Yl90b29sX3Rvb2xpZmFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlu
Y2x1ZGUvcHViX3Rvb2xfdG9vbGlmYWNlLmgJKHJldmlzaW9uIDE2NDY1KQorKysgaW5jbHVkZS9w
dWJfdG9vbF90b29saWZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBACiAg
ICBvZiBhbiBhZGRyZXNzID8gKi8KIGV4dGVybiB2b2lkIFZHXyhuZWVkc19pbmZvX2xvY2F0aW9u
KSAoCiAgICAvLyBHZXQgYW5kIHBwIGluZm9ybWF0aW9uIGFib3V0IEFkZHIKLSAgIHZvaWQgKCpp
bmZvX2xvY2F0aW9uKShBZGRyKQorICAgdm9pZCAoKmluZm9fbG9jYXRpb24pKERpRXBvY2gsIEFk
ZHIpCiApOwogCiAvKiBEbyB3ZSBuZWVkIHRvIHNlZSB2YXJpYWJsZSB0eXBlIGFuZCBsb2NhdGlv
biBpbmZvcm1hdGlvbj8gKi8KSW5kZXg6IGxhY2tleS9sa19tYWluLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
bGFja2V5L2xrX21haW4uYwkocmV2aXNpb24gMTY0NjUpCisrKyBsYWNrZXkvbGtfbWFpbi5jCSh3
b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDcgQEAKICAgIEFkZHIgICAgICAgaWFkZHIgPSAw
LCBkc3Q7CiAgICBVSW50ICAgICAgIGlsZW4gPSAwOwogICAgQm9vbCAgICAgICBjb25kaXRpb25f
aW52ZXJ0ZWQgPSBGYWxzZTsKKyAgIERpRXBvY2ggICAgZXAgPSBWR18oY3VycmVudF9EaUVwb2No
KSgpOwogCiAgICBpZiAoZ1dvcmRUeSAhPSBoV29yZFR5KSB7CiAgICAgICAvKiBXZSBkb24ndCBj
dXJyZW50bHkgc3VwcG9ydCB0aGlzIGNhc2UuICovCkBAIC03NTAsNyArNzUxLDcgQEAKICAgICAg
ICAgICAgICAgIHRsX2Fzc2VydChjbG9fZm5uYW1lKTsKICAgICAgICAgICAgICAgIHRsX2Fzc2Vy
dChjbG9fZm5uYW1lWzBdKTsKICAgICAgICAgICAgICAgIGNvbnN0IEhDaGFyICpmbm5hbWU7Ci0g
ICAgICAgICAgICAgICBpZiAoVkdfKGdldF9mbm5hbWVfaWZfZW50cnkpKHN0LT5Jc3QuSU1hcmsu
YWRkciwgCisgICAgICAgICAgICAgICBpZiAoVkdfKGdldF9mbm5hbWVfaWZfZW50cnkpKGVwLCBz
dC0+SXN0LklNYXJrLmFkZHIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmZm5uYW1lKQogICAgICAgICAgICAgICAgICAgICYmIDAgPT0gVkdfKHN0cmNtcCko
Zm5uYW1lLCBjbG9fZm5uYW1lKSkgewogICAgICAgICAgICAgICAgICAgZGkgPSB1bnNhZmVJUkRp
cnR5XzBfTiggCkluZGV4OiBtYXNzaWYvbXNfbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hc3NpZi9t
c19tYWluLmMJKHJldmlzaW9uIDE2NDY1KQorKysgbWFzc2lmL21zX21haW4uYwkod29ya2luZyBj
b3B5KQpAQCAtNTIwLDggKzUyMCw5IEBACiAgICAvLyAgYWxsb2MgZnVuY3Rpb24gJ2luc2lkZScg
YSBzdGFja3RyYWNlIGUuZy4KICAgIC8vICAgIDB4MSAweDIgMHgzIGFsbG9jIGZ1bmMxIG1haW4K
ICAgIC8vICBiZWNvbWVzICAgMHgxIDB4MiAweDMgZnVuYzEgbWFpbgorICAgRGlFcG9jaCBlcCA9
IFZHXyhjdXJyZW50X0RpRXBvY2gpKCk7CiAgICBmb3IgKGkgPSAqdG9wOyBpIDwgbl9pcHM7IGkr
KykgewotICAgICAgdG9wX2hhc19mbm5hbWUgPSBWR18oZ2V0X2ZubmFtZSkoaXBzWyp0b3BdLCAm
Zm5uYW1lKTsKKyAgICAgIHRvcF9oYXNfZm5uYW1lID0gVkdfKGdldF9mbm5hbWUpKGVwLCBpcHNb
KnRvcF0sICZmbm5hbWUpOwogICAgICAgaWYgKHRvcF9oYXNfZm5uYW1lICYmICBWR18oc3RySXNN
ZW1iZXJYQSkoYWxsb2NfZm5zLCBmbm5hbWUpKSB7CiAgICAgICAgICBWRVJCKDQsICJmaWx0ZXJp
bmcgYWxsb2MgZm4gJXNcbiIsIGZubmFtZSk7CiAgICAgICAgICAoKnRvcCkrKzsKQEAgLTU3Niw3
ICs1NzcsOCBAQAogICAgaWYgKGV4Y2x1ZGVfZmlyc3RfZW50cnkgJiYgbl9pcHMgPiAwKSB7CiAg
ICAgICBjb25zdCBIQ2hhciAqZm5uYW1lOwogICAgICAgVkVSQig0LCAicmVtb3ZpbmcgdG9wIGZu
ICVzIGZyb20gc3RhY2t0cmFjZVxuIiwgCi0gICAgICAgICAgIFZHXyhnZXRfZm5uYW1lKShpcHNb
MF0sICZmbm5hbWUpID8gZm5uYW1lIDogIj8/PyIpOworICAgICAgICAgICAgICBWR18oZ2V0X2Zu
bmFtZSkoVkdfKGN1cnJlbnRfRGlFcG9jaCkoKSwgaXBzWzBdLCAmZm5uYW1lKQorICAgICAgICAg
ICAgICAgICA/IGZubmFtZSA6ICI/Pz8iKTsKICAgICAgIHJldHVybiBWR18obWFrZV9FeGVDb250
ZXh0X2Zyb21fU3RhY2tUcmFjZSkoaXBzKzEsIG5faXBzLTEpOwogICAgfSBlbHNlCiAgICAgICBy
ZXR1cm4gVkdfKG1ha2VfRXhlQ29udGV4dF9mcm9tX1N0YWNrVHJhY2UpKGlwcywgbl9pcHMpOwpJ
bmRleDogbWVtY2hlY2svbWNfZXJyb3JzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svbWNfZXJy
b3JzLmMJKHJldmlzaW9uIDE2NDY1KQorKysgbWVtY2hlY2svbWNfZXJyb3JzLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDE1ICs5NCwxNSBAQAogICAgICAgc3RydWN0IHsKICAgICAgICAgIFNpemVU
IHN6QjsgICAvLyBzaXplIG9mIHZhbHVlIGluIGJ5dGVzCiAgICAgICAgICAvLyBPcmlnaW4gaW5m
bwotICAgICAgICAgVUludCAgICAgICAgb3RhZzsgICAgICAvLyBvcmlnaW4gdGFnCi0gICAgICAg
ICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7IC8vIGZpbGxlZCBpbiBsYXRlcgorICAgICAgICAgVUlu
dCAgICAgICAgICAgICAgIG90YWc7ICAgICAgIC8vIG9yaWdpbiB0YWcKKyAgICAgICAgIEV4ZUNv
bnRleHRBbmRFcG9jaCBvcmlnaW5fZWNlOyAvLyBmaWxsZWQgaW4gbGF0ZXIKICAgICAgIH0gVmFs
dWU7CiAKICAgICAgIC8vIFVzZSBvZiBhbiB1bmRlZmluZWQgdmFsdWUgaW4gYSBjb25kaXRpb25h
bCBicmFuY2ggb3IgbW92ZS4KICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAvLyBPcmlnaW4gaW5m
bwotICAgICAgICAgVUludCAgICAgICAgb3RhZzsgICAgICAvLyBvcmlnaW4gdGFnCi0gICAgICAg
ICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7IC8vIGZpbGxlZCBpbiBsYXRlcgorICAgICAgICAgVUlu
dCAgICAgICAgICAgICAgIG90YWc7ICAgICAgIC8vIG9yaWdpbiB0YWcKKyAgICAgICAgIEV4ZUNv
bnRleHRBbmRFcG9jaCBvcmlnaW5fZWNlOyAvLyBmaWxsZWQgaW4gbGF0ZXIKICAgICAgIH0gQ29u
ZDsKIAogICAgICAgLy8gQWRkcmVzc2FiaWxpdHkgZXJyb3IgaW4gY29yZSAoc2lnbmFsLWhhbmRs
aW5nKSBvcGVyYXRpb24uCkBAIC0xMjcsOCArMTI3LDggQEAKICAgICAgIC8vIFN5c3RlbSBjYWxs
IHJlZ2lzdGVyIGlucHV0IGNvbnRhaW5zIHVuZGVmaW5lZCBieXRlcy4KICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAvLyBPcmlnaW4gaW5mbwotICAgICAgICAgVUludCAgICAgICAgb3RhZzsgICAg
ICAvLyBvcmlnaW4gdGFnCi0gICAgICAgICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7IC8vIGZpbGxl
ZCBpbiBsYXRlcgorICAgICAgICAgVUludCAgICAgICAgICAgICAgIG90YWc7ICAgICAgIC8vIG9y
aWdpbiB0YWcKKyAgICAgICAgIEV4ZUNvbnRleHRBbmRFcG9jaCBvcmlnaW5fZWNlOyAvLyBmaWxs
ZWQgaW4gbGF0ZXIKICAgICAgIH0gUmVnUGFyYW07CiAKICAgICAgIC8vIFN5c3RlbSBjYWxsIG1l
bW9yeSBpbnB1dCBjb250YWlucyB1bmRlZmluZWQvdW5hZGRyZXNzYWJsZSBieXRlcwpAQCAtMTM2
LDggKzEzNiw4IEBACiAgICAgICAgICBCb29sICAgICBpc0FkZHJFcnI7ICAvLyBBZGRyZXNzYWJp
bGl0eSBvciBkZWZpbmVkbmVzcyBlcnJvcj8KICAgICAgICAgIEFkZHJJbmZvIGFpOwogICAgICAg
ICAgLy8gT3JpZ2luIGluZm8KLSAgICAgICAgIFVJbnQgICAgICAgIG90YWc7ICAgICAgLy8gb3Jp
Z2luIHRhZwotICAgICAgICAgRXhlQ29udGV4dCogb3JpZ2luX2VjOyAvLyBmaWxsZWQgaW4gbGF0
ZXIKKyAgICAgICAgIFVJbnQgICAgICAgICAgICAgICBvdGFnOyAgICAgICAvLyBvcmlnaW4gdGFn
CisgICAgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggb3JpZ2luX2VjZTsgLy8gZmlsbGVkIGluIGxh
dGVyCiAgICAgICB9IE1lbVBhcmFtOwogCiAgICAgICAvLyBQcm9ibGVtIGZvdW5kIGZyb20gYSBj
bGllbnQgcmVxdWVzdCBsaWtlIENIRUNLX01FTV9JU19BRERSRVNTQUJMRS4KQEAgLTE0NSw4ICsx
NDUsOCBAQAogICAgICAgICAgQm9vbCAgICAgaXNBZGRyRXJyOyAgLy8gQWRkcmVzc2FiaWxpdHkg
b3IgZGVmaW5lZG5lc3MgZXJyb3I/CiAgICAgICAgICBBZGRySW5mbyBhaTsKICAgICAgICAgIC8v
IE9yaWdpbiBpbmZvCi0gICAgICAgICBVSW50ICAgICAgICBvdGFnOyAgICAgIC8vIG9yaWdpbiB0
YWcKLSAgICAgICAgIEV4ZUNvbnRleHQqIG9yaWdpbl9lYzsgLy8gZmlsbGVkIGluIGxhdGVyCisg
ICAgICAgICBVSW50ICAgICAgICAgICAgICAgb3RhZzsgICAgICAgLy8gb3JpZ2luIHRhZworICAg
ICAgICAgRXhlQ29udGV4dEFuZEVwb2NoIG9yaWdpbl9lY2U7IC8vIGZpbGxlZCBpbiBsYXRlcgog
ICAgICAgfSBVc2VyOwogCiAgICAgICAvLyBQcm9ncmFtIHRyaWVkIHRvIGZyZWUoKSBzb21ldGhp
bmcgdGhhdCdzIG5vdCBhIGhlYXAgYmxvY2sgKHRoaXMKQEAgLTI3OSwxMCArMjc5LDEwIEBACiAg
ICB9CiB9CiAKLXN0YXRpYyB2b2lkIG1jX3BwX29yaWdpbiAoIEV4ZUNvbnRleHQqIGVjLCBVSW50
IG9raW5kICkKK3N0YXRpYyB2b2lkIG1jX3BwX29yaWdpbiAoIEV4ZUNvbnRleHRBbmRFcG9jaCBl
Y2UsIFVJbnQgb2tpbmQgKQogewogICAgY29uc3QgSENoYXIqIHNyYyA9IE5VTEw7Ci0gICB0bF9h
c3NlcnQoZWMpOworICAgdGxfYXNzZXJ0KGVjZS5lYyk7CiAKICAgIHN3aXRjaCAob2tpbmQpIHsK
ICAgICAgIGNhc2UgTUNfT0tJTkRfU1RBQ0s6ICAgc3JjID0gIiBieSBhIHN0YWNrIGFsbG9jYXRp
b24iOyBicmVhazsKQEAgLTI5NSwxMCArMjk1LDEwIEBACiAgICBpZiAoVkdfKGNsb194bWwpKSB7
CiAgICAgICBlbWl0KCAiICA8YXV4d2hhdD5VbmluaXRpYWxpc2VkIHZhbHVlIHdhcyBjcmVhdGVk
JXM8L2F1eHdoYXQ+XG4iLAogICAgICAgICAgICAgc3JjKTsKLSAgICAgIFZHXyhwcF9FeGVDb250
ZXh0KSggZWMgKTsKKyAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBlY2UgKTsKICAg
IH0gZWxzZSB7CiAgICAgICBlbWl0KCAiIFVuaW5pdGlhbGlzZWQgdmFsdWUgd2FzIGNyZWF0ZWQl
c1xuIiwgc3JjKTsKLSAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggZWMgKTsKKyAgICAgIFZHXyhw
cF9FeGVDb250ZXh0QW5kRXBvY2gpKCBlY2UgKTsKICAgIH0KIH0KIApAQCAtMzc5LDcgKzM3OSw3
IEBACiAgICAgICAgICBlbWl0KCAiICAgIDxsZWFrZWRibG9ja3M+JXU8L2xlYWtlZGJsb2Nrcz5c
biIsIGxyLT5udW1fYmxvY2tzKTsKICAgICAgICAgIGVtaXQoICIgIDwveHdoYXQ+XG4iICk7CiAg
ICAgICB9Ci0gICAgICBWR18ocHBfRXhlQ29udGV4dCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOwor
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOwog
ICAgfSBlbHNlIHsgLyogISBpZiAoeG1sKSAqLwogICAgICAgaWYgKGxyLT5pbmRpcmVjdF9zekIg
PiAwKSB7CiAgICAgICAgICBlbWl0KApAQCAtNDAxLDcgKzQwMSw3IEBACiAgICAgICAgICAgICBu
X3RoaXNfcmVjb3JkLCBuX3RvdGFsX3JlY29yZHMKICAgICAgICAgICk7CiAgICAgICB9Ci0gICAg
ICBWR18ocHBfRXhlQ29udGV4dCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOworICAgICAgVkdfKHBw
X0V4ZUNvbnRleHRBbmRFcG9jaCkobHItPmtleS5hbGxvY2F0ZWRfYXQpOwogICAgfSAvKiBpZiAo
eG1sKSAqLwogfQogCkBAIC00MjcsMTEgKzQyNywxMSBAQAogICAgICAgICAgICAgZW1pdCggIiAg
PGtpbmQ+Q29yZU1lbUVycm9yPC9raW5kPlxuIiApOwogICAgICAgICAgICAgZW1pdCggIiAgPHdo
YXQ+JXBTIGNvbnRhaW5zIHVuYWRkcmVzc2FibGUgYnl0ZShzKTwvd2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICBWR18oZ2V0X2Vycm9yX3N0cmluZykoZXJyKSk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7
CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIiVzIGNvbnRhaW5zIHVuYWRk
cmVzc2FibGUgYnl0ZShzKVxuIiwKICAgICAgICAgICAgICAgICAgIFZHXyhnZXRfZXJyb3Jfc3Ry
aW5nKShlcnIpKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJv
cl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCko
IFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFr
OwogICAgICAgCkBAIC00NDEsMTkgKzQ0MSwxOSBAQAogICAgICAgICAgICAgZW1pdCggIiAgPGtp
bmQ+VW5pbml0VmFsdWU8L2tpbmQ+XG4iICk7CiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD5V
c2Ugb2YgdW5pbml0aWFsaXNlZCB2YWx1ZSBvZiBzaXplICVsdTwvd2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLlZhbHVlLnN6QiApOwotICAgICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7Ci0gICAgICAgICAgICBpZiAo
ZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5fZWMpCi0gICAgICAgICAgICAgICBtY19wcF9vcmlnaW4o
IGV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4dHJhLT5FcnIuVmFsdWUub3RhZyAmIDMgKTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250
ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBp
ZiAoZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5fZWNlLmVjKQorICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9lY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLT5FcnIuVmFsdWUub3RhZyAmIDMgKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvKiBDb3VsZCBhbHNvIHNob3cgZXh0cmEtPkVyci5Db25kLm90YWcgaWYg
ZGVidWdnaW5nIG9yaWdpbgogICAgICAgICAgICAgICAgdHJhY2tpbmcgKi8KICAgICAgICAgICAg
IGVtaXQoICJVc2Ugb2YgdW5pbml0aWFsaXNlZCB2YWx1ZSBvZiBzaXplICVsdVxuIiwKICAgICAg
ICAgICAgICAgICAgIGV4dHJhLT5FcnIuVmFsdWUuc3pCICk7Ci0gICAgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKLSAgICAgICAgICAgIGlm
IChleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9lYykKLSAgICAgICAgICAgICAgIG1jX3BwX29yaWdp
biggZXh0cmEtPkVyci5WYWx1ZS5vcmlnaW5fZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0cmEtPkVyci5WYWx1ZS5vdGFnICYgMyApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IGlmIChleHRyYS0+RXJyLlZhbHVlLm9yaWdpbl9lY2UuZWMpCisgICAgICAgICAgICAgICBtY19w
cF9vcmlnaW4oIGV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEtPkVyci5WYWx1ZS5vdGFnICYgMyApOwogICAgICAgICAgfQogICAg
ICAgICAgYnJlYWs7CiAKQEAgLTQ2Myw5ICs0NjMsOSBAQAogICAgICAgICAgICAgZW1pdCggIiAg
PGtpbmQ+VW5pbml0Q29uZGl0aW9uPC9raW5kPlxuIiApOwogICAgICAgICAgICAgZW1pdCggIiAg
PHdoYXQ+Q29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMiCiAgICAgICAgICAgICAgICAg
ICAiIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocyk8L3doYXQ+XG4iICk7Ci0gICAgICAgICAgICBW
R18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKLSAgICAgICAg
ICAgIGlmIChleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjKQotICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjLAorICAgICAgICAgICAgVkdfKHBwX0V4
ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAg
ICAgIGlmIChleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjZS5lYykKKyAgICAgICAgICAgICAgIG1j
X3BwX29yaWdpbiggZXh0cmEtPkVyci5Db25kLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhLT5FcnIuQ29uZC5vdGFnICYgMyApOwogICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIC8qIENvdWxkIGFsc28gc2hvdyBleHRyYS0+RXJyLkNvbmQub3RhZyBp
ZiBkZWJ1Z2dpbmcgb3JpZ2luCkBAIC00NzIsOSArNDcyLDkgQEAKICAgICAgICAgICAgICAgIHRy
YWNraW5nICovCiAgICAgICAgICAgICBlbWl0KCAiQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRl
cGVuZHMiCiAgICAgICAgICAgICAgICAgICAiIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocylcbiIg
KTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuQ29uZC5vcmlnaW5fZWMpCi0gICAg
ICAgICAgICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuQ29uZC5vcmlnaW5fZWMsCisgICAg
ICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOworICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuQ29uZC5vcmlnaW5fZWNlLmVjKQor
ICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJyLkNvbmQub3JpZ2luX2VjZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5Db25kLm90YWcgJiAzICk7
CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKQEAgLTQ4NiwxNiArNDg2LDE2IEBACiAgICAg
ICAgICAgICBlbWl0KCAiICA8d2hhdD5TeXNjYWxsIHBhcmFtICVwUyBjb250YWlucyAiCiAgICAg
ICAgICAgICAgICAgICAidW5pbml0aWFsaXNlZCBieXRlKHMpPC93aGF0PlxuIiwKICAgICAgICAg
ICAgICAgICAgIFZHXyhnZXRfZXJyb3Jfc3RyaW5nKShlcnIpICk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKLSAgICAgICAgICAg
IGlmIChleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lYykKLSAgICAgICAgICAgICAgIG1jX3Bw
X29yaWdpbiggZXh0cmEtPkVyci5SZWdQYXJhbS5vcmlnaW5fZWMsCisgICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAg
ICAgICAgICAgaWYgKGV4dHJhLT5FcnIuUmVnUGFyYW0ub3JpZ2luX2VjZS5lYykKKyAgICAgICAg
ICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5SZWdQYXJhbS5vcmlnaW5fZWNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLlJlZ1BhcmFtLm90YWcgJiAzICk7
CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIlN5c2NhbGwgcGFyYW0gJXMg
Y29udGFpbnMgdW5pbml0aWFsaXNlZCBieXRlKHMpXG4iLAogICAgICAgICAgICAgICAgICAgVkdf
KGdldF9lcnJvcl9zdHJpbmcpKGVycikgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwotICAgICAgICAgICAgaWYgKGV4dHJhLT5F
cnIuUmVnUGFyYW0ub3JpZ2luX2VjKQotICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRy
YS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lYywKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBpZiAo
ZXh0cmEtPkVyci5SZWdQYXJhbS5vcmlnaW5fZWNlLmVjKQorICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhLT5FcnIuUmVnUGFyYW0ub3RhZyAmIDMgKTsKICAgICAgICAgIH0K
ICAgICAgICAgIGJyZWFrOwpAQCAtNTA5LDEyICs1MDksMTIgQEAKICAgICAgICAgICAgICAgICAg
IFZHXyhnZXRfZXJyb3Jfc3RyaW5nKShlcnIpLAogICAgICAgICAgICAgICAgICAgZXh0cmEtPkVy
ci5NZW1QYXJhbS5pc0FkZHJFcnIgCiAgICAgICAgICAgICAgICAgICAgICA/ICJ1bmFkZHJlc3Nh
YmxlIiA6ICJ1bmluaXRpYWxpc2VkIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHQp
KCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhlQ29u
dGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAgICAg
VkdfKHBwX2FkZHJpbmZvX21jKShWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLk1lbVBhcmFtLmFpLCBGYWxzZSk7
Ci0gICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMgCisgICAgICAg
ICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWNlLmVjIAogICAgICAgICAgICAg
ICAgICYmICFleHRyYS0+RXJyLk1lbVBhcmFtLmlzQWRkckVycikKLSAgICAgICAgICAgICAgIG1j
X3BwX29yaWdpbiggZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMsCisgICAgICAgICAgICAg
ICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuTWVtUGFyYW0ub3JpZ2luX2VjZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5NZW1QYXJhbS5vdGFnICYgMyApOwogICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVtaXQoICJTeXNjYWxsIHBhcmFtICVzIHBvaW50
cyB0byAlcyBieXRlKHMpXG4iLApAQCAtNTIxLDEyICs1MjEsMTIgQEAKICAgICAgICAgICAgICAg
ICAgIFZHXyhnZXRfZXJyb3Jfc3RyaW5nKShlcnIpLAogICAgICAgICAgICAgICAgICAgZXh0cmEt
PkVyci5NZW1QYXJhbS5pc0FkZHJFcnIgCiAgICAgICAgICAgICAgICAgICAgICA/ICJ1bmFkZHJl
c3NhYmxlIiA6ICJ1bmluaXRpYWxpc2VkIiApOwotICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAgICAgICBWR18ocHBfRXhl
Q29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOwogICAgICAgICAg
ICAgVkdfKHBwX2FkZHJpbmZvX21jKShWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLk1lbVBhcmFtLmFpLCBGYWxz
ZSk7Ci0gICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMgCisgICAg
ICAgICAgICBpZiAoZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWNlLmVjIAogICAgICAgICAg
ICAgICAgICYmICFleHRyYS0+RXJyLk1lbVBhcmFtLmlzQWRkckVycikKLSAgICAgICAgICAgICAg
IG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5NZW1QYXJhbS5vcmlnaW5fZWMsCisgICAgICAgICAg
ICAgICBtY19wcF9vcmlnaW4oIGV4dHJhLT5FcnIuTWVtUGFyYW0ub3JpZ2luX2VjZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5NZW1QYXJhbS5vdGFnICYgMyApOwog
ICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CkBAIC01NDAsMjEgKzU0MCwyMSBAQAogICAgICAg
ICAgICAgICAgICAgImR1cmluZyBjbGllbnQgY2hlY2sgcmVxdWVzdDwvd2hhdD5cbiIsIAogICAg
ICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuVXNlci5pc0FkZHJFcnIKICAgICAgICAgICAgICAg
ICAgICAgICA/ICJVbmFkZHJlc3NhYmxlIiA6ICJVbmluaXRpYWxpc2VkIiApOwotICAgICAgICAg
ICAgVkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAg
ICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSko
ZXJyKSApOwogICAgICAgICAgICAgVkdfKHBwX2FkZHJpbmZvX21jKShWR18oZ2V0X2Vycm9yX2Fk
ZHJlc3MpKGVyciksICZleHRyYS0+RXJyLlVzZXIuYWksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZhbHNlKTsKLSAgICAgICAgICAgIGlmIChleHRyYS0+RXJyLlVzZXIub3JpZ2lu
X2VjICYmICFleHRyYS0+RXJyLlVzZXIuaXNBZGRyRXJyKQotICAgICAgICAgICAgICAgbWNfcHBf
b3JpZ2luKCBleHRyYS0+RXJyLlVzZXIub3JpZ2luX2VjLAorICAgICAgICAgICAgaWYgKGV4dHJh
LT5FcnIuVXNlci5vcmlnaW5fZWNlLmVjICYmICFleHRyYS0+RXJyLlVzZXIuaXNBZGRyRXJyKQor
ICAgICAgICAgICAgICAgbWNfcHBfb3JpZ2luKCBleHRyYS0+RXJyLlVzZXIub3JpZ2luX2VjZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5Vc2VyLm90YWcgJiAzICk7
CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIiVzIGJ5dGUocykgZm91bmQg
ZHVyaW5nIGNsaWVudCBjaGVjayByZXF1ZXN0XG4iLCAKICAgICAgICAgICAgICAgICAgICBleHRy
YS0+RXJyLlVzZXIuaXNBZGRyRXJyCiAgICAgICAgICAgICAgICAgICAgICAgPyAiVW5hZGRyZXNz
YWJsZSIgOiAiVW5pbml0aWFsaXNlZCIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAg
IFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLCAmZXh0cmEt
PkVyci5Vc2VyLmFpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSk7Ci0g
ICAgICAgICAgICBpZiAoZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lYyAmJiAhZXh0cmEtPkVyci5V
c2VyLmlzQWRkckVycikKLSAgICAgICAgICAgICAgIG1jX3BwX29yaWdpbiggZXh0cmEtPkVyci5V
c2VyLm9yaWdpbl9lYywKKyAgICAgICAgICAgIGlmIChleHRyYS0+RXJyLlVzZXIub3JpZ2luX2Vj
ZS5lYyAmJiAhZXh0cmEtPkVyci5Vc2VyLmlzQWRkckVycikKKyAgICAgICAgICAgICAgIG1jX3Bw
X29yaWdpbiggZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLT5FcnIuVXNlci5vdGFnICYgMyApOwogICAgICAgICAgfQogICAgICAg
ICAgYnJlYWs7CkBAIC01NjQsMTIgKzU2NCwxMiBAQAogICAgICAgICAgICAgZW1pdCggIiAgPGtp
bmQ+SW52YWxpZEZyZWU8L2tpbmQ+XG4iICk7CiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD5J
bnZhbGlkIGZyZWUoKSAvIGRlbGV0ZSAvIGRlbGV0ZVtdIgogICAgICAgICAgICAgICAgICAgIiAv
IHJlYWxsb2MoKTwvd2hhdD5cbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSgg
VkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAgIFZH
XyhwcF9hZGRyaW5mb19tYykoIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkZyZWUuYWksIEZhbHNlICk7CiAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW1pdCggIkludmFsaWQgZnJlZSgpIC8gZGVs
ZXRlIC8gZGVsZXRlW10gLyByZWFsbG9jKClcbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBw
X0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAg
ICAgICAgIFZHXyhwcF9hZGRyaW5mb19tYykoIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkZyZWUuYWksIEZh
bHNlICk7CiAgICAgICAgICB9CkBAIC01NzksMTIgKzU3OSwxMiBAQAogICAgICAgICAgaWYgKHht
bCkgewogICAgICAgICAgICAgZW1pdCggIiAgPGtpbmQ+TWlzbWF0Y2hlZEZyZWU8L2tpbmQ+XG4i
ICk7CiAgICAgICAgICAgICBlbWl0KCAiICA8d2hhdD5NaXNtYXRjaGVkIGZyZWUoKSAvIGRlbGV0
ZSAvIGRlbGV0ZSBbXTwvd2hhdD5cbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0
KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNv
bnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAg
IFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEtPkVyci5GcmVlTWlzbWF0Y2guYWksIEZh
bHNlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlbWl0KCAiTWlzbWF0Y2hlZCBm
cmVlKCkgLyBkZWxldGUgLyBkZWxldGUgW11cbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVD
b250ZXh0KSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBw
X0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAg
ICAgICAgIFZHXyhwcF9hZGRyaW5mb19tYykoVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEtPkVyci5GcmVlTWlzbWF0Y2gu
YWksIEZhbHNlKTsKICAgICAgICAgIH0KQEAgLTU5Nyw3ICs1OTcsNyBAQAogICAgICAgICAgICAg
ZW1pdCggIiAgPHdoYXQ+SW52YWxpZCAlcyBvZiBzaXplICVsdTwvd2hhdD5cbiIsCiAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLkFkZHIuaXNXcml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsCiAg
ICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLkFkZHIuc3pCICk7Ci0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAg
IFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7
CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0X2Vycm9yX2FkZHJlc3Mp
KGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEtPkVyci5BZGRy
LmFpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5BZGRyLm1h
eWJlX2djYyApOwpAQCAtNjA1LDcgKzYwNSw3IEBACiAgICAgICAgICAgICBlbWl0KCAiSW52YWxp
ZCAlcyBvZiBzaXplICVsdVxuIiwKICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuQWRkci5p
c1dyaXRlID8gIndyaXRlIiA6ICJyZWFkIiwKICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIu
QWRkci5zekIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJv
cl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCko
IFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKIAogICAgICAgICAgICAgVkdfKHBwX2FkZHJp
bmZvX21jKSggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuQWRkci5haSwKQEAgLTYxOCwxMiArNjE4LDEyIEBA
CiAgICAgICAgICAgICBlbWl0KCAiICA8a2luZD5JbnZhbGlkSnVtcDwva2luZD5cbiIgKTsKICAg
ICAgICAgICAgIGVtaXQoICIgIDx3aGF0Pkp1bXAgdG8gdGhlIGludmFsaWQgYWRkcmVzcyBzdGF0
ZWQgIgogICAgICAgICAgICAgICAgICAgIm9uIHRoZSBuZXh0IGxpbmU8L3doYXQ+XG4iICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0
X2Vycm9yX2FkZHJlc3MpKGVyciksICZleHRyYS0+RXJyLkp1bXAuYWksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGYWxzZSApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGVtaXQoICJKdW1wIHRvIHRoZSBpbnZhbGlkIGFkZHJlc3Mgc3RhdGVkIG9uIHRoZSBuZXh0
IGxpbmVcbiIgKTsKLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJv
cl93aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCko
IFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgICAgIFZHXyhwcF9hZGRyaW5m
b19tYykoIFZHXyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwgJmV4dHJhLT5FcnIuSnVtcC5haSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlICk7CiAgICAgICAgICB9CkBA
IC02NDQsNyArNjQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuT3Zlcmxh
cC5kc3QsIGV4dHJhLT5FcnIuT3ZlcmxhcC5zcmMsCiAgICAgICAgICAgICAgICAgICAgICBleHRy
YS0+RXJyLk92ZXJsYXAuc3pCICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBWR18ocHBf
RXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CiAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGV4dHJhLT5FcnIuT3ZlcmxhcC5zekIg
PT0gMCkgewogICAgICAgICAgICAgICAgZW1pdCggIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gb3Zl
cmxhcCBpbiAlcyglI2x4LCAlI2x4KVxuIiwKQEAgLTY1Niw3ICs2NTYsNyBAQAogICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEtPkVyci5PdmVybGFwLmRzdCwgZXh0cmEtPkVyci5PdmVybGFwLnNy
YywKICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLT5FcnIuT3ZlcmxhcC5zekIgKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggVkdfKGdldF9lcnJvcl93
aGVyZSkoZXJyKSApOworICAgICAgICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIFZH
XyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwog
CkBAIC02NjYsMTIgKzY2NiwxMiBAQAogICAgICAgICAgaWYgKHhtbCkgewogICAgICAgICAgICAg
ZW1pdCggIiAgPGtpbmQ+SW52YWxpZE1lbVBvb2w8L2tpbmQ+XG4iICk7CiAgICAgICAgICAgICBl
bWl0KCAiICA8d2hhdD5JbGxlZ2FsIG1lbW9yeSBwb29sIGFkZHJlc3M8L3doYXQ+XG4iICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0
X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZXh0cmEtPkVyci5JbGxlZ2FsTWVtcG9vbC5haSwgRmFsc2UgKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBlbWl0KCAiSWxsZWdhbCBtZW1vcnkgcG9vbCBhZGRyZXNzXG4iICk7Ci0g
ICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikg
KTsKKyAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9y
X3doZXJlKShlcnIpICk7CiAgICAgICAgICAgICBWR18ocHBfYWRkcmluZm9fbWMpKCBWR18oZ2V0
X2Vycm9yX2FkZHJlc3MpKGVyciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZXh0cmEtPkVyci5JbGxlZ2FsTWVtcG9vbC5haSwgRmFsc2UgKTsKICAgICAgICAgIH0KQEAgLTY5
NSw3ICs2OTUsNyBAQAogICAgICAgICAgICAgICAgICAgZXh0cmEtPkVyci5GaXNoeVZhbHVlLmZ1
bmN0aW9uX25hbWUsCiAgICAgICAgICAgICAgICAgICAoU1NpemVUKWV4dHJhLT5FcnIuRmlzaHlW
YWx1ZS52YWx1ZSk7CiAgICAgICAgICAgICBlbWl0KCAiPC93aGF0PiIpOwotICAgICAgICAgICAg
VkdfKHBwX0V4ZUNvbnRleHQpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpICk7CisgICAgICAg
ICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggVkdfKGdldF9lcnJvcl93aGVyZSkoZXJy
KSApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVtaXQoICJBcmd1bWVudCAnJXMn
IG9mIGZ1bmN0aW9uICVzIGhhcyBhIGZpc2h5ICIKICAgICAgICAgICAgICAgICAgICIocG9zc2li
bHkgbmVnYXRpdmUpIHZhbHVlOiAlbGRcbiIsCkBAIC03MDIsNyArNzAyLDcgQEAKICAgICAgICAg
ICAgICAgICAgIGV4dHJhLT5FcnIuRmlzaHlWYWx1ZS5hcmd1bWVudF9uYW1lLAogICAgICAgICAg
ICAgICAgICAgZXh0cmEtPkVyci5GaXNoeVZhbHVlLmZ1bmN0aW9uX25hbWUsCiAgICAgICAgICAg
ICAgICAgICAoU1NpemVUKWV4dHJhLT5FcnIuRmlzaHlWYWx1ZS52YWx1ZSk7Ci0gICAgICAgICAg
ICBWR18ocHBfRXhlQ29udGV4dCkoIFZHXyhnZXRfZXJyb3Jfd2hlcmUpKGVycikgKTsKKyAgICAg
ICAgICAgIFZHXyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCBWR18oZ2V0X2Vycm9yX3doZXJlKShl
cnIpICk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKIApAQCAtNzczLDkgKzc3MywxMCBA
QAogICAgdGxfYXNzZXJ0KCBNQ18oY2xvX21jX2xldmVsKSA+PSAyICk7CiAgICBpZiAob3RhZyA+
IDApCiAgICAgICB0bF9hc3NlcnQoIE1DXyhjbG9fbWNfbGV2ZWwpID09IDMgKTsKLSAgIGV4dHJh
LkVyci5WYWx1ZS5zekIgICAgICAgPSBzekI7Ci0gICBleHRyYS5FcnIuVmFsdWUub3RhZyAgICAg
ID0gb3RhZzsKLSAgIGV4dHJhLkVyci5WYWx1ZS5vcmlnaW5fZWMgPSBOVUxMOyAgLyogRmlsbGVk
IGluIGxhdGVyICovCisgICBleHRyYS5FcnIuVmFsdWUuc3pCICAgICAgICA9IHN6QjsKKyAgIGV4
dHJhLkVyci5WYWx1ZS5vdGFnICAgICAgID0gb3RhZzsKKyAgIGV4dHJhLkVyci5WYWx1ZS5vcmln
aW5fZWNlID0gVkdfKGludmFsaWRfRXhlQ29udGV4dEFuZEVwb2NoKSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBGaWxsZWQgaW4gbGF0ZXIgKi8KICAgIFZHXyhtYXliZV9y
ZWNvcmRfZXJyb3IpKCB0aWQsIEVycl9WYWx1ZSwgLyphZGRyKi8wLCAvKnMqL05VTEwsICZleHRy
YSApOwogfQogCkBAIC03ODUsOCArNzg2LDkgQEAKICAgIHRsX2Fzc2VydCggTUNfKGNsb19tY19s
ZXZlbCkgPj0gMiApOwogICAgaWYgKG90YWcgPiAwKQogICAgICAgdGxfYXNzZXJ0KCBNQ18oY2xv
X21jX2xldmVsKSA9PSAzICk7Ci0gICBleHRyYS5FcnIuQ29uZC5vdGFnICAgICAgPSBvdGFnOwot
ICAgZXh0cmEuRXJyLkNvbmQub3JpZ2luX2VjID0gTlVMTDsgIC8qIEZpbGxlZCBpbiBsYXRlciAq
LworICAgZXh0cmEuRXJyLkNvbmQub3RhZyAgICAgICA9IG90YWc7CisgICBleHRyYS5FcnIuQ29u
ZC5vcmlnaW5fZWNlID0gVkdfKGludmFsaWRfRXhlQ29udGV4dEFuZEVwb2NoKSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGxlZCBpbiBsYXRlciAqLwogICAgVkdfKG1h
eWJlX3JlY29yZF9lcnJvcikoIHRpZCwgRXJyX0NvbmQsIC8qYWRkciovMCwgLypzKi9OVUxMLCAm
ZXh0cmEgKTsKIH0KIApAQCAtODA0LDggKzgwNiw5IEBACiAgICB0bF9hc3NlcnQoVkdfSU5WQUxJ
RF9USFJFQURJRCAhPSB0aWQpOwogICAgaWYgKG90YWcgPiAwKQogICAgICAgdGxfYXNzZXJ0KCBN
Q18oY2xvX21jX2xldmVsKSA9PSAzICk7Ci0gICBleHRyYS5FcnIuUmVnUGFyYW0ub3RhZyAgICAg
ID0gb3RhZzsKLSAgIGV4dHJhLkVyci5SZWdQYXJhbS5vcmlnaW5fZWMgPSBOVUxMOyAgLyogRmls
bGVkIGluIGxhdGVyICovCisgICBleHRyYS5FcnIuUmVnUGFyYW0ub3RhZyAgICAgICA9IG90YWc7
CisgICBleHRyYS5FcnIuUmVnUGFyYW0ub3JpZ2luX2VjZSA9IFZHXyhpbnZhbGlkX0V4ZUNvbnRl
eHRBbmRFcG9jaCkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGxl
ZCBpbiBsYXRlciAqLwogICAgVkdfKG1heWJlX3JlY29yZF9lcnJvcikoIHRpZCwgRXJyX1JlZ1Bh
cmFtLCAvKmFkZHIqLzAsIG1zZywgJmV4dHJhICk7CiB9CiAKQEAgLTgyMCwxMCArODIzLDExIEBA
CiAgICAgICB0bF9hc3NlcnQoIE1DXyhjbG9fbWNfbGV2ZWwpID09IDMgKTsKICAgICAgIHRsX2Fz
c2VydCggIWlzQWRkckVyciApOwogICAgfQotICAgZXh0cmEuRXJyLk1lbVBhcmFtLmlzQWRkckVy
ciA9IGlzQWRkckVycjsKLSAgIGV4dHJhLkVyci5NZW1QYXJhbS5haS50YWcgICAgPSBBZGRyX1Vu
ZGVzY3JpYmVkOwotICAgZXh0cmEuRXJyLk1lbVBhcmFtLm90YWcgICAgICA9IG90YWc7Ci0gICBl
eHRyYS5FcnIuTWVtUGFyYW0ub3JpZ2luX2VjID0gTlVMTDsgIC8qIEZpbGxlZCBpbiBsYXRlciAq
LworICAgZXh0cmEuRXJyLk1lbVBhcmFtLmlzQWRkckVyciAgPSBpc0FkZHJFcnI7CisgICBleHRy
YS5FcnIuTWVtUGFyYW0uYWkudGFnICAgICA9IEFkZHJfVW5kZXNjcmliZWQ7CisgICBleHRyYS5F
cnIuTWVtUGFyYW0ub3RhZyAgICAgICA9IG90YWc7CisgICBleHRyYS5FcnIuTWVtUGFyYW0ub3Jp
Z2luX2VjZSA9IFZHXyhpbnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGxlZCBpbiBsYXRlciAqLwogICAgVkdfKG1heWJl
X3JlY29yZF9lcnJvcikoIHRpZCwgRXJyX01lbVBhcmFtLCBhLCBtc2csICZleHRyYSApOwogfQog
CkBAIC05MjUsMTAgKzkyOSwxMSBAQAogICAgICAgdGxfYXNzZXJ0KCBNQ18oY2xvX21jX2xldmVs
KSA+PSAyICk7CiAgICB9CiAgICB0bF9hc3NlcnQoVkdfSU5WQUxJRF9USFJFQURJRCAhPSB0aWQp
OwotICAgZXh0cmEuRXJyLlVzZXIuaXNBZGRyRXJyID0gaXNBZGRyRXJyOwotICAgZXh0cmEuRXJy
LlVzZXIuYWkudGFnICAgID0gQWRkcl9VbmRlc2NyaWJlZDsKLSAgIGV4dHJhLkVyci5Vc2VyLm90
YWcgICAgICA9IG90YWc7Ci0gICBleHRyYS5FcnIuVXNlci5vcmlnaW5fZWMgPSBOVUxMOyAgLyog
RmlsbGVkIGluIGxhdGVyICovCisgICBleHRyYS5FcnIuVXNlci5pc0FkZHJFcnIgID0gaXNBZGRy
RXJyOworICAgZXh0cmEuRXJyLlVzZXIuYWkudGFnICAgICA9IEFkZHJfVW5kZXNjcmliZWQ7Cisg
ICBleHRyYS5FcnIuVXNlci5vdGFnICAgICAgID0gb3RhZzsKKyAgIGV4dHJhLkVyci5Vc2VyLm9y
aWdpbl9lY2UgPSBWR18oaW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIEZpbGxlZCBpbiBsYXRlciAqLwogICAgVkdfKG1heWJlX3Jl
Y29yZF9lcnJvcikoIHRpZCwgRXJyX1VzZXIsIGEsIC8qcyovTlVMTCwgJmV4dHJhICk7CiB9CiAK
QEAgLTEwNTMsNyArMTA1OCw3IEBACiAKIC8qIERlc2NyaWJlIGFuIGFkZHJlc3MgYXMgYmVzdCB5
b3UgY2FuLCBmb3IgZXJyb3IgbWVzc2FnZXMsCiAgICBwdXR0aW5nIHRoZSByZXN1bHQgaW4gYWku
ICovCi1zdGF0aWMgdm9pZCBkZXNjcmliZV9hZGRyICggQWRkciBhLCAvKk9VVCovQWRkckluZm8q
IGFpICkKK3N0YXRpYyB2b2lkIGRlc2NyaWJlX2FkZHIgKCBEaUVwb2NoIGVwLCBBZGRyIGEsIC8q
T1VUKi9BZGRySW5mbyogYWkgKQogewogICAgTUNfQ2h1bmsqICBtYzsKIApAQCAtMTEyMSwyOCAr
MTEyNiwzMCBAQAogICAgfQogCiAgICAvKiBObyBibG9jayBmb3VuZC4gU2VhcmNoIGEgbm9uLWhl
YXAgYmxvY2sgZGVzY3JpcHRpb24uICovCi0gICBWR18oZGVzY3JpYmVfYWRkcikgKGEsIGFpKTsK
KyAgIFZHXyhkZXNjcmliZV9hZGRyKSAoZXAsIGEsIGFpKTsKIH0KIAotdm9pZCBNQ18ocHBfZGVz
Y3JpYmVfYWRkcikgKCBBZGRyIGEgKQordm9pZCBNQ18ocHBfZGVzY3JpYmVfYWRkcikgKCBEaUVw
b2NoIGVwLCBBZGRyIGEgKQogewogICAgQWRkckluZm8gYWk7CiAKICAgIGFpLnRhZyA9IEFkZHJf
VW5kZXNjcmliZWQ7Ci0gICBkZXNjcmliZV9hZGRyIChhLCAmYWkpOworICAgZGVzY3JpYmVfYWRk
ciAoZXAsIGEsICZhaSk7CiAgICBWR18ocHBfYWRkcmluZm9fbWMpIChhLCAmYWksIC8qIG1heWJl
X2djYyAqLyBGYWxzZSk7CiAgICBWR18oY2xlYXJfYWRkcmluZm8pICgmYWkpOwogfQogCi0vKiBG
aWxsIGluICpvcmlnaW5fZWMgYXMgc3BlY2lmaWVkIGJ5IG90YWcsIG9yIE5VTEwgaXQgb3V0IGlm
IG90YWcKKy8qIEZpbGwgaW4gKm9yaWdpbl9lY2UgYXMgc3BlY2lmaWVkIGJ5IG90YWcsIG9yIE5V
TEwgaXQgb3V0IGlmIG90YWcKICAgIGRvZXMgbm90IHJlZmVyIHRvIGEga25vd24gb3JpZ2luLiAq
Lwotc3RhdGljIHZvaWQgdXBkYXRlX29yaWdpbiAoIC8qT1VUKi9FeGVDb250ZXh0Kiogb3JpZ2lu
X2VjLAorc3RhdGljIHZvaWQgdXBkYXRlX29yaWdpbiAoIC8qT1VUKi9FeGVDb250ZXh0QW5kRXBv
Y2gqIG9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludCBvdGFnICkK
IHsKICAgIFVJbnQgZWN1ID0gb3RhZyAmIH4zOwotICAgKm9yaWdpbl9lYyA9IE5VTEw7CiAgICBp
ZiAoVkdfKGlzX3BsYXVzaWJsZV9FQ1UpKGVjdSkpIHsKLSAgICAgICpvcmlnaW5fZWMgPSBWR18o
Z2V0X0V4ZUNvbnRleHRfZnJvbV9FQ1UpKCBlY3UgKTsKKyAgICAgICpvcmlnaW5fZWNlCisgICAg
ICAgICA9IFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2NoKShWR18oZ2V0X0V4ZUNvbnRleHRf
ZnJvbV9FQ1UpKCBlY3UgKSk7CisgICB9IGVsc2UgeworICAgICAgKm9yaWdpbl9lY2UgPSBWR18o
aW52YWxpZF9FeGVDb250ZXh0QW5kRXBvY2gpKCk7CiAgICB9CiB9CiAKQEAgLTExNTAsNiArMTE1
Nyw3IEBACiBVSW50IE1DXyh1cGRhdGVfRXJyb3JfZXh0cmEpKCBjb25zdCBFcnJvciogZXJyICkK
IHsKICAgIE1DX0Vycm9yKiBleHRyYSA9IFZHXyhnZXRfZXJyb3JfZXh0cmEpKGVycik7CisgICBE
aUVwb2NoICAgZXAgICAgPSBWR18oZ2V0X2Vycm9yX3doZXJlKShlcnIpLmVwb2NoOwogCiAgICBz
d2l0Y2ggKFZHXyhnZXRfZXJyb3Jfa2luZCkoZXJyKSkgewogICAgLy8gVGhlc2Ugb25lcyBkb24n
dCBoYXZlIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhlbSwgYW5kIHNvIGRvbid0CkBAIC0x
MTY5LDQ1ICsxMTc3LDQ1IEBACiAgICAvLyBvcmlnaW4gdGFnLiAgTm90ZSB0aGF0IGl0IGlzIGEg
a2x1ZGdlIHRvIGFzc3VtZSB0aGF0IAogICAgLy8gYSBsZW5ndGgtMSB0cmFjZSBpbmRpY2F0ZXMg
YSBzdGFjayBvcmlnaW4uICBGSVhNRS4KICAgIGNhc2UgRXJyX1ZhbHVlOgotICAgICAgdXBkYXRl
X29yaWdpbiggJmV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjLAorICAgICAgdXBkYXRlX29yaWdp
biggJmV4dHJhLT5FcnIuVmFsdWUub3JpZ2luX2VjZSwKICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhLT5FcnIuVmFsdWUub3RhZyApOwogICAgICAgcmV0dXJuIHNpemVvZihNQ19FcnJvcik7CiAg
ICBjYXNlIEVycl9Db25kOgotICAgICAgdXBkYXRlX29yaWdpbiggJmV4dHJhLT5FcnIuQ29uZC5v
cmlnaW5fZWMsCisgICAgICB1cGRhdGVfb3JpZ2luKCAmZXh0cmEtPkVyci5Db25kLm9yaWdpbl9l
Y2UsCiAgICAgICAgICAgICAgICAgICAgICBleHRyYS0+RXJyLkNvbmQub3RhZyApOwogICAgICAg
cmV0dXJuIHNpemVvZihNQ19FcnJvcik7CiAgICBjYXNlIEVycl9SZWdQYXJhbToKLSAgICAgIHVw
ZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lYywKKyAgICAgIHVwZGF0
ZV9vcmlnaW4oICZleHRyYS0+RXJyLlJlZ1BhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAg
ICAgICAgICBleHRyYS0+RXJyLlJlZ1BhcmFtLm90YWcgKTsKICAgICAgIHJldHVybiBzaXplb2Yo
TUNfRXJyb3IpOwogCiAgICAvLyBUaGVzZSBvbmVzIGFsd2F5cyBpbnZvbHZlIGEgbWVtb3J5IGFk
ZHJlc3MuCiAgICBjYXNlIEVycl9BZGRyOgotICAgICAgZGVzY3JpYmVfYWRkciAoIFZHXyhnZXRf
ZXJyb3JfYWRkcmVzcykoZXJyKSwKKyAgICAgIGRlc2NyaWJlX2FkZHIgKCBlcCwgVkdfKGdldF9l
cnJvcl9hZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkFk
ZHIuYWkgKTsKICAgICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfTWVt
UGFyYW06Ci0gICAgICBkZXNjcmliZV9hZGRyICggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIp
LAorICAgICAgZGVzY3JpYmVfYWRkciAoIGVwLCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciks
CiAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuTWVtUGFyYW0uYWkgKTsKLSAgICAg
IHVwZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLk1lbVBhcmFtLm9yaWdpbl9lYywKKyAgICAgIHVw
ZGF0ZV9vcmlnaW4oICZleHRyYS0+RXJyLk1lbVBhcmFtLm9yaWdpbl9lY2UsCiAgICAgICAgICAg
ICAgICAgICAgICBleHRyYS0+RXJyLk1lbVBhcmFtLm90YWcgKTsKICAgICAgIHJldHVybiBzaXpl
b2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfSnVtcDoKLSAgICAgIGRlc2NyaWJlX2FkZHIgKCBW
R18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciksCisgICAgICBkZXNjcmliZV9hZGRyICggZXAsIFZH
XyhnZXRfZXJyb3JfYWRkcmVzcykoZXJyKSwKICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmEt
PkVyci5KdW1wLmFpICk7CiAgICAgICByZXR1cm4gc2l6ZW9mKE1DX0Vycm9yKTsKICAgIGNhc2Ug
RXJyX1VzZXI6Ci0gICAgICBkZXNjcmliZV9hZGRyICggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShl
cnIpLAorICAgICAgZGVzY3JpYmVfYWRkciAoIGVwLCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVy
ciksCiAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuVXNlci5haSApOwotICAgICAg
dXBkYXRlX29yaWdpbiggJmV4dHJhLT5FcnIuVXNlci5vcmlnaW5fZWMsCisgICAgICB1cGRhdGVf
b3JpZ2luKCAmZXh0cmEtPkVyci5Vc2VyLm9yaWdpbl9lY2UsCiAgICAgICAgICAgICAgICAgICAg
ICBleHRyYS0+RXJyLlVzZXIub3RhZyApOwogICAgICAgcmV0dXJuIHNpemVvZihNQ19FcnJvcik7
CiAgICBjYXNlIEVycl9GcmVlOgotICAgICAgZGVzY3JpYmVfYWRkciAoIFZHXyhnZXRfZXJyb3Jf
YWRkcmVzcykoZXJyKSwKKyAgICAgIGRlc2NyaWJlX2FkZHIgKCBlcCwgVkdfKGdldF9lcnJvcl9h
ZGRyZXNzKShlcnIpLAogICAgICAgICAgICAgICAgICAgICAgICZleHRyYS0+RXJyLkZyZWUuYWkg
KTsKICAgICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogICAgY2FzZSBFcnJfSWxsZWdhbE1l
bXBvb2w6Ci0gICAgICBkZXNjcmliZV9hZGRyICggVkdfKGdldF9lcnJvcl9hZGRyZXNzKShlcnIp
LAorICAgICAgZGVzY3JpYmVfYWRkciAoIGVwLCBWR18oZ2V0X2Vycm9yX2FkZHJlc3MpKGVyciks
CiAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhLT5FcnIuSWxsZWdhbE1lbXBvb2wuYWkgKTsK
ICAgICAgIHJldHVybiBzaXplb2YoTUNfRXJyb3IpOwogCkBAIC0xMjUyLDcgKzEyNjAsNyBAQAog
ICAgICAgICAgYWktPkFkZHIuQmxvY2sucndvZmZzZXQgICA9IChXb3JkKShhKSAtIChXb3JkKShj
Z2JzW2ldLnN0YXJ0KTsKICAgICAgICAgIGFpLT5BZGRyLkJsb2NrLmFsbG9jYXRlZF9hdCA9IGNn
YnNbaV0ud2hlcmU7CiAgICAgICAgICBWR18oaW5pdFRocmVhZEluZm8pICgmYWktPkFkZHIuQmxv
Y2suYWxsb2NfdGluZm8pOwotICAgICAgICAgYWktPkFkZHIuQmxvY2suZnJlZWRfYXQgPSBWR18o
bnVsbF9FeGVDb250ZXh0KSgpOzsKKyAgICAgICAgIGFpLT5BZGRyLkJsb2NrLmZyZWVkX2F0ID0g
VkdfKG51bGxfRXhlQ29udGV4dEFuZEVwb2NoKSgpOwogICAgICAgICAgcmV0dXJuIFRydWU7CiAg
ICAgICB9CiAgICB9CkluZGV4OiBtZW1jaGVjay9tY19pbmNsdWRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
bWVtY2hlY2svbWNfaW5jbHVkZS5oCShyZXZpc2lvbiAxNjQ2NSkKKysrIG1lbWNoZWNrL21jX2lu
Y2x1ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTcgKzY3LDE3IEBACiAgICAgICBBZGRyICAg
ICAgICAgZGF0YTsgICAgICAgICAgICAvLyBBZGRyZXNzIG9mIHRoZSBhY3R1YWwgYmxvY2suCiAg
ICAgICBTaXplVCAgICAgICAgc3pCIDogKHNpemVvZihTaXplVCkqOCktMjsgLy8gU2l6ZSByZXF1
ZXN0ZWQ7IDMwIG9yIDYyIGJpdHMuCiAgICAgICBNQ19BbGxvY0tpbmQgYWxsb2NraW5kIDogMjsg
ICAvLyBXaGljaCBvcGVyYXRpb24gZGlkIHRoZSBhbGxvY2F0aW9uLgotICAgICAgRXhlQ29udGV4
dCogIHdoZXJlWzBdOworICAgICAgRXhlQ29udGV4dEFuZEVwb2NoIHdoZXJlWzBdOwogICAgICAg
LyogVmFyaWFibGUtbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBkZXBlbmRzIG9uIE1DXyhjbG9fa2Vl
cF9zdGFja3RyYWNlcykuCiAgICAgICAgICBUaGlzIGFycmF5IG9wdGlvbmFsbHkgc3RvcmVzIHRo
ZSBhbGxvYyBhbmQvb3IgZnJlZSBzdGFjayB0cmFjZS4gKi8KICAgIH0KICAgIE1DX0NodW5rOwog
Ci0vKiBSZXR1cm5zIHRoZSBleGVjb250ZXh0IHdoZXJlIHRoZSBNQ19DaHVuayB3YXMgYWxsb2Nh
dGVkL2ZyZWVkLgorLyogUmV0dXJucyB0aGUgZXhlY29udGV4dCBhbmQgZXBvY2ggd2hlcmUgdGhl
IE1DX0NodW5rIHdhcyBhbGxvY2F0ZWQvZnJlZWQuCiAgICBSZXR1cm5zIFZHXyhudWxsX0V4ZUNv
bnRleHQpKCkgaWYgdGhlIGV4ZWNvbnRleHQgaGFzIG5vdCBiZWVuIHJlY29yZGVkIChkdWUKICAg
IHRvIE1DXyhjbG9fa2VlcF9zdGFja3RyYWNlcykgYW5kL29yIGJlY2F1c2UgYmxvY2sgbm90IHll
dCBmcmVlZCkuICovCi1FeGVDb250ZXh0KiBNQ18oYWxsb2NhdGVkX2F0KSAoTUNfQ2h1bmsqKTsK
LUV4ZUNvbnRleHQqIE1DXyhmcmVlZF9hdCkgKE1DX0NodW5rKik7CitFeGVDb250ZXh0QW5kRXBv
Y2ggTUNfKGFsbG9jYXRlZF9hdCkgKE1DX0NodW5rKik7CitFeGVDb250ZXh0QW5kRXBvY2ggTUNf
KGZyZWVkX2F0KSAoTUNfQ2h1bmsqKTsKIAogLyogUmVjb3JkcyBhbmQgc2V0cyBleGVjb250ZXh0
IGFjY29yZGluZyB0byBNQ18oY2xvX2tlZXBfc3RhY2t0cmFjZXMpICovCiB2b2lkICBNQ18oc2V0
X2FsbG9jYXRlZF9hdCkgKFRocmVhZElkLCBNQ19DaHVuayopOwpAQCAtNDMyLDggKzQzMiw4IEBA
CiAvKiBXaGVuIGEgTG9zc1JlY29yZCBpcyBwdXQgaW50byBhbiBPU2V0LCB0aGVzZSBlbGVtZW50
cyByZXByZXNlbnQgdGhlIGtleS4gKi8KIHR5cGVkZWYKICAgIHN0cnVjdCBfTG9zc1JlY29yZEtl
eSB7Ci0gICAgICBSZWFjaGVkbmVzcyAgc3RhdGU7ICAgICAgICAvLyBMQ19FeHRyYS5zdGF0ZSB2
YWx1ZSBzaGFyZWQgYnkgYWxsIGJsb2Nrcy4KLSAgICAgIEV4ZUNvbnRleHQqICBhbGxvY2F0ZWRf
YXQ7IC8vIFdoZXJlIHRoZXkgd2VyZSBhbGxvY2F0ZWQuCisgICAgICBSZWFjaGVkbmVzcyAgICAg
ICAgIHN0YXRlOyAgLy8gTENfRXh0cmEuc3RhdGUgdmFsdWUgc2hhcmVkIGJ5IGFsbCBibG9ja3Mu
CisgICAgICBFeGVDb250ZXh0QW5kRXBvY2ggIGFsbG9jYXRlZF9hdDsgLy8gV2hlcmUgdGhleSB3
ZXJlIGFsbG9jYXRlZC4KICAgIH0gCiAgICBMb3NzUmVjb3JkS2V5OwogCkBAIC01NjksOCArNTY5
LDggQEAKIC8qIExlYWsga2luZHMgdG9rZW5zIHRvIGNhbGwgVkdfKHBhcnNlX2VudW1fc2V0KS4g
Ki8KIGV4dGVybiBjb25zdCBIQ2hhciogTUNfKHBhcnNlX2xlYWtfa2luZHNfdG9rZW5zKTsKIAot
LyogcHJpbnRzIGEgZGVzY3JpcHRpb24gb2YgYWRkcmVzcyBhICovCi12b2lkIE1DXyhwcF9kZXNj
cmliZV9hZGRyKSAoQWRkciBhKTsKKy8qIHByaW50cyBhIGRlc2NyaXB0aW9uIG9mIGFkZHJlc3Mg
YSBpbiB0aGUgc3BlY2lmaWVkIGRlYnVnaW5mbyBlcG9jaCAqLwordm9pZCBNQ18ocHBfZGVzY3Jp
YmVfYWRkcikgKCBEaUVwb2NoIGVwLCBBZGRyIGEgKTsKIAogLyogSXMgdGhpcyBhZGRyZXNzIGlu
IGEgdXNlci1zcGVjaWZpZWQgImlnbm9yZWQgcmFuZ2UiID8gKi8KIEJvb2wgTUNfKGluX2lnbm9y
ZWRfcmFuZ2UpICggQWRkciBhICk7CkBAIC01ODgsMTAgKzU4OCwxMCBAQAogICAgc3RhcnQgPT0g
c2l6ZSA9PSAwLiAgKi8KIHR5cGVkZWYKICAgIHN0cnVjdCB7Ci0gICAgICBBZGRyICAgICAgICBz
dGFydDsKLSAgICAgIFNpemVUICAgICAgIHNpemU7Ci0gICAgICBFeGVDb250ZXh0KiB3aGVyZTsK
LSAgICAgIEhDaGFyKiAgICAgIGRlc2M7CisgICAgICBBZGRyICAgICAgICAgICAgICAgc3RhcnQ7
CisgICAgICBTaXplVCAgICAgICAgICAgICAgc2l6ZTsKKyAgICAgIEV4ZUNvbnRleHRBbmRFcG9j
aCB3aGVyZTsKKyAgICAgIEhDaGFyKiAgICAgICAgICAgICBkZXNjOwogICAgfSAKICAgIENHZW5C
bG9jazsKIApJbmRleDogbWVtY2hlY2svbWNfbGVha2NoZWNrLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVt
Y2hlY2svbWNfbGVha2NoZWNrLmMJKHJldmlzaW9uIDE2NDY1KQorKysgbWVtY2hlY2svbWNfbGVh
a2NoZWNrLmMJKHdvcmtpbmcgY29weSkKQEAgLTEwNjAsNiArMTA2MCw4IEBACiAgICBjb25zdCBB
ZGRyIGVuZCA9IFZHX1JPVU5ERE4oc3RhcnQrbGVuLCBzaXplb2YoQWRkcikpOwogICAgZmF1bHRf
Y2F0Y2hlcl90IHByZXZfY2F0Y2hlcjsKIAorICAgY29uc3QgRGlFcG9jaCBlcCA9IFZHXyhjdXJy
ZW50X0RpRXBvY2gpKCk7CisKICAgIGlmIChWR19ERUJVR19MRUFLQ0hFQ0spCiAgICAgICBWR18o
cHJpbnRmKSgic2NhbiAlI2x4LSUjbHggKCVsdSlcbiIsIHN0YXJ0LCBlbmQsIGxlbik7CiAKQEAg
LTExMzksNyArMTE0MSw3IEBACiAgICAgICAgICAgICBpZiAoYWRkciA+PSBzZWFyY2hlZCAmJiBh
ZGRyIDwgc2VhcmNoZWQgKyBzekIpIHsKICAgICAgICAgICAgICAgIGlmIChhZGRyID09IHNlYXJj
aGVkKSB7CiAgICAgICAgICAgICAgICAgICBWR18odW1zZykoIiolI2x4IHBvaW50cyBhdCAlI2x4
XG4iLCBwdHIsIHNlYXJjaGVkKTsKLSAgICAgICAgICAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9h
ZGRyKSAocHRyKTsKKyAgICAgICAgICAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9hZGRyKSAoZXAs
IHB0cik7IC8vIEZJWE1FIEpSUzogZXAgY29ycmVjdD8KICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICBJbnQgY2hfbm87CiAgICAgICAgICAgICAgICAgICBNQ19DaHVu
ayAqY2g7CkBAIC0xMTQ2LDcgKzExNDgsNyBAQAogICAgICAgICAgICAgICAgICAgTENfRXh0cmEg
KmV4OwogICAgICAgICAgICAgICAgICAgVkdfKHVtc2cpKCIqJSNseCBpbnRlcmlvciBwb2ludHMg
YXQgJWx1IGJ5dGVzIGluc2lkZSAlI2x4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB0ciwgKGxvbmcgdW5zaWduZWQpIGFkZHIgLSBzZWFyY2hlZCwgc2VhcmNoZWQpOwotICAgICAg
ICAgICAgICAgICAgTUNfKHBwX2Rlc2NyaWJlX2FkZHIpIChwdHIpOworICAgICAgICAgICAgICAg
ICAgTUNfKHBwX2Rlc2NyaWJlX2FkZHIpIChlcCwgcHRyKTsgLy8gRklYTUUgSlJTOiBlcCBjb3Jy
ZWN0PwogICAgICAgICAgICAgICAgICAgaWYgKGxjX2lzX2FfY2h1bmtfcHRyKGFkZHIsICZjaF9u
bywgJmNoLCAmZXgpICkgewogICAgICAgICAgICAgICAgICAgICAgSW50IGg7CiAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGggPSBMY2hTdGRTdHJpbmc7IGggPCBOX0xFQUtfQ0hFQ0tfSEVVUklT
VElDUzsgaCsrKSB7CkBAIC0xMjAzLDEzICsxMjA1LDE3IEBACiAgICAvLyBDb21wYXJlIG9uIHN0
YXRlcyBmaXJzdCBiZWNhdXNlIHRoYXQncyBmYXN0LgogICAgaWYgKGEtPnN0YXRlIDwgYi0+c3Rh
dGUpIHJldHVybiAtMTsKICAgIGlmIChhLT5zdGF0ZSA+IGItPnN0YXRlKSByZXR1cm4gIDE7Ci0g
ICAvLyBPaywgdGhlIHN0YXRlcyBhcmUgZXF1YWwuICBOb3cgY29tcGFyZSB0aGUgbG9jYXRpb25z
LCB3aGljaCBpcyBzbG93ZXIuCisgICAvLyBBbHNvIG9uIGVwb2NocywgZm9yIHRoZSBzYW1lIHJl
YXNvbi4KKyAgIGlmIChhLT5hbGxvY2F0ZWRfYXQuZXBvY2gubiA8IGItPmFsbG9jYXRlZF9hdC5l
cG9jaC5uKSByZXR1cm4gLTE7CisgICBpZiAoYS0+YWxsb2NhdGVkX2F0LmVwb2NoLm4gPiBiLT5h
bGxvY2F0ZWRfYXQuZXBvY2gubikgcmV0dXJuIDE7CisgICAvLyBPaywgdGhlIHN0YXRlcyBhbmQg
ZXBvY2hzIGFyZSBlcXVhbC4gIE5vdyBjb21wYXJlIHRoZSBsb2NhdGlvbnMsIHdoaWNoCisgICAv
LyBpcyBzbG93ZXIuCiAgICBpZiAoVkdfKGVxX0V4ZUNvbnRleHQpKAotICAgICAgICAgICAgTUNf
KGNsb19sZWFrX3Jlc29sdXRpb24pLCBhLT5hbGxvY2F0ZWRfYXQsIGItPmFsbG9jYXRlZF9hdCkp
CisgICAgICAgICAgICBNQ18oY2xvX2xlYWtfcmVzb2x1dGlvbiksIGEtPmFsbG9jYXRlZF9hdC5l
YywgYi0+YWxsb2NhdGVkX2F0LmVjKSkKICAgICAgIHJldHVybiAwOwogICAgLy8gRGlmZmVyZW50
IGxvY2F0aW9ucy4gIE9yZGVyaW5nIGlzIGFyYml0cmFyeSwganVzdCB1c2UgdGhlIGVjIHBvaW50
ZXIuCi0gICBpZiAoYS0+YWxsb2NhdGVkX2F0IDwgYi0+YWxsb2NhdGVkX2F0KSByZXR1cm4gLTE7
Ci0gICBpZiAoYS0+YWxsb2NhdGVkX2F0ID4gYi0+YWxsb2NhdGVkX2F0KSByZXR1cm4gIDE7Cisg
ICBpZiAoYS0+YWxsb2NhdGVkX2F0LmVjIDwgYi0+YWxsb2NhdGVkX2F0LmVjKSByZXR1cm4gLTE7
CisgICBpZiAoYS0+YWxsb2NhdGVkX2F0LmVjID4gYi0+YWxsb2NhdGVkX2F0LmVjKSByZXR1cm4g
IDE7CiAgICBWR18odG9vbF9wYW5pYykoImJhZCBMb3NzUmVjb3JkIGNvbXBhcmlzb24iKTsKIH0K
IApAQCAtMTIzMSwxMCArMTIzNywxNSBAQAogICAgLy8gcG9zc2libGUuICBTbzogIGNvbXBhcmUg
bnVtX2Jsb2Nrcy4KICAgIGlmIChscl9hLT5udW1fYmxvY2tzIDwgbHJfYi0+bnVtX2Jsb2Nrcykg
cmV0dXJuIC0xOwogICAgaWYgKGxyX2EtPm51bV9ibG9ja3MgPiBscl9iLT5udW1fYmxvY2tzKSBy
ZXR1cm4gIDE7CisgICAvLyBUaGVuIGVwb2Nocy4KKyAgIGlmIChscl9hLT5rZXkuYWxsb2NhdGVk
X2F0LmVwb2NoLm4gPCBscl9iLT5rZXkuYWxsb2NhdGVkX2F0LmVwb2NoLm4pCisgICAgICByZXR1
cm4gLTE7CisgICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9hdC5lcG9jaC5uID4gbHJfYi0+a2V5
LmFsbG9jYXRlZF9hdC5lcG9jaC5uKQorICAgICAgcmV0dXJuIDE7CiAgICAvLyBGaW5hbGx5LCBj
b21wYXJlIEV4ZUNvbnRleHQgYWRkcmVzc2VzLi4uIG9sZGVyIG9uZXMgYXJlIGxpa2VseSB0byBo
YXZlCiAgICAvLyBsb3dlciBhZGRyZXNzZXMuCi0gICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9h
dCA8IGxyX2ItPmtleS5hbGxvY2F0ZWRfYXQpIHJldHVybiAtMTsKLSAgIGlmIChscl9hLT5rZXku
YWxsb2NhdGVkX2F0ID4gbHJfYi0+a2V5LmFsbG9jYXRlZF9hdCkgcmV0dXJuICAxOworICAgaWYg
KGxyX2EtPmtleS5hbGxvY2F0ZWRfYXQuZWMgPCBscl9iLT5rZXkuYWxsb2NhdGVkX2F0LmVjKSBy
ZXR1cm4gLTE7CisgICBpZiAobHJfYS0+a2V5LmFsbG9jYXRlZF9hdC5lYyA+IGxyX2ItPmtleS5h
bGxvY2F0ZWRfYXQuZWMpIHJldHVybiAgMTsKICAgIHJldHVybiAwOwogfQogCkBAIC0xMzgxLDcg
KzEzOTIsNyBAQAogICAgICAgeHRsLnh0X2xyW2ldLnZpZFtYVF9EZWNyZWFzZV0ubnVtX2Jsb2Nr
cyAKICAgICAgICAgID0gbHItPm9sZF9udW1fYmxvY2tzIC0gbHItPm51bV9ibG9ja3M7CiAKLSAg
IFZHXyhYVF9hZGRfdG9fZWMpKGxlYWtfeHQsIGxyLT5rZXkuYWxsb2NhdGVkX2F0LCAmeHRsKTsK
KyAgIFZHXyhYVF9hZGRfdG9fZWMpKGxlYWtfeHQsIGxyLT5rZXkuYWxsb2NhdGVkX2F0LmVjLCAm
eHRsKTsKIH0KIAogc3RhdGljIHZvaWQgTUNfKFhUX0xlYWtfc3ViKSAodm9pZCogZnJvbSwgY29u
c3Qgdm9pZCogeHRsZWFrKQpAQCAtMjEzMyw5ICsyMTQ0LDkgQEAKICAgICAgICAgICAgIFZHXyh1
bXNnKSgiQmxvY2sgMHglbHguLjB4JWx4IG92ZXJsYXBzIHdpdGggYmxvY2sgMHglbHguLjB4JWx4
XG4iLAogICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKTsK
ICAgICAgICAgICAgIFZHXyh1bXNnKSgiQmxvY2tzIGFsbG9jYXRpb24gY29udGV4dHM6XG4iKSwK
LSAgICAgICAgICAgIFZHXyhwcF9FeGVDb250ZXh0KSggTUNfKGFsbG9jYXRlZF9hdCkoY2gxKSk7
CisgICAgICAgICAgICBWR18ocHBfRXhlQ29udGV4dEFuZEVwb2NoKSggTUNfKGFsbG9jYXRlZF9h
dCkoY2gxKSk7CiAgICAgICAgICAgICBWR18odW1zZykoIlxuIiksCi0gICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dCkoICBNQ18oYWxsb2NhdGVkX2F0KShjaDIpKTsKKyAgICAgICAgICAgIFZH
XyhwcF9FeGVDb250ZXh0QW5kRXBvY2gpKCAgTUNfKGFsbG9jYXRlZF9hdCkoY2gyKSk7CiAgICAg
ICAgICAgICBWR18odW1zZykoIlRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgdXNpbmcgIik7CiAg
ICAgICAgICAgICBWR18odW1zZykoIlZBTEdSSU5EX01BTExPQ0xJS0VfQkxPQ0sgaW4gYW4gaW5h
cHByb3ByaWF0ZSB3YXkuXG4iKTsKICAgICAgICAgICAgIHRsX2Fzc2VydCAoMCk7CkluZGV4OiBt
ZW1jaGVjay9tY19tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svbWNfbWFpbi5jCShyZXZp
c2lvbiAxNjQ2NSkKKysrIG1lbWNoZWNrL21jX21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtNjcx
OSw5ICs2NzE5LDExIEBACiAgICAgICBjb25zdCBIQ2hhciogc3JjOwogICAgICAgVUludCBvdGFn
OwogICAgICAgVUludCBlY3U7Ci0gICAgICBFeGVDb250ZXh0KiBvcmlnaW5fZWM7CisgICAgICBF
eGVDb250ZXh0QW5kRXBvY2ggb3JpZ2luX2VjZTsKICAgICAgIE1DX1JlYWRSZXN1bHQgcmVzOwog
CisgICAgICBjb25zdCBEaUVwb2NoIGVwID0gVkdfKGN1cnJlbnRfRGlFcG9jaCkoKTsKKwogICAg
ICAgSW50IGt3ZGlkID0gVkdfKGtleXdvcmRfaWQpIAogICAgICAgICAgKCJhZGRyZXNzYWJsZSBk
ZWZpbmVkIiwKICAgICAgICAgICBWR18oc3RydG9rX3IpIChOVUxMLCAiICIsICZzc2F2ZXB0ciks
IGt3ZF9yZXBvcnRfYWxsKTsKQEAgLTY3MzgsNyArNjc0MCw4IEBACiAgICAgICAgICAgICBWR18o
cHJpbnRmKQogICAgICAgICAgICAgICAgKCJBZGRyZXNzICVwIGxlbiAlbHUgbm90IGFkZHJlc3Nh
YmxlOlxuYmFkIGFkZHJlc3MgJXBcbiIsCiAgICAgICAgICAgICAgICAgKHZvaWQgKilhZGRyZXNz
LCBzekIsICh2b2lkICopIGJhZF9hZGRyKTsKLSAgICAgICAgIE1DXyhwcF9kZXNjcmliZV9hZGRy
KSAoYWRkcmVzcyk7CisgICAgICAgICAvLyBGSVhNRSBKUlMgZXBvY2ggb2s/CisgICAgICAgICBN
Q18ocHBfZGVzY3JpYmVfYWRkcikgKGVwLCBhZGRyZXNzKTsKICAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSAgMTogLyogZGVmaW5lZCAqLwogICAgICAgICAgcmVzID0gaXNfbWVtX2RlZmluZWQg
KCBhZGRyZXNzLCBzekIsICZiYWRfYWRkciwgJm90YWcgKTsKQEAgLTY3NjUsMTQgKzY3NjgsMTYg
QEAKICAgICAgICAgICAgICAgICAodm9pZCAqKWFkZHJlc3MsIHN6QiwgKHZvaWQgKikgYmFkX2Fk
ZHIsIHNyYyk7CiAgICAgICAgICAgICBlY3UgPSBvdGFnICYgfjM7CiAgICAgICAgICAgICBpZiAo
VkdfKGlzX3BsYXVzaWJsZV9FQ1UpKGVjdSkpIHsKLSAgICAgICAgICAgICAgIG9yaWdpbl9lYyA9
IFZHXyhnZXRfRXhlQ29udGV4dF9mcm9tX0VDVSkoIGVjdSApOwotICAgICAgICAgICAgICAgVkdf
KHBwX0V4ZUNvbnRleHQpKCBvcmlnaW5fZWMgKTsKKyAgICAgICAgICAgICAgIG9yaWdpbl9lY2Ug
PSBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVkdfKGdldF9FeGVDb250ZXh0X2Zyb21fRUNVKSggZWN1ICkpOworICAgICAgICAg
ICAgICAgVkdfKHBwX0V4ZUNvbnRleHRBbmRFcG9jaCkoIG9yaWdpbl9lY2UgKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFZHXyhwcmludGYp
ICgiQWRkcmVzcyAlcCBsZW4gJWx1IGRlZmluZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQgKilhZGRyZXNzLCBzekIpOwotICAgICAgICAgTUNfKHBwX2Rlc2NyaWJlX2FkZHIp
IChhZGRyZXNzKTsKKyAgICAgICAgIC8vIEZJWE1FIEpSUyBlcG9jaCBvaz8KKyAgICAgICAgIE1D
XyhwcF9kZXNjcmliZV9hZGRyKSAoZXAsIGFkZHJlc3MpOwogICAgICAgICAgYnJlYWs7CiAgICAg
ICBkZWZhdWx0OiB0bF9hc3NlcnQoMCk7CiAgICAgICB9CkBAIC03MDQ5LDcgKzcwNTQsOSBAQAog
ICAgICAgICAgICAgY2dic1tpXS5zdGFydCA9IGFyZ1sxXTsKICAgICAgICAgICAgIGNnYnNbaV0u
c2l6ZSAgPSBhcmdbMl07CiAgICAgICAgICAgICBjZ2JzW2ldLmRlc2MgID0gVkdfKHN0cmR1cCko
Im1jLm1oY3IuMSIsIChIQ2hhciAqKWFyZ1szXSk7Ci0gICAgICAgICAgICBjZ2JzW2ldLndoZXJl
ID0gVkdfKHJlY29yZF9FeGVDb250ZXh0KSAoIHRpZCwgMC8qZmlyc3RfaXBfZGVsdGEqLyApOwor
ICAgICAgICAgICAgY2dic1tpXS53aGVyZSA9IFZHXyh0YWdfRUNfd2l0aF9jdXJyZW50X2Vwb2No
KSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWR18ocmVjb3JkX0V4ZUNvbnRleHQp
ICggdGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLypmaXJzdF9pcF9kZWx0YSovICkpOwogICAgICAgICAgICAgKnJldCA9IGk7CiAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICpyZXQgPSAtMTsKQEAgLTc5MTcsNyArNzkyNCw3
IEBACiAgICB9CiAKICAgIE1DXyhjaHVua19wb29sYWxsb2MpID0gVkdfKG5ld1BBKQotICAgICAg
KHNpemVvZihNQ19DaHVuaykgKyBNQ18obl93aGVyZV9wb2ludGVycykoKSAqIHNpemVvZihFeGVD
b250ZXh0KiksCisgICAgICAoc2l6ZW9mKE1DX0NodW5rKSArIE1DXyhuX3doZXJlX3BvaW50ZXJz
KSgpICogc2l6ZW9mKEV4ZUNvbnRleHRBbmRFcG9jaCksCiAgICAgICAgMTAwMCwKICAgICAgICBW
R18obWFsbG9jKSwKICAgICAgICAibWMuY01DLjEgKE1DX0NodW5rIHBvb2xzKSIsCkluZGV4OiBt
ZW1jaGVjay9tY19tYWxsb2Nfd3JhcHBlcnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay9tY19t
YWxsb2Nfd3JhcHBlcnMuYwkocmV2aXNpb24gMTY0NjUpCisrKyBtZW1jaGVjay9tY19tYWxsb2Nf
d3JhcHBlcnMuYwkod29ya2luZyBjb3B5KQpAQCAtMTk5LDggKzE5OSw4IEBACiAgICBtYy0+c3pC
ICAgICAgID0gc3pCOwogICAgbWMtPmFsbG9ja2luZCA9IGtpbmQ7CiAgICBzd2l0Y2ggKCBNQ18o
bl93aGVyZV9wb2ludGVycykoKSApIHsKLSAgICAgIGNhc2UgMjogbWMtPndoZXJlWzFdID0gMDsg
Ly8gZmFsbGJhY2sgdG8gMQotICAgICAgY2FzZSAxOiBtYy0+d2hlcmVbMF0gPSAwOyAvLyBmYWxs
YmFjayB0byAwCisgICAgICBjYXNlIDI6IG1jLT53aGVyZVsxXSA9IFZHXyhpbnZhbGlkX0V4ZUNv
bnRleHRBbmRFcG9jaCkoKTsgLy8gZmFsbCB0aHJ1CisgICAgICBjYXNlIDE6IG1jLT53aGVyZVsw
XSA9IFZHXyhpbnZhbGlkX0V4ZUNvbnRleHRBbmRFcG9jaCkoKTsgLy8gZmFsbCB0aHJ1CiAgICAg
ICBjYXNlIDA6IGJyZWFrOwogICAgICAgZGVmYXVsdDogdGxfYXNzZXJ0KDApOwogICAgfQpAQCAt
MjY4LDMwICsyNjgsMzQgQEAKICAgIHJldHVybiBpbl9ibG9ja19saXN0ICggTUNfKG1hbGxvY19s
aXN0KSwgbWMgKTsKIH0KIAotRXhlQ29udGV4dCogTUNfKGFsbG9jYXRlZF9hdCkgKE1DX0NodW5r
KiBtYykKK0V4ZUNvbnRleHRBbmRFcG9jaCBNQ18oYWxsb2NhdGVkX2F0KSAoTUNfQ2h1bmsqIG1j
KQogewogICAgc3dpdGNoIChNQ18oY2xvX2tlZXBfc3RhY2t0cmFjZXMpKSB7Ci0gICAgICBjYXNl
IEtTX25vbmU6ICAgICAgICAgICAgcmV0dXJuIFZHXyhudWxsX0V4ZUNvbnRleHQpICgpOworICAg
ICAgY2FzZSBLU19ub25lOiAgICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0QW5k
RXBvY2gpICgpOwogICAgICAgY2FzZSBLU19hbGxvYzogICAgICAgICAgIHJldHVybiBtYy0+d2hl
cmVbMF07Ci0gICAgICBjYXNlIEtTX2ZyZWU6ICAgICAgICAgICAgcmV0dXJuIFZHXyhudWxsX0V4
ZUNvbnRleHQpICgpOwotICAgICAgY2FzZSBLU19hbGxvY190aGVuX2ZyZWU6IHJldHVybiAobGl2
ZV9ibG9jayhtYykgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWMt
PndoZXJlWzBdIDogVkdfKG51bGxfRXhlQ29udGV4dCkgKCkpOworICAgICAgY2FzZSBLU19mcmVl
OiAgICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpICgpOworICAg
ICAgY2FzZSBLU19hbGxvY190aGVuX2ZyZWU6IHJldHVybiBsaXZlX2Jsb2NrKG1jKSAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYy0+d2hlcmVbMF0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWR18obnVsbF9FeGVDb250ZXh0
QW5kRXBvY2gpICgpOwogICAgICAgY2FzZSBLU19hbGxvY19hbmRfZnJlZTogIHJldHVybiBtYy0+
d2hlcmVbMF07CiAgICAgICBkZWZhdWx0OiB0bF9hc3NlcnQgKDApOwogICAgfQogfQogCi1FeGVD
b250ZXh0KiBNQ18oZnJlZWRfYXQpIChNQ19DaHVuayogbWMpCitFeGVDb250ZXh0QW5kRXBvY2gg
TUNfKGZyZWVkX2F0KSAoTUNfQ2h1bmsqIG1jKQogewogICAgc3dpdGNoIChNQ18oY2xvX2tlZXBf
c3RhY2t0cmFjZXMpKSB7Ci0gICAgICBjYXNlIEtTX25vbmU6ICAgICAgICAgICAgcmV0dXJuIFZH
XyhudWxsX0V4ZUNvbnRleHQpICgpOwotICAgICAgY2FzZSBLU19hbGxvYzogICAgICAgICAgIHJl
dHVybiBWR18obnVsbF9FeGVDb250ZXh0KSAoKTsKLSAgICAgIGNhc2UgS1NfZnJlZTogICAgICAg
ICAgICByZXR1cm4gKG1jLT53aGVyZVswXSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYy0+d2hlcmVbMF0gOiBWR18obnVsbF9FeGVDb250ZXh0KSAoKSk7Ci0gICAg
ICBjYXNlIEtTX2FsbG9jX3RoZW5fZnJlZTogcmV0dXJuIChsaXZlX2Jsb2NrKG1jKSA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWR18obnVsbF9FeGVDb250ZXh0KSAo
KSA6IG1jLT53aGVyZVswXSk7Ci0gICAgICBjYXNlIEtTX2FsbG9jX2FuZF9mcmVlOiAgcmV0dXJu
IChtYy0+d2hlcmVbMV0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWMtPndoZXJlWzFdIDogVkdfKG51bGxfRXhlQ29udGV4dCkgKCkpOworICAgICAgY2FzZSBLU19u
b25lOiAgICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpICgpOwor
ICAgICAgY2FzZSBLU19hbGxvYzogICAgICAgICAgIHJldHVybiBWR18obnVsbF9FeGVDb250ZXh0
QW5kRXBvY2gpICgpOworICAgICAgY2FzZSBLU19mcmVlOiAgICAgICAgICAgIHJldHVybiBtYy0+
d2hlcmVbMF0uZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBt
Yy0+d2hlcmVbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBW
R18obnVsbF9FeGVDb250ZXh0QW5kRXBvY2gpICgpOworICAgICAgY2FzZSBLU19hbGxvY190aGVu
X2ZyZWU6IHJldHVybiBsaXZlX2Jsb2NrKG1jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRFcG9jaCkgKCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYy0+d2hlcmVbMF07CisgICAgICBj
YXNlIEtTX2FsbG9jX2FuZF9mcmVlOiAgcmV0dXJuIG1jLT53aGVyZVsxXS5lYworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1jLT53aGVyZVsxXQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFZHXyhudWxsX0V4ZUNvbnRleHRBbmRF
cG9jaCkgKCk7CiAgICAgICBkZWZhdWx0OiB0bF9hc3NlcnQgKDApOwogICAgfQogfQpAQCAtMzA2
LDE1ICszMTAsMTYgQEAKICAgICAgIGNhc2UgS1NfYWxsb2NfYW5kX2ZyZWU6ICBicmVhazsKICAg
ICAgIGRlZmF1bHQ6IHRsX2Fzc2VydCAoMCk7CiAgICB9Ci0gICBtYy0+d2hlcmVbMF0gPSBWR18o
cmVjb3JkX0V4ZUNvbnRleHQpICggdGlkLCAwLypmaXJzdF9pcF9kZWx0YSovICk7CisgICBtYy0+
d2hlcmVbMF0gPSBWR18odGFnX0VDX3dpdGhfY3VycmVudF9lcG9jaCkoCisgICAgICAgICAgICAg
ICAgICAgICBWR18ocmVjb3JkX0V4ZUNvbnRleHQpICggdGlkLCAwLypmaXJzdF9pcF9kZWx0YSov
ICkpOwogICAgaWYgKFVOTElLRUxZKFZHXyhjbG9feHRyZWVfbWVtb3J5KSA9PSBWZ19YVE1lbW9y
eV9GdWxsKSkKLSAgICAgICBWR18oWFRNZW1vcnlfRnVsbF9hbGxvYykobWMtPnN6QiwgbWMtPndo
ZXJlWzBdKTsKKyAgICAgICBWR18oWFRNZW1vcnlfRnVsbF9hbGxvYykobWMtPnN6QiwgbWMtPndo
ZXJlWzBdLmVjKTsKIH0KIAogdm9pZCAgTUNfKHNldF9mcmVlZF9hdCkgKFRocmVhZElkIHRpZCwg
TUNfQ2h1bmsqIG1jKQogewogICAgSW50IHBvczsKLSAgIEV4ZUNvbnRleHQqIGVjX2ZyZWU7Cisg
ICBFeGVDb250ZXh0QW5kRXBvY2ggZWNfZnJlZTsKIAogICAgc3dpdGNoIChNQ18oY2xvX2tlZXBf
c3RhY2t0cmFjZXMpKSB7CiAgICAgICBjYXNlIEtTX25vbmU6ICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMzMzLDkgKzMzOCwxMCBAQAogICAgICAgTm90ZTogd2UgYXJlIGd1YXJhbnRlZWQgdG8gZmlu
ZCB0aGUgZWNfYWxsb2MgaW4gbWMtPndoZXJlWzBdLCBhcwogICAgICAgbWNfcG9zdF9jbG9faW5p
dCB2ZXJpZmllcyB0aGUgY29uc2lzdGVuY3kgb2YgLS14dHJlZS1tZW1vcnkgYW5kCiAgICAgICAt
LWtlZXAtc3RhY2t0cmFjZXMuICovCi0gICBlY19mcmVlID0gVkdfKHJlY29yZF9FeGVDb250ZXh0
KSAoIHRpZCwgMC8qZmlyc3RfaXBfZGVsdGEqLyApOworICAgZWNfZnJlZSA9IFZHXyh0YWdfRUNf
d2l0aF9jdXJyZW50X2Vwb2NoKSgKKyAgICAgICAgICAgICAgICBWR18ocmVjb3JkX0V4ZUNvbnRl
eHQpICggdGlkLCAwLypmaXJzdF9pcF9kZWx0YSovICkpOwogICAgaWYgKFVOTElLRUxZKFZHXyhj
bG9feHRyZWVfbWVtb3J5KSA9PSBWZ19YVE1lbW9yeV9GdWxsKSkKLSAgICAgICBWR18oWFRNZW1v
cnlfRnVsbF9mcmVlKShtYy0+c3pCLCBtYy0+d2hlcmVbMF0sIGVjX2ZyZWUpOworICAgICAgIFZH
XyhYVE1lbW9yeV9GdWxsX2ZyZWUpKG1jLT5zekIsIG1jLT53aGVyZVswXS5lYywgZWNfZnJlZS5l
Yyk7CiAgICBpZiAoTElLRUxZKHBvcyA+PSAwKSkKICAgICAgIG1jLT53aGVyZVtwb3NdID0gZWNf
ZnJlZTsKIH0KQEAgLTM5MSw3ICszOTcsNyBAQAogICAgaWYgKGlzX3plcm9lZCkKICAgICAgIE1D
XyhtYWtlX21lbV9kZWZpbmVkKSggcCwgc3pCICk7CiAgICBlbHNlIHsKLSAgICAgIFVJbnQgZWN1
ID0gVkdfKGdldF9FQ1VfZnJvbV9FeGVDb250ZXh0KShNQ18oYWxsb2NhdGVkX2F0KShtYykpOwor
ICAgICAgVUludCBlY3UgPSBWR18oZ2V0X0VDVV9mcm9tX0V4ZUNvbnRleHQpKE1DXyhhbGxvY2F0
ZWRfYXQpKG1jKS5lYyk7CiAgICAgICB0bF9hc3NlcnQoVkdfKGlzX3BsYXVzaWJsZV9FQ1UpKGVj
dSkpOwogICAgICAgTUNfKG1ha2VfbWVtX3VuZGVmaW5lZF93X290YWcpKCBwLCBzekIsIGVjdSB8
IE1DX09LSU5EX0hFQVAgKTsKICAgIH0KQEAgLTYwNSw3ICs2MTEsNyBAQAogICAgICAgICAgLy8g
SWYgdGhlIGJsb2NrIGhhcyBncm93biwgd2UgbWFyayB0aGUgZ3Jvd24gYXJlYSBhcyB1bmRlZmlu
ZWQuCiAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoYXQgYWZ0ZXIgVkdfKEhUX2FkZF9ub2Rl
KSB0byBlbnN1cmUgdGhlIGVjdQogICAgICAgICAgLy8gZXhlY29udGV4dCBpcyBmb3IgYSBmdWxs
eSBhbGxvY2F0ZWQgYmxvY2suCi0gICAgICAgICBlY3UgPSBWR18oZ2V0X0VDVV9mcm9tX0V4ZUNv
bnRleHQpKE1DXyhhbGxvY2F0ZWRfYXQpKG5ld19tYykpOworICAgICAgICAgZWN1ID0gVkdfKGdl
dF9FQ1VfZnJvbV9FeGVDb250ZXh0KShNQ18oYWxsb2NhdGVkX2F0KShuZXdfbWMpLmVjKTsKICAg
ICAgICAgIHRsX2Fzc2VydChWR18oaXNfcGxhdXNpYmxlX0VDVSkoZWN1KSk7CiAgICAgICAgICBN
Q18obWFrZV9tZW1fdW5kZWZpbmVkX3dfb3RhZykoIGFfbmV3K29sZF9zekIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zekItb2xkX3N6QiwKQEAgLTY3Myw3
ICs2NzksNyBAQAogICAgICAgcmV0dXJuOwogCiAgICBpZiAoVU5MSUtFTFkoVkdfKGNsb194dHJl
ZV9tZW1vcnkpID09IFZnX1hUTWVtb3J5X0Z1bGwpKQotICAgICAgIFZHXyhYVE1lbW9yeV9GdWxs
X3Jlc2l6ZV9pbl9wbGFjZSkob2xkU2l6ZUIsICBuZXdTaXplQiwgbWMtPndoZXJlWzBdKTsKKyAg
ICAgICBWR18oWFRNZW1vcnlfRnVsbF9yZXNpemVfaW5fcGxhY2UpKG9sZFNpemVCLCBuZXdTaXpl
QiwgbWMtPndoZXJlWzBdLmVjKTsKIAogICAgbWMtPnN6QiA9IG5ld1NpemVCOwogICAgaWYgKG5l
d1NpemVCIDwgb2xkU2l6ZUIpIHsKQEAgLTg4Nyw3ICs4OTMsNyBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNodW5rc1tpXS0+ZGF0YSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1
bmtzW2ldLT5kYXRhICsgY2h1bmtzW2ldLT5zekIpOwogCi0gICAgICAgICAgICBWR18ocHBfRXhl
Q29udGV4dCkoTUNfKGFsbG9jYXRlZF9hdCkoY2h1bmtzW2ldKSk7CisgICAgICAgICAgICBWR18o
cHBfRXhlQ29udGV4dEFuZEVwb2NoKShNQ18oYWxsb2NhdGVkX2F0KShjaHVua3NbaV0pKTsKICAg
ICAgICAgIH0KICAgIH0KICAgIFZHXyhmcmVlKShjaHVua3MpOwpAQCAtMTE0Nyw3ICsxMTUzLDcg
QEAKICAgIGlmIChtYykgewogICAgICAgeHRhLT5uYnl0ZXMgPSBtYy0+c3pCOwogICAgICAgeHRh
LT5uYmxvY2tzID0gMTsKLSAgICAgICplY19hbGxvYyA9IE1DXyhhbGxvY2F0ZWRfYXQpKG1jKTsK
KyAgICAgICplY19hbGxvYyA9IE1DXyhhbGxvY2F0ZWRfYXQpKG1jKS5lYzsKICAgIH0gZWxzZQog
ICAgICAgeHRhLT5uYmxvY2tzID0gMDsKIH0KSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01h
a2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFt
CShyZXZpc2lvbiAxNjQ2NSkKKysrIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L01ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsMTAgQEAKIEVYVFJBX0RJU1QgPSBcCiAJYnJrLnN0ZGVy
ci5leHAgYnJrLnZndGVzdCBcCiAJY2FwZ2V0LnZndGVzdCBjYXBnZXQuc3RkZXJyLmV4cCBjYXBn
ZXQuc3RkZXJyLmV4cDIgXAorCWRsY2xvc2VfbGVhay1uby1rZWVwLnN0ZGVyci5leHAgZGxjbG9z
ZV9sZWFrLW5vLWtlZXAuc3Rkb3V0LmV4cCBcCisJICAgIGRsY2xvc2VfbGVhay1uby1rZWVwLnZn
dGVzdCBcCisJZGxjbG9zZV9sZWFrLnN0ZGVyci5leHAgZGxjbG9zZV9sZWFrLnN0ZG91dC5leHAg
XAorCSAgICBkbGNsb3NlX2xlYWsudmd0ZXN0IFwKIAlpb2N0bC10aW9jc2lnLnZndGVzdCBpb2N0
bC10aW9jc2lnLnN0ZGVyci5leHAgXAogCWxzZnJhbWUxLnZndGVzdCBsc2ZyYW1lMS5zdGRvdXQu
ZXhwIGxzZnJhbWUxLnN0ZGVyci5leHAgXAogCWxzZnJhbWUyLnZndGVzdCBsc2ZyYW1lMi5zdGRv
dXQuZXhwIGxzZnJhbWUyLnN0ZGVyci5leHAgXApAQCAtMjUsNiArMjksNyBAQAogY2hlY2tfUFJP
R1JBTVMgPSBcCiAJYnJrIFwKIAljYXBnZXQgXAorCWRsY2xvc2VfbGVhayBkbGNsb3NlX2xlYWtf
c28uc28gXAogCWlvY3RsLXRpb2NzaWcgXAogCWdldHJlZ3NldCBcCiAJbHNmcmFtZTEgXApAQCAt
NDgsMyArNTMsMTUgQEAKIHN0YWNrX3N3aXRjaF9MREFERCAgICA9IC1scHRocmVhZAogdGltZXJm
ZF9zeXNjYWxsX0xEQUREID0gLWxydAogCisjIEJ1aWxkIHNoYXJlZCBvYmplY3QgZm9yIGRsY2xv
c2VfbGVhaworZGxjbG9zZV9sZWFrX3NvX3NvX1NPVVJDRVMgPSBkbGNsb3NlX2xlYWtfc28uYwor
ZGxjbG9zZV9sZWFrX3NvX3NvX0NGTEFHUyAgPSAkKEFNX0NGTEFHUykgLWZwaWMgLWcgLU8wCitk
bGNsb3NlX2xlYWtfc29fc29fTERGTEFHUyAgPSAtZnBpYyAkKEFNX0ZMQUdfTTMyNjRfUFJJKSAt
c2hhcmVkIC1XbCwtc29uYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCxk
bGNsb3NlX2xlYWtfc28uc28KKworZGxjbG9zZV9sZWFrX1NPVVJDRVMgICAgICAgICAgPSBkbGNs
b3NlX2xlYWsuYworZGxjbG9zZV9sZWFrX0RFUEVOREVOQ0lFUyAgICAgPSBkbGNsb3NlX2xlYWtf
c28uc28KK2RsY2xvc2VfbGVha19MREFERCAgICAgICAgICAgID0gZGxjbG9zZV9sZWFrX3NvLnNv
CitkbGNsb3NlX2xlYWtfTERGTEFHUyAgICAgICAgICA9ICQoQU1fRkxBR19NMzI2NF9QUkkpIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWxkbCBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJCh0b3BfYnVpbGRkaXIpL21lbWNoZWNrL3Rlc3Rz
L2xpbnV4CkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWstbm8ta2VlcC5z
dGRlcnIuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVh
ay1uby1rZWVwLnN0ZGVyci5leHAJKG5vbmV4aXN0ZW50KQorKysgbWVtY2hlY2svdGVzdHMvbGlu
dXgvZGxjbG9zZV9sZWFrLW5vLWtlZXAuc3RkZXJyLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMwIEBACisKK0NvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlh
bGlzZWQgdmFsdWUocykKKyAgIC4uLgorCitJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxCisgICAuLi4K
KyBBZGRyZXNzIDB4Li4uLi4uLi4gaXMgMSBieXRlcyBiZWZvcmUgYSBibG9jayBvZiBzaXplIDEg
YWxsb2MnZAorICAgYXQgMHguLi4uLi4uLjogbWFsbG9jICh2Z19yZXBsYWNlX21hbGxvYy5jOi4u
LikKKyAgIC4uLgorCitkb25lIQorCitIRUFQIFNVTU1BUlk6CisgICAgaW4gdXNlIGF0IGV4aXQ6
IDEgYnl0ZXMgaW4gMSBibG9ja3MKKyAgdG90YWwgaGVhcCB1c2FnZTogNCBhbGxvY3MsIDMgZnJl
ZXMsIDEyMyBieXRlcyBhbGxvY2F0ZWQKKworMSBieXRlcyBpbiAxIGJsb2NrcyBhcmUgZGVmaW5p
dGVseSBsb3N0IGluIGxvc3MgcmVjb3JkIC4uLiBvZiAuLi4KKyAgIGF0IDB4Li4uLi4uLi46IG1h
bGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisgICAuLi4KKworTEVBSyBTVU1NQVJZOgor
ICAgZGVmaW5pdGVseSBsb3N0OiAxIGJ5dGVzIGluIDEgYmxvY2tzCisgICBpbmRpcmVjdGx5IGxv
c3Q6IDAgYnl0ZXMgaW4gMCBibG9ja3MKKyAgICAgcG9zc2libHkgbG9zdDogMCBieXRlcyBpbiAw
IGJsb2NrcworICAgc3RpbGwgcmVhY2hhYmxlOiAwIGJ5dGVzIGluIDAgYmxvY2tzCisgICAgICAg
IHN1cHByZXNzZWQ6IDAgYnl0ZXMgaW4gMCBibG9ja3MKKworRm9yIGNvdW50cyBvZiBkZXRlY3Rl
ZCBhbmQgc3VwcHJlc3NlZCBlcnJvcnMsIHJlcnVuIHdpdGg6IC12CitVc2UgLS10cmFjay1vcmln
aW5zPXllcyB0byBzZWUgd2hlcmUgdW5pbml0aWFsaXNlZCB2YWx1ZXMgY29tZSBmcm9tCitFUlJP
UiBTVU1NQVJZOiAzIGVycm9ycyBmcm9tIDMgY29udGV4dHMgKHN1cHByZXNzZWQ6IDAgZnJvbSAw
KQpJbmRleDogbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9zZV9sZWFrLW5vLWtlZXAuc3Rkb3V0
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkluZGV4OiBtZW1jaGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWst
bm8ta2VlcC52Z3Rlc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVzdHMvbGludXgvZGxjbG9z
ZV9sZWFrLW5vLWtlZXAudmd0ZXN0CShub25leGlzdGVudCkKKysrIG1lbWNoZWNrL3Rlc3RzL2xp
bnV4L2RsY2xvc2VfbGVhay1uby1rZWVwLnZndGVzdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMgQEAKK3Byb2c6IGRsY2xvc2VfbGVhaworc3RkZXJyX2ZpbHRlcjogLi4vZmlsdGVyX3N0ZGVy
cgordmdvcHRzOiAtLWxlYWstY2hlY2s9eWVzIC0ta2VlcC1kZWJ1Z2luZm89bm8KSW5kZXg6IG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNoZWNr
L3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCShub25leGlzdGVudCkKKysrIG1lbWNoZWNrL3Rl
c3RzL2xpbnV4L2RsY2xvc2VfbGVhay5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qICBUZXN0IHJlcG9ydGluZyBvZiBtZW1vcnkgbGVha3MgaW4gb2JqZWN0cyB0aGF0IGhhdmUg
YmVlbiBkbG9wZW4nZWQuCisgKiAgIEZpbGU6ICAgZGxjbG9zZV9sZWFrLmMgKi8KKworI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNp
bmNsdWRlIDxhc3NlcnQuaD4KKworaW50ICgqam1wX29uX3VuaW5pdCkodm9pZCk7CitjaGFyKiAo
KmFsbG9jXzFfYnl0ZSkodm9pZCk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikg
eworICAgIGNoYXIqIG1lbVRvTGVhazsKKyAgICBjaGFyIHg7CisgICAgdm9pZCogaGFuZGxlID0g
ZGxvcGVuKCIuL2RsY2xvc2VfbGVha19zby5zbyIsIFJUTERfTk9XKTsKKyAgICBpZighaGFuZGxl
KSB7CisgICAgICAgIHByaW50ZigiRkFJTFVSRSB0byBkbG9wZW4gZGxjbG9zZV9sZWFrX3NvLnNv
XG4iKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisgICAgam1wX29uX3Vu
aW5pdCA9IGRsc3ltKGhhbmRsZSwiam1wX29uX3VuaW5pdCIpOworICAgIC8vZnByaW50ZihzdGRl
cnIsICJqbXBfb25fdW5pbml0OiAlcFxuIiwgam1wX29uX3VuaW5pdCk7CisgICAgYXNzZXJ0KGpt
cF9vbl91bmluaXQpOworICAgIGFsbG9jXzFfYnl0ZSA9IGRsc3ltKGhhbmRsZSwiYWxsb2NfMV9i
eXRlIik7CisgICAgLy9mcHJpbnRmKHN0ZGVyciwgImFsbG9jXzFfYnl0ZTogJXBcbiIsIGFsbG9j
XzFfYnl0ZSk7CisgICAgYXNzZXJ0KGFsbG9jXzFfYnl0ZSk7CisgICAgKHZvaWQpam1wX29uX3Vu
aW5pdCgpOworICAgIG1lbVRvTGVhayA9IGFsbG9jXzFfYnl0ZSgpOworICAgIGRsY2xvc2UoaGFu
ZGxlKTsKKyAgICB4ID0gbWVtVG9MZWFrWy0xXTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImRvbmUh
XG4iKTsKKyAgICByZXR1cm4gKEVYSVRfU1VDQ0VTUyk7Cit9CkluZGV4OiBtZW1jaGVjay90ZXN0
cy9saW51eC9kbGNsb3NlX2xlYWsuc3RkZXJyLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtZW1jaGVjay90
ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuc3RkZXJyLmV4cAkobm9uZXhpc3RlbnQpCisrKyBtZW1j
aGVjay90ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsuc3RkZXJyLmV4cAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMzIEBACisKK0NvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVu
aW5pdGlhbGlzZWQgdmFsdWUocykKKyAgIGF0IDB4Li4uLi4uLi46IGptcF9vbl91bmluaXQgKGRs
Y2xvc2VfbGVha19zby5jOjEwKQorICAgYnkgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9zZV9sZWFr
LmM6MjYpCisKK0ludmFsaWQgcmVhZCBvZiBzaXplIDEKKyAgIGF0IDB4Li4uLi4uLi46IG1haW4g
KGRsY2xvc2VfbGVhay5jOjI5KQorIEFkZHJlc3MgMHguLi4uLi4uLiBpcyAxIGJ5dGVzIGJlZm9y
ZSBhIGJsb2NrIG9mIHNpemUgMSBhbGxvYydkCisgICBhdCAweC4uLi4uLi4uOiBtYWxsb2MgKHZn
X3JlcGxhY2VfbWFsbG9jLmM6Li4uKQorICAgYnkgMHguLi4uLi4uLjogYWxsb2NfMV9ieXRlIChk
bGNsb3NlX2xlYWtfc28uYzoyMCkKKyAgIGJ5IDB4Li4uLi4uLi46IG1haW4gKGRsY2xvc2VfbGVh
ay5jOjI3KQorCitkb25lIQorCitIRUFQIFNVTU1BUlk6CisgICAgaW4gdXNlIGF0IGV4aXQ6IDEg
Ynl0ZXMgaW4gMSBibG9ja3MKKyAgdG90YWwgaGVhcCB1c2FnZTogNCBhbGxvY3MsIDMgZnJlZXMs
IDEyMyBieXRlcyBhbGxvY2F0ZWQKKworMSBieXRlcyBpbiAxIGJsb2NrcyBhcmUgZGVmaW5pdGVs
eSBsb3N0IGluIGxvc3MgcmVjb3JkIC4uLiBvZiAuLi4KKyAgIGF0IDB4Li4uLi4uLi46IG1hbGxv
YyAodmdfcmVwbGFjZV9tYWxsb2MuYzouLi4pCisgICBieSAweC4uLi4uLi4uOiBhbGxvY18xX2J5
dGUgKGRsY2xvc2VfbGVha19zby5jOjIwKQorICAgYnkgMHguLi4uLi4uLjogbWFpbiAoZGxjbG9z
ZV9sZWFrLmM6MjcpCisKK0xFQUsgU1VNTUFSWToKKyAgIGRlZmluaXRlbHkgbG9zdDogMSBieXRl
cyBpbiAxIGJsb2NrcworICAgaW5kaXJlY3RseSBsb3N0OiAwIGJ5dGVzIGluIDAgYmxvY2tzCisg
ICAgIHBvc3NpYmx5IGxvc3Q6IDAgYnl0ZXMgaW4gMCBibG9ja3MKKyAgIHN0aWxsIHJlYWNoYWJs
ZTogMCBieXRlcyBpbiAwIGJsb2NrcworICAgICAgICBzdXBwcmVzc2VkOiAwIGJ5dGVzIGluIDAg
YmxvY2tzCisKK0ZvciBjb3VudHMgb2YgZGV0ZWN0ZWQgYW5kIHN1cHByZXNzZWQgZXJyb3JzLCBy
ZXJ1biB3aXRoOiAtdgorVXNlIC0tdHJhY2stb3JpZ2lucz15ZXMgdG8gc2VlIHdoZXJlIHVuaW5p
dGlhbGlzZWQgdmFsdWVzIGNvbWUgZnJvbQorRVJST1IgU1VNTUFSWTogMyBlcnJvcnMgZnJvbSAz
IGNvbnRleHRzIChzdXBwcmVzc2VkOiAwIGZyb20gMCkKSW5kZXg6IG1lbWNoZWNrL3Rlc3RzL2xp
bnV4L2RsY2xvc2VfbGVhay5zdGRvdXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IG1lbWNoZWNrL3Rl
c3RzL2xpbnV4L2RsY2xvc2VfbGVhay52Z3Rlc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWVtY2hlY2svdGVz
dHMvbGludXgvZGxjbG9zZV9sZWFrLnZndGVzdAkobm9uZXhpc3RlbnQpCisrKyBtZW1jaGVjay90
ZXN0cy9saW51eC9kbGNsb3NlX2xlYWsudmd0ZXN0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MyBAQAorcHJvZzogZGxjbG9zZV9sZWFrCitzdGRlcnJfZmlsdGVyOiAuLi9maWx0ZXJfc3RkZXJy
Cit2Z29wdHM6IC0tbGVhay1jaGVjaz15ZXMgLS1rZWVwLWRlYnVnaW5mbz15ZXMKSW5kZXg6IG1l
bWNoZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNo
ZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCShub25leGlzdGVudCkKKysrIG1lbWNo
ZWNrL3Rlc3RzL2xpbnV4L2RsY2xvc2VfbGVha19zby5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjEgQEAKKy8qIGRsY2xvc2VfbGVha19zby5jICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KworLyoqIE1ha2VzIGEganVtcCBiYXNlZCBvbiBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGlu
IG9yZGVyIHRvIG1ha2Ugc3VyZQorICogZXJyb3JzIHJlcG9ydGVkIHdoaWxlIHRoZSBkbG9wZW4n
ZWQgb2JqZWN0IGlzIGxvYWRlZCB3b3JrLiAqLworaW50IGptcF9vbl91bmluaXQodm9pZCkgewor
ICAgIGludCB1bmluaXRbMjddOworICAgIF9fYXNtX18gX192b2xhdGlsZSgiIjo6OiJjYyIsIm1l
bW9yeSIpOworICAgIGlmKHVuaW5pdFsxM10pIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvKiogTGVhayAxIGJ5dGUgb2Yg
bWVtb3J5LiBUaGlzIGlzIHRvIHRlc3QgdGhlIHN0YWNrIGNoZWNrIHJlcG9ydGVkIGFmdGVyIHRo
ZQorICogIG9iamVjdCBoYXMgYmVlbiBkbGNsb3NlJ2QuICovCitjaGFyKiBhbGxvY18xX2J5dGUo
dm9pZCkgeworICAgIHJldHVybiAoY2hhciopbWFsbG9jKDEpOworfQpJbmRleDogbm9uZS90ZXN0
cy9jbWRsaW5lMS5zdGRvdXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5vbmUvdGVzdHMvY21kbGluZTEu
c3Rkb3V0LmV4cAkocmV2aXNpb24gMTY0NjUpCisrKyBub25lL3Rlc3RzL2NtZGxpbmUxLnN0ZG91
dC5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEwIEBACiAgICAgLS1lcnJvci1leGl0
Y29kZT08bnVtYmVyPiBleGl0IGNvZGUgdG8gcmV0dXJuIGlmIGVycm9ycyBmb3VuZCBbMD1kaXNh
YmxlXQogICAgIC0tZXJyb3ItbWFya2Vycz08YmVnaW4+LDxlbmQ+IGFkZCBsaW5lcyB3aXRoIGJl
Z2luL2VuZCBtYXJrZXJzIGJlZm9yZS9hZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWFjaCBlcnJvciBvdXRwdXQgaW4gcGxhaW4gdGV4dCBtb2RlIFtub25lXQorICAgIC0ta2Vl
cC1kZWJ1Z2luZm89bm98eWVzICAgS2VlcCBzeW1ib2xzIGV0YyBmb3IgdW5sb2FkZWQgY29kZSBb
bm9dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBzdGFjayB0cmFj
ZXMgZm9yIG1lbW9yeSBsZWFrcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5j
bHVkZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkbGNsb3NlJ2QgKG9yIHNpbWlsYXIpCiAgICAgLS1zaG93LWJlbG93
LW1haW49bm98eWVzICBjb250aW51ZSBzdGFjayB0cmFjZXMgYmVsb3cgbWFpbigpIFtub10KICAg
ICAtLWRlZmF1bHQtc3VwcHJlc3Npb25zPXllc3xubwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9hZCBkZWZhdWx0IHN1cHByZXNzaW9ucyBbeWVzXQpJbmRleDogbm9uZS90ZXN0cy9j
bWRsaW5lMi5zdGRvdXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5vbmUvdGVzdHMvY21kbGluZTIuc3Rk
b3V0LmV4cAkocmV2aXNpb24gMTY0NjUpCisrKyBub25lL3Rlc3RzL2NtZGxpbmUyLnN0ZG91dC5l
eHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEwIEBACiAgICAgLS1lcnJvci1leGl0Y29k
ZT08bnVtYmVyPiBleGl0IGNvZGUgdG8gcmV0dXJuIGlmIGVycm9ycyBmb3VuZCBbMD1kaXNhYmxl
XQogICAgIC0tZXJyb3ItbWFya2Vycz08YmVnaW4+LDxlbmQ+IGFkZCBsaW5lcyB3aXRoIGJlZ2lu
L2VuZCBtYXJrZXJzIGJlZm9yZS9hZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWFjaCBlcnJvciBvdXRwdXQgaW4gcGxhaW4gdGV4dCBtb2RlIFtub25lXQorICAgIC0ta2VlcC1k
ZWJ1Z2luZm89bm98eWVzICAgS2VlcCBzeW1ib2xzIGV0YyBmb3IgdW5sb2FkZWQgY29kZSBbbm9d
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBzdGFjayB0cmFjZXMg
Zm9yIG1lbW9yeSBsZWFrcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVk
ZSBmaWxlL2xpbmUgaW5mbyBmb3IgY29kZSB0aGF0IGhhcyBiZWVuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkbGNsb3NlJ2QgKG9yIHNpbWlsYXIpCiAgICAgLS1zaG93LWJlbG93LW1h
aW49bm98eWVzICBjb250aW51ZSBzdGFjayB0cmFjZXMgYmVsb3cgbWFpbigpIFtub10KICAgICAt
LWRlZmF1bHQtc3VwcHJlc3Npb25zPXllc3xubwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9hZCBkZWZhdWx0IHN1cHByZXNzaW9ucyBbeWVzXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>107073</attachid>
            <date>2017-08-04 13:06:09 +0000</date>
            <delta_ts>2017-08-07 19:30:25 +0000</delta_ts>
            <desc>(hack) : patch that adds measurement code to scan the EC for a .so unload</desc>
            <filename>patch_measure_EC_scan.txt</filename>
            <type>text/plain</type>
            <size>1076</size>
            <attacher name="Philippe Waroquiers">philippe.waroquiers</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvcmVncmluZC9tX2V4ZWNvbnRleHQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQv
bV9leGVjb250ZXh0LmMJKHJldmlzaW9uIDE2NDY4KQorKysgY29yZWdyaW5kL21fZXhlY29udGV4
dC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDMzIEBACiAgICAgICAiICAgZXhlY3R4
OiAlJ2xsdSBjbXAyLCAlJ2xsdSBjbXA0LCAlJ2xsdSBjbXBBbGxcbiIsCiAgICAgICBlY19jbXAy
cywgZWNfY21wNHMsIGVjX2NtcEFsbHMgCiAgICApOworCisgICBJbnQgbCA9IDEwMDA7CisgICBJ
bnQgajsKKyAgIEludCBtYXRjaDsKKyAgIEFkZHIgZnJvbSwgdG87CisgICBWR18obWVzc2FnZSko
VmdfRGVidWdNc2csIAorICAgICAgIiAgIGV4ZWN0eDogc2Nhbm5pbmcgJWQgdGltZXMgJSdsbHUg
Y29udGV4dHMvJSdsbHUgaXBzXG4iLAorICAgICAgbCwgZWNfdG90c3RvcmVkLCB0b3RhbF9uX2lw
cworICAgKTsKKyAgIGZvciAoOyBsID4gMDsgbC0tKSB7CisgICAgICBmcm9tID0gbDsKKyAgICAg
IHRvID0gbCArIDE7IC8vIHdoYXRldmVyIHZhbHVlcyB1bmxpa2VseSB0byBmaWx0ZXIgYW4gRUMK
KyAgICAgIGZvciAoaSA9IDA7IGkgPCBlY19odGFiX3NpemU7IGkrKykgeworICAgICAgICAgZm9y
IChlYyA9IGVjX2h0YWJbaV07IGVjOyBlYyA9IGVjLT5jaGFpbikgeworICAgICAgICAgICAgZm9y
IChqID0gMDsgaiA8IGVjLT5uX2lwczsgaisrKSB7CisgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoZWMtPmlwc1tqXSA+PSBmcm9tICYmIGVjLT5pcHNbal0gPD0gdG8pKSB7CisgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
IH0KKyAgICAgIH0KKyAgIH0KKyAgIFZHXyhtZXNzYWdlKShWZ19EZWJ1Z01zZywgCisgICAgICAi
ICAgZXhlY3R4OiBmaW5pc2hlZCBzY2FubmluZyAlJ2xsdSBjb250ZXh0cy8lJ2xsdSBpcHNcbiIs
CisgICAgICBlY190b3RzdG9yZWQsIHRvdGFsX25faXBzCisgICApOworCiB9CiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>107129</attachid>
            <date>2017-08-07 19:30:25 +0000</date>
            <delta_ts>2017-08-07 19:30:25 +0000</delta_ts>
            <desc>measure time to scan the execcontext, but do not let gcc remove the loop</desc>
            <filename>patch_measure_EC_scan.txt</filename>
            <type>text/plain</type>
            <size>1273</size>
            <attacher name="Philippe Waroquiers">philippe.waroquiers</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvcmVncmluZC9tX2V4ZWNvbnRleHQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlZ3JpbmQv
bV9leGVjb250ZXh0LmMJKHJldmlzaW9uIDE2NDY4KQorKysgY29yZWdyaW5kL21fZXhlY29udGV4
dC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDM2IEBACiAgICAgICAiICAgZXhlY3R4
OiAlJ2xsdSBjbXAyLCAlJ2xsdSBjbXA0LCAlJ2xsdSBjbXBBbGxcbiIsCiAgICAgICBlY19jbXAy
cywgZWNfY21wNHMsIGVjX2NtcEFsbHMgCiAgICApOworICAgVUxvbmcgc2Nhbl90b3RhbF9uX2lw
cyA9IDA7CisgICBJbnQgbCA9IDEwMDA7CisgICBJbnQgajsKKyAgIEludCBtYXRjaCA9IDA7Cisg
ICBBZGRyIGZyb20sIHRvOworICAgVkdfKG1lc3NhZ2UpKFZnX0RlYnVnTXNnLCAKKyAgICAgICIg
ICBleGVjdHg6IHNjYW5uaW5nICVkIHRpbWVzICUnbGx1IGNvbnRleHRzLyUnbGx1IGlwc1xuIiwK
KyAgICAgIGwsIGVjX3RvdHN0b3JlZCwgdG90YWxfbl9pcHMKKyAgICk7CisgICBmb3IgKDsgbCA+
IDA7IGwtLSkgeworICAgICAgZnJvbSA9IGw7CisgICAgICB0byA9IGwgKyAxOyAvLyB3aGF0ZXZl
ciB2YWx1ZXMgdW5saWtlbHkgdG8gZmlsdGVyIGFuIEVDCisgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZWNfaHRhYl9zaXplOyBpKyspIHsKKyAgICAgICAgIGZvciAoZWMgPSBlY19odGFiW2ldOyBlYzsg
ZWMgPSBlYy0+Y2hhaW4pIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBlYy0+bl9pcHM7
IGorKykgeworICAgICAgICAgICAgICAgc2Nhbl90b3RhbF9uX2lwcysrOworICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKGVjLT5pcHNbal0gPj0gZnJvbSAmJiBlYy0+aXBzW2pdIDw9IHRvKSkg
eworICAgICAgICAgICAgICAgICAgLy8gVkdfKHBwX0V4ZUNvbnRleHQpIChlYyk7CisgICAgICAg
ICAgICAgICAgICBtYXRjaCsrOworICAgICAgICAgICAgICAgICAgLy9icmVhazsKKyAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKyAgIFZH
XyhtZXNzYWdlKShWZ19EZWJ1Z01zZywgCisgICAgICAiICAgZXhlY3R4OiBmaW5pc2hlZCBzY2Fu
bmluZy4gTWF0Y2ggJWQgc2Nhbm5lZCAlJ2xsdSAgJSdsbHUgY29udGV4dHMvJSdsbHUgaXBzXG4i
LAorICAgICAgbWF0Y2gsIHNjYW5fdG90YWxfbl9pcHMsIGVjX3RvdHN0b3JlZCwgdG90YWxfbl9p
cHMKKyAgICk7CisKIH0KIAogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>