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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>16538</bug_id>
          
          <creation_ts>2007-12-20 11:14:18 -0800</creation_ts>
          <short_desc>KURL should use String instead of DeprecatedString</short_desc>
          <delta_ts>2008-02-28 16:45:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>16485</dependson>
    
    <dependson>16487</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brett Wilson (Google)">brettw</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>christian</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>64846</commentid>
    <comment_count>0</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2007-12-20 11:14:18 -0800</bug_when>
    <thetext>KURL should use String instead of DeprecatedString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68742</commentid>
    <comment_count>1</comment_count>
      <attachid>18785</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-01-29 17:42:28 -0800</bug_when>
    <thetext>Created attachment 18785
Patch

This replaces String with DeprecatedString in KURL&apos;s interface.

The internal representation is still a DeprecatedString. I tried two different timer to do the change the internals, but it is challenging because the parsing code relies on the utf-16/utf-8 duality of the string. This might be more doable with a fresh look. MacDome was also expressing interest in doing this task. This interface patch is designed to be the first step in fixing KURL; clearly the internals will need to be fixed, but these are both complicated patches which I think are better separated.

There are more conversions which will make the code slower, although I am pretty sure it will not be measurable: About half the callers already had a String, and this patch does not change the number of conversions in those cases. The other half (which had a DeprecatedString) will need an extra string conversion. This also breaks the optimization where the string inside KURL would just reference the argument without a malloc in some cases. I left this in with some FIXMEs for the arguments, so it will be easy to fix when the internals are also converted to String.

-----

I made a number of changes to KURL aside from just String conversions:

Added a lot of comments to the header file

I made the constructor explicit. I kept finding places where there was a String, and it was being converted to a KURL when being passed to a function without the code realizing that this was a potentially slow operation. This highlights some really stupid usage, often involving resolution of a relative URL with a string base. For example, in CSSParser::parseBorderImage:
  context.commitImage(new CSSImageValue(
      KURL(KURL(styleElement-&gt;baseURL()), uri).string(), styleElement));
Now the fact that baseURL should probably return a KURL is more obvious, or, if not, at least tells you how expensive the operation you are doing is. I would say everybody should use KURL and the above code should be:
  context.commitImage(new CSSImageValue(
      KURL(styleElement-&gt;baseURL(), uri), styleElement));
A lot of the diff relates to this change.

I added a new function, protocolIs(const char*). A lot of users were doing this pattern:
  if (url.protocol() == &quot;http&quot;);
This is bad for several reasons. First, it does a case-sensitive compare, which is incorrect (KURL does not canonicalize the scheme). To work around this, some callers do something like this:
  if (url.protocol().lower() == &quot;http&quot;)
This makes the second problem even worse, which is that lots of string temporaries are getting created for an operation which doesn&apos;t need it.  My new function handles different cases and does not create new objects, while making the usage more clear.

I fixed some signed/unsigned types in findHostnamesInMailToURL and other places which are suspicious and generate warnings.

-----

I made two changes outside of KURL relating to bug 16538, which this patch fixes. Some code expects the string in a KURL to be non-NULL, despite there being many ways to make a NULL KURL. This code is not tripped because URLs oftem go through string conversions, i.e. KURL-&gt;String-&gt;KURL, and this process will lose the isNull-ness of the string and it will report empty instead. I made a fix in IconDatabase.cpp, and one in DocLoader.cpp (which I previously filed bug 16485 for).

In loader.cpp I removed some dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68793</commentid>
    <comment_count>2</comment_count>
      <attachid>18785</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-30 03:06:26 -0800</bug_when>
    <thetext>Comment on attachment 18785
Patch

This looks great.

I think all additions of String( are probably bogus.  String does not have any explicit constructors (I don&apos;t think).

I think this patch clearly points out that certain things like:
HTMLAnchorElement::href()
Document::url()
Element::baseURL()

We can convert those to use KURL as soon as we teach the JS bindings how to silently convert to a UString in the getters.  Perhaps we already have a StringImp* toJS(KURL) function...


isAllASCII could move onto StringImpl if there are any other callers of DeprecatedString::isAllASCII in the sourcebase

It&apos;s very sad that:
char *strBuffer;
uses manual memory management.  However you didn&apos;t change that, so we can fix that later in a separate patch.

I understand that you are not adding ifs here, but any ifs that you touch where you&apos;re changing:
if (foo) {
return DeprecatedString();
}
you could update them to match our style guidelines and remove the { }.  That&apos;s not required for this patch, but it&apos;s good to know for the future at least.

Why not use your new protocolIs function here?
return protocol().lower() == &quot;file&quot;;

This seems incorrect:
unsigned separator = findFirstOf(s, 0, &quot;://&quot;);

// WILL include the &quot;?&quot;.
you use // Will
on the next line.

All * and &amp; should be next to the argument names.  Per our style guidelines.

I think there is a String version of completeURL:
KURL link(element-&gt;document()-&gt;completeURL(href.deprecatedString()));

I&apos;m going to leave this as ? since I expect darin may have further comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68794</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-30 03:07:15 -0800</bug_when>
    <thetext>It&apos;s unfortunate that we don&apos;t have more URL handling tests.  :sigh:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68799</commentid>
    <comment_count>4</comment_count>
      <attachid>18785</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-30 06:06:52 -0800</bug_when>
    <thetext>Comment on attachment 18785
Patch

This patch looks great! I particularly like protocolIs().

&gt; but it is challenging because the parsing code relies on the utf-16/utf-8 duality of the string

I&apos;m not sure what you mean here. DeprecatedString does not have UTF-16/UTF-8 duality. It does have a feature where you can just call ascii() on it and see the characters as an 8-bit string but:

   1) it doesn&apos;t actually do anything really efficient -- it pretty much just allocates a new 8-bit buffer
   2) it chops characters and does not do a UTF-16 to UTF-8 conversion
   3) there&apos;s very little code that actually takes advantage of this

Would you be willing to take another pass at that aspect of the patch? I ask because I think it would be better to not land this with the comments &quot;this optimization is broken for now&quot;. I really don&apos;t think we need to stage this so that there&apos;s a stage with the broken optimization.

String is inefficient if you do thinks like concatenate; any modifications to string length require reallocating the buffer. The same is not true about DeprecatedString. So I&apos;m concerned about replacing functions that build up a DeprecatedString by appending with functions that do the same thing with String. This is the most challenging issue to be considered when replacing DeprecatedString with String.

encodeHostnames and substituteBackslashes are examples of this. To do this efficiently with String you need to build up the new string as a Vector&lt;UChar&gt; and then use adopt() to turn it into a string once done modifying it. There many not be the appropriate helper functions yet for String and Vector&lt;UChar&gt;, and we&apos;ve even considered adding a new StringBuilder class.

This is one of the reasons I personally haven&apos;t converted these functions yet yet. Just converting to String and hoping that performance is acceptable may not produce acceptable results. Please consider Vector&lt;UChar&gt; for functions that build strings by appending. It&apos;s pretty straightforward, and anything inconvenient can probably be papered over with a few helper functions.

The mix of signed and unsigned integers is starting to get a little awkward. Since our existing string functions mostly use int, I&apos;d prefer that you continue that to avoid ugly casts in new code. Or we could move in the other direction and try to move away from using int for string character indices. I&apos;m not pleased with the mix.

When checking for the 0 character this new code has a mix of styles. Sometimes it&apos;s &quot;!c&quot;, other times &quot;c == 0&quot;, other times &quot;c == &apos;\0&apos;&quot;. I&apos;d prefer more consistency.

-    ASSERT(!pageURLOriginal.isNull());

Was this assertion not actually guaranteed? If so, then I understand the bug fix. If not, then I&apos;m puzzled by why you made the change here.

+static bool isAllASCII(const String&amp; str)
+{
+    for (unsigned i = 0; i &lt; str.length(); i++) {
+        if (str[i] &gt; 0x7f)
+            return false;
+    }
+    return true;
+}

This function already exists in RenderText.cpp, although it works on a StringImpl rather than a String. I would prefer that we unify and share a single one rather than adding another. The RenderText.cpp one uses an algorithm that&apos;s considerably faster for long strings where characters actually are all ASCII, and since all-ASCII is the normal case I&apos;d prefer to do it that way.

+// ASCII. The detination buffer must be large enough, and it is not NULL
+// terminated unless the source has a NULL.

Typo. Missing the &quot;s&quot; in destination.

Normally NULL refers the pointer value and not the 0 character. The 0 character is usually called NUL, with one L. Or you can say &quot;null-terminated&quot; and &quot;null character&quot; and not SHOUT about the null character. There are many other places you call this character NULL -- those should all be fixed.

+        dest[i] = static_cast&lt;char&gt;(src[i]);

There&apos;s no need for an explicit cast here. I don&apos;t know of any compiler WebKit supports that gives a warning for narrowing conversions like this one. And while it would be nice to be explicit that there&apos;s a type conversion going on, I think the general guideline to avoid casts when possible is probably slightly more important.

+// Returns the index of the first index in string |s| of any of the characters
+// in |toFind|. |toFind| should be a NULL-terminated string, all characters up
+// to the NULL will be searched. Returns UINT_MAX if not found.
+unsigned findFirstOf(const String&amp; s, unsigned startPos, const char* toFind)

I would prefer that if you need something like this that you add it to the String class rather than put in a local function inside KURL. Or if you really think it should be local, it should be marked static so it gets internal linkage.

If you went to add it to the String class you&apos;d see the mismatch, where you&apos;re using unsigned and the other functions use int. It would be best if we were consistent about this. If I was starting a new class I&apos;d probably use unsigned, but I&apos;d prefer to not have the single new function go in a different direction from all the existing ones. We could change them all in the future if you think unsigned is better for this sort of thing.

+        // Note that we don&apos;t pass anything as the second argument. When the
+        // innards of KURL are converted from DeprecatedString to String, this
+        // should be put back. It is an optimization that prevents allocating
+        // another string in the common case that nothing changes.

Are you sure it&apos;s OK to lose this optimization? I&apos;m pretty sure it&apos;s a real issue. We added this optimization for a reason, and I don&apos;t think we should take it out lightly.

+    for (i = 0; i &lt; schemeEndPos; i++) {
+        if (!proto[i] || toASCIILower(urlString[i].unicode()) != proto[i])
+            return false;
+    }
+    return proto[i] == 0;  // We should have consumed all characters in the argument.

Why use ! inside the loop and == 0 outside the loop? I&apos;d prefer that you be consistent. I think we should add an assert here that the passed-in protocol does not contain any ASCII uppercase characters or non-ASCII characters. I also think that the name &quot;proto&quot; isn&apos;t so great, since it could easily mean &quot;prototype&quot; instead. Why not use the entire word protocol?

-    return protocol() == &quot;file&quot;;
+    return protocol().lower() == &quot;file&quot;;

This should be using protocolIs().

+    // DANGER! Thos does not do things like IDN, and the resulting host name

Typo &quot;this&quot; not &quot;thos&quot;.

+    // Returns true if this URL hsa a path. Note that &quot;http://foo.com/&quot; has a

Typo &quot;has&quot; not &quot;hsa&quot;.

+    // Returns true of the current URL&apos;s protocol is the same as the NULL-

Typo &quot;if&quot; not &quot;of&quot;.

+    void setProtocol(const String &amp;);
+    void setHost(const String &amp;);

There should not be spaces before these &quot;&amp;&quot; symbols. In general it would be good if you fixed the positions of * and &amp; characters even in existing code you touch. Our WebKit coding style is Type* and Type&amp; rather than Type * and Type &amp;.

For the functions where you&apos;re adding comments before the function declaration, please also add blank lines to group the comments with the functions they are describing. I find this hard to read:

    void f();
    // Pass a full path.
    void g(const char*).
    void h();

I&apos;d prefer that there be a blank line after f and before h in a case like this.

+        m_frame-&gt;loader()-&gt;begin(KURL(&quot;http://localhost/placeholder.svg&quot;)); // create the empty document

Why is http a good idea here? Can we come up with something better? I think it would be bad if something decided to do I/O and talk to the local HTTP server! That could well be a valid URL to a different SVG.

There are enough comments here that I&apos;m going to say review- for now, but this seems like great work. Thanks for taking this on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69073</commentid>
    <comment_count>5</comment_count>
      <attachid>18850</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-02-01 11:28:45 -0800</bug_when>
    <thetext>Created attachment 18850
Patch for KURL to use string internally

I tried to do as Darin suggested, changing the entire KURL innards to use String.

This took me more than 1.5 days of solid work, and mostly works, but has some bugs. For example, GMail takes forever to load and some bogus looking URLs flash by in the URL bar in Safari. I have also seen some stack corruption that I have not been able to reproduce, and I broke dom/xhtml/level3/core/nodegetbaseuri04.xhtml in a way that I don&apos;t understand.

I do not think that fixing this is technically worthwhile. Even if we fix the above bugs, I am certain that I have introduced some subtle bugs, incorrect behavior, and crashes in this patch that I do not know about. Lacking any tests, and given the poor state of this code, doing this change would be risky and take a very long time.

You mentioned that the concern  was the broken optimization for storing Strings without copies when they are unchanged, but I do not think that this is a particularly important operation. It is less important than fixing all the String&lt;-&gt;DeprecatedString conversions in the way that KURL is called.

I think that checking in the interface fix, and then fixing bug 17098 is the best way to go, since that library contains a lot of tests that we can run to validate the results. With the interface patch in, the integration for that bug will be easy and much lower risk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69536</commentid>
    <comment_count>6</comment_count>
      <attachid>18947</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-02-05 20:01:37 -0800</bug_when>
    <thetext>Created attachment 18947
New patch addressing most comments

MacDome&apos;s review:

I think all additions of String( are probably bogus.  String does not have any
explicit constructors (I don&apos;t think).

You are correct, I removed these.

&gt; you could update them to match our style guidelines and remove the { }.  That&apos;s
&gt; not required for this patch, but it&apos;s good to know for the future at least.

I fixed a bunch of these, although I don&apos;t pretend to have fixed all cases.

&gt; All * and &amp; should be next to the argument names.  Per our style guidelines.

...as well as these when I noticed them.

I fixed your other suggestions.

-----------
Darin&apos;s review:

&gt; The mix of signed and unsigned integers is starting to get a little awkward.

It&apos;s unfortunate that String uses both unsigned and int to refer to string indices. With this design, it is impossible for any code using strings to be very consistent. I changed some things when I got unsigneds out of string to use int. I have changed some of these back and used static cast on string.length instead. The code is a little more consistent now.

&gt; encodeHostnames and substituteBackslashes are examples of this.

I replaced these functions with the versions from the patch in the middle I gave up on. These worked well, and were not the cause of the problems I reported (the problems were in KURL::parse).

The rest of the functions still use DeprecatedString when concatenating, with the exception of substituteBackslashes. This function isn&apos;t very commonly used, it only does one string concat, and to replace, I would have to write my own version of replace() which seemed like a waste of time to me. I can change this too if you really want.

&gt; -    ASSERT(!pageURLOriginal.isNull());
&gt;
&gt; Was this assertion not actually guaranteed? If so, then I understand the bug
&gt; fix. If not, then I&apos;m puzzled by why you made the change here.

That&apos;s correct. The code that calls it is closed source, but I think it gets the URL from some frame or loader related class, and blindly passes it to this function. Because old KURL would lose the NULLness of strings, it would be an empty but non-NULL URL in some cases when now it is NULL when it was constructed as a NULL KURL (not sure exactly what cases those are).

Was this assertion not actually guaranteed? If so, then I understand the bug
fix. If not, then I&apos;m puzzled by why you made the change here.

&gt; +static bool isAllASCII(const String&amp; str)
&gt; ...
&gt; This function already exists in RenderText.cpp, although it works on a
&gt; StringImpl rather than a String. I would prefer that we unify and share a
&gt; single one rather than adding another. The RenderText.cpp one uses an algorithm
&gt; that&apos;s considerably faster for long strings where characters actually are all
&gt; ASCII, and since all-ASCII is the normal case I&apos;d prefer to do it that way.

FIXME FIGURE THIS OUT

&gt; +        dest[i] = static_cast&lt;char&gt;(src[i]);
&gt;
&gt; There&apos;s no need for an explicit cast here. I don&apos;t know of any compiler WebKit
&gt; supports that gives a warning for narrowing conversions like this one. And
&gt; while it would be nice to be explicit that there&apos;s a type conversion going on,
&gt; I think the general guideline to avoid casts when possible is probably slightly
&gt; more important.

You are mistaken, Visual C++ gives:
warning C4244: &apos;=&apos; : conversion from &apos;unsigned short&apos; to &apos;char&apos;, possible loss of data.
I think it&apos;s very important when you are losing data to know that you meant to lose it when you read the code, even if the compiler issued no warning.

&gt; +unsigned findFirstOf(const String&amp; s, unsigned startPos, const char* toFind)
&gt;
&gt; I would prefer that if you need something like this that you add it to the
&gt; String class rather than put in a local function inside KURL. Or if you really
&gt; think it should be local, it should be marked static so it gets internal
&gt; linkage.

I forgot the static here, I have added it. This is used on Vectors as well, so I can&apos;t add it to the String class.

I think a general problem here with this function, isAllASCII, and substituteBackslashes is that you are requiring that String not be used for this type of manipulation (which I understand), while WebKit lacks the infrastructure to do anything beyond stdlib outside of the String/StringImpl class. I think there are four options: move all StringImpl&apos;s guts out to a file that takes lengths and offsets, make StringImpl able to use a buffer it doesn&apos;t own, have a nice place to put this type of function outside of String[Impl], or accumulate a whole lot of custom-written string manipulation functions in each file.

Fixing this is decidedly outside the scope of this patch, but should be considered soon.

&gt; +        // Note that we don&apos;t pass anything as the second argument. When the
&gt; +        // innards of KURL are converted from DeprecatedString to String, this
&gt; +        // should be put back. It is an optimization that prevents allocating
&gt; +        // another string in the common case that nothing changes.
&gt;
&gt; Are you sure it&apos;s OK to lose this optimization? I&apos;m pretty sure it&apos;s a real
&gt; issue. We added this optimization for a reason, and I don&apos;t think we should
&gt; take it out lightly.

I think this is a nice optimization. See my previous comment about why I don&apos;t think this is practical in this patch. Plus, since probably half of the callers of the string class have a DeprecatedString to start out with, you already lost the optimization for those callers. The cost of not doing this is only the cost of doing a String&lt;-&gt;DeprecatedString conversion, which is also done all over.

I think an even better way of improving this would be to reduce the number of KURL-&gt;String-&gt;KURL operations. A large number of the cases where the string doesn&apos;t change and this optimization could apply are a result of this sequence of events. Making more things use KURL instead of String would make it even faster than this optimization. I have filed a few bugs on this and am hoping to do some work in this area once this patch is in.

After talking to MacDome, I think fixing bug 17098 would be a faster and, surprisingly, a less risky way of fixing this optimization. I would consider my KURL-to-use-String-internally patch pretty risky without any tests.


&gt; +    for (i = 0; i &lt; schemeEndPos; i++) {
&gt; +        if (!proto[i] || toASCIILower(urlString[i].unicode()) != proto[i])
&gt; +            return false;
&gt; +    }
&gt; +    return proto[i] == 0;  // We should have consumed all characters in the
&gt; argument.
&gt;
&gt; Why use ! inside the loop and == 0 outside the loop? I&apos;d prefer that you be
&gt; consistent. I think we should add an assert here that the passed-in protocol
&gt; does not contain any ASCII uppercase characters or non-ASCII characters. I also
&gt; think that the name &quot;proto&quot; isn&apos;t so great, since it could easily mean
&gt; &quot;prototype&quot; instead. Why not use the entire word protocol?

I fixed the name and 0 comparisons, and added the assertion you requested.

I fixed the grammar and spelling errors, and placement of &apos;&amp;&apos; in function prototypes.

&gt; +        m_frame-&gt;loader()-&gt;begin(KURL(&quot;http://localhost/placeholder.svg&quot;)); //
&gt; create the empty document

&gt; Why is http a good idea here? Can we come up with something better? I think it
&gt; would be bad if something decided to do I/O and talk to the local HTTP server!
&gt; That could well be a valid URL to a different SVG.

Do you think KURL() would be OK here? I changed it to this.

---------
The main thing I didn&apos;t address is where isAllASCII should live. I would like some specific guidance on this given that I don&apos;t always have a String to call it on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69571</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-06 06:57:37 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I think it&apos;s very important when you are losing data to know that you meant to
&gt; lose it when you read the code, even if the compiler issued no warning.

Not to be pedantic, but I don&apos;t agree with this principle. We are often losing data when working with integers in C. For example.

    short x;
    short y;
    x = y + 1;

The above loses data. You might need a larger integer type, perhaps int, to hold the value &quot;y + 1&quot;.

I think the cast in this case is only useful because the warning exists. Unnecessary casts have costs -- they can do unnecessary or incorrect type conversions or extra work and suppress useful warnings -- so I prefer to include them only when they have a clear benefit.

&gt; I think a general problem here with this function, isAllASCII, and
&gt; substituteBackslashes is that you are requiring that String not be used for
&gt; this type of manipulation (which I understand), while WebKit lacks the
&gt; infrastructure to do anything beyond stdlib outside of the String/StringImpl
&gt; class. I think there are four options: move all StringImpl&apos;s guts out to a file
&gt; that takes lengths and offsets, make StringImpl able to use a buffer it doesn&apos;t
&gt; own, have a nice place to put this type of function outside of String[Impl], or
&gt; accumulate a whole lot of custom-written string manipulation functions in each
&gt; file.

I think that any StringImpl function that can run on characters outside a string that we need outside the string classes should be moved into a separately accessible free function. Because StringImpl is such an ugly name, I&apos;d suggest putting those functions into String.h (sadly, its real name is PlatformString.h) like this:

    bool isAllASCII(const UChar*, int length);

They can be called from StringImpl.cpp and String.cpp as needed, or in some cases we can have a shared inline version if function call overhead is too much.

There&apos;s no need to do this all at once. If you need 2 or 3 functions, you can move them. We&apos;ll get there eventually as long as we are clear on what the direction is.

&gt; &gt; +        // Note that we don&apos;t pass anything as the second argument. When the
&gt; &gt; +        // innards of KURL are converted from DeprecatedString to String, this
&gt; &gt; +        // should be put back. It is an optimization that prevents allocating
&gt; &gt; +        // another string in the common case that nothing changes.
&gt; &gt;
&gt; &gt; Are you sure it&apos;s OK to lose this optimization? I&apos;m pretty sure it&apos;s a real
&gt; &gt; issue. We added this optimization for a reason, and I don&apos;t think we should
&gt; &gt; take it out lightly.
&gt; 
&gt; I think this is a nice optimization. See my previous comment about why I don&apos;t
&gt; think this is practical in this patch. Plus, since probably half of the callers
&gt; of the string class have a DeprecatedString to start out with, you already lost
&gt; the optimization for those callers. The cost of not doing this is only the cost
&gt; of doing a String&lt;-&gt;DeprecatedString conversion, which is also done all over.

I really worry about arguments like this unless we can couple them with performance measurements. I don&apos;t want to end up in an intermediate state with a slowdown.

Too many times I have believed my change was OK and it actually resulted in a measurable slowdown. I don&apos;t know how to mitigate that possibility for this patch.

&gt; I think an even better way of improving this would be to reduce the number of
&gt; KURL-&gt;String-&gt;KURL operations.

Agreed. My concern is not about getting maximum possible future improvement, but rather about landing this patch without being in a slower state.

&gt; After talking to MacDome, I think fixing bug 17098 would be a faster and,
&gt; surprisingly, a less risky way of fixing this optimization. I would consider my
&gt; KURL-to-use-String-internally patch pretty risky without any tests.

I&apos;m pretty skeptical about adding the new library layer and getting faster. I believe you did performance measurements and things were slower, not faster.

Patches for WebKit need to make the project faster or keep them the same speed except under very unusual circumstances.

&gt; &gt; +        m_frame-&gt;loader()-&gt;begin(KURL(&quot;http://localhost/placeholder.svg&quot;)); //
&gt; &gt; create the empty document
&gt; 
&gt; &gt; Why is http a good idea here? Can we come up with something better? I think it
&gt; &gt; would be bad if something decided to do I/O and talk to the local HTTP server!
&gt; &gt; That could well be a valid URL to a different SVG.
&gt; 
&gt; Do you think KURL() would be OK here? I changed it to this.

Probably.

&gt; The main thing I didn&apos;t address is where isAllASCII should live. I would like
&gt; some specific guidance on this given that I don&apos;t always have a String to call
&gt; it on.

As I said above, PlatformString.h seems a fine place for now. It&apos;s not hard to move it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69573</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-06 07:08:54 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; +        // Note that we don&apos;t pass anything as the second argument. When the
&gt; &gt; &gt; +        // innards of KURL are converted from DeprecatedString to String, this
&gt; &gt; &gt; +        // should be put back. It is an optimization that prevents allocating
&gt; &gt; &gt; +        // another string in the common case that nothing changes.
&gt; &gt; &gt;
&gt; &gt; &gt; Are you sure it&apos;s OK to lose this optimization? I&apos;m pretty sure it&apos;s a real
&gt; &gt; &gt; issue. We added this optimization for a reason, and I don&apos;t think we should
&gt; &gt; &gt; take it out lightly.
&gt; &gt; 
&gt; &gt; I think this is a nice optimization. See my previous comment about why I don&apos;t
&gt; &gt; think this is practical in this patch. Plus, since probably half of the callers
&gt; &gt; of the string class have a DeprecatedString to start out with, you already lost
&gt; &gt; the optimization for those callers. The cost of not doing this is only the cost
&gt; &gt; of doing a String&lt;-&gt;DeprecatedString conversion, which is also done all over.
&gt; 
&gt; I really worry about arguments like this unless we can couple them with
&gt; performance measurements. I don&apos;t want to end up in an intermediate state with
&gt; a slowdown.

Let me be more clear here.

It may be that this optimization only matters at exactly one call site, or a very small number of call sites. To prove to ourselves that we&apos;re OK, we need some kind of measurement. Perhaps a count of the number of allocations in some browsing session with and without this change or something along those lines would work. We need some kind of testing, not just &quot;cross our fingers&quot; mode.

You&apos;re probably right that almost all callers don&apos;t depend on this optimization, but there may be a single heavily used callsite that currently does. If you can disprove this then I have no objection to getting rid of it. And I suggest removing it entirely rather than leaving it half in place.

Another way to test the impact would be to set up the i-Bench HTML test suite -- it&apos;s challenging but possible to do this.

(At Apple we have an internal page load speed test that we sometimes use to check changes like this to see if they slow things down, but we haven&apos;t been able to find one that doesn&apos;t rely on material that we don&apos;t hold the copyright to. The WebKit project doesn&apos;t have a shared open source speed test for web browsing yet.)

I&apos;ll review your new patch as soon as I get a chance.

PS: I also don&apos;t know which previous comment you&apos;re referring to when you say &quot;why I don&apos;t think this is practical&quot;. But maybe that will become more clear when I re-review the patch and re-read the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69574</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-06 07:10:46 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; PS: I also don&apos;t know which previous comment you&apos;re referring to when you say
&gt; &quot;why I don&apos;t think this is practical&quot;. But maybe that will become more clear
&gt; when I re-review the patch and re-read the comments.

I see now. You tried again and it didn&apos;t work at all well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69823</commentid>
    <comment_count>10</comment_count>
      <attachid>18947</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-08 14:16:23 -0800</bug_when>
    <thetext>Comment on attachment 18947
New patch addressing most comments

I think the parse() optimization hack should probably be pushed down into parse (so that it&apos;s in one place, instead of at all the call sites).  the parse() signature would become:
String parse(char*, StringImpl*), and the StringImpl* would just be ignored until parse() is converted to use Stirng/UChar internally.

I wonder if it wouldn&apos;t be helpful to convert document-&gt;url() to KURL before this patch.  I could potentially do that  for you if you need.

In general the patch looks fine.  Darin should take a peak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69837</commentid>
    <comment_count>11</comment_count>
      <attachid>18947</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-08 14:18:40 -0800</bug_when>
    <thetext>Comment on attachment 18947
New patch addressing most comments

Regarding the perf concern.  I&apos;m not sure you can do much about it.  We can&apos;t be scared of this code.  There is no externally-available Page Load Test (similar to moz&apos;s page cycler test), so one of the apple folks will just have to validate if it&apos;s faster/slower.  I expect it won&apos;t be any slower.  This patch gets rid of string conversions if anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69994</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-09 23:03:46 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 18947 [edit])
&gt; There is no externally-available Page Load Test
&gt; (similar to moz&apos;s page cycler test), so one of the apple folks will just have
&gt; to validate if it&apos;s faster/slower.

Eric, is it really true that there&apos;s no way for anyone to do any performance tests outside Apple?

What about my suggestion above of doing some web browsing and counting the number of calls to the memory allocator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70002</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-09 23:49:49 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 18947 [edit] [edit])
&gt; &gt; There is no externally-available Page Load Test
&gt; &gt; (similar to moz&apos;s page cycler test), so one of the apple folks will just have
&gt; &gt; to validate if it&apos;s faster/slower.
&gt; 
&gt; Eric, is it really true that there&apos;s no way for anyone to do any performance
&gt; tests outside Apple?

My interpretation of the status quo: Passing the Apple PLT w/o regression would be sufficient for performance testing.  Passing some other test of performance but not passing the Apple PLT would not be sufficient.

If Marvin is capable of writing such a patch, I expect he&apos;s probably capable of coming up with some way to test it too. But since we have the PLT and it (has at least historically been) &quot;the final say&quot;, we might as well just run it against the patch.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70035</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 07:27:03 -0800</bug_when>
    <thetext>I&apos;ve applied the patch, and I&apos;m doing some performance testing now.

I don&apos;t understand the status of this relative to the two bugs blocking this. Do we need fixes for those? Are they included in this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70038</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 07:34:09 -0800</bug_when>
    <thetext>My performance test indicates a 0.7% slowdown in page loading from this change.

But I need to do some debugging too. I see this message:

    2008-02-10 07:32:00.195 Safari[98730:10b] *** -[NSObject URL]: unrecognized selector sent to instance 0x1cc7480
    2008-02-10 07:32:00.196 Safari[98730:10b] *** WebKit discarded an uncaught exception in the webView:resource:didFailLoadingWithError:fromDataSource: delegate: &lt;NSInvalidArgumentException&gt; *** -[NSObject URL]: unrecognized selector sent to instance 0x1cc7480

I&apos;ll figure out next what&apos;s causing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70043</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 07:40:08 -0800</bug_when>
    <thetext>With this patch applied, and a debug version of Safari, I immediately hit an assertion failure inside Safari. NSURLConnection is returning error -1002 &quot;unsupported URL&quot; so a load is failing, and then Safari&apos;s activity window decided that there&apos;s an inconsistency of some sort. I&apos;ll do some debugging to learn more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70046</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 07:46:30 -0800</bug_when>
    <thetext>The problem is that the string for iconURL() is returning &quot;:&quot;. I&apos;ll figure out why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70047</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 07:52:06 -0800</bug_when>
    <thetext>The bug was here:

-    if (m_URL.protocol() != &quot;http&quot; &amp;&amp; m_URL.protocol() != &quot;https&quot;)
-        return &quot;&quot;;

+    if (m_URL.protocolIs(&quot;http&quot;) &amp;&amp; m_URL.protocolIs(&quot;https&quot;))
+        return KURL();

The above change reverses the sense of the protocol check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70048</commentid>
    <comment_count>19</comment_count>
      <attachid>19035</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 08:07:09 -0800</bug_when>
    <thetext>Created attachment 19035
patch rebased and with backwards protocolIs fixed

I tested this version of the patch carefully. I still see 0.7% slowdown. We need to come up with a version that&apos;s a speedup rather than a slowdown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70073</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 10:52:25 -0800</bug_when>
    <thetext>I&apos;ve been working on a version of the patch that *does* change KURL to use String internally. It going well. I measured a 1.3% speedup with this one. It&apos;s not done, but I&apos;ll attach my work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70075</commentid>
    <comment_count>21</comment_count>
      <attachid>19037</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 10:54:12 -0800</bug_when>
    <thetext>Created attachment 19037
more ambitious approach, eliminating more DeprecatedString

Assigning this to myself for now, since this is nearly ready to review I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70257</commentid>
    <comment_count>22</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-02-11 08:52:35 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=19037) [edit]
&gt; more ambitious approach, eliminating more DeprecatedString
&gt; Assigning this to myself for now, since this is nearly ready to review I think.

OK! :) I hope my work was at least moderately helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70262</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-11 09:22:04 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I hope my work was at least moderately helpful.

Sure, I started with your work and left most of it as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70432</commentid>
    <comment_count>24</comment_count>
      <attachid>19095</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-12 13:15:32 -0800</bug_when>
    <thetext>Created attachment 19095
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70438</commentid>
    <comment_count>25</comment_count>
      <attachid>19095</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-12 14:02:06 -0800</bug_when>
    <thetext>Comment on attachment 19095
patch

You&apos;re going for the &quot;largest patch of the year&quot; award it would seem.  Sad to see all these style changes mixed in. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70456</commentid>
    <comment_count>26</comment_count>
      <attachid>19095</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-12 16:25:08 -0800</bug_when>
    <thetext>Comment on attachment 19095
patch

It was pretty hard to whip the patch into shape, so I fell a little short of my usual standards for single-purpose patches.

One big challenge was making sure the patch was a speedup, not a slowdown.

It would be practical to break off various pieces (KJS namespace change, style tweaks, additions to PlatformString.h, specific cases of transition away from DeprecatedString that aren&apos;t involved with KURL). When someone reviews this I&apos;ll look for specific advice about that.

The meaty bit of the patch is still pretty big though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70461</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-12 16:55:22 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 19095 [edit])
&gt; It was pretty hard to whip the patch into shape, so I fell a little short of my
&gt; usual standards for single-purpose patches.

It&apos;s not a big deal.  I look forward to reviewing it... I just will have to find time this week to set aside the 1-2 hours required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70610</commentid>
    <comment_count>28</comment_count>
      <attachid>19095</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-13 23:53:17 -0800</bug_when>
    <thetext>Comment on attachment 19095
patch

I survived!

Seems odd to have this outside of setPort:
          case Port: {
180           int port = str.toInt();
181           if (port &lt; 0 || port &gt; 0xFFFF)
182               port = 0;
183           url.setPort(port);
184           break;
185       }

I think you should s/string/url/ on these comments:
KJS::JSValue* jsStringOrNull(const KURL&amp;); // null if the string is null

These could be one line ifs:
102             if (HTMLAnchorElement* anchor = [self anchorElement]) {
1103                 NSURL *href = anchor-&gt;href();
1104                 return href;
1105             }
} else if (m_renderer-&gt;isImage() &amp;&amp; m_renderer-&gt;element() &amp;&amp; m_renderer-&gt;element()-&gt;hasTagName(imgTag)) {
1107             NSURL *src = static_cast&lt;HTMLImageElement*&gt;(m_renderer-&gt;element())-&gt;src();
1108             return src;
1109         }

Better if you could file a bug:
2185                 // FIXME: What&apos;s the point of changing the value of a local variable
2186                 // (title) that&apos;s not looked at afterward? Obviously there&apos;s no test
2187                 // case for this!
2188                 if (!n-&gt;isHTMLElement()) {
2189                     String modifiedTitle = title.domString();
2190                     title = modifiedTitle.replace(&apos;&amp;&apos;, &quot;&amp;&amp;&quot;);
2191                 }
21872192 #endif

Sigh.  Sadly KURL Node::baseURI() const is yet-another recursive walk through your parent chain using virtual methods. :(

We might want to add mailtoProtocol, httpProtocol, ftpProtocol AtomicStrings some day.

Missing space before &apos;:&apos;
page-&gt;chrome()-&gt;addMessageToConsole(HTMLMessageSource,
1481         isWarning(errorCode) ? WarningMessageLevel: ErrorMessageLevel,
1482         message, lineNumber, document-&gt;url().string());


Those would be different depending on how it&apos;s exposed to the DOM bindings:
      if (m_frame-&gt;tree() &amp;&amp; m_frame-&gt;tree()-&gt;parent())
-          return &quot;&quot;;       
+         return KURL();

Seems like something we should test:
         KURL r = dl-&gt;doc()-&gt;url();
-          if (r.protocol().startsWith(&quot;http&quot;) &amp;&amp; r.path().isEmpty())
+         if ((r.protocolIs(&quot;http&quot;) || r.protocolIs(&quot;https&quot;)) &amp;&amp; r.path().isEmpty())
              r.setPath(&quot;/&quot;);

Why?
-          DeprecatedString domain = r.host();
-          if (dl-&gt;doc()-&gt;isHTMLDocument())
-              domain = static_cast&lt;HTMLDocument*&gt;(dl-&gt;doc())-&gt;domain().deprecatedString();

Looks good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70667</commentid>
    <comment_count>29</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-02-14 08:17:20 -0800</bug_when>
    <thetext>&gt; Seems like something we should test:
&gt;          KURL r = dl-&gt;doc()-&gt;url();
&gt; -          if (r.protocol().startsWith(&quot;http&quot;) &amp;&amp; r.path().isEmpty())
&gt; +         if ((r.protocolIs(&quot;http&quot;) || r.protocolIs(&quot;https&quot;)) &amp;&amp;
&gt; r.path().isEmpty())
&gt;               r.setPath(&quot;/&quot;);

This seems a little suspicious to me. I think KURL should canonicalize empty schemes to &quot;/&quot;  for all &quot;hierarchical&quot; URLs in parse(). If you can get here with an empty path for http, it seems like you could get here with an empty path for ftp, etc.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70671</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-14 09:35:44 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; Seems like something we should test:
&gt; &gt;          KURL r = dl-&gt;doc()-&gt;url();
&gt; &gt; -          if (r.protocol().startsWith(&quot;http&quot;) &amp;&amp; r.path().isEmpty())
&gt; &gt; +         if ((r.protocolIs(&quot;http&quot;) || r.protocolIs(&quot;https&quot;)) &amp;&amp;
&gt; &gt; r.path().isEmpty())
&gt; &gt;               r.setPath(&quot;/&quot;);
&gt; 
&gt; This seems a little suspicious to me. I think KURL should canonicalize empty
&gt; schemes to &quot;/&quot;  for all &quot;hierarchical&quot; URLs in parse(). If you can get here
&gt; with an empty path for http, it seems like you could get here with an empty
&gt; path for ftp, etc.

It&apos;s worth looking into.

Note that the fact that there is no such thing as an empty path is a property of the HTTP protocol; I&apos;m not certain that it&apos;s necessarily true of all hierarchical schemes. I believe it&apos;s possible that you could have an FTP server that could handle &quot;/&quot; different from no path at all. That&apos;s not possible with HTTP, though, since the path has to be sent in the GET or POST, and there&apos;s no syntax for an empty path. Or maybe it&apos;s true of FTP too, but not necessarily of every single hierarchical scheme.

I&apos;m not saying that what you&apos;re suggesting is wrong, but rather that it needs to be considered carefully. Moving the logic into KURL would be great! I don&apos;t like where it currently is.

I&apos;d be happy to see this simplified and resolved further, although that seems a separate issue from this patch. The attempt with this patch is to make a more efficient implementation *without* changing semantics. We can also fix bugs having to do with incorrect semantics, and we should do it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70672</commentid>
    <comment_count>31</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-14 09:41:56 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Seems odd to have this outside of setPort:
&gt;           case Port: {
&gt; 180           int port = str.toInt();
&gt; 181           if (port &lt; 0 || port &gt; 0xFFFF)
&gt; 182               port = 0;
&gt; 183           url.setPort(port);
&gt; 184           break;
&gt; 185       }

The setPort function takes an unsigned short. That&apos;s why the caller needs to check that the integer value fits into an unsigned short. This is simply &quot;type conversion&quot; code that knows that out of range values need to change to zeroes. There are probably many more-elegant ways of structuring this. If you have a suggestion, I&apos;d be happy to improve it!

&gt; I think you should s/string/url/ on these comments:
&gt; KJS::JSValue* jsStringOrNull(const KURL&amp;); // null if the string is null

Will do.

&gt; These could be one line ifs:
&gt; 102             if (HTMLAnchorElement* anchor = [self anchorElement]) {
&gt; 1103                 NSURL *href = anchor-&gt;href();
&gt; 1104                 return href;
&gt; 1105             }
&gt; } else if (m_renderer-&gt;isImage() &amp;&amp; m_renderer-&gt;element() &amp;&amp;
&gt; m_renderer-&gt;element()-&gt;hasTagName(imgTag)) {
&gt; 1107             NSURL *src =
&gt; static_cast&lt;HTMLImageElement*&gt;(m_renderer-&gt;element())-&gt;src();
&gt; 1108             return src;
&gt; 1109         }

Actually, they could not. We need the local variable to convert the type from KURL to NSURL *. The return type is &quot;id&quot;, which is not specific enough. I originally wrote these as single lines. I decided that a local variable was superior to an explicit static_cast or a function call of some sort.

&gt; Better if you could file a bug:
&gt; 2185                 // FIXME: What&apos;s the point of changing the value of a
&gt; local variable
&gt; 2186                 // (title) that&apos;s not looked at afterward? Obviously
&gt; there&apos;s no test
&gt; 2187                 // case for this!
&gt; 2188                 if (!n-&gt;isHTMLElement()) {
&gt; 2189                     String modifiedTitle = title.domString();
&gt; 2190                     title = modifiedTitle.replace(&apos;&amp;&apos;, &quot;&amp;&amp;&quot;);
&gt; 2191                 }
&gt; 21872192 #endif

Will do.

&gt; Sigh.  Sadly KURL Node::baseURI() const is yet-another recursive walk through
&gt; your parent chain using virtual methods. :(

Very sad, yes.

&gt; We might want to add mailtoProtocol, httpProtocol, ftpProtocol AtomicStrings
&gt; some day.

Could be. But the protocolIs function wants a const char*; an AtomicSting would not be helpful for those callsites. Perhaps some constants in the KURL header of type const char* would be good.

&gt; Missing space before &apos;:&apos;
&gt; page-&gt;chrome()-&gt;addMessageToConsole(HTMLMessageSource,
&gt; 1481         isWarning(errorCode) ? WarningMessageLevel: ErrorMessageLevel,
&gt; 1482         message, lineNumber, document-&gt;url().string());

Will fix.

&gt; Those would be different depending on how it&apos;s exposed to the DOM bindings:
&gt;       if (m_frame-&gt;tree() &amp;&amp; m_frame-&gt;tree()-&gt;parent())
&gt; -          return &quot;&quot;;       
&gt; +         return KURL();

Good point. The function is iconURL() and it&apos;s an internal function, not exposed to the DOM at all. I looked at the callers when I made this change.

&gt; Seems like something we should test:
&gt;          KURL r = dl-&gt;doc()-&gt;url();
&gt; -          if (r.protocol().startsWith(&quot;http&quot;) &amp;&amp; r.path().isEmpty())
&gt; +         if ((r.protocolIs(&quot;http&quot;) || r.protocolIs(&quot;https&quot;)) &amp;&amp;
&gt; r.path().isEmpty())
&gt;               r.setPath(&quot;/&quot;);

I&apos;m not sure what you mean exactly. The old code checked for both &quot;http&quot; and &quot;https&quot; using startsWith. It would also handle &quot;httpasdfads&quot;, which was silly.

I don&apos;t think this merits a test case. I do think it&apos;s not really very good code. But I preserved its old semantics pretty closely.

&gt; Why?
&gt; -          DeprecatedString domain = r.host();
&gt; -          if (dl-&gt;doc()-&gt;isHTMLDocument())
&gt; -              domain =
&gt; static_cast&lt;HTMLDocument*&gt;(dl-&gt;doc())-&gt;domain().deprecatedString();

I mentioned this in the change log. The domain string was computed, but never used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70720</commentid>
    <comment_count>32</comment_count>
      <attachid>19132</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-14 18:15:36 -0800</bug_when>
    <thetext>Created attachment 19132
patch, now with fewer broken platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70862</commentid>
    <comment_count>33</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-16 08:18:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/projects/webkit/changeset/30243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72310</commentid>
    <comment_count>34</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-02-28 16:45:53 -0800</bug_when>
    <thetext>Thanks for all the work, Darin!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18785</attachid>
            <date>2008-01-29 17:42:28 -0800</date>
            <delta_ts>2008-02-05 20:01:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>string.diff</filename>
            <type>text/plain</type>
            <size>69281</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTg1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE3IEBACisyMDA4LTAxLTI5ICBNYXJ2aW4gRGVja2VyIDxtYXJ2LmRlY2tlckBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgRml4
IEtVUkwncyBpbnRlcmZhY2UgdG8gdXNlIFN0cmluZyBpbnN0ZWFkIG9mIERlcHJlY2F0ZWRTdHJp
bmcgKHRoZQorICAgICAgICBpbnRlcm5hbHMgd2lsbCBiZSBmaXhlZCBsYXRlcikuIEFkZGVkIGEg
bmV3IGZ1bmN0aW9uIEtVUkwucHJvdG9jb2xJcworICAgICAgICB0byBlZmZpY2llbnRseSBjb21w
YXJlIHByb3RvY29scyB3aXRob3V0IGNhc2UgZXJyb3JzLiBNYWRlIHRoZQorICAgICAgICBjb25z
dHJ1Y3RvcnMgZXhwbGljaXQgdG8gaGlnaGxpZ2h0IGV4cGVuc2l2ZSBvcGVyYXRpb25zLgorCisg
ICAgICAgIEhhbGYgZml4ZXMgMTY1MzggKEtVUkwgc2hvdWxkIHVzZSBTdHJpbmcpLCBmaXhlcyBi
dWcgMTY0ODUKKyAgICAgICAgKERvY0xvYWRlcjo6Y2hlY2tGb3JSZWxvYWQgd2lsbCBjcmFzaCBp
ZiB0aGUgVVJMIGlzTnVsbCkuIEkgZml4ZWQgYQorICAgICAgICBzaW1pbGFyIHByb2JsZW0gaW4g
SWNvbkRhdGFiYXNlIHdoaWNoIGhhcyBubyBhc3NvY2lhdGVkIGJ1Zy4gVGhpcyBmaXhlcworICAg
ICAgICBidWcgMTY0ODcgKEtVUkwgZG9lc24ndCBwcmVzZXJ2ZSBpc051bGwgb24gaXRzIGFyZ3Vt
ZW50cykuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2
aWdhdG9yLmNwcDoKKyAgICAgICAgKEtKUzo6TmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfcHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S0pTUHJveHk6OmluaXRTY3JpcHQpOgorICAgICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCk6Cisg
ICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRD
b29raWUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBsZXRlVVJMKToKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpiYXNlVVJJ
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNvcHkpOgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6Omhvc3QpOgorICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQ6OmFwcGVuZEZvcm1E
YXRhKToKKyAgICAgICAgKiBsb2FkZXIvRG9jTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY0xvYWRlcjo6Y2hlY2tGb3JSZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVy
OjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cmVxdWVzdEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6Omljb25VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZEV4
cGxpY2l0T3Blbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Z290b0FuY2hvcik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YmFzZVVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y29tcGxldGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OnN0YXJ0UmVkaXJlY3Rpb25UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjppY29uRm9yUGFn
ZVVSTCk6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1lRmlyc3RDaGFyKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzU2NoZW1lQ2hhcik6CisgICAgICAgIChXZWJDb3JlOjppc1BhdGhTZWdtZW50RW5kQ2hh
cik6CisgICAgICAgIChXZWJDb3JlOjppc0FsbEFTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlBU0NJSSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRmlyc3RPZik6CisgICAgICAgIChXZWJD
b3JlOjpLVVJMOjpLVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6S1VSTDo6bGFzdFBhdGhDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
S1VSTDo6cHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpLVVJMOjpwYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnVzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cmVmKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBy
b3RvY29sSXMpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cXVlcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6S1VSTDo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRQcm90b2NvbCk6
CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OnNldFBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6c2V0SG9zdEFuZFBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6c2V0VXNlcik6CisgICAgICAgIChXZWJDb3JlOjpLVVJM
OjpzZXRQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpLVVJMOjpzZXRRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnByZXR0eVVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpLVVJMOjpkZWNvZGVfc3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmlzTG9jYWxG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY29kZUhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRIb3N0bmFtZXNJbk1haWxU
b1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVSTCk6
CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVIb3N0bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jb2RlUmVsYXRpdmVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6c3Vic3RpdHV0ZUJhY2tz
bGFzaGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgIChXZWJDb3JlOjpL
VVJMOjplbmNvZGVkSHRtbFJlZik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QpOgorICAg
ICAgICAqIHN2Zy9TVkdJbWFnZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKToKKyAgICAgICAgKiB4bWwvWFNMSW1w
b3J0UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQp
OgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRv
Y0xvYWRlckZ1bmMpOgorCiAyMDA4LTAxLTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJl
dmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzIsNyArMzcyLDcgQEAgX19aTjdXZWJDb3JlNEZvbnREMUV2CiBfX1pON1dlYkNvcmU0
Rm9udGFTRVJLUzBfCiBfX1pON1dlYkNvcmU0S1VSTDEzZGVjb2RlX3N0cmluZ0VSS05TXzE2RGVw
cmVjYXRlZFN0cmluZ0UKIF9fWk43V2ViQ29yZTRLVVJMQzFFUDVOU1VSTAotX19aTjdXZWJDb3Jl
NEtVUkxDMUVSS05TXzE2RGVwcmVjYXRlZFN0cmluZ0UKK19fWk43V2ViQ29yZTRLVVJMQzFFUktO
U182U3RyaW5nRQogX19aTjdXZWJDb3JlNEtVUkxDMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTE3c3Rv
cElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5vZGUxOHN0YXJ0SWdub3JpbmdMZWFrc0V2
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjk4NDgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTQyMzYsNyArMTQyMzYsNiBAQAogCQkwODY3RDY5MEZFODQwMjhG
QzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwotCQkJ
Y29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcg
KzE5NSw3IEBAIEpTVmFsdWUqIE5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKICAgICBy
ZXR1cm4ganNTdHJpbmcoIk5ldHNjYXBlIik7CiAgIGNhc2UgQXBwVmVyc2lvbjogewogICAgIC8v
IFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUg
Ik1vemlsbGEvIiBwcmVmaXguCi0gICAgY29uc3QgU3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUt
PmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICBjb25zdCBTdHJpbmcgdXNlckFnZW50ID0gbV9m
cmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gS1VSTChtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cmwoKSkgOiBLVVJMKCkpOwogICAgIHJldHVybiBqc1N0cmluZyh1
c2VyQWdlbnQuc3Vic3RyaW5nKHVzZXJBZ2VudC5maW5kKCcvJykgKyAxKSk7CiAgIH0KICAgY2Fz
ZSBQcm9kdWN0OgpAQCAtMjA5LDcgKzIwOSw3IEBAIEpTVmFsdWUqIE5hdmlnYXRvcjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGUKICAgY2FzZSBMYW5ndWFnZToKICAgICByZXR1cm4ganNTdHJpbmcoZGVm
YXVsdExhbmd1YWdlKCkpOwogICBjYXNlIFVzZXJBZ2VudDoKLSAgICByZXR1cm4ganNTdHJpbmco
bV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkpKTsKKyAgICByZXR1cm4ganNTdHJpbmcobV9m
cmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gS1VSTChtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cmwoKSkgOiBLVVJMKCkpKTsKICAgY2FzZSBQbGF0Zm9ybToKICAg
ICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0pOwogICBjYXNlIF9Q
bHVnaW5zOgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfcHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3Byb3h5LmNwcAkocmV2aXNpb24gMjk4NDgp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OCw3ICsxNDgsNyBAQCB2b2lkIEtKU1Byb3h5Ojppbml0U2NyaXB0KCkKICAgICBtX2dsb2Jh
bE9iamVjdCA9IG5ldyBKU0RPTVdpbmRvdyhtX2ZyYW1lLT5kb21XaW5kb3coKSk7CiAKICAgICAv
LyBGSVhNRTogV2UgY2FuIGdldCByaWQgb2YgdGhpcyAoYW5kIGVsaW1pbmF0ZSBjb21wYXRNb2Rl
IGVudGlyZWx5KS4KLSAgICBTdHJpbmcgdXNlckFnZW50ID0gbV9mcmFtZS0+bG9hZGVyKCktPnVz
ZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkg
OiBLVVJMKCkpOworICAgIFN0cmluZyB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNl
ckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBLVVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpKSA6IEtVUkwoKSk7CiAgICAgaWYgKHVzZXJBZ2VudC5maW5kKCJNaWNyb3NvZnQiKSA+PSAw
IHx8IHVzZXJBZ2VudC5maW5kKCJNU0lFIikgPj0gMCkKICAgICAgICAgbV9nbG9iYWxPYmplY3Qt
PnNldENvbXBhdE1vZGUoSUVDb21wYXQpOwogICAgIGVsc2UgewpJbmRleDogV2ViQ29yZS9jc3Mv
Q1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVs
ZS5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBDU1NJbXBvcnRSdWxlOjppbnNl
cnRlZEludG9QYXJlbnQoKQogICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50
U3R5bGVTaGVldCgpOwogICAgIGlmICghcGFyZW50U2hlZXQtPmhyZWYoKS5pc051bGwoKSkKICAg
ICAgICAgLy8gdXNlIHBhcmVudCBzdHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAg
ICAgIGFic0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0LT5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygp
LCBtX3N0ckhyZWYuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKTsKKyAgICAgICAgYWJzSHJl
ZiA9IEtVUkwoS1VSTChwYXJlbnRTaGVldC0+aHJlZigpKSwgbV9zdHJIcmVmKS5zdHJpbmcoKTsK
IAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xlIGluIG91ciBpbXBvcnQgY2hhaW4uICBJZiB3ZSBl
bmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAgLy8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRoIHRo
ZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDI5
ODQ4KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI0
LDcgKzgyNCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICNl
bmRpZgogICAgICAgICAgICAgICAgIGlmICghdXJpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENTU0N1cnNvckltYWdlVmFsdWUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJl
Y2F0ZWRTdHJpbmcoKSwgdXJpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBLVVJMKEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJM
KCkpLCB1cmkpLnN0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG90
c3BvdCwgc3R5bGVFbGVtZW50KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtODg3LDcgKzg4Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQs
IGIKICAgICAgICAgICAgIFN0cmluZyB1cmkgPSBwYXJzZVVSTChkb21TdHJpbmcodmFsdWUtPnN0
cmluZykpOwogICAgICAgICAgICAgaWYgKCF1cmkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAg
S1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHVyaS5kZXBy
ZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICBLVVJMKEtVUkwo
c3R5bGVFbGVtZW50LT5iYXNlVVJMKCkpLCB1cmkpLnN0cmluZygpLAogICAgICAgICAgICAgICAg
ICAgICBzdHlsZUVsZW1lbnQpOwogICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwog
ICAgICAgICAgICAgfQpAQCAtMTA5NSw3ICsxMDk1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoaW50IHByb3BJZCwgYgogICAgICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZh
bHVlID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5nKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNh
dGVkU3RyaW5nKCksIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwo
KSwgdmFsdWUpLnN0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgICAgIH0gCiAgICAgICAg
ICAgICAgICAgCkBAIC0xODU1LDcgKzE4NTUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb250
ZW50KGludCBwcm9wSWQsCiAgICAgICAgICAgICAvLyB1cmwKICAgICAgICAgICAgIFN0cmluZyB2
YWx1ZSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2YWwtPnN0cmluZykpOwogICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZSgKLSAgICAgICAgICAgICAgICBLVVJMKHN0eWxl
RWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdmFsdWUuZGVwcmVjYXRlZFN0
cmluZygpKS5zdHJpbmcoKSwgc3R5bGVFbGVtZW50KTsKKyAgICAgICAgICAgICAgICBLVVJMKEtV
Ukwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCkpLCB2YWx1ZSkuc3RyaW5nKCksIHN0eWxlRWxlbWVu
dCk7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsLT51bml0ID09IFZhbHVlOjpGdW5jdGlvbikgewog
ICAgICAgICAgICAgLy8gYXR0cihYKSB8IGNvdW50ZXIoWCBbLFldKSB8IGNvdW50ZXJzKFgsIFks
IFssWl0pCiAgICAgICAgICAgICBWYWx1ZUxpc3QgKmFyZ3MgPSB2YWwtPmZ1bmN0aW9uLT5hcmdz
OwpAQCAtMTkyMSw4ICsxOTIxLDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZElt
YWdlKENTUwogICAgIGlmICh2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICBTdHJpbmcgdXJpID0gcGFyc2VVUkwoZG9tU3Ry
aW5nKHZhbHVlTGlzdC0+Y3VycmVudCgpLT5zdHJpbmcpKTsKICAgICAgICAgaWYgKCF1cmkuaXNF
bXB0eSgpKQotICAgICAgICAgICAgdmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZShLVVJMKHN0eWxl
RWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdXJpLmRlcHJlY2F0ZWRTdHJp
bmcoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlRWxlbWVudCk7CisgICAgICAgICAgICB2YWx1ZSA9IG5ldyBDU1NJbWFnZVZhbHVlKEtV
UkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKSksIHVyaSkuc3RyaW5nKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzY4LDcgKzI3NjgsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYygpCiAgICAgICAgIHBhcnNlZFZhbHVl
ID0gMDsKICAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSAmJiAhZXhwZWN0Q29tbWEpIHsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlVVJM
KGRvbVN0cmluZyh2YWwtPnN0cmluZykpOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcg
Q1NTRm9udEZhY2VTcmNWYWx1ZShLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0
ZWRTdHJpbmcoKSwgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwgZmFsc2UpOwor
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShLVVJMKEtV
Ukwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCkpLCB2YWx1ZSkuc3RyaW5nKCksIGZhbHNlKTsKICAg
ICAgICAgICAgIHVyaVZhbHVlID0gcGFyc2VkVmFsdWU7CiAgICAgICAgICAgICBhbGxvd0Zvcm1h
dCA9IHRydWU7CiAgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CkBAIC0zMzEyLDggKzMz
MTIsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZShpbnQgcHJvCiAgICAgaWYg
KHVyaS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb250ZXh0
LmNvbW1pdEltYWdlKG5ldyBDU1NJbWFnZVZhbHVlKEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJM
KCkuZGVwcmVjYXRlZFN0cmluZygpLCB1cmkuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZUVsZW1lbnQpKTsKKyAgICBjb250ZXh0LmNvbW1pdEltYWdlKG5ldyBDU1NJbWFn
ZVZhbHVlKEtVUkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKSksIHVyaSkuc3RyaW5nKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUVsZW1lbnQp
KTsKICAgICB3aGlsZSAoKHZhbCA9IHZhbHVlTGlzdC0+bmV4dCgpKSkgewogICAgICAgICBpZiAo
Y29udGV4dC5hbGxvd051bWJlcigpICYmIHZhbGlkVW5pdCh2YWwsIEZJbnRlZ2VyfEZOb25OZWd8
RlBlcmNlbnQsIHRydWUpKSB7CiAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWwp
OwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzYsNyArMTYzNiw3IEBAIHZvaWQgRG9jdW1lbnQ6
OnNldFVSTChjb25zdCBEZXByZWNhdGVkU3QKIAogICAgIG1fdXJsID0gdXJsOwogICAgIGlmICht
X3N0eWxlU2VsZWN0b3IpCi0gICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0RW5jb2RlZFVSTCht
X3VybCk7CisgICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0RW5jb2RlZFVSTChLVVJMKFN0cmlu
ZyhtX3VybCkpKTsKIAogICAgIG1faXNBbGxvd2VkVG9Mb2FkTG9jYWxSZXNvdXJjZXMgPSBzaG91
bGRCZUFsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpOwogIH0KQEAgLTIyMDksNyArMjIwOSw3
IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgIGlmICh2aWV3KCkg
JiYgdmlldygpLT5tZWRpYVR5cGUoKSA9PSAicHJpbnQiKQogICAgICAgICB1c2Vyc2hlZXQgKz0g
bV9wcmludFNoZWV0OwogICAgIG1fc3R5bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9y
KHRoaXMsIHVzZXJzaGVldCwgbV9zdHlsZVNoZWV0cy5nZXQoKSwgbV9tYXBwZWRFbGVtZW50U2hl
ZXQuZ2V0KCksICFpbkNvbXBhdE1vZGUoKSwgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAg
ICBtX3N0eWxlU2VsZWN0b3ItPnNldEVuY29kZWRVUkwobV91cmwpOworICAgIG1fc3R5bGVTZWxl
Y3Rvci0+c2V0RW5jb2RlZFVSTChLVVJMKFN0cmluZyhtX3VybCkpKTsKICAgICBtX2RpZENhbGN1
bGF0ZVN0eWxlU2VsZWN0b3IgPSB0cnVlOwogfQogCkBAIC0yNjA0LDEyICsyNjA0LDEyIEBAIEVs
ZW1lbnQqIERvY3VtZW50Ojpvd25lckVsZW1lbnQoKSBjb25zdAogCiBTdHJpbmcgRG9jdW1lbnQ6
OmNvb2tpZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgdXJsKCkpOworICAg
IHJldHVybiBjb29raWVzKHRoaXMsIEtVUkwoU3RyaW5nKHVybCgpKSkpOwogfQogCiB2b2lkIERv
Y3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBzZXRDb29raWVz
KHRoaXMsIHVybCgpLCBwb2xpY3lCYXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZSk7
CisgICAgc2V0Q29va2llcyh0aGlzLCBLVVJMKFN0cmluZyh1cmwoKSkpLCBLVVJMKHBvbGljeUJh
c2VVUkwoKSksIHZhbHVlKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpyZWZlcnJlcigpIGNvbnN0
CkBAIC0yNzk3LDggKzI3OTcsOCBAQCBEZXByZWNhdGVkU3RyaW5nIERvY3VtZW50Ojpjb21wbGV0
ZVVSTChjCiAgICAgaWYgKG1fdXJsLmlzRW1wdHkoKSAmJiBtX2Jhc2VVUkwuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gdXJsOwogICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4g
S1VSTChiYXNlVVJMKCksIHVybCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIHJldHVybiBLVVJM
KGJhc2VVUkwoKSwgdXJsLCBtX2RlY29kZXItPmVuY29kaW5nKCkpLmRlcHJlY2F0ZWRTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIEtVUkwoS1VSTChTdHJpbmcoYmFzZVVSTCgpKSksIFN0cmluZyh1
cmwpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgcmV0dXJuIEtVUkwoS1VSTChTdHJpbmcoYmFz
ZVVSTCgpKSksIFN0cmluZyh1cmwpLCBtX2RlY29kZXItPmVuY29kaW5nKCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKIH0KIAogU3RyaW5nIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcm
IHVybCkKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjgsNyArNTY4LDcgQEAgU3RyaW5nIEVsZW1lbnQ6
OmJhc2VVUkkoKSBjb25zdAogCiAgICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAg
IGlmIChwYXJlbnQpCi0gICAgICAgIHJldHVybiBLVVJMKHBhcmVudC0+YmFzZVVSSSgpLmRlcHJl
Y2F0ZWRTdHJpbmcoKSwgeG1sYmFzZS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpOworICAg
ICAgICByZXR1cm4gS1VSTChLVVJMKHBhcmVudC0+YmFzZVVSSSgpKSwgeG1sYmFzZS5zdHJpbmco
KSkuc3RyaW5nKCk7CiAKICAgICByZXR1cm4geG1sYmFzZS5zdHJpbmcoKTsKIH0KSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MzYsNyArOTM2LDcgQEAgdm9pZCBFZGl0b3I6OmNvcHkoKQog
ICAgIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAg
aWYgKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IGltYWdlRWxlbWVudEZyb21JbWFn
ZURvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9h
cmQoKS0+d3JpdGVJbWFnZShpbWFnZUVsZW1lbnQsIGRvY3VtZW50LT51cmwoKSwgZG9jdW1lbnQt
PnRpdGxlKCkpOworICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0
ZUltYWdlKGltYWdlRWxlbWVudCwgS1VSTChTdHJpbmcoZG9jdW1lbnQtPnVybCgpKSksIGRvY3Vt
ZW50LT50aXRsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0
ZWJvYXJkKCktPndyaXRlU2VsZWN0aW9uKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY2FuU21hcnRD
b3B5T3JEZWxldGUoKSwgbV9mcmFtZSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxl
bWVudC5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDEyICs0MTgsMTIgQEAgdm9pZCBIVE1MQW5j
aG9yRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdAogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6
Omhhc2goKSBjb25zdAogewotICAgIHJldHVybiAnIycgKyBLVVJMKGhyZWYoKS5kZXByZWNhdGVk
U3RyaW5nKCkpLnJlZigpOworICAgIHJldHVybiAiIyIgKyBLVVJMKGhyZWYoKSkucmVmKCk7CiB9
CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6aG9zdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IEtVUkwoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuaG9zdCgpOworICAgIHJldHVybiBLVVJM
KGhyZWYoKSkuaG9zdCgpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6Omhvc3RuYW1l
KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkocmV2aXNpb24gMjk4
NDgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw3ICs3Niw3IEBAIGJvb2wgSFRNTEtleWdlbkVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRh
KEYKICAgICAvLyBPbmx5IFJTQSBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLgogICAgIGlmICgh
bV9rZXlUeXBlLmlzTnVsbCgpICYmICFlcXVhbElnbm9yaW5nQ2FzZShtX2tleVR5cGUsICJyc2Ei
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1fY2hhbGxlbmdlLCBkb2N1
bWVudCgpLT5iYXNlVVJMKCkpOworICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1fY2hhbGxlbmdlLCBLVVJMKGRvY3Vt
ZW50KCktPmJhc2VVUkwoKSkpOwogICAgIGlmICh2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCB2YWx1ZS51
dGY4KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCShyZXZpc2lvbiAyOTg0OCkKKysrIFdlYkNv
cmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDIyICs2NCwyNyBA
QCBEb2NMb2FkZXI6On5Eb2NMb2FkZXIoKQogCiB2b2lkIERvY0xvYWRlcjo6Y2hlY2tGb3JSZWxv
YWQoY29uc3QgS1VSTCYgZnVsbFVSTCkKIHsKKyAgICAvLyBUaGUgY29kZSBiZWxvdyBleHBlY3Rz
IGEgbm9uLU5VTEwgc3RyaW5nLgorICAgIFN0cmluZyB1cmxTdHJpbmcgPSBmdWxsVVJMLnN0cmlu
ZygpOworICAgIGlmICh1cmxTdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHVybFN0cmluZyA9ICIi
OworCiAgICAgaWYgKG1fYWxsb3dTdGFsZVJlc291cmNlcykKLSAgICAgICAgcmV0dXJuOyAvL0Rv
bid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZworICAgICAgICByZXR1cm47IC8vIERv
bid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZwogICAgIGlmIChtX2NhY2hlUG9saWN5
ID09IENhY2hlUG9saWN5VmVyaWZ5KSB7Ci0gICAgICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250
YWlucyhmdWxsVVJMLnN0cmluZygpKSkgewotICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlz
dGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAg
IGlmICghbV9yZWxvYWRlZFVSTHMuY29udGFpbnModXJsU3RyaW5nKSkgeworICAgICAgICAgIENh
Y2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybFN0cmlu
Zyk7CiAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLT5pc0V4cGlyZWQoKSkgewog
ICAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7Ci0gICAgICAgICAgICAgbV9y
ZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAgICAgICAgIG1fcmVsb2Fk
ZWRVUkxzLmFkZCh1cmxTdHJpbmcpOwogICAgICAgICAgIH0KICAgICAgICB9CiAgICAgfSBlbHNl
IGlmICgobV9jYWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeVJlbG9hZCkgfHwgKG1fY2FjaGVQb2xp
Y3kgPT0gQ2FjaGVQb2xpY3lSZWZyZXNoKSkgewotICAgICAgIGlmICghbV9yZWxvYWRlZFVSTHMu
Y29udGFpbnMoZnVsbFVSTC5zdHJpbmcoKSkpIHsKLSAgICAgICAgICBDYWNoZWRSZXNvdXJjZSog
ZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJMLnN0cmluZygpKTsKKyAg
ICAgICBpZiAoIW1fcmVsb2FkZWRVUkxzLmNvbnRhaW5zKHVybFN0cmluZykpIHsKKyAgICAgICAg
ICBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTCh1cmxT
dHJpbmcpOwogICAgICAgICAgIGlmIChleGlzdGluZykKICAgICAgICAgICAgICBjYWNoZSgpLT5y
ZW1vdmUoZXhpc3RpbmcpOwotICAgICAgICAgIG1fcmVsb2FkZWRVUkxzLmFkZChmdWxsVVJMLnN0
cmluZygpKTsKKyAgICAgICAgICBtX3JlbG9hZGVkVVJMcy5hZGQodXJsU3RyaW5nKTsKICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMTQxLDcgKzE0Niw3IEBAIENhY2hlZFhCTERvY3VtZW50KiBEb2NM
b2FkZXI6OnJlcXVlc3RYQkwKIAogQ2FjaGVkUmVzb3VyY2UqIERvY0xvYWRlcjo6cmVxdWVzdFJl
c291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcqIGNoYXJzZXQsIGJvb2wgc2tpcENhbkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKQogewotICAgIEtVUkwgZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVS
TCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBLVVJMIGZ1bGxVUkwobV9kb2MtPmNvbXBs
ZXRlVVJMKHVybCkpOwogICAgIAogICAgIGlmIChjYWNoZSgpLT5kaXNhYmxlZCgpKSB7CiAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZSo+OjppdGVyYXRvciBpdCA9IG1fZG9j
UmVzb3VyY2VzLmZpbmQoZnVsbFVSTC5zdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCShyZXZpc2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDE0LDggKzQxNCw4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnJlcXVl
c3RGcmFtZShIVE1MRnJhbWUKICAgICBLVVJMIHNjcmlwdFVSTDsKICAgICBLVVJMIHVybDsKICAg
ICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKSB7Ci0gICAg
ICAgIHNjcmlwdFVSTCA9IHVybFN0cmluZy5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIHVy
bCA9ICJhYm91dDpibGFuayI7CisgICAgICAgIHNjcmlwdFVSTCA9IEtVUkwodXJsU3RyaW5nKTsK
KyAgICAgICAgdXJsID0gS1VSTCgiYWJvdXQ6YmxhbmsiKTsKICAgICB9IGVsc2UKICAgICAgICAg
dXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsKIApAQCAtNDczLDcgKzQ3Myw3IEBAIEZyYW1l
KiBGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUxGcmEKICAgICAvLyBGSVhNRTogSW4gdGhp
cyBjYXNlIHRoZSBGcmFtZSB3aWxsIGhhdmUgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgCiAgICAg
Ly8gaXQncyBiZWluZyBhZGRlZCB0byB0aGUgY2hpbGQgbGlzdC4gSXQgd291bGQgYmUgYSBnb29k
IGlkZWEgdG8KICAgICAvLyBjcmVhdGUgdGhlIGNoaWxkIGZpcnN0LCB0aGVuIGludm9rZSB0aGUg
bG9hZGVyIHNlcGFyYXRlbHkuCi0gICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgdXJsID09ICJhYm91
dDpibGFuayIpIHsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCB1cmwuc3RyaW5nKCkgPT0gImFi
b3V0OmJsYW5rIikgewogICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlZCgpOwogICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7CiAgICAgfQpAQCAtNjUwLDE2
ICs2NTAsMTYgQEAgS1VSTCBGcmFtZUxvYWRlcjo6aWNvblVSTCgpCiB7CiAgICAgLy8gSWYgdGhp
cyBpc24ndCBhIHRvcCBsZXZlbCBmcmFtZSwgcmV0dXJuIG5vdGhpbmcKICAgICBpZiAobV9mcmFt
ZS0+dHJlZSgpICYmIG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybiAi
IjsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKICAgICAvLyBJZiB3ZSBoYXZl
IGFuIGljb25VUkwgZnJvbSBhIExpbmsgZWxlbWVudCwgcmV0dXJuIHRoYXQKICAgICBpZiAobV9m
cmFtZS0+ZG9jdW1lbnQoKSAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNvblVSTCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmljb25VUkwoKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gS1VSTChtX2ZyYW1lLT5k
b2N1bWVudCgpLT5pY29uVVJMKCkpOworCiAgICAgLy8gRG9uJ3QgcmV0dXJuIGEgZmF2aWNvbiBp
Y29uVVJMIHVubGVzcyB3ZSdyZSBodHRwIG9yIGh0dHBzCi0gICAgaWYgKG1fVVJMLnByb3RvY29s
KCkgIT0gImh0dHAiICYmIG1fVVJMLnByb3RvY29sKCkgIT0gImh0dHBzIikKLSAgICAgICAgcmV0
dXJuICIiOwotICAgICAgICAKKyAgICBpZiAobV9VUkwucHJvdG9jb2xJcygiaHR0cCIpICYmIG1f
VVJMLnByb3RvY29sSXMoImh0dHBzIikpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKICAgICBL
VVJMIHVybDsKICAgICB1cmwuc2V0UHJvdG9jb2wobV9VUkwucHJvdG9jb2woKSk7CiAgICAgdXJs
LnNldEhvc3QobV9VUkwuaG9zdCgpKTsKQEAgLTcxMSw3ICs3MTEsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpkaWRFeHBsaWNpdE9wZW4oY29uc3QgCiAgICAgLy8gaW1wbGljaXRseSBwcmVjZWRlcyBk
b2N1bWVudC53cml0ZS4KICAgICBjYW5jZWxSZWRpcmVjdGlvbigpOyAKICAgICBpZiAobV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkgIT0gImFib3V0OmJsYW5rIikKLSAgICAgICAgbV9VUkwgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICAgICAgbV9VUkwgPSBLVVJMKG1fZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpKTsKICAKICAgICBib29sIGlzSXRlbU5ldyA9IGZhbHNlOwogCkBA
IC0xMjE5LDEzICsxMjE5LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmdvdG9BbmNob3IoKQogICAg
ICAgICAhKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0Q1NT
VGFyZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9
IG1fVVJMLmVuY29kZWRIdG1sUmVmKCk7CisgICAgU3RyaW5nIHJlZiA9IG1fVVJMLmVuY29kZWRI
dG1sUmVmKCk7CiAgICAgaWYgKCFnb3RvQW5jaG9yKHJlZikpIHsKICAgICAgICAgLy8gQ2FuJ3Qg
dXNlIGh0bWxSZWYoKSBoZXJlIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IHdoaWNoIGVuY29kaW5n
IHRvIHVzZSB0byBkZWNvZGUuCiAgICAgICAgIC8vIERlY29kaW5nIGhlcmUgaGFzIHRvIG1hdGNo
IGVuY29kaW5nIGluIGNvbXBsZXRlVVJMLCB3aGljaCBtZWFucyBpdCBoYXMgdG8gdXNlIHRoZQog
ICAgICAgICAvLyBwYWdlJ3MgZW5jb2RpbmcgcmF0aGVyIHRoYW4gVVRGLTguCiAgICAgICAgIGlm
IChtX2RlY29kZXIpCi0gICAgICAgICAgICBnb3RvQW5jaG9yKEtVUkw6OmRlY29kZV9zdHJpbmco
cmVmLCBtX2RlY29kZXItPmVuY29kaW5nKCkpKTsKKyAgICAgICAgICAgIGdvdG9BbmNob3IoS1VS
TDo6ZGVjb2RlX3N0cmluZyhyZWYuZGVwcmVjYXRlZFN0cmluZygpLCBtX2RlY29kZXItPmVuY29k
aW5nKCkpKTsKICAgICB9CiB9CiAKQEAgLTEzNDEsNyArMTM0MSw3IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNoZWNrQ2FsbEltcGxpY2l0Q2xvc2UKIEtVUkwgRnJhbWVMb2FkZXI6OmJhc2VVUkwoKSBj
b25zdAogewogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpOworICAgIHJldHVybiBLVVJMKG1fZnJhbWUtPmRv
Y3VtZW50KCktPmJhc2VVUkwoKSk7CiB9CiAKIFN0cmluZyBGcmFtZUxvYWRlcjo6YmFzZVRhcmdl
dCgpIGNvbnN0CkBAIC0xMzUzLDcgKzEzNTMsNyBAQCBTdHJpbmcgRnJhbWVMb2FkZXI6OmJhc2VU
YXJnZXQoKSBjb25zdAogS1VSTCBGcmFtZUxvYWRlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5n
JiB1cmwpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIHJldHVybiBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
KyAgICByZXR1cm4gS1VSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpKTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVIVFRQUmVkaXJlY3Rpb24oZG91YmxlIGRl
bGF5LCBjb25zdCBTdHJpbmcmIHVybCkKQEAgLTE4NzQsNyArMTg3NCw3IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OnN0YXJ0UmVkaXJlY3Rpb25UaW1lcigKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRp
cmVjdGlvbjo6cmVkaXJlY3Rpb246CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246
OmxvY2F0aW9uQ2hhbmdlOgogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2Nh
dGlvbkNoYW5nZUR1cmluZ0xvYWQ6Ci0gICAgICAgICAgICBjbGllbnRSZWRpcmVjdGVkKG1fc2No
ZWR1bGVkUmVkaXJlY3Rpb24tPnVybC5kZXByZWNhdGVkU3RyaW5nKCksCisgICAgICAgICAgICBj
bGllbnRSZWRpcmVjdGVkKEtVUkwobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dXJsKSwKICAgICAg
ICAgICAgICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5kZWxheSwKICAgICAgICAgICAgICAg
ICBjdXJyZW50VGltZSgpICsgbV9yZWRpcmVjdGlvblRpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSwK
ICAgICAgICAgICAgICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5sb2NrSGlzdG9yeSwKQEAg
LTI1ODcsNyArMjU4Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9h
ZCgKICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgICAgICB1cmwgPSBwZGwtPnJl
c3BvbnNlVVJMKCk7CiAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgdXJs
ID0gImFib3V0OmJsYW5rIjsKKyAgICAgICAgICAgIHVybCA9IEtVUkwoImFib3V0OmJsYW5rIik7
CiAKICAgICAgICAgZGlkT3BlblVSTCh1cmwpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2
aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxNCArNzMsMTEgQEAgdm9pZCBMb2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKCkK
ICAgICAgICAgaWYgKCFyZXEtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2VwdChyZXEtPmNhY2hlZFJlc291cmNlKCkt
PmFjY2VwdCgpKTsKIAotICAgICAgICBLVVJMIHIgPSBkbC0+ZG9jKCktPnVybCgpOworICAgICAg
ICBLVVJMIHIoZGwtPmRvYygpLT51cmwoKSk7CiAgICAgICAgIGlmIChyLnByb3RvY29sKCkuc3Rh
cnRzV2l0aCgiaHR0cCIpICYmIHIucGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHIuc2V0
UGF0aCgiLyIpOwogICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihyLnN0cmluZygpKTsK
LSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBkb21haW4gPSByLmhvc3QoKTsKLSAgICAgICAgaWYg
KGRsLT5kb2MoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvbWFpbiA9IHN0YXRp
Y19jYXN0PEhUTUxEb2N1bWVudCo+KGRsLT5kb2MoKSktPmRvbWFpbigpLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKLSAgICAgICAgCisKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2Fk
ZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRsLT5kb2MoKS0+ZnJhbWUoKSwKICAgICAg
ICAgICAgIHRoaXMsIHJlcXVlc3QsIHJlcS0+c2hvdWxkU2tpcENhbkxvYWRDaGVjaygpLCByZXEt
PnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9pY29uL0lj
b25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsMTMgKzIxOCwxMSBAQCB2b2lk
IEljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQogSW1hZ2UqIEljb25EYXRhYmFzZTo6aWNv
bkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMT3JpZ2luYWwsIGNvbnN0IEludFNpemUm
IHNpemUsIGJvb2wgY2FjaGUpCiB7ICAgCiAgICAgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpOwot
ICAgIAotICAgIEFTU0VSVCghcGFnZVVSTE9yaWdpbmFsLmlzTnVsbCgpKTsKIAogICAgIC8vIHBh
Z2VVUkxPcmlnaW5hbCBjYW4gbm90IGJlIHN0b3JlZCB3aXRob3V0IGJlaW5nIGRlZXAgY29waWVk
IGZpcnN0LiAgCiAgICAgLy8gV2Ugc2hvdWxkIGdvIG91ciBvZiBvdXIgd2F5IHRvIG9ubHkgY29w
eSBpdCBpZiB3ZSBoYXZlIHRvIHN0b3JlIGl0CiAgICAgCi0gICAgaWYgKCFpc09wZW4oKSkKKyAg
ICBpZiAoIWlzT3BlbigpIHx8IHBhZ2VVUkxPcmlnaW5hbC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBkZWZhdWx0SWNvbihzaXplKTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3VybEFu
ZEljb25Mb2NrKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMTUgKzIwNCwxOCBAQCBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXJDbGFzCiB9OwogCiBzdGF0aWMgaW50
IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIqIGRzdCwgY29uc3QgY2hhciogc3JjLCBpbnQgc3Jj
U3RhcnQsIGludCBzcmNFbmQpOwotc3RhdGljIGNoYXIqIGVuY29kZVJlbGF0aXZlU3RyaW5nKGNv
bnN0IEtVUkwgJmJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHJlbCwgY29uc3QgVGV4dEVu
Y29kaW5nJik7Ci1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdWJzdGl0dXRlQmFja3NsYXNoZXMo
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyaW5nKTsKK3N0YXRpYyBjaGFyKiBlbmNvZGVSZWxh
dGl2ZVN0cmluZyhjb25zdCBLVVJMICZiYXNlLCBjb25zdCBTdHJpbmcmIHJlbCwgY29uc3QgVGV4
dEVuY29kaW5nJik7CitzdGF0aWMgU3RyaW5nIHN1YnN0aXR1dGVCYWNrc2xhc2hlcyhjb25zdCBT
dHJpbmcgJnN0cmluZyk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUZpcnN0Q2hhcih1
bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hlbWVG
aXJzdENoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIodW5zaWduZWQgY2hh
ciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lQ2hhcjsgfQorc3Rh
dGljIGlubGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKGNoYXIgYykgeyByZXR1cm4gY2hhcmFj
dGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KGMpXSAmIFNjaGVtZUZpcnN0Q2hhcjsgfQor
c3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKFVDaGFyIGMpIHsgcmV0dXJuIGMg
PD0gMHhmZiA/IChjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lRmlyc3RDaGFyKSA6IGZh
bHNlOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY2hlbWVDaGFyKGNoYXIgYykgeyByZXR1cm4g
Y2hhcmFjdGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KGMpXSAmIFNjaGVtZUNoYXI7IH0K
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIoVUNoYXIgYykgeyByZXR1cm4gYyA8PSAw
eGZmID8gKGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hlbWVDaGFyKSA6IGZhbHNlOyB9CiBz
dGF0aWMgaW5saW5lIGJvb2wgaXNVc2VySW5mb0NoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVy
biBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgVXNlckluZm9DaGFyOyB9CiBzdGF0aWMgaW5saW5l
IGJvb2wgaXNIb3N0bmFtZUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJD
bGFzc1RhYmxlW2NdICYgSG9zdG5hbWVDaGFyOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJUHY2
Q2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBJ
UHY2Q2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRFbmRDaGFyKHVuc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFBhdGhTZWdtZW50
RW5kQ2hhcjsgfQorc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRFbmRDaGFyKGNoYXIg
YykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KGMpXSAmIFBh
dGhTZWdtZW50RW5kQ2hhcjsgfQorc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRFbmRD
aGFyKFVDaGFyIGMpIHsgcmV0dXJuIGMgPD0gMHhmZiA/IChjaGFyYWN0ZXJDbGFzc1RhYmxlW2Nd
ICYgUGF0aFNlZ21lbnRFbmRDaGFyKSA6IGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNC
YWRDaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAm
IEJhZENoYXI7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hleERpZ2l0KHVuc2lnbmVkIGNoYXIg
YykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIEhleERpZ2l0Q2hhcjsgfQogCkBA
IC0yMjQsNiArMjI3LDM5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGhleERpZ2l0VmFsdWUodW5zaWdu
ZWQKICAgICByZXR1cm4gKGMgLSAnQScgKyAxMCkgJiAweEY7IC8vIGhhbmRsZSBib3RoIHVwcGVy
IGFuZCBsb3dlciBjYXNlIHdpdGhvdXQgYSBicmFuY2gKIH0KIAorc3RhdGljIGJvb2wgaXNBbGxB
U0NJSShjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RyLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgaWYgKHN0cltpXSA+IDB4N2YpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBDb3Bp
ZXMgdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24sIGFzc3VtaW5nIGFsbCB0aGUgc291cmNl
IGNoYXJhY3RlcnMgYXJlCisvLyBBU0NJSS4gVGhlIGRldGluYXRpb24gYnVmZmVyIG11c3QgYmUg
bGFyZ2UgZW5vdWdoLCBhbmQgaXQgaXMgbm90IE5VTEwKKy8vIHRlcm1pbmF0ZWQgdW5sZXNzIHRo
ZSBzb3VyY2UgaGFzIGEgTlVMTC4KK3N0YXRpYyB2b2lkIGNvcHlBU0NJSShjb25zdCBVQ2hhciog
c3JjLCB1bnNpZ25lZCBsZW5ndGgsIGNoYXIqIGRlc3QpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBkZXN0W2ldID0gc3RhdGljX2Nhc3Q8Y2hh
cj4oc3JjW2ldKTsKK30KKworLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGluZGV4
IGluIHN0cmluZyB8c3wgb2YgYW55IG9mIHRoZSBjaGFyYWN0ZXJzCisvLyBpbiB8dG9GaW5kfC4g
fHRvRmluZHwgc2hvdWxkIGJlIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZywgYWxsIGNoYXJhY3Rl
cnMgdXAKKy8vIHRvIHRoZSBOVUxMIHdpbGwgYmUgc2VhcmNoZWQuIFJldHVybnMgVUlOVF9NQVgg
aWYgbm90IGZvdW5kLgordW5zaWduZWQgZmluZEZpcnN0T2YoY29uc3QgU3RyaW5nJiBzLCB1bnNp
Z25lZCBzdGFydFBvcywgY29uc3QgY2hhciogdG9GaW5kKQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXJ0UG9zOyBpIDwgcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGNoYXIq
IGN1ciA9IHRvRmluZDsKKyAgICAgICAgd2hpbGUgKCpjdXIpIHsKKyAgICAgICAgICAgIGlmIChz
W2ldID09ICooY3VyKyspKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBVSU5UX01BWDsKK30KKwogLy8gS1VSTAogCiBLVVJMOjpLVVJMKCkg
OiBtX2lzVmFsaWQoZmFsc2UpCkBAIC0yNDIsMTIgKzI3OCwxMyBAQCBLVVJMOjpLVVJMKGNvbnN0
IGNoYXIgKnVybCkKICAgICAgICAgYnVmZmVyWzNdID0gJ2UnOwogICAgICAgICBidWZmZXJbNF0g
PSAnOic7CiAgICAgICAgIG1lbWNweSgmYnVmZmVyWzVdLCB1cmwsIHVybExlbmd0aCk7CisgICAg
ICAgIGJ1ZmZlclt1cmxMZW5ndGggKyA0XSA9IDA7ICAvLyBOZWVkIE5VTEwgdGVybWluYXRvci4K
ICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBh
cnNlKHVybCwgMCk7CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXJs
KQorS1VSTDo6S1VSTChjb25zdCBTdHJpbmcgJnVybCkKIHsKICAgICBpZiAoIXVybC5pc0VtcHR5
KCkgJiYgdXJsWzBdID09ICcvJykgewogICAgICAgICAvLyA1IGZvciAiZmlsZToiLCAxIGZvciB0
ZXJtaW5hdG9yCkBAIC0yNTcsMjMgKzI5NCwyOSBAQCBLVVJMOjpLVVJMKGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJnVybCkKICAgICAgICAgYnVmZmVyWzJdID0gJ2wnOwogICAgICAgICBidWZmZXJb
M10gPSAnZSc7CiAgICAgICAgIGJ1ZmZlcls0XSA9ICc6JzsKLSAgICAgICAgdXJsLmNvcHlMYXRp
bjEoJmJ1ZmZlcls1XSk7CisgICAgICAgIGNvcHlBU0NJSSh1cmwuY2hhcmFjdGVycygpLCB1cmwu
bGVuZ3RoKCksICZidWZmZXJbNV0pOworICAgICAgICBidWZmZXJbdXJsLmxlbmd0aCgpICsgNF0g
PSAwOyAgLy8gTmVlZCBOVUxMIHRlcm1pbmF0b3IuCiAgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRh
KCksIDApOwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZSh1cmwuYXNjaWkoKSwgJnVybCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHBhc3MgYW55dGhpbmcg
YXMgdGhlIHNlY29uZCBhcmd1bWVudC4gV2hlbiB0aGUKKyAgICAgICAgLy8gaW5uYXJkcyBvZiBL
VVJMIGFyZSBjb252ZXJ0ZWQgZnJvbSBEZXByZWNhdGVkU3RyaW5nIHRvIFN0cmluZywgdGhpcwor
ICAgICAgICAvLyBzaG91bGQgYmUgcHV0IGJhY2suIEl0IGlzIGFuIG9wdGltaXphdGlvbiB0aGF0
IHByZXZlbnRzIGFsbG9jYXRpbmcKKyAgICAgICAgLy8gYW5vdGhlciBzdHJpbmcgaW4gdGhlIGNv
bW1vbiBjYXNlIHRoYXQgbm90aGluZyBjaGFuZ2VzLgorICAgICAgICBwYXJzZSh1cmwudXRmOCgp
LmRhdGEoKSwgMCk7CisgICAgfQogfQogCi1LVVJMOjpLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmIHJlbGF0aXZlKQorS1VSTDo6S1VSTChjb25zdCBLVVJMJiBi
YXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlKQogewogICAgIGluaXQoYmFzZSwgcmVsYXRpdmUs
IFVURjhFbmNvZGluZygpKTsKIH0KIAotS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZykKK0tVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICBpbml0KGJhc2UsIHJlbGF0aXZl
LCBlbmNvZGluZyk7CiB9CiAKLXZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZyZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZykKK3ZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCBTdHJpbmcgJnJlbGF0
aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewogICAgIC8vIEFsbG93IGF0IGxl
YXN0IGFic29sdXRlIFVSTHMgdG8gcmVzb2x2ZSBhZ2FpbnN0IGFuIGVtcHR5IFVSTC4KICAgICBp
ZiAoIWJhc2UubV9pc1ZhbGlkICYmICFiYXNlLmlzRW1wdHkoKSkgewpAQCAtMjg0LDI0ICszMjcs
MjYgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgIGJvb2wg
YWJzb2x1dGUgPSBmYWxzZTsKIAogICAgIC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggV2luIElF
LCB3ZSBtdXN0IHRyZWF0IGJhY2tzbGFzaGVzIGFzIGlmIHRoZXkgd2VyZSBzbGFzaGVzLCBhcyBs
b25nIGFzIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdGhlIGphdmFzY3JpcHQ6IHNjaGVtYQotICAg
IERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0ZWRSZWxhdGl2ZTsKKyAgICBTdHJpbmcgc3Vic3Rp
dHV0ZWRSZWxhdGl2ZTsKICAgICBib29sIHNob3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hlcyA9IHJl
bGF0aXZlLmNvbnRhaW5zKCdcXCcpICYmICEocmVsYXRpdmUuc3RhcnRzV2l0aCgiamF2YXNjcmlw
dDoiLCBmYWxzZSkgfHwgcmVsYXRpdmUuc3RhcnRzV2l0aCgiZGF0YToiLCBmYWxzZSkpOwogICAg
IGlmIChzaG91bGRTdWJzdGl0dXRlQmFja3NsYXNoZXMpCiAgICAgICAgIHN1YnN0aXR1dGVkUmVs
YXRpdmUgPSBzdWJzdGl0dXRlQmFja3NsYXNoZXMocmVsYXRpdmUpOwogCi0gICAgY29uc3QgRGVw
cmVjYXRlZFN0cmluZyAmcmVsID0gc2hvdWxkU3Vic3RpdHV0ZUJhY2tzbGFzaGVzID8gc3Vic3Rp
dHV0ZWRSZWxhdGl2ZSA6IHJlbGF0aXZlOwotICAgIAotICAgIGJvb2wgYWxsQVNDSUkgPSByZWwu
aXNBbGxBU0NJSSgpOwotICAgIGNoYXIgKnN0ckJ1ZmZlcjsKKyAgICBjb25zdCBTdHJpbmcgJnJl
bCA9IHNob3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hlcyA/IHN1YnN0aXR1dGVkUmVsYXRpdmUgOiBy
ZWxhdGl2ZTsKKworICAgIGJvb2wgYWxsQVNDSUkgPSBpc0FsbEFTQ0lJKHJlbCk7CisgICAgY2hh
ciAqc3RyQnVmZmVyOyAgLy8gTXVzdCBiZSBmYXN0RnJlZSdkIHdoZW4gbm9uLU5VTEwgYmVmb3Jl
IHRoaXMgZnVuY3Rpb24gZXhpdHMuCiAgICAgY29uc3QgY2hhciAqc3RyOwogICAgIGlmIChhbGxB
U0NJSSkgewotICAgICAgICBzdHJCdWZmZXIgPSAwOwotICAgICAgICBzdHIgPSByZWwuYXNjaWko
KTsKKyAgICAgICAgc3RyQnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MocmVs
Lmxlbmd0aCgpICsgMSkpOworICAgICAgICBjb3B5QVNDSUkocmVsLmNoYXJhY3RlcnMoKSwgcmVs
Lmxlbmd0aCgpLCBzdHJCdWZmZXIpOworICAgICAgICBzdHJCdWZmZXJbcmVsLmxlbmd0aCgpXSA9
IDA7CisgICAgICAgIHN0ciA9IHN0ckJ1ZmZlcjsKICAgICB9IGVsc2UgewogICAgICAgICBzdHJC
dWZmZXIgPSBlbmNvZGVSZWxhdGl2ZVN0cmluZyhiYXNlLCByZWwsIGVuY29kaW5nKTsKICAgICAg
ICAgc3RyID0gc3RyQnVmZmVyOwogICAgIH0KLSAgICAKKwogICAgIC8vIHdvcmthcm91bmQgZm9y
IHNpdGVzIHRoYXQgcHV0IGxlYWRpbmcgd2hpdGVzcGFjZSB3aGl0ZXNwYWNlIG9uCiAgICAgLy8g
VVJMIHJlZmVyZW5jZXMKICAgICBib29sIHN0cmlwcGVkU3RhcnQgPSBmYWxzZTsKQEAgLTMzOCw3
ICszODMsNyBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAg
ICAgICAgICArK3A7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCpwID09ICc6JykgewotICAgICAg
ICAgICAgaWYgKHBbMV0gIT0gJy8nICYmIGJhc2UucHJvdG9jb2woKS5sb3dlcigpID09IERlcHJl
Y2F0ZWRTdHJpbmcoc3RyLCBwIC0gc3RyKS5sb3dlcigpICYmIGJhc2UuaXNIaWVyYXJjaGljYWwo
KSkKKyAgICAgICAgICAgIGlmIChwWzFdICE9ICcvJyAmJiBiYXNlLnByb3RvY29sKCkubG93ZXIo
KSA9PSBTdHJpbmcoc3RyLCBwIC0gc3RyKS5sb3dlcigpICYmIGJhc2UuaXNIaWVyYXJjaGljYWwo
KSkKICAgICAgICAgICAgICAgICBzdHIgPSBwICsgMTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7CkBAIC0zNDYsMTkgKzM5MSwyMCBAQCB2b2lkIEtV
Ukw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAgfQogCiAgICAgaWYgKGFic29s
dXRlKSB7Ci0gICAgICAgIHBhcnNlKHN0ciwgKGFsbEFTQ0lJICYmICFzdHJpcHBlZFN0YXJ0ICYm
IChjaGFyc1RvQ2hvcE9mZkVuZCA9PSAwKSkgPyAmcmVsIDogMCk7CisgICAgICAgIC8vIFRPRE86
IHdoZW4gcGFyc2UgdGFrZXMgYSBTdHJpbmcsIHdlIHNob3VsZCBwdXQgYmFjayB0aGUgb3B0aW1p
emF0aW9uCisgICAgICAgIC8vIGZvciB1bmNoYW5nZWQgc3RyaW5ncy4KKyAgICAgICAgcGFyc2Uo
c3RyLCAwKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBJZiB0aGUgYmFzZSBpcyBlbXB0eSBv
ciBvcGFxdWUgKGUuZy4gZGF0YTogb3IgamF2YXNjcmlwdDopLCB0aGVuIHRoZSBVUkwgaXMgaW52
YWxpZAogICAgICAgICAvLyB1bmxlc3MgdGhlIHJlbGF0aXZlIFVSTCBpcyBhIHNpbmdsZSBmcmFn
bWVudC4KICAgICAgICAgaWYgKCFiYXNlLmlzSGllcmFyY2hpY2FsKCkpIHsKICAgICAgICAgICAg
IGlmIChzdHJbMF0gPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBu
ZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2UucXVlcnlFbmRQb3MpICsgc3RyOwotICAg
ICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgICAg
ICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHN0ckJ1ZmZlcikKLSAgICAgICAgICAgICAgICBmYXN0RnJlZShzdHJCdWZmZXIpOworCisg
ICAgICAgICAgICBmYXN0RnJlZShzdHJCdWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTM3NCwxNCArNDIwLDE0IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJM
ICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgIC8vIG11c3QgYmUgZnJhZ21lbnQtb25seSByZWZl
cmVuY2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5l
d1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5xdWVyeUVuZFBvcykgKyBzdHI7Ci0gICAg
ICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICAgICAg
ICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICAvLyBxdWVyeS1vbmx5
IHJlZmVyZW5jZSwgc3BlY2lhbCBjYXNlIG5lZWRlZCBmb3Igbm9uLVVSTCByZXN1bHRzCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBiYXNl
LnVybFN0cmluZy5sZWZ0KGJhc2UucGF0aEVuZFBvcykgKyBzdHI7Ci0gICAgICAgICAgICAgICAg
cGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICAgICAgICAgIHBhcnNlKG5l
d1VSTC5hc2NpaSgpLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgY2FzZSAnLyc6CkBAIC0zOTAsMTEgKzQzNiwxMSBAQCB2b2lkIEtVUkw6OmluaXQo
Y29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAgICAgICAgICAgICAgaWYgKHN0clsxXSA9PSAn
LycpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbmV0LXBhdGgKICAgICAgICAgICAgICAgICAg
ICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2Uuc2No
ZW1lRW5kUG9zICsgMSkgKyBzdHI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5h
c2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lp
KCksIDApOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IGFicy1wYXRoCiAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0g
YmFzZS51cmxTdHJpbmcubGVmdChiYXNlLnBvcnRFbmRQb3MpICsgc3RyOwotICAgICAgICAgICAg
ICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgICAgICAgICAg
ICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00ODAsMTAgKzUyNiw4IEBAIHZvaWQg
S1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoc3RyQnVmZmVyKSB7Ci0gICAgICAgIGZhc3RGcmVl
KHN0ckJ1ZmZlcik7Ci0gICAgfQorCisgICAgZmFzdEZyZWUoc3RyQnVmZmVyKTsKIH0KIAogYm9v
bCBLVVJMOjpoYXNQYXRoKCkgY29uc3QKQEAgLTQ5MSwxMCArNTM1LDEwIEBAIGJvb2wgS1VSTDo6
aGFzUGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNWYWxpZCAmJiBwYXRoRW5kUG9zICE9IHBv
cnRFbmRQb3M7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21wb25lbnQo
KSBjb25zdAorU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKIHsKICAgICBp
ZiAoIWhhc1BhdGgoKSkKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaW50IGVuZCA9IHBhdGhFbmRQb3MgLSAxOwogICAg
IGlmICh1cmxTdHJpbmdbZW5kXSA9PSAnLycpCkBAIC01MDgsMTkgKzU1MiwxOSBAQCBEZXByZWNh
dGVkU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50CiAgICAgcmV0dXJuIHVybFN0cmluZy5t
aWQoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6
cHJvdG9jb2woKSBjb25zdAorU3RyaW5nIEtVUkw6OnByb3RvY29sKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHVybFN0cmluZy5sZWZ0
KHNjaGVtZUVuZFBvcyk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0
CitTdHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAg
ICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogICAgIH0KIAogICAgIGludCBzdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQ
b3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7CkBAIC01NDUsMzIgKzU4
OSwzMiBAQCB1bnNpZ25lZCBzaG9ydCBpbnQgS1VSTDo6cG9ydCgpIGNvbnN0CiAgICAgcmV0dXJu
IDA7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6cGFzcygpIGNvbnN0CitTdHJpbmcgS1VS
TDo6cGFzcygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJu
IERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAog
ICAgIGlmIChwYXNzd29yZEVuZFBvcyA9PSB1c2VyRW5kUG9zKSB7Ci0gICAgICAgIHJldHVybiBE
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gZGVjb2RlX3N0cmluZyh1cmxTdHJpbmcubWlkKHVzZXJFbmRQb3MgKyAxLCBwYXNz
d29yZEVuZFBvcyAtIHVzZXJFbmRQb3MgLSAxKSk7IAogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtV
Ukw6OnVzZXIoKSBjb25zdAorU3RyaW5nIEtVUkw6OnVzZXIoKSBjb25zdAogewogICAgIGlmICgh
bV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVjb2RlX3N0cmluZyh1cmxT
dHJpbmcubWlkKHVzZXJTdGFydFBvcywgdXNlckVuZFBvcyAtIHVzZXJTdGFydFBvcykpOwogfQog
Ci1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnJlZigpIGNvbnN0CitTdHJpbmcgS1VSTDo6cmVmKCkg
Y29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCB8fCBmcmFnbWVudEVuZFBvcyA9PSBxdWVyeUVu
ZFBvcykgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHVybFN0cmluZy5taWQocXVlcnlFbmRQ
b3MgKyAxLCBmcmFnbWVudEVuZFBvcyAtIChxdWVyeUVuZFBvcyArIDEpKTsKQEAgLTU4MSw0NCAr
NjI1LDU1IEBAIGJvb2wgS1VSTDo6aGFzUmVmKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1ZhbGlk
ICYmIGZyYWdtZW50RW5kUG9zICE9IHF1ZXJ5RW5kUG9zOwogfQogCi1EZXByZWNhdGVkU3RyaW5n
IEtVUkw6OnF1ZXJ5KCkgY29uc3QKK2Jvb2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBjaGFyKiBw
cm90bykgY29uc3QKK3sKKyAgICAvLyBEbyB0aGUgY29tcGFyaXNvbiB3aXRob3V0IG1ha2luZyBh
IG5ldyBzdHJpbmcgb2JqZWN0LgorICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzY2hl
bWVFbmRQb3M7IGkrKykgeworICAgICAgICBpZiAoIXByb3RvW2ldIHx8IHRvQVNDSUlMb3dlcih1
cmxTdHJpbmdbaV0udW5pY29kZSgpKSAhPSBwcm90b1tpXSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHByb3RvW2ldID09IDA7ICAvLyBXZSBzaG91bGQgaGF2
ZSBjb25zdW1lZCBhbGwgY2hhcmFjdGVycyBpbiB0aGUgYXJndW1lbnQuCit9CisKK1N0cmluZyBL
VVJMOjpxdWVyeSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0K
IAogICAgIHJldHVybiB1cmxTdHJpbmcubWlkKHBhdGhFbmRQb3MsIHF1ZXJ5RW5kUG9zIC0gcGF0
aEVuZFBvcyk7IAogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnBhdGgoKSBjb25zdAorU3Ry
aW5nIEtVUkw6OnBhdGgoKSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAg
IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZGVjb2RlX3N0cmluZyh1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3Ms
IHBhdGhFbmRQb3MgLSBwb3J0RW5kUG9zKSk7IAogfQogCi12b2lkIEtVUkw6OnNldFByb3RvY29s
KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldFByb3RvY29sKGNvbnN0
IFN0cmluZyAmcykKIHsKICAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNhdGVk
U3RyaW5nIG5ld1VSTCA9IHMgKyAiOiIgKyB1cmxTdHJpbmc7Ci0gICAgICAgIHBhcnNlKG5ld1VS
TC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBz
LmRlcHJlY2F0ZWRTdHJpbmcoKSArICI6IiArIHVybFN0cmluZzsKKyAgICAgICAgcGFyc2UobmV3
VVJMLmFzY2lpKCksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRGVwcmVjYXRl
ZFN0cmluZyBuZXdVUkwgPSBzICsgdXJsU3RyaW5nLm1pZChzY2hlbWVFbmRQb3MpOwotICAgIHBh
cnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VS
TCA9IHMuZGVwcmVjYXRlZFN0cmluZygpICsgdXJsU3RyaW5nLm1pZChzY2hlbWVFbmRQb3MpOwor
ICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKIH0KIAotdm9pZCBLVVJMOjpzZXRIb3N0KGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldEhvc3QoY29uc3QgU3RyaW5n
ICZzKQogewogICAgIGlmIChtX2lzVmFsaWQpIHsKICAgICAgICAgYm9vbCBzbGFzaFNsYXNoTmVl
ZGVkID0gdXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7CiAgICAgICAgIGludCBob3N0
U3RhcnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9z
IDogcGFzc3dvcmRFbmRQb3MgKyAxOwotICAgICAgICAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmlu
ZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVkZWQg
PyAiLy8iIDogRGVwcmVjYXRlZFN0cmluZygpKSArIHMgKyB1cmxTdHJpbmcubWlkKGhvc3RFbmRQ
b3MpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisKKyAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNs
YXNoU2xhc2hOZWVkZWQgPyAiLy8iIDogRGVwcmVjYXRlZFN0cmluZygpKSArIHMuZGVwcmVjYXRl
ZFN0cmluZygpICsgdXJsU3RyaW5nLm1pZChob3N0RW5kUG9zKTsKKyAgICAgICAgcGFyc2UobmV3
VVJMLmFzY2lpKCksIDApOwogICAgIH0KIH0KIApAQCAtNjI4LDI4ICs2ODMsMjggQEAgdm9pZCBL
VVJMOjpzZXRQb3J0KHVuc2lnbmVkIHNob3J0IGkpCiAgICAgICAgIGJvb2wgY29sb25OZWVkZWQg
PSBwb3J0RW5kUG9zID09IGhvc3RFbmRQb3M7CiAgICAgICAgIGludCBwb3J0U3RhcnQgPSAoY29s
b25OZWVkZWQgPyBob3N0RW5kUG9zIDogaG9zdEVuZFBvcyArIDEpOwogICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRTdGFydCkgKyAoY29sb25OZWVk
ZWQgPyAiOiIgOiBEZXByZWNhdGVkU3RyaW5nKCkpICsgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KGkpICsgdXJsU3RyaW5nLm1pZChwb3J0RW5kUG9zKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFz
Y2lpKCksICZuZXdVUkwpOworICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAg
fQogfQogCi12b2lkIEtVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
IGhvc3RBbmRQb3J0KQordm9pZCBLVVJMOjpzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJpbmcmIGhv
c3RBbmRQb3J0KQogewogICAgIGlmIChtX2lzVmFsaWQpIHsKICAgICAgICAgYm9vbCBzbGFzaFNs
YXNoTmVlZGVkID0gdXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7CiAgICAgICAgIGlu
dCBob3N0U3RhcnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3Jk
RW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAxOwotICAgICAgICAKLSAgICAgICAgRGVwcmVjYXRl
ZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hO
ZWVkZWQgPyAiLy8iIDogRGVwcmVjYXRlZFN0cmluZygpKSArIGhvc3RBbmRQb3J0ICsgdXJsU3Ry
aW5nLm1pZChwb3J0RW5kUG9zKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdV
UkwpOworCisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQo
aG9zdFN0YXJ0KSArIChzbGFzaFNsYXNoTmVlZGVkID8gIi8vIiA6IERlcHJlY2F0ZWRTdHJpbmco
KSkgKyBob3N0QW5kUG9ydC5kZXByZWNhdGVkU3RyaW5nKCkgKyB1cmxTdHJpbmcubWlkKHBvcnRF
bmRQb3MpOworICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCi12
b2lkIEtVUkw6OnNldFVzZXIoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXNlcikKK3ZvaWQgS1VS
TDo6c2V0VXNlcihjb25zdCBTdHJpbmcgJnVzZXIpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkgewog
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHU7CiAgICAgICAgIGludCBlbmQgPSB1c2VyRW5kUG9z
OwogICAgICAgICBpZiAoIXVzZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB1ID0gdXNlcjsK
KyAgICAgICAgICAgIHUgPSB1c2VyLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgICAgIGlm
ICh1c2VyU3RhcnRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMSkKICAgICAgICAgICAgICAgICB1ID0g
Ii8vIiArIHU7CiAgICAgICAgICAgICAvLyBBZGQgJ0AnIGlmIHdlIGRpZG4ndCBoYXZlIG9uZSBi
ZWZvcmUuCkBAIC02NjEsMTcgKzcxNiwxNyBAQCB2b2lkIEtVUkw6OnNldFVzZXIoY29uc3QgRGVw
cmVjYXRlZFN0cmluCiAgICAgICAgICAgICAgICAgZW5kICs9IDE7CiAgICAgICAgIH0KICAgICAg
ICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdCh1c2VyU3Rh
cnRQb3MpICsgdSArIHVybFN0cmluZy5taWQoZW5kKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFz
Y2lpKCksICZuZXdVUkwpOworICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAg
fQogfQogCi12b2lkIEtVUkw6OnNldFBhc3MoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcGFzc3dv
cmQpCit2b2lkIEtVUkw6OnNldFBhc3MoY29uc3QgU3RyaW5nICZwYXNzd29yZCkKIHsKICAgICBp
ZiAobV9pc1ZhbGlkKSB7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcDsKICAgICAgICAgaW50
IGVuZCA9IHBhc3N3b3JkRW5kUG9zOwogICAgICAgICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgcCA9ICc6JyArIHBhc3N3b3JkICsgJ0AnOworICAgICAgICAgICAgcCA9
ICc6JyArIHBhc3N3b3JkLmRlcHJlY2F0ZWRTdHJpbmcoKSArICdAJzsKICAgICAgICAgICAgIGlm
ICh1c2VyRW5kUG9zID09IHNjaGVtZUVuZFBvcyArIDEpCiAgICAgICAgICAgICAgICAgcCA9ICIv
LyIgKyBwOwogICAgICAgICAgICAgLy8gRWF0IHRoZSBleGlzdGluZyAnQCcgc2luY2Ugd2UgYXJl
IGdvaW5nIHRvIGFkZCBvdXIgb3duLgpAQCAtNjgzLDUwICs3MzgsNTAgQEAgdm9pZCBLVVJMOjpz
ZXRQYXNzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbgogICAgICAgICAgICAgICAgIGVuZCArPSAxOwog
ICAgICAgICB9CiAgICAgICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3Ry
aW5nLmxlZnQodXNlckVuZFBvcykgKyBwICsgdXJsU3RyaW5nLm1pZChlbmQpOwotICAgICAgICBw
YXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2Np
aSgpLCAwKTsKICAgICB9CiB9CiAKLXZvaWQgS1VSTDo6c2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldFJlZihjb25zdCBTdHJpbmcgJnMpCiB7CiAgICAgaWYg
KG1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmlu
Zy5sZWZ0KHF1ZXJ5RW5kUG9zKSArIChzLmlzRW1wdHkoKSA/IERlcHJlY2F0ZWRTdHJpbmcoKSA6
ICIjIiArIHMpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocXVlcnlFbmRQb3Mp
ICsgKHMuaXNFbXB0eSgpID8gRGVwcmVjYXRlZFN0cmluZygpIDogIiMiICsgcy5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQog
Ci12b2lkIEtVUkw6OnNldFF1ZXJ5KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnF1ZXJ5KQordm9p
ZCBLVVJMOjpzZXRRdWVyeShjb25zdCBTdHJpbmcgJnF1ZXJ5KQogewogICAgIGlmIChtX2lzVmFs
aWQpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBxOwogICAgICAgICBpZiAoIXF1ZXJ5Lmlz
TnVsbCgpICYmIChxdWVyeS5pc0VtcHR5KCkgfHwgcXVlcnlbMF0gIT0gJz8nKSkgewotICAgICAg
ICAgICAgcSA9ICI/IiArIHF1ZXJ5OworICAgICAgICAgICAgcSA9ICI/IiArIHF1ZXJ5LmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHEgPSBxdWVyeTsK
KyAgICAgICAgICAgIHEgPSBxdWVyeS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBhdGhFbmRQ
b3MpICsgcSArIHVybFN0cmluZy5taWQocXVlcnlFbmRQb3MpOwotICAgICAgICBwYXJzZShuZXdV
UkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsK
ICAgICB9CiB9CiAKLXZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZz
KQordm9pZCBLVVJMOjpzZXRQYXRoKGNvbnN0IFN0cmluZyAmcykKIHsKICAgICBpZiAobV9pc1Zh
bGlkKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQo
cG9ydEVuZFBvcykgKyBlbmNvZGVfc3RyaW5nKHMpICsgdXJsU3RyaW5nLm1pZChwYXRoRW5kUG9z
KTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRFbmRQb3MpICsgZW5jb2Rl
X3N0cmluZyhzLmRlcHJlY2F0ZWRTdHJpbmcoKSkgKyB1cmxTdHJpbmcubWlkKHBhdGhFbmRQb3Mp
OworICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCi1EZXByZWNh
dGVkU3RyaW5nIEtVUkw6OnByZXR0eVVSTCgpIGNvbnN0CitTdHJpbmcgS1VSTDo6cHJldHR5VVJM
KCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCkgewogICAgICAgICByZXR1cm4gdXJsU3Ry
aW5nOwogICAgIH0KIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0ID0gcHJvdG9jb2woKSAr
ICI6IjsKKyAgICBTdHJpbmcgcmVzdWx0ID0gcHJvdG9jb2woKSArICI6IjsKIAotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgYXV0aG9yaXR5OworICAgIFN0cmluZyBhdXRob3JpdHk7CiAKICAgICBpZiAo
aG9zdEVuZFBvcyAhPSBwYXNzd29yZEVuZFBvcykgewogICAgICAgICBpZiAodXNlckVuZFBvcyAh
PSB1c2VyU3RhcnRQb3MpIHsKQEAgLTczNiwxMyArNzkxLDEzIEBAIERlcHJlY2F0ZWRTdHJpbmcg
S1VSTDo6cHJldHR5VVJMKCkgY29uc3QKICAgICAgICAgYXV0aG9yaXR5ICs9IGhvc3QoKTsKICAg
ICAgICAgaWYgKHBvcnQoKSAhPSAwKSB7CiAgICAgICAgICAgICBhdXRob3JpdHkgKz0gIjoiOwot
ICAgICAgICAgICAgYXV0aG9yaXR5ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihwb3J0KCkp
OworICAgICAgICAgICAgYXV0aG9yaXR5ICs9IFN0cmluZzo6bnVtYmVyKHBvcnQoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoIWF1dGhvcml0eS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
c3VsdCArPSAiLy8iICsgYXV0aG9yaXR5OwotICAgIGVsc2UgaWYgKHByb3RvY29sKCkgPT0gImZp
bGUiKQorICAgIGVsc2UgaWYgKHByb3RvY29sSXMoImZpbGUiKSkKICAgICAgICAgcmVzdWx0ICs9
ICIvLyI7CiAKICAgICByZXN1bHQgKz0gcGF0aCgpOwpAQCAtNzU1LDI4ICs4MTAsMjggQEAgRGVw
cmVjYXRlZFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNh
dGVkU3RyaW5nJiB1cmxTdHJpbmcpCitEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJp
bmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyKQogewotICAgIHJldHVybiBkZWNvZGVfc3Ry
aW5nKHVybFN0cmluZywgVVRGOEVuY29kaW5nKCkpOworICAgIHJldHVybiBkZWNvZGVfc3RyaW5n
KHN0ciwgVVRGOEVuY29kaW5nKCkpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29k
ZV9zdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBUZXh0RW5j
b2RpbmcmIGVuY29kaW5nKQorRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpkZWNvZGVfc3RyaW5nKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0ciwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykK
IHsKICAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdCgiIik7CiAKICAgICBWZWN0b3I8Y2hhciwg
MjA0OD4gYnVmZmVyKDApOwogCi0gICAgaW50IGxlbmd0aCA9IHVybFN0cmluZy5sZW5ndGgoKTsK
KyAgICBpbnQgbGVuZ3RoID0gc3RyLmxlbmd0aCgpOwogICAgIGludCBkZWNvZGVkUG9zaXRpb24g
PSAwOwogICAgIGludCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgaW50IGVuY29kZWRSdW5Qb3Np
dGlvbjsKLSAgICB3aGlsZSAoKGVuY29kZWRSdW5Qb3NpdGlvbiA9IHVybFN0cmluZy5maW5kKCcl
Jywgc2VhcmNoUG9zaXRpb24pKSA+PSAwKSB7CisgICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRp
b24gPSBzdHIuZmluZCgnJScsIHNlYXJjaFBvc2l0aW9uKSkgPj0gMCkgewogICAgICAgICAvLyBG
aW5kIHRoZSBzZXF1ZW5jZSBvZiAlLWVzY2FwZSBjb2Rlcy4KICAgICAgICAgaW50IGVuY29kZWRS
dW5FbmQgPSBlbmNvZGVkUnVuUG9zaXRpb247CiAgICAgICAgIHdoaWxlIChsZW5ndGggLSBlbmNv
ZGVkUnVuRW5kID49IDMKLSAgICAgICAgICAgICAgICAmJiB1cmxTdHJpbmdbZW5jb2RlZFJ1bkVu
ZF0gPT0gJyUnCi0gICAgICAgICAgICAgICAgJiYgaXNIZXhEaWdpdCh1cmxTdHJpbmdbZW5jb2Rl
ZFJ1bkVuZCArIDFdLmxhdGluMSgpKQotICAgICAgICAgICAgICAgICYmIGlzSGV4RGlnaXQodXJs
U3RyaW5nW2VuY29kZWRSdW5FbmQgKyAyXS5sYXRpbjEoKSkpCisgICAgICAgICAgICAgICAgJiYg
c3RyW2VuY29kZWRSdW5FbmRdID09ICclJworICAgICAgICAgICAgICAgICYmIGlzSGV4RGlnaXQo
c3RyW2VuY29kZWRSdW5FbmQgKyAxXS5sYXRpbjEoKSkKKyAgICAgICAgICAgICAgICAmJiBpc0hl
eERpZ2l0KHN0cltlbmNvZGVkUnVuRW5kICsgMl0ubGF0aW4xKCkpKQogICAgICAgICAgICAgZW5j
b2RlZFJ1bkVuZCArPSAzOwogICAgICAgICBpZiAoZW5jb2RlZFJ1bkVuZCA9PSBlbmNvZGVkUnVu
UG9zaXRpb24pIHsKICAgICAgICAgICAgICsrc2VhcmNoUG9zaXRpb247CkBAIC03ODgsNyArODQz
LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpkZWNvZGVfc3RyaW5nKGNvbgogICAgICAgICBp
bnQgZW5jb2RlZFJ1bkxlbmd0aCA9IGVuY29kZWRSdW5FbmQgLSBlbmNvZGVkUnVuUG9zaXRpb247
CiAgICAgICAgIGJ1ZmZlci5jbGVhcigpOwogICAgICAgICBidWZmZXIuZ3JvdyhlbmNvZGVkUnVu
TGVuZ3RoICsgMSk7Ci0gICAgICAgIHVybFN0cmluZy5jb3B5TGF0aW4xKGJ1ZmZlci5kYXRhKCks
IGVuY29kZWRSdW5Qb3NpdGlvbiwgZW5jb2RlZFJ1bkxlbmd0aCk7CisgICAgICAgIHN0ci5jb3B5
TGF0aW4xKGJ1ZmZlci5kYXRhKCksIGVuY29kZWRSdW5Qb3NpdGlvbiwgZW5jb2RlZFJ1bkxlbmd0
aCk7CiAKICAgICAgICAgLy8gRGVjb2RlIHRoZSAlLWVzY2FwZXMgaW50byBieXRlcy4KICAgICAg
ICAgY2hhciAqcCA9IGJ1ZmZlci5kYXRhKCk7CkBAIC04MDQsMTIgKzg1OSwxMiBAQCBEZXByZWNh
dGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5nIHdpdGggd2hhdCB3ZSBqdXN0IHNraXBw
ZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgotICAgICAgICByZXN1bHQuYXBwZW5kKHVybFN0
cmluZy5taWQoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9z
aXRpb24pKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIubWlkKGRlY29kZWRQb3NpdGlvbiwg
ZW5jb2RlZFJ1blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKSk7CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KGRlY29kZWQuY2hh
cmFjdGVycygpKSwgZGVjb2RlZC5sZW5ndGgoKSk7CiAgICAgICAgIGRlY29kZWRQb3NpdGlvbiA9
IGVuY29kZWRSdW5FbmQ7CiAgICAgfQogCi0gICAgcmVzdWx0LmFwcGVuZCh1cmxTdHJpbmcubWlk
KGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKSk7CisgICAgcmVzdWx0
LmFwcGVuZChzdHIubWlkKGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9u
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODE5LDcgKzg3NCw3IEBAIGJvb2wgS1VS
TDo6aXNMb2NhbEZpbGUoKSBjb25zdAogICAgIC8vIGFuZCBpbmNsdWRpbmcgZmVlZCB3b3VsZCBh
bGxvdyBmZWVkcyB0byBwb3RlbnRpYWxseSBsZXQgc29tZW9uZSdzIGJsb2cKICAgICAvLyByZWFk
IHRoZSBjb250ZW50cyBvZiB0aGUgY2xpcGJvYXJkIG9uIGEgZHJhZywgZXZlbiB3aXRob3V0IGEg
ZHJvcC4KICAgICAvLyBMaWtld2lzZSB3aXRoIHVzaW5nIHRoZSBGcmFtZUxvYWRlcjo6c2hvdWxk
VHJlYXRVUkxBc0xvY2FsKCkgZnVuY3Rpb24uCi0gICAgcmV0dXJuIHByb3RvY29sKCkgPT0gImZp
bGUiOworICAgIHJldHVybiBwcm90b2NvbCgpLmxvd2VyKCkgPT0gImZpbGUiOwogfQogCiBzdGF0
aWMgdm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIqJiBidWZmZXIsIGNvbnN0IGNoYXIg
KnN0clN0YXJ0LCBzaXplX3QgbGVuZ3RoKQpAQCAtOTIzLDcgKzk3OCw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBtYXRjaExldHRlcihjaGFyIGMsIGMKICAgICByZXR1cm4gKGMgfCAweDIwKSA9PSBs
b3dlcmNhc2VMZXR0ZXI7CiB9CiAKLXZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBj
b25zdCBEZXByZWNhdGVkU3RyaW5nICpvcmlnaW5hbFN0cmluZykKK3ZvaWQgS1VSTDo6cGFyc2Uo
Y29uc3QgY2hhciAqdXJsLCBjb25zdCBTdHJpbmcgKm9yaWdpbmFsU3RyaW5nKQogewogICAgIG1f
aXNWYWxpZCA9IHRydWU7CiAKQEAgLTEyNDcsNyArMTMwMiw3IEBAIHZvaWQgS1VSTDo6cGFyc2Uo
Y29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAvLyBpdCBzdGFydGVkIGFzIGEgRGVwcmVjYXRl
ZFN0cmluZywganVzdCByZXVzZSBpdCwgdG8gYXZvaWQgZXh0cmEKICAgICAvLyBhbGxvY2F0aW9u
LgogICAgIGlmIChvcmlnaW5hbFN0cmluZyAmJiBzdHJuY21wKGJ1ZmZlci5kYXRhKCksIHVybCwg
ZnJhZ21lbnRFbmRQb3MpID09IDApIHsKLSAgICAgICAgdXJsU3RyaW5nID0gKm9yaWdpbmFsU3Ry
aW5nOworICAgICAgICB1cmxTdHJpbmcgPSBvcmlnaW5hbFN0cmluZy0+ZGVwcmVjYXRlZFN0cmlu
ZygpOwogICAgIH0gZWxzZQogICAgICAgICB1cmxTdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nKGJ1
ZmZlci5kYXRhKCksIGZyYWdtZW50RW5kUG9zKTsKIApAQCAtMTI5MCw1OCArMTM0NSw1OCBAQCBE
ZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJpbmcoY29uCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZW5jb2RlSG9zdG5hbWUoY29uc3QgRGVw
cmVjYXRlZFN0cmluZyAmcykKK3N0YXRpYyBTdHJpbmcgZW5jb2RlSG9zdG5hbWUoY29uc3QgU3Ry
aW5nICZzKQogewogICAgIC8vIE5lZWRzIHRvIGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbiBJRE4t
ZW5jb2RlZCBuYW1lLgogICAgIC8vIEZvciBob3N0IG5hbWVzIGJpZ2dlciB0aGFuIHRoaXMsIHdl
IHdvbid0IGRvIElETiBlbmNvZGluZywgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSBPSy4KICAg
ICBjb25zdCB1bnNpZ25lZCBob3N0bmFtZUJ1ZmZlckxlbmd0aCA9IDIwNDg7CiAKLSAgICBpZiAo
cy5pc0FsbEFTQ0lJKCkgfHwgcy5sZW5ndGgoKSA+IGhvc3RuYW1lQnVmZmVyTGVuZ3RoKQorICAg
IGlmIChpc0FsbEFTQ0lJKHMpIHx8IHMubGVuZ3RoKCkgPiBob3N0bmFtZUJ1ZmZlckxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIHM7CiAKICNpZiBVU0UoSUNVX1VOSUNPREUpCi0gICAgVUNoYXIgYnVm
ZmVyW2hvc3RuYW1lQnVmZmVyTGVuZ3RoXTsgICAgCisgICAgVUNoYXIgYnVmZmVyW2hvc3RuYW1l
QnVmZmVyTGVuZ3RoXTsKICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwotICAg
IGludDMyX3QgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCA9IHVpZG5hX0lETlRvQVNDSUkKLSAgICAg
ICAgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4ocy51bmljb2RlKCkpLCBzLmxlbmd0
aCgpLCBidWZmZXIsIGhvc3RuYW1lQnVmZmVyTGVuZ3RoLCBVSUROQV9BTExPV19VTkFTU0lHTkVE
LCAwLCAmZXJyb3IpOworICAgIGludDMyX3QgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCA9IHVpZG5h
X0lETlRvQVNDSUkoCisgICAgICAgIHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgpLCBidWZmZXIs
IGhvc3RuYW1lQnVmZmVyTGVuZ3RoLCBVSUROQV9BTExPV19VTkFTU0lHTkVELCAwLCAmZXJyb3Ip
OwogICAgIGlmIChlcnJvciAhPSBVX1pFUk9fRVJST1IpIHsKICAgICAgICAgcmV0dXJuIHM7CiAg
ICAgfQotICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8RGVwcmVj
YXRlZENoYXIgKj4oYnVmZmVyKSwgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCk7CisgICAgcmV0dXJu
IFN0cmluZyhidWZmZXIsIG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQpOwogI2VsaWYgVVNFKFFUNF9V
TklDT0RFKQogICAgIFFCeXRlQXJyYXkgcmVzdWx0ID0gUVVybDo6dG9BY2Uocyk7Ci0gICAgcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmcocmVzdWx0LmNvbnN0RGF0YSgpLCByZXN1bHQubGVuZ3RoKCkp
OworICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmNvbnN0RGF0YSgpLCByZXN1bHQubGVuZ3RoKCkp
OwogI2VuZGlmCiB9CiAKLXN0YXRpYyBWZWN0b3I8cGFpcjxpbnQsIGludD4gPiBmaW5kSG9zdG5h
bWVzSW5NYWlsVG9VUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3N0YXRpYyBWZWN0b3I8
cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+ID4gZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKGNvbnN0
IFN0cmluZyAmcykKIHsKICAgICAvLyBJbiBhIG1haWx0bzogVVJMLCBob3N0IG5hbWVzIGNvbWUg
YWZ0ZXIgYSAnQCcgY2hhcmFjdGVyIGFuZCBlbmQgd2l0aCBhICc+JyBvciAnLCcgb3IgJz8nIG9y
IGVuZCBvZiBzdHJpbmcgY2hhcmFjdGVyLgogICAgIC8vIFNraXAgcXVvdGVkIHN0cmluZ3Mgc28g
dGhhdCBjaGFyYWN0ZXJzIGluIHRoZW0gZG9uJ3QgY29uZnVzZSB1cy4KICAgICAvLyBXaGVuIHdl
IGZpbmQgYSAnPycgY2hhcmFjdGVyLCB3ZSBhcmUgcGFzdCB0aGUgcGFydCBvZiB0aGUgVVJMIHRo
YXQgY29udGFpbnMgaG9zdCBuYW1lcy4KIAotICAgIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGE7
CisgICAgVmVjdG9yPHBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiA+IGE7CiAKLSAgICBpbnQgcCA9
IDA7CisgICAgdW5zaWduZWQgcCA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgLy8gRmlu
ZCBzdGFydCBvZiBob3N0IG5hbWUgb3Igb2YgcXVvdGVkIHN0cmluZy4KLSAgICAgICAgaW50IGhv
c3RuYW1lT3JTdHJpbmdTdGFydCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiW1wiQD9dIiks
IHApOwotICAgICAgICBpZiAoaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID09IC0xKSB7CisgICAgICAg
IHVuc2lnbmVkIGhvc3RuYW1lT3JTdHJpbmdTdGFydCA9IGZpbmRGaXJzdE9mKHMsIHAsICJcIkA/
Iik7CisgICAgICAgIGlmIChob3N0bmFtZU9yU3RyaW5nU3RhcnQgPT0gVUlOVF9NQVgpIHsKICAg
ICAgICAgICAgIHJldHVybiBhOwogICAgICAgICB9Ci0gICAgICAgIERlcHJlY2F0ZWRDaGFyIGMg
PSBzW2hvc3RuYW1lT3JTdHJpbmdTdGFydF07CisgICAgICAgIFVDaGFyIGMgPSBzW2hvc3RuYW1l
T3JTdHJpbmdTdGFydF07CiAgICAgICAgIHAgPSBob3N0bmFtZU9yU3RyaW5nU3RhcnQgKyAxOwog
CiAgICAgICAgIGlmIChjID09ICc/JykgewogICAgICAgICAgICAgcmV0dXJuIGE7CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGMgPT0gJ0AnKSB7CiAgICAgICAgICAgICAvLyBG
aW5kIGVuZCBvZiBob3N0IG5hbWUuCi0gICAgICAgICAgICBpbnQgaG9zdG5hbWVTdGFydCA9IHA7
Ci0gICAgICAgICAgICBpbnQgaG9zdG5hbWVFbmQgPSBzLmZpbmQoUmVndWxhckV4cHJlc3Npb24o
Ils+LD9dIiksIHApOworICAgICAgICAgICAgdW5zaWduZWQgaG9zdG5hbWVTdGFydCA9IHA7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBob3N0bmFtZUVuZCA9IGZpbmRGaXJzdE9mKHMsIHAsICI+LD8i
KTsKICAgICAgICAgICAgIGJvb2wgZG9uZTsKLSAgICAgICAgICAgIGlmIChob3N0bmFtZUVuZCA9
PSAtMSkgeworICAgICAgICAgICAgaWYgKGhvc3RuYW1lRW5kID09IFVJTlRfTUFYKSB7CiAgICAg
ICAgICAgICAgICAgaG9zdG5hbWVFbmQgPSBzLmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGRv
bmUgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEzNTcsMjAgKzE0MTIsMjAgQEAg
c3RhdGljIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGZpbmRIb3N0bgogICAgICAgICAgICAgLy8g
U2tpcCBxdW90ZWQgc3RyaW5nLgogICAgICAgICAgICAgQVNTRVJUKGMgPT0gJyInKTsKICAgICAg
ICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgaW50IGVzY2FwZWRDaGFyYWN0ZXJP
clN0cmluZ0VuZCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiW1wiXFxdIiksIHApOwotICAg
ICAgICAgICAgICAgIGlmIChlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgPT0gLTEpCisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZXNjYXBlZENoYXJhY3Rlck9yU3RyaW5nRW5kID0gZmluZEZp
cnN0T2YocywgcCwgIlwiXFwiKTsKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBlZENoYXJhY3Rl
ck9yU3RyaW5nRW5kID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTsK
IAogICAgICAgICAgICAgICAgIGMgPSBzW2VzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZF07CiAg
ICAgICAgICAgICAgICAgcCA9IGVzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCArIDE7Ci0gICAg
ICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgdGhlIGVuZCBvZiB0
aGUgc3RyaW5nLCB0aGVuIGJyZWFrIGZyb20gdGhlIHN0cmluZyBsb29wIGJhY2sgdG8gdGhlIGhv
c3QgbmFtZSBsb29wLgogICAgICAgICAgICAgICAgIGlmIChjID09ICciJykKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBT
a2lwIGVzY2FwZWQgY2hhcmFjdGVyLgogICAgICAgICAgICAgICAgIEFTU0VSVChjID09ICdcXCcp
OwotICAgICAgICAgICAgICAgIGlmIChwID09IHN0YXRpY19jYXN0PGludD4ocy5sZW5ndGgoKSkp
CisgICAgICAgICAgICAgICAgaWYgKHAgPT0gcy5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGE7CiAKICAgICAgICAgICAgICAgICArK3A7CkBAIC0xMzc5LDM1ICsxNDM0LDM0
IEBAIHN0YXRpYyBWZWN0b3I8cGFpcjxpbnQsIGludD4gPiBmaW5kSG9zdG4KICAgICB9CiB9CiAK
LXN0YXRpYyBib29sIGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJnMsIGludCAmc3RhcnRPZmZzZXQsIGludCAmZW5kT2Zmc2V0KQorc3RhdGljIGJv
b2wgZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxVUkwoY29uc3QgU3RyaW5nICZzLCB1bnNpZ25l
ZCAmc3RhcnRPZmZzZXQsIHVuc2lnbmVkICZlbmRPZmZzZXQpCiB7CiAgICAgLy8gRmluZCB0aGUg
aG9zdCBuYW1lIGluIGEgaGllcmFyY2hpY2FsIFVSTC4KICAgICAvLyBJdCBjb21lcyBhZnRlciBh
ICI6Ly8iIHNlcXVlbmNlLCB3aXRoIHNjaGVtZSBjaGFyYWN0ZXJzIHByZWNlZGluZy4KICAgICAv
LyBJZiBlbmRzIHdpdGggdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG9yIGEgIjoiIG9yIGEgcGF0aCBz
ZWdtZW50IGVuZGluZyBjaGFyYWN0ZXIuCiAgICAgLy8gSWYgdGhlcmUgaXMgYSAiQCIgY2hhcmFj
dGVyLCB0aGUgaG9zdCBwYXJ0IGlzIGp1c3QgdGhlIHBhcnQgYWZ0ZXIgdGhlICJAIi4KLSAgICBp
bnQgc2VwYXJhdG9yID0gcy5maW5kKCI6Ly8iKTsKLSAgICBpZiAoc2VwYXJhdG9yIDw9IDApIHsK
KyAgICB1bnNpZ25lZCBzZXBhcmF0b3IgPSBmaW5kRmlyc3RPZihzLCAwLCAiOi8vIik7CisgICAg
aWYgKHNlcGFyYXRvciA9PSBVSU5UX01BWCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgY2hhcmFjdGVycyBiZWZvcmUgdGhlIDovLyBhcmUg
dmFsaWQgc2NoZW1lIGNoYXJhY3RlcnMuCi0gICAgaWYgKCFpc1NjaGVtZUZpcnN0Q2hhcihzWzBd
LmxhdGluMSgpKSkgeworICAgIGlmICghaXNTY2hlbWVGaXJzdENoYXIoc1swXSkpIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IHNlcGFyYXRv
cjsgKytpKSB7Ci0gICAgICAgIGlmICghaXNTY2hlbWVDaGFyKHNbaV0ubGF0aW4xKCkpKSB7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNlcGFyYXRvcjsgKytpKSB7CisgICAgICAgIGlm
ICghaXNTY2hlbWVDaGFyKHNbaV0pKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBTdGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLgotICAgIGlu
dCBhdXRob3JpdHlTdGFydCA9IHNlcGFyYXRvciArIDM7CisgICAgdW5zaWduZWQgYXV0aG9yaXR5
U3RhcnQgPSBzZXBhcmF0b3IgKyAzOwogCiAgICAgLy8gRmluZCB0ZXJtaW5hdGluZyBjaGFyYWN0
ZXIuCi0gICAgaW50IGxlbmd0aCA9IHMubGVuZ3RoKCk7Ci0gICAgaW50IGhvc3RuYW1lRW5kID0g
bGVuZ3RoOwotICAgIGZvciAoaW50IGkgPSBhdXRob3JpdHlTdGFydDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGNoYXIgYyA9IHNbaV0ubGF0aW4xKCk7CisgICAgdW5zaWduZWQgaG9zdG5h
bWVFbmQgPSBzLmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGF1dGhvcml0eVN0YXJ0
OyBpIDwgcy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBzW2ldOwogICAgICAg
ICBpZiAoYyA9PSAnOicgfHwgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKGMpICYmIGMgIT0gJ1wwJykp
IHsKICAgICAgICAgICAgIGhvc3RuYW1lRW5kID0gaTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTQxNiw4ICsxNDcwLDggQEAgc3RhdGljIGJvb2wgZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxV
UgogCiAgICAgLy8gRmluZCAiQCIgZm9yIHRoZSBzdGFydCBvZiB0aGUgaG9zdCBuYW1lLgogICAg
IGludCB1c2VySW5mb1Rlcm1pbmF0b3IgPSBzLmZpbmQoJ0AnLCBhdXRob3JpdHlTdGFydCk7Ci0g
ICAgaW50IGhvc3RuYW1lU3RhcnQ7Ci0gICAgaWYgKHVzZXJJbmZvVGVybWluYXRvciA9PSAtMSB8
fCB1c2VySW5mb1Rlcm1pbmF0b3IgPiBob3N0bmFtZUVuZCkgeworICAgIHVuc2lnbmVkIGhvc3Ru
YW1lU3RhcnQ7CisgICAgaWYgKHVzZXJJbmZvVGVybWluYXRvciA9PSAtMSB8fCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odXNlckluZm9UZXJtaW5hdG9yKSA+IGhvc3RuYW1lRW5kKSB7CiAgICAgICAg
IGhvc3RuYW1lU3RhcnQgPSBhdXRob3JpdHlTdGFydDsKICAgICB9IGVsc2UgewogICAgICAgICBo
b3N0bmFtZVN0YXJ0ID0gdXNlckluZm9UZXJtaW5hdG9yICsgMTsKQEAgLTE0MjgsNTUgKzE0ODIs
NTcgQEAgc3RhdGljIGJvb2wgZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxVUgogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVIb3N0bmFtZXMoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3N0YXRpYyBTdHJpbmcgZW5jb2RlSG9zdG5hbWVzKGNv
bnN0IFN0cmluZyAmcykKIHsKICAgICBpZiAocy5zdGFydHNXaXRoKCJtYWlsdG86IiwgZmFsc2Up
KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGhvc3RuYW1lUmFuZ2Vz
ID0gZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKHMpOworICAgICAgICBjb25zdCBWZWN0b3I8cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+ID4gaG9zdG5hbWVSYW5nZXMgPSBmaW5kSG9zdG5hbWVzSW5N
YWlsVG9VUkwocyk7CiAgICAgICAgIGludCBuID0gaG9zdG5hbWVSYW5nZXMuc2l6ZSgpOwogICAg
ICAgICBpZiAobiAhPSAwKSB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdDsK
KyAgICAgICAgICAgIFN0cmluZyByZXN1bHQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBwID0gMDsK
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgY29uc3QgcGFpcjxpbnQsIGludD4gJnIgPSBob3N0bmFtZVJhbmdlc1tpXTsKLSAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gcy5taWQocCwgci5maXJzdCk7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ICs9IGVuY29kZUhvc3RuYW1lKHMubWlkKHIuZmlyc3QsIHIuc2Vjb25kIC0gci5maXJzdCkp
OworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzLnN1YnN0cmluZyhwLCByLmZpcnN0KTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gZW5jb2RlSG9zdG5hbWUocy5zdWJzdHJpbmcoci5maXJz
dCwgci5zZWNvbmQgLSByLmZpcnN0KSk7CiAgICAgICAgICAgICAgICAgcCA9IHIuc2Vjb25kOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ICs9IHMubWlkKHApOworICAgICAgICAg
ICAgcmVzdWx0ICs9IHMuc3Vic3RyaW5nKHApOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBob3N0U3RhcnQsIGhvc3RFbmQ7
CisgICAgICAgIHVuc2lnbmVkIGhvc3RTdGFydCwgaG9zdEVuZDsKICAgICAgICAgaWYgKGZpbmRI
b3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKHMsIGhvc3RTdGFydCwgaG9zdEVuZCkpIHsKLSAgICAg
ICAgICAgIHJldHVybiBzLmxlZnQoaG9zdFN0YXJ0KSArIGVuY29kZUhvc3RuYW1lKHMubWlkKGhv
c3RTdGFydCwgaG9zdEVuZCAtIGhvc3RTdGFydCkpICsgcy5taWQoaG9zdEVuZCk7IAorICAgICAg
ICAgICAgcmV0dXJuIHMubGVmdChob3N0U3RhcnQpICsgZW5jb2RlSG9zdG5hbWUocy5zdWJzdHJp
bmcoaG9zdFN0YXJ0LCBob3N0RW5kIC0gaG9zdFN0YXJ0KSkgKyBzLnN1YnN0cmluZyhob3N0RW5k
KTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gczsKIH0KIAotc3RhdGljIGNoYXIgKmVu
Y29kZVJlbGF0aXZlU3RyaW5nKGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJnJlbCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3N0YXRpYyBjaGFyICplbmNv
ZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBLVVJMICZiYXNlLCBjb25zdCBTdHJpbmcgJnJlbCwgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBl
bmNvZGVIb3N0bmFtZXMocmVsKTsKKyAgICBTdHJpbmcgcyA9IGVuY29kZUhvc3RuYW1lcyhyZWwp
OwogCiAgICAgY2hhciAqc3RyQnVmZmVyOwogCiAgICAgVGV4dEVuY29kaW5nIHBhdGhFbmNvZGlu
ZyhVVEY4RW5jb2RpbmcoKSk7CiAgICAgVGV4dEVuY29kaW5nIG90aGVyRW5jb2RpbmcgPSAoZW5j
b2RpbmcuaXNWYWxpZCgpICYmICFyZWwuc3RhcnRzV2l0aCgibWFpbHRvOiIsIGZhbHNlKSkgPyBl
bmNvZGluZyA6IFVURjhFbmNvZGluZygpOwotICAgIAorCiAgICAgaW50IHBhdGhFbmQgPSAtMTsK
ICAgICBpZiAocGF0aEVuY29kaW5nICE9IG90aGVyRW5jb2RpbmcpIHsKLSAgICAgICAgcGF0aEVu
ZCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiWz8jXSIpKTsKKyAgICAgICAgLy8gRmluZCB0
aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWl0aGVyICMgb3IgPywga2VlcCBwYXRoRW5kIGF0IC0xIG90
aGVyd2lzZS4KKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gZmluZEZpcnN0T2YocywgMCwgIiM/
Iik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gVUlOVF9NQVgpCisgICAgICAgICAgICBwYXRoRW5k
ID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpOwogICAgIH0KICAgICBpZiAocGF0aEVuZCA9PSAt
MSkgewotICAgICAgICBDU3RyaW5nIGRlY29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzLnVuaWNvZGUoKSksIHMubGVuZ3RoKCkpOworICAg
ICAgICBDU3RyaW5nIGRlY29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHMuY2hhcmFjdGVycygp
LCBzLmxlbmd0aCgpKTsKICAgICAgICAgaW50IGRlY29kZWRMZW5ndGggPSBkZWNvZGVkLmxlbmd0
aCgpOwogICAgICAgICBzdHJCdWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyICo+KGZhc3RNYWxsb2Mo
ZGVjb2RlZExlbmd0aCArIDEpKTsKICAgICAgICAgbWVtY3B5KHN0ckJ1ZmZlciwgZGVjb2RlZC5k
YXRhKCksIGRlY29kZWRMZW5ndGgpOwogICAgICAgICBzdHJCdWZmZXJbZGVjb2RlZExlbmd0aF0g
PSAwOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBsZW5ndGggPSBzLmxlbmd0aCgpOwotICAg
ICAgICBDU3RyaW5nIHBhdGhEZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4ocy51bmljb2RlKCkpLCBwYXRoRW5kKTsKLSAgICAgICAgQ1N0
cmluZyBvdGhlckRlY29kZWQgPSBvdGhlckVuY29kaW5nLmVuY29kZShyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyKj4ocy51bmljb2RlKCkpICsgcGF0aEVuZCwgbGVuZ3RoIC0gcGF0aEVuZCk7
CisgICAgICAgIENTdHJpbmcgcGF0aERlY29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHMuY2hh
cmFjdGVycygpLCBwYXRoRW5kKTsKKyAgICAgICAgQ1N0cmluZyBvdGhlckRlY29kZWQgPSBvdGhl
ckVuY29kaW5nLmVuY29kZShzLmNoYXJhY3RlcnMoKSArIHBhdGhFbmQsIHMubGVuZ3RoKCkgLSBw
YXRoRW5kKTsKICAgICAgICAgaW50IHBhdGhEZWNvZGVkTGVuZ3RoID0gcGF0aERlY29kZWQubGVu
Z3RoKCk7CiAgICAgICAgIGludCBvdGhlckRlY29kZWRMZW5ndGggPSBvdGhlckRlY29kZWQubGVu
Z3RoKCk7CiAgICAgICAgIHN0ckJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIgKj4oZmFzdE1hbGxv
YyhwYXRoRGVjb2RlZExlbmd0aCArIG90aGVyRGVjb2RlZExlbmd0aCArIDEpKTsKQEAgLTE0ODgs
NyArMTU0NCw3IEBAIHN0YXRpYyBjaGFyICplbmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCAKICAg
ICByZXR1cm4gc3RyQnVmZmVyOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdWJzdGl0
dXRlQmFja3NsYXNoZXMoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyaW5nKQorc3RhdGljIFN0
cmluZyBzdWJzdGl0dXRlQmFja3NsYXNoZXMoY29uc3QgU3RyaW5nICZzdHJpbmcpCiB7CiAgICAg
aW50IHF1ZXN0aW9uUG9zID0gc3RyaW5nLmZpbmQoJz8nKTsKICAgICBpbnQgaGFzaFBvcyA9IHN0
cmluZy5maW5kKCcjJyk7CkBAIC0xNTAyLDcgKzE1NTgsNyBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0
cmluZyBzdWJzdGl0dXRlQmFja3NsCiAgICAgICAgIHBhdGhFbmQgPSBzdHJpbmcubGVuZ3RoKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmluZy5sZWZ0KHBhdGhFbmQpLnJlcGxhY2UoJ1xcJywn
LycpICsgc3RyaW5nLm1pZChwYXRoRW5kKTsKKyAgICByZXR1cm4gc3RyaW5nLmxlZnQocGF0aEVu
ZCkucmVwbGFjZSgnXFwnLCcvJykgKyBzdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmQpOwogfQogCiBi
b29sIEtVUkw6OmlzSGllcmFyY2hpY2FsKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
S1VSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCShyZXZpc2lvbiAy
OTg0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nywx
MSArNTcsMjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBLVVJMIHsKIHB1YmxpYzoK
KyAgICAvLyBHZW5lcmF0ZXMgYSBVUkwgd2hpY2ggY29udGFpbnMgYW4gaXNOdWxsIHN0cmluZy4K
ICAgICBLVVJMKCk7Ci0gICAgS1VSTChjb25zdCBjaGFyKik7Ci0gICAgS1VSTChjb25zdCBLVVJM
JiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwotICAgIEtVUkwoY29uc3QgS1VSTCYsIGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKLSAgICBLVVJMKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmKTsKKworICAgIC8vIFRoZSBhcmd1bWVudCBpcyBhbiBhYnNvbHV0
ZSBVUkwgc3RyaW5nLiBGb3IgdGhlIGNoYXIqIHZlcnNpb24sIHRoZQorICAgIC8vIHN0cmluZydz
IGVuY29kaW5nIGlzIGFzc3VtZWQgdG8gYmUgZmluYWwuIEZvciB0aGUgc3RyaW5nIHZlcnNpb24s
IGl0CisgICAgLy8gd2lsbCBiZSB0cmVhdGVkIGFzIFVURi04LgorICAgIC8vCisgICAgLy8gREFO
R0VSISBUaG9zIGRvZXMgbm90IGRvIHRoaW5ncyBsaWtlIElETiwgYW5kIHRoZSByZXN1bHRpbmcg
aG9zdCBuYW1lCisgICAgLy8gd2lsbCBiZSBtYW5nbGVkLiBVc2Ugb25seSBpZiB5b3UgaGF2ZSBh
biBBU0NJSSBzdHJpbmcsIG9yIG9uZSB3aGljaCBjYW1lCisgICAgLy8gZnJvbSBhIEtVUkwgb3Jp
Z2luYWxseSwgWW91IGFsbW9zdCBjZXJ0YWlubHkgd2FudCB0byB1c2U6CisgICAgLy8gICBLVVJM
KE5VUkwoKSwgeW91clVSTCk7CisgICAgLy8gd2hpY2ggd2lsbCBkbyBldmVyeXRoaW5nIHByb3Bl
cmx5IGluc3RlYWQgb2YgdGhlc2UgZnVuY3Rpb25zLgorICAgIGV4cGxpY2l0IEtVUkwoY29uc3Qg
Y2hhciopOworICAgIGV4cGxpY2l0IEtVUkwoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBSZXNv
bHZlcyB0aGUgcmVsYXRpdmUgVVJMIHdpdGggdGhlIGdpdmVuIGJhc2UgVVJMLiBJZiBwcm92aWRl
ZCwgdGhlCisgICAgLy8gVGV4dEVuY29kaW5nIGlzIHVzZWQgdG8gZW5jb2RlIHRoZSBxdWVyeSBp
ZiBwcm92aWRlZC4gVGhlIHF1ZXJ5IGVuY29kaW5nCisgICAgLy8gd2lsbCBiZSBVVEYtOCBvdGhl
cndpc2UuIFRoZSBiYXNlIFVSTCBjYW4gYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlCisgICAg
Ly8gcmVsYXRpdmUgVVJMIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYWJzb2x1dGUgKHRoaXMgaXMg
dGhlIG9ubHkgd2F5IHRvCisgICAgLy8gcGFyc2UgYW4gYWJzb2x1dGUgVVJMIHdpdGggYSBjdXN0
b20gcXVlcnkgZW5jb2RpbmcpLgorICAgIEtVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZSk7CisgICAgS1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcm
IHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBLVVJMKE5TVVJMKik7CiAjZW5kaWYKQEAgLTc1LDM1ICs5Myw0OSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcuaXNOdWxsKCk7IH0KICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcuaXNFbXB0eSgpOyB9CiAKKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBVUkwgaHNhIGEgcGF0aC4gTm90ZSB0aGF0ICJodHRw
Oi8vZm9vLmNvbS8iIGhhcyBhCisgICAgLy8gcGF0aCBvZiAiLyIsIHNvIHRoaXMgZnVuY3Rpb24g
d2lsbCByZXR1cm4gdHJ1ZS4gT25seSBpbnZhbGlkIG9yCisgICAgLy8gbm9uLWhpZXJhcmNoaWNh
bCAobGlrZSAiamF2YXNjcmlwdDoiKSBVUkxzIHdpbGwgaGF2ZSBubyBwYXRoLgogICAgIGJvb2wg
aGFzUGF0aCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHVy
bFN0cmluZzsgfQogICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGRlcHJlY2F0ZWRTdHJpbmco
KSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmc7IH0KIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcHJv
dG9jb2woKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGhvc3QoKSBjb25zdDsKKyAgICBT
dHJpbmcgcHJvdG9jb2woKSBjb25zdDsKKyAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OwogICAgIHVu
c2lnbmVkIHNob3J0IGludCBwb3J0KCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB1c2Vy
KCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXNzKCkgY29uc3Q7Ci0gICAgRGVwcmVj
YXRlZFN0cmluZyBwYXRoKCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBsYXN0UGF0aENv
bXBvbmVudCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcXVlcnkoKSBjb25zdDsKLSAg
ICBEZXByZWNhdGVkU3RyaW5nIHJlZigpIGNvbnN0OworICAgIFN0cmluZyB1c2VyKCkgY29uc3Q7
CisgICAgU3RyaW5nIHBhc3MoKSBjb25zdDsKKyAgICBTdHJpbmcgcGF0aCgpIGNvbnN0OworICAg
IFN0cmluZyBsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0OworICAgIFN0cmluZyBxdWVyeSgpIGNv
bnN0OyAgLy8gV0lMTCBpbmNsdWRlIHRoZSAiPyIuCisgICAgU3RyaW5nIHJlZigpIGNvbnN0OyAg
ICAvLyBXaWxsIE5PVCBpbmNsdWRlIHRoZSAiIyIuCiAgICAgYm9vbCBoYXNSZWYoKSBjb25zdDsK
IAotICAgIERlcHJlY2F0ZWRTdHJpbmcgZW5jb2RlZEh0bWxSZWYoKSBjb25zdCB7IHJldHVybiBy
ZWYoKTsgfQotCi0gICAgdm9pZCBzZXRQcm90b2NvbChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYp
OwotICAgIHZvaWQgc2V0SG9zdChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOworICAgIC8vIFJl
dHVybnMgdHJ1ZSBvZiB0aGUgY3VycmVudCBVUkwncyBwcm90b2NvbCBpcyB0aGUgc2FtZSBhcyB0
aGUgTlVMTC0KKyAgICAvLyB0ZXJtaW5hdGVkIEFTQ0lJIGFyZ3VtZW50LiBUaGUgYXJndW1lbnQg
bXVzdCBiZSBsb3dlci1jYXNlLgorICAgIGJvb2wgcHJvdG9jb2xJcyhjb25zdCBjaGFyKikgY29u
c3Q7CisKKyAgICBTdHJpbmcgZW5jb2RlZEh0bWxSZWYoKSBjb25zdCB7IHJldHVybiByZWYoKTsg
fQorCisgICAgdm9pZCBzZXRQcm90b2NvbChjb25zdCBTdHJpbmcgJik7CisgICAgdm9pZCBzZXRI
b3N0KGNvbnN0IFN0cmluZyAmKTsKKyAgICAvLyBTZXR0aW5nIHRoZSBwb3J0IHRvIDAgd2lsbCBj
bGVhciBhbnkgcG9ydCBmcm9tIHRoZSBVUkwuCiAgICAgdm9pZCBzZXRQb3J0KHVuc2lnbmVkIHNo
b3J0IGludCk7Ci0gICAgdm9pZCBzZXRIb3N0QW5kUG9ydChjb25zdCBEZXByZWNhdGVkU3RyaW5n
Jik7Ci0gICAgdm9pZCBzZXRVc2VyKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9p
ZCBzZXRQYXNzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQYXRoKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRRdWVyeShjb25zdCBEZXByZWNh
dGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7
CisgICAgLy8gSW5wdXQgaXMgbGlrZSAiZm9vLmNvbSIgb3IgImZvby5jb206ODAwMCIuCisgICAg
dm9pZCBzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFVzZXIoY29u
c3QgU3RyaW5nICYpOworICAgIHZvaWQgc2V0UGFzcyhjb25zdCBTdHJpbmcgJik7CisgICAgLy8g
SWYgeW91IHBhc3MgYW4gZW1wdHkgcGF0aCBmb3IgSFRUUCBvciBIVFRQUyBVUkxzLCB0aGUgcmVz
dWx0aW5nIHBhdGgKKyAgICAvLyB3aWxsIGJlICIvIi4KKyAgICB2b2lkIHNldFBhdGgoY29uc3Qg
U3RyaW5nICYpOworICAgIC8vIFRoZSBxdWVyeSBtYXkgYmVnaW4gd2l0aCBhIHF1ZXN0aW9uIG1h
cmssIG9yLCBpZiBub3QsIG9uZSB3aWxsIGJlIGFkZGVkCisgICAgLy8gZm9yIHlvdS4gU2V0dGlu
ZyB0aGUgcXVlcnkgdG8gdGhlIGVtcHR5IHN0cmluZyB3aWxsIGxlYXZlIGEgIj8iIGluIHRoZQor
ICAgIC8vIFVSTCAod2l0aCBub3RoaW5nIGFmdGVyIGl0KS4gVG8gY2xlYXIgdGhlIHF1ZXJ5LCBw
YXNzIGFuIGlzTnVsbCgpIHN0cmluZy4KKyAgICB2b2lkIHNldFF1ZXJ5KGNvbnN0IFN0cmluZyAm
KTsKKyAgICB2b2lkIHNldFJlZihjb25zdCBTdHJpbmcgJik7CiAKLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHByZXR0eVVSTCgpIGNvbnN0OworICAgIFN0cmluZyBwcmV0dHlVUkwoKSBjb25zdDsKIAog
I2lmIFBMQVRGT1JNKENGKQogICAgIENGVVJMUmVmIGNyZWF0ZUNGVVJMKCkgY29uc3Q7CkBAIC0x
MTcsMTAgKzE0OSwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7
CiAKKyAgICAvLyBVbmVzY2FwZXMgdGhlIGdpdmVuIHN0cmluZyB1c2luZyBVUkwgZXNjYXBpbmcg
cnVsZXMsIGdpdmVuIGFuIG9wdGlvbmFsCisgICAgLy8gZW5jb2RpbmcgKGRlZmF1bHRpbmcgdG8g
VVRGLTggb3RoZXJ3aXNlKS4gREFOR0VSOiBJZiB0aGUgVVJMIGhhcyAiJTAwIgorICAgIC8vIGlu
IGl0LCB0aGUgcmVzdWx0aW5nIHN0cmluZyB3aWxsIGhhdmUgZW1iZWRkZWQgTlVMTHMhCiAgICAg
c3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3Ry
aW5nJik7CiAgICAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZGVjb2RlX3N0cmluZyhjb25zdCBE
ZXByZWNhdGVkU3RyaW5nJiwgY29uc3QgVGV4dEVuY29kaW5nJik7CiAgICAgc3RhdGljIERlcHJl
Y2F0ZWRTdHJpbmcgZW5jb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7Ci0gICAg
CisKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwgJiwgY29uc3QgS1VSTCAm
KTsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTEyOSw4ICsxNjQsMjEgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIGJvb2wgaXNIaWVyYXJjaGljYWwoKSBjb25zdDsKLSAgICB2b2lkIGluaXQoY29u
c3QgS1VSTCYsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsK
LSAgICB2b2lkIHBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAq
b3JpZ2luYWxTdHJpbmcpOworICAgIHZvaWQgaW5pdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgVGV4dEVuY29kaW5nJik7CisKKyAgICAvLyBQYXJzZXMgdGhlIGdpdmVuIFVSTC4g
VGhlIG9yaWdpbmFsU3RyaW5nIHBhcmFtZXRlciBhbGxvd3MgZm9yIGFtCisgICAgLy8gb3B0aW1p
emF0aW9uIHdoZW4gdGhlIHNvdXJjZSBpcyB0aGUgc2FtZSBhcyB0aGUgZml4ZWQtdXAgc3RyaW5n
LCBpdCB3aWxsCisgICAgLy8gdXNlIHN0cmluZyByZWZlcmVuY2UtY291bnRlZCBjb3BpZXMgaW5z
dGVhZCBvZiBkb2luZyBhIG5ldyBhbGxvY2F0aW9uLgorICAgIC8vCisgICAgLy8gRklYTUU6IFRo
aXMgb3B0aW1pemF0aW9uIGlzIGN1cnJlbnRseSBicm9rZW4gc2luY2UgdGhlIGludGVybmFsIHN0
cmluZworICAgIC8vIGlzIHN0aWxsIGEgRGVwcmVjYXRlZFN0cmluZyEKKyAgICAvLworICAgIC8v
IFRoaXMgcGFyYW1ldGVyIGlzIGFsc28gKm5lY2Vzc2FyeSogaWYgdGhlIGlucHV0IHRvIHRoZSBL
VVJMIGNvbnN0cnVjdG9yCisgICAgLy8gaXMgYW4gZW1wdHkgU3RyaW5nLiBTb21lIGNhbGxpbmcg
Y29kZSByZXF1aXJlcyB0aGF0IHRoZSBkaWZmZXJlbmNlCisgICAgLy8gYmV0d2VlbiBOVUxMIGFu
ZCBlbXB0eSBzdHJpbmdzIGlzIG1haW50YWluZWQuIFBhcnNpbmcgd2lsbCBub3QgY2hhbmdlCisg
ICAgLy8gdGhlIGVtcHR5IHN0cmluZywgc28gdGhlIGludGVybmFsIHN0cmluZyB3aWxsIGJlIGFz
c2lnbmVkIHRvIGV4YWN0bHkKKyAgICAvLyB3aGF0ZXZlciB0aGUgaW5wdXQgc3RyaW5nIGlzLgor
ICAgIHZvaWQgcGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCBTdHJpbmcgKm9yaWdpbmFsU3Ry
aW5nKTsKIAogICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsU3RyaW5nOwogICAgIGJvb2wgbV9pc1Zh
bGlkOwpAQCAtMTQzLDcgKzE5MSw3IEBAIHByaXZhdGU6CiAgICAgaW50IHBhdGhFbmRQb3M7CiAg
ICAgaW50IHF1ZXJ5RW5kUG9zOwogICAgIGludCBmcmFnbWVudEVuZFBvczsKLSAgICAKKwogICAg
IGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdSZWYoY29uc3QgS1VSTCYgYSwgY29uc3QgS1VSTCYg
Yik7CiB9OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDI5
ODQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3Qo
R3JhcGhpYwogICAgICAgICAgICAgICAgICAgICBocmVmID0gZWxlbWVudC0+Z2V0QXR0cmlidXRl
KGhyZWZBdHRyKTsKIAogICAgICAgICAgICAgICAgIGlmICghaHJlZi5pc051bGwoKSkgewotICAg
ICAgICAgICAgICAgICAgICBLVVJMIGxpbmsgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0
ZVVSTChocmVmLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIEtVUkwg
bGluayhlbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmLmRlcHJlY2F0ZWRTdHJp
bmcoKSkpOwogICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFVSTEZvclJl
Y3QobGluaywgcmVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL3N2Zy9TVkdJ
bWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMiBAQCB2b2lkIFNW
R0ltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgCiAgICAgQ2FjaGVkSW1hZ2Ug
Km5ld0ltYWdlID0gMDsKICAgICBpZiAoIWltYWdlRWxlbWVudC0+aHJlZigpLmlzRW1wdHkoKSkg
ewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHVyaSA9IGltYWdlRWxlbWVudC0+YmFzZVVSSSgp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHVyaSA9IGltYWdlRWxlbWVudC0+
YmFzZVVSSSgpOwogICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB1cmkg
PSBLVVJMKHVyaSwgaW1hZ2VFbGVtZW50LT5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAgICB1cmkgPSBLVVJMKEtVUkwodXJpKSwgaW1hZ2VF
bGVtZW50LT5ocmVmKCkpLnN0cmluZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cmkg
PSBpbWFnZUVsZW1lbnQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIG5ld0lt
YWdlID0gZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKHVyaSk7CisgICAgICAgICAgICB1
cmkgPSBpbWFnZUVsZW1lbnQtPmhyZWYoKTsKKyAgICAgICAgbmV3SW1hZ2UgPSBkb2MtPmRvY0xv
YWRlcigpLT5yZXF1ZXN0SW1hZ2UodXJpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgfQogCiAg
ICAgQ2FjaGVkSW1hZ2UgKm9sZEltYWdlID0gaW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgYm9vbCBTVkdJbWFn
ZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUgogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2FuY2VsQ29udGVudFBvbGljeUNoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcwog
ICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKDApOwogICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c2V0UmVzcG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3ht
bCIpOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+YmVnaW4oInBsYWNlaG9sZGVyLnN2ZyIp
OyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5iZWdpbihLVVJMKCJodHRwOi8vbG9jYWxob3N0L3BsYWNlaG9sZGVyLnN2ZyIpKTsgLy8gY3Jl
YXRlIHRoZSBlbXB0eSBkb2N1bWVudAogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGUo
bV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgbV9mcmFtZS0+bG9hZGVy
KCktPmVuZCgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDI5
ODQ4KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjEsNyArMzIxLDcgQEAgYm9vbCBYTUxIdHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50
RAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIGJ1dCBhIHJlbW90ZSBkb2N1bWVudCBj
YW4gb25seSBsb2FkIGZyb20gdGhlIHNhbWUgcG9ydCBvbiB0aGUgc2VydmVyCi0gICAgS1VSTCBk
b2N1bWVudFVSTCA9IG1fZG9jLT51cmwoKTsKKyAgICBLVVJMIGRvY3VtZW50VVJMKG1fZG9jLT51
cmwoKSk7CiAgICAgaWYgKGRvY3VtZW50VVJMLnByb3RvY29sKCkubG93ZXIoKSA9PSB1cmwucHJv
dG9jb2woKS5sb3dlcigpCiAgICAgICAgICAgICAmJiBkb2N1bWVudFVSTC5ob3N0KCkubG93ZXIo
KSA9PSB1cmwuaG9zdCgpLmxvd2VyKCkKICAgICAgICAgICAgICYmIGRvY3VtZW50VVJMLnBvcnQo
KSA9PSB1cmwucG9ydCgpKQpJbmRleDogV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDI5ODQ4
KQorKysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDcgKzg4LDcgQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogICAgIFhTTFN0eWxl
U2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOwogICAgIGlmICghcGFyZW50
U2hlZXQtPmhyZWYoKS5pc051bGwoKSkKICAgICAgICAgLy8gdXNlIHBhcmVudCBzdHlsZWhlZXQn
cyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAgICAgIGFic0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0
LT5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpLCBtX3N0ckhyZWYuZGVwcmVjYXRlZFN0cmluZygp
KS5zdHJpbmcoKTsKKyAgICAgICAgYWJzSHJlZiA9IEtVUkwoS1VSTChwYXJlbnRTaGVldC0+aHJl
ZigpKSwgbV9zdHJIcmVmKS5zdHJpbmcoKTsKICAgICAKICAgICAvLyBDaGVjayBmb3IgYSBjeWNs
ZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAg
IC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWls
LgpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBz
dGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sCiAgICAgICAgIGNhc2UgWFNM
VF9MT0FEX0RPQ1VNRU5UOiB7CiAgICAgICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBj
b250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7CiAgICAgICAgICAgICB4bWxD
aGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4
dC0+bm9kZSk7Ci0gICAgICAgICAgICBLVVJMIHVybCgoY29uc3QgY2hhciopYmFzZSwgKGNvbnN0
IGNoYXIqKXVyaSk7CisgICAgICAgICAgICBLVVJMIHVybChLVVJMKFN0cmluZygoY29uc3QgY2hh
ciopYmFzZSkpLCBTdHJpbmcoKGNvbnN0IGNoYXIqKXVyaSkpOwogICAgICAgICAgICAgeG1sRnJl
ZShiYXNlKTsKICAgICAgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAgICAgICAgICBS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwo=
</data>
<flag name="review"
          id="8198"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18850</attachid>
            <date>2008-02-01 11:28:45 -0800</date>
            <delta_ts>2008-02-10 08:07:09 -0800</delta_ts>
            <desc>Patch for KURL to use string internally</desc>
            <filename>KURL.string.diff</filename>
            <type>text/plain</type>
            <size>78976</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IEtVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEtVUkwuY3BwCShyZXZpc2lvbiAyOTg0OCkK
KysrIEtVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsMTYgKzIwMywyNyBAQCBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXJDbGFzCiAgICAgLyogMjUyICovIEJhZENoYXIs
IC8qIDI1MyAqLyBCYWRDaGFyLCAvKiAyNTQgKi8gQmFkQ2hhciwgLyogMjU1ICovIEJhZENoYXIK
IH07CiAKLXN0YXRpYyBpbnQgY29weVBhdGhSZW1vdmluZ0RvdHMoY2hhciogZHN0LCBjb25zdCBj
aGFyKiBzcmMsIGludCBzcmNTdGFydCwgaW50IHNyY0VuZCk7Ci1zdGF0aWMgY2hhciogZW5jb2Rl
UmVsYXRpdmVTdHJpbmcoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYg
cmVsLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN1YnN0
aXR1dGVCYWNrc2xhc2hlcyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpOwordHlwZWRl
ZiBWZWN0b3I8VUNoYXIsIDUxMj4gVGVtcFVDaGFyQnVmZmVyOwordHlwZWRlZiBWZWN0b3I8Y2hh
ciwgMTAyND4gVGVtcENoYXJCdWZmZXI7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUZp
cnN0Q2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10g
JiBTY2hlbWVGaXJzdENoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIodW5z
aWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lQ2hh
cjsgfQorLy8gQ29udmVydHMgdGhlIGdpdmVuIHJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCB0byA4
LWJpdCBlbmNvZGluZyB1c2luZyBVUkwKKy8vIGVuY29kaW5nIHJ1bGVzICh0aGUgcGF0aCB3aWxs
IGFsd2F5cyBiZSBVVEYtOCwgdGhlIGhvc3RuYW1lIHdpbGwgYmUKKy8vIHB1bnljb2RlLCBhbmQg
dGhlIGdpdmVuIGVuY29kaW5nIHdpbGwgYXBwbHkgdG8gdGhlIHF1ZXJ5KS4gVGhlIG5vbi1OVUxM
CisvLyB0ZXJtaW5hdGVkIHJlc3VsdCB3aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBnaXZlbiBidWZm
ZXIuCitzdGF0aWMgdm9pZCBlbmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBTdHJpbmcmIHJlbCwg
Y29uc3QgVGV4dEVuY29kaW5nJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRl
bXBVQ2hhckJ1ZmZlciogb3V0cHV0KTsKKworc3RhdGljIFN0cmluZyBzdWJzdGl0dXRlQmFja3Ns
YXNoZXMoY29uc3QgU3RyaW5nICZzdHJpbmcpOworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY2hl
bWVGaXJzdENoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW3N0YXRpY19j
YXN0PGludD4oYyldICYgU2NoZW1lRmlyc3RDaGFyOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNT
Y2hlbWVGaXJzdENoYXIoVUNoYXIgYykgeyByZXR1cm4gYyA8PSAweGZmID8gKGNoYXJhY3RlckNs
YXNzVGFibGVbY10gJiBTY2hlbWVGaXJzdENoYXIpIDogZmFsc2U7IH0KK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NjaGVtZUNoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW3N0
YXRpY19jYXN0PGludD4oYyldICYgU2NoZW1lQ2hhcjsgfQorc3RhdGljIGlubGluZSBib29sIGlz
U2NoZW1lQ2hhcihVQ2hhciBjKSB7IHJldHVybiBjIDw9IDB4ZmYgPyAoY2hhcmFjdGVyQ2xhc3NU
YWJsZVtjXSAmIFNjaGVtZUNoYXIpIDogZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1Vz
ZXJJbmZvQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVb
Y10gJiBVc2VySW5mb0NoYXI7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hvc3RuYW1lQ2hhcih1
bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBIb3N0bmFt
ZUNoYXI7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lQdjZDaGFyKHVuc2lnbmVkIGNoYXIgYykg
eyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIElQdjZDaGFyOyB9Ci1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNQYXRoU2VnbWVudEVuZENoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBj
aGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgUGF0aFNlZ21lbnRFbmRDaGFyOyB9CitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNQYXRoU2VnbWVudEVuZENoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJD
bGFzc1RhYmxlW3N0YXRpY19jYXN0PGludD4oYyldICYgUGF0aFNlZ21lbnRFbmRDaGFyOyB9Citz
dGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2VnbWVudEVuZENoYXIoVUNoYXIgYykgeyByZXR1cm4g
YyA8PSAweGZmID8gKGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBQYXRoU2VnbWVudEVuZENoYXIp
IDogZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0JhZENoYXIodW5zaWduZWQgY2hhciBj
KSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgQmFkQ2hhcjsgfQogc3RhdGljIGlu
bGluZSBib29sIGlzSGV4RGlnaXQodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJD
bGFzc1RhYmxlW2NdICYgSGV4RGlnaXRDaGFyOyB9CiAKQEAgLTIyNCw2ICsyMzUsMTQ5IEBAIHN0
YXRpYyBpbmxpbmUgaW50IGhleERpZ2l0VmFsdWUodW5zaWduZWQKICAgICByZXR1cm4gKGMgLSAn
QScgKyAxMCkgJiAweEY7IC8vIGhhbmRsZSBib3RoIHVwcGVyIGFuZCBsb3dlciBjYXNlIHdpdGhv
dXQgYSBicmFuY2gKIH0KIAorc3RhdGljIGJvb2wgaXNBbGxBU0NJSShjb25zdCBjaGFyKiBzdHIs
IHVuc2lnbmVkIHN0ckxlbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyTGVu
OyBpKyspIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHN0cltpXSkg
PiAweDdmKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KK3N0YXRpYyBib29sIGlzQWxsQVNDSUkoY29uc3QgVUNoYXIqIHN0ciwgdW5zaWduZWQg
c3RyTGVuKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHJMZW47IGkrKykgewor
ICAgICAgICBpZiAoc3RyW2ldID4gMHg3ZikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIENvcGllcyB0aGUgc291cmNlIHRvIHRoZSBk
ZXN0aW5hdGlvbiwgYXNzdW1pbmcgYWxsIHRoZSBzb3VyY2UgY2hhcmFjdGVycyBhcmUKKy8vIEFT
Q0lJLiBUaGUgZGV0aW5hdGlvbiBidWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2gsIGFuZCBpdCBp
cyBub3QgTlVMTAorLy8gdGVybWluYXRlZCB1bmxlc3MgdGhlIHNvdXJjZSBoYXMgYSBOVUxMLgor
c3RhdGljIHZvaWQgY29weUFTQ0lJKGNvbnN0IFVDaGFyKiBzcmMsIHVuc2lnbmVkIGxlbmd0aCwg
Y2hhciogZGVzdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
CisgICAgICAgIGRlc3RbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzcmNbaV0pOworfQorCisvLyBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaW5kZXggaW4gc3RyaW5nIHxzfCBvZiBhbnkg
b2YgdGhlIGNoYXJhY3RlcnMKKy8vIGluIHx0b0ZpbmR8LiB8dG9GaW5kfCBzaG91bGQgYmUgYSBO
VUxMLXRlcm1pbmF0ZWQgc3RyaW5nLCBhbGwgY2hhcmFjdGVycyB1cAorLy8gdG8gdGhlIE5VTEwg
d2lsbCBiZSBzZWFyY2hlZC4gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDSD4KK3Vuc2lnbmVkIGZpbmRGaXJzdE9mKGNvbnN0IENIKiBzdHIsIHVuc2ln
bmVkIHN0ckxlbiwgdW5zaWduZWQgc3RhcnRQb3MsIGNvbnN0IGNoYXIqIHRvRmluZCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydFBvczsgaSA8IHN0ckxlbjsgaSsrKSB7CisgICAgICAg
IGNvbnN0IGNoYXIqIGN1ciA9IHRvRmluZDsKKyAgICAgICAgd2hpbGUgKCpjdXIpIHsKKyAgICAg
ICAgICAgIGlmIChzdHJbaV0gPT0gKihjdXIrKykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFVJTlRfTUFYOworfQorCisvLyBTaW1pbGFy
IHRvIHN0cnN0ciBmb3IgZmluZGluZyBBU0NJSSBpbiBhIFVDaGFyIHN0cmluZy4gVGhlIHN0cmlu
ZyB0byBiZQorLy8gc2VhcmNoZWQgbmVlZCBub3QgYmUgTlVMTCB0ZXJtaW5hdGVkLCBidXQgdGhl
IHN0cmluZyB0byBzZWFyY2ggZm9yIGlzIChzaW5jZQorLy8gdGhpcyB3aWxsIHR5cGljYWxseSBi
ZSBoYXJkY29kZWQpLiAgUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCitzdGF0aWMgdW5z
aWduZWQgZmluZFN1YnN0cmluZyhjb25zdCBVQ2hhciogc3RyLCB1bnNpZ25lZCBzdHJMZW4sIGNv
bnN0IGNoYXIqIHRvRmluZCkKK3sKKyAgICBpZiAodG9GaW5kWzBdID09IDApCisgICAgICAgIHJl
dHVybiBVSU5UX01BWDsgIC8vIE5vdGhpbmcgdG8gZmluZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RyTGVuOyBpKyspIHsKKyAgICAgICAgaWYgKHN0cltpXSA9PSB0b0ZpbmRbMF0p
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGo7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAxOyB0b0ZpbmRbal07IGorKykgeworICAgICAgICAgICAgICAgIGlmIChzdHJbaSArIGpdICE9
IHRvRmluZFtqXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBUaGlzIGlzIG5vdCBh
IG1hdGNoLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRvRmluZFtqXSA9PSAwKSAg
Ly8gQ29uc3VtZWQgYWxsIGNoYXJhY3RlcnMgdG8gZmluZC4KKyAgICAgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVUlOVF9NQVg7Cit9CisKKy8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBzZWNvbmQgc3Ry
aW5nLCBpZ25vcmluZworLy8gY2FzZSBmb3IgQVNDSUkgY2hhcmFjdGVycy4KK3RlbXBsYXRlPHR5
cGVuYW1lIENIPgorc3RhdGljIGJvb2wgc3RhcnRzV2l0aElnbm9yZUNhc2UoY29uc3QgVUNoYXIq
IHN0ciwgdW5zaWduZWQgc3RyTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ0gqIHN0YXJ0c1dpdGgsIHVuc2lnbmVkIHN0YXJ0c1dpdGhMZW4pCit7CisgICAgaWYg
KHN0ckxlbiA8IHN0YXJ0c1dpdGhMZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFydHNXaXRoTGVuOyBpKyspIHsKKyAgICAgICAgaWYg
KHRvQVNDSUlMb3dlcihzdHJbaV0pICE9IHN0YXRpY19jYXN0PFVDaGFyPih0b0FTQ0lJTG93ZXIo
c3RhcnRzV2l0aFtpXSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCisvLyBDb3B5IGEgcGF0aCwgYWNjb3VudGluZyBmb3IgIi4iIGFu
ZCAiLi4iIHNlZ21lbnRzLgorLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wbGF0ZSBzbyBpdCBjYW4g
YmUgY2FsbGVkIGZyb20gaW5pdCAobmljZSBhbmQKKy8vIGNvbnNpdGVudGx5IHVzaW5nIFVDaGFy
cyBhbmQgcGFyc2UoKSB3aGljaCBuZWVkcyB0byBiZSBmaXhlZCBhbmQgc3RpbGwgdXNlcworLy8g
OC1iaXQgY2hhcmFjdGVycy4gV2hlbiBwYXJzZSgpIGlzIGZpeGVkLCB0aGUgdGVtcGxhdGUgc2hv
dWxkIGJlIHJlbW92ZWQsCisvLyBhbmQgdGhpcyBmdW5jdGlvbiBzaG91bGQgb3BlcmF0ZSBvbiBV
Q2hhcnMgbGlrZSBldmVyeXRoaW5nIGVsc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDSD4KK3N0YXRp
YyB1bnNpZ25lZCBjb3B5UGF0aFJlbW92aW5nRG90cyhDSCAqZHN0LCBjb25zdCBDSCAqc3JjLCB1
bnNpZ25lZCBzcmNTdGFydCwgdW5zaWduZWQgc3JjRW5kKQoreworICAgIENIICpidWZmZXJQYXRo
U3RhcnQgPSBkc3Q7CisKKyAgICAvLyBlbXB0eSBwYXRoIGlzIGEgc3BlY2lhbCBjYXNlLCBhbmQg
bmVlZCBub3QgaGF2ZSBhIGxlYWRpbmcgc2xhc2gKKyAgICBpZiAoc3JjU3RhcnQgIT0gc3JjRW5k
KSB7CisgICAgICAgIGNvbnN0IENIICpiYXNlU3RyaW5nU3RhcnQgPSBzcmMgKyBzcmNTdGFydDsK
KyAgICAgICAgY29uc3QgQ0ggKmJhc2VTdHJpbmdFbmQgPSBzcmMgKyBzcmNFbmQ7CisgICAgICAg
IGNvbnN0IENIICpiYXNlU3RyaW5nUG9zID0gYmFzZVN0cmluZ1N0YXJ0OworCisgICAgICAgIC8v
IHRoaXMgY29kZSBpcyB1bnByZXBhcmVkIGZvciBwYXRocyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRo
IGEKKyAgICAgICAgLy8gc2xhc2ggYW5kIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBvbmUgaW4gdGhl
IHNvdXJjZSBzdHJpbmcKKyAgICAgICAgQVNTRVJUKGJhc2VTdHJpbmdQb3NbMF0gPT0gJy8nKTsK
KworICAgICAgICAvLyBjb3B5IHRoZSBsZWFkaW5nIHNsYXNoIGludG8gdGhlIGRlc3RpbmF0aW9u
CisgICAgICAgICpkc3QgPSAqYmFzZVN0cmluZ1BvczsKKyAgICAgICAgYmFzZVN0cmluZ1Bvcysr
OworICAgICAgICBkc3QrKzsKKworICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ1BvcyA8IGJhc2VT
dHJpbmdFbmQpIHsKKyAgICAgICAgICAgIGlmIChiYXNlU3RyaW5nUG9zWzBdID09ICcuJyAmJiBk
c3RbLTFdID09ICcvJykgeworICAgICAgICAgICAgICAgIGlmIChiYXNlU3RyaW5nUG9zWzFdID09
ICcvJyB8fCBiYXNlU3RyaW5nUG9zICsgMSA9PSBiYXNlU3RyaW5nRW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHNraXAgb3ZlciAiLiIgc2VnbWVudAorICAgICAgICAgICAgICAgICAgICBi
YXNlU3RyaW5nUG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYmFzZVN0cmluZ1Bvc1sxXSA9PSAnLicgJiYgKGJhc2VTdHJp
bmdQb3NbMl0gPT0gJy8nIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYXNlU3RyaW5nUG9zICsgMiA9PSBiYXNlU3RyaW5nRW5kKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBza2lwIG92ZXIgIi4uIiBzZWdtZW50IGFuZCByZXdpbmQgdGhlIGxhc3Qgc2VnbWVu
dAorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgUkZDIGxlYXZlcyBpdCB1cCB0byB0aGUgYXBw
IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggZXhjZXNzCisgICAgICAgICAgICAgICAgICAgIC8v
ICIuLiIgc2VnbWVudHMgLSB3ZSBjaG9vc2UgdG8gZHJvcCB0aGVtIHNpbmNlIHNvbWUgd2ViIGNv
bnRlbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVsaWVzIG9uIHRoaXMuCisgICAgICAgICAg
ICAgICAgICAgIGJhc2VTdHJpbmdQb3MgKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRz
dCA+IGJ1ZmZlclBhdGhTdGFydCArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBkc3QtLTsK
KworICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgdHdvIHdoaWxlIGJsb2Nr
cyBkaWZmZXIgc3VidGx5LgorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgaGVscHMg
dG8gcmVtb3ZlIG11bHRpcGxlIGFkam9pbmluZyBzbGFzaGVzIGFzIHdlIHJld2luZC4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlICsxIHRvIGJ1ZmZlclBhdGhTdGFydCBpbiB0aGUgZmlyc3Qg
d2hpbGUgYmxvY2sgcHJldmVudHMgZWF0aW5nIGEgbGVhZGluZyBzbGFzaAorICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoZHN0ID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSAmJiBkc3RbLTFdID09ICcv
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0tOworICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoZHN0ID4gYnVmZmVyUGF0aFN0YXJ0ICYmIGRzdFstMV0gIT0gJy8nKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZHN0LS07CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmRzdCA9ICpiYXNl
U3RyaW5nUG9zOworICAgICAgICAgICAgYmFzZVN0cmluZ1BvcysrOworICAgICAgICAgICAgZHN0
Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGRzdCAtIGJ1ZmZlclBhdGhTdGFydDsK
K30KKworLy8gU3BhY2VzIGFuZCBhbnkgY29udHJvbCBjaGFyYWN0ZXJzIHNob3VsZCBiZSB0cmlt
bWVkIGZyb20gdGhlIGJlZ2lubmluZyAmIGVuZC4KK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRU
cmltRnJvbVVSTChVQ2hhciBjaCkgeyByZXR1cm4gY2ggPD0gJyAnOyB9CisKIC8vIEtVUkwKIAog
S1VSTDo6S1VSTCgpIDogbV9pc1ZhbGlkKGZhbHNlKQpAQCAtMjMyLDExMyArMzg2LDExNCBAQCBL
VVJMOjpLVVJMKCkgOiBtX2lzVmFsaWQoZmFsc2UpCiAKIEtVUkw6OktVUkwoY29uc3QgY2hhciAq
dXJsKQogeworICAgIHVuc2lnbmVkIHVybExlbmd0aCA9IHN0cmxlbih1cmwpOworICAgIFRlbXBV
Q2hhckJ1ZmZlciBidWZmZXI7CiAgICAgaWYgKHVybCAmJiB1cmxbMF0gPT0gJy8nKSB7Ci0gICAg
ICAgICAvLyA1IGZvciAiZmlsZToiLCAxIGZvciB0ZXJtaW5hdG9yCi0gICAgICAgIHNpemVfdCB1
cmxMZW5ndGggPSBzdHJsZW4odXJsKSArIDE7Ci0gICAgICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBi
dWZmZXIodXJsTGVuZ3RoICsgNSk7CisgICAgICAgIGJ1ZmZlci5yZXNpemUoNSk7CiAgICAgICAg
IGJ1ZmZlclswXSA9ICdmJzsKICAgICAgICAgYnVmZmVyWzFdID0gJ2knOwogICAgICAgICBidWZm
ZXJbMl0gPSAnbCc7CiAgICAgICAgIGJ1ZmZlclszXSA9ICdlJzsKICAgICAgICAgYnVmZmVyWzRd
ID0gJzonOwotICAgICAgICBtZW1jcHkoJmJ1ZmZlcls1XSwgdXJsLCB1cmxMZW5ndGgpOwotICAg
ICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFyc2Uo
dXJsLCAwKTsKKyAgICB9CisKKyAgICAvLyBOZWVkIHRvIGNvbnZlcnQgdG8gVVRGLTE2IGZvciBw
YXJzaW5nLCBhc3N1bWluZyB0aGUgaW5wdXQgaXMgaW4gVVRGLTgsIGJ1dAorICAgIC8vIG1vc3Qg
b2Z0ZW4gd2lsbCBiZSBBU0NJSS4gV2UgYXBwZW5kIGl0IHRvIHRoZSBidWZmZXIgYWJvdmUuCisg
ICAgdW5zaWduZWQgaW5pdGlhbFNpemUgPSBidWZmZXIuc2l6ZSgpOworICAgIGlmIChpc0FsbEFT
Q0lJKHVybCwgdXJsTGVuZ3RoKSkgeworICAgICAgICBidWZmZXIucmVzaXplKGluaXRpYWxTaXpl
ICsgdXJsTGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVybExlbmd0
aDsgaSsrKQorICAgICAgICAgICAgYnVmZmVyW2luaXRpYWxTaXplICsgaV0gPSB1cmxbaV07Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIHV0ZjE2ID0gU3RyaW5nOjpmcm9tVVRGOCh1cmws
IHVybExlbmd0aCk7CisgICAgICAgIGJ1ZmZlci5yZXNpemUoaW5pdGlhbFNpemUgKyB1dGYxNi5s
ZW5ndGgoKSk7CisgICAgICAgIG1lbWNweSgmYnVmZmVyW2luaXRpYWxTaXplXSwgdXRmMTYuY2hh
cmFjdGVycygpLCB1dGYxNi5sZW5ndGgoKSk7CisgICAgfQorICAgIHBhcnNlKGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCksIDApOwogfQogCi1LVVJMOjpLVVJMKGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJnVybCkKK0tVUkw6OktVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKCF1
cmwuaXNFbXB0eSgpICYmIHVybFswXSA9PSAnLycpIHsKICAgICAgICAgLy8gNSBmb3IgImZpbGU6
IiwgMSBmb3IgdGVybWluYXRvcgotICAgICAgICBWZWN0b3I8Y2hhciwgMjA0OD4gYnVmZmVyKHVy
bC5sZW5ndGgoKSArIDYpOwotICAgICAgICBidWZmZXJbMF0gPSAnZic7Ci0gICAgICAgIGJ1ZmZl
clsxXSA9ICdpJzsKLSAgICAgICAgYnVmZmVyWzJdID0gJ2wnOwotICAgICAgICBidWZmZXJbM10g
PSAnZSc7Ci0gICAgICAgIGJ1ZmZlcls0XSA9ICc6JzsKLSAgICAgICAgdXJsLmNvcHlMYXRpbjEo
JmJ1ZmZlcls1XSk7Ci0gICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwotICAgIH0gZWxz
ZQotICAgICAgICBwYXJzZSh1cmwuYXNjaWkoKSwgJnVybCk7CisgICAgICAgIFRlbXBVQ2hhckJ1
ZmZlciBidWZmZXIoNSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoJ2YnKTsKKyAgICAgICAgYnVm
ZmVyLmFwcGVuZCgnaScpOworICAgICAgICBidWZmZXIuYXBwZW5kKCdsJyk7CisgICAgICAgIGJ1
ZmZlci5hcHBlbmQoJ2UnKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICBi
dWZmZXIuYXBwZW5kKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSk7CisgICAgICAgIHBh
cnNlKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCksIDApOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIHNvbWV3aGF0IGJvZ3VzLCBiZWNhdXNlIGl0IHdvbid0
IGRvIHByb3BlciBlbmNvZGluZworICAgICAgICAvLyBvZiB0aGUgaG9zdCBuYW1lLiBTZWUgYnVn
IDE3MTA1LgorICAgICAgICBwYXJzZSh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCksICZ1
cmwpOworICAgIH0KIH0KIAotS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJiByZWxhdGl2ZSkKK0tVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZSkKIHsKICAgICBpbml0KGJhc2UsIHJlbGF0aXZlLCBVVEY4RW5j
b2RpbmcoKSk7CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitLVVJM
OjpLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgaW5pdChiYXNlLCByZWxhdGl2ZSwgZW5jb2Rp
bmcpOwogfQogCi12b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmVj
YXRlZFN0cmluZyAmcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCit2b2lk
IEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBBbGxvdyBhdCBsZWFzdCBhYnNv
bHV0ZSBVUkxzIHRvIHJlc29sdmUgYWdhaW5zdCBhbiBlbXB0eSBVUkwuCiAgICAgaWYgKCFiYXNl
Lm1faXNWYWxpZCAmJiAhYmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFs
c2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBib29sIGFic29sdXRlID0g
ZmFsc2U7CiAKICAgICAvLyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdpbiBJRSwgd2UgbXVzdCB0
cmVhdCBiYWNrc2xhc2hlcyBhcyBpZiB0aGV5IHdlcmUgc2xhc2hlcywgYXMgbG9uZyBhcyB3ZSdy
ZSBub3QgZGVhbGluZyB3aXRoIHRoZSBqYXZhc2NyaXB0OiBzY2hlbWEKLSAgICBEZXByZWNhdGVk
U3RyaW5nIHN1YnN0aXR1dGVkUmVsYXRpdmU7CisgICAgU3RyaW5nIHN1YnN0aXR1dGVkUmVsYXRp
dmU7CiAgICAgYm9vbCBzaG91bGRTdWJzdGl0dXRlQmFja3NsYXNoZXMgPSByZWxhdGl2ZS5jb250
YWlucygnXFwnKSAmJiAhKHJlbGF0aXZlLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2Up
IHx8IHJlbGF0aXZlLnN0YXJ0c1dpdGgoImRhdGE6IiwgZmFsc2UpKTsKICAgICBpZiAoc2hvdWxk
U3Vic3RpdHV0ZUJhY2tzbGFzaGVzKQogICAgICAgICBzdWJzdGl0dXRlZFJlbGF0aXZlID0gc3Vi
c3RpdHV0ZUJhY2tzbGFzaGVzKHJlbGF0aXZlKTsKIAotICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJnJlbCA9IHNob3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hlcyA/IHN1YnN0aXR1dGVkUmVsYXRp
dmUgOiByZWxhdGl2ZTsKLSAgICAKLSAgICBib29sIGFsbEFTQ0lJID0gcmVsLmlzQWxsQVNDSUko
KTsKLSAgICBjaGFyICpzdHJCdWZmZXI7Ci0gICAgY29uc3QgY2hhciAqc3RyOwotICAgIGlmIChh
bGxBU0NJSSkgewotICAgICAgICBzdHJCdWZmZXIgPSAwOwotICAgICAgICBzdHIgPSByZWwuYXNj
aWkoKTsKKyAgICBjb25zdCBTdHJpbmcgJnJlbCA9IHNob3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hl
cyA/IHN1YnN0aXR1dGVkUmVsYXRpdmUgOiByZWxhdGl2ZTsKKworICAgIC8vIEdlbmVyYXRlIHRo
ZSBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVsYXRpdmUgaW5wdXQuCisgICAgLy8gTm90
IG51bGwgdGVybWluYXRlZC4KKyAgICBUZW1wVUNoYXJCdWZmZXIgc3RyQnVmZmVyOworICAgIGlm
IChpc0FsbEFTQ0lJKHJlbC5jaGFyYWN0ZXJzKCksIHJlbC5sZW5ndGgoKSkpIHsKKyAgICAgICAg
c3RyQnVmZmVyLnJlc2l6ZShyZWwubGVuZ3RoKCkpOworICAgICAgICBtZW1jcHkoc3RyQnVmZmVy
LmRhdGEoKSwgcmVsLmNoYXJhY3RlcnMoKSwgcmVsLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RyQnVmZmVyID0gZW5jb2RlUmVsYXRpdmVTdHJpbmco
YmFzZSwgcmVsLCBlbmNvZGluZyk7Ci0gICAgICAgIHN0ciA9IHN0ckJ1ZmZlcjsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gd29ya2Fyb3VuZCBmb3Igc2l0ZXMgdGhhdCBwdXQgbGVhZGluZyB3aGl0ZXNw
YWNlIHdoaXRlc3BhY2Ugb24KLSAgICAvLyBVUkwgcmVmZXJlbmNlcwotICAgIGJvb2wgc3RyaXBw
ZWRTdGFydCA9IGZhbHNlOwotICAgIHdoaWxlICgqc3RyID09ICcgJykgewotICAgICAgICBzdHIr
KzsKLSAgICAgICAgc3RyaXBwZWRTdGFydCA9IHRydWU7CisgICAgICAgIC8vIE5lZWQgdG8gZW5j
b2RlIGluIHRoZSBwcm9wZXIgOC1iaXQgZW5jb2RpbmcuCisgICAgICAgIGVuY29kZVJlbGF0aXZl
U3RyaW5nKHJlbCwgZW5jb2RpbmcsICZzdHJCdWZmZXIpOwogICAgIH0KIAotICAgIC8vIHdvcmth
cm91bmQgZm9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIGNh
dXNlIHdlIGhhdmUgdG8gY29weQotICAgIC8vIGl0IHdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHJl
cGxhY2UgbnVsbC10ZXJtaW5hdGlvbiB3aXRoIGEgbGVuZ3RoIHBhcmFtZXRlcgotICAgIGludCBs
ZW4gPSBzdHJsZW4oc3RyKTsKLSAgICBpbnQgY2hhcnNUb0Nob3BPZmZFbmQgPSAwOwotICAgIGZv
ciAoaW50IHBvcyA9IGxlbiAtIDE7IHBvcyA+PSAwICYmIHN0cltwb3NdID09ICcgJzsgcG9zLS0p
IHsKLSAgICAgICAgY2hhcnNUb0Nob3BPZmZFbmQrKzsKLSAgICB9Ci0gICAgaWYgKGNoYXJzVG9D
aG9wT2ZmRW5kID4gMCkgewotICAgICAgICBjaGFyICpuZXdTdHJCdWZmZXIgPSAoY2hhciAqKWZh
c3RNYWxsb2MoKGxlbiArIDEpIC0gY2hhcnNUb0Nob3BPZmZFbmQpOwotICAgICAgICBzdHJuY3B5
KG5ld1N0ckJ1ZmZlciwgc3RyLCBsZW4gLSBjaGFyc1RvQ2hvcE9mZkVuZCk7Ci0gICAgICAgIG5l
d1N0ckJ1ZmZlcltsZW4gLSBjaGFyc1RvQ2hvcE9mZkVuZF0gPSAnXDAnOwotICAgICAgICBmYXN0
RnJlZShzdHJCdWZmZXIpOwotICAgICAgICBzdHJCdWZmZXIgPSBuZXdTdHJCdWZmZXI7Ci0gICAg
ICAgIHN0ciA9IHN0ckJ1ZmZlcjsKKyAgICAvLyBXb3JrYXJvdW5kIGZvciBzaXRlcyB0aGF0IHB1
dCBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hpdGVzcGFjZQorICAgIC8vIG9uIFVS
TCByZWZlcmVuY2VzLgorICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBzdHJCdWZmZXIuZGF0YSgpOwor
ICAgIHVuc2lnbmVkIHN0ckxlbiA9IHN0ckJ1ZmZlci5zaXplKCk7CisgICAgd2hpbGUgKHN0ckxl
biA+IDAgJiYgc2hvdWxkVHJpbUZyb21VUkwoKnN0cikpIHsKKyAgICAgICAgc3RyKys7CisgICAg
ICAgIHN0ckxlbi0tOwogICAgIH0KKyAgICB3aGlsZSAoc3RyTGVuID4gMCAmJiBzdHJbc3RyTGVu
IC0gMV0gPT0gJyAnKQorICAgICAgICBzdHJMZW4tLTsKIAogICAgIC8vIEFjY29yZGluZyB0byB0
aGUgUkZDLCB0aGUgcmVmZXJlbmNlIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhbgogICAgIC8v
IGFic29sdXRlIFVSSSBpZiBwb3NzaWJsZSwgdXNpbmcgdGhlICJsZWZ0bW9zdCwgbG9uZ2VzdCIK
ICAgICAvLyBhbGdvcml0aG0uIElmIHRoZSBVUkkgcmVmZXJlbmNlIGlzIGFic29sdXRlIGl0IHdp
bGwgaGF2ZSBhCiAgICAgLy8gc2NoZW1lLCBtZWFuaW5nIHRoYXQgaXQgd2lsbCBoYXZlIGEgY29s
b24gYmVmb3JlIHRoZSBmaXJzdAogICAgIC8vIG5vbi1zY2hlbWUgZWxlbWVudC4KLSAgICBjb25z
dCBjaGFyICpwID0gc3RyOwotICAgIGlmIChpc1NjaGVtZUZpcnN0Q2hhcigqcCkpIHsKKyAgICBj
b25zdCBVQ2hhciAqcCA9IHN0cjsKKyAgICBpZiAocCA8ICZzdHJbc3RyTGVuXSAmJiBpc1NjaGVt
ZUZpcnN0Q2hhcigqcCkpIHsKICAgICAgICAgKytwOwotICAgICAgICB3aGlsZSAoaXNTY2hlbWVD
aGFyKCpwKSkgeworICAgICAgICB3aGlsZSAocCA8ICZzdHJbc3RyTGVuXSAmJiBpc1NjaGVtZUNo
YXIoKnApKQogICAgICAgICAgICAgKytwOwotICAgICAgICB9Ci0gICAgICAgIGlmICgqcCA9PSAn
OicpIHsKLSAgICAgICAgICAgIGlmIChwWzFdICE9ICcvJyAmJiBiYXNlLnByb3RvY29sKCkubG93
ZXIoKSA9PSBEZXByZWNhdGVkU3RyaW5nKHN0ciwgcCAtIHN0cikubG93ZXIoKSAmJiBiYXNlLmlz
SGllcmFyY2hpY2FsKCkpCisgICAgICAgIGlmIChwIDwgJnN0cltzdHJMZW5dICYmICpwID09ICc6
JykgeworICAgICAgICAgICAgaWYgKHAgPCAmc3RyW3N0ckxlbiAtIDFdICYmIHBbMV0gIT0gJy8n
ICYmIGJhc2UuaXNIaWVyYXJjaGljYWwoKSAmJgorICAgICAgICAgICAgICAgICAgICBzdGFydHNX
aXRoSWdub3JlQ2FzZShiYXNlLm1fdXJsLmNoYXJhY3RlcnMoKSwgYmFzZS5zY2hlbWVFbmRQb3Ms
IHN0ciwgcCAtIHN0cikpCiAgICAgICAgICAgICAgICAgc3RyID0gcCArIDE7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgYWJzb2x1dGUgPSB0cnVlOwpAQCAtMzQ2LDE5ICs1MDEs
MjAgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgIH0KIAog
ICAgIGlmIChhYnNvbHV0ZSkgewotICAgICAgICBwYXJzZShzdHIsIChhbGxBU0NJSSAmJiAhc3Ry
aXBwZWRTdGFydCAmJiAoY2hhcnNUb0Nob3BPZmZFbmQgPT0gMCkpID8gJnJlbCA6IDApOworICAg
ICAgICAvLyBQYXNzIHRoZSByZWxhdGl2ZSBhcmd1bWVudCBmb3IgdGhlIG9yaWdpbmFsIHN0cmlu
Zy4gV2hlbiB0aGlzCisgICAgICAgIC8vIHJlbGF0aXZlIGFyZ3VtZW50IGlzIGFic29sdXRlIGFu
ZCB1bmNoYW5nZWQsIHRoaXMgd2lsbCBwcmV2ZW50IGEgY29weS4KKyAgICAgICAgcGFyc2Uoc3Ry
LCBzdHJMZW4sICZyZWwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHRoZSBiYXNlIGlz
IGVtcHR5IG9yIG9wYXF1ZSAoZS5nLiBkYXRhOiBvciBqYXZhc2NyaXB0OiksIHRoZW4gdGhlIFVS
TCBpcyBpbnZhbGlkCiAgICAgICAgIC8vIHVubGVzcyB0aGUgcmVsYXRpdmUgVVJMIGlzIGEgc2lu
Z2xlIGZyYWdtZW50LgogICAgICAgICBpZiAoIWJhc2UuaXNIaWVyYXJjaGljYWwoKSkgewogICAg
ICAgICAgICAgaWYgKHN0clswXSA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVk
U3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5xdWVyeUVuZFBvcykgKyBz
dHI7Ci0gICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAg
ICAgICAgICAgICAgIFRlbXBVQ2hhckJ1ZmZlciBuZXdVUkw7CisgICAgICAgICAgICAgICAgbmV3
VVJMLmFwcGVuZChiYXNlLm1fdXJsLmNoYXJhY3RlcnMoKSwgYmFzZS5xdWVyeUVuZFBvcyk7Cisg
ICAgICAgICAgICAgICAgbmV3VVJMLmFwcGVuZChzdHIsIHN0ckxlbik7CisgICAgICAgICAgICAg
ICAgcGFyc2UobmV3VVJMLmRhdGEoKSwgbmV3VVJMLnNpemUoKSwgMCk7CiAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHN0ckJ1ZmZlcikKLSAgICAgICAgICAgICAgICBmYXN0RnJlZShzdHJC
dWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM3MywxNSArNTI5
LDE5IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAg
Y2FzZSAnIyc6CiAgICAgICAgICAgICAvLyBtdXN0IGJlIGZyYWdtZW50LW9ubHkgcmVmZXJlbmNl
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwg
PSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2UucXVlcnlFbmRQb3MpICsgc3RyOwotICAgICAgICAg
ICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgICAgICAgICBU
ZW1wVUNoYXJCdWZmZXIgbmV3VVJMOworICAgICAgICAgICAgICAgIG5ld1VSTC5hcHBlbmQoYmFz
ZS5tX3VybC5jaGFyYWN0ZXJzKCksIGJhc2UucXVlcnlFbmRQb3MpOworICAgICAgICAgICAgICAg
IG5ld1VSTC5hcHBlbmQoc3RyLCBzdHJMZW4pOworICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VS
TC5kYXRhKCksIG5ld1VSTC5zaXplKCksIDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgIC8vIHF1ZXJ5LW9ubHkg
cmVmZXJlbmNlLCBzcGVjaWFsIGNhc2UgbmVlZGVkIGZvciBub24tVVJMIHJlc3VsdHMKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2Uu
dXJsU3RyaW5nLmxlZnQoYmFzZS5wYXRoRW5kUG9zKSArIHN0cjsKLSAgICAgICAgICAgICAgICBw
YXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgICAgICAgICAgVGVtcFVDaGFy
QnVmZmVyIG5ld1VSTDsKKyAgICAgICAgICAgICAgICBuZXdVUkwuYXBwZW5kKGJhc2UubV91cmwu
Y2hhcmFjdGVycygpLCBiYXNlLnBhdGhFbmRQb3MpOworICAgICAgICAgICAgICAgIG5ld1VSTC5h
cHBlbmQoc3RyLCBzdHJMZW4pOworICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5kYXRhKCks
IG5ld1VSTC5zaXplKCksIDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICBjYXNlICcvJzoKQEAgLTM4OSwxMiArNTQ5LDE2IEBAIHZvaWQgS1VSTDo6aW5p
dChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBpZiAoc3RyWzFdID09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAvLyBuZXQtcGF0aAot
ICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3Ry
aW5nLmxlZnQoYmFzZS5zY2hlbWVFbmRQb3MgKyAxKSArIHN0cjsKLSAgICAgICAgICAgICAgICAg
ICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICAgICAgICAgICAgICBU
ZW1wVUNoYXJCdWZmZXIgbmV3VVJMOworICAgICAgICAgICAgICAgICAgICBuZXdVUkwuYXBwZW5k
KGJhc2UubV91cmwuY2hhcmFjdGVycygpLCBiYXNlLnNjaGVtZUVuZFBvcyArIDEpOworICAgICAg
ICAgICAgICAgICAgICBuZXdVUkwuYXBwZW5kKHN0ciwgc3RyTGVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyc2UobmV3VVJMLmRhdGEoKSwgbmV3VVJMLnNpemUoKSwgMCk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gYWJzLXBhdGgKLSAgICAgICAg
ICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0
KGJhc2UucG9ydEVuZFBvcykgKyBzdHI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VS
TC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgICAgICAgICAgICAgVGVtcFVDaGFyQnVmZmVy
IG5ld1VSTDsKKyAgICAgICAgICAgICAgICAgICAgbmV3VVJMLmFwcGVuZChiYXNlLm1fdXJsLmNo
YXJhY3RlcnMoKSwgYmFzZS5wb3J0RW5kUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3VVJM
LmFwcGVuZChzdHIsIHN0ckxlbik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5k
YXRhKCksIG5ld1VSTC5zaXplKCksIDApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQwMiw4OCArNTY2LDgwIEBAIHZvaWQgS1VS
TDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAvLyBtdXN0IGJlIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlCiAKLSAgICAgICAgICAg
ICAgICAvLyBCYXNlIHBhcnQgcGx1cyByZWxhdGl2ZSBwYXJ0IHBsdXMgb25lIHBvc3NpYmxlIHNs
YXNoIGFkZGVkIGluIGJldHdlZW4gcGx1cyB0ZXJtaW5hdGluZyBcMCBieXRlLgotICAgICAgICAg
ICAgICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBidWZmZXIoYmFzZS5wYXRoRW5kUG9zICsgMSArIHN0
cmxlbihzdHIpICsgMSk7CisgICAgICAgICAgICAgICAgLy8gQmFzZSBwYXJ0IHBsdXMgcmVsYXRp
dmUgcGFydCBwbHVzIG9uZSBwb3NzaWJsZSBzbGFzaCBhZGRlZCBpbiBiZXR3ZWVuIChubyBOVUxM
IHRlcm1pbmF0b3IpLgorICAgICAgICAgICAgICAgIFRlbXBVQ2hhckJ1ZmZlciBidWZmZXIoYmFz
ZS5wYXRoRW5kUG9zICsgMSArIHN0ckxlbik7CisKKyAgICAgICAgICAgICAgICBVQ2hhciAqYnVm
ZmVyUG9zID0gYnVmZmVyLmRhdGEoKTsKIAotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlclBv
cyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8g
Zmlyc3QgY29weSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcGF0aCBmcm9tIHRoZSBiYXNlCi0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZyA9IGJhc2UudXJsU3RyaW5nLmFzY2lp
KCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1N0YXJ0ID0gYmFzZVN0
cmluZzsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoU3RhcnQgPSBiYXNlU3RyaW5n
U3RhcnQgKyBiYXNlLnBvcnRFbmRQb3M7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJhc2VTdHJp
bmdTdGFydCA8IHBhdGhTdGFydCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiYXNl
U3RyaW5nID0gYmFzZS5tX3VybC5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
VUNoYXIqIGJhc2VTdHJpbmdTdGFydCA9IGJhc2VTdHJpbmc7CisgICAgICAgICAgICAgICAgY29u
c3QgVUNoYXIqIHBhdGhTdGFydCA9IGJhc2VTdHJpbmdTdGFydCArIGJhc2UucG9ydEVuZFBvczsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ1N0YXJ0IDwgcGF0aFN0YXJ0KQogICAg
ICAgICAgICAgICAgICAgICAqYnVmZmVyUG9zKysgPSAqYmFzZVN0cmluZ1N0YXJ0Kys7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlclBhdGhTdGFydCA9IGJ1
ZmZlclBvczsKKyAgICAgICAgICAgICAgICBVQ2hhciAqYnVmZmVyUGF0aFN0YXJ0ID0gYnVmZmVy
UG9zOworCisgICAgICAgICAgICAgICAgLy8gbm93IGNvcHkgdGhlIGJhc2UgcGF0aAorICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBiYXNlU3RyaW5nRW5kID0gYmFzZVN0cmluZyArIGJhc2Uu
cGF0aEVuZFBvczsKIAotICAgICAgICAgICAgICAgIC8vIG5vdyBjb3B5IHRoZSBiYXNlIHBhdGgg
Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ0VuZCA9IGJhc2VTdHJpbmcg
KyBiYXNlLnBhdGhFbmRQb3M7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8g
Z28gYmFjayB0byB0aGUgbGFzdCBzbGFzaAotICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlU3Ry
aW5nRW5kID4gYmFzZVN0cmluZ1N0YXJ0ICYmIGJhc2VTdHJpbmdFbmRbLTFdICE9ICcvJykgewor
ICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nRW5kID4gYmFzZVN0cmluZ1N0YXJ0ICYm
IGJhc2VTdHJpbmdFbmRbLTFdICE9ICcvJykKICAgICAgICAgICAgICAgICAgICAgYmFzZVN0cmlu
Z0VuZC0tOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAg
ICAgICAgIGlmIChiYXNlU3RyaW5nRW5kID09IGJhc2VTdHJpbmdTdGFydCkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBubyBwYXRoIGluIGJhc2UsIGFkZCBhIHBhdGggc2VwYXJhdG9yIGlmIG5l
Y2Vzc2FyeQotICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZS5zY2hlbWVFbmRQb3MgKyAxICE9
IGJhc2UucGF0aEVuZFBvcyAmJiAqc3RyICE9ICdcMCcgJiYgKnN0ciAhPSAnPycgJiYgKnN0ciAh
PSAnIycpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2Uuc2NoZW1lRW5kUG9zICsgMSAh
PSBiYXNlLnBhdGhFbmRQb3MgJiYgKnN0ciAhPSAnXDAnICYmICpzdHIgIT0gJz8nICYmICpzdHIg
IT0gJyMnKQogICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlclBvcysrID0gJy8nOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyUG9zICs9IGNvcHlQYXRoUmVt
b3ZpbmdEb3RzKGJ1ZmZlclBvcywgYmFzZVN0cmluZ1N0YXJ0LCAwLCBiYXNlU3RyaW5nRW5kIC0g
YmFzZVN0cmluZ1N0YXJ0KTsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpyZWxTdHJpbmdTdGFydCA9IHN0cjsKLSAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpyZWxTdHJpbmdQb3MgPSByZWxTdHJpbmdTdGFydDsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoKnJlbFN0cmluZ1BvcyAhPSAnXDAnICYmICpyZWxTdHJpbmdQ
b3MgIT0gJz8nICYmICpyZWxTdHJpbmdQb3MgIT0gJyMnKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgVUNoYXIqIHJlbFN0cmluZ1N0YXJ0ID0gc3RyOworICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiByZWxTdHJpbmdQb3MgPSByZWxTdHJpbmdTdGFydDsKKyAgICAgICAgICAgICAgICBjb25z
dCBVQ2hhciogcmVsU3RyaW5nRW5kID0gJnN0cltzdHJMZW5dOworCisgICAgICAgICAgICAgICAg
d2hpbGUgKHJlbFN0cmluZ1BvcyA8IHJlbFN0cmluZ0VuZCAmJiAqcmVsU3RyaW5nUG9zICE9ICc/
JyAmJiAqcmVsU3RyaW5nUG9zICE9ICcjJykgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVs
U3RyaW5nUG9zWzBdID09ICcuJyAmJiBidWZmZXJQb3NbLTFdID09ICcvJykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKHJlbFN0cmluZ1Bvc1sxXSkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgIi4iIHNlZ21lbnQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJpbmdQb3MgKz0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09ICcvJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8nKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJpbmdQb3MrKzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlbFN0cmluZ1Bvc1sxXSA9PSAnLicg
JiYgaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzJdKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChyZWxTdHJpbmdQb3MgPCByZWxTdHJpbmdFbmQgLSAxICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1Bvc1sxXSA9PSAn
LicgJiYgaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzJdKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLi4iIHNlZ21lbnQgYW5kIHJld2luZCB0
aGUgbGFzdCBzZWdtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFJGQyBs
ZWF2ZXMgaXQgdXAgdG8gdGhlIGFwcCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGV4Y2Vzcwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICIuLiIgc2VnbWVudHMgLSB3ZSBjaG9vc2Ug
dG8gZHJvcCB0aGVtIHNpbmNlIHNvbWUgd2ViIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyByZWxpZXMgb24gdGhpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWxTdHJpbmdQb3MgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsU3Ry
aW5nUG9zWzBdID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxT
dHJpbmdQb3MgPCByZWxTdHJpbmdFbmQgJiYgcmVsU3RyaW5nUG9zWzBdID09ICcvJykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zKys7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJQ
b3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFydCArIDEpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlclBvcy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyUG9zID4gYnVmZmVyUGF0
aFN0YXJ0ICsgMSAgJiYgYnVmZmVyUG9zWy0xXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSAgJiYgYnVm
ZmVyUG9zWy0xXSAhPSAnLycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
clBvcy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAg
ICAqYnVmZmVyUG9zID0gKnJlbFN0cmluZ1BvczsKICAgICAgICAgICAgICAgICAgICAgcmVsU3Ry
aW5nUG9zKys7CiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcysrOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIGFsbCBkb25lIHdpdGggdGhlIHBhdGggd29yaywg
bm93IGNvcHkgYW55IHJlbWFpbmRlcgotICAgICAgICAgICAgICAgIC8vIG9mIHRoZSByZWxhdGl2
ZSByZWZlcmVuY2U7IHRoaXMgd2lsbCBhbHNvIGFkZCBhIG51bGwgdGVybWluYXRvcgotICAgICAg
ICAgICAgICAgIHN0cmNweShidWZmZXJQb3MsIHJlbFN0cmluZ1Bvcyk7Ci0KLSAgICAgICAgICAg
ICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlci5kYXRhKCkpICsgMSA8PSBidWZmZXIuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICAvLyBBbGwgZG9uZSB3aXRoIHRoZSBwYXRoIHdvcmssIG5vdyBj
b3B5IGFueSByZW1haW5kZXIKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgcmVsYXRpdmUgcmVm
ZXJlbmNlLgorICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlbWFpbmRlciA9ICZzdHJbc3RyTGVu
XSAtIHJlbFN0cmluZ1BvczsKKyAgICAgICAgICAgICAgICBtZW1jcHkoYnVmZmVyUG9zLCByZWxT
dHJpbmdQb3MsIHJlbWFpbmRlciAqIHNpemVvZihVQ2hhcikpOworCisgICAgICAgICAgICAgICAg
Ly8gVGhlIHNpemVvZiB0aGUgYnVmZmVyIHdpbGwgZW50aXJlbHkgdXNlZCBvbmx5IHdoZW4gdGhl
cmUgaXMgYSBzbGFzaAorICAgICAgICAgICAgICAgIC8vIGFkZGVkLCBzbyB3ZSBuZWVkIHRvIGNv
bXB1dGUgaXQuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYnVmZmVyVXNlZCA9IGJ1ZmZlclBv
cyAtIGJ1ZmZlci5kYXRhKCkgKyByZW1haW5kZXI7CisgICAgICAgICAgICAgICAgcGFyc2UoYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyVXNlZCwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKHN0ckJ1ZmZlcikgewot
ICAgICAgICBmYXN0RnJlZShzdHJCdWZmZXIpOwotICAgIH0KIH0KIAogYm9vbCBLVVJMOjpoYXNQ
YXRoKCkgY29uc3QKQEAgLTQ5MSw4OSArNjQ3LDc4IEBAIGJvb2wgS1VSTDo6aGFzUGF0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIG1faXNWYWxpZCAmJiBwYXRoRW5kUG9zICE9IHBvcnRFbmRQb3M7CiB9
CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21wb25lbnQoKSBjb25zdAorU3Ry
aW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKIHsKICAgICBpZiAoIWhhc1BhdGgo
KSkKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCiAgICAgaW50IGVuZCA9IHBhdGhFbmRQb3MgLSAxOwotICAgIGlmICh1cmxTdHJp
bmdbZW5kXSA9PSAnLycpCisgICAgaWYgKG1fdXJsW2VuZF0gPT0gJy8nKQogICAgICAgICAtLWVu
ZDsKIAotICAgIGludCBzdGFydCA9IHVybFN0cmluZy5maW5kUmV2KCcvJywgZW5kKTsKKyAgICBp
bnQgc3RhcnQgPSBtX3VybC5yZXZlcnNlRmluZCgnLycsIGVuZCk7CiAgICAgaWYgKHN0YXJ0IDwg
cG9ydEVuZFBvcykKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgICsrc3RhcnQ7CiAKLSAgICByZXR1cm4gdXJsU3RyaW5nLm1p
ZChzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKKyAgICByZXR1cm4gbV91cmwuc3Vic3RyaW5nKHN0
YXJ0LCBlbmQgLSBzdGFydCArIDEpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnByb3Rv
Y29sKCkgY29uc3QKK1N0cmluZyBLVVJMOjpwcm90b2NvbCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9Cisg
ICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVy
biB1cmxTdHJpbmcubGVmdChzY2hlbWVFbmRQb3MpOworICAgIHJldHVybiBtX3VybC5sZWZ0KHNj
aGVtZUVuZFBvcyk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0CitT
dHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAg
ICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9CisgICAgaWYgKCFtX2lzVmFsaWQp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGludCBzdGFydCA9IChwYXNzd29yZEVu
ZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyAr
IDE7Ci0gICAgcmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3RyaW5nLm1pZChzdGFydCwgaG9zdEVu
ZFBvcyAtIHN0YXJ0KSk7CisgICAgcmV0dXJuIG1fdXJsLnN1YnN0cmluZyhzdGFydCwgaG9zdEVu
ZFBvcyAtIHN0YXJ0KTsKIH0KIAogdW5zaWduZWQgc2hvcnQgaW50IEtVUkw6OnBvcnQoKSBjb25z
dAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7CisgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAg
IHJldHVybiAwOwotICAgIH0KIAogICAgIGlmIChob3N0RW5kUG9zICE9IHBvcnRFbmRQb3MpIHsK
ICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzdWx0ID0gdXJsU3Ry
aW5nLm1pZChob3N0RW5kUG9zICsgMSwgcG9ydEVuZFBvcyAtIGhvc3RFbmRQb3MgLSAxKS50b1VT
aG9ydCgmb2spOwotICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHJl
c3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihtX3VybC5zdWJzdHJpbmcoCisgICAg
ICAgICAgICAgICAgICAgIGhvc3RFbmRQb3MgKyAxLCBwb3J0RW5kUG9zIC0gaG9zdEVuZFBvcyAt
IDEpLnRvSW50KCZvaykpOworICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgcmVzdWx0ID0g
MDsKLSAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLQogICAgIHJldHVy
biAwOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnBhc3MoKSBjb25zdAorU3RyaW5nIEtV
Ukw6OnBhc3MoKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVy
biBEZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgaWYgKHBhc3N3b3JkRW5kUG9zID09
IHVzZXJFbmRQb3MpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9
CisgICAgaWYgKCFtX2lzVmFsaWQgfHwgcGFzc3dvcmRFbmRQb3MgPT0gdXNlckVuZFBvcykKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3Ry
aW5nLm1pZCh1c2VyRW5kUG9zICsgMSwgcGFzc3dvcmRFbmRQb3MgLSB1c2VyRW5kUG9zIC0gMSkp
OyAKKyAgICByZXR1cm4gZGVjb2RlX3N0cmluZyhtX3VybC5zdWJzdHJpbmcodXNlckVuZFBvcyAr
IDEsIHBhc3N3b3JkRW5kUG9zIC0gdXNlckVuZFBvcyAtIDEpKTsgCiB9CiAKLURlcHJlY2F0ZWRT
dHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0CitTdHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsK
LSAgICB9CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5taWQodXNlclN0YXJ0UG9zLCB1c2Vy
RW5kUG9zIC0gdXNlclN0YXJ0UG9zKSk7CisgICAgcmV0dXJuIGRlY29kZV9zdHJpbmcobV91cmwu
c3Vic3RyaW5nKHVzZXJTdGFydFBvcywgdXNlckVuZFBvcyAtIHVzZXJTdGFydFBvcykpOwogfQog
Ci1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnJlZigpIGNvbnN0CitTdHJpbmcgS1VSTDo6cmVmKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCB8fCBmcmFnbWVudEVuZFBvcyA9PSBxdWVyeUVu
ZFBvcykgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0KKyAgICBp
ZiAoIW1faXNWYWxpZCB8fCBmcmFnbWVudEVuZFBvcyA9PSBxdWVyeUVuZFBvcykKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybFN0cmluZy5taWQocXVlcnlFbmRQb3Mg
KyAxLCBmcmFnbWVudEVuZFBvcyAtIChxdWVyeUVuZFBvcyArIDEpKTsKKyAgICByZXR1cm4gbV91
cmwuc3Vic3RyaW5nKHF1ZXJ5RW5kUG9zICsgMSwgZnJhZ21lbnRFbmRQb3MgLSAocXVlcnlFbmRQ
b3MgKyAxKSk7CiB9CiAKIGJvb2wgS1VSTDo6aGFzUmVmKCkgY29uc3QKQEAgLTU4MSw0NCArNzI2
LDY2IEBAIGJvb2wgS1VSTDo6aGFzUmVmKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1ZhbGlkICYm
IGZyYWdtZW50RW5kUG9zICE9IHF1ZXJ5RW5kUG9zOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtV
Ukw6OnF1ZXJ5KCkgY29uc3QKK2Jvb2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBjaGFyKiBwcm90
bykgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4gRGVwcmVj
YXRlZFN0cmluZygpOwotICAgIH0KKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBzdGFydHNXaXRoSWdub3JlQ2FzZShtX3VybC5jaGFyYWN0ZXJz
KCksIHNjaGVtZUVuZFBvcywgcHJvdG8sIHN0cmxlbihwcm90bykpOworfQogCi0gICAgcmV0dXJu
IHVybFN0cmluZy5taWQocGF0aEVuZFBvcywgcXVlcnlFbmRQb3MgLSBwYXRoRW5kUG9zKTsgCitT
dHJpbmcgS1VSTDo6cXVlcnkoKSBjb25zdAoreworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gbV91cmwuc3Vic3RyaW5nKHBhdGhFbmRQ
b3MsIHF1ZXJ5RW5kUG9zIC0gcGF0aEVuZFBvcyk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VS
TDo6cGF0aCgpIGNvbnN0CitTdHJpbmcgS1VSTDo6cGF0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9Cisg
ICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVy
biBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5taWQocG9ydEVuZFBvcywgcGF0aEVuZFBvcyAtIHBv
cnRFbmRQb3MpKTsgCisgICAgcmV0dXJuIGRlY29kZV9zdHJpbmcobV91cmwuc3Vic3RyaW5nKHBv
cnRFbmRQb3MsIHBhdGhFbmRQb3MgLSBwb3J0RW5kUG9zKSk7CiB9CiAKLXZvaWQgS1VSTDo6c2V0
UHJvdG9jb2woY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0UHJvdG9j
b2woY29uc3QgU3RyaW5nICZzKQogeworICAgIFRlbXBVQ2hhckJ1ZmZlciBuZXdVUkw7CiAgICAg
aWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBzICsg
IjoiICsgdXJsU3RyaW5nOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7
CisgICAgICAgIC8vIFNvbWUgY29kZSB3aWxsIGNyZWF0ZSBhbiBlbXB0eSBLVVJMLCB0aGVuIHNl
dCB0aGUgcHJvdG9jb2wsIGhvc3QsCisgICAgICAgIC8vIHBhdGgsIGV0Yy4gaW5kaXZpZHVhbGx5
LiBUaGlzIGNvZGUgdGhlcmVmb3JlIHByZXBlbmRzIGEgbmV3IHByb3RvY29sCisgICAgICAgIC8v
IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBhc3N1bWluZyB0aGlzIHBhdHRlcm4uIFRo
aXMgc2VlbXMKKyAgICAgICAgLy8ga2luZCBvZiBkYW5nZXJvdXMuCisgICAgICAgIG5ld1VSTC5h
cHBlbmQocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOworICAgICAgICBuZXdVUkwuYXBwZW5k
KCc6Jyk7CisgICAgICAgIGlmICghbV91cmwuaXNFbXB0eSgpKQorICAgICAgICAgICAgbmV3VVJM
LmFwcGVuZChtX3VybC5jaGFyYWN0ZXJzKCksIG1fdXJsLmxlbmd0aCgpKTsKKyAgICAgICAgcGFy
c2UobmV3VVJMLmRhdGEoKSwgbmV3VVJMLnNpemUoKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHMgKyB1cmxTdHJpbmcubWlkKHNj
aGVtZUVuZFBvcyk7Ci0gICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgIGlm
ICghcy5pc0VtcHR5KCkpCisgICAgICAgIG5ld1VSTC5hcHBlbmQocy5jaGFyYWN0ZXJzKCksIHMu
bGVuZ3RoKCkpOworICAgIG5ld1VSTC5hcHBlbmQoJm1fdXJsLmNoYXJhY3RlcnMoKVtzY2hlbWVF
bmRQb3NdLCBtX3VybC5sZW5ndGgoKSAtIHNjaGVtZUVuZFBvcyk7CisgICAgcGFyc2UobmV3VVJM
LmRhdGEoKSwgbmV3VVJMLnNpemUoKSwgMCk7CiB9CiAKLXZvaWQgS1VSTDo6c2V0SG9zdChjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZzKQordm9pZCBLVVJMOjpzZXRIb3N0KGNvbnN0IFN0cmluZyAm
cykKIHsKICAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIGJvb2wgc2xhc2hTbGFzaE5lZWRl
ZCA9IHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxOwogICAgICAgICBpbnQgaG9zdFN0
YXJ0ID0gKHBhc3N3b3JkRW5kUG9zID09IHVzZXJTdGFydFBvcykgPyBwYXNzd29yZEVuZFBvcyA6
IHBhc3N3b3JkRW5kUG9zICsgMTsKLSAgICAgICAgCi0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcg
bmV3VVJMID0gdXJsU3RyaW5nLmxlZnQoaG9zdFN0YXJ0KSArIChzbGFzaFNsYXNoTmVlZGVkID8g
Ii8vIiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBzICsgdXJsU3RyaW5nLm1pZChob3N0RW5kUG9z
KTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworCisgICAgICAgIFRl
bXBVQ2hhckJ1ZmZlciBuZXdVUkw7CisgICAgICAgIG5ld1VSTC5hcHBlbmQobV91cmwuY2hhcmFj
dGVycygpLCBob3N0U3RhcnQpOworICAgICAgICBpZiAodXNlclN0YXJ0UG9zID09IHNjaGVtZUVu
ZFBvcyArIDEpIHsKKyAgICAgICAgICAgIG5ld1VSTC5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAg
IG5ld1VSTC5hcHBlbmQoJy8nKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXMuaXNFbXB0eSgp
KQorICAgICAgICAgICAgbmV3VVJMLmFwcGVuZChzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSk7
ICAvLyBOZXcgaG9zdC4KKyAgICAgICAgbmV3VVJMLmFwcGVuZCgmbV91cmwuY2hhcmFjdGVycygp
W2hvc3RFbmRQb3NdLCBtX3VybC5sZW5ndGgoKSAtIGhvc3RFbmRQb3MpOworICAgICAgICBwYXJz
ZShuZXdVUkwuZGF0YSgpLCBuZXdVUkwuc2l6ZSgpLCAwKTsKICAgICB9CiB9CiAKQEAgLTYyNywx
MDcgKzc5NCwxNTcgQEAgdm9pZCBLVVJMOjpzZXRQb3J0KHVuc2lnbmVkIHNob3J0IGkpCiAgICAg
aWYgKG1faXNWYWxpZCkgewogICAgICAgICBib29sIGNvbG9uTmVlZGVkID0gcG9ydEVuZFBvcyA9
PSBob3N0RW5kUG9zOwogICAgICAgICBpbnQgcG9ydFN0YXJ0ID0gKGNvbG9uTmVlZGVkID8gaG9z
dEVuZFBvcyA6IGhvc3RFbmRQb3MgKyAxKTsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdV
UkwgPSB1cmxTdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVkID8gIjoiIDogRGVw
cmVjYXRlZFN0cmluZygpKSArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpKSArIHVybFN0cmlu
Zy5taWQocG9ydEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJM
KTsKKworICAgICAgICBTdHJpbmcgbnVtYmVyU3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaSk7CisK
KyAgICAgICAgVGVtcFVDaGFyQnVmZmVyIG5ld1VSTDsKKyAgICAgICAgbmV3VVJMLmFwcGVuZCht
X3VybC5jaGFyYWN0ZXJzKCksIHBvcnRTdGFydCk7CisgICAgICAgIGlmIChjb2xvbk5lZWRlZCkK
KyAgICAgICAgICAgIG5ld1VSTC5hcHBlbmQoJzonKTsKKyAgICAgICAgbmV3VVJMLmFwcGVuZChu
dW1iZXJTdHJpbmcuY2hhcmFjdGVycygpLCBudW1iZXJTdHJpbmcubGVuZ3RoKCkpOworICAgICAg
ICBuZXdVUkwuYXBwZW5kKCZtX3VybC5jaGFyYWN0ZXJzKClbcG9ydEVuZFBvc10sIG1fdXJsLmxl
bmd0aCgpIC0gcG9ydEVuZFBvcyk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5kYXRhKCksIG5ld1VS
TC5zaXplKCksIDApOwogICAgIH0KIH0KIAotdm9pZCBLVVJMOjpzZXRIb3N0QW5kUG9ydChjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiBob3N0QW5kUG9ydCkKK3ZvaWQgS1VSTDo6c2V0SG9zdEFuZFBv
cnQoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCkKIHsKICAgICBpZiAobV9pc1ZhbGlkKSB7Ci0g
ICAgICAgIGJvb2wgc2xhc2hTbGFzaE5lZWRlZCA9IHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQ
b3MgKyAxOwogICAgICAgICBpbnQgaG9zdFN0YXJ0ID0gKHBhc3N3b3JkRW5kUG9zID09IHVzZXJT
dGFydFBvcykgPyBwYXNzd29yZEVuZFBvcyA6IHBhc3N3b3JkRW5kUG9zICsgMTsKLSAgICAgICAg
Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQoaG9zdFN0
YXJ0KSArIChzbGFzaFNsYXNoTmVlZGVkID8gIi8vIiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBo
b3N0QW5kUG9ydCArIHVybFN0cmluZy5taWQocG9ydEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5l
d1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKworICAgICAgICBUZW1wVUNoYXJCdWZmZXIgbmV3VVJM
OworICAgICAgICBuZXdVUkwuYXBwZW5kKG1fdXJsLmNoYXJhY3RlcnMoKSwgaG9zdFN0YXJ0KTsK
KyAgICAgICAgaWYgKHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxKSB7CisgICAgICAg
ICAgICBuZXdVUkwuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICBuZXdVUkwuYXBwZW5kKCcvJyk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFob3N0QW5kUG9ydC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBuZXdVUkwuYXBwZW5kKGhvc3RBbmRQb3J0LmNoYXJhY3RlcnMoKSwgaG9zdEFuZFBvcnQu
bGVuZ3RoKCkpOworICAgICAgICBuZXdVUkwuYXBwZW5kKCZtX3VybC5jaGFyYWN0ZXJzKClbcG9y
dEVuZFBvc10sIG1fdXJsLmxlbmd0aCgpIC0gcG9ydEVuZFBvcyk7CisgICAgICAgIHBhcnNlKG5l
d1VSTC5kYXRhKCksIG5ld1VSTC5zaXplKCksIDApOwogICAgIH0KIH0KIAotdm9pZCBLVVJMOjpz
ZXRVc2VyKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnVzZXIpCit2b2lkIEtVUkw6OnNldFVzZXIo
Y29uc3QgU3RyaW5nJiB1c2VyKQogewogICAgIGlmIChtX2lzVmFsaWQpIHsKLSAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyB1OworICAgICAgICAvLyA5OS45OTklIG9mIHRoZSB0aW1lIHRoaXMgaXMg
Y2FsbGVkLCBpdCBpcyBiZWluZyB1c2VkIHRvIGNsZWFyIHRoZQorICAgICAgICAvLyB1c2VyLCBh
bmQgdGhlcmUgaXMgYWxyZWFkeSBubyB1c2VyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRo
aW5nLgorICAgICAgICBpZiAodXNlci5pc0VtcHR5KCkgJiYgdXNlckVuZFBvcyA9PSB1c2VyU3Rh
cnRQb3MgKyAxKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFRlbXBVQ2hhckJ1ZmZl
ciBuZXdVUkw7CisgICAgICAgIG5ld1VSTC5hcHBlbmQobV91cmwuY2hhcmFjdGVycygpLCB1c2Vy
U3RhcnRQb3MpOworCiAgICAgICAgIGludCBlbmQgPSB1c2VyRW5kUG9zOwogICAgICAgICBpZiAo
IXVzZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB1ID0gdXNlcjsKLSAgICAgICAgICAgIGlm
ICh1c2VyU3RhcnRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMSkKLSAgICAgICAgICAgICAgICB1ID0g
Ii8vIiArIHU7CisgICAgICAgICAgICBpZiAodXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyAr
IDEpIHsKKyAgICAgICAgICAgICAgICBuZXdVUkwuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAg
ICAgbmV3VVJMLmFwcGVuZCgnLycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF1
c2VyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBuZXdVUkwuYXBwZW5kKHVzZXIuY2hhcmFj
dGVycygpLCB1c2VyLmxlbmd0aCgpKTsKKwogICAgICAgICAgICAgLy8gQWRkICdAJyBpZiB3ZSBk
aWRuJ3QgaGF2ZSBvbmUgYmVmb3JlLgotICAgICAgICAgICAgaWYgKGVuZCA9PSBob3N0RW5kUG9z
IHx8IChlbmQgPT0gcGFzc3dvcmRFbmRQb3MgJiYgdXJsU3RyaW5nW2VuZF0gIT0gJ0AnKSkKLSAg
ICAgICAgICAgICAgICB1ICs9ICdAJzsKKyAgICAgICAgICAgIGlmIChlbmQgPT0gaG9zdEVuZFBv
cyB8fCAoZW5kID09IHBhc3N3b3JkRW5kUG9zICYmIG1fdXJsW2VuZF0gIT0gJ0AnKSkKKyAgICAg
ICAgICAgICAgICBuZXdVUkwuYXBwZW5kKCdAJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dv
cmQuCi0gICAgICAgICAgICBpZiAodXNlckVuZFBvcyA9PSBwYXNzd29yZEVuZFBvcyAmJiBlbmQg
IT0gaG9zdEVuZFBvcyAmJiB1cmxTdHJpbmdbZW5kXSA9PSAnQCcpCisgICAgICAgICAgICBpZiAo
dXNlckVuZFBvcyA9PSBwYXNzd29yZEVuZFBvcyAmJiBlbmQgIT0gaG9zdEVuZFBvcyAmJiBtX3Vy
bFtlbmRdID09ICdAJykKICAgICAgICAgICAgICAgICBlbmQgKz0gMTsKICAgICAgICAgfQotICAg
ICAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHVzZXJT
dGFydFBvcykgKyB1ICsgdXJsU3RyaW5nLm1pZChlbmQpOwotICAgICAgICBwYXJzZShuZXdVUkwu
YXNjaWkoKSwgJm5ld1VSTCk7CisKKyAgICAgICAgbmV3VVJMLmFwcGVuZCgmbV91cmwuY2hhcmFj
dGVycygpW2VuZF0sIG1fdXJsLmxlbmd0aCgpIC0gZW5kKTsKKyAgICAgICAgcGFyc2UobmV3VVJM
LmRhdGEoKSwgbmV3VVJMLnNpemUoKSwgMCk7CiAgICAgfQogfQogCi12b2lkIEtVUkw6OnNldFBh
c3MoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcGFzc3dvcmQpCit2b2lkIEtVUkw6OnNldFBhc3Mo
Y29uc3QgU3RyaW5nJiBwYXNzd29yZCkKIHsKICAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgcDsKKyAgICAgICAgLy8gOTkuOTk5JSBvZiB0aGUgdGltZSB0aGlz
IGlzIGNhbGxlZCwgaXQgaXMgYmVpbmcgdXNlZCB0byBjbGVhciB0aGUKKyAgICAgICAgLy8gcGFw
c3N3b3JkLCBhbmQgdGhlcmUgaXMgYWxyZWFkeSBub25lLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nLgorICAgICAgICBpZiAocGFzc3dvcmQuaXNFbXB0eSgpICYmIHBhc3N3b3JkRW5k
UG9zID09IHVzZXJFbmRQb3MpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVGVtcFVD
aGFyQnVmZmVyIG5ld1VSTDsKKyAgICAgICAgbmV3VVJMLmFwcGVuZChtX3VybC5jaGFyYWN0ZXJz
KCksIHVzZXJFbmRQb3MpOworCiAgICAgICAgIGludCBlbmQgPSBwYXNzd29yZEVuZFBvczsKICAg
ICAgICAgaWYgKCFwYXNzd29yZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHAgPSAnOicgKyBw
YXNzd29yZCArICdAJzsKLSAgICAgICAgICAgIGlmICh1c2VyRW5kUG9zID09IHNjaGVtZUVuZFBv
cyArIDEpCi0gICAgICAgICAgICAgICAgcCA9ICIvLyIgKyBwOworICAgICAgICAgICAgbmV3VVJM
LmFwcGVuZCgnOicpOworICAgICAgICAgICAgaWYgKHVzZXJFbmRQb3MgPT0gc2NoZW1lRW5kUG9z
ICsgMSkgeworICAgICAgICAgICAgICAgIG5ld1VSTC5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAg
ICAgICBuZXdVUkwuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXdV
UkwuYXBwZW5kKHBhc3N3b3JkLmNoYXJhY3RlcnMoKSwgcGFzc3dvcmQubGVuZ3RoKCkpOwogICAg
ICAgICAgICAgLy8gRWF0IHRoZSBleGlzdGluZyAnQCcgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGFk
ZCBvdXIgb3duLgotICAgICAgICAgICAgaWYgKGVuZCAhPSBob3N0RW5kUG9zICYmIHVybFN0cmlu
Z1tlbmRdID09ICdAJykKKyAgICAgICAgICAgIGlmIChlbmQgIT0gaG9zdEVuZFBvcyAmJiBtX3Vy
bFtlbmRdID09ICdAJykKICAgICAgICAgICAgICAgICBlbmQgKz0gMTsKKyAgICAgICAgICAgIG5l
d1VSTC5hcHBlbmQoJ0AnKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFJlbW92
ZSAnQCcgaWYgd2Ugbm93IGhhdmUgbmVpdGhlciB1c2VyIG5vciBwYXNzd29yZC4KLSAgICAgICAg
ICAgIGlmICh1c2VyU3RhcnRQb3MgPT0gdXNlckVuZFBvcyAmJiBlbmQgIT0gaG9zdEVuZFBvcyAm
JiB1cmxTdHJpbmdbZW5kXSA9PSAnQCcpCisgICAgICAgICAgICBpZiAodXNlclN0YXJ0UG9zID09
IHVzZXJFbmRQb3MgJiYgZW5kICE9IGhvc3RFbmRQb3MgJiYgbV91cmxbZW5kXSA9PSAnQCcpCiAg
ICAgICAgICAgICAgICAgZW5kICs9IDE7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgRGVwcmVj
YXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdCh1c2VyRW5kUG9zKSArIHAgKyB1cmxT
dHJpbmcubWlkKGVuZCk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsK
KyAgICAgICAgbmV3VVJMLmFwcGVuZCgmbV91cmwuY2hhcmFjdGVycygpW2VuZF0sIG1fdXJsLmxl
bmd0aCgpIC0gZW5kKTsKKyAgICAgICAgcGFyc2UobmV3VVJMLmRhdGEoKSwgbmV3VVJMLnNpemUo
KSwgMCk7CiAgICAgfQogfQogCi12b2lkIEtVUkw6OnNldFJlZihjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZzKQordm9pZCBLVVJMOjpzZXRSZWYoY29uc3QgU3RyaW5nJiBzKQogewogICAgIGlmICht
X2lzVmFsaWQpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcu
bGVmdChxdWVyeUVuZFBvcykgKyAocy5pc0VtcHR5KCkgPyBEZXByZWNhdGVkU3RyaW5nKCkgOiAi
IyIgKyBzKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAg
ICBUZW1wVUNoYXJCdWZmZXIgbmV3VVJMOworICAgICAgICBuZXdVUkwuYXBwZW5kKG1fdXJsLmNo
YXJhY3RlcnMoKSwgcXVlcnlFbmRQb3MpOworICAgICAgICBpZiAoIXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBuZXdVUkwuYXBwZW5kKCcjJyk7CisgICAgICAgICAgICBuZXdVUkwuYXBwZW5k
KHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgpKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZShu
ZXdVUkwuZGF0YSgpLCBuZXdVUkwuc2l6ZSgpLCAwKTsKICAgICB9CiB9CiAKLXZvaWQgS1VSTDo6
c2V0UXVlcnkoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcXVlcnkpCit2b2lkIEtVUkw6OnNldFF1
ZXJ5KGNvbnN0IFN0cmluZyYgcXVlcnkpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkgewotICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIHE7Ci0gICAgICAgIGlmICghcXVlcnkuaXNOdWxsKCkgJiYgKHF1
ZXJ5LmlzRW1wdHkoKSB8fCBxdWVyeVswXSAhPSAnPycpKSB7Ci0gICAgICAgICAgICBxID0gIj8i
ICsgcXVlcnk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBxID0gcXVlcnk7Ci0gICAg
ICAgIH0KKyAgICAgICAgVGVtcFVDaGFyQnVmZmVyIG5ld1VSTDsKKyAgICAgICAgbmV3VVJMLmFw
cGVuZChtX3VybC5jaGFyYWN0ZXJzKCksIHBhdGhFbmRQb3MpOwogCi0gICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocGF0aEVuZFBvcykgKyBxICsgdXJsU3Ry
aW5nLm1pZChxdWVyeUVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3
VVJMKTsKKyAgICAgICAgaWYgKCFxdWVyeS5pc051bGwoKSAmJiAocXVlcnkuaXNFbXB0eSgpIHx8
IHF1ZXJ5WzBdICE9ICc/JykpCisgICAgICAgICAgICBuZXdVUkwuYXBwZW5kKCc/Jyk7CisgICAg
ICAgIGlmICghcXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbmV3VVJMLmFwcGVuZChxdWVy
eS5jaGFyYWN0ZXJzKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKKyAgICAgICAgcGFyc2UobmV3VVJMLmRh
dGEoKSwgbmV3VVJMLnNpemUoKSwgMCk7CiAgICAgfQogfQogCi12b2lkIEtVUkw6OnNldFBhdGgo
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRFbmRQb3MpICsgZW5jb2RlX3N0cmluZyhzKSAr
IHVybFN0cmluZy5taWQocGF0aEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgp
LCAmbmV3VVJMKTsKKyAgICAgICAgVGVtcFVDaGFyQnVmZmVyIG5ld1VSTDsKKyAgICAgICAgbmV3
VVJMLmFwcGVuZChtX3VybC5jaGFyYWN0ZXJzKCksIHBvcnRFbmRQb3MpOworCisgICAgICAgIFN0
cmluZyBlbmNvZGVkID0gZW5jb2RlX3N0cmluZyhzKTsKKyAgICAgICAgbmV3VVJMLmFwcGVuZChl
bmNvZGVkLmNoYXJhY3RlcnMoKSwgZW5jb2RlZC5sZW5ndGgoKSk7CisKKyAgICAgICAgbmV3VVJM
LmFwcGVuZCgmbV91cmwuY2hhcmFjdGVycygpW3BhdGhFbmRQb3NdLCBtX3VybC5sZW5ndGgoKSAt
IHBhdGhFbmRQb3MpOworICAgICAgICBwYXJzZShuZXdVUkwuZGF0YSgpLCBuZXdVUkwuc2l6ZSgp
LCAwKTsKICAgICB9CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCkgY29u
c3QKK1N0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlk
KSB7Ci0gICAgICAgIHJldHVybiB1cmxTdHJpbmc7Ci0gICAgfQotCi0gICAgRGVwcmVjYXRlZFN0
cmluZyByZXN1bHQgPSBwcm90b2NvbCgpICsgIjoiOworICAgIGlmICghbV9pc1ZhbGlkKQorICAg
ICAgICByZXR1cm4gbV91cmw7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGF1dGhvcml0eTsKKyAg
ICBUZW1wVUNoYXJCdWZmZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQobV91cmwuY2hhcmFj
dGVycygpLCBzY2hlbWVFbmRQb3MpOwogCisgICAgLy8gVGhpcyBpcyBub3QgcGFydGljdWxhcmx5
IG9wdGltaXplZCwgbW9zdCBVUkxzIGhhdmUgb25seSBob3N0cywgc28gdGhpcworICAgIC8vIHdp
bGwgb25seSBiZSBvbmUgbWFsbG9jLCBhbmQgbW9zdCBvZiB0aGUgcmVzdCBoYXZlIG9ubHkgYSBw
b3J0LCBzbyB0aGlzCisgICAgLy8gd2lsbCBub3QgYmUgdmVyeSBtdWNoIGV4dHJhIHdvcmsgZm9y
IHRoaXMgbm9uLXBlcmYtY3JvdGljYWwgY29kZXBhdGguCisgICAgU3RyaW5nIGF1dGhvcml0eTsK
ICAgICBpZiAoaG9zdEVuZFBvcyAhPSBwYXNzd29yZEVuZFBvcykgewogICAgICAgICBpZiAodXNl
ckVuZFBvcyAhPSB1c2VyU3RhcnRQb3MpIHsKICAgICAgICAgICAgIGF1dGhvcml0eSArPSB1c2Vy
KCk7CkBAIC03MzYsNDcgKzk1Myw1MyBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OnByZXR0eVVS
TCgpIGNvbnN0CiAgICAgICAgIGF1dGhvcml0eSArPSBob3N0KCk7CiAgICAgICAgIGlmIChwb3J0
KCkgIT0gMCkgewogICAgICAgICAgICAgYXV0aG9yaXR5ICs9ICI6IjsKLSAgICAgICAgICAgIGF1
dGhvcml0eSArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIocG9ydCgpKTsKKyAgICAgICAgICAg
IGF1dGhvcml0eSArPSBTdHJpbmc6Om51bWJlcihwb3J0KCkpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKCFhdXRob3JpdHkuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQgKz0gIi8vIiAr
IGF1dGhvcml0eTsKLSAgICBlbHNlIGlmIChwcm90b2NvbCgpID09ICJmaWxlIikKLSAgICAgICAg
cmVzdWx0ICs9ICIvLyI7CisgICAgaWYgKCFhdXRob3JpdHkuaXNFbXB0eSgpKSB7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoJy8nKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKGF1dGhvcml0eS5jaGFyYWN0ZXJzKCksIGF1dGhvcml0eS5sZW5ndGgo
KSk7CisgICAgfSBlbHNlIGlmIChwcm90b2NvbElzKCJmaWxlIikpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgnLycpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CisgICAgfQogCi0gICAg
cmVzdWx0ICs9IHBhdGgoKTsKLSAgICByZXN1bHQgKz0gcXVlcnkoKTsKKyAgICBTdHJpbmcgcGF0
aCA9IHRoaXMtPnBhdGgoKTsKKyAgICByZXN1bHQuYXBwZW5kKHBhdGguY2hhcmFjdGVycygpLCBw
YXRoLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgcXVlcnkgPSB0aGlzLT5xdWVyeSgpOworICAgIHJl
c3VsdC5hcHBlbmQocXVlcnkuY2hhcmFjdGVycygpLCBxdWVyeS5sZW5ndGgoKSk7CiAKICAgICBp
ZiAoZnJhZ21lbnRFbmRQb3MgIT0gcXVlcnlFbmRQb3MpIHsKLSAgICAgICAgcmVzdWx0ICs9ICIj
IiArIHJlZigpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcjJyk7CisgICAgICAgIFN0cmluZyBy
ZWYgPSB0aGlzLT5yZWYoKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZWYuY2hhcmFjdGVycygp
LCByZWYubGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKIH0KIAotRGVwcmVjYXRlZFN0
cmluZyBLVVJMOjpkZWNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHVybFN0cmlu
ZykKK1N0cmluZyBLVVJMOjpkZWNvZGVfc3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQogewotICAg
IHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZywgVVRGOEVuY29kaW5nKCkpOworICAgIHJl
dHVybiBkZWNvZGVfc3RyaW5nKHN0ciwgVVRGOEVuY29kaW5nKCkpOwogfQogCi1EZXByZWNhdGVk
U3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdXJsU3Ry
aW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorU3RyaW5nIEtVUkw6OmRlY29kZV9z
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7
Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQoIiIpOworICAgIFRlbXBVQ2hhckJ1ZmZlciBy
ZXN1bHQ7CiAKLSAgICBWZWN0b3I8Y2hhciwgMjA0OD4gYnVmZmVyKDApOwotCi0gICAgaW50IGxl
bmd0aCA9IHVybFN0cmluZy5sZW5ndGgoKTsKKyAgICBpbnQgbGVuZ3RoID0gc3RyLmxlbmd0aCgp
OwogICAgIGludCBkZWNvZGVkUG9zaXRpb24gPSAwOwogICAgIGludCBzZWFyY2hQb3NpdGlvbiA9
IDA7CiAgICAgaW50IGVuY29kZWRSdW5Qb3NpdGlvbjsKLSAgICB3aGlsZSAoKGVuY29kZWRSdW5Q
b3NpdGlvbiA9IHVybFN0cmluZy5maW5kKCclJywgc2VhcmNoUG9zaXRpb24pKSA+PSAwKSB7Cisg
ICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRpb24gPSBzdHIuZmluZCgnJScsIHNlYXJjaFBvc2l0
aW9uKSkgPj0gMCkgewogICAgICAgICAvLyBGaW5kIHRoZSBzZXF1ZW5jZSBvZiAlLWVzY2FwZSBj
b2Rlcy4KICAgICAgICAgaW50IGVuY29kZWRSdW5FbmQgPSBlbmNvZGVkUnVuUG9zaXRpb247CiAg
ICAgICAgIHdoaWxlIChsZW5ndGggLSBlbmNvZGVkUnVuRW5kID49IDMKLSAgICAgICAgICAgICAg
ICAmJiB1cmxTdHJpbmdbZW5jb2RlZFJ1bkVuZF0gPT0gJyUnCi0gICAgICAgICAgICAgICAgJiYg
aXNIZXhEaWdpdCh1cmxTdHJpbmdbZW5jb2RlZFJ1bkVuZCArIDFdLmxhdGluMSgpKQotICAgICAg
ICAgICAgICAgICYmIGlzSGV4RGlnaXQodXJsU3RyaW5nW2VuY29kZWRSdW5FbmQgKyAyXS5sYXRp
bjEoKSkpCisgICAgICAgICAgICAgICAgJiYgc3RyW2VuY29kZWRSdW5FbmRdID09ICclJworICAg
ICAgICAgICAgICAgICYmIGlzSGV4RGlnaXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3Ry
W2VuY29kZWRSdW5FbmQgKyAxXSkpCisgICAgICAgICAgICAgICAgJiYgaXNIZXhEaWdpdChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzdHJbZW5jb2RlZFJ1bkVuZCArIDJdKSkpCiAgICAgICAg
ICAgICBlbmNvZGVkUnVuRW5kICs9IDM7CiAgICAgICAgIGlmIChlbmNvZGVkUnVuRW5kID09IGVu
Y29kZWRSdW5Qb3NpdGlvbikgewogICAgICAgICAgICAgKytzZWFyY2hQb3NpdGlvbjsKQEAgLTc4
Niw5ICsxMDA5LDggQEAgRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpkZWNvZGVfc3RyaW5nKGNvbgog
CiAgICAgICAgIC8vIENvcHkgdGhlIGVudGlyZSAlLWVzY2FwZSBzZXF1ZW5jZSBpbnRvIGFuIDgt
Yml0IGJ1ZmZlci4KICAgICAgICAgaW50IGVuY29kZWRSdW5MZW5ndGggPSBlbmNvZGVkUnVuRW5k
IC0gZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgICAgICBidWZmZXIuY2xlYXIoKTsKLSAgICAgICAg
YnVmZmVyLmdyb3coZW5jb2RlZFJ1bkxlbmd0aCArIDEpOwotICAgICAgICB1cmxTdHJpbmcuY29w
eUxhdGluMShidWZmZXIuZGF0YSgpLCBlbmNvZGVkUnVuUG9zaXRpb24sIGVuY29kZWRSdW5MZW5n
dGgpOworICAgICAgICBUZW1wQ2hhckJ1ZmZlciBidWZmZXIoZW5jb2RlZFJ1bkxlbmd0aCk7Cisg
ICAgICAgIGNvcHlBU0NJSSgmc3RyLmNoYXJhY3RlcnMoKVtlbmNvZGVkUnVuUG9zaXRpb25dLCBl
bmNvZGVkUnVuTGVuZ3RoLCBidWZmZXIuZGF0YSgpKTsKIAogICAgICAgICAvLyBEZWNvZGUgdGhl
ICUtZXNjYXBlcyBpbnRvIGJ5dGVzLgogICAgICAgICBjaGFyICpwID0gYnVmZmVyLmRhdGEoKTsK
QEAgLTgwNCwxMyArMTAyNiwxMyBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJp
bmcoY29uCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUg
c3RyaW5nIHdpdGggd2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVk
LgotICAgICAgICByZXN1bHQuYXBwZW5kKHVybFN0cmluZy5taWQoZGVjb2RlZFBvc2l0aW9uLCBl
bmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pKTsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4oZGVjb2RlZC5jaGFy
YWN0ZXJzKCkpLCBkZWNvZGVkLmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgmc3Ry
LmNoYXJhY3RlcnMoKVtkZWNvZGVkUG9zaXRpb25dLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNv
ZGVkUG9zaXRpb24pOworICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQuY2hhcmFjdGVycygp
LCBkZWNvZGVkLmxlbmd0aCgpKTsKICAgICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1
bkVuZDsKICAgICB9CiAKLSAgICByZXN1bHQuYXBwZW5kKHVybFN0cmluZy5taWQoZGVjb2RlZFBv
c2l0aW9uLCBsZW5ndGggLSBkZWNvZGVkUG9zaXRpb24pKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJlc3VsdC5hcHBlbmQoJnN0ci5jaGFyYWN0ZXJzKClbZGVjb2RlZFBvc2l0aW9uXSwgbGVu
Z3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCks
IHJlc3VsdC5zaXplKCkpOwogfQogCiBib29sIEtVUkw6OmlzTG9jYWxGaWxlKCkgY29uc3QKQEAg
LTgxOSwxMCArMTA0MSwxMCBAQCBib29sIEtVUkw6OmlzTG9jYWxGaWxlKCkgY29uc3QKICAgICAv
LyBhbmQgaW5jbHVkaW5nIGZlZWQgd291bGQgYWxsb3cgZmVlZHMgdG8gcG90ZW50aWFsbHkgbGV0
IHNvbWVvbmUncyBibG9nCiAgICAgLy8gcmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGNsaXBib2Fy
ZCBvbiBhIGRyYWcsIGV2ZW4gd2l0aG91dCBhIGRyb3AuCiAgICAgLy8gTGlrZXdpc2Ugd2l0aCB1
c2luZyB0aGUgRnJhbWVMb2FkZXI6OnNob3VsZFRyZWF0VVJMQXNMb2NhbCgpIGZ1bmN0aW9uLgot
ICAgIHJldHVybiBwcm90b2NvbCgpID09ICJmaWxlIjsKKyAgICByZXR1cm4gcHJvdG9jb2xJcygi
ZmlsZSIpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIqJiBi
dWZmZXIsIGNvbnN0IGNoYXIgKnN0clN0YXJ0LCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIHZvaWQg
YXBwZW5kRXNjYXBpbmdCYWRDaGFycyhjaGFyKiYgYnVmZmVyLCBjb25zdCBjaGFyKiBzdHJTdGFy
dCwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBjaGFyICpwID0gYnVmZmVyOwogCkBAIC04NDIsNjYg
KzEwNjQsOCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIqCiAgICAg
ICAgICAgICAqcCsrID0gYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBidWZmZXIgPSBw
OwotfQotCi0vLyBjb3B5IGEgcGF0aCwgYWNjb3VudGluZyBmb3IgIi4iIGFuZCAiLi4iIHNlZ21l
bnRzCi1zdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIgKmRzdCwgY29uc3QgY2hh
ciAqc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQpCi17Ci0gICAgY2hhciAqYnVmZmVyUGF0
aFN0YXJ0ID0gZHN0OwogCi0gICAgLy8gZW1wdHkgcGF0aCBpcyBhIHNwZWNpYWwgY2FzZSwgYW5k
IG5lZWQgbm90IGhhdmUgYSBsZWFkaW5nIHNsYXNoCi0gICAgaWYgKHNyY1N0YXJ0ICE9IHNyY0Vu
ZCkgewotICAgICAgICBjb25zdCBjaGFyICpiYXNlU3RyaW5nU3RhcnQgPSBzcmMgKyBzcmNTdGFy
dDsKLSAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ0VuZCA9IHNyYyArIHNyY0VuZDsKLSAg
ICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1BvcyA9IGJhc2VTdHJpbmdTdGFydDsKLQotICAg
ICAgICAvLyB0aGlzIGNvZGUgaXMgdW5wcmVwYXJlZCBmb3IgcGF0aHMgdGhhdCBkbyBub3QgYmVn
aW4gd2l0aCBhCi0gICAgICAgIC8vIHNsYXNoIGFuZCB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgb25l
IGluIHRoZSBzb3VyY2Ugc3RyaW5nCi0gICAgICAgIEFTU0VSVChiYXNlU3RyaW5nUG9zWzBdID09
ICcvJyk7Ci0KLSAgICAgICAgLy8gY29weSB0aGUgbGVhZGluZyBzbGFzaCBpbnRvIHRoZSBkZXN0
aW5hdGlvbgotICAgICAgICAqZHN0ID0gKmJhc2VTdHJpbmdQb3M7Ci0gICAgICAgIGJhc2VTdHJp
bmdQb3MrKzsKLSAgICAgICAgZHN0Kys7Ci0KLSAgICAgICAgd2hpbGUgKGJhc2VTdHJpbmdQb3Mg
PCBiYXNlU3RyaW5nRW5kKSB7Ci0gICAgICAgICAgICBpZiAoYmFzZVN0cmluZ1Bvc1swXSA9PSAn
LicgJiYgZHN0Wy0xXSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVN0cmluZ1Bv
c1sxXSA9PSAnLycgfHwgYmFzZVN0cmluZ1BvcyArIDEgPT0gYmFzZVN0cmluZ0VuZCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgIi4iIHNlZ21lbnQKLSAgICAgICAgICAgICAg
ICAgICAgYmFzZVN0cmluZ1BvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJhc2VTdHJpbmdQb3NbMV0gPT0gJy4nICYmIChi
YXNlU3RyaW5nUG9zWzJdID09ICcvJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZVN0cmluZ1BvcyArIDIgPT0gYmFzZVN0cmluZ0VuZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gc2tpcCBvdmVyICIuLiIgc2VnbWVudCBhbmQgcmV3aW5kIHRoZSBsYXN0
IHNlZ21lbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFJGQyBsZWF2ZXMgaXQgdXAgdG8g
dGhlIGFwcCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGV4Y2VzcwotICAgICAgICAgICAgICAg
ICAgICAvLyAiLi4iIHNlZ21lbnRzIC0gd2UgY2hvb3NlIHRvIGRyb3AgdGhlbSBzaW5jZSBzb21l
IHdlYiBjb250ZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlbGllcyBvbiB0aGlzLgotICAg
ICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nUG9zICs9IDM7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChkc3QgPiBidWZmZXJQYXRoU3RhcnQgKyAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkc3QtLTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgdGhlc2UgdHdvIHdoaWxlIGJsb2NrcyBkaWZmZXIgc3VidGx5LgotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgZmlyc3QgaGVscHMgdG8gcmVtb3ZlIG11bHRpcGxlIGFkam9pbmlu
ZyBzbGFzaGVzIGFzIHdlIHJld2luZC4KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlICsxIHRv
IGJ1ZmZlclBhdGhTdGFydCBpbiB0aGUgZmlyc3Qgd2hpbGUgYmxvY2sgcHJldmVudHMgZWF0aW5n
IGEgbGVhZGluZyBzbGFzaAotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZHN0ID4gYnVmZmVy
UGF0aFN0YXJ0ICsgMSAmJiBkc3RbLTFdID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZHN0LS07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKGRzdCA+IGJ1ZmZlclBhdGhTdGFydCAmJiBkc3RbLTFdICE9ICcvJykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZHN0LS07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqZHN0ID0gKmJhc2VTdHJpbmdQb3M7Ci0gICAgICAgICAgICBiYXNlU3RyaW5n
UG9zKys7Ci0gICAgICAgICAgICBkc3QrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICAqZHN0ID0g
J1wwJzsKLSAgICByZXR1cm4gZHN0IC0gYnVmZmVyUGF0aFN0YXJ0OworICAgIGJ1ZmZlciA9IHA7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNTbGFzaERvdE9yRG90RG90KGNvbnN0IGNoYXIg
KnN0cikKQEAgLTkyMywzMyArMTA4Nyw1NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hMZXR0
ZXIoY2hhciBjLCBjCiAgICAgcmV0dXJuIChjIHwgMHgyMCkgPT0gbG93ZXJjYXNlTGV0dGVyOwog
fQogCi12b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAqb3JpZ2luYWxTdHJpbmcpCit2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IFVDaGFyICp1dGYx
NlVybCwgdW5zaWduZWQgdXRmMTZVcmxMZW4sIGNvbnN0IFN0cmluZyAqb3JpZ2luYWxTdHJpbmcp
CiB7Ci0gICAgbV9pc1ZhbGlkID0gdHJ1ZTsKLQotICAgIGlmICghdXJsIHx8IHVybFswXSA9PSAn
XDAnKSB7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgaWYgKCF1dGYxNlVybCB8fCB1dGYx
NlVybExlbiA9PSAwKSB7CiAgICAgICAgIC8vIHZhbGlkIFVSTCBtdXN0IGJlIG5vbi1lbXB0eQot
ICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgdXJsU3RyaW5nID0gdXJsOworICAg
ICAgICBtX3VybCA9IFN0cmluZyh1dGYxNlVybCwgdXRmMTZVcmxMZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCisKKyAgICAvLyBGSVhNRSEgVGhpcyBmdW5jdGlvbiBpcyBub3QgcmlnaHQg
YXQgYWxsLiBJdCBpcyBjYWxsZWQgYnkgdGhlCisgICAgLy8gY29uc3RydWN0b3IgZGlyZWN0bHkg
d2l0aG91dCBob3N0bmFtZXMgYmVpbmcgZml4ZWQgdXAgKGJ1ZyAxNzEwNSkuIFRoZQorICAgIC8v
IGNvZGUgYmVsb3cgYXNzdW1lcyA4LWJpdC4gVG8gdGVtcG9yYXJpbHkgaGFjayBhcm91bmQgdGhp
cywgd2UgY29udmVydAorICAgIC8vIHRoZSB3aG9sZSB0aGluZyB0byBVVEYtOCBoZXJlLCB3aGlj
aCBpcyBlcXVpdmFsZW50IHRvIHdoYXQgdGhlIGNvZGUgaGFzCisgICAgLy8gYWx3YXlzIGRvbmUs
IHRob3VnaCBpdCBpcyBub3cgbW9yZSBvYnZvdW9zbHkgd3JvbmcuCisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgdGhpcyBjb2RlIGNvbnZlbmllbnRseSBOVUxMLXRlcm1pbmF0ZXMgdGhlIFVSTCwg
c2ltcGxpZnlpbmcKKyAgICAvLyB0aGUgY29kZSBiZWxvdywgd2hpY2ggdXNlcyBsb29rdXAgdGFi
bGVzLCByZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgMAorICAgIC8vIGRvZXNuJ3QgbWF0Y2ggYW55
IGNhdGVnb3J5LgorICAgIFRlbXBDaGFyQnVmZmVyIGFzY2lpQnVmZmVyOworICAgIENTdHJpbmcg
dXRmOEJ1ZmZlcjsKKyAgICBjaGFyKiB1cmw7CisgICAgdW5zaWduZWQgdXJsTGVuOworICAgIGlm
IChpc0FsbEFTQ0lJKHV0ZjE2VXJsLCB1dGYxNlVybExlbikpIHsKKyAgICAgICAgLy8gOTklIG9m
IHRoZSB0aW1lLCBvdXIgaW5wdXQgaGVyZSB3aWxsIGFscmVhZHkgYmUgQVNDSUkgYW5kIHdlIGNh
bgorICAgICAgICAvLyBmYXN0LXBhdGggaXQuCisgICAgICAgIGFzY2lpQnVmZmVyLnJlc2l6ZSh1
dGYxNlVybExlbiArIDEpOworICAgICAgICB1cmwgPSBhc2NpaUJ1ZmZlci5kYXRhKCk7CisgICAg
ICAgIHVybExlbiA9IHV0ZjE2VXJsTGVuOworICAgICAgICBjb3B5QVNDSUkodXRmMTZVcmwsIHV0
ZjE2VXJsTGVuLCB1cmwpOworICAgICAgICB1cmxbdXJsTGVuXSA9IDA7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gU2xvd2VyIFVURi04IHBhdGguCisgICAgICAgIHV0ZjhCdWZmZXIgPSBTdHJp
bmcodXRmMTZVcmwsIHV0ZjE2VXJsTGVuKS51dGY4KCk7CisgICAgICAgIHVybCA9IHV0ZjhCdWZm
ZXIubXV0YWJsZURhdGEoKTsKKyAgICAgICAgdXJsTGVuID0gdXRmOEJ1ZmZlci5sZW5ndGgoKTsK
KyAgICB9CisKICAgICBpZiAoIWlzU2NoZW1lRmlyc3RDaGFyKHVybFswXSkpIHsKICAgICAgICAg
Ly8gc2NoZW1lIG11c3Qgc3RhcnQgd2l0aCBhbiBhbHBoYWJldGljIGNoYXJhY3RlcgotICAgICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgdXJsU3RyaW5nID0gdXJsOworICAgICAgICBt
X3VybCA9IFN0cmluZyh1dGYxNlVybCwgdXRmMTZVcmxMZW4pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaW50IHNjaGVtZUVuZCA9IDA7Ci0gCi0gICAgd2hpbGUgKGlzU2NoZW1lQ2hh
cih1cmxbc2NoZW1lRW5kXSkpIHsKKyAgICB3aGlsZSAoaXNTY2hlbWVDaGFyKHVybFtzY2hlbWVF
bmRdKSkKICAgICAgICAgc2NoZW1lRW5kKys7Ci0gICAgfQogCisgICAgLy8gVGhlIHNjaGVtZSBz
aG91bGQgZW5kIGluIGEgY29sb24uCiAgICAgaWYgKHVybFtzY2hlbWVFbmRdICE9ICc6Jykgewot
ICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgdXJsU3RyaW5nID0gdXJsOworICAg
ICAgICBtX3VybCA9IFN0cmluZyh1dGYxNlVybCwgdXRmMTZVcmxMZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC05NzMsMjEgKzExNjEsMTkgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25z
dCBjaGFyICp1cmwsIGNvbnN0IAogCiAgICAgICAgIGludCBjb2xvblBvcyA9IDA7CiAgICAgICAg
IHdoaWxlIChpc1VzZXJJbmZvQ2hhcih1cmxbdXNlckVuZF0pKSB7Ci0gICAgICAgICAgICBpZiAo
dXJsW3VzZXJFbmRdID09ICc6JyAmJiBjb2xvblBvcyA9PSAwKSB7CisgICAgICAgICAgICBpZiAo
dXJsW3VzZXJFbmRdID09ICc6JyAmJiBjb2xvblBvcyA9PSAwKQogICAgICAgICAgICAgICAgIGNv
bG9uUG9zID0gdXNlckVuZDsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHVzZXJFbmQrKzsK
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodXJsW3VzZXJFbmRdID09ICdAJykg
ewogICAgICAgICAgICAgLy8gYWN0dWFsIGVuZCBvZiB0aGUgdXNlcmluZm8sIHN0YXJ0IG9uIHRo
ZSBob3N0CiAgICAgICAgICAgICBpZiAoY29sb25Qb3MgIT0gMCkgewogICAgICAgICAgICAgICAg
IHBhc3N3b3JkRW5kID0gdXNlckVuZDsKICAgICAgICAgICAgICAgICB1c2VyRW5kID0gY29sb25Q
b3M7CiAgICAgICAgICAgICAgICAgcGFzc3dvcmRTdGFydCA9IGNvbG9uUG9zICsgMTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXNz
d29yZFN0YXJ0ID0gcGFzc3dvcmRFbmQgPSB1c2VyRW5kOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaG9zdFN0YXJ0ID0gcGFzc3dvcmRFbmQgKyAxOwogICAgICAgICB9IGVsc2UgaWYgKHVy
bFt1c2VyRW5kXSA9PSAnWycgfHwgaXNQYXRoU2VnbWVudEVuZENoYXIodXJsW3VzZXJFbmRdKSkg
ewogICAgICAgICAgICAgLy8gaGl0IHRoZSBlbmQgb2YgdGhlIGF1dGhvcml0eSwgbXVzdCBoYXZl
IGJlZW4gbm8gdXNlcgpAQCAtOTk4LDggKzExODQsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0
IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICBob3N0U3RhcnQgPSB1c2VyU3RhcnQ7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBpbnZhbGlkIGNoYXJhY3RlcgotICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB1cmxTdHJpbmcgPSB1cmw7Cisg
ICAgICAgICAgICBtX3VybCA9IFN0cmluZyh1dGYxNlVybCwgdXRmMTZVcmxMZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEwMDgsMzkgKzExOTMsMzMgQEAgdm9pZCBL
VVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAvLyBJUFY2IElQIGFk
ZHJlc3MKICAgICAgICAgaWYgKHVybFtob3N0RW5kXSA9PSAnWycpIHsKICAgICAgICAgICAgIGhv
c3RFbmQrKzsKLSAgICAgICAgICAgIHdoaWxlIChpc0lQdjZDaGFyKHVybFtob3N0RW5kXSkpIHsK
KyAgICAgICAgICAgIHdoaWxlIChpc0lQdjZDaGFyKHVybFtob3N0RW5kXSkpCiAgICAgICAgICAg
ICAgICAgaG9zdEVuZCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHVybFtob3N0
RW5kXSA9PSAnXScpIHsKKyAgICAgICAgICAgIGlmICh1cmxbaG9zdEVuZF0gPT0gJ10nKQogICAg
ICAgICAgICAgICAgIGhvc3RFbmQrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGNoYXJhY3RlcgotICAgICAgICAg
ICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHVybFN0cmluZyA9IHVy
bDsKKyAgICAgICAgICAgICAgICBtX3VybCA9IFN0cmluZyh1dGYxNlVybCwgdXRmMTZVcmxMZW4p
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHdoaWxlIChpc0hvc3RuYW1lQ2hhcih1cmxbaG9zdEVuZF0pKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoaXNIb3N0bmFtZUNoYXIodXJsW2hvc3RFbmRdKSkKICAgICAgICAg
ICAgICAgICBob3N0RW5kKys7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgaWYgKHVybFtob3N0RW5kXSA9PSAnOicpIHsKICAgICAgICAgICAgIHBvcnRTdGFy
dCA9IHBvcnRFbmQgPSBob3N0RW5kICsgMTsKLSAKKwogICAgICAgICAgICAgLy8gcG9zc2libGUg
c3RhcnQgb2YgcG9ydAogICAgICAgICAgICAgcG9ydEVuZCA9IHBvcnRTdGFydDsKLSAgICAgICAg
ICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQodXJsW3BvcnRFbmRdKSkgeworICAgICAgICAgICAgd2hp
bGUgKGlzQVNDSUlEaWdpdCh1cmxbcG9ydEVuZF0pKQogICAgICAgICAgICAgICAgIHBvcnRFbmQr
KzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBwb3J0U3RhcnQgPSBwb3J0RW5kID0gaG9zdEVuZDsKLSAgICAgICAgfQogCiAgICAg
ICAgIGlmICghaXNQYXRoU2VnbWVudEVuZENoYXIodXJsW3BvcnRFbmRdKSkgewogICAgICAgICAg
ICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKLSAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwot
ICAgICAgICAgICAgdXJsU3RyaW5nID0gdXJsOworICAgICAgICAgICAgbV91cmwgPSBTdHJpbmco
dXRmMTZVcmwsIHV0ZjE2VXJsTGVuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CkBAIC0xMDUwLDcgKzEyMjksNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0
IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgIGhvc3RTdGFydCA9IGhvc3RFbmQgPSBwYXNzd29y
ZEVuZDsKICAgICAgICAgcG9ydFN0YXJ0ID0gcG9ydEVuZCA9IGhvc3RFbmQ7CiAgICAgfQotICAg
ICAgICAKKwogICAgIGludCBwYXRoU3RhcnQgPSBwb3J0RW5kOwogICAgIGludCBwYXRoRW5kID0g
cGF0aFN0YXJ0OwogICAgIGludCBxdWVyeVN0YXJ0OwpAQCAtMTA2MSw1OSArMTI0MCw1MCBAQCB2
b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgaWYgKCFoaWVyYXJj
aGljYWwpIHsKICAgICAgICAgd2hpbGUgKHVybFtwYXRoRW5kXSAhPSAnXDAnICYmIHVybFtwYXRo
RW5kXSAhPSAnPycgJiYgdXJsW3BhdGhFbmRdICE9ICcjJykKICAgICAgICAgICAgIHBhdGhFbmQr
KzsKLSAgICAgICAgCisKICAgICAgICAgcXVlcnlTdGFydCA9IHBhdGhFbmQ7CiAgICAgICAgIHF1
ZXJ5RW5kID0gcXVlcnlTdGFydDsKICAgICAgICAgaWYgKHVybFtxdWVyeVN0YXJ0XSA9PSAnPycp
IHsKICAgICAgICAgICAgIHdoaWxlICh1cmxbcXVlcnlFbmRdICE9ICdcMCcgJiYgdXJsW3F1ZXJ5
RW5kXSAhPSAnIycpCiAgICAgICAgICAgICAgICAgcXVlcnlFbmQrKzsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBmcmFnbWVudFN0YXJ0ID0gcXVlcnlFbmQ7CiAgICAgICAgIGZyYWdt
ZW50RW5kID0gZnJhZ21lbnRTdGFydDsKICAgICAgICAgaWYgKHVybFtmcmFnbWVudFN0YXJ0XSA9
PSAnIycpIHsKICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQrKzsKLSAgICAgICAgICAgIGZyYWdt
ZW50RW5kID0gZnJhZ21lbnRTdGFydDsKLSAgICAgICAgICAgIHdoaWxlICh1cmxbZnJhZ21lbnRF
bmRdICE9ICdcMCcpCi0gICAgICAgICAgICAgICAgZnJhZ21lbnRFbmQrKzsKLSAgICAgICAgfSAg
ICAgICAgCisgICAgICAgICAgICBmcmFnbWVudEVuZCA9IHVybExlbjsKKyAgICAgICAgfQogICAg
IH0KICAgICBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHVybFtwYXRoRW5kXSAhPSAnXDAnICYmIHVy
bFtwYXRoRW5kXSAhPSAnPycgJiYgdXJsW3BhdGhFbmRdICE9ICcjJykgeworICAgICAgICB3aGls
ZSAodXJsW3BhdGhFbmRdICE9ICdcMCcgJiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0
aEVuZF0gIT0gJyMnKQogICAgICAgICAgICAgcGF0aEVuZCsrOwotICAgICAgICB9Ci0gICAgCisK
ICAgICAgICAgcXVlcnlTdGFydCA9IHBhdGhFbmQ7CiAgICAgICAgIHF1ZXJ5RW5kID0gcXVlcnlT
dGFydDsKICAgICAgICAgaWYgKHVybFtxdWVyeVN0YXJ0XSA9PSAnPycpIHsKLSAgICAgICAgICAg
IHdoaWxlICh1cmxbcXVlcnlFbmRdICE9ICdcMCcgJiYgdXJsW3F1ZXJ5RW5kXSAhPSAnIycpIHsK
KyAgICAgICAgICAgIHdoaWxlICh1cmxbcXVlcnlFbmRdICE9ICdcMCcgJiYgdXJsW3F1ZXJ5RW5k
XSAhPSAnIycpCiAgICAgICAgICAgICAgICAgcXVlcnlFbmQrKzsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmcmFnbWVudFN0YXJ0ID0gcXVlcnlFbmQ7CiAg
ICAgICAgIGZyYWdtZW50RW5kID0gZnJhZ21lbnRTdGFydDsKICAgICAgICAgaWYgKHVybFtmcmFn
bWVudFN0YXJ0XSA9PSAnIycpIHsKICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQrKzsKLSAgICAg
ICAgICAgIGZyYWdtZW50RW5kID0gZnJhZ21lbnRTdGFydDsKLSAgICAgICAgICAgIHdoaWxlICh1
cmxbZnJhZ21lbnRFbmRdICE9ICdcMCcpIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVudEVuZCsr
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJhZ21lbnRFbmQgPSB1cmxMZW47CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBhc3NlbWJsZSBpdCBhbGwsIHJlbWVtYmVyaW5nIHRoZSBy
ZWFsIHJhbmdlcwotCi0gICAgVmVjdG9yPGNoYXIsIDQwOTY+IGJ1ZmZlcihmcmFnbWVudEVuZCAq
IDMgKyAxKTsKKyAgICBUZW1wQ2hhckJ1ZmZlciBidWZmZXIoZnJhZ21lbnRFbmQgKiAzICsgMSk7
CiAKICAgICBjaGFyICpwID0gYnVmZmVyLmRhdGEoKTsKICAgICBjb25zdCBjaGFyICpzdHJQdHIg
PSB1cmw7CiAKICAgICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKICAgICBjb25zdCBjaGFyICpzY2hl
bWVFbmRQdHIgPSB1cmwgKyBzY2hlbWVFbmQ7Ci0gICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVu
ZFB0cikgeworICAgIHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCiAgICAgICAgICpwKysg
PSAqc3RyUHRyKys7Ci0gICAgfQogICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgp
OwogCiAgICAgLy8gQ2hlY2sgaWYgd2UncmUgaHR0cCBvciBodHRwcy4KQEAgLTExNDAsMTIgKzEz
MTAsMTEgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAg
ICAmJiBtYXRjaExldHRlcih1cmxbMl0sICdsJykKICAgICAgICAgJiYgbWF0Y2hMZXR0ZXIodXJs
WzNdLCAnZScpCiAgICAgICAgICYmIHVybFs0XSA9PSAnOic7Ci0gICAgICAgIAorCiAgICAgLy8g
RmlsZSBVUkxzIG5lZWQgYSBob3N0IHBhcnQgdW5sZXNzIGl0IGlzIGp1c3QgZmlsZTovLyBvciBm
aWxlOi8vbG9jYWxob3N0CiAgICAgYm9vbCBkZWdlbkZpbGVQYXRoID0gcGF0aFN0YXJ0ID09IHBh
dGhFbmQKLSAgICAgICAgJiYgKGhvc3RTdGFydCA9PSBob3N0RW5kCi0gICAgICAgICAgICB8fCBo
b3N0SXNMb2NhbEhvc3QpOwotICAgIAorICAgICAgICAmJiAoaG9zdFN0YXJ0ID09IGhvc3RFbmQg
fHwgaG9zdElzTG9jYWxIb3N0KTsKKwogICAgIGJvb2wgaGF2ZU5vbkhvc3RBdXRob3JpdHlQYXJ0
ID0gdXNlclN0YXJ0ICE9IHVzZXJFbmQgfHwgcGFzc3dvcmRTdGFydCAhPSBwYXNzd29yZEVuZCB8
fCBwb3J0U3RhcnQgIT0gcG9ydEVuZDsKIAogICAgIC8vIGFkZCAiOiIgYWZ0ZXIgc2NoZW1lCkBA
IC0xMTY5LDczICsxMzM4LDY0IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBj
b25zdCAKICAgICAgICAgLy8gY29weSBpbiB0aGUgdXNlcgogICAgICAgICBzdHJQdHIgPSB1cmwg
KyB1c2VyU3RhcnQ7CiAgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJFbmRQdHIgPSB1cmwgKyB1c2Vy
RW5kOwotICAgICAgICB3aGlsZSAoc3RyUHRyIDwgdXNlckVuZFB0cikgeworICAgICAgICB3aGls
ZSAoc3RyUHRyIDwgdXNlckVuZFB0cikKICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7Ci0g
ICAgICAgIH0KICAgICAgICAgdXNlckVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgICAg
ICAKKwogICAgICAgICAvLyBjb3B5IGluIHRoZSBwYXNzd29yZAogICAgICAgICBpZiAocGFzc3dv
cmRFbmQgIT0gcGFzc3dvcmRTdGFydCkgewogICAgICAgICAgICAgKnArKyA9ICc6JzsKICAgICAg
ICAgICAgIHN0clB0ciA9IHVybCArIHBhc3N3b3JkU3RhcnQ7CiAgICAgICAgICAgICBjb25zdCBj
aGFyICpwYXNzd29yZEVuZFB0ciA9IHVybCArIHBhc3N3b3JkRW5kOwotICAgICAgICAgICAgd2hp
bGUgKHN0clB0ciA8IHBhc3N3b3JkRW5kUHRyKSB7CisgICAgICAgICAgICB3aGlsZSAoc3RyUHRy
IDwgcGFzc3dvcmRFbmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwYXNzd29yZEVuZFBvcyA9IHAgLSBidWZm
ZXIuZGF0YSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBJZiB3ZSBoYWQgYW55IHVzZXIgaW5m
bywgYWRkICJAIgotICAgICAgICBpZiAocCAtIGJ1ZmZlci5kYXRhKCkgIT0gdXNlclN0YXJ0UG9z
KSB7CisgICAgICAgIGlmIChwIC0gYnVmZmVyLmRhdGEoKSAhPSB1c2VyU3RhcnRQb3MpCiAgICAg
ICAgICAgICAqcCsrID0gJ0AnOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNv
cHkgaW4gdGhlIGhvc3QsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIGZpbGUgVVJMIHdpdGggYXV0
aG9yaXR5PSJsb2NhbGhvc3QiCiAgICAgICAgIGlmICghKGlzRmlsZSAmJiBob3N0SXNMb2NhbEhv
c3QgJiYgIWhhdmVOb25Ib3N0QXV0aG9yaXR5UGFydCkpIHsKICAgICAgICAgICAgIHN0clB0ciA9
IHVybCArIGhvc3RTdGFydDsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RFbmRQdHIgPSB1
cmwgKyBob3N0RW5kOwotICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpIHsK
KyAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBob3N0RW5kUHRyKQogICAgICAgICAgICAgICAg
ICpwKysgPSAqc3RyUHRyKys7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaG9z
dEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBjb3B5
IGluIHRoZSBwb3J0CiAgICAgICAgIGlmIChob3N0RW5kICE9IHBvcnRTdGFydCkgewogICAgICAg
ICAgICAgKnArKyA9ICc6JzsKICAgICAgICAgICAgIHN0clB0ciA9IHVybCArIHBvcnRTdGFydDsK
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBvcnRFbmRQdHIgPSB1cmwgKyBwb3J0RW5kOwotICAg
ICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBvcnRFbmRQdHIpIHsKKyAgICAgICAgICAgIHdoaWxl
IChzdHJQdHIgPCBwb3J0RW5kUHRyKQogICAgICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcG9ydEVuZFBvcyA9IHAgLSBidWZm
ZXIuZGF0YSgpOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNlCiAgICAgICAgIHVzZXJTdGFydFBv
cyA9IHVzZXJFbmRQb3MgPSBwYXNzd29yZEVuZFBvcyA9IGhvc3RFbmRQb3MgPSBwb3J0RW5kUG9z
ID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgfQogCiAgICAgLy8gRm9yIGNhbm9uaWNhbGl6YXRp
b24sIGVuc3VyZSB3ZSBoYXZlIGEgJy8nIGZvciBubyBwYXRoLgogICAgIC8vIE9ubHkgZG8gdGhp
cyBmb3IgaHR0cCBhbmQgaHR0cHMuCi0gICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0aEVuZCAt
IHBhdGhTdGFydCA9PSAwKSB7CisgICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0aEVuZCAtIHBh
dGhTdGFydCA9PSAwKQogICAgICAgICAqcCsrID0gJy8nOwotICAgIH0KLSAgICAgICAKKwogICAg
IC8vIGFkZCBwYXRoLCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwotICAgIAogICAgIGlmIChoaWVy
YXJjaGljYWwgJiYgaGFzU2xhc2hEb3RPckRvdERvdCh1cmwpKSB7Ci0gICAgICAgIFZlY3Rvcjxj
aGFyLCA0MDk2PiBwYXRoX2J1ZmZlcihwYXRoRW5kIC0gcGF0aFN0YXJ0ICsgMSk7Ci0gICAgICAg
IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKHBhdGhfYnVmZmVyLmRhdGEoKSwgdXJsLCBwYXRoU3RhcnQs
IHBhdGhFbmQpOworICAgICAgICBUZW1wQ2hhckJ1ZmZlciBwYXRoX2J1ZmZlcihwYXRoRW5kIC0g
cGF0aFN0YXJ0ICsgMSk7CisgICAgICAgIGNvcHlQYXRoUmVtb3ZpbmdEb3RzPGNoYXI+KHBhdGhf
YnVmZmVyLmRhdGEoKSwgdXJsLCBwYXRoU3RhcnQsIHBhdGhFbmQpOwogICAgICAgICBhcHBlbmRF
c2NhcGluZ0JhZENoYXJzKHAsIHBhdGhfYnVmZmVyLmRhdGEoKSwgc3RybGVuKHBhdGhfYnVmZmVy
LmRhdGEoKSkpOwogICAgIH0gZWxzZQogICAgICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAs
IHVybCArIHBhdGhTdGFydCwgcGF0aEVuZCAtIHBhdGhTdGFydCk7CiAKICAgICBwYXRoRW5kUG9z
ID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgCi0gICAgCisKICAgICAvLyBhZGQgcXVlcnksIGVz
Y2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwg
KyBxdWVyeVN0YXJ0LCBxdWVyeUVuZCAtIHF1ZXJ5U3RhcnQpOwogICAgIHF1ZXJ5RW5kUG9zID0g
cCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgCisKICAgICAvLyBhZGQgZnJhZ21lbnQsIGVzY2FwaW5n
IGJhZCBjaGFyYWN0ZXJzCiAgICAgaWYgKGZyYWdtZW50RW5kICE9IHF1ZXJ5RW5kKSB7CiAgICAg
ICAgICpwKysgPSAnIyc7CkBAIC0xMjQ2LDMyICsxNDA2LDM0IEBAIHZvaWQgS1VSTDo6cGFyc2Uo
Y29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgZW5kIHVwIGFjdHVh
bGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBzdHJpbmcgYW5kCiAgICAgLy8gaXQgc3RhcnRlZCBh
cyBhIERlcHJlY2F0ZWRTdHJpbmcsIGp1c3QgcmV1c2UgaXQsIHRvIGF2b2lkIGV4dHJhCiAgICAg
Ly8gYWxsb2NhdGlvbi4KLSAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIu
ZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9PSAwKSB7Ci0gICAgICAgIHVybFN0cmluZyA9
ICpvcmlnaW5hbFN0cmluZzsKLSAgICB9IGVsc2UKLSAgICAgICAgdXJsU3RyaW5nID0gRGVwcmVj
YXRlZFN0cmluZyhidWZmZXIuZGF0YSgpLCBmcmFnbWVudEVuZFBvcyk7CisgICAgaWYgKG9yaWdp
bmFsU3RyaW5nICYmIHN0cm5jbXAoYnVmZmVyLmRhdGEoKSwgdXJsLCBmcmFnbWVudEVuZFBvcykg
PT0gMCkKKyAgICAgICAgbV91cmwgPSBvcmlnaW5hbFN0cmluZy0+ZGVwcmVjYXRlZFN0cmluZygp
OworICAgIGVsc2UKKyAgICAgICAgbV91cmwgPSBEZXByZWNhdGVkU3RyaW5nKGJ1ZmZlci5kYXRh
KCksIGZyYWdtZW50RW5kUG9zKTsKKworICAgIG1faXNWYWxpZCA9IHRydWU7CiAKICAgICBBU1NF
UlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGludClidWZmZXIuc2l6ZSgpKTsKIH0KIAogYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtVUkwgJmIpCiB7Ci0gICAgcmV0dXJuIGEu
dXJsU3RyaW5nID09IGIudXJsU3RyaW5nOworICAgIHJldHVybiBhLm1fdXJsID09IGIubV91cmw7
CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ1JlZihjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJMJiBi
KQogewotICAgIHJldHVybiBhLnVybFN0cmluZy5sZWZ0KGEucXVlcnlFbmRQb3MpID09IGIudXJs
U3RyaW5nLmxlZnQoYi5xdWVyeUVuZFBvcyk7CisgICAgcmV0dXJuIGEubV91cmwubGVmdChhLnF1
ZXJ5RW5kUG9zKSA9PSBiLm1fdXJsLmxlZnQoYi5xdWVyeUVuZFBvcyk7CiB9CiAKLURlcHJlY2F0
ZWRTdHJpbmcgS1VSTDo6ZW5jb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBub3RF
bmNvZGVkU3RyaW5nKQorU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJpbmcoY29uc3QgU3RyaW5nJiBu
b3RFbmNvZGVkU3RyaW5nKQogewotICAgIERlcHJlY2F0ZWRDU3RyaW5nIGFzVVRGOCA9IG5vdEVu
Y29kZWRTdHJpbmcudXRmOCgpOwotICAgIAotICAgIFZlY3RvcjxjaGFyLCA0MDk2PiBidWZmZXIo
YXNVVEY4Lmxlbmd0aCgpICogMyArIDEpOworICAgIENTdHJpbmcgYXNVVEY4ID0gbm90RW5jb2Rl
ZFN0cmluZy51dGY4KCk7CisKKyAgICBUZW1wQ2hhckJ1ZmZlciBidWZmZXIoYXNVVEY4Lmxlbmd0
aCgpICogMyArIDEpOwogICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgpOwogCi0gICAgY29uc3Qg
Y2hhciAqc3RyID0gYXNVVEY4OworICAgIGNvbnN0IGNoYXIgKnN0ciA9IGFzVVRGOC5kYXRhKCk7
CiAgICAgY29uc3QgY2hhciAqc3RyRW5kID0gc3RyICsgYXNVVEY4Lmxlbmd0aCgpOwogICAgIHdo
aWxlIChzdHIgPCBzdHJFbmQpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKnN0cisrOwpA
QCAtMTI4Miw2NyArMTQ0NCw2NSBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJp
bmcoY29uCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgfQotICAg
IAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIu
ZGF0YSgpKTsKLSAgICAKKworICAgIFN0cmluZyByZXN1bHQoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1
ZmZlci5kYXRhKCkpOworCiAgICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IChpbnQpYnVm
ZmVyLnNpemUoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgRGVwcmVjYXRl
ZFN0cmluZyBlbmNvZGVIb3N0bmFtZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzKQorLy8gQXBw
ZW5kcyB0aGUgcHVueWNvZGVkIGhvc3RuYW1lIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIHN0cmlu
ZyBhbmQgbGVuZ3RoIHRvCisvLyB0aGUgb3V0cHV0IGJ1ZmZlci4gVGhlIHJlc3VsdCB3aWxsIG5v
dCBiZSBOVUxMIHRlcm1pbmF0ZWQuCitzdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVkSG9zdG5hbWUo
Y29uc3QgVUNoYXIqIHN0ciwgdW5zaWduZWQgc3RyTGVuLCBUZW1wVUNoYXJCdWZmZXIqIG91dHB1
dCkKIHsKICAgICAvLyBOZWVkcyB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYW4gSUROLWVuY29k
ZWQgbmFtZS4KICAgICAvLyBGb3IgaG9zdCBuYW1lcyBiaWdnZXIgdGhhbiB0aGlzLCB3ZSB3b24n
dCBkbyBJRE4gZW5jb2RpbmcsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgT0suCiAgICAgY29u
c3QgdW5zaWduZWQgaG9zdG5hbWVCdWZmZXJMZW5ndGggPSAyMDQ4OwogCi0gICAgaWYgKHMuaXNB
bGxBU0NJSSgpIHx8IHMubGVuZ3RoKCkgPiBob3N0bmFtZUJ1ZmZlckxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIHM7CisgICAgaWYgKHN0ckxlbiA+IGhvc3RuYW1lQnVmZmVyTGVuZ3RoIHx8IGlzQWxs
QVNDSUkoc3RyLCBzdHJMZW4pKQorICAgICAgICBvdXRwdXQtPmFwcGVuZChzdHIsIHN0ckxlbik7
CiAKICNpZiBVU0UoSUNVX1VOSUNPREUpCi0gICAgVUNoYXIgYnVmZmVyW2hvc3RuYW1lQnVmZmVy
TGVuZ3RoXTsgICAgCisgICAgVUNoYXIgYnVmZmVyW2hvc3RuYW1lQnVmZmVyTGVuZ3RoXTsKICAg
ICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwotICAgIGludDMyX3QgbnVtQ2hhcmFj
dGVyc0NvbnZlcnRlZCA9IHVpZG5hX0lETlRvQVNDSUkKLSAgICAgICAgKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVUNoYXIgKj4ocy51bmljb2RlKCkpLCBzLmxlbmd0aCgpLCBidWZmZXIsIGhvc3Ru
YW1lQnVmZmVyTGVuZ3RoLCBVSUROQV9BTExPV19VTkFTU0lHTkVELCAwLCAmZXJyb3IpOwotICAg
IGlmIChlcnJvciAhPSBVX1pFUk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQot
ICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8RGVwcmVjYXRlZENo
YXIgKj4oYnVmZmVyKSwgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCk7CisgICAgaW50MzJfdCBudW1D
aGFyYWN0ZXJzQ29udmVydGVkID0gdWlkbmFfSUROVG9BU0NJSSgKKyAgICAgICAgc3RyLCBzdHJM
ZW4sIGJ1ZmZlciwgaG9zdG5hbWVCdWZmZXJMZW5ndGgsIFVJRE5BX0FMTE9XX1VOQVNTSUdORUQs
IDAsICZlcnJvcik7CisgICAgaWYgKGVycm9yICE9IFVfWkVST19FUlJPUikKKyAgICAgICAgb3V0
cHV0LT5hcHBlbmQoYnVmZmVyLCBudW1DaGFyYWN0ZXJzQ29udmVydGVkKTsKICNlbGlmIFVTRShR
VDRfVU5JQ09ERSkKLSAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRvQWNlKHMpOwotICAg
IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKHJlc3VsdC5jb25zdERhdGEoKSwgcmVzdWx0Lmxlbmd0
aCgpKTsKKyAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRvQWNlKHMpOyAgLy8gRklYTUU6
IFRoaXMgaXMgd3JvbmcsIGJ1dCBJIGRvbid0IGtub3cgd2hhdCBpdCBzaG91bGQgYmUuCisgICAg
b3V0cHV0LT5hcHBlbmQocmVzdWx0LmNvbnN0RGF0YSwgcmVzdWx0Lmxlbmd0aCgpKTsKICNlbmRp
ZgogfQogCi1zdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gZmluZEhvc3RuYW1lc0luTWFp
bFRvVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCitzdGF0aWMgVmVjdG9yPHBhaXI8dW5z
aWduZWQsIHVuc2lnbmVkPiA+IGZpbmRIb3N0bmFtZXNJbk1haWxUb1VSTChjb25zdCBVQ2hhciog
c3RyLCB1bnNpZ25lZCBzdHJMZW4pCiB7CiAgICAgLy8gSW4gYSBtYWlsdG86IFVSTCwgaG9zdCBu
YW1lcyBjb21lIGFmdGVyIGEgJ0AnIGNoYXJhY3RlciBhbmQgZW5kIHdpdGggYSAnPicgb3IgJywn
IG9yICc/JyBvciBlbmQgb2Ygc3RyaW5nIGNoYXJhY3Rlci4KICAgICAvLyBTa2lwIHF1b3RlZCBz
dHJpbmdzIHNvIHRoYXQgY2hhcmFjdGVycyBpbiB0aGVtIGRvbid0IGNvbmZ1c2UgdXMuCiAgICAg
Ly8gV2hlbiB3ZSBmaW5kIGEgJz8nIGNoYXJhY3Rlciwgd2UgYXJlIHBhc3QgdGhlIHBhcnQgb2Yg
dGhlIFVSTCB0aGF0IGNvbnRhaW5zIGhvc3QgbmFtZXMuCiAKLSAgICBWZWN0b3I8cGFpcjxpbnQs
IGludD4gPiBhOworICAgIFZlY3RvcjxwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gPiBhOwogCi0g
ICAgaW50IHAgPSAwOworICAgIHVuc2lnbmVkIHAgPSAwOwogICAgIHdoaWxlICgxKSB7CiAgICAg
ICAgIC8vIEZpbmQgc3RhcnQgb2YgaG9zdCBuYW1lIG9yIG9mIHF1b3RlZCBzdHJpbmcuCi0gICAg
ICAgIGludCBob3N0bmFtZU9yU3RyaW5nU3RhcnQgPSBzLmZpbmQoUmVndWxhckV4cHJlc3Npb24o
IltcIkA/XSIpLCBwKTsKLSAgICAgICAgaWYgKGhvc3RuYW1lT3JTdHJpbmdTdGFydCA9PSAtMSkg
eworICAgICAgICB1bnNpZ25lZCBob3N0bmFtZU9yU3RyaW5nU3RhcnQgPSBmaW5kRmlyc3RPZihz
dHIsIHN0ckxlbiwgcCwgIlwiQD8iKTsKKyAgICAgICAgaWYgKGhvc3RuYW1lT3JTdHJpbmdTdGFy
dCA9PSBVSU5UX01BWCkKICAgICAgICAgICAgIHJldHVybiBhOwotICAgICAgICB9Ci0gICAgICAg
IERlcHJlY2F0ZWRDaGFyIGMgPSBzW2hvc3RuYW1lT3JTdHJpbmdTdGFydF07CisgICAgICAgIFVD
aGFyIGMgPSBzdHJbaG9zdG5hbWVPclN0cmluZ1N0YXJ0XTsKICAgICAgICAgcCA9IGhvc3RuYW1l
T3JTdHJpbmdTdGFydCArIDE7CiAKLSAgICAgICAgaWYgKGMgPT0gJz8nKSB7CisgICAgICAgIGlm
IChjID09ICc/JykKICAgICAgICAgICAgIHJldHVybiBhOwotICAgICAgICB9Ci0gICAgICAgIAor
CiAgICAgICAgIGlmIChjID09ICdAJykgewogICAgICAgICAgICAgLy8gRmluZCBlbmQgb2YgaG9z
dCBuYW1lLgotICAgICAgICAgICAgaW50IGhvc3RuYW1lU3RhcnQgPSBwOwotICAgICAgICAgICAg
aW50IGhvc3RuYW1lRW5kID0gcy5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJbPiw/XSIpLCBwKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGhvc3RuYW1lU3RhcnQgPSBwOworICAgICAgICAgICAgdW5z
aWduZWQgaG9zdG5hbWVFbmQgPSBmaW5kRmlyc3RPZihzdHIsIHN0ckxlbiwgcCwgIj4sPyIpOwog
ICAgICAgICAgICAgYm9vbCBkb25lOwotICAgICAgICAgICAgaWYgKGhvc3RuYW1lRW5kID09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgaG9zdG5hbWVFbmQgPSBzLmxlbmd0aCgpOworICAgICAgICAg
ICAgaWYgKGhvc3RuYW1lRW5kID09IFVJTlRfTUFYKSB7CisgICAgICAgICAgICAgICAgaG9zdG5h
bWVFbmQgPSBzdHJMZW47CiAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHAgPSBob3N0bmFtZUVuZDsKQEAgLTEzNTcsMjAg
KzE1MTcsMjAgQEAgc3RhdGljIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGZpbmRIb3N0bgogICAg
ICAgICAgICAgLy8gU2tpcCBxdW90ZWQgc3RyaW5nLgogICAgICAgICAgICAgQVNTRVJUKGMgPT0g
JyInKTsKICAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgaW50IGVzY2Fw
ZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiW1wiXFxd
IiksIHApOwotICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQg
PT0gLTEpCisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXNjYXBlZENoYXJhY3Rlck9yU3RyaW5n
RW5kID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIHAsICJcIlxcIik7CisgICAgICAgICAgICAg
ICAgaWYgKGVzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCA9PSBVSU5UX01BWCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGE7CiAKLSAgICAgICAgICAgICAgICBjID0gc1tlc2NhcGVkQ2hh
cmFjdGVyT3JTdHJpbmdFbmRdOworICAgICAgICAgICAgICAgIGMgPSBzdHJbZXNjYXBlZENoYXJh
Y3Rlck9yU3RyaW5nRW5kXTsKICAgICAgICAgICAgICAgICBwID0gZXNjYXBlZENoYXJhY3Rlck9y
U3RyaW5nRW5kICsgMTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIElm
IHdlIGFyZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHRoZW4gYnJlYWsgZnJvbSB0aGUgc3RyaW5n
IGxvb3AgYmFjayB0byB0aGUgaG9zdCBuYW1lIGxvb3AuCiAgICAgICAgICAgICAgICAgaWYgKGMg
PT0gJyInKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgIC8vIFNraXAgZXNjYXBlZCBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGMgPT0gJ1xcJyk7Ci0gICAgICAgICAgICAgICAgaWYgKHAgPT0gc3RhdGljX2Nh
c3Q8aW50PihzLmxlbmd0aCgpKSkKKyAgICAgICAgICAgICAgICBpZiAocCA9PSBzdHJMZW4pCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhOwogCiAgICAgICAgICAgICAgICAgKytwOwpAQCAt
MTM3OSwzNSArMTUzOSwzMiBAQCBzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gZmluZEhv
c3RuCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVS
TChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzLCBpbnQgJnN0YXJ0T2Zmc2V0LCBpbnQgJmVuZE9m
ZnNldCkKK3N0YXRpYyBib29sIGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKGNvbnN0IFVD
aGFyKiBzdHIsIHVuc2lnbmVkIHN0ckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkKiBzdGFydE9mZnNldCwgdW5zaWduZWQqIGVuZE9mZnNldCkK
IHsKICAgICAvLyBGaW5kIHRoZSBob3N0IG5hbWUgaW4gYSBoaWVyYXJjaGljYWwgVVJMLgogICAg
IC8vIEl0IGNvbWVzIGFmdGVyIGEgIjovLyIgc2VxdWVuY2UsIHdpdGggc2NoZW1lIGNoYXJhY3Rl
cnMgcHJlY2VkaW5nLgogICAgIC8vIElmIGVuZHMgd2l0aCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcg
b3IgYSAiOiIgb3IgYSBwYXRoIHNlZ21lbnQgZW5kaW5nIGNoYXJhY3Rlci4KICAgICAvLyBJZiB0
aGVyZSBpcyBhICJAIiBjaGFyYWN0ZXIsIHRoZSBob3N0IHBhcnQgaXMganVzdCB0aGUgcGFydCBh
ZnRlciB0aGUgIkAiLgotICAgIGludCBzZXBhcmF0b3IgPSBzLmZpbmQoIjovLyIpOwotICAgIGlm
IChzZXBhcmF0b3IgPD0gMCkgeworICAgIHVuc2lnbmVkIHNlcGFyYXRvciA9IGZpbmRTdWJzdHJp
bmcoc3RyLCBzdHJMZW4sICI6Ly8iKTsKKyAgICBpZiAoc2VwYXJhdG9yID09IFVJTlRfTUFYKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCiAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgY2hh
cmFjdGVycyBiZWZvcmUgdGhlIDovLyBhcmUgdmFsaWQgc2NoZW1lIGNoYXJhY3RlcnMuCi0gICAg
aWYgKCFpc1NjaGVtZUZpcnN0Q2hhcihzWzBdLmxhdGluMSgpKSkgeworICAgIGlmICghaXNTY2hl
bWVGaXJzdENoYXIoc3RyWzBdKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBm
b3IgKGludCBpID0gMTsgaSA8IHNlcGFyYXRvcjsgKytpKSB7Ci0gICAgICAgIGlmICghaXNTY2hl
bWVDaGFyKHNbaV0ubGF0aW4xKCkpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNl
cGFyYXRvcjsgKytpKSB7CisgICAgICAgIGlmICghaXNTY2hlbWVDaGFyKHN0cltpXSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAvLyBTdGFydCBh
ZnRlciB0aGUgc2VwYXJhdG9yLgotICAgIGludCBhdXRob3JpdHlTdGFydCA9IHNlcGFyYXRvciAr
IDM7CisgICAgdW5zaWduZWQgYXV0aG9yaXR5U3RhcnQgPSBzZXBhcmF0b3IgKyAzOwogCiAgICAg
Ly8gRmluZCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCi0gICAgaW50IGxlbmd0aCA9IHMubGVuZ3Ro
KCk7Ci0gICAgaW50IGhvc3RuYW1lRW5kID0gbGVuZ3RoOwotICAgIGZvciAoaW50IGkgPSBhdXRo
b3JpdHlTdGFydDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYyA9IHNbaV0ubGF0
aW4xKCk7CisgICAgdW5zaWduZWQgaG9zdG5hbWVFbmQgPSBzdHJMZW47CisgICAgZm9yICh1bnNp
Z25lZCBpID0gYXV0aG9yaXR5U3RhcnQ7IGkgPCBzdHJMZW47ICsraSkgeworICAgICAgICBVQ2hh
ciBjID0gc3RyW2ldOwogICAgICAgICBpZiAoYyA9PSAnOicgfHwgKGlzUGF0aFNlZ21lbnRFbmRD
aGFyKGMpICYmIGMgIT0gJ1wwJykpIHsKICAgICAgICAgICAgIGhvc3RuYW1lRW5kID0gaTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTQxNSw4MCArMTU3Miw4MyBAQCBzdGF0aWMgYm9vbCBmaW5k
SG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVSCiAgICAgfQogCiAgICAgLy8gRmluZCAiQCIgZm9yIHRo
ZSBzdGFydCBvZiB0aGUgaG9zdCBuYW1lLgotICAgIGludCB1c2VySW5mb1Rlcm1pbmF0b3IgPSBz
LmZpbmQoJ0AnLCBhdXRob3JpdHlTdGFydCk7Ci0gICAgaW50IGhvc3RuYW1lU3RhcnQ7Ci0gICAg
aWYgKHVzZXJJbmZvVGVybWluYXRvciA9PSAtMSB8fCB1c2VySW5mb1Rlcm1pbmF0b3IgPiBob3N0
bmFtZUVuZCkgeworICAgIHVuc2lnbmVkIHVzZXJJbmZvVGVybWluYXRvciA9IGZpbmRGaXJzdE9m
KHN0ciwgc3RyTGVuLCBhdXRob3JpdHlTdGFydCwgIkAiKTsKKyAgICB1bnNpZ25lZCBob3N0bmFt
ZVN0YXJ0OworICAgIGlmICh1c2VySW5mb1Rlcm1pbmF0b3IgPT0gVUlOVF9NQVggfHwgdXNlcklu
Zm9UZXJtaW5hdG9yID4gaG9zdG5hbWVFbmQpCiAgICAgICAgIGhvc3RuYW1lU3RhcnQgPSBhdXRo
b3JpdHlTdGFydDsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAgICAgICAgaG9zdG5hbWVTdGFy
dCA9IHVzZXJJbmZvVGVybWluYXRvciArIDE7Ci0gICAgfQogCi0gICAgc3RhcnRPZmZzZXQgPSBo
b3N0bmFtZVN0YXJ0OwotICAgIGVuZE9mZnNldCA9IGhvc3RuYW1lRW5kOworICAgICpzdGFydE9m
ZnNldCA9IGhvc3RuYW1lU3RhcnQ7CisgICAgKmVuZE9mZnNldCA9IGhvc3RuYW1lRW5kOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVIb3N0bmFt
ZXMoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKKy8vIENvbnZlcnRzIGFsbCBob3N0bmFtZXMg
Zm91bmQgaW4gdGhlIGdpdmVuIGlucHV0IHRvIHB1bnljb2RlLCBwcmVzZXJ2aW5nIHRoZQorLy8g
cmVzdCBvZiB0aGUgVVJMIHVuY2hhbmdlZC4gVGhlIG91dHB1dCB3aWxsIE5PVCBiZSBOVUxMLXRl
cm1pbmF0ZWQuCitzdGF0aWMgdm9pZCBlbmNvZGVIb3N0bmFtZXMoY29uc3QgVUNoYXIqIHN0ciwg
dW5zaWduZWQgc3RyTGVuLCBUZW1wVUNoYXJCdWZmZXIqIG91dHB1dCkKIHsKLSAgICBpZiAocy5z
dGFydHNXaXRoKCJtYWlsdG86IiwgZmFsc2UpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxwYWly
PGludCwgaW50PiA+IGhvc3RuYW1lUmFuZ2VzID0gZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKHMp
OworICAgIG91dHB1dC0+cmVzaXplKDApOworCisgICAgaWYgKHN0YXJ0c1dpdGhJZ25vcmVDYXNl
KHN0ciwgc3RyTGVuLCAibWFpbHRvOiIsIDcpKSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gPiBob3N0bmFtZVJhbmdlcyA9IGZpbmRIb3N0bmFtZXNJbk1h
aWxUb1VSTChzdHIsIHN0ckxlbik7CiAgICAgICAgIGludCBuID0gaG9zdG5hbWVSYW5nZXMuc2l6
ZSgpOwotICAgICAgICBpZiAobiAhPSAwKSB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IHJlc3VsdDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHAgPSAwOwotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBwYWlyPGludCwg
aW50PiAmciA9IGhvc3RuYW1lUmFuZ2VzW2ldOwotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBz
Lm1pZChwLCByLmZpcnN0KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gZW5jb2RlSG9zdG5h
bWUocy5taWQoci5maXJzdCwgci5zZWNvbmQgLSByLmZpcnN0KSk7Ci0gICAgICAgICAgICAgICAg
cCA9IHIuc2Vjb25kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ICs9IHMubWlk
KHApOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQorICAgICAgICB1bnNp
Z25lZCBwID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAg
ICAgICAgIGNvbnN0IHBhaXI8aW50LCBpbnQ+ICZyID0gaG9zdG5hbWVSYW5nZXNbaV07CisgICAg
ICAgICAgICBvdXRwdXQtPmFwcGVuZCgmc3RyW3BdLCByLmZpcnN0IC0gcCk7CisgICAgICAgICAg
ICBhcHBlbmRFbmNvZGVkSG9zdG5hbWUoJnN0cltyLmZpcnN0XSwgci5zZWNvbmQgLSByLmZpcnN0
LCBvdXRwdXQpOworICAgICAgICAgICAgcCA9IHIuc2Vjb25kOworICAgICAgICB9CisgICAgICAg
IC8vIFRoaXMgd2lsbCBjb3B5IGVpdGhlciBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IG5vc3Ru
YW1lLCBvciB0aGUKKyAgICAgICAgLy8gd2hvbGUgdGhpbmcgaWYgdGhlcmUgaXMgbm8gaG9zdG5h
bWUuCisgICAgICAgIG91dHB1dC0+YXBwZW5kKCZzdHJbcF0sIHN0ckxlbiAtIHApOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGludCBob3N0U3RhcnQsIGhvc3RFbmQ7Ci0gICAgICAgIGlmIChmaW5k
SG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVSTChzLCBob3N0U3RhcnQsIGhvc3RFbmQpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gcy5sZWZ0KGhvc3RTdGFydCkgKyBlbmNvZGVIb3N0bmFtZShzLm1pZCho
b3N0U3RhcnQsIGhvc3RFbmQgLSBob3N0U3RhcnQpKSArIHMubWlkKGhvc3RFbmQpOyAKKyAgICAg
ICAgdW5zaWduZWQgaG9zdFN0YXJ0LCBob3N0RW5kOworICAgICAgICBpZiAoZmluZEhvc3RuYW1l
SW5IaWVyYXJjaGljYWxVUkwoc3RyLCBzdHJMZW4sICZob3N0U3RhcnQsICZob3N0RW5kKSkgewor
ICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoc3RyLCBob3N0U3RhcnQpOyAgLy8gQmVmb3JlIGhv
c3RuYW1lLgorICAgICAgICAgICAgYXBwZW5kRW5jb2RlZEhvc3RuYW1lKCZzdHJbaG9zdFN0YXJ0
XSwgaG9zdEVuZCAtIGhvc3RTdGFydCwgb3V0cHV0KTsKKyAgICAgICAgICAgIG91dHB1dC0+YXBw
ZW5kKCZzdHJbaG9zdEVuZF0sIHN0ckxlbiAtIGhvc3RFbmQpOyAgLy8gQWZ0ZXIgaG9zdG5hbWUu
CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHM7CiB9CiAKLXN0YXRpYyBjaGFyICplbmNv
ZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBLVVJMICZiYXNlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5n
ICZyZWwsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitzdGF0aWMgdm9pZCBlbmNvZGVS
ZWxhdGl2ZVN0cmluZyhjb25zdCBTdHJpbmcmIHJlbCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBVQ2hhckJ1ZmZlciog
b3V0cHV0KQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IGVuY29kZUhvc3RuYW1lcyhyZWwp
OwotCi0gICAgY2hhciAqc3RyQnVmZmVyOworICAgIFRlbXBVQ2hhckJ1ZmZlciBzOworICAgIGVu
Y29kZUhvc3RuYW1lcyhyZWwuY2hhcmFjdGVycygpLCByZWwubGVuZ3RoKCksICZzKTsKIAogICAg
IFRleHRFbmNvZGluZyBwYXRoRW5jb2RpbmcoVVRGOEVuY29kaW5nKCkpOwogICAgIFRleHRFbmNv
ZGluZyBvdGhlckVuY29kaW5nID0gKGVuY29kaW5nLmlzVmFsaWQoKSAmJiAhcmVsLnN0YXJ0c1dp
dGgoIm1haWx0bzoiLCBmYWxzZSkpID8gZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKTsKLSAgICAK
KwogICAgIGludCBwYXRoRW5kID0gLTE7CiAgICAgaWYgKHBhdGhFbmNvZGluZyAhPSBvdGhlckVu
Y29kaW5nKSB7Ci0gICAgICAgIHBhdGhFbmQgPSBzLmZpbmQoUmVndWxhckV4cHJlc3Npb24oIls/
I10iKSk7CisgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGluc3RhbmNlIG9mIGVpdGhlciAjIG9y
ID8sIGtlZXAgcGF0aEVuZCBhdCAtMSBvdGhlcndpc2UuCisgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IGZpbmRGaXJzdE9mKHMuZGF0YSgpLCBzLnNpemUoKSwgMCwgIiM/Iik7CisgICAgICAgIGlm
IChyZXN1bHQgIT0gVUlOVF9NQVgpCisgICAgICAgICAgICBwYXRoRW5kID0gcmVzdWx0OwogICAg
IH0KKwogICAgIGlmIChwYXRoRW5kID09IC0xKSB7Ci0gICAgICAgIENTdHJpbmcgZGVjb2RlZCA9
IHBhdGhFbmNvZGluZy5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHMudW5p
Y29kZSgpKSwgcy5sZW5ndGgoKSk7CisgICAgICAgIENTdHJpbmcgZGVjb2RlZCA9IHBhdGhFbmNv
ZGluZy5lbmNvZGUocy5kYXRhKCksIHMuc2l6ZSgpKTsKICAgICAgICAgaW50IGRlY29kZWRMZW5n
dGggPSBkZWNvZGVkLmxlbmd0aCgpOwotICAgICAgICBzdHJCdWZmZXIgPSBzdGF0aWNfY2FzdDxj
aGFyICo+KGZhc3RNYWxsb2MoZGVjb2RlZExlbmd0aCArIDEpKTsKLSAgICAgICAgbWVtY3B5KHN0
ckJ1ZmZlciwgZGVjb2RlZC5kYXRhKCksIGRlY29kZWRMZW5ndGgpOwotICAgICAgICBzdHJCdWZm
ZXJbZGVjb2RlZExlbmd0aF0gPSAwOworCisgICAgICAgIG91dHB1dC0+cmVzaXplKGRlY29kZWRM
ZW5ndGgpOworICAgICAgICBtZW1jcHkob3V0cHV0LT5kYXRhKCksIGRlY29kZWQuZGF0YSgpLCBk
ZWNvZGVkTGVuZ3RoKTsKICAgICB9IGVsc2UgewotICAgICAgICBpbnQgbGVuZ3RoID0gcy5sZW5n
dGgoKTsKLSAgICAgICAgQ1N0cmluZyBwYXRoRGVjb2RlZCA9IHBhdGhFbmNvZGluZy5lbmNvZGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHMudW5pY29kZSgpKSwgcGF0aEVuZCk7Ci0g
ICAgICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0gb3RoZXJFbmNvZGluZy5lbmNvZGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHMudW5pY29kZSgpKSArIHBhdGhFbmQsIGxlbmd0aCAt
IHBhdGhFbmQpOworICAgICAgICBDU3RyaW5nIHBhdGhEZWNvZGVkID0gcGF0aEVuY29kaW5nLmVu
Y29kZShzLmRhdGEoKSwgcGF0aEVuZCk7CisgICAgICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0g
b3RoZXJFbmNvZGluZy5lbmNvZGUocy5kYXRhKCkgKyBwYXRoRW5kLCBzLnNpemUoKSAtIHBhdGhF
bmQpOwogICAgICAgICBpbnQgcGF0aERlY29kZWRMZW5ndGggPSBwYXRoRGVjb2RlZC5sZW5ndGgo
KTsKICAgICAgICAgaW50IG90aGVyRGVjb2RlZExlbmd0aCA9IG90aGVyRGVjb2RlZC5sZW5ndGgo
KTsKLSAgICAgICAgc3RyQnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihmYXN0TWFsbG9jKHBh
dGhEZWNvZGVkTGVuZ3RoICsgb3RoZXJEZWNvZGVkTGVuZ3RoICsgMSkpOwotICAgICAgICBtZW1j
cHkoc3RyQnVmZmVyLCBwYXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVkTGVuZ3RoKTsKLSAg
ICAgICAgbWVtY3B5KHN0ckJ1ZmZlciArIHBhdGhEZWNvZGVkTGVuZ3RoLCBvdGhlckRlY29kZWQu
ZGF0YSgpLCBvdGhlckRlY29kZWRMZW5ndGgpOwotICAgICAgICBzdHJCdWZmZXJbcGF0aERlY29k
ZWRMZW5ndGggKyBvdGhlckRlY29kZWRMZW5ndGhdID0gMDsKLSAgICB9CiAKLSAgICByZXR1cm4g
c3RyQnVmZmVyOworICAgICAgICBvdXRwdXQtPnJlc2l6ZShwYXRoRGVjb2RlZExlbmd0aCArIG90
aGVyRGVjb2RlZExlbmd0aCk7CisgICAgICAgIG1lbWNweShvdXRwdXQtPmRhdGEoKSwgcGF0aERl
Y29kZWQuZGF0YSgpLCBwYXRoRGVjb2RlZExlbmd0aCk7CisgICAgICAgIG1lbWNweShvdXRwdXQt
PmRhdGEoKSArIHBhdGhEZWNvZGVkTGVuZ3RoLCBvdGhlckRlY29kZWQuZGF0YSgpLCBvdGhlckRl
Y29kZWRMZW5ndGgpOworICAgIH0KIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3Rp
dHV0ZUJhY2tzbGFzaGVzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmluZykKK3N0YXRpYyBT
dHJpbmcgc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKGNvbnN0IFN0cmluZyAmc3RyaW5nKQogewogICAg
IGludCBxdWVzdGlvblBvcyA9IHN0cmluZy5maW5kKCc/Jyk7CiAgICAgaW50IGhhc2hQb3MgPSBz
dHJpbmcuZmluZCgnIycpOwpAQCAtMTUwMiwyMSArMTY2MiwyMSBAQCBzdGF0aWMgRGVwcmVjYXRl
ZFN0cmluZyBzdWJzdGl0dXRlQmFja3NsCiAgICAgICAgIHBhdGhFbmQgPSBzdHJpbmcubGVuZ3Ro
KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmluZy5sZWZ0KHBhdGhFbmQpLnJlcGxhY2UoJ1xc
JywnLycpICsgc3RyaW5nLm1pZChwYXRoRW5kKTsKKyAgICByZXR1cm4gc3RyaW5nLmxlZnQocGF0
aEVuZCkucmVwbGFjZSgnXFwnLCcvJykgKyBzdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmQpOwogfQog
CiBib29sIEtVUkw6OmlzSGllcmFyY2hpY2FsKCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxp
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVCh1cmxTdHJpbmdbc2NoZW1lRW5k
UG9zXSA9PSAnOicpOwotICAgIHJldHVybiB1cmxTdHJpbmdbc2NoZW1lRW5kUG9zICsgMV0gPT0g
Jy8nOworICAgIEFTU0VSVChtX3VybFtzY2hlbWVFbmRQb3NdID09ICc6Jyk7CisgICAgcmV0dXJu
IG1fdXJsW3NjaGVtZUVuZFBvcyArIDFdID09ICcvJzsKIH0KIAogI2lmbmRlZiBOREVCVUcKIHZv
aWQgS1VSTDo6cHJpbnQoKSBjb25zdAogewotICAgIHByaW50ZigiJXNcbiIsIHVybFN0cmluZy5h
c2NpaSgpKTsKKyAgICBwcmludGYoIiVzXG4iLCBtX3VybC51dGY4KCkuZGF0YSgpKTsKIH0KICNl
bmRpZgogCkluZGV4OiBLVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gS1VSTC5oCShyZXZpc2lvbiAyOTg0
OCkKKysrIEtVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDM1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtVUkwgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQorICAg
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgS1VSTCYgYSwgY29uc3QgS1VSTCAgJmIpIHsg
cmV0dXJuICEoYSA9PSBiKTsgfQogCiAgICAgYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtV
UkwmLCBjb25zdCBLVVJMJik7CiAKIGNsYXNzIEtVUkwgewogcHVibGljOgorICAgIC8vIEdlbmVy
YXRlcyBhIFVSTCB3aGljaCBjb250YWlucyBhbiBpc051bGwgc3RyaW5nLgogICAgIEtVUkwoKTsK
LSAgICBLVVJMKGNvbnN0IGNoYXIqKTsKLSAgICBLVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJik7Ci0gICAgS1VSTChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwotICAgIEtVUkwoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYpOworCisgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGFuIGFic29sdXRlIFVSTCBzdHJpbmcu
IEZvciB0aGUgY2hhciogdmVyc2lvbiwgdGhlCisgICAgLy8gc3RyaW5nJ3MgZW5jb2RpbmcgaXMg
YXNzdW1lZCB0byBiZSBmaW5hbC4gRm9yIHRoZSBzdHJpbmcgdmVyc2lvbiwgaXQKKyAgICAvLyB3
aWxsIGJlIHRyZWF0ZWQgYXMgVVRGLTguCisgICAgLy8KKyAgICAvLyBEQU5HRVIhIFRob3MgZG9l
cyBub3QgZG8gdGhpbmdzIGxpa2UgSUROLCBhbmQgdGhlIHJlc3VsdGluZyBob3N0IG5hbWUKKyAg
ICAvLyB3aWxsIGJlIG1hbmdsZWQuIFVzZSBvbmx5IGlmIHlvdSBoYXZlIGFuIEFTQ0lJIHN0cmlu
Zywgb3Igb25lIHdoaWNoIGNhbWUKKyAgICAvLyBmcm9tIGEgS1VSTCBvcmlnaW5hbGx5LCBZb3Ug
YWxtb3N0IGNlcnRhaW5seSB3YW50IHRvIHVzZToKKyAgICAvLyAgIEtVUkwoTlVSTCgpLCB5b3Vy
VVJMKTsKKyAgICAvLyB3aGljaCB3aWxsIGRvIGV2ZXJ5dGhpbmcgcHJvcGVybHkgaW5zdGVhZCBv
ZiB0aGVzZSBmdW5jdGlvbnMuCisgICAgZXhwbGljaXQgS1VSTChjb25zdCBjaGFyKik7CisgICAg
ZXhwbGljaXQgS1VSTChjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIFJlc29sdmVzIHRoZSByZWxh
dGl2ZSBVUkwgd2l0aCB0aGUgZ2l2ZW4gYmFzZSBVUkwuIElmIHByb3ZpZGVkLCB0aGUKKyAgICAv
LyBUZXh0RW5jb2RpbmcgaXMgdXNlZCB0byBlbmNvZGUgdGhlIHF1ZXJ5IGlmIHByb3ZpZGVkLiBU
aGUgcXVlcnkgZW5jb2RpbmcKKyAgICAvLyB3aWxsIGJlIFVURi04IG90aGVyd2lzZS4gVGhlIGJh
c2UgVVJMIGNhbiBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAvLyByZWxhdGl2ZSBV
Ukwgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhYnNvbHV0ZSAodGhpcyBpcyB0aGUgb25seSB3YXkg
dG8KKyAgICAvLyBwYXJzZSBhbiBhYnNvbHV0ZSBVUkwgd2l0aCBhIGN1c3RvbSBxdWVyeSBlbmNv
ZGluZykuCisgICAgS1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZl
KTsKKyAgICBLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNv
bnN0IFRleHRFbmNvZGluZyYpOworCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIEtVUkwoTlNVUkwq
KTsKICNlbmRpZgpAQCAtNzIsMzggKzkwLDUyIEBAIHB1YmxpYzoKICAgICBLVVJMKGNvbnN0IFFV
cmwmKTsKICNlbmRpZgogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1cmxTdHJp
bmcuaXNOdWxsKCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB1cmxTdHJp
bmcuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3VybC5p
c051bGwoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLmlzRW1w
dHkoKTsgfQogCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgVVJMIGhzYSBhIHBhdGguIE5v
dGUgdGhhdCAiaHR0cDovL2Zvby5jb20vIiBoYXMgYQorICAgIC8vIHBhdGggb2YgIi8iLCBzbyB0
aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUuIE9ubHkgaW52YWxpZCBvcgorICAgIC8vIG5v
bi1oaWVyYXJjaGljYWwgKGxpa2UgImphdmFzY3JpcHQ6IikgVVJMcyB3aWxsIGhhdmUgbm8gcGF0
aC4KICAgICBib29sIGhhc1BhdGgoKSBjb25zdDsKIAotICAgIFN0cmluZyBzdHJpbmcoKSBjb25z
dCB7IHJldHVybiB1cmxTdHJpbmc7IH0KLSAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBkZXBy
ZWNhdGVkU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdXJsU3RyaW5nOyB9CisgICAgY29uc3QgU3Ry
aW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIERlcHJlY2F0ZWRTdHJp
bmcgZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLmRlcHJlY2F0ZWRTdHJp
bmcoKTsgfQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwcm90b2NvbCgpIGNvbnN0OwotICAgIERl
cHJlY2F0ZWRTdHJpbmcgaG9zdCgpIGNvbnN0OworICAgIFN0cmluZyBwcm90b2NvbCgpIGNvbnN0
OworICAgIFN0cmluZyBob3N0KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgc2hvcnQgaW50IHBvcnQo
KSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVzZXIoKSBjb25zdDsKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHBhc3MoKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHBhdGgoKSBjb25z
dDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3Q7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyBxdWVyeSgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVm
KCkgY29uc3Q7CisgICAgU3RyaW5nIHVzZXIoKSBjb25zdDsKKyAgICBTdHJpbmcgcGFzcygpIGNv
bnN0OworICAgIFN0cmluZyBwYXRoKCkgY29uc3Q7CisgICAgU3RyaW5nIGxhc3RQYXRoQ29tcG9u
ZW50KCkgY29uc3Q7CisgICAgU3RyaW5nIHF1ZXJ5KCkgY29uc3Q7ICAvLyBXSUxMIGluY2x1ZGUg
dGhlICI/Ii4KKyAgICBTdHJpbmcgcmVmKCkgY29uc3Q7ICAgIC8vIFdpbGwgTk9UIGluY2x1ZGUg
dGhlICIjIi4KICAgICBib29sIGhhc1JlZigpIGNvbnN0OwogCi0gICAgRGVwcmVjYXRlZFN0cmlu
ZyBlbmNvZGVkSHRtbFJlZigpIGNvbnN0IHsgcmV0dXJuIHJlZigpOyB9Ci0KLSAgICB2b2lkIHNl
dFByb3RvY29sKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRIb3N0KGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQb3J0KHVuc2lnbmVkIHNob3J0
IGludCk7Ci0gICAgdm9pZCBzZXRIb3N0QW5kUG9ydChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7
Ci0gICAgdm9pZCBzZXRVc2VyKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBz
ZXRQYXNzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQYXRoKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRRdWVyeShjb25zdCBEZXByZWNhdGVk
U3RyaW5nICYpOwotICAgIHZvaWQgc2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Cisg
ICAgLy8gUmV0dXJucyB0cnVlIG9mIHRoZSBjdXJyZW50IFVSTCdzIHByb3RvY29sIGlzIHRoZSBz
YW1lIGFzIHRoZSBOVUxMLQorICAgIC8vIHRlcm1pbmF0ZWQgQVNDSUkgYXJndW1lbnQuIFRoZSBh
cmd1bWVudCBtYXkgYmUgdXBwZXItIG9yIGxvd2VyLWNhc2UuCisgICAgYm9vbCBwcm90b2NvbElz
KGNvbnN0IGNoYXIqKSBjb25zdDsKKworICAgIFN0cmluZyBlbmNvZGVkSHRtbFJlZigpIGNvbnN0
IHsgcmV0dXJuIHJlZigpOyB9CisKKyAgICB2b2lkIHNldFByb3RvY29sKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgc2V0SG9zdChjb25zdCBTdHJpbmcmKTsgIC8vIElucHV0IG11c3Qgbm90IGJl
IGlzTnVsbCgpOworICAgIC8vIFNldHRpbmcgdGhlIHBvcnQgdG8gMCB3aWxsIGNsZWFyIGFueSBw
b3J0IGZyb20gdGhlIFVSTC4KKyAgICB2b2lkIHNldFBvcnQodW5zaWduZWQgc2hvcnQgaW50KTsg
IC8vIEZJWE1FOiBTZXR0aW5nIDAgd2lsbCBOT1QgY2xlYXIgdGhlIHBvcnQuCisgICAgLy8gSW5w
dXQgaXMgbGlrZSAiZm9vLmNvbSIgb3IgImZvby5jb206ODAwMCIuCisgICAgdm9pZCBzZXRIb3N0
QW5kUG9ydChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFVzZXIoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBzZXRQYXNzKGNvbnN0IFN0cmluZyYpOworICAgIC8vIElmIHlvdSBwYXNzIGFu
IGVtcHR5IHBhdGggZm9yIEhUVFAgb3IgSFRUUFMgVVJMcywgdGhlIHJlc3VsdGluZyBwYXRoCisg
ICAgLy8gd2lsbCBiZSAiLyIuCisgICAgdm9pZCBzZXRQYXRoKGNvbnN0IFN0cmluZyYpOworICAg
IC8vIFRoZSBxdWVyeSBtYXkgYmVnaW4gd2l0aCBhIHF1ZXN0aW9uIG1hcmssIG9yLCBpZiBub3Qs
IG9uZSB3aWxsIGJlIGFkZGVkCisgICAgLy8gZm9yIHlvdS4gU2V0dGluZyB0aGUgcXVlcnkgdG8g
dGhlIGVtcHR5IHN0cmluZyB3aWxsIGxlYXZlIGEgIj8iIGluIHRoZQorICAgIC8vIFVSTCAod2l0
aCBub3RoaW5nIGFmdGVyIGl0KS4gVG8gY2xlYXIgdGhlIHF1ZXJ5LCBwYXNzIGFuIGlzTnVsbCgp
IHN0cmluZy4KKyAgICB2b2lkIHNldFF1ZXJ5KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0
UmVmKGNvbnN0IFN0cmluZyYpOyAgLy8gVXNlIHRoZSBlbXB0eSBzdHJpbmcgdG8gY2xlYXIuCiAK
LSAgICBEZXByZWNhdGVkU3RyaW5nIHByZXR0eVVSTCgpIGNvbnN0OworICAgIFN0cmluZyBwcmV0
dHlVUkwoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKENGKQogICAgIENGVVJMUmVmIGNyZWF0ZUNG
VVJMKCkgY29uc3Q7CkBAIC0xMTcsMTEgKzE0OSwxOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
TG9jYWxGaWxlKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBkZWNvZGVf
c3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0
cmluZyBkZWNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5j
b2RpbmcmKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVfc3RyaW5nKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAgICAKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEtVUkwgJiwgY29uc3QgS1VSTCAmKTsKKyAgICAvLyBVbmVzY2FwZXMgdGhlIGdpdmVuIHN0
cmluZyB1c2luZyBVUkwgZXNjYXBpbmcgcnVsZXMsIGdpdmVuIGFuIG9wdGlvbmFsCisgICAgLy8g
ZW5jb2RpbmcgKGRlZmF1bHRpbmcgdG8gVVRGLTggb3RoZXJ3aXNlKS4gRW5jb2RlZCBzdHJpbmdz
IChpbnB1dCBhbmQKKyAgICAvLyBvdXRwdXQpIGFyZSBhbHdheXMgOC1iaXQsIGV2ZW4gdGhvdWdo
IHRoaXMgZnVuY3Rpb24gdXNlcyBTdHJpbmcgdG8gaG9sZAorICAgIC8vIHRoZW0uCisgICAgLy8K
KyAgICAvLyBEQU5HRVI6IElmIHRoZSBVUkwgaGFzICIlMDAiIGluIGl0LCB0aGUgcmVzdWx0aW5n
IHN0cmluZyB3aWxsIGhhdmUKKyAgICAvLyBlbWJlZGRlZCBOVUxMcyEKKyAgICBzdGF0aWMgU3Ry
aW5nIGRlY29kZV9zdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFN0cmluZyBkZWNv
ZGVfc3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgIHN0YXRp
YyBTdHJpbmcgZW5jb2RlX3N0cmluZyhjb25zdCBTdHJpbmcmKTsKKworICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0oY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKIAogI2lmbmRlZiBOREVCVUcK
ICAgICB2b2lkIHByaW50KCkgY29uc3Q7CkBAIC0xMjksMTAgKzE2OCwyMCBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBpc0hpZXJhcmNoaWNhbCgpIGNvbnN0OwotICAgIHZvaWQgaW5p
dChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGlu
ZyYpOwotICAgIHZvaWQgcGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICpvcmlnaW5hbFN0cmluZyk7CisgICAgdm9pZCBpbml0KGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKworICAgIC8vIFBhcnNlcyB0aGUgZ2l2ZW4g
VVJMLiBUaGUgb3JpZ2luYWxTdHJpbmcgcGFyYW1ldGVyIGFsbG93cyBmb3IgYW0KKyAgICAvLyBv
cHRpbWl6YXRpb24gd2hlbiB0aGUgc291cmNlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXhlZC11cCBz
dHJpbmcsIGl0IHdpbGwKKyAgICAvLyB1c2Ugc3RyaW5nIHJlZmVyZW5jZS1jb3VudGVkIGNvcGll
cyBpbnN0ZWFkIG9mIGRvaW5nIGEgbmV3IGFsbG9jYXRpb24uCisgICAgLy8KKyAgICAvLyBUaGlz
IHBhcmFtZXRlciBpcyBhbHNvICpuZWNlc3NhcnkqIGlmIHRoZSBpbnB1dCB0byB0aGUgS1VSTCBj
b25zdHJ1Y3RvcgorICAgIC8vIGlzIGFuIGVtcHR5IFN0cmluZy4gU29tZSBjYWxsaW5nIGNvZGUg
cmVxdWlyZXMgdGhhdCB0aGUgZGlmZmVyZW5jZQorICAgIC8vIGJldHdlZW4gTlVMTCBhbmQgZW1w
dHkgc3RyaW5ncyBpcyBtYWludGFpbmVkLiBQYXJzaW5nIHdpbGwgbm90IGNoYW5nZQorICAgIC8v
IHRoZSBlbXB0eSBzdHJpbmcsIHNvIHRoZSBpbnRlcm5hbCBzdHJpbmcgd2lsbCBiZSBhc3NpZ25l
ZCB0byBleGFjdGx5CisgICAgLy8gd2hhdGV2ZXIgdGhlIGlucHV0IHN0cmluZyBpcy4KKyAgICB2
b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIHVybExlbiwgY29uc3QgU3RyaW5n
KiBvcmlnaW5hbFN0cmluZyk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybFN0cmluZzsKKyAg
ICBTdHJpbmcgbV91cmw7CiAgICAgYm9vbCBtX2lzVmFsaWQ7CiAgICAgaW50IHNjaGVtZUVuZFBv
czsKICAgICBpbnQgdXNlclN0YXJ0UG9zOwpAQCAtMTQzLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAg
ICAgaW50IHBhdGhFbmRQb3M7CiAgICAgaW50IHF1ZXJ5RW5kUG9zOwogICAgIGludCBmcmFnbWVu
dEVuZFBvczsKLSAgICAKKwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdSZWYoY29uc3Qg
S1VSTCYgYSwgY29uc3QgS1VSTCYgYik7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18947</attachid>
            <date>2008-02-05 20:01:37 -0800</date>
            <delta_ts>2008-02-10 08:07:09 -0800</delta_ts>
            <desc>New patch addressing most comments</desc>
            <filename>string.diff</filename>
            <type>text/plain</type>
            <size>90196</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDAzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDA4LTAyLTA1ICBNYXJ2aW4gRGVja2VyICA8bWFydi5kZWNrZXJA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIEZp
eCBLVVJMJ3MgaW50ZXJmYWNlIHRvIHVzZSBTdHJpbmcgaW5zdGVhZCBvZiBEZXByZWNhdGVkU3Ry
aW5nICh0aGUKKyAgICAgICAgaW50ZXJuYWxzIHdpbGwgYmUgZml4ZWQgbGF0ZXIpLiBBZGRlZCBh
IG5ldyBmdW5jdGlvbiBLVVJMLnByb3RvY29sSXMKKyAgICAgICAgdG8gZWZmaWNpZW50bHkgY29t
cGFyZSBwcm90b2NvbHMgd2l0aG91dCBjYXNlIGVycm9ycy4gTWFkZSB0aGUKKyAgICAgICAgY29u
c3RydWN0b3JzIGV4cGxpY2l0IHRvIGhpZ2hsaWdodCBleHBlbnNpdmUgb3BlcmF0aW9ucy4KKwor
ICAgICAgICBIYWxmIGZpeGVzIDE2NTM4IChLVVJMIHNob3VsZCB1c2UgU3RyaW5nKSwgZml4ZXMg
YnVnIDE2NDg1CisgICAgICAgIChEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkIHdpbGwgY3Jhc2gg
aWYgdGhlIFVSTCBpc051bGwpLiBJIGZpeGVkIGEKKyAgICAgICAgc2ltaWxhciBwcm9ibGVtIGlu
IEljb25EYXRhYmFzZSB3aGljaCBoYXMgbm8gYXNzb2NpYXRlZCBidWcuIFRoaXMgZml4ZXMKKyAg
ICAgICAgYnVnIDE2NDg3IChLVVJMIGRvZXNuJ3QgcHJlc2VydmUgaXNOdWxsIG9uIGl0cyBhcmd1
bWVudHMpLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5jcHA6CisgICAgICAgIChLSlM6Ok5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eSk6
CisgICAgICAgICogYmluZGluZ3MvanMva2pzX3Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OktKU1Byb3h5Ojppbml0U2NyaXB0KToKKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjppbnNlcnRlZEludG9QYXJlbnQpOgor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0
Q29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpjb21wbGV0ZVVSTCk6CisgICAg
ICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YmFzZVVS
SSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjb3B5KToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBbmNob3JFbGVtZW50Ojpob3N0KToKKyAgICAgICAgKiBodG1sL0hUTUxLZXlnZW5FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50OjphcHBlbmRGb3Jt
RGF0YSk6CisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRl
cjo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjppY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRP
cGVuVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRFeHBsaWNpdE9wZW4p
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmdvdG9BbmNob3IpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdGFy
dFJlZGlyZWN0aW9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbW1p
dFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwpOgorICAg
ICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVGaXJzdENoYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUGF0aFNl
Z21lbnRFbmRDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQWxsQVNDSUkpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUFTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdE9mKToKKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpsYXN0UGF0aENvbXBvbmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpLVVJMOjpwcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpob3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6S1VS
TDo6dXNlcik6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpyZWYpOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6cHJvdG9jb2xJcyk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpxdWVyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNl
dFByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldEhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6S1VSTDo6c2V0UG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRIb3N0
QW5kUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRVc2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OktVUkw6OnNldFBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6c2V0UmVmKToK
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OnNldFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cHJldHR5VVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OmRlY29kZV9zdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6S1VS
TDo6aXNMb2NhbEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kRXNjYXBpbmdCYWRDaGFy
cyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UGF0aFJlbW92aW5nRG90cyk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXNTbGFzaERvdE9yRG90RG90KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBh
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
S1VSTDo6ZW5jb2RlX3N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRFbmNvZGVkSG9z
dG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUhvc3RuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVSZWxh
dGl2ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJzdGl0dXRlQmFja3NsYXNoZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL0tVUkwuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0p
OgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZW5jb2RlZEh0bWxSZWYpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjphZGRQREZVUkxSZWN0KToKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVudERvbWFpbik6
CisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNM
SW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKToKKwogMjAwOC0wMi0wNSAgU2FtdWVs
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL1dlYkNvcmUu
YmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Miw3ICszNzIsNyBAQCBfX1pON1dlYkNvcmU0
Rm9udEQxRXYKIF9fWk43V2ViQ29yZTRGb250YVNFUktTMF8KIF9fWk43V2ViQ29yZTRLVVJMMTNk
ZWNvZGVfc3RyaW5nRVJLTlNfMTZEZXByZWNhdGVkU3RyaW5nRQogX19aTjdXZWJDb3JlNEtVUkxD
MUVQNU5TVVJMCi1fX1pON1dlYkNvcmU0S1VSTEMxRVJLTlNfMTZEZXByZWNhdGVkU3RyaW5nRQor
X19aTjdXZWJDb3JlNEtVUkxDMUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmU0S1VSTEMxRXYK
IF9fWk43V2ViQ29yZTROb2RlMTdzdG9wSWdub3JpbmdMZWFrc0V2CiBfX1pON1dlYkNvcmU0Tm9k
ZTE4c3RhcnRJZ25vcmluZ0xlYWtzRXYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdh
dG9yLmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZp
Z2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgSlNWYWx1ZSogTmF2
aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogICAgIHJldHVybiBqc1N0cmluZygiTmV0c2Nh
cGUiKTsKICAgY2FzZSBBcHBWZXJzaW9uOiB7CiAgICAgLy8gVmVyc2lvbiBpcyBldmVyeXRoaW5n
IGluIHRoZSB1c2VyIGFnZW50IHN0cmluZyBwYXN0IHRoZSAiTW96aWxsYS8iIHByZWZpeC4KLSAg
ICBjb25zdCBTdHJpbmcgdXNlckFnZW50ID0gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudCht
X2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkp
OworICAgIGNvbnN0IFN0cmluZyB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFn
ZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBLVVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
KSA6IEtVUkwoKSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKHVzZXJBZ2VudC5zdWJzdHJpbmcodXNl
ckFnZW50LmZpbmQoJy8nKSArIDEpKTsKICAgfQogICBjYXNlIFByb2R1Y3Q6CkBAIC0yMDksNyAr
MjA5LDcgQEAgSlNWYWx1ZSogTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogICBjYXNl
IExhbmd1YWdlOgogICAgIHJldHVybiBqc1N0cmluZyhkZWZhdWx0TGFuZ3VhZ2UoKSk7CiAgIGNh
c2UgVXNlckFnZW50OgotICAgIHJldHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2FkZXIoKS0+dXNl
ckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6
IEtVUkwoKSkpOworICAgIHJldHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFn
ZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBLVVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
KSA6IEtVUkwoKSkpOwogICBjYXNlIFBsYXRmb3JtOgogICAgIHJldHVybiBqc1N0cmluZyhXRUJD
T1JFX05BVklHQVRPUl9QTEFURk9STSk7CiAgIGNhc2UgX1BsdWdpbnM6CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfcHJveHkuY3BwCShyZXZpc2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX3Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQg
S0pTUHJveHk6OmluaXRTY3JpcHQoKQogICAgIG1fZ2xvYmFsT2JqZWN0ID0gbmV3IEpTRE9NV2lu
ZG93KG1fZnJhbWUtPmRvbVdpbmRvdygpKTsKIAogICAgIC8vIEZJWE1FOiBXZSBjYW4gZ2V0IHJp
ZCBvZiB0aGlzIChhbmQgZWxpbWluYXRlIGNvbXBhdE1vZGUgZW50aXJlbHkpLgotICAgIFN0cmlu
ZyB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3Vt
ZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7CisgICAgU3RyaW5n
IHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1l
bnQoKSA/IEtVUkwobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpIDogS1VSTCgpKTsKICAgICBp
ZiAodXNlckFnZW50LmZpbmQoIk1pY3Jvc29mdCIpID49IDAgfHwgdXNlckFnZW50LmZpbmQoIk1T
SUUiKSA+PSAwKQogICAgICAgICBtX2dsb2JhbE9iamVjdC0+c2V0Q29tcGF0TW9kZShJRUNvbXBh
dCk7CiAgICAgZWxzZSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gMjk4NDgp
CisrKyBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAs
NyArOTAsNyBAQCB2b2lkIENTU0ltcG9ydFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCgpCiAgICAg
Q1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgaWYg
KCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKQogICAgICAgICAvLyB1c2UgcGFyZW50IHN0
eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJlZiA9IEtVUkwocGFy
ZW50U2hlZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCksIG1fc3RySHJlZi5kZXByZWNhdGVk
U3RyaW5nKCkpLnN0cmluZygpOworICAgICAgICBhYnNIcmVmID0gS1VSTChLVVJMKHBhcmVudFNo
ZWV0LT5ocmVmKCkpLCBtX3N0ckhyZWYpLnN0cmluZygpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGEg
Y3ljbGUgaW4gb3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBhIHN0eWxlc2hlZXQK
ICAgICAvLyBpbiBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJMLCB0aGVuIGp1c3Qg
YmFpbC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjQsNyArODI0LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogI2VuZGlmCiAgICAgICAgICAgICAgICAg
aWYgKCF1cmkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChu
ZXcgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB1cmkuZGVw
cmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEtVUkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKSksIHVyaSkuc3RyaW5nKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3RzcG90LCBzdHlsZUVsZW1lbnQpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC04ODcsNyArODg3LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgICAgICAgICAgU3RyaW5n
IHVyaSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKSk7CiAgICAgICAgICAgICBp
ZiAoIXVyaS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBD
U1NJbWFnZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICBLVVJMKHN0eWxlRWxlbWVudC0+YmFz
ZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdXJpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5n
KCksCisgICAgICAgICAgICAgICAgICAgIEtVUkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwo
KSksIHVyaSkuc3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCk7CiAg
ICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICB9CkBAIC0xMDk1
LDcgKzEwOTUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAg
ICAgICAgICAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZVVSTChkb21TdHJp
bmcodmFsLT5zdHJpbmcpKTsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL
VVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdmFsdWUuZGVw
cmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLCB2YWx1ZSkuc3RyaW5nKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VSSSk7CiAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAKQEAgLTE4NTUsNyAr
MTg1NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwKICAgICAg
ICAgICAgIC8vIHVybAogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VVUkwoZG9tU3Ry
aW5nKHZhbC0+c3RyaW5nKSk7CiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NJbWFn
ZVZhbHVlKAotICAgICAgICAgICAgICAgIEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCkuZGVw
cmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpLCBzdHls
ZUVsZW1lbnQpOworICAgICAgICAgICAgICAgIEtVUkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VV
UkwoKSksIHZhbHVlKS5zdHJpbmcoKSwgc3R5bGVFbGVtZW50KTsKICAgICAgICAgfSBlbHNlIGlm
ICh2YWwtPnVuaXQgPT0gVmFsdWU6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAvLyBhdHRyKFgp
IHwgY291bnRlcihYIFssWV0pIHwgY291bnRlcnMoWCwgWSwgWyxaXSkKICAgICAgICAgICAgIFZh
bHVlTGlzdCAqYXJncyA9IHZhbC0+ZnVuY3Rpb24tPmFyZ3M7CkBAIC0xOTIxLDggKzE5MjEsOCBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kSW1hZ2UoQ1NTCiAgICAgaWYgKHZhbHVl
TGlzdC0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAg
ICAgICAgIFN0cmluZyB1cmkgPSBwYXJzZVVSTChkb21TdHJpbmcodmFsdWVMaXN0LT5jdXJyZW50
KCktPnN0cmluZykpOwogICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB2
YWx1ZSA9IG5ldyBDU1NJbWFnZVZhbHVlKEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCkuZGVw
cmVjYXRlZFN0cmluZygpLCB1cmkuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50KTsKKyAgICAg
ICAgICAgIHZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUoS1VSTChLVVJMKHN0eWxlRWxlbWVudC0+
YmFzZVVSTCgpKSwgdXJpKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGVFbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTI3NjgsNyArMjc2OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZvbnRGYWNlU3JjKCkKICAgICAgICAgcGFyc2VkVmFsdWUgPSAwOwogICAgICAgICBpZiAodmFs
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJICYmICFleHBlY3RDb21tYSkgewog
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5n
KSk7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKEtV
Ukwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpLCBmYWxzZSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKEtVUkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VV
UkwoKSksIHZhbHVlKS5zdHJpbmcoKSwgZmFsc2UpOwogICAgICAgICAgICAgdXJpVmFsdWUgPSBw
YXJzZWRWYWx1ZTsKICAgICAgICAgICAgIGFsbG93Rm9ybWF0ID0gdHJ1ZTsKICAgICAgICAgICAg
IGV4cGVjdENvbW1hID0gdHJ1ZTsKQEAgLTMzMTIsOCArMzMxMiw4IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUJvcmRlckltYWdlKGludCBwcm8KICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGNvbnRleHQuY29tbWl0SW1hZ2UobmV3IENTU0lt
YWdlVmFsdWUoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCks
IHVyaS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCkpOwor
ICAgIGNvbnRleHQuY29tbWl0SW1hZ2UobmV3IENTU0ltYWdlVmFsdWUoS1VSTChLVVJMKHN0eWxl
RWxlbWVudC0+YmFzZVVSTCgpKSwgdXJpKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCkpOwogICAgIHdoaWxlICgodmFsID0g
dmFsdWVMaXN0LT5uZXh0KCkpKSB7CiAgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkg
JiYgdmFsaWRVbml0KHZhbCwgRkludGVnZXJ8Rk5vbk5lZ3xGUGVyY2VudCwgdHJ1ZSkpIHsKICAg
ICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZhbCk7CkluZGV4OiBXZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZp
c2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTYzNiw3ICsxNjM2LDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IERlcHJlY2F0
ZWRTdAogCiAgICAgbV91cmwgPSB1cmw7CiAgICAgaWYgKG1fc3R5bGVTZWxlY3RvcikKLSAgICAg
ICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKG1fdXJsKTsKKyAgICAgICAgbV9zdHls
ZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKEtVUkwobV91cmwpKTsKIAogICAgIG1faXNBbGxvd2Vk
VG9Mb2FkTG9jYWxSZXNvdXJjZXMgPSBzaG91bGRCZUFsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNl
cygpOwogIH0KQEAgLTIyMDksNyArMjIwOSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxl
U2VsZWN0b3IoKQogICAgIGlmICh2aWV3KCkgJiYgdmlldygpLT5tZWRpYVR5cGUoKSA9PSAicHJp
bnQiKQogICAgICAgICB1c2Vyc2hlZXQgKz0gbV9wcmludFNoZWV0OwogICAgIG1fc3R5bGVTZWxl
Y3RvciA9IG5ldyBDU1NTdHlsZVNlbGVjdG9yKHRoaXMsIHVzZXJzaGVldCwgbV9zdHlsZVNoZWV0
cy5nZXQoKSwgbV9tYXBwZWRFbGVtZW50U2hlZXQuZ2V0KCksICFpbkNvbXBhdE1vZGUoKSwgbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAgICBtX3N0eWxlU2VsZWN0b3ItPnNldEVuY29kZWRV
UkwobV91cmwpOworICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0RW5jb2RlZFVSTChLVVJMKG1fdXJs
KSk7CiAgICAgbV9kaWRDYWxjdWxhdGVTdHlsZVNlbGVjdG9yID0gdHJ1ZTsKIH0KIApAQCAtMjYw
NCwxMiArMjYwNCwxMiBAQCBFbGVtZW50KiBEb2N1bWVudDo6b3duZXJFbGVtZW50KCkgY29uc3QK
IAogU3RyaW5nIERvY3VtZW50Ojpjb29raWUoKSBjb25zdAogewotICAgIHJldHVybiBjb29raWVz
KHRoaXMsIHVybCgpKTsKKyAgICByZXR1cm4gY29va2llcyh0aGlzLCBLVVJMKHVybCgpKSk7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAg
IHNldENvb2tpZXModGhpcywgdXJsKCksIHBvbGljeUJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5n
KCksIHZhbHVlKTsKKyAgICBzZXRDb29raWVzKHRoaXMsIEtVUkwodXJsKCkpLCBLVVJMKHBvbGlj
eUJhc2VVUkwoKSksIHZhbHVlKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpyZWZlcnJlcigpIGNv
bnN0CkBAIC0yNzg5LDcgKzI3ODksMTcgQEAgVUNoYXIgRG9jdW1lbnQ6OmJhY2tzbGFzaEFzQ3Vy
cmVuY3lTeW1ibwogCiBEZXByZWNhdGVkU3RyaW5nIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiB1cmwpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJlYXRzIG51
bGwgVVJMcyB0aGUgc2FtZSBhcyBlbXB0eSBVUkxzLCB1bmxpa2UgdGhlIFN0cmluZyBmdW5jdGlv
biBiZWxvdy4KKyAgICByZXR1cm4gY29tcGxldGVVUkwoU3RyaW5nKHVybCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKK30KKworU3RyaW5nIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICAvLyBGSVhNRSBidWcgMTY0ODU6IHRoaXMgc2hvdWxkIHJldHVybiBhIEtV
UkwsIHdoaWNoIHdpbGwgcmVkdWNlIHRoZSBudW1iZXIgb2YKKyAgICAvLyBLVVJMPC0+U3RyaW5n
IHJvdW5kLXRyaXBzLgorCisgICAgLy8gVGhpcyBhbHdheXMgcmV0dXJucyBudWxsIHdoZW4gcGFz
c2VkIGEgbnVsbCBVUkwuCisgICAgaWYgKHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHVy
bDsKIAogICAgIC8vIElmIGJvdGggdGhlIFVSTCBhbmQgYmFzZSBVUkwgYXJlIGVtcHR5LCBsaWtl
IHRoZXkgYXJlIGZvciBkb2N1bWVudHMKICAgICAvLyBjcmVhdGVkIHVzaW5nIERPTUltcGxlbWVu
dGF0aW9uOjpjcmVhdGVEb2N1bWVudCwganVzdCByZXR1cm4gdGhlIHBhc3NlZCBpbiBVUkwuCkBA
IC0yNzk3LDE2ICsyODA3LDggQEAgRGVwcmVjYXRlZFN0cmluZyBEb2N1bWVudDo6Y29tcGxldGVV
UkwoYwogICAgIGlmIChtX3VybC5pc0VtcHR5KCkgJiYgbV9iYXNlVVJMLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHVybDsKICAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEtV
UkwoYmFzZVVSTCgpLCB1cmwpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICByZXR1cm4gS1VSTChi
YXNlVVJMKCksIHVybCwgbV9kZWNvZGVyLT5lbmNvZGluZygpKS5kZXByZWNhdGVkU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgYWx3YXlzIHJldHVybnMgbnVsbCB3aGVuIHBhc3NlZCBhIG51
bGwgVVJMLCB1bmxpa2UgdGhlIFN0cmluZyBmdW5jdGlvbiBhYm92ZS4KLSAgICBpZiAodXJsLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gdXJsOwotICAgIHJldHVybiBjb21wbGV0ZVVSTCh1cmwu
ZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIEtVUkwoS1VSTChiYXNlVVJMKCkp
LCB1cmwpLnN0cmluZygpOworICAgIHJldHVybiBLVVJMKEtVUkwoYmFzZVVSTCgpKSwgdXJsLCBt
X2RlY29kZXItPmVuY29kaW5nKCkpLnN0cmluZygpOwogfQogCiBib29sIERvY3VtZW50OjppblBh
Z2VDYWNoZSgpCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY4LDcgKzU2OCw3IEBAIFN0cmluZyBFbGVt
ZW50OjpiYXNlVVJJKCkgY29uc3QKIAogICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsK
ICAgICBpZiAocGFyZW50KQotICAgICAgICByZXR1cm4gS1VSTChwYXJlbnQtPmJhc2VVUkkoKS5k
ZXByZWNhdGVkU3RyaW5nKCksIHhtbGJhc2UuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIEtVUkwoS1VSTChwYXJlbnQtPmJhc2VVUkkoKSksIHhtbGJhc2Uuc3Ry
aW5nKCkpLnN0cmluZygpOwogCiAgICAgcmV0dXJuIHhtbGJhc2Uuc3RyaW5nKCk7CiB9CkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM2LDcgKzkzNiw3IEBAIHZvaWQgRWRpdG9yOjpjb3B5
KCkKICAgICAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwog
ICAgIGlmIChIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBpbWFnZUVsZW1lbnRGcm9t
SW1hZ2VEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0
ZWJvYXJkKCktPndyaXRlSW1hZ2UoaW1hZ2VFbGVtZW50LCBkb2N1bWVudC0+dXJsKCksIGRvY3Vt
ZW50LT50aXRsZSgpKTsKKyAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+
d3JpdGVJbWFnZShpbWFnZUVsZW1lbnQsIEtVUkwoZG9jdW1lbnQtPnVybCgpKSwgZG9jdW1lbnQt
PnRpdGxlKCkpOwogICAgIGVsc2UKICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9h
cmQoKS0+d3JpdGVTZWxlY3Rpb24oc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpLCBtX2ZyYW1lKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsMTIgKzQxOCwxMiBAQCB2b2lkIEhUTUxBbmNob3JF
bGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6aGFz
aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICcjJyArIEtVUkwoaHJlZigpLmRlcHJlY2F0ZWRTdHJp
bmcoKSkucmVmKCk7CisgICAgcmV0dXJuICIjIiArIEtVUkwoaHJlZigpKS5yZWYoKTsKIH0KIAog
U3RyaW5nIEhUTUxBbmNob3JFbGVtZW50Ojpob3N0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gS1VS
TChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5ob3N0KCk7CisgICAgcmV0dXJuIEtVUkwoaHJl
ZigpKS5ob3N0KCk7CiB9CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6aG9zdG5hbWUoKSBj
b25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyOTg0OCkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDcgKzc2LDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgog
ICAgIC8vIE9ubHkgUlNBIGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuCiAgICAgaWYgKCFtX2tl
eVR5cGUuaXNOdWxsKCkgJiYgIWVxdWFsSWdub3JpbmdDYXNlKG1fa2V5VHlwZSwgInJzYSIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIHZhbHVlID0gc2lnbmVkUHVibGljS2V5
QW5kQ2hhbGxlbmdlU3RyaW5nKHNlbGVjdGVkSW5kZXgoKSwgbV9jaGFsbGVuZ2UsIGRvY3VtZW50
KCktPmJhc2VVUkwoKSk7CisgICAgU3RyaW5nIHZhbHVlID0gc2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlU3RyaW5nKHNlbGVjdGVkSW5kZXgoKSwgbV9jaGFsbGVuZ2UsIEtVUkwoZG9jdW1lbnQo
KS0+YmFzZVVSTCgpKSk7CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgZW5jb2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIHZhbHVlLnV0Zjgo
KSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9s
b2FkZXIvRG9jTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMjIgKzY0LDI3IEBAIERv
Y0xvYWRlcjo6fkRvY0xvYWRlcigpCiAKIHZvaWQgRG9jTG9hZGVyOjpjaGVja0ZvclJlbG9hZChj
b25zdCBLVVJMJiBmdWxsVVJMKQogeworICAgIC8vIFRoZSBjb2RlIGJlbG93IGV4cGVjdHMgYSBu
b24tTlVMTCBzdHJpbmcuCisgICAgU3RyaW5nIHVybFN0cmluZyA9IGZ1bGxVUkwuc3RyaW5nKCk7
CisgICAgaWYgKHVybFN0cmluZy5pc051bGwoKSkKKyAgICAgICAgdXJsU3RyaW5nID0gIiI7CisK
ICAgICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQotICAgICAgICByZXR1cm47IC8vRG9uJ3Qg
cmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nCisgICAgICAgIHJldHVybjsgLy8gRG9uJ3Qg
cmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nCiAgICAgaWYgKG1fY2FjaGVQb2xpY3kgPT0g
Q2FjaGVQb2xpY3lWZXJpZnkpIHsKLSAgICAgICBpZiAoIW1fcmVsb2FkZWRVUkxzLmNvbnRhaW5z
KGZ1bGxVUkwuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5n
ID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAgICAgaWYg
KCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyh1cmxTdHJpbmcpKSB7CisgICAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsU3RyaW5nKTsK
ICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmctPmlzRXhwaXJlZCgpKSB7CiAgICAg
ICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsKLSAgICAgICAgICAgICBtX3JlbG9h
ZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAgICAgICAgICAgbV9yZWxvYWRlZFVS
THMuYWRkKHVybFN0cmluZyk7CiAgICAgICAgICAgfQogICAgICAgIH0KICAgICB9IGVsc2UgaWYg
KChtX2NhY2hlUG9saWN5ID09IENhY2hlUG9saWN5UmVsb2FkKSB8fCAobV9jYWNoZVBvbGljeSA9
PSBDYWNoZVBvbGljeVJlZnJlc2gpKSB7Ci0gICAgICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250
YWlucyhmdWxsVVJMLnN0cmluZygpKSkgewotICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlz
dGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAg
IGlmICghbV9yZWxvYWRlZFVSTHMuY29udGFpbnModXJsU3RyaW5nKSkgeworICAgICAgICAgIENh
Y2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybFN0cmlu
Zyk7CiAgICAgICAgICAgaWYgKGV4aXN0aW5nKQogICAgICAgICAgICAgIGNhY2hlKCktPnJlbW92
ZShleGlzdGluZyk7Ci0gICAgICAgICAgbV9yZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5n
KCkpOworICAgICAgICAgIG1fcmVsb2FkZWRVUkxzLmFkZCh1cmxTdHJpbmcpOwogICAgICAgIH0K
ICAgICB9CiB9CkBAIC0xNDEsNyArMTQ2LDcgQEAgQ2FjaGVkWEJMRG9jdW1lbnQqIERvY0xvYWRl
cjo6cmVxdWVzdFhCTAogCiBDYWNoZWRSZXNvdXJjZSogRG9jTG9hZGVyOjpyZXF1ZXN0UmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyogY2hhcnNldCwgYm9vbCBza2lwQ2FuTG9hZENoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MpCiB7Ci0gICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVy
bC5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIEtVUkwgZnVsbFVSTChtX2RvYy0+Y29tcGxldGVV
UkwodXJsKSk7CiAgICAgCiAgICAgaWYgKGNhY2hlKCktPmRpc2FibGVkKCkpIHsKICAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0ID0gbV9kb2NSZXNv
dXJjZXMuZmluZChmdWxsVVJMLnN0cmluZygpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTQsOCArNDE0LDggQEAgYm9vbCBGcmFtZUxvYWRlcjo6cmVxdWVzdEZy
YW1lKEhUTUxGcmFtZQogICAgIEtVUkwgc2NyaXB0VVJMOwogICAgIEtVUkwgdXJsOwogICAgIGlm
ICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKLSAgICAgICAg
c2NyaXB0VVJMID0gdXJsU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgdXJsID0g
ImFib3V0OmJsYW5rIjsKKyAgICAgICAgc2NyaXB0VVJMID0gS1VSTCh1cmxTdHJpbmcpOworICAg
ICAgICB1cmwgPSBLVVJMKCJhYm91dDpibGFuayIpOwogICAgIH0gZWxzZQogICAgICAgICB1cmwg
PSBjb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwogCkBAIC00NzMsNyArNDczLDcgQEAgRnJhbWUqIEZy
YW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYQogICAgIC8vIEZJWE1FOiBJbiB0aGlzIGNh
c2UgdGhlIEZyYW1lIHdpbGwgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGJlZm9yZSAKICAgICAvLyBp
dCdzIGJlaW5nIGFkZGVkIHRvIHRoZSBjaGlsZCBsaXN0LiBJdCB3b3VsZCBiZSBhIGdvb2QgaWRl
YSB0bwogICAgIC8vIGNyZWF0ZSB0aGUgY2hpbGQgZmlyc3QsIHRoZW4gaW52b2tlIHRoZSBsb2Fk
ZXIgc2VwYXJhdGVseS4KLSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCB1cmwgPT0gImFib3V0OmJs
YW5rIikgeworICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8IHVybC5zdHJpbmcoKSA9PSAiYWJvdXQ6
YmxhbmsiKSB7CiAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVkKCk7CiAgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKICAgICB9CkBAIC02NTAsMTYgKzY1
MCwxNiBAQCBLVVJMIEZyYW1lTG9hZGVyOjppY29uVVJMKCkKIHsKICAgICAvLyBJZiB0aGlzIGlz
bid0IGEgdG9wIGxldmVsIGZyYW1lLCByZXR1cm4gbm90aGluZwogICAgIGlmIChtX2ZyYW1lLT50
cmVlKCkgJiYgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuICIiOwot
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKwogICAgIC8vIElmIHdlIGhhdmUgYW4g
aWNvblVSTCBmcm9tIGEgTGluayBlbGVtZW50LCByZXR1cm4gdGhhdAogICAgIGlmIChtX2ZyYW1l
LT5kb2N1bWVudCgpICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5pY29uVVJMKCkuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNvblVSTCgpLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBLVVJMKG1fZnJhbWUtPmRvY3Vt
ZW50KCktPmljb25VUkwoKSk7CisKICAgICAvLyBEb24ndCByZXR1cm4gYSBmYXZpY29uIGljb25V
UkwgdW5sZXNzIHdlJ3JlIGh0dHAgb3IgaHR0cHMKLSAgICBpZiAobV9VUkwucHJvdG9jb2woKSAh
PSAiaHR0cCIgJiYgbV9VUkwucHJvdG9jb2woKSAhPSAiaHR0cHMiKQotICAgICAgICByZXR1cm4g
IiI7Ci0gICAgICAgIAorICAgIGlmIChtX1VSTC5wcm90b2NvbElzKCJodHRwIikgJiYgbV9VUkwu
cHJvdG9jb2xJcygiaHR0cHMiKSkKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKwogICAgIEtVUkwg
dXJsOwogICAgIHVybC5zZXRQcm90b2NvbChtX1VSTC5wcm90b2NvbCgpKTsKICAgICB1cmwuc2V0
SG9zdChtX1VSTC5ob3N0KCkpOwpAQCAtNjg4LDcgKzY4OCw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6
OmRpZE9wZW5VUkwoY29uc3QgS1VSTCYKICAgICBtX2ZyYW1lLT5zZXRKU0RlZmF1bHRTdGF0dXNC
YXJUZXh0KFN0cmluZygpKTsKIAogICAgIG1fVVJMID0gdXJsOwotICAgIGlmIChtX1VSTC5wcm90
b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiAhbV9VUkwuaG9zdCgpLmlzRW1wdHkoKSAmJiBt
X1VSTC5wYXRoKCkuaXNFbXB0eSgpKQorICAgIGlmICgobV9VUkwucHJvdG9jb2xJcygiaHR0cCIp
IHx8IG1fVVJMLnByb3RvY29sSXMoImh0dHBzIikpICYmICFtX1VSTC5ob3N0KCkuaXNFbXB0eSgp
ICYmIG1fVVJMLnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgIG1fVVJMLnNldFBhdGgoIi8iKTsK
ICAgICBtX3dvcmtpbmdVUkwgPSBtX1VSTDsKIApAQCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmRpZEV4cGxpY2l0T3Blbihjb25zdCAKICAgICAvLyBpbXBsaWNpdGx5IHByZWNl
ZGVzIGRvY3VtZW50LndyaXRlLgogICAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7IAogICAgIGlmICht
X2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSAhPSAiYWJvdXQ6YmxhbmsiKQotICAgICAgICBtX1VS
TCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgICAgICBtX1VSTCA9IEtVUkwobV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOwogIAogICAgIGJvb2wgaXNJdGVtTmV3ID0gZmFsc2U7
CiAKQEAgLTEyMTksMTMgKzEyMTksMTMgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Z290b0FuY2hvcigp
CiAgICAgICAgICEobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5n
ZXRDU1NUYXJnZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVmID0gbV9VUkwuZW5jb2RlZEh0bWxSZWYoKTsKKyAgICBTdHJpbmcgcmVmID0gbV9VUkwuZW5j
b2RlZEh0bWxSZWYoKTsKICAgICBpZiAoIWdvdG9BbmNob3IocmVmKSkgewogICAgICAgICAvLyBD
YW4ndCB1c2UgaHRtbFJlZigpIGhlcmUgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgd2hpY2ggZW5j
b2RpbmcgdG8gdXNlIHRvIGRlY29kZS4KICAgICAgICAgLy8gRGVjb2RpbmcgaGVyZSBoYXMgdG8g
bWF0Y2ggZW5jb2RpbmcgaW4gY29tcGxldGVVUkwsIHdoaWNoIG1lYW5zIGl0IGhhcyB0byB1c2Ug
dGhlCiAgICAgICAgIC8vIHBhZ2UncyBlbmNvZGluZyByYXRoZXIgdGhhbiBVVEYtOC4KICAgICAg
ICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAgICAgIGdvdG9BbmNob3IoS1VSTDo6ZGVjb2RlX3N0
cmluZyhyZWYsIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKSkpOworICAgICAgICAgICAgZ290b0FuY2hv
cihLVVJMOjpkZWNvZGVfc3RyaW5nKHJlZi5kZXByZWNhdGVkU3RyaW5nKCksIG1fZGVjb2Rlci0+
ZW5jb2RpbmcoKSkpOwogICAgIH0KIH0KIApAQCAtMTM0MSw3ICsxMzQxLDcgQEAgdm9pZCBGcmFt
ZUxvYWRlcjo6Y2hlY2tDYWxsSW1wbGljaXRDbG9zZQogS1VSTCBGcmFtZUxvYWRlcjo6YmFzZVVS
TCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIHJldHVy
biBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7CisgICAgcmV0dXJuIEtVUkwobV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpKTsKIH0KIAogU3RyaW5nIEZyYW1lTG9hZGVyOjpiYXNl
VGFyZ2V0KCkgY29uc3QKQEAgLTEzNTMsNyArMTM1Myw3IEBAIFN0cmluZyBGcmFtZUxvYWRlcjo6
YmFzZVRhcmdldCgpIGNvbnN0CiBLVVJMIEZyYW1lTG9hZGVyOjpjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkKIHsKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmV0
dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkuZGVwcmVjYXRlZFN0cmlu
ZygpOworICAgIHJldHVybiBLVVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVy
bCkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUhUVFBSZWRpcmVjdGlvbihkb3Vi
bGUgZGVsYXksIGNvbnN0IFN0cmluZyYgdXJsKQpAQCAtMTg3NCw3ICsxODc0LDcgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6c3RhcnRSZWRpcmVjdGlvblRpbWVyKAogICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVj
dGlvbjo6bG9jYXRpb25DaGFuZ2U6CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246
OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZDoKLSAgICAgICAgICAgIGNsaWVudFJlZGlyZWN0ZWQo
bV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSwKKyAgICAgICAg
ICAgIGNsaWVudFJlZGlyZWN0ZWQoS1VSTChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwpLAog
ICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAogICAgICAgICAg
ICAgICAgIGN1cnJlbnRUaW1lKCkgKyBtX3JlZGlyZWN0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZh
bCgpLAogICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5
LApAQCAtMjU4Nyw3ICsyNTg3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9u
YWxMb2FkKAogICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHVybCA9IHBk
bC0+cmVzcG9uc2VVUkwoKTsKICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICB1cmwgPSAiYWJvdXQ6YmxhbmsiOworICAgICAgICAgICAgdXJsID0gS1VSTCgiYWJvdXQ6Ymxh
bmsiKTsKIAogICAgICAgICBkaWRPcGVuVVJMKHVybCk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3Bw
CShyZXZpc2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDE0ICs3MywxMSBAQCB2b2lkIExvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVz
dHMoKQogICAgICAgICBpZiAoIXJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+YWNjZXB0KCkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQWNjZXB0KHJlcS0+Y2FjaGVkUmVzb3Vy
Y2UoKS0+YWNjZXB0KCkpOwogCi0gICAgICAgIEtVUkwgciA9IGRsLT5kb2MoKS0+dXJsKCk7Cisg
ICAgICAgIEtVUkwgcihkbC0+ZG9jKCktPnVybCgpKTsKICAgICAgICAgaWYgKHIucHJvdG9jb2wo
KS5zdGFydHNXaXRoKCJodHRwIikgJiYgci5wYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ci5zZXRQYXRoKCIvIik7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHIuc3RyaW5n
KCkpOwotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGRvbWFpbiA9IHIuaG9zdCgpOwotICAgICAg
ICBpZiAoZGwtPmRvYygpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICAgICAgZG9tYWluID0g
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZGwtPmRvYygpKS0+ZG9tYWluKCkuZGVwcmVjYXRl
ZFN0cmluZygpOwotICAgICAgICAKKwogICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+
IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZGwtPmRvYygpLT5mcmFtZSgpLAog
ICAgICAgICAgICAgdGhpcywgcmVxdWVzdCwgcmVxLT5zaG91bGRTa2lwQ2FuTG9hZENoZWNrKCks
IHJlcS0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKIApJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCwxMyArMjE4LDExIEBA
IHZvaWQgSWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucygpCiBJbWFnZSogSWNvbkRhdGFiYXNl
OjppY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkxPcmlnaW5hbCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYm9vbCBjYWNoZSkKIHsgICAKICAgICBBU1NFUlRfTk9UX1NZTkNfVEhSRUFE
KCk7Ci0gICAgCi0gICAgQVNTRVJUKCFwYWdlVVJMT3JpZ2luYWwuaXNOdWxsKCkpOwogCiAgICAg
Ly8gcGFnZVVSTE9yaWdpbmFsIGNhbiBub3QgYmUgc3RvcmVkIHdpdGhvdXQgYmVpbmcgZGVlcCBj
b3BpZWQgZmlyc3QuICAKICAgICAvLyBXZSBzaG91bGQgZ28gb3VyIG9mIG91ciB3YXkgdG8gb25s
eSBjb3B5IGl0IGlmIHdlIGhhdmUgdG8gc3RvcmUgaXQKICAgICAKLSAgICBpZiAoIWlzT3Blbigp
KQorICAgIGlmICghaXNPcGVuKCkgfHwgcGFnZVVSTE9yaWdpbmFsLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGRlZmF1bHRJY29uKHNpemUpOwogCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
dXJsQW5kSWNvbkxvY2spOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiAyOTg0OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDkgQEAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCit0eXBlZGVmIFZl
Y3RvcjxVQ2hhciwgNTEyPiBUZW1wVUNoYXJCdWZmZXI7Cit0eXBlZGVmIFZlY3RvcjxjaGFyLCA1
MTI+IFRlbXBDaGFyQnVmZmVyOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gVVJMQ2hh
cmFjdGVyQ2xhc3NlcyB7CkBAIC03OCw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGhleERp
Z2l0c1sxN10gPSAiMDEyMzQKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVy
Q2xhc3NUYWJsZVsyNTZdID0gewogICAgIC8qIDAgbnVsICovIFBhdGhTZWdtZW50RW5kQ2hhciwg
ICAgLyogMSBzb2ggKi8gQmFkQ2hhciwKLSAgICAvKiAyIHN0eCAqLyBCYWRDaGFyLCAgICAvKiAz
IGV0eCAqLyBCYWRDaGFyLCAgICAKKyAgICAvKiAyIHN0eCAqLyBCYWRDaGFyLCAgICAvKiAzIGV0
eCAqLyBCYWRDaGFyLAogICAgIC8qIDQgZW90ICovIEJhZENoYXIsICAgIC8qIDUgZW5xICovIEJh
ZENoYXIsICAgIC8qIDYgYWNrICovIEJhZENoYXIsICAgIC8qIDcgYmVsICovIEJhZENoYXIsCiAg
ICAgLyogOCBicyAqLyBCYWRDaGFyLCAgICAgLyogOSBodCAqLyBCYWRDaGFyLCAgICAvKiAxMCBu
bCAqLyBCYWRDaGFyLCAgICAvKiAxMSB2dCAqLyBCYWRDaGFyLAogICAgIC8qIDEyIG5wICovIEJh
ZENoYXIsICAgIC8qIDEzIGNyICovIEJhZENoYXIsICAgIC8qIDE0IHNvICovIEJhZENoYXIsICAg
IC8qIDE1IHNpICovIEJhZENoYXIsCkBAIC04NywxNCArOTAsMTQgQEAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgY2hhcmFjdGVyQ2xhcwogICAgIC8qIDI0IGNhbiAqLyBCYWRDaGFyLCAgIC8q
IDI1IGVtICovIEJhZENoYXIsICAgIC8qIDI2IHN1YiAqLyBCYWRDaGFyLCAgIC8qIDI3IGVzYyAq
LyBCYWRDaGFyLAogICAgIC8qIDI4IGZzICovIEJhZENoYXIsICAgIC8qIDI5IGdzICovIEJhZENo
YXIsICAgIC8qIDMwIHJzICovIEJhZENoYXIsICAgIC8qIDMxIHVzICovIEJhZENoYXIsCiAgICAg
LyogMzIgc3AgKi8gQmFkQ2hhciwgICAgLyogMzMgICEgKi8gVXNlckluZm9DaGFyLAotICAgIC8q
IDM0ICAiICovIEJhZENoYXIsICAgIC8qIDM1ICAjICovIFBhdGhTZWdtZW50RW5kQ2hhciB8IEJh
ZENoYXIsICAgIAorICAgIC8qIDM0ICAiICovIEJhZENoYXIsICAgIC8qIDM1ICAjICovIFBhdGhT
ZWdtZW50RW5kQ2hhciB8IEJhZENoYXIsCiAgICAgLyogMzYgICQgKi8gVXNlckluZm9DaGFyLCAg
ICAvKiAzNyAgJSAqLyBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciB8IEJh
ZENoYXIsCiAgICAgLyogMzggICYgKi8gVXNlckluZm9DaGFyLCAgICAvKiAzOSAgJyAqLyBVc2Vy
SW5mb0NoYXIsCi0gICAgLyogNDAgICggKi8gVXNlckluZm9DaGFyLCAgICAvKiA0MSAgKSAqLyBV
c2VySW5mb0NoYXIsICAgIAorICAgIC8qIDQwICAoICovIFVzZXJJbmZvQ2hhciwgICAgLyogNDEg
ICkgKi8gVXNlckluZm9DaGFyLAogICAgIC8qIDQyICAqICovIFVzZXJJbmZvQ2hhciwgICAgLyog
NDMgICsgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciwKLSAgICAvKiA0NCAgLCAqLyBVc2Vy
SW5mb0NoYXIsICAgIAotICAgIC8qIDQ1ICAtICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIg
fCBIb3N0bmFtZUNoYXIsIAotICAgIC8qIDQ2ICAuICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0No
YXIgfCBIb3N0bmFtZUNoYXIsICAgCisgICAgLyogNDQgICwgKi8gVXNlckluZm9DaGFyLAorICAg
IC8qIDQ1ICAtICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIsCisg
ICAgLyogNDYgIC4gKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwK
ICAgICAvKiA0NyAgLyAqLyBQYXRoU2VnbWVudEVuZENoYXIsCiAgICAgLyogNDggIDAgKi8gU2No
ZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQ
djZDaGFyLCAKICAgICAvKiA0OSAgMSAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9z
dG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsICAgIApAQCAtMjA0LDE1ICsyMDcs
MTkgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyQ2xhcwogfTsKIAogc3Rh
dGljIGludCBjb3B5UGF0aFJlbW92aW5nRG90cyhjaGFyKiBkc3QsIGNvbnN0IGNoYXIqIHNyYywg
aW50IHNyY1N0YXJ0LCBpbnQgc3JjRW5kKTsKLXN0YXRpYyBjaGFyKiBlbmNvZGVSZWxhdGl2ZVN0
cmluZyhjb25zdCBLVVJMICZiYXNlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiByZWwsIGNvbnN0
IFRleHRFbmNvZGluZyYpOwotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0ZUJhY2tz
bGFzaGVzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmluZyk7Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NjaGVtZUZpcnN0Q2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3Rl
ckNsYXNzVGFibGVbY10gJiBTY2hlbWVGaXJzdENoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c1NjaGVtZUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxl
W2NdICYgU2NoZW1lQ2hhcjsgfQorc3RhdGljIHZvaWQgZW5jb2RlUmVsYXRpdmVTdHJpbmcoY29u
c3QgU3RyaW5nJiByZWwsIGNvbnN0IFRleHRFbmNvZGluZyYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUZW1wQ2hhckJ1ZmZlciogb3VwdXQpOworc3RhdGljIFN0cmluZyBzdWJz
dGl0dXRlQmFja3NsYXNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcpOworCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNTY2hlbWVGaXJzdENoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1Rh
YmxlW3N0YXRpY19jYXN0PGludD4oYyldICYgU2NoZW1lRmlyc3RDaGFyOyB9CitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNTY2hlbWVGaXJzdENoYXIoVUNoYXIgYykgeyByZXR1cm4gYyA8PSAweGZmID8g
KGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hlbWVGaXJzdENoYXIpIDogZmFsc2U7IH0KK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJD
bGFzc1RhYmxlW3N0YXRpY19jYXN0PGludD4oYyldICYgU2NoZW1lQ2hhcjsgfQorc3RhdGljIGlu
bGluZSBib29sIGlzU2NoZW1lQ2hhcihVQ2hhciBjKSB7IHJldHVybiBjIDw9IDB4ZmYgPyAoY2hh
cmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFNjaGVtZUNoYXIpIDogZmFsc2U7IH0KIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1VzZXJJbmZvQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3Rl
ckNsYXNzVGFibGVbY10gJiBVc2VySW5mb0NoYXI7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hv
c3RuYW1lQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVb
Y10gJiBIb3N0bmFtZUNoYXI7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lQdjZDaGFyKHVuc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIElQdjZDaGFyOyB9
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2VnbWVudEVuZENoYXIodW5zaWduZWQgY2hhciBj
KSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgUGF0aFNlZ21lbnRFbmRDaGFyOyB9
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2VnbWVudEVuZENoYXIoY2hhciBjKSB7IHJldHVy
biBjaGFyYWN0ZXJDbGFzc1RhYmxlW3N0YXRpY19jYXN0PGludD4oYyldICYgUGF0aFNlZ21lbnRF
bmRDaGFyOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2VnbWVudEVuZENoYXIoVUNoYXIg
YykgeyByZXR1cm4gYyA8PSAweGZmID8gKGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBQYXRoU2Vn
bWVudEVuZENoYXIpIDogZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0JhZENoYXIodW5z
aWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgQmFkQ2hhcjsg
fQogc3RhdGljIGlubGluZSBib29sIGlzSGV4RGlnaXQodW5zaWduZWQgY2hhciBjKSB7IHJldHVy
biBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgSGV4RGlnaXRDaGFyOyB9CiAKQEAgLTIyNCwxMyAr
MjMxLDQ2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGhleERpZ2l0VmFsdWUodW5zaWduZWQKICAgICBy
ZXR1cm4gKGMgLSAnQScgKyAxMCkgJiAweEY7IC8vIGhhbmRsZSBib3RoIHVwcGVyIGFuZCBsb3dl
ciBjYXNlIHdpdGhvdXQgYSBicmFuY2gKIH0KIAorc3RhdGljIGJvb2wgaXNBbGxBU0NJSShjb25z
dCBVQ2hhciogc3RyLCBpbnQgc3RyTGVuKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Ry
TGVuOyBpKyspIHsKKyAgICAgICAgaWYgKHN0cltpXSA+IDB4N2YpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBDb3BpZXMgdGhlIHNv
dXJjZSB0byB0aGUgZGVzdGluYXRpb24sIGFzc3VtaW5nIGFsbCB0aGUgc291cmNlIGNoYXJhY3Rl
cnMgYXJlCisvLyBBU0NJSS4gVGhlIGRldGluYXRpb24gYnVmZmVyIG11c3QgYmUgbGFyZ2UgZW5v
dWdoLCBhbmQgaXQgaXMgbm90IG51bGwKKy8vIHRlcm1pbmF0ZWQgdW5sZXNzIHRoZSBzb3VyY2Ug
aGFzIGEgbnVsbC4KK3N0YXRpYyB2b2lkIGNvcHlBU0NJSShjb25zdCBVQ2hhciogc3JjLCBpbnQg
bGVuZ3RoLCBjaGFyKiBkZXN0KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspCisgICAgICAgIGRlc3RbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzcmNbaV0pOworfQorCisv
LyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaW5kZXggaW4gc3RyaW5nIHxzfCBvZiBh
bnkgb2YgdGhlIGNoYXJhY3RlcnMKKy8vIGluIHx0b0ZpbmR8LiB8dG9GaW5kfCBzaG91bGQgYmUg
YSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCBhbGwgY2hhcmFjdGVycyB1cAorLy8gdG8gdGhlIG51
bGwgd2lsbCBiZSBzZWFyY2hlZC4gUmV0dXJucyBpbnQgaWYgbm90IGZvdW5kLgorc3RhdGljIGlu
dCBmaW5kRmlyc3RPZihjb25zdCBVQ2hhciogcywgaW50IHNMZW4sIGludCBzdGFydFBvcywgY29u
c3QgY2hhciogdG9GaW5kKQoreworICAgIGZvciAoaW50IGkgPSBzdGFydFBvczsgaSA8IHNMZW47
IGkrKykgeworICAgICAgICBjb25zdCBjaGFyKiBjdXIgPSB0b0ZpbmQ7CisgICAgICAgIHdoaWxl
ICgqY3VyKSB7CisgICAgICAgICAgICBpZiAoc1tpXSA9PSAqKGN1cisrKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKIC8v
IEtVUkwKIAogS1VSTDo6S1VSTCgpIDogbV9pc1ZhbGlkKGZhbHNlKQogewogfQogCi1LVVJMOjpL
VVJMKGNvbnN0IGNoYXIgKnVybCkKK0tVUkw6OktVUkwoY29uc3QgY2hhciogdXJsKQogewogICAg
IGlmICh1cmwgJiYgdXJsWzBdID09ICcvJykgewogICAgICAgICAgLy8gNSBmb3IgImZpbGU6Iiwg
MSBmb3IgdGVybWluYXRvcgpAQCAtMjQyLDEyICsyODIsMTMgQEAgS1VSTDo6S1VSTChjb25zdCBj
aGFyICp1cmwpCiAgICAgICAgIGJ1ZmZlclszXSA9ICdlJzsKICAgICAgICAgYnVmZmVyWzRdID0g
JzonOwogICAgICAgICBtZW1jcHkoJmJ1ZmZlcls1XSwgdXJsLCB1cmxMZW5ndGgpOworICAgICAg
ICBidWZmZXJbdXJsTGVuZ3RoICsgNF0gPSAwOyAgLy8gTmVlZCBudWxsIHRlcm1pbmF0b3IuCiAg
ICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwogICAgIH0gZWxzZQogICAgICAgICBwYXJz
ZSh1cmwsIDApOwogfQogCi1LVVJMOjpLVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnVybCkK
K0tVUkw6OktVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKCF1cmwuaXNFbXB0eSgp
ICYmIHVybFswXSA9PSAnLycpIHsKICAgICAgICAgLy8gNSBmb3IgImZpbGU6IiwgMSBmb3IgdGVy
bWluYXRvcgpAQCAtMjU3LDUxICsyOTgsNTkgQEAgS1VSTDo6S1VSTChjb25zdCBEZXByZWNhdGVk
U3RyaW5nICZ1cmwpCiAgICAgICAgIGJ1ZmZlclsyXSA9ICdsJzsKICAgICAgICAgYnVmZmVyWzNd
ID0gJ2UnOwogICAgICAgICBidWZmZXJbNF0gPSAnOic7Ci0gICAgICAgIHVybC5jb3B5TGF0aW4x
KCZidWZmZXJbNV0pOworICAgICAgICBjb3B5QVNDSUkodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxl
bmd0aCgpLCAmYnVmZmVyWzVdKTsKKyAgICAgICAgYnVmZmVyW3VybC5sZW5ndGgoKSArIDRdID0g
MDsgIC8vIE5lZWQgbnVsbCB0ZXJtaW5hdG9yLgogICAgICAgICBwYXJzZShidWZmZXIuZGF0YSgp
LCAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGFyc2UodXJsLmFzY2lpKCksICZ1cmwpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBwYXNzIGFueXRoaW5nIGFz
IHRoZSBzZWNvbmQgYXJndW1lbnQuIFdoZW4gdGhlCisgICAgICAgIC8vIGlubmFyZHMgb2YgS1VS
TCBhcmUgY29udmVydGVkIGZyb20gRGVwcmVjYXRlZFN0cmluZyB0byBTdHJpbmcsIHRoaXMKKyAg
ICAgICAgLy8gc2hvdWxkIGJlIHB1dCBiYWNrLiBJdCBpcyBhbiBvcHRpbWl6YXRpb24gdGhhdCBw
cmV2ZW50cyBhbGxvY2F0aW5nCisgICAgICAgIC8vIGFub3RoZXIgc3RyaW5nIGluIHRoZSBjb21t
b24gY2FzZSB0aGF0IG5vdGhpbmcgY2hhbmdlcy4KKyAgICAgICAgcGFyc2UodXJsLnV0ZjgoKS5k
YXRhKCksIDApOworICAgIH0KIH0KIAotS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiByZWxhdGl2ZSkKK0tVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFz
ZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSkKIHsKICAgICBpbml0KGJhc2UsIHJlbGF0aXZlLCBV
VEY4RW5jb2RpbmcoKSk7CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
CitLVVJMOjpLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgaW5pdChiYXNlLCByZWxhdGl2ZSwg
ZW5jb2RpbmcpOwogfQogCi12b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
Cit2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2
ZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBBbGxvdyBhdCBsZWFz
dCBhYnNvbHV0ZSBVUkxzIHRvIHJlc29sdmUgYWdhaW5zdCBhbiBlbXB0eSBVUkwuCiAgICAgaWYg
KCFiYXNlLm1faXNWYWxpZCAmJiAhYmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9pc1ZhbGlk
ID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBib29sIGFic29s
dXRlID0gZmFsc2U7CiAKICAgICAvLyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdpbiBJRSwgd2Ug
bXVzdCB0cmVhdCBiYWNrc2xhc2hlcyBhcyBpZiB0aGV5IHdlcmUgc2xhc2hlcywgYXMgbG9uZyBh
cyB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHRoZSBqYXZhc2NyaXB0OiBzY2hlbWEKLSAgICBEZXBy
ZWNhdGVkU3RyaW5nIHN1YnN0aXR1dGVkUmVsYXRpdmU7CisgICAgU3RyaW5nIHN1YnN0aXR1dGVk
UmVsYXRpdmU7CiAgICAgYm9vbCBzaG91bGRTdWJzdGl0dXRlQmFja3NsYXNoZXMgPSByZWxhdGl2
ZS5jb250YWlucygnXFwnKSAmJiAhKHJlbGF0aXZlLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6Iiwg
ZmFsc2UpIHx8IHJlbGF0aXZlLnN0YXJ0c1dpdGgoImRhdGE6IiwgZmFsc2UpKTsKICAgICBpZiAo
c2hvdWxkU3Vic3RpdHV0ZUJhY2tzbGFzaGVzKQogICAgICAgICBzdWJzdGl0dXRlZFJlbGF0aXZl
ID0gc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKHJlbGF0aXZlKTsKIAotICAgIGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJnJlbCA9IHNob3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hlcyA/IHN1YnN0aXR1dGVk
UmVsYXRpdmUgOiByZWxhdGl2ZTsKLSAgICAKLSAgICBib29sIGFsbEFTQ0lJID0gcmVsLmlzQWxs
QVNDSUkoKTsKLSAgICBjaGFyICpzdHJCdWZmZXI7Ci0gICAgY29uc3QgY2hhciAqc3RyOworICAg
IGNvbnN0IFN0cmluZyYgcmVsID0gc2hvdWxkU3Vic3RpdHV0ZUJhY2tzbGFzaGVzID8gc3Vic3Rp
dHV0ZWRSZWxhdGl2ZSA6IHJlbGF0aXZlOworCisgICAgYm9vbCBhbGxBU0NJSSA9IGlzQWxsQVND
SUkocmVsLmNoYXJhY3RlcnMoKSwgc3RhdGljX2Nhc3Q8aW50PihyZWwubGVuZ3RoKCkpKTsKKyAg
ICBUZW1wQ2hhckJ1ZmZlciBzdHJCdWZmZXI7CisgICAgY2hhciogc3RyOwogICAgIGlmIChhbGxB
U0NJSSkgewotICAgICAgICBzdHJCdWZmZXIgPSAwOwotICAgICAgICBzdHIgPSByZWwuYXNjaWko
KTsKKyAgICAgICAgc3RyQnVmZmVyLnJlc2l6ZShyZWwubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAg
Y29weUFTQ0lJKHJlbC5jaGFyYWN0ZXJzKCksIHJlbC5sZW5ndGgoKSwgc3RyQnVmZmVyLmRhdGEo
KSk7CisgICAgICAgIHN0ckJ1ZmZlcltyZWwubGVuZ3RoKCldID0gMDsKKyAgICAgICAgc3RyID0g
c3RyQnVmZmVyLmRhdGEoKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdHJCdWZmZXIgPSBlbmNv
ZGVSZWxhdGl2ZVN0cmluZyhiYXNlLCByZWwsIGVuY29kaW5nKTsKLSAgICAgICAgc3RyID0gc3Ry
QnVmZmVyOworICAgICAgICBlbmNvZGVSZWxhdGl2ZVN0cmluZyhyZWwsIGVuY29kaW5nLCAmc3Ry
QnVmZmVyKTsKKyAgICAgICAgc3RyID0gc3RyQnVmZmVyLmRhdGEoKTsKICAgICB9Ci0gICAgCisK
ICAgICAvLyB3b3JrYXJvdW5kIGZvciBzaXRlcyB0aGF0IHB1dCBsZWFkaW5nIHdoaXRlc3BhY2Ug
d2hpdGVzcGFjZSBvbgogICAgIC8vIFVSTCByZWZlcmVuY2VzCiAgICAgYm9vbCBzdHJpcHBlZFN0
YXJ0ID0gZmFsc2U7CkBAIC0zMTAsMjAgKzM1OSwxMSBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3Qg
S1VSTCAmYmFzZSwgY29uc3QgCiAgICAgICAgIHN0cmlwcGVkU3RhcnQgPSB0cnVlOwogICAgIH0K
IAotICAgIC8vIHdvcmthcm91bmQgZm9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSBhIGJpdCBtb3Jl
IGNvbXBsaWNhdGVkIGNhdXNlIHdlIGhhdmUgdG8gY29weQotICAgIC8vIGl0IHdvdWxkIGJlIGV2
ZW4gYmV0dGVyIHRvIHJlcGxhY2UgbnVsbC10ZXJtaW5hdGlvbiB3aXRoIGEgbGVuZ3RoIHBhcmFt
ZXRlcgorICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZS4KICAgICBpbnQgbGVu
ID0gc3RybGVuKHN0cik7Ci0gICAgaW50IGNoYXJzVG9DaG9wT2ZmRW5kID0gMDsKLSAgICBmb3Ig
KGludCBwb3MgPSBsZW4gLSAxOyBwb3MgPj0gMCAmJiBzdHJbcG9zXSA9PSAnICc7IHBvcy0tKSB7
Ci0gICAgICAgIGNoYXJzVG9DaG9wT2ZmRW5kKys7Ci0gICAgfQotICAgIGlmIChjaGFyc1RvQ2hv
cE9mZkVuZCA+IDApIHsKLSAgICAgICAgY2hhciAqbmV3U3RyQnVmZmVyID0gKGNoYXIgKilmYXN0
TWFsbG9jKChsZW4gKyAxKSAtIGNoYXJzVG9DaG9wT2ZmRW5kKTsKLSAgICAgICAgc3RybmNweShu
ZXdTdHJCdWZmZXIsIHN0ciwgbGVuIC0gY2hhcnNUb0Nob3BPZmZFbmQpOwotICAgICAgICBuZXdT
dHJCdWZmZXJbbGVuIC0gY2hhcnNUb0Nob3BPZmZFbmRdID0gJ1wwJzsKLSAgICAgICAgZmFzdEZy
ZWUoc3RyQnVmZmVyKTsKLSAgICAgICAgc3RyQnVmZmVyID0gbmV3U3RyQnVmZmVyOwotICAgICAg
ICBzdHIgPSBzdHJCdWZmZXI7CisgICAgd2hpbGUgKGxlbiA+IDAgJiYgc3RyW2xlbiAtIDFdID09
ICcgJykgeworICAgICAgbGVuLS07CisgICAgICBzdHJbMF0gPSAwOwogICAgIH0KIAogICAgIC8v
IEFjY29yZGluZyB0byB0aGUgUkZDLCB0aGUgcmVmZXJlbmNlIHNob3VsZCBiZSBpbnRlcnByZXRl
ZCBhcyBhbgpAQCAtMzMxLDE0ICszNzEsMTQgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwg
JmJhc2UsIGNvbnN0IAogICAgIC8vIGFsZ29yaXRobS4gSWYgdGhlIFVSSSByZWZlcmVuY2UgaXMg
YWJzb2x1dGUgaXQgd2lsbCBoYXZlIGEKICAgICAvLyBzY2hlbWUsIG1lYW5pbmcgdGhhdCBpdCB3
aWxsIGhhdmUgYSBjb2xvbiBiZWZvcmUgdGhlIGZpcnN0CiAgICAgLy8gbm9uLXNjaGVtZSBlbGVt
ZW50LgotICAgIGNvbnN0IGNoYXIgKnAgPSBzdHI7CisgICAgY2hhciogcCA9IHN0cjsKICAgICBp
ZiAoaXNTY2hlbWVGaXJzdENoYXIoKnApKSB7CiAgICAgICAgICsrcDsKICAgICAgICAgd2hpbGUg
KGlzU2NoZW1lQ2hhcigqcCkpIHsKICAgICAgICAgICAgICsrcDsKICAgICAgICAgfQogICAgICAg
ICBpZiAoKnAgPT0gJzonKSB7Ci0gICAgICAgICAgICBpZiAocFsxXSAhPSAnLycgJiYgYmFzZS5w
cm90b2NvbCgpLmxvd2VyKCkgPT0gRGVwcmVjYXRlZFN0cmluZyhzdHIsIHAgLSBzdHIpLmxvd2Vy
KCkgJiYgYmFzZS5pc0hpZXJhcmNoaWNhbCgpKQorICAgICAgICAgICAgaWYgKHBbMV0gIT0gJy8n
ICYmIGJhc2UucHJvdG9jb2woKS5sb3dlcigpID09IFN0cmluZyhzdHIsIHAgLSBzdHIpLmxvd2Vy
KCkgJiYgYmFzZS5pc0hpZXJhcmNoaWNhbCgpKQogICAgICAgICAgICAgICAgIHN0ciA9IHAgKyAx
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFic29sdXRlID0gdHJ1ZTsKQEAg
LTM0NiwxOSArMzg2LDE5IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25z
dCAKICAgICB9CiAKICAgICBpZiAoYWJzb2x1dGUpIHsKLSAgICAgICAgcGFyc2Uoc3RyLCAoYWxs
QVNDSUkgJiYgIXN0cmlwcGVkU3RhcnQgJiYgKGNoYXJzVG9DaG9wT2ZmRW5kID09IDApKSA/ICZy
ZWwgOiAwKTsKKyAgICAgICAgLy8gVE9ETzogd2hlbiBwYXJzZSB0YWtlcyBhIFN0cmluZywgd2Ug
c2hvdWxkIHB1dCBiYWNrIHRoZSBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gZm9yIHVuY2hhbmdl
ZCBzdHJpbmdzLgorICAgICAgICBwYXJzZShzdHIsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIElmIHRoZSBiYXNlIGlzIGVtcHR5IG9yIG9wYXF1ZSAoZS5nLiBkYXRhOiBvciBqYXZhc2Ny
aXB0OiksIHRoZW4gdGhlIFVSTCBpcyBpbnZhbGlkCiAgICAgICAgIC8vIHVubGVzcyB0aGUgcmVs
YXRpdmUgVVJMIGlzIGEgc2luZ2xlIGZyYWdtZW50LgogICAgICAgICBpZiAoIWJhc2UuaXNIaWVy
YXJjaGljYWwoKSkgewogICAgICAgICAgICAgaWYgKHN0clswXSA9PSAnIycpIHsKICAgICAgICAg
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFz
ZS5xdWVyeUVuZFBvcykgKyBzdHI7Ci0gICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lp
KCksICZuZXdVUkwpOworICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3RyQnVmZmVyKQotICAgICAgICAgICAgICAg
IGZhc3RGcmVlKHN0ckJ1ZmZlcik7CisKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0zNzQsMTQgKzQxNCwxNCBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwg
Y29uc3QgCiAgICAgICAgICAgICAvLyBtdXN0IGJlIGZyYWdtZW50LW9ubHkgcmVmZXJlbmNlCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBi
YXNlLnVybFN0cmluZy5sZWZ0KGJhc2UucXVlcnlFbmRQb3MpICsgc3RyOwotICAgICAgICAgICAg
ICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgICAgICAgICBwYXJz
ZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgLy8gcXVlcnktb25seSByZWZlcmVu
Y2UsIHNwZWNpYWwgY2FzZSBuZWVkZWQgZm9yIG5vbi1VUkwgcmVzdWx0cwogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gYmFzZS51cmxTdHJp
bmcubGVmdChiYXNlLnBhdGhFbmRQb3MpICsgc3RyOwotICAgICAgICAgICAgICAgIHBhcnNlKG5l
d1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgICAgICAgICBwYXJzZShuZXdVUkwuYXNj
aWkoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IGNhc2UgJy8nOgpAQCAtMzkwLDExICs0MzAsMTEgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtV
UkwgJmJhc2UsIGNvbnN0IAogICAgICAgICAgICAgICAgIGlmIChzdHJbMV0gPT0gJy8nKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIG5ldC1wYXRoCiAgICAgICAgICAgICAgICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgbmV3VVJMID0gYmFzZS51cmxTdHJpbmcubGVmdChiYXNlLnNjaGVtZUVuZFBv
cyArIDEpICsgc3RyOwotICAgICAgICAgICAgICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwg
Jm5ld1VSTCk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBhYnMtcGF0
aAogICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJs
U3RyaW5nLmxlZnQoYmFzZS5wb3J0RW5kUG9zKSArIHN0cjsKLSAgICAgICAgICAgICAgICAgICAg
cGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICAgICAgICAgICAgICBwYXJz
ZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDA1LDQ1ICs0NDUsNDEgQEAgdm9pZCBLVVJMOjpp
bml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgICAgICAgICAgICAgIC8vIEJhc2UgcGFy
dCBwbHVzIHJlbGF0aXZlIHBhcnQgcGx1cyBvbmUgcG9zc2libGUgc2xhc2ggYWRkZWQgaW4gYmV0
d2VlbiBwbHVzIHRlcm1pbmF0aW5nIFwwIGJ5dGUuCiAgICAgICAgICAgICAgICAgVmVjdG9yPGNo
YXIsIDIwNDg+IGJ1ZmZlcihiYXNlLnBhdGhFbmRQb3MgKyAxICsgc3RybGVuKHN0cikgKyAxKTsK
IAotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlclBvcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2hhciogYnVmZmVyUG9zID0gYnVmZmVyLmRh
dGEoKTsKKwogICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNvcHkgZXZlcnl0aGluZyBiZWZvcmUg
dGhlIHBhdGggZnJvbSB0aGUgYmFzZQotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VT
dHJpbmcgPSBiYXNlLnVybFN0cmluZy5hc2NpaSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmJhc2VTdHJpbmdTdGFydCA9IGJhc2VTdHJpbmc7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqcGF0aFN0YXJ0ID0gYmFzZVN0cmluZ1N0YXJ0ICsgYmFzZS5wb3J0RW5kUG9zOwotICAg
ICAgICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nU3RhcnQgPCBwYXRoU3RhcnQpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nID0gYmFzZS51cmxTdHJpbmcuYXNjaWko
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nU3RhcnQgPSBiYXNlU3Ry
aW5nOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGhTdGFydCA9IGJhc2VTdHJpbmdT
dGFydCArIGJhc2UucG9ydEVuZFBvczsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmlu
Z1N0YXJ0IDwgcGF0aFN0YXJ0KQogICAgICAgICAgICAgICAgICAgICAqYnVmZmVyUG9zKysgPSAq
YmFzZVN0cmluZ1N0YXJ0Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNo
YXIgKmJ1ZmZlclBhdGhTdGFydCA9IGJ1ZmZlclBvczsKKyAgICAgICAgICAgICAgICBjaGFyKiBi
dWZmZXJQYXRoU3RhcnQgPSBidWZmZXJQb3M7CisKKyAgICAgICAgICAgICAgICAvLyBub3cgY29w
eSB0aGUgYmFzZSBwYXRoCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZ0Vu
ZCA9IGJhc2VTdHJpbmcgKyBiYXNlLnBhdGhFbmRQb3M7CiAKLSAgICAgICAgICAgICAgICAvLyBu
b3cgY29weSB0aGUgYmFzZSBwYXRoIAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VT
dHJpbmdFbmQgPSBiYXNlU3RyaW5nICsgYmFzZS5wYXRoRW5kUG9zOwotICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIGdvIGJhY2sgdG8gdGhlIGxhc3Qgc2xhc2gKLSAgICAgICAg
ICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ0VuZCA+IGJhc2VTdHJpbmdTdGFydCAmJiBiYXNlU3Ry
aW5nRW5kWy0xXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ0Vu
ZCA+IGJhc2VTdHJpbmdTdGFydCAmJiBiYXNlU3RyaW5nRW5kWy0xXSAhPSAnLycpCiAgICAgICAg
ICAgICAgICAgICAgIGJhc2VTdHJpbmdFbmQtLTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoYmFzZVN0cmluZ0VuZCA9PSBiYXNlU3Ry
aW5nU3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbm8gcGF0aCBpbiBiYXNlLCBhZGQg
YSBwYXRoIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJh
c2Uuc2NoZW1lRW5kUG9zICsgMSAhPSBiYXNlLnBhdGhFbmRQb3MgJiYgKnN0ciAhPSAnXDAnICYm
ICpzdHIgIT0gJz8nICYmICpzdHIgIT0gJyMnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChi
YXNlLnNjaGVtZUVuZFBvcyArIDEgIT0gYmFzZS5wYXRoRW5kUG9zICYmICpzdHIgIT0gJ1wwJyAm
JiAqc3RyICE9ICc/JyAmJiAqc3RyICE9ICcjJykKICAgICAgICAgICAgICAgICAgICAgICAgICpi
dWZmZXJQb3MrKyA9ICcvJzsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBjb3B5UGF0aFJlbW92
aW5nRG90cyhidWZmZXJQb3MsIGJhc2VTdHJpbmdTdGFydCwgMCwgYmFzZVN0cmluZ0VuZCAtIGJh
c2VTdHJpbmdTdGFydCk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqcmVsU3RyaW5nU3RhcnQgPSBzdHI7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcmVsU3RyaW5nUG9zID0gcmVsU3RyaW5nU3RhcnQ7Ci0gICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogcmVsU3RyaW5nU3RhcnQgPSBzdHI7CisgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogcmVsU3RyaW5nUG9zID0gcmVsU3RyaW5nU3RhcnQ7CisKICAgICAg
ICAgICAgICAgICB3aGlsZSAoKnJlbFN0cmluZ1BvcyAhPSAnXDAnICYmICpyZWxTdHJpbmdQb3Mg
IT0gJz8nICYmICpyZWxTdHJpbmdQb3MgIT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChyZWxTdHJpbmdQb3NbMF0gPT0gJy4nICYmIGJ1ZmZlclBvc1stMV0gPT0gJy8nKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9z
WzFdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLiIgc2Vn
bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcyArPSAxOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8nKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcysrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVsU3RyaW5nUG9zWzFdID09
ICcuJyAmJiBpc1BhdGhTZWdtZW50RW5kQ2hhcihyZWxTdHJpbmdQb3NbMl0pKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyICIuLiIgc2VnbWVudCBhbmQgcmV3aW5k
IHRoZSBsYXN0IHNlZ21lbnQKQEAgLTQ1MSwxOSArNDg3LDE2IEBAIHZvaWQgS1VSTDo6aW5pdChj
b25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAi
Li4iIHNlZ21lbnRzIC0gd2UgY2hvb3NlIHRvIGRyb3AgdGhlbSBzaW5jZSBzb21lIHdlYiBjb250
ZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVsaWVzIG9uIHRoaXMuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zICs9IDI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09ICcvJykKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zKys7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJQb3MgPiBi
dWZmZXJQYXRoU3RhcnQgKyAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1
ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFydCArIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlclBvcy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0
ICsgMSAgJiYgYnVmZmVyUG9zWy0xXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSAgJiYgYnVmZmVyUG9z
Wy0xXSAhPSAnLycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcy0t
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAqYnVm
ZmVyUG9zID0gKnJlbFN0cmluZ1BvczsKICAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9z
Kys7CiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcysrOwpAQCAtNDc0LDE2ICs1MDcsMTIg
QEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgICAgICAgICAg
ICAgIHN0cmNweShidWZmZXJQb3MsIHJlbFN0cmluZ1Bvcyk7CiAKICAgICAgICAgICAgICAgICBw
YXJzZShidWZmZXIuZGF0YSgpLCAwKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAg
ICAgIEFTU0VSVChzdHJsZW4oYnVmZmVyLmRhdGEoKSkgKyAxIDw9IGJ1ZmZlci5zaXplKCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIGlmIChzdHJCdWZmZXIpIHsKLSAgICAgICAgZmFzdEZyZWUoc3RyQnVmZmVyKTsK
LSAgICB9CiB9CiAKIGJvb2wgS1VSTDo6aGFzUGF0aCgpIGNvbnN0CkBAIC00OTEsMTAgKzUyMCwx
MCBAQCBib29sIEtVUkw6Omhhc1BhdGgoKSBjb25zdAogICAgIHJldHVybiBtX2lzVmFsaWQgJiYg
cGF0aEVuZFBvcyAhPSBwb3J0RW5kUG9zOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6Omxh
c3RQYXRoQ29tcG9uZW50KCkgY29uc3QKK1N0cmluZyBLVVJMOjpsYXN0UGF0aENvbXBvbmVudCgp
IGNvbnN0CiB7CiAgICAgaWYgKCFoYXNQYXRoKCkpCi0gICAgICAgIHJldHVybiBEZXByZWNhdGVk
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGludCBlbmQgPSBwYXRo
RW5kUG9zIC0gMTsKICAgICBpZiAodXJsU3RyaW5nW2VuZF0gPT0gJy8nKQpAQCAtNTA4LDE5ICs1
MzcsMTkgQEAgRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpsYXN0UGF0aENvbXBvbmVudAogICAgIHJl
dHVybiB1cmxTdHJpbmcubWlkKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpOwogfQogCi1EZXByZWNh
dGVkU3RyaW5nIEtVUkw6OnByb3RvY29sKCkgY29uc3QKK1N0cmluZyBLVVJMOjpwcm90b2NvbCgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAogICAgIHJldHVy
biB1cmxTdHJpbmcubGVmdChzY2hlbWVFbmRQb3MpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtV
Ukw6Omhvc3QoKSBjb25zdAorU3RyaW5nIEtVUkw6Omhvc3QoKSBjb25zdAogewogICAgIGlmICgh
bV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAgICBpbnQgc3RhcnQgPSAocGFzc3dvcmRFbmRQ
b3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAx
OwpAQCAtNTQ1LDMyICs1NzQsMzIgQEAgdW5zaWduZWQgc2hvcnQgaW50IEtVUkw6OnBvcnQoKSBj
b25zdAogICAgIHJldHVybiAwOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnBhc3MoKSBj
b25zdAorU3RyaW5nIEtVUkw6OnBhc3MoKSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlkKSB7
Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICB9CiAKICAgICBpZiAocGFzc3dvcmRFbmRQb3MgPT0gdXNlckVuZFBvcykgewot
ICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3RyaW5nLm1pZCh1c2Vy
RW5kUG9zICsgMSwgcGFzc3dvcmRFbmRQb3MgLSB1c2VyRW5kUG9zIC0gMSkpOyAKIH0KIAotRGVw
cmVjYXRlZFN0cmluZyBLVVJMOjp1c2VyKCkgY29uc3QKK1N0cmluZyBLVVJMOjp1c2VyKCkgY29u
c3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0
cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRl
Y29kZV9zdHJpbmcodXJsU3RyaW5nLm1pZCh1c2VyU3RhcnRQb3MsIHVzZXJFbmRQb3MgLSB1c2Vy
U3RhcnRQb3MpKTsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpyZWYoKSBjb25zdAorU3Ry
aW5nIEtVUkw6OnJlZigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQgfHwgZnJhZ21lbnRF
bmRQb3MgPT0gcXVlcnlFbmRQb3MpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAogICAgIHJldHVybiB1cmxTdHJp
bmcubWlkKHF1ZXJ5RW5kUG9zICsgMSwgZnJhZ21lbnRFbmRQb3MgLSAocXVlcnlFbmRQb3MgKyAx
KSk7CkBAIC01ODEsNDQgKzYxMCw1NiBAQCBib29sIEtVUkw6Omhhc1JlZigpIGNvbnN0CiAgICAg
cmV0dXJuIG1faXNWYWxpZCAmJiBmcmFnbWVudEVuZFBvcyAhPSBxdWVyeUVuZFBvczsKIH0KIAot
RGVwcmVjYXRlZFN0cmluZyBLVVJMOjpxdWVyeSgpIGNvbnN0Citib29sIEtVUkw6OnByb3RvY29s
SXMoY29uc3QgY2hhciogcHJvdG9jb2wpIGNvbnN0Cit7CisgICAgLy8gRG8gdGhlIGNvbXBhcmlz
b24gd2l0aG91dCBtYWtpbmcgYSBuZXcgc3RyaW5nIG9iamVjdC4KKyAgICBpbnQgaTsKKyAgICBm
b3IgKGkgPSAwOyBpIDwgc2NoZW1lRW5kUG9zOyBpKyspIHsKKyAgICAgICAgaWYgKCFwcm90b2Nv
bFtpXSB8fCB0b0FTQ0lJTG93ZXIodXJsU3RyaW5nW2ldLnVuaWNvZGUoKSkgIT0gcHJvdG9jb2xb
aV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEFTU0VSVChwcm90b2NvbFtp
XSA+PSAnICcgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4ocHJvdG9jb2xbaV0pIDw9IDB4
N2YgJiYgIShwcm90b2NvbFtpXSA+PSAnQScgJiYgcHJvdG9jb2xbaV0gPD0gJ1onKSk7CisgICAg
fQorICAgIHJldHVybiAhcHJvdG9jb2xbaV07ICAvLyBXZSBzaG91bGQgaGF2ZSBjb25zdW1lZCBh
bGwgY2hhcmFjdGVycyBpbiB0aGUgYXJndW1lbnQuCit9CisKK1N0cmluZyBLVVJMOjpxdWVyeSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAogICAgIHJldHVy
biB1cmxTdHJpbmcubWlkKHBhdGhFbmRQb3MsIHF1ZXJ5RW5kUG9zIC0gcGF0aEVuZFBvcyk7IAog
fQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnBhdGgoKSBjb25zdAorU3RyaW5nIEtVUkw6OnBh
dGgoKSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gZGVjb2RlX3N0cmluZyh1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MsIHBhdGhFbmRQb3Mg
LSBwb3J0RW5kUG9zKSk7IAogfQogCi12b2lkIEtVUkw6OnNldFByb3RvY29sKGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldFByb3RvY29sKGNvbnN0IFN0cmluZyYgcykK
IHsKICAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VS
TCA9IHMgKyAiOiIgKyB1cmxTdHJpbmc7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAm
bmV3VVJMKTsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBzLmRlcHJlY2F0ZWRT
dHJpbmcoKSArICI6IiArIHVybFN0cmluZzsKKyAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCks
IDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBuZXdV
UkwgPSBzICsgdXJsU3RyaW5nLm1pZChzY2hlbWVFbmRQb3MpOwotICAgIHBhcnNlKG5ld1VSTC5h
c2NpaSgpLCAmbmV3VVJMKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHMuZGVwcmVj
YXRlZFN0cmluZygpICsgdXJsU3RyaW5nLm1pZChzY2hlbWVFbmRQb3MpOworICAgIHBhcnNlKG5l
d1VSTC5hc2NpaSgpLCAwKTsKIH0KIAotdm9pZCBLVVJMOjpzZXRIb3N0KGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldEhvc3QoY29uc3QgU3RyaW5nJiBzKQogewogICAg
IGlmIChtX2lzVmFsaWQpIHsKICAgICAgICAgYm9vbCBzbGFzaFNsYXNoTmVlZGVkID0gdXNlclN0
YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7CiAgICAgICAgIGludCBob3N0U3RhcnQgPSAocGFz
c3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRF
bmRQb3MgKyAxOwotICAgICAgICAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1
cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDogRGVw
cmVjYXRlZFN0cmluZygpKSArIHMgKyB1cmxTdHJpbmcubWlkKGhvc3RFbmRQb3MpOwotICAgICAg
ICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisKKyAgICAgICAgRGVwcmVjYXRlZFN0
cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVk
ZWQgPyAiLy8iIDogRGVwcmVjYXRlZFN0cmluZygpKSArIHMuZGVwcmVjYXRlZFN0cmluZygpICsg
dXJsU3RyaW5nLm1pZChob3N0RW5kUG9zKTsKKyAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCks
IDApOwogICAgIH0KIH0KIApAQCAtNjI4LDI4ICs2NjksMjggQEAgdm9pZCBLVVJMOjpzZXRQb3J0
KHVuc2lnbmVkIHNob3J0IGkpCiAgICAgICAgIGJvb2wgY29sb25OZWVkZWQgPSBwb3J0RW5kUG9z
ID09IGhvc3RFbmRQb3M7CiAgICAgICAgIGludCBwb3J0U3RhcnQgPSAoY29sb25OZWVkZWQgPyBo
b3N0RW5kUG9zIDogaG9zdEVuZFBvcyArIDEpOwogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5l
d1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRTdGFydCkgKyAoY29sb25OZWVkZWQgPyAiOiIgOiBE
ZXByZWNhdGVkU3RyaW5nKCkpICsgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGkpICsgdXJsU3Ry
aW5nLm1pZChwb3J0RW5kUG9zKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdV
UkwpOworICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCi12b2lk
IEtVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhvc3RBbmRQb3J0
KQordm9pZCBLVVJMOjpzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0KQog
ewogICAgIGlmIChtX2lzVmFsaWQpIHsKICAgICAgICAgYm9vbCBzbGFzaFNsYXNoTmVlZGVkID0g
dXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7CiAgICAgICAgIGludCBob3N0U3RhcnQg
PSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFz
c3dvcmRFbmRQb3MgKyAxOwotICAgICAgICAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdV
UkwgPSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8i
IDogRGVwcmVjYXRlZFN0cmluZygpKSArIGhvc3RBbmRQb3J0ICsgdXJsU3RyaW5nLm1pZChwb3J0
RW5kUG9zKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworCisgICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQoaG9zdFN0YXJ0KSAr
IChzbGFzaFNsYXNoTmVlZGVkID8gIi8vIiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBob3N0QW5k
UG9ydC5kZXByZWNhdGVkU3RyaW5nKCkgKyB1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MpOworICAg
ICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCi12b2lkIEtVUkw6OnNl
dFVzZXIoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXNlcikKK3ZvaWQgS1VSTDo6c2V0VXNlcihj
b25zdCBTdHJpbmcmIHVzZXIpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkgewogICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHU7CiAgICAgICAgIGludCBlbmQgPSB1c2VyRW5kUG9zOwogICAgICAgICBp
ZiAoIXVzZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB1ID0gdXNlcjsKKyAgICAgICAgICAg
IHUgPSB1c2VyLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgICAgIGlmICh1c2VyU3RhcnRQ
b3MgPT0gc2NoZW1lRW5kUG9zICsgMSkKICAgICAgICAgICAgICAgICB1ID0gIi8vIiArIHU7CiAg
ICAgICAgICAgICAvLyBBZGQgJ0AnIGlmIHdlIGRpZG4ndCBoYXZlIG9uZSBiZWZvcmUuCkBAIC02
NjEsMTcgKzcwMiwxNyBAQCB2b2lkIEtVUkw6OnNldFVzZXIoY29uc3QgRGVwcmVjYXRlZFN0cmlu
CiAgICAgICAgICAgICAgICAgZW5kICs9IDE7CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgRGVw
cmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdCh1c2VyU3RhcnRQb3MpICsgdSAr
IHVybFN0cmluZy5taWQoZW5kKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdV
UkwpOworICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCi12b2lk
IEtVUkw6OnNldFBhc3MoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcGFzc3dvcmQpCit2b2lkIEtV
Ukw6OnNldFBhc3MoY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKIHsKICAgICBpZiAobV9pc1ZhbGlk
KSB7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcDsKICAgICAgICAgaW50IGVuZCA9IHBhc3N3
b3JkRW5kUG9zOwogICAgICAgICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgcCA9ICc6JyArIHBhc3N3b3JkICsgJ0AnOworICAgICAgICAgICAgcCA9ICc6JyArIHBhc3N3
b3JkLmRlcHJlY2F0ZWRTdHJpbmcoKSArICdAJzsKICAgICAgICAgICAgIGlmICh1c2VyRW5kUG9z
ID09IHNjaGVtZUVuZFBvcyArIDEpCiAgICAgICAgICAgICAgICAgcCA9ICIvLyIgKyBwOwogICAg
ICAgICAgICAgLy8gRWF0IHRoZSBleGlzdGluZyAnQCcgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGFk
ZCBvdXIgb3duLgpAQCAtNjgzLDUwICs3MjQsNTAgQEAgdm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbgogICAgICAgICAgICAgICAgIGVuZCArPSAxOwogICAgICAgICB9CiAg
ICAgICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQodXNl
ckVuZFBvcykgKyBwICsgdXJsU3RyaW5nLm1pZChlbmQpOwotICAgICAgICBwYXJzZShuZXdVUkwu
YXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAg
ICB9CiB9CiAKLXZvaWQgS1VSTDo6c2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCit2
b2lkIEtVUkw6OnNldFJlZihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkg
ewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHF1ZXJ5
RW5kUG9zKSArIChzLmlzRW1wdHkoKSA/IERlcHJlY2F0ZWRTdHJpbmcoKSA6ICIjIiArIHMpOwot
ICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocXVlcnlFbmRQb3MpICsgKHMuaXNFbXB0
eSgpID8gRGVwcmVjYXRlZFN0cmluZygpIDogIiMiICsgcy5kZXByZWNhdGVkU3RyaW5nKCkpOwor
ICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCi12b2lkIEtVUkw6
OnNldFF1ZXJ5KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnF1ZXJ5KQordm9pZCBLVVJMOjpzZXRR
dWVyeShjb25zdCBTdHJpbmcmIHF1ZXJ5KQogewogICAgIGlmIChtX2lzVmFsaWQpIHsKICAgICAg
ICAgRGVwcmVjYXRlZFN0cmluZyBxOwogICAgICAgICBpZiAoIXF1ZXJ5LmlzTnVsbCgpICYmIChx
dWVyeS5pc0VtcHR5KCkgfHwgcXVlcnlbMF0gIT0gJz8nKSkgewotICAgICAgICAgICAgcSA9ICI/
IiArIHF1ZXJ5OworICAgICAgICAgICAgcSA9ICI/IiArIHF1ZXJ5LmRlcHJlY2F0ZWRTdHJpbmco
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHEgPSBxdWVyeTsKKyAgICAgICAgICAg
IHEgPSBxdWVyeS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIH0KIAogICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBhdGhFbmRQb3MpICsgcSArIHVy
bFN0cmluZy5taWQocXVlcnlFbmRQb3MpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwg
Jm5ld1VSTCk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAgICB9CiB9CiAK
LXZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzKQordm9pZCBLVVJM
OjpzZXRQYXRoKGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocG9ydEVuZFBvcykg
KyBlbmNvZGVfc3RyaW5nKHMpICsgdXJsU3RyaW5nLm1pZChwYXRoRW5kUG9zKTsKLSAgICAgICAg
cGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRFbmRQb3MpICsgZW5jb2RlX3N0cmluZyhzLmRl
cHJlY2F0ZWRTdHJpbmcoKSkgKyB1cmxTdHJpbmcubWlkKHBhdGhFbmRQb3MpOworICAgICAgICBw
YXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtV
Ukw6OnByZXR0eVVSTCgpIGNvbnN0CitTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1faXNWYWxpZCkgewogICAgICAgICByZXR1cm4gdXJsU3RyaW5nOwogICAgIH0K
IAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0ID0gcHJvdG9jb2woKSArICI6IjsKKyAgICBT
dHJpbmcgcmVzdWx0ID0gcHJvdG9jb2woKSArICI6IjsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcg
YXV0aG9yaXR5OworICAgIFN0cmluZyBhdXRob3JpdHk7CiAKICAgICBpZiAoaG9zdEVuZFBvcyAh
PSBwYXNzd29yZEVuZFBvcykgewogICAgICAgICBpZiAodXNlckVuZFBvcyAhPSB1c2VyU3RhcnRQ
b3MpIHsKQEAgLTczNiwxMyArNzc3LDEzIEBAIERlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6cHJldHR5
VVJMKCkgY29uc3QKICAgICAgICAgYXV0aG9yaXR5ICs9IGhvc3QoKTsKICAgICAgICAgaWYgKHBv
cnQoKSAhPSAwKSB7CiAgICAgICAgICAgICBhdXRob3JpdHkgKz0gIjoiOwotICAgICAgICAgICAg
YXV0aG9yaXR5ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihwb3J0KCkpOworICAgICAgICAg
ICAgYXV0aG9yaXR5ICs9IFN0cmluZzo6bnVtYmVyKHBvcnQoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBpZiAoIWF1dGhvcml0eS5pc0VtcHR5KCkpCiAgICAgICAgIHJlc3VsdCArPSAiLy8i
ICsgYXV0aG9yaXR5OwotICAgIGVsc2UgaWYgKHByb3RvY29sKCkgPT0gImZpbGUiKQorICAgIGVs
c2UgaWYgKHByb3RvY29sSXMoImZpbGUiKSkKICAgICAgICAgcmVzdWx0ICs9ICIvLyI7CiAKICAg
ICByZXN1bHQgKz0gcGF0aCgpOwpAQCAtNzU1LDI4ICs3OTYsMjggQEAgRGVwcmVjYXRlZFN0cmlu
ZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLURlcHJl
Y2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1
cmxTdHJpbmcpCitEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uc3QgRGVw
cmVjYXRlZFN0cmluZyYgc3RyKQogewotICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmlu
ZywgVVRGOEVuY29kaW5nKCkpOworICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHN0ciwgVVRGOEVu
Y29kaW5nKCkpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQorRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpkZWNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcmIHN0ciwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHJlc3VsdCgiIik7CiAKICAgICBWZWN0b3I8Y2hhciwgMjA0OD4gYnVmZmVy
KDApOwogCi0gICAgaW50IGxlbmd0aCA9IHVybFN0cmluZy5sZW5ndGgoKTsKKyAgICBpbnQgbGVu
Z3RoID0gc3RyLmxlbmd0aCgpOwogICAgIGludCBkZWNvZGVkUG9zaXRpb24gPSAwOwogICAgIGlu
dCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAgaW50IGVuY29kZWRSdW5Qb3NpdGlvbjsKLSAgICB3
aGlsZSAoKGVuY29kZWRSdW5Qb3NpdGlvbiA9IHVybFN0cmluZy5maW5kKCclJywgc2VhcmNoUG9z
aXRpb24pKSA+PSAwKSB7CisgICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRpb24gPSBzdHIuZmlu
ZCgnJScsIHNlYXJjaFBvc2l0aW9uKSkgPj0gMCkgewogICAgICAgICAvLyBGaW5kIHRoZSBzZXF1
ZW5jZSBvZiAlLWVzY2FwZSBjb2Rlcy4KICAgICAgICAgaW50IGVuY29kZWRSdW5FbmQgPSBlbmNv
ZGVkUnVuUG9zaXRpb247CiAgICAgICAgIHdoaWxlIChsZW5ndGggLSBlbmNvZGVkUnVuRW5kID49
IDMKLSAgICAgICAgICAgICAgICAmJiB1cmxTdHJpbmdbZW5jb2RlZFJ1bkVuZF0gPT0gJyUnCi0g
ICAgICAgICAgICAgICAgJiYgaXNIZXhEaWdpdCh1cmxTdHJpbmdbZW5jb2RlZFJ1bkVuZCArIDFd
LmxhdGluMSgpKQotICAgICAgICAgICAgICAgICYmIGlzSGV4RGlnaXQodXJsU3RyaW5nW2VuY29k
ZWRSdW5FbmQgKyAyXS5sYXRpbjEoKSkpCisgICAgICAgICAgICAgICAgJiYgc3RyW2VuY29kZWRS
dW5FbmRdID09ICclJworICAgICAgICAgICAgICAgICYmIGlzSGV4RGlnaXQoc3RyW2VuY29kZWRS
dW5FbmQgKyAxXS5sYXRpbjEoKSkKKyAgICAgICAgICAgICAgICAmJiBpc0hleERpZ2l0KHN0cltl
bmNvZGVkUnVuRW5kICsgMl0ubGF0aW4xKCkpKQogICAgICAgICAgICAgZW5jb2RlZFJ1bkVuZCAr
PSAzOwogICAgICAgICBpZiAoZW5jb2RlZFJ1bkVuZCA9PSBlbmNvZGVkUnVuUG9zaXRpb24pIHsK
ICAgICAgICAgICAgICsrc2VhcmNoUG9zaXRpb247CkBAIC03ODgsMTEgKzgyOSwxMSBAQCBEZXBy
ZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uCiAgICAgICAgIGludCBlbmNvZGVk
UnVuTGVuZ3RoID0gZW5jb2RlZFJ1bkVuZCAtIGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICAgICAg
YnVmZmVyLmNsZWFyKCk7CiAgICAgICAgIGJ1ZmZlci5ncm93KGVuY29kZWRSdW5MZW5ndGggKyAx
KTsKLSAgICAgICAgdXJsU3RyaW5nLmNvcHlMYXRpbjEoYnVmZmVyLmRhdGEoKSwgZW5jb2RlZFJ1
blBvc2l0aW9uLCBlbmNvZGVkUnVuTGVuZ3RoKTsKKyAgICAgICAgc3RyLmNvcHlMYXRpbjEoYnVm
ZmVyLmRhdGEoKSwgZW5jb2RlZFJ1blBvc2l0aW9uLCBlbmNvZGVkUnVuTGVuZ3RoKTsKIAogICAg
ICAgICAvLyBEZWNvZGUgdGhlICUtZXNjYXBlcyBpbnRvIGJ5dGVzLgotICAgICAgICBjaGFyICpw
ID0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgY29uc3QgY2hhciAqcSA9IGJ1ZmZlci5kYXRhKCk7
CisgICAgICAgIGNoYXIqIHAgPSBidWZmZXIuZGF0YSgpOworICAgICAgICBjb25zdCBjaGFyKiBx
ID0gYnVmZmVyLmRhdGEoKTsKICAgICAgICAgd2hpbGUgKCpxKSB7CiAgICAgICAgICAgICAqcCsr
ID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBoZXhEaWdpdFZhbHVlKHFbMl0pOwogICAg
ICAgICAgICAgcSArPSAzOwpAQCAtODA0LDEyICs4NDUsMTIgQEAgRGVwcmVjYXRlZFN0cmluZyBL
VVJMOjpkZWNvZGVfc3RyaW5nKGNvbgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
Ly8gQnVpbGQgdXAgdGhlIHN0cmluZyB3aXRoIHdoYXQgd2UganVzdCBza2lwcGVkIGFuZCB3aGF0
IHdlIGp1c3QgZGVjb2RlZC4KLSAgICAgICAgcmVzdWx0LmFwcGVuZCh1cmxTdHJpbmcubWlkKGRl
Y29kZWRQb3NpdGlvbiwgZW5jb2RlZFJ1blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyLm1pZChkZWNvZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Q
b3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbikpOwogICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENoYXIqPihkZWNvZGVkLmNoYXJhY3RlcnMoKSks
IGRlY29kZWQubGVuZ3RoKCkpOwogICAgICAgICBkZWNvZGVkUG9zaXRpb24gPSBlbmNvZGVkUnVu
RW5kOwogICAgIH0KIAotICAgIHJlc3VsdC5hcHBlbmQodXJsU3RyaW5nLm1pZChkZWNvZGVkUG9z
aXRpb24sIGxlbmd0aCAtIGRlY29kZWRQb3NpdGlvbikpOworICAgIHJlc3VsdC5hcHBlbmQoc3Ry
Lm1pZChkZWNvZGVkUG9zaXRpb24sIGxlbmd0aCAtIGRlY29kZWRQb3NpdGlvbikpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTgxOSwxNSArODYwLDE1IEBAIGJvb2wgS1VSTDo6aXNMb2Nh
bEZpbGUoKSBjb25zdAogICAgIC8vIGFuZCBpbmNsdWRpbmcgZmVlZCB3b3VsZCBhbGxvdyBmZWVk
cyB0byBwb3RlbnRpYWxseSBsZXQgc29tZW9uZSdzIGJsb2cKICAgICAvLyByZWFkIHRoZSBjb250
ZW50cyBvZiB0aGUgY2xpcGJvYXJkIG9uIGEgZHJhZywgZXZlbiB3aXRob3V0IGEgZHJvcC4KICAg
ICAvLyBMaWtld2lzZSB3aXRoIHVzaW5nIHRoZSBGcmFtZUxvYWRlcjo6c2hvdWxkVHJlYXRVUkxB
c0xvY2FsKCkgZnVuY3Rpb24uCi0gICAgcmV0dXJuIHByb3RvY29sKCkgPT0gImZpbGUiOworICAg
IHJldHVybiBwcm90b2NvbElzKCJmaWxlIik7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGVuZEVzY2Fw
aW5nQmFkQ2hhcnMoY2hhciomIGJ1ZmZlciwgY29uc3QgY2hhciAqc3RyU3RhcnQsIHNpemVfdCBs
ZW5ndGgpCitzdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIqJiBidWZmZXIs
IGNvbnN0IGNoYXIqIHN0clN0YXJ0LCBzaXplX3QgbGVuZ3RoKQogewotICAgIGNoYXIgKnAgPSBi
dWZmZXI7CisgICAgY2hhciogcCA9IGJ1ZmZlcjsKIAotICAgIGNvbnN0IGNoYXIgKnN0ciA9IHN0
clN0YXJ0OwotICAgIGNvbnN0IGNoYXIgKnN0ckVuZCA9IHN0clN0YXJ0ICsgbGVuZ3RoOworICAg
IGNvbnN0IGNoYXIqIHN0ciA9IHN0clN0YXJ0OworICAgIGNvbnN0IGNoYXIqIHN0ckVuZCA9IHN0
clN0YXJ0ICsgbGVuZ3RoOwogICAgIHdoaWxlIChzdHIgPCBzdHJFbmQpIHsKICAgICAgICAgdW5z
aWduZWQgY2hhciBjID0gKnN0cisrOwogICAgICAgICBpZiAoaXNCYWRDaGFyKGMpKSB7CkBAIC04
NDIsMjAgKzg4MywyMCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIq
CiAgICAgICAgICAgICAqcCsrID0gYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGJ1
ZmZlciA9IHA7CiB9CiAKIC8vIGNvcHkgYSBwYXRoLCBhY2NvdW50aW5nIGZvciAiLiIgYW5kICIu
LiIgc2VnbWVudHMKLXN0YXRpYyBpbnQgY29weVBhdGhSZW1vdmluZ0RvdHMoY2hhciAqZHN0LCBj
b25zdCBjaGFyICpzcmMsIGludCBzcmNTdGFydCwgaW50IHNyY0VuZCkKK3N0YXRpYyBpbnQgY29w
eVBhdGhSZW1vdmluZ0RvdHMoY2hhciogZHN0LCBjb25zdCBjaGFyKiBzcmMsIGludCBzcmNTdGFy
dCwgaW50IHNyY0VuZCkKIHsKLSAgICBjaGFyICpidWZmZXJQYXRoU3RhcnQgPSBkc3Q7CisgICAg
Y2hhciogYnVmZmVyUGF0aFN0YXJ0ID0gZHN0OwogCiAgICAgLy8gZW1wdHkgcGF0aCBpcyBhIHNw
ZWNpYWwgY2FzZSwgYW5kIG5lZWQgbm90IGhhdmUgYSBsZWFkaW5nIHNsYXNoCiAgICAgaWYgKHNy
Y1N0YXJ0ICE9IHNyY0VuZCkgewotICAgICAgICBjb25zdCBjaGFyICpiYXNlU3RyaW5nU3RhcnQg
PSBzcmMgKyBzcmNTdGFydDsKLSAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ0VuZCA9IHNy
YyArIHNyY0VuZDsKLSAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1BvcyA9IGJhc2VTdHJp
bmdTdGFydDsKKyAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZ1N0YXJ0ID0gc3JjICsgc3Jj
U3RhcnQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmdFbmQgPSBzcmMgKyBzcmNFbmQ7
CisgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmdQb3MgPSBiYXNlU3RyaW5nU3RhcnQ7CiAK
ICAgICAgICAgLy8gdGhpcyBjb2RlIGlzIHVucHJlcGFyZWQgZm9yIHBhdGhzIHRoYXQgZG8gbm90
IGJlZ2luIHdpdGggYQogICAgICAgICAvLyBzbGFzaCBhbmQgd2Ugc2hvdWxkIGFsd2F5cyBoYXZl
IG9uZSBpbiB0aGUgc291cmNlIHN0cmluZwpAQCAtOTA0LDkgKzk0NSw5IEBAIHN0YXRpYyBpbnQg
Y29weVBhdGhSZW1vdmluZ0RvdHMoY2hhciAqZHMKICAgICByZXR1cm4gZHN0IC0gYnVmZmVyUGF0
aFN0YXJ0OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzU2xhc2hEb3RPckRvdERvdChjb25z
dCBjaGFyICpzdHIpCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzU2xhc2hEb3RPckRvdERvdChjb25z
dCBjaGFyKiBzdHIpCiB7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihzdHIpOworICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIHAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzdHIpOwogICAg
IGlmICghKnApCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB1bnNpZ25lZCBjaGFyIHBjID0g
KnA7CkBAIC05MjMsNyArOTY0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoTGV0dGVyKGNo
YXIgYywgYwogICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRlcjsKIH0KIAot
dm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcg
Km9yaWdpbmFsU3RyaW5nKQordm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCiB7CiAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKIApAQCAt
OTc4LDcgKzEwMTksNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3Qg
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB1c2VyRW5kKys7CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgaWYgKHVybFt1c2VyRW5kXSA9PSAnQCcpIHsKICAgICAgICAgICAgIC8v
IGFjdHVhbCBlbmQgb2YgdGhlIHVzZXJpbmZvLCBzdGFydCBvbiB0aGUgaG9zdAogICAgICAgICAg
ICAgaWYgKGNvbG9uUG9zICE9IDApIHsKQEAgLTEwNTAsNyArMTA5MSw3IEBAIHZvaWQgS1VSTDo6
cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgaG9zdFN0YXJ0ID0gaG9zdEVu
ZCA9IHBhc3N3b3JkRW5kOwogICAgICAgICBwb3J0U3RhcnQgPSBwb3J0RW5kID0gaG9zdEVuZDsK
ICAgICB9Ci0gICAgICAgIAorCiAgICAgaW50IHBhdGhTdGFydCA9IHBvcnRFbmQ7CiAgICAgaW50
IHBhdGhFbmQgPSBwYXRoU3RhcnQ7CiAgICAgaW50IHF1ZXJ5U3RhcnQ7CkBAIC0xMDYxLDE0ICsx
MTAyLDE0IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICBp
ZiAoIWhpZXJhcmNoaWNhbCkgewogICAgICAgICB3aGlsZSAodXJsW3BhdGhFbmRdICE9ICdcMCcg
JiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0aEVuZF0gIT0gJyMnKQogICAgICAgICAg
ICAgcGF0aEVuZCsrOwotICAgICAgICAKKwogICAgICAgICBxdWVyeVN0YXJ0ID0gcGF0aEVuZDsK
ICAgICAgICAgcXVlcnlFbmQgPSBxdWVyeVN0YXJ0OwogICAgICAgICBpZiAodXJsW3F1ZXJ5U3Rh
cnRdID09ICc/JykgewogICAgICAgICAgICAgd2hpbGUgKHVybFtxdWVyeUVuZF0gIT0gJ1wwJyAm
JiB1cmxbcXVlcnlFbmRdICE9ICcjJykKICAgICAgICAgICAgICAgICBxdWVyeUVuZCsrOwogICAg
ICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZyYWdtZW50U3RhcnQgPSBxdWVyeUVuZDsKICAg
ICAgICAgZnJhZ21lbnRFbmQgPSBmcmFnbWVudFN0YXJ0OwogICAgICAgICBpZiAodXJsW2ZyYWdt
ZW50U3RhcnRdID09ICcjJykgewpAQCAtMTA3NiwxMyArMTExNywxMyBAQCB2b2lkIEtVUkw6OnBh
cnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICBmcmFnbWVudEVuZCA9IGZy
YWdtZW50U3RhcnQ7CiAgICAgICAgICAgICB3aGlsZSAodXJsW2ZyYWdtZW50RW5kXSAhPSAnXDAn
KQogICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kKys7Ci0gICAgICAgIH0gICAgICAgIAorICAg
ICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3aGlsZSAodXJsW3BhdGhFbmRdICE9
ICdcMCcgJiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0aEVuZF0gIT0gJyMnKSB7CiAg
ICAgICAgICAgICBwYXRoRW5kKys7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBxdWVyeVN0
YXJ0ID0gcGF0aEVuZDsKICAgICAgICAgcXVlcnlFbmQgPSBxdWVyeVN0YXJ0OwogICAgICAgICBp
ZiAodXJsW3F1ZXJ5U3RhcnRdID09ICc/JykgewpAQCAtMTA5MCw3ICsxMTMxLDcgQEAgdm9pZCBL
VVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAgICAgICAgIHF1ZXJ5
RW5kKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZnJh
Z21lbnRTdGFydCA9IHF1ZXJ5RW5kOwogICAgICAgICBmcmFnbWVudEVuZCA9IGZyYWdtZW50U3Rh
cnQ7CiAgICAgICAgIGlmICh1cmxbZnJhZ21lbnRTdGFydF0gPT0gJyMnKSB7CkBAIC0xMTExLDkg
KzExNTIsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAKICAg
ICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKICAgICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1
cmwgKyBzY2hlbWVFbmQ7Ci0gICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVuZFB0cikgeworICAg
IHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCiAgICAgICAgICpwKysgPSAqc3RyUHRyKys7
Ci0gICAgfQogICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwogCiAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgaHR0cCBvciBodHRwcy4KQEAgLTExNDAsMTIgKzExODAsMTIgQEAgdm9p
ZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAmJiBtYXRjaExl
dHRlcih1cmxbMl0sICdsJykKICAgICAgICAgJiYgbWF0Y2hMZXR0ZXIodXJsWzNdLCAnZScpCiAg
ICAgICAgICYmIHVybFs0XSA9PSAnOic7Ci0gICAgICAgIAorCiAgICAgLy8gRmlsZSBVUkxzIG5l
ZWQgYSBob3N0IHBhcnQgdW5sZXNzIGl0IGlzIGp1c3QgZmlsZTovLyBvciBmaWxlOi8vbG9jYWxo
b3N0CiAgICAgYm9vbCBkZWdlbkZpbGVQYXRoID0gcGF0aFN0YXJ0ID09IHBhdGhFbmQKICAgICAg
ICAgJiYgKGhvc3RTdGFydCA9PSBob3N0RW5kCiAgICAgICAgICAgICB8fCBob3N0SXNMb2NhbEhv
c3QpOwotICAgIAorCiAgICAgYm9vbCBoYXZlTm9uSG9zdEF1dGhvcml0eVBhcnQgPSB1c2VyU3Rh
cnQgIT0gdXNlckVuZCB8fCBwYXNzd29yZFN0YXJ0ICE9IHBhc3N3b3JkRW5kIHx8IHBvcnRTdGFy
dCAhPSBwb3J0RW5kOwogCiAgICAgLy8gYWRkICI6IiBhZnRlciBzY2hlbWUKQEAgLTExNjgsNDYg
KzEyMDgsNDEgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogCiAg
ICAgICAgIC8vIGNvcHkgaW4gdGhlIHVzZXIKICAgICAgICAgc3RyUHRyID0gdXJsICsgdXNlclN0
YXJ0OwotICAgICAgICBjb25zdCBjaGFyICp1c2VyRW5kUHRyID0gdXJsICsgdXNlckVuZDsKLSAg
ICAgICAgd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpIHsKKyAgICAgICAgY29uc3QgY2hhciog
dXNlckVuZFB0ciA9IHVybCArIHVzZXJFbmQ7CisgICAgICAgIHdoaWxlIChzdHJQdHIgPCB1c2Vy
RW5kUHRyKQogICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICAgICAgfQogICAgICAg
ICB1c2VyRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IGNvcHkgaW4gdGhlIHBhc3N3b3JkCiAgICAgICAgIGlmIChwYXNzd29yZEVuZCAhPSBwYXNzd29y
ZFN0YXJ0KSB7CiAgICAgICAgICAgICAqcCsrID0gJzonOwogICAgICAgICAgICAgc3RyUHRyID0g
dXJsICsgcGFzc3dvcmRTdGFydDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkRW5k
UHRyID0gdXJsICsgcGFzc3dvcmRFbmQ7Ci0gICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgcGFz
c3dvcmRFbmRQdHIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkRW5kUHRyID0g
dXJsICsgcGFzc3dvcmRFbmQ7CisgICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgcGFzc3dvcmRF
bmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBwYXNzd29yZEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwot
ICAgICAgICAKKwogICAgICAgICAvLyBJZiB3ZSBoYWQgYW55IHVzZXIgaW5mbywgYWRkICJAIgot
ICAgICAgICBpZiAocCAtIGJ1ZmZlci5kYXRhKCkgIT0gdXNlclN0YXJ0UG9zKSB7CisgICAgICAg
IGlmIChwIC0gYnVmZmVyLmRhdGEoKSAhPSB1c2VyU3RhcnRQb3MpCiAgICAgICAgICAgICAqcCsr
ID0gJ0AnOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIGhv
c3QsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIGZpbGUgVVJMIHdpdGggYXV0aG9yaXR5PSJsb2Nh
bGhvc3QiCiAgICAgICAgIGlmICghKGlzRmlsZSAmJiBob3N0SXNMb2NhbEhvc3QgJiYgIWhhdmVO
b25Ib3N0QXV0aG9yaXR5UGFydCkpIHsKICAgICAgICAgICAgIHN0clB0ciA9IHVybCArIGhvc3RT
dGFydDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RFbmRQdHIgPSB1cmwgKyBob3N0RW5k
OwotICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpIHsKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGhvc3RFbmRQdHIgPSB1cmwgKyBob3N0RW5kOworICAgICAgICAgICAgd2hp
bGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIr
KzsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBob3N0RW5kUG9zID0gcCAtIGJ1
ZmZlci5kYXRhKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHBvcnQKICAg
ICAgICAgaWYgKGhvc3RFbmQgIT0gcG9ydFN0YXJ0KSB7CiAgICAgICAgICAgICAqcCsrID0gJzon
OwogICAgICAgICAgICAgc3RyUHRyID0gdXJsICsgcG9ydFN0YXJ0OwogICAgICAgICAgICAgY29u
c3QgY2hhciAqcG9ydEVuZFB0ciA9IHVybCArIHBvcnRFbmQ7Ci0gICAgICAgICAgICB3aGlsZSAo
c3RyUHRyIDwgcG9ydEVuZFB0cikgeworICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBvcnRF
bmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAg
fSBlbHNlIHsKQEAgLTEyMTYsMTIgKzEyNTEsMTAgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBj
aGFyICp1cmwsIGNvbnN0IAogCiAgICAgLy8gRm9yIGNhbm9uaWNhbGl6YXRpb24sIGVuc3VyZSB3
ZSBoYXZlIGEgJy8nIGZvciBubyBwYXRoLgogICAgIC8vIE9ubHkgZG8gdGhpcyBmb3IgaHR0cCBh
bmQgaHR0cHMuCi0gICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0aEVuZCAtIHBhdGhTdGFydCA9
PSAwKSB7CisgICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0aEVuZCAtIHBhdGhTdGFydCA9PSAw
KQogICAgICAgICAqcCsrID0gJy8nOwotICAgIH0KLSAgICAgICAKKwogICAgIC8vIGFkZCBwYXRo
LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwotICAgIAogICAgIGlmIChoaWVyYXJjaGljYWwgJiYg
aGFzU2xhc2hEb3RPckRvdERvdCh1cmwpKSB7CiAgICAgICAgIFZlY3RvcjxjaGFyLCA0MDk2PiBw
YXRoX2J1ZmZlcihwYXRoRW5kIC0gcGF0aFN0YXJ0ICsgMSk7CiAgICAgICAgIGNvcHlQYXRoUmVt
b3ZpbmdEb3RzKHBhdGhfYnVmZmVyLmRhdGEoKSwgdXJsLCBwYXRoU3RhcnQsIHBhdGhFbmQpOwpA
QCAtMTIzMCwxMiArMTI2MywxMSBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwg
Y29uc3QgCiAgICAgICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcGF0aFN0YXJ0
LCBwYXRoRW5kIC0gcGF0aFN0YXJ0KTsKIAogICAgIHBhdGhFbmRQb3MgPSBwIC0gYnVmZmVyLmRh
dGEoKTsKLSAgICAKLSAgICAKKwogICAgIC8vIGFkZCBxdWVyeSwgZXNjYXBpbmcgYmFkIGNoYXJh
Y3RlcnMKICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHVybCArIHF1ZXJ5U3RhcnQsIHF1
ZXJ5RW5kIC0gcXVlcnlTdGFydCk7CiAgICAgcXVlcnlFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEo
KTsKLSAgICAKKwogICAgIC8vIGFkZCBmcmFnbWVudCwgZXNjYXBpbmcgYmFkIGNoYXJhY3RlcnMK
ICAgICBpZiAoZnJhZ21lbnRFbmQgIT0gcXVlcnlFbmQpIHsKICAgICAgICAgKnArKyA9ICcjJzsK
QEAgLTEyNDYsMTUgKzEyNzgsMTUgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmws
IGNvbnN0IAogICAgIC8vIElmIHdlIGRpZG4ndCBlbmQgdXAgYWN0dWFsbHkgY2hhbmdpbmcgdGhl
IG9yaWdpbmFsIHN0cmluZyBhbmQKICAgICAvLyBpdCBzdGFydGVkIGFzIGEgRGVwcmVjYXRlZFN0
cmluZywganVzdCByZXVzZSBpdCwgdG8gYXZvaWQgZXh0cmEKICAgICAvLyBhbGxvY2F0aW9uLgot
ICAgIGlmIChvcmlnaW5hbFN0cmluZyAmJiBzdHJuY21wKGJ1ZmZlci5kYXRhKCksIHVybCwgZnJh
Z21lbnRFbmRQb3MpID09IDApIHsKLSAgICAgICAgdXJsU3RyaW5nID0gKm9yaWdpbmFsU3RyaW5n
OwotICAgIH0gZWxzZQorICAgIGlmIChvcmlnaW5hbFN0cmluZyAmJiBzdHJuY21wKGJ1ZmZlci5k
YXRhKCksIHVybCwgZnJhZ21lbnRFbmRQb3MpID09IDApCisgICAgICAgIHVybFN0cmluZyA9IG9y
aWdpbmFsU3RyaW5nLT5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgZWxzZQogICAgICAgICB1cmxT
dHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGZyYWdtZW50RW5kUG9zKTsK
IAogICAgIEFTU0VSVChwIC0gYnVmZmVyLmRhdGEoKSA8PSAoaW50KWJ1ZmZlci5zaXplKCkpOwog
fQogCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCAmYSwgY29uc3QgS1VSTCAmYikKK2Jvb2wg
b3BlcmF0b3I9PShjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJMJiBiKQogewogICAgIHJldHVybiBh
LnVybFN0cmluZyA9PSBiLnVybFN0cmluZzsKIH0KQEAgLTEyNjcsMTIgKzEyOTksMTIgQEAgYm9v
bCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtVUkwmIGEsIGNvbgogRGVwcmVjYXRlZFN0cmluZyBL
VVJMOjplbmNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIG5vdEVuY29kZWRTdHJp
bmcpCiB7CiAgICAgRGVwcmVjYXRlZENTdHJpbmcgYXNVVEY4ID0gbm90RW5jb2RlZFN0cmluZy51
dGY4KCk7Ci0gICAgCisKICAgICBWZWN0b3I8Y2hhciwgNDA5Nj4gYnVmZmVyKGFzVVRGOC5sZW5n
dGgoKSAqIDMgKyAxKTsKLSAgICBjaGFyICpwID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjaGFyKiBw
ID0gYnVmZmVyLmRhdGEoKTsKIAotICAgIGNvbnN0IGNoYXIgKnN0ciA9IGFzVVRGODsKLSAgICBj
b25zdCBjaGFyICpzdHJFbmQgPSBzdHIgKyBhc1VURjgubGVuZ3RoKCk7CisgICAgY29uc3QgY2hh
ciogc3RyID0gYXNVVEY4OworICAgIGNvbnN0IGNoYXIqIHN0ckVuZCA9IHN0ciArIGFzVVRGOC5s
ZW5ndGgoKTsKICAgICB3aGlsZSAoc3RyIDwgc3RyRW5kKSB7CiAgICAgICAgIHVuc2lnbmVkIGNo
YXIgYyA9ICpzdHIrKzsKICAgICAgICAgaWYgKGlzQmFkQ2hhcihjKSkgewpAQCAtMTI4MiwzOSAr
MTMxNCwzOSBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJpbmcoY29uCiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgfQotICAgIAorCiAgICAgRGVw
cmVjYXRlZFN0cmluZyByZXN1bHQoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwot
ICAgIAorCiAgICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IChpbnQpYnVmZmVyLnNpemUo
KSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBl
bmNvZGVIb3N0bmFtZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzKQorLy8gQXBwZW5kcyB0aGUg
cHVueWNvZGVkIGhvc3RuYW1lIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIHN0cmluZyBhbmQgbGVu
Z3RoIHRvCisvLyB0aGUgb3V0cHV0IGJ1ZmZlci4gVGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBudWxs
IHRlcm1pbmF0ZWQuCitzdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVkSG9zdG5hbWUoY29uc3QgVUNo
YXIqIHN0ciwgdW5zaWduZWQgc3RyTGVuLCBUZW1wVUNoYXJCdWZmZXIqIG91dHB1dCkKIHsKICAg
ICAvLyBOZWVkcyB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYW4gSUROLWVuY29kZWQgbmFtZS4K
ICAgICAvLyBGb3IgaG9zdCBuYW1lcyBiaWdnZXIgdGhhbiB0aGlzLCB3ZSB3b24ndCBkbyBJRE4g
ZW5jb2RpbmcsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgT0suCiAgICAgY29uc3QgdW5zaWdu
ZWQgaG9zdG5hbWVCdWZmZXJMZW5ndGggPSAyMDQ4OwogCi0gICAgaWYgKHMuaXNBbGxBU0NJSSgp
IHx8IHMubGVuZ3RoKCkgPiBob3N0bmFtZUJ1ZmZlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHM7
CisgICAgaWYgKHN0ckxlbiA+IGhvc3RuYW1lQnVmZmVyTGVuZ3RoIHx8IGlzQWxsQVNDSUkoc3Ry
LCBzdHJMZW4pKQorICAgICAgICBvdXRwdXQtPmFwcGVuZChzdHIsIHN0ckxlbik7CiAKICNpZiBV
U0UoSUNVX1VOSUNPREUpCi0gICAgVUNoYXIgYnVmZmVyW2hvc3RuYW1lQnVmZmVyTGVuZ3RoXTsg
ICAgCisgICAgVUNoYXIgYnVmZmVyW2hvc3RuYW1lQnVmZmVyTGVuZ3RoXTsKICAgICBVRXJyb3JD
b2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwotICAgIGludDMyX3QgbnVtQ2hhcmFjdGVyc0NvbnZl
cnRlZCA9IHVpZG5hX0lETlRvQVNDSUkKLSAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIgKj4ocy51bmljb2RlKCkpLCBzLmxlbmd0aCgpLCBidWZmZXIsIGhvc3RuYW1lQnVmZmVy
TGVuZ3RoLCBVSUROQV9BTExPV19VTkFTU0lHTkVELCAwLCAmZXJyb3IpOwotICAgIGlmIChlcnJv
ciAhPSBVX1pFUk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIHJldHVy
biBEZXByZWNhdGVkU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8RGVwcmVjYXRlZENoYXIgKj4oYnVm
ZmVyKSwgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCk7CisgICAgaW50MzJfdCBudW1DaGFyYWN0ZXJz
Q29udmVydGVkID0gdWlkbmFfSUROVG9BU0NJSSgKKyAgICAgICAgc3RyLCBzdHJMZW4sIGJ1ZmZl
ciwgaG9zdG5hbWVCdWZmZXJMZW5ndGgsIFVJRE5BX0FMTE9XX1VOQVNTSUdORUQsIDAsICZlcnJv
cik7CisgICAgaWYgKGVycm9yICE9IFVfWkVST19FUlJPUikKKyAgICAgICAgb3V0cHV0LT5hcHBl
bmQoYnVmZmVyLCBudW1DaGFyYWN0ZXJzQ29udmVydGVkKTsKICNlbGlmIFVTRShRVDRfVU5JQ09E
RSkKLSAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRvQWNlKHMpOwotICAgIHJldHVybiBE
ZXByZWNhdGVkU3RyaW5nKHJlc3VsdC5jb25zdERhdGEoKSwgcmVzdWx0Lmxlbmd0aCgpKTsKKyAg
ICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRvQWNlKHMpOyAgLy8gRklYTUU6IFRoaXMgaXMg
d3JvbmcsIGJ1dCBJIGRvbid0IGtub3cgd2hhdCBpdCBzaG91bGQgYmUuCisgICAgb3V0cHV0LT5h
cHBlbmQocmVzdWx0LmNvbnN0RGF0YSwgcmVzdWx0Lmxlbmd0aCgpKTsKICNlbmRpZgogfQogCi1z
dGF0aWMgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCitzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4g
ZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKGNvbnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW4pCiB7
CiAgICAgLy8gSW4gYSBtYWlsdG86IFVSTCwgaG9zdCBuYW1lcyBjb21lIGFmdGVyIGEgJ0AnIGNo
YXJhY3RlciBhbmQgZW5kIHdpdGggYSAnPicgb3IgJywnIG9yICc/JyBvciBlbmQgb2Ygc3RyaW5n
IGNoYXJhY3Rlci4KICAgICAvLyBTa2lwIHF1b3RlZCBzdHJpbmdzIHNvIHRoYXQgY2hhcmFjdGVy
cyBpbiB0aGVtIGRvbid0IGNvbmZ1c2UgdXMuCkBAIC0xMzI1LDI0ICsxMzU3LDIyIEBAIHN0YXRp
YyBWZWN0b3I8cGFpcjxpbnQsIGludD4gPiBmaW5kSG9zdG4KICAgICBpbnQgcCA9IDA7CiAgICAg
d2hpbGUgKDEpIHsKICAgICAgICAgLy8gRmluZCBzdGFydCBvZiBob3N0IG5hbWUgb3Igb2YgcXVv
dGVkIHN0cmluZy4KLSAgICAgICAgaW50IGhvc3RuYW1lT3JTdHJpbmdTdGFydCA9IHMuZmluZChS
ZWd1bGFyRXhwcmVzc2lvbigiW1wiQD9dIiksIHApOwotICAgICAgICBpZiAoaG9zdG5hbWVPclN0
cmluZ1N0YXJ0ID09IC0xKSB7CisgICAgICAgIGludCBob3N0bmFtZU9yU3RyaW5nU3RhcnQgPSBm
aW5kRmlyc3RPZihzdHIsIHN0ckxlbiwgcCwgIlwiQD8iKTsKKyAgICAgICAgaWYgKGhvc3RuYW1l
T3JTdHJpbmdTdGFydCA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBhOwotICAgICAgICB9Ci0g
ICAgICAgIERlcHJlY2F0ZWRDaGFyIGMgPSBzW2hvc3RuYW1lT3JTdHJpbmdTdGFydF07CisgICAg
ICAgIFVDaGFyIGMgPSBzdHJbaG9zdG5hbWVPclN0cmluZ1N0YXJ0XTsKICAgICAgICAgcCA9IGhv
c3RuYW1lT3JTdHJpbmdTdGFydCArIDE7CiAKLSAgICAgICAgaWYgKGMgPT0gJz8nKSB7CisgICAg
ICAgIGlmIChjID09ICc/JykKICAgICAgICAgICAgIHJldHVybiBhOwotICAgICAgICB9Ci0gICAg
ICAgIAorCiAgICAgICAgIGlmIChjID09ICdAJykgewogICAgICAgICAgICAgLy8gRmluZCBlbmQg
b2YgaG9zdCBuYW1lLgogICAgICAgICAgICAgaW50IGhvc3RuYW1lU3RhcnQgPSBwOwotICAgICAg
ICAgICAgaW50IGhvc3RuYW1lRW5kID0gcy5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJbPiw/XSIp
LCBwKTsKKyAgICAgICAgICAgIGludCBob3N0bmFtZUVuZCA9IGZpbmRGaXJzdE9mKHN0ciwgc3Ry
TGVuLCBwLCAiPiw/Iik7CiAgICAgICAgICAgICBib29sIGRvbmU7CiAgICAgICAgICAgICBpZiAo
aG9zdG5hbWVFbmQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBob3N0bmFtZUVuZCA9IHMubGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgaG9zdG5hbWVFbmQgPSBzdHJMZW47CiAgICAgICAgICAg
ICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IHAgPSBob3N0bmFtZUVuZDsKQEAgLTEzNTcsMjAgKzEzODcsMjAgQEAgc3RhdGljIFZlY3Rvcjxw
YWlyPGludCwgaW50PiA+IGZpbmRIb3N0bgogICAgICAgICAgICAgLy8gU2tpcCBxdW90ZWQgc3Ry
aW5nLgogICAgICAgICAgICAgQVNTRVJUKGMgPT0gJyInKTsKICAgICAgICAgICAgIHdoaWxlICgx
KSB7Ci0gICAgICAgICAgICAgICAgaW50IGVzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCA9IHMu
ZmluZChSZWd1bGFyRXhwcmVzc2lvbigiW1wiXFxdIiksIHApOworICAgICAgICAgICAgICAgIGlu
dCBlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgPSBmaW5kRmlyc3RPZihzdHIsIHN0ckxlbiwg
cCwgIlwiXFwiKTsKICAgICAgICAgICAgICAgICBpZiAoZXNjYXBlZENoYXJhY3Rlck9yU3RyaW5n
RW5kID09IC0xKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTsKIAotICAgICAgICAgICAg
ICAgIGMgPSBzW2VzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZF07CisgICAgICAgICAgICAgICAg
YyA9IHN0cltlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmRdOwogICAgICAgICAgICAgICAgIHAg
PSBlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgKyAxOwotICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgdGhlbiBi
cmVhayBmcm9tIHRoZSBzdHJpbmcgbG9vcCBiYWNrIHRvIHRoZSBob3N0IG5hbWUgbG9vcC4KICAg
ICAgICAgICAgICAgICBpZiAoYyA9PSAnIicpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gU2tpcCBlc2NhcGVkIGNoYXJh
Y3Rlci4KICAgICAgICAgICAgICAgICBBU1NFUlQoYyA9PSAnXFwnKTsKLSAgICAgICAgICAgICAg
ICBpZiAocCA9PSBzdGF0aWNfY2FzdDxpbnQ+KHMubGVuZ3RoKCkpKQorICAgICAgICAgICAgICAg
IGlmIChwID09IHN0ckxlbikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CiAKICAgICAg
ICAgICAgICAgICArK3A7CkBAIC0xMzc5LDEyMSArMTQwOSwxMjMgQEAgc3RhdGljIFZlY3Rvcjxw
YWlyPGludCwgaW50PiA+IGZpbmRIb3N0bgogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZmluZEhv
c3RuYW1lSW5IaWVyYXJjaGljYWxVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcywgaW50ICZz
dGFydE9mZnNldCwgaW50ICZlbmRPZmZzZXQpCitzdGF0aWMgYm9vbCBmaW5kSG9zdG5hbWVJbkhp
ZXJhcmNoaWNhbFVSTChjb25zdCBVQ2hhciogc3RyLCBpbnQgc3RyTGVuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzdGFydE9mZnNldCwgaW50KiBlbmRP
ZmZzZXQpCiB7CiAgICAgLy8gRmluZCB0aGUgaG9zdCBuYW1lIGluIGEgaGllcmFyY2hpY2FsIFVS
TC4KLSAgICAvLyBJdCBjb21lcyBhZnRlciBhICI6Ly8iIHNlcXVlbmNlLCB3aXRoIHNjaGVtZSBj
aGFyYWN0ZXJzIHByZWNlZGluZy4KLSAgICAvLyBJZiBlbmRzIHdpdGggdGhlIGVuZCBvZiB0aGUg
c3RyaW5nIG9yIGEgIjoiIG9yIGEgcGF0aCBzZWdtZW50IGVuZGluZyBjaGFyYWN0ZXIuCisgICAg
Ly8gSXQgY29tZXMgYWZ0ZXIgYSAiOi8vIiBzZXF1ZW5jZSwgd2l0aCBzY2hlbWUgY2hhcmFjdGVy
cyBwcmVjZWRpbmcsIGFuZAorICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2xvbiBp
biB0aGUgc3RyaW5nLgorICAgIC8vIEl0IGVuZHMgd2l0aCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcg
b3IgYSAiOiIgb3IgYSBwYXRoIHNlZ21lbnQgZW5kaW5nIGNoYXJhY3Rlci4KICAgICAvLyBJZiB0
aGVyZSBpcyBhICJAIiBjaGFyYWN0ZXIsIHRoZSBob3N0IHBhcnQgaXMganVzdCB0aGUgcGFydCBh
ZnRlciB0aGUgIkAiLgotICAgIGludCBzZXBhcmF0b3IgPSBzLmZpbmQoIjovLyIpOwotICAgIGlm
IChzZXBhcmF0b3IgPD0gMCkgeworICAgIGludCBzZXBhcmF0b3IgPSBmaW5kRmlyc3RPZihzdHIs
IHN0ckxlbiwgMCwgIjoiKTsKKyAgICBpZiAoc2VwYXJhdG9yID09IC0xIHx8IHNlcGFyYXRvciAr
IDIgPj0gc3RyTGVuIHx8CisgICAgICAgIHN0cltzZXBhcmF0b3IgKyAxXSAhPSAnLycgfHwgc3Ry
W3NlcGFyYXRvciArIDJdICE9ICcvJykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAog
ICAgIC8vIENoZWNrIHRoYXQgYWxsIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSA6Ly8gYXJlIHZhbGlk
IHNjaGVtZSBjaGFyYWN0ZXJzLgotICAgIGlmICghaXNTY2hlbWVGaXJzdENoYXIoc1swXS5sYXRp
bjEoKSkpIHsKKyAgICBpZiAoIWlzU2NoZW1lRmlyc3RDaGFyKHN0clswXSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CiAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzZXBhcmF0b3I7ICsr
aSkgewotICAgICAgICBpZiAoIWlzU2NoZW1lQ2hhcihzW2ldLmxhdGluMSgpKSkgeworICAgICAg
ICBpZiAoIWlzU2NoZW1lQ2hhcihzdHJbaV0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gU3RhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4KICAg
ICBpbnQgYXV0aG9yaXR5U3RhcnQgPSBzZXBhcmF0b3IgKyAzOwogCiAgICAgLy8gRmluZCB0ZXJt
aW5hdGluZyBjaGFyYWN0ZXIuCi0gICAgaW50IGxlbmd0aCA9IHMubGVuZ3RoKCk7Ci0gICAgaW50
IGhvc3RuYW1lRW5kID0gbGVuZ3RoOwotICAgIGZvciAoaW50IGkgPSBhdXRob3JpdHlTdGFydDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYyA9IHNbaV0ubGF0aW4xKCk7Ci0gICAg
ICAgIGlmIChjID09ICc6JyB8fCAoaXNQYXRoU2VnbWVudEVuZENoYXIoYykgJiYgYyAhPSAnXDAn
KSkgeworICAgIGludCBob3N0bmFtZUVuZCA9IHN0ckxlbjsKKyAgICBmb3IgKGludCBpID0gYXV0
aG9yaXR5U3RhcnQ7IGkgPCBzdHJMZW47ICsraSkgeworICAgICAgICBVQ2hhciBjID0gc3RyW2ld
OworICAgICAgICBpZiAoYyA9PSAnOicgfHwgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKGMpICYmIGMg
IT0gMCkpIHsKICAgICAgICAgICAgIGhvc3RuYW1lRW5kID0gaTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmluZCAiQCIgZm9yIHRoZSBzdGFydCBvZiB0
aGUgaG9zdCBuYW1lLgotICAgIGludCB1c2VySW5mb1Rlcm1pbmF0b3IgPSBzLmZpbmQoJ0AnLCBh
dXRob3JpdHlTdGFydCk7CisgICAgaW50IHVzZXJJbmZvVGVybWluYXRvciA9IGZpbmRGaXJzdE9m
KHN0ciwgc3RyTGVuLCBhdXRob3JpdHlTdGFydCwgIkAiKTsKICAgICBpbnQgaG9zdG5hbWVTdGFy
dDsKLSAgICBpZiAodXNlckluZm9UZXJtaW5hdG9yID09IC0xIHx8IHVzZXJJbmZvVGVybWluYXRv
ciA+IGhvc3RuYW1lRW5kKSB7CisgICAgaWYgKHVzZXJJbmZvVGVybWluYXRvciA9PSAtMSB8fCB1
c2VySW5mb1Rlcm1pbmF0b3IgPiBob3N0bmFtZUVuZCkKICAgICAgICAgaG9zdG5hbWVTdGFydCA9
IGF1dGhvcml0eVN0YXJ0OwotICAgIH0gZWxzZSB7CisgICAgZWxzZQogICAgICAgICBob3N0bmFt
ZVN0YXJ0ID0gdXNlckluZm9UZXJtaW5hdG9yICsgMTsKLSAgICB9CiAKLSAgICBzdGFydE9mZnNl
dCA9IGhvc3RuYW1lU3RhcnQ7Ci0gICAgZW5kT2Zmc2V0ID0gaG9zdG5hbWVFbmQ7CisgICAgKnN0
YXJ0T2Zmc2V0ID0gaG9zdG5hbWVTdGFydDsKKyAgICAqZW5kT2Zmc2V0ID0gaG9zdG5hbWVFbmQ7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGVuY29kZUhv
c3RuYW1lcyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzKQorLy8gQ29udmVydHMgYWxsIGhvc3Ru
YW1lcyBmb3VuZCBpbiB0aGUgZ2l2ZW4gaW5wdXQgdG8gcHVueWNvZGUsIHByZXNlcnZpbmcgdGhl
CisvLyByZXN0IG9mIHRoZSBVUkwgdW5jaGFuZ2VkLiBUaGUgb3V0cHV0IHdpbGwgTk9UIGJlIG51
bGwtdGVybWluYXRlZC4KK3N0YXRpYyB2b2lkIGVuY29kZUhvc3RuYW1lcyhjb25zdCBTdHJpbmcm
IHN0ciwgVGVtcFVDaGFyQnVmZmVyKiBvdXRwdXQpCiB7Ci0gICAgaWYgKHMuc3RhcnRzV2l0aCgi
bWFpbHRvOiIsIGZhbHNlKSkgewotICAgICAgICBjb25zdCBWZWN0b3I8cGFpcjxpbnQsIGludD4g
PiBob3N0bmFtZVJhbmdlcyA9IGZpbmRIb3N0bmFtZXNJbk1haWxUb1VSTChzKTsKKyAgICBvdXRw
dXQtPnJlc2l6ZSgwKTsKKworICAgIGlmIChzdHIuc3RhcnRzV2l0aCgibWFpbHRvOiIsIGZhbHNl
KSkgeworICAgICAgICBjb25zdCBWZWN0b3I8cGFpcjxpbnQsIGludD4gPiBob3N0bmFtZVJhbmdl
cyA9IGZpbmRIb3N0bmFtZXNJbk1haWxUb1VSTChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3Ro
KCkpOwogICAgICAgICBpbnQgbiA9IGhvc3RuYW1lUmFuZ2VzLnNpemUoKTsKLSAgICAgICAgaWYg
KG4gIT0gMCkgewotICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQ7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBwID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgcGFpcjxpbnQsIGludD4gJnIgPSBob3N0bmFt
ZVJhbmdlc1tpXTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gcy5taWQocCwgci5maXJzdCk7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVuY29kZUhvc3RuYW1lKHMubWlkKHIuZmlyc3Qs
IHIuc2Vjb25kIC0gci5maXJzdCkpOwotICAgICAgICAgICAgICAgIHAgPSByLnNlY29uZDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCArPSBzLm1pZChwKTsKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IHAgPSAwOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgY29uc3QgcGFpcjxpbnQs
IGludD4gJnIgPSBob3N0bmFtZVJhbmdlc1tpXTsKKyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5k
KCZzdHIuY2hhcmFjdGVycygpW3BdLCByLmZpcnN0IC0gcCk7CisgICAgICAgICAgICBhcHBlbmRF
bmNvZGVkSG9zdG5hbWUoJnN0ci5jaGFyYWN0ZXJzKClbci5maXJzdF0sIHIuc2Vjb25kIC0gci5m
aXJzdCwgb3V0cHV0KTsKKyAgICAgICAgICAgIHAgPSByLnNlY29uZDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBUaGlzIHdpbGwgY29weSBlaXRoZXIgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBu
b3N0bmFtZSwgb3IgdGhlCisgICAgICAgIC8vIHdob2xlIHRoaW5nIGlmIHRoZXJlIGlzIG5vIGhv
c3RuYW1lLgorICAgICAgICBvdXRwdXQtPmFwcGVuZCgmc3RyLmNoYXJhY3RlcnMoKVtwXSwgc3Ry
Lmxlbmd0aCgpIC0gcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50IGhvc3RTdGFydCwgaG9z
dEVuZDsKLSAgICAgICAgaWYgKGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKHMsIGhvc3RT
dGFydCwgaG9zdEVuZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBzLmxlZnQoaG9zdFN0YXJ0KSAr
IGVuY29kZUhvc3RuYW1lKHMubWlkKGhvc3RTdGFydCwgaG9zdEVuZCAtIGhvc3RTdGFydCkpICsg
cy5taWQoaG9zdEVuZCk7IAorICAgICAgICBpZiAoZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxV
Ukwoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpLCAmaG9zdFN0YXJ0LCAmaG9zdEVuZCkp
IHsKKyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIGhvc3RTdGFy
dCk7ICAvLyBCZWZvcmUgaG9zdG5hbWUuCisgICAgICAgICAgICBhcHBlbmRFbmNvZGVkSG9zdG5h
bWUoJnN0ci5jaGFyYWN0ZXJzKClbaG9zdFN0YXJ0XSwgaG9zdEVuZCAtIGhvc3RTdGFydCwgb3V0
cHV0KTsKKyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCZzdHIuY2hhcmFjdGVycygpW2hvc3RF
bmRdLCBzdHIubGVuZ3RoKCkgLSBob3N0RW5kKTsgIC8vIEFmdGVyIGhvc3RuYW1lLgorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm8gaG9zdG5hbWUgdG8gZW5jb2RlLCByZXR1cm4g
dGhlIGlucHV0LgorICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSwg
c3RyLmxlbmd0aCgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gczsKIH0KIAotc3Rh
dGljIGNoYXIgKmVuY29kZVJlbGF0aXZlU3RyaW5nKGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJnJlbCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3N0YXRp
YyB2b2lkIGVuY29kZVJlbGF0aXZlU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVsLCBjb25zdCBUZXh0
RW5jb2RpbmcmIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVt
cENoYXJCdWZmZXIqIG91dHB1dCkKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBlbmNvZGVI
b3N0bmFtZXMocmVsKTsKLQotICAgIGNoYXIgKnN0ckJ1ZmZlcjsKKyAgICBUZW1wVUNoYXJCdWZm
ZXIgczsKKyAgICBlbmNvZGVIb3N0bmFtZXMocmVsLCAmcyk7CiAKICAgICBUZXh0RW5jb2Rpbmcg
cGF0aEVuY29kaW5nKFVURjhFbmNvZGluZygpKTsKICAgICBUZXh0RW5jb2Rpbmcgb3RoZXJFbmNv
ZGluZyA9IChlbmNvZGluZy5pc1ZhbGlkKCkgJiYgIXJlbC5zdGFydHNXaXRoKCJtYWlsdG86Iiwg
ZmFsc2UpKSA/IGVuY29kaW5nIDogVVRGOEVuY29kaW5nKCk7Ci0gICAgCisKICAgICBpbnQgcGF0
aEVuZCA9IC0xOwogICAgIGlmIChwYXRoRW5jb2RpbmcgIT0gb3RoZXJFbmNvZGluZykgewotICAg
ICAgICBwYXRoRW5kID0gcy5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJbPyNdIikpOworICAgICAg
ICAvLyBGaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBlaXRoZXIgIyBvciA/LCBrZWVwIHBhdGhF
bmQgYXQgLTEgb3RoZXJ3aXNlLgorICAgICAgICBpbnQgcmVzdWx0ID0gZmluZEZpcnN0T2Yocy5k
YXRhKCksIHMuc2l6ZSgpLCAwLCAiIz8iKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKKyAg
ICAgICAgICAgIHBhdGhFbmQgPSByZXN1bHQ7CiAgICAgfQorCiAgICAgaWYgKHBhdGhFbmQgPT0g
LTEpIHsKLSAgICAgICAgQ1N0cmluZyBkZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocy51bmljb2RlKCkpLCBzLmxlbmd0aCgpKTsKLSAg
ICAgICAgaW50IGRlY29kZWRMZW5ndGggPSBkZWNvZGVkLmxlbmd0aCgpOwotICAgICAgICBzdHJC
dWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyICo+KGZhc3RNYWxsb2MoZGVjb2RlZExlbmd0aCArIDEp
KTsKLSAgICAgICAgbWVtY3B5KHN0ckJ1ZmZlciwgZGVjb2RlZC5kYXRhKCksIGRlY29kZWRMZW5n
dGgpOwotICAgICAgICBzdHJCdWZmZXJbZGVjb2RlZExlbmd0aF0gPSAwOworICAgICAgICBDU3Ry
aW5nIGRlY29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHMuZGF0YSgpLCBzLnNpemUoKSk7Cisg
ICAgICAgIG91dHB1dC0+cmVzaXplKGRlY29kZWQubGVuZ3RoKCkpOworICAgICAgICBtZW1jcHko
b3V0cHV0LT5kYXRhKCksIGRlY29kZWQuZGF0YSgpLCBkZWNvZGVkLmxlbmd0aCgpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBpbnQgbGVuZ3RoID0gcy5sZW5ndGgoKTsKLSAgICAgICAgQ1N0cmlu
ZyBwYXRoRGVjb2RlZCA9IHBhdGhFbmNvZGluZy5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVQ2hhcio+KHMudW5pY29kZSgpKSwgcGF0aEVuZCk7Ci0gICAgICAgIENTdHJpbmcgb3RoZXJE
ZWNvZGVkID0gb3RoZXJFbmNvZGluZy5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hh
cio+KHMudW5pY29kZSgpKSArIHBhdGhFbmQsIGxlbmd0aCAtIHBhdGhFbmQpOwotICAgICAgICBp
bnQgcGF0aERlY29kZWRMZW5ndGggPSBwYXRoRGVjb2RlZC5sZW5ndGgoKTsKLSAgICAgICAgaW50
IG90aGVyRGVjb2RlZExlbmd0aCA9IG90aGVyRGVjb2RlZC5sZW5ndGgoKTsKLSAgICAgICAgc3Ry
QnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihmYXN0TWFsbG9jKHBhdGhEZWNvZGVkTGVuZ3Ro
ICsgb3RoZXJEZWNvZGVkTGVuZ3RoICsgMSkpOwotICAgICAgICBtZW1jcHkoc3RyQnVmZmVyLCBw
YXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVkTGVuZ3RoKTsKLSAgICAgICAgbWVtY3B5KHN0
ckJ1ZmZlciArIHBhdGhEZWNvZGVkTGVuZ3RoLCBvdGhlckRlY29kZWQuZGF0YSgpLCBvdGhlckRl
Y29kZWRMZW5ndGgpOwotICAgICAgICBzdHJCdWZmZXJbcGF0aERlY29kZWRMZW5ndGggKyBvdGhl
ckRlY29kZWRMZW5ndGhdID0gMDsKLSAgICB9CisgICAgICAgIENTdHJpbmcgcGF0aERlY29kZWQg
PSBwYXRoRW5jb2RpbmcuZW5jb2RlKHMuZGF0YSgpLCBwYXRoRW5kKTsKKyAgICAgICAgQ1N0cmlu
ZyBvdGhlckRlY29kZWQgPSBvdGhlckVuY29kaW5nLmVuY29kZShzLmRhdGEoKSArIHBhdGhFbmQs
IHMuc2l6ZSgpIC0gcGF0aEVuZCk7CiAKLSAgICByZXR1cm4gc3RyQnVmZmVyOworICAgICAgICBv
dXRwdXQtPnJlc2l6ZShwYXRoRGVjb2RlZC5sZW5ndGgoKSArIG90aGVyRGVjb2RlZC5sZW5ndGgo
KSk7CisgICAgICAgIG1lbWNweShvdXRwdXQtPmRhdGEoKSwgcGF0aERlY29kZWQuZGF0YSgpLCBw
YXRoRGVjb2RlZC5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShvdXRwdXQtPmRhdGEoKSArIHBh
dGhEZWNvZGVkLmxlbmd0aCgpLCBvdGhlckRlY29kZWQuZGF0YSgpLCBvdGhlckRlY29kZWQubGVu
Z3RoKCkpOworICAgIH0KKyAgICBvdXRwdXQtPmFwcGVuZCgwKTsgIC8vIG51bGwtdGVybWluYXRl
IHRoZSBvdXRwdXQuCiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN1YnN0aXR1dGVCYWNr
c2xhc2hlcyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpCitzdGF0aWMgU3RyaW5nIHN1
YnN0aXR1dGVCYWNrc2xhc2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBpbnQgcXVl
c3Rpb25Qb3MgPSBzdHJpbmcuZmluZCgnPycpOwogICAgIGludCBoYXNoUG9zID0gc3RyaW5nLmZp
bmQoJyMnKTsKLSAgICB1bnNpZ25lZCBwYXRoRW5kOwotICAgIAorICAgIGludCBwYXRoRW5kOwor
CiAgICAgaWYgKGhhc2hQb3MgPj0gMCAmJiAocXVlc3Rpb25Qb3MgPCAwIHx8IHF1ZXN0aW9uUG9z
ID4gaGFzaFBvcykpIHsKICAgICAgICAgcGF0aEVuZCA9IGhhc2hQb3M7CiAgICAgfSBlbHNlIGlm
IChxdWVzdGlvblBvcyA+PSAwKSB7CkBAIC0xNTAyLDcgKzE1MzQsNyBAQCBzdGF0aWMgRGVwcmVj
YXRlZFN0cmluZyBzdWJzdGl0dXRlQmFja3NsCiAgICAgICAgIHBhdGhFbmQgPSBzdHJpbmcubGVu
Z3RoKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmluZy5sZWZ0KHBhdGhFbmQpLnJlcGxhY2Uo
J1xcJywnLycpICsgc3RyaW5nLm1pZChwYXRoRW5kKTsKKyAgICByZXR1cm4gc3RyaW5nLmxlZnQo
cGF0aEVuZCkucmVwbGFjZSgnXFwnLCcvJykgKyBzdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmQpOwog
fQogCiBib29sIEtVUkw6OmlzSGllcmFyY2hpY2FsKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vS1VSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCShyZXZp
c2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSwxNyArNTEsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFRleHRFbmNv
ZGluZzsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOwot
ICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgS1VSTCAmYSwgY29uc3QgS1VSTCAmYikg
eyByZXR1cm4gIShhID09IGIpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBL
VVJMJiBhLCBjb25zdCBLVVJMJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIAogICAgIGJvb2wg
ZXF1YWxJZ25vcmluZ1JlZihjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOwogCiBjbGFzcyBLVVJM
IHsKIHB1YmxpYzoKKyAgICAvLyBHZW5lcmF0ZXMgYSBVUkwgd2hpY2ggY29udGFpbnMgYW4gaXNO
dWxsIHN0cmluZy4KICAgICBLVVJMKCk7Ci0gICAgS1VSTChjb25zdCBjaGFyKik7Ci0gICAgS1VS
TChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwotICAgIEtVUkwoY29uc3Qg
S1VSTCYsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKLSAg
ICBLVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKKworICAgIC8vIFRoZSBhcmd1bWVudCBp
cyBhbiBhYnNvbHV0ZSBVUkwgc3RyaW5nLiBGb3IgdGhlIGNoYXIqIHZlcnNpb24sIHRoZQorICAg
IC8vIHN0cmluZydzIGVuY29kaW5nIGlzIGFzc3VtZWQgdG8gYmUgZmluYWwuIEZvciB0aGUgc3Ry
aW5nIHZlcnNpb24sIGl0CisgICAgLy8gd2lsbCBiZSB0cmVhdGVkIGFzIFVURi04LgorICAgIC8v
CisgICAgLy8gREFOR0VSISBUaGlzIGRvZXMgbm90IGRvIHRoaW5ncyBsaWtlIElETiwgYW5kIHRo
ZSByZXN1bHRpbmcgaG9zdCBuYW1lCisgICAgLy8gd2lsbCBiZSBtYW5nbGVkLiBVc2Ugb25seSBp
ZiB5b3UgaGF2ZSBhbiBBU0NJSSBzdHJpbmcsIG9yIG9uZSB3aGljaCBjYW1lCisgICAgLy8gZnJv
bSBhIEtVUkwgb3JpZ2luYWxseSwgWW91IGFsbW9zdCBjZXJ0YWlubHkgd2FudCB0byB1c2U6Cisg
ICAgLy8gICBLVVJMKE5VUkwoKSwgeW91clVSTCk7CisgICAgLy8gd2hpY2ggd2lsbCBkbyBldmVy
eXRoaW5nIHByb3Blcmx5IGluc3RlYWQgb2YgdGhlc2UgZnVuY3Rpb25zLgorICAgIGV4cGxpY2l0
IEtVUkwoY29uc3QgY2hhciopOworICAgIGV4cGxpY2l0IEtVUkwoY29uc3QgU3RyaW5nJik7CisK
KyAgICAvLyBSZXNvbHZlcyB0aGUgcmVsYXRpdmUgVVJMIHdpdGggdGhlIGdpdmVuIGJhc2UgVVJM
LiBJZiBwcm92aWRlZCwgdGhlCisgICAgLy8gVGV4dEVuY29kaW5nIGlzIHVzZWQgdG8gZW5jb2Rl
IHRoZSBxdWVyeSBpZiBwcm92aWRlZC4gVGhlIHF1ZXJ5IGVuY29kaW5nCisgICAgLy8gd2lsbCBi
ZSBVVEYtOCBvdGhlcndpc2UuIFRoZSBiYXNlIFVSTCBjYW4gYmUgZW1wdHksIGluIHdoaWNoIGNh
c2UgdGhlCisgICAgLy8gcmVsYXRpdmUgVVJMIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYWJzb2x1
dGUgKHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvCisgICAgLy8gcGFyc2UgYW4gYWJzb2x1dGUgVVJM
IHdpdGggYSBjdXN0b20gcXVlcnkgZW5jb2RpbmcpLgorICAgIEtVUkwoY29uc3QgS1VSTCYgYmFz
ZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSk7CisgICAgS1VSTChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKwogI2lmIFBMQVRG
T1JNKE1BQykKICAgICBLVVJMKE5TVVJMKik7CiAjZW5kaWYKQEAgLTc1LDQxICs5Myw2MSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcuaXNOdWxs
KCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcuaXNFbXB0
eSgpOyB9CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBVUkwgaGFzIGEgcGF0aC4gTm90
ZSB0aGF0ICJodHRwOi8vZm9vLmNvbS8iIGhhcyBhCisgICAgLy8gcGF0aCBvZiAiLyIsIHNvIHRo
aXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdHJ1ZS4gT25seSBpbnZhbGlkIG9yCisgICAgLy8gbm9u
LWhpZXJhcmNoaWNhbCAobGlrZSAiamF2YXNjcmlwdDoiKSBVUkxzIHdpbGwgaGF2ZSBubyBwYXRo
LgogICAgIGJvb2wgaGFzUGF0aCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0
IHsgcmV0dXJuIHVybFN0cmluZzsgfQogICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGRlcHJl
Y2F0ZWRTdHJpbmcoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmc7IH0KIAotICAgIERlcHJlY2F0
ZWRTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGhvc3QoKSBj
b25zdDsKKyAgICBTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKKyAgICBTdHJpbmcgaG9zdCgpIGNv
bnN0OwogICAgIHVuc2lnbmVkIHNob3J0IGludCBwb3J0KCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRl
ZFN0cmluZyB1c2VyKCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXNzKCkgY29uc3Q7
Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXRoKCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmlu
ZyBsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcXVlcnko
KSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZigpIGNvbnN0OworICAgIFN0cmluZyB1
c2VyKCkgY29uc3Q7CisgICAgU3RyaW5nIHBhc3MoKSBjb25zdDsKKyAgICBTdHJpbmcgcGF0aCgp
IGNvbnN0OworICAgIFN0cmluZyBsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0OworICAgIFN0cmlu
ZyBxdWVyeSgpIGNvbnN0OyAgLy8gV0lMTCBpbmNsdWRlIHRoZSAiPyIuCisgICAgU3RyaW5nIHJl
ZigpIGNvbnN0OyAgICAvLyBXSUxMIE5PVCBpbmNsdWRlIHRoZSAiIyIuCiAgICAgYm9vbCBoYXNS
ZWYoKSBjb25zdDsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgZW5jb2RlZEh0bWxSZWYoKSBjb25z
dCB7IHJldHVybiByZWYoKTsgfQorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBV
UkwncyBwcm90b2NvbCBpcyB0aGUgc2FtZSBhcyB0aGUgbnVsbC0KKyAgICAvLyB0ZXJtaW5hdGVk
IEFTQ0lJIGFyZ3VtZW50LiBUaGUgYXJndW1lbnQgbXVzdCBiZSBsb3dlci1jYXNlLgorICAgIGJv
b2wgcHJvdG9jb2xJcyhjb25zdCBjaGFyKikgY29uc3Q7CisKKyAgICBTdHJpbmcgZW5jb2RlZEh0
bWxSZWYoKSBjb25zdCB7IHJldHVybiByZWYoKTsgfQogCi0gICAgdm9pZCBzZXRQcm90b2NvbChj
b25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0SG9zdChjb25zdCBEZXByZWNh
dGVkU3RyaW5nICYpOworICAgIHZvaWQgc2V0UHJvdG9jb2woY29uc3QgU3RyaW5nJik7CisgICAg
dm9pZCBzZXRIb3N0KGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gU2V0dGluZyB0aGUgcG9ydCB0
byAwIHdpbGwgY2xlYXIgYW55IHBvcnQgZnJvbSB0aGUgVVJMLgogICAgIHZvaWQgc2V0UG9ydCh1
bnNpZ25lZCBzaG9ydCBpbnQpOwotICAgIHZvaWQgc2V0SG9zdEFuZFBvcnQoY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYpOwotICAgIHZvaWQgc2V0VXNlcihjb25zdCBEZXByZWNhdGVkU3RyaW5nICYp
OwotICAgIHZvaWQgc2V0UGFzcyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQg
c2V0UGF0aChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0UXVlcnkoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmKTsKLSAgICB2b2lkIHNldFJlZihjb25zdCBEZXByZWNhdGVk
U3RyaW5nICYpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwcmV0dHlVUkwoKSBjb25zdDsKKyAg
ICAvLyBJbnB1dCBpcyBsaWtlICJmb28uY29tIiBvciAiZm9vLmNvbTo4MDAwIi4KKyAgICB2b2lk
IHNldEhvc3RBbmRQb3J0KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBzZXRVc2VyKGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgc2V0UGFzcyhjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIElm
IHlvdSBwYXNzIGFuIGVtcHR5IHBhdGggZm9yIEhUVFAgb3IgSFRUUFMgVVJMcywgdGhlIHJlc3Vs
dGluZyBwYXRoCisgICAgLy8gd2lsbCBiZSAiLyIuCisgICAgdm9pZCBzZXRQYXRoKGNvbnN0IFN0
cmluZyYpOworCisgICAgLy8gVGhlIHF1ZXJ5IG1heSBiZWdpbiB3aXRoIGEgcXVlc3Rpb24gbWFy
aywgb3IsIGlmIG5vdCwgb25lIHdpbGwgYmUgYWRkZWQKKyAgICAvLyBmb3IgeW91LiBTZXR0aW5n
IHRoZSBxdWVyeSB0byB0aGUgZW1wdHkgc3RyaW5nIHdpbGwgbGVhdmUgYSAiPyIgaW4gdGhlCisg
ICAgLy8gVVJMICh3aXRoIG5vdGhpbmcgYWZ0ZXIgaXQpLiBUbyBjbGVhciB0aGUgcXVlcnksIHBh
c3MgYW4gaXNOdWxsKCkgc3RyaW5nLgorICAgIHZvaWQgc2V0UXVlcnkoY29uc3QgU3RyaW5nJik7
CisKKyAgICB2b2lkIHNldFJlZihjb25zdCBTdHJpbmcmKTsKKworICAgIFN0cmluZyBwcmV0dHlV
UkwoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKENGKQogICAgIENGVVJMUmVmIGNyZWF0ZUNGVVJM
KCkgY29uc3Q7CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCi0gICAgTlNVUkwgKmdldE5TVVJM
KCkgY29uc3Q7CisgICAgTlNVUkwqIGdldE5TVVJMKCkgY29uc3Q7CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShRVCkKICAgICBvcGVyYXRvciBRVXJsKCkgY29uc3Q7CkBAIC0xMTcsMTEgKzE1NSwxNCBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7CiAKKyAgICAvLyBVbmVz
Y2FwZXMgdGhlIGdpdmVuIHN0cmluZyB1c2luZyBVUkwgZXNjYXBpbmcgcnVsZXMsIGdpdmVuIGFu
IG9wdGlvbmFsCisgICAgLy8gZW5jb2RpbmcgKGRlZmF1bHRpbmcgdG8gVVRGLTggb3RoZXJ3aXNl
KS4gREFOR0VSOiBJZiB0aGUgVVJMIGhhcyAiJTAwIgorICAgIC8vIGluIGl0LCB0aGUgcmVzdWx0
aW5nIHN0cmluZyB3aWxsIGhhdmUgZW1iZWRkZWQgbnVsbHMhCiAgICAgc3RhdGljIERlcHJlY2F0
ZWRTdHJpbmcgZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7CiAgICAgc3Rh
dGljIERlcHJlY2F0ZWRTdHJpbmcgZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5n
JiwgY29uc3QgVGV4dEVuY29kaW5nJik7CiAgICAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZW5j
b2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7Ci0gICAgCi0gICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBLVVJMICYsIGNvbnN0IEtVUkwgJik7CisKKyAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CiAKICNpZm5kZWYgTkRF
QlVHCiAgICAgdm9pZCBwcmludCgpIGNvbnN0OwpAQCAtMTI5LDggKzE3MCwyMSBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0hpZXJhcmNoaWNhbCgpIGNvbnN0OwotICAgIHZvaWQg
aW5pdChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYsIGNvbnN0IFRleHRFbmNv
ZGluZyYpOwotICAgIHZvaWQgcGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCBEZXByZWNhdGVk
U3RyaW5nICpvcmlnaW5hbFN0cmluZyk7CisgICAgdm9pZCBpbml0KGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKworICAgIC8vIFBhcnNlcyB0aGUgZ2l2
ZW4gVVJMLiBUaGUgb3JpZ2luYWxTdHJpbmcgcGFyYW1ldGVyIGFsbG93cyBmb3IgYW0KKyAgICAv
LyBvcHRpbWl6YXRpb24gd2hlbiB0aGUgc291cmNlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXhlZC11
cCBzdHJpbmcsIGl0IHdpbGwKKyAgICAvLyB1c2Ugc3RyaW5nIHJlZmVyZW5jZS1jb3VudGVkIGNv
cGllcyBpbnN0ZWFkIG9mIGRvaW5nIGEgbmV3IGFsbG9jYXRpb24uCisgICAgLy8KKyAgICAvLyBG
SVhNRTogVGhpcyBvcHRpbWl6YXRpb24gaXMgY3VycmVudGx5IGJyb2tlbiBzaW5jZSB0aGUgaW50
ZXJuYWwgc3RyaW5nCisgICAgLy8gaXMgc3RpbGwgYSBEZXByZWNhdGVkU3RyaW5nIQorICAgIC8v
CisgICAgLy8gVGhpcyBwYXJhbWV0ZXIgaXMgYWxzbyAqbmVjZXNzYXJ5KiBpZiB0aGUgaW5wdXQg
dG8gdGhlIEtVUkwgY29uc3RydWN0b3IKKyAgICAvLyBpcyBhbiBlbXB0eSBTdHJpbmcuIFNvbWUg
Y2FsbGluZyBjb2RlIHJlcXVpcmVzIHRoYXQgdGhlIGRpZmZlcmVuY2UKKyAgICAvLyBiZXR3ZWVu
IG51bGwgYW5kIGVtcHR5IHN0cmluZ3MgaXMgbWFpbnRhaW5lZC4gUGFyc2luZyB3aWxsIG5vdCBj
aGFuZ2UKKyAgICAvLyB0aGUgZW1wdHkgc3RyaW5nLCBzbyB0aGUgaW50ZXJuYWwgc3RyaW5nIHdp
bGwgYmUgYXNzaWduZWQgdG8gZXhhY3RseQorICAgIC8vIHdoYXRldmVyIHRoZSBpbnB1dCBzdHJp
bmcgaXMuCisgICAgdm9pZCBwYXJzZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFN0cmluZyogb3Jp
Z2luYWxTdHJpbmcpOwogCiAgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmc7CiAgICAgYm9v
bCBtX2lzVmFsaWQ7CkBAIC0xNDMsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgcGF0aEVu
ZFBvczsKICAgICBpbnQgcXVlcnlFbmRQb3M7CiAgICAgaW50IGZyYWdtZW50RW5kUG9zOwotICAg
IAorCiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1JlZihjb25zdCBLVVJMJiBhLCBjb25z
dCBLVVJMJiBiKTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gMjk4NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERG
VVJMUmVjdChHcmFwaGljCiAgICAgICAgICAgICAgICAgICAgIGhyZWYgPSBlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoaHJlZkF0dHIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFocmVmLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEtVUkwgbGluayA9IGVsZW1lbnQtPmRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKGhyZWYuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAg
ICAgS1VSTCBsaW5rKGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYpKTsKICAg
ICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRVUkxGb3JSZWN0KGxpbmssIHJl
Y3QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdJbWFnZUxv
YWRlci5jcHAJKHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTIgQEAgdm9pZCBTVkdJbWFnZUxvYWRl
cjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIAogICAgIENhY2hlZEltYWdlICpuZXdJbWFnZSA9
IDA7CiAgICAgaWYgKCFpbWFnZUVsZW1lbnQtPmhyZWYoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyB1cmkgPSBpbWFnZUVsZW1lbnQtPmJhc2VVUkkoKS5kZXByZWNhdGVk
U3RyaW5nKCk7CisgICAgICAgIFN0cmluZyB1cmkgPSBpbWFnZUVsZW1lbnQtPmJhc2VVUkkoKTsK
ICAgICAgICAgaWYgKCF1cmkuaXNFbXB0eSgpKQotICAgICAgICAgICAgdXJpID0gS1VSTCh1cmks
IGltYWdlRWxlbWVudC0+aHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuZGVwcmVjYXRlZFN0cmlu
ZygpOworICAgICAgICAgICAgdXJpID0gS1VSTChLVVJMKHVyaSksIGltYWdlRWxlbWVudC0+aHJl
ZigpKS5zdHJpbmcoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdXJpID0gaW1hZ2VFbGVt
ZW50LT5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICBuZXdJbWFnZSA9IGRvYy0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZSh1cmkpOworICAgICAgICAgICAgdXJpID0gaW1hZ2VF
bGVtZW50LT5ocmVmKCk7CisgICAgICAgIG5ld0ltYWdlID0gZG9jLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdEltYWdlKHVyaS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIH0KIAogICAgIENhY2hlZElt
YWdlICpvbGRJbWFnZSA9IGltYWdlKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CShyZXZpc2lvbiAyOTg0OCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFu
Z2VkKGJvb2wgYWxsRGF0YVIKICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNhbmNlbENvbnRl
bnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MKICAgICAgICAgbV9m
cmFtZS0+bG9hZGVyKCktPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKICAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPnNldFJlc3BvbnNlTUlNRVR5cGUoImltYWdlL3N2Zyt4bWwiKTsKLSAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmJlZ2luKCJwbGFjZWhvbGRlci5zdmciKTsgLy8gY3JlYXRl
IHRoZSBlbXB0eSBkb2N1bWVudAorICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+YmVnaW4oS1VS
TCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAogICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+d3JpdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgbV9m
cmFtZS0+bG9hZGVyKCktPmVuZCgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJ
KHJldmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgYm9vbCBYTUxIdHRwUmVxdWVzdDo6dXJsTWF0
Y2hlc0RvY3VtZW50RAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIGJ1dCBhIHJlbW90
ZSBkb2N1bWVudCBjYW4gb25seSBsb2FkIGZyb20gdGhlIHNhbWUgcG9ydCBvbiB0aGUgc2VydmVy
Ci0gICAgS1VSTCBkb2N1bWVudFVSTCA9IG1fZG9jLT51cmwoKTsKKyAgICBLVVJMIGRvY3VtZW50
VVJMKG1fZG9jLT51cmwoKSk7CiAgICAgaWYgKGRvY3VtZW50VVJMLnByb3RvY29sKCkubG93ZXIo
KSA9PSB1cmwucHJvdG9jb2woKS5sb3dlcigpCiAgICAgICAgICAgICAmJiBkb2N1bWVudFVSTC5o
b3N0KCkubG93ZXIoKSA9PSB1cmwuaG9zdCgpLmxvd2VyKCkKICAgICAgICAgICAgICYmIGRvY3Vt
ZW50VVJMLnBvcnQoKSA9PSB1cmwucG9ydCgpKQpJbmRleDogV2ViQ29yZS94bWwvWFNMSW1wb3J0
UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHJl
dmlzaW9uIDI5ODQ4KQorKysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQog
ICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOwogICAg
IGlmICghcGFyZW50U2hlZXQtPmhyZWYoKS5pc051bGwoKSkKICAgICAgICAgLy8gdXNlIHBhcmVu
dCBzdHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAgICAgIGFic0hyZWYgPSBLVVJM
KHBhcmVudFNoZWV0LT5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpLCBtX3N0ckhyZWYuZGVwcmVj
YXRlZFN0cmluZygpKS5zdHJpbmcoKTsKKyAgICAgICAgYWJzSHJlZiA9IEtVUkwoS1VSTChwYXJl
bnRTaGVldC0+aHJlZigpKSwgbV9zdHJIcmVmKS5zdHJpbmcoKTsKICAgICAKICAgICAvLyBDaGVj
ayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5
bGVzaGVldAogICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRo
ZW4ganVzdCBiYWlsLgpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDI5ODQ4KQor
KysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3
ICsxMTIsNyBAQCBzdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sCiAgICAg
ICAgIGNhc2UgWFNMVF9MT0FEX0RPQ1VNRU5UOiB7CiAgICAgICAgICAgICB4c2x0VHJhbnNmb3Jt
Q29udGV4dFB0ciBjb250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7CiAgICAg
ICAgICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQt
PmRvYywgY29udGV4dC0+bm9kZSk7Ci0gICAgICAgICAgICBLVVJMIHVybCgoY29uc3QgY2hhciop
YmFzZSwgKGNvbnN0IGNoYXIqKXVyaSk7CisgICAgICAgICAgICBLVVJMIHVybChLVVJMKChjb25z
dCBjaGFyKiliYXNlKSwgKGNvbnN0IGNoYXIqKXVyaSk7CiAgICAgICAgICAgICB4bWxGcmVlKGJh
c2UpOwogICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICAgICAgICAgIFJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19035</attachid>
            <date>2008-02-10 08:07:09 -0800</date>
            <delta_ts>2008-02-12 13:15:32 -0800</delta_ts>
            <desc>patch rebased and with backwards protocolIs fixed</desc>
            <filename>RevisedKURLStringPatch.txt</filename>
            <type>text/plain</type>
            <size>90618</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDA4LTAyLTEwICBNYXJ2aW4gRGVja2VyICA8bWFydi5kZWNrZXJA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIEZp
eCBLVVJMJ3MgaW50ZXJmYWNlIHRvIHVzZSBTdHJpbmcgaW5zdGVhZCBvZiBEZXByZWNhdGVkU3Ry
aW5nICh0aGUKKyAgICAgICAgaW50ZXJuYWxzIHdpbGwgYmUgZml4ZWQgbGF0ZXIpLiBBZGRlZCBh
IG5ldyBmdW5jdGlvbiBLVVJMLnByb3RvY29sSXMKKyAgICAgICAgdG8gZWZmaWNpZW50bHkgY29t
cGFyZSBwcm90b2NvbHMgd2l0aG91dCBjYXNlIGVycm9ycy4gTWFkZSB0aGUKKyAgICAgICAgY29u
c3RydWN0b3JzIGV4cGxpY2l0IHRvIGhpZ2hsaWdodCBleHBlbnNpdmUgb3BlcmF0aW9ucy4KKwor
ICAgICAgICBIYWxmIGZpeGVzIDE2NTM4IChLVVJMIHNob3VsZCB1c2UgU3RyaW5nKSwgZml4ZXMg
YnVnIDE2NDg1CisgICAgICAgIChEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkIHdpbGwgY3Jhc2gg
aWYgdGhlIFVSTCBpc051bGwpLiBJIGZpeGVkIGEKKyAgICAgICAgc2ltaWxhciBwcm9ibGVtIGlu
IEljb25EYXRhYmFzZSB3aGljaCBoYXMgbm8gYXNzb2NpYXRlZCBidWcuIFRoaXMgZml4ZXMKKyAg
ICAgICAgYnVnIDE2NDg3IChLVVJMIGRvZXNuJ3QgcHJlc2VydmUgaXNOdWxsIG9uIGl0cyBhcmd1
bWVudHMpLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5jcHA6CisgICAgICAgIChLSlM6Ok5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eSk6
CisgICAgICAgICogYmluZGluZ3MvanMva2pzX3Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OktKU1Byb3h5Ojppbml0U2NyaXB0KToKKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjppbnNlcnRlZEludG9QYXJlbnQpOgor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0
Q29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpjb21wbGV0ZVVSTCk6CisgICAg
ICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YmFzZVVS
SSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjb3B5KToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBbmNob3JFbGVtZW50Ojpob3N0KToKKyAgICAgICAgKiBodG1sL0hUTUxLZXlnZW5FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50OjphcHBlbmRGb3Jt
RGF0YSk6CisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRl
cjo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjppY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRP
cGVuVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRFeHBsaWNpdE9wZW4p
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmdvdG9BbmNob3IpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdGFy
dFJlZGlyZWN0aW9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbW1p
dFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwpOgorICAg
ICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVGaXJzdENoYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUGF0aFNl
Z21lbnRFbmRDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQWxsQVNDSUkpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUFTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdE9mKToKKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpsYXN0UGF0aENvbXBvbmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpLVVJMOjpwcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpob3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6S1VS
TDo6dXNlcik6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpyZWYpOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6cHJvdG9jb2xJcyk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpxdWVyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNl
dFByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldEhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6S1VSTDo6c2V0UG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRIb3N0
QW5kUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRVc2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OktVUkw6OnNldFBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6c2V0UmVmKToK
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OnNldFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cHJldHR5VVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OmRlY29kZV9zdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6S1VS
TDo6aXNMb2NhbEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kRXNjYXBpbmdCYWRDaGFy
cyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UGF0aFJlbW92aW5nRG90cyk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXNTbGFzaERvdE9yRG90RG90KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBh
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
S1VSTDo6ZW5jb2RlX3N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRFbmNvZGVkSG9z
dG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUhvc3RuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVSZWxh
dGl2ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJzdGl0dXRlQmFja3NsYXNoZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL0tVUkwuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0p
OgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZW5jb2RlZEh0bWxSZWYpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjphZGRQREZVUkxSZWN0KToKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVudERvbWFpbik6
CisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNM
SW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKToKKwogMjAwOC0wMi0wOSAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3IEBAIF9fWk43V2ViQ29yZTRG
b250RDFFdgogX19aTjdXZWJDb3JlNEZvbnRhU0VSS1MwXwogX19aTjdXZWJDb3JlNEtVUkwxM2Rl
Y29kZV9zdHJpbmdFUktOU18xNkRlcHJlY2F0ZWRTdHJpbmdFCiBfX1pON1dlYkNvcmU0S1VSTEMx
RVA1TlNVUkwKLV9fWk43V2ViQ29yZTRLVVJMQzFFUktOU18xNkRlcHJlY2F0ZWRTdHJpbmdFCitf
X1pON1dlYkNvcmU0S1VSTEMxRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTRLVVJMQzFFdgog
X19aTjdXZWJDb3JlNE5vZGUxN3N0b3BJZ25vcmluZ0xlYWtzRXYKIF9fWk43V2ViQ29yZTROb2Rl
MThzdGFydElnbm9yaW5nTGVha3NFdgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2
aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0
b3IuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmln
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBKU1ZhbHVlKiBOYXZp
Z2F0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAgICAgcmV0dXJuIGpzU3RyaW5nKCJOZXRzY2Fw
ZSIpOwogICBjYXNlIEFwcFZlcnNpb246IHsKICAgICAvLyBWZXJzaW9uIGlzIGV2ZXJ5dGhpbmcg
aW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHBhc3QgdGhlICJNb3ppbGxhLyIgcHJlZml4LgotICAg
IGNvbnN0IFN0cmluZyB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1f
ZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7
CisgICAgY29uc3QgU3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdl
bnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IEtVUkwobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkp
IDogS1VSTCgpKTsKICAgICByZXR1cm4ganNTdHJpbmcodXNlckFnZW50LnN1YnN0cmluZyh1c2Vy
QWdlbnQuZmluZCgnLycpICsgMSkpOwogICB9CiAgIGNhc2UgUHJvZHVjdDoKQEAgLTIwOSw3ICsy
MDksNyBAQCBKU1ZhbHVlKiBOYXZpZ2F0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAgIGNhc2Ug
TGFuZ3VhZ2U6CiAgICAgcmV0dXJuIGpzU3RyaW5nKGRlZmF1bHRMYW5ndWFnZSgpKTsKICAgY2Fz
ZSBVc2VyQWdlbnQ6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKG1fZnJhbWUtPmxvYWRlcigpLT51c2Vy
QWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDog
S1VSTCgpKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdl
bnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IEtVUkwobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkp
IDogS1VSTCgpKSk7CiAgIGNhc2UgUGxhdGZvcm06CiAgICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNP
UkVfTkFWSUdBVE9SX1BMQVRGT1JNKTsKICAgY2FzZSBfUGx1Z2luczoKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX3Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19wcm94eS5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfcHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBL
SlNQcm94eTo6aW5pdFNjcmlwdCgpCiAgICAgbV9nbG9iYWxPYmplY3QgPSBuZXcgSlNET01XaW5k
b3cobV9mcmFtZS0+ZG9tV2luZG93KCkpOwogCiAgICAgLy8gRklYTUU6IFdlIGNhbiBnZXQgcmlk
IG9mIHRoaXMgKGFuZCBlbGltaW5hdGUgY29tcGF0TW9kZSBlbnRpcmVseSkuCi0gICAgU3RyaW5n
IHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1l
bnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICBTdHJpbmcg
dXNlckFnZW50ID0gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVu
dCgpID8gS1VSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSkgOiBLVVJMKCkpOwogICAgIGlm
ICh1c2VyQWdlbnQuZmluZCgiTWljcm9zb2Z0IikgPj0gMCB8fCB1c2VyQWdlbnQuZmluZCgiTVNJ
RSIpID49IDApCiAgICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5zZXRDb21wYXRNb2RlKElFQ29tcGF0
KTsKICAgICBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAzMDExOCkK
KysrIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3
ICs5MCw3IEBAIHZvaWQgQ1NTSW1wb3J0UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KCkKICAgICBD
U1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKICAgICBpZiAo
IXBhcmVudFNoZWV0LT5ocmVmKCkuaXNOdWxsKCkpCiAgICAgICAgIC8vIHVzZSBwYXJlbnQgc3R5
bGVoZWV0J3MgVVJMIGFzIHRoZSBiYXNlIFVSTAotICAgICAgICBhYnNIcmVmID0gS1VSTChwYXJl
bnRTaGVldC0+aHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgbV9zdHJIcmVmLmRlcHJlY2F0ZWRT
dHJpbmcoKSkuc3RyaW5nKCk7CisgICAgICAgIGFic0hyZWYgPSBLVVJMKEtVUkwocGFyZW50U2hl
ZXQtPmhyZWYoKSksIG1fc3RySHJlZikuc3RyaW5nKCk7CiAKICAgICAvLyBDaGVjayBmb3IgYSBj
eWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAog
ICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBi
YWlsLgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw3ICs4MjIsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAjZW5kaWYKICAgICAgICAgICAgICAgICBp
ZiAoIXVyaS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5l
dyBDU1NDdXJzb3JJbWFnZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
S1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHVyaS5kZXBy
ZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgS1VSTChLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpKSwgdXJpKS5zdHJpbmcoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdHNwb3QsIHN0eWxlRWxlbWVudCkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTg4Miw3ICs4ODIsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgICAgICAgICBTdHJpbmcg
dXJpID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbHVlLT5zdHJpbmcpKTsKICAgICAgICAgICAgIGlm
ICghdXJpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENT
U0ltYWdlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIEtVUkwoc3R5bGVFbGVtZW50LT5iYXNl
VVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB1cmkuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmco
KSwKKyAgICAgICAgICAgICAgICAgICAgS1VSTChLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgp
KSwgdXJpKS5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50KTsKICAg
ICAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIH0KQEAgLTEwODks
NyArMTA4OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAg
ICAgICAgICAgICAgICBpZiAodmFsLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJ
KSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlVVJMKGRvbVN0cmlu
Zyh2YWwtPnN0cmluZykpOwogICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBD
U1NQcmltaXRpdmVWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtV
Ukwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCksIHZhbHVlKS5zdHJpbmcoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKQEAgLTE4NDAsNyArMTg0MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoaW50
IHByb3BJZCwKICAgICAgICAgICAgIC8vIHVybAogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0g
cGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5nKSk7CiAgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IG5ldyBDU1NJbWFnZVZhbHVlKAotICAgICAgICAgICAgICAgIEtVUkwoc3R5bGVFbGVtZW50
LT5iYXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkp
LnN0cmluZygpLCBzdHlsZUVsZW1lbnQpOworICAgICAgICAgICAgICAgIEtVUkwoS1VSTChzdHls
ZUVsZW1lbnQtPmJhc2VVUkwoKSksIHZhbHVlKS5zdHJpbmcoKSwgc3R5bGVFbGVtZW50KTsKICAg
ICAgICAgfSBlbHNlIGlmICh2YWwtPnVuaXQgPT0gVmFsdWU6OkZ1bmN0aW9uKSB7CiAgICAgICAg
ICAgICAvLyBhdHRyKFgpIHwgY291bnRlcihYIFssWV0pIHwgY291bnRlcnMoWCwgWSwgWyxaXSkK
ICAgICAgICAgICAgIFZhbHVlTGlzdCAqYXJncyA9IHZhbC0+ZnVuY3Rpb24tPmFyZ3M7CkBAIC0x
OTA2LDggKzE5MDYsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kSW1hZ2UoUmVm
CiAgICAgaWYgKHZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVVJJKSB7CiAgICAgICAgIFN0cmluZyB1cmkgPSBwYXJzZVVSTChkb21TdHJpbmcodmFs
dWVMaXN0LT5jdXJyZW50KCktPnN0cmluZykpOwogICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICB2YWx1ZSA9IG5ldyBDU1NJbWFnZVZhbHVlKEtVUkwoc3R5bGVFbGVtZW50
LT5iYXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB1cmkuZGVwcmVjYXRlZFN0cmluZygpKS5z
dHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVF
bGVtZW50KTsKKyAgICAgICAgICAgIHZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUoS1VSTChLVVJM
KHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpKSwgdXJpKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI3NDAsNyArMjc0MCw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKICAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNl
U3JjVmFsdWU+IHBhcnNlZFZhbHVlOwogICAgICAgICBpZiAodmFsLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJICYmICFleHBlY3RDb21tYSkgewogICAgICAgICAgICAgU3RyaW5n
IHZhbHVlID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5nKSk7Ci0gICAgICAgICAgICBw
YXJzZWRWYWx1ZSA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKEtVUkwoc3R5bGVFbGVtZW50LT5i
YXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0
cmluZygpLCBmYWxzZSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NGb250RmFj
ZVNyY1ZhbHVlKEtVUkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKSksIHZhbHVlKS5zdHJp
bmcoKSwgZmFsc2UpOwogICAgICAgICAgICAgdXJpVmFsdWUgPSBwYXJzZWRWYWx1ZTsKICAgICAg
ICAgICAgIGFsbG93Rm9ybWF0ID0gdHJ1ZTsKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1
ZTsKQEAgLTMyOTUsOCArMzI5NSw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdl
KGludCBwcm8KICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIGNvbnRleHQuY29tbWl0SW1hZ2UobmV3IENTU0ltYWdlVmFsdWUoS1VSTChzdHls
ZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHVyaS5kZXByZWNhdGVkU3Ry
aW5nKCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCkpOworICAgIGNvbnRleHQuY29tbWl0
SW1hZ2UobmV3IENTU0ltYWdlVmFsdWUoS1VSTChLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgp
KSwgdXJpKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlRWxlbWVudCkpOwogICAgIHdoaWxlICgodmFsID0gdmFsdWVMaXN0LT5uZXh0KCkp
KSB7CiAgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgdmFsaWRVbml0KHZhbCwg
RkludGVnZXJ8Rk5vbk5lZ3xGUGVyY2VudCwgdHJ1ZSkpIHsKICAgICAgICAgICAgIGNvbnRleHQu
Y29tbWl0TnVtYmVyKHZhbCk7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyMSw3ICsxNjIxLDcg
QEAgdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IERlcHJlY2F0ZWRTdAogCiAgICAgbV91cmwg
PSB1cmw7CiAgICAgaWYgKG1fc3R5bGVTZWxlY3RvcikKLSAgICAgICAgbV9zdHlsZVNlbGVjdG9y
LT5zZXRFbmNvZGVkVVJMKG1fdXJsKTsKKyAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNv
ZGVkVVJMKEtVUkwobV91cmwpKTsKIAogICAgIG1faXNBbGxvd2VkVG9Mb2FkTG9jYWxSZXNvdXJj
ZXMgPSBzaG91bGRCZUFsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpOwogIH0KQEAgLTIyMDUs
NyArMjIwNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgIC8v
IENyZWF0ZSBhIG5ldyBzdHlsZSBzZWxlY3RvcgogICAgIGRlbGV0ZSBtX3N0eWxlU2VsZWN0b3I7
CiAgICAgbV9zdHlsZVNlbGVjdG9yID0gbmV3IENTU1N0eWxlU2VsZWN0b3IodGhpcywgdXNlclN0
eWxlU2hlZXQoKSwgbV9zdHlsZVNoZWV0cy5nZXQoKSwgbV9tYXBwZWRFbGVtZW50U2hlZXQuZ2V0
KCksICFpbkNvbXBhdE1vZGUoKSwgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKLSAgICBtX3N0
eWxlU2VsZWN0b3ItPnNldEVuY29kZWRVUkwobV91cmwpOworICAgIG1fc3R5bGVTZWxlY3Rvci0+
c2V0RW5jb2RlZFVSTChLVVJMKG1fdXJsKSk7CiAgICAgbV9kaWRDYWxjdWxhdGVTdHlsZVNlbGVj
dG9yID0gdHJ1ZTsKIH0KIApAQCAtMjYwMCwxMiArMjYwMCwxMiBAQCBFbGVtZW50KiBEb2N1bWVu
dDo6b3duZXJFbGVtZW50KCkgY29uc3QKIAogU3RyaW5nIERvY3VtZW50Ojpjb29raWUoKSBjb25z
dAogewotICAgIHJldHVybiBjb29raWVzKHRoaXMsIHVybCgpKTsKKyAgICByZXR1cm4gY29va2ll
cyh0aGlzLCBLVVJMKHVybCgpKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIHNldENvb2tpZXModGhpcywgdXJsKCksIHBvbGljeUJh
c2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHZhbHVlKTsKKyAgICBzZXRDb29raWVzKHRoaXMs
IEtVUkwodXJsKCkpLCBLVVJMKHBvbGljeUJhc2VVUkwoKSksIHZhbHVlKTsKIH0KIAogU3RyaW5n
IERvY3VtZW50OjpyZWZlcnJlcigpIGNvbnN0CkBAIC0yNzg1LDI1ICsyNzg1LDI1IEBAIFVDaGFy
IERvY3VtZW50OjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm8KIAogRGVwcmVjYXRlZFN0cmluZyBE
b2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdXJsKQogewotICAg
IC8vIEZJWE1FOiBUaGlzIHRyZWF0cyBudWxsIFVSTHMgdGhlIHNhbWUgYXMgZW1wdHkgVVJMcywg
dW5saWtlIHRoZSBTdHJpbmcgZnVuY3Rpb24gYmVsb3cuCi0KLSAgICAvLyBJZiBib3RoIHRoZSBV
UkwgYW5kIGJhc2UgVVJMIGFyZSBlbXB0eSwgbGlrZSB0aGV5IGFyZSBmb3IgZG9jdW1lbnRzCi0g
ICAgLy8gY3JlYXRlZCB1c2luZyBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQsIGp1
c3QgcmV0dXJuIHRoZSBwYXNzZWQgaW4gVVJMLgotICAgIC8vIChXZSBkbyB0aGlzIGJlY2F1c2Ug
dXJsKCkgcmV0dXJucyAiYWJvdXQ6YmxhbmsiIGZvciBlbXB0eSBVUkxzLgotICAgIGlmIChtX3Vy
bC5pc0VtcHR5KCkgJiYgbV9iYXNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHVybDsK
LSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCgpLCB1cmwp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICByZXR1cm4gS1VSTChiYXNlVVJMKCksIHVybCwgbV9k
ZWNvZGVyLT5lbmNvZGluZygpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgcmV0dXJuIGNvbXBs
ZXRlVVJMKFN0cmluZyh1cmwpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBEb2N1
bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgYWx3YXlzIHJldHVybnMgbnVsbCB3aGVuIHBhc3NlZCBhIG51bGwgVVJMLCB1bmxpa2UgdGhl
IERlcHJlY2F0ZWRTdHJpbmcgZnVuY3Rpb24gYWJvdmUuCi0gICAgLy8gQ29kZSByZWxpZXMgb24g
dGhpcyBiZWhhdmlvciwgbmFtZWx5IHRoZSBocmVmIHByb3BlcnR5IG9mIDxhPiBhbmQgdGhlIGRh
dGEgcHJvcGVydHkgb2YgPG9iamVjdD4uCisgICAgLy8gRklYTUUgYnVnIDE2NDg1OiB0aGlzIHNo
b3VsZCByZXR1cm4gYSBLVVJMLCB3aGljaCB3aWxsIHJlZHVjZSB0aGUgbnVtYmVyIG9mCisgICAg
Ly8gS1VSTDwtPlN0cmluZyByb3VuZC10cmlwcy4KKworICAgIC8vIFRoaXMgYWx3YXlzIHJldHVy
bnMgbnVsbCB3aGVuIHBhc3NlZCBhIG51bGwgVVJMLgogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiB1cmw7Ci0gICAgcmV0dXJuIGNvbXBsZXRlVVJMKHVybC5kZXByZWNhdGVk
U3RyaW5nKCkpOworCisgICAgLy8gSWYgYm90aCB0aGUgVVJMIGFuZCBiYXNlIFVSTCBhcmUgZW1w
dHksIGxpa2UgdGhleSBhcmUgZm9yIGRvY3VtZW50cworICAgIC8vIGNyZWF0ZWQgdXNpbmcgRE9N
SW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50LCBqdXN0IHJldHVybiB0aGUgcGFzc2VkIGlu
IFVSTC4KKyAgICBpZiAobV91cmwuaXNFbXB0eSgpICYmIG1fYmFzZVVSTC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiB1cmw7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBL
VVJMKEtVUkwoYmFzZVVSTCgpKSwgdXJsKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gS1VSTChLVVJM
KGJhc2VVUkwoKSksIHVybCwgbV9kZWNvZGVyLT5lbmNvZGluZygpKS5zdHJpbmcoKTsKIH0KIAog
Ym9vbCBEb2N1bWVudDo6aW5QYWdlQ2FjaGUoKQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4
KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3MSw3ICs1
NzEsNyBAQCBTdHJpbmcgRWxlbWVudDo6YmFzZVVSSSgpIGNvbnN0CiAKICAgICBOb2RlKiBwYXJl
bnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgcmV0dXJuIEtVUkwo
cGFyZW50LT5iYXNlVVJJKCkuZGVwcmVjYXRlZFN0cmluZygpLCB4bWxiYXNlLmRlcHJlY2F0ZWRT
dHJpbmcoKSkuc3RyaW5nKCk7CisgICAgICAgIHJldHVybiBLVVJMKEtVUkwocGFyZW50LT5iYXNl
VVJJKCkpLCB4bWxiYXNlLnN0cmluZygpKS5zdHJpbmcoKTsKIAogICAgIHJldHVybiB4bWxiYXNl
LnN0cmluZygpOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0Miw3ICs5NDIsNyBA
QCB2b2lkIEVkaXRvcjo6Y29weSgpCiAgICAgCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50
ID0gaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBQYXN0
ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZUltYWdlKGltYWdlRWxlbWVudCwgZG9j
dW1lbnQtPnVybCgpLCBkb2N1bWVudC0+dGl0bGUoKSk7CisgICAgICAgIFBhc3RlYm9hcmQ6Omdl
bmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlSW1hZ2UoaW1hZ2VFbGVtZW50LCBLVVJMKGRvY3VtZW50
LT51cmwoKSksIGRvY3VtZW50LT50aXRsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFBhc3RlYm9h
cmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlU2VsZWN0aW9uKHNlbGVjdGVkUmFuZ2UoKS5n
ZXQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSk7CiAgICAgCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE1LDEyICs0MTUsMTIg
QEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdAogCiBTdHJpbmcgSFRN
TEFuY2hvckVsZW1lbnQ6Omhhc2goKSBjb25zdAogewotICAgIHJldHVybiAnIycgKyBLVVJMKGhy
ZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnJlZigpOworICAgIHJldHVybiAiIyIgKyBLVVJMKGhy
ZWYoKSkucmVmKCk7CiB9CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6aG9zdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEtVUkwoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuaG9zdCgpOwor
ICAgIHJldHVybiBLVVJMKGhyZWYoKSkuaG9zdCgpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVs
ZW1lbnQ6Omhvc3RuYW1lKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNw
cAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIGJvb2wgSFRNTEtleWdlbkVsZW1lbnQ6
OmFwcGVuZEZvcm1EYXRhKEYKICAgICAvLyBPbmx5IFJTQSBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0
aW1lLgogICAgIGlmICghbV9rZXlUeXBlLmlzTnVsbCgpICYmICFlcXVhbElnbm9yaW5nQ2FzZSht
X2tleVR5cGUsICJyc2EiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyB2YWx1
ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1f
Y2hhbGxlbmdlLCBkb2N1bWVudCgpLT5iYXNlVVJMKCkpOworICAgIFN0cmluZyB2YWx1ZSA9IHNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1fY2hhbGxl
bmdlLCBLVVJMKGRvY3VtZW50KCktPmJhc2VVUkwoKSkpOwogICAgIGlmICh2YWx1ZS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEo
bmFtZSgpLCB2YWx1ZS51dGY4KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCShyZXZpc2lvbiAz
MDExOCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDIyICs2NCwyNyBAQCBEb2NMb2FkZXI6On5Eb2NMb2FkZXIoKQogCiB2b2lkIERvY0xvYWRl
cjo6Y2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSTCYgZnVsbFVSTCkKIHsKKyAgICAvLyBUaGUgY29k
ZSBiZWxvdyBleHBlY3RzIGEgbm9uLU5VTEwgc3RyaW5nLgorICAgIFN0cmluZyB1cmxTdHJpbmcg
PSBmdWxsVVJMLnN0cmluZygpOworICAgIGlmICh1cmxTdHJpbmcuaXNOdWxsKCkpCisgICAgICAg
IHVybFN0cmluZyA9ICIiOworCiAgICAgaWYgKG1fYWxsb3dTdGFsZVJlc291cmNlcykKLSAgICAg
ICAgcmV0dXJuOyAvL0Rvbid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZworICAgICAg
ICByZXR1cm47IC8vIERvbid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZwogICAgIGlm
IChtX2NhY2hlUG9saWN5ID09IENhY2hlUG9saWN5VmVyaWZ5KSB7Ci0gICAgICAgaWYgKCFtX3Jl
bG9hZGVkVVJMcy5jb250YWlucyhmdWxsVVJMLnN0cmluZygpKSkgewotICAgICAgICAgIENhY2hl
ZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwuc3Ry
aW5nKCkpOworICAgICAgIGlmICghbV9yZWxvYWRlZFVSTHMuY29udGFpbnModXJsU3RyaW5nKSkg
eworICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNl
Rm9yVVJMKHVybFN0cmluZyk7CiAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLT5p
c0V4cGlyZWQoKSkgewogICAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7Ci0g
ICAgICAgICAgICAgbV9yZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAg
ICAgICAgIG1fcmVsb2FkZWRVUkxzLmFkZCh1cmxTdHJpbmcpOwogICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgfSBlbHNlIGlmICgobV9jYWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeVJlbG9hZCkg
fHwgKG1fY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lSZWZyZXNoKSkgewotICAgICAgIGlmICgh
bV9yZWxvYWRlZFVSTHMuY29udGFpbnMoZnVsbFVSTC5zdHJpbmcoKSkpIHsKLSAgICAgICAgICBD
YWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJM
LnN0cmluZygpKTsKKyAgICAgICBpZiAoIW1fcmVsb2FkZWRVUkxzLmNvbnRhaW5zKHVybFN0cmlu
ZykpIHsKKyAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNv
dXJjZUZvclVSTCh1cmxTdHJpbmcpOwogICAgICAgICAgIGlmIChleGlzdGluZykKICAgICAgICAg
ICAgICBjYWNoZSgpLT5yZW1vdmUoZXhpc3RpbmcpOwotICAgICAgICAgIG1fcmVsb2FkZWRVUkxz
LmFkZChmdWxsVVJMLnN0cmluZygpKTsKKyAgICAgICAgICBtX3JlbG9hZGVkVVJMcy5hZGQodXJs
U3RyaW5nKTsKICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQxLDcgKzE0Niw3IEBAIENhY2hlZFhC
TERvY3VtZW50KiBEb2NMb2FkZXI6OnJlcXVlc3RYQkwKIAogQ2FjaGVkUmVzb3VyY2UqIERvY0xv
YWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcqIGNoYXJzZXQsIGJvb2wgc2tpcENhbkxvYWRDaGVjaywg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewotICAgIEtVUkwgZnVsbFVSTCA9IG1f
ZG9jLT5jb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBLVVJMIGZ1bGxV
UkwobV9kb2MtPmNvbXBsZXRlVVJMKHVybCkpOwogICAgIAogICAgIGlmIChjYWNoZSgpLT5kaXNh
YmxlZCgpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZSo+OjppdGVy
YXRvciBpdCA9IG1fZG9jUmVzb3VyY2VzLmZpbmQoZnVsbFVSTC5zdHJpbmcoKSk7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDggKzQxMyw4IEBAIGJvb2wgRnJh
bWVMb2FkZXI6OnJlcXVlc3RGcmFtZShIVE1MRnJhbWUKICAgICBLVVJMIHNjcmlwdFVSTDsKICAg
ICBLVVJMIHVybDsKICAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6Iiwg
ZmFsc2UpKSB7Ci0gICAgICAgIHNjcmlwdFVSTCA9IHVybFN0cmluZy5kZXByZWNhdGVkU3RyaW5n
KCk7Ci0gICAgICAgIHVybCA9ICJhYm91dDpibGFuayI7CisgICAgICAgIHNjcmlwdFVSTCA9IEtV
UkwodXJsU3RyaW5nKTsKKyAgICAgICAgdXJsID0gS1VSTCgiYWJvdXQ6YmxhbmsiKTsKICAgICB9
IGVsc2UKICAgICAgICAgdXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsKIApAQCAtNDcyLDcg
KzQ3Miw3IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUxGcmEKICAgICAv
LyBGSVhNRTogSW4gdGhpcyBjYXNlIHRoZSBGcmFtZSB3aWxsIGhhdmUgZmluaXNoZWQgbG9hZGlu
ZyBiZWZvcmUgCiAgICAgLy8gaXQncyBiZWluZyBhZGRlZCB0byB0aGUgY2hpbGQgbGlzdC4gSXQg
d291bGQgYmUgYSBnb29kIGlkZWEgdG8KICAgICAvLyBjcmVhdGUgdGhlIGNoaWxkIGZpcnN0LCB0
aGVuIGludm9rZSB0aGUgbG9hZGVyIHNlcGFyYXRlbHkuCi0gICAgaWYgKHVybC5pc0VtcHR5KCkg
fHwgdXJsID09ICJhYm91dDpibGFuayIpIHsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCB1cmwu
c3RyaW5nKCkgPT0gImFib3V0OmJsYW5rIikgewogICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNv
bXBsZXRlZCgpOwogICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7CiAg
ICAgfQpAQCAtNjQ5LDE2ICs2NDksMTYgQEAgS1VSTCBGcmFtZUxvYWRlcjo6aWNvblVSTCgpCiB7
CiAgICAgLy8gSWYgdGhpcyBpc24ndCBhIHRvcCBsZXZlbCBmcmFtZSwgcmV0dXJuIG5vdGhpbmcK
ICAgICBpZiAobV9mcmFtZS0+dHJlZSgpICYmIG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCi0g
ICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKICAg
ICAvLyBJZiB3ZSBoYXZlIGFuIGljb25VUkwgZnJvbSBhIExpbmsgZWxlbWVudCwgcmV0dXJuIHRo
YXQKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
aWNvblVSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCkt
Pmljb25VUkwoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
S1VSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT5pY29uVVJMKCkpOworCiAgICAgLy8gRG9uJ3QgcmV0
dXJuIGEgZmF2aWNvbiBpY29uVVJMIHVubGVzcyB3ZSdyZSBodHRwIG9yIGh0dHBzCi0gICAgaWYg
KG1fVVJMLnByb3RvY29sKCkgIT0gImh0dHAiICYmIG1fVVJMLnByb3RvY29sKCkgIT0gImh0dHBz
IikKLSAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAKKyAgICBpZiAoIW1fVVJMLnByb3RvY29s
SXMoImh0dHAiKSAmJiAhbV9VUkwucHJvdG9jb2xJcygiaHR0cHMiKSkKKyAgICAgICAgcmV0dXJu
IEtVUkwoKTsKKwogICAgIEtVUkwgdXJsOwogICAgIHVybC5zZXRQcm90b2NvbChtX1VSTC5wcm90
b2NvbCgpKTsKICAgICB1cmwuc2V0SG9zdChtX1VSTC5ob3N0KCkpOwpAQCAtNjg3LDcgKzY4Nyw3
IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoY29uc3QgS1VSTCYKICAgICBtX2ZyYW1l
LT5zZXRKU0RlZmF1bHRTdGF0dXNCYXJUZXh0KFN0cmluZygpKTsKIAogICAgIG1fVVJMID0gdXJs
OwotICAgIGlmIChtX1VSTC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiAhbV9VUkwu
aG9zdCgpLmlzRW1wdHkoKSAmJiBtX1VSTC5wYXRoKCkuaXNFbXB0eSgpKQorICAgIGlmICgobV9V
UkwucHJvdG9jb2xJcygiaHR0cCIpIHx8IG1fVVJMLnByb3RvY29sSXMoImh0dHBzIikpICYmICFt
X1VSTC5ob3N0KCkuaXNFbXB0eSgpICYmIG1fVVJMLnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAg
IG1fVVJMLnNldFBhdGgoIi8iKTsKICAgICBtX3dvcmtpbmdVUkwgPSBtX1VSTDsKIApAQCAtNzEw
LDcgKzcxMCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpZEV4cGxpY2l0T3BlbigpCiAgICAgLy8g
aW1wbGljaXRseSBwcmVjZWRlcyBkb2N1bWVudC53cml0ZS4KICAgICBjYW5jZWxSZWRpcmVjdGlv
bigpOyAKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgIT0gImFib3V0OmJsYW5r
IikKLSAgICAgICAgbV9VUkwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICAgICAg
bV9VUkwgPSBLVVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKIH0KIAogYm9vbCBGcmFt
ZUxvYWRlcjo6ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwsIGJvb2wgdXNl
ckdlc3R1cmUsIGJvb2wgcmVwbGFjZURvY3VtZW50KQpAQCAtMTE5MCwxMyArMTE5MCwxMyBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpnb3RvQW5jaG9yKCkKICAgICAgICAgIShtX2ZyYW1lLT5kb2N1bWVu
dCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmdldENTU1RhcmdldCgpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBtX1VSTC5lbmNvZGVkSHRtbFJlZigp
OworICAgIFN0cmluZyByZWYgPSBtX1VSTC5lbmNvZGVkSHRtbFJlZigpOwogICAgIGlmICghZ290
b0FuY2hvcihyZWYpKSB7CiAgICAgICAgIC8vIENhbid0IHVzZSBodG1sUmVmKCkgaGVyZSBiZWNh
dXNlIGl0IGRvZXNuJ3Qga25vdyB3aGljaCBlbmNvZGluZyB0byB1c2UgdG8gZGVjb2RlLgogICAg
ICAgICAvLyBEZWNvZGluZyBoZXJlIGhhcyB0byBtYXRjaCBlbmNvZGluZyBpbiBjb21wbGV0ZVVS
TCwgd2hpY2ggbWVhbnMgaXQgaGFzIHRvIHVzZSB0aGUKICAgICAgICAgLy8gcGFnZSdzIGVuY29k
aW5nIHJhdGhlciB0aGFuIFVURi04LgogICAgICAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICAg
ICAgZ290b0FuY2hvcihLVVJMOjpkZWNvZGVfc3RyaW5nKHJlZiwgbV9kZWNvZGVyLT5lbmNvZGlu
ZygpKSk7CisgICAgICAgICAgICBnb3RvQW5jaG9yKEtVUkw6OmRlY29kZV9zdHJpbmcocmVmLmRl
cHJlY2F0ZWRTdHJpbmcoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpKSk7CiAgICAgfQogfQogCkBA
IC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0NhbGxJbXBsaWNpdENs
b3NlCiBLVVJMIEZyYW1lTG9hZGVyOjpiYXNlVVJMKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9m
cmFtZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VV
UkwoKTsKKyAgICByZXR1cm4gS1VSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkpOwog
fQogCiBTdHJpbmcgRnJhbWVMb2FkZXI6OmJhc2VUYXJnZXQoKSBjb25zdApAQCAtMTMyNCw3ICsx
MzI0LDcgQEAgU3RyaW5nIEZyYW1lTG9hZGVyOjpiYXNlVGFyZ2V0KCkgY29uc3QKIEtVUkwgRnJh
bWVMb2FkZXI6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIEFTU0VSVCht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgcmV0dXJuIEtVUkwobV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6
OnNjaGVkdWxlSFRUUFJlZGlyZWN0aW9uKGRvdWJsZSBkZWxheSwgY29uc3QgU3RyaW5nJiB1cmwp
CkBAIC0xODQ1LDcgKzE4NDUsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydFJlZGlyZWN0aW9u
VGltZXIoCiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgog
ICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKICAgICAg
ICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2VEdXJpbmdMb2FkOgot
ICAgICAgICAgICAgY2xpZW50UmVkaXJlY3RlZChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwu
ZGVwcmVjYXRlZFN0cmluZygpLAorICAgICAgICAgICAgY2xpZW50UmVkaXJlY3RlZChLVVJMKG1f
c2NoZWR1bGVkUmVkaXJlY3Rpb24tPnVybCksCiAgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRS
ZWRpcmVjdGlvbi0+ZGVsYXksCiAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUoKSArIG1fcmVk
aXJlY3Rpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCksCiAgICAgICAgICAgICAgICAgbV9zY2hl
ZHVsZWRSZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksCkBAIC0yNTU2LDcgKzI1NTYsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoCiAgICAgICAgIGlmICh1cmwuaXNF
bXB0eSgpKQogICAgICAgICAgICAgdXJsID0gcGRsLT5yZXNwb25zZVVSTCgpOwogICAgICAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHVybCA9ICJhYm91dDpibGFuayI7CisgICAg
ICAgICAgICB1cmwgPSBLVVJMKCJhYm91dDpibGFuayIpOwogCiAgICAgICAgIGRpZE9wZW5VUkwo
dXJsKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29y
ZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTQgKzczLDExIEBAIHZv
aWQgTG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpCiAgICAgICAgIGlmICghcmVxLT5jYWNo
ZWRSZXNvdXJjZSgpLT5hY2NlcHQoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXF1ZXN0LnNl
dEhUVFBBY2NlcHQocmVxLT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKSk7CiAKLSAgICAgICAg
S1VSTCByID0gZGwtPmRvYygpLT51cmwoKTsKKyAgICAgICAgS1VSTCByKGRsLT5kb2MoKS0+dXJs
KCkpOwogICAgICAgICBpZiAoci5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiByLnBh
dGgoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByLnNldFBhdGgoIi8iKTsKICAgICAgICAgcmVx
dWVzdC5zZXRIVFRQUmVmZXJyZXIoci5zdHJpbmcoKSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJp
bmcgZG9tYWluID0gci5ob3N0KCk7Ci0gICAgICAgIGlmIChkbC0+ZG9jKCktPmlzSFRNTERvY3Vt
ZW50KCkpCi0gICAgICAgICAgICBkb21haW4gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihk
bC0+ZG9jKCkpLT5kb21haW4oKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6
OmNyZWF0ZShkbC0+ZG9jKCktPmZyYW1lKCksCiAgICAgICAgICAgICB0aGlzLCByZXF1ZXN0LCBy
ZXEtPnNob3VsZFNraXBDYW5Mb2FkQ2hlY2soKSwgcmVxLT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKCkpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCShyZXZpc2lv
biAzMDExOCkKKysrIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE4LDEzICsyMTgsMTEgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFs
bEljb25zKCkKIEltYWdlKiBJY29uRGF0YWJhc2U6Omljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmlu
ZyYgcGFnZVVSTE9yaWdpbmFsLCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGNhY2hlKQogeyAg
IAogICAgIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKTsKLSAgICAKLSAgICBBU1NFUlQoIXBhZ2VV
UkxPcmlnaW5hbC5pc051bGwoKSk7CiAKICAgICAvLyBwYWdlVVJMT3JpZ2luYWwgY2FuIG5vdCBi
ZSBzdG9yZWQgd2l0aG91dCBiZWluZyBkZWVwIGNvcGllZCBmaXJzdC4gIAogICAgIC8vIFdlIHNo
b3VsZCBnbyBvdXIgb2Ygb3VyIHdheSB0byBvbmx5IGNvcHkgaXQgaWYgd2UgaGF2ZSB0byBzdG9y
ZSBpdAogICAgIAotICAgIGlmICghaXNPcGVuKCkpCisgICAgaWYgKCFpc09wZW4oKSB8fCBwYWdl
VVJMT3JpZ2luYWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdEljb24oc2l6ZSk7
CiAKICAgICBNdXRleExvY2tlciBsb2NrZXIobV91cmxBbmRJY29uTG9jayk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VS
TC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiAKK3R5cGVkZWYgVmVjdG9yPFVDaGFyLCA1MTI+IFRlbXBVQ2hhckJ1
ZmZlcjsKK3R5cGVkZWYgVmVjdG9yPGNoYXIsIDUxMj4gVGVtcENoYXJCdWZmZXI7CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogZW51bSBVUkxDaGFyYWN0ZXJDbGFzc2VzIHsKQEAgLTc4LDcgKzgx
LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgaGV4RGlnaXRzWzE3XSA9ICIwMTIzNAogCiBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXJDbGFzc1RhYmxlWzI1Nl0gPSB7CiAgICAgLyog
MCBudWwgKi8gUGF0aFNlZ21lbnRFbmRDaGFyLCAgICAvKiAxIHNvaCAqLyBCYWRDaGFyLAotICAg
IC8qIDIgc3R4ICovIEJhZENoYXIsICAgIC8qIDMgZXR4ICovIEJhZENoYXIsICAgIAorICAgIC8q
IDIgc3R4ICovIEJhZENoYXIsICAgIC8qIDMgZXR4ICovIEJhZENoYXIsCiAgICAgLyogNCBlb3Qg
Ki8gQmFkQ2hhciwgICAgLyogNSBlbnEgKi8gQmFkQ2hhciwgICAgLyogNiBhY2sgKi8gQmFkQ2hh
ciwgICAgLyogNyBiZWwgKi8gQmFkQ2hhciwKICAgICAvKiA4IGJzICovIEJhZENoYXIsICAgICAv
KiA5IGh0ICovIEJhZENoYXIsICAgIC8qIDEwIG5sICovIEJhZENoYXIsICAgIC8qIDExIHZ0ICov
IEJhZENoYXIsCiAgICAgLyogMTIgbnAgKi8gQmFkQ2hhciwgICAgLyogMTMgY3IgKi8gQmFkQ2hh
ciwgICAgLyogMTQgc28gKi8gQmFkQ2hhciwgICAgLyogMTUgc2kgKi8gQmFkQ2hhciwKQEAgLTg3
LDE0ICs5MCwxNCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXJDbGFzCiAg
ICAgLyogMjQgY2FuICovIEJhZENoYXIsICAgLyogMjUgZW0gKi8gQmFkQ2hhciwgICAgLyogMjYg
c3ViICovIEJhZENoYXIsICAgLyogMjcgZXNjICovIEJhZENoYXIsCiAgICAgLyogMjggZnMgKi8g
QmFkQ2hhciwgICAgLyogMjkgZ3MgKi8gQmFkQ2hhciwgICAgLyogMzAgcnMgKi8gQmFkQ2hhciwg
ICAgLyogMzEgdXMgKi8gQmFkQ2hhciwKICAgICAvKiAzMiBzcCAqLyBCYWRDaGFyLCAgICAvKiAz
MyAgISAqLyBVc2VySW5mb0NoYXIsCi0gICAgLyogMzQgICIgKi8gQmFkQ2hhciwgICAgLyogMzUg
ICMgKi8gUGF0aFNlZ21lbnRFbmRDaGFyIHwgQmFkQ2hhciwgICAgCisgICAgLyogMzQgICIgKi8g
QmFkQ2hhciwgICAgLyogMzUgICMgKi8gUGF0aFNlZ21lbnRFbmRDaGFyIHwgQmFkQ2hhciwKICAg
ICAvKiAzNiAgJCAqLyBVc2VySW5mb0NoYXIsICAgIC8qIDM3ICAlICovIFVzZXJJbmZvQ2hhciB8
IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyIHwgQmFkQ2hhciwKICAgICAvKiAzOCAgJiAqLyBVc2Vy
SW5mb0NoYXIsICAgIC8qIDM5ICAnICovIFVzZXJJbmZvQ2hhciwKLSAgICAvKiA0MCAgKCAqLyBV
c2VySW5mb0NoYXIsICAgIC8qIDQxICApICovIFVzZXJJbmZvQ2hhciwgICAgCisgICAgLyogNDAg
ICggKi8gVXNlckluZm9DaGFyLCAgICAvKiA0MSAgKSAqLyBVc2VySW5mb0NoYXIsCiAgICAgLyog
NDIgICogKi8gVXNlckluZm9DaGFyLCAgICAvKiA0MyAgKyAqLyBTY2hlbWVDaGFyIHwgVXNlcklu
Zm9DaGFyLAotICAgIC8qIDQ0ICAsICovIFVzZXJJbmZvQ2hhciwgICAgCi0gICAgLyogNDUgIC0g
Ki8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwgCi0gICAgLyogNDYg
IC4gKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwgICAKKyAgICAv
KiA0NCAgLCAqLyBVc2VySW5mb0NoYXIsCisgICAgLyogNDUgIC0gKi8gU2NoZW1lQ2hhciB8IFVz
ZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwKKyAgICAvKiA0NiAgLiAqLyBTY2hlbWVDaGFyIHwg
VXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyLAogICAgIC8qIDQ3ICAvICovIFBhdGhTZWdtZW50
RW5kQ2hhciwKICAgICAvKiA0OCAgMCAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9z
dG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsIAogICAgIC8qIDQ5ICAxICovIFNj
aGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJ
UHY2Q2hhciwgICAgCkBAIC0yMDQsMTUgKzIwNywxOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBjaGFyYWN0ZXJDbGFzCiB9OwogCiBzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3Rz
KGNoYXIqIGRzdCwgY29uc3QgY2hhciogc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQpOwot
c3RhdGljIGNoYXIqIGVuY29kZVJlbGF0aXZlU3RyaW5nKGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmIHJlbCwgY29uc3QgVGV4dEVuY29kaW5nJik7Ci1zdGF0aWMgRGVw
cmVjYXRlZFN0cmluZyBzdWJzdGl0dXRlQmFja3NsYXNoZXMoY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyAmc3RyaW5nKTsKLQotc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKHVuc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFNjaGVtZUZpcnN0
Q2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hhcih1bnNpZ25lZCBjaGFyIGMp
IHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hlbWVDaGFyOyB9CitzdGF0aWMg
dm9pZCBlbmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBTdHJpbmcmIHJlbCwgY29uc3QgVGV4dEVu
Y29kaW5nJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBDaGFyQnVmZmVy
KiBvdXB1dCk7CitzdGF0aWMgU3RyaW5nIHN1YnN0aXR1dGVCYWNrc2xhc2hlcyhjb25zdCBTdHJp
bmcmIHN0cmluZyk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUZpcnN0Q2hhcihjaGFy
IGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbc3RhdGljX2Nhc3Q8aW50PihjKV0gJiBT
Y2hlbWVGaXJzdENoYXI7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUZpcnN0Q2hhcihV
Q2hhciBjKSB7IHJldHVybiBjIDw9IDB4ZmYgPyAoY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFNj
aGVtZUZpcnN0Q2hhcikgOiBmYWxzZTsgfQorc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hh
cihjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbc3RhdGljX2Nhc3Q8aW50Pihj
KV0gJiBTY2hlbWVDaGFyOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY2hlbWVDaGFyKFVDaGFy
IGMpIHsgcmV0dXJuIGMgPD0gMHhmZiA/IChjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1l
Q2hhcikgOiBmYWxzZTsgfQogc3RhdGljIGlubGluZSBib29sIGlzVXNlckluZm9DaGFyKHVuc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFVzZXJJbmZvQ2hh
cjsgfQogc3RhdGljIGlubGluZSBib29sIGlzSG9zdG5hbWVDaGFyKHVuc2lnbmVkIGNoYXIgYykg
eyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIEhvc3RuYW1lQ2hhcjsgfQogc3RhdGlj
IGlubGluZSBib29sIGlzSVB2NkNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0
ZXJDbGFzc1RhYmxlW2NdICYgSVB2NkNoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1BhdGhT
ZWdtZW50RW5kQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFi
bGVbY10gJiBQYXRoU2VnbWVudEVuZENoYXI7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1BhdGhT
ZWdtZW50RW5kQ2hhcihjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbc3RhdGlj
X2Nhc3Q8aW50PihjKV0gJiBQYXRoU2VnbWVudEVuZENoYXI7IH0KK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc1BhdGhTZWdtZW50RW5kQ2hhcihVQ2hhciBjKSB7IHJldHVybiBjIDw9IDB4ZmYgPyAoY2hh
cmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFBhdGhTZWdtZW50RW5kQ2hhcikgOiBmYWxzZTsgfQogc3Rh
dGljIGlubGluZSBib29sIGlzQmFkQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJh
Y3RlckNsYXNzVGFibGVbY10gJiBCYWRDaGFyOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNIZXhE
aWdpdCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBI
ZXhEaWdpdENoYXI7IH0KIApAQCAtMjI0LDEzICsyMzEsNDYgQEAgc3RhdGljIGlubGluZSBpbnQg
aGV4RGlnaXRWYWx1ZSh1bnNpZ25lZAogICAgIHJldHVybiAoYyAtICdBJyArIDEwKSAmIDB4Rjsg
Ly8gaGFuZGxlIGJvdGggdXBwZXIgYW5kIGxvd2VyIGNhc2Ugd2l0aG91dCBhIGJyYW5jaAogfQog
CitzdGF0aWMgYm9vbCBpc0FsbEFTQ0lJKGNvbnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW4pCit7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJMZW47IGkrKykgeworICAgICAgICBpZiAoc3Ry
W2ldID4gMHg3ZikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIENvcGllcyB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbiwgYXNz
dW1pbmcgYWxsIHRoZSBzb3VyY2UgY2hhcmFjdGVycyBhcmUKKy8vIEFTQ0lJLiBUaGUgZGV0aW5h
dGlvbiBidWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2gsIGFuZCBpdCBpcyBub3QgbnVsbAorLy8g
dGVybWluYXRlZCB1bmxlc3MgdGhlIHNvdXJjZSBoYXMgYSBudWxsLgorc3RhdGljIHZvaWQgY29w
eUFTQ0lJKGNvbnN0IFVDaGFyKiBzcmMsIGludCBsZW5ndGgsIGNoYXIqIGRlc3QpCit7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZGVzdFtpXSA9IHN0YXRp
Y19jYXN0PGNoYXI+KHNyY1tpXSk7Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBm
aXJzdCBpbmRleCBpbiBzdHJpbmcgfHN8IG9mIGFueSBvZiB0aGUgY2hhcmFjdGVycworLy8gaW4g
fHRvRmluZHwuIHx0b0ZpbmR8IHNob3VsZCBiZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIGFs
bCBjaGFyYWN0ZXJzIHVwCisvLyB0byB0aGUgbnVsbCB3aWxsIGJlIHNlYXJjaGVkLiBSZXR1cm5z
IGludCBpZiBub3QgZm91bmQuCitzdGF0aWMgaW50IGZpbmRGaXJzdE9mKGNvbnN0IFVDaGFyKiBz
LCBpbnQgc0xlbiwgaW50IHN0YXJ0UG9zLCBjb25zdCBjaGFyKiB0b0ZpbmQpCit7CisgICAgZm9y
IChpbnQgaSA9IHN0YXJ0UG9zOyBpIDwgc0xlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IGNoYXIq
IGN1ciA9IHRvRmluZDsKKyAgICAgICAgd2hpbGUgKCpjdXIpIHsKKyAgICAgICAgICAgIGlmIChz
W2ldID09ICooY3VyKyspKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiAtMTsKK30KKwogLy8gS1VSTAogCiBLVVJMOjpLVVJMKCkgOiBtX2lz
VmFsaWQoZmFsc2UpCiB7CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgY2hhciAqdXJsKQorS1VSTDo6
S1VSTChjb25zdCBjaGFyKiB1cmwpCiB7CiAgICAgaWYgKHVybCAmJiB1cmxbMF0gPT0gJy8nKSB7
CiAgICAgICAgICAvLyA1IGZvciAiZmlsZToiLCAxIGZvciB0ZXJtaW5hdG9yCkBAIC0yNDIsMTIg
KzI4MiwxMyBAQCBLVVJMOjpLVVJMKGNvbnN0IGNoYXIgKnVybCkKICAgICAgICAgYnVmZmVyWzNd
ID0gJ2UnOwogICAgICAgICBidWZmZXJbNF0gPSAnOic7CiAgICAgICAgIG1lbWNweSgmYnVmZmVy
WzVdLCB1cmwsIHVybExlbmd0aCk7CisgICAgICAgIGJ1ZmZlclt1cmxMZW5ndGggKyA0XSA9IDA7
ICAvLyBOZWVkIG51bGwgdGVybWluYXRvci4KICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwg
MCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBhcnNlKHVybCwgMCk7CiB9CiAKLUtVUkw6OktVUkwo
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXJsKQorS1VSTDo6S1VSTChjb25zdCBTdHJpbmcmIHVy
bCkKIHsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgdXJsWzBdID09ICcvJykgewogICAgICAg
ICAvLyA1IGZvciAiZmlsZToiLCAxIGZvciB0ZXJtaW5hdG9yCkBAIC0yNTcsNTEgKzI5OCw1OSBA
QCBLVVJMOjpLVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnVybCkKICAgICAgICAgYnVmZmVy
WzJdID0gJ2wnOwogICAgICAgICBidWZmZXJbM10gPSAnZSc7CiAgICAgICAgIGJ1ZmZlcls0XSA9
ICc6JzsKLSAgICAgICAgdXJsLmNvcHlMYXRpbjEoJmJ1ZmZlcls1XSk7CisgICAgICAgIGNvcHlB
U0NJSSh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCksICZidWZmZXJbNV0pOworICAgICAg
ICBidWZmZXJbdXJsLmxlbmd0aCgpICsgNF0gPSAwOyAgLy8gTmVlZCBudWxsIHRlcm1pbmF0b3Iu
CiAgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwotICAgIH0gZWxzZQotICAgICAgICBw
YXJzZSh1cmwuYXNjaWkoKSwgJnVybCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90ZSB0
aGF0IHdlIGRvbid0IHBhc3MgYW55dGhpbmcgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gV2hlbiB0
aGUKKyAgICAgICAgLy8gaW5uYXJkcyBvZiBLVVJMIGFyZSBjb252ZXJ0ZWQgZnJvbSBEZXByZWNh
dGVkU3RyaW5nIHRvIFN0cmluZywgdGhpcworICAgICAgICAvLyBzaG91bGQgYmUgcHV0IGJhY2su
IEl0IGlzIGFuIG9wdGltaXphdGlvbiB0aGF0IHByZXZlbnRzIGFsbG9jYXRpbmcKKyAgICAgICAg
Ly8gYW5vdGhlciBzdHJpbmcgaW4gdGhlIGNvbW1vbiBjYXNlIHRoYXQgbm90aGluZyBjaGFuZ2Vz
LgorICAgICAgICBwYXJzZSh1cmwudXRmOCgpLmRhdGEoKSwgMCk7CisgICAgfQogfQogCi1LVVJM
OjpLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHJlbGF0aXZl
KQorS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlKQog
ewogICAgIGluaXQoYmFzZSwgcmVsYXRpdmUsIFVURjhFbmNvZGluZygpKTsKIH0KIAotS1VSTDo6
S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiByZWxhdGl2ZSwg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK0tVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFz
ZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykK
IHsKICAgICBpbml0KGJhc2UsIHJlbGF0aXZlLCBlbmNvZGluZyk7CiB9CiAKLXZvaWQgS1VSTDo6
aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZyZWxhdGl2ZSwg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3ZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJM
JiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQogewogICAgIC8vIEFsbG93IGF0IGxlYXN0IGFic29sdXRlIFVSTHMgdG8gcmVzb2x2ZSBh
Z2FpbnN0IGFuIGVtcHR5IFVSTC4KICAgICBpZiAoIWJhc2UubV9pc1ZhbGlkICYmICFiYXNlLmlz
RW1wdHkoKSkgewogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAKKwogICAgIGJvb2wgYWJzb2x1dGUgPSBmYWxzZTsKIAogICAgIC8vIGZvciBj
b21wYXRpYmlsaXR5IHdpdGggV2luIElFLCB3ZSBtdXN0IHRyZWF0IGJhY2tzbGFzaGVzIGFzIGlm
IHRoZXkgd2VyZSBzbGFzaGVzLCBhcyBsb25nIGFzIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdGhl
IGphdmFzY3JpcHQ6IHNjaGVtYQotICAgIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0ZWRSZWxh
dGl2ZTsKKyAgICBTdHJpbmcgc3Vic3RpdHV0ZWRSZWxhdGl2ZTsKICAgICBib29sIHNob3VsZFN1
YnN0aXR1dGVCYWNrc2xhc2hlcyA9IHJlbGF0aXZlLmNvbnRhaW5zKCdcXCcpICYmICEocmVsYXRp
dmUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgcmVsYXRpdmUuc3RhcnRzV2l0
aCgiZGF0YToiLCBmYWxzZSkpOwogICAgIGlmIChzaG91bGRTdWJzdGl0dXRlQmFja3NsYXNoZXMp
CiAgICAgICAgIHN1YnN0aXR1dGVkUmVsYXRpdmUgPSBzdWJzdGl0dXRlQmFja3NsYXNoZXMocmVs
YXRpdmUpOwogCi0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcmVsID0gc2hvdWxkU3Vic3Rp
dHV0ZUJhY2tzbGFzaGVzID8gc3Vic3RpdHV0ZWRSZWxhdGl2ZSA6IHJlbGF0aXZlOwotICAgIAot
ICAgIGJvb2wgYWxsQVNDSUkgPSByZWwuaXNBbGxBU0NJSSgpOwotICAgIGNoYXIgKnN0ckJ1ZmZl
cjsKLSAgICBjb25zdCBjaGFyICpzdHI7CisgICAgY29uc3QgU3RyaW5nJiByZWwgPSBzaG91bGRT
dWJzdGl0dXRlQmFja3NsYXNoZXMgPyBzdWJzdGl0dXRlZFJlbGF0aXZlIDogcmVsYXRpdmU7CisK
KyAgICBib29sIGFsbEFTQ0lJID0gaXNBbGxBU0NJSShyZWwuY2hhcmFjdGVycygpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHJlbC5sZW5ndGgoKSkpOworICAgIFRlbXBDaGFyQnVmZmVyIHN0ckJ1ZmZlcjsK
KyAgICBjaGFyKiBzdHI7CiAgICAgaWYgKGFsbEFTQ0lJKSB7Ci0gICAgICAgIHN0ckJ1ZmZlciA9
IDA7Ci0gICAgICAgIHN0ciA9IHJlbC5hc2NpaSgpOworICAgICAgICBzdHJCdWZmZXIucmVzaXpl
KHJlbC5sZW5ndGgoKSArIDEpOworICAgICAgICBjb3B5QVNDSUkocmVsLmNoYXJhY3RlcnMoKSwg
cmVsLmxlbmd0aCgpLCBzdHJCdWZmZXIuZGF0YSgpKTsKKyAgICAgICAgc3RyQnVmZmVyW3JlbC5s
ZW5ndGgoKV0gPSAwOworICAgICAgICBzdHIgPSBzdHJCdWZmZXIuZGF0YSgpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0ckJ1ZmZlciA9IGVuY29kZVJlbGF0aXZlU3RyaW5nKGJhc2UsIHJlbCwg
ZW5jb2RpbmcpOwotICAgICAgICBzdHIgPSBzdHJCdWZmZXI7CisgICAgICAgIGVuY29kZVJlbGF0
aXZlU3RyaW5nKHJlbCwgZW5jb2RpbmcsICZzdHJCdWZmZXIpOworICAgICAgICBzdHIgPSBzdHJC
dWZmZXIuZGF0YSgpOwogICAgIH0KLSAgICAKKwogICAgIC8vIHdvcmthcm91bmQgZm9yIHNpdGVz
IHRoYXQgcHV0IGxlYWRpbmcgd2hpdGVzcGFjZSB3aGl0ZXNwYWNlIG9uCiAgICAgLy8gVVJMIHJl
ZmVyZW5jZXMKICAgICBib29sIHN0cmlwcGVkU3RhcnQgPSBmYWxzZTsKQEAgLTMxMCwyMCArMzU5
LDExIEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAg
c3RyaXBwZWRTdGFydCA9IHRydWU7CiAgICAgfQogCi0gICAgLy8gd29ya2Fyb3VuZCBmb3IgdHJh
aWxpbmcgd2hpdGVzcGFjZSAtIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgY2F1c2Ugd2UgaGF2ZSB0
byBjb3B5Ci0gICAgLy8gaXQgd291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gcmVwbGFjZSBudWxsLXRl
cm1pbmF0aW9uIHdpdGggYSBsZW5ndGggcGFyYW1ldGVyCisgICAgLy8gR2V0IHJpZCBvZiB0cmFp
bGluZyB3aGl0ZXNwYWNlLgogICAgIGludCBsZW4gPSBzdHJsZW4oc3RyKTsKLSAgICBpbnQgY2hh
cnNUb0Nob3BPZmZFbmQgPSAwOwotICAgIGZvciAoaW50IHBvcyA9IGxlbiAtIDE7IHBvcyA+PSAw
ICYmIHN0cltwb3NdID09ICcgJzsgcG9zLS0pIHsKLSAgICAgICAgY2hhcnNUb0Nob3BPZmZFbmQr
KzsKLSAgICB9Ci0gICAgaWYgKGNoYXJzVG9DaG9wT2ZmRW5kID4gMCkgewotICAgICAgICBjaGFy
ICpuZXdTdHJCdWZmZXIgPSAoY2hhciAqKWZhc3RNYWxsb2MoKGxlbiArIDEpIC0gY2hhcnNUb0No
b3BPZmZFbmQpOwotICAgICAgICBzdHJuY3B5KG5ld1N0ckJ1ZmZlciwgc3RyLCBsZW4gLSBjaGFy
c1RvQ2hvcE9mZkVuZCk7Ci0gICAgICAgIG5ld1N0ckJ1ZmZlcltsZW4gLSBjaGFyc1RvQ2hvcE9m
ZkVuZF0gPSAnXDAnOwotICAgICAgICBmYXN0RnJlZShzdHJCdWZmZXIpOwotICAgICAgICBzdHJC
dWZmZXIgPSBuZXdTdHJCdWZmZXI7Ci0gICAgICAgIHN0ciA9IHN0ckJ1ZmZlcjsKKyAgICB3aGls
ZSAobGVuID4gMCAmJiBzdHJbbGVuIC0gMV0gPT0gJyAnKSB7CisgICAgICBsZW4tLTsKKyAgICAg
IHN0clswXSA9IDA7CiAgICAgfQogCiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBSRkMsIHRoZSBy
ZWZlcmVuY2Ugc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGFuCkBAIC0zMzEsMTQgKzM3MSwxNCBA
QCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAgLy8gYWxnb3Jp
dGhtLiBJZiB0aGUgVVJJIHJlZmVyZW5jZSBpcyBhYnNvbHV0ZSBpdCB3aWxsIGhhdmUgYQogICAg
IC8vIHNjaGVtZSwgbWVhbmluZyB0aGF0IGl0IHdpbGwgaGF2ZSBhIGNvbG9uIGJlZm9yZSB0aGUg
Zmlyc3QKICAgICAvLyBub24tc2NoZW1lIGVsZW1lbnQuCi0gICAgY29uc3QgY2hhciAqcCA9IHN0
cjsKKyAgICBjaGFyKiBwID0gc3RyOwogICAgIGlmIChpc1NjaGVtZUZpcnN0Q2hhcigqcCkpIHsK
ICAgICAgICAgKytwOwogICAgICAgICB3aGlsZSAoaXNTY2hlbWVDaGFyKCpwKSkgewogICAgICAg
ICAgICAgKytwOwogICAgICAgICB9CiAgICAgICAgIGlmICgqcCA9PSAnOicpIHsKLSAgICAgICAg
ICAgIGlmIChwWzFdICE9ICcvJyAmJiBiYXNlLnByb3RvY29sKCkubG93ZXIoKSA9PSBEZXByZWNh
dGVkU3RyaW5nKHN0ciwgcCAtIHN0cikubG93ZXIoKSAmJiBiYXNlLmlzSGllcmFyY2hpY2FsKCkp
CisgICAgICAgICAgICBpZiAocFsxXSAhPSAnLycgJiYgYmFzZS5wcm90b2NvbCgpLmxvd2VyKCkg
PT0gU3RyaW5nKHN0ciwgcCAtIHN0cikubG93ZXIoKSAmJiBiYXNlLmlzSGllcmFyY2hpY2FsKCkp
CiAgICAgICAgICAgICAgICAgc3RyID0gcCArIDE7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgYWJzb2x1dGUgPSB0cnVlOwpAQCAtMzQ2LDE5ICszODYsMTkgQEAgdm9pZCBLVVJM
Ojppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgIH0KIAogICAgIGlmIChhYnNvbHV0
ZSkgewotICAgICAgICBwYXJzZShzdHIsIChhbGxBU0NJSSAmJiAhc3RyaXBwZWRTdGFydCAmJiAo
Y2hhcnNUb0Nob3BPZmZFbmQgPT0gMCkpID8gJnJlbCA6IDApOworICAgICAgICAvLyBUT0RPOiB3
aGVuIHBhcnNlIHRha2VzIGEgU3RyaW5nLCB3ZSBzaG91bGQgcHV0IGJhY2sgdGhlIG9wdGltaXph
dGlvbgorICAgICAgICAvLyBmb3IgdW5jaGFuZ2VkIHN0cmluZ3MuCisgICAgICAgIHBhcnNlKHN0
ciwgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhlIGJhc2UgaXMgZW1wdHkgb3Ig
b3BhcXVlIChlLmcuIGRhdGE6IG9yIGphdmFzY3JpcHQ6KSwgdGhlbiB0aGUgVVJMIGlzIGludmFs
aWQKICAgICAgICAgLy8gdW5sZXNzIHRoZSByZWxhdGl2ZSBVUkwgaXMgYSBzaW5nbGUgZnJhZ21l
bnQuCiAgICAgICAgIGlmICghYmFzZS5pc0hpZXJhcmNoaWNhbCgpKSB7CiAgICAgICAgICAgICBp
ZiAoc3RyWzBdID09ICcjJykgewogICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3
VVJMID0gYmFzZS51cmxTdHJpbmcubGVmdChiYXNlLnF1ZXJ5RW5kUG9zKSArIHN0cjsKLSAgICAg
ICAgICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgICAgICAg
ICAgcGFyc2UobmV3VVJMLmFzY2lpKCksIDApOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChzdHJCdWZmZXIpCi0gICAgICAgICAgICAgICAgZmFzdEZyZWUoc3RyQnVmZmVyKTsKKwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM3NCwxNCArNDE0LDE0IEBAIHZvaWQg
S1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgIC8vIG11c3Qg
YmUgZnJhZ21lbnQtb25seSByZWZlcmVuY2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5xdWVy
eUVuZFBvcykgKyBzdHI7Ci0gICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZu
ZXdVUkwpOworICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSAnPyc6CiAgICAg
ICAgICAgICAvLyBxdWVyeS1vbmx5IHJlZmVyZW5jZSwgc3BlY2lhbCBjYXNlIG5lZWRlZCBmb3Ig
bm9uLVVSTCByZXN1bHRzCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRl
ZFN0cmluZyBuZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2UucGF0aEVuZFBvcykgKyBz
dHI7Ci0gICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAg
ICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSAnLyc6CkBAIC0zOTAsMTEgKzQzMCwx
MSBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAgICAgICAg
ICAgICAgaWYgKHN0clsxXSA9PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbmV0LXBh
dGgKICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBiYXNlLnVy
bFN0cmluZy5sZWZ0KGJhc2Uuc2NoZW1lRW5kUG9zICsgMSkgKyBzdHI7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGFyc2UobmV3VVJMLmFzY2lpKCksIDApOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGFicy1wYXRoCiAgICAgICAgICAgICAgICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgbmV3VVJMID0gYmFzZS51cmxTdHJpbmcubGVmdChiYXNlLnBvcnRFbmRQb3Mp
ICsgc3RyOwotICAgICAgICAgICAgICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VS
TCk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00
MDUsNDUgKzQ0NSw0MSBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3Qg
CiAgICAgICAgICAgICAgICAgLy8gQmFzZSBwYXJ0IHBsdXMgcmVsYXRpdmUgcGFydCBwbHVzIG9u
ZSBwb3NzaWJsZSBzbGFzaCBhZGRlZCBpbiBiZXR3ZWVuIHBsdXMgdGVybWluYXRpbmcgXDAgYnl0
ZS4KICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhciwgMjA0OD4gYnVmZmVyKGJhc2UucGF0aEVu
ZFBvcyArIDEgKyBzdHJsZW4oc3RyKSArIDEpOwogCi0gICAgICAgICAgICAgICAgY2hhciAqYnVm
ZmVyUG9zID0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjaGFyKiBidWZmZXJQb3MgPSBidWZmZXIuZGF0YSgpOworCiAgICAgICAgICAgICAgICAgLy8g
Zmlyc3QgY29weSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcGF0aCBmcm9tIHRoZSBiYXNlCi0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZyA9IGJhc2UudXJsU3RyaW5nLmFzY2lp
KCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1N0YXJ0ID0gYmFzZVN0
cmluZzsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoU3RhcnQgPSBiYXNlU3RyaW5n
U3RhcnQgKyBiYXNlLnBvcnRFbmRQb3M7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJhc2VTdHJp
bmdTdGFydCA8IHBhdGhTdGFydCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VT
dHJpbmcgPSBiYXNlLnVybFN0cmluZy5hc2NpaSgpOworICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGJhc2VTdHJpbmdTdGFydCA9IGJhc2VTdHJpbmc7CisgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogcGF0aFN0YXJ0ID0gYmFzZVN0cmluZ1N0YXJ0ICsgYmFzZS5wb3J0RW5kUG9zOworICAg
ICAgICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nU3RhcnQgPCBwYXRoU3RhcnQpCiAgICAgICAg
ICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICpiYXNlU3RyaW5nU3RhcnQrKzsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyUGF0aFN0YXJ0ID0gYnVmZmVy
UG9zOworICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlclBhdGhTdGFydCA9IGJ1ZmZlclBvczsK
KworICAgICAgICAgICAgICAgIC8vIG5vdyBjb3B5IHRoZSBiYXNlIHBhdGgKKyAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nRW5kID0gYmFzZVN0cmluZyArIGJhc2UucGF0aEVu
ZFBvczsKIAotICAgICAgICAgICAgICAgIC8vIG5vdyBjb3B5IHRoZSBiYXNlIHBhdGggCi0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ0VuZCA9IGJhc2VTdHJpbmcgKyBiYXNl
LnBhdGhFbmRQb3M7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gZ28gYmFj
ayB0byB0aGUgbGFzdCBzbGFzaAotICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nRW5k
ID4gYmFzZVN0cmluZ1N0YXJ0ICYmIGJhc2VTdHJpbmdFbmRbLTFdICE9ICcvJykgeworICAgICAg
ICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nRW5kID4gYmFzZVN0cmluZ1N0YXJ0ICYmIGJhc2VT
dHJpbmdFbmRbLTFdICE9ICcvJykKICAgICAgICAgICAgICAgICAgICAgYmFzZVN0cmluZ0VuZC0t
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
IGlmIChiYXNlU3RyaW5nRW5kID09IGJhc2VTdHJpbmdTdGFydCkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBubyBwYXRoIGluIGJhc2UsIGFkZCBhIHBhdGggc2VwYXJhdG9yIGlmIG5lY2Vzc2Fy
eQotICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZS5zY2hlbWVFbmRQb3MgKyAxICE9IGJhc2Uu
cGF0aEVuZFBvcyAmJiAqc3RyICE9ICdcMCcgJiYgKnN0ciAhPSAnPycgJiYgKnN0ciAhPSAnIycp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2Uuc2NoZW1lRW5kUG9zICsgMSAhPSBiYXNl
LnBhdGhFbmRQb3MgJiYgKnN0ciAhPSAnXDAnICYmICpzdHIgIT0gJz8nICYmICpzdHIgIT0gJyMn
KQogICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlclBvcysrID0gJy8nOwotICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyUG9zICs9IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGJ1ZmZlclBvcywgYmFzZVN0cmlu
Z1N0YXJ0LCAwLCBiYXNlU3RyaW5nRW5kIC0gYmFzZVN0cmluZ1N0YXJ0KTsKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWxTdHJpbmdTdGFydCA9IHN0
cjsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWxTdHJpbmdQb3MgPSByZWxTdHJpbmdT
dGFydDsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWxT
dHJpbmdTdGFydCA9IHN0cjsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWxTdHJpbmdQ
b3MgPSByZWxTdHJpbmdTdGFydDsKKwogICAgICAgICAgICAgICAgIHdoaWxlICgqcmVsU3RyaW5n
UG9zICE9ICdcMCcgJiYgKnJlbFN0cmluZ1BvcyAhPSAnPycgJiYgKnJlbFN0cmluZ1BvcyAhPSAn
IycpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLicgJiYg
YnVmZmVyUG9zWy0xXSA9PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Bh
dGhTZWdtZW50RW5kQ2hhcihyZWxTdHJpbmdQb3NbMV0pKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc2tpcCBvdmVyICIuIiBzZWdtZW50CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVsU3RyaW5nUG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVsU3RyaW5nUG9zWzBdID09ICcvJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVsU3RyaW5nUG9zKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChyZWxTdHJpbmdQb3NbMV0gPT0gJy4nICYmIGlzUGF0aFNlZ21lbnRFbmRDaGFy
KHJlbFN0cmluZ1Bvc1syXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lw
IG92ZXIgIi4uIiBzZWdtZW50IGFuZCByZXdpbmQgdGhlIGxhc3Qgc2VnbWVudApAQCAtNDUxLDE5
ICs0ODcsMTYgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICIuLiIgc2VnbWVudHMgLSB3ZSBjaG9vc2UgdG8g
ZHJvcCB0aGVtIHNpbmNlIHNvbWUgd2ViIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyByZWxpZXMgb24gdGhpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxT
dHJpbmdQb3MgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsU3RyaW5n
UG9zWzBdID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJp
bmdQb3NbMF0gPT0gJy8nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJp
bmdQb3MrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFydCArIDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsg
MSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyUG9zLS07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
IChidWZmZXJQb3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxICAmJiBidWZmZXJQb3NbLTFdICE9ICcv
JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChidWZmZXJQb3MgPiBidWZm
ZXJQYXRoU3RhcnQgKyAxICAmJiBidWZmZXJQb3NbLTFdICE9ICcvJykKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyUG9zLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IAorCiAgICAgICAgICAgICAgICAgICAgICpidWZmZXJQb3MgPSAqcmVsU3RyaW5nUG9zOwogICAg
ICAgICAgICAgICAgICAgICByZWxTdHJpbmdQb3MrKzsKICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyUG9zKys7CkBAIC00NzQsMTYgKzUwNywxMiBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VS
TCAmYmFzZSwgY29uc3QgCiAgICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZmZlclBvcywgcmVsU3Ry
aW5nUG9zKTsKIAogICAgICAgICAgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwotICAg
ICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cmxlbihidWZmZXIuZGF0
YSgpKSArIDEgPD0gYnVmZmVyLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKHN0ckJ1ZmZlcikgewot
ICAgICAgICBmYXN0RnJlZShzdHJCdWZmZXIpOwotICAgIH0KIH0KIAogYm9vbCBLVVJMOjpoYXNQ
YXRoKCkgY29uc3QKQEAgLTQ5MSwxMCArNTIwLDEwIEBAIGJvb2wgS1VSTDo6aGFzUGF0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIG1faXNWYWxpZCAmJiBwYXRoRW5kUG9zICE9IHBvcnRFbmRQb3M7CiB9
CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21wb25lbnQoKSBjb25zdAorU3Ry
aW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKIHsKICAgICBpZiAoIWhhc1BhdGgo
KSkKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCiAgICAgaW50IGVuZCA9IHBhdGhFbmRQb3MgLSAxOwogICAgIGlmICh1cmxTdHJp
bmdbZW5kXSA9PSAnLycpCkBAIC01MDgsMTkgKzUzNywxOSBAQCBEZXByZWNhdGVkU3RyaW5nIEtV
Ukw6Omxhc3RQYXRoQ29tcG9uZW50CiAgICAgcmV0dXJuIHVybFN0cmluZy5taWQoc3RhcnQsIGVu
ZCAtIHN0YXJ0ICsgMSk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6cHJvdG9jb2woKSBj
b25zdAorU3RyaW5nIEtVUkw6OnByb3RvY29sKCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxp
ZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHVybFN0cmluZy5sZWZ0KHNjaGVtZUVuZFBv
cyk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0CitTdHJpbmcgS1VS
TDo6aG9zdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJu
IERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAog
ICAgIGludCBzdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dv
cmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7CkBAIC01NDUsMzIgKzU3NCwzMiBAQCB1bnNp
Z25lZCBzaG9ydCBpbnQgS1VSTDo6cG9ydCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLURl
cHJlY2F0ZWRTdHJpbmcgS1VSTDo6cGFzcygpIGNvbnN0CitTdHJpbmcgS1VSTDo6cGFzcygpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAogICAgIGlmIChwYXNz
d29yZEVuZFBvcyA9PSB1c2VyRW5kUG9zKSB7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVj
b2RlX3N0cmluZyh1cmxTdHJpbmcubWlkKHVzZXJFbmRQb3MgKyAxLCBwYXNzd29yZEVuZFBvcyAt
IHVzZXJFbmRQb3MgLSAxKSk7IAogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnVzZXIoKSBj
b25zdAorU3RyaW5nIEtVUkw6OnVzZXIoKSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlkKSB7
Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVjb2RlX3N0cmluZyh1cmxTdHJpbmcubWlkKHVz
ZXJTdGFydFBvcywgdXNlckVuZFBvcyAtIHVzZXJTdGFydFBvcykpOwogfQogCi1EZXByZWNhdGVk
U3RyaW5nIEtVUkw6OnJlZigpIGNvbnN0CitTdHJpbmcgS1VSTDo6cmVmKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1faXNWYWxpZCB8fCBmcmFnbWVudEVuZFBvcyA9PSBxdWVyeUVuZFBvcykgewotICAg
ICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHVybFN0cmluZy5taWQocXVlcnlFbmRQb3MgKyAxLCBmcmFn
bWVudEVuZFBvcyAtIChxdWVyeUVuZFBvcyArIDEpKTsKQEAgLTU4MSw0NCArNjEwLDU2IEBAIGJv
b2wgS1VSTDo6aGFzUmVmKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1ZhbGlkICYmIGZyYWdtZW50
RW5kUG9zICE9IHF1ZXJ5RW5kUG9zOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnF1ZXJ5
KCkgY29uc3QKK2Jvb2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBjaGFyKiBwcm90b2NvbCkgY29u
c3QKK3sKKyAgICAvLyBEbyB0aGUgY29tcGFyaXNvbiB3aXRob3V0IG1ha2luZyBhIG5ldyBzdHJp
bmcgb2JqZWN0LgorICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzY2hlbWVFbmRQb3M7
IGkrKykgeworICAgICAgICBpZiAoIXByb3RvY29sW2ldIHx8IHRvQVNDSUlMb3dlcih1cmxTdHJp
bmdbaV0udW5pY29kZSgpKSAhPSBwcm90b2NvbFtpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgQVNTRVJUKHByb3RvY29sW2ldID49ICcgJyAmJiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihwcm90b2NvbFtpXSkgPD0gMHg3ZiAmJiAhKHByb3RvY29sW2ldID49ICdBJyAm
JiBwcm90b2NvbFtpXSA8PSAnWicpKTsKKyAgICB9CisgICAgcmV0dXJuICFwcm90b2NvbFtpXTsg
IC8vIFdlIHNob3VsZCBoYXZlIGNvbnN1bWVkIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBhcmd1bWVu
dC4KK30KKworU3RyaW5nIEtVUkw6OnF1ZXJ5KCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxp
ZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHVybFN0cmluZy5taWQocGF0aEVuZFBvcywg
cXVlcnlFbmRQb3MgLSBwYXRoRW5kUG9zKTsgCiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6
cGF0aCgpIGNvbnN0CitTdHJpbmcgS1VSTDo6cGF0aCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lz
VmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIH0KIAogICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmlu
Zy5taWQocG9ydEVuZFBvcywgcGF0aEVuZFBvcyAtIHBvcnRFbmRQb3MpKTsgCiB9CiAKLXZvaWQg
S1VSTDo6c2V0UHJvdG9jb2woY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6
c2V0UHJvdG9jb2woY29uc3QgU3RyaW5nJiBzKQogewogICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0g
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gcyArICI6IiArIHVybFN0cmluZzsKLSAg
ICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICBEZXByZWNhdGVk
U3RyaW5nIG5ld1VSTCA9IHMuZGVwcmVjYXRlZFN0cmluZygpICsgIjoiICsgdXJsU3RyaW5nOwor
ICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHMgKyB1cmxTdHJpbmcubWlkKHNjaGVt
ZUVuZFBvcyk7Ci0gICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgIERlcHJl
Y2F0ZWRTdHJpbmcgbmV3VVJMID0gcy5kZXByZWNhdGVkU3RyaW5nKCkgKyB1cmxTdHJpbmcubWlk
KHNjaGVtZUVuZFBvcyk7CisgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksIDApOwogfQogCi12b2lk
IEtVUkw6OnNldEhvc3QoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0
SG9zdChjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkgewogICAgICAgICBi
b29sIHNsYXNoU2xhc2hOZWVkZWQgPSB1c2VyU3RhcnRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMTsK
ICAgICAgICAgaW50IGhvc3RTdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQb3Mp
ID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7Ci0gICAgICAgIAotICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KGhvc3RTdGFydCkgKyAo
c2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiBEZXByZWNhdGVkU3RyaW5nKCkpICsgcyArIHVybFN0
cmluZy5taWQoaG9zdEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3
VVJMKTsKKworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0
KGhvc3RTdGFydCkgKyAoc2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiBEZXByZWNhdGVkU3RyaW5n
KCkpICsgcy5kZXByZWNhdGVkU3RyaW5nKCkgKyB1cmxTdHJpbmcubWlkKGhvc3RFbmRQb3MpOwor
ICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgMCk7CiAgICAgfQogfQogCkBAIC02MjgsMjgg
KzY2OSwyOCBAQCB2b2lkIEtVUkw6OnNldFBvcnQodW5zaWduZWQgc2hvcnQgaSkKICAgICAgICAg
Ym9vbCBjb2xvbk5lZWRlZCA9IHBvcnRFbmRQb3MgPT0gaG9zdEVuZFBvczsKICAgICAgICAgaW50
IHBvcnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IGhvc3RFbmRQb3MgOiBob3N0RW5kUG9zICsgMSk7
CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocG9ydFN0
YXJ0KSArIChjb2xvbk5lZWRlZCA/ICI6IiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIoaSkgKyB1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MpOwotICAgICAg
ICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5h
c2NpaSgpLCAwKTsKICAgICB9CiB9CiAKLXZvaWQgS1VSTDo6c2V0SG9zdEFuZFBvcnQoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyYgaG9zdEFuZFBvcnQpCit2b2lkIEtVUkw6OnNldEhvc3RBbmRQb3J0
KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkgewogICAg
ICAgICBib29sIHNsYXNoU2xhc2hOZWVkZWQgPSB1c2VyU3RhcnRQb3MgPT0gc2NoZW1lRW5kUG9z
ICsgMTsKICAgICAgICAgaW50IGhvc3RTdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3Rh
cnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7Ci0gICAgICAgIAot
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KGhvc3RTdGFy
dCkgKyAoc2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiBEZXByZWNhdGVkU3RyaW5nKCkpICsgaG9z
dEFuZFBvcnQgKyB1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MpOwotICAgICAgICBwYXJzZShuZXdV
UkwuYXNjaWkoKSwgJm5ld1VSTCk7CisKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwg
PSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDog
RGVwcmVjYXRlZFN0cmluZygpKSArIGhvc3RBbmRQb3J0LmRlcHJlY2F0ZWRTdHJpbmcoKSArIHVy
bFN0cmluZy5taWQocG9ydEVuZFBvcyk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAw
KTsKICAgICB9CiB9CiAKLXZvaWQgS1VSTDo6c2V0VXNlcihjb25zdCBEZXByZWNhdGVkU3RyaW5n
ICZ1c2VyKQordm9pZCBLVVJMOjpzZXRVc2VyKGNvbnN0IFN0cmluZyYgdXNlcikKIHsKICAgICBp
ZiAobV9pc1ZhbGlkKSB7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdTsKICAgICAgICAgaW50
IGVuZCA9IHVzZXJFbmRQb3M7CiAgICAgICAgIGlmICghdXNlci5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIHUgPSB1c2VyOworICAgICAgICAgICAgdSA9IHVzZXIuZGVwcmVjYXRlZFN0cmluZygp
OwogICAgICAgICAgICAgaWYgKHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxKQogICAg
ICAgICAgICAgICAgIHUgPSAiLy8iICsgdTsKICAgICAgICAgICAgIC8vIEFkZCAnQCcgaWYgd2Ug
ZGlkbid0IGhhdmUgb25lIGJlZm9yZS4KQEAgLTY2MSwxNyArNzAyLDE3IEBAIHZvaWQgS1VSTDo6
c2V0VXNlcihjb25zdCBEZXByZWNhdGVkU3RyaW4KICAgICAgICAgICAgICAgICBlbmQgKz0gMTsK
ICAgICAgICAgfQogICAgICAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0
cmluZy5sZWZ0KHVzZXJTdGFydFBvcykgKyB1ICsgdXJsU3RyaW5nLm1pZChlbmQpOwotICAgICAg
ICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5h
c2NpaSgpLCAwKTsKICAgICB9CiB9CiAKLXZvaWQgS1VSTDo6c2V0UGFzcyhjb25zdCBEZXByZWNh
dGVkU3RyaW5nICZwYXNzd29yZCkKK3ZvaWQgS1VSTDo6c2V0UGFzcyhjb25zdCBTdHJpbmcmIHBh
c3N3b3JkKQogewogICAgIGlmIChtX2lzVmFsaWQpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmlu
ZyBwOwogICAgICAgICBpbnQgZW5kID0gcGFzc3dvcmRFbmRQb3M7CiAgICAgICAgIGlmICghcGFz
c3dvcmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBwID0gJzonICsgcGFzc3dvcmQgKyAnQCc7
CisgICAgICAgICAgICBwID0gJzonICsgcGFzc3dvcmQuZGVwcmVjYXRlZFN0cmluZygpICsgJ0An
OwogICAgICAgICAgICAgaWYgKHVzZXJFbmRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMSkKICAgICAg
ICAgICAgICAgICBwID0gIi8vIiArIHA7CiAgICAgICAgICAgICAvLyBFYXQgdGhlIGV4aXN0aW5n
ICdAJyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYWRkIG91ciBvd24uCkBAIC02ODMsNTAgKzcyNCw1
MCBAQCB2b2lkIEtVUkw6OnNldFBhc3MoY29uc3QgRGVwcmVjYXRlZFN0cmluCiAgICAgICAgICAg
ICAgICAgZW5kICs9IDE7CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdCh1c2VyRW5kUG9zKSArIHAgKyB1cmxTdHJpbmcubWlk
KGVuZCk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAg
cGFyc2UobmV3VVJMLmFzY2lpKCksIDApOwogICAgIH0KIH0KIAotdm9pZCBLVVJMOjpzZXRSZWYo
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0UmVmKGNvbnN0IFN0cmlu
ZyYgcykKIHsKICAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcg
bmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocXVlcnlFbmRQb3MpICsgKHMuaXNFbXB0eSgpID8gRGVw
cmVjYXRlZFN0cmluZygpIDogIiMiICsgcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgp
LCAmbmV3VVJMKTsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcu
bGVmdChxdWVyeUVuZFBvcykgKyAocy5pc0VtcHR5KCkgPyBEZXByZWNhdGVkU3RyaW5nKCkgOiAi
IyIgKyBzLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgp
LCAwKTsKICAgICB9CiB9CiAKLXZvaWQgS1VSTDo6c2V0UXVlcnkoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAmcXVlcnkpCit2b2lkIEtVUkw6OnNldFF1ZXJ5KGNvbnN0IFN0cmluZyYgcXVlcnkpCiB7
CiAgICAgaWYgKG1faXNWYWxpZCkgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHE7CiAgICAg
ICAgIGlmICghcXVlcnkuaXNOdWxsKCkgJiYgKHF1ZXJ5LmlzRW1wdHkoKSB8fCBxdWVyeVswXSAh
PSAnPycpKSB7Ci0gICAgICAgICAgICBxID0gIj8iICsgcXVlcnk7CisgICAgICAgICAgICBxID0g
Ij8iICsgcXVlcnkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcSA9IHF1ZXJ5OworICAgICAgICAgICAgcSA9IHF1ZXJ5LmRlcHJlY2F0ZWRTdHJpbmco
KTsKICAgICAgICAgfQogCiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3Ry
aW5nLmxlZnQocGF0aEVuZFBvcykgKyBxICsgdXJsU3RyaW5nLm1pZChxdWVyeUVuZFBvcyk7Ci0g
ICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAgICAgcGFyc2UobmV3
VVJMLmFzY2lpKCksIDApOwogICAgIH0KIH0KIAotdm9pZCBLVVJMOjpzZXRQYXRoKGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldFBhdGgoY29uc3QgU3RyaW5nJiBzKQog
ewogICAgIGlmIChtX2lzVmFsaWQpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwg
PSB1cmxTdHJpbmcubGVmdChwb3J0RW5kUG9zKSArIGVuY29kZV9zdHJpbmcocykgKyB1cmxTdHJp
bmcubWlkKHBhdGhFbmRQb3MpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VS
TCk7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocG9y
dEVuZFBvcykgKyBlbmNvZGVfc3RyaW5nKHMuZGVwcmVjYXRlZFN0cmluZygpKSArIHVybFN0cmlu
Zy5taWQocGF0aEVuZFBvcyk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAwKTsKICAg
ICB9CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCkgY29uc3QKK1N0cmlu
ZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlkKSB7CiAgICAg
ICAgIHJldHVybiB1cmxTdHJpbmc7CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1
bHQgPSBwcm90b2NvbCgpICsgIjoiOworICAgIFN0cmluZyByZXN1bHQgPSBwcm90b2NvbCgpICsg
IjoiOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBhdXRob3JpdHk7CisgICAgU3RyaW5nIGF1dGhv
cml0eTsKIAogICAgIGlmIChob3N0RW5kUG9zICE9IHBhc3N3b3JkRW5kUG9zKSB7CiAgICAgICAg
IGlmICh1c2VyRW5kUG9zICE9IHVzZXJTdGFydFBvcykgewpAQCAtNzM2LDEzICs3NzcsMTMgQEAg
RGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogICAgICAgICBhdXRob3Jp
dHkgKz0gaG9zdCgpOwogICAgICAgICBpZiAocG9ydCgpICE9IDApIHsKICAgICAgICAgICAgIGF1
dGhvcml0eSArPSAiOiI7Ci0gICAgICAgICAgICBhdXRob3JpdHkgKz0gRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKHBvcnQoKSk7CisgICAgICAgICAgICBhdXRob3JpdHkgKz0gU3RyaW5nOjpudW1i
ZXIocG9ydCgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghYXV0aG9yaXR5LmlzRW1w
dHkoKSkKICAgICAgICAgcmVzdWx0ICs9ICIvLyIgKyBhdXRob3JpdHk7Ci0gICAgZWxzZSBpZiAo
cHJvdG9jb2woKSA9PSAiZmlsZSIpCisgICAgZWxzZSBpZiAocHJvdG9jb2xJcygiZmlsZSIpKQog
ICAgICAgICByZXN1bHQgKz0gIi8vIjsKIAogICAgIHJlc3VsdCArPSBwYXRoKCk7CkBAIC03NTUs
MjggKzc5NiwyOCBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OnByZXR0eVVSTCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpkZWNvZGVfc3Ry
aW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHVybFN0cmluZykKK0RlcHJlY2F0ZWRTdHJpbmcg
S1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHIpCiB7Ci0gICAg
cmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3RyaW5nLCBVVEY4RW5jb2RpbmcoKSk7CisgICAgcmV0
dXJuIGRlY29kZV9zdHJpbmcoc3RyLCBVVEY4RW5jb2RpbmcoKSk7CiB9CiAKLURlcHJlY2F0ZWRT
dHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1cmxTdHJp
bmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitEZXByZWNhdGVkU3RyaW5nIEtVUkw6
OmRlY29kZV9zdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyLCBjb25zdCBUZXh0RW5j
b2RpbmcmIGVuY29kaW5nKQogewogICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KCIiKTsKIAog
ICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBidWZmZXIoMCk7CiAKLSAgICBpbnQgbGVuZ3RoID0gdXJs
U3RyaW5nLmxlbmd0aCgpOworICAgIGludCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAgaW50
IGRlY29kZWRQb3NpdGlvbiA9IDA7CiAgICAgaW50IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBp
bnQgZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0g
dXJsU3RyaW5nLmZpbmQoJyUnLCBzZWFyY2hQb3NpdGlvbikpID49IDApIHsKKyAgICB3aGlsZSAo
KGVuY29kZWRSdW5Qb3NpdGlvbiA9IHN0ci5maW5kKCclJywgc2VhcmNoUG9zaXRpb24pKSA+PSAw
KSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIHNlcXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgogICAg
ICAgICBpbnQgZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICAgICAgd2hp
bGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQgPj0gMwotICAgICAgICAgICAgICAgICYmIHVybFN0
cmluZ1tlbmNvZGVkUnVuRW5kXSA9PSAnJScKLSAgICAgICAgICAgICAgICAmJiBpc0hleERpZ2l0
KHVybFN0cmluZ1tlbmNvZGVkUnVuRW5kICsgMV0ubGF0aW4xKCkpCi0gICAgICAgICAgICAgICAg
JiYgaXNIZXhEaWdpdCh1cmxTdHJpbmdbZW5jb2RlZFJ1bkVuZCArIDJdLmxhdGluMSgpKSkKKyAg
ICAgICAgICAgICAgICAmJiBzdHJbZW5jb2RlZFJ1bkVuZF0gPT0gJyUnCisgICAgICAgICAgICAg
ICAgJiYgaXNIZXhEaWdpdChzdHJbZW5jb2RlZFJ1bkVuZCArIDFdLmxhdGluMSgpKQorICAgICAg
ICAgICAgICAgICYmIGlzSGV4RGlnaXQoc3RyW2VuY29kZWRSdW5FbmQgKyAyXS5sYXRpbjEoKSkp
CiAgICAgICAgICAgICBlbmNvZGVkUnVuRW5kICs9IDM7CiAgICAgICAgIGlmIChlbmNvZGVkUnVu
RW5kID09IGVuY29kZWRSdW5Qb3NpdGlvbikgewogICAgICAgICAgICAgKytzZWFyY2hQb3NpdGlv
bjsKQEAgLTc4OCwxMSArODI5LDExIEBAIERlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0
cmluZyhjb24KICAgICAgICAgaW50IGVuY29kZWRSdW5MZW5ndGggPSBlbmNvZGVkUnVuRW5kIC0g
ZW5jb2RlZFJ1blBvc2l0aW9uOwogICAgICAgICBidWZmZXIuY2xlYXIoKTsKICAgICAgICAgYnVm
ZmVyLmdyb3coZW5jb2RlZFJ1bkxlbmd0aCArIDEpOwotICAgICAgICB1cmxTdHJpbmcuY29weUxh
dGluMShidWZmZXIuZGF0YSgpLCBlbmNvZGVkUnVuUG9zaXRpb24sIGVuY29kZWRSdW5MZW5ndGgp
OworICAgICAgICBzdHIuY29weUxhdGluMShidWZmZXIuZGF0YSgpLCBlbmNvZGVkUnVuUG9zaXRp
b24sIGVuY29kZWRSdW5MZW5ndGgpOwogCiAgICAgICAgIC8vIERlY29kZSB0aGUgJS1lc2NhcGVz
IGludG8gYnl0ZXMuCi0gICAgICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICBj
b25zdCBjaGFyICpxID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5k
YXRhKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIHEgPSBidWZmZXIuZGF0YSgpOwogICAgICAgICB3
aGlsZSAoKnEpIHsKICAgICAgICAgICAgICpwKysgPSAoaGV4RGlnaXRWYWx1ZShxWzFdKSA8PCA0
KSB8IGhleERpZ2l0VmFsdWUocVsyXSk7CiAgICAgICAgICAgICBxICs9IDM7CkBAIC04MDQsMTIg
Kzg0NSwxMiBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5nIHdpdGgg
d2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgotICAgICAgICBy
ZXN1bHQuYXBwZW5kKHVybFN0cmluZy5taWQoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9z
aXRpb24gLSBkZWNvZGVkUG9zaXRpb24pKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIubWlk
KGRlY29kZWRQb3NpdGlvbiwgZW5jb2RlZFJ1blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKSk7
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVk
Q2hhcio+KGRlY29kZWQuY2hhcmFjdGVycygpKSwgZGVjb2RlZC5sZW5ndGgoKSk7CiAgICAgICAg
IGRlY29kZWRQb3NpdGlvbiA9IGVuY29kZWRSdW5FbmQ7CiAgICAgfQogCi0gICAgcmVzdWx0LmFw
cGVuZCh1cmxTdHJpbmcubWlkKGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0
aW9uKSk7CisgICAgcmVzdWx0LmFwcGVuZChzdHIubWlkKGRlY29kZWRQb3NpdGlvbiwgbGVuZ3Ro
IC0gZGVjb2RlZFBvc2l0aW9uKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODE5LDE1
ICs4NjAsMTUgQEAgYm9vbCBLVVJMOjppc0xvY2FsRmlsZSgpIGNvbnN0CiAgICAgLy8gYW5kIGlu
Y2x1ZGluZyBmZWVkIHdvdWxkIGFsbG93IGZlZWRzIHRvIHBvdGVudGlhbGx5IGxldCBzb21lb25l
J3MgYmxvZwogICAgIC8vIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjbGlwYm9hcmQgb24gYSBk
cmFnLCBldmVuIHdpdGhvdXQgYSBkcm9wLgogICAgIC8vIExpa2V3aXNlIHdpdGggdXNpbmcgdGhl
IEZyYW1lTG9hZGVyOjpzaG91bGRUcmVhdFVSTEFzTG9jYWwoKSBmdW5jdGlvbi4KLSAgICByZXR1
cm4gZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2woKSwgImZpbGUiKTsKKyAgICByZXR1cm4gcHJv
dG9jb2xJcygiZmlsZSIpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJz
KGNoYXIqJiBidWZmZXIsIGNvbnN0IGNoYXIgKnN0clN0YXJ0LCBzaXplX3QgbGVuZ3RoKQorc3Rh
dGljIHZvaWQgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhjaGFyKiYgYnVmZmVyLCBjb25zdCBjaGFy
KiBzdHJTdGFydCwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBjaGFyICpwID0gYnVmZmVyOworICAg
IGNoYXIqIHAgPSBidWZmZXI7CiAKLSAgICBjb25zdCBjaGFyICpzdHIgPSBzdHJTdGFydDsKLSAg
ICBjb25zdCBjaGFyICpzdHJFbmQgPSBzdHJTdGFydCArIGxlbmd0aDsKKyAgICBjb25zdCBjaGFy
KiBzdHIgPSBzdHJTdGFydDsKKyAgICBjb25zdCBjaGFyKiBzdHJFbmQgPSBzdHJTdGFydCArIGxl
bmd0aDsKICAgICB3aGlsZSAoc3RyIDwgc3RyRW5kKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIg
YyA9ICpzdHIrKzsKICAgICAgICAgaWYgKGlzQmFkQ2hhcihjKSkgewpAQCAtODQyLDIwICs4ODMs
MjAgQEAgc3RhdGljIHZvaWQgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhjaGFyKgogICAgICAgICAg
ICAgKnArKyA9IGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBidWZmZXIgPSBwOwog
fQogCiAvLyBjb3B5IGEgcGF0aCwgYWNjb3VudGluZyBmb3IgIi4iIGFuZCAiLi4iIHNlZ21lbnRz
Ci1zdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIgKmRzdCwgY29uc3QgY2hhciAq
c3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQpCitzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3Zp
bmdEb3RzKGNoYXIqIGRzdCwgY29uc3QgY2hhciogc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNF
bmQpCiB7Ci0gICAgY2hhciAqYnVmZmVyUGF0aFN0YXJ0ID0gZHN0OworICAgIGNoYXIqIGJ1ZmZl
clBhdGhTdGFydCA9IGRzdDsKIAogICAgIC8vIGVtcHR5IHBhdGggaXMgYSBzcGVjaWFsIGNhc2Us
IGFuZCBuZWVkIG5vdCBoYXZlIGEgbGVhZGluZyBzbGFzaAogICAgIGlmIChzcmNTdGFydCAhPSBz
cmNFbmQpIHsKLSAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1N0YXJ0ID0gc3JjICsgc3Jj
U3RhcnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmdFbmQgPSBzcmMgKyBzcmNFbmQ7
Ci0gICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmdQb3MgPSBiYXNlU3RyaW5nU3RhcnQ7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmdTdGFydCA9IHNyYyArIHNyY1N0YXJ0OworICAg
ICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nRW5kID0gc3JjICsgc3JjRW5kOworICAgICAgICBj
b25zdCBjaGFyKiBiYXNlU3RyaW5nUG9zID0gYmFzZVN0cmluZ1N0YXJ0OwogCiAgICAgICAgIC8v
IHRoaXMgY29kZSBpcyB1bnByZXBhcmVkIGZvciBwYXRocyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRo
IGEKICAgICAgICAgLy8gc2xhc2ggYW5kIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBvbmUgaW4gdGhl
IHNvdXJjZSBzdHJpbmcKQEAgLTkwNCw5ICs5NDUsOSBAQCBzdGF0aWMgaW50IGNvcHlQYXRoUmVt
b3ZpbmdEb3RzKGNoYXIgKmRzCiAgICAgcmV0dXJuIGRzdCAtIGJ1ZmZlclBhdGhTdGFydDsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIGhhc1NsYXNoRG90T3JEb3REb3QoY29uc3QgY2hhciAqc3Ry
KQorc3RhdGljIGlubGluZSBib29sIGhhc1NsYXNoRG90T3JEb3REb3QoY29uc3QgY2hhciogc3Ry
KQogewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIgKj4oc3RyKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3RyKTsKICAgICBpZiAoISpwKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdW5zaWduZWQgY2hhciBwYyA9ICpwOwpAQCAtOTIz
LDcgKzk2NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaExldHRlcihjaGFyIGMsIGMKICAg
ICByZXR1cm4gKGMgfCAweDIwKSA9PSBsb3dlcmNhc2VMZXR0ZXI7CiB9CiAKLXZvaWQgS1VSTDo6
cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICpvcmlnaW5hbFN0
cmluZykKK3ZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciogdXJsLCBjb25zdCBTdHJpbmcqIG9y
aWdpbmFsU3RyaW5nKQogewogICAgIG1faXNWYWxpZCA9IHRydWU7CiAKQEAgLTk3OCw3ICsxMDE5
LDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdXNlckVuZCsrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmICh1cmxbdXNlckVuZF0gPT0gJ0AnKSB7CiAgICAgICAgICAgICAvLyBhY3R1YWwgZW5k
IG9mIHRoZSB1c2VyaW5mbywgc3RhcnQgb24gdGhlIGhvc3QKICAgICAgICAgICAgIGlmIChjb2xv
blBvcyAhPSAwKSB7CkBAIC0xMDUwLDcgKzEwOTEsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0
IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgIGhvc3RTdGFydCA9IGhvc3RFbmQgPSBwYXNzd29y
ZEVuZDsKICAgICAgICAgcG9ydFN0YXJ0ID0gcG9ydEVuZCA9IGhvc3RFbmQ7CiAgICAgfQotICAg
ICAgICAKKwogICAgIGludCBwYXRoU3RhcnQgPSBwb3J0RW5kOwogICAgIGludCBwYXRoRW5kID0g
cGF0aFN0YXJ0OwogICAgIGludCBxdWVyeVN0YXJ0OwpAQCAtMTA2MSwxNCArMTEwMiwxNCBAQCB2
b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgaWYgKCFoaWVyYXJj
aGljYWwpIHsKICAgICAgICAgd2hpbGUgKHVybFtwYXRoRW5kXSAhPSAnXDAnICYmIHVybFtwYXRo
RW5kXSAhPSAnPycgJiYgdXJsW3BhdGhFbmRdICE9ICcjJykKICAgICAgICAgICAgIHBhdGhFbmQr
KzsKLSAgICAgICAgCisKICAgICAgICAgcXVlcnlTdGFydCA9IHBhdGhFbmQ7CiAgICAgICAgIHF1
ZXJ5RW5kID0gcXVlcnlTdGFydDsKICAgICAgICAgaWYgKHVybFtxdWVyeVN0YXJ0XSA9PSAnPycp
IHsKICAgICAgICAgICAgIHdoaWxlICh1cmxbcXVlcnlFbmRdICE9ICdcMCcgJiYgdXJsW3F1ZXJ5
RW5kXSAhPSAnIycpCiAgICAgICAgICAgICAgICAgcXVlcnlFbmQrKzsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBmcmFnbWVudFN0YXJ0ID0gcXVlcnlFbmQ7CiAgICAgICAgIGZyYWdt
ZW50RW5kID0gZnJhZ21lbnRTdGFydDsKICAgICAgICAgaWYgKHVybFtmcmFnbWVudFN0YXJ0XSA9
PSAnIycpIHsKQEAgLTEwNzYsMTMgKzExMTcsMTMgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBj
aGFyICp1cmwsIGNvbnN0IAogICAgICAgICAgICAgZnJhZ21lbnRFbmQgPSBmcmFnbWVudFN0YXJ0
OwogICAgICAgICAgICAgd2hpbGUgKHVybFtmcmFnbWVudEVuZF0gIT0gJ1wwJykKICAgICAgICAg
ICAgICAgICBmcmFnbWVudEVuZCsrOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogICAg
IH0KICAgICBlbHNlIHsKICAgICAgICAgd2hpbGUgKHVybFtwYXRoRW5kXSAhPSAnXDAnICYmIHVy
bFtwYXRoRW5kXSAhPSAnPycgJiYgdXJsW3BhdGhFbmRdICE9ICcjJykgewogICAgICAgICAgICAg
cGF0aEVuZCsrOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgcXVlcnlTdGFydCA9IHBhdGhF
bmQ7CiAgICAgICAgIHF1ZXJ5RW5kID0gcXVlcnlTdGFydDsKICAgICAgICAgaWYgKHVybFtxdWVy
eVN0YXJ0XSA9PSAnPycpIHsKQEAgLTEwOTAsNyArMTEzMSw3IEBAIHZvaWQgS1VSTDo6cGFyc2Uo
Y29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgICAgICAgICBxdWVyeUVuZCsrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZyYWdtZW50U3RhcnQg
PSBxdWVyeUVuZDsKICAgICAgICAgZnJhZ21lbnRFbmQgPSBmcmFnbWVudFN0YXJ0OwogICAgICAg
ICBpZiAodXJsW2ZyYWdtZW50U3RhcnRdID09ICcjJykgewpAQCAtMTExMSw5ICsxMTUyLDggQEAg
dm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogCiAgICAgLy8gY29weSBp
biB0aGUgc2NoZW1lCiAgICAgY29uc3QgY2hhciAqc2NoZW1lRW5kUHRyID0gdXJsICsgc2NoZW1l
RW5kOwotICAgIHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpIHsKKyAgICB3aGlsZSAoc3Ry
UHRyIDwgc2NoZW1lRW5kUHRyKQogICAgICAgICAqcCsrID0gKnN0clB0cisrOwotICAgIH0KICAg
ICBzY2hlbWVFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKIAogICAgIC8vIENoZWNrIGlmIHdl
J3JlIGh0dHAgb3IgaHR0cHMuCkBAIC0xMTQwLDEyICsxMTgwLDEyIEBAIHZvaWQgS1VSTDo6cGFy
c2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgJiYgbWF0Y2hMZXR0ZXIodXJsWzJd
LCAnbCcpCiAgICAgICAgICYmIG1hdGNoTGV0dGVyKHVybFszXSwgJ2UnKQogICAgICAgICAmJiB1
cmxbNF0gPT0gJzonOwotICAgICAgICAKKwogICAgIC8vIEZpbGUgVVJMcyBuZWVkIGEgaG9zdCBw
YXJ0IHVubGVzcyBpdCBpcyBqdXN0IGZpbGU6Ly8gb3IgZmlsZTovL2xvY2FsaG9zdAogICAgIGJv
b2wgZGVnZW5GaWxlUGF0aCA9IHBhdGhTdGFydCA9PSBwYXRoRW5kCiAgICAgICAgICYmIChob3N0
U3RhcnQgPT0gaG9zdEVuZAogICAgICAgICAgICAgfHwgaG9zdElzTG9jYWxIb3N0KTsKLSAgICAK
KwogICAgIGJvb2wgaGF2ZU5vbkhvc3RBdXRob3JpdHlQYXJ0ID0gdXNlclN0YXJ0ICE9IHVzZXJF
bmQgfHwgcGFzc3dvcmRTdGFydCAhPSBwYXNzd29yZEVuZCB8fCBwb3J0U3RhcnQgIT0gcG9ydEVu
ZDsKIAogICAgIC8vIGFkZCAiOiIgYWZ0ZXIgc2NoZW1lCkBAIC0xMTY4LDQ2ICsxMjA4LDQxIEBA
IHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKIAogICAgICAgICAvLyBj
b3B5IGluIHRoZSB1c2VyCiAgICAgICAgIHN0clB0ciA9IHVybCArIHVzZXJTdGFydDsKLSAgICAg
ICAgY29uc3QgY2hhciAqdXNlckVuZFB0ciA9IHVybCArIHVzZXJFbmQ7Ci0gICAgICAgIHdoaWxl
IChzdHJQdHIgPCB1c2VyRW5kUHRyKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJFbmRQdHIg
PSB1cmwgKyB1c2VyRW5kOworICAgICAgICB3aGlsZSAoc3RyUHRyIDwgdXNlckVuZFB0cikKICAg
ICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7Ci0gICAgICAgIH0KICAgICAgICAgdXNlckVuZFBv
cyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBjb3B5IGluIHRo
ZSBwYXNzd29yZAogICAgICAgICBpZiAocGFzc3dvcmRFbmQgIT0gcGFzc3dvcmRTdGFydCkgewog
ICAgICAgICAgICAgKnArKyA9ICc6JzsKICAgICAgICAgICAgIHN0clB0ciA9IHVybCArIHBhc3N3
b3JkU3RhcnQ7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZEVuZFB0ciA9IHVybCAr
IHBhc3N3b3JkRW5kOwotICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBhc3N3b3JkRW5kUHRy
KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXNzd29yZEVuZFB0ciA9IHVybCArIHBhc3N3
b3JkRW5kOworICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBhc3N3b3JkRW5kUHRyKQogICAg
ICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgcGFzc3dvcmRFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgCisK
ICAgICAgICAgLy8gSWYgd2UgaGFkIGFueSB1c2VyIGluZm8sIGFkZCAiQCIKLSAgICAgICAgaWYg
KHAgLSBidWZmZXIuZGF0YSgpICE9IHVzZXJTdGFydFBvcykgeworICAgICAgICBpZiAocCAtIGJ1
ZmZlci5kYXRhKCkgIT0gdXNlclN0YXJ0UG9zKQogICAgICAgICAgICAgKnArKyA9ICdAJzsKLSAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBjb3B5IGluIHRoZSBob3N0LCBleGNlcHQg
aW4gdGhlIGNhc2Ugb2YgYSBmaWxlIFVSTCB3aXRoIGF1dGhvcml0eT0ibG9jYWxob3N0IgogICAg
ICAgICBpZiAoIShpc0ZpbGUgJiYgaG9zdElzTG9jYWxIb3N0ICYmICFoYXZlTm9uSG9zdEF1dGhv
cml0eVBhcnQpKSB7CiAgICAgICAgICAgICBzdHJQdHIgPSB1cmwgKyBob3N0U3RhcnQ7Ci0gICAg
ICAgICAgICBjb25zdCBjaGFyICpob3N0RW5kUHRyID0gdXJsICsgaG9zdEVuZDsKLSAgICAgICAg
ICAgIHdoaWxlIChzdHJQdHIgPCBob3N0RW5kUHRyKSB7CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBob3N0RW5kUHRyID0gdXJsICsgaG9zdEVuZDsKKyAgICAgICAgICAgIHdoaWxlIChzdHJQdHIg
PCBob3N0RW5kUHRyKQogICAgICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaG9zdEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgp
OwotICAgICAgICAKKwogICAgICAgICAvLyBjb3B5IGluIHRoZSBwb3J0CiAgICAgICAgIGlmICho
b3N0RW5kICE9IHBvcnRTdGFydCkgewogICAgICAgICAgICAgKnArKyA9ICc6JzsKICAgICAgICAg
ICAgIHN0clB0ciA9IHVybCArIHBvcnRTdGFydDsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBv
cnRFbmRQdHIgPSB1cmwgKyBwb3J0RW5kOwotICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBv
cnRFbmRQdHIpIHsKKyAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBwb3J0RW5kUHRyKQogICAg
ICAgICAgICAgICAgICpwKysgPSAqc3RyUHRyKys7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgcG9ydEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwogICAgIH0gZWxzZSB7CkBA
IC0xMjE2LDEyICsxMjUxLDEwIEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBj
b25zdCAKIAogICAgIC8vIEZvciBjYW5vbmljYWxpemF0aW9uLCBlbnN1cmUgd2UgaGF2ZSBhICcv
JyBmb3Igbm8gcGF0aC4KICAgICAvLyBPbmx5IGRvIHRoaXMgZm9yIGh0dHAgYW5kIGh0dHBzLgot
ICAgIGlmIChpc0hUVFBvckhUVFBTICYmIHBhdGhFbmQgLSBwYXRoU3RhcnQgPT0gMCkgeworICAg
IGlmIChpc0hUVFBvckhUVFBTICYmIHBhdGhFbmQgLSBwYXRoU3RhcnQgPT0gMCkKICAgICAgICAg
KnArKyA9ICcvJzsKLSAgICB9Ci0gICAgICAgCisKICAgICAvLyBhZGQgcGF0aCwgZXNjYXBpbmcg
YmFkIGNoYXJhY3RlcnMKLSAgICAKICAgICBpZiAoaGllcmFyY2hpY2FsICYmIGhhc1NsYXNoRG90
T3JEb3REb3QodXJsKSkgewogICAgICAgICBWZWN0b3I8Y2hhciwgNDA5Nj4gcGF0aF9idWZmZXIo
cGF0aEVuZCAtIHBhdGhTdGFydCArIDEpOwogICAgICAgICBjb3B5UGF0aFJlbW92aW5nRG90cyhw
YXRoX2J1ZmZlci5kYXRhKCksIHVybCwgcGF0aFN0YXJ0LCBwYXRoRW5kKTsKQEAgLTEyMzAsMTIg
KzEyNjMsMTEgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAg
ICAgICBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKHAsIHVybCArIHBhdGhTdGFydCwgcGF0aEVuZCAt
IHBhdGhTdGFydCk7CiAKICAgICBwYXRoRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAg
Ci0gICAgCisKICAgICAvLyBhZGQgcXVlcnksIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAg
YXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBxdWVyeVN0YXJ0LCBxdWVyeUVuZCAtIHF1
ZXJ5U3RhcnQpOwogICAgIHF1ZXJ5RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgCisK
ICAgICAvLyBhZGQgZnJhZ21lbnQsIGVzY2FwaW5nIGJhZCBjaGFyYWN0ZXJzCiAgICAgaWYgKGZy
YWdtZW50RW5kICE9IHF1ZXJ5RW5kKSB7CiAgICAgICAgICpwKysgPSAnIyc7CkBAIC0xMjQ2LDE1
ICsxMjc4LDE1IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAg
ICAvLyBJZiB3ZSBkaWRuJ3QgZW5kIHVwIGFjdHVhbGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBz
dHJpbmcgYW5kCiAgICAgLy8gaXQgc3RhcnRlZCBhcyBhIERlcHJlY2F0ZWRTdHJpbmcsIGp1c3Qg
cmV1c2UgaXQsIHRvIGF2b2lkIGV4dHJhCiAgICAgLy8gYWxsb2NhdGlvbi4KLSAgICBpZiAob3Jp
Z2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9z
KSA9PSAwKSB7Ci0gICAgICAgIHVybFN0cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKLSAgICB9IGVs
c2UKKyAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmws
IGZyYWdtZW50RW5kUG9zKSA9PSAwKQorICAgICAgICB1cmxTdHJpbmcgPSBvcmlnaW5hbFN0cmlu
Zy0+ZGVwcmVjYXRlZFN0cmluZygpOworICAgIGVsc2UKICAgICAgICAgdXJsU3RyaW5nID0gRGVw
cmVjYXRlZFN0cmluZyhidWZmZXIuZGF0YSgpLCBmcmFnbWVudEVuZFBvcyk7CiAKICAgICBBU1NF
UlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGludClidWZmZXIuc2l6ZSgpKTsKIH0KIAotYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtVUkwgJmIpCitib29sIG9wZXJhdG9yPT0o
Y29uc3QgS1VSTCYgYSwgY29uc3QgS1VSTCYgYikKIHsKICAgICByZXR1cm4gYS51cmxTdHJpbmcg
PT0gYi51cmxTdHJpbmc7CiB9CkBAIC0xMjY3LDEyICsxMjk5LDEyIEBAIGJvb2wgZXF1YWxJZ25v
cmluZ1JlZihjb25zdCBLVVJMJiBhLCBjb24KIERlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZW5jb2Rl
X3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBub3RFbmNvZGVkU3RyaW5nKQogewogICAg
IERlcHJlY2F0ZWRDU3RyaW5nIGFzVVRGOCA9IG5vdEVuY29kZWRTdHJpbmcudXRmOCgpOwotICAg
IAorCiAgICAgVmVjdG9yPGNoYXIsIDQwOTY+IGJ1ZmZlcihhc1VURjgubGVuZ3RoKCkgKiAzICsg
MSk7Ci0gICAgY2hhciAqcCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY2hhciogcCA9IGJ1ZmZlci5k
YXRhKCk7CiAKLSAgICBjb25zdCBjaGFyICpzdHIgPSBhc1VURjg7Ci0gICAgY29uc3QgY2hhciAq
c3RyRW5kID0gc3RyICsgYXNVVEY4Lmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHN0ciA9IGFz
VVRGODsKKyAgICBjb25zdCBjaGFyKiBzdHJFbmQgPSBzdHIgKyBhc1VURjgubGVuZ3RoKCk7CiAg
ICAgd2hpbGUgKHN0ciA8IHN0ckVuZCkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqc3Ry
Kys7CiAgICAgICAgIGlmIChpc0JhZENoYXIoYykpIHsKQEAgLTEyODIsMzkgKzEzMTQsMzkgQEAg
RGVwcmVjYXRlZFN0cmluZyBLVVJMOjplbmNvZGVfc3RyaW5nKGNvbgogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICpwKysgPSBjOwogICAgIH0KLSAgICAKKwogICAgIERlcHJlY2F0ZWRTdHJp
bmcgcmVzdWx0KGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKLSAgICAKKwogICAg
IEFTU0VSVChwIC0gYnVmZmVyLmRhdGEoKSA8PSAoaW50KWJ1ZmZlci5zaXplKCkpOwogCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZW5jb2RlSG9zdG5h
bWUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKKy8vIEFwcGVuZHMgdGhlIHB1bnljb2RlZCBo
b3N0bmFtZSBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBzdHJpbmcgYW5kIGxlbmd0aCB0bworLy8g
dGhlIG91dHB1dCBidWZmZXIuIFRoZSByZXN1bHQgd2lsbCBub3QgYmUgbnVsbCB0ZXJtaW5hdGVk
Lgorc3RhdGljIHZvaWQgYXBwZW5kRW5jb2RlZEhvc3RuYW1lKGNvbnN0IFVDaGFyKiBzdHIsIHVu
c2lnbmVkIHN0ckxlbiwgVGVtcFVDaGFyQnVmZmVyKiBvdXRwdXQpCiB7CiAgICAgLy8gTmVlZHMg
dG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFuIElETi1lbmNvZGVkIG5hbWUuCiAgICAgLy8gRm9y
IGhvc3QgbmFtZXMgYmlnZ2VyIHRoYW4gdGhpcywgd2Ugd29uJ3QgZG8gSUROIGVuY29kaW5nLCB3
aGljaCBpcyBhbG1vc3QgY2VydGFpbmx5IE9LLgogICAgIGNvbnN0IHVuc2lnbmVkIGhvc3RuYW1l
QnVmZmVyTGVuZ3RoID0gMjA0ODsKIAotICAgIGlmIChzLmlzQWxsQVNDSUkoKSB8fCBzLmxlbmd0
aCgpID4gaG9zdG5hbWVCdWZmZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBzOworICAgIGlmIChz
dHJMZW4gPiBob3N0bmFtZUJ1ZmZlckxlbmd0aCB8fCBpc0FsbEFTQ0lJKHN0ciwgc3RyTGVuKSkK
KyAgICAgICAgb3V0cHV0LT5hcHBlbmQoc3RyLCBzdHJMZW4pOwogCiAjaWYgVVNFKElDVV9VTklD
T0RFKQotICAgIFVDaGFyIGJ1ZmZlcltob3N0bmFtZUJ1ZmZlckxlbmd0aF07ICAgIAorICAgIFVD
aGFyIGJ1ZmZlcltob3N0bmFtZUJ1ZmZlckxlbmd0aF07CiAgICAgVUVycm9yQ29kZSBlcnJvciA9
IFVfWkVST19FUlJPUjsKLSAgICBpbnQzMl90IG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQgPSB1aWRu
YV9JRE5Ub0FTQ0lJCi0gICAgICAgIChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyICo+KHMu
dW5pY29kZSgpKSwgcy5sZW5ndGgoKSwgYnVmZmVyLCBob3N0bmFtZUJ1ZmZlckxlbmd0aCwgVUlE
TkFfQUxMT1dfVU5BU1NJR05FRCwgMCwgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IgIT0gVV9aRVJP
X0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICByZXR1cm4gRGVwcmVjYXRl
ZFN0cmluZyhyZWludGVycHJldF9jYXN0PERlcHJlY2F0ZWRDaGFyICo+KGJ1ZmZlciksIG51bUNo
YXJhY3RlcnNDb252ZXJ0ZWQpOworICAgIGludDMyX3QgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCA9
IHVpZG5hX0lETlRvQVNDSUkoCisgICAgICAgIHN0ciwgc3RyTGVuLCBidWZmZXIsIGhvc3RuYW1l
QnVmZmVyTGVuZ3RoLCBVSUROQV9BTExPV19VTkFTU0lHTkVELCAwLCAmZXJyb3IpOworICAgIGlm
IChlcnJvciAhPSBVX1pFUk9fRVJST1IpCisgICAgICAgIG91dHB1dC0+YXBwZW5kKGJ1ZmZlciwg
bnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCk7CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCi0gICAgUUJ5
dGVBcnJheSByZXN1bHQgPSBRVXJsOjp0b0FjZShzKTsKLSAgICByZXR1cm4gRGVwcmVjYXRlZFN0
cmluZyhyZXN1bHQuY29uc3REYXRhKCksIHJlc3VsdC5sZW5ndGgoKSk7CisgICAgUUJ5dGVBcnJh
eSByZXN1bHQgPSBRVXJsOjp0b0FjZShzKTsgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLCBidXQg
SSBkb24ndCBrbm93IHdoYXQgaXQgc2hvdWxkIGJlLgorICAgIG91dHB1dC0+YXBwZW5kKHJlc3Vs
dC5jb25zdERhdGEsIHJlc3VsdC5sZW5ndGgoKSk7CiAjZW5kaWYKIH0KIAotc3RhdGljIFZlY3Rv
cjxwYWlyPGludCwgaW50PiA+IGZpbmRIb3N0bmFtZXNJbk1haWxUb1VSTChjb25zdCBEZXByZWNh
dGVkU3RyaW5nICZzKQorc3RhdGljIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGZpbmRIb3N0bmFt
ZXNJbk1haWxUb1VSTChjb25zdCBVQ2hhciogc3RyLCBpbnQgc3RyTGVuKQogewogICAgIC8vIElu
IGEgbWFpbHRvOiBVUkwsIGhvc3QgbmFtZXMgY29tZSBhZnRlciBhICdAJyBjaGFyYWN0ZXIgYW5k
IGVuZCB3aXRoIGEgJz4nIG9yICcsJyBvciAnPycgb3IgZW5kIG9mIHN0cmluZyBjaGFyYWN0ZXIu
CiAgICAgLy8gU2tpcCBxdW90ZWQgc3RyaW5ncyBzbyB0aGF0IGNoYXJhY3RlcnMgaW4gdGhlbSBk
b24ndCBjb25mdXNlIHVzLgpAQCAtMTMyNSwyNCArMTM1NywyMiBAQCBzdGF0aWMgVmVjdG9yPHBh
aXI8aW50LCBpbnQ+ID4gZmluZEhvc3RuCiAgICAgaW50IHAgPSAwOwogICAgIHdoaWxlICgxKSB7
CiAgICAgICAgIC8vIEZpbmQgc3RhcnQgb2YgaG9zdCBuYW1lIG9yIG9mIHF1b3RlZCBzdHJpbmcu
Ci0gICAgICAgIGludCBob3N0bmFtZU9yU3RyaW5nU3RhcnQgPSBzLmZpbmQoUmVndWxhckV4cHJl
c3Npb24oIltcIkA/XSIpLCBwKTsKLSAgICAgICAgaWYgKGhvc3RuYW1lT3JTdHJpbmdTdGFydCA9
PSAtMSkgeworICAgICAgICBpbnQgaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID0gZmluZEZpcnN0T2Yo
c3RyLCBzdHJMZW4sIHAsICJcIkA/Iik7CisgICAgICAgIGlmIChob3N0bmFtZU9yU3RyaW5nU3Rh
cnQgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotICAgICAgICBEZXBy
ZWNhdGVkQ2hhciBjID0gc1tob3N0bmFtZU9yU3RyaW5nU3RhcnRdOworICAgICAgICBVQ2hhciBj
ID0gc3RyW2hvc3RuYW1lT3JTdHJpbmdTdGFydF07CiAgICAgICAgIHAgPSBob3N0bmFtZU9yU3Ry
aW5nU3RhcnQgKyAxOwogCi0gICAgICAgIGlmIChjID09ICc/JykgeworICAgICAgICBpZiAoYyA9
PSAnPycpCiAgICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotICAgICAgICAKKwogICAg
ICAgICBpZiAoYyA9PSAnQCcpIHsKICAgICAgICAgICAgIC8vIEZpbmQgZW5kIG9mIGhvc3QgbmFt
ZS4KICAgICAgICAgICAgIGludCBob3N0bmFtZVN0YXJ0ID0gcDsKLSAgICAgICAgICAgIGludCBo
b3N0bmFtZUVuZCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiWz4sP10iKSwgcCk7CisgICAg
ICAgICAgICBpbnQgaG9zdG5hbWVFbmQgPSBmaW5kRmlyc3RPZihzdHIsIHN0ckxlbiwgcCwgIj4s
PyIpOwogICAgICAgICAgICAgYm9vbCBkb25lOwogICAgICAgICAgICAgaWYgKGhvc3RuYW1lRW5k
ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgaG9zdG5hbWVFbmQgPSBzLmxlbmd0aCgpOworICAg
ICAgICAgICAgICAgIGhvc3RuYW1lRW5kID0gc3RyTGVuOwogICAgICAgICAgICAgICAgIGRvbmUg
PSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwID0gaG9zdG5h
bWVFbmQ7CkBAIC0xMzU3LDIwICsxMzg3LDIwIEBAIHN0YXRpYyBWZWN0b3I8cGFpcjxpbnQsIGlu
dD4gPiBmaW5kSG9zdG4KICAgICAgICAgICAgIC8vIFNraXAgcXVvdGVkIHN0cmluZy4KICAgICAg
ICAgICAgIEFTU0VSVChjID09ICciJyk7CiAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAg
ICAgICAgICAgIGludCBlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgPSBzLmZpbmQoUmVndWxh
ckV4cHJlc3Npb24oIltcIlxcXSIpLCBwKTsKKyAgICAgICAgICAgICAgICBpbnQgZXNjYXBlZENo
YXJhY3Rlck9yU3RyaW5nRW5kID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIHAsICJcIlxcIik7
CiAgICAgICAgICAgICAgICAgaWYgKGVzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCA9PSAtMSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CiAKLSAgICAgICAgICAgICAgICBjID0gc1tl
c2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmRdOworICAgICAgICAgICAgICAgIGMgPSBzdHJbZXNj
YXBlZENoYXJhY3Rlck9yU3RyaW5nRW5kXTsKICAgICAgICAgICAgICAgICBwID0gZXNjYXBlZENo
YXJhY3Rlck9yU3RyaW5nRW5kICsgMTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAg
ICAgIC8vIElmIHdlIGFyZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHRoZW4gYnJlYWsgZnJvbSB0
aGUgc3RyaW5nIGxvb3AgYmFjayB0byB0aGUgaG9zdCBuYW1lIGxvb3AuCiAgICAgICAgICAgICAg
ICAgaWYgKGMgPT0gJyInKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgICAgIC8vIFNraXAgZXNjYXBlZCBjaGFyYWN0ZXIuCiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGMgPT0gJ1xcJyk7Ci0gICAgICAgICAgICAgICAgaWYgKHAgPT0g
c3RhdGljX2Nhc3Q8aW50PihzLmxlbmd0aCgpKSkKKyAgICAgICAgICAgICAgICBpZiAocCA9PSBz
dHJMZW4pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhOwogCiAgICAgICAgICAgICAgICAg
KytwOwpAQCAtMTM3OSwxMjEgKzE0MDksMTIzIEBAIHN0YXRpYyBWZWN0b3I8cGFpcjxpbnQsIGlu
dD4gPiBmaW5kSG9zdG4KICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGZpbmRIb3N0bmFtZUluSGll
cmFyY2hpY2FsVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMsIGludCAmc3RhcnRPZmZzZXQs
IGludCAmZW5kT2Zmc2V0KQorc3RhdGljIGJvb2wgZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxV
UkwoY29uc3QgVUNoYXIqIHN0ciwgaW50IHN0ckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogc3RhcnRPZmZzZXQsIGludCogZW5kT2Zmc2V0KQogewog
ICAgIC8vIEZpbmQgdGhlIGhvc3QgbmFtZSBpbiBhIGhpZXJhcmNoaWNhbCBVUkwuCi0gICAgLy8g
SXQgY29tZXMgYWZ0ZXIgYSAiOi8vIiBzZXF1ZW5jZSwgd2l0aCBzY2hlbWUgY2hhcmFjdGVycyBw
cmVjZWRpbmcuCi0gICAgLy8gSWYgZW5kcyB3aXRoIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBvciBh
ICI6IiBvciBhIHBhdGggc2VnbWVudCBlbmRpbmcgY2hhcmFjdGVyLgorICAgIC8vIEl0IGNvbWVz
IGFmdGVyIGEgIjovLyIgc2VxdWVuY2UsIHdpdGggc2NoZW1lIGNoYXJhY3RlcnMgcHJlY2VkaW5n
LCBhbmQKKyAgICAvLyB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3QgY29sb24gaW4gdGhlIHN0cmlu
Zy4KKyAgICAvLyBJdCBlbmRzIHdpdGggdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG9yIGEgIjoiIG9y
IGEgcGF0aCBzZWdtZW50IGVuZGluZyBjaGFyYWN0ZXIuCiAgICAgLy8gSWYgdGhlcmUgaXMgYSAi
QCIgY2hhcmFjdGVyLCB0aGUgaG9zdCBwYXJ0IGlzIGp1c3QgdGhlIHBhcnQgYWZ0ZXIgdGhlICJA
Ii4KLSAgICBpbnQgc2VwYXJhdG9yID0gcy5maW5kKCI6Ly8iKTsKLSAgICBpZiAoc2VwYXJhdG9y
IDw9IDApIHsKKyAgICBpbnQgc2VwYXJhdG9yID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIDAs
ICI6Iik7CisgICAgaWYgKHNlcGFyYXRvciA9PSAtMSB8fCBzZXBhcmF0b3IgKyAyID49IHN0ckxl
biB8fAorICAgICAgICBzdHJbc2VwYXJhdG9yICsgMV0gIT0gJy8nIHx8IHN0cltzZXBhcmF0b3Ig
KyAyXSAhPSAnLycpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKICAgICAvLyBDaGVj
ayB0aGF0IGFsbCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgOi8vIGFyZSB2YWxpZCBzY2hlbWUgY2hh
cmFjdGVycy4KLSAgICBpZiAoIWlzU2NoZW1lRmlyc3RDaGFyKHNbMF0ubGF0aW4xKCkpKSB7Cisg
ICAgaWYgKCFpc1NjaGVtZUZpcnN0Q2hhcihzdHJbMF0pKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2VwYXJhdG9yOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFpc1NjaGVtZUNoYXIoc1tpXS5sYXRpbjEoKSkpIHsKKyAgICAgICAgaWYgKCFpc1Nj
aGVtZUNoYXIoc3RyW2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQog
ICAgIH0KIAogICAgIC8vIFN0YXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuCiAgICAgaW50IGF1dGhv
cml0eVN0YXJ0ID0gc2VwYXJhdG9yICsgMzsKIAogICAgIC8vIEZpbmQgdGVybWluYXRpbmcgY2hh
cmFjdGVyLgotICAgIGludCBsZW5ndGggPSBzLmxlbmd0aCgpOwotICAgIGludCBob3N0bmFtZUVu
ZCA9IGxlbmd0aDsKLSAgICBmb3IgKGludCBpID0gYXV0aG9yaXR5U3RhcnQ7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICBjaGFyIGMgPSBzW2ldLmxhdGluMSgpOwotICAgICAgICBpZiAoYyA9
PSAnOicgfHwgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKGMpICYmIGMgIT0gJ1wwJykpIHsKKyAgICBp
bnQgaG9zdG5hbWVFbmQgPSBzdHJMZW47CisgICAgZm9yIChpbnQgaSA9IGF1dGhvcml0eVN0YXJ0
OyBpIDwgc3RyTGVuOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHN0cltpXTsKKyAgICAgICAg
aWYgKGMgPT0gJzonIHx8IChpc1BhdGhTZWdtZW50RW5kQ2hhcihjKSAmJiBjICE9IDApKSB7CiAg
ICAgICAgICAgICBob3N0bmFtZUVuZCA9IGk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIEZpbmQgIkAiIGZvciB0aGUgc3RhcnQgb2YgdGhlIGhvc3QgbmFt
ZS4KLSAgICBpbnQgdXNlckluZm9UZXJtaW5hdG9yID0gcy5maW5kKCdAJywgYXV0aG9yaXR5U3Rh
cnQpOworICAgIGludCB1c2VySW5mb1Rlcm1pbmF0b3IgPSBmaW5kRmlyc3RPZihzdHIsIHN0ckxl
biwgYXV0aG9yaXR5U3RhcnQsICJAIik7CiAgICAgaW50IGhvc3RuYW1lU3RhcnQ7Ci0gICAgaWYg
KHVzZXJJbmZvVGVybWluYXRvciA9PSAtMSB8fCB1c2VySW5mb1Rlcm1pbmF0b3IgPiBob3N0bmFt
ZUVuZCkgeworICAgIGlmICh1c2VySW5mb1Rlcm1pbmF0b3IgPT0gLTEgfHwgdXNlckluZm9UZXJt
aW5hdG9yID4gaG9zdG5hbWVFbmQpCiAgICAgICAgIGhvc3RuYW1lU3RhcnQgPSBhdXRob3JpdHlT
dGFydDsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAgICAgICAgaG9zdG5hbWVTdGFydCA9IHVz
ZXJJbmZvVGVybWluYXRvciArIDE7Ci0gICAgfQogCi0gICAgc3RhcnRPZmZzZXQgPSBob3N0bmFt
ZVN0YXJ0OwotICAgIGVuZE9mZnNldCA9IGhvc3RuYW1lRW5kOworICAgICpzdGFydE9mZnNldCA9
IGhvc3RuYW1lU3RhcnQ7CisgICAgKmVuZE9mZnNldCA9IGhvc3RuYW1lRW5kOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVIb3N0bmFtZXMoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmcykKKy8vIENvbnZlcnRzIGFsbCBob3N0bmFtZXMgZm91bmQg
aW4gdGhlIGdpdmVuIGlucHV0IHRvIHB1bnljb2RlLCBwcmVzZXJ2aW5nIHRoZQorLy8gcmVzdCBv
ZiB0aGUgVVJMIHVuY2hhbmdlZC4gVGhlIG91dHB1dCB3aWxsIE5PVCBiZSBudWxsLXRlcm1pbmF0
ZWQuCitzdGF0aWMgdm9pZCBlbmNvZGVIb3N0bmFtZXMoY29uc3QgU3RyaW5nJiBzdHIsIFRlbXBV
Q2hhckJ1ZmZlciogb3V0cHV0KQogewotICAgIGlmIChzLnN0YXJ0c1dpdGgoIm1haWx0bzoiLCBm
YWxzZSkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gaG9zdG5hbWVS
YW5nZXMgPSBmaW5kSG9zdG5hbWVzSW5NYWlsVG9VUkwocyk7CisgICAgb3V0cHV0LT5yZXNpemUo
MCk7CisKKyAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoIm1haWx0bzoiLCBmYWxzZSkpIHsKKyAgICAg
ICAgY29uc3QgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gaG9zdG5hbWVSYW5nZXMgPSBmaW5kSG9z
dG5hbWVzSW5NYWlsVG9VUkwoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKICAgICAg
ICAgaW50IG4gPSBob3N0bmFtZVJhbmdlcy5zaXplKCk7Ci0gICAgICAgIGlmIChuICE9IDApIHsK
LSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0OwotICAgICAgICAgICAgdW5zaWdu
ZWQgcCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IHBhaXI8aW50LCBpbnQ+ICZyID0gaG9zdG5hbWVSYW5nZXNbaV07
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHMubWlkKHAsIHIuZmlyc3QpOwotICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBlbmNvZGVIb3N0bmFtZShzLm1pZChyLmZpcnN0LCByLnNlY29uZCAt
IHIuZmlyc3QpKTsKLSAgICAgICAgICAgICAgICBwID0gci5zZWNvbmQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXN1bHQgKz0gcy5taWQocCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9CisgICAgICAgIGludCBwID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IHBhaXI8aW50LCBpbnQ+ICZyID0g
aG9zdG5hbWVSYW5nZXNbaV07CisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgmc3RyLmNoYXJh
Y3RlcnMoKVtwXSwgci5maXJzdCAtIHApOworICAgICAgICAgICAgYXBwZW5kRW5jb2RlZEhvc3Ru
YW1lKCZzdHIuY2hhcmFjdGVycygpW3IuZmlyc3RdLCByLnNlY29uZCAtIHIuZmlyc3QsIG91dHB1
dCk7CisgICAgICAgICAgICBwID0gci5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhp
cyB3aWxsIGNvcHkgZWl0aGVyIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3Qgbm9zdG5hbWUsIG9y
IHRoZQorICAgICAgICAvLyB3aG9sZSB0aGluZyBpZiB0aGVyZSBpcyBubyBob3N0bmFtZS4KKyAg
ICAgICAgb3V0cHV0LT5hcHBlbmQoJnN0ci5jaGFyYWN0ZXJzKClbcF0sIHN0ci5sZW5ndGgoKSAt
IHApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGludCBob3N0U3RhcnQsIGhvc3RFbmQ7Ci0gICAg
ICAgIGlmIChmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVSTChzLCBob3N0U3RhcnQsIGhvc3RF
bmQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcy5sZWZ0KGhvc3RTdGFydCkgKyBlbmNvZGVIb3N0
bmFtZShzLm1pZChob3N0U3RhcnQsIGhvc3RFbmQgLSBob3N0U3RhcnQpKSArIHMubWlkKGhvc3RF
bmQpOyAKKyAgICAgICAgaWYgKGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKHN0ci5jaGFy
YWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwgJmhvc3RTdGFydCwgJmhvc3RFbmQpKSB7CisgICAgICAg
ICAgICBvdXRwdXQtPmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBob3N0U3RhcnQpOyAgLy8gQmVm
b3JlIGhvc3RuYW1lLgorICAgICAgICAgICAgYXBwZW5kRW5jb2RlZEhvc3RuYW1lKCZzdHIuY2hh
cmFjdGVycygpW2hvc3RTdGFydF0sIGhvc3RFbmQgLSBob3N0U3RhcnQsIG91dHB1dCk7CisgICAg
ICAgICAgICBvdXRwdXQtPmFwcGVuZCgmc3RyLmNoYXJhY3RlcnMoKVtob3N0RW5kXSwgc3RyLmxl
bmd0aCgpIC0gaG9zdEVuZCk7ICAvLyBBZnRlciBob3N0bmFtZS4KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIE5vIGhvc3RuYW1lIHRvIGVuY29kZSwgcmV0dXJuIHRoZSBpbnB1dC4K
KyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgo
KSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHM7CiB9CiAKLXN0YXRpYyBjaGFyICpl
bmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBLVVJMICZiYXNlLCBjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZyZWwsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitzdGF0aWMgdm9pZCBlbmNv
ZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBTdHJpbmcmIHJlbCwgY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBDaGFyQnVmZmVy
KiBvdXRwdXQpCiB7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzID0gZW5jb2RlSG9zdG5hbWVzKHJl
bCk7Ci0KLSAgICBjaGFyICpzdHJCdWZmZXI7CisgICAgVGVtcFVDaGFyQnVmZmVyIHM7CisgICAg
ZW5jb2RlSG9zdG5hbWVzKHJlbCwgJnMpOwogCiAgICAgVGV4dEVuY29kaW5nIHBhdGhFbmNvZGlu
ZyhVVEY4RW5jb2RpbmcoKSk7CiAgICAgVGV4dEVuY29kaW5nIG90aGVyRW5jb2RpbmcgPSAoZW5j
b2RpbmcuaXNWYWxpZCgpICYmICFyZWwuc3RhcnRzV2l0aCgibWFpbHRvOiIsIGZhbHNlKSkgPyBl
bmNvZGluZyA6IFVURjhFbmNvZGluZygpOwotICAgIAorCiAgICAgaW50IHBhdGhFbmQgPSAtMTsK
ICAgICBpZiAocGF0aEVuY29kaW5nICE9IG90aGVyRW5jb2RpbmcpIHsKLSAgICAgICAgcGF0aEVu
ZCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiWz8jXSIpKTsKKyAgICAgICAgLy8gRmluZCB0
aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWl0aGVyICMgb3IgPywga2VlcCBwYXRoRW5kIGF0IC0xIG90
aGVyd2lzZS4KKyAgICAgICAgaW50IHJlc3VsdCA9IGZpbmRGaXJzdE9mKHMuZGF0YSgpLCBzLnNp
emUoKSwgMCwgIiM/Iik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCisgICAgICAgICAgICBw
YXRoRW5kID0gcmVzdWx0OwogICAgIH0KKwogICAgIGlmIChwYXRoRW5kID09IC0xKSB7Ci0gICAg
ICAgIENTdHJpbmcgZGVjb2RlZCA9IHBhdGhFbmNvZGluZy5lbmNvZGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVQ2hhcio+KHMudW5pY29kZSgpKSwgcy5sZW5ndGgoKSk7Ci0gICAgICAgIGludCBk
ZWNvZGVkTGVuZ3RoID0gZGVjb2RlZC5sZW5ndGgoKTsKLSAgICAgICAgc3RyQnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Y2hhciAqPihmYXN0TWFsbG9jKGRlY29kZWRMZW5ndGggKyAxKSk7Ci0gICAgICAg
IG1lbWNweShzdHJCdWZmZXIsIGRlY29kZWQuZGF0YSgpLCBkZWNvZGVkTGVuZ3RoKTsKLSAgICAg
ICAgc3RyQnVmZmVyW2RlY29kZWRMZW5ndGhdID0gMDsKKyAgICAgICAgQ1N0cmluZyBkZWNvZGVk
ID0gcGF0aEVuY29kaW5nLmVuY29kZShzLmRhdGEoKSwgcy5zaXplKCkpOworICAgICAgICBvdXRw
dXQtPnJlc2l6ZShkZWNvZGVkLmxlbmd0aCgpKTsKKyAgICAgICAgbWVtY3B5KG91dHB1dC0+ZGF0
YSgpLCBkZWNvZGVkLmRhdGEoKSwgZGVjb2RlZC5sZW5ndGgoKSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaW50IGxlbmd0aCA9IHMubGVuZ3RoKCk7Ci0gICAgICAgIENTdHJpbmcgcGF0aERlY29k
ZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihz
LnVuaWNvZGUoKSksIHBhdGhFbmQpOwotICAgICAgICBDU3RyaW5nIG90aGVyRGVjb2RlZCA9IG90
aGVyRW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzLnVuaWNv
ZGUoKSkgKyBwYXRoRW5kLCBsZW5ndGggLSBwYXRoRW5kKTsKLSAgICAgICAgaW50IHBhdGhEZWNv
ZGVkTGVuZ3RoID0gcGF0aERlY29kZWQubGVuZ3RoKCk7Ci0gICAgICAgIGludCBvdGhlckRlY29k
ZWRMZW5ndGggPSBvdGhlckRlY29kZWQubGVuZ3RoKCk7Ci0gICAgICAgIHN0ckJ1ZmZlciA9IHN0
YXRpY19jYXN0PGNoYXIgKj4oZmFzdE1hbGxvYyhwYXRoRGVjb2RlZExlbmd0aCArIG90aGVyRGVj
b2RlZExlbmd0aCArIDEpKTsKLSAgICAgICAgbWVtY3B5KHN0ckJ1ZmZlciwgcGF0aERlY29kZWQu
ZGF0YSgpLCBwYXRoRGVjb2RlZExlbmd0aCk7Ci0gICAgICAgIG1lbWNweShzdHJCdWZmZXIgKyBw
YXRoRGVjb2RlZExlbmd0aCwgb3RoZXJEZWNvZGVkLmRhdGEoKSwgb3RoZXJEZWNvZGVkTGVuZ3Ro
KTsKLSAgICAgICAgc3RyQnVmZmVyW3BhdGhEZWNvZGVkTGVuZ3RoICsgb3RoZXJEZWNvZGVkTGVu
Z3RoXSA9IDA7Ci0gICAgfQorICAgICAgICBDU3RyaW5nIHBhdGhEZWNvZGVkID0gcGF0aEVuY29k
aW5nLmVuY29kZShzLmRhdGEoKSwgcGF0aEVuZCk7CisgICAgICAgIENTdHJpbmcgb3RoZXJEZWNv
ZGVkID0gb3RoZXJFbmNvZGluZy5lbmNvZGUocy5kYXRhKCkgKyBwYXRoRW5kLCBzLnNpemUoKSAt
IHBhdGhFbmQpOwogCi0gICAgcmV0dXJuIHN0ckJ1ZmZlcjsKKyAgICAgICAgb3V0cHV0LT5yZXNp
emUocGF0aERlY29kZWQubGVuZ3RoKCkgKyBvdGhlckRlY29kZWQubGVuZ3RoKCkpOworICAgICAg
ICBtZW1jcHkob3V0cHV0LT5kYXRhKCksIHBhdGhEZWNvZGVkLmRhdGEoKSwgcGF0aERlY29kZWQu
bGVuZ3RoKCkpOworICAgICAgICBtZW1jcHkob3V0cHV0LT5kYXRhKCkgKyBwYXRoRGVjb2RlZC5s
ZW5ndGgoKSwgb3RoZXJEZWNvZGVkLmRhdGEoKSwgb3RoZXJEZWNvZGVkLmxlbmd0aCgpKTsKKyAg
ICB9CisgICAgb3V0cHV0LT5hcHBlbmQoMCk7ICAvLyBudWxsLXRlcm1pbmF0ZSB0aGUgb3V0cHV0
LgogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdWJzdGl0dXRlQmFja3NsYXNoZXMoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyaW5nKQorc3RhdGljIFN0cmluZyBzdWJzdGl0dXRlQmFj
a3NsYXNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaW50IHF1ZXN0aW9uUG9zID0g
c3RyaW5nLmZpbmQoJz8nKTsKICAgICBpbnQgaGFzaFBvcyA9IHN0cmluZy5maW5kKCcjJyk7Ci0g
ICAgdW5zaWduZWQgcGF0aEVuZDsKLSAgICAKKyAgICBpbnQgcGF0aEVuZDsKKwogICAgIGlmICho
YXNoUG9zID49IDAgJiYgKHF1ZXN0aW9uUG9zIDwgMCB8fCBxdWVzdGlvblBvcyA+IGhhc2hQb3Mp
KSB7CiAgICAgICAgIHBhdGhFbmQgPSBoYXNoUG9zOwogICAgIH0gZWxzZSBpZiAocXVlc3Rpb25Q
b3MgPj0gMCkgewpAQCAtMTUwMiw3ICsxNTM0LDcgQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcg
c3Vic3RpdHV0ZUJhY2tzbAogICAgICAgICBwYXRoRW5kID0gc3RyaW5nLmxlbmd0aCgpOwogICAg
IH0KIAotICAgIHJldHVybiBzdHJpbmcubGVmdChwYXRoRW5kKS5yZXBsYWNlKCdcXCcsJy8nKSAr
IHN0cmluZy5taWQocGF0aEVuZCk7CisgICAgcmV0dXJuIHN0cmluZy5sZWZ0KHBhdGhFbmQpLnJl
cGxhY2UoJ1xcJywnLycpICsgc3RyaW5nLnN1YnN0cmluZyhwYXRoRW5kKTsKIH0KIAogYm9vbCBL
VVJMOjppc0hpZXJhcmNoaWNhbCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAkocmV2aXNpb24gMzAxMTgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUx
LDM1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKLSAgICBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtVUkwgJmIpIHsgcmV0dXJuICEo
YSA9PSBiKTsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgS1VSTCYgYSwgY29u
c3QgS1VSTCYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKICAgICBib29sIGVxdWFsSWdub3Jp
bmdSZWYoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKIAogY2xhc3MgS1VSTCB7CiBwdWJsaWM6
CisgICAgLy8gR2VuZXJhdGVzIGEgVVJMIHdoaWNoIGNvbnRhaW5zIGFuIGlzTnVsbCBzdHJpbmcu
CiAgICAgS1VSTCgpOwotICAgIEtVUkwoY29uc3QgY2hhciopOwotICAgIEtVUkwoY29uc3QgS1VS
TCYsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAgICBLVVJMKGNvbnN0IEtVUkwmLCBjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiwgY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAgS1VSTChjb25z
dCBEZXByZWNhdGVkU3RyaW5nJik7CisKKyAgICAvLyBUaGUgYXJndW1lbnQgaXMgYW4gYWJzb2x1
dGUgVVJMIHN0cmluZy4gRm9yIHRoZSBjaGFyKiB2ZXJzaW9uLCB0aGUKKyAgICAvLyBzdHJpbmcn
cyBlbmNvZGluZyBpcyBhc3N1bWVkIHRvIGJlIGZpbmFsLiBGb3IgdGhlIHN0cmluZyB2ZXJzaW9u
LCBpdAorICAgIC8vIHdpbGwgYmUgdHJlYXRlZCBhcyBVVEYtOC4KKyAgICAvLworICAgIC8vIERB
TkdFUiEgVGhpcyBkb2VzIG5vdCBkbyB0aGluZ3MgbGlrZSBJRE4sIGFuZCB0aGUgcmVzdWx0aW5n
IGhvc3QgbmFtZQorICAgIC8vIHdpbGwgYmUgbWFuZ2xlZC4gVXNlIG9ubHkgaWYgeW91IGhhdmUg
YW4gQVNDSUkgc3RyaW5nLCBvciBvbmUgd2hpY2ggY2FtZQorICAgIC8vIGZyb20gYSBLVVJMIG9y
aWdpbmFsbHksIFlvdSBhbG1vc3QgY2VydGFpbmx5IHdhbnQgdG8gdXNlOgorICAgIC8vICAgS1VS
TChOVVJMKCksIHlvdXJVUkwpOworICAgIC8vIHdoaWNoIHdpbGwgZG8gZXZlcnl0aGluZyBwcm9w
ZXJseSBpbnN0ZWFkIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICBleHBsaWNpdCBLVVJMKGNvbnN0
IGNoYXIqKTsKKyAgICBleHBsaWNpdCBLVVJMKGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gUmVz
b2x2ZXMgdGhlIHJlbGF0aXZlIFVSTCB3aXRoIHRoZSBnaXZlbiBiYXNlIFVSTC4gSWYgcHJvdmlk
ZWQsIHRoZQorICAgIC8vIFRleHRFbmNvZGluZyBpcyB1c2VkIHRvIGVuY29kZSB0aGUgcXVlcnkg
aWYgcHJvdmlkZWQuIFRoZSBxdWVyeSBlbmNvZGluZworICAgIC8vIHdpbGwgYmUgVVRGLTggb3Ro
ZXJ3aXNlLiBUaGUgYmFzZSBVUkwgY2FuIGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZQorICAg
IC8vIHJlbGF0aXZlIFVSTCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFic29sdXRlICh0aGlzIGlz
IHRoZSBvbmx5IHdheSB0bworICAgIC8vIHBhcnNlIGFuIGFic29sdXRlIFVSTCB3aXRoIGEgY3Vz
dG9tIHF1ZXJ5IGVuY29kaW5nKS4KKyAgICBLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmUpOworICAgIEtVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5n
JiByZWxhdGl2ZSwgY29uc3QgVGV4dEVuY29kaW5nJik7CisKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgS1VSTChOU1VSTCopOwogI2VuZGlmCkBAIC03NSw0MSArOTMsNjEgQEAgcHVibGljOgogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gdXJsU3RyaW5nLmlzTnVsbCgpOyB9CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gdXJsU3RyaW5nLmlzRW1wdHkoKTsgfQogCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgVVJMIGhhcyBhIHBhdGguIE5vdGUgdGhhdCAiaHR0
cDovL2Zvby5jb20vIiBoYXMgYQorICAgIC8vIHBhdGggb2YgIi8iLCBzbyB0aGlzIGZ1bmN0aW9u
IHdpbGwgcmV0dXJuIHRydWUuIE9ubHkgaW52YWxpZCBvcgorICAgIC8vIG5vbi1oaWVyYXJjaGlj
YWwgKGxpa2UgImphdmFzY3JpcHQ6IikgVVJMcyB3aWxsIGhhdmUgbm8gcGF0aC4KICAgICBib29s
IGhhc1BhdGgoKSBjb25zdDsKIAogICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdCB7IHJldHVybiB1
cmxTdHJpbmc7IH0KICAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBkZXByZWNhdGVkU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gdXJsU3RyaW5nOyB9CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHBy
b3RvY29sKCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBob3N0KCkgY29uc3Q7CisgICAg
U3RyaW5nIHByb3RvY29sKCkgY29uc3Q7CisgICAgU3RyaW5nIGhvc3QoKSBjb25zdDsKICAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgdXNl
cigpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcGFzcygpIGNvbnN0OwotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgcGF0aCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgbGFzdFBhdGhD
b21wb25lbnQoKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHF1ZXJ5KCkgY29uc3Q7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZyByZWYoKSBjb25zdDsKKyAgICBTdHJpbmcgdXNlcigpIGNvbnN0
OworICAgIFN0cmluZyBwYXNzKCkgY29uc3Q7CisgICAgU3RyaW5nIHBhdGgoKSBjb25zdDsKKyAg
ICBTdHJpbmcgbGFzdFBhdGhDb21wb25lbnQoKSBjb25zdDsKKyAgICBTdHJpbmcgcXVlcnkoKSBj
b25zdDsgIC8vIFdJTEwgaW5jbHVkZSB0aGUgIj8iLgorICAgIFN0cmluZyByZWYoKSBjb25zdDsg
ICAgLy8gV0lMTCBOT1QgaW5jbHVkZSB0aGUgIiMiLgogICAgIGJvb2wgaGFzUmVmKCkgY29uc3Q7
CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGVuY29kZWRIdG1sUmVmKCkgY29uc3QgeyByZXR1cm4g
cmVmKCk7IH0KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgVVJMJ3MgcHJvdG9j
b2wgaXMgdGhlIHNhbWUgYXMgdGhlIG51bGwtCisgICAgLy8gdGVybWluYXRlZCBBU0NJSSBhcmd1
bWVudC4gVGhlIGFyZ3VtZW50IG11c3QgYmUgbG93ZXItY2FzZS4KKyAgICBib29sIHByb3RvY29s
SXMoY29uc3QgY2hhciopIGNvbnN0OworCisgICAgU3RyaW5nIGVuY29kZWRIdG1sUmVmKCkgY29u
c3QgeyByZXR1cm4gcmVmKCk7IH0KIAotICAgIHZvaWQgc2V0UHJvdG9jb2woY29uc3QgRGVwcmVj
YXRlZFN0cmluZyAmKTsKLSAgICB2b2lkIHNldEhvc3QoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAm
KTsKKyAgICB2b2lkIHNldFByb3RvY29sKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0SG9z
dChjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIFNldHRpbmcgdGhlIHBvcnQgdG8gMCB3aWxsIGNs
ZWFyIGFueSBwb3J0IGZyb20gdGhlIFVSTC4KICAgICB2b2lkIHNldFBvcnQodW5zaWduZWQgc2hv
cnQgaW50KTsKLSAgICB2b2lkIHNldEhvc3RBbmRQb3J0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
KTsKLSAgICB2b2lkIHNldFVzZXIoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmKTsKLSAgICB2b2lk
IHNldFBhc3MoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmKTsKLSAgICB2b2lkIHNldFBhdGgoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmKTsKLSAgICB2b2lkIHNldFF1ZXJ5KGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRSZWYoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmKTsK
IAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcHJldHR5VVJMKCkgY29uc3Q7CisgICAgLy8gSW5wdXQg
aXMgbGlrZSAiZm9vLmNvbSIgb3IgImZvby5jb206ODAwMCIuCisgICAgdm9pZCBzZXRIb3N0QW5k
UG9ydChjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgc2V0VXNlcihjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHNldFBhc3MoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBJZiB5b3UgcGFzcyBh
biBlbXB0eSBwYXRoIGZvciBIVFRQIG9yIEhUVFBTIFVSTHMsIHRoZSByZXN1bHRpbmcgcGF0aAor
ICAgIC8vIHdpbGwgYmUgIi8iLgorICAgIHZvaWQgc2V0UGF0aChjb25zdCBTdHJpbmcmKTsKKwor
ICAgIC8vIFRoZSBxdWVyeSBtYXkgYmVnaW4gd2l0aCBhIHF1ZXN0aW9uIG1hcmssIG9yLCBpZiBu
b3QsIG9uZSB3aWxsIGJlIGFkZGVkCisgICAgLy8gZm9yIHlvdS4gU2V0dGluZyB0aGUgcXVlcnkg
dG8gdGhlIGVtcHR5IHN0cmluZyB3aWxsIGxlYXZlIGEgIj8iIGluIHRoZQorICAgIC8vIFVSTCAo
d2l0aCBub3RoaW5nIGFmdGVyIGl0KS4gVG8gY2xlYXIgdGhlIHF1ZXJ5LCBwYXNzIGFuIGlzTnVs
bCgpIHN0cmluZy4KKyAgICB2b2lkIHNldFF1ZXJ5KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9p
ZCBzZXRSZWYoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgcHJldHR5VVJMKCkgY29uc3Q7
CiAKICNpZiBQTEFURk9STShDRikKICAgICBDRlVSTFJlZiBjcmVhdGVDRlVSTCgpIGNvbnN0Owog
I2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIE5TVVJMICpnZXROU1VSTCgpIGNvbnN0Owor
ICAgIE5TVVJMKiBnZXROU1VSTCgpIGNvbnN0OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAg
ICAgb3BlcmF0b3IgUVVybCgpIGNvbnN0OwpAQCAtMTE4LDExICsxNTYsMTQgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNMb2NhbEZpbGUoKSBjb25zdDsKICAgICBTdHJpbmcgZmlsZVN5c3RlbVBhdGgo
KSBjb25zdDsKIAorICAgIC8vIFVuZXNjYXBlcyB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIFVSTCBl
c2NhcGluZyBydWxlcywgZ2l2ZW4gYW4gb3B0aW9uYWwKKyAgICAvLyBlbmNvZGluZyAoZGVmYXVs
dGluZyB0byBVVEYtOCBvdGhlcndpc2UpLiBEQU5HRVI6IElmIHRoZSBVUkwgaGFzICIlMDAiCisg
ICAgLy8gaW4gaXQsIHRoZSByZXN1bHRpbmcgc3RyaW5nIHdpbGwgaGF2ZSBlbWJlZGRlZCBudWxs
cyEKICAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBkZWNvZGVfc3RyaW5nKGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcmKTsKICAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBkZWNvZGVfc3RyaW5n
KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKICAgICBzdGF0
aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
KTsKLSAgICAKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwgJiwgY29uc3Qg
S1VSTCAmKTsKKworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIHByaW50KCkgY29uc3Q7CkBAIC0x
MzAsOCArMTcxLDIxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIGlzSGllcmFyY2hp
Y2FsKCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0KGNvbnN0IEtVUkwmLCBjb25zdCBEZXByZWNhdGVk
U3RyaW5nJiwgY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAgdm9pZCBwYXJzZShjb25zdCBjaGFy
ICp1cmwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgKm9yaWdpbmFsU3RyaW5nKTsKKyAgICB2b2lk
IGluaXQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwor
CisgICAgLy8gUGFyc2VzIHRoZSBnaXZlbiBVUkwuIFRoZSBvcmlnaW5hbFN0cmluZyBwYXJhbWV0
ZXIgYWxsb3dzIGZvciBhbQorICAgIC8vIG9wdGltaXphdGlvbiB3aGVuIHRoZSBzb3VyY2UgaXMg
dGhlIHNhbWUgYXMgdGhlIGZpeGVkLXVwIHN0cmluZywgaXQgd2lsbAorICAgIC8vIHVzZSBzdHJp
bmcgcmVmZXJlbmNlLWNvdW50ZWQgY29waWVzIGluc3RlYWQgb2YgZG9pbmcgYSBuZXcgYWxsb2Nh
dGlvbi4KKyAgICAvLworICAgIC8vIEZJWE1FOiBUaGlzIG9wdGltaXphdGlvbiBpcyBjdXJyZW50
bHkgYnJva2VuIHNpbmNlIHRoZSBpbnRlcm5hbCBzdHJpbmcKKyAgICAvLyBpcyBzdGlsbCBhIERl
cHJlY2F0ZWRTdHJpbmchCisgICAgLy8KKyAgICAvLyBUaGlzIHBhcmFtZXRlciBpcyBhbHNvICpu
ZWNlc3NhcnkqIGlmIHRoZSBpbnB1dCB0byB0aGUgS1VSTCBjb25zdHJ1Y3RvcgorICAgIC8vIGlz
IGFuIGVtcHR5IFN0cmluZy4gU29tZSBjYWxsaW5nIGNvZGUgcmVxdWlyZXMgdGhhdCB0aGUgZGlm
ZmVyZW5jZQorICAgIC8vIGJldHdlZW4gbnVsbCBhbmQgZW1wdHkgc3RyaW5ncyBpcyBtYWludGFp
bmVkLiBQYXJzaW5nIHdpbGwgbm90IGNoYW5nZQorICAgIC8vIHRoZSBlbXB0eSBzdHJpbmcsIHNv
IHRoZSBpbnRlcm5hbCBzdHJpbmcgd2lsbCBiZSBhc3NpZ25lZCB0byBleGFjdGx5CisgICAgLy8g
d2hhdGV2ZXIgdGhlIGlucHV0IHN0cmluZyBpcy4KKyAgICB2b2lkIHBhcnNlKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgU3RyaW5nKiBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBEZXByZWNhdGVkU3Ry
aW5nIHVybFN0cmluZzsKICAgICBib29sIG1faXNWYWxpZDsKQEAgLTE0NCw3ICsxOTgsNyBAQCBw
cml2YXRlOgogICAgIGludCBwYXRoRW5kUG9zOwogICAgIGludCBxdWVyeUVuZFBvczsKICAgICBp
bnQgZnJhZ21lbnRFbmRQb3M7Ci0gICAgCisKICAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5n
UmVmKGNvbnN0IEtVUkwmIGEsIGNvbnN0IEtVUkwmIGIpOwogfTsKIApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODAsNyArMTY4MCw3IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWMKICAgICAgICAgICAgICAgICAg
ICAgaHJlZiA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CiAKICAgICAgICAgICAg
ICAgICBpZiAoIWhyZWYuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgS1VSTCBsaW5r
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZi5kZXByZWNhdGVkU3RyaW5n
KCkpOworICAgICAgICAgICAgICAgICAgICBLVVJMIGxpbmsoZWxlbWVudC0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoaHJlZikpOwogICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNldFVSTEZvclJlY3QobGluaywgcmVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJD
b3JlL3N2Zy9TVkdJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwx
MiBAQCB2b2lkIFNWR0ltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgCiAgICAg
Q2FjaGVkSW1hZ2UgKm5ld0ltYWdlID0gMDsKICAgICBpZiAoIWltYWdlRWxlbWVudC0+aHJlZigp
LmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHVyaSA9IGltYWdlRWxlbWVu
dC0+YmFzZVVSSSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHVyaSA9IGlt
YWdlRWxlbWVudC0+YmFzZVVSSSgpOwogICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICB1cmkgPSBLVVJMKHVyaSwgaW1hZ2VFbGVtZW50LT5ocmVmKCkuZGVwcmVjYXRlZFN0
cmluZygpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAgICB1cmkgPSBLVVJMKEtVUkwo
dXJpKSwgaW1hZ2VFbGVtZW50LT5ocmVmKCkpLnN0cmluZygpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB1cmkgPSBpbWFnZUVsZW1lbnQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0g
ICAgICAgIG5ld0ltYWdlID0gZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKHVyaSk7Cisg
ICAgICAgICAgICB1cmkgPSBpbWFnZUVsZW1lbnQtPmhyZWYoKTsKKyAgICAgICAgbmV3SW1hZ2Ug
PSBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UodXJpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
CiAgICAgfQogCiAgICAgQ2FjaGVkSW1hZ2UgKm9sZEltYWdlID0gaW1hZ2UoKTsKSW5kZXg6IFdl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAg
Ym9vbCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUgogICAgICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+Y2FuY2VsQ29udGVudFBvbGljeUNoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9s
aWN5IGNoZWNrcwogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0UHJvdmlzaW9uYWxM
b2FkKDApOwogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c2V0UmVzcG9uc2VNSU1FVHlwZSgi
aW1hZ2Uvc3ZnK3htbCIpOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+YmVnaW4oInBsYWNl
aG9sZGVyLnN2ZyIpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50CisgICAgICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50
CiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRh
LT5zaXplKCkpOwogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZW5kKCk7CiAgICAgfQpJbmRl
eDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBib29s
IFhNTEh0dHBSZXF1ZXN0Ojp1cmxNYXRjaGVzRG9jdW1lbnRECiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgLy8gYnV0IGEgcmVtb3RlIGRvY3VtZW50IGNhbiBvbmx5IGxvYWQgZnJvbSB0aGUg
c2FtZSBwb3J0IG9uIHRoZSBzZXJ2ZXIKLSAgICBLVVJMIGRvY3VtZW50VVJMID0gbV9kb2MtPnVy
bCgpOworICAgIEtVUkwgZG9jdW1lbnRVUkwobV9kb2MtPnVybCgpKTsKICAgICBpZiAoZG9jdW1l
bnRVUkwucHJvdG9jb2woKS5sb3dlcigpID09IHVybC5wcm90b2NvbCgpLmxvd2VyKCkKICAgICAg
ICAgICAgICYmIGRvY3VtZW50VVJMLmhvc3QoKS5sb3dlcigpID09IHVybC5ob3N0KCkubG93ZXIo
KQogICAgICAgICAgICAgJiYgZG9jdW1lbnRVUkwucG9ydCgpID09IHVybC5wb3J0KCkpCkluZGV4
OiBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YU0xJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3htbC9YU0xJ
bXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIFhTTElt
cG9ydFJ1bGU6OmxvYWRTaGVldCgpCiAgICAgWFNMU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBw
YXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgp
KQogICAgICAgICAvLyB1c2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwK
LSAgICAgICAgYWJzSHJlZiA9IEtVUkwocGFyZW50U2hlZXQtPmhyZWYoKS5kZXByZWNhdGVkU3Ry
aW5nKCksIG1fc3RySHJlZi5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpOworICAgICAgICBh
YnNIcmVmID0gS1VSTChLVVJMKHBhcmVudFNoZWV0LT5ocmVmKCkpLCBtX3N0ckhyZWYpLnN0cmlu
ZygpOwogICAgIAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xlIGluIG91ciBpbXBvcnQgY2hhaW4u
ICBJZiB3ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAgLy8gaW4gb3VyIHBhcmVudCBjaGFp
biB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCkluZGV4OiBXZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9h
ZGVyRnVuYyhjb25zdCB4bWwKICAgICAgICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6IHsKICAg
ICAgICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGNvbnRleHQgPSAoeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIpY3R4dDsKICAgICAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxOb2RlR2V0
QmFzZShjb250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2RlKTsKLSAgICAgICAgICAg
IEtVUkwgdXJsKChjb25zdCBjaGFyKiliYXNlLCAoY29uc3QgY2hhciopdXJpKTsKKyAgICAgICAg
ICAgIEtVUkwgdXJsKEtVUkwoKGNvbnN0IGNoYXIqKWJhc2UpLCAoY29uc3QgY2hhciopdXJpKTsK
ICAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7CiAgICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVy
cm9yOwogICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19037</attachid>
            <date>2008-02-10 10:54:12 -0800</date>
            <delta_ts>2008-02-12 13:15:32 -0800</delta_ts>
            <desc>more ambitious approach, eliminating more DeprecatedString</desc>
            <filename>KURLInProgressPatch.txt</filename>
            <type>text/plain</type>
            <size>167884</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDA4LTAyLTEwICBNYXJ2aW4gRGVja2VyICA8bWFydi5kZWNrZXJA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIEZp
eCBLVVJMJ3MgaW50ZXJmYWNlIHRvIHVzZSBTdHJpbmcgaW5zdGVhZCBvZiBEZXByZWNhdGVkU3Ry
aW5nICh0aGUKKyAgICAgICAgaW50ZXJuYWxzIHdpbGwgYmUgZml4ZWQgbGF0ZXIpLiBBZGRlZCBh
IG5ldyBmdW5jdGlvbiBLVVJMLnByb3RvY29sSXMKKyAgICAgICAgdG8gZWZmaWNpZW50bHkgY29t
cGFyZSBwcm90b2NvbHMgd2l0aG91dCBjYXNlIGVycm9ycy4gTWFkZSB0aGUKKyAgICAgICAgY29u
c3RydWN0b3JzIGV4cGxpY2l0IHRvIGhpZ2hsaWdodCBleHBlbnNpdmUgb3BlcmF0aW9ucy4KKwor
ICAgICAgICBIYWxmIGZpeGVzIDE2NTM4IChLVVJMIHNob3VsZCB1c2UgU3RyaW5nKSwgZml4ZXMg
YnVnIDE2NDg1CisgICAgICAgIChEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkIHdpbGwgY3Jhc2gg
aWYgdGhlIFVSTCBpc051bGwpLiBJIGZpeGVkIGEKKyAgICAgICAgc2ltaWxhciBwcm9ibGVtIGlu
IEljb25EYXRhYmFzZSB3aGljaCBoYXMgbm8gYXNzb2NpYXRlZCBidWcuIFRoaXMgZml4ZXMKKyAg
ICAgICAgYnVnIDE2NDg3IChLVVJMIGRvZXNuJ3QgcHJlc2VydmUgaXNOdWxsIG9uIGl0cyBhcmd1
bWVudHMpLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5jcHA6CisgICAgICAgIChLSlM6Ok5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eSk6
CisgICAgICAgICogYmluZGluZ3MvanMva2pzX3Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OktKU1Byb3h5Ojppbml0U2NyaXB0KToKKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjppbnNlcnRlZEludG9QYXJlbnQpOgor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0
Q29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpjb21wbGV0ZVVSTCk6CisgICAg
ICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YmFzZVVS
SSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjb3B5KToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBbmNob3JFbGVtZW50Ojpob3N0KToKKyAgICAgICAgKiBodG1sL0hUTUxLZXlnZW5FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50OjphcHBlbmRGb3Jt
RGF0YSk6CisgICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRl
cjo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjppY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRP
cGVuVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRFeHBsaWNpdE9wZW4p
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmdvdG9BbmNob3IpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdGFy
dFJlZGlyZWN0aW9uVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbW1p
dFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwpOgorICAg
ICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVGaXJzdENoYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUGF0aFNl
Z21lbnRFbmRDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQWxsQVNDSUkpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUFTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdE9mKToKKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpsYXN0UGF0aENvbXBvbmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpLVVJMOjpwcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpob3N0
KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6S1VS
TDo6dXNlcik6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpyZWYpOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6cHJvdG9jb2xJcyk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpxdWVyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNl
dFByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldEhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6S1VSTDo6c2V0UG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRIb3N0
QW5kUG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRVc2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OktVUkw6OnNldFBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6c2V0UmVmKToK
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OnNldFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cHJldHR5VVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OmRlY29kZV9zdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6S1VS
TDo6aXNMb2NhbEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kRXNjYXBpbmdCYWRDaGFy
cyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UGF0aFJlbW92aW5nRG90cyk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXNTbGFzaERvdE9yRG90RG90KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBh
cnNlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
S1VSTDo6ZW5jb2RlX3N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRFbmNvZGVkSG9z
dG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUhvc3RuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVSZWxh
dGl2ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJzdGl0dXRlQmFja3NsYXNoZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL0tVUkwuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0p
OgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZW5jb2RlZEh0bWxSZWYpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjphZGRQREZVUkxSZWN0KToKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1h
Z2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVudERvbWFpbik6
CisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNM
SW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKToKKwogMjAwOC0wMi0wOSAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDkgKzM3MSw5IEBAIF9fWk43V2ViQ29yZTRG
b250QzFFUktOU18xNkZvbnRQbGF0Zm9ybUQKIF9fWk43V2ViQ29yZTRGb250QzFFdgogX19aTjdX
ZWJDb3JlNEZvbnREMUV2CiBfX1pON1dlYkNvcmU0Rm9udGFTRVJLUzBfCi1fX1pON1dlYkNvcmU0
S1VSTDEzZGVjb2RlX3N0cmluZ0VSS05TXzE2RGVwcmVjYXRlZFN0cmluZ0UKK19fWk43V2ViQ29y
ZTRLVVJMMTNkZWNvZGVfc3RyaW5nRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTRLVVJMQzFF
UDVOU1VSTAotX19aTjdXZWJDb3JlNEtVUkxDMUVSS05TXzE2RGVwcmVjYXRlZFN0cmluZ0UKK19f
Wk43V2ViQ29yZTRLVVJMQzFFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlNEtVUkxDMUV2CiBf
X1pON1dlYkNvcmU0Tm9kZTE3c3RvcElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5vZGUx
OHN0YXJ0SWdub3JpbmdMZWFrc0V2CkBAIC00NTgsNyArNDU4LDcgQEAgX19aTjdXZWJDb3JlNldp
ZGdldEMxRVA2TlNWaWV3CiBfX1pON1dlYkNvcmU2V2lkZ2V0QzFFdgogX19aTjdXZWJDb3JlN0lu
dFNpemVDMUVSSzdfTlNTaXplCiBfX1pON1dlYkNvcmU3bnNDb2xvckVSS05TXzVDb2xvckUKLV9f
Wk43V2ViQ29yZThEb2N1bWVudDExY29tcGxldGVVUkxFUktOU18xNkRlcHJlY2F0ZWRTdHJpbmdF
CitfX1pON1dlYkNvcmU4RG9jdW1lbnQxMWNvbXBsZXRlVVJMRVJLTlNfNlN0cmluZ0UKIF9fWk43
V2ViQ29yZThEb2N1bWVudDEzcmVtb3ZlTWFya2Vyc0VOU18xNERvY3VtZW50TWFya2VyMTBNYXJr
ZXJUeXBlRQogX19aTjdXZWJDb3JlOERvY3VtZW50MTRzZXRGb2N1c2VkTm9kZUVOM1dURjEwUGFz
c1JlZlB0cklOU180Tm9kZUVFRQogX19aTjdXZWJDb3JlOERvY3VtZW50NGJvZHlFdgpAQCAtNTM4
LDggKzUzOCw2IEBAIF9fWk43V2ViQ29yZTlUaW1lckJhc2VDMkV2CiBfX1pON1dlYkNvcmU5VGlt
ZXJCYXNlRDJFdgogX19aTjdXZWJDb3JlOXBhZ2VDYWNoZUV2CiBfX1pON1dlYkNvcmVlcUVSS05T
XzE5UmVzb3VyY2VSZXF1ZXN0QmFzZUVTMl8KLV9fWk43V2ViQ29yZWVxRVJLTlNfNEtVUkxFUzJf
Ci1fX1pOSzdXZWJDb3JlNUZyYW1lMzdiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0
YXJ0RXYKIF9fWk5LN1dlYkNvcmUxMUNhY2hlZEltYWdlNWltYWdlRXYKIF9fWk5LN1dlYkNvcmUx
MUNvbnRleHRNZW51MTlwbGF0Zm9ybURlc2NyaXB0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1l
TG9hZGVyMTBpc0NvbXBsZXRlRXYKQEAgLTY1Miw2ICs2NTAsNyBAQCBfX1pOSzdXZWJDb3JlNUZy
YW1lMTlzZXRJblZpZXdTb3VyY2VNb2RlCiBfX1pOSzdXZWJDb3JlNUZyYW1lMzBhcHBseUVkaXRp
bmdTdHlsZVRvQm9keUVsZW1lbnRFdgogX19aTks3V2ViQ29yZTVGcmFtZTMxZm9udEF0dHJpYnV0
ZXNGb3JTZWxlY3Rpb25TdGFydEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMzNyZW1vdmVFZGl0aW5n
U3R5bGVGcm9tQm9keUVsZW1lbnRFdgorX19aTks3V2ViQ29yZTVGcmFtZTM3YmFzZVdyaXRpbmdE
aXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lNHBhZ2VFdgog
X19aTks3V2ViQ29yZTVGcmFtZTR0cmVlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWU0dmlld0V2Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDMw
MTE4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4
ZWNTdGF0ZSogCiAgICAgLy8gbm90IHRoZSB0YXJnZXQgZnJhbWUuCiAgICAgRnJhbWUqIGFjdGl2
ZUZyYW1lID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cqPihleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKGFjdGl2ZUZyYW1lKQotICAgICAgICBz
dHIgPSBhY3RpdmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyKTsKKyAgICAgICAg
c3RyID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMU3RyaW5nKHN0cik7CiAK
ICAgICBib29sIHVzZXJHZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdFByb3h5KCktPnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpOwogICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlv
bkNoYW5nZShzdHIsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBm
YWxzZSwgdXNlckdlc3R1cmUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwCShy
ZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIEpTTG9jYXRpb246OnB1dChFeGVj
U3RhdGUqIGV4ZWMsIGNvCiAgIGlmICghbV9mcmFtZSkKICAgICByZXR1cm47CiAKLSAgRGVwcmVj
YXRlZFN0cmluZyBzdHIgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CisgIFN0cmluZyBzdHIgPSB2
YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CiAgIEtVUkwgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVy
bCgpOwogICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cobV9m
cmFtZSk7CiAgIGJvb2wgc2FtZURvbWFpbkFjY2VzcyA9IHdpbmRvdyAmJiB3aW5kb3ctPmFsbG93
c0FjY2Vzc0Zyb20oZXhlYyk7CkBAIC0xNDUsNiArMTQ1LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpw
dXQoRXhlY1N0YXRlKiBleGVjLCBjbwogCiAgICAgICBzd2l0Y2ggKGVudHJ5LT52YWx1ZS5pbnRW
YWx1ZSkgewogICAgICAgY2FzZSBIcmVmOiB7CisgICAgICAgICAgLy8gRklYTUU6IFdoeSBpc24n
dCB0aGlzIG5lZWRlZCBmb3IgSG9zdCBiZWxvdywgZXRjLj8KICAgICAgICAgICBGcmFtZSogZnJh
bWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7CiAgICAg
ICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUzLDI3ICsxNTQs
MjkgQEAgdm9pZCBKU0xvY2F0aW9uOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAg
IHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoc3RyKTsKICAgICAgICAgICBicmVh
azsKICAgICAgIH0KLSAgICAgIGNhc2UgSGFzaDogeworICAgICAgY2FzZSBIYXNoOgogICAgICAg
ICAgIGlmIChzdHIuc3RhcnRzV2l0aCgiIyIpKQotICAgICAgICAgICAgICBzdHIgPSBzdHIubWlk
KDEpOworICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDEpOwogICAgICAgICAgIGlm
ICh1cmwucmVmKCkgPT0gc3RyKQogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgdXJs
LnNldFJlZihzdHIpOwogICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBIb3N0
OiB7CisgICAgICBjYXNlIEhvc3Q6CiAgICAgICAgICAgdXJsLnNldEhvc3RBbmRQb3J0KHN0cik7
CiAgICAgICAgICAgYnJlYWs7Ci0gICAgICB9CiAgICAgICBjYXNlIEhvc3RuYW1lOgogICAgICAg
ICAgIHVybC5zZXRIb3N0KHN0cik7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFBhdGhu
YW1lOgogICAgICAgICAgIHVybC5zZXRQYXRoKHN0cik7CiAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIFBvcnQ6Ci0gICAgICAgICAgdXJsLnNldFBvcnQoc3RyLnRvVUludCgpKTsKKyAgICAg
IGNhc2UgUG9ydDogeworICAgICAgICAgIGludCBwb3J0ID0gc3RyLnRvSW50KCk7CisgICAgICAg
ICAgaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiAweEZGRkYpCisgICAgICAgICAgICAgIHBvcnQgPSAw
OworICAgICAgICAgIHVybC5zZXRQb3J0KHBvcnQpOwogICAgICAgICAgIGJyZWFrOworICAgICAg
fQogICAgICAgY2FzZSBQcm90b2NvbDoKICAgICAgICAgICB1cmwuc2V0UHJvdG9jb2woc3RyKTsK
ICAgICAgICAgICBicmVhazsKQEAgLTE5Miw3ICsxOTUsNyBAQCB2b2lkIEpTTG9jYXRpb246OnB1
dChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgIH0KIAogICBGcmFtZSogYWN0aXZlRnJhbWUgPSBXaW5k
b3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gIGlmICghdXJsLmRl
cHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCBzYW1l
RG9tYWluQWNjZXNzKSB7CisgIGlmICghdXJsLnByb3RvY29sSXMoImphdmFzY3JpcHQiKSB8fCBz
YW1lRG9tYWluQWNjZXNzKSB7CiAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5z
Y3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwuc3RyaW5nKCksIGFjdGl2ZUZyYW1lLT5s
b2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOwogICB9CkBA
IC0yMjcsNyArMjMwLDcgQEAgSlNWYWx1ZSoganNMb2NhdGlvblByb3RvRnVuY1JlcGxhY2UoRXhl
YwogICAgIGlmIChhY3RpdmVGcmFtZSkgewogICAgICAgICBpZiAoIWFjdGl2ZUZyYW1lLT5sb2Fk
ZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IGFyZ3NbMF0tPnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICBTdHJpbmcgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhl
Yyk7CiAgICAgICAgIGNvbnN0IFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRv
dyhmcmFtZSk7CiAgICAgICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFs
c2UpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkgewogICAg
ICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5w
cm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKQEAgLTI1MSw3ICsyNTQsNyBAQCBKU1ZhbHVlKiBqc0xv
Y2F0aW9uUHJvdG9GdW5jUmVsb2FkKEV4ZWNTCiAgICAgaWYgKCF3aW5kb3ctPmFsbG93c0FjY2Vz
c0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaWYgKCFm
cmFtZS0+bG9hZGVyKCktPnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZh
c2NyaXB0OiIsIGZhbHNlKSB8fCAod2luZG93ICYmIHdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkpIHsKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+dXJsKCkucHJvdG9jb2xJcygiamF2
YXNjcmlwdCIpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkg
ewogICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVj
KS0+aW1wbCgpLT5mcmFtZSgpLT5zY3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUo
KTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZVJlZnJlc2godXNlckdlc3R1cmUp
OwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAko
cmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDYgQEAgSlNWYWx1ZSoganNYTUxIdHRw
UmVxdWVzdFByb3RvdHlwZUZ1bmN0aQogICAgIHJldHVybiBoZWFkZXI7CiB9CiAKLQogSlNWYWx1
ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aW9uT3BlbihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIGlmICghdGhpc09i
ai0+aW5oZXJpdHMoJkpTWE1MSHR0cFJlcXVlc3Q6OmluZm8pKQpAQCAtMjY2LDcgKzI2NSw3IEBA
IEpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGkKICAgICBGcmFtZSogZnJh
bWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgS1VSTCB1cmwg
PSBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKERlcHJlY2F0ZWRTdHJpbmcoYXJnc1sxXS0+
dG9TdHJpbmcoZXhlYykpKTsKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxl
dGVVUkwoYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykpOwogCiAgICAgYm9vbCBhc3luYyA9IHRydWU7
CiAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDMpCkBAIC0yOTgsMTAgKzI5Nyw5IEBAIEpTVmFsdWUq
IGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGkKICAgICBTdHJpbmcgYm9keTsKIAogICAg
IGlmIChhcmdzLnNpemUoKSA+PSAxKSB7Ci0gICAgICAgIGlmIChhcmdzWzBdLT50b09iamVjdChl
eGVjKS0+aW5oZXJpdHMoJkpTRG9jdW1lbnQ6OmluZm8pKSB7Ci0gICAgICAgICAgICBEb2N1bWVu
dCogZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4o
YXJnc1swXS0+dG9PYmplY3QoZXhlYykpLT5pbXBsKCkpOwotICAgICAgICAgICAgYm9keSA9IGRv
Yy0+dG9TdHJpbmcoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChhcmdzWzBdLT50b09iamVjdChleGVjKS0+aW5oZXJpdHMoJkpTRG9jdW1lbnQ6Omlu
Zm8pKQorICAgICAgICAgICAgYm9keSA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc3RhdGljX2Nh
c3Q8SlNEb2N1bWVudCo+KGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMpKS0+aW1wbCgpKS0+dG9TdHJp
bmcoKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBjb252ZXJ0aW5nIGNlcnRhaW4g
dmFsdWVzIChsaWtlIG51bGwpIHRvIG9iamVjdCBjYW4gc2V0IGFuIGV4Y2VwdGlvbgogICAgICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJ
KHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIEpTVmFsdWUqIE5hdmlnYXRvcjo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGUKICAgICByZXR1cm4ganNTdHJpbmcoIk5ldHNjYXBlIik7CiAg
IGNhc2UgQXBwVmVyc2lvbjogewogICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUg
dXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCi0gICAgY29uc3Qg
U3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+
ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICBj
b25zdCBTdHJpbmcgdXNlckFnZW50ID0gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2Zy
YW1lLT5kb2N1bWVudCgpID8gS1VSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSkgOiBLVVJM
KCkpOwogICAgIHJldHVybiBqc1N0cmluZyh1c2VyQWdlbnQuc3Vic3RyaW5nKHVzZXJBZ2VudC5m
aW5kKCcvJykgKyAxKSk7CiAgIH0KICAgY2FzZSBQcm9kdWN0OgpAQCAtMjA5LDcgKzIwOSw3IEBA
IEpTVmFsdWUqIE5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKICAgY2FzZSBMYW5ndWFn
ZToKICAgICByZXR1cm4ganNTdHJpbmcoZGVmYXVsdExhbmd1YWdlKCkpOwogICBjYXNlIFVzZXJB
Z2VudDoKLSAgICByZXR1cm4ganNTdHJpbmcobV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudCht
X2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkp
KTsKKyAgICByZXR1cm4ganNTdHJpbmcobV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2Zy
YW1lLT5kb2N1bWVudCgpID8gS1VSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSkgOiBLVVJM
KCkpKTsKICAgY2FzZSBQbGF0Zm9ybToKICAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJ
R0FUT1JfUExBVEZPUk0pOwogICBjYXNlIF9QbHVnaW5zOgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfcHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X3Byb3h5LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19w
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIEtKU1Byb3h5
Ojppbml0U2NyaXB0KCkKICAgICBtX2dsb2JhbE9iamVjdCA9IG5ldyBKU0RPTVdpbmRvdyhtX2Zy
YW1lLT5kb21XaW5kb3coKSk7CiAKICAgICAvLyBGSVhNRTogV2UgY2FuIGdldCByaWQgb2YgdGhp
cyAoYW5kIGVsaW1pbmF0ZSBjb21wYXRNb2RlIGVudGlyZWx5KS4KLSAgICBTdHJpbmcgdXNlckFn
ZW50ID0gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkpOworICAgIFN0cmluZyB1c2VyQWdl
bnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBL
VVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSA6IEtVUkwoKSk7CiAgICAgaWYgKHVzZXJB
Z2VudC5maW5kKCJNaWNyb3NvZnQiKSA+PSAwIHx8IHVzZXJBZ2VudC5maW5kKCJNU0lFIikgPj0g
MCkKICAgICAgICAgbV9nbG9iYWxPYmplY3QtPnNldENvbXBhdE1vZGUoSUVDb21wYXQpOwogICAg
IGVsc2UgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAzMDEx
OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2MCwxNSArMzYwLDE1IEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEV4ZWNTdGF0
ZSogZXgKICAgICAgICAgbmV3V2luZG93LT5wdXREaXJlY3QoImRpYWxvZ0FyZ3VtZW50cyIsIGRp
YWxvZ0FyZ3MpOwogCiAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxz
ZSkgfHwgbmV3V2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7Ci0gICAgICAgIFN0cmlu
ZyBjb21wbGV0ZWRVUkwgPSB1cmwuaXNFbXB0eSgpID8gdXJsIDogYWN0aXZlRnJhbWUtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHVybCk7CisgICAgICAgIEtVUkwgY29tcGxldGVkVVJMID0gdXJs
LmlzRW1wdHkoKSA/IEtVUkwoIiIpIDogYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKHVybCk7CiAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0
UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAKICAgICAgICAgaWYgKGNyZWF0ZWQp
IHsKLSAgICAgICAgICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+Y2hhbmdlTG9jYXRpb24oS1VSTChj
b21wbGV0ZWRVUkwuZGVwcmVjYXRlZFN0cmluZygpKSwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5v
dXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CisgICAgICAgICAgICBuZXdG
cmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUt
PmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgICAg
ICAgICAgICBpZiAoRG9jdW1lbnQqIG9sZERvYyA9IG9wZW5lckZyYW1lLT5kb2N1bWVudCgpKQog
ICAgICAgICAgICAgICAgIG5ld0ZyYW1lLT5kb2N1bWVudCgpLT5zZXRCYXNlVVJMKG9sZERvYy0+
YmFzZVVSTCgpKTsKICAgICAgICAgfSBlbHNlIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShjb21wbGV0ZWRV
UkwsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBmYWxzZSwgdXNl
ckdlc3R1cmUpOworICAgICAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0
aW9uQ2hhbmdlKGNvbXBsZXRlZFVSTC5zdHJpbmcoKSwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5v
dXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG5ld0ZyYW1lOwpAQCAtMTEyMyw3ICsxMTIzLDcgQEAgSlNWYWx1ZSogd2luZG93UHJvdG9G
dW5jT3BlbihFeGVjU3RhdGUqIAogCiAgICAgICAgIFN0cmluZyBjb21wbGV0ZWRVUkw7CiAgICAg
ICAgIGlmICghdXJsU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbXBsZXRlZFVSTCA9
IGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOworICAgICAg
ICAgICAgY29tcGxldGVkVVJMID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
U3RyaW5nKHVybFN0cmluZyk7CiAKICAgICAgICAgY29uc3QgV2luZG93KiB0YXJnZXRlZFdpbmRv
dyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpOwogICAgICAgICBpZiAoIWNvbXBsZXRl
ZFVSTC5pc0VtcHR5KCkgJiYgKCFjb21wbGV0ZWRVUkwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoi
LCBmYWxzZSkgfHwgKHRhcmdldGVkV2luZG93ICYmIHRhcmdldGVkV2luZG93LT5hbGxvd3NBY2Nl
c3NGcm9tKGV4ZWMpKSkpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMzAxMTgp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Nzks
NyArNTc5LDcgQEAgc3RhdGljIE5TQXJyYXkgKmtpdChjb25zdCBWZWN0b3I8SW50UmVjdAogICAg
IEFTU0VSVChuYW1lKTsKICAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gW3NlbGYgX2Vs
ZW1lbnRdOwogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6S1VSTChl
bGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChlbGVtZW50LT5nZXRBdHRy
aWJ1dGUobmFtZSkpLmRlcHJlY2F0ZWRTdHJpbmcoKSkpLmdldE5TVVJMKCk7CisgICAgcmV0dXJu
IFdlYkNvcmU6OktVUkwoZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwo
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWUpKSkpLmdldE5TVVJMKCk7CiB9CiAKIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBACiAK
IC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfY3JlYXRlRG9jdW1lbnRGcmFnbWVudFdpdGhNYXJr
dXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5n
ICopYmFzZVVSTFN0cmluZwogewotICAgIE5TVVJMICpiYXNlVVJMID0gV2ViQ29yZTo6S1VSTChb
c2VsZiBfZG9jdW1lbnRdLT5jb21wbGV0ZVVSTChXZWJDb3JlOjpwYXJzZVVSTChiYXNlVVJMU3Ry
aW5nKSkuZGVwcmVjYXRlZFN0cmluZygpKS5nZXROU1VSTCgpOworICAgIE5TVVJMICpiYXNlVVJM
ID0gW3NlbGYgX2RvY3VtZW50XS0+Y29tcGxldGVVUkwoV2ViQ29yZTo6cGFyc2VVUkwoYmFzZVVS
TFN0cmluZykpLmdldE5TVVJMKCk7CiAgICAgcmV0dXJuIFtzZWxmIGNyZWF0ZURvY3VtZW50RnJh
Z21lbnRXaXRoTWFya3VwU3RyaW5nOm1hcmt1cFN0cmluZyBiYXNlVVJMOmJhc2VVUkxdOwogfQog
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlQVhPYmplY3QubW0JKHJldmlzaW9uIDMwMTE4
KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTEwMSwxNSArMTEwMSwxMiBAQCBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveFJlY3Qo
UmVuZGVyT2JqCiAgICAgICAgIGlmIChbc2VsZiBpc0FuY2hvcl0pIHsKICAgICAgICAgICAgIEhU
TUxBbmNob3JFbGVtZW50KiBhbmNob3IgPSBbc2VsZiBhbmNob3JFbGVtZW50XTsKICAgICAgICAg
ICAgIGlmIChhbmNob3IpIHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBh
bmNob3ItPmdldEF0dHJpYnV0ZShocmVmQXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAg
ICAgICAgICAgIGlmICghcy5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAgICBzID0gYW5j
aG9yLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEtVUkwocykuZ2V0TlNVUkwoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzID0gYW5jaG9yLT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIp
OworICAgICAgICAgICAgICAgIGlmICghcy5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEtVUkwoYW5jaG9yLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzKSkuZ2V0TlNVUkwo
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX3JlbmRlcmVy
LT5pc0ltYWdlKCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpICYmIG1fcmVuZGVyZXItPmVsZW1l
bnQoKS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IHNyYyA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihtX3JlbmRlcmVyLT5lbGVtZW50
KCkpLT5zcmMoKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9yZW5k
ZXJlci0+aXNJbWFnZSgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5l
bGVtZW50KCktPmhhc1RhZ05hbWUoaW1nVGFnKSkgeworICAgICAgICAgICAgU3RyaW5nIHNyYyA9
IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihtX3JlbmRlcmVyLT5lbGVtZW50KCkpLT5z
cmMoKTsKICAgICAgICAgICAgIGlmICghc3JjLmlzTnVsbCgpKSAKICAgICAgICAgICAgICAgICBy
ZXR1cm4gS1VSTChzcmMpLmdldE5TVVJMKCk7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU0ltYWdlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFs
dWUuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIENhY2hlZEltYWdlKiBDU1NJbWFnZVZh
bHVlOjppbWFnZShEb2NMb2EKICAgICAgICAgICAgIG1faW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJ
bWFnZShnZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgLy8gRklY
TUU6IFNob3VsZCBmaW5kIGEgd2F5IHRvIG1ha2UgdGhlc2UgaW1hZ2VzIHNpdCBpbiB0aGVpciBv
d24gbWVtb3J5IHBhcnRpdGlvbiwgc2luY2UgdGhleSBhcmUgdXNlciBhZ2VudCBpbWFnZXMuCi0g
ICAgICAgICAgICBtX2ltYWdlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihjYWNoZSgpLT5y
ZXF1ZXN0UmVzb3VyY2UoMCwgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIEtVUkwoZ2V0
U3RyaW5nVmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCkpLCAwLCAwKSk7CisgICAgICAgICAgICBt
X2ltYWdlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihjYWNoZSgpLT5yZXF1ZXN0UmVzb3Vy
Y2UoMCwgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIEtVUkwoZ2V0U3RyaW5nVmFsdWUo
KSksIDAsIDApKTsKIAogICAgICAgICBpZiAobV9pbWFnZSkKICAgICAgICAgICAgIG1faW1hZ2Ut
PnJlZih0aGlzKTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAzMDExOCkKKysr
IFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5
MCw3IEBAIHZvaWQgQ1NTSW1wb3J0UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KCkKICAgICBDU1NT
dHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXBh
cmVudFNoZWV0LT5ocmVmKCkuaXNOdWxsKCkpCiAgICAgICAgIC8vIHVzZSBwYXJlbnQgc3R5bGVo
ZWV0J3MgVVJMIGFzIHRoZSBiYXNlIFVSTAotICAgICAgICBhYnNIcmVmID0gS1VSTChwYXJlbnRT
aGVldC0+aHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgbV9zdHJIcmVmLmRlcHJlY2F0ZWRTdHJp
bmcoKSkuc3RyaW5nKCk7CisgICAgICAgIGFic0hyZWYgPSBLVVJMKEtVUkwocGFyZW50U2hlZXQt
PmhyZWYoKSksIG1fc3RySHJlZikuc3RyaW5nKCk7CiAKICAgICAvLyBDaGVjayBmb3IgYSBjeWNs
ZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAg
IC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWls
LgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw3ICs4MjIsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAjZW5kaWYKICAgICAgICAgICAgICAgICBpZiAo
IXVyaS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBD
U1NDdXJzb3JJbWFnZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1VS
TChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHVyaS5kZXByZWNh
dGVkU3RyaW5nKCkpLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
S1VSTChLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpKSwgdXJpKS5zdHJpbmcoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdHNwb3QsIHN0eWxlRWxlbWVudCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTg4Miw3ICs4ODIsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgICAgICAgICBTdHJpbmcgdXJp
ID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbHVlLT5zdHJpbmcpKTsKICAgICAgICAgICAgIGlmICgh
dXJpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU0lt
YWdlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJM
KCkuZGVwcmVjYXRlZFN0cmluZygpLCB1cmkuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwK
KyAgICAgICAgICAgICAgICAgICAgS1VSTChLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpKSwg
dXJpKS5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50KTsKICAgICAg
ICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIH0KQEAgLTEwODksNyAr
MTA4OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICAg
ICAgICAgICAgICBpZiAodmFsLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7
CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2
YWwtPnN0cmluZykpOwogICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NQ
cmltaXRpdmVWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtVUkwo
c3R5bGVFbGVtZW50LT5iYXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkpLnN0cmluZygpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCksIHZhbHVlKS5zdHJpbmcoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJ
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkK
QEAgLTE4NDAsNyArMTg0MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoaW50IHBy
b3BJZCwKICAgICAgICAgICAgIC8vIHVybAogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFy
c2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5nKSk7CiAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IG5ldyBDU1NJbWFnZVZhbHVlKAotICAgICAgICAgICAgICAgIEtVUkwoc3R5bGVFbGVtZW50LT5i
YXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0
cmluZygpLCBzdHlsZUVsZW1lbnQpOworICAgICAgICAgICAgICAgIEtVUkwoS1VSTChzdHlsZUVs
ZW1lbnQtPmJhc2VVUkwoKSksIHZhbHVlKS5zdHJpbmcoKSwgc3R5bGVFbGVtZW50KTsKICAgICAg
ICAgfSBlbHNlIGlmICh2YWwtPnVuaXQgPT0gVmFsdWU6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAg
ICAvLyBhdHRyKFgpIHwgY291bnRlcihYIFssWV0pIHwgY291bnRlcnMoWCwgWSwgWyxaXSkKICAg
ICAgICAgICAgIFZhbHVlTGlzdCAqYXJncyA9IHZhbC0+ZnVuY3Rpb24tPmFyZ3M7CkBAIC0xOTA2
LDggKzE5MDYsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kSW1hZ2UoUmVmCiAg
ICAgaWYgKHZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CiAgICAgICAgIFN0cmluZyB1cmkgPSBwYXJzZVVSTChkb21TdHJpbmcodmFsdWVM
aXN0LT5jdXJyZW50KCktPnN0cmluZykpOwogICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICB2YWx1ZSA9IG5ldyBDU1NJbWFnZVZhbHVlKEtVUkwoc3R5bGVFbGVtZW50LT5i
YXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB1cmkuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJp
bmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVt
ZW50KTsKKyAgICAgICAgICAgIHZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUoS1VSTChLVVJMKHN0
eWxlRWxlbWVudC0+YmFzZVVSTCgpKSwgdXJpKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI3NDAsNyArMjc0MCw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKICAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3Jj
VmFsdWU+IHBhcnNlZFZhbHVlOwogICAgICAgICBpZiAodmFsLT51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVVJJICYmICFleHBlY3RDb21tYSkgewogICAgICAgICAgICAgU3RyaW5nIHZh
bHVlID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5nKSk7Ci0gICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKEtVUkwoc3R5bGVFbGVtZW50LT5iYXNl
VVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmlu
ZygpLCBmYWxzZSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NGb250RmFjZVNy
Y1ZhbHVlKEtVUkwoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKSksIHZhbHVlKS5zdHJpbmco
KSwgZmFsc2UpOwogICAgICAgICAgICAgdXJpVmFsdWUgPSBwYXJzZWRWYWx1ZTsKICAgICAgICAg
ICAgIGFsbG93Rm9ybWF0ID0gdHJ1ZTsKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsK
QEAgLTMyOTUsOCArMzI5NSw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKGlu
dCBwcm8KICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIGNvbnRleHQuY29tbWl0SW1hZ2UobmV3IENTU0ltYWdlVmFsdWUoS1VSTChzdHlsZUVs
ZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHVyaS5kZXByZWNhdGVkU3RyaW5n
KCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCkpOworICAgIGNvbnRleHQuY29tbWl0SW1h
Z2UobmV3IENTU0ltYWdlVmFsdWUoS1VSTChLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpKSwg
dXJpKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlRWxlbWVudCkpOwogICAgIHdoaWxlICgodmFsID0gdmFsdWVMaXN0LT5uZXh0KCkpKSB7
CiAgICAgICAgIGlmIChjb250ZXh0LmFsbG93TnVtYmVyKCkgJiYgdmFsaWRVbml0KHZhbCwgRklu
dGVnZXJ8Rk5vbk5lZ3xGUGVyY2VudCwgdHJ1ZSkpIHsKICAgICAgICAgICAgIGNvbnRleHQuY29t
bWl0TnVtYmVyKHZhbCk7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24g
MzAxMTgpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMxLDcgKzIzMSw3IEBAIENTU1N0eWxlU2hlZXQqIENTU1N0eWxlU2VsZWN0b3I6Om1f
dmlld1MKIENTU1N0eWxlU2hlZXQgKkNTU1N0eWxlU2VsZWN0b3I6Om1fc3ZnU2hlZXQgPSAwOwog
I2VuZGlmCiAKLXN0YXRpYyBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkdXJsICpjdXJyZW50RW5j
b2RlZFVSTCA9IDA7CitzdGF0aWMgQ1NTU3R5bGVTZWxlY3Rvcjo6RW5jb2RlZFVSTCogY3VycmVu
dEVuY29kZWRVUkwgPSAwOwogc3RhdGljIFBzZXVkb1N0YXRlIHBzZXVkb1N0YXRlOwogCiBzdGF0
aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgc2NyZWVuRXZhbCgpCkBAIC0zMTksMTcgKzMx
OSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEVuY29kZWRVUkwoY29uCiB7CiAgICAg
S1VSTCB1ID0gdXJsOwogCi0gICAgdS5zZXRRdWVyeShEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsK
LSAgICB1LnNldFJlZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICBtX2VuY29kZWRVUkwu
ZmlsZSA9IHUuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIGludCBwb3MgPSBtX2VuY29kZWRVUkwu
ZmlsZS5maW5kUmV2KCcvJyk7CisgICAgdS5zZXRRdWVyeShTdHJpbmcoKSk7CisgICAgdS5zZXRS
ZWYoU3RyaW5nKCkpOworICAgIG1fZW5jb2RlZFVSTC5maWxlID0gdS5zdHJpbmcoKTsKKyAgICBp
bnQgcG9zID0gbV9lbmNvZGVkVVJMLmZpbGUucmV2ZXJzZUZpbmQoJy8nKTsKICAgICBtX2VuY29k
ZWRVUkwucGF0aCA9IG1fZW5jb2RlZFVSTC5maWxlOwogICAgIGlmIChwb3MgPiAwKSB7CiAgICAg
ICAgIG1fZW5jb2RlZFVSTC5wYXRoLnRydW5jYXRlKHBvcyk7Ci0gICAgICAgIG1fZW5jb2RlZFVS
TC5wYXRoICs9ICcvJzsKKyAgICAgICAgbV9lbmNvZGVkVVJMLnBhdGguYXBwZW5kKCcvJyk7CiAg
ICAgfQotICAgIHUuc2V0UGF0aChEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICBtX2VuY29k
ZWRVUkwuaG9zdCA9IHUuZGVwcmVjYXRlZFN0cmluZygpOworICAgIHUuc2V0UGF0aChTdHJpbmco
KSk7CisgICAgbV9lbmNvZGVkVVJMLmhvc3QgPSB1LnN0cmluZygpOwogfQogCiBDU1NTdHlsZVNl
bGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3RvcigpCkBAIC03MDMsMTEgKzcwMywxMSBAQCBzdGF0aWMg
dm9pZCBjaGVja1BzZXVkb1N0YXRlKEVsZW1lbnQgKmUsCiAgICAgRGVwcmVjYXRlZENvbnN0U3Ry
aW5nIGN1KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENoYXIqPihjaGFyYWN0ZXJz
KSwgbGVuZ3RoKTsKICAgICBEZXByZWNhdGVkU3RyaW5nIHUgPSBjdS5zdHJpbmcoKTsKICAgICBp
ZiAobGVuZ3RoICYmIGNoYXJhY3RlcnNbMF0gPT0gJy8nKQotICAgICAgICB1LnByZXBlbmQoY3Vy
cmVudEVuY29kZWRVUkwtPmhvc3QpOworICAgICAgICB1LnByZXBlbmQocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KGN1cnJlbnRFbmNvZGVkVVJMLT5ob3N0LmNoYXJhY3Rl
cnMoKSksIGN1cnJlbnRFbmNvZGVkVVJMLT5ob3N0Lmxlbmd0aCgpKTsKICAgICBlbHNlIGlmIChs
ZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAnIycpCi0gICAgICAgIHUucHJlcGVuZChjdXJyZW50
RW5jb2RlZFVSTC0+ZmlsZSk7CisgICAgICAgIHUucHJlcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IERlcHJlY2F0ZWRDaGFyKj4oY3VycmVudEVuY29kZWRVUkwtPmZpbGUuY2hhcmFjdGVycygp
KSwgY3VycmVudEVuY29kZWRVUkwtPmZpbGUubGVuZ3RoKCkpOwogICAgIGVsc2UKLSAgICAgICAg
dS5wcmVwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRoKTsKKyAgICAgICAgdS5wcmVwZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENoYXIqPihjdXJyZW50RW5jb2RlZFVSTC0+
cGF0aC5jaGFyYWN0ZXJzKCkpLCBjdXJyZW50RW5jb2RlZFVSTC0+cGF0aC5sZW5ndGgoKSk7CiAg
ICAgY2xlYW5wYXRoKHUpOwogICAgIHBzZXVkb1N0YXRlID0gaGlzdG9yeUNvbnRhaW5zKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih1LnVuaWNvZGUoKSksIHUubGVuZ3RoKCkpCiAgICAg
ICAgID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5oCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsMTAgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsK
IAogICAgICAgICBib29sIHN0cmljdFBhcnNpbmc7CiAKLSAgICAgICAgc3RydWN0IEVuY29kZWR1
cmwgewotICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBob3N0OyAvL2Fsc28gY29udGFpbnMg
cHJvdG9jb2wKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcGF0aDsKLSAgICAgICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgZmlsZTsKKyAgICAgICAgc3RydWN0IEVuY29kZWRVUkwgeworICAg
ICAgICAgICAgU3RyaW5nIGhvc3Q7IC8vYWxzbyBjb250YWlucyBwcm90b2NvbAorICAgICAgICAg
ICAgU3RyaW5nIHBhdGg7CisgICAgICAgICAgICBTdHJpbmcgZmlsZTsKICAgICAgICAgfSBtX2Vu
Y29kZWRVUkw7CiAKICAgICAgICAgdm9pZCBzZXRFbmNvZGVkVVJMKGNvbnN0IEtVUkwmIHVybCk7
CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDEyICs4MjgsMTIgQEAgdm9pZCBEb2N1bWVudDo6
c2V0WE1MU3RhbmRhbG9uZShib29sIHN0YQogCiBTdHJpbmcgRG9jdW1lbnQ6OmRvY3VtZW50VVJJ
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9iYXNlVVJMOworICAgIHJldHVybiBtX2Jhc2VVUkwu
c3RyaW5nKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnNldERvY3VtZW50VVJJKGNvbnN0IFN0cmlu
ZyAmdXJpKQordm9pZCBEb2N1bWVudDo6c2V0RG9jdW1lbnRVUkkoY29uc3QgU3RyaW5nJiB1cmkp
CiB7Ci0gICAgbV9iYXNlVVJMID0gdXJpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBtX2Jhc2VV
UkwgPSBLVVJMKHVyaSk7CiB9CiAKIFN0cmluZyBEb2N1bWVudDo6YmFzZVVSSSgpIGNvbnN0CkBA
IC0xMzIxLDcgKzEzMjEsNyBAQCB2b2lkIERvY3VtZW50OjpvcGVuKCkKIHsKICAgICAvLyBUaGlz
IGlzIHdvcmsgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkgZG8gaW4gY2xlYXIoKSwgYnV0IHdlIGNh
bid0IGhhdmUgaXQKICAgICAvLyBoYXBwZW4gd2hlbiBpbXBsaWNpdE9wZW4oKSBpcyBjYWxsZWQg
dW5sZXNzIHdlIHJlb3JnYW5pemUgRnJhbWUgY29kZS4KLSAgICBpZiAoRG9jdW1lbnQgKnBhcmVu
dCA9IHBhcmVudERvY3VtZW50KCkpIHsKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVu
dERvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKG1fdXJsLmlzRW1wdHkoKSB8fCBtX3VybCA9PSAi
YWJvdXQ6YmxhbmsiKQogICAgICAgICAgICAgc2V0VVJMKHBhcmVudC0+YmFzZVVSTCgpKTsKICAg
ICAgICAgaWYgKG1fYmFzZVVSTC5pc0VtcHR5KCkgfHwgbV9iYXNlVVJMID09ICJhYm91dDpibGFu
ayIpCkBAIC0xNjE0LDEyICsxNjE0LDEyIEBAIHZvaWQgRG9jdW1lbnQ6OmNsZWFyKCkKICAgICBt
X3dpbmRvd0V2ZW50TGlzdGVuZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnNldFVS
TChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1cmwpCit2b2lkIERvY3VtZW50OjpzZXRVUkwoY29u
c3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKHVybCA9PSBtX3VybCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV91cmwgPSB1cmw7CisgICAgbV91cmwgPSBLVVJMKHVybCk7CiAgICAgaWYgKG1f
c3R5bGVTZWxlY3RvcikKICAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRFbmNvZGVkVVJMKG1f
dXJsKTsKIApAQCAtMTYyOCw3ICsxNjI4LDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0
IERlcHJlY2F0ZWRTdAogIAogYm9vbCBEb2N1bWVudDo6c2hvdWxkQmVBbGxvd2VkVG9Mb2FkTG9j
YWxSZXNvdXJjZXMoKSBjb25zdAogewotICAgIGlmIChGcmFtZUxvYWRlcjo6c2hvdWxkVHJlYXRV
UkxBc0xvY2FsKG1fdXJsKSkKKyAgICBpZiAoRnJhbWVMb2FkZXI6OnNob3VsZFRyZWF0VVJMQXNM
b2NhbChtX3VybC5zdHJpbmcoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgRnJhbWUq
IGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKQEAgLTE2NDUsMTEgKzE2NDUsMTEgQEAgYm9vbCBEb2N1
bWVudDo6c2hvdWxkQmVBbGxvd2VkVG9Mb2FkTG9jYQogICAgIHJldHVybiBkb2N1bWVudExvYWRl
ci0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnNldEJh
c2VVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgYmFzZVVSTCkgCit2b2lkIERvY3VtZW50Ojpz
ZXRCYXNlVVJMKGNvbnN0IFN0cmluZyYgYmFzZVVSTCkgCiB7IAotICAgIG1fYmFzZVVSTCA9IGJh
c2VVUkw7IAorICAgIG1fYmFzZVVSTCA9IEtVUkwoYmFzZVVSTCk7IAogICAgIGlmIChtX2VsZW1T
aGVldCkKLSAgICAgICAgbV9lbGVtU2hlZXQtPnNldEhyZWYobV9iYXNlVVJMKTsKKyAgICAgICAg
bV9lbGVtU2hlZXQtPnNldEhyZWYobV9iYXNlVVJMLnN0cmluZygpKTsKIH0KIAogdm9pZCBEb2N1
bWVudDo6c2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVybCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0LCBjb25zdCBTdHJpbmcgJnNoZWV0KQpAQCAtMTg0NSw3ICsxODQ1LDcgQEAgdm9pZCBE
b2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdAogICAgICAgICAgICAgaWYgKHVybC5p
c0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKS5z
dHJpbmcoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1cmwgPSBjb21wbGV0
ZVVSTCh1cmwpOworICAgICAgICAgICAgICAgIHVybCA9IGNvbXBsZXRlVVJMKHVybCkuc3RyaW5n
KCk7CiAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlSFRUUFJlZGlyZWN0aW9u
KGRlbGF5LCB1cmwpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShlcXVpdiwgInNldC1jb29raWUiKSkgewpAQCAtMjE4MCw4ICsyMTgwLDEzIEBAIHZvaWQgRG9j
dW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAgICAgICAgICAgICAgICBzaGVldCA9
IDA7CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICAgICAgICAgIGlmICghbi0+aXNIVE1MRWxl
bWVudCgpKQotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLmRlcHJlY2F0ZWRTdHJp
bmcoKS5yZXBsYWNlKCcmJywgIiYmIik7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQn
cyB0aGUgcG9pbnQgb2YgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGEgbG9jYWwgdmFyaWFibGUKKyAg
ICAgICAgICAgICAgICAvLyAodGl0bGUpIHRoYXQncyBub3QgbG9va2VkIGF0IGFmdGVyd2FyZD8g
T2J2aW91c2x5IHRoZXJlJ3Mgbm8gdGVzdAorICAgICAgICAgICAgICAgIC8vIGNhc2UgZm9yIHRo
aXMhCisgICAgICAgICAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIG1vZGlmaWVkVGl0bGUgPSB0aXRsZS5kb21TdHJpbmcoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGl0bGUgPSBtb2RpZmllZFRpdGxlLnJlcGxhY2UoJyYnLCAiJiYi
KTsKKyAgICAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjIwNSw3ICsyMjEwLDcgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3Rvcigp
CiAgICAgLy8gQ3JlYXRlIGEgbmV3IHN0eWxlIHNlbGVjdG9yCiAgICAgZGVsZXRlIG1fc3R5bGVT
ZWxlY3RvcjsKICAgICBtX3N0eWxlU2VsZWN0b3IgPSBuZXcgQ1NTU3R5bGVTZWxlY3Rvcih0aGlz
LCB1c2VyU3R5bGVTaGVldCgpLCBtX3N0eWxlU2hlZXRzLmdldCgpLCBtX21hcHBlZEVsZW1lbnRT
aGVldC5nZXQoKSwgIWluQ29tcGF0TW9kZSgpLCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOwot
ICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0RW5jb2RlZFVSTChtX3VybCk7CisgICAgbV9zdHlsZVNl
bGVjdG9yLT5zZXRFbmNvZGVkVVJMKEtVUkwobV91cmwpKTsKICAgICBtX2RpZENhbGN1bGF0ZVN0
eWxlU2VsZWN0b3IgPSB0cnVlOwogfQogCkBAIC0yNjAwLDEyICsyNjA1LDEyIEBAIEVsZW1lbnQq
IERvY3VtZW50Ojpvd25lckVsZW1lbnQoKSBjb25zdAogCiBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tp
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgdXJsKCkpOworICAgIHJldHVy
biBjb29raWVzKHRoaXMsIEtVUkwodXJsKCkpKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0Q29v
a2llKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgc2V0Q29va2llcyh0aGlzLCB1cmwoKSwg
cG9saWN5QmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdmFsdWUpOworICAgIHNldENvb2tp
ZXModGhpcywgS1VSTCh1cmwoKSksIEtVUkwocG9saWN5QmFzZVVSTCgpKSwgdmFsdWUpOwogfQog
CiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKQEAgLTI3ODMsMjcgKzI3ODgsMjMg
QEAgVUNoYXIgRG9jdW1lbnQ6OmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ibwogICAgIHJldHVybiBt
X2RlY29kZXItPmVuY29kaW5nKCkuYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpOwogfQogCi1E
ZXByZWNhdGVkU3RyaW5nIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBEZXByZWNhdGVkU3Ry
aW5nJiB1cmwpCitLVVJMIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkK
IHsKLSAgICAvLyBGSVhNRTogVGhpcyB0cmVhdHMgbnVsbCBVUkxzIHRoZSBzYW1lIGFzIGVtcHR5
IFVSTHMsIHVubGlrZSB0aGUgU3RyaW5nIGZ1bmN0aW9uIGJlbG93LgotCi0gICAgLy8gSWYgYm90
aCB0aGUgVVJMIGFuZCBiYXNlIFVSTCBhcmUgZW1wdHksIGxpa2UgdGhleSBhcmUgZm9yIGRvY3Vt
ZW50cwotICAgIC8vIGNyZWF0ZWQgdXNpbmcgRE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3Vt
ZW50LCBqdXN0IHJldHVybiB0aGUgcGFzc2VkIGluIFVSTC4KLSAgICAvLyAoV2UgZG8gdGhpcyBi
ZWNhdXNlIHVybCgpIHJldHVybnMgImFib3V0OmJsYW5rIiBmb3IgZW1wdHkgVVJMcy4KLSAgICBp
ZiAobV91cmwuaXNFbXB0eSgpICYmIG1fYmFzZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB1cmw7CisgICAgLy8gQWx3YXlzIHJldHVybiBudWxsIHdoZW4gcGFzc2VkIGEgbnVsbCBVUkwu
CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIEtVUkwgY29uc3RydWN0b3IgdG8g
aGF2ZSB0aGlzIGJlaGF2aW9yPworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBLVVJMKCk7CisgICAgS1VSTCBiYXNlVVJMID0gbV9iYXNlVVJMOworICAgIGlmIChiYXNlVVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgYmFzZVVSTCA9IG1fdXJsOwogICAgIGlmICghbV9kZWNvZGVy
KQotICAgICAgICByZXR1cm4gS1VSTChiYXNlVVJMKCksIHVybCkuZGVwcmVjYXRlZFN0cmluZygp
OwotICAgIHJldHVybiBLVVJMKGJhc2VVUkwoKSwgdXJsLCBtX2RlY29kZXItPmVuY29kaW5nKCkp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCwgdXJsKTsK
KyAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmwsIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKSk7CiB9
CiAKLVN0cmluZyBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpCitTdHJp
bmcgRG9jdW1lbnQ6OmNvbXBsZXRlVVJMU3RyaW5nKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAg
IC8vIEZJWE1FOiBUaGlzIGFsd2F5cyByZXR1cm5zIG51bGwgd2hlbiBwYXNzZWQgYSBudWxsIFVS
TCwgdW5saWtlIHRoZSBEZXByZWNhdGVkU3RyaW5nIGZ1bmN0aW9uIGFib3ZlLgotICAgIC8vIENv
ZGUgcmVsaWVzIG9uIHRoaXMgYmVoYXZpb3IsIG5hbWVseSB0aGUgaHJlZiBwcm9wZXJ0eSBvZiA8
YT4gYW5kIHRoZSBkYXRhIHByb3BlcnR5IG9mIDxvYmplY3Q+LgotICAgIGlmICh1cmwuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiB1cmw7Ci0gICAgcmV0dXJuIGNvbXBsZXRlVVJMKHVybC5kZXBy
ZWNhdGVkU3RyaW5nKCkpOworICAgIHJldHVybiBjb21wbGV0ZVVSTCh1cmwpLnN0cmluZygpOwog
fQogCiBib29sIERvY3VtZW50OjppblBhZ2VDYWNoZSgpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDMw
MTE4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAiSFRNTENvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hDb3VudGVkU2V0Lmg+CkBAIC03OCw2ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogICAgIGNsYXNzIEhUTUxNYXBFbGVtZW50
OwogICAgIGNsYXNzIEludFBvaW50OworICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0czsKICAgICBjbGFzcyBOYW1lTm9kZUxpc3Q7CiAgICAgY2xh
c3MgTm9kZUZpbHRlcjsKQEAgLTM3MCwxNyArMzcyLDE3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
d2VsbEZvcm1lZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2VsbEZvcm1lZDsgfQogCi0gICAgRGVwcmVj
YXRlZFN0cmluZyB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybC5pc0VtcHR5KCkgPyAiYWJvdXQ6
YmxhbmsiIDogbV91cmw7IH0KLSAgICB2b2lkIHNldFVSTChjb25zdCBEZXByZWNhdGVkU3RyaW5n
JiB1cmwpOworICAgIFN0cmluZyB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybC5pc0VtcHR5KCkg
PyAiYWJvdXQ6YmxhbmsiIDogbV91cmwuc3RyaW5nKCk7IH0KKyAgICB2b2lkIHNldFVSTChjb25z
dCBTdHJpbmcmKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgYmFzZVVSTCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFzZVVSTC5pc0VtcHR5KCkgPyB1cmwoKSA6IG1fYmFzZVVSTDsgfQotICAgIHZvaWQg
c2V0QmFzZVVSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBiYXNlVVJMKTsKKyAgICBTdHJpbmcg
YmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVVSTC5pc0VtcHR5KCkgPyB1cmwoKSA6IG1f
YmFzZVVSTC5zdHJpbmcoKTsgfQorICAgIHZvaWQgc2V0QmFzZVVSTChjb25zdCBTdHJpbmcmKTsK
IAotICAgIFN0cmluZyBiYXNlVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlVGFyZ2V0OyB9
CisgICAgY29uc3QgU3RyaW5nJiBiYXNlVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlVGFy
Z2V0OyB9CiAgICAgdm9pZCBzZXRCYXNlVGFyZ2V0KGNvbnN0IFN0cmluZyYgYmFzZVRhcmdldCkg
eyBtX2Jhc2VUYXJnZXQgPSBiYXNlVGFyZ2V0OyB9CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGNv
bXBsZXRlVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgU3RyaW5nIGNvbXBsZXRl
VVJMKGNvbnN0IFN0cmluZyYpOworICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJik7
CisgICAgU3RyaW5nIGNvbXBsZXRlVVJMU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8g
ZnJvbSBjYWNoZWRPYmplY3RDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBTdHJpbmcm
IHNoZWV0U3RyKTsKQEAgLTY5OSw4ICs3MDEsOCBAQCBwcml2YXRlOgogICAgIERvY0xvYWRlciog
bV9kb2NMb2FkZXI7CiAgICAgVG9rZW5pemVyKiBtX3Rva2VuaXplcjsKICAgICBib29sIG1fd2Vs
bEZvcm1lZDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIG1fdXJsOwotICAgIERlcHJlY2F0ZWRTdHJp
bmcgbV9iYXNlVVJMOworICAgIEtVUkwgbV91cmw7CisgICAgS1VSTCBtX2Jhc2VVUkw7CiAgICAg
U3RyaW5nIG1fYmFzZVRhcmdldDsKIAogICAgIFJlZlB0cjxEb2N1bWVudFR5cGU+IG1fZG9jVHlw
ZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsMTQgKzU2NCwxNCBAQCB2b2lkIEVsZW1lbnQ6OnNl
dFByZWZpeChjb25zdCBBdG9taWNTdHJpCiAKIFN0cmluZyBFbGVtZW50OjpiYXNlVVJJKCkgY29u
c3QKIHsKLSAgICBLVVJMIHhtbGJhc2UoZ2V0QXR0cmlidXRlKGJhc2VBdHRyKS5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgIEtVUkwgeG1sYmFzZShnZXRBdHRyaWJ1dGUoYmFzZUF0dHIpKTsKIAog
ICAgIGlmICgheG1sYmFzZS5wcm90b2NvbCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHht
bGJhc2Uuc3RyaW5nKCk7CiAKICAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAg
aWYgKHBhcmVudCkKLSAgICAgICAgcmV0dXJuIEtVUkwocGFyZW50LT5iYXNlVVJJKCkuZGVwcmVj
YXRlZFN0cmluZygpLCB4bWxiYXNlLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCk7CisgICAg
ICAgIHJldHVybiBLVVJMKEtVUkwocGFyZW50LT5iYXNlVVJJKCkpLCB4bWxiYXNlLnN0cmluZygp
KS5zdHJpbmcoKTsKIAogICAgIHJldHVybiB4bWxiYXNlLnN0cmluZygpOwogfQpJbmRleDogV2Vi
Q29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNv
cmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3
ICsxNTYsNyBAQCBib29sIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNoCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKICNpZiBFTkFC
TEUoWFNMVCkKICAgICAgICAgICAgICAgICAgICAgaWYgKG1faXNYU0wpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVl
c3RYU0xTdHlsZVNoZWV0KGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+
cmVxdWVzdFhTTFN0eWxlU2hlZXQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkxTdHJpbmcoaHJlZikp
OwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAg
ewpAQCAtMTY0LDcgKzE2NCw3IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0
eWxlU2gKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+
bG9hZGVyKCktPmVuY29kaW5nKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVk
U2hlZXQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdENTU1N0eWxlU2hlZXQoZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZiksIGNoYXJzZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0Q1NT
U3R5bGVTaGVldChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTFN0cmluZyhocmVmKSwgY2hhcnNldCk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY2FjaGVk
U2hlZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7
CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9kb20v
U3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFN0
eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAgICAgICAgIG1fc2hlZXQgPSAwOwog
ICAgIH0KIAotICAgIFN0cmluZyB0eXBlVmFsdWUgPSBlLT5pc0hUTUxFbGVtZW50KCkgPyB0eXBl
KCkuZGVwcmVjYXRlZFN0cmluZygpLmxvd2VyKCkgOiB0eXBlKCk7CisgICAgU3RyaW5nIHR5cGVW
YWx1ZSA9IGUtPmlzSFRNTEVsZW1lbnQoKSA/IHR5cGUoKS5kb21TdHJpbmcoKS5sb3dlcigpIDog
dHlwZSgpLmRvbVN0cmluZygpOwogICAgIGlmICh0eXBlVmFsdWUuaXNFbXB0eSgpIHx8IHR5cGVW
YWx1ZSA9PSAidGV4dC9jc3MiKSB7IC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBvciBDU1MKICAgICAg
ICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWFMaXN0ID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5bGVT
aGVldCopMCwgbWVkaWEoKSwgZS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICAgICAgTWVkaWFRdWVy
eUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCB0cnVlKTsKSW5kZXg6IFdlYkNvcmUvZG9t
L1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDI4LDcgKzE0MjgsNyBAQCBib29sIFhNTFRva2VuaXplcjo6aXNX
YWl0aW5nRm9yU2NyaXB0cygpCiB9CiAKICNpZiBFTkFCTEUoWFNMVCkKLXZvaWQqIHhtbERvY1B0
ckZvclN0cmluZyhEb2NMb2FkZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmIHVybCkKK3ZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhEb2NM
b2FkZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJs
KQogewogICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0
NDcsNyArMTQ0Nyw3IEBAIHZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhEb2NMb2FkZXIqIGRvY0wK
ICAgICAKICAgICB4bWxEb2NQdHIgc291cmNlRG9jID0geG1sUmVhZE1lbW9yeShyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFjdGVycygpKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5hc2NpaSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5sYXRpbjEoKS5kYXRh
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9NSGlnaEJ5dGUg
PT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYU0xUX1BBUlNFX09QVElPTlMpOwogICAgIApJbmRleDogV2Vi
Q29yZS9kb20vWE1MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9r
ZW5pemVyLmgJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfTsKIAogI2lmIEVOQUJMRShYU0xUKQotdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKERvY0xv
YWRlciosIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1cmwp
Owordm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKERvY0xvYWRlciosIGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBTdHJpbmcmIHVybCk7CiB2b2lkIHNldExvYWRlckZvckxpYlhNTENhbGxiYWNr
cyhEb2NMb2FkZXIqKTsKICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMzAx
MTgpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQy
LDcgKzk0Miw3IEBAIHZvaWQgRWRpdG9yOjpjb3B5KCkKICAgICAKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmIChIVE1MSW1hZ2VFbGVtZW50KiBp
bWFnZUVsZW1lbnQgPSBpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCkpCi0g
ICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlSW1hZ2UoaW1hZ2VF
bGVtZW50LCBkb2N1bWVudC0+dXJsKCksIGRvY3VtZW50LT50aXRsZSgpKTsKKyAgICAgICAgUGFz
dGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVJbWFnZShpbWFnZUVsZW1lbnQsIEtV
UkwoZG9jdW1lbnQtPnVybCgpKSwgZG9jdW1lbnQtPnRpdGxlKCkpOwogICAgIGVsc2UKICAgICAg
ICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVTZWxlY3Rpb24oc2VsZWN0
ZWRSYW5nZSgpLmdldCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBtX2ZyYW1lKTsKICAgICAK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDcgQEAgc3RhdGljIHZvaWQg
Y29tcGxldGVVUkxzKE5vZGUqIG5vZGUsIGNvbgogewogICAgIFZlY3RvcjxBdHRyaWJ1dGVDaGFu
Z2U+IGNoYW5nZXM7CiAKLSAgICBLVVJMIGJhc2VVUkxBc0tVUkwoYmFzZVVSTC5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgIEtVUkwgcGFyc2VkQmFzZVVSTChiYXNlVVJMKTsKIAogICAgIE5vZGUq
IGVuZCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICBmb3IgKE5vZGUqIG4gPSBu
b2RlOyBuICE9IGVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewpAQCAtNTUwLDEwICs1
NTAsOCBAQCBzdGF0aWMgdm9pZCBjb21wbGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uCiAgICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRycy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBBdHRy
aWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZS0+aXNVUkxBdHRyaWJ1dGUoYXR0cikpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5n
IGNvbXBsZXRlZFVSTCA9IEtVUkwoYmFzZVVSTEFzS1VSTCwgYXR0ci0+dmFsdWUoKS5kZXByZWNh
dGVkU3RyaW5nKCkpLnN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVu
ZChBdHRyaWJ1dGVDaGFuZ2UoZSwgYXR0ci0+bmFtZSgpLCBjb21wbGV0ZWRVUkwpKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGUtPmlzVVJMQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZSwg
YXR0ci0+bmFtZSgpLCBLVVJMKHBhcnNlZEJhc2VVUkwsIGF0dHItPnZhbHVlKCkpLnN0cmluZygp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05MjIsNyArOTIwLDcgQEAg
U3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBFQwogICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHJlc3VsdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3Ry
aW5nKENvbnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3Ry
aW5nKQorc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZyb21TdHJpbmcoQ29udGFpbmVyTm9kZSog
cGFyYWdyYXBoLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBwYXJhZ3JhcGgtPmRvY3VtZW50KCk7CiAKQEAgLTkzNSwxMiArOTMzLDEyIEBAIHN0YXRp
YyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENvbnQKIAogICAgIEFTU0VSVChzdHJpbmcu
ZmluZCgnXG4nKSA9PSAtMSk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCB0YWJMaXN0ID0g
RGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCdcdCcsIHN0cmluZywgdHJ1ZSk7Ci0gICAgRGVw
cmVjYXRlZFN0cmluZyB0YWJUZXh0ID0gIiI7CisgICAgVmVjdG9yPFN0cmluZz4gdGFiTGlzdCA9
IHN0cmluZy5zcGxpdCgnXHQnLCB0cnVlKTsKKyAgICBTdHJpbmcgdGFiVGV4dCA9ICIiOwogICAg
IGJvb2wgZmlyc3QgPSB0cnVlOwogICAgIHdoaWxlICghdGFiTGlzdC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gdGFiTGlzdC5maXJzdCgpOwotICAgICAgICB0YWJM
aXN0LnBvcF9mcm9udCgpOworICAgICAgICBTdHJpbmcgcyA9IHRhYkxpc3RbMF07CisgICAgICAg
IHRhYkxpc3QucmVtb3ZlKDApOwogCiAgICAgICAgIC8vIGFwcGVuZCB0aGUgbm9uLXRhYiB0ZXh0
dWFsIHBhcnQKICAgICAgICAgaWYgKCFzLmlzRW1wdHkoKSkgewpAQCAtOTU3LDcgKzk1NSw3IEBA
IHN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENvbnQKICAgICAgICAgLy8gdGhl
cmUgaXMgYSB0YWIgYWZ0ZXIgZXZlcnkgZW50cnksIGV4Y2VwdCB0aGUgbGFzdCBlbnRyeQogICAg
ICAgICAvLyAoaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgdGFiLCB0aGUgbGlzdCBnZXRzIGFu
IGV4dHJhIGVtcHR5IGVudHJ5KQogICAgICAgICBpZiAoIXRhYkxpc3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgdGFiVGV4dCArPSAnXHQnOworICAgICAgICAgICAgdGFiVGV4dC5hcHBlbmQoJ1x0
Jyk7CiAgICAgICAgIGVsc2UgaWYgKCF0YWJUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
cGFyYWdyYXBoLT5hcHBlbmRDaGlsZChjcmVhdGVUYWJTcGFuRWxlbWVudChkb2N1bWVudCwgdGFi
VGV4dCksIGVjKTsKICAgICAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKQEAgLTk4NSw3ICs5ODMs
NyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgaWYgKHRl
eHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogCi0gICAg
RGVwcmVjYXRlZFN0cmluZyBzdHJpbmcgPSB0ZXh0LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBT
dHJpbmcgc3RyaW5nID0gdGV4dDsKICAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIsICJcbiIpOwog
ICAgIHN0cmluZy5yZXBsYWNlKCdccicsICdcbicpOwogCkBAIC0xMDE1LDEwICsxMDEzLDEwIEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICBOb2RlKiBibG9j
ayA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQtPnN0YXJ0Tm9kZSgpKTsKICAgICBib29sIHVzZUNs
b25lc09mRW5jbG9zaW5nQmxvY2sgPSAhYmxvY2stPmhhc1RhZ05hbWUoYm9keVRhZyk7CiAgICAg
Ci0gICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbGlzdCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpz
cGxpdCgnXG4nLCBzdHJpbmcsIHRydWUpOyAvLyB0cnVlIGdldHMgdXMgZW1wdHkgc3RyaW5ncyBp
biB0aGUgbGlzdAorICAgIFZlY3RvcjxTdHJpbmc+IGxpc3QgPSBzdHJpbmcuc3BsaXQoJ1xuJywg
dHJ1ZSk7IC8vIHRydWUgZ2V0cyB1cyBlbXB0eSBzdHJpbmdzIGluIHRoZSBsaXN0CiAgICAgd2hp
bGUgKCFsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBsaXN0
LmZpcnN0KCk7Ci0gICAgICAgIGxpc3QucG9wX2Zyb250KCk7CisgICAgICAgIFN0cmluZyBzID0g
bGlzdFswXTsKKyAgICAgICAgbGlzdC5yZW1vdmUoMCk7CiAKICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IGVsZW1lbnQ7CiAgICAgICAgIGlmIChzLmlzRW1wdHkoKSAmJiBsaXN0LmlzRW1wdHkoKSkg
ewpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNv
cmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSwxMiArMTcx
LDEyIEBAIGRvdWJsZSBIaXN0b3J5SXRlbTo6bGFzdFZpc2l0ZWRUaW1lKCkgY28KIAogS1VSTCBI
aXN0b3J5SXRlbTo6dXJsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gS1VSTChtX3VybFN0cmluZy5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgIHJldHVybiBLVVJMKG1fdXJsU3RyaW5nKTsKIH0KIAog
S1VSTCBIaXN0b3J5SXRlbTo6b3JpZ2luYWxVUkwoKSBjb25zdAogewotICAgIHJldHVybiBLVVJM
KG1fb3JpZ2luYWxVUkxTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICByZXR1cm4gS1VS
TChtX29yaWdpbmFsVVJMU3RyaW5nKTsKIH0KIAogY29uc3QgU3RyaW5nJiBIaXN0b3J5SXRlbTo6
dGFyZ2V0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNp
b24gMzAxMTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTcsOSArMTk3LDkgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZAogICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGUtPnBhZ2VYKCkgLSBhYnN4
OwogICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IGUtPnBhZ2VZKCkgLSBhYnN5OwogICAgICAg
ICAgICAgICAgICAgICB1cmwgKz0gIj8iOwotICAgICAgICAgICAgICAgICAgICB1cmwgKz0gRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKHgpOworICAgICAgICAgICAgICAgICAgICB1cmwgKz0gU3Ry
aW5nOjpudW1iZXIoeCk7CiAgICAgICAgICAgICAgICAgICAgIHVybCArPSAiLCI7Ci0gICAgICAg
ICAgICAgICAgICAgIHVybCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoeSk7CisgICAgICAg
ICAgICAgICAgICAgIHVybCArPSBTdHJpbmc6Om51bWJlcih5KTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7
CkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0Q29vcmRzKGNv
bnN0IAogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OmhyZWYoKSBjb25zdAogewotICAgIHJl
dHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKKyAg
ICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSku
c3RyaW5nKCk7CiB9CiAKIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKQEAgLTQxNSw0MSArNDE1LDQwIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6
OnNldFR5cGUoY29uc3QgU3QKIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50OjpoYXNoKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gJyMnICsgS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5y
ZWYoKTsKKyAgICByZXR1cm4gIiMiICsgS1VSTChocmVmKCkpLnJlZigpOwogfQogCiBTdHJpbmcg
SFRNTEFuY2hvckVsZW1lbnQ6Omhvc3QoKSBjb25zdAogewotICAgIHJldHVybiBLVVJMKGhyZWYo
KS5kZXByZWNhdGVkU3RyaW5nKCkpLmhvc3QoKTsKKyAgICByZXR1cm4gS1VSTChocmVmKCkpLmhv
c3QoKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50Ojpob3N0bmFtZSgpIGNvbnN0CiB7
Ci0gICAgS1VSTCB1cmwoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgaWYgKHVybC5w
b3J0KCk9PTApCisgICAgS1VSTCB1cmwoaHJlZigpKTsKKyAgICBpZiAodXJsLnBvcnQoKSA9PSAw
KQogICAgICAgICByZXR1cm4gdXJsLmhvc3QoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB1
cmwuaG9zdCgpICsgIjoiICsgU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSk7CisgICAgcmV0dXJu
IHVybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKTsKIH0KIAogU3Ry
aW5nIEhUTUxBbmNob3JFbGVtZW50OjpwYXRobmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtV
UkwoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSkucGF0aCgpOworICAgIHJldHVybiBLVVJMKGhy
ZWYoKSkucGF0aCgpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnBvcnQoKSBjb25z
dAogewotICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoS1VSTChocmVmKCkuZGVw
cmVjYXRlZFN0cmluZygpKS5wb3J0KCkpOworICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihLVVJM
KGhyZWYoKSkucG9ydCgpKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50Ojpwcm90b2Nv
bCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtVUkwoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSku
cHJvdG9jb2woKSArICI6IjsKKyAgICByZXR1cm4gS1VSTChocmVmKCkpLnByb3RvY29sKCkgKyAi
OiI7CiB9CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6c2VhcmNoKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5xdWVyeSgpOworICAgIHJl
dHVybiBLVVJMKGhyZWYoKSkucXVlcnkoKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50
Ojp0ZXh0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAz
MDExOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGlt
cGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCkBAIC0yMCwxMiArMTgsMTMgQEAKICAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKIApAQCAtMTgxLDcgKzE4MCw3IEBAIHZvaWQgSFRNTEFyZWFFbGVtZW50
OjpzZXRDb29yZHMoY29uc3QgU3QKIAogU3RyaW5nIEhUTUxBcmVhRWxlbWVudDo6aHJlZigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZSho
cmVmQXR0cikpOworICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTFN0cmluZyhnZXRB
dHRyaWJ1dGUoaHJlZkF0dHIpKTsKIH0KIAogdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEhyZWYo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzMDExOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw4ICs2OSw4IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW4KIAogICAgIC8vIFNpbmNlIHRoZSBkb2N1bWVudCBkb2Vzbid0IGhhdmUgYSBiYXNl
IGVsZW1lbnQuLi4KICAgICAvLyAoVGhpcyB3aWxsIGJyZWFrIGluIHRoZSBjYXNlIG9mIG11bHRp
cGxlIGJhc2UgZWxlbWVudHMsIGJ1dCB0aGF0J3Mgbm90IHZhbGlkIGFueXdheSAoPykpCi0gICAg
ZG9jdW1lbnQoKS0+c2V0QmFzZVVSTChEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICBkb2N1
bWVudCgpLT5zZXRCYXNlVGFyZ2V0KERlcHJlY2F0ZWRTdHJpbmc6Om51bGwpOworICAgIGRvY3Vt
ZW50KCktPnNldEJhc2VVUkwoU3RyaW5nKCkpOworICAgIGRvY3VtZW50KCktPnNldEJhc2VUYXJn
ZXQoU3RyaW5nKCkpOwogfQogCiB2b2lkIEhUTUxCYXNlRWxlbWVudDo6cHJvY2VzcygpCkBAIC03
OSw3ICs3OSw3IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50Ojpwcm9jZXNzKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFtX2hyZWYuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkp
Ci0gICAgICAgIGRvY3VtZW50KCktPnNldEJhc2VVUkwoS1VSTChkb2N1bWVudCgpLT5mcmFtZSgp
LT5sb2FkZXIoKS0+dXJsKCksIG1faHJlZi5kZXByZWNhdGVkU3RyaW5nKCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKSk7CisgICAgICAgIGRvY3VtZW50KCktPnNldEJhc2VVUkwoS1VSTChkb2N1bWVudCgp
LT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCksIG1faHJlZikuc3RyaW5nKCkpOwogCiAgICAgaWYg
KCFtX3RhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgIGRvY3VtZW50KCktPnNldEJhc2VUYXJnZXQo
bV90YXJnZXQpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4
KQorKysgV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQog
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYmFja2dyb3VuZEF0dHIpIHsKICAgICAgICAgU3RyaW5n
IHVybCA9IHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAoIXVybC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIsIENTU19QUk9QX0JBQ0tH
Uk9VTkRfSU1BR0UsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkpOworICAgICAgICAgICAg
YWRkQ1NTSW1hZ2VQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0lNQUdFLCBkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTFN0cmluZyh1cmwpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBtYXJnaW53aWR0aEF0dHIgfHwgYXR0ci0+bmFtZSgpID09IGxlZnRtYXJnaW5BdHRy
KSB7CiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIGF0
dHItPnZhbHVlKCkpOwogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lO
X0xFRlQsIGF0dHItPnZhbHVlKCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAko
cmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmliCiAgICAgICAgIGlmIChwb3MgIT0gLTEpCiAgICAgICAgICAgICBtX3Nl
cnZpY2VUeXBlID0gbV9zZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gY29kZUF0dHIgfHwgYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpCi0gICAgICAg
ICB1cmwgPSBwYXJzZVVSTCh2YWwpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgbV91cmwg
PSBwYXJzZVVSTCh2YWwpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwbHVnaW5wYWdl
QXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gcGx1Z2luc3BhZ2VBdHRyKQogICAgICAgICBtX3BsdWdp
blBhZ2UgPSB2YWw7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhpZGRlbkF0dHIpIHsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2NywxMSBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldFR5cGUoY29u
c3QgU3RyaW5nJik7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybDsKKyAgICBjb25zdCBTdHJp
bmcmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgY29uc3QgU3RyaW5nJiBzZXJ2
aWNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVR5cGU7IH0KKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgbV91cmw7CiAgICAgU3RyaW5nIG1fcGx1Z2luUGFnZTsKICAgICBTdHJpbmcgbV9z
ZXJ2aWNlVHlwZTsKICAgICBib29sIG1fbmVlZFdpZGdldFVwZGF0ZTsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsOSBAQCBIVE1MRm9ybUVs
ZW1lbnQ6On5IVE1MRm9ybUVsZW1lbnQoKQogICAgICAgICBpbWdFbGVtZW50c1tpXS0+bV9mb3Jt
ID0gMDsKIH0KIAotYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJt
aXNzaW9uKGNvbnN0IFN0cmluZyAmdXJsKQorYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1Xb3Vs
ZEhhdmVTZWN1cmVTdWJtaXNzaW9uKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIGlmICh1cmwu
aXNOdWxsKCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RhcnRzV2l0aCgi
aHR0cHM6IiwgZmFsc2UpOworICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwp
LnByb3RvY29sSXMoImh0dHBzIik7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjphdHRhY2go
KQpAQCAtMzEyLDEwICszMDksMTAgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVt
ZW50OjpmbwogICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSAiXCIiOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjdXJy
ZW50KS0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JQYXRoKHBhdGgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBh
dGgocGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSAiXHJcbkNv
bnRlbnQtVHlwZTogIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSBt
aW1lVHlwZS5hc2NpaSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3RyICs9
IG1pbWVUeXBlLmxhdGluMSgpLmRlcHJlY2F0ZWRDU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC00OTYsNyArNDkzLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChF
dmVudCogZXZlbgogICAgICAgICAgICAgICAgIFN0cmluZyBib2R5ID0gZGF0YS0+ZmxhdHRlblRv
U3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVuY3R5cGUo
KSwgInRleHQvcGxhaW4iKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBDb252ZW50aW9uIHNl
ZW1zIHRvIGJlIHRvIGRlY29kZSwgYW5kIHMvJi9cclxuLy4gQWxzbywgc3BhY2VzIGFyZSBlbmNv
ZGVkIGFzICUyMC4KLSAgICAgICAgICAgICAgICAgICAgYm9keSA9IEtVUkw6OmRlY29kZV9zdHJp
bmcoYm9keS5yZXBsYWNlKCcmJywgIlxyXG4iKS5yZXBsYWNlKCcrJywgJyAnKS5kZXByZWNhdGVk
U3RyaW5nKCkgKyAiXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBib2R5ID0gS1VSTDo6ZGVj
b2RlX3N0cmluZyhib2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxhY2UoJysnLCAnICcpICsg
IlxyXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBG
b3JtRGF0YSgoU3RyaW5nKCJib2R5PSIpICsgZW5jb2RlQ1N0cmluZyhib2R5LnV0ZjgoKSkpLnJl
cGxhY2UoJysnLCAiJTIwIikubGF0aW4xKCkpOwogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDcgQEAgYm9vbCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxBbGxvd2VkKAogICAgIGlmIChV
UkxTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEtVUkwgY29t
cGxldGVVUkwoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoVVJMU3RyaW5nLmRlcHJlY2F0ZWRTdHJp
bmcoKSkpOworICAgIEtVUkwgY29tcGxldGVVUkwoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoVVJM
U3RyaW5nKSk7CiAgICAgY29tcGxldGVVUkwuc2V0UmVmKERlcHJlY2F0ZWRTdHJpbmc6Om51bGwp
OwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgbW9yZSB0aGFuIDIwMCB0b3RhbCBmcmFtZXMgaW4gYSBz
ZXQuIFRoaXMgc2VlbXMKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRC
YXNlOjpzZXRTY3JvbGxpbmcoCiAKIFN0cmluZyBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c3JjKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRl
KHNyY0F0dHIpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkxTdHJpbmcoZ2V0
QXR0cmlidXRlKHNyY0F0dHIpKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0
U3JjKGNvbnN0IFN0cmluZyAmdmFsdWUpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKClb
MF0gPT0gJyMnKQogICAgICAgICAgICAgdXNlbWFwID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdXNlbWFwID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VV
UkwoYXR0ci0+dmFsdWUoKSkpOworICAgICAgICAgICAgdXNlbWFwID0gZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkxTdHJpbmcocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOwogICAgICAgICBtX2lzTGlu
ayA9ICFhdHRyLT5pc051bGwoKTsKICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGlzbWFwQXR0
cikKICAgICAgICAgaXNtYXAgPSB0cnVlOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2V0SXNNYXAoYm9vbCBpc00KIAogU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6
OmxvbmdEZXNjKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
Z2V0QXR0cmlidXRlKGxvbmdkZXNjQXR0cikpOworICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21w
bGV0ZVVSTFN0cmluZyhnZXRBdHRyaWJ1dGUobG9uZ2Rlc2NBdHRyKSk7CiB9CiAKIHZvaWQgSFRN
TEltYWdlRWxlbWVudDo6c2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTM1NCw3
ICszNTQsNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldExvbmdEZXNjKGNvbnN0CiAKIFN0
cmluZyBIVE1MSW1hZ2VFbGVtZW50Ojpsb3dzcmMoKSBjb25zdAogewotICAgIHJldHVybiBkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUobG93c3JjQXR0cikpOworICAgIHJldHVy
biBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTFN0cmluZyhnZXRBdHRyaWJ1dGUobG93c3JjQXR0cikp
OwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldExvd3NyYyhjb25zdCBTdHJpbmcmIHZh
bHVlKQpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0TG93c3Jj
KGNvbnN0IFMKIAogU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OnNyYygpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Cisg
ICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMU3RyaW5nKGdldEF0dHJpYnV0ZShzcmNB
dHRyKSk7CiB9CiAKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYg
dmFsdWUpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ1MSw3ICsxNDUxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTaXplKHVuc2lnbmVk
IAogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6c3JjKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkxTdHJpbmcoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsK
IH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3
ICs3Niw3IEBAIGJvb2wgSFRNTEtleWdlbkVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYKICAgICAv
LyBPbmx5IFJTQSBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLgogICAgIGlmICghbV9rZXlUeXBl
LmlzTnVsbCgpICYmICFlcXVhbElnbm9yaW5nQ2FzZShtX2tleVR5cGUsICJyc2EiKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1fY2hhbGxlbmdlLCBkb2N1bWVudCgpLT5i
YXNlVVJMKCkpOworICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5n
ZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1fY2hhbGxlbmdlLCBLVVJMKGRvY3VtZW50KCktPmJh
c2VVUkwoKSkpOwogICAgIGlmICh2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCB2YWx1ZS51dGY4KCkpOwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgs
NyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgICAgIHRv
a2VuaXplUmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBwcm9jZXNzKCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKLSAgICAgICAgbV91cmwg
PSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7CisgICAg
ICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkxTdHJpbmcocGFyc2VVUkwoYXR0ci0+
dmFsdWUoKSkpOwogICAgICAgICBwcm9jZXNzKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gdHlwZUF0dHIpIHsKICAgICAgICAgbV90eXBlID0gYXR0ci0+dmFsdWUoKTsKQEAgLTI3
NSw3ICsyNzUsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q2hhcnNldChjb25zdCBTCiAK
IFN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OmhyZWYoKSBjb25zdAogewotICAgIHJldHVybiBkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKKyAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkxTdHJpbmcoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7CiB9
CiAKIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyYgdmFsdWUpCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDcgKzIy
OCw3IEBAIFBhc3NSZWZQdHI8TWVkaWFFcnJvcj4gSFRNTE1lZGlhRWxlbWVudDoKIAogU3RyaW5n
IEhUTUxNZWRpYUVsZW1lbnQ6OnNyYygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CisgICAgcmV0dXJuIGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMU3RyaW5nKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdXJsKQpAQCAtODI1LDcgKzgy
NSw3IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpwaWNrTWVkaWEoKQogICAgICAgICB9CiAg
ICAgfQogICAgIGlmICghbWVkaWFTcmMuaXNFbXB0eSgpKQotICAgICAgICBtZWRpYVNyYyA9IGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKG1lZGlhU3JjKTsKKyAgICAgICAgbWVkaWFTcmMgPSBkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTFN0cmluZyhtZWRpYVNyYyk7CiAgICAgcmV0dXJuIG1lZGlhU3Jj
OwogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4
KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENvZGVUeXBlKGNv
bnMKIAogU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50OjpkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGRhdGFBdHRyKSk7CisgICAg
cmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMU3RyaW5nKGdldEF0dHJpYnV0ZShkYXRhQXR0
cikpOwogfQogCiB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
dmFsdWUpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiAz
MDExOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6c2V0UmVu
ZGVyU3R5bGUKIAogU3RyaW5nIEhUTUxPcHRHcm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KCkg
Y29uc3QKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGl0ZW1UZXh0ID0gZ2V0QXR0cmlidXRlKGxh
YmVsQXR0cikuZGVwcmVjYXRlZFN0cmluZygpOworICAgIFN0cmluZyBpdGVtVGV4dCA9IGdldEF0
dHJpYnV0ZShsYWJlbEF0dHIpOwogICAgIAogICAgIGl0ZW1UZXh0LnJlcGxhY2UoJ1xcJywgZG9j
dW1lbnQoKS0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICAvLyBJbiBXaW5JRSwg
bGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMgYW5k
IG9wdGdyb3Vwcy4gV2UgbWF0Y2ggdGhpcyBiZWhhdmlvci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBIVE1M
U2NyaXB0RWxlbWVudDo6c2V0RGVmZXIoYm9vbCBkZQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1l
bnQ6OnNyYygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdl
dEF0dHJpYnV0ZShzcmNBdHRyKSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJM
U3RyaW5nKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6OnNldFNyYyhjb25zdCBTdHJpbmcgJnZhbHVlKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxT
b3VyY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBIVE1MU291cmNl
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdQogCiBTdHJpbmcgSFRNTFNvdXJjZUVsZW1lbnQ6OnNy
YygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJp
YnV0ZShzcmNBdHRyKSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMU3RyaW5n
KGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnNl
dFNyYyhjb25zdCBTdHJpbmcmIHVybCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTEsNyArMzUxLDcgQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJhY2tncm91
bmRBdHRyKSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsK
ICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRkQ1NTSW1hZ2VQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0lNQUdFLCBkb2N1bWVudCgpLT5jb21wbGV0
ZVVSTCh1cmwpKTsKKyAgICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfQkFDS0dST1VORF9JTUFHRSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkxTdHJpbmcodXJsKSk7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZnJhbWVBdHRyKSB7CiAgICAgICAgIC8v
IENhY2hlIHRoZSB2YWx1ZSBvZiAiZnJhbWUiIHNvIHRoYXQgdGhlIHRhYmxlIGNhbiBleGFtaW5l
IGl0IGxhdGVyLgogICAgICAgICBtX2ZyYW1lQXR0ciA9IGZhbHNlOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcg
QEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudDo6cGFyc2VNYXBwZWRBdAogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0cikgewogICAgICAgICBTdHJpbmcgdXJsID0g
cGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9J
TUFHRSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSk7CisgICAgICAgICAgICBhZGRDU1NJ
bWFnZVByb3BlcnR5KGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIGRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMU3RyaW5nKHVybCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGJvcmRlcmNvbG9yQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CT1JERVJfQ09MT1Is
IGF0dHItPnZhbHVlKCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAko
cmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6OnNldFZhbHVlKGNvbnN0CiB7CiAgICAgLy8gQ29kZSBlbHNld2hlcmUgbm9ybWFsaXplcyBs
aW5lIGVuZGluZ3MgYWRkZWQgYnkgdGhlIHVzZXIgdmlhIHRoZSBrZXlib2FyZCBvciBwYXN0aW5n
LgogICAgIC8vIFdlIG11c3Qgbm9ybWFsaXplIGxpbmUgZW5kaW5ncyBjb21pbmcgZnJvbSBKUy4K
LSAgICBEZXByZWNhdGVkU3RyaW5nIHZhbHVlV2l0aE5vcm1hbGl6ZWRMaW5lRW5kaW5ncyA9IHZh
bHVlLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBTdHJpbmcgdmFsdWVXaXRoTm9ybWFsaXplZExp
bmVFbmRpbmdzID0gdmFsdWU7CiAgICAgdmFsdWVXaXRoTm9ybWFsaXplZExpbmVFbmRpbmdzLnJl
cGxhY2UoIlxyXG4iLCAiXG4iKTsKICAgICB2YWx1ZVdpdGhOb3JtYWxpemVkTGluZUVuZGluZ3Mu
cmVwbGFjZSgiXHIiLCAiXG4iKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5p
emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJl
dmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MDUsNyArNTA1LDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2Vu
aXplcjo6c2NyaQogICAgIGlmIChtX2ZyYWdtZW50IHx8ICFtX2RvYy0+ZnJhbWUoKSkKICAgICAg
ICAgcmV0dXJuIHN0YXRlOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0Kys7Ci0gICAgRGVwcmVjYXRl
ZFN0cmluZyB1cmwgPSBzY3JpcHRVUkwuaXNOdWxsKCkgPyBtX2RvYy0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dXJsKCkgOiBzY3JpcHRVUkwuZGVwcmVjYXRlZFN0cmluZygpOworICAgIFN0cmluZyB1
cmwgPSBzY3JpcHRVUkwuaXNOdWxsKCkgPyBtX2RvYy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJs
KCkgOiBzY3JpcHRVUkw7CiAKICAgICBTZWdtZW50ZWRTdHJpbmcgKnNhdmVkUHJlcGVuZGluZ1Ny
YyA9IGN1cnJlbnRQcmVwZW5kaW5nU3JjOwogICAgIFNlZ21lbnRlZFN0cmluZyBwcmVwZW5kaW5n
U3JjOwpAQCAtMTIxNSw3ICsxMjE1LDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2Vu
aXplcjo6cGFycwogICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2Rv
Yy0+c2V0dGluZ3MoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRp
bmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgoYSA9IGN1cnJUb2tlbi5hdHRycy0+Z2V0QXR0cmlidXRlSXRlbShzcmNBdHRyKSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0U3JjID0gbV9kb2MtPmNvbXBsZXRlVVJMKHBh
cnNlVVJMKGEtPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRT
cmMgPSBtX2RvYy0+Y29tcGxldGVVUkxTdHJpbmcocGFyc2VVUkwoYS0+dmFsdWUoKSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKChhID0gY3VyclRva2VuLmF0dHJzLT5nZXRBdHRyaWJ1
dGVJdGVtKGNoYXJzZXRBdHRyKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0
U3JjQ2hhcnNldCA9IGEtPnZhbHVlKCkuZG9tU3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0U3JjQ2hhcnNldC5pc0VtcHR5KCkpCkBA
IC0xNjIzLDggKzE2MjMsOCBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxUb2tlbml6ZXI6OnByb2Nl
c3NUCiAKICNpZmRlZiBUT0tFTl9ERUJVRwogICAgIERlcHJlY2F0ZWRTdHJpbmcgbmFtZSA9IGN1
cnJUb2tlbi50YWdOYW1lLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBEZXByZWNhdGVkU3RyaW5n
IHRleHQ7Ci0gICAgaWYoY3VyclRva2VuLnRleHQpCisgICAgU3RyaW5nIHRleHQ7CisgICAgaWYg
KGN1cnJUb2tlbi50ZXh0KQogICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZENvbnN0U3RyaW5nKGN1
cnJUb2tlbi50ZXh0LT51bmljb2RlKCksIGN1cnJUb2tlbi50ZXh0LT5sZW5ndGgoKSkuZGVwcmVj
YXRlZFN0cmluZygpOwogCiAgICAga2REZWJ1ZyggNjAzNiApIDw8ICJUb2tlbiAtLT4gIiA8PCBu
YW1lIDw8IGVuZGw7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAz
MDExOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6c2V0SGVpZ2h0KGlu
dCB2YWwKIAogU3RyaW5nIEhUTUxWaWRlb0VsZW1lbnQ6OnBvc3RlcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShwb3N0ZXJBdHRyKSk7
CisgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMU3RyaW5nKGdldEF0dHJpYnV0ZShw
b3N0ZXJBdHRyKSk7CiB9CiAKIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6c2V0UG9zdGVyKGNvbnN0
IFN0cmluZyYgdmFsdWUpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHJldmlzaW9uIDMwMTE4KQor
KysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMjIg
KzY0LDI3IEBAIERvY0xvYWRlcjo6fkRvY0xvYWRlcigpCiAKIHZvaWQgRG9jTG9hZGVyOjpjaGVj
a0ZvclJlbG9hZChjb25zdCBLVVJMJiBmdWxsVVJMKQogeworICAgIC8vIFRoZSBjb2RlIGJlbG93
IGV4cGVjdHMgYSBub24tTlVMTCBzdHJpbmcuCisgICAgU3RyaW5nIHVybFN0cmluZyA9IGZ1bGxV
Ukwuc3RyaW5nKCk7CisgICAgaWYgKHVybFN0cmluZy5pc051bGwoKSkKKyAgICAgICAgdXJsU3Ry
aW5nID0gIiI7CisKICAgICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQotICAgICAgICByZXR1
cm47IC8vRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nCisgICAgICAgIHJldHVy
bjsgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nCiAgICAgaWYgKG1fY2Fj
aGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lWZXJpZnkpIHsKLSAgICAgICBpZiAoIW1fcmVsb2FkZWRV
UkxzLmNvbnRhaW5zKGZ1bGxVUkwuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7
CisgICAgICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyh1cmxTdHJpbmcpKSB7CisgICAg
ICAgICAgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwo
dXJsU3RyaW5nKTsKICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmctPmlzRXhwaXJl
ZCgpKSB7CiAgICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsKLSAgICAgICAg
ICAgICBtX3JlbG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAgICAgICAgICAg
bV9yZWxvYWRlZFVSTHMuYWRkKHVybFN0cmluZyk7CiAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKChtX2NhY2hlUG9saWN5ID09IENhY2hlUG9saWN5UmVsb2FkKSB8fCAobV9j
YWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeVJlZnJlc2gpKSB7Ci0gICAgICAgaWYgKCFtX3JlbG9h
ZGVkVVJMcy5jb250YWlucyhmdWxsVVJMLnN0cmluZygpKSkgewotICAgICAgICAgIENhY2hlZFJl
c291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwuc3RyaW5n
KCkpOworICAgICAgIGlmICghbV9yZWxvYWRlZFVSTHMuY29udGFpbnModXJsU3RyaW5nKSkgewor
ICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9y
VVJMKHVybFN0cmluZyk7CiAgICAgICAgICAgaWYgKGV4aXN0aW5nKQogICAgICAgICAgICAgIGNh
Y2hlKCktPnJlbW92ZShleGlzdGluZyk7Ci0gICAgICAgICAgbV9yZWxvYWRlZFVSTHMuYWRkKGZ1
bGxVUkwuc3RyaW5nKCkpOworICAgICAgICAgIG1fcmVsb2FkZWRVUkxzLmFkZCh1cmxTdHJpbmcp
OwogICAgICAgIH0KICAgICB9CiB9CkBAIC0xNDEsNyArMTQ2LDcgQEAgQ2FjaGVkWEJMRG9jdW1l
bnQqIERvY0xvYWRlcjo6cmVxdWVzdFhCTAogCiBDYWNoZWRSZXNvdXJjZSogRG9jTG9hZGVyOjpy
ZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyogY2hhcnNldCwgYm9vbCBza2lwQ2FuTG9hZENoZWNrLCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7Ci0gICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNv
bXBsZXRlVVJMKHVybC5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIEtVUkwgZnVsbFVSTChtX2Rv
Yy0+Y29tcGxldGVVUkwodXJsKSk7CiAgICAgCiAgICAgaWYgKGNhY2hlKCktPmRpc2FibGVkKCkp
IHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0
ID0gbV9kb2NSZXNvdXJjZXMuZmluZChmdWxsVVJMLnN0cmluZygpKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29y
ZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcs
MTAgKzMwNyw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5VG9rZW5pemVyOjpwYXJzZUFuZEFwcGUKIHsK
ICAgICBMaXN0UmVzdWx0IHJlc3VsdDsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgZGVwU3RyaW5n
ID0gaW5wdXRMaW5lLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBjb25zdCBjaGFyKiBsaW5lID0g
ZGVwU3RyaW5nLmFzY2lpKCk7Ci0gICAgCi0gICAgRlRQRW50cnlUeXBlIHR5cGVSZXN1bHQgPSBw
YXJzZU9uZUZUUExpbmUobGluZSwgbV9saXN0U3RhdGUsIHJlc3VsdCk7CisgICAgRlRQRW50cnlU
eXBlIHR5cGVSZXN1bHQgPSBwYXJzZU9uZUZUUExpbmUoaW5wdXRMaW5lLmxhdGluMSgpLmRhdGEo
KSwgbV9saXN0U3RhdGUsIHJlc3VsdCk7CiAgICAgCiAgICAgLy8gRlRQTWlzY0VudHJ5IGlzIGEg
Y29tbWVudCBvciB1c2FnZSBzdGF0aXN0aWMgd2hpY2ggd2UgZG9uJ3QgY2FyZSBhYm91dCwgYW5k
IGp1bmsgaXMgaW52YWxpZCBkYXRhIC0gYmFpbCBpbiB0aGVzZSAyIGNhc2VzCiAgICAgaWYgKHR5
cGVSZXN1bHQgPT0gRlRQTWlzY0VudHJ5IHx8IHR5cGVSZXN1bHQgPT0gRlRQSnVua0VudHJ5KQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw4ICs0MTMsOCBAQCBi
b29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lCiAgICAgS1VSTCBzY3JpcHRV
Ukw7CiAgICAgS1VSTCB1cmw7CiAgICAgaWYgKHVybFN0cmluZy5zdGFydHNXaXRoKCJqYXZhc2Ny
aXB0OiIsIGZhbHNlKSkgewotICAgICAgICBzY3JpcHRVUkwgPSB1cmxTdHJpbmcuZGVwcmVjYXRl
ZFN0cmluZygpOwotICAgICAgICB1cmwgPSAiYWJvdXQ6YmxhbmsiOworICAgICAgICBzY3JpcHRV
UkwgPSBLVVJMKHVybFN0cmluZyk7CisgICAgICAgIHVybCA9IEtVUkwoImFib3V0OmJsYW5rIik7
CiAgICAgfSBlbHNlCiAgICAgICAgIHVybCA9IGNvbXBsZXRlVVJMKHVybFN0cmluZyk7CiAKQEAg
LTUwMSw4ICs1MDEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIq
CiAgICAgaWYgKHUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEZXByZWNhdGVk
U3RyaW5nIHVybFN0cmluZyA9IHUuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIGlmICh1cmxTdHJp
bmcuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKKyAgICBpZiAodS5wcm90b2Nv
bElzKCJqYXZhc2NyaXB0IikpIHsKICAgICAgICAgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3Jt
QWN0aW9uID0gdHJ1ZTsKICAgICAgICAgZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTCh1LCBmYWxzZSwg
ZmFsc2UpOwogICAgICAgICBtX2lzRXhlY3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24gPSBmYWxz
ZTsKQEAgLTUzMiwxMSArNTMxLDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29u
c3QgY2hhcioKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gdS5xdWVyeSgpOwogICAgICAgICBpZiAo
IXF1ZXJ5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHF1ZXJ5LmFwcGVuZCgnJicpOwotICAgICAg
ICB1LnNldFF1ZXJ5KChxdWVyeSArIGJvZHkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAg
IHUuc2V0UXVlcnkocXVlcnkgKyBib2R5KTsKICAgICB9CiAKICAgICBpZiAoc3RyY21wKGFjdGlv
biwgIkdFVCIpID09IDApIHsKLSAgICAgICAgdS5zZXRRdWVyeShmb3JtRGF0YS0+ZmxhdHRlblRv
U3RyaW5nKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAgdS5zZXRRdWVyeShmb3JtRGF0
YS0+ZmxhdHRlblRvU3RyaW5nKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghaXNNYWls
dG9Gb3JtKQogICAgICAgICAgICAgZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhU
VFBCb2R5KGZvcm1EYXRhLmdldCgpKTsKQEAgLTY0OSwxNiArNjQ4LDE2IEBAIEtVUkwgRnJhbWVM
b2FkZXI6Omljb25VUkwoKQogewogICAgIC8vIElmIHRoaXMgaXNuJ3QgYSB0b3AgbGV2ZWwgZnJh
bWUsIHJldHVybiBub3RoaW5nCiAgICAgaWYgKG1fZnJhbWUtPnRyZWUoKSAmJiBtX2ZyYW1lLT50
cmVlKCktPnBhcmVudCgpKQotICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIAorICAgICAgICBy
ZXR1cm4gS1VSTCgpOworCiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpY29uVVJMIGZyb20gYSBMaW5r
IGVsZW1lbnQsIHJldHVybiB0aGF0CiAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgIW1f
ZnJhbWUtPmRvY3VtZW50KCktPmljb25VUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5pY29uVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIEtVUkwobV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNvblVSTCgpKTsK
KwogICAgIC8vIERvbid0IHJldHVybiBhIGZhdmljb24gaWNvblVSTCB1bmxlc3Mgd2UncmUgaHR0
cCBvciBodHRwcwotICAgIGlmIChtX1VSTC5wcm90b2NvbCgpICE9ICJodHRwIiAmJiBtX1VSTC5w
cm90b2NvbCgpICE9ICJodHRwcyIpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgCisgICAg
aWYgKCFtX1VSTC5wcm90b2NvbElzKCJodHRwIikgJiYgIW1fVVJMLnByb3RvY29sSXMoImh0dHBz
IikpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKICAgICBLVVJMIHVybDsKICAgICB1cmwuc2V0
UHJvdG9jb2wobV9VUkwucHJvdG9jb2woKSk7CiAgICAgdXJsLnNldEhvc3QobV9VUkwuaG9zdCgp
KTsKQEAgLTY4Nyw3ICs2ODYsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKGNvbnN0
IEtVUkwmCiAgICAgbV9mcmFtZS0+c2V0SlNEZWZhdWx0U3RhdHVzQmFyVGV4dChTdHJpbmcoKSk7
CiAKICAgICBtX1VSTCA9IHVybDsKLSAgICBpZiAobV9VUkwucHJvdG9jb2woKS5zdGFydHNXaXRo
KCJodHRwIikgJiYgIW1fVVJMLmhvc3QoKS5pc0VtcHR5KCkgJiYgbV9VUkwucGF0aCgpLmlzRW1w
dHkoKSkKKyAgICBpZiAoKG1fVVJMLnByb3RvY29sSXMoImh0dHAiKSB8fCBtX1VSTC5wcm90b2Nv
bElzKCJodHRwcyIpKSAmJiAhbV9VUkwuaG9zdCgpLmlzRW1wdHkoKSAmJiBtX1VSTC5wYXRoKCku
aXNFbXB0eSgpKQogICAgICAgICBtX1VSTC5zZXRQYXRoKCIvIik7CiAgICAgbV93b3JraW5nVVJM
ID0gbV9VUkw7CiAKQEAgLTcxMCwxNSArNzA5LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpZEV4
cGxpY2l0T3BlbigpCiAgICAgLy8gaW1wbGljaXRseSBwcmVjZWRlcyBkb2N1bWVudC53cml0ZS4K
ICAgICBjYW5jZWxSZWRpcmVjdGlvbigpOyAKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkgIT0gImFib3V0OmJsYW5rIikKLSAgICAgICAgbV9VUkwgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cmwoKTsKKyAgICAgICAgbV9VUkwgPSBLVVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChjb25z
dCBLVVJMJiB1cmwsIGJvb2wgdXNlckdlc3R1cmUsIGJvb2wgcmVwbGFjZURvY3VtZW50KQogewot
ICAgIGlmICghdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIs
IGZhbHNlKSkKKyAgICBpZiAoIXVybC5wcm90b2NvbElzKCJqYXZhc2NyaXB0IikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBzY3JpcHQgPSBLVVJMOjpkZWNvZGVfc3RyaW5n
KHVybC5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0cmxlbigiamF2YXNjcmlwdDoiKSkpOworICAg
IFN0cmluZyBzY3JpcHQgPSBLVVJMOjpkZWNvZGVfc3RyaW5nKHVybC5zdHJpbmcoKS5zdWJzdHJp
bmcoc3RybGVuKCJqYXZhc2NyaXB0OiIpKSk7CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gZXhlY3V0
ZVNjcmlwdChzY3JpcHQsIHVzZXJHZXN0dXJlKTsKIAogICAgIFN0cmluZyBzY3JpcHRSZXN1bHQ7
CkBAIC04NTcsNyArODU2LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEo
KQogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICB1cmwgPSBtX1VSTC5zdHJpbmcoKTsK
ICAgICBlbHNlCi0gICAgICAgIHVybCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHVybCk7CisgICAgICAgIHVybCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVy
bCkuc3RyaW5nKCk7CiAKICAgICBzY2hlZHVsZUhUVFBSZWRpcmVjdGlvbihkZWxheSwgdXJsKTsK
IH0KQEAgLTg5NSw5ICs4OTQsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpiZWdpbihjb25zdCBLVVJM
JiB1cmwsCiAgICAgbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IG1fY3JlYXRp
bmdJbml0aWFsRW1wdHlEb2N1bWVudDsKIAogICAgIEtVUkwgcmVmKHVybCk7Ci0gICAgcmVmLnNl
dFVzZXIoRGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICByZWYuc2V0UGFzcyhEZXByZWNhdGVkU3Ry
aW5nKCkpOwotICAgIHJlZi5zZXRSZWYoRGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICByZWYuc2V0
VXNlcihTdHJpbmcoKSk7CisgICAgcmVmLnNldFBhc3MoU3RyaW5nKCkpOworICAgIHJlZi5zZXRS
ZWYoU3RyaW5nKCkpOwogICAgIG1fb3V0Z29pbmdSZWZlcnJlciA9IHJlZi5zdHJpbmcoKTsKICAg
ICBtX1VSTCA9IHVybDsKICAgICBLVVJMIGJhc2V1cmw7CkBAIC05MDgsMTAgKzkwNywxMCBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpiZWdpbihjb25zdCBLVVJMJiB1cmwsCiAgICAgUmVmUHRyPERvY3Vt
ZW50PiBkb2N1bWVudCA9IERPTUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgpLT5jcmVhdGVEb2N1
bWVudChtX3Jlc3BvbnNlTUlNRVR5cGUsIG1fZnJhbWUsIG1fZnJhbWUtPmluVmlld1NvdXJjZU1v
ZGUoKSk7CiAgICAgbV9mcmFtZS0+c2V0RG9jdW1lbnQoZG9jdW1lbnQpOwogCi0gICAgZG9jdW1l
bnQtPnNldFVSTChtX1VSTC5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIGRvY3VtZW50LT5zZXRV
UkwobV9VUkwuc3RyaW5nKCkpOwogICAgIC8vIFdlIHByZWZlciBtX2Jhc2VVUkwgb3ZlciBtX1VS
TCBiZWNhdXNlIG1fVVJMIGNoYW5nZXMgd2hlbiB3ZSBhcmUKICAgICAvLyBhYm91dCB0byBsb2Fk
IGEgbmV3IHBhZ2UuCi0gICAgZG9jdW1lbnQtPnNldEJhc2VVUkwoYmFzZXVybC5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgIGRvY3VtZW50LT5zZXRCYXNlVVJMKGJhc2V1cmwuc3RyaW5nKCkpOwog
ICAgIGlmIChtX2RlY29kZXIpCiAgICAgICAgIGRvY3VtZW50LT5zZXREZWNvZGVyKG1fZGVjb2Rl
ci5nZXQoKSk7CiAgICAgaWYgKGZvcmNlZFNlY3VyaXR5T3JpZ2luKQpAQCAtMTE5MCw3ICsxMTg5
LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Z290b0FuY2hvcigpCiAgICAgICAgICEobV9mcmFtZS0+
ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5nZXRDU1NUYXJnZXQoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gbV9VUkwuZW5jb2RlZEh0
bWxSZWYoKTsKKyAgICBTdHJpbmcgcmVmID0gbV9VUkwuZW5jb2RlZEh0bWxSZWYoKTsKICAgICBp
ZiAoIWdvdG9BbmNob3IocmVmKSkgewogICAgICAgICAvLyBDYW4ndCB1c2UgaHRtbFJlZigpIGhl
cmUgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgd2hpY2ggZW5jb2RpbmcgdG8gdXNlIHRvIGRlY29k
ZS4KICAgICAgICAgLy8gRGVjb2RpbmcgaGVyZSBoYXMgdG8gbWF0Y2ggZW5jb2RpbmcgaW4gY29t
cGxldGVVUkwsIHdoaWNoIG1lYW5zIGl0IGhhcyB0byB1c2UgdGhlCkBAIC0xMzEyLDcgKzEzMTEs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0NhbGxJbXBsaWNpdENsb3NlCiBLVVJMIEZyYW1l
TG9hZGVyOjpiYXNlVVJMKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQo
KSk7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKTsKKyAgICByZXR1
cm4gS1VSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkpOwogfQogCiBTdHJpbmcgRnJh
bWVMb2FkZXI6OmJhc2VUYXJnZXQoKSBjb25zdApAQCAtMTMyNCw3ICsxMzIzLDcgQEAgU3RyaW5n
IEZyYW1lTG9hZGVyOjpiYXNlVGFyZ2V0KCkgY29uc3QKIEtVUkwgRnJhbWVMb2FkZXI6OmNvbXBs
ZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKLSAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKS5k
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHVybCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlSFRUUFJlZGlyZWN0
aW9uKGRvdWJsZSBkZWxheSwgY29uc3QgU3RyaW5nJiB1cmwpCkBAIC0xMzQxLDcgKzEzNDAsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlCiB7ICAgIAogICAgIC8v
IElmIHRoZSBVUkwgd2UncmUgZ29pbmcgdG8gbmF2aWdhdGUgdG8gaXMgdGhlIHNhbWUgYXMgdGhl
IGN1cnJlbnQgb25lLCBleGNlcHQgZm9yIHRoZQogICAgIC8vIGZyYWdtZW50IHBhcnQsIHdlIGRv
bid0IG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvY2F0aW9uIGNoYW5nZS4KLSAgICBLVVJMIHUodXJs
LmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgS1VSTCB1KHVybCk7CiAgICAgaWYgKHUuaGFzUmVm
KCkgJiYgZXF1YWxJZ25vcmluZ1JlZihtX1VSTCwgdSkpIHsKICAgICAgICAgY2hhbmdlTG9jYXRp
b24odXJsLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIHdhc1VzZXJHZXN0dXJlKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMTg0NSw3ICsxODQ0LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RhcnRSZWRp
cmVjdGlvblRpbWVyKAogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVj
dGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6
CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5n
TG9hZDoKLSAgICAgICAgICAgIGNsaWVudFJlZGlyZWN0ZWQobV9zY2hlZHVsZWRSZWRpcmVjdGlv
bi0+dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSwKKyAgICAgICAgICAgIGNsaWVudFJlZGlyZWN0ZWQo
S1VSTChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwpLAogICAgICAgICAgICAgICAgIG1fc2No
ZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAogICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lKCkg
KyBtX3JlZGlyZWN0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZhbCgpLAogICAgICAgICAgICAgICAg
IG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LApAQCAtMTk0NCw3ICsxOTQzLDcg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZChjb25zdCBGcmFtZUxvYWRSZQogICAgICAgICByZWZl
cnJlciA9IG1fb3V0Z29pbmdSZWZlcnJlcjsKICAKICAgICBBU1NFUlQoZnJhbWUoKS0+ZG9jdW1l
bnQoKSk7Ci0gICAgaWYgKHVybC5kZXByZWNhdGVkU3RyaW5nKCkuc3RhcnRzV2l0aCgiZmlsZToi
LCBmYWxzZSkpIHsKKyAgICBpZiAodXJsLnByb3RvY29sSXMoImZpbGUiKSkgewogICAgICAgICBp
ZiAoIWNhbkxvYWQodXJsLCBmcmFtZSgpLT5kb2N1bWVudCgpKSAmJiAhY2FuTG9hZCh1cmwsIHJl
ZmVycmVyKSkgewogICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxl
ZChtX2ZyYW1lLT5wYWdlKCksIHVybC5zdHJpbmcoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yMTc5LDcgKzIxNzgsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRIaWRlUmVmZXJyZXIo
Y29uCiAgICAgaWYgKCFyZWZlcnJlcklzU2VjdXJlVVJMKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBib29sIFVSTElzU2VjdXJlVVJMID0gdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFy
dHNXaXRoKCJodHRwczoiLCBmYWxzZSk7CisgICAgYm9vbCBVUkxJc1NlY3VyZVVSTCA9IHVybC5w
cm90b2NvbElzKCJodHRwcyIpOwogCiAgICAgcmV0dXJuICFVUkxJc1NlY3VyZVVSTDsKIH0KQEAg
LTI1NTYsNyArMjU1NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9h
ZCgKICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgICAgICB1cmwgPSBwZGwtPnJl
c3BvbnNlVVJMKCk7CiAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgdXJs
ID0gImFib3V0OmJsYW5rIjsKKyAgICAgICAgICAgIHVybCA9IEtVUkwoImFib3V0OmJsYW5rIik7
CiAKICAgICAgICAgZGlkT3BlblVSTCh1cmwpOwogICAgIH0KQEAgLTQ3OTAsOCArNDc4OSw4IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OnN3aXRjaE91dExvd0JhbmR3aWR0aEQKICAgICAgICAgICAgIFJl
ZlB0cjxEb2N1bWVudD4gbmV3RG9jID0gRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCktPgog
ICAgICAgICAgICAgICAgIGNyZWF0ZURvY3VtZW50KG1fcmVzcG9uc2VNSU1FVHlwZSwgbV9mcmFt
ZSwgbV9mcmFtZS0+aW5WaWV3U291cmNlTW9kZSgpKTsKICAgICAgICAgICAgIG1fZnJhbWUtPnNl
dERvY3VtZW50KG5ld0RvYyk7Ci0gICAgICAgICAgICBuZXdEb2MtPnNldFVSTChtX1VSTC5kZXBy
ZWNhdGVkU3RyaW5nKCkpOwotICAgICAgICAgICAgbmV3RG9jLT5zZXRCYXNlVVJMKG1fVVJMLmRl
cHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgICAgICBuZXdEb2MtPnNldFVSTChtX1VSTCk7Cisg
ICAgICAgICAgICBuZXdEb2MtPnNldEJhc2VVUkwobV9VUkwpOwogICAgICAgICAgICAgaWYgKG1f
ZGVjb2RlcikKICAgICAgICAgICAgICAgICBuZXdEb2MtPnNldERlY29kZXIobV9kZWNvZGVyLmdl
dCgpKTsKICAgICAgICAgICAgIHJlc3RvcmVEb2N1bWVudFN0YXRlKCk7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5j
cHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsMTQgKzczLDExIEBAIHZvaWQgTG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpCiAgICAgICAgIGlmICghcmVxLT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVxLT5jYWNoZWRSZXNv
dXJjZSgpLT5hY2NlcHQoKSk7CiAKLSAgICAgICAgS1VSTCByID0gZGwtPmRvYygpLT51cmwoKTsK
KyAgICAgICAgS1VSTCByKGRsLT5kb2MoKS0+dXJsKCkpOwogICAgICAgICBpZiAoci5wcm90b2Nv
bCgpLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiByLnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICByLnNldFBhdGgoIi8iKTsKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIoci5zdHJp
bmcoKSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZG9tYWluID0gci5ob3N0KCk7Ci0gICAg
ICAgIGlmIChkbC0+ZG9jKCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgICAgICBkb21haW4g
PSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkbC0+ZG9jKCkpLT5kb21haW4oKS5kZXByZWNh
dGVkU3RyaW5nKCk7Ci0gICAgICAgIAorCiAgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRl
cj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShkbC0+ZG9jKCktPmZyYW1lKCks
CiAgICAgICAgICAgICB0aGlzLCByZXF1ZXN0LCByZXEtPnNob3VsZFNraXBDYW5Mb2FkQ2hlY2so
KSwgcmVxLT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwogCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDEzICsyMTgsMTEg
QEAgdm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkKIEltYWdlKiBJY29uRGF0YWJh
c2U6Omljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTE9yaWdpbmFsLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBib29sIGNhY2hlKQogeyAgIAogICAgIEFTU0VSVF9OT1RfU1lOQ19USFJF
QUQoKTsKLSAgICAKLSAgICBBU1NFUlQoIXBhZ2VVUkxPcmlnaW5hbC5pc051bGwoKSk7CiAKICAg
ICAvLyBwYWdlVVJMT3JpZ2luYWwgY2FuIG5vdCBiZSBzdG9yZWQgd2l0aG91dCBiZWluZyBkZWVw
IGNvcGllZCBmaXJzdC4gIAogICAgIC8vIFdlIHNob3VsZCBnbyBvdXIgb2Ygb3VyIHdheSB0byBv
bmx5IGNvcHkgaXQgaWYgd2UgaGF2ZSB0byBzdG9yZSBpdAogICAgIAotICAgIGlmICghaXNPcGVu
KCkpCisgICAgaWYgKCFpc09wZW4oKSB8fCBwYWdlVVJMT3JpZ2luYWwuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gZGVmYXVsdEljb24oc2l6ZSk7CiAKICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV91cmxBbmRJY29uTG9jayk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJy
aWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRn
ZS5tbQkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJy
aWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjI3LDEyICs2MjcsMTEgQEAgc3RhdGljIEhUTUxG
b3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogCiAtIChOU1VSTCAqKVVSTFdpdGhBdHRyaWJ1
dGVTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCiB7Ci0gICAgRG9jdW1lbnQgKmRvYyA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7
CiAgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgLy8gRklYTUU6IGlzIHBh
cnNlVVJMIGFwcHJvcHJpYXRlIGhlcmU/Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZWwgPSBwYXJz
ZVVSTChzdHJpbmcpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICByZXR1cm4gS1VSTChkb2MtPmNv
bXBsZXRlVVJMKHJlbCkpLmdldE5TVVJMKCk7CisgICAgcmV0dXJuIEtVUkwoZG9jLT5jb21wbGV0
ZVVSTChwYXJzZVVSTChzdHJpbmcpKSkuZ2V0TlNVUkwoKTsKIH0KIAogLSAoQk9PTClzZWFyY2hG
b3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRp
dmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihC
T09MKXN0YXJ0SW5TZWxlY3Rpb24KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMzAxMTgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw5
IEBACiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAordHlwZWRl
ZiBWZWN0b3I8VUNoYXIsIDUxMj4gVGVtcFVDaGFyQnVmZmVyOwordHlwZWRlZiBWZWN0b3I8Y2hh
ciwgNTEyPiBUZW1wQ2hhckJ1ZmZlcjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIFVS
TENoYXJhY3RlckNsYXNzZXMgewpAQCAtNzgsNyArODEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBo
ZXhEaWdpdHNbMTddID0gIjAxMjM0CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNoYXJh
Y3RlckNsYXNzVGFibGVbMjU2XSA9IHsKICAgICAvKiAwIG51bCAqLyBQYXRoU2VnbWVudEVuZENo
YXIsICAgIC8qIDEgc29oICovIEJhZENoYXIsCi0gICAgLyogMiBzdHggKi8gQmFkQ2hhciwgICAg
LyogMyBldHggKi8gQmFkQ2hhciwgICAgCisgICAgLyogMiBzdHggKi8gQmFkQ2hhciwgICAgLyog
MyBldHggKi8gQmFkQ2hhciwKICAgICAvKiA0IGVvdCAqLyBCYWRDaGFyLCAgICAvKiA1IGVucSAq
LyBCYWRDaGFyLCAgICAvKiA2IGFjayAqLyBCYWRDaGFyLCAgICAvKiA3IGJlbCAqLyBCYWRDaGFy
LAogICAgIC8qIDggYnMgKi8gQmFkQ2hhciwgICAgIC8qIDkgaHQgKi8gQmFkQ2hhciwgICAgLyog
MTAgbmwgKi8gQmFkQ2hhciwgICAgLyogMTEgdnQgKi8gQmFkQ2hhciwKICAgICAvKiAxMiBucCAq
LyBCYWRDaGFyLCAgICAvKiAxMyBjciAqLyBCYWRDaGFyLCAgICAvKiAxNCBzbyAqLyBCYWRDaGFy
LCAgICAvKiAxNSBzaSAqLyBCYWRDaGFyLApAQCAtODcsMTQgKzkwLDE0IEBAIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlckNsYXMKICAgICAvKiAyNCBjYW4gKi8gQmFkQ2hhciwg
ICAvKiAyNSBlbSAqLyBCYWRDaGFyLCAgICAvKiAyNiBzdWIgKi8gQmFkQ2hhciwgICAvKiAyNyBl
c2MgKi8gQmFkQ2hhciwKICAgICAvKiAyOCBmcyAqLyBCYWRDaGFyLCAgICAvKiAyOSBncyAqLyBC
YWRDaGFyLCAgICAvKiAzMCBycyAqLyBCYWRDaGFyLCAgICAvKiAzMSB1cyAqLyBCYWRDaGFyLAog
ICAgIC8qIDMyIHNwICovIEJhZENoYXIsICAgIC8qIDMzICAhICovIFVzZXJJbmZvQ2hhciwKLSAg
ICAvKiAzNCAgIiAqLyBCYWRDaGFyLCAgICAvKiAzNSAgIyAqLyBQYXRoU2VnbWVudEVuZENoYXIg
fCBCYWRDaGFyLCAgICAKKyAgICAvKiAzNCAgIiAqLyBCYWRDaGFyLCAgICAvKiAzNSAgIyAqLyBQ
YXRoU2VnbWVudEVuZENoYXIgfCBCYWRDaGFyLAogICAgIC8qIDM2ICAkICovIFVzZXJJbmZvQ2hh
ciwgICAgLyogMzcgICUgKi8gVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIg
fCBCYWRDaGFyLAogICAgIC8qIDM4ICAmICovIFVzZXJJbmZvQ2hhciwgICAgLyogMzkgICcgKi8g
VXNlckluZm9DaGFyLAotICAgIC8qIDQwICAoICovIFVzZXJJbmZvQ2hhciwgICAgLyogNDEgICkg
Ki8gVXNlckluZm9DaGFyLCAgICAKKyAgICAvKiA0MCAgKCAqLyBVc2VySW5mb0NoYXIsICAgIC8q
IDQxICApICovIFVzZXJJbmZvQ2hhciwKICAgICAvKiA0MiAgKiAqLyBVc2VySW5mb0NoYXIsICAg
IC8qIDQzICArICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIsCi0gICAgLyogNDQgICwgKi8g
VXNlckluZm9DaGFyLCAgICAKLSAgICAvKiA0NSAgLSAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9D
aGFyIHwgSG9zdG5hbWVDaGFyLCAKLSAgICAvKiA0NiAgLiAqLyBTY2hlbWVDaGFyIHwgVXNlcklu
Zm9DaGFyIHwgSG9zdG5hbWVDaGFyLCAgIAorICAgIC8qIDQ0ICAsICovIFVzZXJJbmZvQ2hhciwK
KyAgICAvKiA0NSAgLSAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFy
LAorICAgIC8qIDQ2ICAuICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNo
YXIsCiAgICAgLyogNDcgIC8gKi8gUGF0aFNlZ21lbnRFbmRDaGFyLAogICAgIC8qIDQ4ICAwICov
IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIg
fCBJUHY2Q2hhciwgCiAgICAgLyogNDkgIDEgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8
IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLCAgICAKQEAgLTIwNCwzMyAr
MjA3LDcwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlckNsYXMKIH07CiAK
IHN0YXRpYyBpbnQgY29weVBhdGhSZW1vdmluZ0RvdHMoY2hhciogZHN0LCBjb25zdCBjaGFyKiBz
cmMsIGludCBzcmNTdGFydCwgaW50IHNyY0VuZCk7Ci1zdGF0aWMgY2hhciogZW5jb2RlUmVsYXRp
dmVTdHJpbmcoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgcmVsLCBj
b25zdCBUZXh0RW5jb2RpbmcmKTsKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN1YnN0aXR1dGVC
YWNrc2xhc2hlcyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpOwotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNTY2hlbWVGaXJzdENoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFy
YWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lRmlyc3RDaGFyOyB9Ci1zdGF0aWMgaW5saW5lIGJv
b2wgaXNTY2hlbWVDaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NU
YWJsZVtjXSAmIFNjaGVtZUNoYXI7IH0KK3N0YXRpYyB2b2lkIGVuY29kZVJlbGF0aXZlU3RyaW5n
KGNvbnN0IFN0cmluZyYgcmVsLCBjb25zdCBUZXh0RW5jb2RpbmcmLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVGVtcENoYXJCdWZmZXIqIG91cHV0KTsKK3N0YXRpYyBTdHJpbmcg
c3Vic3RpdHV0ZUJhY2tzbGFzaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKKworc3RhdGljIGlu
bGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xh
c3NUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KGMpXSAmIFNjaGVtZUZpcnN0Q2hhcjsgfQorc3RhdGlj
IGlubGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKFVDaGFyIGMpIHsgcmV0dXJuIGMgPD0gMHhm
ZiA/IChjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lRmlyc3RDaGFyKSA6IGZhbHNlOyB9
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY2hlbWVDaGFyKGNoYXIgYykgeyByZXR1cm4gY2hhcmFj
dGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KGMpXSAmIFNjaGVtZUNoYXI7IH0KK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIoVUNoYXIgYykgeyByZXR1cm4gYyA8PSAweGZmID8g
KGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hlbWVDaGFyKSA6IGZhbHNlOyB9CiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNVc2VySW5mb0NoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFy
YWN0ZXJDbGFzc1RhYmxlW2NdICYgVXNlckluZm9DaGFyOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wg
aXNIb3N0bmFtZUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1Rh
YmxlW2NdICYgSG9zdG5hbWVDaGFyOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJUHY2Q2hhcih1
bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBJUHY2Q2hh
cjsgfQotc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRFbmRDaGFyKHVuc2lnbmVkIGNo
YXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFBhdGhTZWdtZW50RW5kQ2hh
cjsgfQorc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRFbmRDaGFyKGNoYXIgYykgeyBy
ZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KGMpXSAmIFBhdGhTZWdt
ZW50RW5kQ2hhcjsgfQorc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRFbmRDaGFyKFVD
aGFyIGMpIHsgcmV0dXJuIGMgPD0gMHhmZiA/IChjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgUGF0
aFNlZ21lbnRFbmRDaGFyKSA6IGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNCYWRDaGFy
KHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIEJhZENo
YXI7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hleERpZ2l0KHVuc2lnbmVkIGNoYXIgYykgeyBy
ZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIEhleERpZ2l0Q2hhcjsgfQogCi1zdGF0aWMg
aW5saW5lIGludCBoZXhEaWdpdFZhbHVlKHVuc2lnbmVkIGNoYXIgYykKK3N0YXRpYyBpbmxpbmUg
aW50IGhleERpZ2l0VmFsdWUoVUNoYXIgYykKIHsKLSAgICBBU1NFUlQoaXNIZXhEaWdpdChjKSk7
CisgICAgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChjKSk7CiAgICAgaWYgKGMgPCAnQScpCiAgICAg
ICAgIHJldHVybiBjIC0gJzAnOwogICAgIHJldHVybiAoYyAtICdBJyArIDEwKSAmIDB4RjsgLy8g
aGFuZGxlIGJvdGggdXBwZXIgYW5kIGxvd2VyIGNhc2Ugd2l0aG91dCBhIGJyYW5jaAogfQogCitz
dGF0aWMgYm9vbCBpc0FsbEFTQ0lJKGNvbnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW4pCit7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJMZW47IGkrKykgeworICAgICAgICBpZiAoc3RyW2ld
ID4gMHg3ZikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIENvcGllcyB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbiwgYXNzdW1p
bmcgYWxsIHRoZSBzb3VyY2UgY2hhcmFjdGVycyBhcmUKKy8vIEFTQ0lJLiBUaGUgZGV0aW5hdGlv
biBidWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2gsIGFuZCBpdCBpcyBub3QgbnVsbAorLy8gdGVy
bWluYXRlZCB1bmxlc3MgdGhlIHNvdXJjZSBoYXMgYSBudWxsLgorc3RhdGljIHZvaWQgY29weUFT
Q0lJKGNvbnN0IFVDaGFyKiBzcmMsIGludCBsZW5ndGgsIGNoYXIqIGRlc3QpCit7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZGVzdFtpXSA9IHN0YXRpY19j
YXN0PGNoYXI+KHNyY1tpXSk7Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJz
dCBpbmRleCBpbiBzdHJpbmcgfHN8IG9mIGFueSBvZiB0aGUgY2hhcmFjdGVycworLy8gaW4gfHRv
RmluZHwuIHx0b0ZpbmR8IHNob3VsZCBiZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIGFsbCBj
aGFyYWN0ZXJzIHVwCisvLyB0byB0aGUgbnVsbCB3aWxsIGJlIHNlYXJjaGVkLiBSZXR1cm5zIGlu
dCBpZiBub3QgZm91bmQuCitzdGF0aWMgaW50IGZpbmRGaXJzdE9mKGNvbnN0IFVDaGFyKiBzLCBp
bnQgc0xlbiwgaW50IHN0YXJ0UG9zLCBjb25zdCBjaGFyKiB0b0ZpbmQpCit7CisgICAgZm9yIChp
bnQgaSA9IHN0YXJ0UG9zOyBpIDwgc0xlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGN1
ciA9IHRvRmluZDsKKyAgICAgICAgd2hpbGUgKCpjdXIpIHsKKyAgICAgICAgICAgIGlmIChzW2ld
ID09ICooY3VyKyspKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiAtMTsKK30KKwogLy8gS1VSTAogCiBLVVJMOjpLVVJMKCkgOiBtX2lzVmFs
aWQoZmFsc2UpCiB7CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgY2hhciAqdXJsKQorS1VSTDo6S1VS
TChjb25zdCBjaGFyKiB1cmwpCiB7CiAgICAgaWYgKHVybCAmJiB1cmxbMF0gPT0gJy8nKSB7CiAg
ICAgICAgICAvLyA1IGZvciAiZmlsZToiLCAxIGZvciB0ZXJtaW5hdG9yCkBAIC0yNDIsMTIgKzI4
MiwxMyBAQCBLVVJMOjpLVVJMKGNvbnN0IGNoYXIgKnVybCkKICAgICAgICAgYnVmZmVyWzNdID0g
J2UnOwogICAgICAgICBidWZmZXJbNF0gPSAnOic7CiAgICAgICAgIG1lbWNweSgmYnVmZmVyWzVd
LCB1cmwsIHVybExlbmd0aCk7CisgICAgICAgIGJ1ZmZlclt1cmxMZW5ndGggKyA0XSA9IDA7ICAv
LyBOZWVkIG51bGwgdGVybWluYXRvci4KICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHBhcnNlKHVybCwgMCk7CiB9CiAKLUtVUkw6OktVUkwoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmdXJsKQorS1VSTDo6S1VSTChjb25zdCBTdHJpbmcmIHVybCkK
IHsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgdXJsWzBdID09ICcvJykgewogICAgICAgICAv
LyA1IGZvciAiZmlsZToiLCAxIGZvciB0ZXJtaW5hdG9yCkBAIC0yNTcsNTEgKzI5OCw1NSBAQCBL
VVJMOjpLVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnVybCkKICAgICAgICAgYnVmZmVyWzJd
ID0gJ2wnOwogICAgICAgICBidWZmZXJbM10gPSAnZSc7CiAgICAgICAgIGJ1ZmZlcls0XSA9ICc6
JzsKLSAgICAgICAgdXJsLmNvcHlMYXRpbjEoJmJ1ZmZlcls1XSk7CisgICAgICAgIGNvcHlBU0NJ
SSh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCksICZidWZmZXJbNV0pOworICAgICAgICBi
dWZmZXJbdXJsLmxlbmd0aCgpICsgNF0gPSAwOyAgLy8gTmVlZCBudWxsIHRlcm1pbmF0b3IuCiAg
ICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwogICAgIH0gZWxzZQotICAgICAgICBwYXJz
ZSh1cmwuYXNjaWkoKSwgJnVybCk7CisgICAgICAgIHBhcnNlKHVybCk7CiB9CiAKLUtVUkw6OktV
UkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgcmVsYXRpdmUpCitL
VVJMOjpLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUpCiB7CiAg
ICAgaW5pdChiYXNlLCByZWxhdGl2ZSwgVVRGOEVuY29kaW5nKCkpOwogfQogCi1LVVJMOjpLVVJM
KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHJlbGF0aXZlLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewog
ICAgIGluaXQoYmFzZSwgcmVsYXRpdmUsIGVuY29kaW5nKTsKIH0KIAotdm9pZCBLVVJMOjppbml0
KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnJlbGF0aXZlLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQordm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwmIGJh
c2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
CiB7CiAgICAgLy8gQWxsb3cgYXQgbGVhc3QgYWJzb2x1dGUgVVJMcyB0byByZXNvbHZlIGFnYWlu
c3QgYW4gZW1wdHkgVVJMLgogICAgIGlmICghYmFzZS5tX2lzVmFsaWQgJiYgIWJhc2UuaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fc3RyaW5nID0gcmVsYXRpdmU7CiAgICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBhYnNvbHV0
ZSA9IGZhbHNlOwogCiAgICAgLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBXaW4gSUUsIHdlIG11
c3QgdHJlYXQgYmFja3NsYXNoZXMgYXMgaWYgdGhleSB3ZXJlIHNsYXNoZXMsIGFzIGxvbmcgYXMg
d2UncmUgbm90IGRlYWxpbmcgd2l0aCB0aGUgamF2YXNjcmlwdDogc2NoZW1hCi0gICAgRGVwcmVj
YXRlZFN0cmluZyBzdWJzdGl0dXRlZFJlbGF0aXZlOworICAgIFN0cmluZyBzdWJzdGl0dXRlZFJl
bGF0aXZlOwogICAgIGJvb2wgc2hvdWxkU3Vic3RpdHV0ZUJhY2tzbGFzaGVzID0gcmVsYXRpdmUu
Y29udGFpbnMoJ1xcJykgJiYgIShyZWxhdGl2ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZh
bHNlKSB8fCByZWxhdGl2ZS5zdGFydHNXaXRoKCJkYXRhOiIsIGZhbHNlKSk7CiAgICAgaWYgKHNo
b3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hlcykKICAgICAgICAgc3Vic3RpdHV0ZWRSZWxhdGl2ZSA9
IHN1YnN0aXR1dGVCYWNrc2xhc2hlcyhyZWxhdGl2ZSk7CiAKLSAgICBjb25zdCBEZXByZWNhdGVk
U3RyaW5nICZyZWwgPSBzaG91bGRTdWJzdGl0dXRlQmFja3NsYXNoZXMgPyBzdWJzdGl0dXRlZFJl
bGF0aXZlIDogcmVsYXRpdmU7Ci0gICAgCi0gICAgYm9vbCBhbGxBU0NJSSA9IHJlbC5pc0FsbEFT
Q0lJKCk7Ci0gICAgY2hhciAqc3RyQnVmZmVyOwotICAgIGNvbnN0IGNoYXIgKnN0cjsKKyAgICBj
b25zdCBTdHJpbmcmIHJlbCA9IHNob3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hlcyA/IHN1YnN0aXR1
dGVkUmVsYXRpdmUgOiByZWxhdGl2ZTsKKworICAgIGJvb2wgYWxsQVNDSUkgPSBpc0FsbEFTQ0lJ
KHJlbC5jaGFyYWN0ZXJzKCksIHN0YXRpY19jYXN0PGludD4ocmVsLmxlbmd0aCgpKSk7CisgICAg
VGVtcENoYXJCdWZmZXIgc3RyQnVmZmVyOworICAgIGNoYXIqIHN0cjsKICAgICBpZiAoYWxsQVND
SUkpIHsKLSAgICAgICAgc3RyQnVmZmVyID0gMDsKLSAgICAgICAgc3RyID0gcmVsLmFzY2lpKCk7
CisgICAgICAgIHN0ckJ1ZmZlci5yZXNpemUocmVsLmxlbmd0aCgpICsgMSk7CisgICAgICAgIGNv
cHlBU0NJSShyZWwuY2hhcmFjdGVycygpLCByZWwubGVuZ3RoKCksIHN0ckJ1ZmZlci5kYXRhKCkp
OworICAgICAgICBzdHJCdWZmZXJbcmVsLmxlbmd0aCgpXSA9IDA7CisgICAgICAgIHN0ciA9IHN0
ckJ1ZmZlci5kYXRhKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RyQnVmZmVyID0gZW5jb2Rl
UmVsYXRpdmVTdHJpbmcoYmFzZSwgcmVsLCBlbmNvZGluZyk7Ci0gICAgICAgIHN0ciA9IHN0ckJ1
ZmZlcjsKKyAgICAgICAgZW5jb2RlUmVsYXRpdmVTdHJpbmcocmVsLCBlbmNvZGluZywgJnN0ckJ1
ZmZlcik7CisgICAgICAgIHN0ciA9IHN0ckJ1ZmZlci5kYXRhKCk7CiAgICAgfQotICAgIAorCiAg
ICAgLy8gd29ya2Fyb3VuZCBmb3Igc2l0ZXMgdGhhdCBwdXQgbGVhZGluZyB3aGl0ZXNwYWNlIHdo
aXRlc3BhY2Ugb24KICAgICAvLyBVUkwgcmVmZXJlbmNlcwogICAgIGJvb2wgc3RyaXBwZWRTdGFy
dCA9IGZhbHNlOwpAQCAtMzEwLDIwICszNTUsMTEgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtV
UkwgJmJhc2UsIGNvbnN0IAogICAgICAgICBzdHJpcHBlZFN0YXJ0ID0gdHJ1ZTsKICAgICB9CiAK
LSAgICAvLyB3b3JrYXJvdW5kIGZvciB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gYSBiaXQgbW9yZSBj
b21wbGljYXRlZCBjYXVzZSB3ZSBoYXZlIHRvIGNvcHkKLSAgICAvLyBpdCB3b3VsZCBiZSBldmVu
IGJldHRlciB0byByZXBsYWNlIG51bGwtdGVybWluYXRpb24gd2l0aCBhIGxlbmd0aCBwYXJhbWV0
ZXIKKyAgICAvLyBHZXQgcmlkIG9mIHRyYWlsaW5nIHdoaXRlc3BhY2UuCiAgICAgaW50IGxlbiA9
IHN0cmxlbihzdHIpOwotICAgIGludCBjaGFyc1RvQ2hvcE9mZkVuZCA9IDA7Ci0gICAgZm9yIChp
bnQgcG9zID0gbGVuIC0gMTsgcG9zID49IDAgJiYgc3RyW3Bvc10gPT0gJyAnOyBwb3MtLSkgewot
ICAgICAgICBjaGFyc1RvQ2hvcE9mZkVuZCsrOwotICAgIH0KLSAgICBpZiAoY2hhcnNUb0Nob3BP
ZmZFbmQgPiAwKSB7Ci0gICAgICAgIGNoYXIgKm5ld1N0ckJ1ZmZlciA9IChjaGFyICopZmFzdE1h
bGxvYygobGVuICsgMSkgLSBjaGFyc1RvQ2hvcE9mZkVuZCk7Ci0gICAgICAgIHN0cm5jcHkobmV3
U3RyQnVmZmVyLCBzdHIsIGxlbiAtIGNoYXJzVG9DaG9wT2ZmRW5kKTsKLSAgICAgICAgbmV3U3Ry
QnVmZmVyW2xlbiAtIGNoYXJzVG9DaG9wT2ZmRW5kXSA9ICdcMCc7Ci0gICAgICAgIGZhc3RGcmVl
KHN0ckJ1ZmZlcik7Ci0gICAgICAgIHN0ckJ1ZmZlciA9IG5ld1N0ckJ1ZmZlcjsKLSAgICAgICAg
c3RyID0gc3RyQnVmZmVyOworICAgIHdoaWxlIChsZW4gPiAwICYmIHN0cltsZW4gLSAxXSA9PSAn
ICcpIHsKKyAgICAgIGxlbi0tOworICAgICAgc3RyWzBdID0gMDsKICAgICB9CiAKICAgICAvLyBB
Y2NvcmRpbmcgdG8gdGhlIFJGQywgdGhlIHJlZmVyZW5jZSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQg
YXMgYW4KQEAgLTMzMSwxNCArMzY3LDE0IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZi
YXNlLCBjb25zdCAKICAgICAvLyBhbGdvcml0aG0uIElmIHRoZSBVUkkgcmVmZXJlbmNlIGlzIGFi
c29sdXRlIGl0IHdpbGwgaGF2ZSBhCiAgICAgLy8gc2NoZW1lLCBtZWFuaW5nIHRoYXQgaXQgd2ls
bCBoYXZlIGEgY29sb24gYmVmb3JlIHRoZSBmaXJzdAogICAgIC8vIG5vbi1zY2hlbWUgZWxlbWVu
dC4KLSAgICBjb25zdCBjaGFyICpwID0gc3RyOworICAgIGNoYXIqIHAgPSBzdHI7CiAgICAgaWYg
KGlzU2NoZW1lRmlyc3RDaGFyKCpwKSkgewogICAgICAgICArK3A7CiAgICAgICAgIHdoaWxlIChp
c1NjaGVtZUNoYXIoKnApKSB7CiAgICAgICAgICAgICArK3A7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCpwID09ICc6JykgewotICAgICAgICAgICAgaWYgKHBbMV0gIT0gJy8nICYmIGJhc2UucHJv
dG9jb2woKS5sb3dlcigpID09IERlcHJlY2F0ZWRTdHJpbmcoc3RyLCBwIC0gc3RyKS5sb3dlcigp
ICYmIGJhc2UuaXNIaWVyYXJjaGljYWwoKSkKKyAgICAgICAgICAgIGlmIChwWzFdICE9ICcvJyAm
JiBiYXNlLnByb3RvY29sKCkubG93ZXIoKSA9PSBTdHJpbmcoc3RyLCBwIC0gc3RyKS5sb3dlcigp
ICYmIGJhc2UuaXNIaWVyYXJjaGljYWwoKSkKICAgICAgICAgICAgICAgICBzdHIgPSBwICsgMTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7CkBAIC0z
NDYsMTkgKzM4MiwxOSBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3Qg
CiAgICAgfQogCiAgICAgaWYgKGFic29sdXRlKSB7Ci0gICAgICAgIHBhcnNlKHN0ciwgKGFsbEFT
Q0lJICYmICFzdHJpcHBlZFN0YXJ0ICYmIChjaGFyc1RvQ2hvcE9mZkVuZCA9PSAwKSkgPyAmcmVs
IDogMCk7CisgICAgICAgIC8vIFRPRE86IHdoZW4gcGFyc2UgdGFrZXMgYSBTdHJpbmcsIHdlIHNo
b3VsZCBwdXQgYmFjayB0aGUgb3B0aW1pemF0aW9uCisgICAgICAgIC8vIGZvciB1bmNoYW5nZWQg
c3RyaW5ncy4KKyAgICAgICAgcGFyc2Uoc3RyLCAwKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyBJZiB0aGUgYmFzZSBpcyBlbXB0eSBvciBvcGFxdWUgKGUuZy4gZGF0YTogb3IgamF2YXNjcmlw
dDopLCB0aGVuIHRoZSBVUkwgaXMgaW52YWxpZAogICAgICAgICAvLyB1bmxlc3MgdGhlIHJlbGF0
aXZlIFVSTCBpcyBhIHNpbmdsZSBmcmFnbWVudC4KICAgICAgICAgaWYgKCFiYXNlLmlzSGllcmFy
Y2hpY2FsKCkpIHsKLSAgICAgICAgICAgIGlmIChzdHJbMF0gPT0gJyMnKSB7Ci0gICAgICAgICAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2Uu
cXVlcnlFbmRQb3MpICsgc3RyOwotICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgp
LCAmbmV3VVJMKTsKLSAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKHN0clswXSA9
PSAnIycpCisgICAgICAgICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UucXVl
cnlFbmRQb3MpICsgc3RyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1f
c3RyaW5nID0gcmVsYXRpdmU7CiAgICAgICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHJCdWZmZXIpCi0gICAgICAgICAgICAgICAg
ZmFzdEZyZWUoc3RyQnVmZmVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCkBAIC0zNjYsMzggKzQwMiwyNiBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3Qg
S1VSTCAmYmFzZSwgY29uc3QgCiAgICAgICAgIGNhc2UgJ1wwJzoKICAgICAgICAgICAgIC8vIHRo
ZSByZWZlcmVuY2UgbXVzdCBiZSBlbXB0eSAtIHRoZSBSRkMgc2F5cyB0aGlzIGlzIGEKICAgICAg
ICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBkb2N1bWVudAotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICp0aGlzID0gYmFzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICp0aGlzID0gYmFzZTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlICcjJzoKICAgICAgICAgICAgIC8vIG11c3QgYmUgZnJhZ21lbnQtb25s
eSByZWZlcmVuY2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3Ry
aW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5xdWVyeUVuZFBvcykgKyBzdHI7
Ci0gICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2UoYmFzZS5t
X3N0cmluZy5sZWZ0KGJhc2UucXVlcnlFbmRQb3MpICsgc3RyKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgIC8vIHF1ZXJ5LW9ubHkgcmVmZXJlbmNl
LCBzcGVjaWFsIGNhc2UgbmVlZGVkIGZvciBub24tVVJMIHJlc3VsdHMKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5n
LmxlZnQoYmFzZS5wYXRoRW5kUG9zKSArIHN0cjsKLSAgICAgICAgICAgICAgICBwYXJzZShuZXdV
UkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5wYXRoRW5kUG9z
KSArIHN0cik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAg
ICAgICAvLyBtdXN0IGJlIG5ldC1wYXRoIG9yIGFic29sdXRlLXBhdGggcmVmZXJlbmNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0clsxXSA9PSAnLycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gbmV0LXBhdGgKLSAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0
cmluZyBuZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2Uuc2NoZW1lRW5kUG9zICsgMSkg
KyBzdHI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJM
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBhYnMt
cGF0aAotICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2Uu
dXJsU3RyaW5nLmxlZnQoYmFzZS5wb3J0RW5kUG9zKSArIHN0cjsKLSAgICAgICAgICAgICAgICAg
ICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHJbMV0gPT0gJy8nKSB7Cisg
ICAgICAgICAgICAgICAgLy8gbmV0LXBhdGgKKyAgICAgICAgICAgICAgICBwYXJzZShiYXNlLm1f
c3RyaW5nLmxlZnQoYmFzZS5zY2hlbWVFbmRQb3MgKyAxKSArIHN0cik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGFicy1wYXRoCisgICAgICAgICAgICAgICAgcGFy
c2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UucG9ydEVuZFBvcykgKyBzdHIpOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgLy8gbXVzdCBiZSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZQpAQCAt
NDA1LDQ1ICs0MjksNDYgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0
IAogICAgICAgICAgICAgICAgIC8vIEJhc2UgcGFydCBwbHVzIHJlbGF0aXZlIHBhcnQgcGx1cyBv
bmUgcG9zc2libGUgc2xhc2ggYWRkZWQgaW4gYmV0d2VlbiBwbHVzIHRlcm1pbmF0aW5nIFwwIGJ5
dGUuCiAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXIsIDIwNDg+IGJ1ZmZlcihiYXNlLnBhdGhF
bmRQb3MgKyAxICsgc3RybGVuKHN0cikgKyAxKTsKIAotICAgICAgICAgICAgICAgIGNoYXIgKmJ1
ZmZlclBvcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2hhciogYnVmZmVyUG9zID0gYnVmZmVyLmRhdGEoKTsKKwogICAgICAgICAgICAgICAgIC8v
IGZpcnN0IGNvcHkgZXZlcnl0aGluZyBiZWZvcmUgdGhlIHBhdGggZnJvbSB0aGUgYmFzZQotICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmcgPSBiYXNlLnVybFN0cmluZy5hc2Np
aSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmdTdGFydCA9IGJhc2VT
dHJpbmc7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aFN0YXJ0ID0gYmFzZVN0cmlu
Z1N0YXJ0ICsgYmFzZS5wb3J0RW5kUG9zOwotICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlU3Ry
aW5nU3RhcnQgPCBwYXRoU3RhcnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBiYXNlTGVu
Z3RoID0gYmFzZS5tX3N0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBVQ2hh
ciogYmFzZUNoYXJhY3RlcnMgPSBiYXNlLm1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8Y2hhciwgMjA0OD4gYmFzZVN0cmluZ0J1ZmZlcihiYXNlTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzZUxlbmd0aDsgKytp
KQorICAgICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nQnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8
Y2hhcj4oYmFzZUNoYXJhY3RlcnNbaV0pOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJh
c2VTdHJpbmcgPSBiYXNlU3RyaW5nQnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBiYXNlU3RyaW5nU3RhcnQgPSBiYXNlU3RyaW5nOworICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHBhdGhTdGFydCA9IGJhc2VTdHJpbmdTdGFydCArIGJhc2UucG9ydEVuZFBvczsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ1N0YXJ0IDwgcGF0aFN0YXJ0KQogICAg
ICAgICAgICAgICAgICAgICAqYnVmZmVyUG9zKysgPSAqYmFzZVN0cmluZ1N0YXJ0Kys7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlclBhdGhTdGFydCA9IGJ1
ZmZlclBvczsKKyAgICAgICAgICAgICAgICBjaGFyKiBidWZmZXJQYXRoU3RhcnQgPSBidWZmZXJQ
b3M7CisKKyAgICAgICAgICAgICAgICAvLyBub3cgY29weSB0aGUgYmFzZSBwYXRoCisgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZ0VuZCA9IGJhc2VTdHJpbmcgKyBiYXNlLnBh
dGhFbmRQb3M7CiAKLSAgICAgICAgICAgICAgICAvLyBub3cgY29weSB0aGUgYmFzZSBwYXRoIAot
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmdFbmQgPSBiYXNlU3RyaW5nICsg
YmFzZS5wYXRoRW5kUG9zOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIGdv
IGJhY2sgdG8gdGhlIGxhc3Qgc2xhc2gKLSAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmlu
Z0VuZCA+IGJhc2VTdHJpbmdTdGFydCAmJiBiYXNlU3RyaW5nRW5kWy0xXSAhPSAnLycpIHsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ0VuZCA+IGJhc2VTdHJpbmdTdGFydCAmJiBi
YXNlU3RyaW5nRW5kWy0xXSAhPSAnLycpCiAgICAgICAgICAgICAgICAgICAgIGJhc2VTdHJpbmdF
bmQtLTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAg
ICAgICBpZiAoYmFzZVN0cmluZ0VuZCA9PSBiYXNlU3RyaW5nU3RhcnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gbm8gcGF0aCBpbiBiYXNlLCBhZGQgYSBwYXRoIHNlcGFyYXRvciBpZiBuZWNl
c3NhcnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2Uuc2NoZW1lRW5kUG9zICsgMSAhPSBi
YXNlLnBhdGhFbmRQb3MgJiYgKnN0ciAhPSAnXDAnICYmICpzdHIgIT0gJz8nICYmICpzdHIgIT0g
JyMnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlLnNjaGVtZUVuZFBvcyArIDEgIT0g
YmFzZS5wYXRoRW5kUG9zICYmICpzdHIgIT0gJ1wwJyAmJiAqc3RyICE9ICc/JyAmJiAqc3RyICE9
ICcjJykKICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICcvJzsKLSAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlclBvcyArPSBjb3B5UGF0aFJlbW92aW5nRG90cyhidWZmZXJQb3MsIGJhc2VT
dHJpbmdTdGFydCwgMCwgYmFzZVN0cmluZ0VuZCAtIGJhc2VTdHJpbmdTdGFydCk7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVsU3RyaW5nU3RhcnQg
PSBzdHI7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVsU3RyaW5nUG9zID0gcmVsU3Ry
aW5nU3RhcnQ7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cmVsU3RyaW5nU3RhcnQgPSBzdHI7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVsU3Ry
aW5nUG9zID0gcmVsU3RyaW5nU3RhcnQ7CisKICAgICAgICAgICAgICAgICB3aGlsZSAoKnJlbFN0
cmluZ1BvcyAhPSAnXDAnICYmICpyZWxTdHJpbmdQb3MgIT0gJz8nICYmICpyZWxTdHJpbmdQb3Mg
IT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy4n
ICYmIGJ1ZmZlclBvc1stMV0gPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzFdKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLiIgc2VnbWVudAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbFN0cmluZ1BvcyArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbFN0cmluZ1BvcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAocmVsU3RyaW5nUG9zWzFdID09ICcuJyAmJiBpc1BhdGhTZWdtZW50RW5k
Q2hhcihyZWxTdHJpbmdQb3NbMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c2tpcCBvdmVyICIuLiIgc2VnbWVudCBhbmQgcmV3aW5kIHRoZSBsYXN0IHNlZ21lbnQKQEAgLTQ1
MSwxOSArNDc2LDE2IEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAiLi4iIHNlZ21lbnRzIC0gd2UgY2hvb3Nl
IHRvIGRyb3AgdGhlbSBzaW5jZSBzb21lIHdlYiBjb250ZW50CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcmVsaWVzIG9uIHRoaXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVsU3RyaW5nUG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0
cmluZ1Bvc1swXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVs
U3RyaW5nUG9zWzBdID09ICcvJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVs
U3RyaW5nUG9zKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChidWZmZXJQb3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFy
dCArIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcy0tOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSAgJiYgYnVmZmVyUG9zWy0xXSAh
PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyUG9zID4g
YnVmZmVyUGF0aFN0YXJ0ICsgMSAgJiYgYnVmZmVyUG9zWy0xXSAhPSAnLycpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcy0tOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgICAgICAgICAqYnVmZmVyUG9zID0gKnJlbFN0cmluZ1BvczsK
ICAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zKys7CiAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlclBvcysrOwpAQCAtNDc0LDE2ICs0OTYsMTIgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0
IEtVUkwgJmJhc2UsIGNvbnN0IAogICAgICAgICAgICAgICAgIHN0cmNweShidWZmZXJQb3MsIHJl
bFN0cmluZ1Bvcyk7CiAKICAgICAgICAgICAgICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsK
LSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEFTU0VSVChzdHJsZW4oYnVmZmVy
LmRhdGEoKSkgKyAxIDw9IGJ1ZmZlci5zaXplKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIGlmIChzdHJCdWZmZXIp
IHsKLSAgICAgICAgZmFzdEZyZWUoc3RyQnVmZmVyKTsKLSAgICB9CiB9CiAKIGJvb2wgS1VSTDo6
aGFzUGF0aCgpIGNvbnN0CkBAIC00OTEsODkgKzUwOSw4MCBAQCBib29sIEtVUkw6Omhhc1BhdGgo
KSBjb25zdAogICAgIHJldHVybiBtX2lzVmFsaWQgJiYgcGF0aEVuZFBvcyAhPSBwb3J0RW5kUG9z
OwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QK
K1N0cmluZyBLVVJMOjpsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNQ
YXRoKCkpCi0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIGludCBlbmQgPSBwYXRoRW5kUG9zIC0gMTsKLSAgICBpZiAodXJs
U3RyaW5nW2VuZF0gPT0gJy8nKQorICAgIGlmIChtX3N0cmluZ1tlbmRdID09ICcvJykKICAgICAg
ICAgLS1lbmQ7CiAKLSAgICBpbnQgc3RhcnQgPSB1cmxTdHJpbmcuZmluZFJldignLycsIGVuZCk7
CisgICAgaW50IHN0YXJ0ID0gbV9zdHJpbmcucmV2ZXJzZUZpbmQoJy8nLCBlbmQpOwogICAgIGlm
IChzdGFydCA8IHBvcnRFbmRQb3MpCi0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICArK3N0YXJ0OwogCi0gICAgcmV0dXJuIHVy
bFN0cmluZy5taWQoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7CisgICAgcmV0dXJuIG1fc3RyaW5n
LnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKIH0KIAotRGVwcmVjYXRlZFN0cmlu
ZyBLVVJMOjpwcm90b2NvbCgpIGNvbnN0CitTdHJpbmcgS1VSTDo6cHJvdG9jb2woKSBjb25zdAog
ewotICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5n
KCk7Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKLSAgICByZXR1cm4gdXJsU3RyaW5nLmxlZnQoc2NoZW1lRW5kUG9zKTsKKyAgICByZXR1cm4g
bV9zdHJpbmcubGVmdChzY2hlbWVFbmRQb3MpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6
Omhvc3QoKSBjb25zdAorU3RyaW5nIEtVUkw6Omhvc3QoKSBjb25zdAogewotICAgIGlmICghbV9p
c1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgfQorICAg
IGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpbnQgc3Rh
cnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDog
cGFzc3dvcmRFbmRQb3MgKyAxOwotICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5t
aWQoc3RhcnQsIGhvc3RFbmRQb3MgLSBzdGFydCkpOworICAgIHJldHVybiBkZWNvZGVfc3RyaW5n
KG1fc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgaG9zdEVuZFBvcyAtIHN0YXJ0KSk7CiB9CiAKLXVu
c2lnbmVkIHNob3J0IGludCBLVVJMOjpwb3J0KCkgY29uc3QKK3Vuc2lnbmVkIHNob3J0IEtVUkw6
OnBvcnQoKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7CisgICAgaWYgKCFtX2lzVmFs
aWQpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIGlmIChob3N0RW5kUG9zICE9IHBv
cnRFbmRQb3MpIHsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVz
dWx0ID0gdXJsU3RyaW5nLm1pZChob3N0RW5kUG9zICsgMSwgcG9ydEVuZFBvcyAtIGhvc3RFbmRQ
b3MgLSAxKS50b1VTaG9ydCgmb2spOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAg
IGlmIChob3N0RW5kUG9zID09IHBvcnRFbmRQb3MpCisgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIDA7CisgICAgYm9vbCBvazsKKyAgICBpbnQgbnVtYmVyID0gbV9zdHJpbmcuc3Vic3Ry
aW5nKGhvc3RFbmRQb3MgKyAxLCBwb3J0RW5kUG9zIC0gaG9zdEVuZFBvcyAtIDEpLnRvSW50KCZv
ayk7CisgICAgaWYgKCFvayB8fCBudW1iZXIgPCAwIHx8IG51bWJlciA+IDB4RkZGRikKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBL
VVJMOjpwYXNzKCkgY29uc3QKK1N0cmluZyBLVVJMOjpwYXNzKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0K
KyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgaWYg
KHBhc3N3b3JkRW5kUG9zID09IHVzZXJFbmRQb3MpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmcoKTsKLSAgICB9CisgICAgaWYgKHBhc3N3b3JkRW5kUG9zID09IHVzZXJFbmRQb3Mp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVy
bFN0cmluZy5taWQodXNlckVuZFBvcyArIDEsIHBhc3N3b3JkRW5kUG9zIC0gdXNlckVuZFBvcyAt
IDEpKTsgCisgICAgcmV0dXJuIGRlY29kZV9zdHJpbmcobV9zdHJpbmcuc3Vic3RyaW5nKHVzZXJF
bmRQb3MgKyAxLCBwYXNzd29yZEVuZFBvcyAtIHVzZXJFbmRQb3MgLSAxKSk7IAogfQogCi1EZXBy
ZWNhdGVkU3RyaW5nIEtVUkw6OnVzZXIoKSBjb25zdAorU3RyaW5nIEtVUkw6OnVzZXIoKSBjb25z
dAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3Ry
aW5nKCk7Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICByZXR1cm4gZGVjb2RlX3N0cmluZyh1cmxTdHJpbmcubWlkKHVzZXJTdGFydFBv
cywgdXNlckVuZFBvcyAtIHVzZXJTdGFydFBvcykpOworICAgIHJldHVybiBkZWNvZGVfc3RyaW5n
KG1fc3RyaW5nLnN1YnN0cmluZyh1c2VyU3RhcnRQb3MsIHVzZXJFbmRQb3MgLSB1c2VyU3RhcnRQ
b3MpKTsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpyZWYoKSBjb25zdAorU3RyaW5nIEtV
Ukw6OnJlZigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQgfHwgZnJhZ21lbnRFbmRQb3Mg
PT0gcXVlcnlFbmRQb3MpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAg
ICB9CisgICAgaWYgKCFtX2lzVmFsaWQgfHwgZnJhZ21lbnRFbmRQb3MgPT0gcXVlcnlFbmRQb3Mp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiB1cmxTdHJpbmcubWlkKHF1
ZXJ5RW5kUG9zICsgMSwgZnJhZ21lbnRFbmRQb3MgLSAocXVlcnlFbmRQb3MgKyAxKSk7CisgICAg
cmV0dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhxdWVyeUVuZFBvcyArIDEsIGZyYWdtZW50RW5kUG9z
IC0gKHF1ZXJ5RW5kUG9zICsgMSkpOwogfQogCiBib29sIEtVUkw6Omhhc1JlZigpIGNvbnN0CkBA
IC01ODEsMTUyICs1OTAsMTU4IEBAIGJvb2wgS1VSTDo6aGFzUmVmKCkgY29uc3QKICAgICByZXR1
cm4gbV9pc1ZhbGlkICYmIGZyYWdtZW50RW5kUG9zICE9IHF1ZXJ5RW5kUG9zOwogfQogCi1EZXBy
ZWNhdGVkU3RyaW5nIEtVUkw6OnF1ZXJ5KCkgY29uc3QKK2Jvb2wgS1VSTDo6cHJvdG9jb2xJcyhj
b25zdCBjaGFyKiBwcm90b2NvbCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewotICAg
ICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgIC8vIERvIHRoZSBjb21wYXJpc29u
IHdpdGhvdXQgbWFraW5nIGEgbmV3IHN0cmluZyBvYmplY3QuCisgICAgaW50IGk7CisgICAgZm9y
IChpID0gMDsgaSA8IHNjaGVtZUVuZFBvczsgaSsrKSB7CisgICAgICAgIGlmICghcHJvdG9jb2xb
aV0gfHwgdG9BU0NJSUxvd2VyKG1fc3RyaW5nW2ldKSAhPSBwcm90b2NvbFtpXSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgQVNTRVJUKHByb3RvY29sW2ldID4gJyAnICYmIHBy
b3RvY29sW2ldIDwgMHg3RiAmJiAhKHByb3RvY29sW2ldID49ICdBJyAmJiBwcm90b2NvbFtpXSA8
PSAnWicpKTsKICAgICB9CisgICAgcmV0dXJuICFwcm90b2NvbFtpXTsgIC8vIFdlIHNob3VsZCBo
YXZlIGNvbnN1bWVkIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBhcmd1bWVudC4KK30KKworU3RyaW5n
IEtVUkw6OnF1ZXJ5KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybFN0cmluZy5taWQocGF0aEVuZFBvcywgcXVl
cnlFbmRQb3MgLSBwYXRoRW5kUG9zKTsgCisgICAgcmV0dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhw
YXRoRW5kUG9zLCBxdWVyeUVuZFBvcyAtIHBhdGhFbmRQb3MpOyAKIH0KIAotRGVwcmVjYXRlZFN0
cmluZyBLVVJMOjpwYXRoKCkgY29uc3QKK1N0cmluZyBLVVJMOjpwYXRoKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwot
ICAgIH0KKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0g
ICAgcmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3RyaW5nLm1pZChwb3J0RW5kUG9zLCBwYXRoRW5k
UG9zIC0gcG9ydEVuZFBvcykpOyAKKyAgICByZXR1cm4gZGVjb2RlX3N0cmluZyhtX3N0cmluZy5z
dWJzdHJpbmcocG9ydEVuZFBvcywgcGF0aEVuZFBvcyAtIHBvcnRFbmRQb3MpKTsgCiB9CiAKLXZv
aWQgS1VSTDo6c2V0UHJvdG9jb2woY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VS
TDo6c2V0UHJvdG9jb2woY29uc3QgU3RyaW5nJiBzKQogewogICAgIGlmICghbV9pc1ZhbGlkKSB7
Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gcyArICI6IiArIHVybFN0cmluZzsK
LSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICBwYXJzZShz
ICsgIjoiICsgbV9zdHJpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRGVwcmVj
YXRlZFN0cmluZyBuZXdVUkwgPSBzICsgdXJsU3RyaW5nLm1pZChzY2hlbWVFbmRQb3MpOwotICAg
IHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICBwYXJzZShzICsgbV9zdHJpbmcu
c3Vic3RyaW5nKHNjaGVtZUVuZFBvcykpOwogfQogCi12b2lkIEtVUkw6OnNldEhvc3QoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0SG9zdChjb25zdCBTdHJpbmcmIHMp
CiB7Ci0gICAgaWYgKG1faXNWYWxpZCkgewotICAgICAgICBib29sIHNsYXNoU2xhc2hOZWVkZWQg
PSB1c2VyU3RhcnRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMTsKLSAgICAgICAgaW50IGhvc3RTdGFy
dCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBw
YXNzd29yZEVuZFBvcyArIDE7Ci0gICAgICAgIAotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5l
d1VSTCA9IHVybFN0cmluZy5sZWZ0KGhvc3RTdGFydCkgKyAoc2xhc2hTbGFzaE5lZWRlZCA/ICIv
LyIgOiBEZXByZWNhdGVkU3RyaW5nKCkpICsgcyArIHVybFN0cmluZy5taWQoaG9zdEVuZFBvcyk7
Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKLSAgICB9CisgICAgaWYg
KCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgc2xhc2hTbGFzaE5lZWRl
ZCA9IHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxOworICAgIGludCBob3N0U3RhcnQg
PSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFz
c3dvcmRFbmRQb3MgKyAxOworCisgICAgcGFyc2UobV9zdHJpbmcubGVmdChob3N0U3RhcnQpICsg
KHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDogIiIpICsgcyArIG1fc3RyaW5nLnN1YnN0cmluZyho
b3N0RW5kUG9zKSk7CiB9CiAKIHZvaWQgS1VSTDo6c2V0UG9ydCh1bnNpZ25lZCBzaG9ydCBpKQog
ewotICAgIGlmIChtX2lzVmFsaWQpIHsKLSAgICAgICAgYm9vbCBjb2xvbk5lZWRlZCA9IHBvcnRF
bmRQb3MgPT0gaG9zdEVuZFBvczsKLSAgICAgICAgaW50IHBvcnRTdGFydCA9IChjb2xvbk5lZWRl
ZCA/IGhvc3RFbmRQb3MgOiBob3N0RW5kUG9zICsgMSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJp
bmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocG9ydFN0YXJ0KSArIChjb2xvbk5lZWRlZCA/ICI6
IiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaSkgKyB1
cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwg
Jm5ld1VSTCk7Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIGNvbG9uTmVlZGVkID0gcG9ydEVuZFBvcyA9PSBob3N0RW5kUG9zOworICAgIGlu
dCBwb3J0U3RhcnQgPSAoY29sb25OZWVkZWQgPyBob3N0RW5kUG9zIDogaG9zdEVuZFBvcyArIDEp
OworCisgICAgcGFyc2UobV9zdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVkID8g
IjoiIDogIiIpICsgU3RyaW5nOjpudW1iZXIoaSkgKyBtX3N0cmluZy5zdWJzdHJpbmcocG9ydEVu
ZFBvcykpOwogfQogCi12b2lkIEtVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcmIGhvc3RBbmRQb3J0KQordm9pZCBLVVJMOjpzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJp
bmcmIGhvc3RBbmRQb3J0KQogewotICAgIGlmIChtX2lzVmFsaWQpIHsKLSAgICAgICAgYm9vbCBz
bGFzaFNsYXNoTmVlZGVkID0gdXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7Ci0gICAg
ICAgIGludCBob3N0U3RhcnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBh
c3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAxOwotICAgICAgICAKLSAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNo
U2xhc2hOZWVkZWQgPyAiLy8iIDogRGVwcmVjYXRlZFN0cmluZygpKSArIGhvc3RBbmRQb3J0ICsg
dXJsU3RyaW5nLm1pZChwb3J0RW5kUG9zKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCks
ICZuZXdVUkwpOwotICAgIH0KKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBzbGFzaFNsYXNoTmVlZGVkID0gdXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBv
cyArIDE7CisgICAgaW50IGhvc3RTdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQ
b3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7CisKKyAgICBwYXJzZSht
X3N0cmluZy5sZWZ0KGhvc3RTdGFydCkgKyAoc2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiAiIikg
KyBob3N0QW5kUG9ydCArIG1fc3RyaW5nLnN1YnN0cmluZyhwb3J0RW5kUG9zKSk7CiB9CiAKLXZv
aWQgS1VSTDo6c2V0VXNlcihjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1c2VyKQordm9pZCBLVVJM
OjpzZXRVc2VyKGNvbnN0IFN0cmluZyYgdXNlcikKIHsKLSAgICBpZiAobV9pc1ZhbGlkKSB7Ci0g
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdTsKLSAgICAgICAgaW50IGVuZCA9IHVzZXJFbmRQb3M7
Ci0gICAgICAgIGlmICghdXNlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHUgPSB1c2VyOwot
ICAgICAgICAgICAgaWYgKHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxKQotICAgICAg
ICAgICAgICAgIHUgPSAiLy8iICsgdTsKLSAgICAgICAgICAgIC8vIEFkZCAnQCcgaWYgd2UgZGlk
bid0IGhhdmUgb25lIGJlZm9yZS4KLSAgICAgICAgICAgIGlmIChlbmQgPT0gaG9zdEVuZFBvcyB8
fCAoZW5kID09IHBhc3N3b3JkRW5kUG9zICYmIHVybFN0cmluZ1tlbmRdICE9ICdAJykpCi0gICAg
ICAgICAgICAgICAgdSArPSAnQCc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBS
ZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dvcmQuCi0gICAg
ICAgICAgICBpZiAodXNlckVuZFBvcyA9PSBwYXNzd29yZEVuZFBvcyAmJiBlbmQgIT0gaG9zdEVu
ZFBvcyAmJiB1cmxTdHJpbmdbZW5kXSA9PSAnQCcpCi0gICAgICAgICAgICAgICAgZW5kICs9IDE7
Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxT
dHJpbmcubGVmdCh1c2VyU3RhcnRQb3MpICsgdSArIHVybFN0cmluZy5taWQoZW5kKTsKLSAgICAg
ICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgIGlmICghbV9pc1ZhbGlkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgdTsKKyAgICBpbnQgZW5kID0gdXNlckVuZFBv
czsKKyAgICBpZiAoIXVzZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIHUgPSB1c2VyOworICAgICAg
ICBpZiAodXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDEpCisgICAgICAgICAgICB1ID0g
Ii8vIiArIHU7CisgICAgICAgIC8vIEFkZCAnQCcgaWYgd2UgZGlkbid0IGhhdmUgb25lIGJlZm9y
ZS4KKyAgICAgICAgaWYgKGVuZCA9PSBob3N0RW5kUG9zIHx8IChlbmQgPT0gcGFzc3dvcmRFbmRQ
b3MgJiYgbV9zdHJpbmdbZW5kXSAhPSAnQCcpKQorICAgICAgICAgICAgdS5hcHBlbmQoJ0AnKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRo
ZXIgdXNlciBub3IgcGFzc3dvcmQuCisgICAgICAgIGlmICh1c2VyRW5kUG9zID09IHBhc3N3b3Jk
RW5kUG9zICYmIGVuZCAhPSBob3N0RW5kUG9zICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAg
ICAgICAgICAgZW5kICs9IDE7CiAgICAgfQorICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQodXNlclN0
YXJ0UG9zKSArIHUgKyBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSk7CiB9CiAKLXZvaWQgS1VSTDo6
c2V0UGFzcyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICZwYXNzd29yZCkKLXsKLSAgICBpZiAobV9p
c1ZhbGlkKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcDsKLSAgICAgICAgaW50IGVuZCA9
IHBhc3N3b3JkRW5kUG9zOwotICAgICAgICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgcCA9ICc6JyArIHBhc3N3b3JkICsgJ0AnOwotICAgICAgICAgICAgaWYgKHVzZXJF
bmRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMSkKLSAgICAgICAgICAgICAgICBwID0gIi8vIiArIHA7
Ci0gICAgICAgICAgICAvLyBFYXQgdGhlIGV4aXN0aW5nICdAJyBzaW5jZSB3ZSBhcmUgZ29pbmcg
dG8gYWRkIG91ciBvd24uCi0gICAgICAgICAgICBpZiAoZW5kICE9IGhvc3RFbmRQb3MgJiYgdXJs
U3RyaW5nW2VuZF0gPT0gJ0AnKQotICAgICAgICAgICAgICAgIGVuZCArPSAxOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gUmVtb3ZlICdAJyBpZiB3ZSBub3cgaGF2ZSBuZWl0aGVy
IHVzZXIgbm9yIHBhc3N3b3JkLgotICAgICAgICAgICAgaWYgKHVzZXJTdGFydFBvcyA9PSB1c2Vy
RW5kUG9zICYmIGVuZCAhPSBob3N0RW5kUG9zICYmIHVybFN0cmluZ1tlbmRdID09ICdAJykKLSAg
ICAgICAgICAgICAgICBlbmQgKz0gMTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBEZXByZWNh
dGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHVzZXJFbmRQb3MpICsgcCArIHVybFN0
cmluZy5taWQoZW5kKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwor
dm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgaWYgKCFt
X2lzVmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBwOworICAgIGludCBlbmQg
PSBwYXNzd29yZEVuZFBvczsKKyAgICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgeworICAgICAg
ICBwID0gIjoiICsgcGFzc3dvcmQgKyAiQCI7CisgICAgICAgIGlmICh1c2VyRW5kUG9zID09IHNj
aGVtZUVuZFBvcyArIDEpCisgICAgICAgICAgICBwID0gIi8vIiArIHA7CisgICAgICAgIC8vIEVh
dCB0aGUgZXhpc3RpbmcgJ0AnIHNpbmNlIHdlIGFyZSBnb2luZyB0byBhZGQgb3VyIG93bi4KKyAg
ICAgICAgaWYgKGVuZCAhPSBob3N0RW5kUG9zICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAg
ICAgICAgICAgZW5kICs9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVtb3ZlICdAJyBp
ZiB3ZSBub3cgaGF2ZSBuZWl0aGVyIHVzZXIgbm9yIHBhc3N3b3JkLgorICAgICAgICBpZiAodXNl
clN0YXJ0UG9zID09IHVzZXJFbmRQb3MgJiYgZW5kICE9IGhvc3RFbmRQb3MgJiYgbV9zdHJpbmdb
ZW5kXSA9PSAnQCcpCisgICAgICAgICAgICBlbmQgKz0gMTsKICAgICB9CisgICAgcGFyc2UobV9z
dHJpbmcubGVmdCh1c2VyRW5kUG9zKSArIHAgKyBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSk7CiB9
CiAKLXZvaWQgS1VSTDo6c2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCit2b2lkIEtV
Ukw6OnNldFJlZihjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgaWYgKG1faXNWYWxpZCkgewotICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHF1ZXJ5RW5kUG9z
KSArIChzLmlzRW1wdHkoKSA/IERlcHJlY2F0ZWRTdHJpbmcoKSA6ICIjIiArIHMpOwotICAgICAg
ICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0gICAgfQorICAgIGlmICghbV9pc1Zh
bGlkKQorICAgICAgICByZXR1cm47CisgICAgcGFyc2UobV9zdHJpbmcubGVmdChxdWVyeUVuZFBv
cykgKyAocy5pc0VtcHR5KCkgPyAiIiA6ICIjIiArIHMpKTsKIH0KIAotdm9pZCBLVVJMOjpzZXRR
dWVyeShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZxdWVyeSkKK3ZvaWQgS1VSTDo6c2V0UXVlcnko
Y29uc3QgU3RyaW5nJiBxdWVyeSkKIHsKLSAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIERl
cHJlY2F0ZWRTdHJpbmcgcTsKLSAgICAgICAgaWYgKCFxdWVyeS5pc051bGwoKSAmJiAocXVlcnku
aXNFbXB0eSgpIHx8IHF1ZXJ5WzBdICE9ICc/JykpIHsKLSAgICAgICAgICAgIHEgPSAiPyIgKyBx
dWVyeTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHEgPSBxdWVyeTsKLSAgICAgICAg
fQorICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoKHF1ZXJ5
LmlzRW1wdHkoKSB8fCBxdWVyeVswXSAhPSAnPycpICYmICFxdWVyeS5pc051bGwoKSkKKyAgICAg
ICAgcGFyc2UobV9zdHJpbmcubGVmdChwYXRoRW5kUG9zKSArICI/IiArIHF1ZXJ5ICsgbV9zdHJp
bmcuc3Vic3RyaW5nKHF1ZXJ5RW5kUG9zKSk7CisgICAgZWxzZQorICAgICAgICBwYXJzZShtX3N0
cmluZy5sZWZ0KHBhdGhFbmRQb3MpICsgcXVlcnkgKyBtX3N0cmluZy5zdWJzdHJpbmcocXVlcnlF
bmRQb3MpKTsKIAotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5s
ZWZ0KHBhdGhFbmRQb3MpICsgcSArIHVybFN0cmluZy5taWQocXVlcnlFbmRQb3MpOwotICAgICAg
ICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0gICAgfQogfQogCi12b2lkIEtVUkw6
OnNldFBhdGgoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0UGF0aChj
b25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgaWYgKG1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRFbmRQb3MpICsgZW5jb2RlX3N0
cmluZyhzKSArIHVybFN0cmluZy5taWQocGF0aEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VS
TC5hc2NpaSgpLCAmbmV3VVJMKTsKLSAgICB9CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAg
IHJldHVybjsKKworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocG9ydEVuZFBvcykgKyBlbmNvZGVf
c3RyaW5nKHMpICsgbV9zdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmRQb3MpKTsKIH0KIAotRGVwcmVj
YXRlZFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAorU3RyaW5nIEtVUkw6OnByZXR0eVVS
TCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIHVybFN0
cmluZzsKLSAgICB9CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBtX3N0cmlu
ZzsKKworICAgIC8vIEZJWE1FOiBJbmVmZmljaWVudCB0byBkbyB0aGlzIGluIGEgU3RyaW5nLiBO
ZWVkIHRvIHVzZSBhIFZlY3RvciBpbnN0ZWFkLgogCi0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1
bHQgPSBwcm90b2NvbCgpICsgIjoiOworICAgIFN0cmluZyByZXN1bHQgPSBwcm90b2NvbCgpICsg
IjoiOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBhdXRob3JpdHk7CisgICAgU3RyaW5nIGF1dGhv
cml0eTsKIAogICAgIGlmIChob3N0RW5kUG9zICE9IHBhc3N3b3JkRW5kUG9zKSB7CiAgICAgICAg
IGlmICh1c2VyRW5kUG9zICE9IHVzZXJTdGFydFBvcykgewpAQCAtNzM2LDQ3ICs3NTEsNDggQEAg
RGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogICAgICAgICBhdXRob3Jp
dHkgKz0gaG9zdCgpOwogICAgICAgICBpZiAocG9ydCgpICE9IDApIHsKICAgICAgICAgICAgIGF1
dGhvcml0eSArPSAiOiI7Ci0gICAgICAgICAgICBhdXRob3JpdHkgKz0gRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKHBvcnQoKSk7CisgICAgICAgICAgICBhdXRob3JpdHkgKz0gU3RyaW5nOjpudW1i
ZXIocG9ydCgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghYXV0aG9yaXR5LmlzRW1w
dHkoKSkKICAgICAgICAgcmVzdWx0ICs9ICIvLyIgKyBhdXRob3JpdHk7Ci0gICAgZWxzZSBpZiAo
cHJvdG9jb2woKSA9PSAiZmlsZSIpCisgICAgZWxzZSBpZiAocHJvdG9jb2xJcygiZmlsZSIpKQog
ICAgICAgICByZXN1bHQgKz0gIi8vIjsKIAogICAgIHJlc3VsdCArPSBwYXRoKCk7CiAgICAgcmVz
dWx0ICs9IHF1ZXJ5KCk7CiAKLSAgICBpZiAoZnJhZ21lbnRFbmRQb3MgIT0gcXVlcnlFbmRQb3Mp
IHsKKyAgICBpZiAoZnJhZ21lbnRFbmRQb3MgIT0gcXVlcnlFbmRQb3MpCiAgICAgICAgIHJlc3Vs
dCArPSAiIyIgKyByZWYoKTsKLSAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1EZXBy
ZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYg
dXJsU3RyaW5nKQorU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIp
CiB7Ci0gICAgcmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3RyaW5nLCBVVEY4RW5jb2RpbmcoKSk7
CisgICAgcmV0dXJuIGRlY29kZV9zdHJpbmcoc3RyLCBVVEY4RW5jb2RpbmcoKSk7CiB9CiAKLURl
cHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitTdHJpbmcgS1VSTDo6
ZGVjb2RlX3N0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZykKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdCgiIik7CisgICAgLy8gRklYTUU6
IE1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCBieSB1c2luZyBhIHZlY3RvciBmb3IgInJlc3VsdCIu
CisKKyAgICBTdHJpbmcgcmVzdWx0KCIiKTsKIAogICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBidWZm
ZXIoMCk7CiAKLSAgICBpbnQgbGVuZ3RoID0gdXJsU3RyaW5nLmxlbmd0aCgpOworICAgIGludCBs
ZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAgaW50IGRlY29kZWRQb3NpdGlvbiA9IDA7CiAgICAg
aW50IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBpbnQgZW5jb2RlZFJ1blBvc2l0aW9uOwotICAg
IHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gdXJsU3RyaW5nLmZpbmQoJyUnLCBzZWFyY2hQ
b3NpdGlvbikpID49IDApIHsKKyAgICB3aGlsZSAoKGVuY29kZWRSdW5Qb3NpdGlvbiA9IHN0ci5m
aW5kKCclJywgc2VhcmNoUG9zaXRpb24pKSA+PSAwKSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIHNl
cXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgogICAgICAgICBpbnQgZW5jb2RlZFJ1bkVuZCA9IGVu
Y29kZWRSdW5Qb3NpdGlvbjsKICAgICAgICAgd2hpbGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQg
Pj0gMwotICAgICAgICAgICAgICAgICYmIHVybFN0cmluZ1tlbmNvZGVkUnVuRW5kXSA9PSAnJScK
LSAgICAgICAgICAgICAgICAmJiBpc0hleERpZ2l0KHVybFN0cmluZ1tlbmNvZGVkUnVuRW5kICsg
MV0ubGF0aW4xKCkpCi0gICAgICAgICAgICAgICAgJiYgaXNIZXhEaWdpdCh1cmxTdHJpbmdbZW5j
b2RlZFJ1bkVuZCArIDJdLmxhdGluMSgpKSkKKyAgICAgICAgICAgICAgICAmJiBzdHJbZW5jb2Rl
ZFJ1bkVuZF0gPT0gJyUnCisgICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cltl
bmNvZGVkUnVuRW5kICsgMV0pCisgICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0
cltlbmNvZGVkUnVuRW5kICsgMl0pKQogICAgICAgICAgICAgZW5jb2RlZFJ1bkVuZCArPSAzOwog
ICAgICAgICBpZiAoZW5jb2RlZFJ1bkVuZCA9PSBlbmNvZGVkUnVuUG9zaXRpb24pIHsKICAgICAg
ICAgICAgICsrc2VhcmNoUG9zaXRpb247CkBAIC03ODQsMTYgKzgwMCwxMiBAQCBEZXByZWNhdGVk
U3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uCiAgICAgICAgIH0KICAgICAgICAgc2VhcmNo
UG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwogCi0gICAgICAgIC8vIENvcHkgdGhlIGVudGlyZSAl
LWVzY2FwZSBzZXF1ZW5jZSBpbnRvIGFuIDgtYml0IGJ1ZmZlci4KLSAgICAgICAgaW50IGVuY29k
ZWRSdW5MZW5ndGggPSBlbmNvZGVkUnVuRW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgICAg
ICBidWZmZXIuY2xlYXIoKTsKLSAgICAgICAgYnVmZmVyLmdyb3coZW5jb2RlZFJ1bkxlbmd0aCAr
IDEpOwotICAgICAgICB1cmxTdHJpbmcuY29weUxhdGluMShidWZmZXIuZGF0YSgpLCBlbmNvZGVk
UnVuUG9zaXRpb24sIGVuY29kZWRSdW5MZW5ndGgpOwotCiAgICAgICAgIC8vIERlY29kZSB0aGUg
JS1lc2NhcGVzIGludG8gYnl0ZXMuCi0gICAgICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgpOwot
ICAgICAgICBjb25zdCBjaGFyICpxID0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgd2hpbGUgKCpx
KSB7CisgICAgICAgIHVuc2lnbmVkIHJ1bkxlbmd0aCA9IChlbmNvZGVkUnVuRW5kIC0gZW5jb2Rl
ZFJ1blBvc2l0aW9uKSAvIDM7CisgICAgICAgIGJ1ZmZlci5yZXNpemUocnVuTGVuZ3RoKTsKKyAg
ICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBxID0g
c3RyLmNoYXJhY3RlcnMoKSArIGVuY29kZWRSdW5Qb3NpdGlvbjsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAqcCsrID0gKGhl
eERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBoZXhEaWdpdFZhbHVlKHFbMl0pOwogICAgICAgICAg
ICAgcSArPSAzOwogICAgICAgICB9CkBAIC04MDQsMTIgKzgxNiwxMiBAQCBEZXByZWNhdGVkU3Ry
aW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5nIHdpdGggd2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5k
IHdoYXQgd2UganVzdCBkZWNvZGVkLgotICAgICAgICByZXN1bHQuYXBwZW5kKHVybFN0cmluZy5t
aWQoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24p
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0
ZWRDaGFyKj4oZGVjb2RlZC5jaGFyYWN0ZXJzKCkpLCBkZWNvZGVkLmxlbmd0aCgpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChzdHIuc3Vic3RyaW5nKGRlY29kZWRQb3NpdGlvbiwgZW5jb2RlZFJ1
blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVj
b2RlZCk7CiAgICAgICAgIGRlY29kZWRQb3NpdGlvbiA9IGVuY29kZWRSdW5FbmQ7CiAgICAgfQog
Ci0gICAgcmVzdWx0LmFwcGVuZCh1cmxTdHJpbmcubWlkKGRlY29kZWRQb3NpdGlvbiwgbGVuZ3Ro
IC0gZGVjb2RlZFBvc2l0aW9uKSk7CisgICAgcmVzdWx0LmFwcGVuZChzdHIuc3Vic3RyaW5nKGRl
Y29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApAQCAtODE5LDE1ICs4MzEsMTUgQEAgYm9vbCBLVVJMOjppc0xvY2FsRmlsZSgp
IGNvbnN0CiAgICAgLy8gYW5kIGluY2x1ZGluZyBmZWVkIHdvdWxkIGFsbG93IGZlZWRzIHRvIHBv
dGVudGlhbGx5IGxldCBzb21lb25lJ3MgYmxvZwogICAgIC8vIHJlYWQgdGhlIGNvbnRlbnRzIG9m
IHRoZSBjbGlwYm9hcmQgb24gYSBkcmFnLCBldmVuIHdpdGhvdXQgYSBkcm9wLgogICAgIC8vIExp
a2V3aXNlIHdpdGggdXNpbmcgdGhlIEZyYW1lTG9hZGVyOjpzaG91bGRUcmVhdFVSTEFzTG9jYWwo
KSBmdW5jdGlvbi4KLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2woKSwgImZp
bGUiKTsKKyAgICByZXR1cm4gcHJvdG9jb2xJcygiZmlsZSIpOwogfQogCi1zdGF0aWMgdm9pZCBh
cHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIqJiBidWZmZXIsIGNvbnN0IGNoYXIgKnN0clN0YXJ0
LCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIHZvaWQgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhjaGFy
KiYgYnVmZmVyLCBjb25zdCBjaGFyKiBzdHJTdGFydCwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBj
aGFyICpwID0gYnVmZmVyOworICAgIGNoYXIqIHAgPSBidWZmZXI7CiAKLSAgICBjb25zdCBjaGFy
ICpzdHIgPSBzdHJTdGFydDsKLSAgICBjb25zdCBjaGFyICpzdHJFbmQgPSBzdHJTdGFydCArIGxl
bmd0aDsKKyAgICBjb25zdCBjaGFyKiBzdHIgPSBzdHJTdGFydDsKKyAgICBjb25zdCBjaGFyKiBz
dHJFbmQgPSBzdHJTdGFydCArIGxlbmd0aDsKICAgICB3aGlsZSAoc3RyIDwgc3RyRW5kKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpzdHIrKzsKICAgICAgICAgaWYgKGlzQmFkQ2hhcihj
KSkgewpAQCAtODQyLDIwICs4NTQsMjAgQEAgc3RhdGljIHZvaWQgYXBwZW5kRXNjYXBpbmdCYWRD
aGFycyhjaGFyKgogICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
CisKICAgICBidWZmZXIgPSBwOwogfQogCiAvLyBjb3B5IGEgcGF0aCwgYWNjb3VudGluZyBmb3Ig
Ii4iIGFuZCAiLi4iIHNlZ21lbnRzCi1zdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNo
YXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQpCitzdGF0
aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIqIGRzdCwgY29uc3QgY2hhciogc3JjLCBp
bnQgc3JjU3RhcnQsIGludCBzcmNFbmQpCiB7Ci0gICAgY2hhciAqYnVmZmVyUGF0aFN0YXJ0ID0g
ZHN0OworICAgIGNoYXIqIGJ1ZmZlclBhdGhTdGFydCA9IGRzdDsKIAogICAgIC8vIGVtcHR5IHBh
dGggaXMgYSBzcGVjaWFsIGNhc2UsIGFuZCBuZWVkIG5vdCBoYXZlIGEgbGVhZGluZyBzbGFzaAog
ICAgIGlmIChzcmNTdGFydCAhPSBzcmNFbmQpIHsKLSAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0
cmluZ1N0YXJ0ID0gc3JjICsgc3JjU3RhcnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJp
bmdFbmQgPSBzcmMgKyBzcmNFbmQ7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmdQb3Mg
PSBiYXNlU3RyaW5nU3RhcnQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmdTdGFydCA9
IHNyYyArIHNyY1N0YXJ0OworICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nRW5kID0gc3Jj
ICsgc3JjRW5kOworICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nUG9zID0gYmFzZVN0cmlu
Z1N0YXJ0OwogCiAgICAgICAgIC8vIHRoaXMgY29kZSBpcyB1bnByZXBhcmVkIGZvciBwYXRocyB0
aGF0IGRvIG5vdCBiZWdpbiB3aXRoIGEKICAgICAgICAgLy8gc2xhc2ggYW5kIHdlIHNob3VsZCBh
bHdheXMgaGF2ZSBvbmUgaW4gdGhlIHNvdXJjZSBzdHJpbmcKQEAgLTkwNCw5ICs5MTYsOSBAQCBz
dGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIgKmRzCiAgICAgcmV0dXJuIGRzdCAt
IGJ1ZmZlclBhdGhTdGFydDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGhhc1NsYXNoRG90T3JE
b3REb3QoY29uc3QgY2hhciAqc3RyKQorc3RhdGljIGlubGluZSBib29sIGhhc1NsYXNoRG90T3JE
b3REb3QoY29uc3QgY2hhciogc3RyKQogewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oc3RyKTsKKyAgICBjb25zdCB1
bnNpZ25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
c3RyKTsKICAgICBpZiAoISpwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdW5zaWduZWQg
Y2hhciBwYyA9ICpwOwpAQCAtOTIzLDIxICs5MzUsMjcgQEAgc3RhdGljIGlubGluZSBib29sIG1h
dGNoTGV0dGVyKGNoYXIgYywgYwogICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2VyY2FzZUxl
dHRlcjsKIH0KIAotdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcgKm9yaWdpbmFsU3RyaW5nKQordm9pZCBLVVJMOjpwYXJzZShjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICAvLyBGSVhNRTogQ291bGQgZG8gdGhpcyB3YXkgbW9yZSBlZmZp
Y2llbnRseSB3aXRoIHNvbWUga2luZCBvZiBMYXRpbi0xIGhlbHBlci4KKyAgICBwYXJzZShzdHJp
bmcubGF0aW4xKCkuZGF0YSgpLCAmc3RyaW5nKTsKK30KKwordm9pZCBLVVJMOjpwYXJzZShjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpCiB7CiAgICAgbV9pc1Zh
bGlkID0gdHJ1ZTsKIAogICAgIGlmICghdXJsIHx8IHVybFswXSA9PSAnXDAnKSB7CiAgICAgICAg
IC8vIHZhbGlkIFVSTCBtdXN0IGJlIG5vbi1lbXB0eQorICAgICAgICBtX3N0cmluZyA9IG9yaWdp
bmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwogICAgICAgICBtX2lzVmFsaWQgPSBm
YWxzZTsKLSAgICAgICAgdXJsU3RyaW5nID0gdXJsOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKCFpc1NjaGVtZUZpcnN0Q2hhcih1cmxbMF0pKSB7CiAgICAgICAgIC8vIHNjaGVt
ZSBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIKKyAgICAgICAgbV9zdHJp
bmcgPSBvcmlnaW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKICAgICAgICAgbV9p
c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHVybFN0cmluZyA9IHVybDsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtOTQ4LDggKzk2Niw4IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hh
ciAqdXJsLCBjb25zdCAKICAgICB9CiAKICAgICBpZiAodXJsW3NjaGVtZUVuZF0gIT0gJzonKSB7
CisgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1
cmw7CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICB1cmxTdHJpbmcgPSB1cmw7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk3OCw3ICs5OTYsNyBAQCB2b2lkIEtVUkw6
OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB1c2VyRW5kKys7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHVybFt1c2Vy
RW5kXSA9PSAnQCcpIHsKICAgICAgICAgICAgIC8vIGFjdHVhbCBlbmQgb2YgdGhlIHVzZXJpbmZv
LCBzdGFydCBvbiB0aGUgaG9zdAogICAgICAgICAgICAgaWYgKGNvbG9uUG9zICE9IDApIHsKQEAg
LTk5OCw4ICsxMDE2LDggQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0
IAogICAgICAgICAgICAgaG9zdFN0YXJ0ID0gdXNlclN0YXJ0OwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgIG1fc3RyaW5nID0g
b3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7CiAgICAgICAgICAgICBtX2lz
VmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHVybFN0cmluZyA9IHVybDsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMDE1LDggKzEwMzMsOCBAQCB2b2lkIEtVUkw6OnBh
cnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICAgICAgaG9zdEVuZCsrOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGNoYXJhY3Rl
cgorICAgICAgICAgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxT
dHJpbmcgOiB1cmw7CiAgICAgICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgdXJsU3RyaW5nID0gdXJsOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTEwMzksOCArMTA1Nyw4IEBAIHZvaWQgS1VS
TDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKIAogICAgICAgICBpZiAoIWlzUGF0aFNl
Z21lbnRFbmRDaGFyKHVybFtwb3J0RW5kXSkpIHsKICAgICAgICAgICAgIC8vIGludmFsaWQgY2hh
cmFjdGVyCisgICAgICAgICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFs
U3RyaW5nIDogdXJsOwogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAg
ICB1cmxTdHJpbmcgPSB1cmw7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewpAQCAtMTA1MCw3ICsxMDY4LDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFy
ICp1cmwsIGNvbnN0IAogICAgICAgICBob3N0U3RhcnQgPSBob3N0RW5kID0gcGFzc3dvcmRFbmQ7
CiAgICAgICAgIHBvcnRTdGFydCA9IHBvcnRFbmQgPSBob3N0RW5kOwogICAgIH0KLSAgICAgICAg
CisKICAgICBpbnQgcGF0aFN0YXJ0ID0gcG9ydEVuZDsKICAgICBpbnQgcGF0aEVuZCA9IHBhdGhT
dGFydDsKICAgICBpbnQgcXVlcnlTdGFydDsKQEAgLTEwNjEsMTQgKzEwNzksMTQgQEAgdm9pZCBL
VVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgIGlmICghaGllcmFyY2hpY2Fs
KSB7CiAgICAgICAgIHdoaWxlICh1cmxbcGF0aEVuZF0gIT0gJ1wwJyAmJiB1cmxbcGF0aEVuZF0g
IT0gJz8nICYmIHVybFtwYXRoRW5kXSAhPSAnIycpCiAgICAgICAgICAgICBwYXRoRW5kKys7Ci0g
ICAgICAgIAorCiAgICAgICAgIHF1ZXJ5U3RhcnQgPSBwYXRoRW5kOwogICAgICAgICBxdWVyeUVu
ZCA9IHF1ZXJ5U3RhcnQ7CiAgICAgICAgIGlmICh1cmxbcXVlcnlTdGFydF0gPT0gJz8nKSB7CiAg
ICAgICAgICAgICB3aGlsZSAodXJsW3F1ZXJ5RW5kXSAhPSAnXDAnICYmIHVybFtxdWVyeUVuZF0g
IT0gJyMnKQogICAgICAgICAgICAgICAgIHF1ZXJ5RW5kKys7CiAgICAgICAgIH0KLSAgICAgICAg
CisKICAgICAgICAgZnJhZ21lbnRTdGFydCA9IHF1ZXJ5RW5kOwogICAgICAgICBmcmFnbWVudEVu
ZCA9IGZyYWdtZW50U3RhcnQ7CiAgICAgICAgIGlmICh1cmxbZnJhZ21lbnRTdGFydF0gPT0gJyMn
KSB7CkBAIC0xMDc2LDEzICsxMDk0LDEzIEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAq
dXJsLCBjb25zdCAKICAgICAgICAgICAgIGZyYWdtZW50RW5kID0gZnJhZ21lbnRTdGFydDsKICAg
ICAgICAgICAgIHdoaWxlICh1cmxbZnJhZ21lbnRFbmRdICE9ICdcMCcpCiAgICAgICAgICAgICAg
ICAgZnJhZ21lbnRFbmQrKzsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAg
ICAgZWxzZSB7CiAgICAgICAgIHdoaWxlICh1cmxbcGF0aEVuZF0gIT0gJ1wwJyAmJiB1cmxbcGF0
aEVuZF0gIT0gJz8nICYmIHVybFtwYXRoRW5kXSAhPSAnIycpIHsKICAgICAgICAgICAgIHBhdGhF
bmQrKzsKICAgICAgICAgfQotICAgIAorCiAgICAgICAgIHF1ZXJ5U3RhcnQgPSBwYXRoRW5kOwog
ICAgICAgICBxdWVyeUVuZCA9IHF1ZXJ5U3RhcnQ7CiAgICAgICAgIGlmICh1cmxbcXVlcnlTdGFy
dF0gPT0gJz8nKSB7CkBAIC0xMDkwLDcgKzExMDgsNyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0
IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICAgICAgcXVlcnlFbmQrKzsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmcmFnbWVudFN0YXJ0ID0gcXVl
cnlFbmQ7CiAgICAgICAgIGZyYWdtZW50RW5kID0gZnJhZ21lbnRTdGFydDsKICAgICAgICAgaWYg
KHVybFtmcmFnbWVudFN0YXJ0XSA9PSAnIycpIHsKQEAgLTExMTEsOSArMTEyOSw4IEBAIHZvaWQg
S1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKIAogICAgIC8vIGNvcHkgaW4gdGhl
IHNjaGVtZQogICAgIGNvbnN0IGNoYXIgKnNjaGVtZUVuZFB0ciA9IHVybCArIHNjaGVtZUVuZDsK
LSAgICB3aGlsZSAoc3RyUHRyIDwgc2NoZW1lRW5kUHRyKSB7CisgICAgd2hpbGUgKHN0clB0ciA8
IHNjaGVtZUVuZFB0cikKICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICB9CiAgICAgc2No
ZW1lRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKICAgICAvLyBDaGVjayBpZiB3ZSdyZSBo
dHRwIG9yIGh0dHBzLgpAQCAtMTE0MCwxMiArMTE1NywxMiBAQCB2b2lkIEtVUkw6OnBhcnNlKGNv
bnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICYmIG1hdGNoTGV0dGVyKHVybFsyXSwgJ2wn
KQogICAgICAgICAmJiBtYXRjaExldHRlcih1cmxbM10sICdlJykKICAgICAgICAgJiYgdXJsWzRd
ID09ICc6JzsKLSAgICAgICAgCisKICAgICAvLyBGaWxlIFVSTHMgbmVlZCBhIGhvc3QgcGFydCB1
bmxlc3MgaXQgaXMganVzdCBmaWxlOi8vIG9yIGZpbGU6Ly9sb2NhbGhvc3QKICAgICBib29sIGRl
Z2VuRmlsZVBhdGggPSBwYXRoU3RhcnQgPT0gcGF0aEVuZAogICAgICAgICAmJiAoaG9zdFN0YXJ0
ID09IGhvc3RFbmQKICAgICAgICAgICAgIHx8IGhvc3RJc0xvY2FsSG9zdCk7Ci0gICAgCisKICAg
ICBib29sIGhhdmVOb25Ib3N0QXV0aG9yaXR5UGFydCA9IHVzZXJTdGFydCAhPSB1c2VyRW5kIHx8
IHBhc3N3b3JkU3RhcnQgIT0gcGFzc3dvcmRFbmQgfHwgcG9ydFN0YXJ0ICE9IHBvcnRFbmQ7CiAK
ICAgICAvLyBhZGQgIjoiIGFmdGVyIHNjaGVtZQpAQCAtMTE2OCw0NiArMTE4NSw0MSBAQCB2b2lk
IEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAKICAgICAgICAgLy8gY29weSBp
biB0aGUgdXNlcgogICAgICAgICBzdHJQdHIgPSB1cmwgKyB1c2VyU3RhcnQ7Ci0gICAgICAgIGNv
bnN0IGNoYXIgKnVzZXJFbmRQdHIgPSB1cmwgKyB1c2VyRW5kOwotICAgICAgICB3aGlsZSAoc3Ry
UHRyIDwgdXNlckVuZFB0cikgeworICAgICAgICBjb25zdCBjaGFyKiB1c2VyRW5kUHRyID0gdXJs
ICsgdXNlckVuZDsKKyAgICAgICAgd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpCiAgICAgICAg
ICAgICAqcCsrID0gKnN0clB0cisrOwotICAgICAgICB9CiAgICAgICAgIHVzZXJFbmRQb3MgPSBw
IC0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gY29weSBpbiB0aGUgcGFz
c3dvcmQKICAgICAgICAgaWYgKHBhc3N3b3JkRW5kICE9IHBhc3N3b3JkU3RhcnQpIHsKICAgICAg
ICAgICAgICpwKysgPSAnOic7CiAgICAgICAgICAgICBzdHJQdHIgPSB1cmwgKyBwYXNzd29yZFN0
YXJ0OwotICAgICAgICAgICAgY29uc3QgY2hhciAqcGFzc3dvcmRFbmRQdHIgPSB1cmwgKyBwYXNz
d29yZEVuZDsKLSAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBwYXNzd29yZEVuZFB0cikgewor
ICAgICAgICAgICAgY29uc3QgY2hhciogcGFzc3dvcmRFbmRQdHIgPSB1cmwgKyBwYXNzd29yZEVu
ZDsKKyAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBwYXNzd29yZEVuZFB0cikKICAgICAgICAg
ICAgICAgICAqcCsrID0gKnN0clB0cisrOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHBhc3N3b3JkRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIElmIHdlIGhhZCBhbnkgdXNlciBpbmZvLCBhZGQgIkAiCi0gICAgICAgIGlmIChwIC0g
YnVmZmVyLmRhdGEoKSAhPSB1c2VyU3RhcnRQb3MpIHsKKyAgICAgICAgaWYgKHAgLSBidWZmZXIu
ZGF0YSgpICE9IHVzZXJTdGFydFBvcykKICAgICAgICAgICAgICpwKysgPSAnQCc7Ci0gICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgLy8gY29weSBpbiB0aGUgaG9zdCwgZXhjZXB0IGluIHRo
ZSBjYXNlIG9mIGEgZmlsZSBVUkwgd2l0aCBhdXRob3JpdHk9ImxvY2FsaG9zdCIKICAgICAgICAg
aWYgKCEoaXNGaWxlICYmIGhvc3RJc0xvY2FsSG9zdCAmJiAhaGF2ZU5vbkhvc3RBdXRob3JpdHlQ
YXJ0KSkgewogICAgICAgICAgICAgc3RyUHRyID0gdXJsICsgaG9zdFN0YXJ0OwotICAgICAgICAg
ICAgY29uc3QgY2hhciAqaG9zdEVuZFB0ciA9IHVybCArIGhvc3RFbmQ7Ci0gICAgICAgICAgICB3
aGlsZSAoc3RyUHRyIDwgaG9zdEVuZFB0cikgeworICAgICAgICAgICAgY29uc3QgY2hhciogaG9z
dEVuZFB0ciA9IHVybCArIGhvc3RFbmQ7CisgICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgaG9z
dEVuZFB0cikKICAgICAgICAgICAgICAgICAqcCsrID0gKnN0clB0cisrOwotICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGhvc3RFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKLSAg
ICAgICAgCisKICAgICAgICAgLy8gY29weSBpbiB0aGUgcG9ydAogICAgICAgICBpZiAoaG9zdEVu
ZCAhPSBwb3J0U3RhcnQpIHsKICAgICAgICAgICAgICpwKysgPSAnOic7CiAgICAgICAgICAgICBz
dHJQdHIgPSB1cmwgKyBwb3J0U3RhcnQ7CiAgICAgICAgICAgICBjb25zdCBjaGFyICpwb3J0RW5k
UHRyID0gdXJsICsgcG9ydEVuZDsKLSAgICAgICAgICAgIHdoaWxlIChzdHJQdHIgPCBwb3J0RW5k
UHRyKSB7CisgICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgcG9ydEVuZFB0cikKICAgICAgICAg
ICAgICAgICAqcCsrID0gKnN0clB0cisrOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHBvcnRFbmRQb3MgPSBwIC0gYnVmZmVyLmRhdGEoKTsKICAgICB9IGVsc2UgewpAQCAtMTIx
NiwxMiArMTIyOCwxMCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3Qg
CiAKICAgICAvLyBGb3IgY2Fub25pY2FsaXphdGlvbiwgZW5zdXJlIHdlIGhhdmUgYSAnLycgZm9y
IG5vIHBhdGguCiAgICAgLy8gT25seSBkbyB0aGlzIGZvciBodHRwIGFuZCBodHRwcy4KLSAgICBp
ZiAoaXNIVFRQb3JIVFRQUyAmJiBwYXRoRW5kIC0gcGF0aFN0YXJ0ID09IDApIHsKKyAgICBpZiAo
aXNIVFRQb3JIVFRQUyAmJiBwYXRoRW5kIC0gcGF0aFN0YXJ0ID09IDApCiAgICAgICAgICpwKysg
PSAnLyc7Ci0gICAgfQotICAgICAgIAorCiAgICAgLy8gYWRkIHBhdGgsIGVzY2FwaW5nIGJhZCBj
aGFyYWN0ZXJzCi0gICAgCiAgICAgaWYgKGhpZXJhcmNoaWNhbCAmJiBoYXNTbGFzaERvdE9yRG90
RG90KHVybCkpIHsKICAgICAgICAgVmVjdG9yPGNoYXIsIDQwOTY+IHBhdGhfYnVmZmVyKHBhdGhF
bmQgLSBwYXRoU3RhcnQgKyAxKTsKICAgICAgICAgY29weVBhdGhSZW1vdmluZ0RvdHMocGF0aF9i
dWZmZXIuZGF0YSgpLCB1cmwsIHBhdGhTdGFydCwgcGF0aEVuZCk7CkBAIC0xMjMwLDEyICsxMjQw
LDExIEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAg
YXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBwYXRoU3RhcnQsIHBhdGhFbmQgLSBwYXRo
U3RhcnQpOwogCiAgICAgcGF0aEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgIAotICAg
IAorCiAgICAgLy8gYWRkIHF1ZXJ5LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwogICAgIGFwcGVu
ZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcXVlcnlTdGFydCwgcXVlcnlFbmQgLSBxdWVyeVN0
YXJ0KTsKICAgICBxdWVyeUVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgIAorCiAgICAg
Ly8gYWRkIGZyYWdtZW50LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwogICAgIGlmIChmcmFnbWVu
dEVuZCAhPSBxdWVyeUVuZCkgewogICAgICAgICAqcCsrID0gJyMnOwpAQCAtMTI0MywzNiArMTI1
MiwzNiBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgfQog
ICAgIGZyYWdtZW50RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKLSAgICAvLyBJZiB3ZSBk
aWRuJ3QgZW5kIHVwIGFjdHVhbGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBzdHJpbmcgYW5kCi0g
ICAgLy8gaXQgc3RhcnRlZCBhcyBhIERlcHJlY2F0ZWRTdHJpbmcsIGp1c3QgcmV1c2UgaXQsIHRv
IGF2b2lkIGV4dHJhCi0gICAgLy8gYWxsb2NhdGlvbi4KLSAgICBpZiAob3JpZ2luYWxTdHJpbmcg
JiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9PSAwKSB7Ci0g
ICAgICAgIHVybFN0cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKLSAgICB9IGVsc2UKLSAgICAgICAg
dXJsU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZyhidWZmZXIuZGF0YSgpLCBmcmFnbWVudEVuZFBv
cyk7Ci0KICAgICBBU1NFUlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGludClidWZmZXIuc2l6ZSgp
KTsKLX0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtVUkwgJmIpCi17
Ci0gICAgcmV0dXJuIGEudXJsU3RyaW5nID09IGIudXJsU3RyaW5nOworICAgIC8vIElmIHdlIGRp
ZG4ndCBlbmQgdXAgYWN0dWFsbHkgY2hhbmdpbmcgdGhlIG9yaWdpbmFsIHN0cmluZyBhbmQKKyAg
ICAvLyBpdCB3YXMgYWxyZWFkeSBpbiBhIFN0cmluZywgcmV1c2UgaXQgdG8gYXZvaWQgZXh0cmEg
YWxsb2NhdGlvbi4KKyAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIuZGF0
YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9PSAwKQorICAgICAgICBtX3N0cmluZyA9ICpvcmln
aW5hbFN0cmluZzsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKGJ1ZmZlci5k
YXRhKCksIGZyYWdtZW50RW5kUG9zKTsKIH0KIAogYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0
IEtVUkwmIGEsIGNvbnN0IEtVUkwmIGIpCiB7Ci0gICAgcmV0dXJuIGEudXJsU3RyaW5nLmxlZnQo
YS5xdWVyeUVuZFBvcykgPT0gYi51cmxTdHJpbmcubGVmdChiLnF1ZXJ5RW5kUG9zKTsKKyAgICBp
ZiAoYS5xdWVyeUVuZFBvcyAhPSBiLnF1ZXJ5RW5kUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgdW5zaWduZWQgcXVlcnlMZW5ndGggPSBhLnF1ZXJ5RW5kUG9zOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBxdWVyeUxlbmd0aDsgKytpKQorICAgICAgICBpZiAoYS5zdHJpbmco
KVtpXSAhPSBiLnN0cmluZygpW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJpbmcoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyYgbm90RW5jb2RlZFN0cmluZykKK1N0cmluZyBLVVJMOjplbmNv
ZGVfc3RyaW5nKGNvbnN0IFN0cmluZyYgbm90RW5jb2RlZFN0cmluZykKIHsKLSAgICBEZXByZWNh
dGVkQ1N0cmluZyBhc1VURjggPSBub3RFbmNvZGVkU3RyaW5nLnV0ZjgoKTsKLSAgICAKKyAgICBD
U3RyaW5nIGFzVVRGOCA9IG5vdEVuY29kZWRTdHJpbmcudXRmOCgpOworCiAgICAgVmVjdG9yPGNo
YXIsIDQwOTY+IGJ1ZmZlcihhc1VURjgubGVuZ3RoKCkgKiAzICsgMSk7Ci0gICAgY2hhciAqcCA9
IGJ1ZmZlci5kYXRhKCk7CisgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CiAKLSAgICBjb25z
dCBjaGFyICpzdHIgPSBhc1VURjg7Ci0gICAgY29uc3QgY2hhciAqc3RyRW5kID0gc3RyICsgYXNV
VEY4Lmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHN0ciA9IGFzVVRGOC5kYXRhKCk7CisgICAg
Y29uc3QgY2hhciogc3RyRW5kID0gc3RyICsgYXNVVEY4Lmxlbmd0aCgpOwogICAgIHdoaWxlIChz
dHIgPCBzdHJFbmQpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKnN0cisrOwogICAgICAg
ICBpZiAoaXNCYWRDaGFyKGMpKSB7CkBAIC0xMjgyLDM5ICsxMjkxLDM5IEBAIERlcHJlY2F0ZWRT
dHJpbmcgS1VSTDo6ZW5jb2RlX3N0cmluZyhjb24KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAqcCsrID0gYzsKICAgICB9Ci0gICAgCi0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQoYnVm
ZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwotICAgIAorCisgICAgU3RyaW5nIHJlc3Vs
dChidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7CisKICAgICBBU1NFUlQocCAtIGJ1
ZmZlci5kYXRhKCkgPD0gKGludClidWZmZXIuc2l6ZSgpKTsKIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGVuY29kZUhvc3RuYW1lKGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcgJnMpCisvLyBBcHBlbmRzIHRoZSBwdW55Y29kZWQgaG9zdG5hbWUgaWRlbnRp
ZmllZCBieSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBsZW5ndGggdG8KKy8vIHRoZSBvdXRwdXQgYnVm
ZmVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG51bGwgdGVybWluYXRlZC4KK3N0YXRpYyB2b2lk
IGFwcGVuZEVuY29kZWRIb3N0bmFtZShjb25zdCBVQ2hhciogc3RyLCB1bnNpZ25lZCBzdHJMZW4s
IFRlbXBVQ2hhckJ1ZmZlciogb3V0cHV0KQogewogICAgIC8vIE5lZWRzIHRvIGJlIGJpZyBlbm91
Z2ggdG8gaG9sZCBhbiBJRE4tZW5jb2RlZCBuYW1lLgogICAgIC8vIEZvciBob3N0IG5hbWVzIGJp
Z2dlciB0aGFuIHRoaXMsIHdlIHdvbid0IGRvIElETiBlbmNvZGluZywgd2hpY2ggaXMgYWxtb3N0
IGNlcnRhaW5seSBPSy4KICAgICBjb25zdCB1bnNpZ25lZCBob3N0bmFtZUJ1ZmZlckxlbmd0aCA9
IDIwNDg7CiAKLSAgICBpZiAocy5pc0FsbEFTQ0lJKCkgfHwgcy5sZW5ndGgoKSA+IGhvc3RuYW1l
QnVmZmVyTGVuZ3RoKQotICAgICAgICByZXR1cm4gczsKKyAgICBpZiAoc3RyTGVuID4gaG9zdG5h
bWVCdWZmZXJMZW5ndGggfHwgaXNBbGxBU0NJSShzdHIsIHN0ckxlbikpCisgICAgICAgIG91dHB1
dC0+YXBwZW5kKHN0ciwgc3RyTGVuKTsKIAogI2lmIFVTRShJQ1VfVU5JQ09ERSkKLSAgICBVQ2hh
ciBidWZmZXJbaG9zdG5hbWVCdWZmZXJMZW5ndGhdOyAgICAKKyAgICBVQ2hhciBidWZmZXJbaG9z
dG5hbWVCdWZmZXJMZW5ndGhdOwogICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7
Ci0gICAgaW50MzJfdCBudW1DaGFyYWN0ZXJzQ29udmVydGVkID0gdWlkbmFfSUROVG9BU0NJSQot
ICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihzLnVuaWNvZGUoKSksIHMu
bGVuZ3RoKCksIGJ1ZmZlciwgaG9zdG5hbWVCdWZmZXJMZW5ndGgsIFVJRE5BX0FMTE9XX1VOQVNT
SUdORUQsIDAsICZlcnJvcik7Ci0gICAgaWYgKGVycm9yICE9IFVfWkVST19FUlJPUikgewotICAg
ICAgICByZXR1cm4gczsKLSAgICB9Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxEZXByZWNhdGVkQ2hhciAqPihidWZmZXIpLCBudW1DaGFyYWN0ZXJzQ29udmVy
dGVkKTsKKyAgICBpbnQzMl90IG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQgPSB1aWRuYV9JRE5Ub0FT
Q0lJKAorICAgICAgICBzdHIsIHN0ckxlbiwgYnVmZmVyLCBob3N0bmFtZUJ1ZmZlckxlbmd0aCwg
VUlETkFfQUxMT1dfVU5BU1NJR05FRCwgMCwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IgIT0gVV9a
RVJPX0VSUk9SKQorICAgICAgICBvdXRwdXQtPmFwcGVuZChidWZmZXIsIG51bUNoYXJhY3RlcnND
b252ZXJ0ZWQpOwogI2VsaWYgVVNFKFFUNF9VTklDT0RFKQotICAgIFFCeXRlQXJyYXkgcmVzdWx0
ID0gUVVybDo6dG9BY2Uocyk7Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcocmVzdWx0LmNv
bnN0RGF0YSgpLCByZXN1bHQubGVuZ3RoKCkpOworICAgIFFCeXRlQXJyYXkgcmVzdWx0ID0gUVVy
bDo6dG9BY2Uocyk7ICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZywgYnV0IEkgZG9uJ3Qga25vdyB3
aGF0IGl0IHNob3VsZCBiZS4KKyAgICBvdXRwdXQtPmFwcGVuZChyZXN1bHQuY29uc3REYXRhLCBy
ZXN1bHQubGVuZ3RoKCkpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBWZWN0b3I8cGFpcjxpbnQsIGlu
dD4gPiBmaW5kSG9zdG5hbWVzSW5NYWlsVG9VUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykK
K3N0YXRpYyBWZWN0b3I8cGFpcjxpbnQsIGludD4gPiBmaW5kSG9zdG5hbWVzSW5NYWlsVG9VUkwo
Y29uc3QgVUNoYXIqIHN0ciwgaW50IHN0ckxlbikKIHsKICAgICAvLyBJbiBhIG1haWx0bzogVVJM
LCBob3N0IG5hbWVzIGNvbWUgYWZ0ZXIgYSAnQCcgY2hhcmFjdGVyIGFuZCBlbmQgd2l0aCBhICc+
JyBvciAnLCcgb3IgJz8nIG9yIGVuZCBvZiBzdHJpbmcgY2hhcmFjdGVyLgogICAgIC8vIFNraXAg
cXVvdGVkIHN0cmluZ3Mgc28gdGhhdCBjaGFyYWN0ZXJzIGluIHRoZW0gZG9uJ3QgY29uZnVzZSB1
cy4KQEAgLTEzMjUsMjQgKzEzMzQsMjIgQEAgc3RhdGljIFZlY3RvcjxwYWlyPGludCwgaW50PiA+
IGZpbmRIb3N0bgogICAgIGludCBwID0gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICAvLyBG
aW5kIHN0YXJ0IG9mIGhvc3QgbmFtZSBvciBvZiBxdW90ZWQgc3RyaW5nLgotICAgICAgICBpbnQg
aG9zdG5hbWVPclN0cmluZ1N0YXJ0ID0gcy5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJbXCJAP10i
KSwgcCk7Ci0gICAgICAgIGlmIChob3N0bmFtZU9yU3RyaW5nU3RhcnQgPT0gLTEpIHsKKyAgICAg
ICAgaW50IGhvc3RuYW1lT3JTdHJpbmdTdGFydCA9IGZpbmRGaXJzdE9mKHN0ciwgc3RyTGVuLCBw
LCAiXCJAPyIpOworICAgICAgICBpZiAoaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID09IC0xKQogICAg
ICAgICAgICAgcmV0dXJuIGE7Ci0gICAgICAgIH0KLSAgICAgICAgRGVwcmVjYXRlZENoYXIgYyA9
IHNbaG9zdG5hbWVPclN0cmluZ1N0YXJ0XTsKKyAgICAgICAgVUNoYXIgYyA9IHN0cltob3N0bmFt
ZU9yU3RyaW5nU3RhcnRdOwogICAgICAgICBwID0gaG9zdG5hbWVPclN0cmluZ1N0YXJ0ICsgMTsK
IAotICAgICAgICBpZiAoYyA9PSAnPycpIHsKKyAgICAgICAgaWYgKGMgPT0gJz8nKQogICAgICAg
ICAgICAgcmV0dXJuIGE7Ci0gICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGMgPT0g
J0AnKSB7CiAgICAgICAgICAgICAvLyBGaW5kIGVuZCBvZiBob3N0IG5hbWUuCiAgICAgICAgICAg
ICBpbnQgaG9zdG5hbWVTdGFydCA9IHA7Ci0gICAgICAgICAgICBpbnQgaG9zdG5hbWVFbmQgPSBz
LmZpbmQoUmVndWxhckV4cHJlc3Npb24oIls+LD9dIiksIHApOworICAgICAgICAgICAgaW50IGhv
c3RuYW1lRW5kID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIHAsICI+LD8iKTsKICAgICAgICAg
ICAgIGJvb2wgZG9uZTsKICAgICAgICAgICAgIGlmIChob3N0bmFtZUVuZCA9PSAtMSkgewotICAg
ICAgICAgICAgICAgIGhvc3RuYW1lRW5kID0gcy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBo
b3N0bmFtZUVuZCA9IHN0ckxlbjsKICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcCA9IGhvc3RuYW1lRW5kOwpAQCAtMTM1
NywyMCArMTM2NCwyMCBAQCBzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gZmluZEhvc3Ru
CiAgICAgICAgICAgICAvLyBTa2lwIHF1b3RlZCBzdHJpbmcuCiAgICAgICAgICAgICBBU1NFUlQo
YyA9PSAnIicpOwogICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICBpbnQg
ZXNjYXBlZENoYXJhY3Rlck9yU3RyaW5nRW5kID0gcy5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJb
XCJcXF0iKSwgcCk7CisgICAgICAgICAgICAgICAgaW50IGVzY2FwZWRDaGFyYWN0ZXJPclN0cmlu
Z0VuZCA9IGZpbmRGaXJzdE9mKHN0ciwgc3RyTGVuLCBwLCAiXCJcXCIpOwogICAgICAgICAgICAg
ICAgIGlmIChlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgPT0gLTEpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhOwogCi0gICAgICAgICAgICAgICAgYyA9IHNbZXNjYXBlZENoYXJhY3Rl
ck9yU3RyaW5nRW5kXTsKKyAgICAgICAgICAgICAgICBjID0gc3RyW2VzY2FwZWRDaGFyYWN0ZXJP
clN0cmluZ0VuZF07CiAgICAgICAgICAgICAgICAgcCA9IGVzY2FwZWRDaGFyYWN0ZXJPclN0cmlu
Z0VuZCArIDE7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBh
cmUgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCB0aGVuIGJyZWFrIGZyb20gdGhlIHN0cmluZyBsb29w
IGJhY2sgdG8gdGhlIGhvc3QgbmFtZSBsb29wLgogICAgICAgICAgICAgICAgIGlmIChjID09ICci
JykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAvLyBTa2lwIGVzY2FwZWQgY2hhcmFjdGVyLgogICAgICAgICAgICAgICAgIEFT
U0VSVChjID09ICdcXCcpOwotICAgICAgICAgICAgICAgIGlmIChwID09IHN0YXRpY19jYXN0PGlu
dD4ocy5sZW5ndGgoKSkpCisgICAgICAgICAgICAgICAgaWYgKHAgPT0gc3RyTGVuKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYTsKIAogICAgICAgICAgICAgICAgICsrcDsKQEAgLTEzNzks
MTIxICsxMzg2LDEyMyBAQCBzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gZmluZEhvc3Ru
CiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVSTChj
b25zdCBEZXByZWNhdGVkU3RyaW5nICZzLCBpbnQgJnN0YXJ0T2Zmc2V0LCBpbnQgJmVuZE9mZnNl
dCkKK3N0YXRpYyBib29sIGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKGNvbnN0IFVDaGFy
KiBzdHIsIGludCBzdHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQqIHN0YXJ0T2Zmc2V0LCBpbnQqIGVuZE9mZnNldCkKIHsKICAgICAvLyBGaW5kIHRo
ZSBob3N0IG5hbWUgaW4gYSBoaWVyYXJjaGljYWwgVVJMLgotICAgIC8vIEl0IGNvbWVzIGFmdGVy
IGEgIjovLyIgc2VxdWVuY2UsIHdpdGggc2NoZW1lIGNoYXJhY3RlcnMgcHJlY2VkaW5nLgotICAg
IC8vIElmIGVuZHMgd2l0aCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgb3IgYSAiOiIgb3IgYSBwYXRo
IHNlZ21lbnQgZW5kaW5nIGNoYXJhY3Rlci4KKyAgICAvLyBJdCBjb21lcyBhZnRlciBhICI6Ly8i
IHNlcXVlbmNlLCB3aXRoIHNjaGVtZSBjaGFyYWN0ZXJzIHByZWNlZGluZywgYW5kCisgICAgLy8g
dGhpcyBzaG91bGQgYmUgdGhlIGZpcnN0IGNvbG9uIGluIHRoZSBzdHJpbmcuCisgICAgLy8gSXQg
ZW5kcyB3aXRoIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBvciBhICI6IiBvciBhIHBhdGggc2VnbWVu
dCBlbmRpbmcgY2hhcmFjdGVyLgogICAgIC8vIElmIHRoZXJlIGlzIGEgIkAiIGNoYXJhY3Rlciwg
dGhlIGhvc3QgcGFydCBpcyBqdXN0IHRoZSBwYXJ0IGFmdGVyIHRoZSAiQCIuCi0gICAgaW50IHNl
cGFyYXRvciA9IHMuZmluZCgiOi8vIik7Ci0gICAgaWYgKHNlcGFyYXRvciA8PSAwKSB7CisgICAg
aW50IHNlcGFyYXRvciA9IGZpbmRGaXJzdE9mKHN0ciwgc3RyTGVuLCAwLCAiOiIpOworICAgIGlm
IChzZXBhcmF0b3IgPT0gLTEgfHwgc2VwYXJhdG9yICsgMiA+PSBzdHJMZW4gfHwKKyAgICAgICAg
c3RyW3NlcGFyYXRvciArIDFdICE9ICcvJyB8fCBzdHJbc2VwYXJhdG9yICsgMl0gIT0gJy8nKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCiAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgY2hh
cmFjdGVycyBiZWZvcmUgdGhlIDovLyBhcmUgdmFsaWQgc2NoZW1lIGNoYXJhY3RlcnMuCi0gICAg
aWYgKCFpc1NjaGVtZUZpcnN0Q2hhcihzWzBdLmxhdGluMSgpKSkgeworICAgIGlmICghaXNTY2hl
bWVGaXJzdENoYXIoc3RyWzBdKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICBm
b3IgKGludCBpID0gMTsgaSA8IHNlcGFyYXRvcjsgKytpKSB7Ci0gICAgICAgIGlmICghaXNTY2hl
bWVDaGFyKHNbaV0ubGF0aW4xKCkpKSB7CisgICAgICAgIGlmICghaXNTY2hlbWVDaGFyKHN0cltp
XSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAv
LyBTdGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLgogICAgIGludCBhdXRob3JpdHlTdGFydCA9IHNl
cGFyYXRvciArIDM7CiAKICAgICAvLyBGaW5kIHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KLSAgICBp
bnQgbGVuZ3RoID0gcy5sZW5ndGgoKTsKLSAgICBpbnQgaG9zdG5hbWVFbmQgPSBsZW5ndGg7Ci0g
ICAgZm9yIChpbnQgaSA9IGF1dGhvcml0eVN0YXJ0OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgY2hhciBjID0gc1tpXS5sYXRpbjEoKTsKLSAgICAgICAgaWYgKGMgPT0gJzonIHx8IChpc1Bh
dGhTZWdtZW50RW5kQ2hhcihjKSAmJiBjICE9ICdcMCcpKSB7CisgICAgaW50IGhvc3RuYW1lRW5k
ID0gc3RyTGVuOworICAgIGZvciAoaW50IGkgPSBhdXRob3JpdHlTdGFydDsgaSA8IHN0ckxlbjsg
KytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBzdHJbaV07CisgICAgICAgIGlmIChjID09ICc6JyB8
fCAoaXNQYXRoU2VnbWVudEVuZENoYXIoYykgJiYgYyAhPSAwKSkgewogICAgICAgICAgICAgaG9z
dG5hbWVFbmQgPSBpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBGaW5kICJAIiBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBob3N0IG5hbWUuCi0gICAgaW50IHVz
ZXJJbmZvVGVybWluYXRvciA9IHMuZmluZCgnQCcsIGF1dGhvcml0eVN0YXJ0KTsKKyAgICBpbnQg
dXNlckluZm9UZXJtaW5hdG9yID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIGF1dGhvcml0eVN0
YXJ0LCAiQCIpOwogICAgIGludCBob3N0bmFtZVN0YXJ0OwotICAgIGlmICh1c2VySW5mb1Rlcm1p
bmF0b3IgPT0gLTEgfHwgdXNlckluZm9UZXJtaW5hdG9yID4gaG9zdG5hbWVFbmQpIHsKKyAgICBp
ZiAodXNlckluZm9UZXJtaW5hdG9yID09IC0xIHx8IHVzZXJJbmZvVGVybWluYXRvciA+IGhvc3Ru
YW1lRW5kKQogICAgICAgICBob3N0bmFtZVN0YXJ0ID0gYXV0aG9yaXR5U3RhcnQ7Ci0gICAgfSBl
bHNlIHsKKyAgICBlbHNlCiAgICAgICAgIGhvc3RuYW1lU3RhcnQgPSB1c2VySW5mb1Rlcm1pbmF0
b3IgKyAxOwotICAgIH0KIAotICAgIHN0YXJ0T2Zmc2V0ID0gaG9zdG5hbWVTdGFydDsKLSAgICBl
bmRPZmZzZXQgPSBob3N0bmFtZUVuZDsKKyAgICAqc3RhcnRPZmZzZXQgPSBob3N0bmFtZVN0YXJ0
OworICAgICplbmRPZmZzZXQgPSBob3N0bmFtZUVuZDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZW5jb2RlSG9zdG5hbWVzKGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJnMpCisvLyBDb252ZXJ0cyBhbGwgaG9zdG5hbWVzIGZvdW5kIGluIHRoZSBnaXZlbiBp
bnB1dCB0byBwdW55Y29kZSwgcHJlc2VydmluZyB0aGUKKy8vIHJlc3Qgb2YgdGhlIFVSTCB1bmNo
YW5nZWQuIFRoZSBvdXRwdXQgd2lsbCBOT1QgYmUgbnVsbC10ZXJtaW5hdGVkLgorc3RhdGljIHZv
aWQgZW5jb2RlSG9zdG5hbWVzKGNvbnN0IFN0cmluZyYgc3RyLCBUZW1wVUNoYXJCdWZmZXIqIG91
dHB1dCkKIHsKLSAgICBpZiAocy5zdGFydHNXaXRoKCJtYWlsdG86IiwgZmFsc2UpKSB7Ci0gICAg
ICAgIGNvbnN0IFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGhvc3RuYW1lUmFuZ2VzID0gZmluZEhv
c3RuYW1lc0luTWFpbFRvVVJMKHMpOworICAgIG91dHB1dC0+cmVzaXplKDApOworCisgICAgaWYg
KHN0ci5zdGFydHNXaXRoKCJtYWlsdG86IiwgZmFsc2UpKSB7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjxwYWlyPGludCwgaW50PiA+IGhvc3RuYW1lUmFuZ2VzID0gZmluZEhvc3RuYW1lc0luTWFpbFRv
VVJMKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSk7CiAgICAgICAgIGludCBuID0gaG9z
dG5hbWVSYW5nZXMuc2l6ZSgpOwotICAgICAgICBpZiAobiAhPSAwKSB7Ci0gICAgICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHAgPSAwOwotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBwYWlyPGludCwgaW50PiAmciA9IGhvc3RuYW1lUmFuZ2VzW2ldOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBzLm1pZChwLCByLmZpcnN0KTsKLSAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gZW5jb2RlSG9zdG5hbWUocy5taWQoci5maXJzdCwgci5zZWNvbmQgLSByLmZpcnN0KSk7Ci0g
ICAgICAgICAgICAgICAgcCA9IHIuc2Vjb25kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmVzdWx0ICs9IHMubWlkKHApOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQorICAgICAgICBpbnQgcCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgICAgICBjb25zdCBwYWlyPGludCwgaW50PiAmciA9IGhvc3RuYW1lUmFuZ2Vz
W2ldOworICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoJnN0ci5jaGFyYWN0ZXJzKClbcF0sIHIu
Zmlyc3QgLSBwKTsKKyAgICAgICAgICAgIGFwcGVuZEVuY29kZWRIb3N0bmFtZSgmc3RyLmNoYXJh
Y3RlcnMoKVtyLmZpcnN0XSwgci5zZWNvbmQgLSByLmZpcnN0LCBvdXRwdXQpOworICAgICAgICAg
ICAgcCA9IHIuc2Vjb25kOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgd2lsbCBjb3B5IGVp
dGhlciBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IG5vc3RuYW1lLCBvciB0aGUKKyAgICAgICAg
Ly8gd2hvbGUgdGhpbmcgaWYgdGhlcmUgaXMgbm8gaG9zdG5hbWUuCisgICAgICAgIG91dHB1dC0+
YXBwZW5kKCZzdHIuY2hhcmFjdGVycygpW3BdLCBzdHIubGVuZ3RoKCkgLSBwKTsKICAgICB9IGVs
c2UgewogICAgICAgICBpbnQgaG9zdFN0YXJ0LCBob3N0RW5kOwotICAgICAgICBpZiAoZmluZEhv
c3RuYW1lSW5IaWVyYXJjaGljYWxVUkwocywgaG9zdFN0YXJ0LCBob3N0RW5kKSkgewotICAgICAg
ICAgICAgcmV0dXJuIHMubGVmdChob3N0U3RhcnQpICsgZW5jb2RlSG9zdG5hbWUocy5taWQoaG9z
dFN0YXJ0LCBob3N0RW5kIC0gaG9zdFN0YXJ0KSkgKyBzLm1pZChob3N0RW5kKTsgCisgICAgICAg
IGlmIChmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVSTChzdHIuY2hhcmFjdGVycygpLCBzdHIu
bGVuZ3RoKCksICZob3N0U3RhcnQsICZob3N0RW5kKSkgeworICAgICAgICAgICAgb3V0cHV0LT5h
cHBlbmQoc3RyLmNoYXJhY3RlcnMoKSwgaG9zdFN0YXJ0KTsgIC8vIEJlZm9yZSBob3N0bmFtZS4K
KyAgICAgICAgICAgIGFwcGVuZEVuY29kZWRIb3N0bmFtZSgmc3RyLmNoYXJhY3RlcnMoKVtob3N0
U3RhcnRdLCBob3N0RW5kIC0gaG9zdFN0YXJ0LCBvdXRwdXQpOworICAgICAgICAgICAgb3V0cHV0
LT5hcHBlbmQoJnN0ci5jaGFyYWN0ZXJzKClbaG9zdEVuZF0sIHN0ci5sZW5ndGgoKSAtIGhvc3RF
bmQpOyAgLy8gQWZ0ZXIgaG9zdG5hbWUuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBObyBob3N0bmFtZSB0byBlbmNvZGUsIHJldHVybiB0aGUgaW5wdXQuCisgICAgICAgICAgICBv
dXRwdXQtPmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOwogICAgICAgICB9
CiAgICAgfQotICAgIHJldHVybiBzOwogfQogCi1zdGF0aWMgY2hhciAqZW5jb2RlUmVsYXRpdmVT
dHJpbmcoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcmVsLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorc3RhdGljIHZvaWQgZW5jb2RlUmVsYXRpdmVTdHJp
bmcoY29uc3QgU3RyaW5nJiByZWwsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wQ2hhckJ1ZmZlciogb3V0cHV0KQogewot
ICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IGVuY29kZUhvc3RuYW1lcyhyZWwpOwotCi0gICAgY2hh
ciAqc3RyQnVmZmVyOworICAgIFRlbXBVQ2hhckJ1ZmZlciBzOworICAgIGVuY29kZUhvc3RuYW1l
cyhyZWwsICZzKTsKIAogICAgIFRleHRFbmNvZGluZyBwYXRoRW5jb2RpbmcoVVRGOEVuY29kaW5n
KCkpOwogICAgIFRleHRFbmNvZGluZyBvdGhlckVuY29kaW5nID0gKGVuY29kaW5nLmlzVmFsaWQo
KSAmJiAhcmVsLnN0YXJ0c1dpdGgoIm1haWx0bzoiLCBmYWxzZSkpID8gZW5jb2RpbmcgOiBVVEY4
RW5jb2RpbmcoKTsKLSAgICAKKwogICAgIGludCBwYXRoRW5kID0gLTE7CiAgICAgaWYgKHBhdGhF
bmNvZGluZyAhPSBvdGhlckVuY29kaW5nKSB7Ci0gICAgICAgIHBhdGhFbmQgPSBzLmZpbmQoUmVn
dWxhckV4cHJlc3Npb24oIls/I10iKSk7CisgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGluc3Rh
bmNlIG9mIGVpdGhlciAjIG9yID8sIGtlZXAgcGF0aEVuZCBhdCAtMSBvdGhlcndpc2UuCisgICAg
ICAgIGludCByZXN1bHQgPSBmaW5kRmlyc3RPZihzLmRhdGEoKSwgcy5zaXplKCksIDAsICIjPyIp
OworICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQorICAgICAgICAgICAgcGF0aEVuZCA9IHJlc3Vs
dDsKICAgICB9CisKICAgICBpZiAocGF0aEVuZCA9PSAtMSkgewotICAgICAgICBDU3RyaW5nIGRl
Y29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihzLnVuaWNvZGUoKSksIHMubGVuZ3RoKCkpOwotICAgICAgICBpbnQgZGVjb2RlZExlbmd0aCA9
IGRlY29kZWQubGVuZ3RoKCk7Ci0gICAgICAgIHN0ckJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIg
Kj4oZmFzdE1hbGxvYyhkZWNvZGVkTGVuZ3RoICsgMSkpOwotICAgICAgICBtZW1jcHkoc3RyQnVm
ZmVyLCBkZWNvZGVkLmRhdGEoKSwgZGVjb2RlZExlbmd0aCk7Ci0gICAgICAgIHN0ckJ1ZmZlcltk
ZWNvZGVkTGVuZ3RoXSA9IDA7CisgICAgICAgIENTdHJpbmcgZGVjb2RlZCA9IHBhdGhFbmNvZGlu
Zy5lbmNvZGUocy5kYXRhKCksIHMuc2l6ZSgpKTsKKyAgICAgICAgb3V0cHV0LT5yZXNpemUoZGVj
b2RlZC5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShvdXRwdXQtPmRhdGEoKSwgZGVjb2RlZC5k
YXRhKCksIGRlY29kZWQubGVuZ3RoKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBsZW5n
dGggPSBzLmxlbmd0aCgpOwotICAgICAgICBDU3RyaW5nIHBhdGhEZWNvZGVkID0gcGF0aEVuY29k
aW5nLmVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocy51bmljb2RlKCkpLCBw
YXRoRW5kKTsKLSAgICAgICAgQ1N0cmluZyBvdGhlckRlY29kZWQgPSBvdGhlckVuY29kaW5nLmVu
Y29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocy51bmljb2RlKCkpICsgcGF0aEVu
ZCwgbGVuZ3RoIC0gcGF0aEVuZCk7Ci0gICAgICAgIGludCBwYXRoRGVjb2RlZExlbmd0aCA9IHBh
dGhEZWNvZGVkLmxlbmd0aCgpOwotICAgICAgICBpbnQgb3RoZXJEZWNvZGVkTGVuZ3RoID0gb3Ro
ZXJEZWNvZGVkLmxlbmd0aCgpOwotICAgICAgICBzdHJCdWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFy
ICo+KGZhc3RNYWxsb2MocGF0aERlY29kZWRMZW5ndGggKyBvdGhlckRlY29kZWRMZW5ndGggKyAx
KSk7Ci0gICAgICAgIG1lbWNweShzdHJCdWZmZXIsIHBhdGhEZWNvZGVkLmRhdGEoKSwgcGF0aERl
Y29kZWRMZW5ndGgpOwotICAgICAgICBtZW1jcHkoc3RyQnVmZmVyICsgcGF0aERlY29kZWRMZW5n
dGgsIG90aGVyRGVjb2RlZC5kYXRhKCksIG90aGVyRGVjb2RlZExlbmd0aCk7Ci0gICAgICAgIHN0
ckJ1ZmZlcltwYXRoRGVjb2RlZExlbmd0aCArIG90aGVyRGVjb2RlZExlbmd0aF0gPSAwOwotICAg
IH0KKyAgICAgICAgQ1N0cmluZyBwYXRoRGVjb2RlZCA9IHBhdGhFbmNvZGluZy5lbmNvZGUocy5k
YXRhKCksIHBhdGhFbmQpOworICAgICAgICBDU3RyaW5nIG90aGVyRGVjb2RlZCA9IG90aGVyRW5j
b2RpbmcuZW5jb2RlKHMuZGF0YSgpICsgcGF0aEVuZCwgcy5zaXplKCkgLSBwYXRoRW5kKTsKIAot
ICAgIHJldHVybiBzdHJCdWZmZXI7CisgICAgICAgIG91dHB1dC0+cmVzaXplKHBhdGhEZWNvZGVk
Lmxlbmd0aCgpICsgb3RoZXJEZWNvZGVkLmxlbmd0aCgpKTsKKyAgICAgICAgbWVtY3B5KG91dHB1
dC0+ZGF0YSgpLCBwYXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVkLmxlbmd0aCgpKTsKKyAg
ICAgICAgbWVtY3B5KG91dHB1dC0+ZGF0YSgpICsgcGF0aERlY29kZWQubGVuZ3RoKCksIG90aGVy
RGVjb2RlZC5kYXRhKCksIG90aGVyRGVjb2RlZC5sZW5ndGgoKSk7CisgICAgfQorICAgIG91dHB1
dC0+YXBwZW5kKDApOyAgLy8gbnVsbC10ZXJtaW5hdGUgdGhlIG91dHB1dC4KIH0KIAotc3RhdGlj
IERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJnN0cmluZykKK3N0YXRpYyBTdHJpbmcgc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewogICAgIGludCBxdWVzdGlvblBvcyA9IHN0cmluZy5maW5kKCc/
Jyk7CiAgICAgaW50IGhhc2hQb3MgPSBzdHJpbmcuZmluZCgnIycpOwotICAgIHVuc2lnbmVkIHBh
dGhFbmQ7Ci0gICAgCisgICAgaW50IHBhdGhFbmQ7CisKICAgICBpZiAoaGFzaFBvcyA+PSAwICYm
IChxdWVzdGlvblBvcyA8IDAgfHwgcXVlc3Rpb25Qb3MgPiBoYXNoUG9zKSkgewogICAgICAgICBw
YXRoRW5kID0gaGFzaFBvczsKICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uUG9zID49IDApIHsKQEAg
LTE1MDIsMjEgKzE1MTEsMjEgQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0ZUJh
Y2tzbAogICAgICAgICBwYXRoRW5kID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIH0KIAotICAgIHJl
dHVybiBzdHJpbmcubGVmdChwYXRoRW5kKS5yZXBsYWNlKCdcXCcsJy8nKSArIHN0cmluZy5taWQo
cGF0aEVuZCk7CisgICAgcmV0dXJuIHN0cmluZy5sZWZ0KHBhdGhFbmQpLnJlcGxhY2UoJ1xcJywn
LycpICsgc3RyaW5nLnN1YnN0cmluZyhwYXRoRW5kKTsKIH0KIAogYm9vbCBLVVJMOjppc0hpZXJh
cmNoaWNhbCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBBU1NFUlQodXJsU3RyaW5nW3NjaGVtZUVuZFBvc10gPT0gJzonKTsKLSAgICBy
ZXR1cm4gdXJsU3RyaW5nW3NjaGVtZUVuZFBvcyArIDFdID09ICcvJzsKKyAgICBBU1NFUlQobV9z
dHJpbmdbc2NoZW1lRW5kUG9zXSA9PSAnOicpOworICAgIHJldHVybiBtX3N0cmluZ1tzY2hlbWVF
bmRQb3MgKyAxXSA9PSAnLyc7CiB9CiAKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEtVUkw6OnByaW50
KCkgY29uc3QKIHsKLSAgICBwcmludGYoIiVzXG4iLCB1cmxTdHJpbmcuYXNjaWkoKSk7CisgICAg
cHJpbnRmKCIlc1xuIiwgbV9zdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAjZW5kaWYKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmgJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgS1VSTF9oCiAjZGVmaW5lIEtVUkxfaAogCi0jaW5j
bHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKQEAgLTUxLDE3ICs1MCwzNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgVGV4dEVuY29kaW5nOwogCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBLVVJMICZhLCBjb25zdCBLVVJMICZiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KKyAgICBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtVUkwmIGEsIGNvbnN0IEtVUkwmIGIpIHsgcmV0
dXJuICEoYSA9PSBiKTsgfQogCiAgICAgYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtVUkwm
LCBjb25zdCBLVVJMJik7CiAKIGNsYXNzIEtVUkwgewogcHVibGljOgorICAgIC8vIEdlbmVyYXRl
cyBhIFVSTCB3aGljaCBjb250YWlucyBhbiBpc051bGwgc3RyaW5nLgogICAgIEtVUkwoKTsKLSAg
ICBLVVJMKGNvbnN0IGNoYXIqKTsKLSAgICBLVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBEZXByZWNh
dGVkU3RyaW5nJik7Ci0gICAgS1VSTChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwotICAgIEtVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyYpOworCisgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGFuIGFic29sdXRlIFVSTCBzdHJpbmcuIEZv
ciB0aGUgY2hhciogdmVyc2lvbiwgdGhlCisgICAgLy8gc3RyaW5nJ3MgZW5jb2RpbmcgaXMgYXNz
dW1lZCB0byBiZSBmaW5hbC4gRm9yIHRoZSBzdHJpbmcgdmVyc2lvbiwgaXQKKyAgICAvLyB3aWxs
IGJlIHRyZWF0ZWQgYXMgVVRGLTguCisgICAgLy8KKyAgICAvLyBEQU5HRVIhIFRoaXMgZG9lcyBu
b3QgZG8gdGhpbmdzIGxpa2UgSUROLCBhbmQgdGhlIHJlc3VsdGluZyBob3N0IG5hbWUKKyAgICAv
LyB3aWxsIGJlIG1hbmdsZWQuIFVzZSBvbmx5IGlmIHlvdSBoYXZlIGFuIEFTQ0lJIHN0cmluZywg
b3Igb25lIHdoaWNoIGNhbWUKKyAgICAvLyBmcm9tIGEgS1VSTCBvcmlnaW5hbGx5LCBZb3UgYWxt
b3N0IGNlcnRhaW5seSB3YW50IHRvIHVzZToKKyAgICAvLyAgIEtVUkwoTlVSTCgpLCB5b3VyVVJM
KTsKKyAgICAvLyB3aGljaCB3aWxsIGRvIGV2ZXJ5dGhpbmcgcHJvcGVybHkgaW5zdGVhZCBvZiB0
aGVzZSBmdW5jdGlvbnMuCisgICAgZXhwbGljaXQgS1VSTChjb25zdCBjaGFyKik7CisgICAgZXhw
bGljaXQgS1VSTChjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIFJlc29sdmVzIHRoZSByZWxhdGl2
ZSBVUkwgd2l0aCB0aGUgZ2l2ZW4gYmFzZSBVUkwuIElmIHByb3ZpZGVkLCB0aGUKKyAgICAvLyBU
ZXh0RW5jb2RpbmcgaXMgdXNlZCB0byBlbmNvZGUgdGhlIHF1ZXJ5IGlmIHByb3ZpZGVkLiBUaGUg
cXVlcnkgZW5jb2RpbmcKKyAgICAvLyB3aWxsIGJlIFVURi04IG90aGVyd2lzZS4gVGhlIGJhc2Ug
VVJMIGNhbiBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAvLyByZWxhdGl2ZSBVUkwg
d2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhYnNvbHV0ZSAodGhpcyBpcyB0aGUgb25seSB3YXkgdG8K
KyAgICAvLyBwYXJzZSBhbiBhYnNvbHV0ZSBVUkwgd2l0aCBhIGN1c3RvbSBxdWVyeSBlbmNvZGlu
ZykuCisgICAgS1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlKTsK
KyAgICBLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0
IFRleHRFbmNvZGluZyYpOworCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIEtVUkwoTlNVUkwqKTsK
ICNlbmRpZgpAQCAtNzIsNDQgKzg5LDYzIEBAIHB1YmxpYzoKICAgICBLVVJMKGNvbnN0IFFVcmwm
KTsKICNlbmRpZgogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcu
aXNOdWxsKCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcu
aXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5p
c051bGwoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlz
RW1wdHkoKTsgfQogCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgVVJMIGhhcyBhIHBhdGgu
IE5vdGUgdGhhdCAiaHR0cDovL2Zvby5jb20vIiBoYXMgYQorICAgIC8vIHBhdGggb2YgIi8iLCBz
byB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUuIE9ubHkgaW52YWxpZCBvcgorICAgIC8v
IG5vbi1oaWVyYXJjaGljYWwgKGxpa2UgImphdmFzY3JpcHQ6IikgVVJMcyB3aWxsIGhhdmUgbm8g
cGF0aC4KICAgICBib29sIGhhc1BhdGgoKSBjb25zdDsKIAotICAgIFN0cmluZyBzdHJpbmcoKSBj
b25zdCB7IHJldHVybiB1cmxTdHJpbmc7IH0KLSAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBk
ZXByZWNhdGVkU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdXJsU3RyaW5nOyB9CisgICAgY29uc3Qg
U3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogCi0gICAgRGVwcmVj
YXRlZFN0cmluZyBwcm90b2NvbCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgaG9zdCgp
IGNvbnN0OworICAgIFN0cmluZyBwcm90b2NvbCgpIGNvbnN0OworICAgIFN0cmluZyBob3N0KCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgc2hvcnQgaW50IHBvcnQoKSBjb25zdDsKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHVzZXIoKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHBhc3MoKSBjb25z
dDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHBhdGgoKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3Ry
aW5nIGxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBxdWVy
eSgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmKCkgY29uc3Q7CisgICAgU3RyaW5n
IHVzZXIoKSBjb25zdDsKKyAgICBTdHJpbmcgcGFzcygpIGNvbnN0OworICAgIFN0cmluZyBwYXRo
KCkgY29uc3Q7CisgICAgU3RyaW5nIGxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3Q7CisgICAgU3Ry
aW5nIHF1ZXJ5KCkgY29uc3Q7ICAvLyBXSUxMIGluY2x1ZGUgdGhlICI/Ii4KKyAgICBTdHJpbmcg
cmVmKCkgY29uc3Q7ICAgIC8vIFdJTEwgTk9UIGluY2x1ZGUgdGhlICIjIi4KICAgICBib29sIGhh
c1JlZigpIGNvbnN0OwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVkSHRtbFJlZigpIGNv
bnN0IHsgcmV0dXJuIHJlZigpOyB9CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50
IFVSTCdzIHByb3RvY29sIGlzIHRoZSBzYW1lIGFzIHRoZSBudWxsLQorICAgIC8vIHRlcm1pbmF0
ZWQgQVNDSUkgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBtdXN0IGJlIGxvd2VyLWNhc2UuCisgICAg
Ym9vbCBwcm90b2NvbElzKGNvbnN0IGNoYXIqKSBjb25zdDsKKworICAgIFN0cmluZyBlbmNvZGVk
SHRtbFJlZigpIGNvbnN0IHsgcmV0dXJuIHJlZigpOyB9CisKKyAgICB2b2lkIHNldFByb3RvY29s
KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0SG9zdChjb25zdCBTdHJpbmcmKTsKKworICAg
IC8vIFNldHRpbmcgdGhlIHBvcnQgdG8gMCB3aWxsIGNsZWFyIGFueSBwb3J0IGZyb20gdGhlIFVS
TC4KKyAgICB2b2lkIHNldFBvcnQodW5zaWduZWQgc2hvcnQpOworCisgICAgLy8gSW5wdXQgaXMg
bGlrZSAiZm9vLmNvbSIgb3IgImZvby5jb206ODAwMCIuCisgICAgdm9pZCBzZXRIb3N0QW5kUG9y
dChjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgc2V0VXNlcihjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIHNldFBhc3MoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBJZiB5b3UgcGFzcyBhbiBl
bXB0eSBwYXRoIGZvciBIVFRQIG9yIEhUVFBTIFVSTHMsIHRoZSByZXN1bHRpbmcgcGF0aAorICAg
IC8vIHdpbGwgYmUgIi8iLgorICAgIHZvaWQgc2V0UGF0aChjb25zdCBTdHJpbmcmKTsKKworICAg
IC8vIFRoZSBxdWVyeSBtYXkgYmVnaW4gd2l0aCBhIHF1ZXN0aW9uIG1hcmssIG9yLCBpZiBub3Qs
IG9uZSB3aWxsIGJlIGFkZGVkCisgICAgLy8gZm9yIHlvdS4gU2V0dGluZyB0aGUgcXVlcnkgdG8g
dGhlIGVtcHR5IHN0cmluZyB3aWxsIGxlYXZlIGEgIj8iIGluIHRoZQorICAgIC8vIFVSTCAod2l0
aCBub3RoaW5nIGFmdGVyIGl0KS4gVG8gY2xlYXIgdGhlIHF1ZXJ5LCBwYXNzIGFuIGlzTnVsbCgp
IHN0cmluZy4KKyAgICB2b2lkIHNldFF1ZXJ5KGNvbnN0IFN0cmluZyYpOwogCi0gICAgdm9pZCBz
ZXRQcm90b2NvbChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0SG9zdChj
b25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0UG9ydCh1bnNpZ25lZCBzaG9y
dCBpbnQpOwotICAgIHZvaWQgc2V0SG9zdEFuZFBvcnQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYp
OwotICAgIHZvaWQgc2V0VXNlcihjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQg
c2V0UGFzcyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0UGF0aChjb25z
dCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0UXVlcnkoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyAmKTsKLSAgICB2b2lkIHNldFJlZihjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwor
ICAgIHZvaWQgc2V0UmVmKGNvbnN0IFN0cmluZyYpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBw
cmV0dHlVUkwoKSBjb25zdDsKKyAgICBTdHJpbmcgcHJldHR5VVJMKCkgY29uc3Q7CiAKICNpZiBQ
TEFURk9STShDRikKICAgICBDRlVSTFJlZiBjcmVhdGVDRlVSTCgpIGNvbnN0OwogI2VuZGlmCiAj
aWYgUExBVEZPUk0oTUFDKQotICAgIE5TVVJMICpnZXROU1VSTCgpIGNvbnN0OworICAgIE5TVVJM
KiBnZXROU1VSTCgpIGNvbnN0OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgb3BlcmF0
b3IgUVVybCgpIGNvbnN0OwpAQCAtMTE4LDExICsxNTQsMTQgQEAgcHVibGljOgogICAgIGJvb2wg
aXNMb2NhbEZpbGUoKSBjb25zdDsKICAgICBTdHJpbmcgZmlsZVN5c3RlbVBhdGgoKSBjb25zdDsK
IAotICAgIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGRlY29kZV9zdHJpbmcoY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYpOwotICAgIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGRlY29kZV9zdHJpbmco
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwotICAgIHN0YXRp
YyBEZXByZWNhdGVkU3RyaW5nIGVuY29kZV9zdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYp
OwotICAgIAotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCAmLCBjb25zdCBL
VVJMICYpOworICAgIC8vIFVuZXNjYXBlcyB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIFVSTCBlc2Nh
cGluZyBydWxlcywgZ2l2ZW4gYW4gb3B0aW9uYWwKKyAgICAvLyBlbmNvZGluZyAoZGVmYXVsdGlu
ZyB0byBVVEYtOCBvdGhlcndpc2UpLiBEQU5HRVI6IElmIHRoZSBVUkwgaGFzICIlMDAiCisgICAg
Ly8gaW4gaXQsIHRoZSByZXN1bHRpbmcgc3RyaW5nIHdpbGwgaGF2ZSBlbWJlZGRlZCBudWxsIGNo
YXJhY3RlcnMhCisgICAgc3RhdGljIFN0cmluZyBkZWNvZGVfc3RyaW5nKGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyBTdHJpbmcgZGVjb2RlX3N0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBU
ZXh0RW5jb2RpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGVuY29kZV9zdHJpbmcoY29uc3QgU3Ry
aW5nJik7CisKKyAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtVUkwmLCBj
b25zdCBLVVJMJik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBwcmludCgpIGNvbnN0OwpA
QCAtMTMwLDEwICsxNjksMTUgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgaXNIaWVy
YXJjaGljYWwoKSBjb25zdDsKLSAgICB2b2lkIGluaXQoY29uc3QgS1VSTCYsIGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKLSAgICB2b2lkIHBhcnNlKGNvbnN0
IGNoYXIgKnVybCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAqb3JpZ2luYWxTdHJpbmcpOworICAg
IHZvaWQgaW5pdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVGV4dEVuY29kaW5n
Jik7CisKKyAgICAvLyBQYXJzZXMgdGhlIGdpdmVuIFVSTC4gVGhlIG9yaWdpbmFsU3RyaW5nIHBh
cmFtZXRlciBhbGxvd3MgZm9yIGFuCisgICAgLy8gb3B0aW1pemF0aW9uIHdoZW4gdGhlIHNvdXJj
ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZml4ZWQtdXAgc3RyaW5nLCBpdCB3aWxsCisgICAgLy8gdXNl
IHN0cmluZyByZWZlcmVuY2UtY291bnRlZCBjb3BpZXMgaW5zdGVhZCBvZiBkb2luZyBhIG5ldyBh
bGxvY2F0aW9uLgorICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBwYXJz
ZShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFN0cmluZyogb3JpZ2luYWxTdHJpbmcpOwogCi0gICAg
RGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmc7CisgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJv
b2wgbV9pc1ZhbGlkOwogICAgIGludCBzY2hlbWVFbmRQb3M7CiAgICAgaW50IHVzZXJTdGFydFBv
czsKQEAgLTE0NCwxMCArMTg4LDIzIEBAIHByaXZhdGU6CiAgICAgaW50IHBhdGhFbmRQb3M7CiAg
ICAgaW50IHF1ZXJ5RW5kUG9zOwogICAgIGludCBmcmFnbWVudEVuZFBvczsKLSAgICAKLSAgICBm
cmllbmQgYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtVUkwmIGEsIGNvbnN0IEtVUkwmIGIp
OwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJM
JiBiKQoreworICAgIHJldHVybiBhLnN0cmluZygpID09IGIuc3RyaW5nKCk7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCYgYSwgY29uc3QgU3RyaW5nJiBiKQoreworICAg
IHJldHVybiBhLnN0cmluZygpID09IGI7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgU3RyaW5nJiBhLCBjb25zdCBLVVJMJiBiKQoreworICAgIHJldHVybiBhID09IGIuc3RyaW5n
KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEtVUkxfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9j
Zi9LVVJMQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2YvS1VSTENG
TmV0LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NmL0tVUkxDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJLVVJMLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDxDb3Jl
Rm91bmRhdGlvbi9DRlVSTC5oPgpAQCAtNTcsMTQgKzU4LDE2IEBAIEtVUkw6OktVUkwoQ0ZVUkxS
ZWYgdXJsKQogCiBDRlVSTFJlZiBLVVJMOjpjcmVhdGVDRlVSTCgpIGNvbnN0CiB7Ci0gICAgY29u
c3QgVUludDggKmJ5dGVzID0gKGNvbnN0IFVJbnQ4ICopdXJsU3RyaW5nLmxhdGluMSgpOworICAg
IC8vIEZJWE1FOiBDb3VsZCBhdm9pZCBhbGxvY2F0aW9uIGluIHRoZSBjb21tb24gY2FzZSB1c2lu
ZyBhIGNvcHlMYXRpbjEgdGhhdCB1c2VkIGEgc3RhY2sgYnVmZmVyLgorICAgIENTdHJpbmcgbGF0
aW5TdHJpbmcgPSBtX3N0cmluZy5sYXRpbjEoKTsKKyAgICBjb25zdCBVSW50OCogYnl0ZXMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4obGF0aW5TdHJpbmcuZGF0YSgpKTsKICAgICAv
LyBOT1RFOiBXZSB1c2UgVVRGLTggaGVyZSBzaW5jZSB0aGlzIGVuY29kaW5nIGlzIHVzZWQgd2hl
biBjb21wdXRpbmcgc3RyaW5ncyB3aGVuIHJldHVybmluZyBVUkwgY29tcG9uZW50cwogICAgIC8v
IChlLmcgY2FsbHMgdG8gTlNVUkwgLXBhdGgpLiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIGlzIG5v
dCB0b2xlcmFudCBvZiBpbGxlZ2FsIFVURi04IHNlcXVlbmNlcywgd2hpY2gKICAgICAvLyBjb3Vs
ZCBlaXRoZXIgYmUgYSBtYWxmb3JtZWQgc3RyaW5nIG9yIGJ5dGVzIGluIGEgZGlmZmVyZW50IGVu
Y29kaW5nLCBsaWtlIFNoaWZ0LUpJUywgc28gd2UgZmFsbCBiYWNrCiAgICAgLy8gb250byB1c2lu
ZyBJU08gTGF0aW4tMSBpbiB0aG9zZSBjYXNlcy4KLSAgICBDRlVSTFJlZiByZXN1bHQgPSBDRlVS
TENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKDAsIGJ5dGVzLCB1cmxTdHJpbmcubGVuZ3RoKCks
IGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgMCwgdHJ1ZSk7CisgICAgQ0ZVUkxSZWYgcmVzdWx0ID0g
Q0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcygwLCBieXRlcywgbV9zdHJpbmcubGVuZ3Ro
KCksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgMCwgdHJ1ZSk7CiAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgIHJlc3VsdCA9IENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMoMCwgYnl0ZXMs
IHVybFN0cmluZy5sZW5ndGgoKSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIDAsIHRydWUp
OworICAgICAgICByZXN1bHQgPSBDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKDAsIGJ5
dGVzLCBtX3N0cmluZy5sZW5ndGgoKSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIDAsIHRy
dWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZp
c2lvbiAzMDExOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92aWUoYwogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgTlNEaWN0aW9uYXJ5KiBtb3ZpZUF0dHJpYnV0ZXMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgS1VSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKS5nZXROU1VSTCgpLCBRVE1vdmllVVJM
QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtVUkwodXJs
KS5nZXROU1VSTCgpLCBRVE1vdmllVVJMQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBRVE1vdmllUHJl
dmVudEV4dGVybmFsVVJMTGlua3NBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIFFUU2VjdXJpdHlQb2xp
Y3lOb0Nyb3NzU2l0ZUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuaWxdOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS1VSTE1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9LVVJMTWFjLm1tCShyZXZpc2lvbiAzMDExOCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0tVUkxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU1
LDEwICs1NSwxMCBAQCBLVVJMOjpLVVJMKE5TVVJMICp1cmwpCiAKIE5TVVJMICpLVVJMOjpnZXRO
U1VSTCgpIGNvbnN0CiB7Ci0gICAgaWYgKHVybFN0cmluZy5pc051bGwoKSkKKyAgICBpZiAoaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAvLyBDRlVSTCBjYW4ndCBob2xkIGFu
IGVtcHR5IFVSTCwgdW5saWtlIE5TVVJMCisgICAgLy8gQ0ZVUkwgY2FuJ3QgaG9sZCBhbiBlbXB0
eSBVUkwsIHVubGlrZSBOU1VSTC4KICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCIiXTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miwx
MSArMTcyLDExIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnBvcnRBbGxvd2VkKGNvbnN0IFIKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBBbGxvdyBwb3J0cyAyMSBhbmQgMjIgZm9yIEZU
UCBVUkxzLCBhcyBNb3ppbGxhIGRvZXMuCi0gICAgaWYgKChwb3J0ID09IDIxIHx8IHBvcnQgPT0g
MjIpICYmIHJlcXVlc3QudXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoImZ0cDoi
LCBmYWxzZSkpCisgICAgaWYgKChwb3J0ID09IDIxIHx8IHBvcnQgPT0gMjIpICYmIHJlcXVlc3Qu
dXJsKCkucHJvdG9jb2xJcygiZnRwIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8g
QWxsb3cgYW55IHBvcnQgbnVtYmVyIGluIGEgZmlsZSBVUkwsIHNpbmNlIHRoZSBwb3J0IG51bWJl
ciBpcyBpZ25vcmVkLgotICAgIGlmIChyZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5z
dGFydHNXaXRoKCJmaWxlOiIsIGZhbHNlKSkKKyAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2Nv
bElzKCJmaWxlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1h
Yy5tbQkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jl
c291cmNlRXJyb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgUmVzb3Vy
Y2VFcnJvcjo6b3BlcmF0b3IgTlNFcnJvciooKSBjb25zdAogCiAgICAgICAgIGlmICghbV9mYWls
aW5nVVJMLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgW3VzZXJJbmZvLmdldCgpIHNldFZhbHVl
Om1fZmFpbGluZ1VSTCBmb3JLZXk6QCJOU0Vycm9yRmFpbGluZ1VSTFN0cmluZ0tleSJdOwotICAg
ICAgICAgICAgW3VzZXJJbmZvLmdldCgpIHNldFZhbHVlOktVUkwobV9mYWlsaW5nVVJMLmRlcHJl
Y2F0ZWRTdHJpbmcoKSkuZ2V0TlNVUkwoKSBmb3JLZXk6QCJOU0Vycm9yRmFpbGluZ1VSTEtleSJd
OworICAgICAgICAgICAgW3VzZXJJbmZvLmdldCgpIHNldFZhbHVlOktVUkwobV9mYWlsaW5nVVJM
KS5nZXROU1VSTCgpIGZvcktleTpAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il07CiAgICAgICAgIH0K
IAogICAgICAgICBtX3BsYXRmb3JtRXJyb3IuYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRX
aXRoRG9tYWluOm1fZG9tYWluIGNvZGU6bV9lcnJvckNvZGUgdXNlckluZm86dXNlckluZm8uZ2V0
KCldKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJl
cXVlc3QuaAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3QgOiBwdWJsaWMgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29u
c3QgU3RyaW5nJiB1cmwpIAotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwo
dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAg
ICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTCh1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9s
aWN5KQogICAgICAgICB7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBLVVJMIEhpdFRlc3RS
ZXN1bHQ6OmFic29sdXRlSW1hZ2VVUkwoKSBjCiAgICAgZWxzZQogICAgICAgICByZXR1cm4gS1VS
TCgpOwogICAgIAotICAgIHJldHVybiBLVVJMKG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTCh1cmxTdHJpbmcpLmRlcHJlY2F0ZWRTdHJpbmcoKSkp
OworICAgIHJldHVybiBLVVJMKG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChwYXJzZVVSTCh1cmxTdHJpbmcpKSk7CiB9CiAKIEtVUkwgSGl0VGVzdFJlc3VsdDo6
YWJzb2x1dGVMaW5rVVJMKCkgY29uc3QKQEAgLTI1OSw3ICsyNTksNyBAQCBLVVJMIEhpdFRlc3RS
ZXN1bHQ6OmFic29sdXRlTGlua1VSTCgpIGNvCiAgICAgZWxzZQogICAgICAgICByZXR1cm4gS1VS
TCgpOwogCi0gICAgcmV0dXJuIEtVUkwobV9pbm5lclVSTEVsZW1lbnQtPmRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKHBhcnNlVVJMKHVybFN0cmluZykuZGVwcmVjYXRlZFN0cmluZygpKSk7CisgICAg
cmV0dXJuIEtVUkwobV9pbm5lclVSTEVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHBh
cnNlVVJMKHVybFN0cmluZykpKTsKIH0KIAogYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0xpdmVMaW5r
KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDMwMTE4
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjUsNyArMjI1LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludElu
ZgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHRleHQgPSBtX2FsdFRleHQuZGVw
cmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gbV9hbHRUZXh0
OwogICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5
U3ltYm9sKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZvbnQoc3R5bGUoKS0+Zm9u
dCgpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+Y29s
b3IoKSk7CkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNl
ZChQYWludEluZgogCiAgICAgICAgICAgICAgICAgLy8gT25seSBkcmF3IHRoZSBhbHQgdGV4dCBp
ZiBpdCdsbCBmaXQgd2l0aGluIHRoZSBjb250ZW50IGJveCwKICAgICAgICAgICAgICAgICAvLyBh
bmQgb25seSBpZiBpdCBmaXRzIGFib3ZlIHRoZSBlcnJvciBpbWFnZS4KLSAgICAgICAgICAgICAg
ICBUZXh0UnVuIHRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRleHQudW5p
Y29kZSgpKSwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVu
KHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICBpbnQg
dGV4dFdpZHRoID0gZm9udC53aWR0aCh0ZXh0UnVuKTsKICAgICAgICAgICAgICAgICBpZiAoZXJy
b3JQaWN0dXJlRHJhd24pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWJsZVdpZHRoID49
IHRleHRXaWR0aCAmJiBmb250LmhlaWdodCgpIDw9IGltYWdlWSkKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCB2b2lk
IFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFwaGljCiAgICAgICAgICAgICAgICAgICAg
IGhyZWYgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKCFocmVmLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEtVUkwgbGluayA9
IGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYuZGVwcmVjYXRlZFN0cmluZygp
KTsKKyAgICAgICAgICAgICAgICAgICAgS1VSTCBsaW5rKGVsZW1lbnQtPmRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKGhyZWYpKTsKICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRVUkxGb3JSZWN0KGxpbmssIHJlY3QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCShyZXZpc2lvbiAz
MDExOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSwxMCArNjEsMTAgQEAgUmVuZGVyUGFydE9iamVjdDo6flJlbmRlclBhcnRP
YmplY3QoKQogICAgICAgICBtX3ZpZXctPnJlbW92ZVdpZGdldFRvVXBkYXRlKHRoaXMpOwogfQog
Ci1zdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQgKmRvYywgY29uc3QgU3RyaW5nICZ1
cmwpCitzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5n
JiB1cmwpCiB7Ci0gICAgS1VSTCBuZXdVUkwoZG9jLT5jb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRl
ZFN0cmluZygpKSk7Ci0gICAgbmV3VVJMLnNldFJlZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsK
KyAgICBLVVJMIG5ld1VSTChkb2MtPmNvbXBsZXRlVVJMKHVybCkpOworICAgIG5ld1VSTC5zZXRS
ZWYoU3RyaW5nKCkpOwogICAgIAogICAgIGlmIChkb2MtPmZyYW1lKCktPnBhZ2UoKS0+ZnJhbWVD
b3VudCgpID49IDIwMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzQsNyArNzQsNyBAQCBz
dGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQgKmRvYywgCiAgICAgYm9vbCBmb3VuZFNl
bGZSZWZlcmVuY2UgPSBmYWxzZTsKICAgICBmb3IgKEZyYW1lICpmcmFtZSA9IGRvYy0+ZnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKICAgICAgICAgS1VS
TCBmcmFtZVVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0gICAgICAgIGZyYW1lVVJMLnNl
dFJlZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKKyAgICAgICAgZnJhbWVVUkwuc2V0UmVmKFN0
cmluZygpKTsKICAgICAgICAgaWYgKGZyYW1lVVJMID09IG5ld1VSTCkgewogICAgICAgICAgICAg
aWYgKGZvdW5kU2VsZlJlZmVyZW5jZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMzksOCArMTM5LDggQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9v
bAogICAgICAgSFRNTEVsZW1lbnQgKmVtYmVkT3JPYmplY3Q7CiAgICAgICBpZiAoZW1iZWQpIHsK
ICAgICAgICAgICBlbWJlZE9yT2JqZWN0ID0gKEhUTUxFbGVtZW50ICopZW1iZWQ7Ci0gICAgICAg
ICAgdXJsID0gZW1iZWQtPnVybDsKLSAgICAgICAgICBzZXJ2aWNlVHlwZSA9IGVtYmVkLT5tX3Nl
cnZpY2VUeXBlOworICAgICAgICAgIHVybCA9IGVtYmVkLT51cmwoKTsKKyAgICAgICAgICBzZXJ2
aWNlVHlwZSA9IGVtYmVkLT5zZXJ2aWNlVHlwZSgpOwogICAgICAgfSBlbHNlCiAgICAgICAgICAg
ZW1iZWRPck9iamVjdCA9IChIVE1MRWxlbWVudCAqKW87CiAgICAgICAKQEAgLTIzMSw4ICsyMzEs
OCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sCiAgIH0gZWxzZSBp
ZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewogICAgICAgSFRNTEVtYmVkRWxl
bWVudCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihlbGVtZW50KCkpOwogICAg
ICAgby0+c2V0TmVlZFdpZGdldFVwZGF0ZShmYWxzZSk7Ci0gICAgICB1cmwgPSBvLT51cmw7Ci0g
ICAgICBzZXJ2aWNlVHlwZSA9IG8tPm1fc2VydmljZVR5cGU7CisgICAgICB1cmwgPSBvLT51cmwo
KTsKKyAgICAgIHNlcnZpY2VUeXBlID0gby0+c2VydmljZVR5cGUoKTsKIAogICAgICAgaWYgKHVy
bC5pc0VtcHR5KCkgJiYgc2VydmljZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICAgIHJldHVybjsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDMw
MTE4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCi0jaW5jbHVkZSAi
RGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMzAxMTgpCisr
KyBXZWJDb3JlL3N2Zy9TVkdJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEx
ICs1MSwxMSBAQCB2b2lkIFNWR0ltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAg
CiAgICAgQ2FjaGVkSW1hZ2UgKm5ld0ltYWdlID0gMDsKICAgICBpZiAoIWltYWdlRWxlbWVudC0+
aHJlZigpLmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHVyaSA9IGltYWdl
RWxlbWVudC0+YmFzZVVSSSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHVy
aSA9IGltYWdlRWxlbWVudC0+YmFzZVVSSSgpOwogICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICB1cmkgPSBLVVJMKHVyaSwgaW1hZ2VFbGVtZW50LT5ocmVmKCkuZGVwcmVj
YXRlZFN0cmluZygpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAgICB1cmkgPSBLVVJM
KEtVUkwodXJpKSwgaW1hZ2VFbGVtZW50LT5ocmVmKCkpLnN0cmluZygpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB1cmkgPSBpbWFnZUVsZW1lbnQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5n
KCk7CisgICAgICAgICAgICB1cmkgPSBpbWFnZUVsZW1lbnQtPmhyZWYoKTsKICAgICAgICAgbmV3
SW1hZ2UgPSBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UodXJpKTsKICAgICB9CiAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3
LDcgQEAgYm9vbCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUgogICAgICAgICBt
X2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQ29udGVudFBvbGljeUNoZWNrKCk7IC8vIGNhbmNlbCBh
bnkgcG9saWN5IGNoZWNrcwogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0UHJvdmlz
aW9uYWxMb2FkKDApOwogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c2V0UmVzcG9uc2VNSU1F
VHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+YmVnaW4o
InBsYWNlaG9sZGVyLnN2ZyIpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50CisgICAgICAg
IG1fZnJhbWUtPmxvYWRlcigpLT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRv
Y3VtZW50CiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT53cml0ZShtX2RhdGEtPmRhdGEoKSwg
bV9kYXRhLT5zaXplKCkpOwogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZW5kKCk7CiAgICAg
fQpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBA
QCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlWE1MCiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gbV9kb2MtPmltcGxlbWVudGF0aW9uKCkt
PmNyZWF0ZURvY3VtZW50KDApOwogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+b3BlbigpOwot
ICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0VVJMKG1fdXJsLmRlcHJlY2F0ZWRTdHJpbmco
KSk7CisgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRVUkwobV91cmwuc3RyaW5nKCkpOwog
ICAgICAgICAgICAgLy8gRklYTUU6IHNldCBMYXN0LU1vZGlmaWVkIGFuZCBjb29raWVzIChjdXJy
ZW50bHksIHRob3NlIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgSFRNTERvY3VtZW50cykuCiAgICAg
ICAgICAgICBtX3Jlc3BvbnNlWE1MLT53cml0ZShTdHJpbmcobV9yZXNwb25zZVRleHQpKTsKICAg
ICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPmZpbmlzaFBhcnNpbmcoKTsKQEAgLTMyMSw3ICszMjEs
NyBAQCBib29sIFhNTEh0dHBSZXF1ZXN0Ojp1cmxNYXRjaGVzRG9jdW1lbnRECiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gYnV0IGEgcmVtb3RlIGRvY3VtZW50IGNhbiBvbmx5IGxvYWQg
ZnJvbSB0aGUgc2FtZSBwb3J0IG9uIHRoZSBzZXJ2ZXIKLSAgICBLVVJMIGRvY3VtZW50VVJMID0g
bV9kb2MtPnVybCgpOworICAgIEtVUkwgZG9jdW1lbnRVUkwobV9kb2MtPnVybCgpKTsKICAgICBp
ZiAoZG9jdW1lbnRVUkwucHJvdG9jb2woKS5sb3dlcigpID09IHVybC5wcm90b2NvbCgpLmxvd2Vy
KCkKICAgICAgICAgICAgICYmIGRvY3VtZW50VVJMLmhvc3QoKS5sb3dlcigpID09IHVybC5ob3N0
KCkubG93ZXIoKQogICAgICAgICAgICAgJiYgZG9jdW1lbnRVUkwucG9ydCgpID09IHVybC5wb3J0
KCkpCkBAIC0zNzEsOSArMzcxLDkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBT
dHJpbmcmIAogICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiSU5ERVgiIHx8IG1ldGhvZFVwcGVy
ID09ICJMT0NLIiB8fCBtZXRob2RVcHBlciA9PSAiTS1QT1NUIiB8fCBtZXRob2RVcHBlciA9PSAi
TUtDT0wiIHx8IG1ldGhvZFVwcGVyID09ICJNT1ZFIgogICAgICAgICB8fCBtZXRob2RVcHBlciA9
PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVwcGVyID09ICJQ
Uk9QRklORCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0aG9kVXBwZXIgPT0g
IlBVVCIgCiAgICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJVTkxPQ0siKQotICAgICAgICBtX21l
dGhvZCA9IG1ldGhvZFVwcGVyLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgbV9tZXRob2Qg
PSBtZXRob2RVcHBlcjsKICAgICBlbHNlCi0gICAgICAgIG1fbWV0aG9kID0gbWV0aG9kLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgbV9tZXRob2QgPSBtZXRob2Q7CiAKICAgICBtX2FzeW5j
ID0gYXN5bmM7CiAKQEAgLTM4Myw3ICszODMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVu
KGNvbnN0IFN0cmluZyYgCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgYXN5bmMsIGNvbnN0IFN0cmluZyYgdXNlciwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHModXJsKTsK
LSAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
CisgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVzZXIodXNlcik7CiAgICAgCiAgICAgb3Blbiht
ZXRob2QsIHVybFdpdGhDcmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0KQEAgLTM5MSw4ICszOTEs
OCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGJv
b2wgYXN5bmMsIGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHModXJsKTsKLSAg
ICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0g
ICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFBhc3MocGFzc3dvcmQuZGVwcmVjYXRlZFN0cmluZygp
KTsKKyAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyKTsKKyAgICB1cmxXaXRoQ3Jl
ZGVudGlhbHMuc2V0UGFzcyhwYXNzd29yZCk7CiAgICAgCiAgICAgb3BlbihtZXRob2QsIHVybFdp
dGhDcmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2
aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBFdmVudExpc3RlbmVyc01hcCBt
X2V2ZW50TGlzdGVuZXJzOwogCiAgICAgS1VSTCBtX3VybDsKLSAgICBEZXByZWNhdGVkU3RyaW5n
IG1fbWV0aG9kOworICAgIFN0cmluZyBtX21ldGhvZDsKICAgICBIVFRQSGVhZGVyTWFwIG1fcmVx
dWVzdEhlYWRlcnM7CiAgICAgU3RyaW5nIG1fbWltZVR5cGVPdmVycmlkZTsKICAgICBib29sIG1f
YXN5bmM7CkluZGV4OiBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJD
b3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBA
QCB2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldCgpCiAgICAgWFNMU3R5bGVTaGVldCogcGFy
ZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFwYXJlbnRTaGVldC0+aHJl
ZigpLmlzTnVsbCgpKQogICAgICAgICAvLyB1c2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0
aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJlZiA9IEtVUkwocGFyZW50U2hlZXQtPmhyZWYoKS5k
ZXByZWNhdGVkU3RyaW5nKCksIG1fc3RySHJlZi5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmluZygp
OworICAgICAgICBhYnNIcmVmID0gS1VSTChLVVJMKHBhcmVudFNoZWV0LT5ocmVmKCkpLCBtX3N0
ckhyZWYpLnN0cmluZygpOwogICAgIAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xlIGluIG91ciBp
bXBvcnQgY2hhaW4uICBJZiB3ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAgLy8gaW4gb3Vy
IHBhcmVudCBjaGFpbiB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCkluZGV4OiBX
ZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9Y
U0xTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL3htbC9YU0xTdHls
ZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgWFNMU3R5
bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChJU19YU0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbXBvcnQiKSkgewog
ICAgICAgICAgICAgICAgIHhtbENoYXIqIHVyaVJlZiA9IHhzbHRHZXROc1Byb3AoY3VyciwgKGNv
bnN0IHhtbENoYXIqKSJocmVmIiwgWFNMVF9OQU1FU1BBQ0UpOyAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBsb2FkQ2hpbGRTaGVldChEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRmOCgo
Y29uc3QgY2hhciopdXJpUmVmKSk7CisgICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoU3Ry
aW5nOjpmcm9tVVRGOCgoY29uc3QgY2hhciopdXJpUmVmKSk7CiAgICAgICAgICAgICAgICAgeG1s
RnJlZSh1cmlSZWYpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMo
KQogICAgICAgICB3aGlsZSAoY3VycikgewogICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgPT0g
WE1MX0VMRU1FTlRfTk9ERSAmJiBJU19YU0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1
cnIsICJpbmNsdWRlIikpIHsKICAgICAgICAgICAgICAgICB4bWxDaGFyKiB1cmlSZWYgPSB4c2x0
R2V0TnNQcm9wKGN1cnIsIChjb25zdCB4bWxDaGFyKikiaHJlZiIsIFhTTFRfTkFNRVNQQUNFKTsK
LSAgICAgICAgICAgICAgICBsb2FkQ2hpbGRTaGVldChEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRm
OCgoY29uc3QgY2hhciopdXJpUmVmKSk7CisgICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQo
U3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hhciopdXJpUmVmKSk7CiAgICAgICAgICAgICAgICAg
eG1sRnJlZSh1cmlSZWYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY3VyciA9IGN1cnIt
Pm5leHQ7CkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRT
aGVldHMoKQogICAgIH0KIH0KIAotdm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldChj
b25zdCBEZXByZWNhdGVkU3RyaW5nJiBocmVmKQordm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hp
bGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYpCiB7CiAgICAgUmVmUHRyPFhTTEltcG9ydFJ1bGU+
IGNoaWxkUnVsZSA9IG5ldyBYU0xJbXBvcnRSdWxlKHRoaXMsIGhyZWYpOwogICAgIGFwcGVuZChj
aGlsZFJ1bGUpOwpJbmRleDogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJD
b3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaGVja0xvYWRlZCgpOwogCiAgICAgdm9pZCBsb2Fk
Q2hpbGRTaGVldHMoKTsKLSAgICB2b2lkIGxvYWRDaGlsZFNoZWV0KGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcmIGhyZWYpOworICAgIHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVm
KTsKIAogICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0KCk7CiAKSW5kZXg6
IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIHht
bERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbAogICAgICAgICBjYXNlIFhTTFRfTE9BRF9E
T0NVTUVOVDogewogICAgICAgICAgICAgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY29udGV4dCA9
ICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciljdHh0OwogICAgICAgICAgICAgeG1sQ2hhciogYmFz
ZSA9IHhtbE5vZGVHZXRCYXNlKGNvbnRleHQtPmRvY3VtZW50LT5kb2MsIGNvbnRleHQtPm5vZGUp
OwotICAgICAgICAgICAgS1VSTCB1cmwoKGNvbnN0IGNoYXIqKWJhc2UsIChjb25zdCBjaGFyKil1
cmkpOworICAgICAgICAgICAgS1VSTCB1cmwoS1VSTCgoY29uc3QgY2hhciopYmFzZSksIChjb25z
dCBjaGFyKil1cmkpOwogICAgICAgICAgICAgeG1sRnJlZShiYXNlKTsKICAgICAgICAgICAgIFJl
c291cmNlRXJyb3IgZXJyb3I7CiAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
OwpAQCAtMzEyLDcgKzMxMiw3IEBAIHN0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZy
b21Ob2QKICAgICBpZiAoc291cmNlSXNEb2N1bWVudCkKICAgICAgICAgc291cmNlRG9jID0gKHht
bERvY1B0cilvd25lckRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKTsKICAgICBpZiAoIXNvdXJj
ZURvYykgewotICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0cmlu
Zyhvd25lckRvY3VtZW50LT5kb2NMb2FkZXIoKSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUpLCBz
b3VyY2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkgOiBEZXByZWNhdGVkU3RyaW5n
KCkpOworICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0cmluZyhv
d25lckRvY3VtZW50LT5kb2NMb2FkZXIoKSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUpLCBzb3Vy
Y2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkgOiBTdHJpbmcoKSk7CiAgICAgICAg
IHNob3VsZERlbGV0ZSA9IChzb3VyY2VEb2MgIT0gMCk7CiAgICAgfQogICAgIHJldHVybiBzb3Vy
Y2VEb2M7CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdF
eHRyYXMubW0JKHJldmlzaW9uIDMwMTE4KQorKysgV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmli
dXRlZFN0cmluZ0V4dHJhcy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBzdGF0
aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtCiAgICAgCiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyID0gZS0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOwogICAgIGlmICghYXR0
ci5pc0VtcHR5KCkpIHsKLSAgICAgICAgTlNVUkwgKlVSTCA9IEtVUkwoZS0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoYXR0ci5kZXByZWNhdGVkU3RyaW5nKCkpKS5nZXROU1VSTCgpOworICAgICAg
ICBOU1VSTCAqVVJMID0gS1VSTChlLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChhdHRyKSkuZ2V0
TlNVUkwoKTsKICAgICAgICAgd3JhcHBlciA9IFtba2l0KGUtPmRvY3VtZW50KCktPmZyYW1lKCkp
IF9kYXRhU291cmNlXSBfZmlsZVdyYXBwZXJGb3JVUkw6VVJMXTsKICAgICB9CiAgICAgaWYgKCF3
cmFwcGVyKSB7CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAzMDEx
OCkKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQkod29ya2luZyBjb3B5KQpA
QCAtODAyLDggKzgwMiw3IEBAIHR5cGVkZWYgc3RydWN0IHsKIAogLSAoTlNTdHJpbmcgKilfd2Vi
a2l0X3N0cmluZ0J5UmVwbGFjaW5nVmFsaWRQZXJjZW50RXNjYXBlcwogewotICAgIERlcHJlY2F0
ZWRTdHJpbmcgcyA9IEtVUkw6OmRlY29kZV9zdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6ZnJvbU5T
U3RyaW5nKHNlbGYpKTsKLSAgICByZXR1cm4gcy5nZXROU1N0cmluZygpOworICAgIHJldHVybiBL
VVJMOjpkZWNvZGVfc3RyaW5nKHNlbGYpOwogfQogCiAtIChOU1N0cmluZyAqKV93ZWJraXRfc2Ny
aXB0SWZKYXZhU2NyaXB0VVJMCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19095</attachid>
            <date>2008-02-12 13:15:32 -0800</date>
            <delta_ts>2008-02-13 23:53:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>KURLDeprecatedStringPatch.txt</filename>
            <type>text/plain</type>
            <size>413143</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUxIEBACisyMDA4LTAyLTEyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCYXNl
ZCBvbiB3b3JrIGJ5IE1hcnZpbiBEZWNrZXIgPG1hcnYuZGVja2VyQGdtYWlsLmNvbT4KKworICAg
ICAgICAtIGZpeCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzOAor
ICAgICAgICAgIEtVUkwgc2hvdWxkIHVzZSBTdHJpbmcgaW5zdGVhZCBvZiBEZXByZWNhdGVkU3Ry
aW5nCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0ODUKKyAgICAgICAgICBEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkIHdpbGwgY3Jhc2gg
aWYgdGhlIFVSTCBpc051bGwKKyAgICAgICAgICBhbmQgYSBzaW1pbGFyIHByb2JsZW0gaW4gSWNv
bkRhdGFiYXNlCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0ODcKKyAgICAgICAgICBLVVJMIGRvZXNuJ3QgcHJlc2VydmUgaXNOdWxsIHdo
ZW4gY29uc3RydWN0ZWQgd2l0aCBhIERlcHJlY2F0ZWRTdHJpbmcKKworICAgICAgICAtIGNoYW5n
ZWQgY29tcGxldGVVUkwgYW5kIHZhcmlvdXMgRE9NIGdldHRlcnMgdG8gcmV0dXJuIEtVUkwsIHRv
IGF2b2lkCisgICAgICAgICAgY29udmVyc2lvbiBiYWNrIGFuZCBmb3J0aCBmcm9tIEtVUkwgdG8g
U3RyaW5nCisKKyAgICAgICAgLSBjaGFuZ2VkIHRoZSBjb252ZXJzaW9uIG9mIEtVUkwgdG8gTlNV
Ukwgb3IgTlNTdHJpbmcgdG8gYmUgYXV0b21hdGljLAorICAgICAgICAgIHRvIGVhc2UgdGhlIHVz
ZSBvZiBLVVJMIGluIE9iamVjdGl2ZSBDIERPTSBiaW5kaW5ncywgYW5kIGVsaW1pbmF0ZWQKKyAg
ICAgICAgICB0aGUgZ2V0TlNVUkwgZnVuY3Rpb24KKworICAgICAgICAtIGJlY2F1c2UgSSBoYWQg
dG8gdmlzaXQgdGhlIERPTSBiaW5kaW5ncyBhbnl3YXksIGVsaW1pbmF0ZWQgYWxtb3N0IGFsbAor
ICAgICAgICAgIHRoZSB1c2Ugb2YgdGhlIEtKUyBuYW1lc3BhY2UgZm9yIHRoaW5ncyBpbiBXZWJD
b3JlCisKKyAgICAgICAgLSBmaXhlZCBIVE1MT3B0aW9uRWxlbWVudCBjb25zdHJ1Y3RvciB0byBj
aGVjayBmb3IgdW5kZWZpbmVkIHJhdGhlcgorICAgICAgICAgIHRoYW4gc2l6ZSBvZiB0aGUgYXJn
dW1lbnRzIGFycmF5CisKKyAgICAgICAgLSBlbGltaW5hdGVkIHNvbWUgb3RoZXIgdW5uZWNlc3Nh
cnkgdXNlcyBvZiBEZXByZWNhdGVkU3RyaW5nCisKKyAgICAgICAgLSBjaGFuZ2VkIFN0cmluZzo6
c3BsaXQgdG8gdGFrZSBhIFZlY3RvciBwYXJhbWV0ZXIgaW5zdGVhZCBvZiByZXR1cm5pbmcKKyAg
ICAgICAgICBhIFZlY3RvciwgZm9yIGJldHRlciBwZXJmb3JtYW5jZQorCisgICAgICAgIC0gYWRk
ZWQgYSBjb3VwbGUgb2YgbWlzc2luZyBjYWxscyB0byBkbyBsYXlvdXQgaW4gU1ZHIGltYWdlIGhh
bmRsaW5nOworICAgICAgICAgIEkgd2FzIGFibGUgdG8gcmVwcm9kdWNlIHRoZXNlIG9ubHkgYmVj
YXVzZSBJIGhhZCBicm9rZW4gVVJMcyBmb3IgYQorICAgICAgICAgIHdoaWxlIC0tIG5vdCBzdXJl
IGhvdyB0byByZXByb2R1Y2UgdGhlbSBub3cgYnV0IHRoZSBjaGFuZ2VzIGFyZQorICAgICAgICAg
IGNsZWFybHkgbmVlZGVkCisKKyAgICAgICAgUGVyZm9ybWFuY2UgdGVzdGluZyBzaG93cyB0aGlz
IHRvIGJlIGF0IGxlYXN0IGEgMSUgc3BlZWR1cC4KKworICAgICAgICBBZGRlZCBhIG5ldyBmdW5j
dGlvbiBwcm90b2NvbElzIHRvIGVmZmljaWVudGx5IGNvbXBhcmUgcHJvdG9jb2xzCisgICAgICAg
IHdpdGhvdXQgY2FzZSBlcnJvcnMgYW5kIGEgYmxhbmtVUkwgZnVuY3Rpb24gc28gd2UgZG9uJ3Qg
aGF2ZSB0bworICAgICAgICBjb2RlICJhYm91dDpibGFuayIgaW4gbXVsdGlwbGUgcGxhY2VzIGlu
IHRoZSBjb2RlIGFuZCBkb24ndCBoYXZlIHRvCisgICAgICAgIGNvbnN0cnVjdCBhIGZyYXNoIEtV
UkwgZWFjaCB0aW1lLiBNb3ZlZCBkZWNvZGVfc3RyaW5nIGFuZCBlbmNvZGVfc3RyaW5nCisgICAg
ICAgIG91dCBvZiBLVVJMIGFuZCBnYXZlIHRoZW0gY2xlYXJlciBuYW1lcy4KKworICAgICAgICBN
YWRlIEtVUkwgY29uc3RydWN0b3JzIGV4cGxpY2l0IHRvIGhpZ2hsaWdodCBwb3RlbnRpYWxseS1l
eHBlbnNpdmUKKyAgICAgICAgb3BlcmF0aW9ucyBhbmQgdGhlIHBvb3Igc2VtYW50aWNzIG9mIEtV
UkwncyBjb25zdHJ1Y3RvciB0aGF0IHRha2VzCisgICAgICAgIGEgU3RyaW5nLgorCisgICAgICAg
ICogV2ViQ29yZS5iYXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
QXR0ckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F0dHI6OnNldFZhbHVlKTogVXNl
IHByb3RvY29sSXMuCisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmg6
IEtKUyBuYW1lc3BhY2UgY2hhbmdlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGl0dG8uCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTog
RGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RvY3VtZW50Ojpsb2NhdGlvbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SlNEb2N1bWVudDo6c2V0TG9jYXRpb24pOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4K
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOiBLSlMgbmFtZXNwYWNlIGNoYW5nZS4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWxs
b3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChX
ZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6IEtKUyBuYW1lc3BhY2UgY2hhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6SlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyk6IERpdHRvLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKTogVXNlIHByb3RvY29sSXMuCisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldFNyYyk6IEtKUyBuYW1lc3Bh
Y2UgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRnJhbWVFbGVtZW50OjpzZXRMb2Nh
dGlvbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSUZyYW1lRWxlbWVudDo6c2V0U3Jj
KTogVXNlIHByb3RvY29sSXMuCisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxl
bWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbkVsZW1l
bnRDb25zdHJ1Y3Rvcjo6SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KTogQ2xl
YW5lZCB1cCB0aGUKKyAgICAgICAgc3RydWN0dXJlIGEgYml0IGFuZCBjaGFuZ2VkIGNoZWNraW5n
IHRvIGNoZWNrIGZvciB1bmRlZmluZWQgcmF0aGVyIHRoYW4KKyAgICAgICAgbnVtYmVyIG9mIGFy
Z3VtZW50cy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3Ry
dWN0b3IuaDogS0pTIG5hbWVzcGFjZSBjaGFuZ2UuCisgICAgICAgICogYmluZGluZ3MvanMvSlNM
b2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpwdXQpOiBFbGltaW5h
dGVkIHNvbWUgRGVwcmVjYXRlZFN0cmluZyB1c2UsCisgICAgICAgIGFuZCB1c2UgcHJvdG9jb2xJ
cy4KKyAgICAgICAgKFdlYkNvcmU6OmpzTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpqc0xvY2F0aW9uUHJvdG9GdW5jUmVsb2FkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpqc0xvY2F0aW9uUHJvdG9GdW5jQXNzaWduKTogRGl0dG8uCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbi5oOiBLSlMgbmFtZXNwYWNlIGNoYW5nZS4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU05hbWVkTm9kZU1hcDo6Y2FuR2V0SXRlbXNGb3JOYW1lKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcik6IERpdHRvLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbik6IERp
dHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uaDogRGl0
dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25PcGVuKTogUmVtb3Zl
ZAorICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6OmpzWE1M
SHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvblNlbmQpOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Lmg6IE1vdmVkIHRoaXMgY2xhc3MgaW50byB0aGUgV2Vi
Q29yZQorICAgICAgICBuYW1lc3BhY2UuCisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJv
Y2Vzc29yLmNwcDogTmFtZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hT
TFRQcm9jZXNzb3IuaDogRGl0dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGlu
Zy5jcHA6IFVwZGF0ZWQgZm9yIG5hbWVzcGFjZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpq
c1N0cmluZ09yTnVsbCk6IEFkZGVkIGFuIG92ZXJsb2FkIGZvciBLVVJMIHRvIGFsbG93IERPTQor
ICAgICAgICBjbGFzc2VzIHRvIHJldHVybiBLVVJMIGV2ZW4gaWYgdGhlIERPTSBleHBlY3RzIGEg
c3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdPclVuZGVmaW5lZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdPckZhbHNlKTogRGl0dG8uCisgICAgICAgICogYmlu
ZGluZ3MvanMva2pzX2JpbmRpbmcuaDogTW92ZWQgZXZlcnl0aGluZyBpbnRvIHRoZSBXZWJDb3Jl
CisgICAgICAgIG5hbWVzcGFjZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19jc3MuaDog
TmFtZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcDog
UmVtb3ZlZCBhbiBpbmNsdWRlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuaDog
TmFtZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5oOiBOYW1l
c3BhY2UgY2hhbmdlLgorCisgICAgICAgICogYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHA6
IE1vdmVkIGV2ZXJ5dGhpbmcgaW50byB0aGUKKyAgICAgICAgV2ViQ29yZSBuYW1lc3BhY2UuCisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oOiBEaXR0by4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwOgorICAgICAgICAoS0pTOjpwYXJzZU1vZGFsRGlh
bG9nRmVhdHVyZXMpOiBVcGRhdGVkIGZvciBTdHJpbmc6OnNwbGl0IGNoYW5nZS4KKyAgICAgICAg
KEtKUzo6Y3JlYXRlV2luZG93KTogVXNlIHByb3RvY29sSXMgYW5kIHJlbW92ZWQgc29tZSBEZXBy
ZWNhdGVkU3RyaW5nLgorICAgICAgICAoS0pTOjpXaW5kb3c6OnB1dCk6IERpdHRvLgorICAgICAg
ICAoS0pTOjpXaW5kb3c6OmFsbG93c0FjY2Vzc0Zyb20pOiBEaXR0by4KKyAgICAgICAgKEtKUzo6
d2luZG93UHJvdG9GdW5jT3Blbik6IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9E
T00ubW06CisgICAgICAgICgtW0RPTUVsZW1lbnQgX2dldFVSTEF0dHJpYnV0ZTpdKTogUmVtb3Zl
ZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbToKKyAg
ICAgICAgKC1bRE9NSFRNTERvY3VtZW50IF9jcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1
cFN0cmluZzpiYXNlVVJMU3RyaW5nOl0pOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBVcGRhdGVkIGZvciBuYW1lc3BhY2UgY2hhbmdlcywg
YW5kIGFsc28KKyAgICAgICAgdXBkYXRlZCBpbmNsdWRlcyBzbyBjb252ZXJzaW9ucyBmcm9tIEtV
Ukwgd2lsbCB3b3JrLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9i
akMucG06IFVwZGF0ZWQgaW5jbHVkZXMgc28gY29udmVyc2lvbnMgZnJvbQorICAgICAgICBLVVJM
IHdpbGwgd29yay4KKworICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tOgor
ICAgICAgICAoLVtXZWJDb3JlQVhPYmplY3QgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0p
OiBSZW1vdmVkIGdldE5TVVJMIGNhbGwuCisgICAgICAgIEFsc28gc3RyZWFtbGluZWQgdGhlIGxv
Z2ljLgorICAgICAgICAoQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dCk6IERpdHRvLgorCisg
ICAgICAgICogYnJpZGdlL21hYy9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW06CisgICAgICAgICh0
b05TU3RyaW5nKTogVHdlYWtlZC4KKyAgICAgICAgKHRvTlNVUkwpOiBSZW1vdmVkIGdldE5TVVJM
IGNhbGwuCisKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NJbWFnZVZhbHVlOjppbWFnZSk6IFJlbW92ZWQgRGVwcmVjYXRlZFN0cmluZyB1c2Uu
CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
SW1wb3J0UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KTogRGl0dG8uCisgICAgICAgICogY3NzL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb250ZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZEltYWdlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZSk6IERpdHRv
LgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OnNldEVuY29kZWRVUkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OmNoZWNrUHNldWRvU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5oOiBEaXR0by4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFMaXN0OjpzZXRNZWRpYVRleHQpOiBVcGRhdGVkIGZvciBTdHJpbmc6OnNw
bGl0IGNoYW5nZS4KKworICAgICAgICAqIGNzcy9TdHlsZUJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCYXNlOjpiYXNlVVJMKTogUmV0dXJuIEtVUkwuCisgICAgICAgICogY3NzL1N0
eWxlQmFzZS5oOiBESXR0by4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KTogVXBkYXRlZCBmb3IgbmFtZXNwYWNlIGNo
YW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFVSSSk6IFJldHVybiBL
VVJMLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldERvY3VtZW50VVJJKTogUmVtb3Zl
ZCBEZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpiYXNl
VVJJKTogUmV0dXJuIEtVUkwuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6b3Blbik6IFVw
ZGF0ZWQgdG8gdXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFVS
TCk6IFRha2UgS1VSTC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzaG91bGRCZUFsbG93
ZWRUb0xvYWRMb2NhbFJlc291cmNlcyk6IFVwZGF0ZWQgZm9yCisgICAgICAgIGNoYW5nZSB0byB1
c2UgS1VSTAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEJhc2VVUkwpOiBUYWtlIEtV
UkwuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudFNoZWV0KTogVXBkYXRlZCBm
b3IgS1VSTCBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bWFwcGVkRWxlbWVu
dFNoZWV0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBF
cXVpdik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2Vs
ZWN0b3IpOiBSZW1vdmVkIHVzZSBvZgorICAgICAgICBEZXByZWNhdGVkU3RyaW5nIC0tIGFsc28g
bm90aWNlZCBzb21lIGRlYWQgY29kZSBoZXJlIQorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnNldENvb2tpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBsZXRl
VVJMKTogUmV0dXJuIEtVUkwuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6IFVzZSBLVVJMIGlu
c3RlYWQgb2YgU3RyaW5nIGluIGEgZmV3IHBsYWNlcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVu
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUeXBlOjpiYXNlVVJJKTogUmV0
dXJuIEtVUkwuCisgICAgICAgICogZG9tL0RvY3VtZW50VHlwZS5oOiBEaXR0by4KKworICAgICAg
ICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmJhc2VVUkkp
OiBSZXR1cm4gS1VSTC4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOiBEaXR0by4KKworICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldERvY3VtZW50KTog
TmFtZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmJhc2VVUkkpOiBSZXR1
cm4gS1VSTC4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBEaXR0by4KKworICAgICAgICAqIGRvbS9Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAg
ICAgICAgKiBkb20vU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxl
bWVudDo6cHJvY2Vzcyk6IENoYW5nZWQgdG8gdXNlIFZlY3RvcjxVQ2hhcj4gaW5zdGVhZCBvZgor
ICAgICAgICBTdHJpbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQpOiBSZW1vdmVkIHVzZSBvZiBEZXByZWNhdGVTdHJp
bmcuCisgICAgICAgICogZG9tL1hNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
TUxUb2tlbml6ZXI6OmVuZEVsZW1lbnROcyk6IFVwZGF0ZWQgZm9yIEtVUkwgY2hhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OnhtbERvY1B0ckZvclN0cmluZyk6IFJlbW92ZWQgdXNlIG9mIERlcHJlY2F0ZVN0cmluZy4K
KyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmg6IERpdHRvLgorCisgICAgICAgICogZWRpdGlu
Zy9tYXJrdXAuY3BwOiBNb3ZlZCBhcHBlbmRTdHJpbmcgdG8gUGxhdGZvcm1TdHJpbmcuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKTogVXNlIHByb3Rv
Y29sSXMuCisgICAgICAgIChXZWJDb3JlOjpjb21wbGV0ZVVSTHMpOiBSZW1vdmVkIERlcHJlY2F0
ZWRTdHJpbmcgdXNlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KTogVXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbENvbnRhaW5lckZyb21TdHJp
bmcpOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcgdXNlLgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dCk6IERpdHRvLgorCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5
SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6dXJsKTogUmVtb3ZlZCBE
ZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpvcmln
aW5hbFVSTCk6IERpdHRvLgorICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaDogUmVtb3Zl
ZCBpbmNsdWRlLgorCisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IFJl
bW92ZWQgdXNlIG9mCisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQW5jaG9yRWxlbWVudDo6aHJlZik6IFJldHVybiBLVVJMLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6Omhhc2gpOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcgdXNl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6Omhvc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojpob3N0bmFtZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnBhdGhuYW1lKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6cG9ydCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnByb3RvY29sKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6c2VhcmNoKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6dG9TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBodG1s
L0hUTUxBbmNob3JFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEFwcGxldEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQ6OmNyZWF0ZVJl
bmRlcmVyKTogVXBkYXRlZCBmb3IgS1VSTCBjaGFuZ2UuCisgICAgICAgICogaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpocmVmKTog
UmV0dXJuIEtVUkwuCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuaDogRGl0dG8uCisg
ICAgICAgICogaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KTogVXBkYXRlZCBmb3IgS1VSTCBjaGFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQ6OnByb2Nlc3MpOiBSZW1vdmVk
IERlcHJlY2F0ZWRTdHJpbmcgdXNlLgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOiBSZW1vdmVkIHVzZSBvZgorICAgICAgICBEZXByZWNhdGVkU3RyaW5nLgor
ICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5oOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJp
bmcgdXNlLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24pOiBV
c2UgcHJvdG9jb2xJcy4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUNTdHJpbmcpOiBVcGRhdGVk
IGZvciBjaGFuZ2UgdG8gU3RyaW5nOjpzcGxpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6ZGF0YUVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OmZvcm1EYXRhKTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6aXNNYWlsdG9Gb3JtKTogVXNlIHByb3RvY29s
SXMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6IFVwZGF0ZWQg
Zm9yIEtVUkwgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZXNl
dCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJMQWxsb3dlZCk6IFVwZGF0
ZWQgZm9yIEtVUkwgY2hhbmdlCisgICAgICAgIGFuZCB1c2UgZXF1YWxJZ25vcmluZ1JlZiBpbnN0
ZWFkIG9mIGRvaW5nIGEgc2V0UmVmIHRvIGdldCB0aGUgc2FtZSBlZmZlY3QuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6b3BlblVSTCk6IFVzZSBibGFua1VSTC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbik6IFJldHVybiBL
VVJMLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OnNyYyk6IFJldHVy
biBLVVJMLgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaDogRGl0dG8uCisg
ICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogVXBkYXRlZCBmb3IgS1VSTCBj
aGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojpsb25nRGVzYyk6IFJl
dHVybiBLVVJMLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bG93c3JjKTog
UmV0dXJuIEtVUkwuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzcmMpOiBS
ZXR1cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDogRGl0dG8uIEFs
c28gcmVtb3ZlZCBpbWFnZU1hcCgpIGZ1bmN0aW9uLgorICAgICAgICAqIGh0bWwvSFRNTElucHV0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzcmMpOiBS
ZXR1cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDogRGl0dG8uCisg
ICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFVwZGF0ZWQgZm9yIEtVUkwgY2hh
bmdlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJp
YnV0ZSk6IFVwZGF0ZWQgZm9yIFN0cmluZzo6c3BsaXQgY2hhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50OjpocmVmKTogUmV0dXJuIEtVUkwuCisgICAgICAgICogaHRtbC9I
VE1MTGlua0VsZW1lbnQuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNyYyk6IFJldHVybiBL
VVJMLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGlja01lZGlhKTogVXBk
YXRlZCBmb3IgS1VSTCBjaGFuZ2UuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzSW1hZ2VUeXBlKTogVXNlIHByb3RvY29sSXMu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6ZGF0YSk6IFJldHVybiBLVVJM
LgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgICog
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRH
cm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVz
ZS4KKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBhcnNlcjo6cmVwb3J0RXJyb3JUb0NvbnNvbGUpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4K
KyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OnRleHQpOiBDaGFuZ2VkIHRvIHVzZSBWZWN0
b3I8VUNoYXI+IGluc3RlYWQgb2YKKyAgICAgICAgU3RyaW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6c3JjKTogUmV0dXJuIEtV
UkwuCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAg
KiBodG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3Vy
Y2VFbGVtZW50OjpzcmMpOiBSZXR1cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxTb3VyY2VF
bGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
IFVwZGF0ZWQgZm9yIEtVUkwgY2hhbmdlLgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKTogVXBkYXRlZCBmb3IgS1VSTCBjaGFuZ2UuCisgICAgICAgICogaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJl
YUVsZW1lbnQ6OnNldFZhbHVlKTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAg
ICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2Vu
aXplcjo6c2NyaXB0RXhlY3V0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9r
ZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6IFVzZSBwcm90b2NvbElzLgorICAgICAgICAqIGh0bWwv
SFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
Ojpwb3N0ZXIpOiBSZXR1cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZFRleHQpOiBVcGRhdGVk
IGZvciBTdHJpbmc6OnNwbGl0IGNoYW5nZS4KKworICAgICAgICAqIGxvYWRlci9Eb2NMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpjaGVja0ZvclJlbG9hZCk6IEFkZCBh
biBleHBsaWNpdCBjaGVjayBmb3IgYW4gZW1wdHkgVVJMCisgICAgICAgIGhlcmUgdG8gYXZvaWQg
cHJvYmxlbXMgdXNpbmcgaXRzIHN0cmluZyBhcyBhIGhhc2ggdGFibGUga2V5IGxhdGVyLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOiBSZW1vdmVkIERlcHJl
Y2F0ZWRTdHJpbmcgdXNlLgorCisgICAgICAgICogbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeVRva2VuaXplcjo6Y3JlYXRlVERG
b3JGaWxlbmFtZSk6IFVwZGF0ZWQgZm9yIEtVUkwgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6
RlRQRGlyZWN0b3J5VG9rZW5pemVyOjpwYXJzZUFuZEFwcGVuZE9uZUxpbmUpOiBSZW1vdmVkIHVz
ZSBvZgorICAgICAgICBEZXByZWNhdGVkU3RyaW5nLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUp
OiBVc2UgcHJvdG9jb2xJcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkU3Vi
ZnJhbWUpOiBVc2UgYmxhbmtVUkwuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3Vi
bWl0Rm9ybSk6IFVzZSBwcm90b2NvbElzIGFuZCByZW1vdmVkIHVzZSBvZgorICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omljb25VUkwpOiBS
ZXR1cm4gS1VSTC4gVXNlIHByb3Rjb2xJcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
OjpkaWRPcGVuVVJMKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6ZGlkRXhwbGljaXRPcGVuKTogVXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwpOiBVc2UgcHJvdG9jb2xJcy4KKyAg
ICAgICAgVXBkYXRlIGZvciBuYW1lIGNoYW5nZSB0byBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMu
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEpOiBVcGRh
dGVkIGZvciBLVVJMIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YmVn
aW4pOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcgdXNlLgorICAgICAgICBSZW5hbWVkIGJhc2V1
cmwgdG8gYmFzZVVSTC4gVXBkYXRlZCB0byB1c2UgS1VSTCBtb3JlLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmdvdG9BbmNob3IpOiBSZW1vdmVkIHVzZSBvZiBlbmNvZGVkSHRtbFJl
ZgorICAgICAgICBmdW5jdGlvbiwgd2hpY2ggaXMgbm8gZGlmZmVyZW50IGZyb20gcmVmLgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbXBsZXRlVVJMKTogVXBkYXRlZCBmb3IgS1VS
TCBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2NoZWR1bGVMb2NhdGlv
bkNoYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNhbkNhY2hl
UGFnZSk6IFVzZSBwcm90b2NvbElzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVw
ZGF0ZVBvbGljeUJhc2VVUkwpOiBVcGRhdGUgZm9yIEtVUkwgY2hhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OnNldFBvbGljeUJhc2VVUkwpOiBUYWtlIEtVUkwuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RhcnRSZWRpcmVjdGlvblRpbWVyKTogUmVtb3ZlZCB1
c2Ugb2YKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpsb2FkKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6c2hvdWxkSGlkZVJlZmVycmVyKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKTogVXBkYXRlZCBmb3IgS1VS
TCBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9u
YWxMb2FkKTogVXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9w
ZW4pOiBVc2UgcHJvdGNvbElzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0
ZUhpc3RvcnlJdGVtKTogVXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzd2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5
SWZSZWFkeSk6IFJlbW92ZWQKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB1c2UuCisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL0ltYWdl
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6Y3JlYXRlRG9j
dW1lbnRTdHJ1Y3R1cmUpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAgICAgICAgKiBsb2Fk
ZXIvUGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVG9rZW5pemVy
OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6aWNv
bkZvclBhZ2VVUkwpOiBBZGRlZCBhIGNoZWNrIGZvciBhbiBlbXB0eSBVUkwKKyAgICAgICAgYmVm
b3JlIHRyeWluZyB0byB1c2UgaXQgYXMgYSBoYXNoIHRhYmxlIGtleS4KKworICAgICAgICAqIGxv
YWRlci9pY29uL0ljb25Mb2FkZXIuaDogVHdlYWtlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGxv
YWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyk6IFVzZSBwcm90Y29sSXMuIEFsc28gcmVtb3ZlZCBzb21lCisgICAgICAgIGNvZGUg
dG8gc2V0IHVwIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBpcyBuZXZlciB1c2VkIChhbmQgYSBEZXBy
ZWNhdGVkU3RyaW5nCisgICAgICAgIG9uIHRvIGJvb3QhKS4KKworICAgICAgICAqIGxvYWRlci9t
YWMvTG9hZGVyTlNVUkxFeHRyYXMubToKKyAgICAgICAgKHN1Z2dlc3RlZEZpbGVuYW1lV2l0aE1J
TUVUeXBlKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSB0eXBlY2FzdC4KKworICAgICAgICAqIHBhZ2Uv
Q29udGV4dE1lbnVDb250cm9sbGVyLmNwcDogUmVtb3ZlZCBpbmNsdWRlLgorCisgICAgICAgICog
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpuZWVkc0tleWJvYXJkRXZlbnREaXNhbWJpZ3VhdGlvblF1aXJrcyk6CisgICAgICAgIFVz
ZSBwcm90b2NvbElzLgorCisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1t
OgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgVVJMV2l0aEF0dHJpYnV0ZVN0cmluZzpd
KTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2Ug
YmFzZVVSTF0pOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNTY2hlbWVGaXJzdENoYXIpOiBGaXhlZCBidWcgaW4gaGFuZGxpbmcgb2Yg
dmFsdWVzID49IDB4ODAuCisgICAgICAgIChXZWJDb3JlOjppc1NjaGVtZUNoYXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzUGF0aFNlZ21lbnRFbmRDaGFyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpoZXhEaWdpdFZhbHVlKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdHlwZSB0byBVQ2hh
ci4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlBU0NJSSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZmluZEZpcnN0T2YpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnByb3RvY29s
SXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOiBUaWdodGVuZWQgbG9n
aWMgdXAgcXVpdGUgYSBiaXQuIENoYW5nZWQgcGFyYW1ldGVyCisgICAgICAgIHR5cGVzIGZyb20g
RGVwcmVjYXRlZFN0cmluZyB0byBTdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjppbml0
KTogQ2hhbmdlZCBwYXJhbWV0ZXIgdHlwZSB0byBTdHJpbmcuIFByZXNlcnZlZCB0aGUKKyAgICAg
ICAgcGFzc2VkLWluIHN0cmluZyBldmVuIGlmIHRoZSBiYXNlIGlzIGludmFsaWQuIENsZWFuZWQg
dXAgbG9naWMgdG8gZGV0ZXJtaW5lCisgICAgICAgIGlmIHRoZSBvcmlnaW5hbFN0cmluZyBzaG91
bGQgYmUgcGFzZWQgaW4gdG8gdGhlIHBhcnNlIGZ1bmN0aW9uLiBTaW1wbGlmaWVkCisgICAgICAg
IGJ5IGNhbGxpbmcgdGhlIG5ldyBwYXJzZSBvdmVybG9hZCB0aGF0IHRha2VzIFN0cmluZyBpbiBt
YW55IGNhc2VzLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6bGFzdFBhdGhDb21wb25lbnQpOiBS
ZXR1cm4gU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cHJvdG9jb2wpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6Omhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OktVUkw6OnBvcnQpOiBDaGFuZ2VkIGxvZ2ljIHRvIHVzZSBlYXJseSByZXR1cm4gZm9yIGNsYXJp
dHkuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXNzKTogUmV0dXJuIFN0cmluZy4KKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OnVzZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6
OnJlZik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6YXNzZXJ0UHJvdG9jb2xJc0dvb2QpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnByb3RvY29sSXMpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OnF1ZXJ5KTogUmV0dXJuIFN0cmluZy4KKyAgICAgICAgKFdlYkNv
cmU6OktVUkw6OnBhdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFByb3Rv
Y29sKTogVGFrZSBTdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRIb3N0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRQb3J0KTogVXNlIFN0cmluZy4KKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OnNldEhvc3RBbmRQb3J0KTogVGFrZSBTdHJpbmcuCisgICAgICAg
IChXZWJDb3JlOjpLVVJMOjpzZXRVc2VyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJM
OjpzZXRQYXNzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRSZWYpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFF1ZXJ5KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpLVVJMOjpzZXRQYXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpw
cmV0dHlVUkwpOiBSZXR1cm4gU3RyaW5nLiBVc2UgVmVjdG9yPFVDaGFyPiB0byBidWlsZCBpdC4K
KyAgICAgICAgKFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyk6IFJlbmFtZWQgZnJv
bSBLVVJMOjpkZWNvZGVfc3RyaW5nLgorICAgICAgICBSZXR1cm4gU3RyaW5nLiBVc2UgVmVjdG9y
PFVDaGFyPiB0byBidWlsZCBpdC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmlzTG9jYWxGaWxl
KTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXJzZSk6IEFkZGVk
IGFuIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBTdHJpbmcgdG8gcmVwbGFjZQorICAgICAgICB0aGUg
dXNlIG9mIERlcHJlY2F0ZWRTdHJpbmc6OmFzY2lpIGF0IHZhcmlvdXMgY2FsbCBzaXRlcy4gVXBk
YXRlZCBmb3IKKyAgICAgICAgbmFtZSBjaGFuZ2UgKHVybFN0cmluZyAtPiBtX3N0cmluZykuCisg
ICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nUmVmKTogV3JvdGUgYSBuZXcgaW1wbGVtZW50
YXRpb24gdGhhdCBkb2Vzbid0CisgICAgICAgIGRvIGFueSBhbGxvY2F0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyk6IFJlbmFtZWQgZnJvbSBLVVJM
OjplbmNvZGVfc3RyaW5nLgorICAgICAgICBSZXR1cm4gU3RyaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kRW5jb2RlZEhvc3RuYW1lKTogQWRkZWQuIFJlcGxhY2VzIGVuY29kZUhvc3RuYW1l
IGFuZAorICAgICAgICBhdm9pZHMgdGhlIG5lZWQgdG8gYWxsb2NhdGUgYSBzdHJpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpmaW5kSG9zdG5hbWVzSW5NYWlsVG9VUkwpOiBVcGRhdGUgdG8gdXNlIGZp
bmRGaXJzdE9mIGluc3RlYWQgb2YKKyAgICAgICAgcmVndWxhciBleHByZXNzaW9ucy4KKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjplbmNvZGVIb3N0bmFtZXMpOiBVc2UgcHJvdG9jb2xJcyBhbmQgdGhlIG90
aGVyIGhlbHBlcnMgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVSZWxhdGl2ZVN0cmlu
Zyk6IENoYW5nZWQgdG8gcHV0IHJlc3VsdCBpbnRvIGEgQ2hhckJ1ZmZlci4KKyAgICAgICAgKFdl
YkNvcmU6OnN1YnN0aXR1dGVCYWNrc2xhc2hlcyk6IFVwZGF0ZWQgdG8gdXNlIFN0cmluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6OmNvcHlUb0J1ZmZlcik6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6cHJvdG9jb2xJcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6YmxhbmtVUkwpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnByaW50KTogVXBkYXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9LVVJMLmg6IEFkZGVkIGEgbnVtYmVyIG9mIGNvbW1lbnRzLiBSZW9yZ2FuaXpl
ZCB0aGUgaGVhZGVyIGEgYml0LgorICAgICAgICBNYWRlIHRoZSBzdHJpbmcgY29uc3RydWN0b3Jz
IGV4cGxpY2l0LiBDaGFuZ2VkIHRvIHVzZSBTdHJpbmcgaW5zdGVhZCBvZgorICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nLiBSZW1vdmVkIGVuY29kZWRIVE1MUmVmLiBSZW5hbWVkIGFuZCBhZGRlZCBh
IGZldyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6S1VSTCk6IFN0cmVhbWxpbmVkIHRoZSBsb2dpYyBhIGJp
dC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmNyZWF0ZUNGVVJMKTogQ2hhbmdlZCB0byB1c2Ug
Y29weVRvQnVmZmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpjcmVhdGVRVE1vdmllKTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICBVc2UgcHJv
dG9jb2xJcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBSZW1v
dmVkIGdldE5TVVJMIGNhbGwuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToK
KyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOiBSZW1vdmVkIGdldE5TVVJMIGNhbGwuCisgICAg
ICAgIChXZWJDb3JlOjpzZXRDb29raWVzKTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9LVVJMTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6S1VS
TCk6IFN0cmVhbWxpbmVkIHRoZSBsb2dpYyBhIGJpdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
UGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlVVJM
KTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlv
bik6IFVwZGF0ZWQgZm9yIFN0cmluZzo6c3BsaXQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6
cG9ydEFsbG93ZWQpOiBVc2UgcHJvdG9jb2xJcy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yOjpvcGVyYXRvciBOU0Vycm9yKik6IFJlbW92ZWQgZ2V0TlNVUkwgY2FsbC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KTogUmVtb3ZlZCBEZXByZWNhdGVk
U3RyaW5nIHVzZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVl
c3RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxh
dGZvcm1SZXF1ZXN0KTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlOjpuc1VSTFJlc3BvbnNlKTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOiBVcGRhdGVkIHNwbGl0
IHRvIG1vZGlmeSBhIHJlc3VsdCBwYXJhbWV0ZXIKKyAgICAgICAgcmF0aGVyIHRoYW4gcmV0dXJu
aW5nIGEgVmVjdG9yLiBBZGRlZCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkgYW5kIGFuIGFwcGVuZAor
ICAgICAgICBmdW5jdGlvbiB0aGF0IGFwcGVuZHMgYSBTdHJpbmcgdG8gYSBWZWN0b3I8VUNoYXI+
LgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZzo6c3BsaXQpOiBVcGRhdGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFn
ZVVSTCk6IFJlbW92ZWQgRGVwcmVjYXRlZFN0cmluZyB1c2UuCisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNl
dDo6bGF5T3V0QXhpcyk6IEZpeGVkIGNvbW1lbnQgd29yZGluZy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50
UmVwbGFjZWQpOiBSZW1vdmVkIHVzZSBvZiBEZXBlcmVjYXRlZFN0cmluZywKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjppbWFnZU1hcCk6IENoYW5nZWQgdG8gY2FsbCB1c2VNYXAgaW5z
dGVhZCBvZiBpbWFnZU1hcDsKKyAgICAgICAgYm90aCBkbyB0aGUgc2FtZSB0aGluZywgYW5kIHRo
ZSBmaXJzdCBpcyBzdGFuZGFyZCBET00uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdCk6
IFJld3JvdGUgYW5kIHN0cmVhbWxpbmVkIHRvIHJlbW92ZQorICAgICAgICBEZXByZWNhdGVkU3Ry
aW5nIHVzZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IENoYW5nZWQgYWRk
UERGVVJMUmVjdCB0byB0YWtlIGNvbnN0IEludFJlY3QmLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclBhcnRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNVUkxBbGxvd2VkKTog
VXBkYXRlZCBmb3IgS1VSTCBjaGFuZ2UgYW5kIHVzZSBlcXVhbElnbm9yaW5nUmVmCisgICAgICAg
IGluc3RlYWQgb2YgZG9pbmcgYSBzZXRSZWYgdG8gZ2V0IHRoZSBzYW1lIGVmZmVjdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCk6IFVwZGF0ZWQgZm9y
IEtVUkwgY2hhbmdlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyc0FyZUFsbEFTQ0lJKTogTW92ZWQgdGhlIGd1dHMgdG8g
UGxhdGZvcm1TdHJpbmcuaC4KKworICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlclN1YnRyZWVUb0ltYWdlKTogQWRkZWQgbWlz
c2luZyBjYWxsIHRvIGRvIGxheW91dC4gSSByYW4KKyAgICAgICAgaW50byB0aGlzIHdoaWxlIGRv
aW5nIHNvbWUgbGF5b3V0IHRlc3RzIHdoaWxlIFVSTCBwcm9jZXNzaW5nIHdhcyBicm9rZW4uCisK
KyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOiBSZW1vdmVkIGluY2x1
ZGUuCisKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KTogUmVtb3ZlZCBEZXByZWNhdGVk
U3RyaW5nIHVzZS4KKworICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhdyk6IEFkZGVkIG1pc3NpbmcgY2FsbCB0byBkbyBs
YXlvdXQuIEkgcmFuCisgICAgICAgIGludG8gdGhpcyB3aGlsZSBkb2luZyBzb21lIGxheW91dCB0
ZXN0cyB3aGlsZSBVUkwgcHJvY2Vzc2luZyB3YXMgYnJva2VuLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKTogVXNlIGEgbnVsbCBVUkwgcmF0aGVyIHRoYW4gYW4gYXJi
aXRyYXJ5CisgICAgICAgIHN0cmluZyBmb3IgdGhlIGRvY3VtZW50LgorCisgICAgICAgICogeG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpn
ZXRSZXNwb25zZVhNTCk6IFJlbW92ZWQgRGVwcmVjYXRlZFN0cmluZyB1c2UuCisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6b3Blbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOiAgTmFtZXNwYWNlIGNoYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcg
dXNlLgorCisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVz
ZS4KKyAgICAgICAgKiB4bWwvWFNMU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
U0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0KTogRGl0dG8uCisgICAgICAgICogeG1sL1hT
TFN0eWxlU2hlZXQuaDogRGl0dG8uCisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6eHNsdFN0eWxlc2hlZXRQb2ludGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp4bWxE
b2NQdHJGcm9tTm9kZSk6IERpdHRvLgorCiAyMDA4LTAyLTEyICBBbGV4ZXkgUHJvc2t1cnlha292
IDxhcEB3ZWJraXQub3JnPiBhbmQgQnJhZHkgRWlkc29uIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBCcmFkeS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDMwMTcy
KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNiAr
MzU5LDcgQEAgX19aTjdXZWJDb3JlMjFXaW5kb3dzTGF0aW4xRW5jb2RpbmdFdgogX19aTjdXZWJD
b3JlMjFmaW5kRXZlbnRXaXRoS2V5U3RhdGVFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTIxaXNC
YWNrRm9yd2FyZExvYWRUeXBlRU5TXzEzRnJhbWVMb2FkVHlwZUUKIF9fWk43V2ViQ29yZTIxcmVw
b3J0VGhyZWFkVmlvbGF0aW9uRVBLYworX19aTjdXZWJDb3JlMjRkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXNFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMjRub3RpZnlIaXN0b3J5SXRlbUNoYW5n
ZWRFCiBfX1pON1dlYkNvcmUyNkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQzFFdgogX19aTjdX
ZWJDb3JlMjZOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjZjcmVhdGVFUE5TXzVGcmFtZUVQTlNf
MzJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudEUKQEAgLTM3MSw5ICszNzIsOCBAQCBf
X1pON1dlYkNvcmU0Rm9udEMxRVJLTlNfMTZGb250UGxhdGZvcm1ECiBfX1pON1dlYkNvcmU0Rm9u
dEMxRXYKIF9fWk43V2ViQ29yZTRGb250RDFFdgogX19aTjdXZWJDb3JlNEZvbnRhU0VSS1MwXwot
X19aTjdXZWJDb3JlNEtVUkwxM2RlY29kZV9zdHJpbmdFUktOU18xNkRlcHJlY2F0ZWRTdHJpbmdF
CiBfX1pON1dlYkNvcmU0S1VSTEMxRVA1TlNVUkwKLV9fWk43V2ViQ29yZTRLVVJMQzFFUktOU18x
NkRlcHJlY2F0ZWRTdHJpbmdFCitfX1pON1dlYkNvcmU0S1VSTEMxRVJLTlNfNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTRLVVJMQzFFdgogX19aTjdXZWJDb3JlNE5vZGUxN3N0b3BJZ25vcmluZ0xlYWtz
RXYKIF9fWk43V2ViQ29yZTROb2RlMThzdGFydElnbm9yaW5nTGVha3NFdgpAQCAtNDU4LDcgKzQ1
OCw3IEBAIF9fWk43V2ViQ29yZTZXaWRnZXRDMUVQNk5TVmlldwogX19aTjdXZWJDb3JlNldpZGdl
dEMxRXYKIF9fWk43V2ViQ29yZTdJbnRTaXplQzFFUks3X05TU2l6ZQogX19aTjdXZWJDb3JlN25z
Q29sb3JFUktOU181Q29sb3JFCi1fX1pON1dlYkNvcmU4RG9jdW1lbnQxMWNvbXBsZXRlVVJMRVJL
TlNfMTZEZXByZWNhdGVkU3RyaW5nRQorX19aTjdXZWJDb3JlOERvY3VtZW50MTFjb21wbGV0ZVVS
TEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxM3JlbW92ZU1hcmtlcnNFTlNf
MTREb2N1bWVudE1hcmtlcjEwTWFya2VyVHlwZUUKIF9fWk43V2ViQ29yZThEb2N1bWVudDE0c2V0
Rm9jdXNlZE5vZGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUUKIF9fWk43V2ViQ29yZThE
b2N1bWVudDRib2R5RXYKQEAgLTUzOSw3ICs1MzksNiBAQCBfX1pON1dlYkNvcmU5VGltZXJCYXNl
QzJFdgogX19aTjdXZWJDb3JlOVRpbWVyQmFzZUQyRXYKIF9fWk43V2ViQ29yZTlwYWdlQ2FjaGVF
dgogX19aTjdXZWJDb3JlZXFFUktOU18xOVJlc291cmNlUmVxdWVzdEJhc2VFUzJfCi1fX1pON1dl
YkNvcmVlcUVSS05TXzRLVVJMRVMyXwogX19aTks3V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VF
dgogX19aTks3V2ViQ29yZTExQ29udGV4dE1lbnUxOXBsYXRmb3JtRGVzY3JpcHRpb25FdgogX19a
Tks3V2ViQ29yZTExRnJhbWVMb2FkZXIxMGlzQ29tcGxldGVFdgpAQCAtNjM3LDcgKzYzNiw3IEBA
IF9fWk5LN1dlYkNvcmU0Rm9udDE2Y2FjaGVQcmltYXJ5Rm9udEV2CiBfX1pOSzdXZWJDb3JlNEtV
UkwxN2xhc3RQYXRoQ29tcG9uZW50RXYKIF9fWk5LN1dlYkNvcmU0S1VSTDRob3N0RXYKIF9fWk5L
N1dlYkNvcmU0S1VSTDRwYXRoRXYKLV9fWk5LN1dlYkNvcmU0S1VSTDhnZXROU1VSTEV2CitfX1pO
SzdXZWJDb3JlNEtVUkxjdlA1TlNVUkxFdgogX19aTks3V2ViQ29yZTRQYWdlMzRpbkxvd1F1YWxp
dHlJbWFnZUludGVycG9sYXRpb25Nb2RlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxMGlzRnJhbWVT
ZXRFdgogX19aTks3V2ViQ29yZTVGcmFtZTEyZXZlbnRIYW5kbGVyRXYKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwzNCArMjksMzEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0F0dHIuaCIKIAotI2luY2x1ZGUgIkF0
dHIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIK
LSNpbmNsdWRlICJranNfZG9tLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdm9pZCBKU0F0dHI6
OnNldFZhbHVlKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTVmFsdWUqIHZhbHVlKQordm9p
ZCBKU0F0dHI6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgQXR0ciogaW1wID0gc3RhdGljX2Nhc3Q8QXR0cio+KGltcGwoKSk7CiAgICAgU3RyaW5nIGF0
dHJWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKIAogICAg
IEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IGltcC0+b3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKG93
bmVyRWxlbWVudCAmJiAob3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgb3du
ZXJFbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoaW1w
LT5uYW1lKCksICJzcmMiKSAmJiBhdHRyVmFsdWUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBm
YWxzZSkpIHsKLSAgICAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lID0gc3RhdGljX2Nh
c3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihvd25lckVsZW1lbnQpOwotICAgICAgICBpZiAoIWNo
ZWNrTm9kZVNlY3VyaXR5KGV4ZWMsIGZyYW1lLT5jb250ZW50RG9jdW1lbnQoKSkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgaWYgKG93bmVyRWxlbWVudCAmJiAob3duZXJFbGVtZW50LT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykgfHwgb3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSkp
IHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGltcC0+bmFtZSgpLCAic3JjIikgJiYg
cHJvdG9jb2xJcyhhdHRyVmFsdWUsICJqYXZhc2NyaXB0IikpIHsKKyAgICAgICAgICAgIGlmICgh
Y2hlY2tOb2RlU2VjdXJpdHkoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2Uq
Pihvd25lckVsZW1lbnQpLT5jb250ZW50RG9jdW1lbnQoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aW1wLT5zZXRWYWx1ZShhdHRyVmFsdWUsIGVjKTsKLSAgICBLSlM6OnNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rv
ci5oCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0
cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIEpTQXVkaW9Db25zdHJ1Y3RvciA6IHB1YmxpYyBLSlM6OkRPTU9i
amVjdCB7CisgICAgY2xhc3MgSlNBdWRpb0NvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7
CiAgICAgcHVibGljOgogICAgICAgICBKU0F1ZGlvQ29uc3RydWN0b3IoS0pTOjpFeGVjU3RhdGUq
LCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgp
IGNvbnN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgi
CiAjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUGFnZVJ1bGUuaCIKLSNp
bmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAi
SlNDU1NDaGFyc2V0UnVsZS5oIgogI2luY2x1ZGUgIkpTQ1NTRm9udEZhY2VSdWxlLmgiCkBAIC0z
OSwxNiArMzgsMTcgQEAKICNpbmNsdWRlICJKU0NTU01lZGlhUnVsZS5oIgogI2luY2x1ZGUgIkpT
Q1NTUGFnZVJ1bGUuaCIKICNpbmNsdWRlICJKU0NTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgImtq
c19iaW5kaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBDU1NSdWxlKiBy
dWxlKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENTU1J1bGUqIHJ1bGUpCiB7CiAg
ICAgaWYgKCFydWxlKQotICAgICAgICByZXR1cm4gS0pTOjpqc051bGwoKTsKKyAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogCi0gICAgS0pTOjpET01PYmplY3QqIHJldCA9IEtKUzo6U2NyaXB0SW50
ZXJwcmV0ZXI6OmdldERPTU9iamVjdChydWxlKTsKKyAgICBET01PYmplY3QqIHJldCA9IFNjcmlw
dEludGVycHJldGVyOjpnZXRET01PYmplY3QocnVsZSk7CiAKICAgICBpZiAocmV0KQogICAgICAg
ICByZXR1cm4gcmV0OwpAQCAtNzcsNyArNzcsNyBAQCBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBLSlM6OlNj
cmlwdEludGVycHJldGVyOjpwdXRET01PYmplY3QocnVsZSwgcmV0KTsKKyAgICBTY3JpcHRJbnRl
cnByZXRlcjo6cHV0RE9NT2JqZWN0KHJ1bGUsIHJldCk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAz
MDE3MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDExICsyNyw5IEBACiAjaW5jbHVkZSAiSlNDU1NWYWx1ZS5oIgogCiAjaW5j
bHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkpTQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNp
bmNsdWRlICJKU0NTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCiAKICNp
ZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkpTU1ZHQ29sb3IuaCIKQEAgLTQwLDE0ICszOCwxNiBA
QAogI2luY2x1ZGUgIlNWR1BhaW50LmgiCiAjZW5kaWYKIAordXNpbmcgbmFtZXNwYWNlIEtKUzsK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMsIENTU1ZhbHVlKiB2YWx1ZSkKK0pTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIEtK
Uzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEtKUzo6RE9NT2Jq
ZWN0KiByZXQgPSBLSlM6OlNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QodmFsdWUpOwor
ICAgIERPTU9iamVjdCogcmV0ID0gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdCh2YWx1
ZSk7CiAKICAgICBpZiAocmV0KQogICAgICAgICByZXR1cm4gcmV0OwpAQCAtNjUsNyArNjUsNyBA
QCBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsCiAgICAgZWxzZQogICAg
ICAgICByZXQgPSBuZXcgSlNDU1NWYWx1ZShKU0NTU1ZhbHVlUHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCB2YWx1ZSk7CiAKLSAgICBLSlM6OlNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmplY3QodmFs
dWUsIHJldCk7CisgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdCh2YWx1ZSwgcmV0
KTsKICAgICByZXR1cm4gcmV0OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTQgKzIxLDEyIEBACiAj
aW5jbHVkZSAiSlNEb2N1bWVudC5oIgogCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIK
ICNpbmNsdWRlICJKU0hUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIKLSNp
bmNsdWRlICJranNfYmluZGluZy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogCiAjaWYgRU5B
QkxFKFNWRykKQEAgLTM2LDEwICszNCwxMCBAQAogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAj
ZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKIHZvaWQgSlNEb2N1bWVudDo6bWFyaygpCiB7CiAgICAgSlNF
dmVudFRhcmdldE5vZGU6Om1hcmsoKTsKQEAgLTUyLDcgKzUwLDcgQEAgSlNWYWx1ZSogSlNEb2N1
bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKgogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgIEtKUzo6V2luZG93KiB3aW4gPSBLSlM6OldpbmRvdzo6cmV0cmll
dmVXaW5kb3coZnJhbWUpOworICAgIFdpbmRvdyogd2luID0gV2luZG93OjpyZXRyaWV2ZVdpbmRv
dyhmcmFtZSk7CiAgICAgQVNTRVJUKHdpbik7CiAgICAgcmV0dXJuIHdpbi0+bG9jYXRpb24oKTsK
IH0KQEAgLTY5LDcgKzY3LDcgQEAgdm9pZCBKU0RvY3VtZW50OjpzZXRMb2NhdGlvbihFeGVjU3Rh
dGUqIAogICAgIC8vIG5vdCB0aGUgdGFyZ2V0IGZyYW1lLgogICAgIEZyYW1lKiBhY3RpdmVGcmFt
ZSA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4oZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
KS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIGlmIChhY3RpdmVGcmFtZSkKLSAgICAgICAgc3RyID0g
YWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cik7CisgICAgICAgIHN0ciA9
IGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHIpLnN0cmluZygpOwogCiAg
ICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5wcm9jZXNz
aW5nVXNlckdlc3R1cmUoKTsKICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRpb25D
aGFuZ2Uoc3RyLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFs
c2UsIHVzZXJHZXN0dXJlKTsKQEAgLTk2LDcgKzk0LDcgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3Rh
dGUqIGV4ZWMsIERvY3VtZW50KgogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMga2Vw
dCBhcm91bmQgYnkgdGhlIHdpbmRvdyBvYmplY3QsIGFuZCB3b3JrcyByaWdodCB3aXRoIHRoZQog
ICAgIC8vIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBpZiAoZG9jLT5mcmFtZSgpKQotICAgICAg
ICBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3coZG9jLT5mcmFtZSgpKS0+cHV0RGlyZWN0KCJk
b2N1bWVudCIsIHJldCwgRG9udERlbGV0ZXxSZWFkT25seSk7CisgICAgICAgIFdpbmRvdzo6cmV0
cmlldmVXaW5kb3coZG9jLT5mcmFtZSgpKS0+cHV0RGlyZWN0KCJkb2N1bWVudCIsIHJldCwgRG9u
dERlbGV0ZXxSZWFkT25seSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNpemVfdCBub2RlQ291bnQg
PSAwOwogICAgICAgICBmb3IgKE5vZGUqIG4gPSBkb2M7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKCkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAzMDE3MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsMjMgKzMwLDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJranNfYmluZGluZy5oIgot
I2luY2x1ZGUgImtqc19kb20uaCIKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5l
IGJvb2wgYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKEtKUzo6RXhlY1N0YXRlKiBleGVj
LCBFbGVtZW50KiBlbGVtZW50LCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKQorc3RhdGljIGlu
bGluZSBib29sIGFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChFeGVjU3RhdGUqIGV4ZWMs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKLSAgICBpZiAoKGVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNyYyIp
ICYmIHZhbHVlLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKSB7CisgICAgaWYgKChl
bGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmcmFt
ZVRhZykpICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzcmMiKSAmJiBwcm90b2NvbElzKHZh
bHVlLCAiamF2YXNjcmlwdCIpKSB7CiAgICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFt
ZSA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4oZWxlbWVudCk7CiAgICAgICAg
IGlmICghY2hlY2tOb2RlU2VjdXJpdHkoZXhlYywgZnJhbWUtPmNvbnRlbnREb2N1bWVudCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU0LDcgKzUwLDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIGFsbG93U2V0dGluZ1NyY1RvSmF2YQogICAgIHJldHVybiB0cnVlOwogfSAKIAotS0pT
OjpKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZShLSlM6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgS0pTOjpMaXN0JiBhcmdzKQorSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIFN0cmluZyBuYW1lID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CkBAIC02
MiwzMyArNTgsMzMgQEAgS0pTOjpKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZShLSgog
CiAgICAgRWxlbWVudCogaW1wID0gaW1wbCgpOwogICAgIGlmICghYWxsb3dTZXR0aW5nU3JjVG9K
YXZhc2NyaXB0VVJMKGV4ZWMsIGltcCwgbmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gS0pT
Ojpqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlt
cC0+c2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0gICAgS0pTOjpzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOwotICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotS0pT
OjpKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoS0pTOjpFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEtKUzo6TGlzdCYgYXJncykKK0pTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmli
dXRlTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBuZXdBdHRyT2s7CiAgICAgQXR0ciogbmV3QXR0ciA9
IHRvQXR0cihhcmdzWzBdLCBuZXdBdHRyT2spOwogICAgIGlmICghbmV3QXR0ck9rKSB7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIHJl
dHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAogICAgIEVsZW1lbnQqIGltcCA9IGltcGwoKTsKICAgICBpZiAoIWFsbG93U2V0dGlu
Z1NyY1RvSmF2YXNjcmlwdFVSTChleGVjLCBpbXAsIG5ld0F0dHItPm5hbWUoKSwgbmV3QXR0ci0+
dmFsdWUoKSkpCi0gICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4
ZWMsIFdURjo6Z2V0UHRyKGltcC0+c2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBlYykpKTsKLSAg
ICBLSlM6OnNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0g
dG9KUyhleGVjLCBXVEY6OmdldFB0cihpbXAtPnNldEF0dHJpYnV0ZU5vZGUobmV3QXR0ciwgZWMp
KSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1LSlM6OkpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEtKUzo6TGlzdCYgYXJncykKK0pTVmFsdWUqIEpTRWxlbWVudDo6c2V0
QXR0cmlidXRlTlMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxDaGVjayhleGVjLCBhcmdzWzBdKTsKQEAgLTk3LDI5ICs5MywyOSBAQCBLSlM6
OkpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoCiAKICAgICBFbGVtZW50KiBpbXAg
PSBpbXBsKCk7CiAgICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZXhlYywg
aW1wLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZp
bmVkKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaW1wLT5zZXRBdHRy
aWJ1dGVOUyhuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIHZhbHVlLCBlYyk7Ci0gICAgS0pT
OjpzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVk
KCk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotS0pTOjpKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyhL
SlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpMaXN0JiBhcmdzKQorSlNWYWx1ZSogSlNF
bGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBh
cmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJvb2wgbmV3QXR0ck9rOwog
ICAgIEF0dHIqIG5ld0F0dHIgPSB0b0F0dHIoYXJnc1swXSwgbmV3QXR0ck9rKTsKICAgICBpZiAo
IW5ld0F0dHJPaykgewotICAgICAgICBLSlM6OnNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01J
U01BVENIX0VSUik7Ci0gICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEVsZW1lbnQqIGltcCA9IGltcGwoKTsKICAg
ICBpZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChleGVjLCBpbXAsIG5ld0F0dHIt
Pm5hbWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkpCi0gICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZp
bmVkKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgS0pTOjpKU1ZhbHVl
KiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGltcC0+c2V0QXR0cmlidXRlTm9kZU5T
KG5ld0F0dHIsIGVjKSkpOwotICAgIEtKUzo6c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICBKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGltcC0+c2V0QXR0cmli
dXRlTm9kZU5TKG5ld0F0dHIsIGVjKSkpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI5LDI3ICsyOSwyNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTSFRN
TEZyYW1lRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
RnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJr
anNfYmluZGluZy5oIgotI2luY2x1ZGUgImtqc19kb20uaCIKKwordXNpbmcgbmFtZXNwYWNlIEtK
UzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0
aW5nSmF2YXNjcmlwdFVSTChLSlM6OkV4ZWNTdGF0ZSogZXhlYywgSFRNTEZyYW1lRWxlbWVudCog
aW1wLCBTdHJpbmcgdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0aW5nSmF2YXNj
cmlwdFVSTChFeGVjU3RhdGUqIGV4ZWMsIEhUTUxGcmFtZUVsZW1lbnQqIGltcCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBm
YWxzZSkpIHsKKyAgICBpZiAocHJvdG9jb2xJcyh2YWx1ZSwgImphdmFzY3JpcHQiKSkgewogICAg
ICAgICBpZiAoIWNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsIGltcC0+Y29udGVudERvY3VtZW50KCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0g
CiAKLXZvaWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRTcmMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMs
IEtKUzo6SlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0U3JjKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCiB7CiAgICAgSFRNTEZyYW1lRWxlbWVudCog
aW1wID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KGltcGwoKSk7Ci0gICAgU3RyaW5n
IHNyY1ZhbHVlID0gS0pTOjp2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7
CisgICAgU3RyaW5nIHNyY1ZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywg
dmFsdWUpOwogCiAgICAgaWYgKCFhbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKGV4ZWMsIGltcCwg
c3JjVmFsdWUpKQogICAgICAgICByZXR1cm47CkBAIC01OCwxMCArNTYsMTAgQEAgdm9pZCBKU0hU
TUxGcmFtZUVsZW1lbnQ6OnNldFNyYyhLSlM6OkV4ZQogICAgIHJldHVybjsKIH0KIAotdm9pZCBK
U0hUTUxGcmFtZUVsZW1lbnQ6OnNldExvY2F0aW9uKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6
OkpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldExvY2F0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCiB7CiAgICAgSFRNTEZyYW1lRWxlbWVudCog
aW1wID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KGltcGwoKSk7Ci0gICAgU3RyaW5n
IGxvY2F0aW9uVmFsdWUgPSBLSlM6OnZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZh
bHVlKTsKKyAgICBTdHJpbmcgbG9jYXRpb25WYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKGV4ZWMsIHZhbHVlKTsKIAogICAgIGlmICghYWxsb3dTZXR0aW5nSmF2YXNjcmlwdFVSTChl
eGVjLCBpbXAsIGxvY2F0aW9uVmFsdWUpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJRnJhbWVFbGVtZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjUgKzI5LDI0IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNIVE1MSUZyYW1lRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKLSNpbmNsdWRlICJranNfZG9tLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U0hUTUxJRnJhbWVFbGVtZW50OjpzZXRTcmMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIEtKUzo6SlNW
YWx1ZSogdmFsdWUpCit2b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQogewogICAgIEhUTUxJRnJhbWVFbGVtZW50KiBpbXAgPSBz
dGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KGltcGwoKSk7Ci0gICAgU3RyaW5nIHNyY1Zh
bHVlID0gS0pTOjp2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7IAotICAg
IGlmIChzcmNWYWx1ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkgeworCisgICAg
U3RyaW5nIHNyY1ZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUp
OworCisgICAgaWYgKHByb3RvY29sSXMoc3JjVmFsdWUsICJqYXZhc2NyaXB0IikpIHsKICAgICAg
ICAgaWYgKCFjaGVja05vZGVTZWN1cml0eShleGVjLCBpbXAtPmNvbnRlbnREb2N1bWVudCgpKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbXAtPnNldFNyYyhzcmNWYWx1ZSk7
Ci0gICAgcmV0dXJuOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9u
RWxlbWVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTMgKzI1LDEzIEBACiAj
aW5jbHVkZSAiSlNIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCi1KU0hUTUxPcHRpb25F
bGVtZW50Q29uc3RydWN0b3I6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIERvY3VtZW50KiBkKQotICAgIDogS0pTOjpET01PYmplY3QoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKLSAgICAsIG1fZG9jKGQpCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6SlNIVE1M
T3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvY3Vt
ZW50KQorICAgIDogRE9NT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogewogICAgIHB1dERpcmVj
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcig0KSwgUmVhZE9ubHl8RG9u
dERlbGV0ZXxEb250RW51bSk7CiB9CkBAIC00MywyNiArNDMsMjggQEAgYm9vbCBKU0hUTUxPcHRp
b25FbGVtZW50Q29uc3RydWN0b3I6OmltcAogCiBKU09iamVjdCogSlNIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdz
KQogewotICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbChtX2Rv
Yy0+Y3JlYXRlRWxlbWVudCgib3B0aW9uIiwgZXhjZXB0aW9uKSk7Ci0gICAgSFRNTE9wdGlvbkVs
ZW1lbnQqIG9wdCA9IDA7Ci0gICAgaWYgKGVsKSB7Ci0gICAgICAgIG9wdCA9IHN0YXRpY19jYXN0
PEhUTUxPcHRpb25FbGVtZW50Kj4oZWwuZ2V0KCkpOwotICAgICAgICBpbnQgc3ogPSBhcmdzLnNp
emUoKTsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHQgPSBtX2RvYy0+Y3JlYXRlVGV4dE5vZGUo
IiIpOwotICAgICAgICBvcHQtPmFwcGVuZENoaWxkKHRleHQsIGV4Y2VwdGlvbik7Ci0gICAgICAg
IGlmIChleGNlcHRpb24gPT0gMCAmJiBzeiA+IDApCi0gICAgICAgICAgICB0ZXh0LT5zZXREYXRh
KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0
aW9uID09IDAgJiYgc3ogPiAxKQotICAgICAgICAgICAgb3B0LT5zZXRWYWx1ZShhcmdzWzFdLT50
b1N0cmluZyhleGVjKSk7Ci0gICAgICAgIGlmIChleGNlcHRpb24gPT0gMCAmJiBzeiA+IDIpCi0g
ICAgICAgICAgICBvcHQtPnNldERlZmF1bHRTZWxlY3RlZChhcmdzWzJdLT50b0Jvb2xlYW4oZXhl
YykpOwotICAgICAgICBpZiAoZXhjZXB0aW9uID09IDAgJiYgc3ogPiAzKQotICAgICAgICAgICAg
b3B0LT5zZXRTZWxlY3RlZChhcmdzWzNdLT50b0Jvb2xlYW4oZXhlYykpOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworCisgICAgUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50ID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4obV9kb2N1bWVudC0+Y3JlYXRl
RWxlbWVudCgib3B0aW9uIiwgZWMpKTsKKyAgICBpZiAoZWxlbWVudCkgeworICAgICAgICBSZWZQ
dHI8VGV4dD4gdGV4dCA9IG1fZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCIiKTsKKyAgICAgICAg
aWYgKCFhcmdzWzBdLT5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgdGV4dC0+c2V0RGF0YShh
cmdzWzBdLT50b1N0cmluZyhleGVjKSwgZWMpOworICAgICAgICBpZiAoZWMgPT0gMCkKKyAgICAg
ICAgICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKHRleHQucmVsZWFzZSgpLCBlYyk7CisgICAgICAg
IGlmIChlYyA9PSAwICYmICFhcmdzWzFdLT5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgZWxl
bWVudC0+c2V0VmFsdWUoYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICBpZiAoZWMg
PT0gMCkKKyAgICAgICAgICAgIGVsZW1lbnQtPnNldERlZmF1bHRTZWxlY3RlZChhcmdzWzJdLT50
b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBpZiAoZWMgPT0gMCkKKyAgICAgICAgICAgIGVsZW1l
bnQtPnNldFNlbGVjdGVkKGFyZ3NbM10tPnRvQm9vbGVhbihleGVjKSk7CiAgICAgfQogCi0gICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4odG9KUyhleGVjLCBvcHQpKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOworICAgIGlmIChlYyB8fCAhZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0b0pTKGV4ZWMsIGVsZW1lbnQucmVsZWFzZSgp
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24g
MzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMTMgKzI1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEpTSFRN
TE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvciA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CisgICAg
Y2xhc3MgSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7
CiAgICAgcHVibGljOgogICAgICAgICBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IoS0pT
OjpFeGVjU3RhdGUqLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50
c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIEtKUzo6SlNPYmplY3QgKmNvbnN0
cnVjdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6TGlzdCYgYXJncyk7CisgICAgICAgIHZp
cnR1YWwgS0pTOjpKU09iamVjdCogY29uc3RydWN0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pT
OjpMaXN0JiBhcmdzKTsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1f
ZG9jOworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgfTsKIAogfQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJranNfcHJveHkuaCIKICNpbmNsdWRlICJranNfd2luZG93LmgiCiAKQEAgLTEzNyw3ICsx
MzYsNyBAQCB2b2lkIEpTTG9jYXRpb246OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgIGlmICgh
bV9mcmFtZSkKICAgICByZXR1cm47CiAKLSAgRGVwcmVjYXRlZFN0cmluZyBzdHIgPSB2YWx1ZS0+
dG9TdHJpbmcoZXhlYyk7CisgIFN0cmluZyBzdHIgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CiAg
IEtVUkwgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOwogICBib29sIHNhbWVEb21haW5B
Y2Nlc3MgPSBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoZXhlYywgbV9mcmFtZSk7CiAKQEAgLTE1Miw2
ICsxNTEsNyBAQCB2b2lkIEpTTG9jYXRpb246OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAKICAg
ICAgIHN3aXRjaCAoZW50cnktPnZhbHVlLmludFZhbHVlKSB7CiAgICAgICBjYXNlIEhyZWY6IHsK
KyAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzbid0IHRoaXMgbmVlZGVkIGZvciBIb3N0IGJlbG93
LCBldGMuPwogICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUo
ZXhlYyktPmltcGwoKS0+ZnJhbWUoKTsKICAgICAgICAgICBpZiAoIWZyYW1lKQogICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xNjAsMjcgKzE2MCwyOSBAQCB2b2lkIEpTTG9jYXRpb246OnB1dChF
eGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgdXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21w
bGV0ZVVSTChzdHIpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgY2FzZSBIYXNo
OiB7CisgICAgICBjYXNlIEhhc2g6CiAgICAgICAgICAgaWYgKHN0ci5zdGFydHNXaXRoKCIjIikp
Ci0gICAgICAgICAgICAgIHN0ciA9IHN0ci5taWQoMSk7CisgICAgICAgICAgICAgIHN0ciA9IHN0
ci5zdWJzdHJpbmcoMSk7CiAgICAgICAgICAgaWYgKHVybC5yZWYoKSA9PSBzdHIpCiAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICB1cmwuc2V0UmVmKHN0cik7CiAgICAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEhvc3Q6IHsKKyAgICAgIGNhc2UgSG9zdDoKICAgICAg
ICAgICB1cmwuc2V0SG9zdEFuZFBvcnQoc3RyKTsKICAgICAgICAgICBicmVhazsKLSAgICAgIH0K
ICAgICAgIGNhc2UgSG9zdG5hbWU6CiAgICAgICAgICAgdXJsLnNldEhvc3Qoc3RyKTsKICAgICAg
ICAgICBicmVhazsKICAgICAgIGNhc2UgUGF0aG5hbWU6CiAgICAgICAgICAgdXJsLnNldFBhdGgo
c3RyKTsKICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUG9ydDoKLSAgICAgICAgICB1cmwu
c2V0UG9ydChzdHIudG9VSW50KCkpOworICAgICAgY2FzZSBQb3J0OiB7CisgICAgICAgICAgaW50
IHBvcnQgPSBzdHIudG9JbnQoKTsKKyAgICAgICAgICBpZiAocG9ydCA8IDAgfHwgcG9ydCA+IDB4
RkZGRikKKyAgICAgICAgICAgICAgcG9ydCA9IDA7CisgICAgICAgICAgdXJsLnNldFBvcnQocG9y
dCk7CiAgICAgICAgICAgYnJlYWs7CisgICAgICB9CiAgICAgICBjYXNlIFByb3RvY29sOgogICAg
ICAgICAgIHVybC5zZXRQcm90b2NvbChzdHIpOwogICAgICAgICAgIGJyZWFrOwpAQCAtMTk5LDcg
KzIwMSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY28KICAgfQog
CiAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmlt
cGwoKS0+ZnJhbWUoKTsKLSAgaWYgKCF1cmwuZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgo
ImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8IHNhbWVEb21haW5BY2Nlc3MpIHsKKyAgaWYgKCF1cmwu
cHJvdG9jb2xJcygiamF2YXNjcmlwdCIpIHx8IHNhbWVEb21haW5BY2Nlc3MpIHsKICAgICBib29s
IHVzZXJHZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdFByb3h5KCktPnByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpOwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdl
KHVybC5zdHJpbmcoKSwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCks
IGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgIH0KQEAgLTIzNCw5ICsyMzYsOSBAQCBKU1ZhbHVlKiBq
c0xvY2F0aW9uUHJvdG9GdW5jUmVwbGFjZShFeGVjCiAgICAgaWYgKGFjdGl2ZUZyYW1lKSB7CiAg
ICAgICAgIGlmICghYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24o
ZnJhbWUpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFN0cmlu
ZyBzdHIgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKICAgICAgICAgY29uc3QgV2luZG93KiB3
aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKTsKLSAgICAgICAgaWYgKCFzdHIu
c3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgKHdpbmRvdyAmJiB3aW5kb3ctPmFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpKSB7CisgICAgICAgIGlmICghcHJvdG9jb2xJcyhzdHIsICJq
YXZhc2NyaXB0IikgfHwgKHdpbmRvdyAmJiB3aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykp
KSB7CiAgICAgICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdFBy
b3h5KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAgICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+Y29tcGxl
dGVVUkwoc3RyKS5zdHJpbmcoKSwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVy
cmVyKCksIHRydWUsIHVzZXJHZXN0dXJlKTsKICAgICAgICAgfQpAQCAtMjU4LDcgKzI2MCw3IEBA
IEpTVmFsdWUqIGpzTG9jYXRpb25Qcm90b0Z1bmNSZWxvYWQoRXhlY1MKICAgICBpZiAoIXdpbmRv
dy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLnN0
YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxv
d3NBY2Nlc3NGcm9tKGV4ZWMpKSkgeworICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT51cmwoKS5w
cm90b2NvbElzKCJqYXZhc2NyaXB0IikgfHwgKHdpbmRvdyAmJiB3aW5kb3ctPmFsbG93c0FjY2Vz
c0Zyb20oZXhlYykpKSB7CiAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBXaW5kb3c6OnJldHJp
ZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCktPnNjcmlwdFByb3h5KCktPnByb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpOwogICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlUmVmcmVz
aCh1c2VyR2VzdHVyZSk7CiAgICAgfQpAQCAtMjgwLDcgKzI4Miw3IEBAIEpTVmFsdWUqIGpzTG9j
YXRpb25Qcm90b0Z1bmNBc3NpZ24oRXhlY1MKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5k
b3coZnJhbWUpOwogICAgICAgICBTdHJpbmcgZHN0VXJsID0gYWN0aXZlRnJhbWUtPmxvYWRlcigp
LT5jb21wbGV0ZVVSTChhcmdzWzBdLT50b1N0cmluZyhleGVjKSkuc3RyaW5nKCk7Ci0gICAgICAg
IGlmICghZHN0VXJsLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cg
JiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkgeworICAgICAgICBpZiAoIXByb3Rv
Y29sSXMoZHN0VXJsLCAiamF2YXNjcmlwdCIpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxvd3NB
Y2Nlc3NGcm9tKGV4ZWMpKSkgewogICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2
ZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMgd2FzIGNhbGxlZCB2
aWEgYSB1c2VyIGdlc3R1cmUKICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVM
b2NhdGlvbkNoYW5nZShkc3RVcmwsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZl
cnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
LmgJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgRnJhbWU7CiAKLSAgICBjbGFzcyBKU0xvY2F0aW9uIDogcHVibGljIEtKUzo6RE9N
T2JqZWN0IHsKLSAgICAgICAgdHlwZWRlZiBLSlM6OkRPTU9iamVjdCBCYXNlOworICAgIGNsYXNz
IEpTTG9jYXRpb24gOiBwdWJsaWMgRE9NT2JqZWN0IHsKKyAgICAgICAgdHlwZWRlZiBET01PYmpl
Y3QgQmFzZTsKIAogICAgICAgICBmcmllbmQgY2xhc3MgS0pTOjpXaW5kb3c7CiAgICAgcHVibGlj
OgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDIxICsyNywyMiBAQAogI2luY2x1ZGUgIkpTTmFt
ZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCiAjaW5jbHVkZSAia2pzX2Rv
bS5oIgogCit1c2luZyBuYW1lc3BhY2UgS0pTOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJv
b2wgSlNOYW1lZE5vZGVNYXA6OmNhbkdldEl0ZW1zRm9yTmFtZShLSlM6OkV4ZWNTdGF0ZSosIE5h
bWVkTm9kZU1hcCogaW1wbCwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiti
b29sIEpTTmFtZWROb2RlTWFwOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgTmFtZWRO
b2RlTWFwKiBpbXBsLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0
dXJuIGltcGwtPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwogfQogCi1LSlM6OkpTVmFsdWUq
IEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpT
T2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNOYW1lZE5vZGVN
YXA6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEpTTmFtZWROb2RlTWFwKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5v
ZGVNYXAqPihzbG90LnNsb3RCYXNlKCkpOwotICAgIHJldHVybiBLSlM6OnRvSlMoZXhlYywgdGhp
c09iai0+aW1wbCgpLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRv
SlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNO
YW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjoK
IC8vIGZvciBjb25zdHJ1Y3RzIGxpa2UgZG9jdW1lbnQuZm9ybXMuPG5hbWU+WzFdLAogLy8gc28g
aXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSB0aGF0IGl0J3Mgc3RvcmluZyBhbGwgdGhlIG5vZGVz
ICh3aXRoIHRoZSBzYW1lIG5hbWUpLiAoRGF2aWQpCiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpK
U05hbWVkTm9kZXNDb2xsZWN0aW9uKEtKUzo6SlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+JiBub2RlcykKLSAgICA6IEtKUzo6RE9NT2JqZWN0KHByb3RvdHlw
ZSkKKyAgICA6IERPTU9iamVjdChwcm90b3R5cGUpCiAgICAgLCBtX25vZGVzKG5vZGVzKQogewog
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgJ
KHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xs
ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgLy8gSW50ZXJuYWwgY2xhc3MsIHVzZWQgZm9yIHRoZSBjb2xsZWN0aW9uIHJl
dHVybiBieSBlLmcuIGRvY3VtZW50LmZvcm1zLm15aW5wdXQKICAgICAvLyB3aGVuIG11bHRpcGxl
IG5vZGVzIGhhdmUgdGhlIHNhbWUgbmFtZS4KLSAgICBjbGFzcyBKU05hbWVkTm9kZXNDb2xsZWN0
aW9uIDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKKyAgICBjbGFzcyBKU05hbWVkTm9kZXNDb2xs
ZWN0aW9uIDogcHVibGljIERPTU9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uKEtKUzo6SlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+Jik7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0LmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTIgQEAKICNpbmNsdWRl
ICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgogCi0jaW5jbHVkZSAiSlNY
TUxIdHRwUmVxdWVzdC5sdXQuaCIKLQotbmFtZXNwYWNlIEtKUyB7Ci0KK3VzaW5nIG5hbWVzcGFj
ZSBLSlM7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LyBKU1hNTEh0dHBSZXF1ZXN0IE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNpbmNs
dWRlICJKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8q
IFNvdXJjZSBmb3IgSlNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZVRhYmxlLgogQGJlZ2luIEpTWE1M
SHR0cFJlcXVlc3RQcm90b3R5cGVUYWJsZSA3CkBAIC0yNTAsNyArMjQ5LDYgQEAgSlNWYWx1ZSog
anNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aQogICAgIHJldHVybiBoZWFkZXI7CiB9CiAK
LQogSlNWYWx1ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aW9uT3BlbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJkpTWE1MSHR0cFJlcXVlc3Q6OmluZm8pKQpAQCAtMjY2LDcg
KzI2NCw3IEBAIEpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGkKICAgICBG
cmFtZSogZnJhbWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1l
KCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
S1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKERlcHJlY2F0ZWRTdHJpbmco
YXJnc1sxXS0+dG9TdHJpbmcoZXhlYykpKTsKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIo
KS0+Y29tcGxldGVVUkwoYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykpOwogCiAgICAgYm9vbCBhc3lu
YyA9IHRydWU7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDMpCkBAIC0yOTgsMTAgKzI5Niw5IEBA
IEpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGkKICAgICBTdHJpbmcgYm9k
eTsKIAogICAgIGlmIChhcmdzLnNpemUoKSA+PSAxKSB7Ci0gICAgICAgIGlmIChhcmdzWzBdLT50
b09iamVjdChleGVjKS0+aW5oZXJpdHMoJkpTRG9jdW1lbnQ6OmluZm8pKSB7Ci0gICAgICAgICAg
ICBEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzdGF0aWNfY2FzdDxKU0Rv
Y3VtZW50Kj4oYXJnc1swXS0+dG9PYmplY3QoZXhlYykpLT5pbXBsKCkpOwotICAgICAgICAgICAg
Ym9keSA9IGRvYy0+dG9TdHJpbmcoKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChhcmdzWzBdLT50b09iamVjdChleGVjKS0+aW5oZXJpdHMoJkpTRG9j
dW1lbnQ6OmluZm8pKQorICAgICAgICAgICAgYm9keSA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
c3RhdGljX2Nhc3Q8SlNEb2N1bWVudCo+KGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMpKS0+aW1wbCgp
KS0+dG9TdHJpbmcoKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBjb252ZXJ0aW5n
IGNlcnRhaW4gdmFsdWVzIChsaWtlIG51bGwpIHRvIG9iamVjdCBjYW4gc2V0IGFuIGV4Y2VwdGlv
bgogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3QuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKLS8vIC0qLSBjLWJh
c2ljLW9mZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBs
aWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBu
eXBvcC5jb20+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI5LDU2ICsyNyw1MiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBYTUxIdHRwUmVxdWVzdDsKIGNsYXNzIERvY3VtZW50OwogCi19Ci0KLW5h
bWVzcGFjZSBLSlMgewotCiBjbGFzcyBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAgOiBw
dWJsaWMgRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3JJbXAoRXhlY1N0YXRlKiwgV2ViQ29yZTo6RG9jdW1lbnQqKTsKKyAgICBKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3JJbXAoS0pTOjpFeGVjU3RhdGUqLCBEb2N1bWVudCopOwogCiAgICAgdmly
dHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYpOworICAgIHZpcnR1YWwgS0pT
OjpKU09iamVjdCogY29uc3RydWN0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpMaXN0Jik7
CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiBkb2M7CisgICAgUmVm
UHRyPERvY3VtZW50PiBkb2M7CiB9OwogCiBjbGFzcyBKU1hNTEh0dHBSZXF1ZXN0IDogcHVibGlj
IERPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgSlNYTUxIdHRwUmVxdWVzdChKU09iamVjdCogcHJv
dG90eXBlLCBXZWJDb3JlOjpEb2N1bWVudCopOworICAgIEpTWE1MSHR0cFJlcXVlc3QoS0pTOjpK
U09iamVjdCogcHJvdG90eXBlLCBEb2N1bWVudCopOwogICAgIH5KU1hNTEh0dHBSZXF1ZXN0KCk7
CiAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisgICAgdmlydHVh
bCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KKyAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgT25s
b2FkLCBPbnJlYWR5c3RhdGVjaGFuZ2UsIFJlYWR5U3RhdGUsIFJlc3BvbnNlVGV4dCwgUmVzcG9u
c2VYTUwsIFN0YXR1cywKICAgICAgICAgU3RhdHVzVGV4dCwgQWJvcnQsIEdldEFsbFJlc3BvbnNl
SGVhZGVycywgR2V0UmVzcG9uc2VIZWFkZXIsIE9wZW4sIFNlbmQsIFNldFJlcXVlc3RIZWFkZXIs
IE92ZXJyaWRlTUlNRVR5cGUsCiAgICAgICAgIEFkZEV2ZW50TGlzdGVuZXIsIFJlbW92ZUV2ZW50
TGlzdGVuZXIsIERpc3BhdGNoRXZlbnQgfTsKIAotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbiwgSlNWYWx1ZSogdmFsdWUsIGlu
dCAvKmF0dHIqLyk7Ci0gICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChL
SlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90
Jik7CisgICAgS0pTOjpKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlKiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEtKUzo6SlNWYWx1ZSosIGludCBh
dHRyKTsKKyAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9r
ZW4sIEtKUzo6SlNWYWx1ZSosIGludCBhdHRyKTsKKyAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFu
KEtKUzo6RXhlY1N0YXRlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBtYXJrKCk7CiAKLSAgICBXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdCogaW1wbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW1wbC5nZXQoKTsgfQorICAgIFhNTEh0dHBSZXF1ZXN0KiBpbXBsKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0PiBtX2ltcGw7CisgICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiBtX2lt
cGw7CiB9OwogCi1KU1ZhbHVlKiBqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25BYm9y
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWE1MSHR0
cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbkdldEFsbFJlc3BvbnNlSGVhZGVycyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90
b3R5cGVGdW5jdGlvbkdldFJlc3BvbnNlSGVhZGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29u
c3QgTGlzdCYpOwotSlNWYWx1ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aW9uT3Bl
bihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWE1MSHR0
cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvblNlbmQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBMaXN0Jik7Ci1KU1ZhbHVlKiBqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25TZXRS
ZXF1ZXN0SGVhZGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwotSlNWYWx1
ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aW9uT3ZlcnJpZGVNSU1FVHlwZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWE1MSHR0cFJlcXVl
c3RQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rp
b25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYp
OwotSlNWYWx1ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVu
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNY
TUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aW9uQWJvcnQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6
OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWE1MSHR0cFJl
cXVlc3RQcm90b3R5cGVGdW5jdGlvbkdldEFsbFJlc3BvbnNlSGVhZGVycyhLSlM6OkV4ZWNTdGF0
ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6Okxpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNY
TUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0aW9uR2V0UmVzcG9uc2VIZWFkZXIoS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUq
IGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbk9wZW4oS0pTOjpFeGVjU3RhdGUqLCBL
SlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWE1MSHR0
cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvblNlbmQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2Jq
ZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQ
cm90b3R5cGVGdW5jdGlvblNldFJlcXVlc3RIZWFkZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpT
T2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWE1MSHR0cFJlcXVl
c3RQcm90b3R5cGVGdW5jdGlvbk92ZXJyaWRlTUlNRVR5cGUoS0pTOjpFeGVjU3RhdGUqLCBLSlM6
OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWE1MSHR0cFJl
cXVlc3RQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUqLCBL
SlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWE1MSHR0
cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpz
WE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQoS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CiAKLX0gLy8gbmFtZXNwYWNl
IEtKUworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gSlNYTUxIdHRwUmVxdWVz
dF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lv
biAzMDE3MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTUgKzMwLDE3IEBACiAjaW5j
bHVkZSAiSlNYU0xUUHJvY2Vzc29yLmgiCiAKICNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCi0j
aW5jbHVkZSAiSlNYU0xUUHJvY2Vzc29yLmx1dC5oIgogI2luY2x1ZGUgImtqc19kb20uaCIKICNp
bmNsdWRlICJKU0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudEZyYWdtZW50LmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotbmFtZXNwYWNlIEtKUyB7CisjaW5jbHVkZSAiSlNYU0xUUHJvY2Vzc29y
Lmx1dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1hTTFRQ
cm9jZXNzb3I6OmluZm8gPSB7ICJYU0xUUHJvY2Vzc29yIiwgMCwgMCB9OwogCkBAIC03MSw3ICs3
Myw3IEBAIEpTWFNMVFByb2Nlc3Nvcjo6fkpTWFNMVFByb2Nlc3NvcigpCiAKIEpTVmFsdWUqIGpz
WFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9uSW1wb3J0U3R5bGVzaGVldChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICgh
dGhpc09iai0+aW5oZXJpdHMoJktKUzo6SlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKKyAgICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZKU1hTTFRQcm9jZXNzb3I6OmluZm8pKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIFhTTFRQcm9jZXNzb3ImIHByb2Nl
c3NvciA9ICpzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNzb3IqPih0aGlzT2JqKS0+aW1wbCgpOwog
CkBAIC04Nyw3ICs4OSw3IEBAIEpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0
aW8KIAogSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25UcmFuc2Zvcm1U
b0ZyYWdtZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
IGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpKU1hTTFRQcm9jZXNz
b3I6OmluZm8pKQorICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpTWFNMVFByb2Nlc3Nvcjo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAg
WFNMVFByb2Nlc3NvciYgcHJvY2Vzc29yID0gKnN0YXRpY19jYXN0PEpTWFNMVFByb2Nlc3Nvcio+
KHRoaXNPYmopLT5pbXBsKCk7CiAKQEAgLTEwNCw3ICsxMDYsNyBAQCBKU1ZhbHVlKiBqc1hTTFRQ
cm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvCiAKIEpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3Rv
dHlwZUZ1bmN0aW9uVHJhbnNmb3JtVG9Eb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJktKUzo6SlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKKyAgICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCZKU1hTTFRQcm9jZXNzb3I6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogICAgIFhTTFRQcm9jZXNzb3ImIHByb2Nlc3NvciA9ICpzdGF0aWNf
Y2FzdDxKU1hTTFRQcm9jZXNzb3IqPih0aGlzT2JqKS0+aW1wbCgpOwogCkBAIC0xMjIsNyArMTI0
LDcgQEAgSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3RpbwogCiBKU1ZhbHVl
KiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvblNldFBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICgh
dGhpc09iai0+aW5oZXJpdHMoJktKUzo6SlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKKyAgICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZKU1hTTFRQcm9jZXNzb3I6OmluZm8pKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIFhTTFRQcm9jZXNzb3ImIHByb2Nl
c3NvciA9ICpzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNzb3IqPih0aGlzT2JqKS0+aW1wbCgpOwog
CkBAIC0xMzcsNyArMTM5LDcgQEAgSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVu
Y3RpbwogCiBKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvbkdldFBhcmFt
ZXRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdz
KQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6SlNYU0xUUHJvY2Vzc29yOjpp
bmZvKSkKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU1hTTFRQcm9jZXNzb3I6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIFhTTFRQ
cm9jZXNzb3ImIHByb2Nlc3NvciA9ICpzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNzb3IqPih0aGlz
T2JqKS0+aW1wbCgpOwogCkBAIC0xNTMsNyArMTU1LDcgQEAgSlNWYWx1ZSoganNYU0xUUHJvY2Vz
c29yUHJvdG90eXBlRnVuY3RpbwogCiBKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVG
dW5jdGlvblJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6
SlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU1hT
TFRQcm9jZXNzb3I6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogICAgIFhTTFRQcm9jZXNzb3ImIHByb2Nlc3NvciA9ICpzdGF0aWNfY2FzdDxKU1hT
TFRQcm9jZXNzb3IqPih0aGlzT2JqKS0+aW1wbCgpOwogCkBAIC0xNjcsNyArMTY5LDcgQEAgSlNW
YWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3RpbwogCiBKU1ZhbHVlKiBqc1hTTFRQ
cm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvbkNsZWFyUGFyYW1ldGVycyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09i
ai0+aW5oZXJpdHMoJktKUzo6SlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKKyAgICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZKU1hTTFRQcm9jZXNzb3I6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIFhTTFRQcm9jZXNzb3ImIHByb2Nlc3NvciA9
ICpzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNzb3IqPih0aGlzT2JqKS0+aW1wbCgpOwogCkBAIC0x
NzcsNyArMTc5LDcgQEAgSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpbwog
CiBKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvblJlc2V0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpKU1hTTFRQcm9jZXNzb3I6OmluZm8pKQorICAgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJkpTWFNMVFByb2Nlc3Nvcjo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgWFNMVFByb2Nlc3NvciYgcHJv
Y2Vzc29yID0gKnN0YXRpY19jYXN0PEpTWFNMVFByb2Nlc3Nvcio+KHRoaXNPYmopLT5pbXBsKCk7
CiAKQEAgLTE4NSw3ICsxODcsNyBAQCBKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVG
dW5jdGlvCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLVhTTFRQcm9jZXNzb3JDb25z
dHJ1Y3RvckltcDo6WFNMVFByb2Nlc3NvckNvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYykK
K1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcDo6WFNMVFByb2Nlc3NvckNvbnN0cnVjdG9ySW1w
KEV4ZWNTdGF0ZSogZXhlYykKICAgICA6IERPTU9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBYU0xUUHJvY2Vzc29yUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBO
b25lKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuaAkocmV2aXNpb24g
MzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDQ2ICszMSw0NSBAQAogI2luY2x1ZGUgImtqc19iaW5kaW5n
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBYU0xUUHJvY2Vzc29yOwotfQor
CitjbGFzcyBYU0xUUHJvY2Vzc29yOwogCiAvLyBFdmVudHVhbGx5IHdlIHNob3VsZCBpbXBsZW1l
bnQgWFNMVEV4Y2VwdGlvbjoKIC8vIGh0dHA6Ly9seHIubW96aWxsYS5vcmcvc2VhbW9ua2V5L3Nv
dXJjZS9jb250ZW50L3hzbC9wdWJsaWMvbnNJWFNMVEV4Y2VwdGlvbi5pZGwKIC8vIGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NDYKIAotbmFtZXNwYWNlIEtKUyB7Ci0K
IGNsYXNzIEpTWFNMVFByb2Nlc3NvciA6IHB1YmxpYyBET01PYmplY3QgewogcHVibGljOgotICAg
IEpTWFNMVFByb2Nlc3NvcihKU09iamVjdCogcHJvdG90eXBlKTsKKyAgICBKU1hTTFRQcm9jZXNz
b3IoS0pTOjpKU09iamVjdCogcHJvdG90eXBlKTsKICAgICB+SlNYU0xUUHJvY2Vzc29yKCk7CiAg
ICAgCi0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOworICAgIHZpcnR1
YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CisgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87CisKKyAgICBYU0xUUHJv
Y2Vzc29yKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAKLSAgICBXZWJD
b3JlOjpYU0xUUHJvY2Vzc29yICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9
CiBwcml2YXRlOgotICAgIFJlZlB0cjxXZWJDb3JlOjpYU0xUUHJvY2Vzc29yPiBtX2ltcGw7Cisg
ICAgUmVmUHRyPFhTTFRQcm9jZXNzb3I+IG1faW1wbDsKIH07CiAKIGNsYXNzIFhTTFRQcm9jZXNz
b3JDb25zdHJ1Y3RvckltcCA6IHB1YmxpYyBET01PYmplY3QgewogcHVibGljOgotICAgIFhTTFRQ
cm9jZXNzb3JDb25zdHJ1Y3RvckltcChFeGVjU3RhdGUqKTsKKyAgICBYU0xUUHJvY2Vzc29yQ29u
c3RydWN0b3JJbXAoS0pTOjpFeGVjU3RhdGUqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1l
bnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU09iamVjdCogY29uc3RydWN0KEV4
ZWNTdGF0ZSosIGNvbnN0IExpc3QmKTsKKyAgICB2aXJ0dWFsIEtKUzo6SlNPYmplY3QqIGNvbnN0
cnVjdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6TGlzdCYpOwogfTsKIAotSlNWYWx1ZSog
anNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25JbXBvcnRTdHlsZXNoZWV0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwotSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJv
dG90eXBlRnVuY3Rpb25UcmFuc2Zvcm1Ub0ZyYWdtZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
Y29uc3QgTGlzdCYpOwotSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25U
cmFuc2Zvcm1Ub0RvY3VtZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwot
SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25TZXRQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBqc1hTTFRQcm9jZXNz
b3JQcm90b3R5cGVGdW5jdGlvbkdldFBhcmFtZXRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9uUmVt
b3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwotSlNWYWx1
ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25DbGVhclBhcmFtZXRlcnMoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQ
cm90b3R5cGVGdW5jdGlvblJlc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYp
OworS0pTOjpKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvbkltcG9ydFN0
eWxlc2hlZXQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0
Jik7CitLSlM6OkpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9uVHJhbnNm
b3JtVG9GcmFnbWVudChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6
Okxpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25U
cmFuc2Zvcm1Ub0RvY3VtZW50KEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0
IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5j
dGlvblNldFBhcmFtZXRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBL
SlM6Okxpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rp
b25HZXRQYXJhbWV0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pT
OjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9u
UmVtb3ZlUGFyYW1ldGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtK
Uzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlv
bkNsZWFyUGFyYW1ldGVycyhLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBL
SlM6Okxpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rp
b25SZXNldChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6Okxpc3Qm
KTsKIAotfSAvLyBuYW1lc3BhY2UgS0pTCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoWFNMVCkKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAJ
KHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU05vZGUuaCIKICNp
bmNsdWRlICJKU1JhbmdlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdEV4
Y2VwdGlvbi5oIgorI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSYW5nZUV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAia2pzX3dp
bmRvdy5oIgpAQCAtNTEsMTIgKzUyLDEwIEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIEtK
UzsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotLy8gRklYTUU6IE1vdmUgYWxsIHRoaXMgc3R1ZmYgaW50byB0aGUgV2ViQ29yZSBuYW1lc3Bh
Y2UuCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSBLSlMgewordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBET01PYmplY3QqPiBET01P
YmplY3RNYXA7CiB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6Tm9kZSosIEpTTm9kZSo+IE5vZGVN
YXA7CkBAIC0yNjIsNiArMjYxLDI3IEBAIEpTVmFsdWUqIGpzU3RyaW5nT3JGYWxzZShjb25zdCBT
dHJpbmcmIHMKICAgICByZXR1cm4ganNTdHJpbmcocyk7CiB9CiAKK0pTVmFsdWUqIGpzU3RyaW5n
T3JOdWxsKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5zdHJpbmcoKSk7Cit9
CisKK0pTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoY29uc3QgS1VSTCYgdXJsKQoreworICAg
IGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJl
dHVybiBqc1N0cmluZyh1cmwuc3RyaW5nKCkpOworfQorCitKU1ZhbHVlKiBqc1N0cmluZ09yRmFs
c2UoY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oZmFsc2UpOworICAgIHJldHVybiBqc1N0cmluZyh1cmwuc3RyaW5nKCkp
OworfQorCiBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiB2YWwpCiB7CiAgICAgaWYgKHZhbC0+aXNOdWxsKCkpCkBAIC0zMjAsMTAgKzM0
MCw2IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyb3JPYmplY3QpOwogfQogCi19IC8vIG5hbWVzcGFjZSBLSlMKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCiBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShFeGVjU3Rh
dGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZyYW1lKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2JpbmRpbmcuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19iaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMiBAQAogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogICAgIGNsYXNzIEF0b21pY1N0cmluZzsKICAg
ICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBGcmFtZTsKKyAg
ICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNs
YXNzIEpTTm9kZTsKQEAgLTQ0LDIxICs0NiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYg
RU5BQkxFKFNWRykKICAgICBjbGFzcyBTVkdFbGVtZW50OwogI2VuZGlmCi19Ci0KLW5hbWVzcGFj
ZSBLSlMgewogCi0gICAgLyoqCi0gICAgICogQmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgaW4g
dGhpcyBiaW5kaW5nIEVYQ0VQVCBXaW5kb3cKLSAgICAgKi8KLSAgICBjbGFzcyBET01PYmplY3Qg
OiBwdWJsaWMgSlNPYmplY3QgeworICAgIC8vIEJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIGlu
IHRoaXMgYmluZGluZyBleGNlcHQgV2luZG93LgorICAgIGNsYXNzIERPTU9iamVjdCA6IHB1Ymxp
YyBLSlM6OkpTT2JqZWN0IHsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IERPTU9i
amVjdChKU1ZhbHVlKiBwcm90b3R5cGUpIC8vIEZJWE1FOiB0aGlzIHNob3VsZCB0YWtlIGEgSlNP
YmplY3Qgb25jZSBKU0xvY2F0aW9uIGhhcyBhIHJlYWwgcHJvdG90eXBlCisgICAgICAgIGV4cGxp
Y2l0IERPTU9iamVjdChLSlM6OkpTVmFsdWUqIHByb3RvdHlwZSkgLy8gRklYTUU6IHRoaXMgc2hv
dWxkIHRha2UgYSBKU09iamVjdCBvbmNlIEpTTG9jYXRpb24gaGFzIGEgcmVhbCBwcm90b3R5cGUK
ICAgICAgICAgICAgIDogSlNPYmplY3QocHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAg
ICAvLyBET01PYmplY3QgZGVzdHJ1Y3Rpb24gaXMgbm90IHRocmVhZC1zYWZlIGJlY2F1c2UgRE9N
T2JqZWN0cyB3cmFwIAogICAgICAgICAgICAgLy8gdW5zYWZlIFdlYkNvcmUgRE9NIGRhdGEgc3Ry
dWN0dXJlcy4KLSAgICAgICAgICAgIENvbGxlY3Rvcjo6Y29sbGVjdE9uTWFpblRocmVhZE9ubHko
dGhpcyk7CisgICAgICAgICAgICBLSlM6OkNvbGxlY3Rvcjo6Y29sbGVjdE9uTWFpblRocmVhZE9u
bHkodGhpcyk7CiAgICAgICAgIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTY5LDI3ICs2NiwyNSBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgRE9NT2JqZWN0KCk7CiAgICAgfTsKIAotICAgIGNs
YXNzIFNjcmlwdEludGVycHJldGVyIDogcHVibGljIEludGVycHJldGVyIHsKKyAgICBjbGFzcyBT
Y3JpcHRJbnRlcnByZXRlciA6IHB1YmxpYyBLSlM6OkludGVycHJldGVyIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBET01PYmplY3QqIGdldERPTU9iamVjdCh2b2lkKiBvYmplY3RIYW5k
bGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRET01PYmplY3Qodm9pZCogb2JqZWN0SGFuZGxl
LCBET01PYmplY3QqKTsKICAgICAgICAgc3RhdGljIHZvaWQgZm9yZ2V0RE9NT2JqZWN0KHZvaWQq
IG9iamVjdEhhbmRsZSk7CiAKLSAgICAgICAgc3RhdGljIFdlYkNvcmU6OkpTTm9kZSogZ2V0RE9N
Tm9kZUZvckRvY3VtZW50KFdlYkNvcmU6OkRvY3VtZW50KiwgV2ViQ29yZTo6Tm9kZSopOwotICAg
ICAgICBzdGF0aWMgdm9pZCBwdXRET01Ob2RlRm9yRG9jdW1lbnQoV2ViQ29yZTo6RG9jdW1lbnQq
LCBXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6SlNOb2RlKiBub2RlV3JhcHBlcik7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIGZvcmdldERPTU5vZGVGb3JEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVudCos
IFdlYkNvcmU6Ok5vZGUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZm9yZ2V0QWxsRE9NTm9kZXNG
b3JEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVudCopOwotICAgICAgICBzdGF0aWMgdm9pZCB1cGRh
dGVET01Ob2RlRG9jdW1lbnQoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OkRvY3VtZW50KiBvbGRE
b2MsIFdlYkNvcmU6OkRvY3VtZW50KiBuZXdEb2MpOwotICAgICAgICBzdGF0aWMgdm9pZCBtYXJr
RE9NTm9kZXNGb3JEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVudCopOworICAgICAgICBzdGF0aWMg
SlNOb2RlKiBnZXRET01Ob2RlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBOb2RlKik7CisgICAgICAg
IHN0YXRpYyB2b2lkIHB1dERPTU5vZGVGb3JEb2N1bWVudChEb2N1bWVudCosIE5vZGUqLCBKU05v
ZGUqIG5vZGVXcmFwcGVyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZm9yZ2V0RE9NTm9kZUZvckRv
Y3VtZW50KERvY3VtZW50KiwgTm9kZSopOworICAgICAgICBzdGF0aWMgdm9pZCBmb3JnZXRBbGxE
T01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50Kik7CisgICAgICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZURPTU5vZGVEb2N1bWVudChOb2RlKiwgRG9jdW1lbnQqIG9sZERvYywgRG9jdW1lbnQqIG5ld0Rv
Yyk7CisgICAgICAgIHN0YXRpYyB2b2lkIG1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50
Kik7CiAgICAgfTsKIAotICAgIC8qKgotICAgICAqIFJldHJpZXZlIGZyb20gY2FjaGUsIG9yIGNy
ZWF0ZSwgYSBKUyBvYmplY3QgYXJvdW5kIGEgRE9NIG9iamVjdAotICAgICAqLwotICAgIHRlbXBs
YXRlPGNsYXNzIERPTU9iaiwgY2xhc3MgSlNET01PYmosIGNsYXNzIEpTRE9NT2JqUHJvdG90eXBl
PiBpbmxpbmUgSlNWYWx1ZSogY2FjaGVET01PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBET01PYmoq
IGRvbU9iaikKKyAgICAvLyBSZXRyaWV2ZSBmcm9tIGNhY2hlLCBvciBjcmVhdGUsIGEgSlMgd3Jh
cHBlciBmb3IgYSBET00gb2JqZWN0LgorICAgIHRlbXBsYXRlPGNsYXNzIERPTU9iaiwgY2xhc3Mg
SlNET01PYmosIGNsYXNzIEpTRE9NT2JqUHJvdG90eXBlPiBpbmxpbmUgS0pTOjpKU1ZhbHVlKiBj
YWNoZURPTU9iamVjdChLSlM6OkV4ZWNTdGF0ZSogZXhlYywgRE9NT2JqKiBkb21PYmopCiAgICAg
ewogICAgICAgICBpZiAoIWRvbU9iaikKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAg
ICAgICAgICAgIHJldHVybiBLSlM6OmpzTnVsbCgpOwogICAgICAgICBpZiAoRE9NT2JqZWN0KiBy
ZXQgPSBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KGRvbU9iaikpCiAgICAgICAgICAg
ICByZXR1cm4gcmV0OwogICAgICAgICBET01PYmplY3QqIHJldCA9IG5ldyBKU0RPTU9iaihKU0RP
TU9ialByb3RvdHlwZTo6c2VsZihleGVjKSwgZG9tT2JqKTsKQEAgLTk4LDEzICs5MywxMSBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgIC8qKgotICAgICAq
IFJldHJpZXZlIGZyb20gY2FjaGUsIG9yIGNyZWF0ZSwgYSBKUyBvYmplY3QgYXJvdW5kIGEgU1ZH
IERPTSBvYmplY3QKLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBET01PYmosIGNsYXNzIEpT
RE9NT2JqLCBjbGFzcyBKU0RPTU9ialByb3RvdHlwZT4gaW5saW5lIEpTVmFsdWUqIGNhY2hlU1ZH
RE9NT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgRE9NT2JqKiBkb21PYmosIFdlYkNvcmU6OlNWR0Vs
ZW1lbnQqIGNvbnRleHQpCisgICAgLy8gUmV0cmlldmUgZnJvbSBjYWNoZSwgb3IgY3JlYXRlLCBh
IEpTIHdyYXBwZXIgZm9yIGFuIFNWRyBET00gb2JqZWN0LgorICAgIHRlbXBsYXRlPGNsYXNzIERP
TU9iaiwgY2xhc3MgSlNET01PYmosIGNsYXNzIEpTRE9NT2JqUHJvdG90eXBlPiBpbmxpbmUgS0pT
OjpKU1ZhbHVlKiBjYWNoZVNWR0RPTU9iamVjdChLSlM6OkV4ZWNTdGF0ZSogZXhlYywgRE9NT2Jq
KiBkb21PYmosIFNWR0VsZW1lbnQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBpZiAoIWRvbU9i
aikKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBLSlM6
OmpzTnVsbCgpOwogICAgICAgICBpZiAoRE9NT2JqZWN0KiByZXQgPSBTY3JpcHRJbnRlcnByZXRl
cjo6Z2V0RE9NT2JqZWN0KGRvbU9iaikpCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAg
ICBET01PYmplY3QqIHJldCA9IG5ldyBKU0RPTU9iaihKU0RPTU9ialByb3RvdHlwZTo6c2VsZihl
eGVjKSwgZG9tT2JqLCBjb250ZXh0KTsKQEAgLTExNCwzNSArMTA3LDM2IEBAIG5hbWVzcGFjZSBL
SlMgewogI2VuZGlmCiAKICAgICAvLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2Vw
dGlvbiBjb2RlIGludG8gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0
YXRlLgotICAgIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUpOworICAgIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEtKUzo6RXhlY1N0YXRlKiwgRXhj
ZXB0aW9uQ29kZSk7CiAKICAgICAvLyBIZWxwZXIgY2xhc3MgdG8gY2FsbCBzZXRET01FeGNlcHRp
b24gb24gZXhpdCB3aXRob3V0IGFkZGluZyBsb3RzIG9mIHNlcGFyYXRlIGNhbGxzIHRvIHRoYXQg
ZnVuY3Rpb24uCiAgICAgY2xhc3MgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciA6IE5vbmNvcHlhYmxl
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IERPTUV4Y2VwdGlvblRyYW5zbGF0b3Io
RXhlY1N0YXRlKiBleGVjKSA6IG1fZXhlYyhleGVjKSwgbV9jb2RlKDApIHsgfQorICAgICAgICBl
eHBsaWNpdCBET01FeGNlcHRpb25UcmFuc2xhdG9yKEtKUzo6RXhlY1N0YXRlKiBleGVjKSA6IG1f
ZXhlYyhleGVjKSwgbV9jb2RlKDApIHsgfQogICAgICAgICB+RE9NRXhjZXB0aW9uVHJhbnNsYXRv
cigpIHsgc2V0RE9NRXhjZXB0aW9uKG1fZXhlYywgbV9jb2RlKTsgfQotICAgICAgICBvcGVyYXRv
ciBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJigpIHsgcmV0dXJuIG1fY29kZTsgfQorICAgICAgICBv
cGVyYXRvciBFeGNlcHRpb25Db2RlJigpIHsgcmV0dXJuIG1fY29kZTsgfQogICAgIHByaXZhdGU6
Ci0gICAgICAgIEV4ZWNTdGF0ZSogbV9leGVjOwotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIG1fY29kZTsKKyAgICAgICAgS0pTOjpFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICAgICAgRXhj
ZXB0aW9uQ29kZSBtX2NvZGU7CiAgICAgfTsKIAotICAgIEpTVmFsdWUqIGpzU3RyaW5nT3JOdWxs
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOyAvLyBudWxsIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAot
ICAgIEpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7
IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKLSAgICBKU1ZhbHVlKiBqc1N0cmlu
Z09yRmFsc2UoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7IC8vIGJvb2xlYW4gZmFsc2UgaWYgdGhl
IHN0cmluZyBpcyBudWxsCisgICAgS0pTOjpKU1ZhbHVlKiBqc1N0cmluZ09yTnVsbChjb25zdCBT
dHJpbmcmKTsgLy8gbnVsbCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKKyAgICBLSlM6OkpTVmFsdWUq
IGpzU3RyaW5nT3JOdWxsKGNvbnN0IEtVUkwmKTsgLy8gbnVsbCBpZiB0aGUgc3RyaW5nIGlzIG51
bGwKIAotICAgIC8vIHNlZSBKYXZhU2NyaXB0Q29yZSBmb3IgZXhwbGFuYXRpb24gc2hvdWxkIGJl
IHVzZWQgZm9yIFVTdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkCi0gICAgLy8gYnkgYW5vdGhl
ciBvYmplY3QsIHNvIHRoYXQgY29sbGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxp
a2VseSB0byBzYXZlIG1lbW9yeS4KLSAgICBKU1ZhbHVlKiBqc093bmVkU3RyaW5nT3JOdWxsKGNv
bnN0IEtKUzo6VVN0cmluZyYpOyAKKyAgICBLSlM6OkpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKKyAg
ICBLSlM6OkpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoY29uc3QgS1VSTCYpOyAvLyB1bmRl
ZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCiAKLSAgICBXZWJDb3JlOjpTdHJpbmcgdmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRlKiwgSlNWYWx1ZSopOyAvLyBudWxsIFN0cmlu
ZyBpZiB0aGUgdmFsdWUgaXMgbnVsbAotICAgIFdlYkNvcmU6OlN0cmluZyB2YWx1ZVRvU3RyaW5n
V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKEV4ZWNTdGF0ZSosIEpTVmFsdWUqKTsgLy8gbnVsbCBT
dHJpbmcgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkCisgICAgS0pTOjpKU1ZhbHVl
KiBqc1N0cmluZ09yRmFsc2UoY29uc3QgU3RyaW5nJik7IC8vIGJvb2xlYW4gZmFsc2UgaWYgdGhl
IHN0cmluZyBpcyBudWxsCisgICAgS0pTOjpKU1ZhbHVlKiBqc1N0cmluZ09yRmFsc2UoY29uc3Qg
S1VSTCYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAogCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywg
UGFzc1JlZlB0cjxUPiBwdHIpIHsgcmV0dXJuIHRvSlMoZXhlYywgcHRyLmdldCgpKTsgfQorICAg
IC8vIHNlZSBKYXZhU2NyaXB0Q29yZSBmb3IgZXhwbGFuYXRpb24gc2hvdWxkIGJlIHVzZWQgZm9y
IFVTdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkCisgICAgLy8gYnkgYW5vdGhlciBvYmplY3Qs
IHNvIHRoYXQgY29sbGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBz
YXZlIG1lbW9yeS4KKyAgICBLSlM6OkpTVmFsdWUqIGpzT3duZWRTdHJpbmdPck51bGwoY29uc3Qg
S0pTOjpVU3RyaW5nJik7IAogCi19IC8vIG5hbWVzcGFjZSBLSlMKKyAgICBTdHJpbmcgdmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTVmFsdWUqKTsgLy8g
bnVsbCBTdHJpbmcgaWYgdGhlIHZhbHVlIGlzIG51bGwKKyAgICBTdHJpbmcgdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNWYWx1ZSop
OyAvLyBudWxsIFN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQKIAotbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgS0pTOjpK
U1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFQ+IHB0cikgeyBy
ZXR1cm4gdG9KUyhleGVjLCBwdHIuZ2V0KCkpOyB9CiAKICAgICAvLyBIZWxwZXJzIGZvciBXaW5k
b3csIEhpc3RvcnksIGFuZCBMb2NhdGlvbiBjbGFzc2VzIHRvIGltcGxlbWVudCBjcm9zcy1kb21h
aW4gcG9saWN5LgogICAgIC8vIEJlc2lkZXMgdGhlIGNyb3NzLWRvbWFpbiBjaGVjaywgdGhleSBu
ZWVkIG5vbi1jYWNoaW5nIHZlcnNpb25zIG9mIHN0YXRpY0Z1bmN0aW9uR2V0dGVyIGZvcgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfY3NzLmgJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfY3NzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSlNSR0JDb2xvciA6IHB1YmxpYyBLSlM6OkRPTU9i
amVjdCB7CisgICAgY2xhc3MgSlNSR0JDb2xvciA6IHB1YmxpYyBET01PYmplY3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgSlNSR0JDb2xvcihLSlM6OkpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2ln
bmVkIGNvbG9yKTsKICAgICAgICAgfkpTUkdCQ29sb3IoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfZXZlbnRzLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c19ldmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRUYXJn
ZXROb2RlLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJranNfcHJveHkuaCIKICNpbmNsdWRlICJranNfd2luZG93LmgiCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc19ldmVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19ldmVudHMuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c19ldmVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBLSlM6OkpTVmFsdWUqIGdldE5vZGVFdmVudExpc3RlbmVyKE5vZGUqLCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAKLSAgICBjbGFzcyBKU0NsaXBib2FyZCA6
IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CisgICAgY2xhc3MgSlNDbGlwYm9hcmQgOiBwdWJsaWMg
RE9NT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTQ2xpcGJvYXJkKEtKUzo6SlNPYmpl
Y3QqIHByb3RvdHlwZSwgQ2xpcGJvYXJkKik7CiAgICAgICAgIHZpcnR1YWwgfkpTQ2xpcGJvYXJk
KCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5oCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX2h0bWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSFRNTEVsZW1lbnQ7CiAgICAgY2xhc3Mg
SlNIVE1MRWxlbWVudDsKIAotICAgIGNsYXNzIEltYWdlQ29uc3RydWN0b3JJbXAgOiBwdWJsaWMg
S0pTOjpET01PYmplY3QgeworICAgIGNsYXNzIEltYWdlQ29uc3RydWN0b3JJbXAgOiBwdWJsaWMg
RE9NT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEltYWdlQ29uc3RydWN0b3JJbXAoS0pT
OjpFeGVjU3RhdGUqLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c19uYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
bmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDggQEAKLS8vIC0qLSBjLWJh
c2ljLW9mZnNldDogMiAtKi0KIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50
aW4gKG1vbGtlbnRpbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2No
aW1hbnNraSAoc2NoaW1taUBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDIxICs2Mywy
MiBAQAogI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCICIiCiAjZW5kaWYgLy8g
aWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKIAordXNpbmcgbmFtZXNwYWNlIEtK
UzsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1uYW1lc3BhY2UgS0pTIHsKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFBsdWdpbkJhc2UgOiBwdWJsaWMgRE9NT2JqZWN0IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbkJhc2UoRXhlY1N0YXRlICpleGVjKTsKKyAgICAg
ICAgUGx1Z2luQmFzZShFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCB+UGx1Z2luQmFzZSgp
OwogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7CiAK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0YXRpYyB2b2lkIGNhY2hlUGx1Z2luRGF0YUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8UGx1Z2luSW5mbyo+ICpwbHVnaW5zOwot
ICAgICAgICBzdGF0aWMgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiAqbWltZXM7CisgICAgICAgIHN0
YXRpYyBWZWN0b3I8UGx1Z2luSW5mbyo+KiBwbHVnaW5zOworICAgICAgICBzdGF0aWMgVmVjdG9y
PE1pbWVDbGFzc0luZm8qPiogbWltZXM7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMg
aW50IG1fcGx1Z0luQ2FjaGVSZWZDb3VudDsKQEAgLTg3LDczICs4Nyw3MyBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICAgIGNsYXNzIFBsdWdpbnMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBQbHVnaW5zKEV4ZWNTdGF0ZSAqZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMp
IHt9OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUgKmdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CisgICAgICAgIFBs
dWdpbnMoRXhlY1N0YXRlKiBleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykgeyB9CisgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOworICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgICAgIGVudW0geyBMZW5ndGggfTsKICAgICBwcml2
YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIEpT
T2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWUqIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZUdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICB9OwogCiAgICAgSlNWYWx1ZSogcGx1Z2luc0Z1bmN0aW9uUmVmcmVz
aChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKIAogICAgIGNsYXNzIE1pbWVU
eXBlcyA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1pbWVUeXBl
cyhFeGVjU3RhdGUgKmV4ZWMpIDogUGx1Z2luQmFzZShleGVjKSB7IH07Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSog
ZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMpIHsgfTsKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
Jik7CisgICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRv
a2VuKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
aW5mbzsKICAgICAgICAgZW51bSB7IExlbmd0aCB9OwogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0
YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1
ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAg
IH07CiAKICAgICBjbGFzcyBQbHVnaW4gOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBQbHVnaW4oRXhlY1N0YXRlICpleGVjLCBQbHVnaW5JbmZvICppbmZvKSA6IFBs
dWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgICAgICBQbHVnaW4oRXhlY1N0YXRlKiBleGVjLCBQbHVnaW5J
bmZvKiBpbmZvKSA6IFBsdWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IE5hbWUsIEZpbGVuYW1lLCBE
ZXNjcmlwdGlvbiwgTGVuZ3RoIH07CiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgUGx1
Z2luSW5mbyAqbV9pbmZvOworICAgICAgICBQbHVnaW5JbmZvKiBtX2luZm87CiAgICAgfTsKIAog
ICAgIGNsYXNzIE1pbWVUeXBlIDogcHVibGljIFBsdWdpbkJhc2UgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgTWltZVR5cGUoIEV4ZWNTdGF0ZSAqZXhlYywgTWltZUNsYXNzSW5mbyAqaW5mbyApIDog
UGx1Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3Q7CisgICAgICAgIE1pbWVUeXBlKEV4ZWNTdGF0ZSogZXhlYywgTWlt
ZUNsYXNzSW5mbyogaW5mbykgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgICAgIGVudW0geyBUeXBlLCBTdWZm
aXhlcywgRGVzY3JpcHRpb24sIEVuYWJsZWRQbHVnaW4gfTsKICAgICBwcml2YXRlOgotICAgICAg
ICBNaW1lQ2xhc3NJbmZvICptX2luZm87CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG1faW5mbzsK
ICAgICB9OwogCi19IC8vIG5hbWVzcGFjZQorfQogCiAjaW5jbHVkZSAia2pzX25hdmlnYXRvci5s
dXQuaCIKIAotbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IENs
YXNzSW5mbyBQbHVnaW5zOjppbmZvID0geyAiUGx1Z2luQXJyYXkiLCAwLCAmUGx1Z2luc1RhYmxl
IH07CiBjb25zdCBDbGFzc0luZm8gTWltZVR5cGVzOjppbmZvID0geyAiTWltZVR5cGVBcnJheSIs
IDAsICZNaW1lVHlwZXNUYWJsZSB9OwogY29uc3QgQ2xhc3NJbmZvIFBsdWdpbjo6aW5mbyA9IHsg
IlBsdWdpbiIsIDAsICZQbHVnaW5UYWJsZSB9OwogY29uc3QgQ2xhc3NJbmZvIE1pbWVUeXBlOjpp
bmZvID0geyAiTWltZVR5cGUiLCAwLCAmTWltZVR5cGVUYWJsZSB9OwogCi1WZWN0b3I8UGx1Z2lu
SW5mbyo+ICpLSlM6OlBsdWdpbkJhc2U6OnBsdWdpbnMgPSAwOwotVmVjdG9yPE1pbWVDbGFzc0lu
Zm8qPiAqS0pTOjpQbHVnaW5CYXNlOjptaW1lcyA9IDA7Ci1pbnQgS0pTOjpQbHVnaW5CYXNlOjpt
X3BsdWdJbkNhY2hlUmVmQ291bnQgPSAwOworVmVjdG9yPFBsdWdpbkluZm8qPiogUGx1Z2luQmFz
ZTo6cGx1Z2lucyA9IDA7CitWZWN0b3I8TWltZUNsYXNzSW5mbyo+KiBQbHVnaW5CYXNlOjptaW1l
cyA9IDA7CitpbnQgUGx1Z2luQmFzZTo6bV9wbHVnSW5DYWNoZVJlZkNvdW50ID0gMDsKIAogY29u
c3QgQ2xhc3NJbmZvIE5hdmlnYXRvcjo6aW5mbyA9IHsgIk5hdmlnYXRvciIsIDAsICZOYXZpZ2F0
b3JUYWJsZSB9OwogLyoKQEAgLTE4MSw3ICsxODEsNyBAQCBOYXZpZ2F0b3I6Ok5hdmlnYXRvcihK
U09iamVjdCogcHJvdG90eXBlCiB7CiB9CiAKLWJvb2wgTmF2aWdhdG9yOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgTmF2aWdhdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDxOYXZpZ2F0b3IsIEpT
T2JqZWN0PihleGVjLCAmTmF2aWdhdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CkBAIC0zMDAsMzAgKzMwMCwzMCBAQCB2b2lkIFBsdWdpbkJhc2U6OnJlZnJlc2goYm9vbCBy
ZWxvYWQpCiBAZW5kCiAqLwogCi1KU1ZhbHVlICpQbHVnaW5zOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorSlNWYWx1ZSogUGx1Z2luczo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgQVNTRVJU
KHRva2VuID09IExlbmd0aCk7CiAgIHJldHVybiBqc051bWJlcihwbHVnaW5zLT5zaXplKCkpOwog
fQogCi1KU1ZhbHVlICpQbHVnaW5zOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBQbHVnaW5zOjppbmRleEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIG5l
dyBQbHVnaW4oZXhlYywgcGx1Z2lucy0+YXQoc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUg
KlBsdWdpbnM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZSogUGx1Z2luczo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3Bl
cnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKICAgICBWZWN0b3I8UGx1Z2luSW5mbyo+OjppdGVyYXRv
ciBlbmQgPSBwbHVnaW5zLT5lbmQoKTsKICAgICBmb3IgKFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0
ZXJhdG9yIGl0ciA9IHBsdWdpbnMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAg
ICAgIFBsdWdpbkluZm8gKnBsID0gKml0cjsKKyAgICAgICAgUGx1Z2luSW5mbyogcGwgPSAqaXRy
OwogICAgICAgICBpZiAocGwtPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQogICAgICAgICAg
ICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgcGwpOwogICAgIH0KICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKK2Jvb2wgUGx1Z2luczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
Y29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQbHVnaW5zVGFibGUs
IHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGVudHJ5KSB7CkBAIC0zNjMsMzAgKzM2MywzMCBAQCBi
b29sIFBsdWdpbnM6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhCiBAZW5kCiAqLwogCi1KU1Zh
bHVlICpNaW1lVHlwZXM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitKU1ZhbHVlKiBNaW1lVHlwZXM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwog
ICByZXR1cm4ganNOdW1iZXIobWltZXMtPnNpemUoKSk7CiB9CiAKLUpTVmFsdWUgKk1pbWVUeXBl
czo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZSogTWltZVR5cGVzOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCBt
aW1lcy0+YXQoc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKk1pbWVUeXBlczo6bmFtZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
KiBNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2lu
YWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9w
ZXJ0eU5hbWU7CiAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5kID0gbWlt
ZXMtPmVuZCgpOwogICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRy
ID0gbWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgIE1pbWVDbGFz
c0luZm8gKm0gPSAoKml0cik7CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG0gPSAoKml0cik7CiAg
ICAgICAgIGlmIChtLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkKICAgICAgICAgICAgIHJl
dHVybiBuZXcgTWltZVR5cGUoZXhlYywgbSk7CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1ib29sIE1pbWVUeXBlczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Citib29sIE1pbWVUeXBlczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
Y29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZNaW1lVHlwZXNUYWJs
ZSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkpIHsKQEAgLTQyNyw3ICs0MjcsNyBAQCBi
b29sIE1pbWVUeXBlczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTCiBAZW5kCiAqLwogCi1KU1Zh
bHVlICpQbHVnaW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitKU1ZhbHVlKiBQbHVnaW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgTmFt
ZToKQEAgLTQ0NCwxOSArNDQ0LDE5IEBAIEpTVmFsdWUgKlBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3QKICAgICB9CiB9CiAKLUpTVmFsdWUgKlBsdWdpbjo6aW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogUGx1Z2luOjpp
bmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
Ci0gICAgUGx1Z2luICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luICo+KHNsb3Quc2xvdEJh
c2UoKSk7CisgICAgUGx1Z2luKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luKj4oc2xvdC5z
bG90QmFzZSgpKTsKICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIHRoaXNPYmotPm1faW5m
by0+bWltZXMuYXQoc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKlBsdWdpbjo6bmFtZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
KiBQbHVnaW46Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewotICAgIFBsdWdpbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbiAqPihz
bG90LnNsb3RCYXNlKCkpOworICAgIFBsdWdpbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdp
bio+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFt
ZSA9IHByb3BlcnR5TmFtZTsKICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBl
bmQgPSB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPE1pbWVD
bGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5iZWdpbigp
OyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBNaW1lQ2xhc3NJbmZvICptID0gKCppdHIp
OworICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtID0gKCppdHIpOwogICAgICAgICBpZiAobS0+dHlw
ZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpCiAgICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBl
KGV4ZWMsIG0pOwogICAgIH0KQEAgLTQ2NCw3ICs0NjQsNyBAQCBKU1ZhbHVlICpQbHVnaW46Om5h
bWVHZXR0ZXIoRXhlY1N0YXRlICplCiB9CiAKIAotYm9vbCBQbHVnaW46OmdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQorYm9vbCBQbHVnaW46OmdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgm
UGx1Z2luVGFibGUsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGVudHJ5KSB7CkBAIC01MDQsNyAr
NTA0LDcgQEAgYm9vbCBQbHVnaW46OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdAogQGVuZAog
Ki8KIAotSlNWYWx1ZSAqTWltZVR5cGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitKU1ZhbHVlKiBNaW1lVHlwZTo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRva2VuKSB7
CiAgICAgY2FzZSBUeXBlOgpAQCAtNTI3LDcgKzUyNyw3IEBAIEpTVmFsdWUgKk1pbWVUeXBlOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgICB9CiB9CiAKLWJvb2wgTWltZVR5cGU6OmdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBNaW1lVHlwZTo6Z2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxNaW1lVHlwZSwg
UGx1Z2luQmFzZT4oZXhlYywgJk1pbWVUeXBlVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CkBAIC01NDAsMTIgKzU0MCwxMSBAQCBKU1ZhbHVlKiBwbHVnaW5zRnVuY3Rpb25SZWZy
ZXNoKEV4ZWNTdGF0CiAKIEpTVmFsdWUqIG5hdmlnYXRvclByb3RvRnVuY0phdmFFbmFibGVkKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQogewotICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZLSlM6Ok5hdmlnYXRvcjo6aW5mbykpCi0gICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgTmF2aWdhdG9yICpuYXYgPSBzdGF0aWNfY2Fz
dDxOYXZpZ2F0b3IgKj4odGhpc09iaik7Ci0gIC8vIGphdmFFbmFibGVkKCkKLSAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gbmF2LT5mcmFtZSgpID8gbmF2LT5mcmFtZSgpLT5zZXR0aW5ncygpIDogMDsK
LSAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgp
KTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOYXZpZ2F0b3I6OmluZm8pKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIE5hdmlnYXRvciogbmF2
ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yKj4odGhpc09iaik7CisgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbmF2LT5mcmFtZSgpID8gbmF2LT5mcmFtZSgpLT5zZXR0aW5ncygpIDogMDsKKyAgICBy
ZXR1cm4ganNCb29sZWFuKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFFbmFibGVkKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgJ
KHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIg
LSotCiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDI4ICsyMywyOCBAQAogI2luY2x1ZGUgImtqc19iaW5kaW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogICAgIGNsYXNzIEZyYW1lOwotfQogCi1uYW1lc3Bh
Y2UgS0pTIHsKKyAgICBjbGFzcyBOYXZpZ2F0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIE5hdmlnYXRvcihLSlM6OkpTT2JqZWN0KiBwcm90b3R5cGUsIEZyYW1l
Kik7CisKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNT
dGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIEtKUzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0
b2tlbikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBLSlM6
OkNsYXNzSW5mbyBpbmZvOworCisgICAgICAgIGVudW0geyBBcHBDb2RlTmFtZSwgQXBwTmFtZSwg
QXBwVmVyc2lvbiwgTGFuZ3VhZ2UsIFVzZXJBZ2VudCwgUGxhdGZvcm0sCisgICAgICAgICAgICAg
ICBfUGx1Z2lucywgX01pbWVUeXBlcywgUHJvZHVjdCwgUHJvZHVjdFN1YiwgVmVuZG9yLCBWZW5k
b3JTdWIsIENvb2tpZUVuYWJsZWQgfTsKKworICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lOyB9CiAKLSAgY2xhc3MgTmF2aWdhdG9yIDogcHVibGljIERPTU9iamVj
dCB7Ci0gIHB1YmxpYzoKLSAgICBOYXZpZ2F0b3IoSlNPYmplY3QqIHByb3RvdHlwZSwgV2ViQ29y
ZTo6RnJhbWUqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU1ZhbHVlICpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgZW51bSB7IEFwcENvZGVO
YW1lLCBBcHBOYW1lLCBBcHBWZXJzaW9uLCBMYW5ndWFnZSwgVXNlckFnZW50LCBQbGF0Zm9ybSwK
LSAgICAgICAgICAgX1BsdWdpbnMsIF9NaW1lVHlwZXMsIFByb2R1Y3QsIFByb2R1Y3RTdWIsIFZl
bmRvciwgVmVuZG9yU3ViLCBDb29raWVFbmFibGVkIH07Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQotICBwcml2YXRlOgotICAgIFdlYkNvcmU6
OkZyYW1lICptX2ZyYW1lOwotICB9OworICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lKiBtX2Zy
YW1lOworICAgIH07CiAKLSAgLy8gRnVuY3Rpb25zCi0gIEpTVmFsdWUqIG5hdmlnYXRvclByb3Rv
RnVuY0phdmFFbmFibGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAg
IEtKUzo6SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNl
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAkocmV2aXNpb24gMzAxNzIpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTEsNyArMjkxLDggQEAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlTW9kYQog
ewogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKIAotICAgIFZlY3RvcjxTdHJpbmc+
IGZlYXR1cmVzID0gZmVhdHVyZXNBcmcuc3BsaXQoJzsnKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBm
ZWF0dXJlczsKKyAgICBmZWF0dXJlc0FyZy5zcGxpdCgnOycsIGZlYXR1cmVzKTsKICAgICBWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZmVhdHVyZXMuZW5kKCk7CiAgICAgZm9y
IChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU3RyaW5nIHMgPSAqaXQ7CkBAIC0zNTksMTYgKzM2
MCwxNiBAQCBzdGF0aWMgRnJhbWUqIGNyZWF0ZVdpbmRvdyhFeGVjU3RhdGUqIGV4CiAgICAgaWYg
KGRpYWxvZ0FyZ3MpCiAgICAgICAgIG5ld1dpbmRvdy0+cHV0RGlyZWN0KCJkaWFsb2dBcmd1bWVu
dHMiLCBkaWFsb2dBcmdzKTsKIAotICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6
IiwgZmFsc2UpIHx8IG5ld1dpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkgewotICAgICAg
ICBTdHJpbmcgY29tcGxldGVkVVJMID0gdXJsLmlzRW1wdHkoKSA/IHVybCA6IGFjdGl2ZUZyYW1l
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpOworICAgIGlmICghcHJvdG9jb2xJcyh1cmws
ICJqYXZhc2NyaXB0IikgfHwgbmV3V2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7Cisg
ICAgICAgIEtVUkwgY29tcGxldGVkVVJMID0gdXJsLmlzRW1wdHkoKSA/IEtVUkwoIiIpIDogYWN0
aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCk7CiAgICAgICAgIGJvb2wgdXNl
ckdlc3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCk7CiAKICAgICAgICAgaWYgKGNyZWF0ZWQpIHsKLSAgICAgICAgICAgIG5ld0ZyYW1lLT5s
b2FkZXIoKS0+Y2hhbmdlTG9jYXRpb24oS1VSTChjb21wbGV0ZWRVUkwuZGVwcmVjYXRlZFN0cmlu
ZygpKSwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1
c2VyR2VzdHVyZSk7CisgICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0
aW9uKGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVy
KCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIG9sZERv
YyA9IG9wZW5lckZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgICAgIG5ld0ZyYW1lLT5k
b2N1bWVudCgpLT5zZXRCYXNlVVJMKG9sZERvYy0+YmFzZVVSTCgpKTsKICAgICAgICAgfSBlbHNl
IGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+c2No
ZWR1bGVMb2NhdGlvbkNoYW5nZShjb21wbGV0ZWRVUkwsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+
b3V0Z29pbmdSZWZlcnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOworICAgICAgICAgICAgbmV3
RnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVSTC5zdHJp
bmcoKSwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1
c2VyR2VzdHVyZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld0ZyYW1lOwpAQCAtNzA0LDcgKzcw
NSw3IEBAIHZvaWQgV2luZG93OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICAgICAg
aWYgKCFwLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGltcGwoKS0+ZnJhbWUoKSkp
CiAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBTdHJpbmcgZHN0VXJsID0gcC0+bG9hZGVyKCkt
PmNvbXBsZXRlVVJMKHZhbHVlLT50b1N0cmluZyhleGVjKSkuc3RyaW5nKCk7Ci0gICAgICAgIGlm
ICghZHN0VXJsLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8IGFsbG93c0FjY2Vz
c0Zyb20oZXhlYykpIHsKKyAgICAgICAgaWYgKCFwcm90b2NvbElzKGRzdFVybCwgImphdmFzY3Jp
cHQiKSB8fCBhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7CiAgICAgICAgICAgYm9vbCB1c2VyR2Vz
dHVyZSA9IHAtPnNjcmlwdFByb3h5KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAgICAg
ICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMgd2FzIGNhbGxlZCB2
aWEgYSB1c2VyIGdlc3R1cmUKICAgICAgICAgICBpbXBsKCktPmZyYW1lKCktPmxvYWRlcigpLT5z
Y2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGRzdFVybCwgcC0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJy
ZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKQEAgLTg4OCw3ICs4ODksNyBAQCBib29sIFdpbmRv
dzo6YWxsb3dzQWNjZXNzRnJvbShjb25zdCBKU0dsCiAKICAgICAvLyBGSVhNRTogdGhpcyBlcnJv
ciBtZXNzYWdlIHNob3VsZCBjb250YWluIG1vcmUgc3BlY2lmaWNzIG9mIHdoeSB0aGUgc2FtZSBv
cmlnaW4gY2hlY2sgaGFzIGZhaWxlZC4KICAgICBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlVu
c2FmZSBKYXZhU2NyaXB0IGF0dGVtcHQgdG8gYWNjZXNzIGZyYW1lIHdpdGggVVJMICVzIGZyb20g
ZnJhbWUgd2l0aCBVUkwgJXMuIERvbWFpbnMsIHByb3RvY29scyBhbmQgcG9ydHMgbXVzdCBtYXRj
aC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERvY3VtZW50LT51cmwo
KS51dGY4KCkuZGF0YSgpLCBvcmlnaW5Eb2N1bWVudC0+dXJsKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIHRhcmdldERvY3VtZW50LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBvcmln
aW5Eb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC0xMTM3LDEwICsxMTM4LDEwIEBAIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVu
Y09wZW4oRXhlY1N0YXRlKiAKIAogICAgICAgICBTdHJpbmcgY29tcGxldGVkVVJMOwogICAgICAg
ICBpZiAoIXVybFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb21wbGV0ZWRVUkwgPSBh
Y3RpdmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsU3RyaW5nKTsKKyAgICAgICAg
ICAgIGNvbXBsZXRlZFVSTCA9IGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmxTdHJpbmcpLnN0cmluZygpOwogCiAgICAgICAgIGNvbnN0IFdpbmRvdyogdGFyZ2V0ZWRXaW5k
b3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKTsKLSAgICAgICAgaWYgKCFjb21wbGV0
ZWRVUkwuaXNFbXB0eSgpICYmICghY29tcGxldGVkVVJMLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6
IiwgZmFsc2UpIHx8ICh0YXJnZXRlZFdpbmRvdyAmJiB0YXJnZXRlZFdpbmRvdy0+YWxsb3dzQWNj
ZXNzRnJvbShleGVjKSkpKSB7CisgICAgICAgIGlmICghY29tcGxldGVkVVJMLmlzRW1wdHkoKSAm
JiAoIXByb3RvY29sSXMoY29tcGxldGVkVVJMLCAiamF2YXNjcmlwdCIpIHx8ICh0YXJnZXRlZFdp
bmRvdyAmJiB0YXJnZXRlZFdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpKSB7CiAgICAg
ICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdFByb3h5KCktPnBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hl
ZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5v
dXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgICAgICAgIH0KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NzksNyArNTc5LDcgQEAgc3RhdGljIE5TQXJy
YXkgKmtpdChjb25zdCBWZWN0b3I8SW50UmVjdAogICAgIEFTU0VSVChuYW1lKTsKICAgICBXZWJD
b3JlOjpFbGVtZW50KiBlbGVtZW50ID0gW3NlbGYgX2VsZW1lbnRdOwogICAgIEFTU0VSVChlbGVt
ZW50KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6S1VSTChlbGVtZW50LT5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChwYXJzZVVSTChlbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZSkpLmRlcHJlY2F0ZWRT
dHJpbmcoKSkpLmdldE5TVVJMKCk7CisgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKHBhcnNlVVJMKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lKSkpOwogfQogCiAv
LyBGSVhNRTogdGhpcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9u
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NiBAQAogI2ltcG9ydCAiSFRNTERvY3VtZW50LmgiCiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50
LmgiCiAjaW1wb3J0ICJIVE1MT2JqZWN0RWxlbWVudC5oIgotI2ltcG9ydCAiS1VSTC5oIgogI2lt
cG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW1wb3J0ICJt
YXJrdXAuaCIKQEAgLTYzLDcgKzYyLDcgQEAKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9j
cmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBT
dHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCiB7Ci0gICAgTlNV
UkwgKmJhc2VVUkwgPSBXZWJDb3JlOjpLVVJMKFtzZWxmIF9kb2N1bWVudF0tPmNvbXBsZXRlVVJM
KFdlYkNvcmU6OnBhcnNlVVJMKGJhc2VVUkxTdHJpbmcpKS5kZXByZWNhdGVkU3RyaW5nKCkpLmdl
dE5TVVJMKCk7CisgICAgTlNVUkwgKmJhc2VVUkwgPSBbc2VsZiBfZG9jdW1lbnRdLT5jb21wbGV0
ZVVSTChXZWJDb3JlOjpwYXJzZVVSTChiYXNlVVJMU3RyaW5nKSk7CiAgICAgcmV0dXJuIFtzZWxm
IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOm1hcmt1cFN0cmluZyBiYXNl
VVJMOmJhc2VVUkxdOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBA
IHN1YiBHZXRQYXJlbnRDbGFzc05hbWUKICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKIAogICAg
IHJldHVybiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifSBp
ZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifTsKLSAgICBy
ZXR1cm4gIktKUzo6RE9NT2JqZWN0IiBpZiBAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMDsKKyAg
ICByZXR1cm4gIkRPTU9iamVjdCIgaWYgQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDA7CiAgICAg
cmV0dXJuICJKUyIgLiAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGRhdGFOb2RlLT5wYXJl
bnRzKDApKTsKIH0KIApAQCAtMTE5MCw3ICsxMTkwLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8JGNs
YXNzTmFtZSo+KHNsb3Quc2xvdEJhc2UoKSk7XG4iKTsKICAgICAgICAgaWYgKEluZGV4R2V0dGVy
UmV0dXJuc1N0cmluZ3MoJGltcGxDbGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyJQbGF0Zm9ybVN0cmluZy5oIn0gPSAxOworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
S1VSTC5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IGpzU3RyaW5nT3JOdWxsKHRoaXNPYmotPmltcGwoKS0+aXRlbShzbG90LmluZGV4KCkpKTtcbiIp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqLT5p
bXBsKCkpLT5pdGVtKHNsb3QuaW5kZXgoKSkpO1xuIik7CkBAIC0xMjEzLDExICsxMjEzLDExIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gS0pTOjpjYWNoZVNWR0RPTU9iamVjdDxKU1NWR1BPRFR5cGVX
cmFwcGVyPCRwb2RUeXBlPiwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlPihleGVj
LCBvYmosIGNvbnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8SlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4s
ICRjbGFzc05hbWUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZT4oZXhlYywgb2JqLCBjb250ZXh0KTtc
biIpOwogICAgICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigk
aW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBLSlM6OmNhY2hlU1ZHRE9NT2JqZWN0PCRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NOYW1lLCAk
e2NsYXNzTmFtZX1Qcm90b3R5cGU+KGV4ZWMsIG9iaiwgY29udGV4dCk7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDwkaW1w
bENsYXNzTmFtZSwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlPihleGVjLCBvYmos
IGNvbnRleHQpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gS0pTOjpjYWNoZURPTU9iamVjdDwkaW1wbENsYXNzTmFtZSwg
JGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlPihleGVjLCBvYmopO1xuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8JGlt
cGxDbGFzc05hbWUsICRjbGFzc05hbWUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZT4oZXhlYywgb2Jq
KTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAg
ICAgfQpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIHJldHVy
biAianNOdW1iZXIoJHZhbHVlKSIgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgk
dHlwZSkgb3IgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSIgb3IgJHR5cGUgZXEgIkRPTVRpbWVTdGFt
cCI7CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKLSAg
ICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0gMTsKKyAgICAgICAgJGlt
cGxJbmNsdWRlc3siS1VSTC5oIn0gPSAxOwogICAgICAgICBteSAkY29udiA9ICRzaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0TnVsbFN0cmluZ1RvIn07CiAgICAgICAgIGlm
IChkZWZpbmVkICRjb252KSB7CiAgICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JOdWxsKCR2
YWx1ZSkiIGlmICRjb252IGVxICJOdWxsIjsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0JKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNj
YUBtYWMuY29tPiAKICMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBXZWluaWcgPHNh
bUB3ZWJraXQub3JnPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8
YXBAd2Via2l0Lm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIyBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTM2LDcgKzUz
Niw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0
b3ItPklzTm9uUG9pbnRlclR5cGUoJHR5cGUpIG9yIElzTmF0aXZlT2JqQ1R5cGUoJHR5cGUpOwog
CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7Ci0gICAgICAg
ICRpbXBsSW5jbHVkZXN7IlBsYXRmb3JtU3RyaW5nLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IktVUkwuaCJ9ID0gMTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogV2Vi
Q29yZS9icmlkZ2UvbWFjL1dlYkNvcmVBWE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNv
cmUvYnJpZGdlL21hYy9XZWJDb3JlQVhPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOTksMTkgKzEwOTksMTMgQEAgc3RhdGljIElu
dFJlY3QgYm91bmRpbmdCb3hSZWN0KFJlbmRlck9iagogICAgIAogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV0pIHsKICAg
ICAgICAgaWYgKFtzZWxmIGlzQW5jaG9yXSkgewotICAgICAgICAgICAgSFRNTEFuY2hvckVsZW1l
bnQqIGFuY2hvciA9IFtzZWxmIGFuY2hvckVsZW1lbnRdOwotICAgICAgICAgICAgaWYgKGFuY2hv
cikgewotICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IGFuY2hvci0+Z2V0QXR0
cmlidXRlKGhyZWZBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFzLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBhbmNob3ItPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gS1VSTChzKS5n
ZXROU1VSTCgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChIVE1MQW5jaG9y
RWxlbWVudCogYW5jaG9yID0gW3NlbGYgYW5jaG9yRWxlbWVudF0pIHsKKyAgICAgICAgICAgICAg
ICBOU1VSTCAqaHJlZiA9IGFuY2hvci0+aHJlZigpOworICAgICAgICAgICAgICAgIHJldHVybiBo
cmVmOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fcmVuZGVy
ZXItPmlzSW1hZ2UoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxl
bWVudCgpLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJp
bmcgc3JjID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG1fcmVuZGVyZXItPmVsZW1l
bnQoKSktPnNyYygpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGlmICghc3JjLmlz
TnVsbCgpKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gS1VSTChzcmMpLmdldE5TVVJMKCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAobV9yZW5kZXJlci0+aXNJbWFnZSgpICYmIG1fcmVuZGVyZXItPmVs
ZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoaW1nVGFnKSkgewor
ICAgICAgICAgICAgTlNVUkwgKnNyYyA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPiht
X3JlbmRlcmVyLT5lbGVtZW50KCkpLT5zcmMoKTsKKyAgICAgICAgICAgIHJldHVybiBzcmM7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CkBAIC0xNjcyLDcgKzE2NjYsNyBA
QCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0CiAgICAgLy8gYWRkIG5l
dyBhdHRyaWJ1dGVzIGFuZCByZW1vdmUgaXJyZWxldmFudCBpbmhlcml0ZWQgb25lcwogICAgIC8v
IE5PVEU6IGNvbG9yIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJlY2F1c2UgLVtO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZTogdmFsdWU6IHJhbmdlOl0gZG9l
cyBub3QgbWVyZ2UKICAgICAvLyBpZGVudGljYWwgY29sb3JzLiAgV29ya2Fyb3VuZCBpcyB0byBu
b3QgcmVwbGFjZSBhbiBleGlzdGluZyBjb2xvciBhdHRyaWJ1dGUgaWYgaXQgbWF0Y2hlcyB3aGF0
IHdlIGFyZSBhZGRpbmcuICBUaGlzIGFsc28gbWVhbnMKLSAgICAvLyB3ZSBjYW4gbm90IGp1c3Qg
cHJlLXJlbW92ZSBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0ZXMgb24gdGhlIGFwcGVuZGVkIHN0cmlu
Zywgc28gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGlycmVsZXZhbnQgb25lcyBpbmRpdmlkdWFsbHku
CisgICAgLy8gd2UgY2Fubm90IGp1c3QgcHJlLXJlbW92ZSBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0
ZXMgb24gdGhlIGFwcGVuZGVkIHN0cmluZywgc28gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGlycmVs
ZXZhbnQgb25lcyBpbmRpdmlkdWFsbHkuCiAKICAgICAvLyByZW1vdmUgaW5oZXJpdGVkIGF0dGFj
aG1lbnQgZnJvbSBwcmlvciBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRSZXBsYWNlZAogICAgIFth
dHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlBdHRhY2htZW50VGV4dEF0
dHJpYnV0ZSByYW5nZTphdHRyU3RyaW5nUmFuZ2VdOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFj
L1dlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9t
YWMvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUv
YnJpZGdlL21hYy9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTksMTcgKzU5LDE5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQGVuZAogCiAv
LyBjb252ZXJ0IFVTdHJpbmcgdG8gTlNTdHJpbmcKLXN0YXRpYyBOU1N0cmluZyAqdG9OU1N0cmlu
Zyhjb25zdCBVU3RyaW5nICZzKQorc3RhdGljIE5TU3RyaW5nICp0b05TU3RyaW5nKGNvbnN0IFVT
dHJpbmcmIHMpCiB7Ci0gICAgaWYgKHMuaXNFbXB0eSgpKSByZXR1cm4gbmlsOwotICAgIHJldHVy
biBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6KGNvbnN0IHVuaWNoYXIgKilzLmRhdGEo
KSBsZW5ndGg6cy5zaXplKCldOworICAgIGlmIChzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5pY2hhcio+KHMuZGF0YSgpKSBsZW5ndGg6cy5zaXplKCldOwogfQog
CiAvLyBjb252ZXJ0IFVTdHJpbmcgdG8gTlNVUkwKLXN0YXRpYyBOU1VSTCAqdG9OU1VSTChjb25z
dCBVU3RyaW5nICZzKQorc3RhdGljIE5TVVJMICp0b05TVVJMKGNvbnN0IFVTdHJpbmcmIHMpCiB7
Ci0gICAgaWYgKHMuaXNFbXB0eSgpKSByZXR1cm4gbmlsOwotICAgIHJldHVybiBLVVJMKERlcHJl
Y2F0ZWRTdHJpbmcocykpLmdldE5TVVJMKCk7CisgICAgaWYgKHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIHJldHVybiBLVVJMKHMpOwogfQogCiAvLyBDKysgaW50ZXJmYWNl
IHRvIEtKUyBkZWJ1Z2dlciBjYWxsYmFja3MKQEAgLTEzNyw4ICsxMzksNiBAQCBjbGFzcyBXZWJD
b3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAKIH07CiAKLQotCiAvLyBXZWJDb3JlU2Ny
aXB0RGVidWdnZXIKIC8vCiAvLyBUaGlzIGlzIHRoZSBtYWluIChiZWhpbmQtdGhlLXNjZW5lcykg
ZGVidWdnZXIgY2xhc3MgaW4gV2ViQ29yZS4KQEAgLTE1OSw3ICsxNTksNyBAQCBjbGFzcyBXZWJD
b3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAtIChXZWJDb3JlU2NyaXB0RGVidWdnZXIg
Kilpbml0V2l0aERlbGVnYXRlOihpZDxXZWJTY3JpcHREZWJ1Z2dlcj4pZGVsZWdhdGUKIHsKICAg
ICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZWxlZ2F0ZSAgID0gZGVs
ZWdhdGU7CisgICAgICAgIF9kZWxlZ2F0ZSAgPSBkZWxlZ2F0ZTsKICAgICAgICAgX2dsb2JhbE9i
aiA9IFtfZGVsZWdhdGUgZ2xvYmFsT2JqZWN0XTsKICAgICAgICAgX2RlYnVnZ2VyICA9IG5ldyBX
ZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAoc2VsZiwgW19nbG9iYWxPYmogX3Jvb3RPYmplY3RdLT5n
bG9iYWxPYmplY3QoKSk7CiAgICAgfQpAQCAtMTg2LDggKzE4Niw2IEBAIGNsYXNzIFdlYkNvcmVT
Y3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKIAogQGVuZAogCi0KLQogQGltcGxlbWVudGF0aW9u
IFdlYkNvcmVTY3JpcHREZWJ1Z2dlciAoV2ViQ29yZVNjcmlwdERlYnVnZ2VySW50ZXJuYWwpCiAK
IC0gKFdlYkNvcmVTY3JpcHRDYWxsRnJhbWUgKilfZW50ZXJGcmFtZTooRXhlY1N0YXRlICopc3Rh
dGU7CkBAIC0yMDYsOCArMjA0LDYgQEAgY2xhc3MgV2ViQ29yZVNjcmlwdERlYnVnZ2VySW1wIDog
cHVibGljIAogCiBAZW5kCiAKLQotCiAvLyBXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lCiAvLwogLy8g
T25lIG9mIHRoZXNlIGlzIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGVhY2ggc3RhY2sgZnJhbWUuICBB
ZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgImdsb2JhbCIKQEAgLTI1NSw4ICsyNTEsNiBAQCBjbGFz
cyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAKIEBlbmQKIAotCi0KIEBpbXBs
ZW1lbnRhdGlvbiBXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lCiAKIC0gKHZvaWQpZGVhbGxvYwpAQCAt
Mjc2LDcgKzI3MCw2IEBAIGNsYXNzIFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAK
ICAgICByZXR1cm4gX2NhbGxlcjsKIH0KIAotCiAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHNjb3Bl
IG9iamVjdHMgKG1vc3QgbG9jYWwgZmlyc3QpLgogLy8gVGhlIHByb3BlcnRpZXMgb2YgZWFjaCBz
Y29wZSBvYmplY3QgYXJlIHRoZSB2YXJpYWJsZXMgZm9yIHRoYXQgc2NvcGUuCiAvLyBOb3RlIHRo
YXQgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5IHdpbGwgX2Fsd2F5c18gYmUgdGhlIGdsb2Jh
bCBvYmplY3QgKHdpbmRvd1NjcmlwdE9iamVjdCksCkBAIC0zMDEsMTQgKzI5NCwxMyBAQCBjbGFz
cyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotCiAvLyBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBmb3IgdGhpcyBmcmFt
ZSwgaWYgYXZhaWxhYmxlLgogLy8gUmV0dXJucyBuaWwgZm9yIGFub255bW91cyBmdW5jdGlvbnMg
YW5kIGZvciB0aGUgZ2xvYmFsIGZyYW1lLgogCiAtIChOU1N0cmluZyAqKWZ1bmN0aW9uTmFtZQog
ewogICAgIGlmIChfc3RhdGUtPnNjb3BlTm9kZSgpKSB7Ci0gICAgICAgIEZ1bmN0aW9uSW1wICpm
dW5jID0gX3N0YXRlLT5mdW5jdGlvbigpOworICAgICAgICBGdW5jdGlvbkltcCogZnVuYyA9IF9z
dGF0ZS0+ZnVuY3Rpb24oKTsKICAgICAgICAgaWYgKGZ1bmMpIHsKICAgICAgICAgICAgIElkZW50
aWZpZXIgZm4gPSBmdW5jLT5mdW5jdGlvbk5hbWUoKTsKICAgICAgICAgICAgIHJldHVybiB0b05T
U3RyaW5nKGZuLnVzdHJpbmcoKSk7CkBAIC0zMTcsNyArMzA5LDYgQEAgY2xhc3MgV2ViQ29yZVNj
cmlwdERlYnVnZ2VySW1wIDogcHVibGljIAogICAgIHJldHVybiBuaWw7CiB9CiAKLQogLy8gUmV0
dXJucyB0aGUgcGVuZGluZyBleGNlcHRpb24gZm9yIHRoaXMgZnJhbWUgKG5pbCBpZiBub25lKS4K
IAogLSAoaWQpZXhjZXB0aW9uCkBAIC0zMjYsNyArMzE3LDYgQEAgY2xhc3MgV2ViQ29yZVNjcmlw
dERlYnVnZ2VySW1wIDogcHVibGljIAogICAgIHJldHVybiBbc2VsZiBfY29udmVydFZhbHVlVG9P
YmpjVmFsdWU6X3N0YXRlLT5leGNlcHRpb24oKV07CiB9CiAKLQogLy8gRXZhbHVhdGUgc29tZSBK
YXZhU2NyaXB0IGNvZGUgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBmcmFtZS4KIC8vIFRoZSBjb2Rl
IGlzIGV2YWx1YXRlZCBhcyBpZiBieSAiZXZhbCIsIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVk
LgogLy8gSWYgdGhlcmUgaXMgYW4gKHVuY2F1Z2h0KSBleGNlcHRpb24sIGl0IGlzIHJldHVybmVk
IGFzIHRob3VnaCBfaXRfIHdlcmUgdGhlIHJlc3VsdC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0lt
YWdlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3Bw
CShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDggKzEsNiBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNTcsOSArNTUsMTAgQEAgQ2FjaGVkSW1hZ2UqIENTU0ltYWdlVmFsdWU6OmltYWdl
KERvY0xvYQogCiAgICAgICAgIGlmIChsb2FkZXIpCiAgICAgICAgICAgICBtX2ltYWdlID0gbG9h
ZGVyLT5yZXF1ZXN0SW1hZ2UoZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGZpbmQgYSB3YXkgdG8gbWFr
ZSB0aGVzZSBpbWFnZXMgc2l0IGluIHRoZWlyIG93biBtZW1vcnkgcGFydGl0aW9uLCBzaW5jZSB0
aGV5IGFyZSB1c2VyIGFnZW50IGltYWdlcy4KLSAgICAgICAgICAgIG1faW1hZ2UgPSBzdGF0aWNf
Y2FzdDxDYWNoZWRJbWFnZSo+KGNhY2hlKCktPnJlcXVlc3RSZXNvdXJjZSgwLCBDYWNoZWRSZXNv
dXJjZTo6SW1hZ2VSZXNvdXJjZSwgS1VSTChnZXRTdHJpbmdWYWx1ZSgpLmRlcHJlY2F0ZWRTdHJp
bmcoKSksIDAsIDApKTsKKyAgICAgICAgICAgIG1faW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJ
bWFnZSo+KGNhY2hlKCktPnJlcXVlc3RSZXNvdXJjZSgwLCBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VS
ZXNvdXJjZSwgS1VSTChnZXRTdHJpbmdWYWx1ZSgpKSwgMCwgMCkpOworICAgICAgICB9CiAKICAg
ICAgICAgaWYgKG1faW1hZ2UpCiAgICAgICAgICAgICBtX2ltYWdlLT5yZWYodGhpcyk7CkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2Nzcy9DU1NJ
bXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtOTEsNyArOTAsNyBAQCB2b2lkIENTU0ltcG9ydFJ1bGU6Omlu
c2VydGVkSW50b1BhcmVudCgpCiAgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJl
bnRTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKQog
ICAgICAgICAvLyB1c2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAg
ICAgICAgYWJzSHJlZiA9IEtVUkwocGFyZW50U2hlZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5n
KCksIG1fc3RySHJlZi5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpOworICAgICAgICBhYnNI
cmVmID0gS1VSTChLVVJMKHBhcmVudFNoZWV0LT5ocmVmKCkpLCBtX3N0ckhyZWYpLnN0cmluZygp
OwogCiAgICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGltcG9ydCBjaGFpbi4gIElmIHdl
IGVuY291bnRlciBhIHN0eWxlc2hlZXQKICAgICAvLyBpbiBvdXIgcGFyZW50IGNoYWluIHdpdGgg
dGhlIHNhbWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24g
MzAxNzIpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRm9u
dEZhbWlseVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udFZhbHVlLmgiCi0jaW5jbHVkZSAiS1VSTC5o
IgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNp
bmNsdWRlICJQYWlyLmgiCkBAIC04MjEsOSArODIwLDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoaW50IHByb3BJZCwgYgogICAgICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAg
ICAgICAgICAgIGlmICghdXJpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQobmV3IENTU0N1cnNvckltYWdlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmco
KSwgdXJpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBob3RzcG90LCBzdHlsZUVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NDdXJzb3JJbWFnZVZhbHVlKEtVUkwoc3R5bGVFbGVtZW50
LT5iYXNlVVJMKCksIHVyaSkuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICBob3Rz
cG90LCBzdHlsZUVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoKHN0cmljdCAmJiAhdmFsdWUpIHx8ICh2YWx1ZSAmJiAhKHZhbHVlLT51
bml0ID09IFZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykpKQpAQCAtODgx
LDkgKzg3OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAg
ICAgICAgICAgIC8vICMjIyBhbGxvdyBzdHJpbmcgaW4gbm9uIHN0cmljdCBtb2RlPwogICAgICAg
ICAgICAgU3RyaW5nIHVyaSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKSk7CiAg
ICAgICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IG5ldyBDU1NJbWFnZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICBLVVJMKHN0eWxl
RWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdXJpLmRlcHJlY2F0ZWRTdHJp
bmcoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCk7CisgICAg
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZShLVVJMKHN0eWxlRWxl
bWVudC0+YmFzZVVSTCgpLCB1cmkpLnN0cmluZygpLCBzdHlsZUVsZW1lbnQpOwogICAgICAgICAg
ICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
MDg4LDkgKzEwODQsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBi
CiAgICAgICAgICAgICB3aGlsZSAoKHZhbCA9IHZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewogICAg
ICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkp
IHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VVUkwoZG9tU3RyaW5n
KHZhbC0+c3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1VS
TChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOworICAgICAgICAgICAgICAgICAgICBw
YXJzZWRWYWx1ZSA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShLVVJMKHN0eWxlRWxlbWVudC0+YmFz
ZVVSTCgpLCB2YWx1ZSkuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGlmICghcGFyc2VkVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgzOSw4
ICsxODM0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVudChpbnQgcHJvcElkLAogICAg
ICAgICBpZiAodmFsLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAg
ICAgICAgICAvLyB1cmwKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlVVJMKGRvbVN0
cmluZyh2YWwtPnN0cmluZykpOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTSW1h
Z2VWYWx1ZSgKLSAgICAgICAgICAgICAgICBLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRl
cHJlY2F0ZWRTdHJpbmcoKSwgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwgc3R5
bGVFbGVtZW50KTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUo
S1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKSwgdmFsdWUpLnN0cmluZygpLCBzdHlsZUVsZW1l
bnQpOwogICAgICAgICB9IGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24pIHsK
ICAgICAgICAgICAgIC8vIGF0dHIoWCkgfCBjb3VudGVyKFggWyxZXSkgfCBjb3VudGVycyhYLCBZ
LCBbLFpdKQogICAgICAgICAgICAgVmFsdWVMaXN0ICphcmdzID0gdmFsLT5mdW5jdGlvbi0+YXJn
czsKQEAgLTE5MDYsOCArMTkwMCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRJ
bWFnZShSZWYKICAgICBpZiAodmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAgU3RyaW5nIHVyaSA9IHBhcnNlVVJMKGRvbVN0
cmluZyh2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+c3RyaW5nKSk7CiAgICAgICAgIGlmICghdXJpLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUoS1VSTChzdHls
ZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHVyaS5kZXByZWNhdGVkU3Ry
aW5nKCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZUVsZW1lbnQpOworICAgICAgICAgICAgdmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZShL
VVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLCB1cmkpLnN0cmluZygpLCBzdHlsZUVsZW1lbnQp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjcz
Niw3ICsyNzI5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogICAgICAg
ICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gcGFyc2VkVmFsdWU7CiAgICAgICAgIGlmICh2
YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkgJiYgIWV4cGVjdENvbW1hKSB7
CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZVVSTChkb21TdHJpbmcodmFsLT5zdHJp
bmcpKTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUo
S1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksIGZhbHNlKTsKKyAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwo
KSwgdmFsdWUpLnN0cmluZygpLCBmYWxzZSk7CiAgICAgICAgICAgICB1cmlWYWx1ZSA9IHBhcnNl
ZFZhbHVlOwogICAgICAgICAgICAgYWxsb3dGb3JtYXQgPSB0cnVlOwogICAgICAgICAgICAgZXhw
ZWN0Q29tbWEgPSB0cnVlOwpAQCAtMzI5MSw4ICszMjg0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQm9yZGVySW1hZ2UoaW50IHBybwogICAgIGlmICh1cmkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgY29udGV4dC5jb21taXRJbWFnZShuZXcgQ1NTSW1hZ2VW
YWx1ZShLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdXJp
LmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50KSk7CisgICAg
Y29udGV4dC5jb21taXRJbWFnZShuZXcgQ1NTSW1hZ2VWYWx1ZShLVVJMKHN0eWxlRWxlbWVudC0+
YmFzZVVSTCgpLCB1cmkpLnN0cmluZygpLCBzdHlsZUVsZW1lbnQpKTsKICAgICB3aGlsZSAoKHZh
bCA9IHZhbHVlTGlzdC0+bmV4dCgpKSkgewogICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJl
cigpICYmIHZhbGlkVW5pdCh2YWwsIEZJbnRlZ2VyfEZOb25OZWd8RlBlcmNlbnQsIHRydWUpKSB7
CiAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWwpOwpAQCAtMzkzMCw3ICszOTIy
LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBkZXByZWNhdGVkU3RyaW5nKGNvbnN0IAogI2RlZmluZSB5
eWNvbnN0IGNvbnN0CiB0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwogdHlwZWRlZiB1bnNpZ25l
ZCBZWV9DSEFSOwotLy8gdGhpcyBsaW5lIG1ha2VzIHN1cmUgd2UgdHJlYXQgYWxsIFVuaWNvZGUg
Y2hhcnMgY29ycmVjdGx5LgorLy8gVGhlIGZvbGxvd2luZyBsaW5lIG1ha2VzIHN1cmUgd2UgdHJl
YXQgbm9uLUxhdGluLTEgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlY3RseS4KICNkZWZpbmUgWVlf
U0NfVE9fVUkoYykgKGMgPiAweGZmID8gMHhmZiA6IGMpCiAjZGVmaW5lIFlZX0RPX0JFRk9SRV9B
Q1RJT04gXAogICAgICAgICB5eXRleHQgPSB5eV9icDsgXApAQCAtMzk0NSwxMiArMzkzNywxMiBA
QCB0eXBlZGVmIHVuc2lnbmVkIFlZX0NIQVI7CiAjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkg
KFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCiAjZGVmaW5lIHl5dGVybWluYXRlKCkgeXlU
b2sgPSBFTkRfVE9LRU47IHJldHVybiB5eVRvawogI2RlZmluZSBZWV9GQVRBTF9FUlJPUihhKQot
Ly8gVGhlIGxpbmUgYmVsb3cgaXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSB0b2tlbml6ZXIgd2l0aCBj
b25kaXRvbiBzdGFjay4KKy8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBuZWVkZWQgdG8gYnVpbGQg
dGhlIHRva2VuaXplciB3aXRoIGEgY29uZGl0aW9uIHN0YWNrLgogLy8gVGhlIG1hY3JvIGlzIHVz
ZWQgaW4gdGhlIHRva2VuaXplciBncmFtbWFyIHdpdGggbGluZXMgY29udGFpbmluZwogLy8gQkVH
SU4obWVkaWFxdWVyaWVzKSBhbmQgQkVHSU4oaW5pdGlhbCkuIHl5X3N0YXJ0IGFjdHMgYXMgaW5k
ZXggdG8KIC8vIHRva2VuaXplciB0cmFuc2l0aW9uIHRhYmxlLCBhbmQgJ21lZGlhcXVlcmllcycg
YW5kICdpbml0aWFsJyBhcmUKIC8vIG9mZnNldCBtdWx0aXBsaWVycyB0aGF0IHNwZWNpZnkgd2hp
Y2ggdHJhbnNpdGlvbnMgYXJlIGFjdGl2ZQotLy8gaW4gdGhlIHRva2VuaXplciBkdXJpbmcgaW4g
ZWFjaCBjb25kaXRpb24gKHRva2VuaXplciBzdGF0ZSkKKy8vIGluIHRoZSB0b2tlbml6ZXIgZHVy
aW5nIGluIGVhY2ggY29uZGl0aW9uICh0b2tlbml6ZXIgc3RhdGUpLgogI2RlZmluZSBCRUdJTiB5
eV9zdGFydCA9IDEgKyAyICoKIAogI2luY2x1ZGUgInRva2VuaXplci5jcHAiCkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIENTU1N0
eWxlU2hlZXQqIENTU1N0eWxlU2VsZWN0b3I6Om1fdmlld1MKIENTU1N0eWxlU2hlZXQgKkNTU1N0
eWxlU2VsZWN0b3I6Om1fc3ZnU2hlZXQgPSAwOwogI2VuZGlmCiAKLXN0YXRpYyBDU1NTdHlsZVNl
bGVjdG9yOjpFbmNvZGVkdXJsICpjdXJyZW50RW5jb2RlZFVSTCA9IDA7CitzdGF0aWMgQ1NTU3R5
bGVTZWxlY3Rvcjo6RW5jb2RlZFVSTCogY3VycmVudEVuY29kZWRVUkwgPSAwOwogc3RhdGljIFBz
ZXVkb1N0YXRlIHBzZXVkb1N0YXRlOwogCiBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgc2NyZWVuRXZhbCgpCkBAIC0zMTksMTcgKzMxOSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OnNldEVuY29kZWRVUkwoY29uCiB7CiAgICAgS1VSTCB1ID0gdXJsOwogCi0gICAgdS5zZXRR
dWVyeShEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICB1LnNldFJlZihEZXByZWNhdGVkU3Ry
aW5nOjpudWxsKTsKLSAgICBtX2VuY29kZWRVUkwuZmlsZSA9IHUuZGVwcmVjYXRlZFN0cmluZygp
OwotICAgIGludCBwb3MgPSBtX2VuY29kZWRVUkwuZmlsZS5maW5kUmV2KCcvJyk7CisgICAgdS5z
ZXRRdWVyeShTdHJpbmcoKSk7CisgICAgdS5zZXRSZWYoU3RyaW5nKCkpOworICAgIG1fZW5jb2Rl
ZFVSTC5maWxlID0gdS5zdHJpbmcoKTsKKyAgICBpbnQgcG9zID0gbV9lbmNvZGVkVVJMLmZpbGUu
cmV2ZXJzZUZpbmQoJy8nKTsKICAgICBtX2VuY29kZWRVUkwucGF0aCA9IG1fZW5jb2RlZFVSTC5m
aWxlOwogICAgIGlmIChwb3MgPiAwKSB7CiAgICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoLnRydW5j
YXRlKHBvcyk7Ci0gICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoICs9ICcvJzsKKyAgICAgICAgbV9l
bmNvZGVkVVJMLnBhdGguYXBwZW5kKCcvJyk7CiAgICAgfQotICAgIHUuc2V0UGF0aChEZXByZWNh
dGVkU3RyaW5nOjpudWxsKTsKLSAgICBtX2VuY29kZWRVUkwuaG9zdCA9IHUuZGVwcmVjYXRlZFN0
cmluZygpOworICAgIHUuc2V0UGF0aChTdHJpbmcoKSk7CisgICAgbV9lbmNvZGVkVVJMLnByZWZp
eCA9IHUuc3RyaW5nKCk7CiB9CiAKIENTU1N0eWxlU2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9y
KCkKQEAgLTcwMywxMSArNzAzLDExIEBAIHN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3RhdGUoRWxl
bWVudCAqZSwKICAgICBEZXByZWNhdGVkQ29uc3RTdHJpbmcgY3UocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBEZXByZWNhdGVkQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOwogICAgIERlcHJlY2F0
ZWRTdHJpbmcgdSA9IGN1LnN0cmluZygpOwogICAgIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1sw
XSA9PSAnLycpCi0gICAgICAgIHUucHJlcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+aG9zdCk7Cisg
ICAgICAgIHUucHJlcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4o
Y3VycmVudEVuY29kZWRVUkwtPnByZWZpeC5jaGFyYWN0ZXJzKCkpLCBjdXJyZW50RW5jb2RlZFVS
TC0+cHJlZml4Lmxlbmd0aCgpKTsKICAgICBlbHNlIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1sw
XSA9PSAnIycpCi0gICAgICAgIHUucHJlcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+ZmlsZSk7Cisg
ICAgICAgIHUucHJlcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4o
Y3VycmVudEVuY29kZWRVUkwtPmZpbGUuY2hhcmFjdGVycygpKSwgY3VycmVudEVuY29kZWRVUkwt
PmZpbGUubGVuZ3RoKCkpOwogICAgIGVsc2UKLSAgICAgICAgdS5wcmVwZW5kKGN1cnJlbnRFbmNv
ZGVkVVJMLT5wYXRoKTsKKyAgICAgICAgdS5wcmVwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
RGVwcmVjYXRlZENoYXIqPihjdXJyZW50RW5jb2RlZFVSTC0+cGF0aC5jaGFyYWN0ZXJzKCkpLCBj
dXJyZW50RW5jb2RlZFVSTC0+cGF0aC5sZW5ndGgoKSk7CiAgICAgY2xlYW5wYXRoKHUpOwogICAg
IHBzZXVkb1N0YXRlID0gaGlzdG9yeUNvbnRhaW5zKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNo
YXIqPih1LnVuaWNvZGUoKSksIHUubGVuZ3RoKCkpCiAgICAgICAgID8gUHNldWRvVmlzaXRlZCA6
IFBzZXVkb0xpbms7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAzMDE3MikK
KysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4
ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ1NTIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTEwMCwxMCArOTgsMTAgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKIAogICAgICAg
ICBib29sIHN0cmljdFBhcnNpbmc7CiAKLSAgICAgICAgc3RydWN0IEVuY29kZWR1cmwgewotICAg
ICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBob3N0OyAvL2Fsc28gY29udGFpbnMgcHJvdG9jb2wK
LSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcGF0aDsKLSAgICAgICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgZmlsZTsKKyAgICAgICAgc3RydWN0IEVuY29kZWRVUkwgeworICAgICAgICAgICAg
U3RyaW5nIHByZWZpeDsgLy8gcHJvdG9jb2wsIGhvc3QsIGV0Yy4KKyAgICAgICAgICAgIFN0cmlu
ZyBwYXRoOworICAgICAgICAgICAgU3RyaW5nIGZpbGU7CiAgICAgICAgIH0gbV9lbmNvZGVkVVJM
OwogCiAgICAgICAgIHZvaWQgc2V0RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpOwpJbmRleDog
V2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9NZWRp
YUxpc3QuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsOCBAQCB2b2lkIE1lZGlhTGlzdDo6c2V0TWVk
aWFUZXh0KGNvbnN0IFN0cmluCiAgICAgTWVkaWFMaXN0IHRlbXBNZWRpYUxpc3Q7CiAgICAgQ1NT
UGFyc2VyIHAodHJ1ZSk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gdmFsdWUuc3BsaXQo
JywnKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsaXN0OworICAgIHZhbHVlLnNwbGl0KCcsJywgbGlz
dCk7CiAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7
CiAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBTdHJpbmcgbWVkaXVtID0gKCppdCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7CkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL1N0eWxlQmFzZS5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2Vi
Q29yZS9jc3MvU3R5bGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAv
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgICAgIDE5OTkgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3Jn
KQogICogICAgICAgICAgICAgICAyMDAxIEFuZHJlYXMgU2NobGFwYmFjaCAoc2NobHBiY2hAaWFt
LnVuaWJlLmNoKQogICogICAgICAgICAgICAgICAyMDAxLTIwMDMgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ1LDI3ICs0MywyMCBAQCBT
dHlsZVNoZWV0KiBTdHlsZUJhc2U6OnN0eWxlc2hlZXQoKQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHlsZVNoZWV0Kj4oYik7CiB9CiAKLVN0cmluZyBTdHlsZUJhc2U6OmJhc2VVUkwoKQorS1VS
TCBTdHlsZUJhc2U6OmJhc2VVUkwoKSBjb25zdAogewotICAgIC8vIHRyeSB0byBmaW5kIHRoZSBz
dHlsZSBzaGVldC4gSWYgZm91bmQgbG9vayBmb3IgaXRzIHVybC4KLSAgICAvLyBJZiBpdCBoYXMg
bm9uZSwgbG9vayBmb3IgdGhlIHBhcmVudHNoZWV0LCBvciB0aGUgcGFyZW50Tm9kZSBhbmQKLSAg
ICAvLyB0cnkgdG8gZmluZCBvdXQgYWJvdXQgdGhlaXIgdXJsCi0KLSAgICBTdHlsZVNoZWV0KiBz
aGVldCA9IHN0eWxlc2hlZXQoKTsKKyAgICAvLyBUcnkgdG8gZmluZCB0aGUgc3R5bGUgc2hlZXQu
IElmIGZvdW5kIGxvb2sgZm9yIGl0cyBVUkwuCisgICAgLy8gSWYgaXQgaGFzIG5vbmUsIGdldCB0
aGUgVVJMIGZyb20gdGhlIHBhcmVudCBzaGVldCBvciB0aGUgcGFyZW50IG5vZGUuCiAKKyAgICBT
dHlsZVNoZWV0KiBzaGVldCA9IGNvbnN0X2Nhc3Q8U3R5bGVCYXNlKj4odGhpcyktPnN0eWxlc2hl
ZXQoKTsKICAgICBpZiAoIXNoZWV0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAgICAg
ICAgcmV0dXJuIEtVUkwoKTsKICAgICBpZiAoIXNoZWV0LT5ocmVmKCkuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBzaGVldC0+aHJlZigpOwotCi0gICAgLy8gZmluZCBwYXJlbnQKKyAgICAgICAg
cmV0dXJuIEtVUkwoc2hlZXQtPmhyZWYoKSk7CiAgICAgaWYgKHNoZWV0LT5wYXJlbnQoKSkgCiAg
ICAgICAgIHJldHVybiBzaGVldC0+cGFyZW50KCktPmJhc2VVUkwoKTsKLQogICAgIGlmICghc2hl
ZXQtPm93bmVyTm9kZSgpKSAKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCisgICAgICAgIHJl
dHVybiBLVVJMKCk7CiAgICAgcmV0dXJuIHNoZWV0LT5vd25lck5vZGUoKS0+ZG9jdW1lbnQoKS0+
YmFzZVVSTCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3Jl
L2Nzcy9TdHlsZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENTUyBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
ICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICog
Q29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21pYWwuY29tKQot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw2ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHlsZVNoZWV0OworICAgIGNsYXNz
IEtVUkw7CiAKICAgICAvLyBhIHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0
IGFsbCBoYXZlKQogICAgIGNsYXNzIFN0eWxlQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxl
QmFzZT4gewpAQCAtNDcsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgc2V0UGFyZW50KFN0eWxlQmFzZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CiAK
ICAgICAgICAgLy8gcmV0dXJucyB0aGUgdXJsIG9mIHRoZSBzdHlsZSBzaGVldCB0aGlzIG9iamVj
dCBiZWxvbmdzIHRvCi0gICAgICAgIFN0cmluZyBiYXNlVVJMKCk7CisgICAgICAgIEtVUkwgYmFz
ZVVSTCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDMwMTcy
KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyAr
NDA3LDcgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgWE1MSHR0cFJlcXVlc3Q6OmRldGFj
aFJlcXVlc3RzKHRoaXMpOwogICAgIHsKICAgICAgICAgS0pTOjpKU0xvY2sgbG9jazsKLSAgICAg
ICAgS0pTOjpTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0QWxsRE9NTm9kZXNGb3JEb2N1bWVudCh0
aGlzKTsKKyAgICAgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldEFsbERPTU5vZGVzRm9yRG9j
dW1lbnQodGhpcyk7CiAgICAgfQogCiAgICAgaWYgKG1fZG9jQ2hhbmdlZCAmJiBjaGFuZ2VkRG9j
dW1lbnRzKQpAQCAtODI4LDE5ICs4MjgsMTkgQEAgdm9pZCBEb2N1bWVudDo6c2V0WE1MU3RhbmRh
bG9uZShib29sIHN0YQogICAgIG1feG1sU3RhbmRhbG9uZSA9IHN0YW5kYWxvbmU7CiB9CiAKLVN0
cmluZyBEb2N1bWVudDo6ZG9jdW1lbnRVUkkoKSBjb25zdAorS1VSTCBEb2N1bWVudDo6ZG9jdW1l
bnRVUkkoKSBjb25zdAogewogICAgIHJldHVybiBtX2Jhc2VVUkw7CiB9CiAKLXZvaWQgRG9jdW1l
bnQ6OnNldERvY3VtZW50VVJJKGNvbnN0IFN0cmluZyAmdXJpKQordm9pZCBEb2N1bWVudDo6c2V0
RG9jdW1lbnRVUkkoY29uc3QgU3RyaW5nJiB1cmkpCiB7Ci0gICAgbV9iYXNlVVJMID0gdXJpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBtX2Jhc2VVUkwgPSBLVVJMKHVyaSk7CiB9CiAKLVN0cmlu
ZyBEb2N1bWVudDo6YmFzZVVSSSgpIGNvbnN0CitLVVJMIERvY3VtZW50OjpiYXNlVVJJKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnRVUkkoKTsKKyAgICByZXR1cm4gbV9iYXNlVVJMOwog
fQogCiBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNv
bnN0CkBAIC0xMzIzLDEwICsxMzIzLDEwIEBAIHZvaWQgRG9jdW1lbnQ6Om9wZW4oKQogewogICAg
IC8vIFRoaXMgaXMgd29yayB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBkbyBpbiBjbGVhcigpLCBi
dXQgd2UgY2FuJ3QgaGF2ZSBpdAogICAgIC8vIGhhcHBlbiB3aGVuIGltcGxpY2l0T3BlbigpIGlz
IGNhbGxlZCB1bmxlc3Mgd2UgcmVvcmdhbml6ZSBGcmFtZSBjb2RlLgotICAgIGlmIChEb2N1bWVu
dCAqcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV91cmwuaXNFbXB0
eSgpIHx8IG1fdXJsID09ICJhYm91dDpibGFuayIpCisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQg
PSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAgICAgIGlmIChtX3VybC5pc0VtcHR5KCkgfHwgbV91
cmwgPT0gYmxhbmtVUkwoKSkKICAgICAgICAgICAgIHNldFVSTChwYXJlbnQtPmJhc2VVUkwoKSk7
Ci0gICAgICAgIGlmIChtX2Jhc2VVUkwuaXNFbXB0eSgpIHx8IG1fYmFzZVVSTCA9PSAiYWJvdXQ6
YmxhbmsiKQorICAgICAgICBpZiAobV9iYXNlVVJMLmlzRW1wdHkoKSB8fCBtX2Jhc2VVUkwgPT0g
YmxhbmtVUkwoKSkKICAgICAgICAgICAgIHNldEJhc2VVUkwocGFyZW50LT5iYXNlVVJMKCkpOwog
ICAgIH0KIApAQCAtMTYxNiwyMSArMTYxNiwyMSBAQCB2b2lkIERvY3VtZW50OjpjbGVhcigpCiAg
ICAgbV93aW5kb3dFdmVudExpc3RlbmVycy5jbGVhcigpOwogfQogCi12b2lkIERvY3VtZW50Ojpz
ZXRVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdXJsKQordm9pZCBEb2N1bWVudDo6c2V0VVJM
KGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAodXJsID09IG1fdXJsKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX3VybCA9IHVybDsKICAgICBpZiAobV9zdHlsZVNlbGVjdG9yKQotICAgICAg
ICBtX3N0eWxlU2VsZWN0b3ItPnNldEVuY29kZWRVUkwobV91cmwpOworICAgICAgICBtX3N0eWxl
U2VsZWN0b3ItPnNldEVuY29kZWRVUkwodXJsKTsKIAogICAgIG1faXNBbGxvd2VkVG9Mb2FkTG9j
YWxSZXNvdXJjZXMgPSBzaG91bGRCZUFsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpOwogIH0K
ICAKIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEJlQWxsb3dlZFRvTG9hZExvY2FsUmVzb3VyY2VzKCkg
Y29uc3QKIHsKLSAgICBpZiAoRnJhbWVMb2FkZXI6OnNob3VsZFRyZWF0VVJMQXNMb2NhbChtX3Vy
bCkpCisgICAgaWYgKEZyYW1lTG9hZGVyOjpzaG91bGRUcmVhdFVSTEFzTG9jYWwobV91cmwuc3Ry
aW5nKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMt
PmZyYW1lKCk7CkBAIC0xNjQxLDE3ICsxNjQxLDE3IEBAIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEJl
QWxsb3dlZFRvTG9hZExvY2EKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAobV91cmwgPT0gImFib3V0OmJsYW5rIiAmJiBmcmFtZS0+bG9h
ZGVyKCktPm9wZW5lcigpICYmIGZyYW1lLT5sb2FkZXIoKS0+b3BlbmVyKCktPmRvY3VtZW50KCkt
PmlzQWxsb3dlZFRvTG9hZExvY2FsUmVzb3VyY2VzKCkpCisgICAgaWYgKG1fdXJsID09IGJsYW5r
VVJMKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5vcGVuZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPm9w
ZW5lcigpLT5kb2N1bWVudCgpLT5pc0FsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZG9jdW1lbnRMb2FkZXItPnN1YnN0
aXR1dGVEYXRhKCkuaXNWYWxpZCgpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRCYXNlVVJMKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmIGJhc2VVUkwpIAordm9pZCBEb2N1bWVudDo6c2V0QmFzZVVS
TChjb25zdCBLVVJMJiBiYXNlVVJMKSAKIHsgCi0gICAgbV9iYXNlVVJMID0gYmFzZVVSTDsgCisg
ICAgbV9iYXNlVVJMID0gYmFzZVVSTDsKICAgICBpZiAobV9lbGVtU2hlZXQpCi0gICAgICAgIG1f
ZWxlbVNoZWV0LT5zZXRIcmVmKG1fYmFzZVVSTCk7CisgICAgICAgIG1fZWxlbVNoZWV0LT5zZXRI
cmVmKGJhc2VVUkwuc3RyaW5nKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRDU1NTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyAmdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hl
ZENTU1N0eWxlU2hlZXQqIHNoZWV0KQpAQCAtMTY4NywxNCArMTY4NywxNCBAQCBTdHJpbmcgRG9j
dW1lbnQ6OnVzZXJTdHlsZVNoZWV0KCkgY29uc3QKIENTU1N0eWxlU2hlZXQqIERvY3VtZW50Ojpl
bGVtZW50U2hlZXQoKQogewogICAgIGlmICghbV9lbGVtU2hlZXQpCi0gICAgICAgIG1fZWxlbVNo
ZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcywgYmFzZVVSTCgpKTsKKyAgICAgICAgbV9lbGVt
U2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCBiYXNlVVJMKCkuc3RyaW5nKCkpOwogICAg
IHJldHVybiBtX2VsZW1TaGVldC5nZXQoKTsKIH0KIAogQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6
Om1hcHBlZEVsZW1lbnRTaGVldCgpCiB7CiAgICAgaWYgKCFtX21hcHBlZEVsZW1lbnRTaGVldCkK
LSAgICAgICAgbV9tYXBwZWRFbGVtZW50U2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCBi
YXNlVVJMKCkpOworICAgICAgICBtX21hcHBlZEVsZW1lbnRTaGVldCA9IG5ldyBDU1NTdHlsZVNo
ZWV0KHRoaXMsIGJhc2VVUkwoKS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIG1fbWFwcGVkRWxlbWVu
dFNoZWV0LmdldCgpOwogfQogCkBAIC0xODQ3LDcgKzE4NDcsNyBAQCB2b2lkIERvY3VtZW50Ojpw
cm9jZXNzSHR0cEVxdWl2KGNvbnN0IFN0CiAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVybCA9IGNvbXBsZXRlVVJMKHVybCk7
CisgICAgICAgICAgICAgICAgdXJsID0gY29tcGxldGVVUkwodXJsKS5zdHJpbmcoKTsKICAgICAg
ICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVIVFRQUmVkaXJlY3Rpb24oZGVsYXksIHVy
bCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAi
c2V0LWNvb2tpZSIpKSB7CkBAIC0yMTgyLDggKzIxODIsMTMgQEAgdm9pZCBEb2N1bWVudDo6cmVj
YWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMDsKIAogI2lm
IEVOQUJMRShTVkcpCi0gICAgICAgICAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUuZGVwcmVjYXRlZFN0cmluZygpLnJlcGxh
Y2UoJyYnLCAiJiYiKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCdzIHRoZSBwb2lu
dCBvZiBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZQorICAgICAgICAgICAg
ICAgIC8vICh0aXRsZSkgdGhhdCdzIG5vdCBsb29rZWQgYXQgYWZ0ZXJ3YXJkPyBPYnZpb3VzbHkg
dGhlcmUncyBubyB0ZXN0CisgICAgICAgICAgICAgICAgLy8gY2FzZSBmb3IgdGhpcyEKKyAgICAg
ICAgICAgICAgICBpZiAoIW4tPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgbW9kaWZpZWRUaXRsZSA9IHRpdGxlLmRvbVN0cmluZygpOworICAgICAgICAgICAg
ICAgICAgICB0aXRsZSA9IG1vZGlmaWVkVGl0bGUucmVwbGFjZSgnJicsICImJiIpOworICAgICAg
ICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNjA3LDcg
KzI2MTIsNyBAQCBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tpZSgpIGNvbnN0CiAKIHZvaWQgRG9jdW1l
bnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHNldENvb2tpZXModGhp
cywgdXJsKCksIHBvbGljeUJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHZhbHVlKTsKKyAg
ICBzZXRDb29raWVzKHRoaXMsIHVybCgpLCBwb2xpY3lCYXNlVVJMKCksIHZhbHVlKTsKIH0KIAog
U3RyaW5nIERvY3VtZW50OjpyZWZlcnJlcigpIGNvbnN0CkBAIC0yNzg1LDI3ICsyNzkwLDE4IEBA
IFVDaGFyIERvY3VtZW50OjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm8KICAgICByZXR1cm4gbV9k
ZWNvZGVyLT5lbmNvZGluZygpLmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKTsKIH0KIAotRGVw
cmVjYXRlZFN0cmluZyBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyYgdXJsKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHRyZWF0cyBudWxsIFVSTHMgdGhlIHNhbWUg
YXMgZW1wdHkgVVJMcywgdW5saWtlIHRoZSBTdHJpbmcgZnVuY3Rpb24gYmVsb3cuCi0KLSAgICAv
LyBJZiBib3RoIHRoZSBVUkwgYW5kIGJhc2UgVVJMIGFyZSBlbXB0eSwgbGlrZSB0aGV5IGFyZSBm
b3IgZG9jdW1lbnRzCi0gICAgLy8gY3JlYXRlZCB1c2luZyBET01JbXBsZW1lbnRhdGlvbjo6Y3Jl
YXRlRG9jdW1lbnQsIGp1c3QgcmV0dXJuIHRoZSBwYXNzZWQgaW4gVVJMLgotICAgIC8vIChXZSBk
byB0aGlzIGJlY2F1c2UgdXJsKCkgcmV0dXJucyAiYWJvdXQ6YmxhbmsiIGZvciBlbXB0eSBVUkxz
LgotICAgIGlmIChtX3VybC5pc0VtcHR5KCkgJiYgbV9iYXNlVVJMLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHVybDsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEtVUkwo
YmFzZVVSTCgpLCB1cmwpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICByZXR1cm4gS1VSTChiYXNl
VVJMKCksIHVybCwgbV9kZWNvZGVyLT5lbmNvZGluZygpKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci19
Ci0KLVN0cmluZyBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpCitLVVJM
IERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICAvLyBGSVhN
RTogVGhpcyBhbHdheXMgcmV0dXJucyBudWxsIHdoZW4gcGFzc2VkIGEgbnVsbCBVUkwsIHVubGlr
ZSB0aGUgRGVwcmVjYXRlZFN0cmluZyBmdW5jdGlvbiBhYm92ZS4KLSAgICAvLyBDb2RlIHJlbGll
cyBvbiB0aGlzIGJlaGF2aW9yLCBuYW1lbHkgdGhlIGhyZWYgcHJvcGVydHkgb2YgPGE+IGFuZCB0
aGUgZGF0YSBwcm9wZXJ0eSBvZiA8b2JqZWN0Pi4KKyAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVs
bCBVUkwgd2hlbiBwYXNzZWQgYSBudWxsIHN0cmluZy4KKyAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IGNoYW5nZSB0aGUgS1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/CiAgICAg
aWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHVybDsKLSAgICByZXR1cm4gY29tcGxl
dGVVUkwodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBLVVJMKCk7Cisg
ICAgS1VSTCBiYXNlID0gbV9iYXNlVVJMOworICAgIGlmIChiYXNlLmlzRW1wdHkoKSkKKyAgICAg
ICAgYmFzZSA9IG1fdXJsOworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gS1VS
TChiYXNlLCB1cmwpOworICAgIHJldHVybiBLVVJMKGJhc2UsIHVybCwgbV9kZWNvZGVyLT5lbmNv
ZGluZygpKTsKIH0KIAogYm9vbCBEb2N1bWVudDo6aW5QYWdlQ2FjaGUoKQpJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShy
ZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUg
IkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtMjE4LDEwICsyMTksMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0WE1MVmVyc2lvbihjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBzZXRYTUxTdGFuZGFsb25lKGJvb2wsIEV4Y2VwdGlvbkNvZGUmKTsKIAot
ICAgIFN0cmluZyBkb2N1bWVudFVSSSgpIGNvbnN0OworICAgIEtVUkwgZG9jdW1lbnRVUkkoKSBj
b25zdDsKICAgICB2b2lkIHNldERvY3VtZW50VVJJKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdmly
dHVhbCBTdHJpbmcgYmFzZVVSSSgpIGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJJKCkg
Y29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPE5vZGU+IGFkb3B0Tm9kZShQYXNzUmVmUHRyPE5vZGU+
IHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0zNzEsMTcgKzM3MiwxNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiBtX3dlbGxGb3JtZWQ7IH0K
IAotICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmwuaXNFbXB0
eSgpID8gImFib3V0OmJsYW5rIiA6IG1fdXJsOyB9Ci0gICAgdm9pZCBzZXRVUkwoY29uc3QgRGVw
cmVjYXRlZFN0cmluZyYgdXJsKTsKKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybC5pc0VtcHR5KCkgPyBibGFua1VSTCgpIDogbV91cmw7IH0KKyAgICB2b2lkIHNldFVS
TChjb25zdCBLVVJMJik7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGJhc2VVUkwoKSBjb25zdCB7
IHJldHVybiBtX2Jhc2VVUkwuaXNFbXB0eSgpID8gdXJsKCkgOiBtX2Jhc2VVUkw7IH0KLSAgICB2
b2lkIHNldEJhc2VVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgYmFzZVVSTCk7CisgICAgY29u
c3QgS1VSTCYgYmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVVSTC5pc0VtcHR5KCkgPyB1
cmwoKSA6IG1fYmFzZVVSTDsgfQorICAgIHZvaWQgc2V0QmFzZVVSTChjb25zdCBLVVJMJik7CiAK
LSAgICBTdHJpbmcgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdldDsgfQor
ICAgIGNvbnN0IFN0cmluZyYgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdl
dDsgfQogICAgIHZvaWQgc2V0QmFzZVRhcmdldChjb25zdCBTdHJpbmcmIGJhc2VUYXJnZXQpIHsg
bV9iYXNlVGFyZ2V0ID0gYmFzZVRhcmdldDsgfQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBjb21w
bGV0ZVVSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIFN0cmluZyBjb21wbGV0ZVVS
TChjb25zdCBTdHJpbmcmKTsKKyAgICBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpOwog
CiAgICAgLy8gZnJvbSBjYWNoZWRPYmplY3RDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NT
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25z
dCBDYWNoZWRDU1NTdHlsZVNoZWV0Kik7CkBAIC01NzAsOCArNTcwLDggQEAgcHVibGljOgogCiAg
ICAgU3RyaW5nIGxhc3RNb2RpZmllZCgpIGNvbnN0OwogCi0gICAgU3RyaW5nIHBvbGljeUJhc2VV
UkwoKSBjb25zdCB7IHJldHVybiBtX3BvbGljeUJhc2VVUkw7IH0KLSAgICB2b2lkIHNldFBvbGlj
eUJhc2VVUkwoY29uc3QgU3RyaW5nJiBzKSB7IG1fcG9saWN5QmFzZVVSTCA9IHM7IH0KKyAgICBj
b25zdCBLVVJMJiBwb2xpY3lCYXNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3lCYXNlVVJM
OyB9CisgICAgdm9pZCBzZXRQb2xpY3lCYXNlVVJMKGNvbnN0IEtVUkwmIHVybCkgeyBtX3BvbGlj
eUJhc2VVUkwgPSB1cmw7IH0KICAgICAKICAgICAvLyBUaGUgZm9sbG93aW5nIGltcGxlbWVudHMg
dGhlIHJ1bGUgZnJvbSBIVE1MIDQgZm9yIHdoYXQgdmFsaWQgbmFtZXMgYXJlLgogICAgIC8vIFRv
IGdldCB0aGlzIHJpZ2h0IGZvciBhbGwgdGhlIFhNTCBjYXNlcywgd2UgcHJvYmFibHkgaGF2ZSB0
byBpbXByb3ZlIHRoaXMgb3IgbW92ZSBpdApAQCAtNzAwLDggKzcwMCw4IEBAIHByaXZhdGU6CiAg
ICAgRG9jTG9hZGVyKiBtX2RvY0xvYWRlcjsKICAgICBUb2tlbml6ZXIqIG1fdG9rZW5pemVyOwog
ICAgIGJvb2wgbV93ZWxsRm9ybWVkOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgbV91cmw7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyBtX2Jhc2VVUkw7CisgICAgS1VSTCBtX3VybDsKKyAgICBLVVJMIG1f
YmFzZVVSTDsKICAgICBTdHJpbmcgbV9iYXNlVGFyZ2V0OwogCiAgICAgUmVmUHRyPERvY3VtZW50
VHlwZT4gbV9kb2NUeXBlOwpAQCAtODEzLDcgKzgxMyw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBIVE1MTWFwRWxlbWVudCo+IEltYWdlTWFwc0J5
TmFtZTsKICAgICBJbWFnZU1hcHNCeU5hbWUgbV9pbWFnZU1hcHNCeU5hbWU7CiAKLSAgICBTdHJp
bmcgbV9wb2xpY3lCYXNlVVJMOworICAgIEtVUkwgbV9wb2xpY3lCYXNlVVJMOwogCiAgICAgSGFz
aFNldDxOb2RlKj4gbV9kaXNjb25uZWN0ZWROb2Rlc1dpdGhFdmVudExpc3RlbmVyczsKIApJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudFR5cGUuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoqCi0gKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSwxOSArMjksMzAgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1Eb2N1bWVudFR5cGU6OkRvY3VtZW50VHlwZShET01JbXBsZW1lbnRhdGlv
biAqaSwgRG9jdW1lbnQgKmRvYywgY29uc3QgU3RyaW5nICZuLCBjb25zdCBTdHJpbmcgJnAsIGNv
bnN0IFN0cmluZyAmcykKLSAgICA6IE5vZGUoZG9jKSwgbV9pbXBsZW1lbnRhdGlvbihpKSwgbV9u
YW1lKG4pLCBtX3B1YmxpY0lkKHApLCBtX3N5c3RlbUlkKHMpCitEb2N1bWVudFR5cGU6OkRvY3Vt
ZW50VHlwZShET01JbXBsZW1lbnRhdGlvbiogaSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBT
dHJpbmcmIG4sIGNvbnN0IFN0cmluZyYgcCwgY29uc3QgU3RyaW5nJiBzKQorICAgIDogTm9kZShk
b2N1bWVudCkKKyAgICAsIG1faW1wbGVtZW50YXRpb24oaSkKKyAgICAsIG1fbmFtZShuKQorICAg
ICwgbV9wdWJsaWNJZChwKQorICAgICwgbV9zeXN0ZW1JZChzKQogewogfQogCi1Eb2N1bWVudFR5
cGU6OkRvY3VtZW50VHlwZShEb2N1bWVudCAqZG9jLCBjb25zdCBTdHJpbmcgJm4sIGNvbnN0IFN0
cmluZyAmcCwgY29uc3QgU3RyaW5nICZzKQotICAgIDogTm9kZShkb2MpLCBtX25hbWUobiksIG1f
cHVibGljSWQocCksIG1fc3lzdGVtSWQocykKK0RvY3VtZW50VHlwZTo6RG9jdW1lbnRUeXBlKERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBuLCBjb25zdCBTdHJpbmcmIHAsIGNvbnN0
IFN0cmluZyYgcykKKyAgICA6IE5vZGUoZG9jdW1lbnQpCisgICAgLCBtX25hbWUobikKKyAgICAs
IG1fcHVibGljSWQocCkKKyAgICAsIG1fc3lzdGVtSWQocykKIHsKIH0KIAotRG9jdW1lbnRUeXBl
OjpEb2N1bWVudFR5cGUoRG9jdW1lbnQgKmRvYywgY29uc3QgRG9jdW1lbnRUeXBlICZ0KQotICAg
IDogTm9kZShkb2MpLCBtX2ltcGxlbWVudGF0aW9uKHQubV9pbXBsZW1lbnRhdGlvbikKLSAgICAs
IG1fbmFtZSh0Lm1fbmFtZSksIG1fcHVibGljSWQodC5tX3B1YmxpY0lkKSwgbV9zeXN0ZW1JZCh0
Lm1fc3lzdGVtSWQpLCBtX3N1YnNldCh0Lm1fc3Vic2V0KQorRG9jdW1lbnRUeXBlOjpEb2N1bWVu
dFR5cGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBEb2N1bWVudFR5cGUgJnQpCisgICAgOiBO
b2RlKGRvY3VtZW50KQorICAgICwgbV9pbXBsZW1lbnRhdGlvbih0Lm1faW1wbGVtZW50YXRpb24p
CisgICAgLCBtX25hbWUodC5tX25hbWUpCisgICAgLCBtX3B1YmxpY0lkKHQubV9wdWJsaWNJZCkK
KyAgICAsIG1fc3lzdGVtSWQodC5tX3N5c3RlbUlkKQorICAgICwgbV9zdWJzZXQodC5tX3N1YnNl
dCkKIHsKIH0KIApAQCAtNzQsOSArODMsOSBAQCBTdHJpbmcgRG9jdW1lbnRUeXBlOjp0b1N0cmlu
ZygpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RyaW5nIERvY3VtZW50VHlwZTo6
YmFzZVVSSSgpIGNvbnN0CitLVVJMIERvY3VtZW50VHlwZTo6YmFzZVVSSSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBLVVJMKCk7CiB9CiAKIFN0cmluZyBEb2N1
bWVudFR5cGU6Om5vZGVOYW1lKCkgY29uc3QKQEAgLTkxLDcgKzEwMCw4IEBAIE5vZGU6Ok5vZGVU
eXBlIERvY3VtZW50VHlwZTo6bm9kZVR5cGUoKSAKIAogUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVu
dFR5cGU6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewotICAgIC8vIFRoZSBET00gTGV2ZWwg
MiBzcGVjaWZpY2F0aW9uIHNheXMgY2xvbmluZyBEb2N1bWVudFR5cGUgbm9kZXMgaXMgImltcGxl
bWVudGF0aW9uIGRlcGVuZGVudCIgc28gZm9yIG5vdyB3ZSBkbyBub3Qgc3VwcG9ydCBpdC4KKyAg
ICAvLyBUaGUgRE9NIExldmVsIDIgc3BlY2lmaWNhdGlvbiBzYXlzIGNsb25pbmcgRG9jdW1lbnRU
eXBlIG5vZGVzIGlzICJpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQiLgorICAgIC8vIEZvciBub3cs
IHdlIGRvIG5vdCBzdXBwb3J0IGl0LgogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudFR5
cGUuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHN5c3RlbUlk
KCkgY29uc3QgeyByZXR1cm4gbV9zeXN0ZW1JZDsgfQogICAgIFN0cmluZyBpbnRlcm5hbFN1YnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic2V0OyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBiYXNl
VVJJKCkgY29uc3Q7CisgICAgdmlydHVhbCBLVVJMIGJhc2VVUkkoKSBjb25zdDsKIAogICAgIC8v
IE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICBET01JbXBsZW1lbnRhdGlvbiAq
aW1wbGVtZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ltcGxlbWVudGF0aW9uLmdldCgpOyB9
CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNtaXRo
IChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3Jn
KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKICNpbmNsdWRlICJOb2RlTGlz
dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTU2MiwxOCArNTYxLDIxIEBAIHZvaWQgRWxlbWVu
dDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmkKICAgICBtX3RhZ05hbWUuc2V0UHJlZml4KF9w
cmVmaXgpOwogfQogCi1TdHJpbmcgRWxlbWVudDo6YmFzZVVSSSgpIGNvbnN0CitLVVJMIEVsZW1l
bnQ6OmJhc2VVUkkoKSBjb25zdAogewotICAgIEtVUkwgeG1sYmFzZShnZXRBdHRyaWJ1dGUoYmFz
ZUF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0KLSAgICBpZiAoIXhtbGJhc2UucHJvdG9jb2wo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB4bWxiYXNlLnN0cmluZygpOworICAgIEtVUkwg
YmFzZShnZXRBdHRyaWJ1dGUoYmFzZUF0dHIpKTsKKyAgICBpZiAoIWJhc2UucHJvdG9jb2woKS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBiYXNlOwogCiAgICAgTm9kZSogcGFyZW50ID0gcGFy
ZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIHJldHVybiBLVVJMKHBhcmVudC0+
YmFzZVVSSSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgeG1sYmFzZS5kZXByZWNhdGVkU3RyaW5nKCkp
LnN0cmluZygpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gYmFzZTsKKworICAg
IEtVUkwgcGFyZW50QmFzZSA9IHBhcmVudC0+YmFzZVVSSSgpOworICAgIGlmIChwYXJlbnRCYXNl
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gYmFzZTsKIAotICAgIHJldHVybiB4bWxiYXNlLnN0
cmluZygpOworICAgIHJldHVybiBLVVJMKHBhcmVudEJhc2UsIGJhc2Uuc3RyaW5nKCkpOwogfQog
CiBOb2RlKiBFbGVtZW50OjppbnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVy
ZSwgTm9kZSogbmV3Q2hpbGQsIGludCYgZXhjZXB0aW9uKQpJbmRleDogV2ViQ29yZS9kb20vRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gMzAx
NzIpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsx
MDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNT
dHJpbmcgJl9wcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLm5hbWVzcGFj
ZVVSSSgpOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBiYXNlVVJJKCkgY29uc3Q7CisgICAgdmly
dHVhbCBLVVJMIGJhc2VVUkkoKSBjb25zdDsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRk
ZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkg
Y29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQy
LDcgKzQyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFw
LmgiCkBAIC0xNDQsNyArMTQzLDcgQEAgdm9pZCBOb2RlOjpzZXREb2N1bWVudChEb2N1bWVudCog
ZG9jKQogCiAgICAgewogICAgICAgICBLSlM6OkpTTG9jayBsb2NrOwotICAgICAgICBLSlM6OlNj
cmlwdEludGVycHJldGVyOjp1cGRhdGVET01Ob2RlRG9jdW1lbnQodGhpcywgbV9kb2N1bWVudC5n
ZXQoKSwgZG9jKTsKKyAgICAgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnVwZGF0ZURPTU5vZGVEb2N1
bWVudCh0aGlzLCBtX2RvY3VtZW50LmdldCgpLCBkb2MpOwogICAgIH0gICAgCiAgICAgbV9kb2N1
bWVudCA9IGRvYzsKIApAQCAtMTI2NiwxOCArMTI2NSwxNCBAQCBib29sIE5vZGU6Omhhc0F0dHJp
YnV0ZXMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTmFtZWRBdHRyTWFwICpOb2Rl
OjphdHRyaWJ1dGVzKCkgY29uc3QKK05hbWVkQXR0ck1hcCogTm9kZTo6YXR0cmlidXRlcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0cmluZyBOb2RlOjpiYXNlVVJJKCkgY29uc3QK
K0tVUkwgTm9kZTo6YmFzZVVSSSgpIGNvbnN0CiB7Ci0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50
Tm9kZSgpOwotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIHJldHVybiBwYXJlbnQtPmJhc2VVUkko
KTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gcGFyZW50Tm9kZSgpID8gcGFy
ZW50Tm9kZSgpLT5iYXNlVVJJKCkgOiBLVVJMKCk7CiB9CiAKIGJvb2wgTm9kZTo6aXNFcXVhbE5v
ZGUoTm9kZSAqb3RoZXIpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvZG9t
L05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBjbGFzcyBFdmVudDsKIGNs
YXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsK
K2NsYXNzIEtVUkw7CiBjbGFzcyBOYW1lZEF0dHJNYXA7CiBjbGFzcyBOb2RlTGlzdDsKIGNsYXNz
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKQEAgLTEwNiw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5hbWVkQXR0
ck1hcCogYXR0cmlidXRlcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJpbmcgYmFzZVVSSSgp
IGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJJKCkgY29uc3Q7CiAKICAgICAvLyBUaGVz
ZSBzaG91bGQgYWxsIGFjdHVhbGx5IHJldHVybiBhIG5vZGUsIGJ1dCB0aGlzIGlzIG9ubHkgaW1w
b3J0YW50IGZvciBsYW5ndWFnZSBiaW5kaW5ncywKICAgICAvLyB3aGljaCB3aWxsIGFscmVhZHkg
a25vdyBhbmQgaG9sZCBhIHJlZiBvbiB0aGUgcmlnaHQgbm9kZSB0byByZXR1cm4uIFJldHVybmlu
ZyBib29sIGFsbG93cwpJbmRleDogV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShy
ZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0
IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDYg
KzE3LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmgiCiAKQEAgLTE1Niw3ICsxNTUsNyBAQCBib29sIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
Y2hlY2tTdHlsZVNoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJl
Zih0aGlzKTsKICNpZiBFTkFCTEUoWFNMVCkKICAgICAgICAgICAgICAgICAgICAgaWYgKG1faXNY
U0wpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RYU0xTdHlsZVNoZWV0KGRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KGhyZWYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVu
dCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoaHJlZikuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAjZW5kaWYK
ICAgICAgICAgICAgICAgICAgICAgewpAQCAtMTY0LDcgKzE2Myw3IEBAIGJvb2wgUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2gKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
aGFyc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdENTU1N0eWxlU2hlZXQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZiksIGNoYXJzZXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCktPmRv
Y0xvYWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCho
cmVmKS5zdHJpbmcoKSwgY2hhcnNldCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fY2FjaGVkU2hlZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDMwMTcyKQorKysgV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDYgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBs
ZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
Um9iIEJ1aXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOCw2ICsxNyw3IEBACiAgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlRWxlbWVudC5oIgogCkBAIC01NiwxMyArNTYsMTMgQEAg
dm9pZCBTdHlsZUVsZW1lbnQ6OnByb2Nlc3MoRWxlbWVudCogZSkKICAgICBpZiAoIWUgfHwgIWUt
PmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHRleHQgPSAiIjsK
KyAgICBWZWN0b3I8VUNoYXI+IHRleHQ7CiAKICAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENo
aWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQogICAgICAgICBpZiAoYy0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNU
SU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpCi0gICAgICAg
ICAgICB0ZXh0ICs9IGMtPm5vZGVWYWx1ZSgpOworICAgICAgICAgICAgYXBwZW5kKHRleHQsIGMt
Pm5vZGVWYWx1ZSgpKTsKIAotICAgIGNyZWF0ZVNoZWV0KGUsIHRleHQpOworICAgIGNyZWF0ZVNo
ZWV0KGUsIFN0cmluZzo6YWRvcHQodGV4dCkpOwogfQogCiB2b2lkIFN0eWxlRWxlbWVudDo6Y3Jl
YXRlU2hlZXQoRWxlbWVudCogZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNzQsOCArNzQsOSBA
QCB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAgICAgICAgIG1fc2hl
ZXQgPSAwOwogICAgIH0KIAotICAgIFN0cmluZyB0eXBlVmFsdWUgPSBlLT5pc0hUTUxFbGVtZW50
KCkgPyB0eXBlKCkuZGVwcmVjYXRlZFN0cmluZygpLmxvd2VyKCkgOiB0eXBlKCk7Ci0gICAgaWYg
KHR5cGVWYWx1ZS5pc0VtcHR5KCkgfHwgdHlwZVZhbHVlID09ICJ0ZXh0L2NzcyIpIHsgLy8gVHlw
ZSBtdXN0IGJlIGVtcHR5IG9yIENTUworICAgIC8vIElmIHR5cGUgaXMgZW1wdHkgb3IgQ1NTLCB0
aGlzIGlzIGEgQ1NTIHN0eWxlIHNoZWV0LgorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9
IHRoaXMtPnR5cGUoKTsKKyAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgKGUtPmlzSFRNTEVsZW1l
bnQoKSA/IGVxdWFsSWdub3JpbmdDYXNlKHR5cGUsICJ0ZXh0L2NzcyIpIDogKHR5cGUgPT0gInRl
eHQvY3NzIikpKSB7CiAgICAgICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhTGlzdCA9IG5ldyBN
ZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKTAsIG1lZGlhKCksIGUtPmlzSFRNTEVsZW1lbnQoKSk7
CiAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVuRXZhbCgic2NyZWVuIiwgdHJ1ZSk7
CiAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgcHJpbnRFdmFsKCJwcmludCIsIHRydWUpOwpJ
bmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvZG9tL1hN
TFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MCw3ICs4NTAsNyBAQCB2b2lkIFhN
TFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlz
VGV4dE5vZGUoKSB8fCBjaGlsZC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05P
REUpCiAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENvZGUgKz0gc3RhdGljX2Nhc3Q8Q2hhcmFj
dGVyRGF0YSo+KGNoaWxkKS0+ZGF0YSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV92
aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChtX2RvYy0+dXJsKCksIG1fc2Ny
aXB0U3RhcnRMaW5lIC0gMSwgc2NyaXB0Q29kZSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1l
KCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KG1fZG9jLT51cmwoKS5zdHJpbmcoKSwgbV9zY3Jp
cHRTdGFydExpbmUgLSAxLCBzY3JpcHRDb2RlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CkBAIC0xMjc5LDcgKzEyNzksNyBAQCB2b2lk
IFhNTFRva2VuaXplcjo6ZW5kKCkKIHsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBpZiAobV9zYXdY
U0xUcmFuc2Zvcm0pIHsKLSAgICAgICAgbV9kb2MtPnNldFRyYW5zZm9ybVNvdXJjZSh4bWxEb2NQ
dHJGb3JTdHJpbmcobV9kb2MtPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNm
b3JtLCBtX2RvYy0+dXJsKCkpKTsKKyAgICAgICAgbV9kb2MtPnNldFRyYW5zZm9ybVNvdXJjZSh4
bWxEb2NQdHJGb3JTdHJpbmcobV9kb2MtPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9y
VHJhbnNmb3JtLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCkpKTsKICAgICAgICAgCiAgICAgICAgIG1f
ZG9jLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUgZG9jIHRoaW5rIGl0J3MgZG9uZSwg
c28gaXQgd2lsbCBhcHBseSB4c2wgc2hlZXRzLgogICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVT
ZWxlY3RvcigpOwpAQCAtMTQyOCw3ICsxNDI4LDcgQEAgYm9vbCBYTUxUb2tlbml6ZXI6OmlzV2Fp
dGluZ0ZvclNjcmlwdHMoKQogfQogCiAjaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4bWxEb2NQdHJG
b3JTdHJpbmcoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiB1cmwpCit2b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9h
ZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCkK
IHsKICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDQ3
LDcgKzE0NDcsNyBAQCB2b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9hZGVyKiBkb2NMCiAg
ICAgCiAgICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IHhtbFJlYWRNZW1vcnkocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oc291cmNlLmNoYXJhY3RlcnMoKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwuYXNjaWkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwubGF0aW4xKCkuZGF0YSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPTUhpZ2hCeXRlID09
IDB4RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWFNMVF9QQVJTRV9PUFRJT05TKTsKICAgICAKSW5kZXg6IFdlYkNv
cmUvZG9tL1hNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2Vu
aXplci5oCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDAgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBT
YW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9s
bHRlY2ggQVNBCiAgKgpAQCAtMTcwLDcgKzE2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICB9OwogCiAjaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9h
ZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHVybCk7
Cit2b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgdXJsKTsKIHZvaWQgc2V0TG9hZGVyRm9yTGliWE1MQ2FsbGJhY2tz
KERvY0xvYWRlciopOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAzMDE3
MikKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0
Qm94LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCkBA
IC04NiwxMSArODUsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3ZhbHVlOwogfTsKIAotc3Rh
dGljIGlubGluZSB2b2lkIGFwcGVuZFN0cmluZyhWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0
IFN0cmluZyYgc3RyKQotewotICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSwgc3Ry
Lmxlbmd0aCgpKTsKLX0KLSAgICAKIHN0YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZl
Y3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyKQogewogICAgIGNvbnN0IFVD
aGFyKiB1Y2hhcnMgPSBhdHRyLmNoYXJhY3RlcnMoKTsKQEAgLTEwNiwxNyArMTAwLDE3IEBAIHN0
YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjwKICAgICAgICAgc3dpdGNoIChj
KSB7CiAgICAgICAgICAgICBjYXNlICcmJzoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwotICAgICAgICAg
ICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIGFtcEVudGl0eSk7CisgICAgICAgICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgYW1wRW50aXR5KTsKICAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJv
bSA9IGkgKyAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnPCc6
CiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwg
aSAtIGxhc3RDb3BpZWRGcm9tKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0
LCBsdEVudGl0eSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbHRFbnRpdHkpOwog
ICAgICAgICAgICAgICAgIGxhc3RDb3BpZWRGcm9tID0gaSArIDE7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlICciJzoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwotICAgICAg
ICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHF1b3RFbnRpdHkpOworICAgICAgICAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIHF1b3RFbnRpdHkpOwogICAgICAgICAgICAgICAgIGxhc3RDb3Bp
ZWRGcm9tID0gaSArIDE7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjYsOSArMTYwLDkgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kRXNjYXBlZENvbnRlbnQoVmVjdG9yPAogICAgICAgICBpZiAoKGMgPT0g
JyYnKSB8IChjID09ICc8JykpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodWNoYXJzICsg
bGFzdENvcGllZEZyb20sIGkgLSBsYXN0Q29waWVkRnJvbSk7CiAgICAgICAgICAgICBpZiAoYyA9
PSAnJicpCi0gICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgYW1wRW50aXR5KTsK
KyAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBhbXBFbnRpdHkpOwogICAgICAgICAgICAg
ZWxzZSAKLSAgICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBsdEVudGl0eSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbHRFbnRpdHkpOwogICAgICAgICAgICAgbGFz
dENvcGllZEZyb20gPSBpICsgMTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4MSwyNCArMTc1LDI1
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmREZXByZWNhdGVkU3RyaW4KICAgICByZXN1bHQu
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHIudW5pY29kZSgpKSwgc3Ry
Lmxlbmd0aCgpKTsKIH0gICAgCiAgICAgCi1zdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRy
aWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIFN0cmluZyB1cmxTdHJpbmcpCitzdGF0
aWMgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1
bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewogICAgIFVDaGFyIHF1b3RlQ2hhciA9ICdc
Iic7Ci0gICAgaWYgKHVybFN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS5zdGFydHNXaXRoKCJqYXZh
c2NyaXB0OiIsIGZhbHNlKSkgeworICAgIFN0cmluZyBzdHJpcHBlZFVSTFN0cmluZyA9IHVybFN0
cmluZy5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBpZiAocHJvdG9jb2xJcyhzdHJpcHBlZFVSTFN0
cmluZywgImphdmFzY3JpcHQiKSkgewogICAgICAgICAvLyBtaW5pbWFsIGVzY2FwaW5nIGZvciBq
YXZhc2NyaXB0IHVybHMKLSAgICAgICAgaWYgKHVybFN0cmluZy5jb250YWlucygnXCInKSkgewot
ICAgICAgICAgICAgaWYgKHVybFN0cmluZy5jb250YWlucygnXCcnKSkKLSAgICAgICAgICAgICAg
ICB1cmxTdHJpbmcucmVwbGFjZSgnXCInLCAiJnF1b3Q7Iik7CisgICAgICAgIGlmIChzdHJpcHBl
ZFVSTFN0cmluZy5jb250YWlucygnIicpKSB7CisgICAgICAgICAgICBpZiAoc3RyaXBwZWRVUkxT
dHJpbmcuY29udGFpbnMoJ1wnJykpCisgICAgICAgICAgICAgICAgc3RyaXBwZWRVUkxTdHJpbmcu
cmVwbGFjZSgnXCInLCAiJnF1b3Q7Iik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcXVvdGVDaGFyID0gJ1wnJzsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKHF1
b3RlQ2hhcik7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHVybFN0cmluZyk7CisgICAg
ICAgIGFwcGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3RyaW5nKTsKICAgICAgICAgcmVzdWx0LmFw
cGVuZChxdW90ZUNoYXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUUg
dGhpcyBkb2VzIG5vdCBmdWxseSBtYXRjaCBvdGhlciBicm93c2Vycy4gRmlyZWZveCBlc2NhcGVz
IHNwYWNlcyBhbmQgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXMgbm90IGZ1bGx5IG1hdGNoIG90aGVyIGJyb3dzZXJzLiBGaXJlZm94IGVzY2FwZXMgc3Bh
Y2VzIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMuCiAgICAgcmVzdWx0LmFwcGVuZChxdW90
ZUNoYXIpOwogICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgdXJsU3RyaW5nKTsKICAg
ICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7ICAgIApAQCAtMzMxLDEwICszMjYsMTAgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFZlY3RvcjxVQ2hhcgogICAgICAgICBuYW1lc3BhY2Vz
LnNldChwcmUsIG5zLmltcGwoKSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgeG1sbnMo
InhtbG5zIik7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgYXBwZW5kU3Ry
aW5nKHJlc3VsdCwgeG1sbnMpOworICAgICAgICBhcHBlbmQocmVzdWx0LCB4bWxucyk7CiAgICAg
ICAgIGlmICghcHJlZml4LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
OicpOwotICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgcHJlZml4KTsKKyAgICAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIHByZWZpeCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQu
YXBwZW5kKCc9Jyk7CkBAIC0zNzIsMjkgKzM2NywyOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdGFy
dE1hcmt1cChWZWN0b3I8VUNoCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1
bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihub2RlKS0+dG9TdHJpbmcoKSk7CisgICAg
ICAgICAgICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSkt
PnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfTk9ERTogewogICAgICAgICAgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhlIGNvbW1lbnQg
YmVsb3cgKGFuZCB0aGVyZWZvcmUgdGhpcyBjb2RlKSBpcyB3cm9uZyBub3cKICAgICAgICAgICAg
IC8vIERvY3VtZW50cyBkbyBub3Qgbm9ybWFsbHkgY29udGFpbiBhIGRvY1R5cGUgYXMgYSBjaGls
ZCBub2RlLCBmb3JjZSBpdCB0byBwcmludCBoZXJlIGluc3RlYWQuCiAgICAgICAgICAgICBjb25z
dCBEb2N1bWVudFR5cGUqIGRvY1R5cGUgPSBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KG5v
ZGUpLT5kb2N0eXBlKCk7CiAgICAgICAgICAgICBpZiAoZG9jVHlwZSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmRTdHJpbmcocmVzdWx0LCBkb2NUeXBlLT50b1N0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQocmVzdWx0LCBkb2NUeXBlLT50b1N0cmluZygpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVf
Tk9ERToKLSAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0
IERvY3VtZW50VHlwZSo+KG5vZGUpLT50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGFwcGVuZChy
ZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50VHlwZSo+KG5vZGUpLT50b1N0cmluZygp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5T
VFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0YXRpY19j
YXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpLT50b1N0cmluZygpKTsKKyAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0
cnVjdGlvbio+KG5vZGUpLT50b1N0cmluZygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERTogewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
PCcpOwogICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxjb25zdCBF
bGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBib29sIGNvbnZlcnQgPSBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzICYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSk7Ci0gICAgICAgICAg
ICBhcHBlbmRTdHJpbmcocmVzdWx0LCBlbC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGVsLT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwog
ICAgICAgICAgICAgTmFtZWRBdHRyTWFwICphdHRycyA9IGVsLT5hdHRyaWJ1dGVzKCk7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRycy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBp
ZiAoIWRvY3VtZW50SXNIVE1MICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxl
bShlbCkpCkBAIC00MDgsOSArNDAzLDkgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAo
VmVjdG9yPFVDaAogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIAogICAgICAg
ICAgICAgICAgIGlmIChkb2N1bWVudElzSFRNTCkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
U3RyaW5nKHJlc3VsdCwgYXR0ci0+bmFtZSgpLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0ci0+bmFtZSgpLmxvY2FsTmFtZSgpKTsKICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIGF0
dHItPm5hbWUoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgYXR0ci0+bmFtZSgpLnRvU3RyaW5nKCkpOwogCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnPScpOwogCkBAIC00MzcsNyArNDMyLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRN
YXJrdXAoVmVjdG9yPFVDaAogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTX1BST1BfRElTUExBWSwgQ1NTX1ZBTF9JTkxJTkUsIHRydWUpOwogICAgICAgICAgICAgICAg
IGlmIChzdHlsZS0+bGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBTdHJpbmcgc3R5bGVQcmVmaXgoIiBzdHlsZT1cIiIpOwotICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRTdHJpbmcocmVzdWx0LCBzdHlsZVByZWZpeCk7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChyZXN1bHQsIHN0eWxlUHJlZml4KTsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
QXR0cmlidXRlVmFsdWUocmVzdWx0LCBzdHlsZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnXCInKTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTIsNyAr
NDQ3LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaAogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9O
X05PREU6Ci0gICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25z
dCBDREFUQVNlY3Rpb24qPihub2RlKS0+dG9TdHJpbmcoKSk7CisgICAgICAgICAgICBhcHBlbmQo
cmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKS0+dG9TdHJpbmco
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9E
RToKICAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9ERToKQEAgLTUwMyw3ICs0OTgsNyBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyCiAKICAgICByZXN1bHQuYXBw
ZW5kKCc8Jyk7CiAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIGFwcGVuZFN0cmluZyhyZXN1
bHQsIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5n
Q2FzZSgpKTsKKyAgICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4o
bm9kZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgnPicp
OwogfQogCkBAIC01NDAsNyArNTM1LDcgQEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKE5vZGUq
IG5vZGUsIGNvbgogewogICAgIFZlY3RvcjxBdHRyaWJ1dGVDaGFuZ2U+IGNoYW5nZXM7CiAKLSAg
ICBLVVJMIGJhc2VVUkxBc0tVUkwoYmFzZVVSTC5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIEtV
UkwgcGFyc2VkQmFzZVVSTChiYXNlVVJMKTsKIAogICAgIE5vZGUqIGVuZCA9IG5vZGUtPnRyYXZl
cnNlTmV4dFNpYmxpbmcoKTsKICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICE9IGVuZDsgbiA9
IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewpAQCAtNTUwLDEwICs1NDUsOCBAQCBzdGF0aWMgdm9p
ZCBjb21wbGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uCiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhdHRycy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRy
cy0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+aXNVUkxBdHRyaWJ1
dGUoYXR0cikpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBsZXRlZFVSTCA9IEtV
UkwoYmFzZVVSTEFzS1VSTCwgYXR0ci0+dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmlu
ZygpOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2Uo
ZSwgYXR0ci0+bmFtZSgpLCBjb21wbGV0ZWRVUkwpKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGUtPmlzVVJMQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZSwgYXR0ci0+bmFtZSgpLCBLVVJM
KHBhcnNlZEJhc2VVUkwsIGF0dHItPnZhbHVlKCkpLnN0cmluZygpKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CkBAIC02MjIsMTAgKzYxNSwxMCBAQCBTdHJpbmcgam9pbk1hcmt1
cHMoY29uc3QgVmVjdG9yPFN0cmluZz4gCiAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShsZW5n
dGgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQotICAgICAg
ICBhcHBlbmRTdHJpbmcocmVzdWx0LCBwcmVNYXJrdXBzW2kgLSAxXSk7CisgICAgICAgIGFwcGVu
ZChyZXN1bHQsIHByZU1hcmt1cHNbaSAtIDFdKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcG9zdENvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHBvc3RNYXJr
dXBzW2ldKTsKKyAgICAgICAgYXBwZW5kKHJlc3VsdCwgcG9zdE1hcmt1cHNbaV0pOwogCiAgICAg
cmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0KQEAgLTgwNiw3ICs3OTksNyBAQCBTdHJp
bmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgICAgICAgICAgICAgaWYg
KHN0eWxlLT5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IG9w
ZW5UYWc7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgZGl2U3R5bGUo
IjxkaXYgc3R5bGU9XCIiKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKG9wZW5U
YWcsIGRpdlN0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wZW5UYWcsIGRpdlN0
eWxlKTsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3BlblRhZywg
c3R5bGUtPmNzc1RleHQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG9wZW5UYWcuYXBwZW5kKCdc
IicpOwogICAgICAgICAgICAgICAgICAgICBvcGVuVGFnLmFwcGVuZCgnPicpOwpAQCAtODQ4LDcg
Kzg0MSw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAgICAg
ICAgaWYgKHN0eWxlLT5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4g
b3BlblRhZzsKICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBzcGFuQ2xhc3NTdHlsZSA9IFN0cmlu
ZygiPHNwYW4gY2xhc3M9XCIiIEFwcGxlU3R5bGVTcGFuQ2xhc3MgIlwiIHN0eWxlPVwiIik7Ci0g
ICAgICAgICAgICBhcHBlbmRTdHJpbmcob3BlblRhZywgc3BhbkNsYXNzU3R5bGUpOworICAgICAg
ICAgICAgYXBwZW5kKG9wZW5UYWcsIHNwYW5DbGFzc1N0eWxlKTsKICAgICAgICAgICAgIGFwcGVu
ZEF0dHJpYnV0ZVZhbHVlKG9wZW5UYWcsIHN0eWxlLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAg
b3BlblRhZy5hcHBlbmQoJ1wiJyk7CiAgICAgICAgICAgICBvcGVuVGFnLmFwcGVuZCgnPicpOwpA
QCAtODkwLDcgKzg4Myw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z20KIAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGVsZW1lbnQtPmNy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOwogCi0gICAgaWYgKGZyYWdtZW50ICYmICFi
YXNlVVJMLmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9ICJhYm91dDpibGFuayIgJiYgYmFzZVVSTCAh
PSBkb2N1bWVudC0+YmFzZVVSTCgpKQorICAgIGlmIChmcmFnbWVudCAmJiAhYmFzZVVSTC5pc0Vt
cHR5KCkgJiYgYmFzZVVSTCAhPSBibGFua1VSTCgpICYmIGJhc2VVUkwgIT0gZG9jdW1lbnQtPmJh
c2VVUkwoKSkKICAgICAgICAgY29tcGxldGVVUkxzKGZyYWdtZW50LmdldCgpLCBiYXNlVVJMKTsK
IAogICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CkBAIC05MjIsNyArOTE1LDcgQEAgU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBFQwogICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KHJlc3VsdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5n
KENvbnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyaW5n
KQorc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZyb21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFy
YWdyYXBoLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBwYXJhZ3JhcGgtPmRvY3VtZW50KCk7CiAKQEAgLTkzNSwxMiArOTI4LDEzIEBAIHN0YXRpYyB2
b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENvbnQKIAogICAgIEFTU0VSVChzdHJpbmcuZmlu
ZCgnXG4nKSA9PSAtMSk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCB0YWJMaXN0ID0gRGVw
cmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCdcdCcsIHN0cmluZywgdHJ1ZSk7Ci0gICAgRGVwcmVj
YXRlZFN0cmluZyB0YWJUZXh0ID0gIiI7CisgICAgVmVjdG9yPFN0cmluZz4gdGFiTGlzdDsKKyAg
ICBzdHJpbmcuc3BsaXQoJ1x0JywgdHJ1ZSwgdGFiTGlzdCk7CisgICAgU3RyaW5nIHRhYlRleHQg
PSAiIjsKICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICB3aGlsZSAoIXRhYkxpc3QuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IHRhYkxpc3QuZmlyc3QoKTsKLSAg
ICAgICAgdGFiTGlzdC5wb3BfZnJvbnQoKTsKKyAgICBzaXplX3QgbnVtRW50cmllcyA9IHRhYkxp
c3Quc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRW50cmllczsgKytpKSB7
CisgICAgICAgIGNvbnN0IFN0cmluZyYgcyA9IHRhYkxpc3RbaV07CiAKICAgICAgICAgLy8gYXBw
ZW5kIHRoZSBub24tdGFiIHRleHR1YWwgcGFydAogICAgICAgICBpZiAoIXMuaXNFbXB0eSgpKSB7
CkBAIC05NDksMTUgKzk0MywxNSBAQCBzdGF0aWMgdm9pZCBmaWxsQ29udGFpbmVyRnJvbVN0cmlu
ZyhDb250CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVjID09IDApOwogICAgICAgICAgICAgICAg
IHRhYlRleHQgPSAiIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiB0
ZXh0Tm9kZSA9IGRvY3VtZW50LT5jcmVhdGVUZXh0Tm9kZShzdHJpbmdXaXRoUmViYWxhbmNlZFdo
aXRlc3BhY2UocywgZmlyc3QsIHRhYkxpc3QuaXNFbXB0eSgpKSk7CisgICAgICAgICAgICBSZWZQ
dHI8Tm9kZT4gdGV4dE5vZGUgPSBkb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoc3RyaW5nV2l0aFJl
YmFsYW5jZWRXaGl0ZXNwYWNlKHMsIGZpcnN0LCBpICsgMSA9PSBudW1FbnRyaWVzKSk7CiAgICAg
ICAgICAgICBwYXJhZ3JhcGgtPmFwcGVuZENoaWxkKHRleHROb2RlLnJlbGVhc2UoKSwgZWMpOwog
ICAgICAgICAgICAgQVNTRVJUKGVjID09IDApOwogICAgICAgICB9CiAKICAgICAgICAgLy8gdGhl
cmUgaXMgYSB0YWIgYWZ0ZXIgZXZlcnkgZW50cnksIGV4Y2VwdCB0aGUgbGFzdCBlbnRyeQogICAg
ICAgICAvLyAoaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgdGFiLCB0aGUgbGlzdCBnZXRzIGFu
IGV4dHJhIGVtcHR5IGVudHJ5KQotICAgICAgICBpZiAoIXRhYkxpc3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgdGFiVGV4dCArPSAnXHQnOworICAgICAgICBpZiAoaSArIDEgIT0gbnVtRW50cmll
cykKKyAgICAgICAgICAgIHRhYlRleHQuYXBwZW5kKCdcdCcpOwogICAgICAgICBlbHNlIGlmICgh
dGFiVGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHBhcmFncmFwaC0+YXBwZW5kQ2hpbGQo
Y3JlYXRlVGFiU3BhbkVsZW1lbnQoZG9jdW1lbnQsIHRhYlRleHQpLCBlYyk7CiAgICAgICAgICAg
ICBBU1NFUlQoZWMgPT0gMCk7CkBAIC05ODUsNyArOTc5LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5n
ID0gdGV4dC5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3RyaW5nIHN0cmluZyA9IHRleHQ7CiAg
ICAgc3RyaW5nLnJlcGxhY2UoIlxyXG4iLCAiXG4iKTsKICAgICBzdHJpbmcucmVwbGFjZSgnXHIn
LCAnXG4nKTsKIApAQCAtMTAxNSwxMyArMTAwOSwxNCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgTm9kZSogYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhjb250
ZXh0LT5zdGFydE5vZGUoKSk7CiAgICAgYm9vbCB1c2VDbG9uZXNPZkVuY2xvc2luZ0Jsb2NrID0g
IWJsb2NrLT5oYXNUYWdOYW1lKGJvZHlUYWcpOwogICAgIAotICAgIERlcHJlY2F0ZWRTdHJpbmdM
aXN0IGxpc3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJ1xuJywgc3RyaW5nLCB0cnVl
KTsgLy8gdHJ1ZSBnZXRzIHVzIGVtcHR5IHN0cmluZ3MgaW4gdGhlIGxpc3QKLSAgICB3aGlsZSAo
IWxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IGxpc3QuZmly
c3QoKTsKLSAgICAgICAgbGlzdC5wb3BfZnJvbnQoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsaXN0
OworICAgIHN0cmluZy5zcGxpdCgnXG4nLCB0cnVlLCBsaXN0KTsgLy8gdHJ1ZSBnZXRzIHVzIGVt
cHR5IHN0cmluZ3MgaW4gdGhlIGxpc3QKKyAgICBzaXplX3QgbnVtTGluZXMgPSBsaXN0LnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxpbmVzOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBzID0gbGlzdFtpXTsKIAogICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxl
bWVudDsKLSAgICAgICAgaWYgKHMuaXNFbXB0eSgpICYmIGxpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGlmIChzLmlzRW1wdHkoKSAmJiBpICsgMSA9PSBudW1MaW5lcykgewogICAgICAgICAgICAg
Ly8gRm9yIGxhc3QgbGluZSwgdXNlIHRoZSAibWFnaWMgQlIiIHJhdGhlciB0aGFuIGEgUC4KICAg
ICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNw
YWNlVVJJLCAiYnIiLCBlYyk7CiAgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CkluZGV4OiBX
ZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlz
dG9yeS9IaXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9oaXN0b3J5
L0hpc3RvcnlJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDEyICsxNzYsMTIgQEAgZG91
YmxlIEhpc3RvcnlJdGVtOjpsYXN0VmlzaXRlZFRpbWUoKSBjbwogCiBLVVJMIEhpc3RvcnlJdGVt
Ojp1cmwoKSBjb25zdAogewotICAgIHJldHVybiBLVVJMKG1fdXJsU3RyaW5nLmRlcHJlY2F0ZWRT
dHJpbmcoKSk7CisgICAgcmV0dXJuIEtVUkwobV91cmxTdHJpbmcpOwogfQogCiBLVVJMIEhpc3Rv
cnlJdGVtOjpvcmlnaW5hbFVSTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtVUkwobV9vcmlnaW5h
bFVSTFN0cmluZy5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIHJldHVybiBLVVJMKG1fb3JpZ2lu
YWxVUkxTdHJpbmcpOwogfQogCiBjb25zdCBTdHJpbmcmIEhpc3RvcnlJdGVtOjp0YXJnZXQoKSBj
b25zdApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29y
ZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRl
ICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDE3MikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdyYWhh
bSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE5Nyw5
ICsxOTcsOSBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAg
ICAgICAgICAgICAgICAgIGludCB4ID0gZS0+cGFnZVgoKSAtIGFic3g7CiAgICAgICAgICAgICAg
ICAgICAgIGludCB5ID0gZS0+cGFnZVkoKSAtIGFic3k7CiAgICAgICAgICAgICAgICAgICAgIHVy
bCArPSAiPyI7Ci0gICAgICAgICAgICAgICAgICAgIHVybCArPSBEZXByZWNhdGVkU3RyaW5nOjpu
dW1iZXIoeCk7CisgICAgICAgICAgICAgICAgICAgIHVybCArPSBTdHJpbmc6Om51bWJlcih4KTsK
ICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICIsIjsKLSAgICAgICAgICAgICAgICAgICAgdXJs
ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih5KTsKKyAgICAgICAgICAgICAgICAgICAgdXJs
ICs9IFN0cmluZzo6bnVtYmVyKHkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAg
ICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKQEAgLTMyOCw3ICszMjgs
NyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRDb29yZHMoY29uc3QgCiAgICAgc2V0QXR0
cmlidXRlKGNvb3Jkc0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50
OjpocmVmKCkgY29uc3QKK0tVUkwgSFRNTEFuY2hvckVsZW1lbnQ6OmhyZWYoKSBjb25zdAogewog
ICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIp
KTsKIH0KQEAgLTQxNSw0MSArNDE1LDQwIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFR5
cGUoY29uc3QgU3QKIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50OjpoYXNoKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gJyMnICsgS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5yZWYoKTsK
KyAgICByZXR1cm4gIiMiICsgaHJlZigpLnJlZigpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVs
ZW1lbnQ6Omhvc3QoKSBjb25zdAogewotICAgIHJldHVybiBLVVJMKGhyZWYoKS5kZXByZWNhdGVk
U3RyaW5nKCkpLmhvc3QoKTsKKyAgICByZXR1cm4gaHJlZigpLmhvc3QoKTsKIH0KIAogU3RyaW5n
IEhUTUxBbmNob3JFbGVtZW50Ojpob3N0bmFtZSgpIGNvbnN0CiB7Ci0gICAgS1VSTCB1cmwoaHJl
ZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAgS1VS
TCB1cmwoaHJlZigpKTsKKyAgICBpZiAodXJsLnBvcnQoKSA9PSAwKQogICAgICAgICByZXR1cm4g
dXJsLmhvc3QoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB1cmwuaG9zdCgpICsgIjoiICsg
U3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSk7CisgICAgcmV0dXJuIHVybC5ob3N0KCkgKyAiOiIg
KyBTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVt
ZW50OjpwYXRobmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtVUkwoaHJlZigpLmRlcHJlY2F0
ZWRTdHJpbmcoKSkucGF0aCgpOworICAgIHJldHVybiBocmVmKCkucGF0aCgpOwogfQogCiBTdHJp
bmcgSFRNTEFuY2hvckVsZW1lbnQ6OnBvcnQoKSBjb25zdAogewotICAgIHJldHVybiBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIoS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5wb3J0KCkp
OworICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihocmVmKCkucG9ydCgpKTsKIH0KIAogU3RyaW5n
IEhUTUxBbmNob3JFbGVtZW50Ojpwcm90b2NvbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtVUkwo
aHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSkucHJvdG9jb2woKSArICI6IjsKKyAgICByZXR1cm4g
aHJlZigpLnByb3RvY29sKCkgKyAiOiI7CiB9CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6
c2VhcmNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmlu
ZygpKS5xdWVyeSgpOworICAgIHJldHVybiBocmVmKCkucXVlcnkoKTsKIH0KIAogU3RyaW5nIEhU
TUxBbmNob3JFbGVtZW50Ojp0ZXh0KCkgY29uc3QKQEAgLTQ1OSw3ICs0NTgsNyBAQCBTdHJpbmcg
SFRNTEFuY2hvckVsZW1lbnQ6OnRleHQoKSBjb25zdAogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1l
bnQ6OnRvU3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaHJlZigpOworICAgIHJldHVybiBo
cmVmKCkuc3RyaW5nKCk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzTGl2ZUxpbmso
KSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDMwMTcyKQor
KysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIs
NyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw4ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgU3RyaW5nOwotCiBjbGFzcyBIVE1MQW5jaG9yRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTEFuY2hvckVsZW1lbnQoRG9jdW1l
bnQqKTsKQEAgLTYwLDcgKzU4LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBjb29yZHMoKSBjb25z
dDsKICAgICB2b2lkIHNldENvb3Jkcyhjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmluZyBocmVm
KCkgY29uc3Q7CisgICAgS1VSTCBocmVmKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRIcmVmKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIGhyZWZsYW5nKCkgY29uc3Q7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MQXBwbGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9odG1sL0hU
TUxBcHBsZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACi0vKioK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXguZGUp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFMbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTIyLDYgKzIwLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SFRNTEFwcGxldEVsZW1lbnQuaCIKIApAQCAtMzYsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxBcHBsZXRFbGVtZW50OjpI
VE1MQXBwbGV0RWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MUGx1Z0luRWxlbWVudChhcHBs
ZXRUYWcsIGRvYykKK0hUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChEb2N1bWVu
dCogZG9jKQorICAgIDogSFRNTFBsdWdJbkVsZW1lbnQoYXBwbGV0VGFnLCBkb2MpCiB7CiB9CiAK
QEAgLTQ5LDcgKzQ4LDcgQEAgSFRNTEFwcGxldEVsZW1lbnQ6On5IVE1MQXBwbGV0RWxlbWVudCgp
CiAjZW5kaWYKIH0KIAotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gYWx0QXR0ciB8fAogICAgICAgICBhdHRyLT5uYW1lKCkgPT0gYXJjaGl2ZUF0dHIg
fHwKQEAgLTYxLDcgKzYwLDcgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAg
IFN0cmluZyBuZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3Vt
ZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRN
TERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7
CisgICAgICAgICAgICBIVE1MRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCo+KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFt
ZUF0dHIpOwogICAgICAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0obmV3TmFtZUF0dHIpOwogICAg
ICAgICB9CkBAIC02OSw3ICs2OCw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmkKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKICAgICAg
ICAgU3RyaW5nIG5ld0lkQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3Vt
ZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRN
TERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7
CisgICAgICAgICAgICBIVE1MRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCo+KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgZG9jLT5yZW1vdmVEb2NFeHRyYU5hbWVkSXRl
bShvbGRJZEF0dHIpOwogICAgICAgICAgICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShuZXdJ
ZEF0dHIpOwogICAgICAgICB9CkBAIC04Myw3ICs4Miw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmkKIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewot
ICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihk
b2N1bWVudCgpKTsKKyAgICAgICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnQqPihkb2N1bWVudCgpKTsKICAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFt
ZUF0dHIpOwogICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7CiAg
ICAgfQpAQCAtOTQsNyArOTMsNyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1CiB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsK
ICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9j
dW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKKyAg
ICAgICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1
bWVudCgpKTsKICAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwogICAg
ICAgICBkb2MtPnJlbW92ZURvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7CiAgICAgfQpAQCAt
MTAyLDEyICsxMDEsMTIgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bQogICAgIEhUTUxQbHVnSW5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CiB9CiAKLWJv
b2wgSFRNTEFwcGxldEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxl
KQorYm9vbCBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSog
c3R5bGUpCiB7CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29kZUF0dHIpLmlzTnVsbCgpOwog
fQogCi1SZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKK1JlbmRlck9iamVjdCogSFRNTEFw
cGxldEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5
bGUqIHN0eWxlKQogewogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRp
bmdzKCk7CiAKQEAgLTEyNSw3ICsxMjQsNyBAQCBSZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVt
ZW50OjpjcmVhdGVSCiAgICAgICAgIGlmICghYXJjaGl2ZS5pc051bGwoKSkKICAgICAgICAgICAg
IGFyZ3Muc2V0KCJhcmNoaXZlIiwgYXJjaGl2ZSk7CiAKLSAgICAgICAgYXJncy5zZXQoImJhc2VV
UkwiLCBkb2N1bWVudCgpLT5iYXNlVVJMKCkpOworICAgICAgICBhcmdzLnNldCgiYmFzZVVSTCIs
IGRvY3VtZW50KCktPmJhc2VVUkwoKS5zdHJpbmcoKSk7CiAKICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXlTY3JpcHQgPSBnZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7CiAgICAgICAg
IGlmICghbWF5U2NyaXB0LmlzTnVsbCgpKQpAQCAtMTQwLDcgKzEzOSw3IEBAIFJlbmRlck9iamVj
dCAqSFRNTEFwcGxldEVsZW1lbnQ6OmNyZWF0ZVIKIH0KIAogI2lmIFVTRShKQVZBU0NSSVBUQ09S
RV9CSU5ESU5HUykKLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MQXBwbGV0RWxlbWVudDo6
Z2V0SW5zdGFuY2UoKSBjb25zdAorS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEhUTUxBcHBsZXRF
bGVtZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0CiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+
aXNKYXZhRW5hYmxlZCgpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9u
IDMwMTcyKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw0IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KQEAgLTIwLDEyICsxOCwxMyBAQAogICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgogCkBAIC0xNzksNyArMTc4LDcgQEAgdm9pZCBIVE1MQXJlYUVsZW1l
bnQ6OnNldENvb3Jkcyhjb25zdCBTdAogICAgIHNldEF0dHJpYnV0ZShjb29yZHNBdHRyLCB2YWx1
ZSk7CiB9CiAKLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmhyZWYoKSBjb25zdAorS1VSTCBIVE1M
QXJlYUVsZW1lbnQ6OmhyZWYoKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVt
ZW50LmgJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsOCArMzMs
NiBAQCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogCiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEFuY2hvckVsZW1lbnQgewogcHVibGljOgotICAgIGVudW0gU2hhcGUgeyBEZWZhdWx0
LCBQb2x5LCBSZWN0LCBDaXJjbGUsIFVua25vd24gfTsKLQogICAgIEhUTUxBcmVhRWxlbWVudChE
b2N1bWVudCopOwogICAgIH5IVE1MQXJlYUVsZW1lbnQoKTsKIApAQCAtNjAsNyArNTYsNyBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIGNvb3JkcygpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29vcmRzKGNv
bnN0IFN0cmluZyYpOwogCi0gICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKKyAgICBLVVJMIGhyZWYo
KSBjb25zdDsKICAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIG5v
SHJlZigpIGNvbnN0OwpAQCAtNzQsNyArNzAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJp
bmcgdGFyZ2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJik7CiAK
LXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJl
Y3QsIENpcmNsZSwgVW5rbm93biB9OwogICAgIFBhdGggZ2V0UmVnaW9uKGNvbnN0IEludFNpemUm
KSBjb25zdDsKICAgICBQYXRoIHJlZ2lvbjsKICAgICBMZW5ndGgqIG1fY29vcmRzOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxCYXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9odG1s
L0hUTUxCYXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoq
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zNiw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQo
RG9jdW1lbnQgKmRvYykKK0hUTUxCYXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50KERvY3VtZW50
KiBkb2MpCiAgICAgOiBIVE1MRWxlbWVudChiYXNlVGFnLCBkb2MpCiB7CiB9CkBAIC00NSw3ICs0
Myw3IEBAIEhUTUxCYXNlRWxlbWVudDo6fkhUTUxCYXNlRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQg
SFRNTEJhc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCit2b2lkIEhUTUxCYXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKICAg
ICAgICAgbV9ocmVmID0gcGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7CkBAIC02OSw4ICs2Nyw4IEBA
IHZvaWQgSFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW4KIAogICAgIC8vIFNpbmNl
IHRoZSBkb2N1bWVudCBkb2Vzbid0IGhhdmUgYSBiYXNlIGVsZW1lbnQuLi4KICAgICAvLyAoVGhp
cyB3aWxsIGJyZWFrIGluIHRoZSBjYXNlIG9mIG11bHRpcGxlIGJhc2UgZWxlbWVudHMsIGJ1dCB0
aGF0J3Mgbm90IHZhbGlkIGFueXdheSAoPykpCi0gICAgZG9jdW1lbnQoKS0+c2V0QmFzZVVSTChE
ZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICBkb2N1bWVudCgpLT5zZXRCYXNlVGFyZ2V0KERl
cHJlY2F0ZWRTdHJpbmc6Om51bGwpOworICAgIGRvY3VtZW50KCktPnNldEJhc2VVUkwoS1VSTCgp
KTsKKyAgICBkb2N1bWVudCgpLT5zZXRCYXNlVGFyZ2V0KFN0cmluZygpKTsKIH0KIAogdm9pZCBI
VE1MQmFzZUVsZW1lbnQ6OnByb2Nlc3MoKQpAQCAtNzksNyArNzcsNyBAQCB2b2lkIEhUTUxCYXNl
RWxlbWVudDo6cHJvY2VzcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9ocmVmLmlz
RW1wdHkoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRC
YXNlVVJMKEtVUkwoZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpLCBtX2hyZWYu
ZGVwcmVjYXRlZFN0cmluZygpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgICAgICBkb2N1bWVu
dCgpLT5zZXRCYXNlVVJMKEtVUkwoZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgp
LCBtX2hyZWYpKTsKIAogICAgIGlmICghbV90YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICBkb2N1
bWVudCgpLT5zZXRCYXNlVGFyZ2V0KG1fdGFyZ2V0KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
Qm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOSBAQAotLyoqCisvKgogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDAgU2ltb24gSGF1c21hbm4gKGhhdXNtYW5uQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODgsNyArODgsNyBAQCB2b2lkIEhUTUxCb2R5RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBiYWNrZ3Jv
dW5kQXR0cikgewogICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7
CiAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0ltYWdlUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwodXJsKSk7CisgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfSU1BR0UsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkuc3RyaW5n
KCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1hcmdpbndpZHRoQXR0ciB8fCBh
dHRyLT5uYW1lKCkgPT0gbGVmdG1hcmdpbkF0dHIpIHsKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0
dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGFkZENT
U0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgYXR0ci0+dmFsdWUoKSk7CkBAIC0x
ODAsNyArMTgwLDcgQEAgU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6YUxpbmsoKSBjb25zdAogICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpbmtBdHRyKTsKIH0KIAotdm9pZCBIVE1MQm9keUVsZW1l
bnQ6OnNldEFMaW5rKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxCb2R5RWxlbWVudDo6
c2V0QUxpbmsoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYWxpbmtB
dHRyLCB2YWx1ZSk7CiB9CkBAIC0xOTAsNyArMTkwLDcgQEAgU3RyaW5nIEhUTUxCb2R5RWxlbWVu
dDo6YmFja2dyb3VuZCgpIGNvbgogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0
dHIpOwogfQogCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0QmFja2dyb3VuZChjb25zdCBTdHJp
bmcgJnZhbHVlKQordm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldEJhY2tncm91bmQoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIsIHZhbHVlKTsK
IH0KQEAgLTIwMCw3ICsyMDAsNyBAQCBTdHJpbmcgSFRNTEJvZHlFbGVtZW50OjpiZ0NvbG9yKCkg
Y29uc3QKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJnY29sb3JBdHRyKTsKIH0KIAotdm9pZCBI
VE1MQm9keUVsZW1lbnQ6OnNldEJnQ29sb3IoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRN
TEJvZHlFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0
QXR0cmlidXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7CiB9CkBAIC0yMTAsNyArMjEwLDcgQEAgU3Ry
aW5nIEhUTUxCb2R5RWxlbWVudDo6bGluaygpIGNvbnN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShsaW5rQXR0cik7CiB9CiAKLXZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRMaW5rKGNvbnN0IFN0
cmluZyAmdmFsdWUpCit2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0TGluayhjb25zdCBTdHJpbmcm
IHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShsaW5rQXR0ciwgdmFsdWUpOwogfQpAQCAtMjIw
LDcgKzIyMCw3IEBAIFN0cmluZyBIVE1MQm9keUVsZW1lbnQ6OnRleHQoKSBjb25zdAogICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUodGV4dEF0dHIpOwogfQogCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6
c2V0VGV4dChjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldFRl
eHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUodGV4dEF0dHIsIHZh
bHVlKTsKIH0KQEAgLTIzMCw3ICsyMzAsNyBAQCBTdHJpbmcgSFRNTEJvZHlFbGVtZW50Ojp2TGlu
aygpIGNvbnN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2bGlua0F0dHIpOwogfQogCi12b2lk
IEhUTUxCb2R5RWxlbWVudDo6c2V0VkxpbmsoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRN
TEJvZHlFbGVtZW50OjpzZXRWTGluayhjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0
dHJpYnV0ZSh2bGlua0F0dHIsIHZhbHVlKTsKIH0KQEAgLTI0MSw3ICsyNDEsNiBAQCBpbnQgSFRN
TEJvZHlFbGVtZW50OjpzY3JvbGxMZWZ0KCkgY29uc3QKICAgICBEb2N1bWVudCogZG9jID0gZG9j
dW1lbnQoKTsKICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwogICAgIEZyYW1lVmlldyogdmlldyA9IGRvYy0+dmlldygpOwotICAgIAogICAgIHJldHVybiB2
aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwOwogfQogCkBAIC0yNjEsNyArMjYwLDYgQEAgaW50
IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsVG9wKCkgY29uc3QKICAgICBEb2N1bWVudCogZG9jID0g
ZG9jdW1lbnQoKTsKICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogICAgIEZyYW1lVmlldyogdmlldyA9IGRvYy0+dmlldygpOwotICAgIAogICAgIHJldHVy
biB2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwOwogfQogCkBAIC0yODEsNyArMjc5LDYgQEAg
aW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkgY29ucwogICAgIERvY3VtZW50KiBk
b2MgPSBkb2N1bWVudCgpOwogICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jLT52aWV3KCk7Ci0gICAgCiAgICAg
cmV0dXJuIHZpZXcgPyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMDsgICAgCiB9CiAKQEAgLTI5
MSw3ICsyODgsNiBAQCBpbnQgSFRNTEJvZHlFbGVtZW50OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAg
ICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7CiAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2MtPnZpZXco
KTsKLSAgICAKICAgICByZXR1cm4gdmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDA7ICAg
IAogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDE3MikK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMCArMSw4IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5z
a2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
VHJvbGx0ZWNoIEFTQQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDYgKzIwLDcgQEAKICAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogCkBAIC02NCw3ICs2Myw3IEBA
IHN0YXRpYyBpbmxpbmUgUmVuZGVyV2lkZ2V0KiBmaW5kV2lkZ2V0UmUKICAgICAgICAgPyBzdGF0
aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihuLT5yZW5kZXJlcigpKSA6IDA7CiB9CiAgICAgCi1LSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRNTEVtYmVkRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25z
dAorS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEhUTUxFbWJlZEVsZW1lbnQ6OmdldEluc3RhbmNl
KCkgY29uc3QKIHsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBpZiAocG9zICE9IC0xKQogICAgICAgICAgICAgbV9z
ZXJ2aWNlVHlwZSA9IG1fc2VydmljZVR5cGUubGVmdChwb3MpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGNvZGVBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKQotICAgICAg
ICAgdXJsID0gcGFyc2VVUkwodmFsKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIG1fdXJs
ID0gcGFyc2VVUkwodmFsKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcGx1Z2lucGFn
ZUF0dHIgfHwgYXR0ci0+bmFtZSgpID09IHBsdWdpbnNwYWdlQXR0cikKICAgICAgICAgbV9wbHVn
aW5QYWdlID0gdmFsOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoaWRkZW5BdHRyKSB7
CkBAIC0xMjcsMTMgKzEyNiwxMyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmliCiAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKIH0KIAotYm9vbCBIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkKK2Jvb2wgSFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChS
ZW5kZXJTdHlsZSogc3R5bGUpCiB7Ci0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5vZGUgKnAgPSBwYXJlbnROb2Rl
KCk7CisgICAgTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAocCAmJiBwLT5oYXNUYWdO
YW1lKG9iamVjdFRhZykpIHsKICAgICAgICAgQVNTRVJUKHAtPnJlbmRlcmVyKCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xNDIsNyArMTQxLDcgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKAogICAgIHJldHVybiB0cnVlOwogfQogCi1SZW5kZXJPYmplY3Qg
KkhUTUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVu
ZGVyU3R5bGUgKnN0eWxlKQorUmVuZGVyT2JqZWN0KiBIVE1MRW1iZWRFbGVtZW50OjpjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBy
ZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUGFydE9iamVjdCh0aGlzKTsKIH0KQEAgLTE3MSw3ICsx
NzAsNyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCgpCiB2b2lkIEhUTUxF
bWJlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRp
Y19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKKyAgICAgICAgSFRNTERvY3VtZW50
KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCgpKTsKICAgICAgICAg
ZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwogICAgIH0KIApAQCAtMTk1LDcgKzE5NCw3
IEBAIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW0KIHZvaWQgSFRNTEVt
YmVkRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGRvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNf
Y2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7CisgICAgICAgIEhUTUxEb2N1bWVudCog
ZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7CiAgICAgICAgIGRv
Yy0+cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKICAgICB9CiAKQEAgLTIxNSw3ICsyMTQs
NyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoCiAgICAgfQogfQog
Ci1ib29sIEhUTUxFbWJlZEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikg
Y29uc3QKK2Jvb2wgSFRNTEVtYmVkRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyKSBjb25zdAogewogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEVtYmVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjcsNyArNjUsMTEgQEAgcHVibGljOgogICAgIFN0cmlu
ZyB0eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCi0gICAg
RGVwcmVjYXRlZFN0cmluZyB1cmw7CisgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgc2VydmljZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3NlcnZpY2VUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fdXJsOwogICAg
IFN0cmluZyBtX3BsdWdpblBhZ2U7CiAgICAgU3RyaW5nIG1fc2VydmljZVR5cGU7CiAgICAgYm9v
bCBtX25lZWRXaWRnZXRVcGRhdGU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2
aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
ICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTg2LDEyICs4Niw5IEBAIEhUTUxGb3JtRWxlbWVudDo6fkhUTUxGb3JtRWxl
bWVudCgpCiAgICAgICAgIGltZ0VsZW1lbnRzW2ldLT5tX2Zvcm0gPSAwOwogfQogCi1ib29sIEhU
TUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgU3RyaW5n
ICZ1cmwpCitib29sIEhUTUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Np
b24oY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKHVybC5pc051bGwoKSkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKS5zdGFydHNXaXRoKCJodHRwczoiLCBmYWxzZSk7Cisg
ICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkucHJvdG9jb2xJcygiaHR0cHMi
KTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmF0dGFjaCgpCkBAIC0xMDIsNyArOTksNyBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6YXR0YWNoKCkKIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQgKj4oZG9jdW1lbnQoKSk7CisgICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7CiAgICAgICAgIGRvYy0+YWRkTmFtZWRJ
dGVtKG9sZE5hbWVBdHRyKTsKICAgICB9CiAKQEAgLTExMiw3ICsxMDksNyBAQCB2b2lkIEhUTUxG
b3JtRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1l
bnQgKj4oZG9jdW1lbnQoKSk7CisgICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nh
c3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7CiAgICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJ
dGVtKG9sZE5hbWVBdHRyKTsKICAgICB9CiAgICAKQEAgLTE0OSw3ICsxNDYsNyBAQCB2b2lkIEhU
TUxGb3JtRWxlbWVudDo6c3VibWl0Q2xpY2soRXZlbnQqCiAgICAgYm9vbCBzdWJtaXRGb3VuZCA9
IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aGFzTG9jYWxOYW1lKGlucHV0
VGFnKSkgewotICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQgKj4oZm9ybUVsZW1lbnRzW2ldKTsKKyAgICAgICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
Zm9ybUVsZW1lbnRzW2ldKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N1Y2Nlc3NmdWxT
dWJtaXRCdXR0b24oKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAg
c3VibWl0Rm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoU2lt
dWxhdGVkQ2xpY2soZXZlbnQpOwpAQCAtMTY3LDcgKzE2NCw3IEBAIHN0YXRpYyBEZXByZWNhdGVk
Q1N0cmluZyBlbmNvZGVDU3RyaW5nKGMKIAogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0
bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMy40LjEKICAgICAvLyBzYW1lIHNhZmUgY2hh
cmFjdGVycyBhcyBOZXRzY2FwZSBmb3IgY29tcGF0aWJpbGl0eQotICAgIHN0YXRpYyBjb25zdCBj
aGFyICpzYWZlID0gIi0uXyoiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzYWZlID0gIi0uXyoi
OwogICAgIGludCBlbGVuID0gZS5sZW5ndGgoKTsKICAgICBEZXByZWNhdGVkQ1N0cmluZyBlbmNv
ZGVkKChlbGVuICsgZS5jb250YWlucygnXG4nKSkgKiAzICsgMSk7CiAgICAgaW50IGVuY2xlbiA9
IDA7CkBAIC0yNDYsNyArMjQzLDggQEAgVGV4dEVuY29kaW5nIEhUTUxGb3JtRWxlbWVudDo6ZGF0
YUVuY29kaQogICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKICAgICBTdHJpbmcgc3RyID0gbV9h
Y2NlcHRjaGFyc2V0OwogICAgIHN0ci5yZXBsYWNlKCcsJywgJyAnKTsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBjaGFyc2V0cyA9IHN0ci5zcGxpdCgnICcpOworICAgIFZlY3RvcjxTdHJpbmc+IGNoYXJz
ZXRzOworICAgIHN0ci5zcGxpdCgnICcsIGNoYXJzZXRzKTsKICAgICBWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY2hhcnNldHMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGFyc2V0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCiAgICAgICAgIGlmICgoZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKml0KSkuaXNWYWxpZCgp
KQpAQCAtMzEyLDEwICszMTAsMTAgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVt
ZW50OjpmbwogICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSAiXCIiOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjdXJy
ZW50KS0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVG
b3JQYXRoKHBhdGgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBh
dGgocGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSAiXHJcbkNv
bnRlbnQtVHlwZTogIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSBt
aW1lVHlwZS5hc2NpaSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3RyICs9
IG1pbWVUeXBlLmxhdGluMSgpLmRlcHJlY2F0ZWRDU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0zNjQsNyArMzYyLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlRW5j
dHlwZShjb25zdAogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6aXNNYWlsdG9Gb3JtKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV91cmwuc3RhcnRzV2l0aCgibWFpbHRvOiIsIGZhbHNlKTsKKyAgICBy
ZXR1cm4gcHJvdG9jb2xJcyhtX3VybCwgIm1haWx0byIpOwogfQogCiBib29sIEhUTUxGb3JtRWxl
bWVudDo6cHJlcGFyZVN1Ym1pdChFdmVudCogZXZlbnQpCkBAIC00NDQsOCArNDQyLDggQEAgc3Rh
dGljIHZvaWQgZ2V0VW5pcXVlQm91bmRhcnlTdHJpbmcoVmVjdAogCiB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6c3VibWl0KEV2ZW50KiBldmVudCwgYm9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbikKIHsK
LSAgICBGcmFtZVZpZXcgKnZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgRnJhbWUgKmZy
YW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVu
dCgpLT52aWV3KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAg
ICBpZiAoIXZpZXcgfHwgIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ4Miw3ICs0ODAs
NyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgICAgIGZp
cnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwogICAg
IAogICAgIGlmICghbV91cmwpCi0gICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+dXJsKCk7Cisg
ICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAKICAgICBpZiAobV9w
b3N0KSB7CiAgICAgICAgIGlmIChtX211bHRpcGFydCAmJiBpc01haWx0b0Zvcm0oKSkgewpAQCAt
NDk2LDcgKzQ5NCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4K
ICAgICAgICAgICAgICAgICBTdHJpbmcgYm9keSA9IGRhdGEtPmZsYXR0ZW5Ub1N0cmluZygpOwog
ICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbmN0eXBlKCksICJ0ZXh0L3Bs
YWluIikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVudGlvbiBzZWVtcyB0byBiZSB0
byBkZWNvZGUsIGFuZCBzLyYvXHJcbi8uIEFsc28sIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyAlMjAu
Ci0gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBLVVJMOjpkZWNvZGVfc3RyaW5nKGJvZHkucmVw
bGFjZSgnJicsICJcclxuIikucmVwbGFjZSgnKycsICcgJykuZGVwcmVjYXRlZFN0cmluZygpICsg
IlxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYm9keSA9IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhib2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxhY2UoJysnLCAnICcpICsgIlxyXG4i
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0
YSgoU3RyaW5nKCJib2R5PSIpICsgZW5jb2RlQ1N0cmluZyhib2R5LnV0ZjgoKSkpLnJlcGxhY2Uo
JysnLCAiJTIwIikubGF0aW4xKCkpOwogICAgICAgICAgICAgfQpAQCAtNTE5LDcgKzUxNyw3IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KIAogdm9pZCBIVE1MRm9y
bUVsZW1lbnQ6OnJlc2V0KCkKIHsKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKG1f
aW5yZXNldCB8fCAhZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTM4LDcgKzUzNiw3IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAgbV9pbnJlc2V0ID0gZmFsc2U7CiB9
CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWN0aW9u
QXR0cikKICAgICAgICAgbV91cmwgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKQEAgLTU2Niw3
ICs1NjQsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIFN0cmluZyBuZXdO
YW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTERvY3VtZW50ICpk
b2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7CisgICAgICAgICAg
ICBIVE1MRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50
KCkpOwogICAgICAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwogICAg
ICAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0obmV3TmFtZUF0dHIpOwogICAgICAgICB9CkBAIC01
ODUsNyArNTgzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIAog
ICAgICAgICB9CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRl
eChIVE1MR2VuZXJpY0Zvcm1FbGVtZW50ICplKQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpm
b3JtRWxlbWVudEluZGV4KEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqIGUpCiB7CiAgICAgLy8gQ2hl
Y2sgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhpcyBlbGVtZW50IGlzIHRoZSB2ZXJ5IGxh
c3QgdGhpbmcgaW4KICAgICAvLyB0aGUgZm9ybSdzIHRyZWUgb2YgY2hpbGRyZW47IHdlIGRvbid0
IHdhbnQgdG8gd2FsayB0aGUgZW50aXJlIHRyZWUgaW4gdGhhdApAQCAtNTkzLDEyICs1OTEsMTIg
QEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgIC8vIHRoYXQg
c2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KICAg
ICBpZiAoZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgewogICAgICAgICB1bnNpZ25lZCBpID0g
MDsKLSAgICAgICAgZm9yIChOb2RlICpub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUodGhpcykpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsg
bm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKICAgICAgICAgICAg
IGlmIChub2RlID09IGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50ICo+KG5vZGUpLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpCi0gICAgICAg
ICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQgKj4obm9k
ZSktPmZvcm0oKSA9PSB0aGlzKQorICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG5vZGUpLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpCisgICAgICAgICAgICAg
ICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqPihub2RlKS0+Zm9y
bSgpID09IHRoaXMpCiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NjE4LDE3ICs2MTYsMTcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50
KAogICAgIHJlbW92ZUZyb21WZWN0b3IoZm9ybUVsZW1lbnRzLCBlKTsKIH0KIAotYm9vbCBIVE1M
Rm9ybUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKK2Jvb2wg
SFRNTEZvcm1FbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBhY3Rpb25BdHRyOwogfQogCi12b2lkIEhUTUxG
b3JtRWxlbWVudDo6cmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQgKmUpCit2b2lk
IEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqIGUp
CiB7CiAgICAgaW1nRWxlbWVudHMuYXBwZW5kKGUpOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVu
dDo6cmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50ICplKQordm9pZCBIVE1MRm9ybUVs
ZW1lbnQ6OnJlbW92ZUltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVudCogZSkKIHsKICAgICByZW1v
dmVGcm9tVmVjdG9yKGltZ0VsZW1lbnRzLCBlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsxLDkgQEAKLS8qKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgot
ICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiAoaGF1c21hbm5Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNiArMjAsNyBAQAogICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogCkBAIC02MSwyOCArNjAsMjUgQEAg
Ym9vbCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxBbGxvd2VkKAogICAgIGlmIChVUkxTdHJp
bmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEtVUkwgY29tcGxldGVV
UkwoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoVVJMU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKSkp
OwotICAgIGNvbXBsZXRlVVJMLnNldFJlZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKKyAgICBL
VVJMIGNvbXBsZXRlVVJMKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKFVSTFN0cmluZykpOwogCiAg
ICAgLy8gRG9uJ3QgYWxsb3cgbW9yZSB0aGFuIDIwMCB0b3RhbCBmcmFtZXMgaW4gYSBzZXQuIFRo
aXMgc2VlbXMKICAgICAvLyBsaWtlIGEgcmVhc29uYWJsZSB1cHBlciBib3VuZCwgYW5kIG90aGVy
d2lzZSBtdXR1YWxseSByZWN1cnNpdmUKICAgICAvLyBmcmFtZXNldCBwYWdlcyBjYW4gcXVpY2ts
eSBicmluZyB0aGUgcHJvZ3JhbSB0byBpdHMga25lZXMgd2l0aAogICAgIC8vIGV4cG9uZW50aWFs
IGdyb3d0aCBpbiB0aGUgbnVtYmVyIG9mIGZyYW1lcy4KLQotICAgIC8vIEZJWE1FOiBUaGlzIGxp
bWl0IGNvdWxkIGJlIGhpZ2hlciwgYnV0IFdlYktpdCBoYXMgc29tZQorICAgIC8vIEZJWE1FOiBU
aGlzIGxpbWl0IGNvdWxkIGJlIGhpZ2hlciwgYnV0IGJlY2F1c2UgV2ViS2l0IGhhcyBzb21lCiAg
ICAgLy8gYWxnb3JpdGhtcyB0aGF0IGhhcHBlbiB3aGlsZSBsb2FkaW5nIHdoaWNoIGFwcGVhciB0
byBiZSBOXjIgb3IKLSAgICAvLyB3b3JzZSBpbiB0aGUgbnVtYmVyIG9mIGZyYW1lcwotICAgIGlm
IChGcmFtZSogcGFyZW50RnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgIC8vIHdvcnNl
IGluIHRoZSBudW1iZXIgb2YgZnJhbWVzLCB3ZSdsbCBrZWVwIGl0IGF0IDIwMCBmb3Igbm93Lgor
ICAgIGlmIChGcmFtZSogcGFyZW50RnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAg
ICAgIGlmIChwYXJlbnRGcmFtZS0+cGFnZSgpLT5mcmFtZUNvdW50KCkgPiAyMDApCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gV2UgYWxsb3cgb25lIGxldmVsIG9m
IHNlbGYtcmVmZXJlbmNlIGJlY2F1c2Ugc29tZSBzaXRlcyBkZXBlbmQgb24gdGhhdC4KICAgICAv
LyBCdXQgd2UgZG9uJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZS4KICAgICBib29sIGZvdW5kU2VsZlJl
ZmVyZW5jZSA9IGZhbHNlOwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKLSAgICAgICAg
S1VSTCBmcmFtZVVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0gICAgICAgIGZyYW1lVVJM
LnNldFJlZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICAgICAgaWYgKGZyYW1lVVJMID09
IGNvbXBsZXRlVVJMKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nUmVmKGZyYW1lLT5sb2Fk
ZXIoKS0+dXJsKCksIGNvbXBsZXRlVVJMKSkgewogICAgICAgICAgICAgaWYgKGZvdW5kU2VsZlJl
ZmVyZW5jZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBmb3Vu
ZFNlbGZSZWZlcmVuY2UgPSB0cnVlOwpAQCAtMTAwLDcgKzk2LDcgQEAgdm9pZCBIVE1MRnJhbWVF
bGVtZW50QmFzZTo6b3BlblVSTCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX1VSTC5p
c0VtcHR5KCkpCi0gICAgICAgIG1fVVJMID0gImFib3V0OmJsYW5rIjsKKyAgICAgICAgbV9VUkwg
PSBibGFua1VSTCgpLnN0cmluZygpOwogCiAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIXBhcmVudEZyYW1lKQpAQCAtMjAzLDcgKzE5OSw3IEBA
IHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpCiAgICAgICAgICAgICByZW5kZXJQ
YXJ0LT5zZXRXaWRnZXQoZnJhbWUtPnZpZXcoKSk7CiB9CiAKLVN0cmluZyBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6bG9jYXRpb24oKSBjb25zdAorS1VSTCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bG9j
YXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBzcmMoKTsKIH0KQEAgLTMwMiw3ICsyOTgsNyBA
QCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRTY3JvbGxpbmcoCiAgICAgc2V0QXR0cmli
dXRlKHNjcm9sbGluZ0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRC
YXNlOjpzcmMoKSBjb25zdAorS1VSTCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c3JjKCkgY29uc3QK
IHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0
dHIpKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiAz
MDE3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEwICsxLDggQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21h
bm4gPGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDcgKzM4
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogCi0gICAgU3RyaW5n
IGxvY2F0aW9uKCkgY29uc3Q7CisgICAgS1VSTCBsb2NhdGlvbigpIGNvbnN0OwogICAgIHZvaWQg
c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2Fi
bGUoKSBjb25zdDsKQEAgLTc0LDcgKzcyLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBzY3JvbGxp
bmcoKSBjb25zdDsKICAgICB2b2lkIHNldFNjcm9sbGluZyhjb25zdCBTdHJpbmcmKTsKIAotICAg
IFN0cmluZyBzcmMoKSBjb25zdDsKKyAgICBLVVJMIHNyYygpIGNvbnN0OwogICAgIHZvaWQgc2V0
U3JjKGNvbnN0IFN0cmluZyYpOwogCiAgICAgaW50IHdpZHRoKCkgY29uc3Q7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHZv
aWQgSFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgaWYgKGF0dHIt
PnZhbHVlKCkuZG9tU3RyaW5nKClbMF0gPT0gJyMnKQogICAgICAgICAgICAgdXNlbWFwID0gYXR0
ci0+dmFsdWUoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdXNlbWFwID0gZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOworICAgICAgICAgICAgdXNl
bWFwID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpLnN0
cmluZygpOwogICAgICAgICBtX2lzTGluayA9ICFhdHRyLT5pc051bGwoKTsKICAgICB9IGVsc2Ug
aWYgKGF0dHJOYW1lID09IGlzbWFwQXR0cikKICAgICAgICAgaXNtYXAgPSB0cnVlOwpAQCAtMzQy
LDcgKzM0Miw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SXNNYXAoYm9vbCBpc00KICAg
ICBzZXRBdHRyaWJ1dGUoaXNtYXBBdHRyLCBpc01hcCA/ICIiIDogMCk7CiB9CiAKLVN0cmluZyBI
VE1MSW1hZ2VFbGVtZW50Ojpsb25nRGVzYygpIGNvbnN0CitLVVJMIEhUTUxJbWFnZUVsZW1lbnQ6
OmxvbmdEZXNjKCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
Z2V0QXR0cmlidXRlKGxvbmdkZXNjQXR0cikpOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQg
SFRNTEltYWdlRWxlbWVudDo6c2V0TG9uZ0Rlc2MoY29uc3QKICAgICBzZXRBdHRyaWJ1dGUobG9u
Z2Rlc2NBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50Ojpsb3dzcmMo
KSBjb25zdAorS1VSTCBIVE1MSW1hZ2VFbGVtZW50Ojpsb3dzcmMoKSBjb25zdAogewogICAgIHJl
dHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUobG93c3JjQXR0cikpOwog
fQpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0TG93c3JjKGNv
bnN0IFMKICAgICBzZXRBdHRyaWJ1dGUobG93c3JjQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcg
SFRNTEltYWdlRWxlbWVudDo6c3JjKCkgY29uc3QKK0tVUkwgSFRNTEltYWdlRWxlbWVudDo6c3Jj
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmli
dXRlKHNyY0F0dHIpKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24g
MzAxNzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTIgKzIzLDEzIEBACiAjaWZuZGVm
IEhUTUxJbWFnZUVsZW1lbnRfaAogI2RlZmluZSBIVE1MSW1hZ2VFbGVtZW50X2gKIAotI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CisKK2NsYXNzIEhUTUxGb3Jt
RWxlbWVudDsKIAogY2xhc3MgSFRNTEltYWdlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7
CiAgICAgZnJpZW5kIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKQEAgLTYyLDggKzYxLDYgQEAgcHVi
bGljOgogCiAgICAgU3RyaW5nIGFsdFRleHQoKSBjb25zdDsKIAotICAgIFN0cmluZyBpbWFnZU1h
cCgpIGNvbnN0IHsgcmV0dXJuIHVzZW1hcDsgfQotICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1VS
TEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKIAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQpA
QCAtOTMsMTMgKzkwLDEzIEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRJc01hcChib29sKTsKIAotICAgIFN0cmluZyBsb25nRGVzYygpIGNvbnN0OworICAg
IEtVUkwgbG9uZ0Rlc2MoKSBjb25zdDsKICAgICB2b2lkIHNldExvbmdEZXNjKGNvbnN0IFN0cmlu
ZyYpOwogCi0gICAgU3RyaW5nIGxvd3NyYygpIGNvbnN0OworICAgIEtVUkwgbG93c3JjKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRMb3dzcmMoY29uc3QgU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgc3Jj
KCkgY29uc3Q7CisgICAgS1VSTCBzcmMoKSBjb25zdDsKICAgICB2b2lkIHNldFNyYyhjb25zdCBT
dHJpbmcmKTsKIAogICAgIFN0cmluZyB1c2VNYXAoKSBjb25zdDsKQEAgLTExNiw3ICsxMTMsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjb21wbGV0ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBoYXZlRmly
ZWRMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlTG9hZGVyLmhhdmVGaXJlZExvYWRF
dmVudCgpOyB9Ci1wcm90ZWN0ZWQ6CisKK3ByaXZhdGU6CiAgICAgSFRNTEltYWdlTG9hZGVyIG1f
aW1hZ2VMb2FkZXI7CiAgICAgU3RyaW5nIHVzZW1hcDsKICAgICBib29sIGlzbWFwOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDksNyArMTQ0OSw3
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U2l6ZSh1bnNpZ25lZCAKICAgICBzZXRBdHRy
aWJ1dGUoc2l6ZUF0dHIsIFN0cmluZzo6bnVtYmVyKF9zaXplKSk7CiB9CiAKLVN0cmluZyBIVE1M
SW5wdXRFbGVtZW50OjpzcmMoKSBjb25zdAorS1VSTCBIVE1MSW5wdXRFbGVtZW50OjpzcmMoKSBj
b25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUo
c3JjQXR0cikpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiAzMDE3
MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEltYWdlTG9h
ZGVyOworY2xhc3MgS1VSTDsKIGNsYXNzIFNlbGVjdGlvbjsKIAogY2xhc3MgSFRNTElucHV0RWxl
bWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsKQEAgLTE2Niw3
ICsxNjcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNpemUodW5zaWduZWQpOwogCi0gICAg
U3RyaW5nIHNyYygpIGNvbnN0OworICAgIEtVUkwgc3JjKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRT
cmMoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIHNldE1heExlbmd0aChpbnQpOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoq
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMSw2ICsxOSw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkhUTUxMaW5rRWxlbWVudC5oIgogCkBAIC0xMDgsNyArMTA3LDcgQEAgdm9pZCBIVE1MTGlua0Vs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShh
dHRyLT52YWx1ZSgpKTsKICAgICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGhyZWZBdHRyKSB7Ci0gICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOworICAgICAgICBtX3VybCA9IGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKS5zdHJpbmcoKTsKICAgICAg
ICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7
CiAgICAgICAgIG1fdHlwZSA9IGF0dHItPnZhbHVlKCk7CkBAIC0xMzgsNyArMTM3LDggQEAgdm9p
ZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidQogICAgIGVsc2UgewogICAgICAg
ICAvLyBUb2tlbml6ZSB0aGUgcmVsIGF0dHJpYnV0ZSBhbmQgc2V0IGJpdHMgYmFzZWQgb24gc3Bl
Y2lmaWMga2V5d29yZHMgdGhhdCB3ZSBmaW5kLgogICAgICAgICByZWwucmVwbGFjZSgnXG4nLCAn
ICcpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gcmVsLnNwbGl0KCcgJyk7CisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Q7CisgICAgICAgIHJlbC5zcGxpdCgnICcsIGxpc3QpOwog
ICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGlzdC5lbmQoKTsK
ICAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKCppdCA9PSAic3R5bGVz
aGVldCIpCkBAIC0yNzQsNyArMjc0LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENoYXJz
ZXQoY29uc3QgUwogICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFsdWUpOwogfQogCi1T
dHJpbmcgSFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QKK0tVUkwgSFRNTExpbmtFbGVtZW50
OjpocmVmKCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0
QXR0cmlidXRlKGhyZWZBdHRyKSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCShyZXZp
c2lvbiAzMDE3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDE5ICsxOSwyMCBAQAogICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgSFRNTExpbmtF
bGVtZW50X2gKICNkZWZpbmUgSFRNTExpbmtFbGVtZW50X2gKIAotI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDU1NT
dHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZENT
U1N0eWxlU2hlZXQ7CitjbGFzcyBLVVJMOwogCi1jbGFzcyBIVE1MTGlua0VsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudAoteworY2xhc3MgSFRN
TExpbmtFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VD
bGllbnQgewogcHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudChEb2N1bWVudCopOwogICAgIH5I
VE1MTGlua0VsZW1lbnQoKTsKQEAgLTQ3LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBj
aGFyc2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCi0g
ICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKKyAgICBLVVJMIGhyZWYoKSBjb25zdDsKICAgICB2b2lk
IHNldEhyZWYoY29uc3QgU3RyaW5nJik7CiAKICAgICBTdHJpbmcgaHJlZmxhbmcoKSBjb25zdDsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI2
LDcgKzIyNiw3IEBAIFBhc3NSZWZQdHI8TWVkaWFFcnJvcj4gSFRNTE1lZGlhRWxlbWVudDoKICAg
ICByZXR1cm4gbV9lcnJvcjsKIH0KIAotU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OnNyYygpIGNv
bnN0CitLVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNyYygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CkBAIC04MTks
MTMgKzgxOSwxMyBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6cGlja01lZGlhKCkKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE1lZGlhTUlN
RVR5cGUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVkaWFTcmMgPSBzb3VyY2UtPnNyYygpOworICAg
ICAgICAgICAgICAgIG1lZGlhU3JjID0gc291cmNlLT5zcmMoKS5zdHJpbmcoKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBpZiAo
IW1lZGlhU3JjLmlzRW1wdHkoKSkKLSAgICAgICAgbWVkaWFTcmMgPSBkb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChtZWRpYVNyYyk7CisgICAgICAgIG1lZGlhU3JjID0gZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwobWVkaWFTcmMpLnN0cmluZygpOwogICAgIHJldHVybiBtZWRpYVNyYzsKIH0KIApJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYUVycm9yOwogY2xhc3MgVGltZVJhbmdlczsK
K2NsYXNzIEtVUkw7CiAgICAgCiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJDbGllbnQgewogcHVibGljOgpAQCAtNzEsNyArNzIs
NyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxNZWRpYUVycm9yPiBlcnJvcigpIGNvbnN0Owog
CiAvLyBuZXR3b3JrIHN0YXRlCi0gICAgU3RyaW5nIHNyYygpIGNvbnN0OworICAgIEtVUkwgc3Jj
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGN1
cnJlbnRTcmMoKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNj
aGltYW5za2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtMjYwLDcgKzI2MCw3IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxPYmplY3RFbGVtZW50
OjoKIAogYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aXNJbWFnZVR5cGUoKQogewotICAgIGlmICht
X3NlcnZpY2VUeXBlLmlzRW1wdHkoKSAmJiBtX3VybC5zdGFydHNXaXRoKCJkYXRhOiIpKSB7Cisg
ICAgaWYgKG1fc2VydmljZVR5cGUuaXNFbXB0eSgpICYmIHByb3RvY29sSXMobV91cmwsICJkYXRh
IikpIHsKICAgICAgICAgLy8gRXh0cmFjdCB0aGUgTUlNRSB0eXBlIGZyb20gdGhlIGRhdGEgVVJM
LgogICAgICAgICBpbnQgaW5kZXggPSBtX3VybC5maW5kKCc7Jyk7CiAgICAgICAgIGlmIChpbmRl
eCA9PSAtMSkKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRD
b2RlVHlwZShjb25zCiAgICAgc2V0QXR0cmlidXRlKGNvZGV0eXBlQXR0ciwgdmFsdWUpOwogfQog
Ci1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmRhdGEoKSBjb25zdAorS1VSTCBIVE1MT2JqZWN0
RWxlbWVudDo6ZGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGdldEF0dHJpYnV0ZShkYXRhQXR0cikpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxP
YmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVt
ZW50LmgJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksNiArMjksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CitjbGFzcyBLVVJMOwogCiBjbGFzcyBIVE1MT2Jq
ZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudCB7CiBwdWJsaWM6CkBAIC03OSw3
ICs4MCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgY29kZVR5cGUoKSBjb25zdDsKICAgICB2b2lk
IHNldENvZGVUeXBlKGNvbnN0IFN0cmluZyYpOwogICAgIAotICAgIFN0cmluZyBkYXRhKCkgY29u
c3Q7CisgICAgS1VSTCBkYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgYm9vbCBkZWNsYXJlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TE9wdEdyb3VwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRH
cm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lk
IEhUTUxPcHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlCiAKIFN0cmluZyBIVE1MT3B0R3Jv
dXBFbGVtZW50Ojpncm91cExhYmVsVGV4dCgpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZFN0cmlu
ZyBpdGVtVGV4dCA9IGdldEF0dHJpYnV0ZShsYWJlbEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
KyAgICBTdHJpbmcgaXRlbVRleHQgPSBnZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKICAgICAKICAg
ICBpdGVtVGV4dC5yZXBsYWNlKCdcXCcsIGRvY3VtZW50KCktPmJhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2woKSk7CiAgICAgLy8gSW4gV2luSUUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3Bh
Y2UgaXMgaWdub3JlZCBpbiBvcHRpb25zIGFuZCBvcHRncm91cHMuIFdlIG1hdGNoIHRoaXMgYmVo
YXZpb3IuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3Nyw3ICsxNDc3LDkgQEAg
dm9pZCBIVE1MUGFyc2VyOjpyZXBvcnRFcnJvclRvQ29uc29sZShIVAogICAgIG1lc3NhZ2UucmVw
bGFjZSgiJXRhZzEiLCB0YWcxKTsKICAgICBtZXNzYWdlLnJlcGxhY2UoIiV0YWcyIiwgdGFnMik7
CiAKLSAgICBwYWdlLT5jaHJvbWUoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShIVE1MTWVzc2FnZVNv
dXJjZSwgaXNXYXJuaW5nKGVycm9yQ29kZSkgPyBXYXJuaW5nTWVzc2FnZUxldmVsOiBFcnJvck1l
c3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgZG9jdW1lbnQtPnVybCgpKTsKKyAgICBw
YWdlLT5jaHJvbWUoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShIVE1MTWVzc2FnZVNvdXJjZSwKKyAg
ICAgICAgaXNXYXJuaW5nKGVycm9yQ29kZSkgPyBXYXJuaW5nTWVzc2FnZUxldmVsOiBFcnJvck1l
c3NhZ2VMZXZlbCwKKyAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgZG9jdW1lbnQtPnVybCgp
LnN0cmluZygpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDYgKzE5LDcgQEAKICAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKIApAQCAtNDAsNyArMzksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7CiAKLUhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVu
dChEb2N1bWVudCAqZG9jKQorSFRNTFNjcmlwdEVsZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50KERv
Y3VtZW50KiBkb2MpCiAgICAgOiBIVE1MRWxlbWVudChzY3JpcHRUYWcsIGRvYykKICAgICAsIG1f
Y2FjaGVkU2NyaXB0KDApCiAgICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSkKQEAgLTU0LDcg
KzUzLDcgQEAgSFRNTFNjcmlwdEVsZW1lbnQ6On5IVE1MU2NyaXB0RWxlbWVudCgpCiAgICAgICAg
IG1fY2FjaGVkU2NyaXB0LT5kZXJlZih0aGlzKTsKIH0KIAotYm9vbCBIVE1MU2NyaXB0RWxlbWVu
dDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAorYm9vbCBIVE1MU2NyaXB0
RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKSBjb25zdAogewogICAgIHJl
dHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKIH0KQEAgLTY1LDExICs2NCwxMSBAQCB2b2lk
IEhUTUxTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoCiAgICAgLy8gYW5kIHRoZSBzY3Jp
cHQgZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgZG9jdW1lbnQKICAgICAvLyB3ZSBl
dmFsdWF0ZSB0aGUgc2NyaXB0LgogICAgIGlmICghbV9jcmVhdGVkQnlQYXJzZXIgJiYgaW5Eb2N1
bWVudCgpICYmIGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoZG9jdW1lbnQo
KS0+dXJsKCksIHRleHQoKSk7CisgICAgICAgIGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCktPnVy
bCgpLnN0cmluZygpLCB0ZXh0KCkpOwogICAgIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
Y2hhbmdlZEJ5UGFyc2VyKTsKIH0KIAotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBIVE1MU2NyaXB0RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOwogICAgIGlmIChhdHRy
TmFtZSA9PSBzcmNBdHRyKSB7CkBAIC0xMzksNyArMTM4LDcgQEAgdm9pZCBIVE1MU2NyaXB0RWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdQogICAgIC8vIGl0IHNob3VsZCBiZSBldmFsdWF0ZWQsIGFu
ZCBldmFsdWF0ZVNjcmlwdCBvbmx5IGV2YWx1YXRlcyBhIHNjcmlwdCBvbmNlLgogICAgIFN0cmlu
ZyBzY3JpcHRTdHJpbmcgPSB0ZXh0KCk7ICAgIAogICAgIGlmICghc2NyaXB0U3RyaW5nLmlzRW1w
dHkoKSkKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoZG9jdW1lbnQoKS0+dXJsKCksIHNjcmlwdFN0
cmluZyk7CisgICAgICAgIGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCktPnVybCgpLnN0cmluZygp
LCBzY3JpcHRTdHJpbmcpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW50KCkKQEAgLTE1NCw3ICsxNTMsNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50Ojpy
ZW1vdmVkRnJvbURvY3VtCiAKIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKiBvKQogewotICAgIENhY2hlZFNjcmlwdCAqY3MgPSBzdGF0aWNfY2Fz
dDxDYWNoZWRTY3JpcHQgKj4obyk7CisgICAgQ2FjaGVkU2NyaXB0KiBjcyA9IHN0YXRpY19jYXN0
PENhY2hlZFNjcmlwdCo+KG8pOwogCiAgICAgQVNTRVJUKGNzID09IG1fY2FjaGVkU2NyaXB0KTsK
IApAQCAtMjQ1LDE0ICsyNDQsMTQgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVT
Y3JpcHQoYwogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnRleHQoKSBjb25zdAogewotICAg
IFN0cmluZyB2YWwgPSAiIjsKKyAgICBWZWN0b3I8VUNoYXI+IHZhbDsKICAgICAKLSAgICBmb3Ig
KE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAg
Zm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKQotICAgICAgICAgICAgdmFsICs9IHN0YXRpY19j
YXN0PFRleHQgKj4obiktPmRhdGEoKTsKKyAgICAgICAgICAgIGFwcGVuZCh2YWwsIHN0YXRpY19j
YXN0PFRleHQqPihuKS0+ZGF0YSgpKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHZhbDsKKyAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdCh2YWwpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50
OjpzZXRUZXh0KGNvbnN0IFN0cmluZyAmdmFsdWUpCkBAIC0yNjUsOSArMjY0LDggQEAgdm9pZCBI
VE1MU2NyaXB0RWxlbWVudDo6c2V0VGV4dChjb25zdCBTdAogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIGlmIChudW1DaGlsZHJlbiA+IDApIHsKKyAgICBpZiAobnVtQ2hpbGRyZW4g
PiAwKQogICAgICAgICByZW1vdmVDaGlsZHJlbigpOwotICAgIH0KICAgICAKICAgICBhcHBlbmRD
aGlsZChkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2YWx1ZS5pbXBsKCkpLCBlYyk7CiB9CkBA
IC0yNzgsNyArMjc2LDcgQEAgU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpodG1sRm9yKCkgY29u
cwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0
SHRtbEZvcihjb25zdCBTdHJpbmcgJi8qdmFsdWUqLykKK3ZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6
OnNldEh0bWxGb3IoY29uc3QgU3RyaW5nJiAvKnZhbHVlKi8pCiB7CiAgICAgLy8gRE9NIExldmVs
IDEgc2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiB9CkBAIC0yODksNyArMjg3LDcgQEAg
U3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpldmVudCgpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRFdmVudChjb25zdCBTdHJpbmcg
Ji8qdmFsdWUqLykKK3ZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldEV2ZW50KGNvbnN0IFN0cmlu
ZyYgLyp2YWx1ZSovKQogewogICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZvciBm
dXR1cmUgdXNlLgogfQpAQCAtMzE0LDcgKzMxMiw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6
OnNldERlZmVyKGJvb2wgZGUKICAgICBzZXRBdHRyaWJ1dGUoZGVmZXJBdHRyLCBkZWZlciA/ICIi
IDogMCk7CiB9CiAKLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6c3JjKCkgY29uc3QKK0tVUkwg
SFRNTFNjcmlwdEVsZW1lbnQ6OnNyYygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNj
cmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02
OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGRlZmVyKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXREZWZlcihib29sKTsKIAotICAgIFN0cmluZyBzcmMoKSBjb25zdDsKKyAgICBLVVJMIHNyYygp
IGNvbnN0OwogICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIHR5
cGUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAkocmV2aXNpb24g
MzAxNzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCkBAIC01Niw3ICs1Nyw3IEBAIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3UKICAgICB9CiB9CiAKLVN0cmluZyBIVE1MU291cmNlRWxlbWVudDo6
c3JjKCkgY29uc3QKK0tVUkwgSFRNTFNvdXJjZUVsZW1lbnQ6OnNyYygpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE1ICsyOSwx
MiBAQAogI2lmIEVOQUJMRShWSURFTykKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0gICAgCi1jbGFzcyBNZWRpYUVycm9y
OwotICAgIAorY2xhc3MgS1VSTDsKKwogY2xhc3MgSFRNTFNvdXJjZUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxTb3VyY2VFbGVtZW50KERvY3VtZW50Kik7
CkBAIC00OCw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKICAgICAKLSAgICBTdHJpbmcgc3JjKCkgY29uc3Q7CisgICAgS1VS
TCBzcmMoKSBjb25zdDsKICAgICBTdHJpbmcgbWVkaWEoKSBjb25zdDsKICAgICBTdHJpbmcgdHlw
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOyAgICAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNyArMzUxLDcgQEAg
dm9pZCBIVE1MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGJhY2tncm91bmRBdHRyKSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBw
YXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgYWRkQ1NTSW1hZ2VQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0lN
QUdFLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpKTsKKyAgICAgICAgICAgIGFkZENTU0lt
YWdlUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwodXJsKS5zdHJpbmcoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gZnJhbWVBdHRyKSB7CiAgICAgICAgIC8vIENhY2hlIHRoZSB2YWx1ZSBvZiAiZnJhbWUiIHNv
IHRoYXQgdGhlIHRhYmxlIGNhbiBleGFtaW5lIGl0IGxhdGVyLgogICAgICAgICBtX2ZyYW1lQXR0
ciA9IGZhbHNlOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzMDE3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudDo6
cGFyc2VNYXBwZWRBdAogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0
cikgewogICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7CiAgICAg
ICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
dXJsKSk7CisgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIsIENTU19QUk9QX0JB
Q0tHUk9VTkRfSU1BR0UsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkuc3RyaW5nKCkpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJvcmRlcmNvbG9yQXR0cikgewogICAgICAg
ICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhZGRDU1NDb2xv
cihhdHRyLCBDU1NfUFJPUF9CT1JERVJfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsy
NTYsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0CiB7CiAgICAg
Ly8gQ29kZSBlbHNld2hlcmUgbm9ybWFsaXplcyBsaW5lIGVuZGluZ3MgYWRkZWQgYnkgdGhlIHVz
ZXIgdmlhIHRoZSBrZXlib2FyZCBvciBwYXN0aW5nLgogICAgIC8vIFdlIG11c3Qgbm9ybWFsaXpl
IGxpbmUgZW5kaW5ncyBjb21pbmcgZnJvbSBKUy4KLSAgICBEZXByZWNhdGVkU3RyaW5nIHZhbHVl
V2l0aE5vcm1hbGl6ZWRMaW5lRW5kaW5ncyA9IHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAg
ICBTdHJpbmcgdmFsdWVXaXRoTm9ybWFsaXplZExpbmVFbmRpbmdzID0gdmFsdWU7CiAgICAgdmFs
dWVXaXRoTm9ybWFsaXplZExpbmVFbmRpbmdzLnJlcGxhY2UoIlxyXG4iLCAiXG4iKTsKICAgICB2
YWx1ZVdpdGhOb3JtYWxpemVkTGluZUVuZGluZ3MucmVwbGFjZSgiXHIiLCAiXG4iKTsKICAgICAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsNyArNTEwLDcgQEAg
SFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgIGlmIChtX2ZyYWdt
ZW50IHx8ICFtX2RvYy0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIHN0YXRlOwogICAgIG1fZXhl
Y3V0aW5nU2NyaXB0Kys7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyB1cmwgPSBzY3JpcHRVUkwuaXNO
dWxsKCkgPyBtX2RvYy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBzY3JpcHRVUkwuZGVw
cmVjYXRlZFN0cmluZygpOworICAgIFN0cmluZyB1cmwgPSBzY3JpcHRVUkwuaXNOdWxsKCkgPyBt
X2RvYy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkgOiBzY3JpcHRVUkw7CiAK
ICAgICBTZWdtZW50ZWRTdHJpbmcgKnNhdmVkUHJlcGVuZGluZ1NyYyA9IGN1cnJlbnRQcmVwZW5k
aW5nU3JjOwogICAgIFNlZ21lbnRlZFN0cmluZyBwcmVwZW5kaW5nU3JjOwpAQCAtMTIyMCw3ICsx
MjIwLDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6cGFycwogICAgICAg
ICAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2RvYy0+c2V0dGluZ3MoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRF
bmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSA9IGN1cnJUb2tlbi5h
dHRycy0+Z2V0QXR0cmlidXRlSXRlbShzcmNBdHRyKSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyaXB0U3JjID0gbV9kb2MtPmNvbXBsZXRlVVJMKHBhcnNlVVJMKGEtPnZhbHVlKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRTcmMgPSBtX2RvYy0+Y29tcGxl
dGVVUkwocGFyc2VVUkwoYS0+dmFsdWUoKSkpLnN0cmluZygpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChhID0gY3VyclRva2VuLmF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGNoYXJzZXRB
dHRyKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0U3JjQ2hhcnNldCA9IGEt
PnZhbHVlKCkuZG9tU3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2NyaXB0U3JjQ2hhcnNldC5pc0VtcHR5KCkpCkBAIC0xNjE1LDggKzE2MTUs
OCBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUCiAgICAgICAgIGpz
UHJveHktPnNldEV2ZW50SGFuZGxlckxpbmVubyh0YWdTdGFydExpbmVubyk7CiAgICAgaWYgKGRl
c3QgPiBidWZmZXIpIHsKICNpZmRlZiBUT0tFTl9ERUJVRwotICAgICAgICBpZihjdXJyVG9rZW4u
dGFnTmFtZS5sZW5ndGgoKSkgewotICAgICAgICAgICAgcURlYnVnKCAidW5leHBlY3RlZCB0b2tl
bjogJXMsIHN0cjogKiVzKiIsIGN1cnJUb2tlbi50YWdOYW1lLmRlcHJlY2F0ZWRTdHJpbmcoKS5s
YXRpbjEoKSxEZXByZWNhdGVkQ29uc3RTdHJpbmcoIGJ1ZmZlcixkZXN0LWJ1ZmZlciApLmRlcHJl
Y2F0ZWRTdHJpbmcoKS5sYXRpbjEoKSApOworICAgICAgICBpZiAoY3VyclRva2VuLnRhZ05hbWUu
bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHFEZWJ1ZyggInVuZXhwZWN0ZWQgdG9rZW46ICVzLCBz
dHI6IColcyoiLCBjdXJyVG9rZW4udGFnTmFtZS5sYXRpbjEoKS5kYXRhKCksIERlcHJlY2F0ZWRD
b25zdFN0cmluZyhidWZmZXIsIGRlc3QtYnVmZmVyKS5kZXByZWNhdGVkU3RyaW5nKCkubGF0aW4x
KCkpOwogICAgICAgICAgICAgQVNTRVJUKDApOwogICAgICAgICB9CiAKQEAgLTE2MzYsNyArMTYz
Niw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFRva2VuaXplcjo6cHJvY2Vzc1QKICNpZmRlZiBU
T0tFTl9ERUJVRwogICAgIERlcHJlY2F0ZWRTdHJpbmcgbmFtZSA9IGN1cnJUb2tlbi50YWdOYW1l
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICBEZXByZWNhdGVkU3RyaW5nIHRleHQ7Ci0gICAgaWYo
Y3VyclRva2VuLnRleHQpCisgICAgaWYgKGN1cnJUb2tlbi50ZXh0KQogICAgICAgICB0ZXh0ID0g
RGVwcmVjYXRlZENvbnN0U3RyaW5nKGN1cnJUb2tlbi50ZXh0LT51bmljb2RlKCksIGN1cnJUb2tl
bi50ZXh0LT5sZW5ndGgoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogCiAgICAga2REZWJ1ZyggNjAz
NiApIDw8ICJUb2tlbiAtLT4gIiA8PCBuYW1lIDw8IGVuZGw7CkBAIC0xNzE3LDcgKzE3MTcsNyBA
QCB2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlCiAgICAgLy8gZmlsZSBs
b2FkcyB3ZXJlIHNlcmlhbGl6ZWQgaW4gbG93ZXIgbGV2ZWwuCiAgICAgLy8gRklYTUU6IHRoaXMg
c2hvdWxkIHJlYWxseSBiZSBkb25lIGZvciBhbGwgc2NyaXB0IGxvYWRzIG9yIHRoZSBzYW1lIGVm
ZmVjdCBzaG91bGQgYmUgYWNoaWV2ZWQgYnkgb3RoZXIKICAgICAvLyBtZWFucywgbGlrZSBqYXZh
c2NyaXB0IHN1c3BlbmQvcmVzdW1lCi0gICAgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hl
ZXRzID0gIW1fZG9jLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiBwZW5kaW5nU2NyaXB0cy5o
ZWFkKCktPnVybCgpLnN0YXJ0c1dpdGgoImZpbGU6IiwgZmFsc2UpOworICAgIG1faGFzU2NyaXB0
c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyA9ICFtX2RvYy0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkg
JiYgcHJvdG9jb2xJcyhwZW5kaW5nU2NyaXB0cy5oZWFkKCktPnVybCgpLCAiZmlsZSIpOwogICAg
IGlmIChtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMpCiAgICAgICAgIHJldHVybjsK
IApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6ZGV0YWNoKCkKICAgICAgICAgICAgIG1faW1h
Z2VMb2FkZXIuY2xlYXIoKTsKIH0KIAotdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKIApAQCAtMTQwLDcgKzE0
MCw3IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6c2V0SGVpZ2h0KGludCB2YWwKICAgICBzZXRB
dHRyaWJ1dGUoaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAotU3RyaW5n
IEhUTUxWaWRlb0VsZW1lbnQ6OnBvc3RlcigpIGNvbnN0CitLVVJMIEhUTUxWaWRlb0VsZW1lbnQ6
OnBvc3RlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdl
dEF0dHJpYnV0ZShwb3N0ZXJBdHRyKSk7CiB9CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBIVE1M
VmlkZW9FbGVtZW50OjpzZXRQb3N0ZXIoY29uc3QgUwogICAgIHNldEF0dHJpYnV0ZShwb3N0ZXJB
dHRyLCB2YWx1ZSk7CiB9CiAKLWJvb2wgSFRNTFZpZGVvRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlICphdHRyKSBjb25zdAorYm9vbCBIVE1MVmlkZW9FbGVtZW50Ojppc1VSTEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9
PSBwb3N0ZXJBdHRyOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCShyZXZpc2lvbiAz
MDE3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBpbnQgdmlkZW9XaWR0aCgpIGNvbnN0OwogICAg
IGludCB2aWRlb0hlaWdodCgpIGNvbnN0OwogICAgIAotICAgIFN0cmluZyBwb3N0ZXIoKSBjb25z
dDsKKyAgICBLVVJMIHBvc3RlcigpIGNvbnN0OwogICAgIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0
cmluZyYpOwogCiAgICAgdm9pZCB1cGRhdGVQb3N0ZXJJbWFnZSgpOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjMsOCArMjMsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJE
T01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxWaWV3U291cmNlRG9jdW1lbnQuaCIK
KworI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXpl
ci5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JF
bGVtZW50LmgiCkBAIC0zOCw4ICszOSw3IEBACiAjaW5jbHVkZSAiVGV4dERvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlCi17CituYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKQEAgLTI0OCw3ICsyNDgs
OCBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZFRleHQoY29uCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEFkZCBpbiB0aGUgY29udGVudCwgc3BsaXR0aW5nIG9uIG5ld2xpbmVz
LgotICAgIFZlY3RvcjxTdHJpbmc+IGxpbmVzID0gdGV4dC5zcGxpdCgnXG4nLCB0cnVlKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBsaW5lczsKKyAgICB0ZXh0LnNwbGl0KCdcbicsIHRydWUsIGxpbmVz
KTsKICAgICB1bnNpZ25lZCBzaXplID0gbGluZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgU3RyaW5nIHN1YnN0cmluZyA9IGxpbmVz
W2ldOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUv
bG9hZGVyL0RvY0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoK
LSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotCiAgICAgQ29weXJp
Z2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJp
Z2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICAgIENvcHlyaWdo
dCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjUsNyArNjMsMTEgQEAgRG9jTG9hZGVyOjp+RG9j
TG9hZGVyKCkKIHZvaWQgRG9jTG9hZGVyOjpjaGVja0ZvclJlbG9hZChjb25zdCBLVVJMJiBmdWxs
VVJMKQogewogICAgIGlmIChtX2FsbG93U3RhbGVSZXNvdXJjZXMpCi0gICAgICAgIHJldHVybjsg
Ly9Eb24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxlIHBhc3RpbmcKKyAgICAgICAgcmV0dXJuOyAv
LyBEb24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxlIHBhc3RpbmcKKworICAgIGlmIChmdWxsVVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fY2FjaGVQb2xpY3kgPT0g
Q2FjaGVQb2xpY3lWZXJpZnkpIHsKICAgICAgICBpZiAoIW1fcmVsb2FkZWRVUkxzLmNvbnRhaW5z
KGZ1bGxVUkwuc3RyaW5nKCkpKSB7CiAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5n
ID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7CkBAIC0xNDEsNyAr
MTQzLDcgQEAgQ2FjaGVkWEJMRG9jdW1lbnQqIERvY0xvYWRlcjo6cmVxdWVzdFhCTAogCiBDYWNo
ZWRSZXNvdXJjZSogRG9jTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogY2hhcnNldCwgYm9vbCBz
a2lwQ2FuTG9hZENoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7Ci0gICAg
S1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybC5kZXByZWNhdGVkU3RyaW5nKCkp
OworICAgIEtVUkwgZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVSTCh1cmwpOwogICAgIAogICAg
IGlmIChjYWNoZSgpLT5kaXNhYmxlZCgpKSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDYWNo
ZWRSZXNvdXJjZSo+OjppdGVyYXRvciBpdCA9IG1fZG9jUmVzb3VyY2VzLmZpbmQoZnVsbFVSTC5z
dHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEyICsyOCw5IEBACiAKICNpbmNsdWRlICJDaGFyYWN0ZXJO
YW1lcy5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5o
IgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIkZUUERpcmVjdG9yeVBhcnNlci5oIgpAQCAtNDEs
MTIgKzM4LDYgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKLQotLy8g
T24gV2luLCB0aGUgdGhyZWFkc2FmZSAqX3IgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZ290dGVuIGZy
b20gcHRocmVhZHMuIAotI2lmIENPTVBJTEVSKE1TVkMpICYmIFVTRShQVEhSRUFEUykKLSNpbmNs
dWRlIDxwdGhyZWFkLmg+Ci0jZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFE
YXRlVGltZT4KQEAgLTYwLDcgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKICAg
ICAKIGNsYXNzIEZUUERpcmVjdG9yeVRva2VuaXplciA6IHB1YmxpYyBIVE1MVG9rZW5pemVyIHsK
IHB1YmxpYzoKLSAgICBGVFBEaXJlY3RvcnlUb2tlbml6ZXIoSFRNTERvY3VtZW50KiBkb2MpOwor
ICAgIEZUUERpcmVjdG9yeVRva2VuaXplcihIVE1MRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEpOwogICAg
IHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKQEAgLTE0OSw3ICsxNDAsNyBAQCBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IEZUUERpcmVjdG9yeVRva2VuaXplCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAg
ICAKLSAgICBTdHJpbmcgZnVsbFVSTCA9IG1fZG9jLT5iYXNlVVJMKCk7CisgICAgU3RyaW5nIGZ1
bGxVUkwgPSBtX2RvYy0+YmFzZVVSTCgpLnN0cmluZygpOwogICAgIGlmIChmdWxsVVJMW2Z1bGxV
UkwubGVuZ3RoKCkgLSAxXSA9PSAnLycpCiAgICAgICAgIGZ1bGxVUkwuYXBwZW5kKGZpbGVuYW1l
KTsKICAgICBlbHNlCkBAIC0zMDcsMTAgKzI5OCw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5VG9rZW5p
emVyOjpwYXJzZUFuZEFwcGUKIHsKICAgICBMaXN0UmVzdWx0IHJlc3VsdDsKIAotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgZGVwU3RyaW5nID0gaW5wdXRMaW5lLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAg
ICBjb25zdCBjaGFyKiBsaW5lID0gZGVwU3RyaW5nLmFzY2lpKCk7Ci0gICAgCi0gICAgRlRQRW50
cnlUeXBlIHR5cGVSZXN1bHQgPSBwYXJzZU9uZUZUUExpbmUobGluZSwgbV9saXN0U3RhdGUsIHJl
c3VsdCk7CisgICAgRlRQRW50cnlUeXBlIHR5cGVSZXN1bHQgPSBwYXJzZU9uZUZUUExpbmUoaW5w
dXRMaW5lLmxhdGluMSgpLmRhdGEoKSwgbV9saXN0U3RhdGUsIHJlc3VsdCk7CiAgICAgCiAgICAg
Ly8gRlRQTWlzY0VudHJ5IGlzIGEgY29tbWVudCBvciB1c2FnZSBzdGF0aXN0aWMgd2hpY2ggd2Ug
ZG9uJ3QgY2FyZSBhYm91dCwgYW5kIGp1bmsgaXMgaW52YWxpZCBkYXRhIC0gYmFpbCBpbiB0aGVz
ZSAyIGNhc2VzCiAgICAgaWYgKHR5cGVSZXN1bHQgPT0gRlRQTWlzY0VudHJ5IHx8IHR5cGVSZXN1
bHQgPT0gRlRQSnVua0VudHJ5KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24g
MzAxNzIpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
VHJvbGx0ZWNoIEFTQQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEyLDkgKzQxMiw5IEBAIGJvb2wg
RnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFtZShIVE1MRnJhbWUKICAgICAvLyBTdXBwb3J0IGZvciA8
ZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnN0cmluZyI+CiAgICAgS1VSTCBzY3JpcHRVUkw7CiAgICAg
S1VSTCB1cmw7Ci0gICAgaWYgKHVybFN0cmluZy5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZh
bHNlKSkgewotICAgICAgICBzY3JpcHRVUkwgPSB1cmxTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygp
OwotICAgICAgICB1cmwgPSAiYWJvdXQ6YmxhbmsiOworICAgIGlmIChwcm90b2NvbElzKHVybFN0
cmluZywgImphdmFzY3JpcHQiKSkgeworICAgICAgICBzY3JpcHRVUkwgPSBLVVJMKHVybFN0cmlu
Zyk7CisgICAgICAgIHVybCA9IGJsYW5rVVJMKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHVybCA9
IGNvbXBsZXRlVVJMKHVybFN0cmluZyk7CiAKQEAgLTQ3Miw3ICs0NzIsNyBAQCBGcmFtZSogRnJh
bWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJhCiAgICAgLy8gRklYTUU6IEluIHRoaXMgY2Fz
ZSB0aGUgRnJhbWUgd2lsbCBoYXZlIGZpbmlzaGVkIGxvYWRpbmcgYmVmb3JlIAogICAgIC8vIGl0
J3MgYmVpbmcgYWRkZWQgdG8gdGhlIGNoaWxkIGxpc3QuIEl0IHdvdWxkIGJlIGEgZ29vZCBpZGVh
IHRvCiAgICAgLy8gY3JlYXRlIHRoZSBjaGlsZCBmaXJzdCwgdGhlbiBpbnZva2UgdGhlIGxvYWRl
ciBzZXBhcmF0ZWx5LgotICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8IHVybCA9PSAiYWJvdXQ6Ymxh
bmsiKSB7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgdXJsID09IGJsYW5rVVJMKCkpIHsKICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZWQoKTsKICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5jaGVja0NvbXBsZXRlZCgpOwogICAgIH0KQEAgLTUwMSw4ICs1MDEsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqCiAgICAgaWYgKHUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybFN0cmluZyA9IHUuZGVw
cmVjYXRlZFN0cmluZygpOwotICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiamF2YXNjcmlw
dDoiLCBmYWxzZSkpIHsKKyAgICBpZiAodS5wcm90b2NvbElzKCJqYXZhc2NyaXB0IikpIHsKICAg
ICAgICAgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9uID0gdHJ1ZTsKICAgICAgICAg
ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTCh1LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBtX2lzRXhl
Y3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24gPSBmYWxzZTsKQEAgLTUzMiwxMSArNTMxLDExIEBA
IHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhcioKICAgICAgICAgU3RyaW5n
IHF1ZXJ5ID0gdS5xdWVyeSgpOwogICAgICAgICBpZiAoIXF1ZXJ5LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHF1ZXJ5LmFwcGVuZCgnJicpOwotICAgICAgICB1LnNldFF1ZXJ5KChxdWVyeSArIGJv
ZHkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHUuc2V0UXVlcnkocXVlcnkgKyBib2R5
KTsKICAgICB9CiAKICAgICBpZiAoc3RyY21wKGFjdGlvbiwgIkdFVCIpID09IDApIHsKLSAgICAg
ICAgdS5zZXRRdWVyeShmb3JtRGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkuZGVwcmVjYXRlZFN0cmlu
ZygpKTsKKyAgICAgICAgdS5zZXRRdWVyeShmb3JtRGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghaXNNYWlsdG9Gb3JtKQogICAgICAgICAgICAgZnJh
bWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KGZvcm1EYXRhLmdldCgpKTsK
QEAgLTY0OSwxNiArNjQ4LDE2IEBAIEtVUkwgRnJhbWVMb2FkZXI6Omljb25VUkwoKQogewogICAg
IC8vIElmIHRoaXMgaXNuJ3QgYSB0b3AgbGV2ZWwgZnJhbWUsIHJldHVybiBub3RoaW5nCiAgICAg
aWYgKG1fZnJhbWUtPnRyZWUoKSAmJiBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gS1VSTCgpOworCiAgICAgLy8g
SWYgd2UgaGF2ZSBhbiBpY29uVVJMIGZyb20gYSBMaW5rIGVsZW1lbnQsIHJldHVybiB0aGF0CiAg
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmljb25V
UkwoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5pY29u
VVJMKCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIEtVUkwo
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNvblVSTCgpKTsKKwogICAgIC8vIERvbid0IHJldHVybiBh
IGZhdmljb24gaWNvblVSTCB1bmxlc3Mgd2UncmUgaHR0cCBvciBodHRwcwotICAgIGlmIChtX1VS
TC5wcm90b2NvbCgpICE9ICJodHRwIiAmJiBtX1VSTC5wcm90b2NvbCgpICE9ICJodHRwcyIpCi0g
ICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgCisgICAgaWYgKCFtX1VSTC5wcm90b2NvbElzKCJo
dHRwIikgJiYgIW1fVVJMLnByb3RvY29sSXMoImh0dHBzIikpCisgICAgICAgIHJldHVybiBLVVJM
KCk7CisKICAgICBLVVJMIHVybDsKICAgICB1cmwuc2V0UHJvdG9jb2wobV9VUkwucHJvdG9jb2wo
KSk7CiAgICAgdXJsLnNldEhvc3QobV9VUkwuaG9zdCgpKTsKQEAgLTY4Nyw3ICs2ODYsNyBAQCBi
b29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKGNvbnN0IEtVUkwmCiAgICAgbV9mcmFtZS0+c2V0
SlNEZWZhdWx0U3RhdHVzQmFyVGV4dChTdHJpbmcoKSk7CiAKICAgICBtX1VSTCA9IHVybDsKLSAg
ICBpZiAobV9VUkwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJodHRwIikgJiYgIW1fVVJMLmhvc3Qo
KS5pc0VtcHR5KCkgJiYgbV9VUkwucGF0aCgpLmlzRW1wdHkoKSkKKyAgICBpZiAoKG1fVVJMLnBy
b3RvY29sSXMoImh0dHAiKSB8fCBtX1VSTC5wcm90b2NvbElzKCJodHRwcyIpKSAmJiAhbV9VUkwu
aG9zdCgpLmlzRW1wdHkoKSAmJiBtX1VSTC5wYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICBtX1VS
TC5zZXRQYXRoKCIvIik7CiAgICAgbV93b3JraW5nVVJMID0gbV9VUkw7CiAKQEAgLTcwOSwxNiAr
NzA4LDE2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpZEV4cGxpY2l0T3BlbigpCiAgICAgLy8gQ2Fu
Y2VsbGluZyByZWRpcmVjdGlvbiBoZXJlIHdvcmtzIGZvciBhbGwgY2FzZXMgYmVjYXVzZSBkb2N1
bWVudC5vcGVuIAogICAgIC8vIGltcGxpY2l0bHkgcHJlY2VkZXMgZG9jdW1lbnQud3JpdGUuCiAg
ICAgY2FuY2VsUmVkaXJlY3Rpb24oKTsgCi0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpICE9ICJhYm91dDpibGFuayIpCisgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
ICE9IGJsYW5rVVJMKCkpCiAgICAgICAgIG1fVVJMID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwoY29uc3Qg
S1VSTCYgdXJsLCBib29sIHVzZXJHZXN0dXJlLCBib29sIHJlcGxhY2VEb2N1bWVudCkKIHsKLSAg
ICBpZiAoIXVybC5kZXByZWNhdGVkU3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBm
YWxzZSkpCisgICAgaWYgKCF1cmwucHJvdG9jb2xJcygiamF2YXNjcmlwdCIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgc2NyaXB0ID0gS1VSTDo6ZGVjb2RlX3N0cmluZyh1
cmwuZGVwcmVjYXRlZFN0cmluZygpLm1pZChzdHJsZW4oImphdmFzY3JpcHQ6IikpKTsKKyAgICBT
dHJpbmcgc2NyaXB0ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJz
dHJpbmcoc3RybGVuKCJqYXZhc2NyaXB0OiIpKSk7CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gZXhl
Y3V0ZVNjcmlwdChzY3JpcHQsIHVzZXJHZXN0dXJlKTsKIAogICAgIFN0cmluZyBzY3JpcHRSZXN1
bHQ7CkBAIC04NTcsNyArODU2LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERh
dGEoKQogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICB1cmwgPSBtX1VSTC5zdHJpbmco
KTsKICAgICBlbHNlCi0gICAgICAgIHVybCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKHVybCk7CisgICAgICAgIHVybCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHVybCkuc3RyaW5nKCk7CiAKICAgICBzY2hlZHVsZUhUVFBSZWRpcmVjdGlvbihkZWxheSwgdXJs
KTsKIH0KQEAgLTg5NSwyMyArODk0LDIyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmJlZ2luKGNvbnN0
IEtVUkwmIHVybCwKICAgICBtX2lzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50ID0gbV9j
cmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50OwogCiAgICAgS1VSTCByZWYodXJsKTsKLSAgICBy
ZWYuc2V0VXNlcihEZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIHJlZi5zZXRQYXNzKERlcHJlY2F0
ZWRTdHJpbmcoKSk7Ci0gICAgcmVmLnNldFJlZihEZXByZWNhdGVkU3RyaW5nKCkpOworICAgIHJl
Zi5zZXRVc2VyKFN0cmluZygpKTsKKyAgICByZWYuc2V0UGFzcyhTdHJpbmcoKSk7CisgICAgcmVm
LnNldFJlZihTdHJpbmcoKSk7CiAgICAgbV9vdXRnb2luZ1JlZmVycmVyID0gcmVmLnN0cmluZygp
OwogICAgIG1fVVJMID0gdXJsOwotICAgIEtVUkwgYmFzZXVybDsKLQorICAgIEtVUkwgYmFzZVVS
TDsKICAgICBpZiAoIW1fVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgYmFzZXVybCA9IG1fVVJMOwor
ICAgICAgICBiYXNlVVJMID0gbV9VUkw7CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50
ID0gRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCktPmNyZWF0ZURvY3VtZW50KG1fcmVzcG9u
c2VNSU1FVHlwZSwgbV9mcmFtZSwgbV9mcmFtZS0+aW5WaWV3U291cmNlTW9kZSgpKTsKICAgICBt
X2ZyYW1lLT5zZXREb2N1bWVudChkb2N1bWVudCk7CiAKLSAgICBkb2N1bWVudC0+c2V0VVJMKG1f
VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgZG9jdW1lbnQtPnNldFVSTChtX1VSTCk7CiAg
ICAgLy8gV2UgcHJlZmVyIG1fYmFzZVVSTCBvdmVyIG1fVVJMIGJlY2F1c2UgbV9VUkwgY2hhbmdl
cyB3aGVuIHdlIGFyZQogICAgIC8vIGFib3V0IHRvIGxvYWQgYSBuZXcgcGFnZS4KLSAgICBkb2N1
bWVudC0+c2V0QmFzZVVSTChiYXNldXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgZG9jdW1l
bnQtPnNldEJhc2VVUkwoYmFzZVVSTCk7CiAgICAgaWYgKG1fZGVjb2RlcikKICAgICAgICAgZG9j
dW1lbnQtPnNldERlY29kZXIobV9kZWNvZGVyLmdldCgpKTsKICAgICBpZiAoZm9yY2VkU2VjdXJp
dHlPcmlnaW4pCkBAIC0xMTgzLDIxICsxMTgxLDE5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlc3Rv
cmVEb2N1bWVudFN0YXRlKCkKIHZvaWQgRnJhbWVMb2FkZXI6OmdvdG9BbmNob3IoKQogewogICAg
IC8vIElmIG91ciBVUkwgaGFzIG5vIHJlZiwgdGhlbiB3ZSBoYXZlIG5vIHBsYWNlIHdlIG5lZWQg
dG8ganVtcCB0by4KLSAgICAvLyBPVE9IIGlmIGNzcyB0YXJnZXQgd2FzIHNldCBwcmV2aW91c2x5
LCB3ZSB3YW50IHRvIHNldCBpdCB0byAwLCByZWNhbGMKKyAgICAvLyBPVE9IIElmIENTUyB0YXJn
ZXQgd2FzIHNldCBwcmV2aW91c2x5LCB3ZSB3YW50IHRvIHNldCBpdCB0byAwLCByZWNhbGMKICAg
ICAvLyBhbmQgcG9zc2libHkgcmVwYWludCBiZWNhdXNlIDp0YXJnZXQgcHNldWRvIGNsYXNzIG1h
eSBoYXZlIGJlZW4KLSAgICAvLyBzZXQoU2VlIGJ1ZyAxMTMyMSkKLSAgICBpZiAoIW1fVVJMLmhh
c1JlZigpICYmCi0gICAgICAgICEobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5nZXRDU1NUYXJnZXQoKSkpCisgICAgLy8gc2V0IChzZWUgYnVnIDExMzIxKS4KKyAg
ICBpZiAoIW1fVVJMLmhhc1JlZigpICYmICEobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5nZXRDU1NUYXJnZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERl
cHJlY2F0ZWRTdHJpbmcgcmVmID0gbV9VUkwuZW5jb2RlZEh0bWxSZWYoKTsKLSAgICBpZiAoIWdv
dG9BbmNob3IocmVmKSkgewotICAgICAgICAvLyBDYW4ndCB1c2UgaHRtbFJlZigpIGhlcmUgYmVj
YXVzZSBpdCBkb2Vzbid0IGtub3cgd2hpY2ggZW5jb2RpbmcgdG8gdXNlIHRvIGRlY29kZS4KLSAg
ICAgICAgLy8gRGVjb2RpbmcgaGVyZSBoYXMgdG8gbWF0Y2ggZW5jb2RpbmcgaW4gY29tcGxldGVV
UkwsIHdoaWNoIG1lYW5zIGl0IGhhcyB0byB1c2UgdGhlCi0gICAgICAgIC8vIHBhZ2UncyBlbmNv
ZGluZyByYXRoZXIgdGhhbiBVVEYtOC4KLSAgICAgICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAg
ICAgIGdvdG9BbmNob3IoS1VSTDo6ZGVjb2RlX3N0cmluZyhyZWYsIG1fZGVjb2Rlci0+ZW5jb2Rp
bmcoKSkpOwotICAgIH0KKyAgICBTdHJpbmcgcmVmID0gbV9VUkwucmVmKCk7CisgICAgaWYgKGdv
dG9BbmNob3IocmVmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHJ5IGFnYWluIGFmdGVy
IGRlY29kaW5nIHRoZSByZWYsIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIGVuY29kaW5nLgorICAg
IGlmIChtX2RlY29kZXIpCisgICAgICAgIGdvdG9BbmNob3IoZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKHJlZiwgbV9kZWNvZGVyLT5lbmNvZGluZygpKSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6
OmZpbmlzaGVkUGFyc2luZygpCkBAIC0xMzI0LDcgKzEzMjAsNyBAQCBTdHJpbmcgRnJhbWVMb2Fk
ZXI6OmJhc2VUYXJnZXQoKSBjb25zdAogS1VSTCBGcmFtZUxvYWRlcjo6Y29tcGxldGVVUkwoY29u
c3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAg
IHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJs
KTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVIVFRQUmVkaXJlY3Rpb24oZG91Ymxl
IGRlbGF5LCBjb25zdCBTdHJpbmcmIHVybCkKQEAgLTEzNDEsOCArMTMzNyw4IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UKIHsgICAgCiAgICAgLy8gSWYgdGhlIFVS
TCB3ZSdyZSBnb2luZyB0byBuYXZpZ2F0ZSB0byBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBv
bmUsIGV4Y2VwdCBmb3IgdGhlCiAgICAgLy8gZnJhZ21lbnQgcGFydCwgd2UgZG9uJ3QgbmVlZCB0
byBzY2hlZHVsZSB0aGUgbG9jYXRpb24gY2hhbmdlLgotICAgIEtVUkwgdSh1cmwuZGVwcmVjYXRl
ZFN0cmluZygpKTsKLSAgICBpZiAodS5oYXNSZWYoKSAmJiBlcXVhbElnbm9yaW5nUmVmKG1fVVJM
LCB1KSkgeworICAgIEtVUkwgcGFyc2VkVVJMKHVybCk7CisgICAgaWYgKHBhcnNlZFVSTC5oYXNS
ZWYoKSAmJiBlcXVhbElnbm9yaW5nUmVmKG1fVVJMLCBwYXJzZWRVUkwpKSB7CiAgICAgICAgIGNo
YW5nZUxvY2F0aW9uKHVybCwgcmVmZXJyZXIsIGxvY2tIaXN0b3J5LCB3YXNVc2VyR2VzdHVyZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzY4LDcgKzE3NjQsNyBAQCBib29sIEZyYW1l
TG9hZGVyOjpjYW5DYWNoZVBhZ2UoKQogICAgICAgICAvLyB0aGV5IHdvdWxkIG5lZWQgdG8gYmUg
ZGVzdHJveWVkIGFuZCB0aGVuIHJlY3JlYXRlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0aGF0IHdl
IGNhbiByZWNyZWF0ZQogICAgICAgICAvLyB0aGUgcmlnaHQgTlBPYmplY3RzLiBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzUxOTcwNDE+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAmJiAhbV9j
b250YWluc1BsdWdJbnMKLSAgICAgICAgJiYgIW1fVVJMLnByb3RvY29sKCkuc3RhcnRzV2l0aCgi
aHR0cHMiKQorICAgICAgICAmJiAhbV9VUkwucHJvdG9jb2xJcygiaHR0cHMiKQogICAgICAgICAm
JiBtX2ZyYW1lLT5kb2N1bWVudCgpCiAgICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5h
cHBsZXRzKCktPmxlbmd0aCgpCiAgICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNX
aW5kb3dFdmVudExpc3RlbmVyKHVubG9hZEV2ZW50KQpAQCAtMTc5MywxNSArMTc4OSwxNSBAQCB2
b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVQb2xpY3lCYXNlVVJMKCkKICAgICBpZiAobV9mcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSAmJiBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT5kb2N1bWVudCgp
KQogICAgICAgICBzZXRQb2xpY3lCYXNlVVJMKG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCktPmRv
Y3VtZW50KCktPnBvbGljeUJhc2VVUkwoKSk7CiAgICAgZWxzZQotICAgICAgICBzZXRQb2xpY3lC
YXNlVVJMKG1fVVJMLnN0cmluZygpKTsKKyAgICAgICAgc2V0UG9saWN5QmFzZVVSTChtX1VSTCk7
CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OnNldFBvbGljeUJhc2VVUkwoY29uc3QgU3RyaW5nJiBz
KQordm9pZCBGcmFtZUxvYWRlcjo6c2V0UG9saWN5QmFzZVVSTChjb25zdCBLVVJMJiB1cmwpCiB7
CiAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPnNldFBvbGljeUJhc2VVUkwocyk7CisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNl
dFBvbGljeUJhc2VVUkwodXJsKTsKICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRy
ZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2li
bGluZygpKQotICAgICAgICBjaGlsZC0+bG9hZGVyKCktPnNldFBvbGljeUJhc2VVUkwocyk7Cisg
ICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+c2V0UG9saWN5QmFzZVVSTCh1cmwpOwogfQogCiAvLyBU
aGlzIGRvZXMgdGhlIHNhbWUga2luZCBvZiB3b3JrIHRoYXQgRnJhbWVMb2FkZXI6Om9wZW5VUkwg
ZG9lcywgZXhjZXB0IGl0IHJlbGllcyBvbiB0aGUgZmFjdApAQCAtMTg0NSw3ICsxODQxLDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6c3RhcnRSZWRpcmVjdGlvblRpbWVyKAogICAgICAgICBjYXNlIFNj
aGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKICAgICAgICAgY2FzZSBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OmxvY2F0aW9uQ2hhbmdlRHVyaW5nTG9hZDoKLSAgICAgICAgICAgIGNsaWVudFJlZGly
ZWN0ZWQobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSwKKyAg
ICAgICAgICAgIGNsaWVudFJlZGlyZWN0ZWQoS1VSTChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51
cmwpLAogICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAogICAg
ICAgICAgICAgICAgIGN1cnJlbnRUaW1lKCkgKyBtX3JlZGlyZWN0aW9uVGltZXIubmV4dEZpcmVJ
bnRlcnZhbCgpLAogICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tI
aXN0b3J5LApAQCAtMTk0NCw3ICsxOTQwLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZChjb25z
dCBGcmFtZUxvYWRSZQogICAgICAgICByZWZlcnJlciA9IG1fb3V0Z29pbmdSZWZlcnJlcjsKICAK
ICAgICBBU1NFUlQoZnJhbWUoKS0+ZG9jdW1lbnQoKSk7Ci0gICAgaWYgKHVybC5kZXByZWNhdGVk
U3RyaW5nKCkuc3RhcnRzV2l0aCgiZmlsZToiLCBmYWxzZSkpIHsKKyAgICBpZiAodXJsLnByb3Rv
Y29sSXMoImZpbGUiKSkgewogICAgICAgICBpZiAoIWNhbkxvYWQodXJsLCBmcmFtZSgpLT5kb2N1
bWVudCgpKSAmJiAhY2FuTG9hZCh1cmwsIHJlZmVycmVyKSkgewogICAgICAgICAgICAgRnJhbWVM
b2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChtX2ZyYW1lLT5wYWdlKCksIHVybC5zdHJpbmco
KSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMTcwLDggKzIxNjYsOCBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoCiAKIGJvb2wgRnJhbWVMb2FkZXI6OnNob3Vs
ZEhpZGVSZWZlcnJlcihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpCiB7
Ci0gICAgYm9vbCByZWZlcnJlcklzU2VjdXJlVVJMID0gcmVmZXJyZXIuc3RhcnRzV2l0aCgiaHR0
cHM6IiwgZmFsc2UpOwotICAgIGJvb2wgcmVmZXJyZXJJc1dlYlVSTCA9IHJlZmVycmVySXNTZWN1
cmVVUkwgfHwgcmVmZXJyZXIuc3RhcnRzV2l0aCgiaHR0cDoiLCBmYWxzZSk7CisgICAgYm9vbCBy
ZWZlcnJlcklzU2VjdXJlVVJMID0gcHJvdG9jb2xJcyhyZWZlcnJlciwgImh0dHBzIik7CisgICAg
Ym9vbCByZWZlcnJlcklzV2ViVVJMID0gcmVmZXJyZXJJc1NlY3VyZVVSTCB8fCBwcm90b2NvbElz
KHJlZmVycmVyLCAiaHR0cCIpOwogCiAgICAgaWYgKCFyZWZlcnJlcklzV2ViVVJMKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIxNzksNyArMjE3NSw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNo
b3VsZEhpZGVSZWZlcnJlcihjb24KICAgICBpZiAoIXJlZmVycmVySXNTZWN1cmVVUkwpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgVVJMSXNTZWN1cmVVUkwgPSB1cmwuZGVwcmVj
YXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoImh0dHBzOiIsIGZhbHNlKTsKKyAgICBib29sIFVSTElz
U2VjdXJlVVJMID0gdXJsLnByb3RvY29sSXMoImh0dHBzIik7CiAKICAgICByZXR1cm4gIVVSTElz
U2VjdXJlVVJMOwogfQpAQCAtMjM1Niw3ICsyMzUyLDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6c2hv
dWxkQWxsb3dOYXZpZ2F0aW9uKAogICAgICAgICBEb2N1bWVudCogdGFyZ2V0RG9jdW1lbnQgPSB0
YXJnZXRGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgLy8gRklYTUU6IHRoaXMgZXJyb3IgbWVz
c2FnZSBzaG91bGQgY29udGFpbiBtb3JlIHNwZWNpZmljcyBvZiB3aHkgdGhlIG5hdmlnYXRpb24g
Y2hhbmdlIGlzIG5vdCBhbGxvd2VkLgogICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6
Zm9ybWF0KCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGluaXRpYXRlIGEgbmF2aWdhdGlv
biBjaGFuZ2UgZm9yIGZyYW1lIHdpdGggVVJMICVzIGZyb20gZnJhbWUgd2l0aCBVUkwgJXMuXG4i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERvY3VtZW50
LT51cmwoKS51dGY4KCkuZGF0YSgpLCBhY3RpdmVEb2N1bWVudC0+dXJsKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICB0YXJnZXREb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgYWN0aXZlRG9jdW1lbnQtPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAg
ICAgICAgIGlmIChLSlM6OkludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKICAg
ICAgICAgICAgIHByaW50ZigiJXMiLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjU1Niw3
ICsyNTUyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKAogICAg
ICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHVybCA9IHBkbC0+cmVzcG9uc2VV
UkwoKTsKICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB1cmwgPSAiYWJv
dXQ6YmxhbmsiOworICAgICAgICAgICAgdXJsID0gYmxhbmtVUkwoKTsKIAogICAgICAgICBkaWRP
cGVuVVJMKHVybCk7CiAgICAgfQpAQCAtMjc0Niw3ICsyNzQyLDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6b3BlbihDYWNoZWRQYWdlJiBjYWNoZQogCiAgICAgS1VSTCB1cmwgPSBjYWNoZWRQYWdlLnVy
bCgpOwogCi0gICAgaWYgKHVybC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiAhdXJs
Lmhvc3QoKS5pc0VtcHR5KCkgJiYgdXJsLnBhdGgoKS5pc0VtcHR5KCkpCisgICAgaWYgKCh1cmwu
cHJvdG9jb2xJcygiaHR0cCIpIHx8IHVybC5wcm90b2NvbElzKCJodHRwcyIpKSAmJiAhdXJsLmhv
c3QoKS5pc0VtcHR5KCkgJiYgdXJsLnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgIHVybC5zZXRQ
YXRoKCIvIik7CiAgICAgCiAgICAgbV9VUkwgPSB1cmw7CkBAIC0zODI0LDkgKzM4MjAsOSBAQCBQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBGcmFtZUxvYWRlcjo6Y3JlCiAgICAgLy8gTGF0ZXIgd2Ug
bWF5IHdhbnQgdG8gbGVhcm4gdG8gbGl2ZSB3aXRoIG5pbCBmb3IgVVJMLgogICAgIC8vIFNlZSBi
dWcgMzM2ODIzNiBhbmQgcmVsYXRlZCBidWdzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgIGlm
ICh1cmwuaXNFbXB0eSgpKSAKLSAgICAgICAgdXJsID0gS1VSTCgiYWJvdXQ6YmxhbmsiKTsKKyAg
ICAgICAgdXJsID0gYmxhbmtVUkwoKTsKICAgICBpZiAob3JpZ2luYWxVUkwuaXNFbXB0eSgpKQot
ICAgICAgICBvcmlnaW5hbFVSTCA9IEtVUkwoImFib3V0OmJsYW5rIik7CisgICAgICAgIG9yaWdp
bmFsVVJMID0gYmxhbmtVUkwoKTsKICAgICAKICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0g
PSBuZXcgSGlzdG9yeUl0ZW0odXJsLCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKSwgbV9mcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSA/IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCktPnRyZWUoKS0+bmFt
ZSgpIDogIiIsIGRvY0xvYWRlciA/IGRvY0xvYWRlci0+dGl0bGUoKSA6ICIiKTsKICAgICBpdGVt
LT5zZXRPcmlnaW5hbFVSTFN0cmluZyhvcmlnaW5hbFVSTC5zdHJpbmcoKSk7CkBAIC00NTczLDcg
KzQ1NjksNyBAQCBXaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkCiAgICAg
fQogICAgIAogICAgIGlmIChiYXNlVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgYmFzZVVS
TFN0cmluZyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKTsKKyAgICAgICAgYmFzZVVS
TFN0cmluZyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKS5zdHJpbmcoKTsKICAgICBL
VVJMIGJhc2VVUkwgPSBjb21wbGV0ZVVSTChiYXNlVVJMU3RyaW5nKTsKIAogICAgIHJldHVybiBt
X2NsaWVudC0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXplLCBlbGVtZW50LCBiYXNlVVJMLCBw
YXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CkBAIC00NzkwLDggKzQ3ODYsOCBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpzd2l0Y2hPdXRMb3dCYW5kd2lkdGhECiAgICAgICAgICAgICBSZWZQdHI8RG9jdW1l
bnQ+IG5ld0RvYyA9IERPTUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgpLT4KICAgICAgICAgICAg
ICAgICBjcmVhdGVEb2N1bWVudChtX3Jlc3BvbnNlTUlNRVR5cGUsIG1fZnJhbWUsIG1fZnJhbWUt
PmluVmlld1NvdXJjZU1vZGUoKSk7CiAgICAgICAgICAgICBtX2ZyYW1lLT5zZXREb2N1bWVudChu
ZXdEb2MpOwotICAgICAgICAgICAgbmV3RG9jLT5zZXRVUkwobV9VUkwuZGVwcmVjYXRlZFN0cmlu
ZygpKTsKLSAgICAgICAgICAgIG5ld0RvYy0+c2V0QmFzZVVSTChtX1VSTC5kZXByZWNhdGVkU3Ry
aW5nKCkpOworICAgICAgICAgICAgbmV3RG9jLT5zZXRVUkwobV9VUkwpOworICAgICAgICAgICAg
bmV3RG9jLT5zZXRCYXNlVVJMKG1fVVJMKTsKICAgICAgICAgICAgIGlmIChtX2RlY29kZXIpCiAg
ICAgICAgICAgICAgICAgbmV3RG9jLT5zZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7CiAgICAg
ICAgICAgICByZXN0b3JlRG9jdW1lbnRTdGF0ZSgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShy
ZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3OCw3ICs0NzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgcmVjZWl2ZWRGaXJzdERhdGEoKTsKIAogICAgICAgICB2b2lkIHVwZGF0ZVBvbGljeUJhc2VV
UkwoKTsKLSAgICAgICAgdm9pZCBzZXRQb2xpY3lCYXNlVVJMKGNvbnN0IFN0cmluZyYpOworICAg
ICAgICB2b2lkIHNldFBvbGljeUJhc2VVUkwoY29uc3QgS1VSTCYpOwogCiAgICAgICAgIC8vIEFs
c28gbm90IGNvb2wuCiAgICAgICAgIHZvaWQgc3RvcExvYWRpbmdTdWJmcmFtZXMoKTsKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvbG9h
ZGVyL0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjcsNyAr
MTY3LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpjcmVhdGVEb2N1bWVudFN0cnVjdAogICAgIAog
ICAgIGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIi13ZWJraXQtdXNlci1z
ZWxlY3Q6IG5vbmUiKTsgICAgICAgIAogICAgIGltYWdlRWxlbWVudC0+c2V0TG9hZE1hbnVhbGx5
KHRydWUpOwotICAgIGltYWdlRWxlbWVudC0+c2V0U3JjKHVybCgpKTsKKyAgICBpbWFnZUVsZW1l
bnQtPnNldFNyYyh1cmwoKS5zdHJpbmcoKSk7CiAgICAgCiAgICAgYm9keS0+YXBwZW5kQ2hpbGQo
aW1hZ2VFbGVtZW50LCBlYyk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgUGx1Z2luVG9rZW5p
emVyOjpjcmVhdGVEb2N1bWVudFN0cnUKICAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRl
KGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAgCiAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJp
YnV0ZShuYW1lQXR0ciwgInBsdWdpbiIpOwotICAgIG1fZW1iZWRFbGVtZW50LT5zZXRTcmMobV9k
b2MtPnVybCgpKTsKKyAgICBtX2VtYmVkRWxlbWVudC0+c2V0U3JjKG1fZG9jLT51cmwoKS5zdHJp
bmcoKSk7CiAgICAgbV9lbWJlZEVsZW1lbnQtPnNldFR5cGUobV9kb2MtPmZyYW1lKCktPmxvYWRl
cigpLT5yZXNwb25zZU1JTUVUeXBlKCkpOwogICAgIAogICAgIGJvZHktPmFwcGVuZENoaWxkKGVt
YmVkRWxlbWVudCwgZWMpOyAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2aXNpb24gMzAxNzIpCisr
KyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBA
QAogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQog
ICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNv
bSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTc0LDEzICs3NCwxMCBAQCB2b2lkIExvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVz
dHMoKQogICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQWNjZXB0KHJlcS0+Y2FjaGVkUmVzb3Vy
Y2UoKS0+YWNjZXB0KCkpOwogCiAgICAgICAgIEtVUkwgciA9IGRsLT5kb2MoKS0+dXJsKCk7Ci0g
ICAgICAgIGlmIChyLnByb3RvY29sKCkuc3RhcnRzV2l0aCgiaHR0cCIpICYmIHIucGF0aCgpLmlz
RW1wdHkoKSkKKyAgICAgICAgaWYgKChyLnByb3RvY29sSXMoImh0dHAiKSB8fCByLnByb3RvY29s
SXMoImh0dHBzIikpICYmIHIucGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHIuc2V0UGF0
aCgiLyIpOwogICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihyLnN0cmluZygpKTsKLSAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZyBkb21haW4gPSByLmhvc3QoKTsKLSAgICAgICAgaWYgKGRs
LT5kb2MoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvbWFpbiA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KGRsLT5kb2MoKSktPmRvbWFpbigpLmRlcHJlY2F0ZWRTdHJpbmco
KTsKLSAgICAgICAgCisKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIg
PSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRsLT5kb2MoKS0+ZnJhbWUoKSwKICAgICAgICAg
ICAgIHRoaXMsIHJlcXVlc3QsIHJlcS0+c2hvdWxkU2tpcENhbkxvYWRDaGVjaygpLCByZXEtPnNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsMTMgKzIxOCwxMSBAQCB2b2lkIElj
b25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQogSW1hZ2UqIEljb25EYXRhYmFzZTo6aWNvbkZv
clBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMT3JpZ2luYWwsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgY2FjaGUpCiB7ICAgCiAgICAgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpOwotICAg
IAotICAgIEFTU0VSVCghcGFnZVVSTE9yaWdpbmFsLmlzTnVsbCgpKTsKIAotICAgIC8vIHBhZ2VV
UkxPcmlnaW5hbCBjYW4gbm90IGJlIHN0b3JlZCB3aXRob3V0IGJlaW5nIGRlZXAgY29waWVkIGZp
cnN0LiAgCisgICAgLy8gcGFnZVVSTE9yaWdpbmFsIGNhbm5vdCBiZSBzdG9yZWQgd2l0aG91dCBi
ZWluZyBkZWVwIGNvcGllZCBmaXJzdC4gIAogICAgIC8vIFdlIHNob3VsZCBnbyBvdXIgb2Ygb3Vy
IHdheSB0byBvbmx5IGNvcHkgaXQgaWYgd2UgaGF2ZSB0byBzdG9yZSBpdAogICAgIAotICAgIGlm
ICghaXNPcGVuKCkpCisgICAgaWYgKCFpc09wZW4oKSB8fCBwYWdlVVJMT3JpZ2luYWwuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdEljb24oc2l6ZSk7CiAKICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV91cmxBbmRJY29uTG9jayk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0lj
b25Mb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIu
aAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxNSArMjYsMTYgQEAKICNpZm5kZWYgSWNvbkxv
YWRlcl9oCiAjZGVmaW5lIEljb25Mb2FkZXJfaAogCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1
ZGUgIlN1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CitjbGFzcyBLVVJMOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwogCiBjbGFzcyBJY29uTG9hZGVyIDogcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVu
dCwgTm9uY29weWFibGUgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0
cmFzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFz
Lm0JKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0
cmFzLm0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yMTQsNyArMjE0LDcgQEAgTlNTdHJpbmcgKnN1Z2dlc3RlZEZp
bGVuYW1lV2l0aE1JTUVUeXBlKAogCiAgICAgaWYgKFtmaWxlbmFtZSBsZW5ndGhdID09IDAgfHwg
W2xhc3RQYXRoQ29tcG9uZW50IGlzRXF1YWxUb1N0cmluZzpAIi8iXSkgewogICAgICAgICAvLyBs
YXN0UGF0aENvbXBvbmVudCBpcyBubyBnb29kLCB0cnkgdGhlIGhvc3QuCi0gICAgICAgIE5TU3Ry
aW5nICpob3N0ID0gKE5TU3RyaW5nICopKEtVUkwodXJsKS5ob3N0KCkpOworICAgICAgICBOU1N0
cmluZyAqaG9zdCA9IEtVUkwodXJsKS5ob3N0KCk7CiAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5h
bWVCeUZpeGluZ0lsbGVnYWxDaGFyYWN0ZXJzKGhvc3QpOwogICAgICAgICBpZiAoW2ZpbGVuYW1l
IGxlbmd0aF0gPT0gMCkgewogICAgICAgICAgICAgLy8gQ2FuJ3QgbWFrZSBhIGZpbGVuYW1lIHVz
aW5nIHRoaXMgVVJMLCB1c2UgInVua25vd24iLgpJbmRleDogV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNs
dWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpJbmRl
eDogV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDMwMTcyKQorKysgV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsMjEgKzI4LDExIEBACiAKICNpbmNsdWRlICJCbG9ja0V4Y2VwdGlvbnMuaCIK
ICNpbmNsdWRlICJDbGlwYm9hcmRNYWMuaCIKLSNpbmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVz
dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKQEAgLTE0OCw3ICsxMzgsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6bmVlZHNLZXli
b2FyZEV2ZW50RGlzCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJTUyB2aWV3IG5l
ZWRzIGFycm93IGtleSBrZXlwcmVzcyBldmVudHMuCi0gICAgaWYgKGlzU2FmYXJpICYmIGRvY3Vt
ZW50LT51cmwoKS5zdGFydHNXaXRoKCJmZWVkOiIsIGZhbHNlKSB8fCBkb2N1bWVudC0+dXJsKCku
c3RhcnRzV2l0aCgiZmVlZHM6IiwgZmFsc2UpKQorICAgIGlmIChpc1NhZmFyaSAmJiBkb2N1bWVu
dC0+dXJsKCkucHJvdG9jb2xJcygiZmVlZCIpIHx8IGRvY3VtZW50LT51cmwoKS5wcm90b2NvbElz
KCJmZWVkcyIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX2ZyYW1lLT5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGluZ3MpCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3Jl
L3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAq
IENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQog
ICoKQEAgLTYyNywxMiArNjI3LDExIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVt
ZW50RnJvbUQKIAogLSAoTlNVUkwgKilVUkxXaXRoQXR0cmlidXRlU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZwogewotICAgIERvY3VtZW50ICpkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAg
IERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIC8vIEZJWE1FOiBpcyBwYXJzZVVSTCBhcHByb3ByaWF0ZSBo
ZXJlPwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVsID0gcGFyc2VVUkwoc3RyaW5nKS5kZXByZWNh
dGVkU3RyaW5nKCk7Ci0gICAgcmV0dXJuIEtVUkwoZG9jLT5jb21wbGV0ZVVSTChyZWwpKS5nZXRO
U1VSTCgpOworICAgIHJldHVybiBkb2MtPmNvbXBsZXRlVVJMKHBhcnNlVVJMKHN0cmluZykpOwog
fQogCiAtIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09M
KWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFn
IHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbgpAQCAtNzQ3LDcgKzc0Niw3
IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJvbUQKIAogLSAoTlNVUkwg
KiliYXNlVVJMCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTCht
X2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkpLmdldE5TVVJMKCk7CisgICAgcmV0dXJuIG1f
ZnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilzdHJpbmdX
aXRoRGF0YTooTlNEYXRhICopZGF0YQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiAzMDE3MikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4
LDggQEAKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiAjaWYgVVNFKElDVV9VTklDT0RFKQogI2lu
Y2x1ZGUgPHVuaWNvZGUvdWlkbmEuaD4KICNlbGlmIFVTRShRVDRfVU5JQ09ERSkKQEAgLTQyLDYg
KzQxLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
dHlwZWRlZiBWZWN0b3I8Y2hhciwgNTEyPiBDaGFyQnVmZmVyOwordHlwZWRlZiBWZWN0b3I8VUNo
YXIsIDUxMj4gVUNoYXJCdWZmZXI7CisKKy8vIEZJWE1FOiBUaGlzIGZpbGUgbWFrZXMgdG9vIG11
Y2ggdXNlIG9mIHRoZSArIG9wZXJhdG9yIG9uIFN0cmluZy4KKy8vIFdlIGVpdGhlciBoYXZlIHRv
IG9wdGltaXplIHRoYXQgb3BlcmF0b3Igc28gaXQgZG9lc24ndCBpbnZvbHZlCisvLyBzbyBtYW55
IGFsbG9jYXRpb25zLCBvciBjaGFuZ2UgdGhpcyB0byB1c2UgVmVjdG9yPFVDaGFyPiBpbnN0ZWFk
LgorCiBlbnVtIFVSTENoYXJhY3RlckNsYXNzZXMgewogICAgIC8vIGFscGhhIAogICAgIFNjaGVt
ZUZpcnN0Q2hhciA9IDEgPDwgMCwKQEAgLTY2LDU2ICs3Miw1MiBAQCBlbnVtIFVSTENoYXJhY3Rl
ckNsYXNzZXMgewogICAgIC8vICIjIiB8ICI/IiB8ICIvIiB8IG51bAogICAgIFBhdGhTZWdtZW50
RW5kQ2hhciA9IDEgPDwgNSwKIAotICAgIC8vIGRpZ2l0IHwgIkEiIHwgIkIiIHwgIkMiIHwgIkQi
IHwgIkUiIHwgIkYiIHwgImEiIHwgImIiIHwgImMiIHwgImQiIHwgImUiIHwgImYiCi0gICAgSGV4
RGlnaXRDaGFyID0gMSA8PCA2LAotCiAgICAgLy8gbm90IGFsbG93ZWQgaW4gcGF0aAotICAgIEJh
ZENoYXIgPSAxIDw8IDcKLQorICAgIEJhZENoYXIgPSAxIDw8IDYKIH07CiAKIHN0YXRpYyBjb25z
dCBjaGFyIGhleERpZ2l0c1sxN10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CiAKIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlckNsYXNzVGFibGVbMjU2XSA9IHsKICAgICAvKiAwIG51
bCAqLyBQYXRoU2VnbWVudEVuZENoYXIsICAgIC8qIDEgc29oICovIEJhZENoYXIsCi0gICAgLyog
MiBzdHggKi8gQmFkQ2hhciwgICAgLyogMyBldHggKi8gQmFkQ2hhciwgICAgCisgICAgLyogMiBz
dHggKi8gQmFkQ2hhciwgICAgLyogMyBldHggKi8gQmFkQ2hhciwKICAgICAvKiA0IGVvdCAqLyBC
YWRDaGFyLCAgICAvKiA1IGVucSAqLyBCYWRDaGFyLCAgICAvKiA2IGFjayAqLyBCYWRDaGFyLCAg
ICAvKiA3IGJlbCAqLyBCYWRDaGFyLAotICAgIC8qIDggYnMgKi8gQmFkQ2hhciwgICAgIC8qIDkg
aHQgKi8gQmFkQ2hhciwgICAgLyogMTAgbmwgKi8gQmFkQ2hhciwgICAgLyogMTEgdnQgKi8gQmFk
Q2hhciwKKyAgICAvKiA4IGJzICovIEJhZENoYXIsICAgICAvKiA5IGh0ICovIEJhZENoYXIsICAg
ICAvKiAxMCBubCAqLyBCYWRDaGFyLCAgICAvKiAxMSB2dCAqLyBCYWRDaGFyLAogICAgIC8qIDEy
IG5wICovIEJhZENoYXIsICAgIC8qIDEzIGNyICovIEJhZENoYXIsICAgIC8qIDE0IHNvICovIEJh
ZENoYXIsICAgIC8qIDE1IHNpICovIEJhZENoYXIsCiAgICAgLyogMTYgZGxlICovIEJhZENoYXIs
ICAgLyogMTcgZGMxICovIEJhZENoYXIsICAgLyogMTggZGMyICovIEJhZENoYXIsICAgLyogMTkg
ZGMzICovIEJhZENoYXIsCiAgICAgLyogMjAgZGM0ICovIEJhZENoYXIsICAgLyogMjEgbmFrICov
IEJhZENoYXIsICAgLyogMjIgc3luICovIEJhZENoYXIsICAgLyogMjMgZXRiICovIEJhZENoYXIs
CiAgICAgLyogMjQgY2FuICovIEJhZENoYXIsICAgLyogMjUgZW0gKi8gQmFkQ2hhciwgICAgLyog
MjYgc3ViICovIEJhZENoYXIsICAgLyogMjcgZXNjICovIEJhZENoYXIsCiAgICAgLyogMjggZnMg
Ki8gQmFkQ2hhciwgICAgLyogMjkgZ3MgKi8gQmFkQ2hhciwgICAgLyogMzAgcnMgKi8gQmFkQ2hh
ciwgICAgLyogMzEgdXMgKi8gQmFkQ2hhciwKICAgICAvKiAzMiBzcCAqLyBCYWRDaGFyLCAgICAv
KiAzMyAgISAqLyBVc2VySW5mb0NoYXIsCi0gICAgLyogMzQgICIgKi8gQmFkQ2hhciwgICAgLyog
MzUgICMgKi8gUGF0aFNlZ21lbnRFbmRDaGFyIHwgQmFkQ2hhciwgICAgCisgICAgLyogMzQgICIg
Ki8gQmFkQ2hhciwgICAgLyogMzUgICMgKi8gUGF0aFNlZ21lbnRFbmRDaGFyIHwgQmFkQ2hhciwK
ICAgICAvKiAzNiAgJCAqLyBVc2VySW5mb0NoYXIsICAgIC8qIDM3ICAlICovIFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyIHwgQmFkQ2hhciwKICAgICAvKiAzOCAgJiAqLyBV
c2VySW5mb0NoYXIsICAgIC8qIDM5ICAnICovIFVzZXJJbmZvQ2hhciwKLSAgICAvKiA0MCAgKCAq
LyBVc2VySW5mb0NoYXIsICAgIC8qIDQxICApICovIFVzZXJJbmZvQ2hhciwgICAgCisgICAgLyog
NDAgICggKi8gVXNlckluZm9DaGFyLCAgICAvKiA0MSAgKSAqLyBVc2VySW5mb0NoYXIsCiAgICAg
LyogNDIgICogKi8gVXNlckluZm9DaGFyLCAgICAvKiA0MyAgKyAqLyBTY2hlbWVDaGFyIHwgVXNl
ckluZm9DaGFyLAotICAgIC8qIDQ0ICAsICovIFVzZXJJbmZvQ2hhciwgICAgCi0gICAgLyogNDUg
IC0gKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwgCi0gICAgLyog
NDYgIC4gKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwgICAKKyAg
ICAvKiA0NCAgLCAqLyBVc2VySW5mb0NoYXIsCisgICAgLyogNDUgIC0gKi8gU2NoZW1lQ2hhciB8
IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwKKyAgICAvKiA0NiAgLiAqLyBTY2hlbWVDaGFy
IHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyLAogICAgIC8qIDQ3ICAvICovIFBhdGhTZWdt
ZW50RW5kQ2hhciwKLSAgICAvKiA0OCAgMCAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwg
SG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsIAotICAgIC8qIDQ5ICAxICov
IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIg
fCBJUHY2Q2hhciwgICAgCi0gICAgLyogNTAgIDIgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLCAKLSAgICAvKiA1MSAg
MyAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRD
aGFyIHwgSVB2NkNoYXIsCi0gICAgLyogNTIgIDQgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLCAKLSAgICAvKiA1MyAg
NSAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRD
aGFyIHwgSVB2NkNoYXIsCi0gICAgLyogNTQgIDYgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLCAKLSAgICAvKiA1NSAg
NyAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRD
aGFyIHwgSVB2NkNoYXIsCi0gICAgLyogNTYgIDggKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLCAKLSAgICAvKiA1NyAg
OSAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRD
aGFyIHwgSVB2NkNoYXIsCisgICAgLyogNDggIDAgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLCAKKyAgICAvKiA0OSAgMSAqLyBTY2hlbWVDaGFy
IHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsICAgIAorICAgIC8qIDUw
ICAyICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hh
ciwgCisgICAgLyogNTEgIDMgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1l
Q2hhciB8IElQdjZDaGFyLAorICAgIC8qIDUyICA0ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0No
YXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwgCisgICAgLyogNTMgIDUgKi8gU2NoZW1lQ2hh
ciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLAorICAgIC8qIDU0ICA2
ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwg
CisgICAgLyogNTUgIDcgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hh
ciB8IElQdjZDaGFyLAorICAgIC8qIDU2ICA4ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIg
fCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwgCisgICAgLyogNTcgIDkgKi8gU2NoZW1lQ2hhciB8
IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLAogICAgIC8qIDU4ICA6ICov
IFVzZXJJbmZvQ2hhciB8IElQdjZDaGFyLCAgICAvKiA1OSAgOyAqLyBVc2VySW5mb0NoYXIsCiAg
ICAgLyogNjAgIDwgKi8gQmFkQ2hhciwgICAgLyogNjEgID0gKi8gVXNlckluZm9DaGFyLAogICAg
IC8qIDYyICA+ICovIEJhZENoYXIsICAgIC8qIDYzICA/ICovIFBhdGhTZWdtZW50RW5kQ2hhciB8
IEJhZENoYXIsCiAgICAgLyogNjQgIEAgKi8gMCwKLSAgICAvKiA2NSAgQSAqLyBTY2hlbWVGaXJz
dENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGln
aXRDaGFyIHwgSVB2NkNoYXIsICAgIAotICAgIC8qIDY2ICBCICovIFNjaGVtZUZpcnN0Q2hhciB8
IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIg
fCBJUHY2Q2hhciwKLSAgICAvKiA2NyAgQyAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFy
IHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIs
Ci0gICAgLyogNjggIEQgKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZv
Q2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLAotICAgIC8qIDY5
ICBFICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0
bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hhciwKLSAgICAvKiA3MCAgRiAqLyBTY2hl
bWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwg
SGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsCisgICAgLyogNjUgIEEgKi8gU2NoZW1lRmlyc3RDaGFy
IHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLCAg
ICAKKyAgICAvKiA2NiAgQiAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlcklu
Zm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsCisgICAgLyogNjcgIEMgKi8gU2NoZW1l
Rmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQ
djZDaGFyLAorICAgIC8qIDY4ICBEICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBV
c2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwKKyAgICAvKiA2OSAgRSAqLyBT
Y2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFy
IHwgSVB2NkNoYXIsCisgICAgLyogNzAgIEYgKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hh
ciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLAogICAgIC8qIDcxICBH
ICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFt
ZUNoYXIsCiAgICAgLyogNzIgIEggKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVz
ZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwKICAgICAvKiA3MyAgSSAqLyBTY2hlbWVGaXJzdENo
YXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyLApAQCAtMTQxLDEy
ICsxNDMsMTIgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyQ2xhcwogICAg
IC8qIDk0ICBeICovIDAsCiAgICAgLyogOTUgIF8gKi8gVXNlckluZm9DaGFyIHwgSG9zdG5hbWVD
aGFyLAogICAgIC8qIDk2ICBgICovIDAsCi0gICAgLyogOTcgIGEgKi8gU2NoZW1lRmlyc3RDaGFy
IHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hh
ciB8IElQdjZDaGFyLAotICAgIC8qIDk4ICBiICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNo
YXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hh
ciwgCi0gICAgLyogOTkgIGMgKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJ
bmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLAotICAgIC8q
IDEwMCAgZCAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwg
SG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsIAotICAgIC8qIDEwMSAgZSAq
LyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVD
aGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsCi0gICAgLyogMTAyICBmICovIFNjaGVtZUZp
cnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhE
aWdpdENoYXIgfCBJUHY2Q2hhciwgCisgICAgLyogOTcgIGEgKi8gU2NoZW1lRmlyc3RDaGFyIHwg
U2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLAorICAg
IC8qIDk4ICBiICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIg
fCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwgCisgICAgLyogOTkgIGMgKi8gU2NoZW1lRmlyc3RD
aGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFy
LAorICAgIC8qIDEwMCAgZCAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlcklu
Zm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsIAorICAgIC8qIDEwMSAgZSAqLyBTY2hl
bWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwg
SVB2NkNoYXIsCisgICAgLyogMTAyICBmICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIg
fCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwgCiAgICAgLyogMTAzICBn
ICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFt
ZUNoYXIsCiAgICAgLyogMTA0ICBoICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBV
c2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIsIAogICAgIC8qIDEwNSAgaSAqLyBTY2hlbWVGaXJz
dENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyLApAQCAtMjA0
LDEyNiArMjA2LDE1NyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXJDbGFz
CiB9OwogCiBzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIqIGRzdCwgY29uc3Qg
Y2hhciogc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQpOwotc3RhdGljIGNoYXIqIGVuY29k
ZVJlbGF0aXZlU3RyaW5nKGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
IHJlbCwgY29uc3QgVGV4dEVuY29kaW5nJik7Ci1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdWJz
dGl0dXRlQmFja3NsYXNoZXMoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyaW5nKTsKK3N0YXRp
YyB2b2lkIGVuY29kZVJlbGF0aXZlU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVsLCBjb25zdCBUZXh0
RW5jb2RpbmcmLCBDaGFyQnVmZmVyJiBvdXB1dCk7CitzdGF0aWMgU3RyaW5nIHN1YnN0aXR1dGVC
YWNrc2xhc2hlcyhjb25zdCBTdHJpbmcmKTsKIAotc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1l
Rmlyc3RDaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtj
XSAmIFNjaGVtZUZpcnN0Q2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hhcih1
bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hlbWVD
aGFyOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY2hlbWVGaXJzdENoYXIoY2hhciBjKSB7IHJl
dHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpXSAm
IFNjaGVtZUZpcnN0Q2hhcjsgfQorc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFy
KFVDaGFyIGMpIHsgcmV0dXJuIGMgPD0gMHhmZiAmJiAoY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAm
IFNjaGVtZUZpcnN0Q2hhcik7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIoY2hh
ciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGMpXSAmIFNjaGVtZUNoYXI7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIo
VUNoYXIgYykgeyByZXR1cm4gYyA8PSAweGZmICYmIChjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYg
U2NoZW1lQ2hhcik7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1VzZXJJbmZvQ2hhcih1bnNpZ25l
ZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBVc2VySW5mb0NoYXI7
IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hvc3RuYW1lQ2hhcih1bnNpZ25lZCBjaGFyIGMpIHsg
cmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBIb3N0bmFtZUNoYXI7IH0KIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0lQdjZDaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVy
Q2xhc3NUYWJsZVtjXSAmIElQdjZDaGFyOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2Vn
bWVudEVuZENoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxl
W2NdICYgUGF0aFNlZ21lbnRFbmRDaGFyOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNQYXRoU2Vn
bWVudEVuZENoYXIoY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW3N0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KGMpXSAmIFBhdGhTZWdtZW50RW5kQ2hhcjsgfQorc3RhdGljIGlu
bGluZSBib29sIGlzUGF0aFNlZ21lbnRFbmRDaGFyKFVDaGFyIGMpIHsgcmV0dXJuIGMgPD0gMHhm
ZiAmJiAoY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFBhdGhTZWdtZW50RW5kQ2hhcik7IH0KIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0JhZENoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFy
YWN0ZXJDbGFzc1RhYmxlW2NdICYgQmFkQ2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlzSGV4
RGlnaXQodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYg
SGV4RGlnaXRDaGFyOyB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGhleERpZ2l0VmFsdWUodW5zaWdu
ZWQgY2hhciBjKQorc3RhdGljIGlubGluZSBpbnQgaGV4RGlnaXRWYWx1ZShVQ2hhciBjKQogewot
ICAgIEFTU0VSVChpc0hleERpZ2l0KGMpKTsKKyAgICBBU1NFUlQoaXNBU0NJSUhleERpZ2l0KGMp
KTsKICAgICBpZiAoYyA8ICdBJykKICAgICAgICAgcmV0dXJuIGMgLSAnMCc7CiAgICAgcmV0dXJu
IChjIC0gJ0EnICsgMTApICYgMHhGOyAvLyBoYW5kbGUgYm90aCB1cHBlciBhbmQgbG93ZXIgY2Fz
ZSB3aXRob3V0IGEgYnJhbmNoCiB9CiAKKy8vIENvcGllcyB0aGUgc291cmNlIHRvIHRoZSBkZXN0
aW5hdGlvbiwgYXNzdW1pbmcgYWxsIHRoZSBzb3VyY2UgY2hhcmFjdGVycyBhcmUKKy8vIEFTQ0lJ
LiBUaGUgZGVzdGluYXRpb24gYnVmZmVyIG11c3QgYmUgbGFyZ2UgZW5vdWdoLiBOdWxsIGNoYXJh
Y3RlcnMgYXJlIGFsbG93ZWQKKy8vIGluIHRoZSBzb3VyY2Ugc3RyaW5nLCBhbmQgbm8gYXR0ZW1w
dCBpcyBtYWRlIHRvIG51bGwtdGVybWluYXRlIHRoZSByZXN1bHQuCitzdGF0aWMgdm9pZCBjb3B5
QVNDSUkoY29uc3QgVUNoYXIqIHNyYywgaW50IGxlbmd0aCwgY2hhciogZGVzdCkKK3sKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBkZXN0W2ldID0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oc3JjW2ldKTsKK30KKworLy8gRklYTUU6IE1vdmUgdG8gUGxhdGZvcm1TdHJp
bmcuaCBldmVudHVhbGx5LgorLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGluZGV4
IGluIHN0cmluZyB8c3wgb2YgYW55IG9mIHRoZSBjaGFyYWN0ZXJzCisvLyBpbiB8dG9GaW5kfC4g
fHRvRmluZHwgc2hvdWxkIGJlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgYWxsIGNoYXJhY3Rl
cnMgdXAKKy8vIHRvIHRoZSBudWxsIHdpbGwgYmUgc2VhcmNoZWQuIFJldHVybnMgaW50IGlmIG5v
dCBmb3VuZC4KK3N0YXRpYyBpbnQgZmluZEZpcnN0T2YoY29uc3QgVUNoYXIqIHMsIGludCBzTGVu
LCBpbnQgc3RhcnRQb3MsIGNvbnN0IGNoYXIqIHRvRmluZCkKK3sKKyAgICBmb3IgKGludCBpID0g
c3RhcnRQb3M7IGkgPCBzTGVuOyBpKyspIHsKKyAgICAgICAgY29uc3QgY2hhciogY3VyID0gdG9G
aW5kOworICAgICAgICB3aGlsZSAoKmN1cikgeworICAgICAgICAgICAgaWYgKHNbaV0gPT0gKihj
dXIrKykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIC0xOworfQorCiAvLyBLVVJMCiAKLUtVUkw6OktVUkwoKSA6IG1faXNWYWxpZChmYWxz
ZSkKK2lubGluZSBib29sIEtVUkw6OnByb3RvY29sSXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IGNoYXIqIHByb3RvY29sKQogeworICAgIHJldHVybiBXZWJDb3JlOjpwcm90b2NvbElzKHN0
cmluZywgcHJvdG9jb2wpOwogfQogCi1LVVJMOjpLVVJMKGNvbnN0IGNoYXIgKnVybCkKK0tVUkw6
OktVUkwoKQorICAgIDogbV9pc1ZhbGlkKGZhbHNlKQogewotICAgIGlmICh1cmwgJiYgdXJsWzBd
ID09ICcvJykgewotICAgICAgICAgLy8gNSBmb3IgImZpbGU6IiwgMSBmb3IgdGVybWluYXRvcgot
ICAgICAgICBzaXplX3QgdXJsTGVuZ3RoID0gc3RybGVuKHVybCkgKyAxOwotICAgICAgICBWZWN0
b3I8Y2hhciwgMjA0OD4gYnVmZmVyKHVybExlbmd0aCArIDUpOwotICAgICAgICBidWZmZXJbMF0g
PSAnZic7Ci0gICAgICAgIGJ1ZmZlclsxXSA9ICdpJzsKLSAgICAgICAgYnVmZmVyWzJdID0gJ2wn
OwotICAgICAgICBidWZmZXJbM10gPSAnZSc7Ci0gICAgICAgIGJ1ZmZlcls0XSA9ICc6JzsKLSAg
ICAgICAgbWVtY3B5KCZidWZmZXJbNV0sIHVybCwgdXJsTGVuZ3RoKTsKLSAgICAgICAgcGFyc2Uo
YnVmZmVyLmRhdGEoKSwgMCk7Ci0gICAgfSBlbHNlCit9CisKK0tVUkw6OktVUkwoY29uc3QgY2hh
ciogdXJsKQoreworICAgIGlmICghdXJsIHx8IHVybFswXSAhPSAnLycpIHsKICAgICAgICAgcGFy
c2UodXJsLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCB1cmxMZW5n
dGggPSBzdHJsZW4odXJsKSArIDE7CisgICAgQ2hhckJ1ZmZlciBidWZmZXIodXJsTGVuZ3RoICsg
NSk7IC8vIDUgZm9yICJmaWxlOiIuCisgICAgYnVmZmVyWzBdID0gJ2YnOworICAgIGJ1ZmZlclsx
XSA9ICdpJzsKKyAgICBidWZmZXJbMl0gPSAnbCc7CisgICAgYnVmZmVyWzNdID0gJ2UnOworICAg
IGJ1ZmZlcls0XSA9ICc6JzsKKyAgICBtZW1jcHkoJmJ1ZmZlcls1XSwgdXJsLCB1cmxMZW5ndGgp
OworICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwogfQogCi1LVVJMOjpLVVJMKGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJnVybCkKK0tVUkw6OktVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0g
ICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIHVybFswXSA9PSAnLycpIHsKLSAgICAgICAgLy8gNSBm
b3IgImZpbGU6IiwgMSBmb3IgdGVybWluYXRvcgotICAgICAgICBWZWN0b3I8Y2hhciwgMjA0OD4g
YnVmZmVyKHVybC5sZW5ndGgoKSArIDYpOwotICAgICAgICBidWZmZXJbMF0gPSAnZic7Ci0gICAg
ICAgIGJ1ZmZlclsxXSA9ICdpJzsKLSAgICAgICAgYnVmZmVyWzJdID0gJ2wnOwotICAgICAgICBi
dWZmZXJbM10gPSAnZSc7Ci0gICAgICAgIGJ1ZmZlcls0XSA9ICc6JzsKLSAgICAgICAgdXJsLmNv
cHlMYXRpbjEoJmJ1ZmZlcls1XSk7Ci0gICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwot
ICAgIH0gZWxzZQotICAgICAgICBwYXJzZSh1cmwuYXNjaWkoKSwgJnVybCk7CisgICAgaWYgKHVy
bFswXSAhPSAnLycpIHsKKyAgICAgICAgcGFyc2UodXJsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENoYXJCdWZmZXIgYnVmZmVyKHVybC5sZW5ndGgoKSArIDYpOyAvLyA1IGZvciAi
ZmlsZToiLCAxIGZvciB0ZXJtaW5hdG9yLgorICAgIGJ1ZmZlclswXSA9ICdmJzsKKyAgICBidWZm
ZXJbMV0gPSAnaSc7CisgICAgYnVmZmVyWzJdID0gJ2wnOworICAgIGJ1ZmZlclszXSA9ICdlJzsK
KyAgICBidWZmZXJbNF0gPSAnOic7CisgICAgY29weUFTQ0lJKHVybC5jaGFyYWN0ZXJzKCksIHVy
bC5sZW5ndGgoKSwgJmJ1ZmZlcls1XSk7CisgICAgYnVmZmVyW3VybC5sZW5ndGgoKSArIDRdID0g
J1wwJzsgLy8gTmVlZCBudWxsIHRlcm1pbmF0b3IuCisKKyAgICBwYXJzZShidWZmZXIuZGF0YSgp
LCAwKTsKIH0KIAotS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBEZXByZWNhdGVk
U3RyaW5nJiByZWxhdGl2ZSkKK0tVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZSkKIHsKICAgICBpbml0KGJhc2UsIHJlbGF0aXZlLCBVVEY4RW5jb2Rpbmco
KSk7CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitLVVJMOjpLVVJM
KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgaW5pdChiYXNlLCByZWxhdGl2ZSwgZW5jb2RpbmcpOwog
fQogCi12b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAmcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCit2b2lkIEtVUkw6
OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBBbGxvdyBhdCBsZWFzdCBhYnNvbHV0ZSBV
UkxzIHRvIHJlc29sdmUgYWdhaW5zdCBhbiBlbXB0eSBVUkwuCiAgICAgaWYgKCFiYXNlLm1faXNW
YWxpZCAmJiAhYmFzZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9zdHJpbmcgPSByZWxhdGl2ZTsK
ICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
Ci0gICAgYm9vbCBhYnNvbHV0ZSA9IGZhbHNlOwogCi0gICAgLy8gZm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBXaW4gSUUsIHdlIG11c3QgdHJlYXQgYmFja3NsYXNoZXMgYXMgaWYgdGhleSB3ZXJlIHNs
YXNoZXMsIGFzIGxvbmcgYXMgd2UncmUgbm90IGRlYWxpbmcgd2l0aCB0aGUgamF2YXNjcmlwdDog
c2NoZW1hCi0gICAgRGVwcmVjYXRlZFN0cmluZyBzdWJzdGl0dXRlZFJlbGF0aXZlOwotICAgIGJv
b2wgc2hvdWxkU3Vic3RpdHV0ZUJhY2tzbGFzaGVzID0gcmVsYXRpdmUuY29udGFpbnMoJ1xcJykg
JiYgIShyZWxhdGl2ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCByZWxhdGl2
ZS5zdGFydHNXaXRoKCJkYXRhOiIsIGZhbHNlKSk7Ci0gICAgaWYgKHNob3VsZFN1YnN0aXR1dGVC
YWNrc2xhc2hlcykKLSAgICAgICAgc3Vic3RpdHV0ZWRSZWxhdGl2ZSA9IHN1YnN0aXR1dGVCYWNr
c2xhc2hlcyhyZWxhdGl2ZSk7Ci0KLSAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZyZWwgPSBz
aG91bGRTdWJzdGl0dXRlQmFja3NsYXNoZXMgPyBzdWJzdGl0dXRlZFJlbGF0aXZlIDogcmVsYXRp
dmU7Ci0gICAgCi0gICAgYm9vbCBhbGxBU0NJSSA9IHJlbC5pc0FsbEFTQ0lJKCk7Ci0gICAgY2hh
ciAqc3RyQnVmZmVyOwotICAgIGNvbnN0IGNoYXIgKnN0cjsKKyAgICAvLyBGb3IgY29tcGF0aWJp
bGl0eSB3aXRoIFdpbiBJRSwgdHJlYXQgYmFja3NsYXNoZXMgYXMgaWYgdGhleSB3ZXJlIHNsYXNo
ZXMsCisgICAgLy8gYXMgbG9uZyBhcyB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGphdmFzY3JpcHQ6
IG9yIGRhdGE6IFVSTHMuCisgICAgU3RyaW5nIHJlbCA9IHJlbGF0aXZlOworICAgIGlmIChyZWwu
Y29udGFpbnMoJ1xcJykgJiYgIShwcm90b2NvbElzKHJlbCwgImphdmFzY3JpcHQiKSB8fCBwcm90
b2NvbElzKHJlbCwgImRhdGEiKSkpCisgICAgICAgIHJlbCA9IHN1YnN0aXR1dGVCYWNrc2xhc2hl
cyhyZWwpOworCisgICAgU3RyaW5nKiBvcmlnaW5hbFN0cmluZyA9ICZyZWw7CisKKyAgICBib29s
IGFsbEFTQ0lJID0gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJlbC5jaGFyYWN0ZXJzKCksIHJlbC5s
ZW5ndGgoKSk7CisgICAgQ2hhckJ1ZmZlciBzdHJCdWZmZXI7CisgICAgY2hhciogc3RyOworICAg
IHNpemVfdCBsZW47CiAgICAgaWYgKGFsbEFTQ0lJKSB7Ci0gICAgICAgIHN0ckJ1ZmZlciA9IDA7
Ci0gICAgICAgIHN0ciA9IHJlbC5hc2NpaSgpOworICAgICAgICBsZW4gPSByZWwubGVuZ3RoKCk7
CisgICAgICAgIHN0ckJ1ZmZlci5yZXNpemUobGVuICsgMSk7CisgICAgICAgIGNvcHlBU0NJSShy
ZWwuY2hhcmFjdGVycygpLCBsZW4sIHN0ckJ1ZmZlci5kYXRhKCkpOworICAgICAgICBzdHJCdWZm
ZXJbbGVuXSA9IDA7CisgICAgICAgIHN0ciA9IHN0ckJ1ZmZlci5kYXRhKCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgc3RyQnVmZmVyID0gZW5jb2RlUmVsYXRpdmVTdHJpbmcoYmFzZSwgcmVsLCBl
bmNvZGluZyk7Ci0gICAgICAgIHN0ciA9IHN0ckJ1ZmZlcjsKKyAgICAgICAgb3JpZ2luYWxTdHJp
bmcgPSAwOworICAgICAgICBlbmNvZGVSZWxhdGl2ZVN0cmluZyhyZWwsIGVuY29kaW5nLCBzdHJC
dWZmZXIpOworICAgICAgICBzdHIgPSBzdHJCdWZmZXIuZGF0YSgpOworICAgICAgICBsZW4gPSBz
dHJsZW4oc3RyKTsKICAgICB9Ci0gICAgCi0gICAgLy8gd29ya2Fyb3VuZCBmb3Igc2l0ZXMgdGhh
dCBwdXQgbGVhZGluZyB3aGl0ZXNwYWNlIHdoaXRlc3BhY2Ugb24KLSAgICAvLyBVUkwgcmVmZXJl
bmNlcwotICAgIGJvb2wgc3RyaXBwZWRTdGFydCA9IGZhbHNlOworCisgICAgLy8gR2V0IHJpZCBv
ZiBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICAgd2hpbGUgKCpzdHIgPT0gJyAnKSB7CisgICAgICAg
IG9yaWdpbmFsU3RyaW5nID0gMDsKICAgICAgICAgc3RyKys7Ci0gICAgICAgIHN0cmlwcGVkU3Rh
cnQgPSB0cnVlOworICAgICAgICAtLWxlbjsKICAgICB9CiAKLSAgICAvLyB3b3JrYXJvdW5kIGZv
ciB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gYSBiaXQgbW9yZSBjb21wbGljYXRlZCBjYXVzZSB3ZSBo
YXZlIHRvIGNvcHkKLSAgICAvLyBpdCB3b3VsZCBiZSBldmVuIGJldHRlciB0byByZXBsYWNlIG51
bGwtdGVybWluYXRpb24gd2l0aCBhIGxlbmd0aCBwYXJhbWV0ZXIKLSAgICBpbnQgbGVuID0gc3Ry
bGVuKHN0cik7Ci0gICAgaW50IGNoYXJzVG9DaG9wT2ZmRW5kID0gMDsKLSAgICBmb3IgKGludCBw
b3MgPSBsZW4gLSAxOyBwb3MgPj0gMCAmJiBzdHJbcG9zXSA9PSAnICc7IHBvcy0tKSB7Ci0gICAg
ICAgIGNoYXJzVG9DaG9wT2ZmRW5kKys7Ci0gICAgfQotICAgIGlmIChjaGFyc1RvQ2hvcE9mZkVu
ZCA+IDApIHsKLSAgICAgICAgY2hhciAqbmV3U3RyQnVmZmVyID0gKGNoYXIgKilmYXN0TWFsbG9j
KChsZW4gKyAxKSAtIGNoYXJzVG9DaG9wT2ZmRW5kKTsKLSAgICAgICAgc3RybmNweShuZXdTdHJC
dWZmZXIsIHN0ciwgbGVuIC0gY2hhcnNUb0Nob3BPZmZFbmQpOwotICAgICAgICBuZXdTdHJCdWZm
ZXJbbGVuIC0gY2hhcnNUb0Nob3BPZmZFbmRdID0gJ1wwJzsKLSAgICAgICAgZmFzdEZyZWUoc3Ry
QnVmZmVyKTsKLSAgICAgICAgc3RyQnVmZmVyID0gbmV3U3RyQnVmZmVyOwotICAgICAgICBzdHIg
PSBzdHJCdWZmZXI7CisgICAgLy8gR2V0IHJpZCBvZiB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAg
IHdoaWxlIChsZW4gJiYgc3RyW2xlbiAtIDFdID09ICcgJykgeworICAgICAgICBvcmlnaW5hbFN0
cmluZyA9IDA7CisgICAgICAgIHN0clstLWxlbl0gPSAnXDAnOwogICAgIH0KIAogICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgUkZDLCB0aGUgcmVmZXJlbmNlIHNob3VsZCBiZSBpbnRlcnByZXRlZCBh
cyBhbgpAQCAtMzMxLDExOSArMzY0LDEwOCBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCAm
YmFzZSwgY29uc3QgCiAgICAgLy8gYWxnb3JpdGhtLiBJZiB0aGUgVVJJIHJlZmVyZW5jZSBpcyBh
YnNvbHV0ZSBpdCB3aWxsIGhhdmUgYQogICAgIC8vIHNjaGVtZSwgbWVhbmluZyB0aGF0IGl0IHdp
bGwgaGF2ZSBhIGNvbG9uIGJlZm9yZSB0aGUgZmlyc3QKICAgICAvLyBub24tc2NoZW1lIGVsZW1l
bnQuCi0gICAgY29uc3QgY2hhciAqcCA9IHN0cjsKKyAgICBib29sIGFic29sdXRlID0gZmFsc2U7
CisgICAgY2hhciogcCA9IHN0cjsKICAgICBpZiAoaXNTY2hlbWVGaXJzdENoYXIoKnApKSB7CiAg
ICAgICAgICsrcDsKICAgICAgICAgd2hpbGUgKGlzU2NoZW1lQ2hhcigqcCkpIHsKICAgICAgICAg
ICAgICsrcDsKICAgICAgICAgfQogICAgICAgICBpZiAoKnAgPT0gJzonKSB7Ci0gICAgICAgICAg
ICBpZiAocFsxXSAhPSAnLycgJiYgYmFzZS5wcm90b2NvbCgpLmxvd2VyKCkgPT0gRGVwcmVjYXRl
ZFN0cmluZyhzdHIsIHAgLSBzdHIpLmxvd2VyKCkgJiYgYmFzZS5pc0hpZXJhcmNoaWNhbCgpKQor
ICAgICAgICAgICAgaWYgKHBbMV0gIT0gJy8nICYmIGVxdWFsSWdub3JpbmdDYXNlKGJhc2UucHJv
dG9jb2woKSwgU3RyaW5nKHN0ciwgcCAtIHN0cikpICYmIGJhc2UuaXNIaWVyYXJjaGljYWwoKSkg
ewogICAgICAgICAgICAgICAgIHN0ciA9IHAgKyAxOwotICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG9yaWdpbmFsU3RyaW5nID0gMDsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIGFic29sdXRlID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChh
YnNvbHV0ZSkgewotICAgICAgICBwYXJzZShzdHIsIChhbGxBU0NJSSAmJiAhc3RyaXBwZWRTdGFy
dCAmJiAoY2hhcnNUb0Nob3BPZmZFbmQgPT0gMCkpID8gJnJlbCA6IDApOworICAgICAgICBwYXJz
ZShzdHIsIG9yaWdpbmFsU3RyaW5nKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBJZiB0aGUg
YmFzZSBpcyBlbXB0eSBvciBvcGFxdWUgKGUuZy4gZGF0YTogb3IgamF2YXNjcmlwdDopLCB0aGVu
IHRoZSBVUkwgaXMgaW52YWxpZAogICAgICAgICAvLyB1bmxlc3MgdGhlIHJlbGF0aXZlIFVSTCBp
cyBhIHNpbmdsZSBmcmFnbWVudC4KICAgICAgICAgaWYgKCFiYXNlLmlzSGllcmFyY2hpY2FsKCkp
IHsKLSAgICAgICAgICAgIGlmIChzdHJbMF0gPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyBuZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2UucXVlcnlFbmRQ
b3MpICsgc3RyOwotICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJM
KTsKLSAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKHN0clswXSA9PSAnIycpCisg
ICAgICAgICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UucXVlcnlFbmRQb3Mp
ICsgc3RyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fc3RyaW5nID0g
cmVsYXRpdmU7CiAgICAgICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChzdHJCdWZmZXIpCi0gICAgICAgICAgICAgICAgZmFzdEZyZWUo
c3RyQnVmZmVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIHN3aXRjaChzdHJbMF0pIHsKKyAgICAgICAgc3dpdGNoIChzdHJbMF0pIHsK
ICAgICAgICAgY2FzZSAnXDAnOgogICAgICAgICAgICAgLy8gdGhlIHJlZmVyZW5jZSBtdXN0IGJl
IGVtcHR5IC0gdGhlIFJGQyBzYXlzIHRoaXMgaXMgYQogICAgICAgICAgICAgLy8gcmVmZXJlbmNl
IHRvIHRoZSBzYW1lIGRvY3VtZW50Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnRo
aXMgPSBiYXNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgKnRoaXMgPSBiYXNlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJyMn
OgogICAgICAgICAgICAgLy8gbXVzdCBiZSBmcmFnbWVudC1vbmx5IHJlZmVyZW5jZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gYmFzZS51
cmxTdHJpbmcubGVmdChiYXNlLnF1ZXJ5RW5kUG9zKSArIHN0cjsKLSAgICAgICAgICAgICAgICBw
YXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5x
dWVyeUVuZFBvcykgKyBzdHIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJz8n
OgogICAgICAgICAgICAgLy8gcXVlcnktb25seSByZWZlcmVuY2UsIHNwZWNpYWwgY2FzZSBuZWVk
ZWQgZm9yIG5vbi1VUkwgcmVzdWx0cwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERl
cHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gYmFzZS51cmxTdHJpbmcubGVmdChiYXNlLnBhdGhFbmRQ
b3MpICsgc3RyOwotICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJM
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBh
cnNlKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLnBhdGhFbmRQb3MpICsgc3RyKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgIC8vIG11c3QgYmUgbmV0
LXBhdGggb3IgYWJzb2x1dGUtcGF0aCByZWZlcmVuY2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RyWzFdID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICAvLyBuZXQt
cGF0aAotICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2Uu
dXJsU3RyaW5nLmxlZnQoYmFzZS5zY2hlbWVFbmRQb3MgKyAxKSArIHN0cjsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFicy1wYXRoCi0gICAgICAgICAgICAg
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gYmFzZS51cmxTdHJpbmcubGVmdChiYXNl
LnBvcnRFbmRQb3MpICsgc3RyOwotICAgICAgICAgICAgICAgICAgICBwYXJzZShuZXdVUkwuYXNj
aWkoKSwgJm5ld1VSTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKHN0clsxXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAvLyBu
ZXQtcGF0aAorICAgICAgICAgICAgICAgIHBhcnNlKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLnNj
aGVtZUVuZFBvcyArIDEpICsgc3RyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gYWJzLXBhdGgKKyAgICAgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxl
ZnQoYmFzZS5wb3J0RW5kUG9zKSArIHN0cik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAv
LyBtdXN0IGJlIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlCiAKICAgICAgICAgICAgICAgICAvLyBC
YXNlIHBhcnQgcGx1cyByZWxhdGl2ZSBwYXJ0IHBsdXMgb25lIHBvc3NpYmxlIHNsYXNoIGFkZGVk
IGluIGJldHdlZW4gcGx1cyB0ZXJtaW5hdGluZyBcMCBieXRlLgotICAgICAgICAgICAgICAgIFZl
Y3RvcjxjaGFyLCAyMDQ4PiBidWZmZXIoYmFzZS5wYXRoRW5kUG9zICsgMSArIHN0cmxlbihzdHIp
ICsgMSk7CisgICAgICAgICAgICAgICAgQ2hhckJ1ZmZlciBidWZmZXIoYmFzZS5wYXRoRW5kUG9z
ICsgMSArIGxlbiArIDEpOworCisgICAgICAgICAgICAgICAgY2hhciogYnVmZmVyUG9zID0gYnVm
ZmVyLmRhdGEoKTsKIAotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlclBvcyA9IGJ1ZmZlci5k
YXRhKCk7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY29weSBl
dmVyeXRoaW5nIGJlZm9yZSB0aGUgcGF0aCBmcm9tIHRoZSBiYXNlCi0gICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqYmFzZVN0cmluZyA9IGJhc2UudXJsU3RyaW5nLmFzY2lpKCk7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1N0YXJ0ID0gYmFzZVN0cmluZzsKLSAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoU3RhcnQgPSBiYXNlU3RyaW5nU3RhcnQgKyBiYXNl
LnBvcnRFbmRQb3M7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJhc2VTdHJpbmdTdGFydCA8IHBh
dGhTdGFydCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJhc2VMZW5ndGggPSBiYXNlLm1f
c3RyaW5nLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiYXNlQ2hhcmFj
dGVycyA9IGJhc2UubV9zdHJpbmcuY2hhcmFjdGVycygpOworICAgICAgICAgICAgICAgIENoYXJC
dWZmZXIgYmFzZVN0cmluZ0J1ZmZlcihiYXNlTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzZUxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgICAg
ICBiYXNlU3RyaW5nQnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oYmFzZUNoYXJhY3RlcnNb
aV0pOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmcgPSBiYXNlU3RyaW5n
QnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nU3Rh
cnQgPSBiYXNlU3RyaW5nOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGhTdGFydCA9
IGJhc2VTdHJpbmdTdGFydCArIGJhc2UucG9ydEVuZFBvczsKKyAgICAgICAgICAgICAgICB3aGls
ZSAoYmFzZVN0cmluZ1N0YXJ0IDwgcGF0aFN0YXJ0KQogICAgICAgICAgICAgICAgICAgICAqYnVm
ZmVyUG9zKysgPSAqYmFzZVN0cmluZ1N0YXJ0Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGNoYXIgKmJ1ZmZlclBhdGhTdGFydCA9IGJ1ZmZlclBvczsKKyAgICAgICAgICAg
ICAgICBjaGFyKiBidWZmZXJQYXRoU3RhcnQgPSBidWZmZXJQb3M7CisKKyAgICAgICAgICAgICAg
ICAvLyBub3cgY29weSB0aGUgYmFzZSBwYXRoCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
YmFzZVN0cmluZ0VuZCA9IGJhc2VTdHJpbmcgKyBiYXNlLnBhdGhFbmRQb3M7CiAKLSAgICAgICAg
ICAgICAgICAvLyBub3cgY29weSB0aGUgYmFzZSBwYXRoIAotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmJhc2VTdHJpbmdFbmQgPSBiYXNlU3RyaW5nICsgYmFzZS5wYXRoRW5kUG9zOwotICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIGdvIGJhY2sgdG8gdGhlIGxhc3Qgc2xh
c2gKLSAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZVN0cmluZ0VuZCA+IGJhc2VTdHJpbmdTdGFy
dCAmJiBiYXNlU3RyaW5nRW5kWy0xXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
YmFzZVN0cmluZ0VuZCA+IGJhc2VTdHJpbmdTdGFydCAmJiBiYXNlU3RyaW5nRW5kWy0xXSAhPSAn
LycpCiAgICAgICAgICAgICAgICAgICAgIGJhc2VTdHJpbmdFbmQtLTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoYmFzZVN0cmluZ0Vu
ZCA9PSBiYXNlU3RyaW5nU3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbm8gcGF0aCBp
biBiYXNlLCBhZGQgYSBwYXRoIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGJhc2Uuc2NoZW1lRW5kUG9zICsgMSAhPSBiYXNlLnBhdGhFbmRQb3MgJiYgKnN0
ciAhPSAnXDAnICYmICpzdHIgIT0gJz8nICYmICpzdHIgIT0gJyMnKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChiYXNlLnNjaGVtZUVuZFBvcyArIDEgIT0gYmFzZS5wYXRoRW5kUG9zICYmICpz
dHIgIT0gJ1wwJyAmJiAqc3RyICE9ICc/JyAmJiAqc3RyICE9ICcjJykKICAgICAgICAgICAgICAg
ICAgICAgICAgICpidWZmZXJQb3MrKyA9ICcvJzsKLSAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBj
b3B5UGF0aFJlbW92aW5nRG90cyhidWZmZXJQb3MsIGJhc2VTdHJpbmdTdGFydCwgMCwgYmFzZVN0
cmluZ0VuZCAtIGJhc2VTdHJpbmdTdGFydCk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqcmVsU3RyaW5nU3RhcnQgPSBzdHI7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcmVsU3RyaW5nUG9zID0gcmVsU3RyaW5nU3RhcnQ7Ci0gICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVsU3RyaW5nU3RhcnQgPSBzdHI7
CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVsU3RyaW5nUG9zID0gcmVsU3RyaW5nU3Rh
cnQ7CisKICAgICAgICAgICAgICAgICB3aGlsZSAoKnJlbFN0cmluZ1BvcyAhPSAnXDAnICYmICpy
ZWxTdHJpbmdQb3MgIT0gJz8nICYmICpyZWxTdHJpbmdQb3MgIT0gJyMnKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy4nICYmIGJ1ZmZlclBvc1stMV0gPT0g
Jy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VnbWVudEVuZENoYXIo
cmVsU3RyaW5nUG9zWzFdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAg
b3ZlciAiLiIgc2VnbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1Bv
cyArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0g
PT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1sw
XSA9PSAnLycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1Bvcysr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVsU3Ry
aW5nUG9zWzFdID09ICcuJyAmJiBpc1BhdGhTZWdtZW50RW5kQ2hhcihyZWxTdHJpbmdQb3NbMl0p
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyICIuLiIgc2VnbWVu
dCBhbmQgcmV3aW5kIHRoZSBsYXN0IHNlZ21lbnQKQEAgLTQ1MSwxOSArNDczLDE2IEBAIHZvaWQg
S1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAiLi4iIHNlZ21lbnRzIC0gd2UgY2hvb3NlIHRvIGRyb3AgdGhlbSBzaW5jZSBz
b21lIHdlYiBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVsaWVzIG9u
IHRoaXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zICs9IDI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09ICcvJykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsU3RyaW5nUG9zKys7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
dWZmZXJQb3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFydCArIDEpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcy0tOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyUG9zID4gYnVm
ZmVyUGF0aFN0YXJ0ICsgMSAgJiYgYnVmZmVyUG9zWy0xXSAhPSAnLycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSAg
JiYgYnVmZmVyUG9zWy0xXSAhPSAnLycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlclBvcy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAg
ICAgICAgICAqYnVmZmVyUG9zID0gKnJlbFN0cmluZ1BvczsKICAgICAgICAgICAgICAgICAgICAg
cmVsU3RyaW5nUG9zKys7CiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcysrOwpAQCAtNDc0
LDE2ICs0OTMsMTIgQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IAog
ICAgICAgICAgICAgICAgIHN0cmNweShidWZmZXJQb3MsIHJlbFN0cmluZ1Bvcyk7CiAKICAgICAg
ICAgICAgICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKLSAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgIEFTU0VSVChzdHJsZW4oYnVmZmVyLmRhdGEoKSkgKyAxIDw9IGJ1ZmZl
ci5zaXplKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQotICAgIAotICAgIGlmIChzdHJCdWZmZXIpIHsKLSAgICAgICAgZmFzdEZyZWUo
c3RyQnVmZmVyKTsKLSAgICB9CiB9CiAKIGJvb2wgS1VSTDo6aGFzUGF0aCgpIGNvbnN0CkBAIC00
OTEsODkgKzUwNiw3OSBAQCBib29sIEtVUkw6Omhhc1BhdGgoKSBjb25zdAogICAgIHJldHVybiBt
X2lzVmFsaWQgJiYgcGF0aEVuZFBvcyAhPSBwb3J0RW5kUG9zOwogfQogCi1EZXByZWNhdGVkU3Ry
aW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkgY29uc3QKK1N0cmluZyBLVVJMOjpsYXN0UGF0
aENvbXBvbmVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNQYXRoKCkpCi0gICAgICAgIHJldHVy
biBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGlu
dCBlbmQgPSBwYXRoRW5kUG9zIC0gMTsKLSAgICBpZiAodXJsU3RyaW5nW2VuZF0gPT0gJy8nKQor
ICAgIGlmIChtX3N0cmluZ1tlbmRdID09ICcvJykKICAgICAgICAgLS1lbmQ7CiAKLSAgICBpbnQg
c3RhcnQgPSB1cmxTdHJpbmcuZmluZFJldignLycsIGVuZCk7CisgICAgaW50IHN0YXJ0ID0gbV9z
dHJpbmcucmV2ZXJzZUZpbmQoJy8nLCBlbmQpOwogICAgIGlmIChzdGFydCA8IHBvcnRFbmRQb3Mp
Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICArK3N0YXJ0OwogCi0gICAgcmV0dXJuIHVybFN0cmluZy5taWQoc3RhcnQsIGVu
ZCAtIHN0YXJ0ICsgMSk7CisgICAgcmV0dXJuIG1fc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5k
IC0gc3RhcnQgKyAxKTsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwcm90b2NvbCgpIGNv
bnN0CitTdHJpbmcgS1VSTDo6cHJvdG9jb2woKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlk
KSB7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgfQorICAgIGlmICgh
bV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gdXJsU3Ry
aW5nLmxlZnQoc2NoZW1lRW5kUG9zKTsKKyAgICByZXR1cm4gbV9zdHJpbmcubGVmdChzY2hlbWVF
bmRQb3MpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6Omhvc3QoKSBjb25zdAorU3RyaW5n
IEtVUkw6Omhvc3QoKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpbnQgc3RhcnQgPSAocGFzc3dvcmRFbmRQb3Mg
PT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAxOwot
ICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5taWQoc3RhcnQsIGhvc3RFbmRQb3Mg
LSBzdGFydCkpOworICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobV9zdHJpbmcu
c3Vic3RyaW5nKHN0YXJ0LCBob3N0RW5kUG9zIC0gc3RhcnQpKTsKIH0KIAotdW5zaWduZWQgc2hv
cnQgaW50IEtVUkw6OnBvcnQoKSBjb25zdAordW5zaWduZWQgc2hvcnQgS1VSTDo6cG9ydCgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKKyAgICBpZiAoIW1faXNWYWxpZCkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQogCi0gICAgaWYgKGhvc3RFbmRQb3MgIT0gcG9ydEVuZFBvcykg
ewotICAgICAgICBib29sIG9rOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCByZXN1bHQgPSB1cmxT
dHJpbmcubWlkKGhvc3RFbmRQb3MgKyAxLCBwb3J0RW5kUG9zIC0gaG9zdEVuZFBvcyAtIDEpLnRv
VVNob3J0KCZvayk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKGhvc3RF
bmRQb3MgPT0gcG9ydEVuZFBvcykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gMDsK
KyAgICBpbnQgbnVtYmVyID0gbV9zdHJpbmcuc3Vic3RyaW5nKGhvc3RFbmRQb3MgKyAxLCBwb3J0
RW5kUG9zIC0gaG9zdEVuZFBvcyAtIDEpLnRvSW50KCk7CisgICAgaWYgKG51bWJlciA8IDAgfHwg
bnVtYmVyID4gMHhGRkZGKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVtYmVyOwog
fQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OnBhc3MoKSBjb25zdAorU3RyaW5nIEtVUkw6OnBh
c3MoKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCk7Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKLSAgICBpZiAocGFzc3dvcmRFbmRQb3MgPT0gdXNlckVuZFBvcykgewot
ICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0KKyAgICBpZiAocGFzc3dv
cmRFbmRQb3MgPT0gdXNlckVuZFBvcykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAg
cmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3RyaW5nLm1pZCh1c2VyRW5kUG9zICsgMSwgcGFzc3dv
cmRFbmRQb3MgLSB1c2VyRW5kUG9zIC0gMSkpOyAKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKG1fc3RyaW5nLnN1YnN0cmluZyh1c2VyRW5kUG9zICsgMSwgcGFzc3dvcmRFbmRQ
b3MgLSB1c2VyRW5kUG9zIC0gMSkpOyAKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJMOjp1c2Vy
KCkgY29uc3QKK1N0cmluZyBLVVJMOjp1c2VyKCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxp
ZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0KKyAgICBpZiAo
IW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGRlY29k
ZV9zdHJpbmcodXJsU3RyaW5nLm1pZCh1c2VyU3RhcnRQb3MsIHVzZXJFbmRQb3MgLSB1c2VyU3Rh
cnRQb3MpKTsKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1
YnN0cmluZyh1c2VyU3RhcnRQb3MsIHVzZXJFbmRQb3MgLSB1c2VyU3RhcnRQb3MpKTsKIH0KIAot
RGVwcmVjYXRlZFN0cmluZyBLVVJMOjpyZWYoKSBjb25zdAorU3RyaW5nIEtVUkw6OnJlZigpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQgfHwgZnJhZ21lbnRFbmRQb3MgPT0gcXVlcnlFbmRQ
b3MpIHsKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9CisgICAgaWYg
KCFtX2lzVmFsaWQgfHwgZnJhZ21lbnRFbmRQb3MgPT0gcXVlcnlFbmRQb3MpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiB1cmxTdHJpbmcubWlkKHF1ZXJ5RW5kUG9zICsg
MSwgZnJhZ21lbnRFbmRQb3MgLSAocXVlcnlFbmRQb3MgKyAxKSk7CisgICAgcmV0dXJuIG1fc3Ry
aW5nLnN1YnN0cmluZyhxdWVyeUVuZFBvcyArIDEsIGZyYWdtZW50RW5kUG9zIC0gKHF1ZXJ5RW5k
UG9zICsgMSkpOwogfQogCiBib29sIEtVUkw6Omhhc1JlZigpIGNvbnN0CkBAIC01ODEsMjAyICs1
ODYsMjI0IEBAIGJvb2wgS1VSTDo6aGFzUmVmKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1ZhbGlk
ICYmIGZyYWdtZW50RW5kUG9zICE9IHF1ZXJ5RW5kUG9zOwogfQogCi1EZXByZWNhdGVkU3RyaW5n
IEtVUkw6OnF1ZXJ5KCkgY29uc3QKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRQcm90b2NvbElz
R29vZChjb25zdCBjaGFyKiBwcm90b2NvbCkKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewotICAg
ICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworI2lmbmRlZiBOREVCVUcKKyAgICBjb25z
dCBjaGFyKiBwID0gcHJvdG9jb2w7CisgICAgd2hpbGUgKCpwKSB7CisgICAgICAgIEFTU0VSVCgq
cCA+ICcgJyAmJiAqcCA8IDB4N0YgJiYgISgqcCA+PSAnQScgJiYgKnAgPD0gJ1onKSk7CisgICAg
ICAgICsrcDsKICAgICB9Ci0KLSAgICByZXR1cm4gdXJsU3RyaW5nLm1pZChwYXRoRW5kUG9zLCBx
dWVyeUVuZFBvcyAtIHBhdGhFbmRQb3MpOyAKKyNlbmRpZgogfQogCi1EZXByZWNhdGVkU3RyaW5n
IEtVUkw6OnBhdGgoKSBjb25zdAorYm9vbCBLVVJMOjpwcm90b2NvbElzKGNvbnN0IGNoYXIqIHBy
b3RvY29sKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIHJldHVybiBE
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgLy8gRG8gdGhlIGNvbXBhcmlzb24gd2l0aG91dCBtYWtp
bmcgYSBuZXcgc3RyaW5nIG9iamVjdC4KKyAgICBhc3NlcnRQcm90b2NvbElzR29vZChwcm90b2Nv
bCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzY2hlbWVFbmRQb3M7ICsraSkgeworICAgICAg
ICBpZiAoIXByb3RvY29sW2ldIHx8IHRvQVNDSUlMb3dlcihtX3N0cmluZ1tpXSkgIT0gcHJvdG9j
b2xbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHJldHVybiAhcHJv
dG9jb2xbc2NoZW1lRW5kUG9zXTsgLy8gV2Ugc2hvdWxkIGhhdmUgY29uc3VtZWQgYWxsIGNoYXJh
Y3RlcnMgaW4gdGhlIGFyZ3VtZW50LgorfQogCi0gICAgcmV0dXJuIGRlY29kZV9zdHJpbmcodXJs
U3RyaW5nLm1pZChwb3J0RW5kUG9zLCBwYXRoRW5kUG9zIC0gcG9ydEVuZFBvcykpOyAKK1N0cmlu
ZyBLVVJMOjpxdWVyeSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBtX3N0cmluZy5zdWJzdHJpbmcocGF0aEVuZFBv
cywgcXVlcnlFbmRQb3MgLSBwYXRoRW5kUG9zKTsgCit9CisKK1N0cmluZyBLVVJMOjpwYXRoKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJzdHJpbmco
cG9ydEVuZFBvcywgcGF0aEVuZFBvcyAtIHBvcnRFbmRQb3MpKTsgCiB9CiAKLXZvaWQgS1VSTDo6
c2V0UHJvdG9jb2woY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0UHJv
dG9jb2woY29uc3QgU3RyaW5nJiBzKQogewogICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gcyArICI6IiArIHVybFN0cmluZzsKLSAgICAgICAg
cGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICBwYXJzZShzICsgIjoiICsg
bV9zdHJpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZFN0cmlu
ZyBuZXdVUkwgPSBzICsgdXJsU3RyaW5nLm1pZChzY2hlbWVFbmRQb3MpOwotICAgIHBhcnNlKG5l
d1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICBwYXJzZShzICsgbV9zdHJpbmcuc3Vic3RyaW5n
KHNjaGVtZUVuZFBvcykpOwogfQogCi12b2lkIEtVUkw6OnNldEhvc3QoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0SG9zdChjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAg
aWYgKG1faXNWYWxpZCkgewotICAgICAgICBib29sIHNsYXNoU2xhc2hOZWVkZWQgPSB1c2VyU3Rh
cnRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMTsKLSAgICAgICAgaW50IGhvc3RTdGFydCA9IChwYXNz
d29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVu
ZFBvcyArIDE7Ci0gICAgICAgIAotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVy
bFN0cmluZy5sZWZ0KGhvc3RTdGFydCkgKyAoc2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiBEZXBy
ZWNhdGVkU3RyaW5nKCkpICsgcyArIHVybFN0cmluZy5taWQoaG9zdEVuZFBvcyk7Ci0gICAgICAg
IHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKLSAgICB9CisgICAgaWYgKCFtX2lzVmFs
aWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgc2xhc2hTbGFzaE5lZWRlZCA9IHVzZXJT
dGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxOworICAgIGludCBob3N0U3RhcnQgPSAocGFzc3dv
cmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQ
b3MgKyAxOworCisgICAgcGFyc2UobV9zdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xh
c2hOZWVkZWQgPyAiLy8iIDogIiIpICsgcyArIG1fc3RyaW5nLnN1YnN0cmluZyhob3N0RW5kUG9z
KSk7CiB9CiAKIHZvaWQgS1VSTDo6c2V0UG9ydCh1bnNpZ25lZCBzaG9ydCBpKQogewotICAgIGlm
IChtX2lzVmFsaWQpIHsKLSAgICAgICAgYm9vbCBjb2xvbk5lZWRlZCA9IHBvcnRFbmRQb3MgPT0g
aG9zdEVuZFBvczsKLSAgICAgICAgaW50IHBvcnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IGhvc3RF
bmRQb3MgOiBob3N0RW5kUG9zICsgMSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJM
ID0gdXJsU3RyaW5nLmxlZnQocG9ydFN0YXJ0KSArIChjb2xvbk5lZWRlZCA/ICI6IiA6IERlcHJl
Y2F0ZWRTdHJpbmcoKSkgKyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaSkgKyB1cmxTdHJpbmcu
bWlkKHBvcnRFbmRQb3MpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7
Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBib29s
IGNvbG9uTmVlZGVkID0gcG9ydEVuZFBvcyA9PSBob3N0RW5kUG9zOworICAgIGludCBwb3J0U3Rh
cnQgPSAoY29sb25OZWVkZWQgPyBob3N0RW5kUG9zIDogaG9zdEVuZFBvcyArIDEpOworCisgICAg
cGFyc2UobV9zdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVkID8gIjoiIDogIiIp
ICsgU3RyaW5nOjpudW1iZXIoaSkgKyBtX3N0cmluZy5zdWJzdHJpbmcocG9ydEVuZFBvcykpOwog
fQogCi12b2lkIEtVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhv
c3RBbmRQb3J0KQordm9pZCBLVVJMOjpzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJpbmcmIGhvc3RB
bmRQb3J0KQogewotICAgIGlmIChtX2lzVmFsaWQpIHsKLSAgICAgICAgYm9vbCBzbGFzaFNsYXNo
TmVlZGVkID0gdXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7Ci0gICAgICAgIGludCBo
b3N0U3RhcnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5k
UG9zIDogcGFzc3dvcmRFbmRQb3MgKyAxOwotICAgICAgICAKLSAgICAgICAgRGVwcmVjYXRlZFN0
cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVk
ZWQgPyAiLy8iIDogRGVwcmVjYXRlZFN0cmluZygpKSArIGhvc3RBbmRQb3J0ICsgdXJsU3RyaW5n
Lm1pZChwb3J0RW5kUG9zKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwp
OwotICAgIH0KKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9v
bCBzbGFzaFNsYXNoTmVlZGVkID0gdXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7Cisg
ICAgaW50IGhvc3RTdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFz
c3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7CisKKyAgICBwYXJzZShtX3N0cmluZy5s
ZWZ0KGhvc3RTdGFydCkgKyAoc2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiAiIikgKyBob3N0QW5k
UG9ydCArIG1fc3RyaW5nLnN1YnN0cmluZyhwb3J0RW5kUG9zKSk7CiB9CiAKLXZvaWQgS1VSTDo6
c2V0VXNlcihjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1c2VyKQordm9pZCBLVVJMOjpzZXRVc2Vy
KGNvbnN0IFN0cmluZyYgdXNlcikKIHsKLSAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIERl
cHJlY2F0ZWRTdHJpbmcgdTsKLSAgICAgICAgaW50IGVuZCA9IHVzZXJFbmRQb3M7Ci0gICAgICAg
IGlmICghdXNlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHUgPSB1c2VyOwotICAgICAgICAg
ICAgaWYgKHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxKQotICAgICAgICAgICAgICAg
IHUgPSAiLy8iICsgdTsKLSAgICAgICAgICAgIC8vIEFkZCAnQCcgaWYgd2UgZGlkbid0IGhhdmUg
b25lIGJlZm9yZS4KLSAgICAgICAgICAgIGlmIChlbmQgPT0gaG9zdEVuZFBvcyB8fCAoZW5kID09
IHBhc3N3b3JkRW5kUG9zICYmIHVybFN0cmluZ1tlbmRdICE9ICdAJykpCi0gICAgICAgICAgICAg
ICAgdSArPSAnQCc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgJ0An
IGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dvcmQuCi0gICAgICAgICAgICBp
ZiAodXNlckVuZFBvcyA9PSBwYXNzd29yZEVuZFBvcyAmJiBlbmQgIT0gaG9zdEVuZFBvcyAmJiB1
cmxTdHJpbmdbZW5kXSA9PSAnQCcpCi0gICAgICAgICAgICAgICAgZW5kICs9IDE7Ci0gICAgICAg
IH0KLSAgICAgICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVm
dCh1c2VyU3RhcnRQb3MpICsgdSArIHVybFN0cmluZy5taWQoZW5kKTsKLSAgICAgICAgcGFyc2Uo
bmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBTdHJpbmcgdTsKKyAgICBpbnQgZW5kID0gdXNlckVuZFBvczsKKyAgICBp
ZiAoIXVzZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIHUgPSB1c2VyOworICAgICAgICBpZiAodXNl
clN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDEpCisgICAgICAgICAgICB1ID0gIi8vIiArIHU7
CisgICAgICAgIC8vIEFkZCAnQCcgaWYgd2UgZGlkbid0IGhhdmUgb25lIGJlZm9yZS4KKyAgICAg
ICAgaWYgKGVuZCA9PSBob3N0RW5kUG9zIHx8IChlbmQgPT0gcGFzc3dvcmRFbmRQb3MgJiYgbV9z
dHJpbmdbZW5kXSAhPSAnQCcpKQorICAgICAgICAgICAgdS5hcHBlbmQoJ0AnKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBu
b3IgcGFzc3dvcmQuCisgICAgICAgIGlmICh1c2VyRW5kUG9zID09IHBhc3N3b3JkRW5kUG9zICYm
IGVuZCAhPSBob3N0RW5kUG9zICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAgICAgICAgICAg
ZW5kICs9IDE7CiAgICAgfQorICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQodXNlclN0YXJ0UG9zKSAr
IHUgKyBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSk7CiB9CiAKLXZvaWQgS1VSTDo6c2V0UGFzcyhj
b25zdCBEZXByZWNhdGVkU3RyaW5nICZwYXNzd29yZCkKLXsKLSAgICBpZiAobV9pc1ZhbGlkKSB7
Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcDsKLSAgICAgICAgaW50IGVuZCA9IHBhc3N3b3Jk
RW5kUG9zOwotICAgICAgICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
cCA9ICc6JyArIHBhc3N3b3JkICsgJ0AnOwotICAgICAgICAgICAgaWYgKHVzZXJFbmRQb3MgPT0g
c2NoZW1lRW5kUG9zICsgMSkKLSAgICAgICAgICAgICAgICBwID0gIi8vIiArIHA7Ci0gICAgICAg
ICAgICAvLyBFYXQgdGhlIGV4aXN0aW5nICdAJyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYWRkIG91
ciBvd24uCi0gICAgICAgICAgICBpZiAoZW5kICE9IGhvc3RFbmRQb3MgJiYgdXJsU3RyaW5nW2Vu
ZF0gPT0gJ0AnKQotICAgICAgICAgICAgICAgIGVuZCArPSAxOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gUmVtb3ZlICdAJyBpZiB3ZSBub3cgaGF2ZSBuZWl0aGVyIHVzZXIgbm9y
IHBhc3N3b3JkLgotICAgICAgICAgICAgaWYgKHVzZXJTdGFydFBvcyA9PSB1c2VyRW5kUG9zICYm
IGVuZCAhPSBob3N0RW5kUG9zICYmIHVybFN0cmluZ1tlbmRdID09ICdAJykKLSAgICAgICAgICAg
ICAgICBlbmQgKz0gMTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5n
IG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHVzZXJFbmRQb3MpICsgcCArIHVybFN0cmluZy5taWQo
ZW5kKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwordm9pZCBLVVJM
OjpzZXRQYXNzKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgaWYgKCFtX2lzVmFsaWQp
CisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBwOworICAgIGludCBlbmQgPSBwYXNzd29y
ZEVuZFBvczsKKyAgICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgeworICAgICAgICBwID0gIjoi
ICsgcGFzc3dvcmQgKyAiQCI7CisgICAgICAgIGlmICh1c2VyRW5kUG9zID09IHNjaGVtZUVuZFBv
cyArIDEpCisgICAgICAgICAgICBwID0gIi8vIiArIHA7CisgICAgICAgIC8vIEVhdCB0aGUgZXhp
c3RpbmcgJ0AnIHNpbmNlIHdlIGFyZSBnb2luZyB0byBhZGQgb3VyIG93bi4KKyAgICAgICAgaWYg
KGVuZCAhPSBob3N0RW5kUG9zICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAgICAgICAgICAg
ZW5kICs9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVtb3ZlICdAJyBpZiB3ZSBub3cg
aGF2ZSBuZWl0aGVyIHVzZXIgbm9yIHBhc3N3b3JkLgorICAgICAgICBpZiAodXNlclN0YXJ0UG9z
ID09IHVzZXJFbmRQb3MgJiYgZW5kICE9IGhvc3RFbmRQb3MgJiYgbV9zdHJpbmdbZW5kXSA9PSAn
QCcpCisgICAgICAgICAgICBlbmQgKz0gMTsKICAgICB9CisgICAgcGFyc2UobV9zdHJpbmcubGVm
dCh1c2VyRW5kUG9zKSArIHAgKyBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSk7CiB9CiAKLXZvaWQg
S1VSTDo6c2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldFJl
Zihjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgaWYgKG1faXNWYWxpZCkgewotICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHF1ZXJ5RW5kUG9zKSArIChzLmlz
RW1wdHkoKSA/IERlcHJlY2F0ZWRTdHJpbmcoKSA6ICIjIiArIHMpOwotICAgICAgICBwYXJzZShu
ZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAg
ICAgICByZXR1cm47CisgICAgcGFyc2UobV9zdHJpbmcubGVmdChxdWVyeUVuZFBvcykgKyAocy5p
c0VtcHR5KCkgPyAiIiA6ICIjIiArIHMpKTsKIH0KIAotdm9pZCBLVVJMOjpzZXRRdWVyeShjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZxdWVyeSkKK3ZvaWQgS1VSTDo6c2V0UXVlcnkoY29uc3QgU3Ry
aW5nJiBxdWVyeSkKIHsKLSAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgcTsKLSAgICAgICAgaWYgKCFxdWVyeS5pc051bGwoKSAmJiAocXVlcnkuaXNFbXB0eSgp
IHx8IHF1ZXJ5WzBdICE9ICc/JykpIHsKLSAgICAgICAgICAgIHEgPSAiPyIgKyBxdWVyeTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHEgPSBxdWVyeTsKLSAgICAgICAgfQorICAgIGlm
ICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoKHF1ZXJ5LmlzRW1wdHko
KSB8fCBxdWVyeVswXSAhPSAnPycpICYmICFxdWVyeS5pc051bGwoKSkKKyAgICAgICAgcGFyc2Uo
bV9zdHJpbmcubGVmdChwYXRoRW5kUG9zKSArICI/IiArIHF1ZXJ5ICsgbV9zdHJpbmcuc3Vic3Ry
aW5nKHF1ZXJ5RW5kUG9zKSk7CisgICAgZWxzZQorICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0
KHBhdGhFbmRQb3MpICsgcXVlcnkgKyBtX3N0cmluZy5zdWJzdHJpbmcocXVlcnlFbmRQb3MpKTsK
IAotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBhdGhF
bmRQb3MpICsgcSArIHVybFN0cmluZy5taWQocXVlcnlFbmRQb3MpOwotICAgICAgICBwYXJzZShu
ZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0gICAgfQogfQogCi12b2lkIEtVUkw6OnNldFBhdGgo
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBTdHJp
bmcmIHMpCiB7Ci0gICAgaWYgKG1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRFbmRQb3MpICsgZW5jb2RlX3N0cmluZyhzKSAr
IHVybFN0cmluZy5taWQocGF0aEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgp
LCAmbmV3VVJMKTsKLSAgICB9CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsK
KworICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQocG9ydEVuZFBvcykgKyBlbmNvZGVXaXRoVVJMRXNj
YXBlU2VxdWVuY2VzKHMpICsgbV9zdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmRQb3MpKTsKIH0KIAot
RGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAorU3RyaW5nIEtVUkw6OnBy
ZXR0eVVSTCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJu
IHVybFN0cmluZzsKLSAgICB9CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBt
X3N0cmluZzsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0ID0gcHJvdG9jb2woKSArICI6
IjsKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXV0
aG9yaXR5OworICAgIGFwcGVuZChyZXN1bHQsIHByb3RvY29sKCkpOworICAgIHJlc3VsdC5hcHBl
bmQoJzonKTsKKworICAgIFZlY3RvcjxVQ2hhcj4gYXV0aG9yaXR5OwogCiAgICAgaWYgKGhvc3RF
bmRQb3MgIT0gcGFzc3dvcmRFbmRQb3MpIHsKICAgICAgICAgaWYgKHVzZXJFbmRQb3MgIT0gdXNl
clN0YXJ0UG9zKSB7Ci0gICAgICAgICAgICBhdXRob3JpdHkgKz0gdXNlcigpOwotICAgICAgICAg
ICAgYXV0aG9yaXR5ICs9ICJAIjsKKyAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIHVzZXIo
KSk7CisgICAgICAgICAgICBhdXRob3JpdHkuYXBwZW5kKCdAJyk7CiAgICAgICAgIH0KLSAgICAg
ICAgYXV0aG9yaXR5ICs9IGhvc3QoKTsKKyAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgaG9zdCgp
KTsKICAgICAgICAgaWYgKHBvcnQoKSAhPSAwKSB7Ci0gICAgICAgICAgICBhdXRob3JpdHkgKz0g
IjoiOwotICAgICAgICAgICAgYXV0aG9yaXR5ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihw
b3J0KCkpOworICAgICAgICAgICAgYXV0aG9yaXR5LmFwcGVuZCgnOicpOworICAgICAgICAgICAg
YXBwZW5kKGF1dGhvcml0eSwgU3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoIWF1dGhvcml0eS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdCArPSAi
Ly8iICsgYXV0aG9yaXR5OwotICAgIGVsc2UgaWYgKHByb3RvY29sKCkgPT0gImZpbGUiKQotICAg
ICAgICByZXN1bHQgKz0gIi8vIjsKKyAgICBpZiAoIWF1dGhvcml0eS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYXV0aG9yaXR5KTsKKyAgICB9IGVsc2UgaWYgKHByb3RvY29s
SXMoImZpbGUiKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJy8nKTsKKyAgICB9CiAKLSAgICByZXN1bHQgKz0gcGF0aCgpOwotICAgIHJlc3Vs
dCArPSBxdWVyeSgpOworICAgIGFwcGVuZChyZXN1bHQsIHBhdGgoKSk7CisgICAgYXBwZW5kKHJl
c3VsdCwgcXVlcnkoKSk7CiAKICAgICBpZiAoZnJhZ21lbnRFbmRQb3MgIT0gcXVlcnlFbmRQb3Mp
IHsKLSAgICAgICAgcmVzdWx0ICs9ICIjIiArIHJlZigpOworICAgICAgICByZXN1bHQuYXBwZW5k
KCcjJyk7CisgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlZigpKTsKICAgICB9CiAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CiB9CiAKLURlcHJl
Y2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1
cmxTdHJpbmcpCitTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYg
c3RyKQogewotICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZywgVVRGOEVuY29kaW5n
KCkpOworICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoc3RyLCBVVEY4RW5jb2Rp
bmcoKSk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBE
ZXByZWNhdGVkU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
CitTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyLCBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0
KCIiKTsKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKIAotICAgIFZlY3RvcjxjaGFyLCAyMDQ4
PiBidWZmZXIoMCk7CisgICAgQ2hhckJ1ZmZlciBidWZmZXI7CiAKLSAgICBpbnQgbGVuZ3RoID0g
dXJsU3RyaW5nLmxlbmd0aCgpOworICAgIGludCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAg
aW50IGRlY29kZWRQb3NpdGlvbiA9IDA7CiAgICAgaW50IHNlYXJjaFBvc2l0aW9uID0gMDsKICAg
ICBpbnQgZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9u
ID0gdXJsU3RyaW5nLmZpbmQoJyUnLCBzZWFyY2hQb3NpdGlvbikpID49IDApIHsKKyAgICB3aGls
ZSAoKGVuY29kZWRSdW5Qb3NpdGlvbiA9IHN0ci5maW5kKCclJywgc2VhcmNoUG9zaXRpb24pKSA+
PSAwKSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIHNlcXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgog
ICAgICAgICBpbnQgZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICAgICAg
d2hpbGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQgPj0gMwotICAgICAgICAgICAgICAgICYmIHVy
bFN0cmluZ1tlbmNvZGVkUnVuRW5kXSA9PSAnJScKLSAgICAgICAgICAgICAgICAmJiBpc0hleERp
Z2l0KHVybFN0cmluZ1tlbmNvZGVkUnVuRW5kICsgMV0ubGF0aW4xKCkpCi0gICAgICAgICAgICAg
ICAgJiYgaXNIZXhEaWdpdCh1cmxTdHJpbmdbZW5jb2RlZFJ1bkVuZCArIDJdLmxhdGluMSgpKSkK
KyAgICAgICAgICAgICAgICAmJiBzdHJbZW5jb2RlZFJ1bkVuZF0gPT0gJyUnCisgICAgICAgICAg
ICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cltlbmNvZGVkUnVuRW5kICsgMV0pCisgICAgICAg
ICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cltlbmNvZGVkUnVuRW5kICsgMl0pKQogICAg
ICAgICAgICAgZW5jb2RlZFJ1bkVuZCArPSAzOwogICAgICAgICBpZiAoZW5jb2RlZFJ1bkVuZCA9
PSBlbmNvZGVkUnVuUG9zaXRpb24pIHsKICAgICAgICAgICAgICsrc2VhcmNoUG9zaXRpb247CkBA
IC03ODQsMTYgKzgxMSwxMiBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmco
Y29uCiAgICAgICAgIH0KICAgICAgICAgc2VhcmNoUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwog
Ci0gICAgICAgIC8vIENvcHkgdGhlIGVudGlyZSAlLWVzY2FwZSBzZXF1ZW5jZSBpbnRvIGFuIDgt
Yml0IGJ1ZmZlci4KLSAgICAgICAgaW50IGVuY29kZWRSdW5MZW5ndGggPSBlbmNvZGVkUnVuRW5k
IC0gZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgICAgICBidWZmZXIuY2xlYXIoKTsKLSAgICAgICAg
YnVmZmVyLmdyb3coZW5jb2RlZFJ1bkxlbmd0aCArIDEpOwotICAgICAgICB1cmxTdHJpbmcuY29w
eUxhdGluMShidWZmZXIuZGF0YSgpLCBlbmNvZGVkUnVuUG9zaXRpb24sIGVuY29kZWRSdW5MZW5n
dGgpOwotCiAgICAgICAgIC8vIERlY29kZSB0aGUgJS1lc2NhcGVzIGludG8gYnl0ZXMuCi0gICAg
ICAgIGNoYXIgKnAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICBjb25zdCBjaGFyICpxID0gYnVm
ZmVyLmRhdGEoKTsKLSAgICAgICAgd2hpbGUgKCpxKSB7CisgICAgICAgIHVuc2lnbmVkIHJ1bkxl
bmd0aCA9IChlbmNvZGVkUnVuRW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uKSAvIDM7CisgICAgICAg
IGJ1ZmZlci5yZXNpemUocnVuTGVuZ3RoKTsKKyAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRh
KCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBxID0gc3RyLmNoYXJhY3RlcnMoKSArIGVuY29kZWRS
dW5Qb3NpdGlvbjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICAqcCsrID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBo
ZXhEaWdpdFZhbHVlKHFbMl0pOwogICAgICAgICAgICAgcSArPSAzOwogICAgICAgICB9CkBAIC04
MDQsMTMgKzgyNywxNCBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29u
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5n
IHdpdGggd2hhdCB3ZSBqdXN0IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgotICAg
ICAgICByZXN1bHQuYXBwZW5kKHVybFN0cmluZy5taWQoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVk
UnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChy
ZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4oZGVjb2RlZC5jaGFyYWN0ZXJz
KCkpLCBkZWNvZGVkLmxlbmd0aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFj
dGVycygpICsgZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9z
aXRpb24pOworICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQuY2hhcmFjdGVycygpLCBkZWNv
ZGVkLmxlbmd0aCgpKTsKICAgICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsK
ICAgICB9CiAKLSAgICByZXN1bHQuYXBwZW5kKHVybFN0cmluZy5taWQoZGVjb2RlZFBvc2l0aW9u
LCBsZW5ndGggLSBkZWNvZGVkUG9zaXRpb24pKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
c3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSArIGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0g
ZGVjb2RlZFBvc2l0aW9uKTsKKworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CiB9
CiAKIGJvb2wgS1VSTDo6aXNMb2NhbEZpbGUoKSBjb25zdApAQCAtODE5LDE1ICs4NDMsMTUgQEAg
Ym9vbCBLVVJMOjppc0xvY2FsRmlsZSgpIGNvbnN0CiAgICAgLy8gYW5kIGluY2x1ZGluZyBmZWVk
IHdvdWxkIGFsbG93IGZlZWRzIHRvIHBvdGVudGlhbGx5IGxldCBzb21lb25lJ3MgYmxvZwogICAg
IC8vIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjbGlwYm9hcmQgb24gYSBkcmFnLCBldmVuIHdp
dGhvdXQgYSBkcm9wLgogICAgIC8vIExpa2V3aXNlIHdpdGggdXNpbmcgdGhlIEZyYW1lTG9hZGVy
OjpzaG91bGRUcmVhdFVSTEFzTG9jYWwoKSBmdW5jdGlvbi4KLSAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UocHJvdG9jb2woKSwgImZpbGUiKTsKKyAgICByZXR1cm4gcHJvdG9jb2xJcygiZmls
ZSIpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIqJiBidWZm
ZXIsIGNvbnN0IGNoYXIgKnN0clN0YXJ0LCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIHZvaWQgYXBw
ZW5kRXNjYXBpbmdCYWRDaGFycyhjaGFyKiYgYnVmZmVyLCBjb25zdCBjaGFyKiBzdHJTdGFydCwg
c2l6ZV90IGxlbmd0aCkKIHsKLSAgICBjaGFyICpwID0gYnVmZmVyOworICAgIGNoYXIqIHAgPSBi
dWZmZXI7CiAKLSAgICBjb25zdCBjaGFyICpzdHIgPSBzdHJTdGFydDsKLSAgICBjb25zdCBjaGFy
ICpzdHJFbmQgPSBzdHJTdGFydCArIGxlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBzdHIgPSBzdHJT
dGFydDsKKyAgICBjb25zdCBjaGFyKiBzdHJFbmQgPSBzdHJTdGFydCArIGxlbmd0aDsKICAgICB3
aGlsZSAoc3RyIDwgc3RyRW5kKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpzdHIrKzsK
ICAgICAgICAgaWYgKGlzQmFkQ2hhcihjKSkgewpAQCAtODQyLDIwICs4NjYsMjAgQEAgc3RhdGlj
IHZvaWQgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhjaGFyKgogICAgICAgICAgICAgKnArKyA9IGM7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBidWZmZXIgPSBwOwogfQogCiAvLyBjb3B5
IGEgcGF0aCwgYWNjb3VudGluZyBmb3IgIi4iIGFuZCAiLi4iIHNlZ21lbnRzCi1zdGF0aWMgaW50
IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgc3Jj
U3RhcnQsIGludCBzcmNFbmQpCitzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIq
IGRzdCwgY29uc3QgY2hhciogc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQpCiB7Ci0gICAg
Y2hhciAqYnVmZmVyUGF0aFN0YXJ0ID0gZHN0OworICAgIGNoYXIqIGJ1ZmZlclBhdGhTdGFydCA9
IGRzdDsKIAogICAgIC8vIGVtcHR5IHBhdGggaXMgYSBzcGVjaWFsIGNhc2UsIGFuZCBuZWVkIG5v
dCBoYXZlIGEgbGVhZGluZyBzbGFzaAogICAgIGlmIChzcmNTdGFydCAhPSBzcmNFbmQpIHsKLSAg
ICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1N0YXJ0ID0gc3JjICsgc3JjU3RhcnQ7Ci0gICAg
ICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmdFbmQgPSBzcmMgKyBzcmNFbmQ7Ci0gICAgICAgIGNv
bnN0IGNoYXIgKmJhc2VTdHJpbmdQb3MgPSBiYXNlU3RyaW5nU3RhcnQ7CisgICAgICAgIGNvbnN0
IGNoYXIqIGJhc2VTdHJpbmdTdGFydCA9IHNyYyArIHNyY1N0YXJ0OworICAgICAgICBjb25zdCBj
aGFyKiBiYXNlU3RyaW5nRW5kID0gc3JjICsgc3JjRW5kOworICAgICAgICBjb25zdCBjaGFyKiBi
YXNlU3RyaW5nUG9zID0gYmFzZVN0cmluZ1N0YXJ0OwogCiAgICAgICAgIC8vIHRoaXMgY29kZSBp
cyB1bnByZXBhcmVkIGZvciBwYXRocyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRoIGEKICAgICAgICAg
Ly8gc2xhc2ggYW5kIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBvbmUgaW4gdGhlIHNvdXJjZSBzdHJp
bmcKQEAgLTkwNCw5ICs5MjgsOSBAQCBzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNo
YXIgKmRzCiAgICAgcmV0dXJuIGRzdCAtIGJ1ZmZlclBhdGhTdGFydDsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIGhhc1NsYXNoRG90T3JEb3REb3QoY29uc3QgY2hhciAqc3RyKQorc3RhdGljIGlu
bGluZSBib29sIGhhc1NsYXNoRG90T3JEb3REb3QoY29uc3QgY2hhciogc3RyKQogewotICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIgKj4oc3RyKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3RyKTsKICAgICBpZiAoISpwKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgdW5zaWduZWQgY2hhciBwYyA9ICpwOwpAQCAtOTIzLDIxICs5NDcsMzAg
QEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoTGV0dGVyKGNoYXIgYywgYwogICAgIHJldHVybiAo
YyB8IDB4MjApID09IGxvd2VyY2FzZUxldHRlcjsKIH0KIAotdm9pZCBLVVJMOjpwYXJzZShjb25z
dCBjaGFyICp1cmwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgKm9yaWdpbmFsU3RyaW5nKQordm9p
ZCBLVVJMOjpwYXJzZShjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBGSVhNRTogVGhp
cyB0aHJvd3MgYXdheSB0aGUgaGlnaCBieXRlcyBvZiBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gdGhl
IHN0cmluZyEKKyAgICBDaGFyQnVmZmVyIGJ1ZmZlcihzdHJpbmcubGVuZ3RoKCkgKyAxKTsKKyAg
ICBjb3B5QVNDSUkoc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBidWZmZXIu
ZGF0YSgpKTsKKyAgICBidWZmZXJbc3RyaW5nLmxlbmd0aCgpXSA9ICdcMCc7CisgICAgcGFyc2Uo
YnVmZmVyLmRhdGEoKSwgJnN0cmluZyk7Cit9CisKK3ZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBTdHJpbmcqIG9yaWdpbmFsU3RyaW5nKQogewogICAgIG1faXNWYWxpZCA9
IHRydWU7CiAKICAgICBpZiAoIXVybCB8fCB1cmxbMF0gPT0gJ1wwJykgewogICAgICAgICAvLyB2
YWxpZCBVUkwgbXVzdCBiZSBub24tZW1wdHkKKyAgICAgICAgbV9zdHJpbmcgPSBvcmlnaW5hbFN0
cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7
Ci0gICAgICAgIHVybFN0cmluZyA9IHVybDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmICghaXNTY2hlbWVGaXJzdENoYXIodXJsWzBdKSkgewogICAgICAgICAvLyBzY2hlbWUgbXVz
dCBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyCisgICAgICAgIG1fc3RyaW5nID0g
b3JpZ2luYWxTdHJpbmcgPyAqb3JpZ2luYWxTdHJpbmcgOiB1cmw7CiAgICAgICAgIG1faXNWYWxp
ZCA9IGZhbHNlOwotICAgICAgICB1cmxTdHJpbmcgPSB1cmw7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTk0OCw4ICs5ODEsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVy
bCwgY29uc3QgCiAgICAgfQogCiAgICAgaWYgKHVybFtzY2hlbWVFbmRdICE9ICc6JykgeworICAg
ICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwog
ICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgdXJsU3RyaW5nID0gdXJsOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC05NjcsNyArMTAwMCw3IEBAIHZvaWQgS1VSTDo6cGFy
c2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICBpZiAoaGllcmFyY2hpY2FsICYmIHVybFtz
Y2hlbWVFbmQgKyAyXSA9PSAnLycpIHsKICAgICAgICAgLy8gcGFydCBhZnRlciB0aGUgc2NoZW1l
IG11c3QgYmUgYSBuZXRfcGF0aCwgcGFyc2UgdGhlIGF1dGhvcml0eSBzZWN0aW9uCiAKLSAgICAg
ICAgLy8gRklYTUU6IGF1dGhvcml0eSBjaGFyYWN0ZXJzIG1heSBiZSBzY2FubmVkIHR3aWNlCisg
ICAgICAgIC8vIEZJWE1FOiBBdXRob3JpdHkgY2hhcmFjdGVycyBtYXkgYmUgc2Nhbm5lZCB0d2lj
ZS4KICAgICAgICAgdXNlclN0YXJ0ICs9IDI7CiAgICAgICAgIHVzZXJFbmQgPSB1c2VyU3RhcnQ7
CiAKQEAgLTk3OCw3ICsxMDExLDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmws
IGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdXNlckVuZCsrOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh1cmxbdXNlckVuZF0gPT0gJ0AnKSB7CiAgICAgICAg
ICAgICAvLyBhY3R1YWwgZW5kIG9mIHRoZSB1c2VyaW5mbywgc3RhcnQgb24gdGhlIGhvc3QKICAg
ICAgICAgICAgIGlmIChjb2xvblBvcyAhPSAwKSB7CkBAIC05OTgsOCArMTAzMSw4IEBAIHZvaWQg
S1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgICAgIGhvc3RTdGFy
dCA9IHVzZXJTdGFydDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIGludmFsaWQg
Y2hhcmFjdGVyCisgICAgICAgICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdp
bmFsU3RyaW5nIDogdXJsOwogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
ICAgICB1cmxTdHJpbmcgPSB1cmw7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMTAxNSw4ICsxMDQ4LDggQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNv
bnN0IAogICAgICAgICAgICAgICAgIGhvc3RFbmQrKzsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBtX3N0
cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwogICAgICAgICAg
ICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHVybFN0cmluZyA9IHVy
bDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xMDM5LDggKzEwNzIsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVy
bCwgY29uc3QgCiAKICAgICAgICAgaWYgKCFpc1BhdGhTZWdtZW50RW5kQ2hhcih1cmxbcG9ydEVu
ZF0pKSB7CiAgICAgICAgICAgICAvLyBpbnZhbGlkIGNoYXJhY3RlcgorICAgICAgICAgICAgbV9z
dHJpbmcgPSBvcmlnaW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKICAgICAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgdXJsU3RyaW5nID0gdXJsOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTEwNTAsNyArMTA4
Myw3IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAg
aG9zdFN0YXJ0ID0gaG9zdEVuZCA9IHBhc3N3b3JkRW5kOwogICAgICAgICBwb3J0U3RhcnQgPSBw
b3J0RW5kID0gaG9zdEVuZDsKICAgICB9Ci0gICAgICAgIAorCiAgICAgaW50IHBhdGhTdGFydCA9
IHBvcnRFbmQ7CiAgICAgaW50IHBhdGhFbmQgPSBwYXRoU3RhcnQ7CiAgICAgaW50IHF1ZXJ5U3Rh
cnQ7CkBAIC0xMDYxLDE0ICsxMDk0LDE0IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAq
dXJsLCBjb25zdCAKICAgICBpZiAoIWhpZXJhcmNoaWNhbCkgewogICAgICAgICB3aGlsZSAodXJs
W3BhdGhFbmRdICE9ICdcMCcgJiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0aEVuZF0g
IT0gJyMnKQogICAgICAgICAgICAgcGF0aEVuZCsrOwotICAgICAgICAKKwogICAgICAgICBxdWVy
eVN0YXJ0ID0gcGF0aEVuZDsKICAgICAgICAgcXVlcnlFbmQgPSBxdWVyeVN0YXJ0OwogICAgICAg
ICBpZiAodXJsW3F1ZXJ5U3RhcnRdID09ICc/JykgewogICAgICAgICAgICAgd2hpbGUgKHVybFtx
dWVyeUVuZF0gIT0gJ1wwJyAmJiB1cmxbcXVlcnlFbmRdICE9ICcjJykKICAgICAgICAgICAgICAg
ICBxdWVyeUVuZCsrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZyYWdtZW50U3Rh
cnQgPSBxdWVyeUVuZDsKICAgICAgICAgZnJhZ21lbnRFbmQgPSBmcmFnbWVudFN0YXJ0OwogICAg
ICAgICBpZiAodXJsW2ZyYWdtZW50U3RhcnRdID09ICcjJykgewpAQCAtMTA3NiwxMyArMTEwOSwx
MyBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAg
ICBmcmFnbWVudEVuZCA9IGZyYWdtZW50U3RhcnQ7CiAgICAgICAgICAgICB3aGlsZSAodXJsW2Zy
YWdtZW50RW5kXSAhPSAnXDAnKQogICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kKys7Ci0gICAg
ICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3aGls
ZSAodXJsW3BhdGhFbmRdICE9ICdcMCcgJiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0
aEVuZF0gIT0gJyMnKSB7CiAgICAgICAgICAgICBwYXRoRW5kKys7CiAgICAgICAgIH0KLSAgICAK
KwogICAgICAgICBxdWVyeVN0YXJ0ID0gcGF0aEVuZDsKICAgICAgICAgcXVlcnlFbmQgPSBxdWVy
eVN0YXJ0OwogICAgICAgICBpZiAodXJsW3F1ZXJ5U3RhcnRdID09ICc/JykgewpAQCAtMTA5MCw3
ICsxMTIzLDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAg
ICAgICAgICAgICAgIHF1ZXJ5RW5kKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgZnJhZ21lbnRTdGFydCA9IHF1ZXJ5RW5kOwogICAgICAgICBmcmFnbWVu
dEVuZCA9IGZyYWdtZW50U3RhcnQ7CiAgICAgICAgIGlmICh1cmxbZnJhZ21lbnRTdGFydF0gPT0g
JyMnKSB7CkBAIC0xMTExLDkgKzExNDQsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIg
KnVybCwgY29uc3QgCiAKICAgICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKICAgICBjb25zdCBjaGFy
ICpzY2hlbWVFbmRQdHIgPSB1cmwgKyBzY2hlbWVFbmQ7Ci0gICAgd2hpbGUgKHN0clB0ciA8IHNj
aGVtZUVuZFB0cikgeworICAgIHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCiAgICAgICAg
ICpwKysgPSAqc3RyUHRyKys7Ci0gICAgfQogICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXIu
ZGF0YSgpOwogCiAgICAgLy8gQ2hlY2sgaWYgd2UncmUgaHR0cCBvciBodHRwcy4KQEAgLTExNDAs
MTIgKzExNzIsMTIgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAog
ICAgICAgICAmJiBtYXRjaExldHRlcih1cmxbMl0sICdsJykKICAgICAgICAgJiYgbWF0Y2hMZXR0
ZXIodXJsWzNdLCAnZScpCiAgICAgICAgICYmIHVybFs0XSA9PSAnOic7Ci0gICAgICAgIAorCiAg
ICAgLy8gRmlsZSBVUkxzIG5lZWQgYSBob3N0IHBhcnQgdW5sZXNzIGl0IGlzIGp1c3QgZmlsZTov
LyBvciBmaWxlOi8vbG9jYWxob3N0CiAgICAgYm9vbCBkZWdlbkZpbGVQYXRoID0gcGF0aFN0YXJ0
ID09IHBhdGhFbmQKICAgICAgICAgJiYgKGhvc3RTdGFydCA9PSBob3N0RW5kCiAgICAgICAgICAg
ICB8fCBob3N0SXNMb2NhbEhvc3QpOwotICAgIAorCiAgICAgYm9vbCBoYXZlTm9uSG9zdEF1dGhv
cml0eVBhcnQgPSB1c2VyU3RhcnQgIT0gdXNlckVuZCB8fCBwYXNzd29yZFN0YXJ0ICE9IHBhc3N3
b3JkRW5kIHx8IHBvcnRTdGFydCAhPSBwb3J0RW5kOwogCiAgICAgLy8gYWRkICI6IiBhZnRlciBz
Y2hlbWUKQEAgLTExNjgsNDYgKzEyMDAsNDEgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFy
ICp1cmwsIGNvbnN0IAogCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHVzZXIKICAgICAgICAgc3Ry
UHRyID0gdXJsICsgdXNlclN0YXJ0OwotICAgICAgICBjb25zdCBjaGFyICp1c2VyRW5kUHRyID0g
dXJsICsgdXNlckVuZDsKLSAgICAgICAgd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogdXNlckVuZFB0ciA9IHVybCArIHVzZXJFbmQ7CisgICAgICAgIHdo
aWxlIChzdHJQdHIgPCB1c2VyRW5kUHRyKQogICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsK
LSAgICAgICAgfQogICAgICAgICB1c2VyRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAg
ICAgIAorCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHBhc3N3b3JkCiAgICAgICAgIGlmIChwYXNz
d29yZEVuZCAhPSBwYXNzd29yZFN0YXJ0KSB7CiAgICAgICAgICAgICAqcCsrID0gJzonOwogICAg
ICAgICAgICAgc3RyUHRyID0gdXJsICsgcGFzc3dvcmRTdGFydDsKLSAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnBhc3N3b3JkRW5kUHRyID0gdXJsICsgcGFzc3dvcmRFbmQ7Ci0gICAgICAgICAgICB3
aGlsZSAoc3RyUHRyIDwgcGFzc3dvcmRFbmRQdHIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHBhc3N3b3JkRW5kUHRyID0gdXJsICsgcGFzc3dvcmRFbmQ7CisgICAgICAgICAgICB3aGlsZSAo
c3RyUHRyIDwgcGFzc3dvcmRFbmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIr
KzsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwYXNzd29yZEVuZFBvcyA9IHAg
LSBidWZmZXIuZGF0YSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBJZiB3ZSBoYWQgYW55IHVz
ZXIgaW5mbywgYWRkICJAIgotICAgICAgICBpZiAocCAtIGJ1ZmZlci5kYXRhKCkgIT0gdXNlclN0
YXJ0UG9zKSB7CisgICAgICAgIGlmIChwIC0gYnVmZmVyLmRhdGEoKSAhPSB1c2VyU3RhcnRQb3Mp
CiAgICAgICAgICAgICAqcCsrID0gJ0AnOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIGNvcHkgaW4gdGhlIGhvc3QsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIGZpbGUgVVJMIHdp
dGggYXV0aG9yaXR5PSJsb2NhbGhvc3QiCiAgICAgICAgIGlmICghKGlzRmlsZSAmJiBob3N0SXNM
b2NhbEhvc3QgJiYgIWhhdmVOb25Ib3N0QXV0aG9yaXR5UGFydCkpIHsKICAgICAgICAgICAgIHN0
clB0ciA9IHVybCArIGhvc3RTdGFydDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RFbmRQ
dHIgPSB1cmwgKyBob3N0RW5kOwotICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQ
dHIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGhvc3RFbmRQdHIgPSB1cmwgKyBob3N0RW5k
OworICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpCiAgICAgICAgICAgICAg
ICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBo
b3N0RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNv
cHkgaW4gdGhlIHBvcnQKICAgICAgICAgaWYgKGhvc3RFbmQgIT0gcG9ydFN0YXJ0KSB7CiAgICAg
ICAgICAgICAqcCsrID0gJzonOwogICAgICAgICAgICAgc3RyUHRyID0gdXJsICsgcG9ydFN0YXJ0
OwogICAgICAgICAgICAgY29uc3QgY2hhciAqcG9ydEVuZFB0ciA9IHVybCArIHBvcnRFbmQ7Ci0g
ICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgcG9ydEVuZFB0cikgeworICAgICAgICAgICAgd2hp
bGUgKHN0clB0ciA8IHBvcnRFbmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIr
KzsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwb3J0RW5kUG9zID0gcCAtIGJ1
ZmZlci5kYXRhKCk7CiAgICAgfSBlbHNlIHsKQEAgLTEyMTYsMjYgKzEyNDMsMjMgQEAgdm9pZCBL
VVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogCiAgICAgLy8gRm9yIGNhbm9uaWNh
bGl6YXRpb24sIGVuc3VyZSB3ZSBoYXZlIGEgJy8nIGZvciBubyBwYXRoLgogICAgIC8vIE9ubHkg
ZG8gdGhpcyBmb3IgaHR0cCBhbmQgaHR0cHMuCi0gICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0
aEVuZCAtIHBhdGhTdGFydCA9PSAwKSB7CisgICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0aEVu
ZCAtIHBhdGhTdGFydCA9PSAwKQogICAgICAgICAqcCsrID0gJy8nOwotICAgIH0KLSAgICAgICAK
KwogICAgIC8vIGFkZCBwYXRoLCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwotICAgIAogICAgIGlm
IChoaWVyYXJjaGljYWwgJiYgaGFzU2xhc2hEb3RPckRvdERvdCh1cmwpKSB7Ci0gICAgICAgIFZl
Y3RvcjxjaGFyLCA0MDk2PiBwYXRoX2J1ZmZlcihwYXRoRW5kIC0gcGF0aFN0YXJ0ICsgMSk7Cisg
ICAgICAgIENoYXJCdWZmZXIgcGF0aF9idWZmZXIocGF0aEVuZCAtIHBhdGhTdGFydCArIDEpOwog
ICAgICAgICBjb3B5UGF0aFJlbW92aW5nRG90cyhwYXRoX2J1ZmZlci5kYXRhKCksIHVybCwgcGF0
aFN0YXJ0LCBwYXRoRW5kKTsKICAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCBwYXRo
X2J1ZmZlci5kYXRhKCksIHN0cmxlbihwYXRoX2J1ZmZlci5kYXRhKCkpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBwYXRoU3RhcnQsIHBhdGhF
bmQgLSBwYXRoU3RhcnQpOwogCiAgICAgcGF0aEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwot
ICAgIAotICAgIAorCiAgICAgLy8gYWRkIHF1ZXJ5LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwog
ICAgIGFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcXVlcnlTdGFydCwgcXVlcnlFbmQg
LSBxdWVyeVN0YXJ0KTsKICAgICBxdWVyeUVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAg
IAorCiAgICAgLy8gYWRkIGZyYWdtZW50LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwogICAgIGlm
IChmcmFnbWVudEVuZCAhPSBxdWVyeUVuZCkgewogICAgICAgICAqcCsrID0gJyMnOwpAQCAtMTI0
MywzNiArMTI2NywzNiBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3Qg
CiAgICAgfQogICAgIGZyYWdtZW50RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKLSAgICAv
LyBJZiB3ZSBkaWRuJ3QgZW5kIHVwIGFjdHVhbGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBzdHJp
bmcgYW5kCi0gICAgLy8gaXQgc3RhcnRlZCBhcyBhIERlcHJlY2F0ZWRTdHJpbmcsIGp1c3QgcmV1
c2UgaXQsIHRvIGF2b2lkIGV4dHJhCi0gICAgLy8gYWxsb2NhdGlvbi4KLSAgICBpZiAob3JpZ2lu
YWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9
PSAwKSB7Ci0gICAgICAgIHVybFN0cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKLSAgICB9IGVsc2UK
LSAgICAgICAgdXJsU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZyhidWZmZXIuZGF0YSgpLCBmcmFn
bWVudEVuZFBvcyk7Ci0KICAgICBBU1NFUlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGludClidWZm
ZXIuc2l6ZSgpKTsKLX0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtV
UkwgJmIpCi17Ci0gICAgcmV0dXJuIGEudXJsU3RyaW5nID09IGIudXJsU3RyaW5nOworICAgIC8v
IElmIHdlIGRpZG4ndCBlbmQgdXAgYWN0dWFsbHkgY2hhbmdpbmcgdGhlIG9yaWdpbmFsIHN0cmlu
ZyBhbmQKKyAgICAvLyBpdCB3YXMgYWxyZWFkeSBpbiBhIFN0cmluZywgcmV1c2UgaXQgdG8gYXZv
aWQgZXh0cmEgYWxsb2NhdGlvbi4KKyAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNtcChi
dWZmZXIuZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9PSAwKQorICAgICAgICBtX3N0cmlu
ZyA9ICpvcmlnaW5hbFN0cmluZzsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nID0gU3RyaW5n
KGJ1ZmZlci5kYXRhKCksIGZyYWdtZW50RW5kUG9zKTsKIH0KIAogYm9vbCBlcXVhbElnbm9yaW5n
UmVmKGNvbnN0IEtVUkwmIGEsIGNvbnN0IEtVUkwmIGIpCiB7Ci0gICAgcmV0dXJuIGEudXJsU3Ry
aW5nLmxlZnQoYS5xdWVyeUVuZFBvcykgPT0gYi51cmxTdHJpbmcubGVmdChiLnF1ZXJ5RW5kUG9z
KTsKKyAgICBpZiAoYS5xdWVyeUVuZFBvcyAhPSBiLnF1ZXJ5RW5kUG9zKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgdW5zaWduZWQgcXVlcnlMZW5ndGggPSBhLnF1ZXJ5RW5kUG9zOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBxdWVyeUxlbmd0aDsgKytpKQorICAgICAgICBpZiAo
YS5zdHJpbmcoKVtpXSAhPSBiLnN0cmluZygpW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9z
dHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgbm90RW5jb2RlZFN0cmluZykKK1N0cmluZyBl
bmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgbm90RW5jb2RlZFN0cmlu
ZykKIHsKLSAgICBEZXByZWNhdGVkQ1N0cmluZyBhc1VURjggPSBub3RFbmNvZGVkU3RyaW5nLnV0
ZjgoKTsKLSAgICAKLSAgICBWZWN0b3I8Y2hhciwgNDA5Nj4gYnVmZmVyKGFzVVRGOC5sZW5ndGgo
KSAqIDMgKyAxKTsKLSAgICBjaGFyICpwID0gYnVmZmVyLmRhdGEoKTsKKyAgICBDU3RyaW5nIGFz
VVRGOCA9IG5vdEVuY29kZWRTdHJpbmcudXRmOCgpOwogCi0gICAgY29uc3QgY2hhciAqc3RyID0g
YXNVVEY4OwotICAgIGNvbnN0IGNoYXIgKnN0ckVuZCA9IHN0ciArIGFzVVRGOC5sZW5ndGgoKTsK
KyAgICBDaGFyQnVmZmVyIGJ1ZmZlcihhc1VURjgubGVuZ3RoKCkgKiAzICsgMSk7CisgICAgY2hh
ciogcCA9IGJ1ZmZlci5kYXRhKCk7CisKKyAgICBjb25zdCBjaGFyKiBzdHIgPSBhc1VURjguZGF0
YSgpOworICAgIGNvbnN0IGNoYXIqIHN0ckVuZCA9IHN0ciArIGFzVVRGOC5sZW5ndGgoKTsKICAg
ICB3aGlsZSAoc3RyIDwgc3RyRW5kKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpzdHIr
KzsKICAgICAgICAgaWYgKGlzQmFkQ2hhcihjKSkgewpAQCAtMTI4Miw5NiArMTMwNiw5MiBAQCBE
ZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJpbmcoY29uCiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgfQotICAgIAotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVzdWx0KGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKLSAgICAKLSAgICBBU1NF
UlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGludClidWZmZXIuc2l6ZSgpKTsKIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgQVNTRVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IHN0YXRpY19jYXN0PGlu
dD4oYnVmZmVyLnNpemUoKSkpOworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBw
IC0gYnVmZmVyLmRhdGEoKSk7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGVuY29kZUhv
c3RuYW1lKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpCisvLyBBcHBlbmRzIHRoZSBwdW55Y29k
ZWQgaG9zdG5hbWUgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBsZW5ndGggdG8K
Ky8vIHRoZSBvdXRwdXQgYnVmZmVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG51bGwgdGVybWlu
YXRlZC4KK3N0YXRpYyB2b2lkIGFwcGVuZEVuY29kZWRIb3N0bmFtZShVQ2hhckJ1ZmZlciYgYnVm
ZmVyLCBjb25zdCBVQ2hhciogc3RyLCB1bnNpZ25lZCBzdHJMZW4pCiB7CiAgICAgLy8gTmVlZHMg
dG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFuIElETi1lbmNvZGVkIG5hbWUuCiAgICAgLy8gRm9y
IGhvc3QgbmFtZXMgYmlnZ2VyIHRoYW4gdGhpcywgd2Ugd29uJ3QgZG8gSUROIGVuY29kaW5nLCB3
aGljaCBpcyBhbG1vc3QgY2VydGFpbmx5IE9LLgogICAgIGNvbnN0IHVuc2lnbmVkIGhvc3RuYW1l
QnVmZmVyTGVuZ3RoID0gMjA0ODsKIAotICAgIGlmIChzLmlzQWxsQVNDSUkoKSB8fCBzLmxlbmd0
aCgpID4gaG9zdG5hbWVCdWZmZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBzOworICAgIGlmIChz
dHJMZW4gPiBob3N0bmFtZUJ1ZmZlckxlbmd0aCB8fCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoc3Ry
LCBzdHJMZW4pKQorICAgICAgICBidWZmZXIuYXBwZW5kKHN0ciwgc3RyTGVuKTsKIAogI2lmIFVT
RShJQ1VfVU5JQ09ERSkKLSAgICBVQ2hhciBidWZmZXJbaG9zdG5hbWVCdWZmZXJMZW5ndGhdOyAg
ICAKKyAgICBVQ2hhciBob3N0bmFtZUJ1ZmZlcltob3N0bmFtZUJ1ZmZlckxlbmd0aF07CiAgICAg
VUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAgICBpbnQzMl90IG51bUNoYXJhY3Rl
cnNDb252ZXJ0ZWQgPSB1aWRuYV9JRE5Ub0FTQ0lJCi0gICAgICAgIChyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyICo+KHMudW5pY29kZSgpKSwgcy5sZW5ndGgoKSwgYnVmZmVyLCBob3N0bmFt
ZUJ1ZmZlckxlbmd0aCwgVUlETkFfQUxMT1dfVU5BU1NJR05FRCwgMCwgJmVycm9yKTsKLSAgICBp
ZiAoZXJyb3IgIT0gVV9aRVJPX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLSAg
ICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhyZWludGVycHJldF9jYXN0PERlcHJlY2F0ZWRDaGFy
ICo+KGJ1ZmZlciksIG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQpOworICAgIGludDMyX3QgbnVtQ2hh
cmFjdGVyc0NvbnZlcnRlZCA9IHVpZG5hX0lETlRvQVNDSUkoc3RyLCBzdHJMZW4sIGhvc3RuYW1l
QnVmZmVyLAorICAgICAgICBob3N0bmFtZUJ1ZmZlckxlbmd0aCwgVUlETkFfQUxMT1dfVU5BU1NJ
R05FRCwgMCwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IgIT0gVV9aRVJPX0VSUk9SKQorICAgICAg
ICBidWZmZXIuYXBwZW5kKGhvc3RuYW1lQnVmZmVyLCBudW1DaGFyYWN0ZXJzQ29udmVydGVkKTsK
ICNlbGlmIFVTRShRVDRfVU5JQ09ERSkKLSAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRv
QWNlKHMpOwotICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKHJlc3VsdC5jb25zdERhdGEoKSwg
cmVzdWx0Lmxlbmd0aCgpKTsKKyAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRvQWNlKHMp
OyAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZywgYnV0IEkgZG9uJ3Qga25vdyB3aGF0IGl0IHNob3Vs
ZCBiZS4KKyAgICBidWZmZXIuYXBwZW5kKHJlc3VsdC5jb25zdERhdGEsIHJlc3VsdC5sZW5ndGgo
KSk7CiAjZW5kaWYKIH0KIAotc3RhdGljIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGZpbmRIb3N0
bmFtZXNJbk1haWxUb1VSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzKQorc3RhdGljIHZvaWQg
ZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKGNvbnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW4sIFZl
Y3RvcjxwYWlyPGludCwgaW50PiA+JiBuYW1lUmFuZ2VzKQogewogICAgIC8vIEluIGEgbWFpbHRv
OiBVUkwsIGhvc3QgbmFtZXMgY29tZSBhZnRlciBhICdAJyBjaGFyYWN0ZXIgYW5kIGVuZCB3aXRo
IGEgJz4nIG9yICcsJyBvciAnPycgb3IgZW5kIG9mIHN0cmluZyBjaGFyYWN0ZXIuCiAgICAgLy8g
U2tpcCBxdW90ZWQgc3RyaW5ncyBzbyB0aGF0IGNoYXJhY3RlcnMgaW4gdGhlbSBkb24ndCBjb25m
dXNlIHVzLgogICAgIC8vIFdoZW4gd2UgZmluZCBhICc/JyBjaGFyYWN0ZXIsIHdlIGFyZSBwYXN0
IHRoZSBwYXJ0IG9mIHRoZSBVUkwgdGhhdCBjb250YWlucyBob3N0IG5hbWVzLgogCi0gICAgVmVj
dG9yPHBhaXI8aW50LCBpbnQ+ID4gYTsKKyAgICBuYW1lUmFuZ2VzLmNsZWFyKCk7CiAKICAgICBp
bnQgcCA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgLy8gRmluZCBzdGFydCBvZiBob3N0
IG5hbWUgb3Igb2YgcXVvdGVkIHN0cmluZy4KLSAgICAgICAgaW50IGhvc3RuYW1lT3JTdHJpbmdT
dGFydCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiW1wiQD9dIiksIHApOwotICAgICAgICBp
ZiAoaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID09IC0xKSB7Ci0gICAgICAgICAgICByZXR1cm4gYTsK
LSAgICAgICAgfQotICAgICAgICBEZXByZWNhdGVkQ2hhciBjID0gc1tob3N0bmFtZU9yU3RyaW5n
U3RhcnRdOworICAgICAgICBpbnQgaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID0gZmluZEZpcnN0T2Yo
c3RyLCBzdHJMZW4sIHAsICJcIkA/Iik7CisgICAgICAgIGlmIChob3N0bmFtZU9yU3RyaW5nU3Rh
cnQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFVDaGFyIGMgPSBzdHJbaG9z
dG5hbWVPclN0cmluZ1N0YXJ0XTsKICAgICAgICAgcCA9IGhvc3RuYW1lT3JTdHJpbmdTdGFydCAr
IDE7CiAKLSAgICAgICAgaWYgKGMgPT0gJz8nKSB7Ci0gICAgICAgICAgICByZXR1cm4gYTsKLSAg
ICAgICAgfQotICAgICAgICAKKyAgICAgICAgaWYgKGMgPT0gJz8nKQorICAgICAgICAgICAgcmV0
dXJuOworCiAgICAgICAgIGlmIChjID09ICdAJykgewogICAgICAgICAgICAgLy8gRmluZCBlbmQg
b2YgaG9zdCBuYW1lLgogICAgICAgICAgICAgaW50IGhvc3RuYW1lU3RhcnQgPSBwOwotICAgICAg
ICAgICAgaW50IGhvc3RuYW1lRW5kID0gcy5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJbPiw/XSIp
LCBwKTsKKyAgICAgICAgICAgIGludCBob3N0bmFtZUVuZCA9IGZpbmRGaXJzdE9mKHN0ciwgc3Ry
TGVuLCBwLCAiPiw/Iik7CiAgICAgICAgICAgICBib29sIGRvbmU7CiAgICAgICAgICAgICBpZiAo
aG9zdG5hbWVFbmQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBob3N0bmFtZUVuZCA9IHMubGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgaG9zdG5hbWVFbmQgPSBzdHJMZW47CiAgICAgICAgICAg
ICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IHAgPSBob3N0bmFtZUVuZDsKICAgICAgICAgICAgICAgICBkb25lID0gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGEuYXBwZW5kKG1ha2VfcGFpcihob3N0bmFtZVN0YXJ0LCBo
b3N0bmFtZUVuZCkpOworICAgICAgICAgICAgbmFtZVJhbmdlcy5hcHBlbmQobWFrZV9wYWlyKGhv
c3RuYW1lU3RhcnQsIGhvc3RuYW1lRW5kKSk7CiAKICAgICAgICAgICAgIGlmIChkb25lKQotICAg
ICAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIFNraXAgcXVvdGVkIHN0cmluZy4KICAgICAgICAgICAg
IEFTU0VSVChjID09ICciJyk7CiAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAg
ICAgIGludCBlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgPSBzLmZpbmQoUmVndWxhckV4cHJl
c3Npb24oIltcIlxcXSIpLCBwKTsKKyAgICAgICAgICAgICAgICBpbnQgZXNjYXBlZENoYXJhY3Rl
ck9yU3RyaW5nRW5kID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIHAsICJcIlxcIik7CiAgICAg
ICAgICAgICAgICAgaWYgKGVzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCA9PSAtMSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICAgICAgICAgIGMgPSBzW2VzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZF07CisgICAg
ICAgICAgICAgICAgYyA9IHN0cltlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmRdOwogICAgICAg
ICAgICAgICAgIHAgPSBlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgKyAxOwotICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHRoZSBlbmQgb2YgdGhlIHN0
cmluZywgdGhlbiBicmVhayBmcm9tIHRoZSBzdHJpbmcgbG9vcCBiYWNrIHRvIHRoZSBob3N0IG5h
bWUgbG9vcC4KICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnIicpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gU2tpcCBl
c2NhcGVkIGNoYXJhY3Rlci4KICAgICAgICAgICAgICAgICBBU1NFUlQoYyA9PSAnXFwnKTsKLSAg
ICAgICAgICAgICAgICBpZiAocCA9PSBzdGF0aWNfY2FzdDxpbnQ+KHMubGVuZ3RoKCkpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgICAgICAgICBpZiAocCA9PSBzdHJM
ZW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICsrcDsK
ICAgICAgICAgICAgIH0KQEAgLTEzNzksMTQ0ICsxMzk5LDE2OCBAQCBzdGF0aWMgVmVjdG9yPHBh
aXI8aW50LCBpbnQ+ID4gZmluZEhvc3RuCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBmaW5kSG9z
dG5hbWVJbkhpZXJhcmNoaWNhbFVSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzLCBpbnQgJnN0
YXJ0T2Zmc2V0LCBpbnQgJmVuZE9mZnNldCkKK3N0YXRpYyBib29sIGZpbmRIb3N0bmFtZUluSGll
cmFyY2hpY2FsVVJMKGNvbnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW4sIGludCYgc3RhcnRPZmZz
ZXQsIGludCYgZW5kT2Zmc2V0KQogewogICAgIC8vIEZpbmQgdGhlIGhvc3QgbmFtZSBpbiBhIGhp
ZXJhcmNoaWNhbCBVUkwuCi0gICAgLy8gSXQgY29tZXMgYWZ0ZXIgYSAiOi8vIiBzZXF1ZW5jZSwg
d2l0aCBzY2hlbWUgY2hhcmFjdGVycyBwcmVjZWRpbmcuCi0gICAgLy8gSWYgZW5kcyB3aXRoIHRo
ZSBlbmQgb2YgdGhlIHN0cmluZyBvciBhICI6IiBvciBhIHBhdGggc2VnbWVudCBlbmRpbmcgY2hh
cmFjdGVyLgorICAgIC8vIEl0IGNvbWVzIGFmdGVyIGEgIjovLyIgc2VxdWVuY2UsIHdpdGggc2No
ZW1lIGNoYXJhY3RlcnMgcHJlY2VkaW5nLCBhbmQKKyAgICAvLyB0aGlzIHNob3VsZCBiZSB0aGUg
Zmlyc3QgY29sb24gaW4gdGhlIHN0cmluZy4KKyAgICAvLyBJdCBlbmRzIHdpdGggdGhlIGVuZCBv
ZiB0aGUgc3RyaW5nIG9yIGEgIjoiIG9yIGEgcGF0aCBzZWdtZW50IGVuZGluZyBjaGFyYWN0ZXIu
CiAgICAgLy8gSWYgdGhlcmUgaXMgYSAiQCIgY2hhcmFjdGVyLCB0aGUgaG9zdCBwYXJ0IGlzIGp1
c3QgdGhlIHBhcnQgYWZ0ZXIgdGhlICJAIi4KLSAgICBpbnQgc2VwYXJhdG9yID0gcy5maW5kKCI6
Ly8iKTsKLSAgICBpZiAoc2VwYXJhdG9yIDw9IDApIHsKKyAgICBpbnQgc2VwYXJhdG9yID0gZmlu
ZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIDAsICI6Iik7CisgICAgaWYgKHNlcGFyYXRvciA9PSAtMSB8
fCBzZXBhcmF0b3IgKyAyID49IHN0ckxlbiB8fAorICAgICAgICBzdHJbc2VwYXJhdG9yICsgMV0g
IT0gJy8nIHx8IHN0cltzZXBhcmF0b3IgKyAyXSAhPSAnLycpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CiAKICAgICAvLyBDaGVjayB0aGF0IGFsbCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUg
Oi8vIGFyZSB2YWxpZCBzY2hlbWUgY2hhcmFjdGVycy4KLSAgICBpZiAoIWlzU2NoZW1lRmlyc3RD
aGFyKHNbMF0ubGF0aW4xKCkpKSB7CisgICAgaWYgKCFpc1NjaGVtZUZpcnN0Q2hhcihzdHJbMF0p
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
c2VwYXJhdG9yOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc1NjaGVtZUNoYXIoc1tpXS5sYXRpbjEo
KSkpIHsKKyAgICAgICAgaWYgKCFpc1NjaGVtZUNoYXIoc3RyW2ldKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIC8vIFN0YXJ0IGFmdGVyIHRoZSBz
ZXBhcmF0b3IuCiAgICAgaW50IGF1dGhvcml0eVN0YXJ0ID0gc2VwYXJhdG9yICsgMzsKIAogICAg
IC8vIEZpbmQgdGVybWluYXRpbmcgY2hhcmFjdGVyLgotICAgIGludCBsZW5ndGggPSBzLmxlbmd0
aCgpOwotICAgIGludCBob3N0bmFtZUVuZCA9IGxlbmd0aDsKLSAgICBmb3IgKGludCBpID0gYXV0
aG9yaXR5U3RhcnQ7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjaGFyIGMgPSBzW2ldLmxh
dGluMSgpOwotICAgICAgICBpZiAoYyA9PSAnOicgfHwgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKGMp
ICYmIGMgIT0gJ1wwJykpIHsKKyAgICBpbnQgaG9zdG5hbWVFbmQgPSBzdHJMZW47CisgICAgZm9y
IChpbnQgaSA9IGF1dGhvcml0eVN0YXJ0OyBpIDwgc3RyTGVuOyArK2kpIHsKKyAgICAgICAgVUNo
YXIgYyA9IHN0cltpXTsKKyAgICAgICAgaWYgKGMgPT0gJzonIHx8IChpc1BhdGhTZWdtZW50RW5k
Q2hhcihjKSAmJiBjICE9IDApKSB7CiAgICAgICAgICAgICBob3N0bmFtZUVuZCA9IGk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEZpbmQgIkAiIGZvciB0
aGUgc3RhcnQgb2YgdGhlIGhvc3QgbmFtZS4KLSAgICBpbnQgdXNlckluZm9UZXJtaW5hdG9yID0g
cy5maW5kKCdAJywgYXV0aG9yaXR5U3RhcnQpOworICAgIGludCB1c2VySW5mb1Rlcm1pbmF0b3Ig
PSBmaW5kRmlyc3RPZihzdHIsIHN0ckxlbiwgYXV0aG9yaXR5U3RhcnQsICJAIik7CiAgICAgaW50
IGhvc3RuYW1lU3RhcnQ7Ci0gICAgaWYgKHVzZXJJbmZvVGVybWluYXRvciA9PSAtMSB8fCB1c2Vy
SW5mb1Rlcm1pbmF0b3IgPiBob3N0bmFtZUVuZCkgeworICAgIGlmICh1c2VySW5mb1Rlcm1pbmF0
b3IgPT0gLTEgfHwgdXNlckluZm9UZXJtaW5hdG9yID4gaG9zdG5hbWVFbmQpCiAgICAgICAgIGhv
c3RuYW1lU3RhcnQgPSBhdXRob3JpdHlTdGFydDsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAg
ICAgICAgaG9zdG5hbWVTdGFydCA9IHVzZXJJbmZvVGVybWluYXRvciArIDE7Ci0gICAgfQogCiAg
ICAgc3RhcnRPZmZzZXQgPSBob3N0bmFtZVN0YXJ0OwogICAgIGVuZE9mZnNldCA9IGhvc3RuYW1l
RW5kOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNv
ZGVIb3N0bmFtZXMoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKLXsKLSAgICBpZiAocy5zdGFy
dHNXaXRoKCJtYWlsdG86IiwgZmFsc2UpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxwYWlyPGlu
dCwgaW50PiA+IGhvc3RuYW1lUmFuZ2VzID0gZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKHMpOwor
Ly8gQ29udmVydHMgYWxsIGhvc3RuYW1lcyBmb3VuZCBpbiB0aGUgZ2l2ZW4gaW5wdXQgdG8gcHVu
eWNvZGUsIHByZXNlcnZpbmcgdGhlCisvLyByZXN0IG9mIHRoZSBVUkwgdW5jaGFuZ2VkLiBUaGUg
b3V0cHV0IHdpbGwgTk9UIGJlIG51bGwtdGVybWluYXRlZC4KK3N0YXRpYyB2b2lkIGVuY29kZUhv
c3RuYW1lcyhjb25zdCBTdHJpbmcmIHN0ciwgVUNoYXJCdWZmZXImIG91dHB1dCkKK3sKKyAgICBv
dXRwdXQuY2xlYXIoKTsKKworICAgIGlmIChwcm90b2NvbElzKHN0ciwgIm1haWx0byIpKSB7Cisg
ICAgICAgIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGhvc3RuYW1lUmFuZ2VzOworICAgICAgICBm
aW5kSG9zdG5hbWVzSW5NYWlsVG9VUkwoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpLCBo
b3N0bmFtZVJhbmdlcyk7CiAgICAgICAgIGludCBuID0gaG9zdG5hbWVSYW5nZXMuc2l6ZSgpOwot
ICAgICAgICBpZiAobiAhPSAwKSB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3Vs
dDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHAgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBwYWlyPGludCwgaW50PiAm
ciA9IGhvc3RuYW1lUmFuZ2VzW2ldOwotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzLm1pZChw
LCByLmZpcnN0KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gZW5jb2RlSG9zdG5hbWUocy5t
aWQoci5maXJzdCwgci5zZWNvbmQgLSByLmZpcnN0KSk7Ci0gICAgICAgICAgICAgICAgcCA9IHIu
c2Vjb25kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ICs9IHMubWlkKHApOwot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQorICAgICAgICBpbnQgcCA9IDA7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBjb25z
dCBwYWlyPGludCwgaW50PiYgciA9IGhvc3RuYW1lUmFuZ2VzW2ldOworICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgmc3RyLmNoYXJhY3RlcnMoKVtwXSwgci5maXJzdCAtIHApOworICAgICAgICAg
ICAgYXBwZW5kRW5jb2RlZEhvc3RuYW1lKG91dHB1dCwgJnN0ci5jaGFyYWN0ZXJzKClbci5maXJz
dF0sIHIuc2Vjb25kIC0gci5maXJzdCk7CisgICAgICAgICAgICBwID0gci5zZWNvbmQ7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gVGhpcyB3aWxsIGNvcHkgZWl0aGVyIGV2ZXJ5dGhpbmcgYWZ0ZXIg
dGhlIGxhc3QgaG9zdG5hbWUsIG9yIHRoZQorICAgICAgICAvLyB3aG9sZSB0aGluZyBpZiB0aGVy
ZSBpcyBubyBob3N0bmFtZS4KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgmc3RyLmNoYXJhY3RlcnMo
KVtwXSwgc3RyLmxlbmd0aCgpIC0gcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50IGhvc3RT
dGFydCwgaG9zdEVuZDsKLSAgICAgICAgaWYgKGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJM
KHMsIGhvc3RTdGFydCwgaG9zdEVuZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBzLmxlZnQoaG9z
dFN0YXJ0KSArIGVuY29kZUhvc3RuYW1lKHMubWlkKGhvc3RTdGFydCwgaG9zdEVuZCAtIGhvc3RT
dGFydCkpICsgcy5taWQoaG9zdEVuZCk7IAorICAgICAgICBpZiAoZmluZEhvc3RuYW1lSW5IaWVy
YXJjaGljYWxVUkwoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpLCBob3N0U3RhcnQsIGhv
c3RFbmQpKSB7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIGhv
c3RTdGFydCk7IC8vIEJlZm9yZSBob3N0bmFtZS4KKyAgICAgICAgICAgIGFwcGVuZEVuY29kZWRI
b3N0bmFtZShvdXRwdXQsICZzdHIuY2hhcmFjdGVycygpW2hvc3RTdGFydF0sIGhvc3RFbmQgLSBo
b3N0U3RhcnQpOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgmc3RyLmNoYXJhY3RlcnMoKVto
b3N0RW5kXSwgc3RyLmxlbmd0aCgpIC0gaG9zdEVuZCk7IC8vIEFmdGVyIGhvc3RuYW1lLgorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm8gaG9zdG5hbWUgdG8gZW5jb2RlLCByZXR1
cm4gdGhlIGlucHV0LgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHIuY2hhcmFjdGVycygp
LCBzdHIubGVuZ3RoKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzOwogfQogCi1z
dGF0aWMgY2hhciAqZW5jb2RlUmVsYXRpdmVTdHJpbmcoY29uc3QgS1VSTCAmYmFzZSwgY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmcmVsLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorc3Rh
dGljIHZvaWQgZW5jb2RlUmVsYXRpdmVTdHJpbmcoY29uc3QgU3RyaW5nJiByZWwsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcsIENoYXJCdWZmZXImIG91dHB1dCkKIHsKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHMgPSBlbmNvZGVIb3N0bmFtZXMocmVsKTsKLQotICAgIGNoYXIgKnN0ckJ1ZmZl
cjsKKyAgICBVQ2hhckJ1ZmZlciBzOworICAgIGVuY29kZUhvc3RuYW1lcyhyZWwsIHMpOwogCiAg
ICAgVGV4dEVuY29kaW5nIHBhdGhFbmNvZGluZyhVVEY4RW5jb2RpbmcoKSk7Ci0gICAgVGV4dEVu
Y29kaW5nIG90aGVyRW5jb2RpbmcgPSAoZW5jb2RpbmcuaXNWYWxpZCgpICYmICFyZWwuc3RhcnRz
V2l0aCgibWFpbHRvOiIsIGZhbHNlKSkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGluZygpOwotICAg
IAorICAgIFRleHRFbmNvZGluZyBvdGhlckVuY29kaW5nID0gKGVuY29kaW5nLmlzVmFsaWQoKSAm
JiAhcHJvdG9jb2xJcyhyZWwsICJtYWlsdG8iKSkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGluZygp
OworCiAgICAgaW50IHBhdGhFbmQgPSAtMTsKICAgICBpZiAocGF0aEVuY29kaW5nICE9IG90aGVy
RW5jb2RpbmcpIHsKLSAgICAgICAgcGF0aEVuZCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigi
Wz8jXSIpKTsKKyAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWl0aGVyICMg
b3IgPywga2VlcCBwYXRoRW5kIGF0IC0xIG90aGVyd2lzZS4KKyAgICAgICAgcGF0aEVuZCA9IGZp
bmRGaXJzdE9mKHMuZGF0YSgpLCBzLnNpemUoKSwgMCwgIiM/Iik7CiAgICAgfQorCiAgICAgaWYg
KHBhdGhFbmQgPT0gLTEpIHsKLSAgICAgICAgQ1N0cmluZyBkZWNvZGVkID0gcGF0aEVuY29kaW5n
LmVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocy51bmljb2RlKCkpLCBzLmxl
bmd0aCgpKTsKLSAgICAgICAgaW50IGRlY29kZWRMZW5ndGggPSBkZWNvZGVkLmxlbmd0aCgpOwot
ICAgICAgICBzdHJCdWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyICo+KGZhc3RNYWxsb2MoZGVjb2Rl
ZExlbmd0aCArIDEpKTsKLSAgICAgICAgbWVtY3B5KHN0ckJ1ZmZlciwgZGVjb2RlZC5kYXRhKCks
IGRlY29kZWRMZW5ndGgpOwotICAgICAgICBzdHJCdWZmZXJbZGVjb2RlZExlbmd0aF0gPSAwOwor
ICAgICAgICBDU3RyaW5nIGRlY29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHMuZGF0YSgpLCBz
LnNpemUoKSk7CisgICAgICAgIG91dHB1dC5yZXNpemUoZGVjb2RlZC5sZW5ndGgoKSk7CisgICAg
ICAgIG1lbWNweShvdXRwdXQuZGF0YSgpLCBkZWNvZGVkLmRhdGEoKSwgZGVjb2RlZC5sZW5ndGgo
KSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaW50IGxlbmd0aCA9IHMubGVuZ3RoKCk7Ci0gICAg
ICAgIENTdHJpbmcgcGF0aERlY29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPihzLnVuaWNvZGUoKSksIHBhdGhFbmQpOwotICAgICAgICBDU3Ry
aW5nIG90aGVyRGVjb2RlZCA9IG90aGVyRW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUNoYXIqPihzLnVuaWNvZGUoKSkgKyBwYXRoRW5kLCBsZW5ndGggLSBwYXRoRW5kKTsK
LSAgICAgICAgaW50IHBhdGhEZWNvZGVkTGVuZ3RoID0gcGF0aERlY29kZWQubGVuZ3RoKCk7Ci0g
ICAgICAgIGludCBvdGhlckRlY29kZWRMZW5ndGggPSBvdGhlckRlY29kZWQubGVuZ3RoKCk7Ci0g
ICAgICAgIHN0ckJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIgKj4oZmFzdE1hbGxvYyhwYXRoRGVj
b2RlZExlbmd0aCArIG90aGVyRGVjb2RlZExlbmd0aCArIDEpKTsKLSAgICAgICAgbWVtY3B5KHN0
ckJ1ZmZlciwgcGF0aERlY29kZWQuZGF0YSgpLCBwYXRoRGVjb2RlZExlbmd0aCk7Ci0gICAgICAg
IG1lbWNweShzdHJCdWZmZXIgKyBwYXRoRGVjb2RlZExlbmd0aCwgb3RoZXJEZWNvZGVkLmRhdGEo
KSwgb3RoZXJEZWNvZGVkTGVuZ3RoKTsKLSAgICAgICAgc3RyQnVmZmVyW3BhdGhEZWNvZGVkTGVu
Z3RoICsgb3RoZXJEZWNvZGVkTGVuZ3RoXSA9IDA7Ci0gICAgfQorICAgICAgICBDU3RyaW5nIHBh
dGhEZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShzLmRhdGEoKSwgcGF0aEVuZCk7CisgICAg
ICAgIENTdHJpbmcgb3RoZXJEZWNvZGVkID0gb3RoZXJFbmNvZGluZy5lbmNvZGUocy5kYXRhKCkg
KyBwYXRoRW5kLCBzLnNpemUoKSAtIHBhdGhFbmQpOwogCi0gICAgcmV0dXJuIHN0ckJ1ZmZlcjsK
KyAgICAgICAgb3V0cHV0LnJlc2l6ZShwYXRoRGVjb2RlZC5sZW5ndGgoKSArIG90aGVyRGVjb2Rl
ZC5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShvdXRwdXQuZGF0YSgpLCBwYXRoRGVjb2RlZC5k
YXRhKCksIHBhdGhEZWNvZGVkLmxlbmd0aCgpKTsKKyAgICAgICAgbWVtY3B5KG91dHB1dC5kYXRh
KCkgKyBwYXRoRGVjb2RlZC5sZW5ndGgoKSwgb3RoZXJEZWNvZGVkLmRhdGEoKSwgb3RoZXJEZWNv
ZGVkLmxlbmd0aCgpKTsKKyAgICB9CisgICAgb3V0cHV0LmFwcGVuZCgnXDAnKTsgLy8gbnVsbC10
ZXJtaW5hdGUgdGhlIG91dHB1dC4KIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3Rp
dHV0ZUJhY2tzbGFzaGVzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmluZykKK3N0YXRpYyBT
dHJpbmcgc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAg
IGludCBxdWVzdGlvblBvcyA9IHN0cmluZy5maW5kKCc/Jyk7CiAgICAgaW50IGhhc2hQb3MgPSBz
dHJpbmcuZmluZCgnIycpOwotICAgIHVuc2lnbmVkIHBhdGhFbmQ7Ci0gICAgCi0gICAgaWYgKGhh
c2hQb3MgPj0gMCAmJiAocXVlc3Rpb25Qb3MgPCAwIHx8IHF1ZXN0aW9uUG9zID4gaGFzaFBvcykp
IHsKKyAgICBpbnQgcGF0aEVuZDsKKworICAgIGlmIChoYXNoUG9zID49IDAgJiYgKHF1ZXN0aW9u
UG9zIDwgMCB8fCBxdWVzdGlvblBvcyA+IGhhc2hQb3MpKQogICAgICAgICBwYXRoRW5kID0gaGFz
aFBvczsKLSAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uUG9zID49IDApIHsKKyAgICBlbHNlIGlmIChx
dWVzdGlvblBvcyA+PSAwKQogICAgICAgICBwYXRoRW5kID0gcXVlc3Rpb25Qb3M7Ci0gICAgfSBl
bHNlIHsKKyAgICBlbHNlCiAgICAgICAgIHBhdGhFbmQgPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAg
fQogCi0gICAgcmV0dXJuIHN0cmluZy5sZWZ0KHBhdGhFbmQpLnJlcGxhY2UoJ1xcJywnLycpICsg
c3RyaW5nLm1pZChwYXRoRW5kKTsKKyAgICByZXR1cm4gc3RyaW5nLmxlZnQocGF0aEVuZCkucmVw
bGFjZSgnXFwnLCcvJykgKyBzdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmQpOwogfQogCiBib29sIEtV
Ukw6OmlzSGllcmFyY2hpY2FsKCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVCh1cmxTdHJpbmdbc2NoZW1lRW5kUG9zXSA9PSAn
OicpOwotICAgIHJldHVybiB1cmxTdHJpbmdbc2NoZW1lRW5kUG9zICsgMV0gPT0gJy8nOworICAg
IEFTU0VSVChtX3N0cmluZ1tzY2hlbWVFbmRQb3NdID09ICc6Jyk7CisgICAgcmV0dXJuIG1fc3Ry
aW5nW3NjaGVtZUVuZFBvcyArIDFdID09ICcvJzsKK30KKwordm9pZCBLVVJMOjpjb3B5VG9CdWZm
ZXIoQ2hhckJ1ZmZlciYgYnVmZmVyKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHRocm93
cyBhd2F5IHRoZSBoaWdoIGJ5dGVzIG9mIGFsbCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5n
IQorICAgIC8vIFRoYXQncyBmaW5lIGZvciBhIHZhbGlkIFVSTCwgd2hpY2ggaXMgYWxsIEFTQ0lJ
LCBidXQgbm90IGZvciBpbnZhbGlkIFVSTHMuCisgICAgYnVmZmVyLnJlc2l6ZShtX3N0cmluZy5s
ZW5ndGgoKSk7CisgICAgY29weUFTQ0lJKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgbV9zdHJpbmcu
bGVuZ3RoKCksIGJ1ZmZlci5kYXRhKCkpOworfQorCitib29sIHByb3RvY29sSXMoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IGNoYXIqIHByb3RvY29sKQoreworICAgIC8vIERvIHRoZSBjb21wYXJp
c29uIHdpdGhvdXQgbWFraW5nIGEgbmV3IHN0cmluZyBvYmplY3QuCisgICAgYXNzZXJ0UHJvdG9j
b2xJc0dvb2QocHJvdG9jb2wpOworICAgIGZvciAoaW50IGkgPSAwOyA7ICsraSkgeworICAgICAg
ICBpZiAoIXByb3RvY29sW2ldKQorICAgICAgICAgICAgcmV0dXJuIHVybFtpXSA9PSAnOic7Cisg
ICAgICAgIGlmICh0b0FTQ0lJTG93ZXIodXJsW2ldKSAhPSBwcm90b2NvbFtpXSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2NvbnN0IEtVUkwmIGJsYW5rVVJMKCkKK3sK
KyAgICBzdGF0aWMgS1VSTCBzdGF0aWNCbGFua1VSTCgiYWJvdXQ6YmxhbmsiKTsKKyAgICByZXR1
cm4gc3RhdGljQmxhbmtVUkw7CiB9CiAKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEtVUkw6OnByaW50
KCkgY29uc3QKIHsKLSAgICBwcmludGYoIiVzXG4iLCB1cmxTdHJpbmcuYXNjaWkoKSk7CisgICAg
cHJpbnRmKCIlc1xuIiwgbV9zdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAjZW5kaWYKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmgJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDEyICsyNiwxMCBAQAogI2lmbmRlZiBLVVJMX2gKICNkZWZpbmUgS1VSTF9oCiAKLSNp
bmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
LSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogI2lmIFBMQVRGT1JNKENGKQotdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19D
RlVSTCogQ0ZVUkxSZWY7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTQxLDk5ICsz
OSwxNDEgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwogY2xhc3Mg
TlNVUkw7CiAjZW5kaWYKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBRVXJsOwog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xh
c3MgVGV4dEVuY29kaW5nOwotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJik7Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLVVJMICZhLCBjb25z
dCBLVVJMICZiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLQotICAgIGJvb2wgZXF1YWxJZ25vcmlu
Z1JlZihjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworY2xhc3MgVGV4dEVuY29kaW5nOwogCiBj
bGFzcyBLVVJMIHsKIHB1YmxpYzoKKyAgICAvLyBHZW5lcmF0ZXMgYSBVUkwgd2hpY2ggY29udGFp
bnMgYSBudWxsIHN0cmluZy4KICAgICBLVVJMKCk7Ci0gICAgS1VSTChjb25zdCBjaGFyKik7Ci0g
ICAgS1VSTChjb25zdCBLVVJMJiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwotICAgIEtVUkwo
Y29uc3QgS1VSTCYsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2Rpbmcm
KTsKLSAgICBLVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgS1VSTChOU1VSTCopOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ0YpCi0gICAgS1VSTChD
RlVSTFJlZik7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShRVCkKLSAgICBLVVJMKGNvbnN0IFFVcmwm
KTsKLSNlbmRpZgotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcu
aXNOdWxsKCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcu
aXNFbXB0eSgpOyB9CiAKKyAgICAvLyBUaGUgYXJndW1lbnQgaXMgYW4gYWJzb2x1dGUgVVJMIHN0
cmluZy4gVGhlIHN0cmluZyBpcyBhc3N1bWVkIHRvIGJlCisgICAgLy8gYWxyZWFkeSBlbmNvZGVk
LgorICAgIC8vIEZJWE1FOiBUaGlzIGNvbnN0cnVjdG9yIGhhcyBhIHNwZWNpYWwgY2FzZSBmb3Ig
c3RyaW5ncyB0aGF0IHN0YXJ0IHdpdGgKKyAgICAvLyAiLyIsIHByZXBlbmRpbmcgImZpbGU6Ly8i
IHRvIHN1Y2ggc3RyaW5nczsgaXQgd291bGQgYmUgZ29vZCB0byBnZXQKKyAgICAvLyByaWQgb2Yg
dGhhdCBzcGVjaWFsIGNhc2UuCisgICAgZXhwbGljaXQgS1VSTChjb25zdCBjaGFyKik7CisKKyAg
ICAvLyBUaGUgYXJndW1lbnQgaXMgYW4gYWJzb2x1dGUgVVJMIHN0cmluZy4gVGhlIHN0cmluZyBp
cyBhc3N1bWVkIHRvIGJlCisgICAgLy8gYWxyZWFkeSBlbmNvZGVkLgorICAgIC8vIEZJWE1FOiBG
b3IgY2hhcmFjdGVycyB3aXRoIGNvZGVzIG90aGVyIHRoYW4gMDAwMC0wMEZGIHdpbGwgYmUgY2hv
cHBlZAorICAgIC8vIG9mZiwgc28gdGhpcyBjYWxsIGlzIGN1cnJlbnRseSBub3Qgc2FmZSB0byB1
c2Ugd2l0aCBhcmJpdHJhcnkgc3RyaW5ncy4KKyAgICAvLyBGSVhNRTogVGhpcyBjb25zdHJ1Y3Rv
ciBoYXMgYSBzcGVjaWFsIGNhc2UgZm9yIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoCisgICAgLy8g
Ii8iLCBwcmVwZW5kaW5nICJmaWxlOi8vIiB0byBzdWNoIHN0cmluZ3M7IGl0IHdvdWxkIGJlIGdv
b2QgdG8gZ2V0CisgICAgLy8gcmlkIG9mIHRoYXQgc3BlY2lhbCBjYXNlLgorICAgIGV4cGxpY2l0
IEtVUkwoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBSZXNvbHZlcyB0aGUgcmVsYXRpdmUgVVJM
IHdpdGggdGhlIGdpdmVuIGJhc2UgVVJMLiBJZiBwcm92aWRlZCwgdGhlCisgICAgLy8gVGV4dEVu
Y29kaW5nIGlzIHVzZWQgdG8gZW5jb2RlIG5vbi1BU0NJSSBjaGFyYWNlcnMuIFRoZSBiYXNlIFVS
TCBjYW4gYmUKKyAgICAvLyBudWxsIG9yIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSByZWxhdGl2
ZSBVUkwgd2lsbCBiZSBpbnRlcnByZXRlZCBhcworICAgIC8vIGFic29sdXRlLgorICAgIC8vIEZJ
WE1FOiBJZiB0aGUgYmFzZSBVUkwgaXMgaW52YWxpZCwgdGhpcyBhbHdheXMgY3JlYXRlcyBhbiBp
bnZhbGlkCisgICAgLy8gVVJMLiBJbnN0ZWFkIEkgdGhpbmsgaXQgd291bGQgYmUgYmV0dGVyIHRv
IHRyZWF0IGFsbCBpbnZhbGlkIGJhc2UgVVJMcworICAgIC8vIHRoZSBzYW1lIHdheSB3ZSB0cmVh
dGUgbnVsbCBhbmQgZW1wdHkgYmFzZSBVUkxzLgorICAgIEtVUkwoY29uc3QgS1VSTCYgYmFzZSwg
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZSk7CisgICAgS1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25z
dCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKworICAgIC8vIEZJWE1F
OiBUaGUgYWJvdmUgZnVuY3Rpb25zIHNob3VsZCBiZSBoYXJtb25pemVkIHNvIHRoYXQgcGFzc2lu
ZyBhCisgICAgLy8gYmFzZSBvZiBudWxsIG9yIHRoZSBlbXB0eSBzdHJpbmcgZ2l2ZXMgdGhlIHNh
bWUgcmVzdWx0IGFzIHRoZQorICAgIC8vIHN0YW5kYXJkIFN0cmluZyBjb25zdHJ1Y3Rvci4KKwor
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0KKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7IH0KKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFVSTCBoYXMgYSBwYXRoLiBOb3RlIHRoYXQgImh0
dHA6Ly9mb28uY29tLyIgaGFzIGEKKyAgICAvLyBwYXRoIG9mICIvIiwgc28gdGhpcyBmdW5jdGlv
biB3aWxsIHJldHVybiB0cnVlLiBPbmx5IGludmFsaWQgb3IKKyAgICAvLyBub24taGllcmFyY2hp
Y2FsIChsaWtlICJqYXZhc2NyaXB0OiIpIFVSTHMgd2lsbCBoYXZlIG5vIHBhdGguCiAgICAgYm9v
bCBoYXNQYXRoKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
dXJsU3RyaW5nOyB9Ci0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZGVwcmVjYXRlZFN0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIHVybFN0cmluZzsgfQorICAgIGNvbnN0IFN0cmluZyYgc3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcHJv
dG9jb2woKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGhvc3QoKSBjb25zdDsKLSAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgdXNl
cigpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcGFzcygpIGNvbnN0OwotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgcGF0aCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgbGFzdFBhdGhD
b21wb25lbnQoKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHF1ZXJ5KCkgY29uc3Q7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZyByZWYoKSBjb25zdDsKKyAgICBTdHJpbmcgcHJvdG9jb2woKSBj
b25zdDsKKyAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQo
KSBjb25zdDsKKyAgICBTdHJpbmcgdXNlcigpIGNvbnN0OworICAgIFN0cmluZyBwYXNzKCkgY29u
c3Q7CisgICAgU3RyaW5nIHBhdGgoKSBjb25zdDsKKyAgICBTdHJpbmcgbGFzdFBhdGhDb21wb25l
bnQoKSBjb25zdDsKKyAgICBTdHJpbmcgcXVlcnkoKSBjb25zdDsgLy8gSW5jbHVkZXMgdGhlICI/
Ii4KKyAgICBTdHJpbmcgcmVmKCkgY29uc3Q7IC8vIERvZXMgKm5vdCogaW5jbHVkZSB0aGUgIiMi
LgogICAgIGJvb2wgaGFzUmVmKCkgY29uc3Q7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGVuY29k
ZWRIdG1sUmVmKCkgY29uc3QgeyByZXR1cm4gcmVmKCk7IH0KKyAgICBTdHJpbmcgcHJldHR5VVJM
KCkgY29uc3Q7CisgICAgU3RyaW5nIGZpbGVTeXN0ZW1QYXRoKCkgY29uc3Q7CiAKLSAgICB2b2lk
IHNldFByb3RvY29sKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRIb3N0
KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQb3J0KHVuc2lnbmVkIHNo
b3J0IGludCk7Ci0gICAgdm9pZCBzZXRIb3N0QW5kUG9ydChjb25zdCBEZXByZWNhdGVkU3RyaW5n
Jik7Ci0gICAgdm9pZCBzZXRVc2VyKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9p
ZCBzZXRQYXNzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQYXRoKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRRdWVyeShjb25zdCBEZXByZWNh
dGVkU3RyaW5nICYpOwotICAgIHZvaWQgc2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IFVSTCdzIHByb3RvY29sIGlzIHRo
ZSBzYW1lIGFzIHRoZSBudWxsLQorICAgIC8vIHRlcm1pbmF0ZWQgQVNDSUkgYXJndW1lbnQuIFRo
ZSBhcmd1bWVudCBtdXN0IGJlIGxvd2VyLWNhc2UuCisgICAgYm9vbCBwcm90b2NvbElzKGNvbnN0
IGNoYXIqKSBjb25zdDsKKyAgICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldFByb3RvY29sKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0SG9zdChjb25zdCBTdHJp
bmcmKTsKKworICAgIC8vIFNldHRpbmcgdGhlIHBvcnQgdG8gMCB3aWxsIGNsZWFyIGFueSBwb3J0
IGZyb20gdGhlIFVSTC4KKyAgICB2b2lkIHNldFBvcnQodW5zaWduZWQgc2hvcnQpOworCisgICAg
Ly8gSW5wdXQgaXMgbGlrZSAiZm9vLmNvbSIgb3IgImZvby5jb206ODAwMCIuCisgICAgdm9pZCBz
ZXRIb3N0QW5kUG9ydChjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgc2V0VXNlcihjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHNldFBhc3MoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBJZiB5
b3UgcGFzcyBhbiBlbXB0eSBwYXRoIGZvciBIVFRQIG9yIEhUVFBTIFVSTHMsIHRoZSByZXN1bHRp
bmcgcGF0aAorICAgIC8vIHdpbGwgYmUgIi8iLgorICAgIHZvaWQgc2V0UGF0aChjb25zdCBTdHJp
bmcmKTsKKworICAgIC8vIFRoZSBxdWVyeSBtYXkgYmVnaW4gd2l0aCBhIHF1ZXN0aW9uIG1hcmss
IG9yLCBpZiBub3QsIG9uZSB3aWxsIGJlIGFkZGVkCisgICAgLy8gZm9yIHlvdS4gU2V0dGluZyB0
aGUgcXVlcnkgdG8gdGhlIGVtcHR5IHN0cmluZyB3aWxsIGxlYXZlIGEgIj8iIGluIHRoZQorICAg
IC8vIFVSTCAod2l0aCBub3RoaW5nIGFmdGVyIGl0KS4gVG8gY2xlYXIgdGhlIHF1ZXJ5LCBwYXNz
IGEgbnVsbCBzdHJpbmcuCisgICAgdm9pZCBzZXRRdWVyeShjb25zdCBTdHJpbmcmKTsKIAotICAg
IERlcHJlY2F0ZWRTdHJpbmcgcHJldHR5VVJMKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZWYoY29u
c3QgU3RyaW5nJik7CisKKyAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtV
UkwmLCBjb25zdCBLVVJMJik7CisKKyAgICBvcGVyYXRvciBLSlM6OlVTdHJpbmcoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZzsgfQogCiAjaWYgUExBVEZPUk0oQ0YpCisgICAgS1VSTChDRlVSTFJl
Zik7CiAgICAgQ0ZVUkxSZWYgY3JlYXRlQ0ZVUkwoKSBjb25zdDsKICNlbmRpZgorCiAjaWYgUExB
VEZPUk0oTUFDKQotICAgIE5TVVJMICpnZXROU1VSTCgpIGNvbnN0OworICAgIEtVUkwoTlNVUkwq
KTsKKyAgICBvcGVyYXRvciBOU1VSTCooKSBjb25zdDsKKyNlbmRpZgorI2lmZGVmIF9fT0JKQ19f
CisgICAgb3BlcmF0b3IgTlNTdHJpbmcqKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICNl
bmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCisgICAgS1VSTChjb25zdCBRVXJsJik7CiAgICAgb3Bl
cmF0b3IgUVVybCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBib29sIGlzTG9jYWxGaWxlKCkgY29u
c3Q7Ci0gICAgU3RyaW5nIGZpbGVTeXN0ZW1QYXRoKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgRGVw
cmVjYXRlZFN0cmluZyBkZWNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAg
ICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBkZWNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmlu
ZyBlbmNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAgICAKLSAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwgJiwgY29uc3QgS1VSTCAmKTsKLQogI2lmbmRl
ZiBOREVCVUcKICAgICB2b2lkIHByaW50KCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKICAg
ICBib29sIGlzSGllcmFyY2hpY2FsKCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0KGNvbnN0IEtVUkwm
LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiwgY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAgdm9p
ZCBwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgKm9yaWdpbmFs
U3RyaW5nKTsKKyAgICB2b2lkIGluaXQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFRleHRFbmNvZGluZyYpOworICAgIHN0YXRpYyBib29sIHByb3RvY29sSXMoY29uc3QgU3RyaW5n
JiwgY29uc3QgY2hhciopOworICAgIHZvaWQgY29weVRvQnVmZmVyKFZlY3RvcjxjaGFyLCA1MTI+
JiBidWZmZXIpIGNvbnN0OworCisgICAgLy8gUGFyc2VzIHRoZSBnaXZlbiBVUkwuIFRoZSBvcmln
aW5hbFN0cmluZyBwYXJhbWV0ZXIgYWxsb3dzIGZvciBhbgorICAgIC8vIG9wdGltaXphdGlvbjog
V2hlbiB0aGUgc291cmNlIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXhlZC11cCBzdHJpbmcsCisgICAg
Ly8gaXQgd2lsbCB1c2UgdGhlIHBhc3NlZC1pbiBzdHJpbmcgaW5zdGVhZCBvZiBhbGxvY2F0aW5n
IGEgbmV3IG9uZS4KKyAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcGFy
c2UoY29uc3QgY2hhciogdXJsLCBjb25zdCBTdHJpbmcqIG9yaWdpbmFsU3RyaW5nKTsKIAotICAg
IERlcHJlY2F0ZWRTdHJpbmcgdXJsU3RyaW5nOworICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBi
b29sIG1faXNWYWxpZDsKICAgICBpbnQgc2NoZW1lRW5kUG9zOwogICAgIGludCB1c2VyU3RhcnRQ
b3M7CkBAIC0xNDQsMTAgKzE4NCw2NCBAQCBwcml2YXRlOgogICAgIGludCBwYXRoRW5kUG9zOwog
ICAgIGludCBxdWVyeUVuZFBvczsKICAgICBpbnQgZnJhZ21lbnRFbmRQb3M7Ci0gICAgCi0gICAg
ZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1JlZihjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJMJiBi
KTsKIH07CiAKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJik7Citib29sIG9wZXJhdG9yIT0oY29uc3QgS1VS
TCYsIGNvbnN0IEtVUkwmKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJik7Citib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nJiwgY29uc3QgS1VSTCYpOworCiti
b29sIGVxdWFsSWdub3JpbmdSZWYoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKworY29uc3Qg
S1VSTCYgYmxhbmtVUkwoKTsKKworLy8gRnVuY3Rpb25zIHRvIGRvIFVSTCBvcGVyYXRpb25zIG9u
IHN0cmluZ3MuCisvLyBUaGVzZSBhcmUgb3BlcmF0aW9ucyB0aGF0IGFyZW4ndCBmYXN0ZXIgb24g
YSBwYXJzZWQgVVJMLgorCitib29sIHByb3RvY29sSXMoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IGNoYXIqIHByb3RvY29sKTsKKworLy8gVW5lc2NhcGVzIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcg
VVJMIGVzY2FwaW5nIHJ1bGVzLCBnaXZlbiBhbiBvcHRpb25hbAorLy8gZW5jb2RpbmcgKGRlZmF1
bHRpbmcgdG8gVVRGLTggb3RoZXJ3aXNlKS4gREFOR0VSOiBJZiB0aGUgVVJMIGhhcyAiJTAwIgor
Ly8gaW4gaXQsIHRoZSByZXN1bHRpbmcgc3RyaW5nIHdpbGwgaGF2ZSBlbWJlZGRlZCBudWxsIGNo
YXJhY3RlcnMhCitTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYp
OworU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBU
ZXh0RW5jb2RpbmcmKTsKKworU3RyaW5nIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoY29u
c3QgU3RyaW5nJik7CisKKy8vIElubGluZXMuCisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgS1VSTCYgYSwgY29uc3QgS1VSTCYgYikKK3sKKyAgICByZXR1cm4gYS5zdHJpbmcoKSA9PSBi
LnN0cmluZygpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwmIGEsIGNv
bnN0IFN0cmluZyYgYikKK3sKKyAgICByZXR1cm4gYS5zdHJpbmcoKSA9PSBiOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgS1VSTCYgYikKK3sKKyAg
ICByZXR1cm4gYSA9PSBiLnN0cmluZygpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEtVUkwmIGEsIGNvbnN0IEtVUkwmIGIpCit7CisgICAgcmV0dXJuIGEuc3RyaW5nKCkgIT0g
Yi5zdHJpbmcoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLVVJMJiBhLCBj
b25zdCBTdHJpbmcmIGIpCit7CisgICAgcmV0dXJuIGEuc3RyaW5nKCkgIT0gYjsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEtVUkwmIGIpCit7Cisg
ICAgcmV0dXJuIGEgIT0gYi5zdHJpbmcoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gS1VSTF9oCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vY2YvS1VSTENGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
RlVSTC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMzYsMzUgKzM1LDQ2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogS1VSTDo6S1VSTChDRlVSTFJlZiB1cmwpCiB7Ci0gICAgaWYgKHVy
bCkgewotICAgICAgICBDRkluZGV4IGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcyh1cmwsIDAs
IDApOwotICAgICAgICBWZWN0b3I8Y2hhciwgMjA0OD4gYnVmZmVyKGJ5dGVzTGVuZ3RoICsgNik7
IC8vIDYgZm9yICJmaWxlOiIsIDEgZm9yIE5VTCB0ZXJtaW5hdG9yCi0gICAgICAgIGNoYXIqIGJ5
dGVzID0gJmJ1ZmZlcls1XTsKLSAgICAgICAgQ0ZVUkxHZXRCeXRlcyh1cmwsIChVSW50OCopYnl0
ZXMsIGJ5dGVzTGVuZ3RoKTsKLSAgICAgICAgYnl0ZXNbYnl0ZXNMZW5ndGhdID0gJ1wwJzsKLSAg
ICAgICAgaWYgKGJ5dGVzWzBdID09ICcvJykgewotICAgICAgICAgICAgYnVmZmVyWzBdID0gJ2Yn
OwotICAgICAgICAgICAgYnVmZmVyWzFdID0gJ2knOwotICAgICAgICAgICAgYnVmZmVyWzJdID0g
J2wnOwotICAgICAgICAgICAgYnVmZmVyWzNdID0gJ2UnOwotICAgICAgICAgICAgYnVmZmVyWzRd
ID0gJzonOwotICAgICAgICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgcGFyc2UoYnl0ZXMsIDApOwotICAgIH0gZWxzZQotICAgICAgICBw
YXJzZSgiIiwgMCk7CisgICAgaWYgKCF1cmwpIHsKKyAgICAgICAgcGFyc2UoMCwgMCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDRkluZGV4IGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRC
eXRlcyh1cmwsIDAsIDApOworICAgIFZlY3RvcjxjaGFyLCA1MTI+IGJ1ZmZlcihieXRlc0xlbmd0
aCArIDYpOyAvLyA1IGZvciAiZmlsZToiLCAxIGZvciBudWxsIGNoYXJhY3RlciB0byBlbmQgQyBz
dHJpbmcKKyAgICBjaGFyKiBieXRlcyA9ICZidWZmZXJbNV07CisgICAgQ0ZVUkxHZXRCeXRlcyh1
cmwsIHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihieXRlcyksIGJ5dGVzTGVuZ3RoKTsKKyAgICBp
ZiAoYnl0ZXNbMF0gIT0gJy8nKSB7CisgICAgICAgIHBhcnNlKGJ5dGVzLCAwKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBieXRlc1tieXRlc0xlbmd0aF0gPSAnXDAnOworCisgICAgYnVm
ZmVyWzBdID0gJ2YnOworICAgIGJ1ZmZlclsxXSA9ICdpJzsKKyAgICBidWZmZXJbMl0gPSAnbCc7
CisgICAgYnVmZmVyWzNdID0gJ2UnOworICAgIGJ1ZmZlcls0XSA9ICc6JzsKKworICAgIHBhcnNl
KGJ1ZmZlci5kYXRhKCksIDApOwogfQogCiBDRlVSTFJlZiBLVVJMOjpjcmVhdGVDRlVSTCgpIGNv
bnN0CiB7Ci0gICAgY29uc3QgVUludDggKmJ5dGVzID0gKGNvbnN0IFVJbnQ4ICopdXJsU3RyaW5n
LmxhdGluMSgpOworICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB0aGlzIHJldHVybiBmb3IgaW52
YWxpZCBVUkxzPworICAgIC8vIEN1cnJlbnRseSBpdCB0aHJvd3MgYXdheSB0aGUgaGlnaCBieXRl
cyBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGluIHRoYXQgY2FzZSwKKyAgICAvLyB3
aGljaCBpcyBjbGVhcmx5IHdyb25nLgorCisgICAgVmVjdG9yPGNoYXIsIDUxMj4gYnVmZmVyOwor
ICAgIGNvcHlUb0J1ZmZlcihidWZmZXIpOworCiAgICAgLy8gTk9URTogV2UgdXNlIFVURi04IGhl
cmUgc2luY2UgdGhpcyBlbmNvZGluZyBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHN0cmluZ3Mgd2hl
biByZXR1cm5pbmcgVVJMIGNvbXBvbmVudHMKICAgICAvLyAoZS5nIGNhbGxzIHRvIE5TVVJMIC1w
YXRoKS4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBpcyBub3QgdG9sZXJhbnQgb2YgaWxsZWdhbCBV
VEYtOCBzZXF1ZW5jZXMsIHdoaWNoCiAgICAgLy8gY291bGQgZWl0aGVyIGJlIGEgbWFsZm9ybWVk
IHN0cmluZyBvciBieXRlcyBpbiBhIGRpZmZlcmVudCBlbmNvZGluZywgbGlrZSBTaGlmdC1KSVMs
IHNvIHdlIGZhbGwgYmFjawogICAgIC8vIG9udG8gdXNpbmcgSVNPIExhdGluLTEgaW4gdGhvc2Ug
Y2FzZXMuCi0gICAgQ0ZVUkxSZWYgcmVzdWx0ID0gQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhC
eXRlcygwLCBieXRlcywgdXJsU3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgs
IDAsIHRydWUpOworICAgIENGVVJMUmVmIHJlc3VsdCA9IENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxX
aXRoQnl0ZXMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ1ZmZlci5kYXRhKCkp
LCBidWZmZXIuc2l6ZSgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIDAsIHRydWUpOwogICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5
dGVzKDAsIGJ5dGVzLCB1cmxTdHJpbmcubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0
aW4xLCAwLCB0cnVlKTsKKyAgICAgICAgcmVzdWx0ID0gQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdp
dGhCeXRlcygwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnVmZmVyLmRhdGEoKSks
IGJ1ZmZlci5zaXplKCksIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLCAwLCB0cnVlKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03OSw5ICs4OSw3IEBAIFN0cmluZyBLVVJMOjpmaWxl
U3lzdGVtUGF0aCgpIGNvbnN0CiAjZWxzZQogICAgIENGVVJMUGF0aFN0eWxlIHBhdGhTdHlsZSA9
IGtDRlVSTFBPU0lYUGF0aFN0eWxlOwogI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHBhdGgoQWRvcHRDRiwgQ0ZVUkxDb3B5RmlsZVN5c3RlbVBhdGgoY2ZVUkwuZ2V0KCksIHBh
dGhTdHlsZSkpOwotICAgIHJldHVybiBwYXRoLmdldCgpOworICAgIHJldHVybiBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+KEFkb3B0Q0YsIENGVVJMQ29weUZpbGVTeXN0ZW1QYXRoKGNmVVJMLmdldCgp
LCBwYXRoU3R5bGUpKS5nZXQoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHJldmlz
aW9uIDMwMTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MywxMSArMTYzLDEyIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmllKGMKICAgICBtX3F0TW92aWUgPSAwOwogICAg
IAogICAgIC8vIERpc2FibGUgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIG5vdywgPHJkYXI6Ly9wcm9i
bGVtLzU2OTM5Njc+Ci0gICAgaWYgKHVybC5zdGFydHNXaXRoKCJydHNwOiIpKQorICAgIGlmIChw
cm90b2NvbElzKHVybCwgInJ0c3AiKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TRGlj
dGlvbmFyeSogbW92aWVBdHRyaWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtVUkwo
dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSkuZ2V0TlNVUkwoKSwgUVRNb3ZpZVVSTEF0dHJpYnV0ZSwK
KworICAgIE5TVVJMICpjb2NvYVVSTCA9IEtVUkwodXJsKTsKKyAgICBOU0RpY3Rpb25hcnkgKm1v
dmllQXR0cmlidXRlcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2NvYVVSTCwgUVRNb3Zp
ZVVSTEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgUVRNb3ZpZVByZXZlbnRFeHRlcm5hbFVSTExpbmtz
QXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdLCBRVFNlY3VyaXR5UG9saWN5Tm9Dcm9zc1NpdGVBdHRyaWJ1
dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXTsKQEAgLTE3Niw3
ICsxNzcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZShjCiAgICAg
bV9xdE1vdmllLmFkb3B0TlMoW1tRVE1vdmllIGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZXM6bW92
aWVBdHRyaWJ1dGVzIGVycm9yOiZlcnJvcl0pOwogICAgIAogICAgIC8vIEZJWE1FOiBGaW5kIGEg
cHJvcGVyIHdheSB0byBkZXRlY3Qgc3RyZWFtaW5nIGNvbnRlbnQuCi0gICAgbV9pc1N0cmVhbWlu
ZyA9IHVybC5zdGFydHNXaXRoKCJydHNwOiIpOworICAgIG1faXNTdHJlYW1pbmcgPSBwcm90b2Nv
bElzKHVybCwgInJ0c3AiKTsKICAgICAKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0
dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkocmV2aXNpb24gMzAx
NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjcgKzI2LDE3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkNsaXBib2FyZE1hYy5oIgogCi0jaW1wb3J0ICJD
YWNoZWRJbWFnZS5oIgotI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkRPTUVsZW1lbnRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAiRHJhZ0NvbnRyb2xs
ZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgotI2ltcG9ydCAiRXZlbnRIYW5kbGVyLmgiCi0jaW1w
b3J0ICJGbG9hdFJlY3QuaCIKICNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKLSNpbXBvcnQg
IkZyYW1lLmgiCi0jaW1wb3J0ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW1wb3J0ICJJbWFnZS5o
IgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUGFzdGVib2FyZC5oIgotI2ltcG9ydCAiUmFu
Z2UuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlk
Z2UuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIAotQGNsYXNzIFdlYkFy
Y2hpdmU7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2xpcGJvYXJkTWFjOjpDbGlwYm9hcmRN
YWMoYm9vbCBmb3JEcmFnZ2luZywgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkLCBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSAqZnJhbWUpCkBAIC0zMzIsNyArMzIyLDcgQEAgdm9p
ZCBDbGlwYm9hcmRNYWM6OmRlY2xhcmVBbmRXcml0ZURyYWdJbQogewogICAgIEFTU0VSVChmcmFt
ZSk7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5k
cmFnQ29udHJvbGxlcigpLT5jbGllbnQoKS0+ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKG1fcGFz
dGVib2FyZC5nZXQoKSwgW0RPTUVsZW1lbnQgX3dyYXBFbGVtZW50OmVsZW1lbnRdLCB1cmwuZ2V0
TlNVUkwoKSwgdGl0bGUsIGZyYW1lKTsKKyAgICAgICAgcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+
Y2xpZW50KCktPmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShtX3Bhc3RlYm9hcmQuZ2V0KCksIFtE
T01FbGVtZW50IF93cmFwRWxlbWVudDplbGVtZW50XSwgdXJsLCB0aXRsZSwgZnJhbWUpOwogfQog
ICAgIAogRHJhZ0ltYWdlUmVmIENsaXBib2FyZE1hYzo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50
JiBsb2MpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAz
MDE3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxNCArMjYsMTIgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAiQ29va2llSmFyLmgiCiAKLSNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQg
IkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiUGxhdGZvcm1TdHJpbmcuaCIKLQorI2ltcG9y
dCAiS1VSTC5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWZkZWYgQlVJTERJTkdf
T05fVElHRVIKLXR5cGVkZWYgdW5zaWduZWQgaW50IE5TVUludGVnZXI7Cit0eXBlZGVmIHVuc2ln
bmVkIE5TVUludGVnZXI7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsNyAr
NDAsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVuCiB7CiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVy
bC5nZXROU1VSTCgpOworICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7CiAgICAgTlNBcnJheSAq
Y29va2llc0ZvclVSTCA9IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3Rv
cmFnZV0gY29va2llc0ZvclVSTDpjb29raWVVUkxdOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVt
LzU2MzI4ODM+IE9uIDEwLjUsIE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgaGFwcGlseSBzdG9y
ZSBhbiBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCkBA
IC03MCwxNCArNjgsMTQgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8s
IAogICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBO
U1VSTCAqY29va2llVVJMID0gdXJsLmdldE5TVVJMKCk7CisgICAgTlNVUkwgKmNvb2tpZVVSTCA9
IHVybDsKICAgICAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVh
ZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKICAgICBTdHJp
bmcgY29va2llU3RyaW5nID0gY29va2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29raWVTdHIgOiBj
b29raWVTdHIgKyAiPSI7CiAgICAgCiAgICAgTlNBcnJheSAqY29va2llcyA9IFtOU0hUVFBDb29r
aWUgY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0OmNvb2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNv
b2tpZVVSTF07Ci0gICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9y
YWdlXSBzZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6
cG9saWN5QmFzZVVSTC5nZXROU1VSTCgpXTsgICAgCisgICAgW1tOU0hUVFBDb29raWVTdG9yYWdl
IHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOmNvb2tp
ZVVSTCBtYWluRG9jdW1lbnRVUkw6cG9saWN5QmFzZVVSTF07CiAKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS1VSTE1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9LVVJMTWFjLm1tCShyZXZpc2lvbiAz
MDE3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0tVUkxNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjMsNDIgKzIzLDQ1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW5j
bHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIktVUkwuaCIKIAog
I2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBLVVJMOjpL
VVJMKE5TVVJMICp1cmwpCiB7Ci0gICAgaWYgKHVybCkgewotICAgICAgICBDRkluZGV4IGJ5dGVz
TGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcygoQ0ZVUkxSZWYpdXJsLCAwLCAwKTsKLSAgICAgICAgVmVj
dG9yPGNoYXIsIDIwNDg+IGJ1ZmZlcihieXRlc0xlbmd0aCArIDYpOyAgLy8gNSBmb3IgImZpbGU6
IiwgMSBmb3IgTlVMIHRlcm1pbmF0b3IKLSAgICAgICAgY2hhciAqYnl0ZXMgPSAmYnVmZmVyWzVd
OwotICAgICAgICBDRlVSTEdldEJ5dGVzKChDRlVSTFJlZil1cmwsIChVSW50OCAqKWJ5dGVzLCBi
eXRlc0xlbmd0aCk7Ci0gICAgICAgIGJ5dGVzW2J5dGVzTGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAg
IGlmIChieXRlc1swXSA9PSAnLycpIHsKLSAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdmJzsKLSAg
ICAgICAgICAgIGJ1ZmZlclsxXSA9ICdpJzsKLSAgICAgICAgICAgIGJ1ZmZlclsyXSA9ICdsJzsK
LSAgICAgICAgICAgIGJ1ZmZlclszXSA9ICdlJzsKLSAgICAgICAgICAgIGJ1ZmZlcls0XSA9ICc6
JzsKLSAgICAgICAgICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDApOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHBhcnNlKGJ5dGVzLCAwKTsKLSAgICB9IGVsc2UKKyAgICBpZiAoIXVybCkg
ewogICAgICAgICBwYXJzZSgwLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENG
SW5kZXggYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZVUkxS
ZWY+KHVybCksIDAsIDApOworICAgIFZlY3RvcjxjaGFyLCA1MTI+IGJ1ZmZlcihieXRlc0xlbmd0
aCArIDYpOyAvLyA1IGZvciAiZmlsZToiLCAxIGZvciBudWxsIGNoYXJhY3RlciB0byBlbmQgQyBz
dHJpbmcKKyAgICBjaGFyKiBieXRlcyA9ICZidWZmZXJbNV07CisgICAgQ0ZVUkxHZXRCeXRlcyhy
ZWludGVycHJldF9jYXN0PENGVVJMUmVmPih1cmwpLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4o
Ynl0ZXMpLCBieXRlc0xlbmd0aCk7CisgICAgYnl0ZXNbYnl0ZXNMZW5ndGhdID0gJ1wwJzsKKyAg
ICBpZiAoYnl0ZXNbMF0gIT0gJy8nKSB7CisgICAgICAgIHBhcnNlKGJ5dGVzLCAwKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGJ1ZmZlclswXSA9ICdmJzsKKyAgICBidWZmZXJbMV0g
PSAnaSc7CisgICAgYnVmZmVyWzJdID0gJ2wnOworICAgIGJ1ZmZlclszXSA9ICdlJzsKKyAgICBi
dWZmZXJbNF0gPSAnOic7CisKKyAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKIH0KIAotTlNV
UkwgKktVUkw6OmdldE5TVVJMKCkgY29uc3QKK0tVUkw6Om9wZXJhdG9yIE5TVVJMICooKSBjb25z
dAogewotICAgIGlmICh1cmxTdHJpbmcuaXNOdWxsKCkpCisgICAgaWYgKGlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgLy8gQ0ZVUkwgY2FuJ3QgaG9sZCBhbiBlbXB0eSBVUkws
IHVubGlrZSBOU1VSTAorICAgIC8vIENGVVJMIGNhbid0IGhvbGQgYW4gZW1wdHkgVVJMLCB1bmxp
a2UgTlNVUkwuCiAgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFtOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiIl07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bQkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZVVSTChOU1Bhc3RlYm9hcmQqIAogICAgIAogICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7
CiAgICAgCi0gICAgTlNVUkwgKmNvY29hVVJMID0gdXJsLmdldE5TVVJMKCk7CisgICAgTlNVUkwg
KmNvY29hVVJMID0gdXJsOwogICAgIE5TU3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2xpZW50KCktPnVzZXJWaXNpYmxlU3RyaW5nKGNvY29hVVJMKTsKICAgICAK
ICAgICBOU1N0cmluZyAqdGl0bGUgPSAoTlNTdHJpbmcqKXRpdGxlU3RyOwpAQCAtMjcwLDcgKzI3
MCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBBU1NF
UlQobm9kZSk7CiAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
IAotICAgIE5TVVJMICpjb2NvYVVSTCA9IHVybC5nZXROU1VSTCgpOworICAgIE5TVVJMICpjb2Nv
YVVSTCA9IHVybDsKICAgICBBU1NFUlQoY29jb2FVUkwpOwogCiAgICAgTlNBcnJheSogdHlwZXMg
PSB3cml0YWJsZVR5cGVzRm9ySW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1NT
TEtleUdlbmVyYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9T
U0xLZXlHZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU1NMS2V5R2VuZXJhdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2
LDcgKzQ2LDcgQEAgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZwogeyAg
IAogICAgIHJldHVybiBbW1dlYkNvcmVLZXlHZW5lcmF0b3Igc2hhcmVkR2VuZXJhdG9yXSBzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmdXaXRoU3RyZW5ndGhJbmRleDprZXlTaXplSW5k
ZXggCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlOmNoYWxsZW5n
ZVN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVVSTDp1cmwu
Z2V0TlNVUkwoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlVVJM
OnVybF07CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJz
LmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBh
cnNlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDggQEAg
Ym9vbCBwYXJzZUhUVFBSZWZyZXNoKGNvbnN0IFN0cmluZyYgcmVmcgogCiBTdHJpbmcgZmlsZW5h
bWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAg
IFZlY3RvcjxTdHJpbmc+IGtleVZhbHVlUGFpcnMgPSB2YWx1ZS5zcGxpdCgnOycpOworICAgIFZl
Y3RvcjxTdHJpbmc+IGtleVZhbHVlUGFpcnM7CisgICAgdmFsdWUuc3BsaXQoJzsnLCBrZXlWYWx1
ZVBhaXJzKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGtleVZhbHVlUGFpcnMuc2l6ZSgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAzMDE3MikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MywxMSArMTczLDExIEBAIGJvb2wgUmVz
b3VyY2VIYW5kbGU6OnBvcnRBbGxvd2VkKGNvbnN0IFIKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBBbGxvdyBwb3J0cyAyMSBhbmQgMjIgZm9yIEZUUCBVUkxzLCBhcyBNb3ppbGxhIGRv
ZXMuCi0gICAgaWYgKChwb3J0ID09IDIxIHx8IHBvcnQgPT0gMjIpICYmIHJlcXVlc3QudXJsKCku
ZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoImZ0cDoiLCBmYWxzZSkpCisgICAgaWYgKChw
b3J0ID09IDIxIHx8IHBvcnQgPT0gMjIpICYmIHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiZnRw
IikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQWxsb3cgYW55IHBvcnQgbnVtYmVy
IGluIGEgZmlsZSBVUkwsIHNpbmNlIHRoZSBwb3J0IG51bWJlciBpcyBpZ25vcmVkLgotICAgIGlm
IChyZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCJmaWxlOiIsIGZh
bHNlKSkKKyAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJmaWxlIikpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQkocmV2aXNpb24gMzAxNzIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9m
ZnNldDogNCAtKi0KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNSw4ICsyNSw5IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJLVVJMLmgiCiAjaW1wb3J0ICJSZXNvdXJjZUVycm9yLmgiCisKKyNpbXBvcnQgIktVUkwuaCIK
ICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogCiBAaW50ZXJmYWNlIE5TRXJyb3Ig
KFdlYkV4dHJhcykKQEAgLTYzLDggKzY0LDkgQEAgUmVzb3VyY2VFcnJvcjo6b3BlcmF0b3IgTlNF
cnJvciooKSBjb25zdAogICAgICAgICAgICAgW3VzZXJJbmZvLmdldCgpIHNldFZhbHVlOm1fbG9j
YWxpemVkRGVzY3JpcHRpb24gZm9yS2V5Ok5TTG9jYWxpemVkRGVzY3JpcHRpb25LZXldOwogCiAg
ICAgICAgIGlmICghbV9mYWlsaW5nVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTlNVUkwg
KmNvY29hVVJMID0gS1VSTChtX2ZhaWxpbmdVUkwpOwogICAgICAgICAgICAgW3VzZXJJbmZvLmdl
dCgpIHNldFZhbHVlOm1fZmFpbGluZ1VSTCBmb3JLZXk6QCJOU0Vycm9yRmFpbGluZ1VSTFN0cmlu
Z0tleSJdOwotICAgICAgICAgICAgW3VzZXJJbmZvLmdldCgpIHNldFZhbHVlOktVUkwobV9mYWls
aW5nVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSkuZ2V0TlNVUkwoKSBmb3JLZXk6QCJOU0Vycm9yRmFp
bGluZ1VSTEtleSJdOworICAgICAgICAgICAgW3VzZXJJbmZvLmdldCgpIHNldFZhbHVlOmNvY29h
VVJMIGZvcktleTpAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il07CiAgICAgICAgIH0KIAogICAgICAg
ICBtX3BsYXRmb3JtRXJyb3IuYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWlu
Om1fZG9tYWluIGNvZGU6bV9lcnJvckNvZGUgdXNlckluZm86dXNlckluZm8uZ2V0KCldKTsKQEAg
LTc0LDQgKzc2LDMgQEAgUmVzb3VyY2VFcnJvcjo6b3BlcmF0b3IgTlNFcnJvciooKSBjb25zdAog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLy8gLSotIG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSot
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11
ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQy
LDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291cmNlUmVxdWVz
dCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJl
c291cmNlUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkgCi0gICAgICAgICAgICA6IFJlc291cmNl
UmVxdWVzdEJhc2UoS1VSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKSwgVXNlUHJvdG9jb2xDYWNo
ZVBvbGljeSkKKyAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKHVybCksIFVz
ZVByb3RvY29sQ2FjaGVQb2xpY3kpCiAgICAgICAgIHsKICAgICAgICAgfQogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQko
cmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
UmVxdWVzdE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUsMTUgKzc1LDE1IEBAIHZvaWQgUmVz
b3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmUKICAgICBOU011dGFibGVVUkxSZXF1ZXN0
KiBuc1JlcXVlc3QgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgbXV0YWJsZUNvcHldOwogCiAgICAgaWYg
KG5zUmVxdWVzdCkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRVUkw6dXJsKCkuZ2V0TlNVUkwoKV07
CisgICAgICAgIFtuc1JlcXVlc3Qgc2V0VVJMOnVybCgpXTsKICAgICBlbHNlCi0gICAgICAgIG5z
UmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6dXJsKCku
Z2V0TlNVUkwoKV07CisgICAgICAgIG5zUmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBh
bGxvY10gaW5pdFdpdGhVUkw6dXJsKCldOwogICAgIAogICAgIHdrU3VwcG9ydHNNdWx0aXBhcnRY
TWl4ZWRSZXBsYWNlKG5zUmVxdWVzdCk7CiAKICAgICBbbnNSZXF1ZXN0IHNldENhY2hlUG9saWN5
OihOU1VSTFJlcXVlc3RDYWNoZVBvbGljeSljYWNoZVBvbGljeSgpXTsKICAgICBbbnNSZXF1ZXN0
IHNldFRpbWVvdXRJbnRlcnZhbDp0aW1lb3V0SW50ZXJ2YWwoKV07Ci0gICAgW25zUmVxdWVzdCBz
ZXRNYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMKCkuZ2V0TlNVUkwoKV07CisgICAgW25z
UmVxdWVzdCBzZXRNYWluRG9jdW1lbnRVUkw6bWFpbkRvY3VtZW50VVJMKCldOwogICAgIGlmICgh
aHR0cE1ldGhvZCgpLmlzRW1wdHkoKSkKICAgICAgICAgW25zUmVxdWVzdCBzZXRIVFRQTWV0aG9k
Omh0dHBNZXRob2QoKV07CiAgICAgW25zUmVxdWVzdCBzZXRIVFRQU2hvdWxkSGFuZGxlQ29va2ll
czphbGxvd0hUVFBDb29raWVzKCldOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbQkocmV2aXNpb24gMzAxNzIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgTlNVUkxSZXNwb25zZSAqUmVzb3VyY2VSZXNwb25z
ZTo6bnNVUkxSZQogICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gLTE7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IHN0YXRpY19jYXN0
PE5TSW50ZWdlcj4obV9leHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgICAgICBjb25zdF9jYXN0
PFJlc291cmNlUmVzcG9uc2UqPih0aGlzKS0+bV9uc1Jlc3BvbnNlLmFkb3B0TlMoW1tOU1VSTFJl
c3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDptX3VybC5nZXROU1VSTCgpIE1JTUVUeXBlOm1fbWlt
ZVR5cGUgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmV4cGVjdGVkQ29udGVudExlbmd0aCB0ZXh0RW5j
b2RpbmdOYW1lOm1fdGV4dEVuY29kaW5nTmFtZV0pOworICAgICAgICBjb25zdF9jYXN0PFJlc291
cmNlUmVzcG9uc2UqPih0aGlzKS0+bV9uc1Jlc3BvbnNlLmFkb3B0TlMoW1tOU1VSTFJlc3BvbnNl
IGFsbG9jXSBpbml0V2l0aFVSTDptX3VybCBNSU1FVHlwZTptX21pbWVUeXBlIGV4cGVjdGVkQ29u
dGVudExlbmd0aDpleHBlY3RlZENvbnRlbnRMZW5ndGggdGV4dEVuY29kaW5nTmFtZTptX3RleHRF
bmNvZGluZ05hbWVdKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbnNSZXNwb25zZS5nZXQoKTsKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lvbiAzMDE3
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzIsOCArMTMyLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RyaW5n
IGZvcm1hdChjb25zdCBjaGFyICosIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7CiAK
LSAgICBWZWN0b3I8U3RyaW5nPiBzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwgYm9vbCBh
bGxvd0VtcHR5RW50cmllcyA9IGZhbHNlKSBjb25zdDsKLSAgICBWZWN0b3I8U3RyaW5nPiBzcGxp
dChVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBmYWxzZSkgY29uc3Q7
CisgICAgdm9pZCBzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwgVmVjdG9yPFN0cmluZz4m
IHJlc3VsdCkgY29uc3Q7CisgICAgdm9pZCBzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwg
Ym9vbCBhbGxvd0VtcHR5RW50cmllcywgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3Q7Cisg
ICAgdm9pZCBzcGxpdChVQ2hhciBzZXBhcmF0b3IsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNv
bnN0OworICAgIHZvaWQgc3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRy
aWVzLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdDsKIAogICAgIGludCB0b0ludChib29s
KiBvayA9IDApIGNvbnN0OwogICAgIGludDY0X3QgdG9JbnQ2NChib29sKiBvayA9IDApIGNvbnN0
OwpAQCAtMjI5LDYgKzIzMSwxMCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlcHJl
Y2F0ZWRTCiAKIGlubGluZSBib29sIG9wZXJhdG9yIShjb25zdCBTdHJpbmcmIHN0cikgeyByZXR1
cm4gc3RyLmlzTnVsbCgpOyB9CiAKK2Jvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNvbnN0IFVD
aGFyKiwgc2l6ZV90KTsKKwordm9pZCBhcHBlbmQoVmVjdG9yPFVDaGFyPiYsIGNvbnN0IFN0cmlu
ZyYpOworCiAjaWZkZWYgX19PQkpDX18KIC8vIFRoaXMgaXMgZm9yIHNpdHVhdGlvbnMgaW4gV2Vi
S2l0IHdoZXJlIHRoZSBsb25nIHN0YW5kaW5nIGJlaGF2aW9yIGhhcyBiZWVuCiAvLyAibmlsIGlm
IGVtcHR5Iiwgc28gd2UgdHJ5IHRvIG1haW50YWluIGxvbmdzdGFuZGluZyBiZWhhdmlvciBmb3Ig
dGhlIHNha2Ugb2YKQEAgLTIzNiw2ICsyNDIsMTkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhKGNv
bnN0IFN0cmluZyYgc3RyKQogaW5saW5lIE5TU3RyaW5nKiBuc1N0cmluZ05pbElmRW1wdHkoY29u
c3QgU3RyaW5nJiBzdHIpIHsgIHJldHVybiBzdHIuaXNFbXB0eSgpID8gbmlsIDogKE5TU3RyaW5n
KilzdHI7IH0KICNlbmRpZgogCitpbmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgVUNoYXIgb3JlZCA9
IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgb3Jl
ZCB8PSBjaGFyYWN0ZXJzW2ldOworICAgIHJldHVybiAhKG9yZWQgJiAweEZGODApOworfQorCitp
bmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPFVDaGFyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0
cmluZykKK3sKKyAgICB2ZWN0b3IuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5s
ZW5ndGgoKSk7Cit9CisKIH0KIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDEwICs0NzIsMTAgQEAgTGVuZ3RoKiBTdHJp
bmc6OnRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pIAogICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwt
PnRvTGVuZ3RoQXJyYXkobGVuKSA6IDA7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFN0cmluZzo6c3Bs
aXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpIGNvbnN0
Cit2b2lkIFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wgYWxsb3dF
bXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgVmVjdG9y
PFN0cmluZz4gcmVzdWx0OwotICAgIAorICAgIHJlc3VsdC5jbGVhcigpOworCiAgICAgaW50IHN0
YXJ0UG9zID0gMDsKICAgICBpbnQgZW5kUG9zOwogICAgIHdoaWxlICgoZW5kUG9zID0gZmluZChz
ZXBhcmF0b3IsIHN0YXJ0UG9zKSkgIT0gLTEpIHsKQEAgLTQ4MywxNyArNDgzLDMzIEBAIFZlY3Rv
cjxTdHJpbmc+IFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW4KICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykpOwogICAgICAgICBz
dGFydFBvcyA9IGVuZFBvcyArIHNlcGFyYXRvci5sZW5ndGgoKTsKICAgICB9Ci0gICAgaWYgKGFs
bG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IChpbnQpbGVuZ3RoKCkpCisgICAgaWYgKGFs
bG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKCkp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcykpOworfQorCit2b2lk
IFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIFZlY3RvcjxTdHJpbmc+JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNwbGl0KHNlcGFyYXRvciwgZmFsc2UsIHJlc3Vs
dCk7Cit9CisKK3ZvaWQgU3RyaW5nOjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dF
bXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgcmVzdWx0
LmNsZWFyKCk7CisKKyAgICBpbnQgc3RhcnRQb3MgPSAwOworICAgIGludCBlbmRQb3M7CisgICAg
d2hpbGUgKChlbmRQb3MgPSBmaW5kKHNlcGFyYXRvciwgc3RhcnRQb3MpKSAhPSAtMSkgeworICAg
ICAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9zKQorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChzdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9z
KSk7CisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisgICAgaWYgKGFsbG93
RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKCkpKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcykpOwotICAgIAotICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFN0cmluZzo6c3BsaXQoVUNoYXIgc2Vw
YXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVzKSBjb25zdAordm9pZCBTdHJpbmc6OnNwbGl0
KFVDaGFyIHNlcGFyYXRvciwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBW
ZWN0b3I8U3RyaW5nPiByZXN1bHQ7Ci0gIAotICAgIHJldHVybiBzcGxpdChTdHJpbmcoJnNlcGFy
YXRvciwgMSksIGFsbG93RW1wdHlFbnRyaWVzKTsKKyAgICByZXR1cm4gc3BsaXQoU3RyaW5nKCZz
ZXBhcmF0b3IsIDEpLCBmYWxzZSwgcmVzdWx0KTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIVE1MIHJlbmRlcmluZyBlbmdp
bmUgZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDE5ICsyMSwxNCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKIAotI2luY2x1ZGUgIkNTU0hl
bHBlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKIAogI2lmIEVOQUJMRShTVkcpCkBAIC0yNDEsNyArMjM0LDcgQEAgS1VS
TCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUltYWdlVVJMKCkgYwogICAgIGVsc2UKICAgICAgICAg
cmV0dXJuIEtVUkwoKTsKICAgICAKLSAgICByZXR1cm4gS1VSTChtX2lubmVyTm9uU2hhcmVkTm9k
ZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwodXJsU3RyaW5nKS5kZXByZWNhdGVk
U3RyaW5nKCkpKTsKKyAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKHBhcnNlVVJMKHVybFN0cmluZykpOwogfQogCiBLVVJMIEhpdFRlc3RSZXN1
bHQ6OmFic29sdXRlTGlua1VSTCgpIGNvbnN0CkBAIC0yNTksNyArMjUyLDcgQEAgS1VSTCBIaXRU
ZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwoKSBjbwogICAgIGVsc2UKICAgICAgICAgcmV0dXJu
IEtVUkwoKTsKIAotICAgIHJldHVybiBLVVJMKG1faW5uZXJVUkxFbGVtZW50LT5kb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChwYXJzZVVSTCh1cmxTdHJpbmcpLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOwor
ICAgIHJldHVybiBtX2lubmVyVVJMRWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFy
c2VVUkwodXJsU3RyaW5nKSk7CiB9CiAKIGJvb2wgSGl0VGVzdFJlc3VsdDo6aXNMaXZlTGluaygp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAz
MDE3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OmxheU91dEF4aXMo
R3JpZEF4aXMKICAgICB9CiAgICAgCiAgICAgLy8gSWYgd2Ugc3RpbGwgaGF2ZSBzb21lIGxlZnQg
b3ZlciBzcGFjZSB3ZSBwcm9iYWJseSBlbmRlZCB1cCB3aXRoIGEgcmVtYWluZGVyIG9mCi0gICAg
Ly8gYSBkaXZpc2lvbi4gV2UgY2FuIG5vdCBzcHJlYWQgaXQgZXZlbmx5IGFueW1vcmUuIElmIHdl
IGhhdmUgYW55IHBlcmNlbnRhZ2UgCisgICAgLy8gYSBkaXZpc2lvbi4gV2UgY2Fubm90IHNwcmVh
ZCBpdCBldmVubHkgYW55bW9yZS4gSWYgd2UgaGF2ZSBhbnkgcGVyY2VudGFnZSAKICAgICAvLyBj
b2x1bW5zL3Jvd3Mgc2ltcGx5IHNwcmVhZCB0aGUgcmVtYWluZGVyIGVxdWFsbHkgb3ZlciBhbGwg
YXZhaWxhYmxlIHBlcmNlbnRhZ2UgY29sdW1ucywgCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGVp
ciBzaXplLgogICAgIGlmIChyZW1haW5pbmdMZW4gJiYgY291bnRQZXJjZW50KSB7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxMCBAQAot
LyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDA2IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3
b2xmLmNvbSkKICAqICAgICAgICAgICAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjI1LDcgKzIyMyw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFp
bnRJbmYKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0ZXh0ID0gbV9hbHRUZXh0
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IG1fYWx0
VGV4dDsKICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJy
ZW5jeVN5bWJvbCgpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGb250KHN0eWxlKCkt
PmZvbnQoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlKCkt
PmNvbG9yKCkpOwpAQCAtMjM2LDcgKzIzNCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVw
bGFjZWQoUGFpbnRJbmYKIAogICAgICAgICAgICAgICAgIC8vIE9ubHkgZHJhdyB0aGUgYWx0IHRl
eHQgaWYgaXQnbGwgZml0IHdpdGhpbiB0aGUgY29udGVudCBib3gsCiAgICAgICAgICAgICAgICAg
Ly8gYW5kIG9ubHkgaWYgaXQgZml0cyBhYm92ZSB0aGUgZXJyb3IgaW1hZ2UuCi0gICAgICAgICAg
ICAgICAgVGV4dFJ1biB0ZXh0UnVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih0ZXh0
LnVuaWNvZGUoKSksIHRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4
dFJ1bih0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAg
aW50IHRleHRXaWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CiAgICAgICAgICAgICAgICAgaWYg
KGVycm9yUGljdHVyZURyYXduKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1c2FibGVXaWR0
aCA+PSB0ZXh0V2lkdGggJiYgZm9udC5oZWlnaHQoKSA8PSBpbWFnZVkpCkBAIC0yNjcsNyArMjY1
LDcgQEAgaW50IFJlbmRlckltYWdlOjptaW5pbXVtUmVwbGFjZWRIZWlnaHQoKQogSFRNTE1hcEVs
ZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpCiB7CiAgICAgSFRNTEltYWdlRWxlbWVudCog
aSA9IGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoaW1nVGFnKSA/IHN0YXRpY19j
YXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50KCkpIDogMDsKLSAgICByZXR1cm4gaSA/IGkt
PmRvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkpIDogMDsKKyAgICByZXR1cm4g
aSA/IGktPmRvY3VtZW50KCktPmdldEltYWdlTWFwKGktPnVzZU1hcCgpKSA6IDA7CiB9CiAKIGJv
b2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2OCwyNCArMTY2OCwxNyBAQCBJbnRSZWN0IFJl
bmRlck9iamVjdDo6cGFpbnRpbmdSb290UmVjdChJCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIEludFJlY3QgcmVjdCkKK3ZvaWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKKyAgICBp
ZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKICAgICBOb2RlKiBub2RlID0gZWxl
bWVudCgpOwotICAgIGlmIChub2RlKSB7Ci0gICAgICAgIGlmIChncmFwaGljc0NvbnRleHQpIHsK
LSAgICAgICAgICAgIGlmIChyZWN0LndpZHRoKCkgPiAwICYmIHJlY3QuaGVpZ2h0KCkgPiAwKSB7
Ci0gICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaHJlZjsKLSAgICAgICAgICAgICAgICBp
ZiAoZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgICAgICAgICAgICAgIGhyZWYgPSBlbGVtZW50
LT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFocmVmLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEtVUkwgbGluayA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGhyZWYuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRVUkxGb3JSZWN0KGxpbmssIHJlY3QpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAo
IW5vZGUgfHwgIW5vZGUtPmlzTGluaygpIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgaWYgKGhyZWYuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjb250ZXh0LT5zZXRVUkxGb3JSZWN0KG5vZGUt
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYpLCByZWN0KTsKIH0KIAogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAg
ICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwNCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHB1YmxpYzoKICAgICAvKiBUaGlzIGZ1bmN0aW9u
IHBlcmZvcm1zIGEgbGF5b3V0IG9ubHkgaWYgb25lIGlzIG5lZWRlZC4gKi8KICAgICB2b2lkIGxh
eW91dElmTmVlZGVkKCkgeyBpZiAobmVlZHNMYXlvdXQoKSkgbGF5b3V0KCk7IH0KIAotICAgIC8v
IHVzZWQgZm9yIGVsZW1lbnQgc3RhdGUgdXBkYXRlcyB0aGF0IGNhbiBub3QgYmUgZml4ZWQgd2l0
aCBhCisgICAgLy8gdXNlZCBmb3IgZWxlbWVudCBzdGF0ZSB1cGRhdGVzIHRoYXQgY2Fubm90IGJl
IGZpeGVkIHdpdGggYQogICAgIC8vIHJlcGFpbnQgYW5kIGRvIG5vdCBuZWVkIGEgcmVsYXlvdXQK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSB7IH0KIApAQCAtNjcxLDcgKzY3
MSw3IEBAIHB1YmxpYzoKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdpbGwgYmUgcGFpbnRlZCBpZiB0
aGlzIG9iamVjdCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9vdAogICAgIEludFJlY3QgcGFp
bnRpbmdSb290UmVjdChJbnRSZWN0JiB0b3BMZXZlbFJlY3QpOwogCi0gICAgdm9pZCBhZGRQREZV
UkxSZWN0KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QpOworICAgIHZvaWQgYWRkUERGVVJMUmVj
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAkocmV2aXNpb24gMzAxNzIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMCArMSw4IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdC4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5u
QGtkZS5vcmc+CiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVp
bkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDExICsy
MCwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCiAKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgpAQCAtMzcsMTAgKzM0LDggQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQYXJhbUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MSwyMSArNTYsMTcgQEAgUmVuZGVyUGFydE9iamVjdDo6
flJlbmRlclBhcnRPYmplY3QoKQogICAgICAgICBtX3ZpZXctPnJlbW92ZVdpZGdldFRvVXBkYXRl
KHRoaXMpOwogfQogCi1zdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQgKmRvYywgY29u
c3QgU3RyaW5nICZ1cmwpCitzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywg
Y29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgS1VSTCBuZXdVUkwoZG9jLT5jb21wbGV0ZVVSTCh1
cmwuZGVwcmVjYXRlZFN0cmluZygpKSk7Ci0gICAgbmV3VVJMLnNldFJlZihEZXByZWNhdGVkU3Ry
aW5nOjpudWxsKTsKLSAgICAKICAgICBpZiAoZG9jLT5mcmFtZSgpLT5wYWdlKCktPmZyYW1lQ291
bnQoKSA+PSAyMDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIGFsbG93IG9u
ZSBsZXZlbCBvZiBzZWxmLXJlZmVyZW5jZSBiZWNhdXNlIHNvbWUgc2l0ZXMgZGVwZW5kIG9uIHRo
YXQuCiAgICAgLy8gQnV0IHdlIGRvbid0IGFsbG93IG1vcmUgdGhhbiBvbmUuCisgICAgS1VSTCBj
b21wbGV0ZVVSTCA9IGRvYy0+Y29tcGxldGVVUkwodXJsKTsKICAgICBib29sIGZvdW5kU2VsZlJl
ZmVyZW5jZSA9IGZhbHNlOwotICAgIGZvciAoRnJhbWUgKmZyYW1lID0gZG9jLT5mcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewotICAgICAgICBLVVJMIGZy
YW1lVVJMID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKLSAgICAgICAgZnJhbWVVUkwuc2V0UmVm
KERlcHJlY2F0ZWRTdHJpbmc6Om51bGwpOwotICAgICAgICBpZiAoZnJhbWVVUkwgPT0gbmV3VVJM
KSB7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2MtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nUmVm
KGZyYW1lLT5sb2FkZXIoKS0+dXJsKCksIGNvbXBsZXRlVVJMKSkgewogICAgICAgICAgICAgaWYg
KGZvdW5kU2VsZlJlZmVyZW5jZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBmb3VuZFNlbGZSZWZlcmVuY2UgPSB0cnVlOwpAQCAtMTAyLDEwICs5MywxMCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgbWFwQ2xhc3NJZFRvU2VydmljZVR5CiAgICAgICAgIHNlcnZpY2VU
eXBlID0gImFwcGxpY2F0aW9uL3gtZGlyZWN0b3IiOwogICAgIGVsc2UgaWYgKGNsYXNzSWQuY29u
dGFpbnMoIjZCRjUyQTUyLTM5NEEtMTFkMy1CMTUzLTAwQzA0Rjc5RkFBNiIpKQogICAgICAgICBz
ZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LW1wbGF5ZXIyIjsKLSAgICBlbHNlIGlmICghY2xh
c3NJZC5pc0VtcHR5KCkpCi0gICAgICAgIC8vIFdlIGhhdmUgYSBjbHNpZCwgbWVhbnMgdGhpcyBp
cyBhY3RpdmV4IChOaWtvKQorICAgIGVsc2UgaWYgKCFjbGFzc0lkLmlzRW1wdHkoKSkgeworICAg
ICAgICAvLyBXZSBoYXZlIGEgY2xzaWQsIG1lYW5zIHRoaXMgaXMgQWN0aXZlIFggKE5pa28pCiAg
ICAgICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtYWN0aXZleC1oYW5kbGVyIjsKLSAg
ICAvLyBUT0RPOiBhZGQgbW9yZSBwbHVnaW5zIGhlcmUKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVy
UGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KGJvb2wgb25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lu
cykKQEAgLTEzOSw4ICsxMzAsOCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdl
dChib29sCiAgICAgICBIVE1MRWxlbWVudCAqZW1iZWRPck9iamVjdDsKICAgICAgIGlmIChlbWJl
ZCkgewogICAgICAgICAgIGVtYmVkT3JPYmplY3QgPSAoSFRNTEVsZW1lbnQgKillbWJlZDsKLSAg
ICAgICAgICB1cmwgPSBlbWJlZC0+dXJsOwotICAgICAgICAgIHNlcnZpY2VUeXBlID0gZW1iZWQt
Pm1fc2VydmljZVR5cGU7CisgICAgICAgICAgdXJsID0gZW1iZWQtPnVybCgpOworICAgICAgICAg
IHNlcnZpY2VUeXBlID0gZW1iZWQtPnNlcnZpY2VUeXBlKCk7CiAgICAgICB9IGVsc2UKICAgICAg
ICAgICBlbWJlZE9yT2JqZWN0ID0gKEhUTUxFbGVtZW50ICopbzsKICAgICAgIApAQCAtMjMxLDgg
KzIyMiw4IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KGJvb2wKICAgfSBl
bHNlIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoZW1iZWRUYWcpKSB7CiAgICAgICBIVE1MRW1i
ZWRFbGVtZW50ICpvID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudCo+KGVsZW1lbnQoKSk7
CiAgICAgICBvLT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKTsKLSAgICAgIHVybCA9IG8tPnVy
bDsKLSAgICAgIHNlcnZpY2VUeXBlID0gby0+bV9zZXJ2aWNlVHlwZTsKKyAgICAgIHVybCA9IG8t
PnVybCgpOworICAgICAgc2VydmljZVR5cGUgPSBvLT5zZXJ2aWNlVHlwZSgpOwogCiAgICAgICBp
ZiAodXJsLmlzRW1wdHkoKSAmJiBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgICAgcmV0
dXJuOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE0
ICs0MiwxMCBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisvLyBGSVhNRTogTW92ZSB0byBTdHJpbmdJbXBsLmggZXZlbnR1YWxseS4KIHN0YXRpYyBp
bmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoU3RyaW5nSW1wbCogdGV4dCkKIHsKLSAg
ICBjb25zdCBVQ2hhciogY2hhcnMgPSB0ZXh0LT5jaGFyYWN0ZXJzKCk7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gdGV4dC0+bGVuZ3RoKCk7Ci0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBvcmVkIHw9IGNoYXJzW2ld
OwotICAgIHJldHVybiAhKG9yZWQgJiAweEZGODApOworICAgIHJldHVybiBjaGFyYWN0ZXJzQXJl
QWxsQVNDSUkodGV4dC0+Y2hhcmFjdGVycygpLCB0ZXh0LT5sZW5ndGgoKSk7CiB9CiAKIFJlbmRl
clRleHQ6OlJlbmRlclRleHQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHIp
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gMzAx
NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDQgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViS2l0LgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqICAgICAgICAgICAoQykgMjAwNyBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpAQCAtMTM4LDYgKzEzNiw3IEBAIHZvaWQgcmVu
ZGVyU3VidHJlZVRvSW1hZ2UoSW1hZ2VCdWZmZXIqIGkKICAgICBpZiAoc3ZnQ29udGFpbmVyICYm
ICFkcmF3c0NvbnRlbnRzKQogICAgICAgICBzdmdDb250YWluZXItPnNldERyYXdzQ29udGVudHMo
dHJ1ZSk7CiAKKyAgICBpdGVtLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIGl0ZW0tPnBhaW50KGlu
Zm8sIDAsIDApOwogCiAgICAgaWYgKHN2Z0NvbnRhaW5lciAmJiAhZHJhd3NDb250ZW50cykKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDMwMTcy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCi0jaW5jbHVkZSAiRGVw
cmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMzAxNzIpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1
MSwxNSBAQCB2b2lkIFNWR0ltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgCiAg
ICAgQ2FjaGVkSW1hZ2UgKm5ld0ltYWdlID0gMDsKICAgICBpZiAoIWltYWdlRWxlbWVudC0+aHJl
ZigpLmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHVyaSA9IGltYWdlRWxl
bWVudC0+YmFzZVVSSSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgS1VSTCB1cmkgPSBp
bWFnZUVsZW1lbnQtPmJhc2VVUkkoKTsKICAgICAgICAgaWYgKCF1cmkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgdXJpID0gS1VSTCh1cmksIGltYWdlRWxlbWVudC0+aHJlZigpLmRlcHJlY2F0ZWRT
dHJpbmcoKSkuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAgdXJpID0gS1VSTCh1cmks
IGltYWdlRWxlbWVudC0+aHJlZigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdXJpID0g
aW1hZ2VFbGVtZW50LT5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICBuZXdJbWFn
ZSA9IGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZSh1cmkpOworICAgICAgICAgICAgdXJp
ID0gS1VSTChpbWFnZUVsZW1lbnQtPmhyZWYoKSk7CisgICAgICAgIG5ld0ltYWdlID0gZG9jLT5k
b2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKHVyaS5zdHJpbmcoKSk7CiAgICAgfQogCi0gICAgQ2Fj
aGVkSW1hZ2UgKm9sZEltYWdlID0gaW1hZ2UoKTsKKyAgICBDYWNoZWRJbWFnZSogb2xkSW1hZ2Ug
PSBpbWFnZSgpOwogICAgIGlmIChuZXdJbWFnZSAhPSBvbGRJbWFnZSkgewogICAgICAgICBzZXRM
b2FkaW5nSW1hZ2UobmV3SW1hZ2UpOwogICAgICAgICBpZiAobmV3SW1hZ2UpCkluZGV4OiBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR0ltYWdlLmgiCiAKICNpbmNs
dWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTM5LDcg
KzQxLDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgog
I2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKICNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAi
U1ZHU1ZHRWxlbWVudC5oIgpAQCAtMTM4LDcgKzEzOSwxMSBAQCB2b2lkIFNWR0ltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0
KGRzdFJlY3QpKTsKICAgICBjb250ZXh0LT50cmFuc2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpLngo
KSwgZHN0UmVjdC5sb2NhdGlvbigpLnkoKSk7CiAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXpl
KGRzdFJlY3Qud2lkdGgoKS9zcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkvc3JjUmVj
dC5oZWlnaHQoKSkpOworICAgIAorICAgIGlmIChtX2ZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0
KCkpCisgICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+bGF5b3V0KCk7CiAgICAgbV9mcmFtZS0+cGFp
bnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChzcmNSZWN0KSk7CisKICAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7CiAKICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMTk3LDcgKzIwMiw3IEBA
IGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVIKICAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmNhbmNlbENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBv
bGljeSBjaGVja3MKICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1pdFByb3Zpc2lvbmFs
TG9hZCgwKTsKICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldFJlc3BvbnNlTUlNRVR5cGUo
ImltYWdlL3N2Zyt4bWwiKTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmJlZ2luKCJwbGFj
ZWhvbGRlci5zdmciKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAorICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+YmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVu
dAogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0
YS0+c2l6ZSgpKTsKICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmVuZCgpOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDMwMTcyKQorKysgV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotICogIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA1LTIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgSnVsaWVuIENoYWZmcmFpeCA8anVsaWVuLmNoYWZmcmFpeEBn
bWFpbC5jb20+CiAgKgpAQCAtMjMsMzEgKzIyLDIwIEBACiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVl
c3QuaCIKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1
ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJF
dmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZvcm1E
YXRhLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUmVndWxh
ckV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3VicmVz
b3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0
UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJranNfYmluZGluZy5oIgotI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3Myw3ICsx
NjEsNyBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlWE1MCiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gbV9kb2MtPmltcGxlbWVudGF0
aW9uKCktPmNyZWF0ZURvY3VtZW50KDApOwogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+b3Bl
bigpOwotICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0VVJMKG1fdXJsLmRlcHJlY2F0ZWRT
dHJpbmcoKSk7CisgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRVUkwobV91cmwpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IHNldCBMYXN0LU1vZGlmaWVkIGFuZCBjb29raWVzIChjdXJyZW50
bHksIHRob3NlIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgSFRNTERvY3VtZW50cykuCiAgICAgICAg
ICAgICBtX3Jlc3BvbnNlWE1MLT53cml0ZShTdHJpbmcobV9yZXNwb25zZVRleHQpKTsKICAgICAg
ICAgICAgIG1fcmVzcG9uc2VYTUwtPmZpbmlzaFBhcnNpbmcoKTsKQEAgLTMyMiw3ICszMTAsNyBA
QCBib29sIFhNTEh0dHBSZXF1ZXN0Ojp1cmxNYXRjaGVzRG9jdW1lbnRECiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgLy8gYnV0IGEgcmVtb3RlIGRvY3VtZW50IGNhbiBvbmx5IGxvYWQgZnJv
bSB0aGUgc2FtZSBwb3J0IG9uIHRoZSBzZXJ2ZXIKLSAgICBLVVJMIGRvY3VtZW50VVJMID0gbV9k
b2MtPnVybCgpOworICAgIEtVUkwgZG9jdW1lbnRVUkwobV9kb2MtPnVybCgpKTsKICAgICBpZiAo
ZG9jdW1lbnRVUkwucHJvdG9jb2woKS5sb3dlcigpID09IHVybC5wcm90b2NvbCgpLmxvd2VyKCkK
ICAgICAgICAgICAgICYmIGRvY3VtZW50VVJMLmhvc3QoKS5sb3dlcigpID09IHVybC5ob3N0KCku
bG93ZXIoKQogICAgICAgICAgICAgJiYgZG9jdW1lbnRVUkwucG9ydCgpID09IHVybC5wb3J0KCkp
CkBAIC0zNzIsOSArMzYwLDkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJp
bmcmIAogICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiSU5ERVgiIHx8IG1ldGhvZFVwcGVyID09
ICJMT0NLIiB8fCBtZXRob2RVcHBlciA9PSAiTS1QT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiTUtD
T0wiIHx8IG1ldGhvZFVwcGVyID09ICJNT1ZFIgogICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAi
T1BUSU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9Q
RklORCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBV
VCIgCiAgICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJVTkxPQ0siKQotICAgICAgICBtX21ldGhv
ZCA9IG1ldGhvZFVwcGVyLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgbV9tZXRob2QgPSBt
ZXRob2RVcHBlcjsKICAgICBlbHNlCi0gICAgICAgIG1fbWV0aG9kID0gbWV0aG9kLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKKyAgICAgICAgbV9tZXRob2QgPSBtZXRob2Q7CiAKICAgICBtX2FzeW5jID0g
YXN5bmM7CiAKQEAgLTM4NCw3ICszNzIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNv
bnN0IFN0cmluZyYgCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgYXN5bmMsIGNvbnN0IFN0cmluZyYgdXNlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHModXJsKTsKLSAg
ICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cisg
ICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVzZXIodXNlcik7CiAgICAgCiAgICAgb3BlbihtZXRo
b2QsIHVybFdpdGhDcmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0KQEAgLTM5Miw4ICszODAsOCBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wg
YXN5bmMsIGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHModXJsKTsKLSAgICB1
cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAg
dXJsV2l0aENyZWRlbnRpYWxzLnNldFBhc3MocGFzc3dvcmQuZGVwcmVjYXRlZFN0cmluZygpKTsK
KyAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyKTsKKyAgICB1cmxXaXRoQ3JlZGVu
dGlhbHMuc2V0UGFzcyhwYXNzd29yZCk7CiAgICAgCiAgICAgb3BlbihtZXRob2QsIHVybFdpdGhD
cmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0KQEAgLTQ3Miw3ICs0NjAsNyBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAgICAgcmVmKCk7CiAgICAgewogICAgICAg
ICBLSlM6OkpTTG9jayBsb2NrOwotICAgICAgICBnY1Byb3RlY3ROdWxsVG9sZXJhbnQoS0pTOjpT
Y3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KHRoaXMpKTsKKyAgICAgICAgZ2NQcm90ZWN0
TnVsbFRvbGVyYW50KFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QodGhpcykpOwogICAg
IH0KICAgCiAgICAgLy8gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSBjYW4gcmV0dXJuIG51bGwg
aGVyZSwgZm9yIGV4YW1wbGUgaWYgd2UncmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgcGFnZS4K
QEAgLTUwNyw3ICs0OTUsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigp
ICAgCiB7CiAgICAgewogICAgICAgICBLSlM6OkpTTG9jayBsb2NrOwotICAgICAgICBLSlM6OkpT
VmFsdWUqIHdyYXBwZXIgPSBLSlM6OlNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3QodGhp
cyk7CisgICAgICAgIEtKUzo6SlNWYWx1ZSogd3JhcHBlciA9IFNjcmlwdEludGVycHJldGVyOjpn
ZXRET01PYmplY3QodGhpcyk7CiAgICAgICAgIEtKUzo6Z2NVbnByb3RlY3ROdWxsVG9sZXJhbnQo
d3JhcHBlcik7CiAgICAgCiAgICAgICAgIC8vIHRoZSBYSFIgb2JqZWN0IGl0c2VsZiBob2xkcyBv
biB0byB0aGUgcmVzcG9uc2VUZXh0LCBhbmQKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNp
b24gMzAxNzIpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNSBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQogLyoKLSAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMjMsMjYgKzIxLDEzIEBACiAjZGVmaW5lIFhNTEh0dHBSZXF1ZXN0X2gKIAog
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgotI2lu
Y2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJl
c291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiU3Vi
cmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlIDxranMvdXN0cmluZy5oPgotCi0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIGNsYXNzIERvY3VtZW50
OwotY2xhc3MgRXZlbnQ7Ci1jbGFzcyBFdmVudExpc3RlbmVyOwotY2xhc3MgU3RyaW5nOwotCi10
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIAog
Ly8gdGhlc2UgZXhhY3QgbnVtZXJpYyB2YWx1ZXMgYXJlIGltcG9ydGFudCBiZWNhdXNlIEpTIGV4
cGVjdHMgdGhlbQogZW51bSBYTUxIdHRwUmVxdWVzdFN0YXRlIHsKQEAgLTEyOCw3ICsxMTMsNyBA
QCBwcml2YXRlOgogICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7CiAKICAg
ICBLVVJMIG1fdXJsOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9tZXRob2Q7CisgICAgU3RyaW5n
IG1fbWV0aG9kOwogICAgIEhUVFBIZWFkZXJNYXAgbV9yZXF1ZXN0SGVhZGVyczsKICAgICBTdHJp
bmcgbV9taW1lVHlwZU92ZXJyaWRlOwogICAgIGJvb2wgbV9hc3luYzsKSW5kZXg6IFdlYkNvcmUv
eG1sL1hTTEltcG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTEltcG9y
dFJ1bGUuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAotLyoqCisvKgogICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjps
b2FkU2hlZXQoKQogICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVT
aGVldCgpOwogICAgIGlmICghcGFyZW50U2hlZXQtPmhyZWYoKS5pc051bGwoKSkKICAgICAgICAg
Ly8gdXNlIHBhcmVudCBzdHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAgICAgIGFi
c0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0LT5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpLCBtX3N0
ckhyZWYuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKTsKKyAgICAgICAgYWJzSHJlZiA9IEtV
UkwoS1VSTChwYXJlbnRTaGVldC0+aHJlZigpKSwgbV9zdHJIcmVmKS5zdHJpbmcoKTsKICAgICAK
ICAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5j
b3VudGVyIGEgc3R5bGVzaGVldAogICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUg
c2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgpJbmRleDogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5jcHAJKHJldmlz
aW9uIDMwMTcyKQorKysgV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACi0vKioKKy8qCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
WFNMIGltcGxlbWVudGF0aW9uLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRz
KCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChJU19YU0xUX0VMRU0oY3VycikgJiYg
SVNfWFNMVF9OQU1FKGN1cnIsICJpbXBvcnQiKSkgewogICAgICAgICAgICAgICAgIHhtbENoYXIq
IHVyaVJlZiA9IHhzbHRHZXROc1Byb3AoY3VyciwgKGNvbnN0IHhtbENoYXIqKSJocmVmIiwgWFNM
VF9OQU1FU1BBQ0UpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBsb2FkQ2hpbGRT
aGVldChEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRmOCgoY29uc3QgY2hhciopdXJpUmVmKSk7Cisg
ICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoU3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hh
ciopdXJpUmVmKSk7CiAgICAgICAgICAgICAgICAgeG1sRnJlZSh1cmlSZWYpOwogICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9p
ZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQogICAgICAgICB3aGlsZSAoY3Vycikg
ewogICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSAmJiBJU19Y
U0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbmNsdWRlIikpIHsKICAgICAg
ICAgICAgICAgICB4bWxDaGFyKiB1cmlSZWYgPSB4c2x0R2V0TnNQcm9wKGN1cnIsIChjb25zdCB4
bWxDaGFyKikiaHJlZiIsIFhTTFRfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgICAgICBsb2FkQ2hp
bGRTaGVldChEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRmOCgoY29uc3QgY2hhciopdXJpUmVmKSk7
CisgICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoU3RyaW5nOjpmcm9tVVRGOCgoY29uc3Qg
Y2hhciopdXJpUmVmKSk7CiAgICAgICAgICAgICAgICAgeG1sRnJlZSh1cmlSZWYpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CkBAIC0yMDksNyArMjA5LDcg
QEAgdm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQogICAgIH0KIH0KIAotdm9p
ZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBo
cmVmKQordm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBTdHJpbmcmIGhy
ZWYpCiB7CiAgICAgUmVmUHRyPFhTTEltcG9ydFJ1bGU+IGNoaWxkUnVsZSA9IG5ldyBYU0xJbXBv
cnRSdWxlKHRoaXMsIGhyZWYpOwogICAgIGFwcGVuZChjaGlsZFJ1bGUpOwpJbmRleDogV2ViQ29y
ZS94bWwvWFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFN0eWxl
U2hlZXQuaAkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaGVja0xvYWRlZCgpOwog
CiAgICAgdm9pZCBsb2FkQ2hpbGRTaGVldHMoKTsKLSAgICB2b2lkIGxvYWRDaGlsZFNoZWV0KGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhyZWYpOworICAgIHZvaWQgbG9hZENoaWxkU2hlZXQoY29u
c3QgU3RyaW5nJiBocmVmKTsKIAogICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNo
ZWV0KCk7CiAKSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAzMDE3MikKKysrIFdl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAotLyoqCisvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlv
bi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTEyLDcg
KzExMiw3IEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhjb25zdCB4bWwKICAgICAg
ICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6IHsKICAgICAgICAgICAgIHhzbHRUcmFuc2Zvcm1D
b250ZXh0UHRyIGNvbnRleHQgPSAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIpY3R4dDsKICAgICAg
ICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxOb2RlR2V0QmFzZShjb250ZXh0LT5kb2N1bWVudC0+
ZG9jLCBjb250ZXh0LT5ub2RlKTsKLSAgICAgICAgICAgIEtVUkwgdXJsKChjb25zdCBjaGFyKili
YXNlLCAoY29uc3QgY2hhciopdXJpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsKEtVUkwocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPih1cmkpKTsKICAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7CiAgICAgICAgICAgICBSZXNv
dXJjZUVycm9yIGVycm9yOwogICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsK
QEAgLTI5Myw3ICsyOTMsOCBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjCiBzdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQb2ludGVyKFJlZlB0
cjxYU0xTdHlsZVNoZWV0PiYgY2FjaGVkU3R5bGVzaGVldCwgTm9kZSogc3R5bGVzaGVldFJvb3RO
b2RlKQogewogICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHlsZXNoZWV0Um9vdE5vZGUp
IHsKLSAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IG5ldyBYU0xTdHlsZVNoZWV0KHN0eWxlc2hl
ZXRSb290Tm9kZS0+cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpIDogc3R5
bGVzaGVldFJvb3ROb2RlLCBzdHlsZXNoZWV0Um9vdE5vZGUtPmRvY3VtZW50KCktPnVybCgpKTsK
KyAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IG5ldyBYU0xTdHlsZVNoZWV0KHN0eWxlc2hlZXRS
b290Tm9kZS0+cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpIDogc3R5bGVz
aGVldFJvb3ROb2RlLAorICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1bWVudCgp
LT51cmwoKS5zdHJpbmcoKSk7CiAgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5n
KGNyZWF0ZU1hcmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKICAgICB9CiAgICAgCkBAIC0zMTIs
NyArMzEzLDggQEAgc3RhdGljIGlubGluZSB4bWxEb2NQdHIgeG1sRG9jUHRyRnJvbU5vZAogICAg
IGlmIChzb3VyY2VJc0RvY3VtZW50KQogICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKW93
bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpOwogICAgIGlmICghc291cmNlRG9jKSB7Ci0g
ICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9j
dW1lbnQtPmRvY0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksIHNvdXJjZUlzRG9j
dW1lbnQgPyBvd25lckRvY3VtZW50LT51cmwoKSA6IERlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAg
ICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9jdW1l
bnQtPmRvY0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCisgICAgICAgICAgICBz
b3VyY2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBTdHJpbmco
KSk7CiAgICAgICAgIHNob3VsZERlbGV0ZSA9IChzb3VyY2VEb2MgIT0gMCk7CiAgICAgfQogICAg
IHJldHVybiBzb3VyY2VEb2M7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDA4LTAyLTEyICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAtIHVwZGF0ZWQgZm9yIFdlYkNvcmUgS1VSTCBjaGFuZ2Vz
CisKKyAgICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tOgorICAgICAgICAoLVtXZWJI
aXN0b3J5SXRlbSBVUkxdKTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAqIE1pc2Mv
V2ViRWxlbWVudERpY3Rpb25hcnkubW06CisgICAgICAgICgtW1dlYkVsZW1lbnREaWN0aW9uYXJ5
IF9hYnNvbHV0ZUltYWdlVVJMXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJFbGVtZW50RGljdGlv
bmFyeSBfYWJzb2x1dGVMaW5rVVJMXSk6IERpdHRvLgorICAgICAgICAqIE1pc2MvV2ViTlNBdHRy
aWJ1dGVkU3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoZmlsZVdyYXBwZXJGb3JFbGVtZW50KTog
RGl0dG8uCisgICAgICAgICgrW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06
CisgICAgICAgICgtW05TU3RyaW5nIF93ZWJraXRfc3RyaW5nQnlSZXBsYWNpbmdWYWxpZFBlcmNl
bnRFc2NhcGVzXSk6IFVwZGF0ZWQKKyAgICAgICAgZm9yIGZ1bmN0aW9uIG5hbWUgY2hhbmdlLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAg
ICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKTogUmVtb3ZlZCBnZXROU1VSTCBj
YWxsLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW06CisgICAgICAg
IChXZWJEcmFnQ2xpZW50OjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKTogRGl0dG8uCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KTogRGl0
dG8uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZCk6IERpdHRv
LgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JT
dGFuZGFyZExvYWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRh
dGVHbG9iYWxIaXN0b3J5Rm9yUmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudDo6Y2FuY2VsbGVkRXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpibG9ja2VkRXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpjYW5ub3RTaG93VVJMRXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcik6IERpdHRvLgorICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKTogRGl0dG8uCisg
ICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKTogRGl0
dG8uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6d2lsbFVzZUFyY2hpdmUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZSk6IERpdHRvLgorICAg
ICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjdGlvbkRpY3Rpb25hcnkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFtZSk6IERpdHRvLgorICAgICAg
ICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRUeXBlKTogRGl0dG8uCisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKTogRGl0dG8uCisgICAgICAg
IChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6IERpdHRvLgor
ICAgICAgICAqIFdlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbToKKyAgICAgICAgKC1bV2ViRGF0YVNv
dXJjZSBfVVJMXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJEYXRhU291cmNlIF9pbml0V2l0aERv
Y3VtZW50TG9hZGVyOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSB1bnJlYWNo
YWJsZVVSTF0pOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyBuYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0
aW9uOl0pOiBEaXR0by4KKwogMjAwOC0wMi0xMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1pdHouCkluZGV4OiBXZWJLaXQvbWFj
L0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0
b3J5L1dlYkhpc3RvcnlJdGVtLm1tCShyZXZpc2lvbiAzMDE3MikKKysrIFdlYktpdC9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5SXRlbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NjQsNyArNDY0LDkgQEAgc3RhdGljIFdlYldpbmRvd1dhdGNoZXIgKl93aW5kb3dXYXRjaGVyIAog
ewogICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwogICAgIEtVUkwgdXJsID0gY29yZShfcHJpdmF0
ZSktPnVybCgpOwotICAgIHJldHVybiB1cmwuaXNFbXB0eSgpID8gbmlsIDogdXJsLmdldE5TVVJM
KCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0
dXJuIHVybDsKIH0KIAogLy8gVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBmb3Ig
V2ViSGlzdG9yeUl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgaW5jbHVkZWQKSW5kZXg6IFdlYktpdC9t
YWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0JKHJldmlzaW9uIDMwMTcyKQorKysgV2ViS2l0
L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDE0ICszNSwxMyBAQAogI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgogI2lt
cG9ydCAiV2ViVmlldy5oIgogI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUuaCIKLQotI2ltcG9ydCA8
V2ViS2l0L0RPTUNvcmUuaD4KLSNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvS1VSTC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0L0RPTUNv
cmUuaD4KKyNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCkBAIC0yMDUsNyArMjA0LDcgQEAgc3RhdGljIE5TU3RyaW5nKiBOU1N0cmlu
Z09yTmlsKFN0cmluZyBjbwogCiAtIChOU1VSTCAqKV9hYnNvbHV0ZUltYWdlVVJMCiB7Ci0gICAg
cmV0dXJuIF9yZXN1bHQtPmFic29sdXRlSW1hZ2VVUkwoKS5nZXROU1VSTCgpOworICAgIHJldHVy
biBfcmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJMKCk7CiB9CiAKIC0gKE5TTnVtYmVyICopX2lzU2Vs
ZWN0ZWQKQEAgLTIyMCw3ICsyMTksNyBAQCBzdGF0aWMgTlNTdHJpbmcqIE5TU3RyaW5nT3JOaWwo
U3RyaW5nIGNvCiAKIC0gKE5TVVJMICopX2Fic29sdXRlTGlua1VSTAogewotICAgIHJldHVybiBf
cmVzdWx0LT5hYnNvbHV0ZUxpbmtVUkwoKS5nZXROU1VSTCgpOworICAgIHJldHVybiBfcmVzdWx0
LT5hYnNvbHV0ZUxpbmtVUkwoKTsKIH0KIAogLSAoV2ViRnJhbWUgKilfdGFyZ2V0V2ViRnJhbWUK
SW5kZXg6IFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5t
bQkocmV2aXNpb24gMzAxNzIpCisrKyBXZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVkU3Ry
aW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcg
QEAgc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbQogICAgIAogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0ciA9IGUtPmdldEF0dHJpYnV0ZShzcmNBdHRyKTsKICAgICBp
ZiAoIWF0dHIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5TVVJMICpVUkwgPSBLVVJMKGUtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGF0dHIuZGVwcmVjYXRlZFN0cmluZygpKSkuZ2V0TlNVUkwoKTsK
KyAgICAgICAgTlNVUkwgKlVSTCA9IGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHIpOwog
ICAgICAgICB3cmFwcGVyID0gW1traXQoZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgX2RhdGFTb3Vy
Y2VdIF9maWxlV3JhcHBlckZvclVSTDpVUkxdOwogICAgIH0KICAgICBpZiAoIXdyYXBwZXIpIHsK
QEAgLTQyMiwxMCArNDIyLDcgQEAgc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9y
RWxlbQogICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3Rl
IHRoYXQgd2UgY3JlYXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNo
CiAgICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5l
c3RlZCA8YT4gZWxlbWVudHMuCiAgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYg
Y3VycmVudE5vZGUgPT0gbGlua1N0YXJ0Tm9kZSkgewotICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgaHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUtPmdldEF0dHJpYnV0ZShocmVmQXR0cikp
OwotICAgICAgICAgICAgICAgICAgICBLVVJMIGtVUkwgPSBsaW5rU3RhcnROb2RlLT5kb2N1bWVu
dCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoaHJlZi5kZXByZWNhdGVkU3RyaW5n
KCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVS
TCA9IGtVUkwuZ2V0TlNVUkwoKTsKKyAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGxp
bmtTdGFydE5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5jb21wbGV0ZVVSTChw
YXJzZVVSTChsaW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIE5TUmFuZ2UgdGVtcFJhbmdlID0geyBsaW5rU3RhcnRMb2NhdGlvbiwgW3Jl
c3VsdCBsZW5ndGhdLWxpbmtTdGFydExvY2F0aW9uIH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMz
MTQKICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmli
dXRlTmFtZSB2YWx1ZTpVUkwgcmFuZ2U6dGVtcFJhbmdlXTsKICAgICAgICAgICAgICAgICAgICAg
bGlua1N0YXJ0Tm9kZSA9IDA7CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCShyZXZp
c2lvbiAzMDE3MikKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC04MDIsOCArODAyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCiAtIChOU1N0cmluZyAq
KV93ZWJraXRfc3RyaW5nQnlSZXBsYWNpbmdWYWxpZFBlcmNlbnRFc2NhcGVzCiB7Ci0gICAgRGVw
cmVjYXRlZFN0cmluZyBzID0gS1VSTDo6ZGVjb2RlX3N0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpm
cm9tTlNTdHJpbmcoc2VsZikpOwotICAgIHJldHVybiBzLmdldE5TU3RyaW5nKCk7CisgICAgcmV0
dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhzZWxmKTsKIH0KIAogLSAoTlNTdHJpbmcgKilf
d2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCShyZXZpc2lvbiAzMDE3MikKKysr
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBXZWJDb250ZXh0TWVu
dUNsaWVudDo6Y29udGV4dE1lbnVJdAogCiB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50Ojpkb3du
bG9hZFVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgW21fd2ViVmlldyBfZG93bmxvYWRVUkw6
dXJsLmdldE5TVVJMKCldOworICAgIFttX3dlYlZpZXcgX2Rvd25sb2FkVVJMOnVybF07CiB9CiAK
IHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhTcG90bGlnaHQoKQpJbmRleDog
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbQkocmV2aXNpb24gMzAx
NzIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMjEsMTEgKzEyMSwxMiBAQCBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVudDo6
Y3JlYXRlRHJhZ0ltCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBXZWJIVE1MVmlldyogaHRtbFZpZXcgPSAoV2ViSFRNTFZpZXcqKVtba2l0KGZyYW1lKSBmcmFt
ZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgV2ViSFRNTFZpZXcgKmh0bWxWaWV3ID0gKFdlYkhU
TUxWaWV3ICopW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICBOU1N0
cmluZyAqbGFiZWwgPSAwOwogICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQotICAgICAgICBsYWJl
bCA9IChOU1N0cmluZyopdGl0bGU7Ci0gICAgcmV0dXJuIFtodG1sVmlldyBfZHJhZ0ltYWdlRm9y
VVJMOlt1cmwuZ2V0TlNVUkwoKSBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSB3aXRoTGFiZWw6bGFi
ZWxdOworICAgICAgICBsYWJlbCA9IHRpdGxlOworICAgIE5TVVJMICpjb2NvYVVSTCA9IHVybDsK
KyAgICByZXR1cm4gW2h0bWxWaWV3IF9kcmFnSW1hZ2VGb3JVUkw6W2NvY29hVVJMIF93ZWJfdXNl
clZpc2libGVTdHJpbmddIHdpdGhMYWJlbDpsYWJlbF07CiB9CiAKIApJbmRleDogV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lv
biAzMDE3MikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyNiwxMiArNDI2LDE0IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2EKICAgICAgICAgQ2FsbEZyYW1lTG9h
ZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFt
ZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENhbmNlbENsaWVudFJlZGlyZWN0
Rm9yRnJhbWU6KSwgbV93ZWJGcmFtZS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiBVUkws
IGRvdWJsZSBkZWxheSwgZG91YmxlIGZpcmVEYXRlKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmIHVybCwgZG91
YmxlIGRlbGF5LCBkb3VibGUgZmlyZURhdGUpCiB7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdl
dFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBs
ZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVs
ZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7Ci0gICAgaWYgKGltcGxlbWVudGF0aW9ucy0+
d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMRGVsYXlGaXJlRGF0ZUZvckZyYW1lRnVuYykK
LSAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+d2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdFRvVVJMRGVsYXlGaXJlRGF0ZUZvckZyYW1lRnVuYywgd2ViVmlldywg
QHNlbGVjdG9yKHdlYlZpZXc6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOmRlbGF5OmZp
cmVEYXRlOmZvckZyYW1lOiksIFVSTC5nZXROU1VSTCgpLCBkZWxheSwgW05TRGF0ZSBkYXRlV2l0
aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpmaXJlRGF0ZV0sIG1fd2ViRnJhbWUuZ2V0KCkpOworICAg
IGlmIChpbXBsZW1lbnRhdGlvbnMtPndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTERlbGF5
RmlyZURhdGVGb3JGcmFtZUZ1bmMpIHsKKyAgICAgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOwor
ICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aWxsUGVyZm9y
bUNsaWVudFJlZGlyZWN0VG9VUkxEZWxheUZpcmVEYXRlRm9yRnJhbWVGdW5jLCB3ZWJWaWV3LCBA
c2VsZWN0b3Iod2ViVmlldzp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6ZGVsYXk6Zmly
ZURhdGU6Zm9yRnJhbWU6KSwgY29jb2FVUkwsIGRlbGF5LCBbTlNEYXRlIGRhdGVXaXRoVGltZUlu
dGVydmFsU2luY2UxOTcwOmZpcmVEYXRlXSwgbV93ZWJGcmFtZS5nZXQoKSk7CisgICAgfQogfQog
CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0
aGluUGFnZSgpCkBAIC02NzcsNyArNjc5LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
c2V0TWFpbkZyYW1lRAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCBk
b3dubG9hZCBmdWxsIHJlcXVlc3QuCi0gICAgV2ViRG93bmxvYWQgKmRvd25sb2FkID0gW2dldFdl
YlZpZXcobV93ZWJGcmFtZS5nZXQoKSkgX2Rvd25sb2FkVVJMOnJlcXVlc3QudXJsKCkuZ2V0TlNV
UkwoKV07CisgICAgV2ViRG93bmxvYWQgKmRvd25sb2FkID0gW2dldFdlYlZpZXcobV93ZWJGcmFt
ZS5nZXQoKSkgX2Rvd25sb2FkVVJMOnJlcXVlc3QudXJsKCldOwogICAgIAogICAgIHNldE9yaWdp
bmFsVVJMRm9yRG93bmxvYWQoZG93bmxvYWQsIHJlcXVlc3QpOwogfQpAQCAtNzE1LDggKzcxNyw4
IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmFsU2V0dXBGb3IKIC8vIE9uY2UgdGhh
dCB0YXNrIGlzIGNvbXBsZXRlLCB0aGlzIHdpbGwgZ28gYXdheQogdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeUZvclN0YW5kYXJkTG9hZChjb25zdCBLVVJMJiB1
cmwpCiB7Ci0gICAgTlNVUkwgKm5zdXJsID0gdXJsLmdldE5TVVJMKCk7Ci0gICAgV2ViSGlzdG9y
eUl0ZW0gKmVudHJ5ID0gW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0gYWRkSXRl
bUZvclVSTDpuc3VybF07CisgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOworICAgIFdlYkhpc3Rv
cnlJdGVtICplbnRyeSA9IFtbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIGFkZEl0
ZW1Gb3JVUkw6Y29jb2FVUkxdOwogICAgIFN0cmluZyBwYWdlVGl0bGUgPSBjb3JlKG1fd2ViRnJh
bWUuZ2V0KCkpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKTsKICAgICBpZiAo
cGFnZVRpdGxlLmxlbmd0aCgpKQogICAgICAgICBbZW50cnkgc2V0VGl0bGU6cGFnZVRpdGxlXTsK
QEAgLTcyNyw3ICs3MjksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9i
YWxICiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yUmVs
b2FkKGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBXZWJIaXN0b3J5ICpzaGFyZWRIaXN0b3J5ID0g
W1dlYkhpc3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0b3J5XTsKLSAgICBXZWJIaXN0b3J5SXRlbSAq
aXRlbSA9IFtzaGFyZWRIaXN0b3J5IGl0ZW1Gb3JVUkw6dXJsLmdldE5TVVJMKCldOworICAgIFdl
Ykhpc3RvcnlJdGVtICppdGVtID0gW3NoYXJlZEhpc3RvcnkgaXRlbUZvclVSTDp1cmxdOwogICAg
IGlmIChpdGVtKQogICAgICAgICBbc2hhcmVkSGlzdG9yeSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRl
cnZhbDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0gZm9ySXRlbTppdGVt
XTsKIH0KQEAgLTc0MiwzMiArNzQ0LDMyIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNo
b3VsZEdvVG9IaXMKIAogUmVzb3VyY2VFcnJvciBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuY2Vs
bGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVybiBb
TlNFcnJvciBfd2ViS2l0RXJyb3JXaXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTpOU1VS
TEVycm9yQ2FuY2VsbGVkIFVSTDpyZXF1ZXN0LnVybCgpLmdldE5TVVJMKCldOworICAgIHJldHVy
biBbTlNFcnJvciBfd2ViS2l0RXJyb3JXaXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTpO
U1VSTEVycm9yQ2FuY2VsbGVkIFVSTDpyZXF1ZXN0LnVybCgpXTsKIH0KICAgICAKIFJlc291cmNl
RXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhE
b21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0
ZWRQb3J0IFVSTDpyZXF1ZXN0LnVybCgpLmdldE5TVVJMKCldOworICAgIHJldHVybiBbTlNFcnJv
ciBfd2ViS2l0RXJyb3JXaXRoRG9tYWluOldlYktpdEVycm9yRG9tYWluIGNvZGU6V2ViS2l0RXJy
b3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCBVUkw6cmVxdWVzdC51cmwoKV07CiB9CiAKIFJlc291
cmNlRXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRF
cnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckNhbm5vdFNo
b3dVUkwgVVJMOnJlcXVlc3QudXJsKCkuZ2V0TlNVUkwoKV07CisgICAgcmV0dXJuIFtOU0Vycm9y
IF93ZWJLaXRFcnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJv
ckNhbm5vdFNob3dVUkwgVVJMOnJlcXVlc3QudXJsKCldOwogfQogCiBSZXNvdXJjZUVycm9yIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRF
cnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckZyYW1lTG9h
ZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UgVVJMOnJlcXVlc3QudXJsKCkuZ2V0TlNVUkwoKV07
CisgICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JE
b21haW4gY29kZTpXZWJLaXRFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2Ug
VVJMOnJlcXVlc3QudXJsKCldOwogfQogCiBSZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKIHsKLSAgICByZXR1cm4gW05TRXJyb3IgX3dlYktpdEVycm9yV2l0aERvbWFpbjpOU1VS
TEVycm9yRG9tYWluIGNvZGU6V2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgVVJMOnJlc3Bv
bnNlLnVybCgpLmdldE5TVVJMKCldOworICAgIHJldHVybiBbTlNFcnJvciBfd2ViS2l0RXJyb3JX
aXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckNhbm5vdFNob3dNSU1F
VHlwZSBVUkw6cmVzcG9uc2UudXJsKCldOwogfQogCiBSZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46
TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJMRXJyb3JGaWxlRG9lc05vdEV4aXN0IFVSTDpyZXNw
b25zZS51cmwoKS5nZXROU1VSTCgpXTsgICAgCisgICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRF
cnJvcldpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJMRXJyb3JGaWxlRG9lc05v
dEV4aXN0IFVSTDpyZXNwb25zZS51cmwoKV07ICAgIAogfQogCiBib29sIFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpzaG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTc5
MCw3ICs3OTIsNyBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3aWxsVXNlQXJjaGl2CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWNhblVzZUFyY2hpdmVkUmVzb3VyY2UocmVx
dWVzdC5uc1VSTFJlcXVlc3QoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXZWJSZXNv
dXJjZSAqcmVzb3VyY2UgPSBbZGF0YVNvdXJjZShjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2Fk
ZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSkgX2FyY2hpdmVkU3VicmVzb3VyY2VGb3JVUkw6
b3JpZ2luYWxVUkwuZ2V0TlNVUkwoKV07CisgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW2Rh
dGFTb3VyY2UoY29yZShtX3dlYkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50
TG9hZGVyKCkpIF9hcmNoaXZlZFN1YnJlc291cmNlRm9yVVJMOm9yaWdpbmFsVVJMXTsKICAgICBp
ZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFjYW5Vc2VBcmNo
aXZlZFJlc291cmNlKFtyZXNvdXJjZSBfcmVzcG9uc2VdKSkKQEAgLTk0Miw3ICs5NDQsNyBAQCBQ
YXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBXZWJGcmFtZUxvYWRlCiAvLyBPbmNlIHRoYXQgdGFz
ayBpcyBjb21wbGV0ZSwgdGhpcyB3aWxsIGdvIGF3YXkKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmIFVSTCkKIHsKLSAg
ICBOU1VSTCogbnNVUkwgPSBjYW5vbmljYWxVUkwoVVJMLmdldE5TVVJMKCkpOworICAgIE5TVVJM
KiBuc1VSTCA9IGNhbm9uaWNhbFVSTChVUkwpOwogICAgIGlmKCFuc1VSTCkKICAgICAgICAgcmV0
dXJuOwogICAgIE5TU3RyaW5nICp0aXRsZU5TU3RyaW5nID0gdGl0bGU7CkBAIC0xMTE0LDYgKzEx
MTYsNyBAQCBOU0RpY3Rpb25hcnkgKldlYkZyYW1lTG9hZGVyQ2xpZW50OjphY3RpCiAgICAgICAg
IGlmIChrZXlTdGF0ZUV2ZW50LT5tZXRhS2V5KCkpCiAgICAgICAgICAgICBtb2RpZmllckZsYWdz
IHw9IE5TQ29tbWFuZEtleU1hc2s7CiAgICAgfQorICAgIE5TVVJMICpvcmlnaW5hbFVSTCA9IGFj
dGlvbi51cmwoKTsKICAgICBpZiAoY29uc3QgTW91c2VFdmVudCogbW91c2VFdmVudCA9IGZpbmRN
b3VzZUV2ZW50KGV2ZW50KSkgewogICAgICAgICBJbnRQb2ludCBwb2ludChtb3VzZUV2ZW50LT5w
YWdlWCgpLCBtb3VzZUV2ZW50LT5wYWdlWSgpKTsKICAgICAgICAgV2ViRWxlbWVudERpY3Rpb25h
cnkgKmVsZW1lbnQgPSBbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXQpAQCAtMTEyMyw3ICsx
MTI2LDcgQEAgTlNEaWN0aW9uYXJ5ICpXZWJGcmFtZUxvYWRlckNsaWVudDo6YWN0aQogICAgICAg
ICAgICAgZWxlbWVudCwgV2ViQWN0aW9uRWxlbWVudEtleSwKICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoSW50Om1vdXNlRXZlbnQtPmJ1dHRvbigpXSwgV2ViQWN0aW9uQnV0dG9uS2V5
LAogICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bW9kaWZpZXJGbGFnc10sIFdl
YkFjdGlvbk1vZGlmaWVyRmxhZ3NLZXksCi0gICAgICAgICAgICBhY3Rpb24udXJsKCkuZ2V0TlNV
UkwoKSwgV2ViQWN0aW9uT3JpZ2luYWxVUkxLZXksCisgICAgICAgICAgICBvcmlnaW5hbFVSTCwg
V2ViQWN0aW9uT3JpZ2luYWxVUkxLZXksCiAgICAgICAgICAgICBuaWxdOwogICAgICAgICBbZWxl
bWVudCByZWxlYXNlXTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMzEsNyArMTEzNCw3
IEBAIE5TRGljdGlvbmFyeSAqV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjdGkKICAgICByZXR1cm4g
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDphY3Rpb24udHlwZSgpXSwgV2ViQWN0aW9uTmF2aWdhdGlvblR5
cGVLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1vZGlmaWVyRmxhZ3NdLCBX
ZWJBY3Rpb25Nb2RpZmllckZsYWdzS2V5LAotICAgICAgICBhY3Rpb24udXJsKCkuZ2V0TlNVUkwo
KSwgV2ViQWN0aW9uT3JpZ2luYWxVUkxLZXksCisgICAgICAgIG9yaWdpbmFsVVJMLCBXZWJBY3Rp
b25PcmlnaW5hbFVSTEtleSwKICAgICAgICAgbmlsXTsKIH0KIApAQCAtMTE0OCw3ICsxMTUxLDcg
QEAgUGFzc1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OgogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKICAgICByZXR1cm4gW2JyaWRnZSBjcmVhdGVDaGls
ZEZyYW1lTmFtZWQ6bmFtZQotICAgICAgICAgICAgICAgICAgIHdpdGhVUkw6dXJsLmdldE5TVVJM
KCkKKyAgICAgICAgICAgICAgICAgICB3aXRoVVJMOnVybAogICAgICAgICAgICAgICAgICAgIHJl
ZmVycmVyOnJlZmVycmVyIAogICAgICAgICAgICAgICAgICAgIG93bmVyRWxlbWVudDpvd25lckVs
ZW1lbnQKICAgICAgICAgICAgICAgICAgICBhbGxvd3NTY3JvbGxpbmc6YWxsb3dzU2Nyb2xsaW5n
CkBAIC0xMTYzLDcgKzExNjYsNyBAQCBPYmplY3RDb250ZW50VHlwZSBXZWJGcmFtZUxvYWRlckNs
aWVudDo6CiB7CiAgICAgV2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2
YXRlLT5icmlkZ2U7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVy
biBbYnJpZGdlIGRldGVybWluZU9iamVjdEZyb21NSU1FVHlwZTptaW1lVHlwZSBVUkw6dXJsLmdl
dE5TVVJMKCldOworICAgIHJldHVybiBbYnJpZGdlIGRldGVybWluZU9iamVjdEZyb21NSU1FVHlw
ZTptaW1lVHlwZSBVUkw6dXJsXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAg
IHJldHVybiBPYmplY3RDb250ZW50Tm9uZTsKIH0KQEAgLTExODQsNyArMTE4Nyw3IEBAIFdpZGdl
dCogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWcKIAogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gbmV3IFdpZGdldChbYnJpZGdlIHZpZXdGb3JQbHVn
aW5XaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVy
bC5nZXROU1VSTCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVJMOnVybAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVOYW1lczpuc0FycmF5KHBhcmFtTmFtZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzOm5zQXJyYXkocGFyYW1WYWx1ZXMpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOm1pbWVUeXBlCkBA
IC0xMjEyLDcgKzEyMTUsNyBAQCBXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVK
YXZhCiAgICAgcmVzdWx0LT5zZXRWaWV3KFticmlkZ2Ugdmlld0ZvckphdmFBcHBsZXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6bnNBcnJheShwYXJhbU5hbWVzKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpuc0FycmF5KHBhcmFt
VmFsdWVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVUkw6YmFzZVVSTC5nZXRO
U1VSTCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRE9NRWxlbWVudDpbRE9NRWxlbWVudCBfd3JhcEVsZW1l
bnQ6ZWxlbWVudF1dKTsgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAK
SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCShyZXZpc2lvbiAzMDE3MikKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMTksOCArMzE5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRUeXBlc0Zyb21DbGFzcyhOU00KIC8vIE1heSByZXR1cm4gbmlsIGlmIG5vdCBpbml0aWFsaXpl
ZCB3aXRoIGEgVVJMLgogLSAoTlNVUkwgKilfVVJMCiB7Ci0gICAgS1VSTCBVUkwgPSBfcHJpdmF0
ZS0+bG9hZGVyLT51cmwoKTsKLSAgICByZXR1cm4gVVJMLmlzRW1wdHkoKSA/IG5pbCA6IFVSTC5n
ZXROU1VSTCgpOworICAgIEtVUkwgdXJsID0gX3ByaXZhdGUtPmxvYWRlci0+dXJsKCk7CisgICAg
aWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHVybDsK
IH0KIAogLSAoV2ViQXJjaGl2ZSAqKV9wb3BTdWJmcmFtZUFyY2hpdmVXaXRoTmFtZTooTlNTdHJp
bmcgKilmcmFtZU5hbWUKQEAgLTM4Miw3ICszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRk
VHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgX3ByaXZhdGUtPmxvYWRlciA9IGxvYWRlcjsKICAgICBs
b2FkZXItPnJlZigpOwogICAgICAgICAKLSAgICBMT0coTG9hZGluZywgImNyZWF0aW5nIGRhdGFz
b3VyY2UgZm9yICVAIiwgX3ByaXZhdGUtPmxvYWRlci0+cmVxdWVzdCgpLnVybCgpLmdldE5TVVJM
KCkpOworICAgIExPRyhMb2FkaW5nLCAiY3JlYXRpbmcgZGF0YXNvdXJjZSBmb3IgJUAiLCBzdGF0
aWNfY2FzdDxOU1VSTCAqPihfcHJpdmF0ZS0+bG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKTsKICAg
ICAKICAgICArK1dlYkRhdGFTb3VyY2VDb3VudDsKICAgICAKQEAgLTQ3Niw4ICs0NzgsMTAgQEAg
c3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChOU1VSTCAqKXVu
cmVhY2hhYmxlVVJMCiB7Ci0gICAgS1VSTCBVUkwgPSBfcHJpdmF0ZS0+bG9hZGVyLT51bnJlYWNo
YWJsZVVSTCgpOwotICAgIHJldHVybiBVUkwuaXNFbXB0eSgpID8gbmlsIDogVVJMLmdldE5TVVJM
KCk7CisgICAgS1VSTCB1bnJlYWNoYWJsZVVSTCA9IF9wcml2YXRlLT5sb2FkZXItPnVucmVhY2hh
YmxlVVJMKCk7CisgICAgaWYgKHVucmVhY2hhYmxlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICByZXR1cm4gdW5yZWFjaGFibGVVUkw7CiB9CiAKIC0gKFdlYkFyY2hpdmUg
Kil3ZWJBcmNoaXZlCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAz
MDE3MikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAg
ICAgICAoQykgMjAwNiwgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNv
bSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMxMTAsNyArMzExMCw3IEBAIG5vUHJvbWlzZWREYXRh
OgogICAgICAgICAKICAgICAgICAgS1VSTCBpbWFnZVVSTCA9IHBhZ2UtPmRyYWdDb250cm9sbGVy
KCktPmRyYWdnaW5nSW1hZ2VVUkwoKTsKICAgICAgICAgQVNTRVJUKCFpbWFnZVVSTC5pc0VtcHR5
KCkpOwotICAgICAgICBkcmFnZ2luZ0ltYWdlVVJMID0gaW1hZ2VVUkwuZ2V0TlNVUkwoKTsKKyAg
ICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9IGltYWdlVVJMOwogCiAgICAgICAgIHdyYXBwZXIgPSBb
W3NlbGYgX2RhdGFTb3VyY2VdIF9maWxlV3JhcHBlckZvclVSTDpkcmFnZ2luZ0ltYWdlVVJMXTsK
ICAgICB9Cg==
</data>
<flag name="review"
          id="8345"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19132</attachid>
            <date>2008-02-14 18:15:36 -0800</date>
            <delta_ts>2008-02-14 18:15:36 -0800</delta_ts>
            <desc>patch, now with fewer broken platforms</desc>
            <filename>KURLDeprecatedStringPatch.txt</filename>
            <type>text/plain</type>
            <size>440332</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUxIEBACisyMDA4LTAyLTE0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBCYXNlZCBv
biB3b3JrIGJ5IE1hcnZpbiBEZWNrZXIgPG1hcnYuZGVja2VyQGdtYWlsLmNvbT4KKworICAgICAg
ICAtIGZpeCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzOAorICAg
ICAgICAgIEtVUkwgc2hvdWxkIHVzZSBTdHJpbmcgaW5zdGVhZCBvZiBEZXByZWNhdGVkU3RyaW5n
CisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0ODUKKyAgICAgICAgICBEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2FkIHdpbGwgY3Jhc2ggaWYg
dGhlIFVSTCBpc051bGwKKyAgICAgICAgICBhbmQgYSBzaW1pbGFyIHByb2JsZW0gaW4gSWNvbkRh
dGFiYXNlCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0ODcKKyAgICAgICAgICBLVVJMIGRvZXNuJ3QgcHJlc2VydmUgaXNOdWxsIHdoZW4g
Y29uc3RydWN0ZWQgd2l0aCBhIERlcHJlY2F0ZWRTdHJpbmcKKworICAgICAgICAtIGNoYW5nZWQg
Y29tcGxldGVVUkwgYW5kIHZhcmlvdXMgRE9NIGdldHRlcnMgdG8gcmV0dXJuIEtVUkwsIHRvIGF2
b2lkCisgICAgICAgICAgY29udmVyc2lvbiBiYWNrIGFuZCBmb3J0aCBmcm9tIEtVUkwgdG8gU3Ry
aW5nCisKKyAgICAgICAgLSBjaGFuZ2VkIHRoZSBjb252ZXJzaW9uIG9mIEtVUkwgdG8gTlNVUkwg
b3IgTlNTdHJpbmcgdG8gYmUgYXV0b21hdGljLAorICAgICAgICAgIHRvIGVhc2UgdGhlIHVzZSBv
ZiBLVVJMIGluIE9iamVjdGl2ZSBDIERPTSBiaW5kaW5ncywgYW5kIGVsaW1pbmF0ZWQKKyAgICAg
ICAgICB0aGUgZ2V0TlNVUkwgZnVuY3Rpb24KKworICAgICAgICAtIGJlY2F1c2UgSSBoYWQgdG8g
dmlzaXQgdGhlIERPTSBiaW5kaW5ncyBhbnl3YXksIGVsaW1pbmF0ZWQgYWxtb3N0IGFsbAorICAg
ICAgICAgIHRoZSB1c2Ugb2YgdGhlIEtKUyBuYW1lc3BhY2UgZm9yIHRoaW5ncyBpbiBXZWJDb3Jl
CisKKyAgICAgICAgLSBmaXhlZCBIVE1MT3B0aW9uRWxlbWVudCBjb25zdHJ1Y3RvciB0byBjaGVj
ayBmb3IgdW5kZWZpbmVkIHJhdGhlcgorICAgICAgICAgIHRoYW4gc2l6ZSBvZiB0aGUgYXJndW1l
bnRzIGFycmF5CisKKyAgICAgICAgLSBlbGltaW5hdGVkIHNvbWUgb3RoZXIgdW5uZWNlc3Nhcnkg
dXNlcyBvZiBEZXByZWNhdGVkU3RyaW5nCisKKyAgICAgICAgLSBjaGFuZ2VkIFN0cmluZzo6c3Bs
aXQgdG8gdGFrZSBhIFZlY3RvciBwYXJhbWV0ZXIgaW5zdGVhZCBvZiByZXR1cm5pbmcKKyAgICAg
ICAgICBhIFZlY3RvciwgZm9yIGJldHRlciBwZXJmb3JtYW5jZQorCisgICAgICAgIC0gYWRkZWQg
YSBjb3VwbGUgb2YgbWlzc2luZyBjYWxscyB0byBkbyBsYXlvdXQgaW4gU1ZHIGltYWdlIGhhbmRs
aW5nOworICAgICAgICAgIEkgd2FzIGFibGUgdG8gcmVwcm9kdWNlIHRoZXNlIG9ubHkgYmVjYXVz
ZSBJIGhhZCBicm9rZW4gVVJMcyBmb3IgYQorICAgICAgICAgIHdoaWxlIC0tIG5vdCBzdXJlIGhv
dyB0byByZXByb2R1Y2UgdGhlbSBub3cgYnV0IHRoZSBjaGFuZ2VzIGFyZQorICAgICAgICAgIGNs
ZWFybHkgbmVlZGVkCisKKyAgICAgICAgUGVyZm9ybWFuY2UgdGVzdGluZyBzaG93cyB0aGlzIHRv
IGJlIGF0IGxlYXN0IGEgMSUgc3BlZWR1cC4KKworICAgICAgICBBZGRlZCBhIG5ldyBmdW5jdGlv
biBwcm90b2NvbElzIHRvIGVmZmljaWVudGx5IGNvbXBhcmUgcHJvdG9jb2xzCisgICAgICAgIHdp
dGhvdXQgY2FzZSBlcnJvcnMgYW5kIGEgYmxhbmtVUkwgZnVuY3Rpb24gc28gd2UgZG9uJ3QgaGF2
ZSB0bworICAgICAgICBjb2RlICJhYm91dDpibGFuayIgaW4gbXVsdGlwbGUgcGxhY2VzIGluIHRo
ZSBjb2RlIGFuZCBkb24ndCBoYXZlIHRvCisgICAgICAgIGNvbnN0cnVjdCBhIGZyYXNoIEtVUkwg
ZWFjaCB0aW1lLiBNb3ZlZCBkZWNvZGVfc3RyaW5nIGFuZCBlbmNvZGVfc3RyaW5nCisgICAgICAg
IG91dCBvZiBLVVJMIGFuZCBnYXZlIHRoZW0gY2xlYXJlciBuYW1lcy4KKworICAgICAgICBNYWRl
IEtVUkwgY29uc3RydWN0b3JzIGV4cGxpY2l0IHRvIGhpZ2hsaWdodCBwb3RlbnRpYWxseS1leHBl
bnNpdmUKKyAgICAgICAgb3BlcmF0aW9ucyBhbmQgdGhlIHBvb3Igc2VtYW50aWNzIG9mIEtVUkwn
cyBjb25zdHJ1Y3RvciB0aGF0IHRha2VzCisgICAgICAgIGEgU3RyaW5nLgorCisgICAgICAgICog
V2ViQ29yZS5iYXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXR0
ckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F0dHI6OnNldFZhbHVlKTogVXNlIHBy
b3RvY29sSXMuCisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmg6IEtK
UyBuYW1lc3BhY2UgY2hhbmdlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGl0dG8uCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGl0
dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RvY3VtZW50Ojpsb2NhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SlNEb2N1bWVudDo6c2V0TG9jYXRpb24pOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOiBLSlMgbmFtZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWxsb3dT
ZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJD
b3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6IEtKUyBuYW1lc3BhY2UgY2hhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6SlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyk6IERpdHRvLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKTogVXNlIHByb3RvY29sSXMuCisgICAg
ICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldFNyYyk6IEtKUyBuYW1lc3BhY2Ug
Y2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRnJhbWVFbGVtZW50OjpzZXRMb2NhdGlv
bik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSUZyYW1lRWxlbWVudDo6c2V0U3JjKTog
VXNlIHByb3RvY29sSXMuCisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbkVsZW1lbnRD
b25zdHJ1Y3Rvcjo6SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KTogQ2xlYW5l
ZCB1cCB0aGUKKyAgICAgICAgc3RydWN0dXJlIGEgYml0IGFuZCBjaGFuZ2VkIGNoZWNraW5nIHRv
IGNoZWNrIGZvciB1bmRlZmluZWQgcmF0aGVyIHRoYW4KKyAgICAgICAgbnVtYmVyIG9mIGFyZ3Vt
ZW50cy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0
b3IuaDogS0pTIG5hbWVzcGFjZSBjaGFuZ2UuCisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2Nh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpwdXQpOiBFbGltaW5hdGVk
IHNvbWUgRGVwcmVjYXRlZFN0cmluZyB1c2UsCisgICAgICAgIGFuZCB1c2UgcHJvdG9jb2xJcy4K
KyAgICAgICAgKFdlYkNvcmU6OmpzTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpqc0xvY2F0aW9uUHJvdG9GdW5jUmVsb2FkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpqc0xvY2F0aW9uUHJvdG9GdW5jQXNzaWduKTogRGl0dG8uCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNMb2NhdGlvbi5oOiBLSlMgbmFtZXNwYWNlIGNoYW5nZS4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU05hbWVkTm9kZU1hcDo6Y2FuR2V0SXRlbXNGb3JOYW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcik6IERpdHRvLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uaDogRGl0dG8u
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25PcGVuKTogUmVtb3ZlZAor
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6OmpzWE1MSHR0
cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvblNlbmQpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Lmg6IE1vdmVkIHRoaXMgY2xhc3MgaW50byB0aGUgV2ViQ29y
ZQorICAgICAgICBuYW1lc3BhY2UuCisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vz
c29yLmNwcDogTmFtZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3IuaDogRGl0dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5j
cHA6IFVwZGF0ZWQgZm9yIG5hbWVzcGFjZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpqc1N0
cmluZ09yTnVsbCk6IEFkZGVkIGFuIG92ZXJsb2FkIGZvciBLVVJMIHRvIGFsbG93IERPTQorICAg
ICAgICBjbGFzc2VzIHRvIHJldHVybiBLVVJMIGV2ZW4gaWYgdGhlIERPTSBleHBlY3RzIGEgc3Ry
aW5nLgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdPclVuZGVmaW5lZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6anNTdHJpbmdPckZhbHNlKTogRGl0dG8uCisgICAgICAgICogYmluZGlu
Z3MvanMva2pzX2JpbmRpbmcuaDogTW92ZWQgZXZlcnl0aGluZyBpbnRvIHRoZSBXZWJDb3JlCisg
ICAgICAgIG5hbWVzcGFjZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19jc3MuaDogTmFt
ZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcDogUmVt
b3ZlZCBhbiBpbmNsdWRlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuaDogTmFt
ZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5oOiBOYW1lc3Bh
Y2UgY2hhbmdlLgorCisgICAgICAgICogYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHA6IE1v
dmVkIGV2ZXJ5dGhpbmcgaW50byB0aGUKKyAgICAgICAgV2ViQ29yZSBuYW1lc3BhY2UuCisgICAg
ICAgICogYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oOiBEaXR0by4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL2tqc193aW5kb3cuY3BwOgorICAgICAgICAoS0pTOjpwYXJzZU1vZGFsRGlhbG9n
RmVhdHVyZXMpOiBVcGRhdGVkIGZvciBTdHJpbmc6OnNwbGl0IGNoYW5nZS4KKyAgICAgICAgKEtK
Uzo6Y3JlYXRlV2luZG93KTogVXNlIHByb3RvY29sSXMgYW5kIHJlbW92ZWQgc29tZSBEZXByZWNh
dGVkU3RyaW5nLgorICAgICAgICAoS0pTOjpXaW5kb3c6OnB1dCk6IERpdHRvLgorICAgICAgICAo
S0pTOjpXaW5kb3c6OmFsbG93c0FjY2Vzc0Zyb20pOiBEaXR0by4KKyAgICAgICAgKEtKUzo6d2lu
ZG93UHJvdG9GdW5jT3Blbik6IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00u
bW06CisgICAgICAgICgtW0RPTUVsZW1lbnQgX2dldFVSTEF0dHJpYnV0ZTpdKTogUmVtb3ZlZCBn
ZXROU1VSTCBjYWxsLgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbToKKyAgICAg
ICAgKC1bRE9NSFRNTERvY3VtZW50IF9jcmVhdGVEb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0
cmluZzpiYXNlVVJMU3RyaW5nOl0pOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOiBVcGRhdGVkIGZvciBuYW1lc3BhY2UgY2hhbmdlcywgYW5k
IGFsc28KKyAgICAgICAgdXBkYXRlZCBpbmNsdWRlcyBzbyBjb252ZXJzaW9ucyBmcm9tIEtVUkwg
d2lsbCB3b3JrLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMu
cG06IFVwZGF0ZWQgaW5jbHVkZXMgc28gY29udmVyc2lvbnMgZnJvbQorICAgICAgICBLVVJMIHdp
bGwgd29yay4KKworICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tOgorICAg
ICAgICAoLVtXZWJDb3JlQVhPYmplY3QgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOiBS
ZW1vdmVkIGdldE5TVVJMIGNhbGwuCisgICAgICAgIEFsc28gc3RyZWFtbGluZWQgdGhlIGxvZ2lj
LgorICAgICAgICAoQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dCk6IERpdHRvLgorCisgICAg
ICAgICogYnJpZGdlL21hYy9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW06CisgICAgICAgICh0b05T
U3RyaW5nKTogVHdlYWtlZC4KKyAgICAgICAgKHRvTlNVUkwpOiBSZW1vdmVkIGdldE5TVVJMIGNh
bGwuCisKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NJbWFnZVZhbHVlOjppbWFnZSk6IFJlbW92ZWQgRGVwcmVjYXRlZFN0cmluZyB1c2UuCisg
ICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1w
b3J0UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KTogRGl0dG8uCisgICAgICAgICogY3NzL0NTU1Bh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb250ZW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZEltYWdlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZSk6IERpdHRvLgor
ICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnNldEVuY29kZWRVUkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OmNoZWNrUHNldWRvU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5oOiBEaXR0by4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFMaXN0OjpzZXRNZWRpYVRleHQpOiBVcGRhdGVkIGZvciBTdHJpbmc6OnNwbGl0
IGNoYW5nZS4KKworICAgICAgICAqIGNzcy9TdHlsZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCYXNlOjpiYXNlVVJMKTogUmV0dXJuIEtVUkwuCisgICAgICAgICogY3NzL1N0eWxl
QmFzZS5oOiBESXR0by4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KTogVXBkYXRlZCBmb3IgbmFtZXNwYWNlIGNoYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFVSSSk6IFJldHVybiBLVVJM
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldERvY3VtZW50VVJJKTogUmVtb3ZlZCBE
ZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpiYXNlVVJJ
KTogUmV0dXJuIEtVUkwuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6b3Blbik6IFVwZGF0
ZWQgdG8gdXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFVSTCk6
IFRha2UgS1VSTC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzaG91bGRCZUFsbG93ZWRU
b0xvYWRMb2NhbFJlc291cmNlcyk6IFVwZGF0ZWQgZm9yCisgICAgICAgIGNoYW5nZSB0byB1c2Ug
S1VSTAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEJhc2VVUkwpOiBUYWtlIEtVUkwu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudFNoZWV0KTogVXBkYXRlZCBmb3Ig
S1VSTCBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bWFwcGVkRWxlbWVudFNo
ZWV0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVp
dik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0
b3IpOiBSZW1vdmVkIHVzZSBvZgorICAgICAgICBEZXByZWNhdGVkU3RyaW5nIC0tIGFsc28gbm90
aWNlZCBzb21lIGRlYWQgY29kZSBoZXJlIQorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
dENvb2tpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvbXBsZXRlVVJM
KTogUmV0dXJuIEtVUkwuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6IFVzZSBLVVJMIGluc3Rl
YWQgb2YgU3RyaW5nIGluIGEgZmV3IHBsYWNlcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudFR5
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUeXBlOjpiYXNlVVJJKTogUmV0dXJu
IEtVUkwuCisgICAgICAgICogZG9tL0RvY3VtZW50VHlwZS5oOiBEaXR0by4KKworICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmJhc2VVUkkpOiBS
ZXR1cm4gS1VSTC4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOiBEaXR0by4KKworICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldERvY3VtZW50KTogTmFt
ZXNwYWNlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmJhc2VVUkkpOiBSZXR1cm4g
S1VSTC4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBEaXR0by4KKworICAgICAgICAqIGRvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAgICAg
ICAgKiBkb20vU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVu
dDo6cHJvY2Vzcyk6IENoYW5nZWQgdG8gdXNlIFZlY3RvcjxVQ2hhcj4gaW5zdGVhZCBvZgorICAg
ICAgICBTdHJpbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQpOiBSZW1vdmVkIHVzZSBvZiBEZXByZWNhdGVTdHJpbmcu
CisgICAgICAgICogZG9tL1hNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxU
b2tlbml6ZXI6OmVuZEVsZW1lbnROcyk6IFVwZGF0ZWQgZm9yIEtVUkwgY2hhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OnhtbERvY1B0ckZvclN0cmluZyk6IFJlbW92ZWQgdXNlIG9mIERlcHJlY2F0ZVN0cmluZy4KKyAg
ICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmg6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9t
YXJrdXAuY3BwOiBNb3ZlZCBhcHBlbmRTdHJpbmcgdG8gUGxhdGZvcm1TdHJpbmcuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKTogVXNlIHByb3RvY29s
SXMuCisgICAgICAgIChXZWJDb3JlOjpjb21wbGV0ZVVSTHMpOiBSZW1vdmVkIERlcHJlY2F0ZWRT
dHJpbmcgdXNlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKTog
VXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbENvbnRhaW5lckZyb21TdHJpbmcp
OiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcgdXNlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RnJhZ21lbnRGcm9tVGV4dCk6IERpdHRvLgorCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6dXJsKTogUmVtb3ZlZCBEZXBy
ZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpvcmlnaW5h
bFVSTCk6IERpdHRvLgorICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaDogUmVtb3ZlZCBp
bmNsdWRlLgorCisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IFJlbW92
ZWQgdXNlIG9mCisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MQW5jaG9yRWxlbWVudDo6aHJlZik6IFJldHVybiBLVVJMLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6Omhhc2gpOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcgdXNlLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6Omhvc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojpob3N0bmFtZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnBhdGhuYW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6cG9ydCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnByb3RvY29sKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6c2VhcmNoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQW5jaG9yRWxlbWVudDo6dG9TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hU
TUxBbmNob3JFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEFwcGxldEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKTogVXBkYXRlZCBmb3IgS1VSTCBjaGFuZ2UuCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpocmVmKTogUmV0
dXJuIEtVUkwuCisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuaDogRGl0dG8uCisgICAg
ICAgICogaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJh
c2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KTogVXBkYXRlZCBmb3IgS1VSTCBjaGFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQ6OnByb2Nlc3MpOiBSZW1vdmVkIERl
cHJlY2F0ZWRTdHJpbmcgdXNlLgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOiBSZW1vdmVkIHVzZSBvZgorICAgICAgICBEZXByZWNhdGVkU3RyaW5nLgorICAg
ICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5oOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcg
dXNlLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24pOiBVc2Ug
cHJvdG9jb2xJcy4KKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUNTdHJpbmcpOiBVcGRhdGVkIGZv
ciBjaGFuZ2UgdG8gU3RyaW5nOjpzcGxpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6ZGF0YUVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OmZvcm1EYXRhKTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6aXNNYWlsdG9Gb3JtKTogVXNlIHByb3RvY29sSXMu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6IFVwZGF0ZWQgZm9y
IEtVUkwgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZXNldCk6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJMQWxsb3dlZCk6IFVwZGF0ZWQg
Zm9yIEtVUkwgY2hhbmdlCisgICAgICAgIGFuZCB1c2UgZXF1YWxJZ25vcmluZ1JlZiBpbnN0ZWFk
IG9mIGRvaW5nIGEgc2V0UmVmIHRvIGdldCB0aGUgc2FtZSBlZmZlY3QuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6b3BlblVSTCk6IFVzZSBibGFua1VSTC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbik6IFJldHVybiBLVVJM
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OnNyYyk6IFJldHVybiBL
VVJMLgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaDogRGl0dG8uCisgICAg
ICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogVXBkYXRlZCBmb3IgS1VSTCBjaGFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojpsb25nRGVzYyk6IFJldHVy
biBLVVJMLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6bG93c3JjKTogUmV0
dXJuIEtVUkwuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzcmMpOiBSZXR1
cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDogRGl0dG8uIEFsc28g
cmVtb3ZlZCBpbWFnZU1hcCgpIGZ1bmN0aW9uLgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzcmMpOiBSZXR1
cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDogRGl0dG8uCisgICAg
ICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFVwZGF0ZWQgZm9yIEtVUkwgY2hhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0
ZSk6IFVwZGF0ZWQgZm9yIFN0cmluZzo6c3BsaXQgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50OjpocmVmKTogUmV0dXJuIEtVUkwuCisgICAgICAgICogaHRtbC9IVE1M
TGlua0VsZW1lbnQuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNyYyk6IFJldHVybiBLVVJM
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGlja01lZGlhKTogVXBkYXRl
ZCBmb3IgS1VSTCBjaGFuZ2UuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6IERp
dHRvLgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzSW1hZ2VUeXBlKTogVXNlIHByb3RvY29sSXMuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6ZGF0YSk6IFJldHVybiBLVVJMLgor
ICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgICogaHRt
bC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91
cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVzZS4K
KyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlcjo6cmVwb3J0RXJyb3JUb0NvbnNvbGUpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAg
ICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OnRleHQpOiBDaGFuZ2VkIHRvIHVzZSBWZWN0b3I8
VUNoYXI+IGluc3RlYWQgb2YKKyAgICAgICAgU3RyaW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Uu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6c3JjKTogUmV0dXJuIEtVUkwu
CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBo
dG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VF
bGVtZW50OjpzcmMpOiBSZXR1cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxTb3VyY2VFbGVt
ZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFVw
ZGF0ZWQgZm9yIEtVUkwgY2hhbmdlLgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUGFydEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUGFydEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKTogVXBkYXRlZCBmb3IgS1VSTCBjaGFuZ2UuCisgICAgICAgICogaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnNldFZhbHVlKTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVzZS4KKyAgICAgICAg
KiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXpl
cjo6c2NyaXB0RXhlY3V0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5p
emVyOjpub3RpZnlGaW5pc2hlZCk6IFVzZSBwcm90b2NvbElzLgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Ojpw
b3N0ZXIpOiBSZXR1cm4gS1VSTC4KKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuaDog
RGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZFRleHQpOiBVcGRhdGVkIGZv
ciBTdHJpbmc6OnNwbGl0IGNoYW5nZS4KKworICAgICAgICAqIGxvYWRlci9Eb2NMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpjaGVja0ZvclJlbG9hZCk6IEFkZCBhbiBl
eHBsaWNpdCBjaGVjayBmb3IgYW4gZW1wdHkgVVJMCisgICAgICAgIGhlcmUgdG8gYXZvaWQgcHJv
YmxlbXMgdXNpbmcgaXRzIHN0cmluZyBhcyBhIGhhc2ggdGFibGUga2V5IGxhdGVyLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOiBSZW1vdmVkIERlcHJlY2F0
ZWRTdHJpbmcgdXNlLgorCisgICAgICAgICogbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeVRva2VuaXplcjo6Y3JlYXRlVERGb3JG
aWxlbmFtZSk6IFVwZGF0ZWQgZm9yIEtVUkwgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RlRQ
RGlyZWN0b3J5VG9rZW5pemVyOjpwYXJzZUFuZEFwcGVuZE9uZUxpbmUpOiBSZW1vdmVkIHVzZSBv
ZgorICAgICAgICBEZXByZWNhdGVkU3RyaW5nLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUpOiBV
c2UgcHJvdG9jb2xJcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkU3ViZnJh
bWUpOiBVc2UgYmxhbmtVUkwuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3VibWl0
Rm9ybSk6IFVzZSBwcm90b2NvbElzIGFuZCByZW1vdmVkIHVzZSBvZgorICAgICAgICBEZXByZWNh
dGVkU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omljb25VUkwpOiBSZXR1
cm4gS1VSTC4gVXNlIHByb3Rjb2xJcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpk
aWRPcGVuVVJMKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6ZGlkRXhwbGljaXRPcGVuKTogVXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwpOiBVc2UgcHJvdG9jb2xJcy4KKyAgICAg
ICAgVXBkYXRlIGZvciBuYW1lIGNoYW5nZSB0byBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMuCisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEpOiBVcGRhdGVk
IGZvciBLVVJMIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YmVnaW4p
OiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcgdXNlLgorICAgICAgICBSZW5hbWVkIGJhc2V1cmwg
dG8gYmFzZVVSTC4gVXBkYXRlZCB0byB1c2UgS1VSTCBtb3JlLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OmdvdG9BbmNob3IpOiBSZW1vdmVkIHVzZSBvZiBlbmNvZGVkSHRtbFJlZgor
ICAgICAgICBmdW5jdGlvbiwgd2hpY2ggaXMgbm8gZGlmZmVyZW50IGZyb20gcmVmLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbXBsZXRlVVJMKTogVXBkYXRlZCBmb3IgS1VSTCBj
aGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2NoZWR1bGVMb2NhdGlvbkNo
YW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFn
ZSk6IFVzZSBwcm90b2NvbElzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnVwZGF0
ZVBvbGljeUJhc2VVUkwpOiBVcGRhdGUgZm9yIEtVUkwgY2hhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnNldFBvbGljeUJhc2VVUkwpOiBUYWtlIEtVUkwuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RhcnRSZWRpcmVjdGlvblRpbWVyKTogUmVtb3ZlZCB1c2Ug
b2YKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpsb2FkKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c2hvdWxkSGlkZVJlZmVycmVyKTogVXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKTogVXBkYXRlZCBmb3IgS1VSTCBj
aGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxM
b2FkKTogVXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9wZW4p
OiBVc2UgcHJvdGNvbElzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUhp
c3RvcnlJdGVtKTogVXNlIGJsYW5rVVJMLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzd2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5SWZS
ZWFkeSk6IFJlbW92ZWQKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB1c2UuCisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmg6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL0ltYWdlRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6Y3JlYXRlRG9jdW1l
bnRTdHJ1Y3R1cmUpOiBVcGRhdGVkIGZvciBLVVJMIGNoYW5nZS4KKyAgICAgICAgKiBsb2FkZXIv
UGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVG9rZW5pemVyOjpj
cmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6aWNvbkZv
clBhZ2VVUkwpOiBBZGRlZCBhIGNoZWNrIGZvciBhbiBlbXB0eSBVUkwKKyAgICAgICAgYmVmb3Jl
IHRyeWluZyB0byB1c2UgaXQgYXMgYSBoYXNoIHRhYmxlIGtleS4KKworICAgICAgICAqIGxvYWRl
ci9pY29uL0ljb25Mb2FkZXIuaDogVHdlYWtlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGxvYWRl
ci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1
ZXN0cyk6IFVzZSBwcm90Y29sSXMuIEFsc28gcmVtb3ZlZCBzb21lCisgICAgICAgIGNvZGUgdG8g
c2V0IHVwIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBpcyBuZXZlciB1c2VkIChhbmQgYSBEZXByZWNh
dGVkU3RyaW5nCisgICAgICAgIG9uIHRvIGJvb3QhKS4KKworICAgICAgICAqIGxvYWRlci9tYWMv
TG9hZGVyTlNVUkxFeHRyYXMubToKKyAgICAgICAgKHN1Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVU
eXBlKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSB0eXBlY2FzdC4KKworICAgICAgICAqIHBhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcDogUmVtb3ZlZCBpbmNsdWRlLgorCisgICAgICAgICogcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpuZWVkc0tleWJvYXJkRXZlbnREaXNhbWJpZ3VhdGlvblF1aXJrcyk6CisgICAgICAgIFVzZSBw
cm90b2NvbElzLgorCisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tOgor
ICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgVVJMV2l0aEF0dHJpYnV0ZVN0cmluZzpdKTog
UmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgYmFz
ZVVSTF0pOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNTY2hlbWVGaXJzdENoYXIpOiBGaXhlZCBidWcgaW4gaGFuZGxpbmcgb2YgdmFs
dWVzID49IDB4ODAuCisgICAgICAgIChXZWJDb3JlOjppc1NjaGVtZUNoYXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzUGF0aFNlZ21lbnRFbmRDaGFyKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpoZXhEaWdpdFZhbHVlKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdHlwZSB0byBVQ2hhci4K
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlBU0NJSSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZmluZEZpcnN0T2YpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnByb3RvY29sSXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOiBUaWdodGVuZWQgbG9naWMg
dXAgcXVpdGUgYSBiaXQuIENoYW5nZWQgcGFyYW1ldGVyCisgICAgICAgIHR5cGVzIGZyb20gRGVw
cmVjYXRlZFN0cmluZyB0byBTdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjppbml0KTog
Q2hhbmdlZCBwYXJhbWV0ZXIgdHlwZSB0byBTdHJpbmcuIFByZXNlcnZlZCB0aGUKKyAgICAgICAg
cGFzc2VkLWluIHN0cmluZyBldmVuIGlmIHRoZSBiYXNlIGlzIGludmFsaWQuIENsZWFuZWQgdXAg
bG9naWMgdG8gZGV0ZXJtaW5lCisgICAgICAgIGlmIHRoZSBvcmlnaW5hbFN0cmluZyBzaG91bGQg
YmUgcGFzZWQgaW4gdG8gdGhlIHBhcnNlIGZ1bmN0aW9uLiBTaW1wbGlmaWVkCisgICAgICAgIGJ5
IGNhbGxpbmcgdGhlIG5ldyBwYXJzZSBvdmVybG9hZCB0aGF0IHRha2VzIFN0cmluZyBpbiBtYW55
IGNhc2VzLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6bGFzdFBhdGhDb21wb25lbnQpOiBSZXR1
cm4gU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cHJvdG9jb2wpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OktVUkw6Omhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OnBvcnQpOiBDaGFuZ2VkIGxvZ2ljIHRvIHVzZSBlYXJseSByZXR1cm4gZm9yIGNsYXJpdHku
CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXNzKTogUmV0dXJuIFN0cmluZy4KKyAgICAgICAg
KFdlYkNvcmU6OktVUkw6OnVzZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnJl
Zik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6YXNzZXJ0UHJvdG9jb2xJc0dvb2QpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnByb3RvY29sSXMpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OktVUkw6OnF1ZXJ5KTogUmV0dXJuIFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6
OktVUkw6OnBhdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFByb3RvY29s
KTogVGFrZSBTdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRIb3N0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRQb3J0KTogVXNlIFN0cmluZy4KKyAgICAgICAg
KFdlYkNvcmU6OktVUkw6OnNldEhvc3RBbmRQb3J0KTogVGFrZSBTdHJpbmcuCisgICAgICAgIChX
ZWJDb3JlOjpLVVJMOjpzZXRVc2VyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpz
ZXRQYXNzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpzZXRSZWYpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnNldFF1ZXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpLVVJMOjpzZXRQYXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwcmV0
dHlVUkwpOiBSZXR1cm4gU3RyaW5nLiBVc2UgVmVjdG9yPFVDaGFyPiB0byBidWlsZCBpdC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyk6IFJlbmFtZWQgZnJvbSBL
VVJMOjpkZWNvZGVfc3RyaW5nLgorICAgICAgICBSZXR1cm4gU3RyaW5nLiBVc2UgVmVjdG9yPFVD
aGFyPiB0byBidWlsZCBpdC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmlzTG9jYWxGaWxlKTog
VXNlIHByb3RvY29sSXMuCisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpwYXJzZSk6IEFkZGVkIGFu
IG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBTdHJpbmcgdG8gcmVwbGFjZQorICAgICAgICB0aGUgdXNl
IG9mIERlcHJlY2F0ZWRTdHJpbmc6OmFzY2lpIGF0IHZhcmlvdXMgY2FsbCBzaXRlcy4gVXBkYXRl
ZCBmb3IKKyAgICAgICAgbmFtZSBjaGFuZ2UgKHVybFN0cmluZyAtPiBtX3N0cmluZykuCisgICAg
ICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nUmVmKTogV3JvdGUgYSBuZXcgaW1wbGVtZW50YXRp
b24gdGhhdCBkb2Vzbid0CisgICAgICAgIGRvIGFueSBhbGxvY2F0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyk6IFJlbmFtZWQgZnJvbSBLVVJMOjpl
bmNvZGVfc3RyaW5nLgorICAgICAgICBSZXR1cm4gU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6
YXBwZW5kRW5jb2RlZEhvc3RuYW1lKTogQWRkZWQuIFJlcGxhY2VzIGVuY29kZUhvc3RuYW1lIGFu
ZAorICAgICAgICBhdm9pZHMgdGhlIG5lZWQgdG8gYWxsb2NhdGUgYSBzdHJpbmcuCisgICAgICAg
IChXZWJDb3JlOjpmaW5kSG9zdG5hbWVzSW5NYWlsVG9VUkwpOiBVcGRhdGUgdG8gdXNlIGZpbmRG
aXJzdE9mIGluc3RlYWQgb2YKKyAgICAgICAgcmVndWxhciBleHByZXNzaW9ucy4KKyAgICAgICAg
KFdlYkNvcmU6OmZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjplbmNvZGVIb3N0bmFtZXMpOiBVc2UgcHJvdG9jb2xJcyBhbmQgdGhlIG90aGVy
IGhlbHBlcnMgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjplbmNvZGVSZWxhdGl2ZVN0cmluZyk6
IENoYW5nZWQgdG8gcHV0IHJlc3VsdCBpbnRvIGEgQ2hhckJ1ZmZlci4KKyAgICAgICAgKFdlYkNv
cmU6OnN1YnN0aXR1dGVCYWNrc2xhc2hlcyk6IFVwZGF0ZWQgdG8gdXNlIFN0cmluZy4KKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OmNvcHlUb0J1ZmZlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cHJvdG9jb2xJcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6YmxhbmtVUkwpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnByaW50KTogVXBkYXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9LVVJMLmg6IEFkZGVkIGEgbnVtYmVyIG9mIGNvbW1lbnRzLiBSZW9yZ2FuaXplZCB0
aGUgaGVhZGVyIGEgYml0LgorICAgICAgICBNYWRlIHRoZSBzdHJpbmcgY29uc3RydWN0b3JzIGV4
cGxpY2l0LiBDaGFuZ2VkIHRvIHVzZSBTdHJpbmcgaW5zdGVhZCBvZgorICAgICAgICBEZXByZWNh
dGVkU3RyaW5nLiBSZW1vdmVkIGVuY29kZWRIVE1MUmVmLiBSZW5hbWVkIGFuZCBhZGRlZCBhIGZl
dyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6S1VSTDo6S1VSTCk6IFN0cmVhbWxpbmVkIHRoZSBsb2dpYyBhIGJpdC4K
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmNyZWF0ZUNGVVJMKTogQ2hhbmdlZCB0byB1c2UgY29w
eVRvQnVmZmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpj
cmVhdGVRVE1vdmllKTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICBVc2UgcHJvdG9j
b2xJcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBSZW1vdmVk
IGdldE5TVVJMIGNhbGwuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOiBSZW1vdmVkIGdldE5TVVJMIGNhbGwuCisgICAgICAg
IChXZWJDb3JlOjpzZXRDb29raWVzKTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9LVVJMTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6S1VSTCk6
IFN0cmVhbWxpbmVkIHRoZSBsb2dpYyBhIGJpdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFz
dGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlVVJMKTog
UmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3Jp
dGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJp
bmcpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbik6
IFVwZGF0ZWQgZm9yIFN0cmluZzo6c3BsaXQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cG9y
dEFsbG93ZWQpOiBVc2UgcHJvdG9jb2xJcy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlRXJyb3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9y
OjpvcGVyYXRvciBOU0Vycm9yKik6IFJlbW92ZWQgZ2V0TlNVUkwgY2FsbC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KTogUmVtb3ZlZCBEZXByZWNhdGVkU3Ry
aW5nIHVzZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZv
cm1SZXF1ZXN0KTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlOjpuc1VSTFJlc3BvbnNlKTogUmVtb3ZlZCBnZXROU1VSTCBjYWxsLgorCisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOiBVcGRhdGVkIHNwbGl0IHRv
IG1vZGlmeSBhIHJlc3VsdCBwYXJhbWV0ZXIKKyAgICAgICAgcmF0aGVyIHRoYW4gcmV0dXJuaW5n
IGEgVmVjdG9yLiBBZGRlZCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkgYW5kIGFuIGFwcGVuZAorICAg
ICAgICBmdW5jdGlvbiB0aGF0IGFwcGVuZHMgYSBTdHJpbmcgdG8gYSBWZWN0b3I8VUNoYXI+Lgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZzo6c3BsaXQpOiBVcGRhdGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVS
TCk6IFJlbW92ZWQgRGVwcmVjYXRlZFN0cmluZyB1c2UuCisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6
bGF5T3V0QXhpcyk6IEZpeGVkIGNvbW1lbnQgd29yZGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVw
bGFjZWQpOiBSZW1vdmVkIHVzZSBvZiBEZXBlcmVjYXRlZFN0cmluZywKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckltYWdlOjppbWFnZU1hcCk6IENoYW5nZWQgdG8gY2FsbCB1c2VNYXAgaW5zdGVh
ZCBvZiBpbWFnZU1hcDsKKyAgICAgICAgYm90aCBkbyB0aGUgc2FtZSB0aGluZywgYW5kIHRoZSBm
aXJzdCBpcyBzdGFuZGFyZCBET00uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdCk6IFJl
d3JvdGUgYW5kIHN0cmVhbWxpbmVkIHRvIHJlbW92ZQorICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IHVzZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IENoYW5nZWQgYWRkUERG
VVJMUmVjdCB0byB0YWtlIGNvbnN0IEludFJlY3QmLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclBhcnRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNVUkxBbGxvd2VkKTogVXBk
YXRlZCBmb3IgS1VSTCBjaGFuZ2UgYW5kIHVzZSBlcXVhbElnbm9yaW5nUmVmCisgICAgICAgIGlu
c3RlYWQgb2YgZG9pbmcgYSBzZXRSZWYgdG8gZ2V0IHRoZSBzYW1lIGVmZmVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCk6IFVwZGF0ZWQgZm9yIEtV
UkwgY2hhbmdlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y2hhcmFjdGVyc0FyZUFsbEFTQ0lJKTogTW92ZWQgdGhlIGd1dHMgdG8gUGxh
dGZvcm1TdHJpbmcuaC4KKworICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlclN1YnRyZWVUb0ltYWdlKTogQWRkZWQgbWlzc2lu
ZyBjYWxsIHRvIGRvIGxheW91dC4gSSByYW4KKyAgICAgICAgaW50byB0aGlzIHdoaWxlIGRvaW5n
IHNvbWUgbGF5b3V0IHRlc3RzIHdoaWxlIFVSTCBwcm9jZXNzaW5nIHdhcyBicm9rZW4uCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOiBSZW1vdmVkIGluY2x1ZGUu
CisKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KTogUmVtb3ZlZCBEZXByZWNhdGVkU3Ry
aW5nIHVzZS4KKworICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhdyk6IEFkZGVkIG1pc3NpbmcgY2FsbCB0byBkbyBsYXlv
dXQuIEkgcmFuCisgICAgICAgIGludG8gdGhpcyB3aGlsZSBkb2luZyBzb21lIGxheW91dCB0ZXN0
cyB3aGlsZSBVUkwgcHJvY2Vzc2luZyB3YXMgYnJva2VuLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW1hZ2U6OmRhdGFDaGFuZ2VkKTogVXNlIGEgbnVsbCBVUkwgcmF0aGVyIHRoYW4gYW4gYXJiaXRy
YXJ5CisgICAgICAgIHN0cmluZyBmb3IgdGhlIGRvY3VtZW50LgorCisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRS
ZXNwb25zZVhNTCk6IFJlbW92ZWQgRGVwcmVjYXRlZFN0cmluZyB1c2UuCisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6b3Blbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOiAgTmFtZXNwYWNlIGNoYW5nZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbik6IERpdHRvLgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOiBSZW1vdmVkIERlcHJlY2F0ZWRTdHJpbmcgdXNl
LgorCisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KTogUmVtb3ZlZCBEZXByZWNhdGVkU3RyaW5nIHVzZS4K
KyAgICAgICAgKiB4bWwvWFNMU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xT
dHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhT
TFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0KTogRGl0dG8uCisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDogRGl0dG8uCisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
eHNsdFN0eWxlc2hlZXRQb2ludGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp4bWxEb2NQ
dHJGcm9tTm9kZSk6IERpdHRvLgorCiAyMDA4LTAyLTE0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIHRoZSBlZmZpY2llbmN5IG9mIFNlY3VyaXR5T3Jp
Z2luSGFzaApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw2ICszNTksNyBAQCBfX1pON1dlYkNv
cmUyMVdpbmRvd3NMYXRpbjFFbmNvZGluZ0V2CiBfX1pON1dlYkNvcmUyMWZpbmRFdmVudFdpdGhL
ZXlTdGF0ZUVQTlNfNUV2ZW50RQogX19aTjdXZWJDb3JlMjFpc0JhY2tGb3J3YXJkTG9hZFR5cGVF
TlNfMTNGcmFtZUxvYWRUeXBlRQogX19aTjdXZWJDb3JlMjFyZXBvcnRUaHJlYWRWaW9sYXRpb25F
UEtjCitfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0VSS05TXzZTdHJpbmdF
CiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKIF9fWk43V2ViQ29yZTI2
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25DMUV2CiBfX1pON1dlYkNvcmUyNk5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyNmNyZWF0ZUVQTlNfNUZyYW1lRVBOU18zMk5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyQ2xpZW50RQpAQCAtMzcxLDkgKzM3Miw4IEBAIF9fWk43V2ViQ29yZTRGb250QzFF
UktOU18xNkZvbnRQbGF0Zm9ybUQKIF9fWk43V2ViQ29yZTRGb250QzFFdgogX19aTjdXZWJDb3Jl
NEZvbnREMUV2CiBfX1pON1dlYkNvcmU0Rm9udGFTRVJLUzBfCi1fX1pON1dlYkNvcmU0S1VSTDEz
ZGVjb2RlX3N0cmluZ0VSS05TXzE2RGVwcmVjYXRlZFN0cmluZ0UKIF9fWk43V2ViQ29yZTRLVVJM
QzFFUDVOU1VSTAotX19aTjdXZWJDb3JlNEtVUkxDMUVSS05TXzE2RGVwcmVjYXRlZFN0cmluZ0UK
K19fWk43V2ViQ29yZTRLVVJMQzFFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlNEtVUkxDMUV2
CiBfX1pON1dlYkNvcmU0Tm9kZTE3c3RvcElnbm9yaW5nTGVha3NFdgogX19aTjdXZWJDb3JlNE5v
ZGUxOHN0YXJ0SWdub3JpbmdMZWFrc0V2CkBAIC00NTgsNyArNDU4LDcgQEAgX19aTjdXZWJDb3Jl
NldpZGdldEMxRVA2TlNWaWV3CiBfX1pON1dlYkNvcmU2V2lkZ2V0QzFFdgogX19aTjdXZWJDb3Jl
N0ludFNpemVDMUVSSzdfTlNTaXplCiBfX1pON1dlYkNvcmU3bnNDb2xvckVSS05TXzVDb2xvckUK
LV9fWk43V2ViQ29yZThEb2N1bWVudDExY29tcGxldGVVUkxFUktOU18xNkRlcHJlY2F0ZWRTdHJp
bmdFCitfX1pON1dlYkNvcmU4RG9jdW1lbnQxMWNvbXBsZXRlVVJMRVJLTlNfNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZThEb2N1bWVudDEzcmVtb3ZlTWFya2Vyc0VOU18xNERvY3VtZW50TWFya2VyMTBN
YXJrZXJUeXBlRQogX19aTjdXZWJDb3JlOERvY3VtZW50MTRzZXRGb2N1c2VkTm9kZUVOM1dURjEw
UGFzc1JlZlB0cklOU180Tm9kZUVFRQogX19aTjdXZWJDb3JlOERvY3VtZW50NGJvZHlFdgpAQCAt
NTM4LDcgKzUzOCw2IEBAIF9fWk43V2ViQ29yZTlUaW1lckJhc2VDMkV2CiBfX1pON1dlYkNvcmU5
VGltZXJCYXNlRDJFdgogX19aTjdXZWJDb3JlOXBhZ2VDYWNoZUV2CiBfX1pON1dlYkNvcmVlcUVS
S05TXzE5UmVzb3VyY2VSZXF1ZXN0QmFzZUVTMl8KLV9fWk43V2ViQ29yZWVxRVJLTlNfNEtVUkxF
UzJfCiBfX1pOSzdXZWJDb3JlMTFDYWNoZWRJbWFnZTVpbWFnZUV2CiBfX1pOSzdXZWJDb3JlMTFD
b250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxv
YWRlcjEwaXNDb21wbGV0ZUV2CkBAIC02MzYsNyArNjM1LDcgQEAgX19aTks3V2ViQ29yZTRGb250
MTZjYWNoZVByaW1hcnlGb250RXYKIF9fWk5LN1dlYkNvcmU0S1VSTDE3bGFzdFBhdGhDb21wb25l
bnRFdgogX19aTks3V2ViQ29yZTRLVVJMNGhvc3RFdgogX19aTks3V2ViQ29yZTRLVVJMNHBhdGhF
dgotX19aTks3V2ViQ29yZTRLVVJMOGdldE5TVVJMRXYKK19fWk5LN1dlYkNvcmU0S1VSTGN2UDVO
U1VSTEV2CiBfX1pOSzdXZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlv
bk1vZGVFdgogX19aTks3V2ViQ29yZTVGcmFtZTEwaXNGcmFtZVNldEV2CiBfX1pOSzdXZWJDb3Jl
NUZyYW1lMTJldmVudEhhbmRsZXJFdgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9t
LmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDM0ICsyOSwzMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTQXR0ci5oIgogCi0jaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFt
ZUVsZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLSNpbmNsdWRlICJranNfYmluZGluZy5oIgotI2luY2x1ZGUgImtqc19kb20u
aCIKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIEpTQXR0cjo6c2V0VmFsdWUoS0pTOjpFeGVj
U3RhdGUqIGV4ZWMsIEtKUzo6SlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTQXR0cjo6c2V0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBBdHRyKiBpbXAgPSBzdGF0
aWNfY2FzdDxBdHRyKj4oaW1wbCgpKTsKICAgICBTdHJpbmcgYXR0clZhbHVlID0gdmFsdWVUb1N0
cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwogCiAgICAgRWxlbWVudCogb3duZXJFbGVt
ZW50ID0gaW1wLT5vd25lckVsZW1lbnQoKTsKLSAgICBpZiAob3duZXJFbGVtZW50ICYmIChvd25l
ckVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBvd25lckVsZW1lbnQtPmhhc1RhZ05h
bWUoZnJhbWVUYWcpKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShpbXAtPm5hbWUoKSwgInNyYyIpICYm
IGF0dHJWYWx1ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkgewotICAgICAgICBI
VE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50
QmFzZSo+KG93bmVyRWxlbWVudCk7Ci0gICAgICAgIGlmICghY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YywgZnJhbWUtPmNvbnRlbnREb2N1bWVudCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAob3duZXJFbGVtZW50ICYmIChvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8
fCBvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpKSkgeworICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoaW1wLT5uYW1lKCksICJzcmMiKSAmJiBwcm90b2NvbElzKGF0dHJWYWx1
ZSwgImphdmFzY3JpcHQiKSkgeworICAgICAgICAgICAgaWYgKCFjaGVja05vZGVTZWN1cml0eShl
eGVjLCBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG93bmVyRWxlbWVudCktPmNv
bnRlbnREb2N1bWVudCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpbXAtPnNldFZhbHVlKGF0dHJW
YWx1ZSwgZWMpOwotICAgIEtKUzo6c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3Mg
SlNBdWRpb0NvbnN0cnVjdG9yIDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKKyAgICBjbGFzcyBK
U0F1ZGlvQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIEpTQXVkaW9Db25zdHJ1Y3RvcihLSlM6OkV4ZWNTdGF0ZSosIERvY3VtZW50Kik7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKICNpbmNsdWRlICJDU1NNZWRp
YVJ1bGUuaCIKICNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1J1bGUuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJKU0NTU0NoYXJzZXRSdWxlLmgi
CiAjaW5jbHVkZSAiSlNDU1NGb250RmFjZVJ1bGUuaCIKQEAgLTM5LDE2ICszOCwxNyBAQAogI2lu
Y2x1ZGUgIkpTQ1NTTWVkaWFSdWxlLmgiCiAjaW5jbHVkZSAiSlNDU1NQYWdlUnVsZS5oIgogI2lu
Y2x1ZGUgIkpTQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKwordXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LSlM6OkpTVmFsdWUq
IHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIENTU1J1bGUqIHJ1bGUpCitKU1ZhbHVlKiB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgQ1NTUnVsZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCi0gICAg
ICAgIHJldHVybiBLSlM6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAg
ICBLSlM6OkRPTU9iamVjdCogcmV0ID0gS0pTOjpTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2Jq
ZWN0KHJ1bGUpOworICAgIERPTU9iamVjdCogcmV0ID0gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERP
TU9iamVjdChydWxlKTsKIAogICAgIGlmIChyZXQpCiAgICAgICAgIHJldHVybiByZXQ7CkBAIC03
Nyw3ICs3Nyw3IEBAIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXI6OnB1
dERPTU9iamVjdChydWxlLCByZXQpOworICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmpl
Y3QocnVsZSwgcmV0KTsKICAgICByZXR1cm4gcmV0OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTEgKzI3
LDkgQEAKICNpbmNsdWRlICJKU0NTU1ZhbHVlLmgiCiAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0Lmgi
CiAjaW5jbHVkZSAiSlNDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ1NTVmFsdWVM
aXN0LmgiCi0jaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiSlNTVkdDb2xvci5oIgpAQCAtNDAsMTQgKzM4LDE2IEBACiAjaW5jbHVkZSAiU1ZHUGFp
bnQuaCIKICNlbmRpZgogCit1c2luZyBuYW1lc3BhY2UgS0pTOworCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywgQ1NTVmFsdWUq
IHZhbHVlKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENTU1ZhbHVlKiB2YWx1ZSkK
IHsKICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gS0pTOjpqc051bGwoKTsKKyAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgS0pTOjpET01PYmplY3QqIHJldCA9IEtKUzo6U2Ny
aXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdCh2YWx1ZSk7CisgICAgRE9NT2JqZWN0KiByZXQg
PSBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KHZhbHVlKTsKIAogICAgIGlmIChyZXQp
CiAgICAgICAgIHJldHVybiByZXQ7CkBAIC02NSw3ICs2NSw3IEBAIEtKUzo6SlNWYWx1ZSogdG9K
UyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywKICAgICBlbHNlCiAgICAgICAgIHJldCA9IG5ldyBKU0NT
U1ZhbHVlKEpTQ1NTVmFsdWVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHZhbHVlKTsKIAotICAgIEtK
Uzo6U2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdCh2YWx1ZSwgcmV0KTsKKyAgICBTY3Jp
cHRJbnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KHZhbHVlLCByZXQpOwogICAgIHJldHVybiByZXQ7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxNCArMjEsMTIgQEAKICNpbmNsdWRlICJKU0RvY3VtZW50
LmgiCiAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTSFRNTERv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgotI2luY2x1ZGUgImtqc19iaW5kaW5n
LmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMzYsMTAg
KzM0LDEwIEBACiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNlbmRpZgogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwogdm9pZCBKU0RvY3VtZW50OjptYXJrKCkKIHsKICAgICBKU0V2ZW50VGFyZ2V0Tm9kZTo6bWFy
aygpOwpAQCAtNTIsNyArNTAsNyBAQCBKU1ZhbHVlKiBKU0RvY3VtZW50Ojpsb2NhdGlvbihFeGVj
U3RhdGUqCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAg
S0pTOjpXaW5kb3cqIHdpbiA9IEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7Cisg
ICAgV2luZG93KiB3aW4gPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKTsKICAgICBBU1NF
UlQod2luKTsKICAgICByZXR1cm4gd2luLT5sb2NhdGlvbigpOwogfQpAQCAtNjksNyArNjcsNyBA
QCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgLy8gbm90IHRo
ZSB0YXJnZXQgZnJhbWUuCiAgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gc3RhdGljX2Nhc3Q8SlNE
T01XaW5kb3cqPihleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7
CiAgICAgaWYgKGFjdGl2ZUZyYW1lKQotICAgICAgICBzdHIgPSBhY3RpdmVGcmFtZS0+ZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoc3RyKTsKKyAgICAgICAgc3RyID0gYWN0aXZlRnJhbWUtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHN0cikuc3RyaW5nKCk7CiAKICAgICBib29sIHVzZXJHZXN0dXJl
ID0gYWN0aXZlRnJhbWUtPnNjcmlwdFByb3h5KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwog
ICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShzdHIsIGFjdGl2ZUZy
YW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOwpA
QCAtOTYsNyArOTQsNyBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQq
CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBkb2N1bWVudCBpcyBrZXB0IGFyb3VuZCBieSB0aGUgd2lu
ZG93IG9iamVjdCwgYW5kIHdvcmtzIHJpZ2h0IHdpdGggdGhlCiAgICAgLy8gYmFjay9mb3J3YXJk
IGNhY2hlLgogICAgIGlmIChkb2MtPmZyYW1lKCkpCi0gICAgICAgIEtKUzo6V2luZG93OjpyZXRy
aWV2ZVdpbmRvdyhkb2MtPmZyYW1lKCkpLT5wdXREaXJlY3QoImRvY3VtZW50IiwgcmV0LCBEb250
RGVsZXRlfFJlYWRPbmx5KTsKKyAgICAgICAgV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhkb2MtPmZy
YW1lKCkpLT5wdXREaXJlY3QoImRvY3VtZW50IiwgcmV0LCBEb250RGVsZXRlfFJlYWRPbmx5KTsK
ICAgICBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5vZGVDb3VudCA9IDA7CiAgICAgICAgIGZvciAo
Tm9kZSogbiA9IGRvYzsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwy
MyArMzAsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0VsZW1lbnQuaCIK
IAotI2luY2x1ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1l
RWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0jaW5jbHVkZSAia2pzX2RvbS5o
IgorCit1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1NldHRpbmdT
cmNUb0phdmFzY3JpcHRVUkwoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIEVsZW1lbnQqIGVsZW1lbnQs
IFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0
aW5nU3JjVG9KYXZhc2NyaXB0VVJMKEV4ZWNTdGF0ZSogZXhlYywgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICgoZWxl
bWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVU
YWcpKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic3JjIikgJiYgdmFsdWUuc3RhcnRzV2l0
aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKKyAgICBpZiAoKGVsZW1lbnQtPmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSkgJiYgZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgInNyYyIpICYmIHByb3RvY29sSXModmFsdWUsICJqYXZhc2NyaXB0Iikp
IHsKICAgICAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lRWxlbWVudEJhc2UqPihlbGVtZW50KTsKICAgICAgICAgaWYgKCFjaGVja05vZGVTZWN1
cml0eShleGVjLCBmcmFtZS0+Y29udGVudERvY3VtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNTQsNyArNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0aW5n
U3JjVG9KYXZhCiAgICAgcmV0dXJuIHRydWU7CiB9IAogCi1LSlM6OkpTVmFsdWUqIEpTRWxlbWVu
dDo6c2V0QXR0cmlidXRlKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBLSlM6Okxpc3QmIGFy
Z3MpCitKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU3RyaW5n
IG5hbWUgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKQEAgLTYyLDMzICs1OCwzMyBAQCBLSlM6
OkpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlKEtKCiAKICAgICBFbGVtZW50KiBpbXAg
PSBpbXBsKCk7CiAgICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZXhlYywg
aW1wLCBuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaW1wLT5zZXRBdHRyaWJ1dGUobmFt
ZSwgdmFsdWUsIGVjKTsKLSAgICBLSlM6OnNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
cmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1LSlM6OkpTVmFsdWUqIEpTRWxlbWVu
dDo6c2V0QXR0cmlidXRlTm9kZShLSlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpMaXN0
JiBhcmdzKQorSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBib29sIG5ld0F0dHJPazsKICAgICBBdHRyKiBuZXdBdHRyID0gdG9BdHRyKGFyZ3NbMF0sIG5l
d0F0dHJPayk7CiAgICAgaWYgKCFuZXdBdHRyT2spIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgcmV0dXJuIEtKUzo6anNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgRWxlbWVu
dCogaW1wID0gaW1wbCgpOwogICAgIGlmICghYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJM
KGV4ZWMsIGltcCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52YWx1ZSgpKSkKLSAgICAgICAg
cmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBLSlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1w
LT5zZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGVjKSkpOwotICAgIEtKUzo6c2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0
UHRyKGltcC0+c2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBlYykpKTsKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUtKUzo6SlNWYWx1ZSog
SlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pT
OjpMaXN0JiBhcmdzKQorSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4
ZWMsIGFyZ3NbMF0pOwpAQCAtOTcsMjkgKzkzLDI5IEBAIEtKUzo6SlNWYWx1ZSogSlNFbGVtZW50
OjpzZXRBdHRyaWJ1dGVOUygKIAogICAgIEVsZW1lbnQqIGltcCA9IGltcGwoKTsKICAgICBpZiAo
IWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChleGVjLCBpbXAsIHF1YWxpZmllZE5hbWUs
IHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpbXAtPnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVS
SSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUsIGVjKTsKLSAgICBLSlM6OnNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7Ci0gICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1LSlM6OkpT
VmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEtKUzo6RXhlY1N0YXRlKiBleGVj
LCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpCitKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0
ZU5vZGVOUyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBuZXdBdHRyT2s7CiAgICAgQXR0ciogbmV3QXR0ciA9
IHRvQXR0cihhcmdzWzBdLCBuZXdBdHRyT2spOwogICAgIGlmICghbmV3QXR0ck9rKSB7Ci0gICAg
ICAgIEtKUzo6c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAg
ICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCiAgICAgRWxlbWVudCogaW1wID0gaW1wbCgpOwogICAgIGlmICghYWxsb3dTZXR0aW5n
U3JjVG9KYXZhc2NyaXB0VVJMKGV4ZWMsIGltcCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52
YWx1ZSgpKSkKLSAgICAgICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBLSlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhl
YywgV1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVOb2RlTlMobmV3QXR0ciwgZWMpKSk7Ci0g
ICAgS0pTOjpzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9
IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVOb2RlTlMobmV3QXR0ciwg
ZWMpKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjcgKzI5LDI1IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNIVE1MRnJhbWVFbGVtZW50LmgiCiAK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0jaW5j
bHVkZSAia2pzX2RvbS5oIgorCit1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKEtK
Uzo6RXhlY1N0YXRlKiBleGVjLCBIVE1MRnJhbWVFbGVtZW50KiBpbXAsIFN0cmluZyB2YWx1ZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKEV4ZWNTdGF0ZSog
ZXhlYywgSFRNTEZyYW1lRWxlbWVudCogaW1wLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAg
IGlmICh2YWx1ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkgeworICAgIGlmIChw
cm90b2NvbElzKHZhbHVlLCAiamF2YXNjcmlwdCIpKSB7CiAgICAgICAgIGlmICghY2hlY2tOb2Rl
U2VjdXJpdHkoZXhlYywgaW1wLT5jb250ZW50RG9jdW1lbnQoKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfSAKIAotdm9pZCBKU0hUTUxGcmFt
ZUVsZW1lbnQ6OnNldFNyYyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU1ZhbHVlKiB2YWx1
ZSkKK3ZvaWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRTcmMoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiB2YWx1ZSkKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2FzdDxI
VE1MRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKLSAgICBTdHJpbmcgc3JjVmFsdWUgPSBLSlM6OnZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKKyAgICBTdHJpbmcgc3JjVmFs
dWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CiAKICAgICBpZiAo
IWFsbG93U2V0dGluZ0phdmFzY3JpcHRVUkwoZXhlYywgaW1wLCBzcmNWYWx1ZSkpCiAgICAgICAg
IHJldHVybjsKQEAgLTU4LDEwICs1NiwxMCBAQCB2b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0
U3JjKEtKUzo6RXhlCiAgICAgcmV0dXJuOwogfQogCi12b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6
c2V0TG9jYXRpb24oS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIEtKUzo6SlNWYWx1ZSogdmFsdWUpCit2
b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiB2YWx1ZSkKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2FzdDxI
VE1MRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKLSAgICBTdHJpbmcgbG9jYXRpb25WYWx1ZSA9IEtK
Uzo6dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOworICAgIFN0cmluZyBs
b2NhdGlvblZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwog
CiAgICAgaWYgKCFhbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKGV4ZWMsIGltcCwgbG9jYXRpb25W
YWx1ZSkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
SUZyYW1lRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSwyNSArMjksMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0hU
TUxJRnJhbWVFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhU
TUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
ICJranNfYmluZGluZy5oIgotI2luY2x1ZGUgImtqc19kb20uaCIKKwordXNpbmcgbmFtZXNwYWNl
IEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6
OnNldFNyYyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQg
SlNIVE1MSUZyYW1lRWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFs
dWUpCiB7CiAgICAgSFRNTElGcmFtZUVsZW1lbnQqIGltcCA9IHN0YXRpY19jYXN0PEhUTUxJRnJh
bWVFbGVtZW50Kj4oaW1wbCgpKTsKLSAgICBTdHJpbmcgc3JjVmFsdWUgPSBLSlM6OnZhbHVlVG9T
dHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsgCi0gICAgaWYgKHNyY1ZhbHVlLnN0YXJ0
c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKSB7CisKKyAgICBTdHJpbmcgc3JjVmFsdWUgPSB2
YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CisKKyAgICBpZiAocHJvdG9j
b2xJcyhzcmNWYWx1ZSwgImphdmFzY3JpcHQiKSkgewogICAgICAgICBpZiAoIWNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsIGltcC0+Y29udGVudERvY3VtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGltcC0+c2V0U3JjKHNyY1ZhbHVlKTsKLSAgICByZXR1cm47CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
T3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMyArMjUsMTMgQEAKICNpbmNsdWRlICJKU0hUTUxPcHRp
b25FbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKLUpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQq
IGQpCi0gICAgOiBLSlM6OkRPTU9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9i
amVjdFByb3RvdHlwZSgpKQotICAgICwgbV9kb2MoZCkKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpKU0hUTUxPcHRpb25FbGVtZW50Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBET01PYmpl
Y3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKKyAgICAs
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDQpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsK
IH0KQEAgLTQzLDI2ICs0MywyOCBAQCBib29sIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rv
cjo6aW1wCiAKIEpTT2JqZWN0KiBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6OmNvbnN0
cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgaW50IGV4Y2Vw
dGlvbiA9IDA7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsKG1fZG9jLT5jcmVhdGVFbGVtZW50KCJv
cHRpb24iLCBleGNlcHRpb24pKTsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0ID0gMDsKLSAg
ICBpZiAoZWwpIHsKLSAgICAgICAgb3B0ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQq
PihlbC5nZXQoKSk7Ci0gICAgICAgIGludCBzeiA9IGFyZ3Muc2l6ZSgpOwotICAgICAgICBSZWZQ
dHI8VGV4dD4gdGV4dCA9IG1fZG9jLT5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0gICAgICAgIG9wdC0+
YXBwZW5kQ2hpbGQodGV4dCwgZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbiA9PSAw
ICYmIHN6ID4gMCkKLSAgICAgICAgICAgIHRleHQtPnNldERhdGEoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24gPT0gMCAmJiBzeiA+IDEp
Ci0gICAgICAgICAgICBvcHQtPnNldFZhbHVlKGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbiA9PSAwICYmIHN6ID4gMikKLSAgICAgICAgICAgIG9wdC0+c2V0
RGVmYXVsdFNlbGVjdGVkKGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24gPT0gMCAmJiBzeiA+IDMpCi0gICAgICAgICAgICBvcHQtPnNldFNlbGVjdGVkKGFy
Z3NbM10tPnRvQm9vbGVhbihleGVjKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisKKyAg
ICBSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGVsZW1lbnQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0
PEhUTUxPcHRpb25FbGVtZW50PihtX2RvY3VtZW50LT5jcmVhdGVFbGVtZW50KCJvcHRpb24iLCBl
YykpOworICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gbV9k
b2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoIiIpOworICAgICAgICBpZiAoIWFyZ3NbMF0tPmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgICAgICB0ZXh0LT5zZXREYXRhKGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpLCBlYyk7CisgICAgICAgIGlmIChlYyA9PSAwKQorICAgICAgICAgICAgZWxlbWVudC0+YXBw
ZW5kQ2hpbGQodGV4dC5yZWxlYXNlKCksIGVjKTsKKyAgICAgICAgaWYgKGVjID09IDAgJiYgIWFy
Z3NbMV0tPmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBlbGVtZW50LT5zZXRWYWx1ZShhcmdz
WzFdLT50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGlmIChlYyA9PSAwKQorICAgICAgICAgICAg
ZWxlbWVudC0+c2V0RGVmYXVsdFNlbGVjdGVkKGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgICAgIGlmIChlYyA9PSAwKQorICAgICAgICAgICAgZWxlbWVudC0+c2V0U2VsZWN0ZWQoYXJn
c1szXS0+dG9Cb29sZWFuKGV4ZWMpKTsKICAgICB9CiAKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih0b0pTKGV4
ZWMsIG9wdCkpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgaWYgKGVjIHx8
ICFlbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHRvSlMoZXhlYywgZWxlbWVudC5yZWxlYXNlKCkpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVt
ZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMyArMjUsMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0
cnVjdG9yIDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKKyAgICBjbGFzcyBKU0hUTUxPcHRpb25F
bGVtZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvcihLSlM6OkV4ZWNTdGF0ZSosIERvY3Vt
ZW50Kik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgS0pTOjpKU09iamVjdCAqY29uc3RydWN0KEtKUzo6RXhlY1N0YXRl
KiwgY29uc3QgS0pTOjpMaXN0JiBhcmdzKTsKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTT2JqZWN0
KiBjb25zdHJ1Y3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpOwogICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CisgICAgICAgIFJlZlB0
cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgog
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKIApAQCAtMTM3LDcgKzEzNiw3IEBAIHZvaWQgSlNMb2Nh
dGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY28KICAgaWYgKCFtX2ZyYW1lKQogICAgIHJldHVy
bjsKIAotICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IHZhbHVlLT50b1N0cmluZyhleGVjKTsKKyAg
U3RyaW5nIHN0ciA9IHZhbHVlLT50b1N0cmluZyhleGVjKTsKICAgS1VSTCB1cmwgPSBtX2ZyYW1l
LT5sb2FkZXIoKS0+dXJsKCk7CiAgIGJvb2wgc2FtZURvbWFpbkFjY2VzcyA9IGFsbG93c0FjY2Vz
c0Zyb21GcmFtZShleGVjLCBtX2ZyYW1lKTsKIApAQCAtMTUyLDYgKzE1MSw3IEBAIHZvaWQgSlNM
b2NhdGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY28KIAogICAgICAgc3dpdGNoIChlbnRyeS0+
dmFsdWUuaW50VmFsdWUpIHsKICAgICAgIGNhc2UgSHJlZjogeworICAgICAgICAgIC8vIEZJWE1F
OiBXaHkgaXNuJ3QgdGhpcyBzZWN1cml0eSBjaGVjayBuZWVkZWQgZm9yIHRoZSBvdGhlciBwcm9w
ZXJ0aWVzLCBsaWtlIEhvc3QsIGJlbG93PwogICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IFdpbmRv
dzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmltcGwoKS0+ZnJhbWUoKTsKICAgICAgICAgICBpZiAo
IWZyYW1lKQogICAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjAsMjcgKzE2MCwzMCBAQCB2b2lk
IEpTTG9jYXRpb246OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgdXJsID0gZnJh
bWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChzdHIpOwogICAgICAgICAgIGJyZWFrOwogICAgICAg
fQotICAgICAgY2FzZSBIYXNoOiB7CisgICAgICBjYXNlIEhhc2g6CiAgICAgICAgICAgaWYgKHN0
ci5zdGFydHNXaXRoKCIjIikpCi0gICAgICAgICAgICAgIHN0ciA9IHN0ci5taWQoMSk7CisgICAg
ICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMSk7CiAgICAgICAgICAgaWYgKHVybC5yZWYo
KSA9PSBzdHIpCiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB1cmwuc2V0UmVmKHN0
cik7CiAgICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEhvc3Q6IHsKKyAgICAg
IGNhc2UgSG9zdDoKICAgICAgICAgICB1cmwuc2V0SG9zdEFuZFBvcnQoc3RyKTsKICAgICAgICAg
ICBicmVhazsKLSAgICAgIH0KICAgICAgIGNhc2UgSG9zdG5hbWU6CiAgICAgICAgICAgdXJsLnNl
dEhvc3Qoc3RyKTsKICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgUGF0aG5hbWU6CiAgICAg
ICAgICAgdXJsLnNldFBhdGgoc3RyKTsKICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUG9y
dDoKLSAgICAgICAgICB1cmwuc2V0UG9ydChzdHIudG9VSW50KCkpOworICAgICAgY2FzZSBQb3J0
OiB7CisgICAgICAgICAgLy8gRklYTUU6IENvdWxkIG1ha2UgdGhpcyBhIGxpdHRsZSBsZXNzIHVn
bHkgaWYgU3RyaW5nIHByb3ZpZGVkIGEgdG9VbnNpZ25lZFNob3J0IGZ1bmN0aW9uLgorICAgICAg
ICAgIGludCBwb3J0ID0gc3RyLnRvSW50KCk7CisgICAgICAgICAgaWYgKHBvcnQgPCAwIHx8IHBv
cnQgPiAweEZGRkYpCisgICAgICAgICAgICAgIHBvcnQgPSAwOworICAgICAgICAgIHVybC5zZXRQ
b3J0KHBvcnQpOwogICAgICAgICAgIGJyZWFrOworICAgICAgfQogICAgICAgY2FzZSBQcm90b2Nv
bDoKICAgICAgICAgICB1cmwuc2V0UHJvdG9jb2woc3RyKTsKICAgICAgICAgICBicmVhazsKQEAg
LTE5OSw3ICsyMDIsNyBAQCB2b2lkIEpTTG9jYXRpb246OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNv
CiAgIH0KIAogICBGcmFtZSogYWN0aXZlRnJhbWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4
ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gIGlmICghdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFy
dHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCBzYW1lRG9tYWluQWNjZXNzKSB7CisgIGlm
ICghdXJsLnByb3RvY29sSXMoImphdmFzY3JpcHQiKSB8fCBzYW1lRG9tYWluQWNjZXNzKSB7CiAg
ICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5wcm9jZXNz
aW5nVXNlckdlc3R1cmUoKTsKICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlv
bkNoYW5nZSh1cmwuc3RyaW5nKCksIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZl
cnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOwogICB9CkBAIC0yMzQsOSArMjM3LDkgQEAgSlNW
YWx1ZSoganNMb2NhdGlvblByb3RvRnVuY1JlcGxhY2UoRXhlYwogICAgIGlmIChhY3RpdmVGcmFt
ZSkgewogICAgICAgICBpZiAoIWFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZp
Z2F0aW9uKGZyYW1lKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICBTdHJpbmcgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIGNvbnN0IFdp
bmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7Ci0gICAgICAgIGlm
ICghc3RyLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cgJiYgd2lu
ZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkgeworICAgICAgICBpZiAoIXByb3RvY29sSXMo
c3RyLCAiamF2YXNjcmlwdCIpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKSkgewogICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5z
Y3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKICAgICAgICAgICAgIGZyYW1l
LT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShhY3RpdmVGcmFtZS0+bG9hZGVyKCkt
PmNvbXBsZXRlVVJMKHN0cikuc3RyaW5nKCksIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29p
bmdSZWZlcnJlcigpLCB0cnVlLCB1c2VyR2VzdHVyZSk7CiAgICAgICAgIH0KQEAgLTI1OCw3ICsy
NjEsNyBAQCBKU1ZhbHVlKiBqc0xvY2F0aW9uUHJvdG9GdW5jUmVsb2FkKEV4ZWNTCiAgICAgaWYg
KCF3aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPnVybCgpLmRlcHJlY2F0ZWRTdHJp
bmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAod2luZG93ICYmIHdpbmRv
dy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpIHsKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+
dXJsKCkucHJvdG9jb2xJcygiamF2YXNjcmlwdCIpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxv
d3NBY2Nlc3NGcm9tKGV4ZWMpKSkgewogICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gV2luZG93
OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+aW1wbCgpLT5mcmFtZSgpLT5zY3JpcHRQcm94eSgpLT5w
cm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVs
ZVJlZnJlc2godXNlckdlc3R1cmUpOwogICAgIH0KQEAgLTI4MCw3ICsyODMsNyBAQCBKU1ZhbHVl
KiBqc0xvY2F0aW9uUHJvdG9GdW5jQXNzaWduKEV4ZWNTCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgY29uc3QgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJp
ZXZlV2luZG93KGZyYW1lKTsKICAgICAgICAgU3RyaW5nIGRzdFVybCA9IGFjdGl2ZUZyYW1lLT5s
b2FkZXIoKS0+Y29tcGxldGVVUkwoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLnN0cmluZygpOwot
ICAgICAgICBpZiAoIWRzdFVybC5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAo
d2luZG93ICYmIHdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpIHsKKyAgICAgICAgaWYg
KCFwcm90b2NvbElzKGRzdFVybCwgImphdmFzY3JpcHQiKSB8fCAod2luZG93ICYmIHdpbmRvdy0+
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpIHsKICAgICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUg
PSBhY3RpdmVGcmFtZS0+c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAg
ICAgICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGlzIEpTIHdhcyBj
YWxsZWQgdmlhIGEgdXNlciBnZXN0dXJlCiAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNj
aGVkdWxlTG9jYXRpb25DaGFuZ2UoZHN0VXJsLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdv
aW5nUmVmZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNM
b2NhdGlvbi5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIEZyYW1lOwogCi0gICAgY2xhc3MgSlNMb2NhdGlvbiA6IHB1YmxpYyBL
SlM6OkRPTU9iamVjdCB7Ci0gICAgICAgIHR5cGVkZWYgS0pTOjpET01PYmplY3QgQmFzZTsKKyAg
ICBjbGFzcyBKU0xvY2F0aW9uIDogcHVibGljIERPTU9iamVjdCB7CisgICAgICAgIHR5cGVkZWYg
RE9NT2JqZWN0IEJhc2U7CiAKICAgICAgICAgZnJpZW5kIGNsYXNzIEtKUzo6V2luZG93OwogICAg
IHB1YmxpYzoKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0
b20uY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5v
ZGVNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyMSArMjcsMjIgQEAKICNpbmNsdWRl
ICJKU05hbWVkTm9kZU1hcC5oIgogCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJranNfYmluZGluZy5oIgogI2luY2x1ZGUg
Imtqc19kb20uaCIKIAordXNpbmcgbmFtZXNwYWNlIEtKUzsKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1ib29sIEpTTmFtZWROb2RlTWFwOjpjYW5HZXRJdGVtc0Zvck5hbWUoS0pTOjpFeGVjU3Rh
dGUqLCBOYW1lZE5vZGVNYXAqIGltcGwsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKQorYm9vbCBKU05hbWVkTm9kZU1hcDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSos
IE5hbWVkTm9kZU1hcCogaW1wbCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBpbXBsLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKIH0KIAotS0pTOjpK
U1ZhbHVlKiBKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSogZXhlYywg
S0pTOjpKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTTmFt
ZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBKU05hbWVkTm9kZU1hcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpT
TmFtZWROb2RlTWFwKj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgICByZXR1cm4gS0pTOjp0b0pTKGV4
ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOworICAgIHJl
dHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFt
ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbjo6CiAvLyBmb3IgY29uc3RydWN0cyBsaWtlIGRvY3VtZW50LmZvcm1zLjxuYW1lPlsxXSwK
IC8vIHNvIGl0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0gdGhhdCBpdCdzIHN0b3JpbmcgYWxsIHRo
ZSBub2RlcyAod2l0aCB0aGUgc2FtZSBuYW1lKS4gKERhdmlkKQogSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbjo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbihLSlM6OkpTT2JqZWN0KiBwcm90b3R5cGUsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbm9kZXMpCi0gICAgOiBLSlM6OkRPTU9iamVjdChw
cm90b3R5cGUpCisgICAgOiBET01PYmplY3QocHJvdG90eXBlKQogICAgICwgbV9ub2Rlcyhub2Rl
cykKIHsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbi5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5v
ZGVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIC8vIEludGVybmFsIGNsYXNzLCB1c2VkIGZvciB0aGUgY29sbGVj
dGlvbiByZXR1cm4gYnkgZS5nLiBkb2N1bWVudC5mb3Jtcy5teWlucHV0CiAgICAgLy8gd2hlbiBt
dWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIG5hbWUuCi0gICAgY2xhc3MgSlNOYW1lZE5vZGVz
Q29sbGVjdGlvbiA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CisgICAgY2xhc3MgSlNOYW1lZE5v
ZGVzQ29sbGVjdGlvbiA6IHB1YmxpYyBET01PYmplY3QgewogICAgIHB1YmxpYzoKICAgICAgICAg
SlNOYW1lZE5vZGVzQ29sbGVjdGlvbihLSlM6OkpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPiYpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxI
dHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDEyIEBACiAj
aW5jbHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKIAotI2luY2x1
ZGUgIkpTWE1MSHR0cFJlcXVlc3QubHV0LmgiCi0KLW5hbWVzcGFjZSBLSlMgewotCit1c2luZyBu
YW1lc3BhY2UgS0pTOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8gSlNYTUxIdHRwUmVxdWVzdCBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdC5sdXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvKiBTb3VyY2UgZm9yIEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVUYWJsZS4KIEBiZWdp
biBKU1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlVGFibGUgNwpAQCAtMjUwLDcgKzI0OSw2IEBAIEpT
VmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGkKICAgICByZXR1cm4gaGVhZGVy
OwogfQogCi0KIEpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbk9wZW4o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsK
ICAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU1hNTEh0dHBSZXF1ZXN0OjppbmZvKSkKQEAg
LTI2Niw3ICsyNjQsNyBAQCBKU1ZhbHVlKiBqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rp
CiAgICAgRnJhbWUqIGZyYW1lID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+aW1wbCgp
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChEZXByZWNhdGVk
U3RyaW5nKGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgS1VSTCB1cmwgPSBmcmFtZS0+
bG9hZGVyKCktPmNvbXBsZXRlVVJMKGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIGJv
b2wgYXN5bmMgPSB0cnVlOwogICAgIGlmIChhcmdzLnNpemUoKSA+PSAzKQpAQCAtMjk4LDEwICsy
OTYsOSBAQCBKU1ZhbHVlKiBqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3RpCiAgICAgU3Ry
aW5nIGJvZHk7CiAKICAgICBpZiAoYXJncy5zaXplKCkgPj0gMSkgewotICAgICAgICBpZiAoYXJn
c1swXS0+dG9PYmplY3QoZXhlYyktPmluaGVyaXRzKCZKU0RvY3VtZW50OjppbmZvKSkgewotICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc3RhdGljX2Nh
c3Q8SlNEb2N1bWVudCo+KGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMpKS0+aW1wbCgpKTsKLSAgICAg
ICAgICAgIGJvZHkgPSBkb2MtPnRvU3RyaW5nKCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoYXJnc1swXS0+dG9PYmplY3QoZXhlYyktPmluaGVyaXRz
KCZKU0RvY3VtZW50OjppbmZvKSkKKyAgICAgICAgICAgIGJvZHkgPSBzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KHN0YXRpY19jYXN0PEpTRG9jdW1lbnQqPihhcmdzWzBdLT50b09iamVjdChleGVjKSkt
PmltcGwoKSktPnRvU3RyaW5nKCk7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gY29u
dmVydGluZyBjZXJ0YWluIHZhbHVlcyAobGlrZSBudWxsKSB0byBvYmplY3QgY2FuIHNldCBhbiBl
eGNlcHRpb24KICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACi0vLyAt
Ki0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgbGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAbnlwb3AuY29tPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOSw1NiArMjcsNTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CiBjbGFzcyBEb2N1bWVudDsKIAot
fQotCi1uYW1lc3BhY2UgS0pTIHsKLQogY2xhc3MgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
SW1wIDogcHVibGljIERPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgSlNYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkRvY3VtZW50Kik7CisgICAgSlNYTUxI
dHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKEtKUzo6RXhlY1N0YXRlKiwgRG9jdW1lbnQqKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IExpc3QmKTsKKyAgICB2aXJ0
dWFsIEtKUzo6SlNPYmplY3QqIGNvbnN0cnVjdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6
TGlzdCYpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZG9jOwor
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jOwogfTsKIAogY2xhc3MgSlNYTUxIdHRwUmVxdWVzdCA6
IHB1YmxpYyBET01PYmplY3QgewogcHVibGljOgotICAgIEpTWE1MSHR0cFJlcXVlc3QoSlNPYmpl
Y3QqIHByb3RvdHlwZSwgV2ViQ29yZTo6RG9jdW1lbnQqKTsKKyAgICBKU1hNTEh0dHBSZXF1ZXN0
KEtKUzo6SlNPYmplY3QqIHByb3RvdHlwZSwgRG9jdW1lbnQqKTsKICAgICB+SlNYTUxIdHRwUmVx
dWVzdCgpOwogCi0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOworICAg
IHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87CiAgICAgZW51
bSB7IE9ubG9hZCwgT25yZWFkeXN0YXRlY2hhbmdlLCBSZWFkeVN0YXRlLCBSZXNwb25zZVRleHQs
IFJlc3BvbnNlWE1MLCBTdGF0dXMsCiAgICAgICAgIFN0YXR1c1RleHQsIEFib3J0LCBHZXRBbGxS
ZXNwb25zZUhlYWRlcnMsIEdldFJlc3BvbnNlSGVhZGVyLCBPcGVuLCBTZW5kLCBTZXRSZXF1ZXN0
SGVhZGVyLCBPdmVycmlkZU1JTUVUeXBlLAogICAgICAgICBBZGRFdmVudExpc3RlbmVyLCBSZW1v
dmVFdmVudExpc3RlbmVyLCBEaXNwYXRjaEV2ZW50IH07CiAKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tl
bikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAg
IHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTVmFsdWUqIHZh
bHVlLCBpbnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRl
KikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3Bl
cnR5U2xvdCYpOworICAgIEtKUzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSosIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChLSlM6OkV4ZWNT
dGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBLSlM6OkpTVmFsdWUq
LCBpbnQgYXR0cik7CisgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwg
aW50IHRva2VuLCBLSlM6OkpTVmFsdWUqLCBpbnQgYXR0cik7CisgICAgdmlydHVhbCBib29sIHRv
Qm9vbGVhbihLSlM6OkV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbWFyaygpOwogCi0gICAgV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3QqIGltcGwoKSBj
b25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKyAgICBYTUxIdHRwUmVxdWVzdCogaW1wbCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdD4gbV9pbXBsOworICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVz
dD4gbV9pbXBsOwogfTsKIAotSlNWYWx1ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0
aW9uQWJvcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBq
c1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25HZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBqc1hNTEh0dHBSZXF1
ZXN0UHJvdG90eXBlRnVuY3Rpb25HZXRSZXNwb25zZUhlYWRlcihFeGVjU3RhdGUqLCBKU09iamVj
dCosIGNvbnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5j
dGlvbk9wZW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBq
c1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25TZW5kKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYpOwotSlNWYWx1ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1bmN0
aW9uU2V0UmVxdWVzdEhlYWRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsK
LUpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbk92ZXJyaWRlTUlNRVR5
cGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBqc1hNTEh0
dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgY29uc3QgTGlzdCYpOwotSlNWYWx1ZSoganNYTUxIdHRwUmVxdWVzdFByb3RvdHlw
ZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IExpc3QmKTsKLUpTVmFsdWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbkRpc3Bh
dGNoRXZlbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CitLSlM6OkpTVmFs
dWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbkFib3J0KEtKUzo6RXhlY1N0YXRl
KiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hN
TEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25HZXRBbGxSZXNwb25zZUhlYWRlcnMoS0pTOjpF
eGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFs
dWUqIGpzWE1MSHR0cFJlcXVlc3RQcm90b3R5cGVGdW5jdGlvbkdldFJlc3BvbnNlSGVhZGVyKEtK
Uzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpK
U1ZhbHVlKiBqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25PcGVuKEtKUzo6RXhlY1N0
YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBq
c1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25TZW5kKEtKUzo6RXhlY1N0YXRlKiwgS0pT
OjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hNTEh0dHBS
ZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25TZXRSZXF1ZXN0SGVhZGVyKEtKUzo6RXhlY1N0YXRlKiwg
S0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hNTEh0
dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25PdmVycmlkZU1JTUVUeXBlKEtKUzo6RXhlY1N0YXRl
KiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hN
TEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEtKUzo6RXhlY1N0
YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBq
c1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEtKUzo6
RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1Zh
bHVlKiBqc1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlRnVuY3Rpb25EaXNwYXRjaEV2ZW50KEtKUzo6
RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOwogCi19IC8vIG5h
bWVzcGFjZSBLSlMKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEpTWE1MSHR0
cFJlcXVlc3RfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcAko
cmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDE1ICszMCwxNyBA
QAogI2luY2x1ZGUgIkpTWFNMVFByb2Nlc3Nvci5oIgogCiAjaW5jbHVkZSAiWFNMVFByb2Nlc3Nv
ci5oIgotI2luY2x1ZGUgIkpTWFNMVFByb2Nlc3Nvci5sdXQuaCIKICNpbmNsdWRlICJranNfZG9t
LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogCit1c2luZyBuYW1lc3BhY2UgS0pTOwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLW5hbWVzcGFjZSBLSlMgeworI2luY2x1ZGUgIkpTWFNMVFBy
b2Nlc3Nvci5sdXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBDbGFzc0luZm8g
SlNYU0xUUHJvY2Vzc29yOjppbmZvID0geyAiWFNMVFByb2Nlc3NvciIsIDAsIDAgfTsKIApAQCAt
NzEsNyArNzMsNyBAQCBKU1hTTFRQcm9jZXNzb3I6On5KU1hTTFRQcm9jZXNzb3IoKQogCiBKU1Zh
bHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvbkltcG9ydFN0eWxlc2hlZXQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkpTWFNMVFByb2Nlc3Nvcjo6aW5mbykpCisg
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBYU0xUUHJvY2Vzc29y
JiBwcm9jZXNzb3IgPSAqc3RhdGljX2Nhc3Q8SlNYU0xUUHJvY2Vzc29yKj4odGhpc09iaiktPmlt
cGwoKTsKIApAQCAtODcsNyArODksNyBAQCBKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5
cGVGdW5jdGlvCiAKIEpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9uVHJh
bnNmb3JtVG9GcmFnbWVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6SlNYU0xU
UHJvY2Vzc29yOjppbmZvKSkKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU1hTTFRQcm9j
ZXNzb3I6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogICAgIFhTTFRQcm9jZXNzb3ImIHByb2Nlc3NvciA9ICpzdGF0aWNfY2FzdDxKU1hTTFRQcm9j
ZXNzb3IqPih0aGlzT2JqKS0+aW1wbCgpOwogCkBAIC0xMDQsNyArMTA2LDcgQEAgSlNWYWx1ZSog
anNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3RpbwogCiBKU1ZhbHVlKiBqc1hTTFRQcm9jZXNz
b3JQcm90b3R5cGVGdW5jdGlvblRyYW5zZm9ybVRvRG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmot
PmluaGVyaXRzKCZLSlM6OkpTWFNMVFByb2Nlc3Nvcjo6aW5mbykpCisgICAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmSlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBYU0xUUHJvY2Vzc29yJiBwcm9jZXNzb3IgPSAq
c3RhdGljX2Nhc3Q8SlNYU0xUUHJvY2Vzc29yKj4odGhpc09iaiktPmltcGwoKTsKIApAQCAtMTIy
LDcgKzEyNCw3IEBAIEpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW8KIAog
SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25TZXRQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkpTWFNMVFByb2Nlc3Nvcjo6aW5mbykpCisg
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBYU0xUUHJvY2Vzc29y
JiBwcm9jZXNzb3IgPSAqc3RhdGljX2Nhc3Q8SlNYU0xUUHJvY2Vzc29yKj4odGhpc09iaiktPmlt
cGwoKTsKIApAQCAtMTM3LDcgKzEzOSw3IEBAIEpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3Rv
dHlwZUZ1bmN0aW8KIAogSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25H
ZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlz
dCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkpTWFNMVFByb2Nl
c3Nvcjo6aW5mbykpCisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNYU0xUUHJvY2Vzc29y
OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAg
ICBYU0xUUHJvY2Vzc29yJiBwcm9jZXNzb3IgPSAqc3RhdGljX2Nhc3Q8SlNYU0xUUHJvY2Vzc29y
Kj4odGhpc09iaiktPmltcGwoKTsKIApAQCAtMTUzLDcgKzE1NSw3IEBAIEpTVmFsdWUqIGpzWFNM
VFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW8KIAogSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJv
dG90eXBlRnVuY3Rpb25SZW1vdmVQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkpTWFNMVFByb2Nlc3Nvcjo6aW5mbykpCisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0
cygmSlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKICAgICBYU0xUUHJvY2Vzc29yJiBwcm9jZXNzb3IgPSAqc3RhdGljX2Nh
c3Q8SlNYU0xUUHJvY2Vzc29yKj4odGhpc09iaiktPmltcGwoKTsKIApAQCAtMTY3LDcgKzE2OSw3
IEBAIEpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW8KIAogSlNWYWx1ZSog
anNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25DbGVhclBhcmFtZXRlcnMoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkpTWFNMVFByb2Nlc3Nvcjo6aW5mbykpCisgICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmSlNYU0xUUHJvY2Vzc29yOjppbmZvKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBYU0xUUHJvY2Vzc29yJiBwcm9j
ZXNzb3IgPSAqc3RhdGljX2Nhc3Q8SlNYU0xUUHJvY2Vzc29yKj4odGhpc09iaiktPmltcGwoKTsK
IApAQCAtMTc3LDcgKzE3OSw3IEBAIEpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1
bmN0aW8KIAogSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25SZXNldChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewot
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6SlNYU0xUUHJvY2Vzc29yOjppbmZvKSkK
KyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU1hTTFRQcm9jZXNzb3I6OmluZm8pKQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIFhTTFRQcm9jZXNz
b3ImIHByb2Nlc3NvciA9ICpzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNzb3IqPih0aGlzT2JqKS0+
aW1wbCgpOwogCkBAIC0xODUsNyArMTg3LDcgQEAgSlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJv
dG90eXBlRnVuY3RpbwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1YU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3JJbXA6OlhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcChFeGVjU3RhdGUg
KmV4ZWMpCitYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3JJbXA6OlhTTFRQcm9jZXNzb3JDb25zdHJ1
Y3RvckltcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgOiBET01PYmplY3QoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKIHsKICAgICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgWFNMVFByb2Nlc3NvclByb3RvdHlwZTo6c2VsZihl
eGVjKSwgTm9uZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmgJKHJl
dmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw0NiArMzEsNDUgQEAKICNpbmNsdWRlICJranNf
YmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgWFNMVFByb2Nlc3Nv
cjsKLX0KKworY2xhc3MgWFNMVFByb2Nlc3NvcjsKIAogLy8gRXZlbnR1YWxseSB3ZSBzaG91bGQg
aW1wbGVtZW50IFhTTFRFeGNlcHRpb246CiAvLyBodHRwOi8vbHhyLm1vemlsbGEub3JnL3NlYW1v
bmtleS9zb3VyY2UvY29udGVudC94c2wvcHVibGljL25zSVhTTFRFeGNlcHRpb24uaWRsCiAvLyBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQ2CiAKLW5hbWVzcGFjZSBL
SlMgewotCiBjbGFzcyBKU1hTTFRQcm9jZXNzb3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKIHB1Ymxp
YzoKLSAgICBKU1hTTFRQcm9jZXNzb3IoSlNPYmplY3QqIHByb3RvdHlwZSk7CisgICAgSlNYU0xU
UHJvY2Vzc29yKEtKUzo6SlNPYmplY3QqIHByb3RvdHlwZSk7CiAgICAgfkpTWFNMVFByb2Nlc3Nv
cigpOwogICAgIAotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKyAg
ICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBpbmZvOworCisgICAg
WFNMVFByb2Nlc3NvciogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogCi0g
ICAgV2ViQ29yZTo6WFNMVFByb2Nlc3NvciAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5n
ZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWZQdHI8V2ViQ29yZTo6WFNMVFByb2Nlc3Nvcj4gbV9p
bXBsOworICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBtX2ltcGw7CiB9OwogCiBjbGFzcyBYU0xU
UHJvY2Vzc29yQ29uc3RydWN0b3JJbXAgOiBwdWJsaWMgRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICBYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3JJbXAoRXhlY1N0YXRlKik7CisgICAgWFNMVFByb2Nl
c3NvckNvbnN0cnVjdG9ySW1wKEtKUzo6RXhlY1N0YXRlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0
cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0Jik7CisgICAgdmlydHVhbCBLSlM6OkpTT2JqZWN0
KiBjb25zdHJ1Y3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6Okxpc3QmKTsKIH07CiAKLUpT
VmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9uSW1wb3J0U3R5bGVzaGVldChF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWFNMVFByb2Nl
c3NvclByb3RvdHlwZUZ1bmN0aW9uVHJhbnNmb3JtVG9GcmFnbWVudChFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IExpc3QmKTsKLUpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1
bmN0aW9uVHJhbnNmb3JtVG9Eb2N1bWVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExp
c3QmKTsKLUpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9uU2V0UGFyYW1l
dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwotSlNWYWx1ZSoganNYU0xU
UHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25HZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBMaXN0Jik7Ci1KU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5j
dGlvblJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsK
LUpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1bmN0aW9uQ2xlYXJQYXJhbWV0ZXJz
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwotSlNWYWx1ZSoganNYU0xUUHJv
Y2Vzc29yUHJvdG90eXBlRnVuY3Rpb25SZXNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IExpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBlRnVuY3Rpb25J
bXBvcnRTdHlsZXNoZWV0KEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtK
Uzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlv
blRyYW5zZm9ybVRvRnJhZ21lbnQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29u
c3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlwZUZ1
bmN0aW9uVHJhbnNmb3JtVG9Eb2N1bWVudChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3Qq
LCBjb25zdCBLSlM6Okxpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90
eXBlRnVuY3Rpb25TZXRQYXJhbWV0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0Kiwg
Y29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlw
ZUZ1bmN0aW9uR2V0UGFyYW1ldGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNv
bnN0IEtKUzo6TGlzdCYpOworS0pTOjpKU1ZhbHVlKiBqc1hTTFRQcm9jZXNzb3JQcm90b3R5cGVG
dW5jdGlvblJlbW92ZVBhcmFtZXRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBj
b25zdCBLSlM6Okxpc3QmKTsKK0tKUzo6SlNWYWx1ZSoganNYU0xUUHJvY2Vzc29yUHJvdG90eXBl
RnVuY3Rpb25DbGVhclBhcmFtZXRlcnMoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0Kiwg
Y29uc3QgS0pTOjpMaXN0Jik7CitLSlM6OkpTVmFsdWUqIGpzWFNMVFByb2Nlc3NvclByb3RvdHlw
ZUZ1bmN0aW9uUmVzZXQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pT
OjpMaXN0Jik7CiAKLX0gLy8gbmFtZXNwYWNlIEtKUworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNOb2Rl
LmgiCiAjaW5jbHVkZSAiSlNSYW5nZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTWE1MSHR0cFJl
cXVlc3RFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUmFuZ2VFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
Imtqc193aW5kb3cuaCIKQEAgLTUxLDEyICs1MiwxMCBAQAogI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBLSlM7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLS8vIEZJWE1FOiBNb3ZlIGFsbCB0aGlzIHN0dWZmIGludG8gdGhlIFdlYkNvcmUg
bmFtZXNwYWNlLgorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2UgS0pTIHsKK3VzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgRE9NT2JqZWN0
Kj4gRE9NT2JqZWN0TWFwOwogdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6Ok5vZGUqLCBKU05vZGUq
PiBOb2RlTWFwOwpAQCAtMjYyLDYgKzI2MSwyNyBAQCBKU1ZhbHVlKiBqc1N0cmluZ09yRmFsc2Uo
Y29uc3QgU3RyaW5nJiBzCiAgICAgcmV0dXJuIGpzU3RyaW5nKHMpOwogfQogCitKU1ZhbHVlKiBq
c1N0cmluZ09yTnVsbChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBqc1N0cmluZyh1cmwuc3RyaW5n
KCkpOworfQorCitKU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICBpZiAodXJsLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICByZXR1cm4ganNTdHJpbmcodXJsLnN0cmluZygpKTsKK30KKworSlNWYWx1ZSoganNTdHJp
bmdPckZhbHNlKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKyAgICByZXR1cm4ganNTdHJpbmcodXJsLnN0
cmluZygpKTsKK30KKwogU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSogdmFsKQogewogICAgIGlmICh2YWwtPmlzTnVsbCgpKQpAQCAtMzIw
LDEwICszNDAsNiBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yT2JqZWN0KTsKIH0KIAotfSAvLyBuYW1lc3BhY2Ug
S0pTCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQogYm9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUo
RXhlY1N0YXRlKiBleGVjLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfYmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTIg
QEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKICAgICBjbGFzcyBBdG9taWNTdHJp
bmc7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRnJh
bWU7CisgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFN0cmluZzsK
ICAgICBjbGFzcyBKU05vZGU7CkBAIC00NCwyMSArNDYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2lmIEVOQUJMRShTVkcpCiAgICAgY2xhc3MgU1ZHRWxlbWVudDsKICNlbmRpZgotfQotCi1u
YW1lc3BhY2UgS0pTIHsKIAotICAgIC8qKgotICAgICAqIEJhc2UgY2xhc3MgZm9yIGFsbCBvYmpl
Y3RzIGluIHRoaXMgYmluZGluZyBFWENFUFQgV2luZG93Ci0gICAgICovCi0gICAgY2xhc3MgRE9N
T2JqZWN0IDogcHVibGljIEpTT2JqZWN0IHsKKyAgICAvLyBCYXNlIGNsYXNzIGZvciBhbGwgb2Jq
ZWN0cyBpbiB0aGlzIGJpbmRpbmcgZXhjZXB0IFdpbmRvdy4KKyAgICBjbGFzcyBET01PYmplY3Qg
OiBwdWJsaWMgS0pTOjpKU09iamVjdCB7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNp
dCBET01PYmplY3QoSlNWYWx1ZSogcHJvdG90eXBlKSAvLyBGSVhNRTogdGhpcyBzaG91bGQgdGFr
ZSBhIEpTT2JqZWN0IG9uY2UgSlNMb2NhdGlvbiBoYXMgYSByZWFsIHByb3RvdHlwZQorICAgICAg
ICBleHBsaWNpdCBET01PYmplY3QoS0pTOjpKU1ZhbHVlKiBwcm90b3R5cGUpIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCB0YWtlIGEgSlNPYmplY3Qgb25jZSBKU0xvY2F0aW9uIGhhcyBhIHJlYWwgcHJv
dG90eXBlCiAgICAgICAgICAgICA6IEpTT2JqZWN0KHByb3RvdHlwZSkKICAgICAgICAgewogICAg
ICAgICAgICAgLy8gRE9NT2JqZWN0IGRlc3RydWN0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZSBiZWNh
dXNlIERPTU9iamVjdHMgd3JhcCAKICAgICAgICAgICAgIC8vIHVuc2FmZSBXZWJDb3JlIERPTSBk
YXRhIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICBDb2xsZWN0b3I6OmNvbGxlY3RPbk1haW5UaHJl
YWRPbmx5KHRoaXMpOworICAgICAgICAgICAgS0pTOjpDb2xsZWN0b3I6OmNvbGxlY3RPbk1haW5U
aHJlYWRPbmx5KHRoaXMpOwogICAgICAgICB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC02OSwyNyAr
NjYsMjUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIERPTU9iamVjdCgpOwogICAgIH07CiAK
LSAgICBjbGFzcyBTY3JpcHRJbnRlcnByZXRlciA6IHB1YmxpYyBJbnRlcnByZXRlciB7CisgICAg
Y2xhc3MgU2NyaXB0SW50ZXJwcmV0ZXIgOiBwdWJsaWMgS0pTOjpJbnRlcnByZXRlciB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgRE9NT2JqZWN0KiBnZXRET01PYmplY3Qodm9pZCogb2Jq
ZWN0SGFuZGxlKTsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0RE9NT2JqZWN0KHZvaWQqIG9iamVj
dEhhbmRsZSwgRE9NT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGZvcmdldERPTU9iamVj
dCh2b2lkKiBvYmplY3RIYW5kbGUpOwogCi0gICAgICAgIHN0YXRpYyBXZWJDb3JlOjpKU05vZGUq
IGdldERPTU5vZGVGb3JEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVudCosIFdlYkNvcmU6Ok5vZGUq
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0RE9NTm9kZUZvckRvY3VtZW50KFdlYkNvcmU6OkRv
Y3VtZW50KiwgV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OkpTTm9kZSogbm9kZVdyYXBwZXIpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBmb3JnZXRET01Ob2RlRm9yRG9jdW1lbnQoV2ViQ29yZTo6RG9j
dW1lbnQqLCBXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZvcmdldEFsbERP
TU5vZGVzRm9yRG9jdW1lbnQoV2ViQ29yZTo6RG9jdW1lbnQqKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgdXBkYXRlRE9NTm9kZURvY3VtZW50KFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpEb2N1bWVu
dCogb2xkRG9jLCBXZWJDb3JlOjpEb2N1bWVudCogbmV3RG9jKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgbWFya0RPTU5vZGVzRm9yRG9jdW1lbnQoV2ViQ29yZTo6RG9jdW1lbnQqKTsKKyAgICAgICAg
c3RhdGljIEpTTm9kZSogZ2V0RE9NTm9kZUZvckRvY3VtZW50KERvY3VtZW50KiwgTm9kZSopOwor
ICAgICAgICBzdGF0aWMgdm9pZCBwdXRET01Ob2RlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBOb2Rl
KiwgSlNOb2RlKiBub2RlV3JhcHBlcik7CisgICAgICAgIHN0YXRpYyB2b2lkIGZvcmdldERPTU5v
ZGVGb3JEb2N1bWVudChEb2N1bWVudCosIE5vZGUqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZm9y
Z2V0QWxsRE9NTm9kZXNGb3JEb2N1bWVudChEb2N1bWVudCopOworICAgICAgICBzdGF0aWMgdm9p
ZCB1cGRhdGVET01Ob2RlRG9jdW1lbnQoTm9kZSosIERvY3VtZW50KiBvbGREb2MsIERvY3VtZW50
KiBuZXdEb2MpOworICAgICAgICBzdGF0aWMgdm9pZCBtYXJrRE9NTm9kZXNGb3JEb2N1bWVudChE
b2N1bWVudCopOwogICAgIH07CiAKLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBmcm9tIGNhY2hl
LCBvciBjcmVhdGUsIGEgSlMgb2JqZWN0IGFyb3VuZCBhIERPTSBvYmplY3QKLSAgICAgKi8KLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBET01PYmosIGNsYXNzIEpTRE9NT2JqLCBjbGFzcyBKU0RPTU9ialBy
b3RvdHlwZT4gaW5saW5lIEpTVmFsdWUqIGNhY2hlRE9NT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
RE9NT2JqKiBkb21PYmopCisgICAgLy8gUmV0cmlldmUgZnJvbSBjYWNoZSwgb3IgY3JlYXRlLCBh
IEpTIHdyYXBwZXIgZm9yIGEgRE9NIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBET01PYmos
IGNsYXNzIEpTRE9NT2JqLCBjbGFzcyBKU0RPTU9ialByb3RvdHlwZT4gaW5saW5lIEtKUzo6SlNW
YWx1ZSogY2FjaGVET01PYmplY3QoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIERPTU9iaiogZG9tT2Jq
KQogICAgIHsKICAgICAgICAgaWYgKCFkb21PYmopCi0gICAgICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisgICAgICAgICAgICByZXR1cm4gS0pTOjpqc051bGwoKTsKICAgICAgICAgaWYgKERPTU9i
amVjdCogcmV0ID0gU2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChkb21PYmopKQogICAg
ICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgRE9NT2JqZWN0KiByZXQgPSBuZXcgSlNET01P
YmooSlNET01PYmpQcm90b3R5cGU6OnNlbGYoZXhlYyksIGRvbU9iaik7CkBAIC05OCwxMyArOTMs
MTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgfQogCiAjaWYgRU5BQkxFKFNWRykKLSAgICAvKioK
LSAgICAgKiBSZXRyaWV2ZSBmcm9tIGNhY2hlLCBvciBjcmVhdGUsIGEgSlMgb2JqZWN0IGFyb3Vu
ZCBhIFNWRyBET00gb2JqZWN0Ci0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgRE9NT2JqLCBj
bGFzcyBKU0RPTU9iaiwgY2xhc3MgSlNET01PYmpQcm90b3R5cGU+IGlubGluZSBKU1ZhbHVlKiBj
YWNoZVNWR0RPTU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIERPTU9iaiogZG9tT2JqLCBXZWJDb3Jl
OjpTVkdFbGVtZW50KiBjb250ZXh0KQorICAgIC8vIFJldHJpZXZlIGZyb20gY2FjaGUsIG9yIGNy
ZWF0ZSwgYSBKUyB3cmFwcGVyIGZvciBhbiBTVkcgRE9NIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTxj
bGFzcyBET01PYmosIGNsYXNzIEpTRE9NT2JqLCBjbGFzcyBKU0RPTU9ialByb3RvdHlwZT4gaW5s
aW5lIEtKUzo6SlNWYWx1ZSogY2FjaGVTVkdET01PYmplY3QoS0pTOjpFeGVjU3RhdGUqIGV4ZWMs
IERPTU9iaiogZG9tT2JqLCBTVkdFbGVtZW50KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgaWYg
KCFkb21PYmopCi0gICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgICAgICByZXR1
cm4gS0pTOjpqc051bGwoKTsKICAgICAgICAgaWYgKERPTU9iamVjdCogcmV0ID0gU2NyaXB0SW50
ZXJwcmV0ZXI6OmdldERPTU9iamVjdChkb21PYmopKQogICAgICAgICAgICAgcmV0dXJuIHJldDsK
ICAgICAgICAgRE9NT2JqZWN0KiByZXQgPSBuZXcgSlNET01PYmooSlNET01PYmpQcm90b3R5cGU6
OnNlbGYoZXhlYyksIGRvbU9iaiwgY29udGV4dCk7CkBAIC0xMTQsMzUgKzEwNywzNiBAQCBuYW1l
c3BhY2UgS0pTIHsKICNlbmRpZgogCiAgICAgLy8gQ29udmVydCBhIERPTSBpbXBsZW1lbnRhdGlv
biBleGNlcHRpb24gY29kZSBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1
dGlvbiBzdGF0ZS4KLSAgICB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqLCBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlKTsKKyAgICB2b2lkIHNldERPTUV4Y2VwdGlvbihLSlM6OkV4ZWNTdGF0
ZSosIEV4Y2VwdGlvbkNvZGUpOwogCiAgICAgLy8gSGVscGVyIGNsYXNzIHRvIGNhbGwgc2V0RE9N
RXhjZXB0aW9uIG9uIGV4aXQgd2l0aG91dCBhZGRpbmcgbG90cyBvZiBzZXBhcmF0ZSBjYWxscyB0
byB0aGF0IGZ1bmN0aW9uLgogICAgIGNsYXNzIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgOiBOb25j
b3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBET01FeGNlcHRpb25UcmFu
c2xhdG9yKEV4ZWNTdGF0ZSogZXhlYykgOiBtX2V4ZWMoZXhlYyksIG1fY29kZSgwKSB7IH0KKyAg
ICAgICAgZXhwbGljaXQgRE9NRXhjZXB0aW9uVHJhbnNsYXRvcihLSlM6OkV4ZWNTdGF0ZSogZXhl
YykgOiBtX2V4ZWMoZXhlYyksIG1fY29kZSgwKSB7IH0KICAgICAgICAgfkRPTUV4Y2VwdGlvblRy
YW5zbGF0b3IoKSB7IHNldERPTUV4Y2VwdGlvbihtX2V4ZWMsIG1fY29kZSk7IH0KLSAgICAgICAg
b3BlcmF0b3IgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYoKSB7IHJldHVybiBtX2NvZGU7IH0KKyAg
ICAgICAgb3BlcmF0b3IgRXhjZXB0aW9uQ29kZSYoKSB7IHJldHVybiBtX2NvZGU7IH0KICAgICBw
cml2YXRlOgotICAgICAgICBFeGVjU3RhdGUqIG1fZXhlYzsKLSAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBtX2NvZGU7CisgICAgICAgIEtKUzo6RXhlY1N0YXRlKiBtX2V4ZWM7CisgICAg
ICAgIEV4Y2VwdGlvbkNvZGUgbV9jb2RlOwogICAgIH07CiAKLSAgICBKU1ZhbHVlKiBqc1N0cmlu
Z09yTnVsbChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsgLy8gbnVsbCBpZiB0aGUgc3RyaW5nIGlz
IG51bGwKLSAgICBKU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi0gICAgSlNWYWx1ZSog
anNTdHJpbmdPckZhbHNlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOyAvLyBib29sZWFuIGZhbHNl
IGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorICAgIEtKUzo6SlNWYWx1ZSoganNTdHJpbmdPck51bGwo
Y29uc3QgU3RyaW5nJik7IC8vIG51bGwgaWYgdGhlIHN0cmluZyBpcyBudWxsCisgICAgS0pTOjpK
U1ZhbHVlKiBqc1N0cmluZ09yTnVsbChjb25zdCBLVVJMJik7IC8vIG51bGwgaWYgdGhlIFVSTCBp
cyBudWxsCiAKLSAgICAvLyBzZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uIHNob3Vs
ZCBiZSB1c2VkIGZvciBVU3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBvd25lZAotICAgIC8vIGJ5IGFu
b3RoZXIgb2JqZWN0LCBzbyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMg
dW5saWtlbHkgdG8gc2F2ZSBtZW1vcnkuCi0gICAgSlNWYWx1ZSoganNPd25lZFN0cmluZ09yTnVs
bChjb25zdCBLSlM6OlVTdHJpbmcmKTsgCisgICAgS0pTOjpKU1ZhbHVlKiBqc1N0cmluZ09yVW5k
ZWZpbmVkKGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxs
CisgICAgS0pTOjpKU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKGNvbnN0IEtVUkwmKTsgLy8g
dW5kZWZpbmVkIGlmIHRoZSBVUkwgaXMgbnVsbAogCi0gICAgV2ViQ29yZTo6U3RyaW5nIHZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKEV4ZWNTdGF0ZSosIEpTVmFsdWUqKTsgLy8gbnVsbCBTdHJp
bmcgaWYgdGhlIHZhbHVlIGlzIG51bGwKLSAgICBXZWJDb3JlOjpTdHJpbmcgdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhFeGVjU3RhdGUqLCBKU1ZhbHVlKik7IC8vIG51bGwg
U3RyaW5nIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZAorICAgIEtKUzo6SlNWYWx1
ZSoganNTdHJpbmdPckZhbHNlKGNvbnN0IFN0cmluZyYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRo
ZSBzdHJpbmcgaXMgbnVsbAorICAgIEtKUzo6SlNWYWx1ZSoganNTdHJpbmdPckZhbHNlKGNvbnN0
IEtVUkwmKTsgLy8gYm9vbGVhbiBmYWxzZSBpZiB0aGUgVVJMIGlzIG51bGwKIAotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFBh
c3NSZWZQdHI8VD4gcHRyKSB7IHJldHVybiB0b0pTKGV4ZWMsIHB0ci5nZXQoKSk7IH0KKyAgICAv
LyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91bGQgYmUgdXNlZCBmb3Ig
YW55IFVTdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKKyAgICAvLyBvYmpl
Y3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3
cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5LgorICAgIEtKUzo6SlNWYWx1ZSoganNP
d25lZFN0cmluZ09yTnVsbChjb25zdCBLSlM6OlVTdHJpbmcmKTsgCiAKLX0gLy8gbmFtZXNwYWNl
IEtKUworICAgIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhLSlM6OkV4ZWNTdGF0
ZSosIEtKUzo6SlNWYWx1ZSopOyAvLyBudWxsIFN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbnVsbAor
ICAgIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKEtKUzo6RXhl
Y1N0YXRlKiwgS0pTOjpKU1ZhbHVlKik7IC8vIG51bGwgU3RyaW5nIGlmIHRoZSB2YWx1ZSBpcyBu
dWxsIG9yIHVuZGVmaW5lZAogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMs
IFBhc3NSZWZQdHI8VD4gcHRyKSB7IHJldHVybiB0b0pTKGV4ZWMsIHB0ci5nZXQoKSk7IH0KIAog
ICAgIC8vIEhlbHBlcnMgZm9yIFdpbmRvdywgSGlzdG9yeSwgYW5kIExvY2F0aW9uIGNsYXNzZXMg
dG8gaW1wbGVtZW50IGNyb3NzLWRvbWFpbiBwb2xpY3kuCiAgICAgLy8gQmVzaWRlcyB0aGUgY3Jv
c3MtZG9tYWluIGNoZWNrLCB0aGV5IG5lZWQgbm9uLWNhY2hpbmcgdmVyc2lvbnMgb2Ygc3RhdGlj
RnVuY3Rpb25HZXR0ZXIgZm9yCkBAIC0xNTAsNyArMTQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEtKUzo6RXhlY1N0YXRlKiwgRnJhbWUq
KTsKICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShLSlM6OkV4ZWNTdGF0ZSosIEZyYW1l
KiwgU3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUo
RnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCiAgICAgS0pTOjpKU1ZhbHVlKiBub25D
YWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0
KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgS0pTOjpKU1ZhbHVlKiBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVy
KEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19jc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19jc3MuaAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19j
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICBjbGFzcyBKU1JHQkNvbG9yIDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKKyAg
ICBjbGFzcyBKU1JHQkNvbG9yIDogcHVibGljIERPTU9iamVjdCB7CiAgICAgcHVibGljOgogICAg
ICAgICBKU1JHQkNvbG9yKEtKUzo6SlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgY29sb3Ip
OwogICAgICAgICB+SlNSR0JDb2xvcigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
ZXZlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMu
Y3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudFRhcmdldE5vZGUuaCIK
LSNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgImtqc19wcm94
eS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2V2ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50
cy5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIEtKUzo6SlNWYWx1ZSogZ2V0Tm9kZUV2ZW50TGlzdGVuZXIoTm9kZSosIGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlKTsKIAotICAgIGNsYXNzIEpTQ2xpcGJvYXJkIDogcHVibGljIEtK
Uzo6RE9NT2JqZWN0IHsKKyAgICBjbGFzcyBKU0NsaXBib2FyZCA6IHB1YmxpYyBET01PYmplY3Qg
ewogICAgIHB1YmxpYzoKICAgICAgICAgSlNDbGlwYm9hcmQoS0pTOjpKU09iamVjdCogcHJvdG90
eXBlLCBDbGlwYm9hcmQqKTsKICAgICAgICAgdmlydHVhbCB+SlNDbGlwYm9hcmQoKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc19odG1sLmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfaHRtbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBIVE1MRWxlbWVudDsKICAgICBjbGFzcyBKU0hUTUxFbGVt
ZW50OwogCi0gICAgY2xhc3MgSW1hZ2VDb25zdHJ1Y3RvckltcCA6IHB1YmxpYyBLSlM6OkRPTU9i
amVjdCB7CisgICAgY2xhc3MgSW1hZ2VDb25zdHJ1Y3RvckltcCA6IHB1YmxpYyBET01PYmplY3Qg
ewogICAgIHB1YmxpYzoKICAgICAgICAgSW1hZ2VDb25zdHJ1Y3RvckltcChLSlM6OkV4ZWNTdGF0
ZSosIERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNw
cAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOCBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0
OiAyIC0qLQogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2Vu
dGluQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChz
Y2hpbW1pQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsMjEgKzYzLDIyIEBACiAjZGVm
aW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKICNlbmRpZiAvLyBpZm5kZWYgV0VC
Q09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgogCit1c2luZyBuYW1lc3BhY2UgS0pTOwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLW5hbWVzcGFjZSBLSlMgeworbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgUGx1Z2luQmFzZSA6IHB1YmxpYyBET01PYmplY3QgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgUGx1Z2luQmFzZShFeGVjU3RhdGUgKmV4ZWMpOworICAgICAgICBQbHVnaW5C
YXNlKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIH5QbHVnaW5CYXNlKCk7CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgdm9pZCByZWZyZXNoKGJvb2wgcmVsb2FkKTsKIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgc3RhdGljIHZvaWQgY2FjaGVQbHVnaW5EYXRhSWZOZWNlc3NhcnkoKTsK
LSAgICAgICAgc3RhdGljIFZlY3RvcjxQbHVnaW5JbmZvKj4gKnBsdWdpbnM7Ci0gICAgICAgIHN0
YXRpYyBWZWN0b3I8TWltZUNsYXNzSW5mbyo+ICptaW1lczsKKyAgICAgICAgc3RhdGljIFZlY3Rv
cjxQbHVnaW5JbmZvKj4qIHBsdWdpbnM7CisgICAgICAgIHN0YXRpYyBWZWN0b3I8TWltZUNsYXNz
SW5mbyo+KiBtaW1lczsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBpbnQgbV9wbHVn
SW5DYWNoZVJlZkNvdW50OwpAQCAtODcsNzMgKzg3LDczIEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgY2xhc3MgUGx1Z2lucyA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFBsdWdpbnMoRXhlY1N0YXRlICpleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykge307Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgUGx1Z2lucyhFeGVj
U3RhdGUqIGV4ZWMpIDogUGx1Z2luQmFzZShleGVjKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CisgICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwg
aW50IHRva2VuKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IExlbmd0aCB9OwogICAgIHByaXZhdGU6Ci0gICAg
ICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogaW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OwogICAgIH07CiAKICAgICBKU1ZhbHVlKiBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwogCiAgICAgY2xhc3MgTWltZVR5cGVzIDogcHVi
bGljIFBsdWdpbkJhc2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0
ZSAqZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMpIHsgfTsKLSAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgICAgICBNaW1lVHlwZXMoRXhlY1N0YXRlKiBleGVjKSA6IFBs
dWdpbkJhc2UoZXhlYykgeyB9OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAg
ICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAg
ICAgICBlbnVtIHsgTGVuZ3RoIH07CiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAgfTsKIAogICAg
IGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFBsdWdpbihFeGVjU3RhdGUgKmV4ZWMsIFBsdWdpbkluZm8gKmluZm8pIDogUGx1Z2luQmFzZShl
eGVjKSwgbV9pbmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3Q7CisgICAgICAgIFBsdWdpbihFeGVjU3RhdGUqIGV4ZWMsIFBsdWdpbkluZm8qIGluZm8p
IDogUGx1Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8pIHsgfQorICAgICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUq
LCBpbnQgdG9rZW4pIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogICAgICAgICBlbnVtIHsgTmFtZSwgRmlsZW5hbWUsIERlc2NyaXB0aW9u
LCBMZW5ndGggfTsKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0
YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogbmFtZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICBQbHVnaW5JbmZvICpt
X2luZm87CisgICAgICAgIFBsdWdpbkluZm8qIG1faW5mbzsKICAgICB9OwogCiAgICAgY2xhc3Mg
TWltZVR5cGUgOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBNaW1l
VHlwZSggRXhlY1N0YXRlICpleGVjLCBNaW1lQ2xhc3NJbmZvICppbmZvICkgOiBQbHVnaW5CYXNl
KGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2Vu
KSBjb25zdDsKKyAgICAgICAgTWltZVR5cGUoRXhlY1N0YXRlKiBleGVjLCBNaW1lQ2xhc3NJbmZv
KiBpbmZvKSA6IFBsdWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IFR5cGUsIFN1ZmZpeGVzLCBEZXNj
cmlwdGlvbiwgRW5hYmxlZFBsdWdpbiB9OwogICAgIHByaXZhdGU6Ci0gICAgICAgIE1pbWVDbGFz
c0luZm8gKm1faW5mbzsKKyAgICAgICAgTWltZUNsYXNzSW5mbyogbV9pbmZvOwogICAgIH07CiAK
LX0gLy8gbmFtZXNwYWNlCit9CiAKICNpbmNsdWRlICJranNfbmF2aWdhdG9yLmx1dC5oIgogCi1u
YW1lc3BhY2UgS0pTIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgQ2xhc3NJbmZvIFBs
dWdpbnM6OmluZm8gPSB7ICJQbHVnaW5BcnJheSIsIDAsICZQbHVnaW5zVGFibGUgfTsKIGNvbnN0
IENsYXNzSW5mbyBNaW1lVHlwZXM6OmluZm8gPSB7ICJNaW1lVHlwZUFycmF5IiwgMCwgJk1pbWVU
eXBlc1RhYmxlIH07CiBjb25zdCBDbGFzc0luZm8gUGx1Z2luOjppbmZvID0geyAiUGx1Z2luIiwg
MCwgJlBsdWdpblRhYmxlIH07CiBjb25zdCBDbGFzc0luZm8gTWltZVR5cGU6OmluZm8gPSB7ICJN
aW1lVHlwZSIsIDAsICZNaW1lVHlwZVRhYmxlIH07CiAKLVZlY3RvcjxQbHVnaW5JbmZvKj4gKktK
Uzo6UGx1Z2luQmFzZTo6cGx1Z2lucyA9IDA7Ci1WZWN0b3I8TWltZUNsYXNzSW5mbyo+ICpLSlM6
OlBsdWdpbkJhc2U6Om1pbWVzID0gMDsKLWludCBLSlM6OlBsdWdpbkJhc2U6Om1fcGx1Z0luQ2Fj
aGVSZWZDb3VudCA9IDA7CitWZWN0b3I8UGx1Z2luSW5mbyo+KiBQbHVnaW5CYXNlOjpwbHVnaW5z
ID0gMDsKK1ZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4qIFBsdWdpbkJhc2U6Om1pbWVzID0gMDsKK2lu
dCBQbHVnaW5CYXNlOjptX3BsdWdJbkNhY2hlUmVmQ291bnQgPSAwOwogCiBjb25zdCBDbGFzc0lu
Zm8gTmF2aWdhdG9yOjppbmZvID0geyAiTmF2aWdhdG9yIiwgMCwgJk5hdmlnYXRvclRhYmxlIH07
CiAvKgpAQCAtMTgxLDcgKzE4MSw3IEBAIE5hdmlnYXRvcjo6TmF2aWdhdG9yKEpTT2JqZWN0KiBw
cm90b3R5cGUKIHsKIH0KIAotYm9vbCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQorYm9vbCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90PE5hdmlnYXRvciwgSlNPYmplY3Q+KGV4
ZWMsICZOYXZpZ2F0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KQEAgLTMw
MCwzMCArMzAwLDMwIEBAIHZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJlbG9hZCkKIEBl
bmQKICovCiAKLUpTVmFsdWUgKlBsdWdpbnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitKU1ZhbHVlKiBQbHVnaW5zOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBBU1NFUlQodG9rZW4gPT0g
TGVuZ3RoKTsKICAgcmV0dXJuIGpzTnVtYmVyKHBsdWdpbnMtPnNpemUoKSk7CiB9CiAKLUpTVmFs
dWUgKlBsdWdpbnM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUqIFBsdWdpbnM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gbmV3IFBsdWdpbihl
eGVjLCBwbHVnaW5zLT5hdChzbG90LmluZGV4KCkpKTsKIH0KIAotSlNWYWx1ZSAqUGx1Z2luczo6
bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlKiBQbHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9y
aWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0g
cHJvcGVydHlOYW1lOwogICAgIFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBs
dWdpbnMtPmVuZCgpOwogICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRy
ID0gcGx1Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgUGx1Z2lu
SW5mbyAqcGwgPSAqaXRyOworICAgICAgICBQbHVnaW5JbmZvKiBwbCA9ICppdHI7CiAgICAgICAg
IGlmIChwbC0+bmFtZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpCiAgICAgICAgICAgICByZXR1cm4g
bmV3IFBsdWdpbihleGVjLCBwbCk7CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1ib29sIFBsdWdpbnM6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBQ
bHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBjb25zdCBIYXNo
RW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJlBsdWdpbnNUYWJsZSwgcHJvcGVydHlO
YW1lKTsKICAgICBpZiAoZW50cnkpIHsKQEAgLTM2MywzMCArMzYzLDMwIEBAIGJvb2wgUGx1Z2lu
czo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGEKIEBlbmQKICovCiAKLUpTVmFsdWUgKk1pbWVU
eXBlczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K0pTVmFsdWUqIE1pbWVUeXBlczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKICAgQVNTRVJUKHRva2VuID09IExlbmd0aCk7CiAgIHJldHVybiBq
c051bWJlcihtaW1lcy0+c2l6ZSgpKTsKIH0KIAotSlNWYWx1ZSAqTWltZVR5cGVzOjppbmRleEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
KiBNaW1lVHlwZXM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG1pbWVzLT5hdChz
bG90LmluZGV4KCkpKTsKIH0KIAotSlNWYWx1ZSAqTWltZVR5cGVzOjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIE1pbWVUeXBl
czo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsK
ICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBtaW1lcy0+ZW5kKCk7
CiAgICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSBtaW1lcy0+
YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyAqbSA9
ICgqaXRyKTsKKyAgICAgICAgTWltZUNsYXNzSW5mbyogbSA9ICgqaXRyKTsKICAgICAgICAgaWYg
KG0tPnR5cGUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQogICAgICAgICAgICAgcmV0dXJuIG5ldyBN
aW1lVHlwZShleGVjLCBtKTsKICAgICB9CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LWJvb2wgTWltZVR5cGVzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgTWlt
ZVR5cGVzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBjb25zdCBIYXNo
RW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJk1pbWVUeXBlc1RhYmxlLCBwcm9wZXJ0
eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewpAQCAtNDI3LDcgKzQyNyw3IEBAIGJvb2wgTWltZVR5
cGVzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1MKIEBlbmQKICovCiAKLUpTVmFsdWUgKlBsdWdp
bjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK0pT
VmFsdWUqIFBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgY2FzZSBOYW1lOgpAQCAtNDQ0
LDE5ICs0NDQsMTkgQEAgSlNWYWx1ZSAqUGx1Z2luOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdAog
ICAgIH0KIH0KIAotSlNWYWx1ZSAqUGx1Z2luOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBQbHVnaW46OmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBQbHVn
aW4gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4gKj4oc2xvdC5zbG90QmFzZSgpKTsKKyAg
ICBQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkp
OwogICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgdGhpc09iai0+bV9pbmZvLT5taW1lcy5h
dChzbG90LmluZGV4KCkpKTsKIH0KIAotSlNWYWx1ZSAqUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIFBsdWdpbjo6
bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
Ci0gICAgUGx1Z2luICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luICo+KHNsb3Quc2xvdEJh
c2UoKSk7CisgICAgUGx1Z2luKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luKj4oc2xvdC5z
bG90QmFzZSgpKTsKICAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVy
dHlOYW1lOwogICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHRoaXNP
YmotPm1faW5mby0+bWltZXMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5mbyo+
OjppdGVyYXRvciBpdHIgPSB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmJlZ2luKCk7IGl0ciAhPSBl
bmQ7IGl0cisrKSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8gKm0gPSAoKml0cik7CisgICAgICAg
IE1pbWVDbGFzc0luZm8qIG0gPSAoKml0cik7CiAgICAgICAgIGlmIChtLT50eXBlID09IGF0b21p
Y1Byb3BlcnR5TmFtZSkKICAgICAgICAgICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbSk7
CiAgICAgfQpAQCAtNDY0LDcgKzQ2NCw3IEBAIEpTVmFsdWUgKlBsdWdpbjo6bmFtZUdldHRlcihF
eGVjU3RhdGUgKmUKIH0KIAogCi1ib29sIFBsdWdpbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIFBsdWdpbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQbHVnaW5UYWJs
ZSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkpIHsKQEAgLTUwNCw3ICs1MDQsNyBAQCBi
b29sIFBsdWdpbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0CiBAZW5kCiAqLwogCi1KU1Zh
bHVlICpNaW1lVHlwZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK0pTVmFsdWUqIE1pbWVUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICBjYXNl
IFR5cGU6CkBAIC01MjcsNyArNTI3LDcgQEAgSlNWYWx1ZSAqTWltZVR5cGU6OmdldFZhbHVlUHJv
cGVydHkoRXhlYwogICAgIH0KIH0KIAotYm9vbCBNaW1lVHlwZTo6Z2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitib29sIE1pbWVUeXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PE1pbWVUeXBlLCBQbHVnaW5CYXNl
PihleGVjLCAmTWltZVR5cGVUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KQEAg
LTU0MCwxMiArNTQwLDExIEBAIEpTVmFsdWUqIHBsdWdpbnNGdW5jdGlvblJlZnJlc2goRXhlY1N0
YXQKIAogSlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCiB7Ci0gIGlmICghdGhpc09iai0+
aW5oZXJpdHMoJktKUzo6TmF2aWdhdG9yOjppbmZvKSkKLSAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwotICBOYXZpZ2F0b3IgKm5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRv
ciAqPih0aGlzT2JqKTsKLSAgLy8gamF2YUVuYWJsZWQoKQotICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBuYXYtPmZyYW1lKCkgPyBuYXYtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwOwotICByZXR1cm4g
anNCb29sZWFuKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFFbmFibGVkKCkpOworICAgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJk5hdmlnYXRvcjo6aW5mbykpCisgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgTmF2aWdhdG9yKiBuYXYgPSBzdGF0aWNf
Y2FzdDxOYXZpZ2F0b3IqPih0aGlzT2JqKTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBuYXYt
PmZyYW1lKCkgPyBuYXYtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwOworICAgIHJldHVybiBqc0Jv
b2xlYW4oc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaAkocmV2aXNpb24g
MzAyMzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KIC8qCi0g
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMjggKzIzLDI4IEBACiAjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgeworCiAgICAgY2xhc3MgRnJhbWU7Ci19CiAKLW5hbWVzcGFjZSBLSlMgewor
ICAgIGNsYXNzIE5hdmlnYXRvciA6IHB1YmxpYyBET01PYmplY3QgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgTmF2aWdhdG9yKEtKUzo6SlNPYmplY3QqIHByb3RvdHlwZSwgRnJhbWUqKTsKKworICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiwgY29u
c3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgS0pTOjpK
U1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZv
IGluZm87CisKKyAgICAgICAgZW51bSB7IEFwcENvZGVOYW1lLCBBcHBOYW1lLCBBcHBWZXJzaW9u
LCBMYW5ndWFnZSwgVXNlckFnZW50LCBQbGF0Zm9ybSwKKyAgICAgICAgICAgICAgIF9QbHVnaW5z
LCBfTWltZVR5cGVzLCBQcm9kdWN0LCBQcm9kdWN0U3ViLCBWZW5kb3IsIFZlbmRvclN1YiwgQ29v
a2llRW5hYmxlZCB9OworCisgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWU7IH0KIAotICBjbGFzcyBOYXZpZ2F0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgcHVi
bGljOgotICAgIE5hdmlnYXRvcihKU09iamVjdCogcHJvdG90eXBlLCBXZWJDb3JlOjpGcmFtZSop
OwotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBlbnVtIHsgQXBwQ29kZU5hbWUsIEFwcE5h
bWUsIEFwcFZlcnNpb24sIExhbmd1YWdlLCBVc2VyQWdlbnQsIFBsYXRmb3JtLAotICAgICAgICAg
ICBfUGx1Z2lucywgX01pbWVUeXBlcywgUHJvZHVjdCwgUHJvZHVjdFN1YiwgVmVuZG9yLCBWZW5k
b3JTdWIsIENvb2tpZUVuYWJsZWQgfTsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lOyB9Ci0gIHByaXZhdGU6Ci0gICAgV2ViQ29yZTo6RnJhbWUgKm1f
ZnJhbWU7Ci0gIH07CisgICAgcHJpdmF0ZToKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAg
fTsKIAotICAvLyBGdW5jdGlvbnMKLSAgSlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVu
YWJsZWQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgS0pTOjpKU1Zh
bHVlKiBuYXZpZ2F0b3JQcm90b0Z1bmNKYXZhRW5hYmxlZChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6
SlNPYmplY3QqLCBjb25zdCBLSlM6Okxpc3QmKTsKIAogfSAvLyBuYW1lc3BhY2UKIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEs
OCBAQCBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyc2VNb2RhCiB7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwOwogCi0gICAgVmVjdG9yPFN0cmluZz4gZmVhdHVyZXMg
PSBmZWF0dXJlc0FyZy5zcGxpdCgnOycpOworICAgIFZlY3RvcjxTdHJpbmc+IGZlYXR1cmVzOwor
ICAgIGZlYXR1cmVzQXJnLnNwbGl0KCc7JywgZmVhdHVyZXMpOwogICAgIFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBmZWF0dXJlcy5lbmQoKTsKICAgICBmb3IgKFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICBTdHJpbmcgcyA9ICppdDsKQEAgLTM1OSwxNiArMzYwLDE2IEBAIHN0
YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEV4ZWNTdGF0ZSogZXgKICAgICBpZiAoZGlhbG9nQXJn
cykKICAgICAgICAgbmV3V2luZG93LT5wdXREaXJlY3QoImRpYWxvZ0FyZ3VtZW50cyIsIGRpYWxv
Z0FyZ3MpOwogCi0gICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkg
fHwgbmV3V2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7Ci0gICAgICAgIFN0cmluZyBj
b21wbGV0ZWRVUkwgPSB1cmwuaXNFbXB0eSgpID8gdXJsIDogYWN0aXZlRnJhbWUtPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHVybCk7CisgICAgaWYgKCFwcm90b2NvbElzKHVybCwgImphdmFzY3Jp
cHQiKSB8fCBuZXdXaW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpIHsKKyAgICAgICAgS1VS
TCBjb21wbGV0ZWRVUkwgPSB1cmwuaXNFbXB0eSgpID8gS1VSTCgiIikgOiBhY3RpdmVGcmFtZS0+
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKTsKICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9
IGFjdGl2ZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIAog
ICAgICAgICBpZiAoY3JlYXRlZCkgewotICAgICAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5j
aGFuZ2VMb2NhdGlvbihLVVJMKGNvbXBsZXRlZFVSTC5kZXByZWNhdGVkU3RyaW5nKCkpLCBhY3Rp
dmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJl
KTsKKyAgICAgICAgICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+Y2hhbmdlTG9jYXRpb24oY29tcGxl
dGVkVVJMLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2Us
IHVzZXJHZXN0dXJlKTsKICAgICAgICAgICAgIGlmIChEb2N1bWVudCogb2xkRG9jID0gb3BlbmVy
RnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgbmV3RnJhbWUtPmRvY3VtZW50KCkt
PnNldEJhc2VVUkwob2xkRG9jLT5iYXNlVVJMKCkpOwogICAgICAgICB9IGVsc2UgaWYgKCF1cmwu
aXNFbXB0eSgpKQotICAgICAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0
aW9uQ2hhbmdlKGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1Jl
ZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CisgICAgICAgICAgICBuZXdGcmFtZS0+bG9h
ZGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29tcGxldGVkVVJMLnN0cmluZygpLCBhY3Rp
dmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJl
KTsKICAgICB9CiAKICAgICByZXR1cm4gbmV3RnJhbWU7CkBAIC03MDQsNyArNzA1LDcgQEAgdm9p
ZCBXaW5kb3c6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogICAgICAgICBpZiAoIXAtPmxv
YWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24oaW1wbCgpLT5mcmFtZSgpKSkKICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIFN0cmluZyBkc3RVcmwgPSBwLT5sb2FkZXIoKS0+Y29tcGxldGVV
UkwodmFsdWUtPnRvU3RyaW5nKGV4ZWMpKS5zdHJpbmcoKTsKLSAgICAgICAgaWYgKCFkc3RVcmwu
c3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgYWxsb3dzQWNjZXNzRnJvbShleGVj
KSkgeworICAgICAgICBpZiAoIXByb3RvY29sSXMoZHN0VXJsLCAiamF2YXNjcmlwdCIpIHx8IGFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpIHsKICAgICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gcC0+
c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAgICAgICAgICAgLy8gV2Ug
d2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0gaWYgdGhpcyBKUyB3YXMgY2FsbGVkIHZpYSBhIHVzZXIg
Z2VzdHVyZQogICAgICAgICAgIGltcGwoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnNjaGVkdWxlTG9j
YXRpb25DaGFuZ2UoZHN0VXJsLCBwLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBmYWxz
ZSwgdXNlckdlc3R1cmUpOwpAQCAtODg4LDcgKzg4OSw3IEBAIGJvb2wgV2luZG93OjphbGxvd3NB
Y2Nlc3NGcm9tKGNvbnN0IEpTR2wKIAogICAgIC8vIEZJWE1FOiB0aGlzIGVycm9yIG1lc3NhZ2Ug
c2hvdWxkIGNvbnRhaW4gbW9yZSBzcGVjaWZpY3Mgb2Ygd2h5IHRoZSBzYW1lIG9yaWdpbiBjaGVj
ayBoYXMgZmFpbGVkLgogICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5zYWZlIEphdmFT
Y3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRo
IFVSTCAlcy4gRG9tYWlucywgcHJvdG9jb2xzIGFuZCBwb3J0cyBtdXN0IG1hdGNoLlxuIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jdW1lbnQtPnVybCgpLnV0ZjgoKS5k
YXRhKCksIG9yaWdpbkRvY3VtZW50LT51cmwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgdGFy
Z2V0RG9jdW1lbnQtPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9yaWdpbkRvY3VtZW50
LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
QEAgLTExMzcsMTAgKzExMzgsMTAgQEAgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jT3BlbihFeGVj
U3RhdGUqIAogCiAgICAgICAgIFN0cmluZyBjb21wbGV0ZWRVUkw7CiAgICAgICAgIGlmICghdXJs
U3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbXBsZXRlZFVSTCA9IGFjdGl2ZUZyYW1l
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOworICAgICAgICAgICAgY29tcGxl
dGVkVVJMID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyku
c3RyaW5nKCk7CiAKICAgICAgICAgY29uc3QgV2luZG93KiB0YXJnZXRlZFdpbmRvdyA9IFdpbmRv
dzo6cmV0cmlldmVXaW5kb3coZnJhbWUpOwotICAgICAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc0Vt
cHR5KCkgJiYgKCFjb21wbGV0ZWRVUkwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkg
fHwgKHRhcmdldGVkV2luZG93ICYmIHRhcmdldGVkV2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4
ZWMpKSkpIHsKKyAgICAgICAgaWYgKCFjb21wbGV0ZWRVUkwuaXNFbXB0eSgpICYmICghcHJvdG9j
b2xJcyhjb21wbGV0ZWRVUkwsICJqYXZhc2NyaXB0IikgfHwgKHRhcmdldGVkV2luZG93ICYmIHRh
cmdldGVkV2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkpIHsKICAgICAgICAgICAgIGJv
b2wgdXNlckdlc3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCk7CiAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRp
b25DaGFuZ2UoY29tcGxldGVkVVJMLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTU3OSw3ICs1NzksNyBAQCBzdGF0aWMgTlNBcnJheSAqa2l0KGNv
bnN0IFZlY3RvcjxJbnRSZWN0CiAgICAgQVNTRVJUKG5hbWUpOwogICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGVsZW1lbnQgPSBbc2VsZiBfZWxlbWVudF07CiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAg
IHJldHVybiBXZWJDb3JlOjpLVVJMKGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHBh
cnNlVVJMKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lKSkuZGVwcmVjYXRlZFN0cmluZygpKSku
Z2V0TlNVUkwoKTsKKyAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
cGFyc2VVUkwoZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWUpKSk7CiB9CiAKIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW1w
b3J0ICJIVE1MRG9jdW1lbnQuaCIKICNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbXBv
cnQgIkhUTUxPYmplY3RFbGVtZW50LmgiCi0jaW1wb3J0ICJLVVJMLmgiCiAjaW1wb3J0ICJSYW5n
ZS5oIgogI2ltcG9ydCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIm1hcmt1cC5oIgpA
QCAtNjMsNyArNjIsNyBAQAogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2NyZWF0ZURvY3Vt
ZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNl
VVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcKIHsKLSAgICBOU1VSTCAqYmFzZVVS
TCA9IFdlYkNvcmU6OktVUkwoW3NlbGYgX2RvY3VtZW50XS0+Y29tcGxldGVVUkwoV2ViQ29yZTo6
cGFyc2VVUkwoYmFzZVVSTFN0cmluZykpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuZ2V0TlNVUkwoKTsK
KyAgICBOU1VSTCAqYmFzZVVSTCA9IFtzZWxmIF9kb2N1bWVudF0tPmNvbXBsZXRlVVJMKFdlYkNv
cmU6OnBhcnNlVVJMKGJhc2VVUkxTdHJpbmcpKTsKICAgICByZXR1cm4gW3NlbGYgY3JlYXRlRG9j
dW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6bWFya3VwU3RyaW5nIGJhc2VVUkw6YmFzZVVS
TF07CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ09N
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
Q09NLnBtCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yQ09NLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksOSArMzA5LDkgQEAgc3ViIEFk
ZEluY2x1ZGVzRm9yVHlwZUluQ1BQSW1wbGVtZW50YXRpbwogICAgIHJldHVybiBpZiAkY29kZUdl
bmVyYXRvci0+SXNOb25Qb2ludGVyVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgJENQUEltcGxlbWVudGF0aW9uV2Vi
Q29yZUluY2x1ZGVzeyJQbGF0Zm9ybVN0cmluZy5oIn0gPSAxOwotICAgICAgICAkQ1BQSW1wbGVt
ZW50YXRpb25XZWJDb3JlSW5jbHVkZXN7IkJTdHJpbmcuaCJ9ID0gMTsKICAgICAgICAgJENQUElt
cGxlbWVudGF0aW9uV2ViQ29yZUluY2x1ZGVzeyJBdG9taWNTdHJpbmcuaCJ9ID0gMTsKKyAgICAg
ICAgJENQUEltcGxlbWVudGF0aW9uV2ViQ29yZUluY2x1ZGVzeyJCU3RyaW5nLmgifSA9IDE7Cisg
ICAgICAgICRDUFBJbXBsZW1lbnRhdGlvbldlYkNvcmVJbmNsdWRlc3siS1VSTC5oIn0gPSAxOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzEx
Niw3IEBAIHN1YiBHZXRQYXJlbnRDbGFzc05hbWUKICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsK
IAogICAgIHJldHVybiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJl
bnQifSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifTsK
LSAgICByZXR1cm4gIktKUzo6RE9NT2JqZWN0IiBpZiBAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEg
MDsKKyAgICByZXR1cm4gIkRPTU9iamVjdCIgaWYgQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDA7
CiAgICAgcmV0dXJuICJKUyIgLiAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGRhdGFOb2Rl
LT5wYXJlbnRzKDApKTsKIH0KIApAQCAtMTE5MCw3ICsxMTkwLDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8JGNsYXNzTmFtZSo+KHNsb3Quc2xvdEJhc2UoKSk7XG4iKTsKICAgICAgICAgaWYgKEluZGV4
R2V0dGVyUmV0dXJuc1N0cmluZ3MoJGltcGxDbGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJQbGF0Zm9ybVN0cmluZy5oIn0gPSAxOworICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siS1VSTC5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIGpzU3RyaW5nT3JOdWxsKHRoaXNPYmotPmltcGwoKS0+aXRlbShzbG90LmluZGV4KCkp
KTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlz
T2JqLT5pbXBsKCkpLT5pdGVtKHNsb3QuaW5kZXgoKSkpO1xuIik7CkBAIC0xMjEzLDExICsxMjEz
LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gS0pTOjpjYWNoZVNWR0RPTU9iamVjdDxKU1NWR1BP
RFR5cGVXcmFwcGVyPCRwb2RUeXBlPiwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBl
PihleGVjLCBvYmosIGNvbnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8SlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9k
VHlwZT4sICRjbGFzc05hbWUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZT4oZXhlYywgb2JqLCBjb250
ZXh0KTtcbiIpOwogICAgICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFt
ZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiBLSlM6OmNhY2hlU1ZHRE9NT2JqZWN0PCRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NO
YW1lLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU+KGV4ZWMsIG9iaiwgY29udGV4dCk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVj
dDwkaW1wbENsYXNzTmFtZSwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlPihleGVj
LCBvYmosIGNvbnRleHQpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gS0pTOjpjYWNoZURPTU9iamVjdDwkaW1wbENsYXNz
TmFtZSwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlPihleGVjLCBvYmopO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2FjaGVET01PYmpl
Y3Q8JGltcGxDbGFzc05hbWUsICRjbGFzc05hbWUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZT4oZXhl
Yywgb2JqKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
Iik7CiAgICAgfQpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAg
IHJldHVybiAianNOdW1iZXIoJHZhbHVlKSIgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZl
VHlwZSgkdHlwZSkgb3IgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSIgb3IgJHR5cGUgZXEgIkRPTVRp
bWVTdGFtcCI7CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkp
IHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0gMTsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siS1VSTC5oIn0gPSAxOwogICAgICAgICBteSAkY29udiA9ICRzaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0TnVsbFN0cmluZ1RvIn07CiAgICAg
ICAgIGlmIChkZWZpbmVkICRjb252KSB7CiAgICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JO
dWxsKCR2YWx1ZSkiIGlmICRjb252IGVxICJOdWxsIjsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0JKHJldmlzaW9uIDMwMjMxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxh
bmRlcnNjYUBtYWMuY29tPiAKICMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBXZWlu
aWcgPHNhbUB3ZWJraXQub3JnPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTM2
LDcgKzUzNiw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICByZXR1cm4gaWYgJGNvZGVH
ZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHR5cGUpIG9yIElzTmF0aXZlT2JqQ1R5cGUoJHR5
cGUpOwogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7Ci0g
ICAgICAgICRpbXBsSW5jbHVkZXN7IlBsYXRmb3JtU3RyaW5nLmgifSA9IDE7CisgICAgICAgICRp
bXBsSW5jbHVkZXN7IktVUkwuaCJ9ID0gMTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRl
eDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVBWE9iamVjdC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZpc2lvbiAzMDIzMSkKKysr
IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlQVhPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwOTksMTkgKzEwOTksMTMgQEAgc3Rh
dGljIEludFJlY3QgYm91bmRpbmdCb3hSZWN0KFJlbmRlck9iagogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV0p
IHsKICAgICAgICAgaWYgKFtzZWxmIGlzQW5jaG9yXSkgewotICAgICAgICAgICAgSFRNTEFuY2hv
ckVsZW1lbnQqIGFuY2hvciA9IFtzZWxmIGFuY2hvckVsZW1lbnRdOwotICAgICAgICAgICAgaWYg
KGFuY2hvcikgewotICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IGFuY2hvci0+
Z2V0QXR0cmlidXRlKGhyZWZBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFzLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBhbmNob3ItPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKHMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gS1VS
TChzKS5nZXROU1VSTCgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChIVE1M
QW5jaG9yRWxlbWVudCogYW5jaG9yID0gW3NlbGYgYW5jaG9yRWxlbWVudF0pIHsKKyAgICAgICAg
ICAgICAgICBOU1VSTCAqaHJlZiA9IGFuY2hvci0+aHJlZigpOworICAgICAgICAgICAgICAgIHJl
dHVybiBocmVmOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1f
cmVuZGVyZXItPmlzSW1hZ2UoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCkgJiYgbV9yZW5kZXJl
ci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsKLSAgICAgICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgc3JjID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG1fcmVuZGVyZXIt
PmVsZW1lbnQoKSktPnNyYygpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGlmICgh
c3JjLmlzTnVsbCgpKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gS1VSTChzcmMpLmdldE5TVVJM
KCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9yZW5kZXJlci0+aXNJbWFnZSgpICYmIG1fcmVuZGVy
ZXItPmVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoaW1nVGFn
KSkgeworICAgICAgICAgICAgTlNVUkwgKnNyYyA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1l
bnQqPihtX3JlbmRlcmVyLT5lbGVtZW50KCkpLT5zcmMoKTsKKyAgICAgICAgICAgIHJldHVybiBz
cmM7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CkBAIC0xNjcyLDcgKzE2
NjYsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0CiAgICAgLy8g
YWRkIG5ldyBhdHRyaWJ1dGVzIGFuZCByZW1vdmUgaXJyZWxldmFudCBpbmhlcml0ZWQgb25lcwog
ICAgIC8vIE5PVEU6IGNvbG9yIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJlY2F1
c2UgLVtOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZTogdmFsdWU6IHJhbmdl
Ol0gZG9lcyBub3QgbWVyZ2UKICAgICAvLyBpZGVudGljYWwgY29sb3JzLiAgV29ya2Fyb3VuZCBp
cyB0byBub3QgcmVwbGFjZSBhbiBleGlzdGluZyBjb2xvciBhdHRyaWJ1dGUgaWYgaXQgbWF0Y2hl
cyB3aGF0IHdlIGFyZSBhZGRpbmcuICBUaGlzIGFsc28gbWVhbnMKLSAgICAvLyB3ZSBjYW4gbm90
IGp1c3QgcHJlLXJlbW92ZSBhbGwgaW5oZXJpdGVkIGF0dHJpYnV0ZXMgb24gdGhlIGFwcGVuZGVk
IHN0cmluZywgc28gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGlycmVsZXZhbnQgb25lcyBpbmRpdmlk
dWFsbHkuCisgICAgLy8gd2UgY2Fubm90IGp1c3QgcHJlLXJlbW92ZSBhbGwgaW5oZXJpdGVkIGF0
dHJpYnV0ZXMgb24gdGhlIGFwcGVuZGVkIHN0cmluZywgc28gd2UgaGF2ZSB0byByZW1vdmUgdGhl
IGlycmVsZXZhbnQgb25lcyBpbmRpdmlkdWFsbHkuCiAKICAgICAvLyByZW1vdmUgaW5oZXJpdGVk
IGF0dGFjaG1lbnQgZnJvbSBwcmlvciBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRSZXBsYWNlZAog
ICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpOU0FjY2Vzc2liaWxpdHlBdHRhY2htZW50
VGV4dEF0dHJpYnV0ZSByYW5nZTphdHRyU3RyaW5nUmFuZ2VdOwpJbmRleDogV2ViQ29yZS9icmlk
Z2UvbWFjL1dlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9tYWMvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdl
YkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTksMTcgKzU5LDE5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQGVu
ZAogCiAvLyBjb252ZXJ0IFVTdHJpbmcgdG8gTlNTdHJpbmcKLXN0YXRpYyBOU1N0cmluZyAqdG9O
U1N0cmluZyhjb25zdCBVU3RyaW5nICZzKQorc3RhdGljIE5TU3RyaW5nICp0b05TU3RyaW5nKGNv
bnN0IFVTdHJpbmcmIHMpCiB7Ci0gICAgaWYgKHMuaXNFbXB0eSgpKSByZXR1cm4gbmlsOwotICAg
IHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6KGNvbnN0IHVuaWNoYXIgKilz
LmRhdGEoKSBsZW5ndGg6cy5zaXplKCldOworICAgIGlmIChzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5pY2hhcio+KHMuZGF0YSgpKSBsZW5ndGg6cy5zaXplKCld
OwogfQogCiAvLyBjb252ZXJ0IFVTdHJpbmcgdG8gTlNVUkwKLXN0YXRpYyBOU1VSTCAqdG9OU1VS
TChjb25zdCBVU3RyaW5nICZzKQorc3RhdGljIE5TVVJMICp0b05TVVJMKGNvbnN0IFVTdHJpbmcm
IHMpCiB7Ci0gICAgaWYgKHMuaXNFbXB0eSgpKSByZXR1cm4gbmlsOwotICAgIHJldHVybiBLVVJM
KERlcHJlY2F0ZWRTdHJpbmcocykpLmdldE5TVVJMKCk7CisgICAgaWYgKHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBLVVJMKHMpOwogfQogCiAvLyBDKysgaW50
ZXJmYWNlIHRvIEtKUyBkZWJ1Z2dlciBjYWxsYmFja3MKQEAgLTEzNyw4ICsxMzksNiBAQCBjbGFz
cyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAKIH07CiAKLQotCiAvLyBXZWJD
b3JlU2NyaXB0RGVidWdnZXIKIC8vCiAvLyBUaGlzIGlzIHRoZSBtYWluIChiZWhpbmQtdGhlLXNj
ZW5lcykgZGVidWdnZXIgY2xhc3MgaW4gV2ViQ29yZS4KQEAgLTE1OSw3ICsxNTksNyBAQCBjbGFz
cyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAtIChXZWJDb3JlU2NyaXB0RGVi
dWdnZXIgKilpbml0V2l0aERlbGVnYXRlOihpZDxXZWJTY3JpcHREZWJ1Z2dlcj4pZGVsZWdhdGUK
IHsKICAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZWxlZ2F0ZSAg
ID0gZGVsZWdhdGU7CisgICAgICAgIF9kZWxlZ2F0ZSAgPSBkZWxlZ2F0ZTsKICAgICAgICAgX2ds
b2JhbE9iaiA9IFtfZGVsZWdhdGUgZ2xvYmFsT2JqZWN0XTsKICAgICAgICAgX2RlYnVnZ2VyICA9
IG5ldyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAoc2VsZiwgW19nbG9iYWxPYmogX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgfQpAQCAtMTg2LDggKzE4Niw2IEBAIGNsYXNzIFdl
YkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKIAogQGVuZAogCi0KLQogQGltcGxlbWVu
dGF0aW9uIFdlYkNvcmVTY3JpcHREZWJ1Z2dlciAoV2ViQ29yZVNjcmlwdERlYnVnZ2VySW50ZXJu
YWwpCiAKIC0gKFdlYkNvcmVTY3JpcHRDYWxsRnJhbWUgKilfZW50ZXJGcmFtZTooRXhlY1N0YXRl
ICopc3RhdGU7CkBAIC0yMDYsOCArMjA0LDYgQEAgY2xhc3MgV2ViQ29yZVNjcmlwdERlYnVnZ2Vy
SW1wIDogcHVibGljIAogCiBAZW5kCiAKLQotCiAvLyBXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lCiAv
LwogLy8gT25lIG9mIHRoZXNlIGlzIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGVhY2ggc3RhY2sgZnJh
bWUuICBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgImdsb2JhbCIKQEAgLTI1NSw4ICsyNTEsNiBA
QCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAKIEBlbmQKIAotCi0K
IEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lCiAKIC0gKHZvaWQpZGVhbGxv
YwpAQCAtMjc2LDcgKzI3MCw2IEBAIGNsYXNzIFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1
YmxpYyAKICAgICByZXR1cm4gX2NhbGxlcjsKIH0KIAotCiAvLyBSZXR1cm5zIGFuIGFycmF5IG9m
IHNjb3BlIG9iamVjdHMgKG1vc3QgbG9jYWwgZmlyc3QpLgogLy8gVGhlIHByb3BlcnRpZXMgb2Yg
ZWFjaCBzY29wZSBvYmplY3QgYXJlIHRoZSB2YXJpYWJsZXMgZm9yIHRoYXQgc2NvcGUuCiAvLyBO
b3RlIHRoYXQgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5IHdpbGwgX2Fsd2F5c18gYmUgdGhl
IGdsb2JhbCBvYmplY3QgKHdpbmRvd1NjcmlwdE9iamVjdCksCkBAIC0zMDEsMTQgKzI5NCwxMyBA
QCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotCiAvLyBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBmb3IgdGhp
cyBmcmFtZSwgaWYgYXZhaWxhYmxlLgogLy8gUmV0dXJucyBuaWwgZm9yIGFub255bW91cyBmdW5j
dGlvbnMgYW5kIGZvciB0aGUgZ2xvYmFsIGZyYW1lLgogCiAtIChOU1N0cmluZyAqKWZ1bmN0aW9u
TmFtZQogewogICAgIGlmIChfc3RhdGUtPnNjb3BlTm9kZSgpKSB7Ci0gICAgICAgIEZ1bmN0aW9u
SW1wICpmdW5jID0gX3N0YXRlLT5mdW5jdGlvbigpOworICAgICAgICBGdW5jdGlvbkltcCogZnVu
YyA9IF9zdGF0ZS0+ZnVuY3Rpb24oKTsKICAgICAgICAgaWYgKGZ1bmMpIHsKICAgICAgICAgICAg
IElkZW50aWZpZXIgZm4gPSBmdW5jLT5mdW5jdGlvbk5hbWUoKTsKICAgICAgICAgICAgIHJldHVy
biB0b05TU3RyaW5nKGZuLnVzdHJpbmcoKSk7CkBAIC0zMTcsNyArMzA5LDYgQEAgY2xhc3MgV2Vi
Q29yZVNjcmlwdERlYnVnZ2VySW1wIDogcHVibGljIAogICAgIHJldHVybiBuaWw7CiB9CiAKLQog
Ly8gUmV0dXJucyB0aGUgcGVuZGluZyBleGNlcHRpb24gZm9yIHRoaXMgZnJhbWUgKG5pbCBpZiBu
b25lKS4KIAogLSAoaWQpZXhjZXB0aW9uCkBAIC0zMjYsNyArMzE3LDYgQEAgY2xhc3MgV2ViQ29y
ZVNjcmlwdERlYnVnZ2VySW1wIDogcHVibGljIAogICAgIHJldHVybiBbc2VsZiBfY29udmVydFZh
bHVlVG9PYmpjVmFsdWU6X3N0YXRlLT5leGNlcHRpb24oKV07CiB9CiAKLQogLy8gRXZhbHVhdGUg
c29tZSBKYXZhU2NyaXB0IGNvZGUgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBmcmFtZS4KIC8vIFRo
ZSBjb2RlIGlzIGV2YWx1YXRlZCBhcyBpZiBieSAiZXZhbCIsIGFuZCB0aGUgcmVzdWx0IGlzIHJl
dHVybmVkLgogLy8gSWYgdGhlcmUgaXMgYW4gKHVuY2F1Z2h0KSBleGNlcHRpb24sIGl0IGlzIHJl
dHVybmVkIGFzIHRob3VnaCBfaXRfIHdlcmUgdGhlIHJlc3VsdC4KSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU0ltYWdlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFs
dWUuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIChDKSAxOTk5
LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNjIsOSArNjAsMTAgQEAgQ2FjaGVkSW1hZ2UqIENTU0ltYWdlVmFsdWU6
OmltYWdlKERvY0xvYQogCiAgICAgICAgIGlmIChsb2FkZXIpCiAgICAgICAgICAgICBtX2ltYWdl
ID0gbG9hZGVyLT5yZXF1ZXN0SW1hZ2UodXJsKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgZmluZCBhIHdheSB0byBtYWtlIHRoZXNl
IGltYWdlcyBzaXQgaW4gdGhlaXIgb3duIG1lbW9yeSBwYXJ0aXRpb24sIHNpbmNlIHRoZXkgYXJl
IHVzZXIgYWdlbnQgaW1hZ2VzLgotICAgICAgICAgICAgbV9pbWFnZSA9IHN0YXRpY19jYXN0PENh
Y2hlZEltYWdlKj4oY2FjaGUoKS0+cmVxdWVzdFJlc291cmNlKDAsIENhY2hlZFJlc291cmNlOjpJ
bWFnZVJlc291cmNlLCBLVVJMKHVybC5kZXByZWNhdGVkU3RyaW5nKCkpLCAwLCAwKSk7CisgICAg
ICAgICAgICBtX2ltYWdlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihjYWNoZSgpLT5yZXF1
ZXN0UmVzb3VyY2UoMCwgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIEtVUkwodXJsKSwg
MCwgMCkpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKG1faW1hZ2UpCiAgICAgICAgICAgICBt
X2ltYWdlLT5yZWYodGhpcyk7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gMzAy
MzEpCisrKyBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2NM
b2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNs
dWRlICJNZWRpYUxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTEsNyArOTAsNyBA
QCB2b2lkIENTU0ltcG9ydFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCgpCiAgICAgQ1NTU3R5bGVT
aGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFwYXJlbnRT
aGVldC0+aHJlZigpLmlzTnVsbCgpKQogICAgICAgICAvLyB1c2UgcGFyZW50IHN0eWxlaGVldCdz
IFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJlZiA9IEtVUkwocGFyZW50U2hlZXQt
PmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCksIG1fc3RySHJlZi5kZXByZWNhdGVkU3RyaW5nKCkp
LnN0cmluZygpOworICAgICAgICBhYnNIcmVmID0gS1VSTChLVVJMKHBhcmVudFNoZWV0LT5ocmVm
KCkpLCBtX3N0ckhyZWYpLnN0cmluZygpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4g
b3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBhIHN0eWxlc2hlZXQKICAgICAvLyBp
biBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRm9udEZhbWlseVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udFZh
bHVlLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1
ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJQYWlyLmgiCkBAIC04MTYsOSArODE1LDgg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgICAgICAgICAg
ICAgIGhvdHNwb3QgPSBJbnRQb2ludChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7CiAgICAgICAgICAg
ICBpZiAoc3RyaWN0IHx8IGNvb3Jkcy5zaXplKCkgPT0gMCkgewogICAgICAgICAgICAgICAgIGlm
ICghdXJpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3
IENTU0N1cnNvckltYWdlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL
VVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdXJpLmRlcHJl
Y2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBob3RzcG90LCBzdHlsZUVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKG5ldyBDU1NDdXJzb3JJbWFnZVZhbHVlKEtVUkwoc3R5bGVFbGVtZW50LT5iYXNlVVJMKCks
IHVyaSkuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICBob3RzcG90LCBzdHlsZUVs
ZW1lbnQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoKHN0cmljdCAmJiAhdmFsdWUpIHx8ICh2YWx1ZSAmJiAhKHZhbHVlLT51bml0ID09IFZhbHVl
OjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykpKQpAQCAtODc2LDkgKzg3NCw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICAgICAgICAgIC8v
ICMjIyBhbGxvdyBzdHJpbmcgaW4gbm9uIHN0cmljdCBtb2RlPwogICAgICAgICAgICAgU3RyaW5n
IHVyaSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKSk7CiAgICAgICAgICAgICBp
ZiAoIXVyaS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBD
U1NJbWFnZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICBLVVJMKHN0eWxlRWxlbWVudC0+YmFz
ZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdXJpLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5n
KCksCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCk7CisgICAgICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZShLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVS
TCgpLCB1cmkpLnN0cmluZygpLCBzdHlsZUVsZW1lbnQpOwogICAgICAgICAgICAgICAgIHZhbHVl
TGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDgzLDkgKzEwNzks
OCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgICAgICAg
ICB3aGlsZSAoKHZhbCA9IHZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewogICAgICAgICAgICAgICAg
IGlmICh2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5n
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1VSTChzdHlsZUVsZW1l
bnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KSkuc3RyaW5nKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpOworICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLCB2YWx1
ZSkuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VSSSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyc2Vk
VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgzNCw4ICsxODI5LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVudChpbnQgcHJvcElkLAogICAgICAgICBpZiAodmFs
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAvLyB1
cmwKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2YWwtPnN0
cmluZykpOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZSgKLSAg
ICAgICAgICAgICAgICBLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJp
bmcoKSwgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKS5zdHJpbmcoKSwgc3R5bGVFbGVtZW50KTsK
KyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUoS1VSTChzdHlsZUVs
ZW1lbnQtPmJhc2VVUkwoKSwgdmFsdWUpLnN0cmluZygpLCBzdHlsZUVsZW1lbnQpOwogICAgICAg
ICB9IGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24pIHsKICAgICAgICAgICAg
IC8vIGF0dHIoWCkgfCBjb3VudGVyKFggWyxZXSkgfCBjb3VudGVycyhYLCBZLCBbLFpdKQogICAg
ICAgICAgICAgVmFsdWVMaXN0ICphcmdzID0gdmFsLT5mdW5jdGlvbi0+YXJnczsKQEAgLTE5MDEs
OCArMTg5NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRJbWFnZShSZWYKICAg
ICBpZiAodmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VUkkpIHsKICAgICAgICAgU3RyaW5nIHVyaSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2YWx1ZUxp
c3QtPmN1cnJlbnQoKS0+c3RyaW5nKSk7CiAgICAgICAgIGlmICghdXJpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUoS1VSTChzdHlsZUVsZW1lbnQtPmJh
c2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHVyaS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmlu
ZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUVsZW1l
bnQpOworICAgICAgICAgICAgdmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZShLVVJMKHN0eWxlRWxl
bWVudC0+YmFzZVVSTCgpLCB1cmkpLnN0cmluZygpLCBzdHlsZUVsZW1lbnQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjczMSw3ICsyNzI0LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogICAgICAgICBSZWZQdHI8Q1NT
Rm9udEZhY2VTcmNWYWx1ZT4gcGFyc2VkVmFsdWU7CiAgICAgICAgIGlmICh2YWwtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkgJiYgIWV4cGVjdENvbW1hKSB7CiAgICAgICAgICAg
ICBTdHJpbmcgdmFsdWUgPSBwYXJzZVVSTChkb21TdHJpbmcodmFsLT5zdHJpbmcpKTsKLSAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoS1VSTChzdHlsZUVs
ZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHZhbHVlLmRlcHJlY2F0ZWRTdHJp
bmcoKSkuc3RyaW5nKCksIGZhbHNlKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENT
U0ZvbnRGYWNlU3JjVmFsdWUoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKSwgdmFsdWUpLnN0
cmluZygpLCBmYWxzZSk7CiAgICAgICAgICAgICB1cmlWYWx1ZSA9IHBhcnNlZFZhbHVlOwogICAg
ICAgICAgICAgYWxsb3dGb3JtYXQgPSB0cnVlOwogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0
cnVlOwpAQCAtMzI4Niw4ICszMjc5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1h
Z2UoaW50IHBybwogICAgIGlmICh1cmkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgY29udGV4dC5jb21taXRJbWFnZShuZXcgQ1NTSW1hZ2VWYWx1ZShLVVJMKHN0
eWxlRWxlbWVudC0+YmFzZVVSTCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdXJpLmRlcHJlY2F0ZWRT
dHJpbmcoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVFbGVtZW50KSk7CisgICAgY29udGV4dC5jb21t
aXRJbWFnZShuZXcgQ1NTSW1hZ2VWYWx1ZShLVVJMKHN0eWxlRWxlbWVudC0+YmFzZVVSTCgpLCB1
cmkpLnN0cmluZygpLCBzdHlsZUVsZW1lbnQpKTsKICAgICB3aGlsZSAoKHZhbCA9IHZhbHVlTGlz
dC0+bmV4dCgpKSkgewogICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmIHZhbGlk
VW5pdCh2YWwsIEZJbnRlZ2VyfEZOb25OZWd8RlBlcmNlbnQsIHRydWUpKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWwpOwpAQCAtMzkyNSw3ICszOTE3LDcgQEAgRGVwcmVj
YXRlZFN0cmluZyBkZXByZWNhdGVkU3RyaW5nKGNvbnN0IAogI2RlZmluZSB5eWNvbnN0IGNvbnN0
CiB0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwogdHlwZWRlZiB1bnNpZ25lZCBZWV9DSEFSOwot
Ly8gdGhpcyBsaW5lIG1ha2VzIHN1cmUgd2UgdHJlYXQgYWxsIFVuaWNvZGUgY2hhcnMgY29ycmVj
dGx5LgorLy8gVGhlIGZvbGxvd2luZyBsaW5lIG1ha2VzIHN1cmUgd2UgdHJlYXQgbm9uLUxhdGlu
LTEgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlY3RseS4KICNkZWZpbmUgWVlfU0NfVE9fVUkoYykg
KGMgPiAweGZmID8gMHhmZiA6IGMpCiAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAogICAg
ICAgICB5eXRleHQgPSB5eV9icDsgXApAQCAtMzk0MCwxMiArMzkzMiwxMiBAQCB0eXBlZGVmIHVu
c2lnbmVkIFlZX0NIQVI7CiAjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9C
VUZGRVIgKyBzdGF0ZSArIDEpCiAjZGVmaW5lIHl5dGVybWluYXRlKCkgeXlUb2sgPSBFTkRfVE9L
RU47IHJldHVybiB5eVRvawogI2RlZmluZSBZWV9GQVRBTF9FUlJPUihhKQotLy8gVGhlIGxpbmUg
YmVsb3cgaXMgbmVlZGVkIHRvIGJ1aWxkIHRoZSB0b2tlbml6ZXIgd2l0aCBjb25kaXRvbiBzdGFj
ay4KKy8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBuZWVkZWQgdG8gYnVpbGQgdGhlIHRva2VuaXpl
ciB3aXRoIGEgY29uZGl0aW9uIHN0YWNrLgogLy8gVGhlIG1hY3JvIGlzIHVzZWQgaW4gdGhlIHRv
a2VuaXplciBncmFtbWFyIHdpdGggbGluZXMgY29udGFpbmluZwogLy8gQkVHSU4obWVkaWFxdWVy
aWVzKSBhbmQgQkVHSU4oaW5pdGlhbCkuIHl5X3N0YXJ0IGFjdHMgYXMgaW5kZXggdG8KIC8vIHRv
a2VuaXplciB0cmFuc2l0aW9uIHRhYmxlLCBhbmQgJ21lZGlhcXVlcmllcycgYW5kICdpbml0aWFs
JyBhcmUKIC8vIG9mZnNldCBtdWx0aXBsaWVycyB0aGF0IHNwZWNpZnkgd2hpY2ggdHJhbnNpdGlv
bnMgYXJlIGFjdGl2ZQotLy8gaW4gdGhlIHRva2VuaXplciBkdXJpbmcgaW4gZWFjaCBjb25kaXRp
b24gKHRva2VuaXplciBzdGF0ZSkKKy8vIGluIHRoZSB0b2tlbml6ZXIgZHVyaW5nIGluIGVhY2gg
Y29uZGl0aW9uICh0b2tlbml6ZXIgc3RhdGUpLgogI2RlZmluZSBCRUdJTiB5eV9zdGFydCA9IDEg
KyAyICoKIAogI2luY2x1ZGUgInRva2VuaXplci5jcHAiCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIENTU1N0eWxlU2hlZXQqIENT
U1N0eWxlU2VsZWN0b3I6Om1fdmlld1MKIENTU1N0eWxlU2hlZXQgKkNTU1N0eWxlU2VsZWN0b3I6
Om1fc3ZnU2hlZXQgPSAwOwogI2VuZGlmCiAKLXN0YXRpYyBDU1NTdHlsZVNlbGVjdG9yOjpFbmNv
ZGVkdXJsICpjdXJyZW50RW5jb2RlZFVSTCA9IDA7CitzdGF0aWMgQ1NTU3R5bGVTZWxlY3Rvcjo6
RW5jb2RlZFVSTCogY3VycmVudEVuY29kZWRVUkwgPSAwOwogc3RhdGljIFBzZXVkb1N0YXRlIHBz
ZXVkb1N0YXRlOwogCiBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgc2NyZWVuRXZh
bCgpCkBAIC0zMTksMTcgKzMxOSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEVuY29k
ZWRVUkwoY29uCiB7CiAgICAgS1VSTCB1ID0gdXJsOwogCi0gICAgdS5zZXRRdWVyeShEZXByZWNh
dGVkU3RyaW5nOjpudWxsKTsKLSAgICB1LnNldFJlZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsK
LSAgICBtX2VuY29kZWRVUkwuZmlsZSA9IHUuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIGludCBw
b3MgPSBtX2VuY29kZWRVUkwuZmlsZS5maW5kUmV2KCcvJyk7CisgICAgdS5zZXRRdWVyeShTdHJp
bmcoKSk7CisgICAgdS5zZXRSZWYoU3RyaW5nKCkpOworICAgIG1fZW5jb2RlZFVSTC5maWxlID0g
dS5zdHJpbmcoKTsKKyAgICBpbnQgcG9zID0gbV9lbmNvZGVkVVJMLmZpbGUucmV2ZXJzZUZpbmQo
Jy8nKTsKICAgICBtX2VuY29kZWRVUkwucGF0aCA9IG1fZW5jb2RlZFVSTC5maWxlOwogICAgIGlm
IChwb3MgPiAwKSB7CiAgICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoLnRydW5jYXRlKHBvcyk7Ci0g
ICAgICAgIG1fZW5jb2RlZFVSTC5wYXRoICs9ICcvJzsKKyAgICAgICAgbV9lbmNvZGVkVVJMLnBh
dGguYXBwZW5kKCcvJyk7CiAgICAgfQotICAgIHUuc2V0UGF0aChEZXByZWNhdGVkU3RyaW5nOjpu
dWxsKTsKLSAgICBtX2VuY29kZWRVUkwuaG9zdCA9IHUuZGVwcmVjYXRlZFN0cmluZygpOworICAg
IHUuc2V0UGF0aChTdHJpbmcoKSk7CisgICAgbV9lbmNvZGVkVVJMLnByZWZpeCA9IHUuc3RyaW5n
KCk7CiB9CiAKIENTU1N0eWxlU2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKQEAgLTcwMywx
MSArNzAzLDExIEBAIHN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3RhdGUoRWxlbWVudCAqZSwKICAg
ICBEZXByZWNhdGVkQ29uc3RTdHJpbmcgY3UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNh
dGVkQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOwogICAgIERlcHJlY2F0ZWRTdHJpbmcgdSA9
IGN1LnN0cmluZygpOwogICAgIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAnLycpCi0g
ICAgICAgIHUucHJlcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+aG9zdCk7CisgICAgICAgIHUucHJl
cGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4oY3VycmVudEVuY29k
ZWRVUkwtPnByZWZpeC5jaGFyYWN0ZXJzKCkpLCBjdXJyZW50RW5jb2RlZFVSTC0+cHJlZml4Lmxl
bmd0aCgpKTsKICAgICBlbHNlIGlmIChsZW5ndGggJiYgY2hhcmFjdGVyc1swXSA9PSAnIycpCi0g
ICAgICAgIHUucHJlcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+ZmlsZSk7CisgICAgICAgIHUucHJl
cGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4oY3VycmVudEVuY29k
ZWRVUkwtPmZpbGUuY2hhcmFjdGVycygpKSwgY3VycmVudEVuY29kZWRVUkwtPmZpbGUubGVuZ3Ro
KCkpOwogICAgIGVsc2UKLSAgICAgICAgdS5wcmVwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRo
KTsKKyAgICAgICAgdS5wcmVwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENo
YXIqPihjdXJyZW50RW5jb2RlZFVSTC0+cGF0aC5jaGFyYWN0ZXJzKCkpLCBjdXJyZW50RW5jb2Rl
ZFVSTC0+cGF0aC5sZW5ndGgoKSk7CiAgICAgY2xlYW5wYXRoKHUpOwogICAgIHBzZXVkb1N0YXRl
ID0gaGlzdG9yeUNvbnRhaW5zKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih1LnVuaWNv
ZGUoKSksIHUubGVuZ3RoKCkpCiAgICAgICAgID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKIC8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ1NTIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEw
MCwxMCArOTgsMTAgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKIAogICAgICAgICBib29sIHN0cmlj
dFBhcnNpbmc7CiAKLSAgICAgICAgc3RydWN0IEVuY29kZWR1cmwgewotICAgICAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyBob3N0OyAvL2Fsc28gY29udGFpbnMgcHJvdG9jb2wKLSAgICAgICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgcGF0aDsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZmls
ZTsKKyAgICAgICAgc3RydWN0IEVuY29kZWRVUkwgeworICAgICAgICAgICAgU3RyaW5nIHByZWZp
eDsgLy8gcHJvdG9jb2wsIGhvc3QsIGV0Yy4KKyAgICAgICAgICAgIFN0cmluZyBwYXRoOworICAg
ICAgICAgICAgU3RyaW5nIGZpbGU7CiAgICAgICAgIH0gbV9lbmNvZGVkVVJMOwogCiAgICAgICAg
IHZvaWQgc2V0RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpOwpJbmRleDogV2ViQ29yZS9jc3Mv
TWVkaWFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCShy
ZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Nyw3ICsxODcsOCBAQCB2b2lkIE1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KGNvbnN0
IFN0cmluCiAgICAgTWVkaWFMaXN0IHRlbXBNZWRpYUxpc3Q7CiAgICAgQ1NTUGFyc2VyIHAodHJ1
ZSk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gdmFsdWUuc3BsaXQoJywnKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBsaXN0OworICAgIHZhbHVlLnNwbGl0KCcsJywgbGlzdCk7CiAgICAgVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7CiAgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBTdHJpbmcgbWVkaXVtID0gKCppdCkuc3RyaXBXaGl0ZVNwYWNl
KCk7CkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL1N0eWxlQmFzZS5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9jc3MvU3R5
bGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAvKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENv
cHlyaWdodCAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgICAgIDE5OTkgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAgICAg
ICAgICAgICAyMDAxIEFuZHJlYXMgU2NobGFwYmFjaCAoc2NobHBiY2hAaWFtLnVuaWJlLmNoKQog
ICogICAgICAgICAgICAgICAyMDAxLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ1LDI3ICs0MywyMCBAQCBTdHlsZVNoZWV0KiBT
dHlsZUJhc2U6OnN0eWxlc2hlZXQoKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHlsZVNoZWV0
Kj4oYik7CiB9CiAKLVN0cmluZyBTdHlsZUJhc2U6OmJhc2VVUkwoKQorS1VSTCBTdHlsZUJhc2U6
OmJhc2VVUkwoKSBjb25zdAogewotICAgIC8vIHRyeSB0byBmaW5kIHRoZSBzdHlsZSBzaGVldC4g
SWYgZm91bmQgbG9vayBmb3IgaXRzIHVybC4KLSAgICAvLyBJZiBpdCBoYXMgbm9uZSwgbG9vayBm
b3IgdGhlIHBhcmVudHNoZWV0LCBvciB0aGUgcGFyZW50Tm9kZSBhbmQKLSAgICAvLyB0cnkgdG8g
ZmluZCBvdXQgYWJvdXQgdGhlaXIgdXJsCi0KLSAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxl
c2hlZXQoKTsKKyAgICAvLyBUcnkgdG8gZmluZCB0aGUgc3R5bGUgc2hlZXQuIElmIGZvdW5kIGxv
b2sgZm9yIGl0cyBVUkwuCisgICAgLy8gSWYgaXQgaGFzIG5vbmUsIGdldCB0aGUgVVJMIGZyb20g
dGhlIHBhcmVudCBzaGVldCBvciB0aGUgcGFyZW50IG5vZGUuCiAKKyAgICBTdHlsZVNoZWV0KiBz
aGVldCA9IGNvbnN0X2Nhc3Q8U3R5bGVCYXNlKj4odGhpcyktPnN0eWxlc2hlZXQoKTsKICAgICBp
ZiAoIXNoZWV0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAgICAgICAgcmV0dXJuIEtV
UkwoKTsKICAgICBpZiAoIXNoZWV0LT5ocmVmKCkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBz
aGVldC0+aHJlZigpOwotCi0gICAgLy8gZmluZCBwYXJlbnQKKyAgICAgICAgcmV0dXJuIEtVUkwo
c2hlZXQtPmhyZWYoKSk7CiAgICAgaWYgKHNoZWV0LT5wYXJlbnQoKSkgCiAgICAgICAgIHJldHVy
biBzaGVldC0+cGFyZW50KCktPmJhc2VVUkwoKTsKLQogICAgIGlmICghc2hlZXQtPm93bmVyTm9k
ZSgpKSAKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCisgICAgICAgIHJldHVybiBLVVJMKCk7
CiAgICAgcmV0dXJuIHNoZWV0LT5vd25lck5vZGUoKS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpOwog
fQogCkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9TdHlsZUJhc2UuaAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZUJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIENTUyBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21pYWwuY29tKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zMSw2ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIFN0cmluZzsKICAgICBjbGFzcyBTdHlsZVNoZWV0OworICAgIGNsYXNzIEtVUkw7CiAKICAg
ICAvLyBhIHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0IGFsbCBoYXZlKQog
ICAgIGNsYXNzIFN0eWxlQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlQmFzZT4gewpAQCAt
NDcsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0UGFyZW50
KFN0eWxlQmFzZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CiAKICAgICAgICAgLy8g
cmV0dXJucyB0aGUgdXJsIG9mIHRoZSBzdHlsZSBzaGVldCB0aGlzIG9iamVjdCBiZWxvbmdzIHRv
Ci0gICAgICAgIFN0cmluZyBiYXNlVVJMKCk7CisgICAgICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0
OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDcgQEAgRG9j
dW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgWE1MSHR0cFJlcXVlc3Q6OmRldGFjaFJlcXVlc3RzKHRo
aXMpOwogICAgIHsKICAgICAgICAgS0pTOjpKU0xvY2sgbG9jazsKLSAgICAgICAgS0pTOjpTY3Jp
cHRJbnRlcnByZXRlcjo6Zm9yZ2V0QWxsRE9NTm9kZXNGb3JEb2N1bWVudCh0aGlzKTsKKyAgICAg
ICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldEFsbERPTU5vZGVzRm9yRG9jdW1lbnQodGhpcyk7
CiAgICAgfQogCiAgICAgaWYgKG1fZG9jQ2hhbmdlZCAmJiBjaGFuZ2VkRG9jdW1lbnRzKQpAQCAt
ODI4LDE5ICs4MjgsMTkgQEAgdm9pZCBEb2N1bWVudDo6c2V0WE1MU3RhbmRhbG9uZShib29sIHN0
YQogICAgIG1feG1sU3RhbmRhbG9uZSA9IHN0YW5kYWxvbmU7CiB9CiAKLVN0cmluZyBEb2N1bWVu
dDo6ZG9jdW1lbnRVUkkoKSBjb25zdAorS1VSTCBEb2N1bWVudDo6ZG9jdW1lbnRVUkkoKSBjb25z
dAogewogICAgIHJldHVybiBtX2Jhc2VVUkw7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnNldERvY3Vt
ZW50VVJJKGNvbnN0IFN0cmluZyAmdXJpKQordm9pZCBEb2N1bWVudDo6c2V0RG9jdW1lbnRVUkko
Y29uc3QgU3RyaW5nJiB1cmkpCiB7Ci0gICAgbV9iYXNlVVJMID0gdXJpLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKKyAgICBtX2Jhc2VVUkwgPSBLVVJMKHVyaSk7CiB9CiAKLVN0cmluZyBEb2N1bWVudDo6
YmFzZVVSSSgpIGNvbnN0CitLVVJMIERvY3VtZW50OjpiYXNlVVJJKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZG9jdW1lbnRVUkkoKTsKKyAgICByZXR1cm4gbV9iYXNlVVJMOwogfQogCiBFbGVtZW50
KiBEb2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0CkBAIC0xMzIz
LDEwICsxMzIzLDEwIEBAIHZvaWQgRG9jdW1lbnQ6Om9wZW4oKQogewogICAgIC8vIFRoaXMgaXMg
d29yayB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBkbyBpbiBjbGVhcigpLCBidXQgd2UgY2FuJ3Qg
aGF2ZSBpdAogICAgIC8vIGhhcHBlbiB3aGVuIGltcGxpY2l0T3BlbigpIGlzIGNhbGxlZCB1bmxl
c3Mgd2UgcmVvcmdhbml6ZSBGcmFtZSBjb2RlLgotICAgIGlmIChEb2N1bWVudCAqcGFyZW50ID0g
cGFyZW50RG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV91cmwuaXNFbXB0eSgpIHx8IG1fdXJs
ID09ICJhYm91dDpibGFuayIpCisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1
bWVudCgpKSB7CisgICAgICAgIGlmIChtX3VybC5pc0VtcHR5KCkgfHwgbV91cmwgPT0gYmxhbmtV
UkwoKSkKICAgICAgICAgICAgIHNldFVSTChwYXJlbnQtPmJhc2VVUkwoKSk7Ci0gICAgICAgIGlm
IChtX2Jhc2VVUkwuaXNFbXB0eSgpIHx8IG1fYmFzZVVSTCA9PSAiYWJvdXQ6YmxhbmsiKQorICAg
ICAgICBpZiAobV9iYXNlVVJMLmlzRW1wdHkoKSB8fCBtX2Jhc2VVUkwgPT0gYmxhbmtVUkwoKSkK
ICAgICAgICAgICAgIHNldEJhc2VVUkwocGFyZW50LT5iYXNlVVJMKCkpOwogICAgIH0KIApAQCAt
MTYxNiwyMSArMTYxNiwyMSBAQCB2b2lkIERvY3VtZW50OjpjbGVhcigpCiAgICAgbV93aW5kb3dF
dmVudExpc3RlbmVycy5jbGVhcigpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRVUkwoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyYgdXJsKQordm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IEtVUkwm
IHVybCkKIHsKICAgICBpZiAodXJsID09IG1fdXJsKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X3VybCA9IHVybDsKICAgICBpZiAobV9zdHlsZVNlbGVjdG9yKQotICAgICAgICBtX3N0eWxlU2Vs
ZWN0b3ItPnNldEVuY29kZWRVUkwobV91cmwpOworICAgICAgICBtX3N0eWxlU2VsZWN0b3ItPnNl
dEVuY29kZWRVUkwodXJsKTsKIAogICAgIG1faXNBbGxvd2VkVG9Mb2FkTG9jYWxSZXNvdXJjZXMg
PSBzaG91bGRCZUFsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpOwogIH0KICAKIGJvb2wgRG9j
dW1lbnQ6OnNob3VsZEJlQWxsb3dlZFRvTG9hZExvY2FsUmVzb3VyY2VzKCkgY29uc3QKIHsKLSAg
ICBpZiAoRnJhbWVMb2FkZXI6OnNob3VsZFRyZWF0VVJMQXNMb2NhbChtX3VybCkpCisgICAgaWYg
KEZyYW1lTG9hZGVyOjpzaG91bGRUcmVhdFVSTEFzTG9jYWwobV91cmwuc3RyaW5nKCkpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CkBA
IC0xNjQxLDE3ICsxNjQxLDE3IEBAIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEJlQWxsb3dlZFRvTG9h
ZExvY2EKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAobV91cmwgPT0gImFib3V0OmJsYW5rIiAmJiBmcmFtZS0+bG9hZGVyKCktPm9wZW5l
cigpICYmIGZyYW1lLT5sb2FkZXIoKS0+b3BlbmVyKCktPmRvY3VtZW50KCktPmlzQWxsb3dlZFRv
TG9hZExvY2FsUmVzb3VyY2VzKCkpCisgICAgaWYgKG1fdXJsID09IGJsYW5rVVJMKCkgJiYgZnJh
bWUtPmxvYWRlcigpLT5vcGVuZXIoKSAmJiBmcmFtZS0+bG9hZGVyKCktPm9wZW5lcigpLT5kb2N1
bWVudCgpLT5pc0FsbG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKICAgICByZXR1cm4gZG9jdW1lbnRMb2FkZXItPnN1YnN0aXR1dGVEYXRhKCku
aXNWYWxpZCgpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRCYXNlVVJMKGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcmIGJhc2VVUkwpIAordm9pZCBEb2N1bWVudDo6c2V0QmFzZVVSTChjb25zdCBLVVJM
JiBiYXNlVVJMKSAKIHsgCi0gICAgbV9iYXNlVVJMID0gYmFzZVVSTDsgCisgICAgbV9iYXNlVVJM
ID0gYmFzZVVSTDsKICAgICBpZiAobV9lbGVtU2hlZXQpCi0gICAgICAgIG1fZWxlbVNoZWV0LT5z
ZXRIcmVmKG1fYmFzZVVSTCk7CisgICAgICAgIG1fZWxlbVNoZWV0LT5zZXRIcmVmKGJhc2VVUkwu
c3RyaW5nKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0
cmluZyAmdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hl
ZXQqIHNoZWV0KQpAQCAtMTY4NywxNCArMTY4NywxNCBAQCBTdHJpbmcgRG9jdW1lbnQ6OnVzZXJT
dHlsZVNoZWV0KCkgY29uc3QKIENTU1N0eWxlU2hlZXQqIERvY3VtZW50OjplbGVtZW50U2hlZXQo
KQogewogICAgIGlmICghbV9lbGVtU2hlZXQpCi0gICAgICAgIG1fZWxlbVNoZWV0ID0gbmV3IENT
U1N0eWxlU2hlZXQodGhpcywgYmFzZVVSTCgpKTsKKyAgICAgICAgbV9lbGVtU2hlZXQgPSBuZXcg
Q1NTU3R5bGVTaGVldCh0aGlzLCBiYXNlVVJMKCkuc3RyaW5nKCkpOwogICAgIHJldHVybiBtX2Vs
ZW1TaGVldC5nZXQoKTsKIH0KIAogQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6Om1hcHBlZEVsZW1l
bnRTaGVldCgpCiB7CiAgICAgaWYgKCFtX21hcHBlZEVsZW1lbnRTaGVldCkKLSAgICAgICAgbV9t
YXBwZWRFbGVtZW50U2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCBiYXNlVVJMKCkpOwor
ICAgICAgICBtX21hcHBlZEVsZW1lbnRTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIGJh
c2VVUkwoKS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIG1fbWFwcGVkRWxlbWVudFNoZWV0LmdldCgp
OwogfQogCkBAIC0xODQ3LDcgKzE4NDcsNyBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzSHR0cEVx
dWl2KGNvbnN0IFN0CiAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHVybCA9IGNvbXBsZXRlVVJMKHVybCk7CisgICAgICAgICAg
ICAgICAgdXJsID0gY29tcGxldGVVUkwodXJsKS5zdHJpbmcoKTsKICAgICAgICAgICAgIGZyYW1l
LT5sb2FkZXIoKS0+c2NoZWR1bGVIVFRQUmVkaXJlY3Rpb24oZGVsYXksIHVybCk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAic2V0LWNvb2tpZSIp
KSB7CkBAIC0yMTgwLDExICsyMTgwLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxl
Y3RvcigpCiAKICAgICAgICAgICAgICAgICBpZiAodGl0bGUgIT0gbV9wcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0KQogICAgICAgICAgICAgICAgICAgICBzaGVldCA9IDA7Ci0KLSNpZiBFTkFCTEUoU1ZH
KQotICAgICAgICAgICAgICAgIGlmICghbi0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICAgICAg
ICAgICAgICB0aXRsZSA9IHRpdGxlLmRlcHJlY2F0ZWRTdHJpbmcoKS5yZXBsYWNlKCcmJywgIiYm
Iik7Ci0jZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNjA3LDcgKzI2MDIs
NyBAQCBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tpZSgpIGNvbnN0CiAKIHZvaWQgRG9jdW1lbnQ6OnNl
dENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHNldENvb2tpZXModGhpcywgdXJs
KCksIHBvbGljeUJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5nKCksIHZhbHVlKTsKKyAgICBzZXRD
b29raWVzKHRoaXMsIHVybCgpLCBwb2xpY3lCYXNlVVJMKCksIHZhbHVlKTsKIH0KIAogU3RyaW5n
IERvY3VtZW50OjpyZWZlcnJlcigpIGNvbnN0CkBAIC0yNzg1LDI3ICsyNzgwLDE4IEBAIFVDaGFy
IERvY3VtZW50OjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm8KICAgICByZXR1cm4gbV9kZWNvZGVy
LT5lbmNvZGluZygpLmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKTsKIH0KIAotRGVwcmVjYXRl
ZFN0cmluZyBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdXJs
KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHRyZWF0cyBudWxsIFVSTHMgdGhlIHNhbWUgYXMgZW1w
dHkgVVJMcywgdW5saWtlIHRoZSBTdHJpbmcgZnVuY3Rpb24gYmVsb3cuCi0KLSAgICAvLyBJZiBi
b3RoIHRoZSBVUkwgYW5kIGJhc2UgVVJMIGFyZSBlbXB0eSwgbGlrZSB0aGV5IGFyZSBmb3IgZG9j
dW1lbnRzCi0gICAgLy8gY3JlYXRlZCB1c2luZyBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9j
dW1lbnQsIGp1c3QgcmV0dXJuIHRoZSBwYXNzZWQgaW4gVVJMLgotICAgIC8vIChXZSBkbyB0aGlz
IGJlY2F1c2UgdXJsKCkgcmV0dXJucyAiYWJvdXQ6YmxhbmsiIGZvciBlbXB0eSBVUkxzLgotICAg
IGlmIChtX3VybC5pc0VtcHR5KCkgJiYgbV9iYXNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHVybDsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEtVUkwoYmFzZVVS
TCgpLCB1cmwpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICByZXR1cm4gS1VSTChiYXNlVVJMKCks
IHVybCwgbV9kZWNvZGVyLT5lbmNvZGluZygpKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpCitLVVJMIERvY3Vt
ZW50Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBhbHdheXMgcmV0dXJucyBudWxsIHdoZW4gcGFzc2VkIGEgbnVsbCBVUkwsIHVubGlrZSB0aGUg
RGVwcmVjYXRlZFN0cmluZyBmdW5jdGlvbiBhYm92ZS4KLSAgICAvLyBDb2RlIHJlbGllcyBvbiB0
aGlzIGJlaGF2aW9yLCBuYW1lbHkgdGhlIGhyZWYgcHJvcGVydHkgb2YgPGE+IGFuZCB0aGUgZGF0
YSBwcm9wZXJ0eSBvZiA8b2JqZWN0Pi4KKyAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVsbCBVUkwg
d2hlbiBwYXNzZWQgYSBudWxsIHN0cmluZy4KKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNoYW5n
ZSB0aGUgS1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/CiAgICAgaWYgKHVy
bC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHVybDsKLSAgICByZXR1cm4gY29tcGxldGVVUkwo
dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgS1VS
TCBiYXNlID0gbV9iYXNlVVJMOworICAgIGlmIChiYXNlLmlzRW1wdHkoKSkKKyAgICAgICAgYmFz
ZSA9IG1fdXJsOworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gS1VSTChiYXNl
LCB1cmwpOworICAgIHJldHVybiBLVVJMKGJhc2UsIHVybCwgbV9kZWNvZGVyLT5lbmNvZGluZygp
KTsKIH0KIAogYm9vbCBEb2N1bWVudDo6aW5QYWdlQ2FjaGUoKQpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lv
biAzMDIzMSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkhUTUxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtMjE4LDEwICsyMTksMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0WE1MVmVyc2lvbihjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgdm9pZCBzZXRYTUxTdGFuZGFsb25lKGJvb2wsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFN0
cmluZyBkb2N1bWVudFVSSSgpIGNvbnN0OworICAgIEtVUkwgZG9jdW1lbnRVUkkoKSBjb25zdDsK
ICAgICB2b2lkIHNldERvY3VtZW50VVJJKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBT
dHJpbmcgYmFzZVVSSSgpIGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJJKCkgY29uc3Q7
CiAKICAgICBQYXNzUmVmUHRyPE5vZGU+IGFkb3B0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IHNvdXJj
ZSwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0zNzEsMTcgKzM3MiwxNiBAQCBwdWJsaWM6CiAKICAg
ICBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiBtX3dlbGxGb3JtZWQ7IH0KIAotICAg
IERlcHJlY2F0ZWRTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmwuaXNFbXB0eSgpID8g
ImFib3V0OmJsYW5rIiA6IG1fdXJsOyB9Ci0gICAgdm9pZCBzZXRVUkwoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYgdXJsKTsKKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3Vy
bC5pc0VtcHR5KCkgPyBibGFua1VSTCgpIDogbV91cmw7IH0KKyAgICB2b2lkIHNldFVSTChjb25z
dCBLVVJMJik7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGJhc2VVUkwoKSBjb25zdCB7IHJldHVy
biBtX2Jhc2VVUkwuaXNFbXB0eSgpID8gdXJsKCkgOiBtX2Jhc2VVUkw7IH0KLSAgICB2b2lkIHNl
dEJhc2VVUkwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgYmFzZVVSTCk7CisgICAgY29uc3QgS1VS
TCYgYmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVVSTC5pc0VtcHR5KCkgPyB1cmwoKSA6
IG1fYmFzZVVSTDsgfQorICAgIHZvaWQgc2V0QmFzZVVSTChjb25zdCBLVVJMJik7CiAKLSAgICBT
dHJpbmcgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdldDsgfQorICAgIGNv
bnN0IFN0cmluZyYgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdldDsgfQog
ICAgIHZvaWQgc2V0QmFzZVRhcmdldChjb25zdCBTdHJpbmcmIGJhc2VUYXJnZXQpIHsgbV9iYXNl
VGFyZ2V0ID0gYmFzZVRhcmdldDsgfQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBjb21wbGV0ZVVS
TChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAgIFN0cmluZyBjb21wbGV0ZVVSTChjb25z
dCBTdHJpbmcmKTsKKyAgICBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpOwogCiAgICAg
Ly8gZnJvbSBjYWNoZWRPYmplY3RDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5bGVT
aGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBDYWNo
ZWRDU1NTdHlsZVNoZWV0Kik7CkBAIC01NzAsOCArNTcwLDggQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nIGxhc3RNb2RpZmllZCgpIGNvbnN0OwogCi0gICAgU3RyaW5nIHBvbGljeUJhc2VVUkwoKSBj
b25zdCB7IHJldHVybiBtX3BvbGljeUJhc2VVUkw7IH0KLSAgICB2b2lkIHNldFBvbGljeUJhc2VV
UkwoY29uc3QgU3RyaW5nJiBzKSB7IG1fcG9saWN5QmFzZVVSTCA9IHM7IH0KKyAgICBjb25zdCBL
VVJMJiBwb2xpY3lCYXNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3lCYXNlVVJMOyB9Cisg
ICAgdm9pZCBzZXRQb2xpY3lCYXNlVVJMKGNvbnN0IEtVUkwmIHVybCkgeyBtX3BvbGljeUJhc2VV
UkwgPSB1cmw7IH0KICAgICAKICAgICAvLyBUaGUgZm9sbG93aW5nIGltcGxlbWVudHMgdGhlIHJ1
bGUgZnJvbSBIVE1MIDQgZm9yIHdoYXQgdmFsaWQgbmFtZXMgYXJlLgogICAgIC8vIFRvIGdldCB0
aGlzIHJpZ2h0IGZvciBhbGwgdGhlIFhNTCBjYXNlcywgd2UgcHJvYmFibHkgaGF2ZSB0byBpbXBy
b3ZlIHRoaXMgb3IgbW92ZSBpdApAQCAtNzAwLDggKzcwMCw4IEBAIHByaXZhdGU6CiAgICAgRG9j
TG9hZGVyKiBtX2RvY0xvYWRlcjsKICAgICBUb2tlbml6ZXIqIG1fdG9rZW5pemVyOwogICAgIGJv
b2wgbV93ZWxsRm9ybWVkOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgbV91cmw7Ci0gICAgRGVwcmVj
YXRlZFN0cmluZyBtX2Jhc2VVUkw7CisgICAgS1VSTCBtX3VybDsKKyAgICBLVVJMIG1fYmFzZVVS
TDsKICAgICBTdHJpbmcgbV9iYXNlVGFyZ2V0OwogCiAgICAgUmVmUHRyPERvY3VtZW50VHlwZT4g
bV9kb2NUeXBlOwpAQCAtODEzLDcgKzgxMyw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPEF0b21pY1N0cmluZ0ltcGwqLCBIVE1MTWFwRWxlbWVudCo+IEltYWdlTWFwc0J5TmFtZTsK
ICAgICBJbWFnZU1hcHNCeU5hbWUgbV9pbWFnZU1hcHNCeU5hbWU7CiAKLSAgICBTdHJpbmcgbV9w
b2xpY3lCYXNlVVJMOworICAgIEtVUkwgbV9wb2xpY3lCYXNlVVJMOwogCiAgICAgSGFzaFNldDxO
b2RlKj4gbV9kaXNjb25uZWN0ZWROb2Rlc1dpdGhFdmVudExpc3RlbmVyczsKIApJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudFR5cGUuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50VHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoqCi0gKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSwxOSArMjksMzAgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1Eb2N1bWVudFR5cGU6OkRvY3VtZW50VHlwZShET01JbXBsZW1lbnRhdGlvbiAqaSwg
RG9jdW1lbnQgKmRvYywgY29uc3QgU3RyaW5nICZuLCBjb25zdCBTdHJpbmcgJnAsIGNvbnN0IFN0
cmluZyAmcykKLSAgICA6IE5vZGUoZG9jKSwgbV9pbXBsZW1lbnRhdGlvbihpKSwgbV9uYW1lKG4p
LCBtX3B1YmxpY0lkKHApLCBtX3N5c3RlbUlkKHMpCitEb2N1bWVudFR5cGU6OkRvY3VtZW50VHlw
ZShET01JbXBsZW1lbnRhdGlvbiogaSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcm
IG4sIGNvbnN0IFN0cmluZyYgcCwgY29uc3QgU3RyaW5nJiBzKQorICAgIDogTm9kZShkb2N1bWVu
dCkKKyAgICAsIG1faW1wbGVtZW50YXRpb24oaSkKKyAgICAsIG1fbmFtZShuKQorICAgICwgbV9w
dWJsaWNJZChwKQorICAgICwgbV9zeXN0ZW1JZChzKQogewogfQogCi1Eb2N1bWVudFR5cGU6OkRv
Y3VtZW50VHlwZShEb2N1bWVudCAqZG9jLCBjb25zdCBTdHJpbmcgJm4sIGNvbnN0IFN0cmluZyAm
cCwgY29uc3QgU3RyaW5nICZzKQotICAgIDogTm9kZShkb2MpLCBtX25hbWUobiksIG1fcHVibGlj
SWQocCksIG1fc3lzdGVtSWQocykKK0RvY3VtZW50VHlwZTo6RG9jdW1lbnRUeXBlKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBuLCBjb25zdCBTdHJpbmcmIHAsIGNvbnN0IFN0cmlu
ZyYgcykKKyAgICA6IE5vZGUoZG9jdW1lbnQpCisgICAgLCBtX25hbWUobikKKyAgICAsIG1fcHVi
bGljSWQocCkKKyAgICAsIG1fc3lzdGVtSWQocykKIHsKIH0KIAotRG9jdW1lbnRUeXBlOjpEb2N1
bWVudFR5cGUoRG9jdW1lbnQgKmRvYywgY29uc3QgRG9jdW1lbnRUeXBlICZ0KQotICAgIDogTm9k
ZShkb2MpLCBtX2ltcGxlbWVudGF0aW9uKHQubV9pbXBsZW1lbnRhdGlvbikKLSAgICAsIG1fbmFt
ZSh0Lm1fbmFtZSksIG1fcHVibGljSWQodC5tX3B1YmxpY0lkKSwgbV9zeXN0ZW1JZCh0Lm1fc3lz
dGVtSWQpLCBtX3N1YnNldCh0Lm1fc3Vic2V0KQorRG9jdW1lbnRUeXBlOjpEb2N1bWVudFR5cGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBEb2N1bWVudFR5cGUgJnQpCisgICAgOiBOb2RlKGRv
Y3VtZW50KQorICAgICwgbV9pbXBsZW1lbnRhdGlvbih0Lm1faW1wbGVtZW50YXRpb24pCisgICAg
LCBtX25hbWUodC5tX25hbWUpCisgICAgLCBtX3B1YmxpY0lkKHQubV9wdWJsaWNJZCkKKyAgICAs
IG1fc3lzdGVtSWQodC5tX3N5c3RlbUlkKQorICAgICwgbV9zdWJzZXQodC5tX3N1YnNldCkKIHsK
IH0KIApAQCAtNzQsOSArODMsOSBAQCBTdHJpbmcgRG9jdW1lbnRUeXBlOjp0b1N0cmluZygpIGNv
bnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RyaW5nIERvY3VtZW50VHlwZTo6YmFzZVVS
SSgpIGNvbnN0CitLVVJMIERvY3VtZW50VHlwZTo6YmFzZVVSSSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFN0cmluZygpOworICAgIHJldHVybiBLVVJMKCk7CiB9CiAKIFN0cmluZyBEb2N1bWVudFR5
cGU6Om5vZGVOYW1lKCkgY29uc3QKQEAgLTkxLDcgKzEwMCw4IEBAIE5vZGU6Ok5vZGVUeXBlIERv
Y3VtZW50VHlwZTo6bm9kZVR5cGUoKSAKIAogUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudFR5cGU6
OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewotICAgIC8vIFRoZSBET00gTGV2ZWwgMiBzcGVj
aWZpY2F0aW9uIHNheXMgY2xvbmluZyBEb2N1bWVudFR5cGUgbm9kZXMgaXMgImltcGxlbWVudGF0
aW9uIGRlcGVuZGVudCIgc28gZm9yIG5vdyB3ZSBkbyBub3Qgc3VwcG9ydCBpdC4KKyAgICAvLyBU
aGUgRE9NIExldmVsIDIgc3BlY2lmaWNhdGlvbiBzYXlzIGNsb25pbmcgRG9jdW1lbnRUeXBlIG5v
ZGVzIGlzICJpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQiLgorICAgIC8vIEZvciBub3csIHdlIGRv
IG5vdCBzdXBwb3J0IGl0LgogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9E
b2N1bWVudFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuaAko
cmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHN5c3RlbUlkKCkgY29u
c3QgeyByZXR1cm4gbV9zeXN0ZW1JZDsgfQogICAgIFN0cmluZyBpbnRlcm5hbFN1YnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3Vic2V0OyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBiYXNlVVJJKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBLVVJMIGJhc2VVUkkoKSBjb25zdDsKIAogICAgIC8vIE90aGVy
IG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICBET01JbXBsZW1lbnRhdGlvbiAqaW1wbGVt
ZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ltcGxlbWVudGF0aW9uLmdldCgpOyB9CkluZGV4
OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNtaXRoIChjYXRm
aXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIktV
UkwuaCIKICNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTU2MiwxOCArNTYxLDIxIEBAIHZvaWQgRWxlbWVudDo6c2V0
UHJlZml4KGNvbnN0IEF0b21pY1N0cmkKICAgICBtX3RhZ05hbWUuc2V0UHJlZml4KF9wcmVmaXgp
OwogfQogCi1TdHJpbmcgRWxlbWVudDo6YmFzZVVSSSgpIGNvbnN0CitLVVJMIEVsZW1lbnQ6OmJh
c2VVUkkoKSBjb25zdAogewotICAgIEtVUkwgeG1sYmFzZShnZXRBdHRyaWJ1dGUoYmFzZUF0dHIp
LmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0KLSAgICBpZiAoIXhtbGJhc2UucHJvdG9jb2woKS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiB4bWxiYXNlLnN0cmluZygpOworICAgIEtVUkwgYmFzZShn
ZXRBdHRyaWJ1dGUoYmFzZUF0dHIpKTsKKyAgICBpZiAoIWJhc2UucHJvdG9jb2woKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBiYXNlOwogCiAgICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9k
ZSgpOwotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIHJldHVybiBLVVJMKHBhcmVudC0+YmFzZVVS
SSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgeG1sYmFzZS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmlu
ZygpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gYmFzZTsKKworICAgIEtVUkwg
cGFyZW50QmFzZSA9IHBhcmVudC0+YmFzZVVSSSgpOworICAgIGlmIChwYXJlbnRCYXNlLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gYmFzZTsKIAotICAgIHJldHVybiB4bWxiYXNlLnN0cmluZygp
OworICAgIHJldHVybiBLVVJMKHBhcmVudEJhc2UsIGJhc2Uuc3RyaW5nKCkpOwogfQogCiBOb2Rl
KiBFbGVtZW50OjppbnNlcnRBZGphY2VudEVsZW1lbnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgTm9k
ZSogbmV3Q2hpbGQsIGludCYgZXhjZXB0aW9uKQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gMzAyMzEpCisr
KyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcg
Jl9wcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLm5hbWVzcGFjZVVSSSgp
OyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBiYXNlVVJJKCkgY29uc3Q7CisgICAgdmlydHVhbCBL
VVJMIGJhc2VVUkkoKSBjb25zdDsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJv
bSAgcGFyZW50IGNsYXNzZXMKICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7
CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9O
b2RlLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQyLDcgKzQy
LDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCkBA
IC0xNDQsNyArMTQzLDcgQEAgdm9pZCBOb2RlOjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jKQog
CiAgICAgewogICAgICAgICBLSlM6OkpTTG9jayBsb2NrOwotICAgICAgICBLSlM6OlNjcmlwdElu
dGVycHJldGVyOjp1cGRhdGVET01Ob2RlRG9jdW1lbnQodGhpcywgbV9kb2N1bWVudC5nZXQoKSwg
ZG9jKTsKKyAgICAgICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnVwZGF0ZURPTU5vZGVEb2N1bWVudCh0
aGlzLCBtX2RvY3VtZW50LmdldCgpLCBkb2MpOwogICAgIH0gICAgCiAgICAgbV9kb2N1bWVudCA9
IGRvYzsKIApAQCAtMTI2NiwxOCArMTI2NSwxNCBAQCBib29sIE5vZGU6Omhhc0F0dHJpYnV0ZXMo
KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTmFtZWRBdHRyTWFwICpOb2RlOjphdHRy
aWJ1dGVzKCkgY29uc3QKK05hbWVkQXR0ck1hcCogTm9kZTo6YXR0cmlidXRlcygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0cmluZyBOb2RlOjpiYXNlVVJJKCkgY29uc3QKK0tVUkwg
Tm9kZTo6YmFzZVVSSSgpIGNvbnN0CiB7Ci0gICAgTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgp
OwotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIHJldHVybiBwYXJlbnQtPmJhc2VVUkkoKTsKLQot
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gcGFyZW50Tm9kZSgpID8gcGFyZW50Tm9k
ZSgpLT5iYXNlVVJJKCkgOiBLVVJMKCk7CiB9CiAKIGJvb2wgTm9kZTo6aXNFcXVhbE5vZGUoTm9k
ZSAqb3RoZXIpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvZG9tL05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBjbGFzcyBFdmVudDsKIGNsYXNzIEV2
ZW50TGlzdGVuZXI7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNz
IEtVUkw7CiBjbGFzcyBOYW1lZEF0dHJNYXA7CiBjbGFzcyBOb2RlTGlzdDsKIGNsYXNzIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDsKQEAgLTEwNiw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5hbWVkQXR0ck1hcCog
YXR0cmlidXRlcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJpbmcgYmFzZVVSSSgpIGNvbnN0
OworICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJJKCkgY29uc3Q7CiAKICAgICAvLyBUaGVzZSBzaG91
bGQgYWxsIGFjdHVhbGx5IHJldHVybiBhIG5vZGUsIGJ1dCB0aGlzIGlzIG9ubHkgaW1wb3J0YW50
IGZvciBsYW5ndWFnZSBiaW5kaW5ncywKICAgICAvLyB3aGljaCB3aWxsIGFscmVhZHkga25vdyBh
bmQgaG9sZCBhIHJlZiBvbiB0aGUgcmlnaHQgbm9kZSB0byByZXR1cm4uIFJldHVybmluZyBib29s
IGFsbG93cwpJbmRleDogV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShyZXZpc2lv
biAzMDIzMSkKKysrIFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsOCArMSw2IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAy
MDAwIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDYgKzE3LDcg
QEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwor
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgi
CiAKQEAgLTE1Niw3ICsxNTUsNyBAQCBib29sIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tT
dHlsZVNoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlz
KTsKICNpZiBFTkFCTEUoWFNMVCkKICAgICAgICAgICAgICAgICAgICAgaWYgKG1faXNYU0wpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+ZG9jTG9h
ZGVyKCktPnJlcXVlc3RYU0xTdHlsZVNoZWV0KGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5k
b2NMb2FkZXIoKS0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
aHJlZikuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAg
ICAgICAgICAgICAgICAgewpAQCAtMTY0LDcgKzE2Myw3IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpjaGVja1N0eWxlU2gKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdENT
U1N0eWxlU2hlZXQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZiksIGNoYXJzZXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCktPmRvY0xvYWRl
cigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKS5z
dHJpbmcoKSwgY2hhcnNldCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fY2FjaGVkU2hlZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hl
ZFNoZWV0LT5yZWYodGhpcyk7CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDYgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgUm9iIEJ1
aXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOCw2ICsxNyw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAog
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlN0eWxlRWxlbWVudC5oIgogCkBAIC01NiwxMyArNTYsMTMgQEAgdm9pZCBT
dHlsZUVsZW1lbnQ6OnByb2Nlc3MoRWxlbWVudCogZSkKICAgICBpZiAoIWUgfHwgIWUtPmluRG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHRleHQgPSAiIjsKKyAgICBW
ZWN0b3I8VUNoYXI+IHRleHQ7CiAKICAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7
IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQogICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05P
REUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpCi0gICAgICAgICAgICB0
ZXh0ICs9IGMtPm5vZGVWYWx1ZSgpOworICAgICAgICAgICAgYXBwZW5kKHRleHQsIGMtPm5vZGVW
YWx1ZSgpKTsKIAotICAgIGNyZWF0ZVNoZWV0KGUsIHRleHQpOworICAgIGNyZWF0ZVNoZWV0KGUs
IFN0cmluZzo6YWRvcHQodGV4dCkpOwogfQogCiB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hl
ZXQoRWxlbWVudCogZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNzQsOCArNzQsOSBAQCB2b2lk
IFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAgICAgICAgIG1fc2hlZXQgPSAw
OwogICAgIH0KIAotICAgIFN0cmluZyB0eXBlVmFsdWUgPSBlLT5pc0hUTUxFbGVtZW50KCkgPyB0
eXBlKCkuZGVwcmVjYXRlZFN0cmluZygpLmxvd2VyKCkgOiB0eXBlKCk7Ci0gICAgaWYgKHR5cGVW
YWx1ZS5pc0VtcHR5KCkgfHwgdHlwZVZhbHVlID09ICJ0ZXh0L2NzcyIpIHsgLy8gVHlwZSBtdXN0
IGJlIGVtcHR5IG9yIENTUworICAgIC8vIElmIHR5cGUgaXMgZW1wdHkgb3IgQ1NTLCB0aGlzIGlz
IGEgQ1NTIHN0eWxlIHNoZWV0LgorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IHRoaXMt
PnR5cGUoKTsKKyAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgKGUtPmlzSFRNTEVsZW1lbnQoKSA/
IGVxdWFsSWdub3JpbmdDYXNlKHR5cGUsICJ0ZXh0L2NzcyIpIDogKHR5cGUgPT0gInRleHQvY3Nz
IikpKSB7CiAgICAgICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhTGlzdCA9IG5ldyBNZWRpYUxp
c3QoKENTU1N0eWxlU2hlZXQqKTAsIG1lZGlhKCksIGUtPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAg
ICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVuRXZhbCgic2NyZWVuIiwgdHJ1ZSk7CiAgICAg
ICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgcHJpbnRFdmFsKCJwcmludCIsIHRydWUpOwpJbmRleDog
V2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2Vu
aXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MCw3ICs4NTAsNyBAQCB2b2lkIFhNTFRva2Vu
aXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dE5v
ZGUoKSB8fCBjaGlsZC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpCiAg
ICAgICAgICAgICAgICAgICAgIHNjcmlwdENvZGUgKz0gc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0
YSo+KGNoaWxkKS0+ZGF0YSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV92aWV3LT5m
cmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChtX2RvYy0+dXJsKCksIG1fc2NyaXB0U3Rh
cnRMaW5lIC0gMSwgc2NyaXB0Q29kZSk7CisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxv
YWRlcigpLT5leGVjdXRlU2NyaXB0KG1fZG9jLT51cmwoKS5zdHJpbmcoKSwgbV9zY3JpcHRTdGFy
dExpbmUgLSAxLCBzY3JpcHRDb2RlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9y
ZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CkBAIC0xMjc5LDcgKzEyNzksNyBAQCB2b2lkIFhNTFRv
a2VuaXplcjo6ZW5kKCkKIHsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBpZiAobV9zYXdYU0xUcmFu
c2Zvcm0pIHsKLSAgICAgICAgbV9kb2MtPnNldFRyYW5zZm9ybVNvdXJjZSh4bWxEb2NQdHJGb3JT
dHJpbmcobV9kb2MtPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtLCBt
X2RvYy0+dXJsKCkpKTsKKyAgICAgICAgbV9kb2MtPnNldFRyYW5zZm9ybVNvdXJjZSh4bWxEb2NQ
dHJGb3JTdHJpbmcobV9kb2MtPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNm
b3JtLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCkpKTsKICAgICAgICAgCiAgICAgICAgIG1fZG9jLT5z
ZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUgZG9jIHRoaW5rIGl0J3MgZG9uZSwgc28gaXQg
d2lsbCBhcHBseSB4c2wgc2hlZXRzLgogICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3Rv
cigpOwpAQCAtMTQyOCw3ICsxNDI4LDcgQEAgYm9vbCBYTUxUb2tlbml6ZXI6OmlzV2FpdGluZ0Zv
clNjcmlwdHMoKQogfQogCiAjaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4bWxEb2NQdHJGb3JTdHJp
bmcoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJiB1cmwpCit2b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9hZGVyKiBk
b2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAg
ICBpZiAoc291cmNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDQ3LDcgKzE0
NDcsNyBAQCB2b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9hZGVyKiBkb2NMCiAgICAgCiAg
ICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IHhtbFJlYWRNZW1vcnkocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oc291cmNlLmNoYXJhY3RlcnMoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc291cmNlLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwuYXNjaWkoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwubGF0aW4xKCkuZGF0YSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPTUhpZ2hCeXRlID09IDB4RkYg
PyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWFNMVF9QQVJTRV9PUFRJT05TKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvZG9t
L1hNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5o
CShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDggKzEsNiBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBE
T00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwg
V2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2gg
QVNBCiAgKgpAQCAtMTcwLDcgKzE2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9Owog
CiAjaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9hZGVyKiwg
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHVybCk7Cit2b2lk
KiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgdXJsKTsKIHZvaWQgc2V0TG9hZGVyRm9yTGliWE1MQ2FsbGJhY2tzKERvY0xv
YWRlciopOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysr
IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
Ci0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCkBAIC04Niwx
MSArODUsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3ZhbHVlOwogfTsKIAotc3RhdGljIGlu
bGluZSB2b2lkIGFwcGVuZFN0cmluZyhWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmlu
ZyYgc3RyKQotewotICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0
aCgpKTsKLX0KLSAgICAKIHN0YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxV
Q2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyKQogewogICAgIGNvbnN0IFVDaGFyKiB1
Y2hhcnMgPSBhdHRyLmNoYXJhY3RlcnMoKTsKQEAgLTEwNiwxNyArMTAwLDE3IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjwKICAgICAgICAgc3dpdGNoIChjKSB7CiAg
ICAgICAgICAgICBjYXNlICcmJzoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVjaGFy
cyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwotICAgICAgICAgICAgICAg
IGFwcGVuZFN0cmluZyhyZXN1bHQsIGFtcEVudGl0eSk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KHJlc3VsdCwgYW1wRW50aXR5KTsKICAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkg
KyAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnPCc6CiAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgaSAtIGxh
c3RDb3BpZWRGcm9tKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBsdEVu
dGl0eSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbHRFbnRpdHkpOwogICAgICAg
ICAgICAgICAgIGxhc3RDb3BpZWRGcm9tID0gaSArIDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlICciJzoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVj
aGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwotICAgICAgICAgICAg
ICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHF1b3RFbnRpdHkpOworICAgICAgICAgICAgICAgIGFw
cGVuZChyZXN1bHQsIHF1b3RFbnRpdHkpOwogICAgICAgICAgICAgICAgIGxhc3RDb3BpZWRGcm9t
ID0gaSArIDE7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjYsOSArMTYwLDkgQEAgc3RhdGljIHZv
aWQgYXBwZW5kRXNjYXBlZENvbnRlbnQoVmVjdG9yPAogICAgICAgICBpZiAoKGMgPT0gJyYnKSB8
IChjID09ICc8JykpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodWNoYXJzICsgbGFzdENv
cGllZEZyb20sIGkgLSBsYXN0Q29waWVkRnJvbSk7CiAgICAgICAgICAgICBpZiAoYyA9PSAnJicp
Ci0gICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgYW1wRW50aXR5KTsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBhbXBFbnRpdHkpOwogICAgICAgICAgICAgZWxzZSAK
LSAgICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBsdEVudGl0eSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbHRFbnRpdHkpOwogICAgICAgICAgICAgbGFzdENvcGll
ZEZyb20gPSBpICsgMTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4MSwyNCArMTc1LDI1IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmREZXByZWNhdGVkU3RyaW4KICAgICByZXN1bHQuYXBwZW5k
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHIudW5pY29kZSgpKSwgc3RyLmxlbmd0
aCgpKTsKIH0gICAgCiAgICAgCi1zdGF0aWMgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVW
YWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIFN0cmluZyB1cmxTdHJpbmcpCitzdGF0aWMgdm9p
ZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewogICAgIFVDaGFyIHF1b3RlQ2hhciA9ICdcIic7Ci0g
ICAgaWYgKHVybFN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0
OiIsIGZhbHNlKSkgeworICAgIFN0cmluZyBzdHJpcHBlZFVSTFN0cmluZyA9IHVybFN0cmluZy5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICBpZiAocHJvdG9jb2xJcyhzdHJpcHBlZFVSTFN0cmluZywg
ImphdmFzY3JpcHQiKSkgewogICAgICAgICAvLyBtaW5pbWFsIGVzY2FwaW5nIGZvciBqYXZhc2Ny
aXB0IHVybHMKLSAgICAgICAgaWYgKHVybFN0cmluZy5jb250YWlucygnXCInKSkgewotICAgICAg
ICAgICAgaWYgKHVybFN0cmluZy5jb250YWlucygnXCcnKSkKLSAgICAgICAgICAgICAgICB1cmxT
dHJpbmcucmVwbGFjZSgnXCInLCAiJnF1b3Q7Iik7CisgICAgICAgIGlmIChzdHJpcHBlZFVSTFN0
cmluZy5jb250YWlucygnIicpKSB7CisgICAgICAgICAgICBpZiAoc3RyaXBwZWRVUkxTdHJpbmcu
Y29udGFpbnMoJ1wnJykpCisgICAgICAgICAgICAgICAgc3RyaXBwZWRVUkxTdHJpbmcucmVwbGFj
ZSgnXCInLCAiJnF1b3Q7Iik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcXVv
dGVDaGFyID0gJ1wnJzsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hh
cik7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHVybFN0cmluZyk7CisgICAgICAgIGFw
cGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3RyaW5nKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChx
dW90ZUNoYXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUUgdGhpcyBk
b2VzIG5vdCBmdWxseSBtYXRjaCBvdGhlciBicm93c2Vycy4gRmlyZWZveCBlc2NhcGVzIHNwYWNl
cyBhbmQgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMg
bm90IGZ1bGx5IG1hdGNoIG90aGVyIGJyb3dzZXJzLiBGaXJlZm94IGVzY2FwZXMgc3BhY2VzIGFu
ZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMuCiAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIp
OwogICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgdXJsU3RyaW5nKTsKICAgICByZXN1
bHQuYXBwZW5kKHF1b3RlQ2hhcik7ICAgIApAQCAtMzMxLDEwICszMjYsMTAgQEAgc3RhdGljIHZv
aWQgYXBwZW5kTmFtZXNwYWNlKFZlY3RvcjxVQ2hhcgogICAgICAgICBuYW1lc3BhY2VzLnNldChw
cmUsIG5zLmltcGwoKSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgeG1sbnMoInhtbG5z
Iik7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nKHJl
c3VsdCwgeG1sbnMpOworICAgICAgICBhcHBlbmQocmVzdWx0LCB4bWxucyk7CiAgICAgICAgIGlm
ICghcHJlZml4LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnOicpOwot
ICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgcHJlZml4KTsKKyAgICAgICAgICAgIGFw
cGVuZChyZXN1bHQsIHByZWZpeCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQuYXBwZW5k
KCc9Jyk7CkBAIC0zNzIsMjkgKzM2NywyOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdGFydE1hcmt1
cChWZWN0b3I8VUNoCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0
YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihub2RlKS0+dG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSktPnRvU3Ry
aW5nKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRf
Tk9ERTogewogICAgICAgICAgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhlIGNvbW1lbnQgYmVsb3cg
KGFuZCB0aGVyZWZvcmUgdGhpcyBjb2RlKSBpcyB3cm9uZyBub3cKICAgICAgICAgICAgIC8vIERv
Y3VtZW50cyBkbyBub3Qgbm9ybWFsbHkgY29udGFpbiBhIGRvY1R5cGUgYXMgYSBjaGlsZCBub2Rl
LCBmb3JjZSBpdCB0byBwcmludCBoZXJlIGluc3RlYWQuCiAgICAgICAgICAgICBjb25zdCBEb2N1
bWVudFR5cGUqIGRvY1R5cGUgPSBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KG5vZGUpLT5k
b2N0eXBlKCk7CiAgICAgICAgICAgICBpZiAoZG9jVHlwZSkKLSAgICAgICAgICAgICAgICBhcHBl
bmRTdHJpbmcocmVzdWx0LCBkb2NUeXBlLT50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBh
cHBlbmQocmVzdWx0LCBkb2NUeXBlLT50b1N0cmluZygpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToK
LSAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IERvY3Vt
ZW50VHlwZSo+KG5vZGUpLT50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGFwcGVuZChyZXN1bHQs
IHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50VHlwZSo+KG5vZGUpLT50b1N0cmluZygpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJ
T05fTk9ERToKLSAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0YXRpY19jYXN0PGNv
bnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpLT50b1N0cmluZygpKTsKKyAgICAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlv
bio+KG5vZGUpLT50b1N0cmluZygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE5vZGU6OkVMRU1FTlRfTk9ERTogewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPCcpOwog
ICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50
Kj4obm9kZSk7CiAgICAgICAgICAgICBib29sIGNvbnZlcnQgPSBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzICYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSk7Ci0gICAgICAgICAgICBhcHBl
bmRTdHJpbmcocmVzdWx0LCBlbC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIGVsLT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwogICAgICAg
ICAgICAgTmFtZWRBdHRyTWFwICphdHRycyA9IGVsLT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhdHRycy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAoIWRv
Y3VtZW50SXNIVE1MICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbShlbCkp
CkBAIC00MDgsOSArNDAzLDkgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9y
PFVDaAogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIAogICAgICAgICAgICAg
ICAgIGlmIChkb2N1bWVudElzSFRNTCkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5n
KHJlc3VsdCwgYXR0ci0+bmFtZSgpLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgYXR0ci0+bmFtZSgpLmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIGF0dHItPm5h
bWUoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0
ci0+bmFtZSgpLnRvU3RyaW5nKCkpOwogCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
PScpOwogCkBAIC00MzcsNyArNDMyLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAo
VmVjdG9yPFVDaAogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BS
T1BfRElTUExBWSwgQ1NTX1ZBTF9JTkxJTkUsIHRydWUpOwogICAgICAgICAgICAgICAgIGlmIChz
dHlsZS0+bGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBT
dHJpbmcgc3R5bGVQcmVmaXgoIiBzdHlsZT1cIiIpOwotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRTdHJpbmcocmVzdWx0LCBzdHlsZVByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChyZXN1bHQsIHN0eWxlUHJlZml4KTsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXR0cmli
dXRlVmFsdWUocmVzdWx0LCBzdHlsZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnXCInKTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTIsNyArNDQ3LDcg
QEAgc3RhdGljIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaAogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6
Ci0gICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDREFU
QVNlY3Rpb24qPihub2RlKS0+dG9TdHJpbmcoKSk7CisgICAgICAgICAgICBhcHBlbmQocmVzdWx0
LCBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKS0+dG9TdHJpbmcoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAg
ICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9ERToKQEAgLTUwMyw3ICs0OTgsNyBAQCBzdGF0aWMg
dm9pZCBhcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyCiAKICAgICByZXN1bHQuYXBwZW5kKCc8
Jyk7CiAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgp
KTsKKyAgICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSkt
Pm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQog
CkBAIC01NDAsNyArNTM1LDcgQEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKE5vZGUqIG5vZGUs
IGNvbgogewogICAgIFZlY3RvcjxBdHRyaWJ1dGVDaGFuZ2U+IGNoYW5nZXM7CiAKLSAgICBLVVJM
IGJhc2VVUkxBc0tVUkwoYmFzZVVSTC5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIEtVUkwgcGFy
c2VkQmFzZVVSTChiYXNlVVJMKTsKIAogICAgIE5vZGUqIGVuZCA9IG5vZGUtPnRyYXZlcnNlTmV4
dFNpYmxpbmcoKTsKICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICE9IGVuZDsgbiA9IG4tPnRy
YXZlcnNlTmV4dE5vZGUoKSkgewpAQCAtNTUwLDEwICs1NDUsOCBAQCBzdGF0aWMgdm9pZCBjb21w
bGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uCiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
dHRycy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0
cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+aXNVUkxBdHRyaWJ1dGUoYXR0
cikpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBsZXRlZFVSTCA9IEtVUkwoYmFz
ZVVSTEFzS1VSTCwgYXR0ci0+dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0cmluZygpOwot
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZSwgYXR0
ci0+bmFtZSgpLCBjb21wbGV0ZWRVUkwpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGUtPmlzVVJMQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZSwgYXR0ci0+bmFtZSgpLCBLVVJMKHBhcnNl
ZEJhc2VVUkwsIGF0dHItPnZhbHVlKCkpLnN0cmluZygpKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC02MjIsMTAgKzYxNSwxMCBAQCBTdHJpbmcgam9pbk1hcmt1cHMoY29u
c3QgVmVjdG9yPFN0cmluZz4gCiAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwog
CiAgICAgZm9yIChzaXplX3QgaSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQotICAgICAgICBhcHBl
bmRTdHJpbmcocmVzdWx0LCBwcmVNYXJrdXBzW2kgLSAxXSk7CisgICAgICAgIGFwcGVuZChyZXN1
bHQsIHByZU1hcmt1cHNbaSAtIDFdKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9z
dENvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHBvc3RNYXJrdXBzW2ld
KTsKKyAgICAgICAgYXBwZW5kKHJlc3VsdCwgcG9zdE1hcmt1cHNbaV0pOwogCiAgICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0KQEAgLTgwNiw3ICs3OTksNyBAQCBTdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgICAgICAgICAgICAgaWYgKHN0eWxl
LT5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7
CiAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgZGl2U3R5bGUoIjxkaXYg
c3R5bGU9XCIiKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKG9wZW5UYWcsIGRp
dlN0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wZW5UYWcsIGRpdlN0eWxlKTsK
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3BlblRhZywgc3R5bGUt
PmNzc1RleHQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG9wZW5UYWcuYXBwZW5kKCdcIicpOwog
ICAgICAgICAgICAgICAgICAgICBvcGVuVGFnLmFwcGVuZCgnPicpOwpAQCAtODQ4LDcgKzg0MSw3
IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAgICAgICAgaWYg
KHN0eWxlLT5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gb3BlblRh
ZzsKICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBzcGFuQ2xhc3NTdHlsZSA9IFN0cmluZygiPHNw
YW4gY2xhc3M9XCIiIEFwcGxlU3R5bGVTcGFuQ2xhc3MgIlwiIHN0eWxlPVwiIik7Ci0gICAgICAg
ICAgICBhcHBlbmRTdHJpbmcob3BlblRhZywgc3BhbkNsYXNzU3R5bGUpOworICAgICAgICAgICAg
YXBwZW5kKG9wZW5UYWcsIHNwYW5DbGFzc1N0eWxlKTsKICAgICAgICAgICAgIGFwcGVuZEF0dHJp
YnV0ZVZhbHVlKG9wZW5UYWcsIHN0eWxlLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAgb3BlblRh
Zy5hcHBlbmQoJ1wiJyk7CiAgICAgICAgICAgICBvcGVuVGFnLmFwcGVuZCgnPicpOwpAQCAtODkw
LDcgKzg4Myw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KIAog
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGVsZW1lbnQtPmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChtYXJrdXApOwogCi0gICAgaWYgKGZyYWdtZW50ICYmICFiYXNlVVJM
LmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9ICJhYm91dDpibGFuayIgJiYgYmFzZVVSTCAhPSBkb2N1
bWVudC0+YmFzZVVSTCgpKQorICAgIGlmIChmcmFnbWVudCAmJiAhYmFzZVVSTC5pc0VtcHR5KCkg
JiYgYmFzZVVSTCAhPSBibGFua1VSTCgpICYmIGJhc2VVUkwgIT0gZG9jdW1lbnQtPmJhc2VVUkwo
KSkKICAgICAgICAgY29tcGxldGVVUkxzKGZyYWdtZW50LmdldCgpLCBiYXNlVVJMKTsKIAogICAg
IHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CkBAIC05MjIsNyArOTE1LDcgQEAgU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBFQwogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0
KHJlc3VsdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENvbnRh
aW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyaW5nKQorc3Rh
dGljIHZvaWQgZmlsbENvbnRhaW5lckZyb21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBo
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBwYXJh
Z3JhcGgtPmRvY3VtZW50KCk7CiAKQEAgLTkzNSwxMiArOTI4LDEzIEBAIHN0YXRpYyB2b2lkIGZp
bGxDb250YWluZXJGcm9tU3RyaW5nKENvbnQKIAogICAgIEFTU0VSVChzdHJpbmcuZmluZCgnXG4n
KSA9PSAtMSk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCB0YWJMaXN0ID0gRGVwcmVjYXRl
ZFN0cmluZ0xpc3Q6OnNwbGl0KCdcdCcsIHN0cmluZywgdHJ1ZSk7Ci0gICAgRGVwcmVjYXRlZFN0
cmluZyB0YWJUZXh0ID0gIiI7CisgICAgVmVjdG9yPFN0cmluZz4gdGFiTGlzdDsKKyAgICBzdHJp
bmcuc3BsaXQoJ1x0JywgdHJ1ZSwgdGFiTGlzdCk7CisgICAgU3RyaW5nIHRhYlRleHQgPSAiIjsK
ICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICB3aGlsZSAoIXRhYkxpc3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IHRhYkxpc3QuZmlyc3QoKTsKLSAgICAgICAg
dGFiTGlzdC5wb3BfZnJvbnQoKTsKKyAgICBzaXplX3QgbnVtRW50cmllcyA9IHRhYkxpc3Quc2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRW50cmllczsgKytpKSB7CisgICAg
ICAgIGNvbnN0IFN0cmluZyYgcyA9IHRhYkxpc3RbaV07CiAKICAgICAgICAgLy8gYXBwZW5kIHRo
ZSBub24tdGFiIHRleHR1YWwgcGFydAogICAgICAgICBpZiAoIXMuaXNFbXB0eSgpKSB7CkBAIC05
NDksMTUgKzk0MywxNSBAQCBzdGF0aWMgdm9pZCBmaWxsQ29udGFpbmVyRnJvbVN0cmluZyhDb250
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVjID09IDApOwogICAgICAgICAgICAgICAgIHRhYlRl
eHQgPSAiIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiB0ZXh0Tm9k
ZSA9IGRvY3VtZW50LT5jcmVhdGVUZXh0Tm9kZShzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3Bh
Y2UocywgZmlyc3QsIHRhYkxpc3QuaXNFbXB0eSgpKSk7CisgICAgICAgICAgICBSZWZQdHI8Tm9k
ZT4gdGV4dE5vZGUgPSBkb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoc3RyaW5nV2l0aFJlYmFsYW5j
ZWRXaGl0ZXNwYWNlKHMsIGZpcnN0LCBpICsgMSA9PSBudW1FbnRyaWVzKSk7CiAgICAgICAgICAg
ICBwYXJhZ3JhcGgtPmFwcGVuZENoaWxkKHRleHROb2RlLnJlbGVhc2UoKSwgZWMpOwogICAgICAg
ICAgICAgQVNTRVJUKGVjID09IDApOwogICAgICAgICB9CiAKICAgICAgICAgLy8gdGhlcmUgaXMg
YSB0YWIgYWZ0ZXIgZXZlcnkgZW50cnksIGV4Y2VwdCB0aGUgbGFzdCBlbnRyeQogICAgICAgICAv
LyAoaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgdGFiLCB0aGUgbGlzdCBnZXRzIGFuIGV4dHJh
IGVtcHR5IGVudHJ5KQotICAgICAgICBpZiAoIXRhYkxpc3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgdGFiVGV4dCArPSAnXHQnOworICAgICAgICBpZiAoaSArIDEgIT0gbnVtRW50cmllcykKKyAg
ICAgICAgICAgIHRhYlRleHQuYXBwZW5kKCdcdCcpOwogICAgICAgICBlbHNlIGlmICghdGFiVGV4
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHBhcmFncmFwaC0+YXBwZW5kQ2hpbGQoY3JlYXRl
VGFiU3BhbkVsZW1lbnQoZG9jdW1lbnQsIHRhYlRleHQpLCBlYyk7CiAgICAgICAgICAgICBBU1NF
UlQoZWMgPT0gMCk7CkBAIC05ODUsNyArOTc5LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbQogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5nID0gdGV4
dC5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3RyaW5nIHN0cmluZyA9IHRleHQ7CiAgICAgc3Ry
aW5nLnJlcGxhY2UoIlxyXG4iLCAiXG4iKTsKICAgICBzdHJpbmcucmVwbGFjZSgnXHInLCAnXG4n
KTsKIApAQCAtMTAxNSwxMyArMTAwOSwxNCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtCiAgICAgTm9kZSogYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhjb250ZXh0LT5z
dGFydE5vZGUoKSk7CiAgICAgYm9vbCB1c2VDbG9uZXNPZkVuY2xvc2luZ0Jsb2NrID0gIWJsb2Nr
LT5oYXNUYWdOYW1lKGJvZHlUYWcpOwogICAgIAotICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0IGxp
c3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJ1xuJywgc3RyaW5nLCB0cnVlKTsgLy8g
dHJ1ZSBnZXRzIHVzIGVtcHR5IHN0cmluZ3MgaW4gdGhlIGxpc3QKLSAgICB3aGlsZSAoIWxpc3Qu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IGxpc3QuZmlyc3QoKTsK
LSAgICAgICAgbGlzdC5wb3BfZnJvbnQoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsaXN0OworICAg
IHN0cmluZy5zcGxpdCgnXG4nLCB0cnVlLCBsaXN0KTsgLy8gdHJ1ZSBnZXRzIHVzIGVtcHR5IHN0
cmluZ3MgaW4gdGhlIGxpc3QKKyAgICBzaXplX3QgbnVtTGluZXMgPSBsaXN0LnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxpbmVzOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
U3RyaW5nJiBzID0gbGlzdFtpXTsKIAogICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudDsK
LSAgICAgICAgaWYgKHMuaXNFbXB0eSgpICYmIGxpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlm
IChzLmlzRW1wdHkoKSAmJiBpICsgMSA9PSBudW1MaW5lcykgewogICAgICAgICAgICAgLy8gRm9y
IGxhc3QgbGluZSwgdXNlIHRoZSAibWFnaWMgQlIiIHJhdGhlciB0aGFuIGEgUC4KICAgICAgICAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJ
LCAiYnIiLCBlYyk7CiAgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CkluZGV4OiBXZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9I
aXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9oaXN0b3J5L0hpc3Rv
cnlJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDEyICsxNzYsMTIgQEAgZG91YmxlIEhp
c3RvcnlJdGVtOjpsYXN0VmlzaXRlZFRpbWUoKSBjbwogCiBLVVJMIEhpc3RvcnlJdGVtOjp1cmwo
KSBjb25zdAogewotICAgIHJldHVybiBLVVJMKG1fdXJsU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmco
KSk7CisgICAgcmV0dXJuIEtVUkwobV91cmxTdHJpbmcpOwogfQogCiBLVVJMIEhpc3RvcnlJdGVt
OjpvcmlnaW5hbFVSTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtVUkwobV9vcmlnaW5hbFVSTFN0
cmluZy5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIHJldHVybiBLVVJMKG1fb3JpZ2luYWxVUkxT
dHJpbmcpOwogfQogCiBjb25zdCBTdHJpbmcmIEhpc3RvcnlJdGVtOjp0YXJnZXQoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9oaXN0
b3J5L0hpc3RvcnlJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNs
dWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRlICJJbnRQ
b2ludC5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdyYWhhbSBEZW5u
aXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE5Nyw5ICsxOTcs
OSBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAgICAg
ICAgICAgICAgIGludCB4ID0gZS0+cGFnZVgoKSAtIGFic3g7CiAgICAgICAgICAgICAgICAgICAg
IGludCB5ID0gZS0+cGFnZVkoKSAtIGFic3k7CiAgICAgICAgICAgICAgICAgICAgIHVybCArPSAi
PyI7Ci0gICAgICAgICAgICAgICAgICAgIHVybCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIo
eCk7CisgICAgICAgICAgICAgICAgICAgIHVybCArPSBTdHJpbmc6Om51bWJlcih4KTsKICAgICAg
ICAgICAgICAgICAgICAgdXJsICs9ICIsIjsKLSAgICAgICAgICAgICAgICAgICAgdXJsICs9IERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcih5KTsKKyAgICAgICAgICAgICAgICAgICAgdXJsICs9IFN0
cmluZzo6bnVtYmVyKHkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgSFRN
TEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKQEAgLTMyOCw3ICszMjgsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRDb29yZHMoY29uc3QgCiAgICAgc2V0QXR0cmlidXRl
KGNvb3Jkc0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50OjpocmVm
KCkgY29uc3QKK0tVUkwgSFRNTEFuY2hvckVsZW1lbnQ6OmhyZWYoKSBjb25zdAogewogICAgIHJl
dHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKIH0K
QEAgLTQxNSw0MSArNDE1LDQwIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFR5cGUoY29u
c3QgU3QKIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50OjpoYXNoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gJyMnICsgS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5yZWYoKTsKKyAgICBy
ZXR1cm4gIiMiICsgaHJlZigpLnJlZigpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6
Omhvc3QoKSBjb25zdAogewotICAgIHJldHVybiBLVVJMKGhyZWYoKS5kZXByZWNhdGVkU3RyaW5n
KCkpLmhvc3QoKTsKKyAgICByZXR1cm4gaHJlZigpLmhvc3QoKTsKIH0KIAogU3RyaW5nIEhUTUxB
bmNob3JFbGVtZW50Ojpob3N0bmFtZSgpIGNvbnN0CiB7Ci0gICAgS1VSTCB1cmwoaHJlZigpLmRl
cHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAgS1VSTCB1cmwo
aHJlZigpKTsKKyAgICBpZiAodXJsLnBvcnQoKSA9PSAwKQogICAgICAgICByZXR1cm4gdXJsLmhv
c3QoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB1cmwuaG9zdCgpICsgIjoiICsgU3RyaW5n
OjpudW1iZXIodXJsLnBvcnQoKSk7CisgICAgcmV0dXJuIHVybC5ob3N0KCkgKyAiOiIgKyBTdHJp
bmc6Om51bWJlcih1cmwucG9ydCgpKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50Ojpw
YXRobmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtVUkwoaHJlZigpLmRlcHJlY2F0ZWRTdHJp
bmcoKSkucGF0aCgpOworICAgIHJldHVybiBocmVmKCkucGF0aCgpOwogfQogCiBTdHJpbmcgSFRN
TEFuY2hvckVsZW1lbnQ6OnBvcnQoKSBjb25zdAogewotICAgIHJldHVybiBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIoS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5wb3J0KCkpOworICAg
IHJldHVybiBTdHJpbmc6Om51bWJlcihocmVmKCkucG9ydCgpKTsKIH0KIAogU3RyaW5nIEhUTUxB
bmNob3JFbGVtZW50Ojpwcm90b2NvbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEtVUkwoaHJlZigp
LmRlcHJlY2F0ZWRTdHJpbmcoKSkucHJvdG9jb2woKSArICI6IjsKKyAgICByZXR1cm4gaHJlZigp
LnByb3RvY29sKCkgKyAiOiI7CiB9CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6c2VhcmNo
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gS1VSTChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5x
dWVyeSgpOworICAgIHJldHVybiBocmVmKCkucXVlcnkoKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNo
b3JFbGVtZW50Ojp0ZXh0KCkgY29uc3QKQEAgLTQ1OSw3ICs0NTgsNyBAQCBTdHJpbmcgSFRNTEFu
Y2hvckVsZW1lbnQ6OnRleHQoKSBjb25zdAogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRv
U3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaHJlZigpOworICAgIHJldHVybiBocmVmKCku
c3RyaW5nKCk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzTGl2ZUxpbmsoKSBjb25z
dApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw4ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgU3RyaW5nOwotCiBjbGFzcyBIVE1MQW5jaG9yRWxlbWVudCA6IHB1YmxpYyBI
VE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTEFuY2hvckVsZW1lbnQoRG9jdW1lbnQqKTsK
QEAgLTYwLDcgKzU4LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBjb29yZHMoKSBjb25zdDsKICAg
ICB2b2lkIHNldENvb3Jkcyhjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmluZyBocmVmKCkgY29u
c3Q7CisgICAgS1VSTCBocmVmKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgU3RyaW5nIGhyZWZsYW5nKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEFwcGxldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXBw
bGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcHBs
ZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACi0vKioKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisv
KgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXguZGUpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFMbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTIyLDYgKzIwLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEFw
cGxldEVsZW1lbnQuaCIKIApAQCAtMzYsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBw
bGV0RWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MUGx1Z0luRWxlbWVudChhcHBsZXRUYWcs
IGRvYykKK0hUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChEb2N1bWVudCogZG9j
KQorICAgIDogSFRNTFBsdWdJbkVsZW1lbnQoYXBwbGV0VGFnLCBkb2MpCiB7CiB9CiAKQEAgLTQ5
LDcgKzQ4LDcgQEAgSFRNTEFwcGxldEVsZW1lbnQ6On5IVE1MQXBwbGV0RWxlbWVudCgpCiAjZW5k
aWYKIH0KIAotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQordm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWx0QXR0ciB8fAogICAgICAgICBhdHRyLT5uYW1lKCkgPT0gYXJjaGl2ZUF0dHIgfHwKQEAg
LTYxLDcgKzYwLDcgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIFN0cmlu
ZyBuZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkg
JiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTERvY3Vt
ZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7CisgICAg
ICAgICAgICBIVE1MRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRv
Y3VtZW50KCkpOwogICAgICAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIp
OwogICAgICAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0obmV3TmFtZUF0dHIpOwogICAgICAgICB9
CkBAIC02OSw3ICs2OCw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmkKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIpIHsKICAgICAgICAgU3Ry
aW5nIG5ld0lkQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkg
JiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTERvY3Vt
ZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7CisgICAg
ICAgICAgICBIVE1MRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRv
Y3VtZW50KCkpOwogICAgICAgICAgICAgZG9jLT5yZW1vdmVEb2NFeHRyYU5hbWVkSXRlbShvbGRJ
ZEF0dHIpOwogICAgICAgICAgICAgZG9jLT5hZGREb2NFeHRyYU5hbWVkSXRlbShuZXdJZEF0dHIp
OwogICAgICAgICB9CkBAIC04Myw3ICs4Miw3IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmkKIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAg
ICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVu
dCgpKTsKKyAgICAgICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1l
bnQqPihkb2N1bWVudCgpKTsKICAgICAgICAgZG9jLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIp
OwogICAgICAgICBkb2MtPmFkZERvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7CiAgICAgfQpA
QCAtOTQsNyArOTMsNyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
CiB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICBp
ZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQg
KmRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKKyAgICAgICAg
SFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCgp
KTsKICAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwogICAgICAgICBk
b2MtPnJlbW92ZURvY0V4dHJhTmFtZWRJdGVtKG9sZElkQXR0cik7CiAgICAgfQpAQCAtMTAyLDEy
ICsxMDEsMTIgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bQogICAg
IEhUTUxQbHVnSW5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CiB9CiAKLWJvb2wgSFRN
TEFwcGxldEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQorYm9v
bCBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUp
CiB7CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29kZUF0dHIpLmlzTnVsbCgpOwogfQogCi1S
ZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKK1JlbmRlck9iamVjdCogSFRNTEFwcGxldEVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0
eWxlKQogewogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7
CiAKQEAgLTEyNSw3ICsxMjQsNyBAQCBSZW5kZXJPYmplY3QgKkhUTUxBcHBsZXRFbGVtZW50Ojpj
cmVhdGVSCiAgICAgICAgIGlmICghYXJjaGl2ZS5pc051bGwoKSkKICAgICAgICAgICAgIGFyZ3Mu
c2V0KCJhcmNoaXZlIiwgYXJjaGl2ZSk7CiAKLSAgICAgICAgYXJncy5zZXQoImJhc2VVUkwiLCBk
b2N1bWVudCgpLT5iYXNlVVJMKCkpOworICAgICAgICBhcmdzLnNldCgiYmFzZVVSTCIsIGRvY3Vt
ZW50KCktPmJhc2VVUkwoKS5zdHJpbmcoKSk7CiAKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBtYXlTY3JpcHQgPSBnZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7CiAgICAgICAgIGlmICgh
bWF5U2NyaXB0LmlzTnVsbCgpKQpAQCAtMTQwLDcgKzEzOSw3IEBAIFJlbmRlck9iamVjdCAqSFRN
TEFwcGxldEVsZW1lbnQ6OmNyZWF0ZVIKIH0KIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5E
SU5HUykKLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MQXBwbGV0RWxlbWVudDo6Z2V0SW5z
dGFuY2UoKSBjb25zdAorS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEhUTUxBcHBsZXRFbGVtZW50
OjpnZXRJbnN0YW5jZSgpIGNvbnN0CiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnQoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+aXNKYXZh
RW5hYmxlZCgpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw0IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KQEAgLTIwLDEyICsxOCwxMyBAQAogICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgogCkBAIC0xNzksNyArMTc4LDcgQEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNl
dENvb3Jkcyhjb25zdCBTdAogICAgIHNldEF0dHJpYnV0ZShjb29yZHNBdHRyLCB2YWx1ZSk7CiB9
CiAKLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmhyZWYoKSBjb25zdAorS1VSTCBIVE1MQXJlYUVs
ZW1lbnQ6OmhyZWYoKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgJ
KHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsOCArMzMsNiBAQCBj
bGFzcyBIaXRUZXN0UmVzdWx0OwogCiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRN
TEFuY2hvckVsZW1lbnQgewogcHVibGljOgotICAgIGVudW0gU2hhcGUgeyBEZWZhdWx0LCBQb2x5
LCBSZWN0LCBDaXJjbGUsIFVua25vd24gfTsKLQogICAgIEhUTUxBcmVhRWxlbWVudChEb2N1bWVu
dCopOwogICAgIH5IVE1MQXJlYUVsZW1lbnQoKTsKIApAQCAtNjAsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgU3RyaW5nIGNvb3JkcygpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29vcmRzKGNvbnN0IFN0
cmluZyYpOwogCi0gICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKKyAgICBLVVJMIGhyZWYoKSBjb25z
dDsKICAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIG5vSHJlZigp
IGNvbnN0OwpAQCAtNzQsNyArNzAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgdGFy
Z2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJik7CiAKLXByb3Rl
Y3RlZDoKK3ByaXZhdGU6CisgICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJlY3QsIENp
cmNsZSwgVW5rbm93biB9OwogICAgIFBhdGggZ2V0UmVnaW9uKGNvbnN0IEludFNpemUmKSBjb25z
dDsKICAgICBQYXRoIHJlZ2lvbjsKICAgICBMZW5ndGgqIG1fY29vcmRzOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxCYXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxC
YXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoqCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgor
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0zNiw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoRG9jdW1l
bnQgKmRvYykKK0hUTUxCYXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50KERvY3VtZW50KiBkb2Mp
CiAgICAgOiBIVE1MRWxlbWVudChiYXNlVGFnLCBkb2MpCiB7CiB9CkBAIC00NSw3ICs0Myw3IEBA
IEhUTUxCYXNlRWxlbWVudDo6fkhUTUxCYXNlRWxlbWVudCgpCiB7CiB9CiAKLXZvaWQgSFRNTEJh
c2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2
b2lkIEhUTUxCYXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
KiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKICAgICAgICAg
bV9ocmVmID0gcGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7CkBAIC02OSw4ICs2Nyw4IEBAIHZvaWQg
SFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW4KIAogICAgIC8vIFNpbmNlIHRoZSBk
b2N1bWVudCBkb2Vzbid0IGhhdmUgYSBiYXNlIGVsZW1lbnQuLi4KICAgICAvLyAoVGhpcyB3aWxs
IGJyZWFrIGluIHRoZSBjYXNlIG9mIG11bHRpcGxlIGJhc2UgZWxlbWVudHMsIGJ1dCB0aGF0J3Mg
bm90IHZhbGlkIGFueXdheSAoPykpCi0gICAgZG9jdW1lbnQoKS0+c2V0QmFzZVVSTChEZXByZWNh
dGVkU3RyaW5nOjpudWxsKTsKLSAgICBkb2N1bWVudCgpLT5zZXRCYXNlVGFyZ2V0KERlcHJlY2F0
ZWRTdHJpbmc6Om51bGwpOworICAgIGRvY3VtZW50KCktPnNldEJhc2VVUkwoS1VSTCgpKTsKKyAg
ICBkb2N1bWVudCgpLT5zZXRCYXNlVGFyZ2V0KFN0cmluZygpKTsKIH0KIAogdm9pZCBIVE1MQmFz
ZUVsZW1lbnQ6OnByb2Nlc3MoKQpAQCAtNzksNyArNzcsNyBAQCB2b2lkIEhUTUxCYXNlRWxlbWVu
dDo6cHJvY2VzcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9ocmVmLmlzRW1wdHko
KSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNlVVJM
KEtVUkwoZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpLCBtX2hyZWYuZGVwcmVj
YXRlZFN0cmluZygpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgICAgICBkb2N1bWVudCgpLT5z
ZXRCYXNlVVJMKEtVUkwoZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpLCBtX2hy
ZWYpKTsKIAogICAgIGlmICghbV90YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICBkb2N1bWVudCgp
LT5zZXRCYXNlVGFyZ2V0KG1fdGFyZ2V0KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOSBAQAotLyoqCisvKgogICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2lt
b24gSGF1c21hbm4gKGhhdXNtYW5uQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtODgsNyArODgsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0
cikgewogICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7CiAgICAg
ICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
dXJsKSk7CisgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIsIENTU19QUk9QX0JB
Q0tHUk9VTkRfSU1BR0UsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkuc3RyaW5nKCkpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1hcmdpbndpZHRoQXR0ciB8fCBhdHRyLT5u
YW1lKCkgPT0gbGVmdG1hcmdpbkF0dHIpIHsKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENT
U19QUk9QX01BUkdJTl9SSUdIVCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGFkZENTU0xlbmd0
aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgYXR0ci0+dmFsdWUoKSk7CkBAIC0xODAsNyAr
MTgwLDcgQEAgU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6YUxpbmsoKSBjb25zdAogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoYWxpbmtBdHRyKTsKIH0KIAotdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNl
dEFMaW5rKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0QUxp
bmsoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYWxpbmtBdHRyLCB2
YWx1ZSk7CiB9CkBAIC0xOTAsNyArMTkwLDcgQEAgU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6YmFj
a2dyb3VuZCgpIGNvbgogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpOwog
fQogCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0QmFja2dyb3VuZChjb25zdCBTdHJpbmcgJnZh
bHVlKQordm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldEJhY2tncm91bmQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIsIHZhbHVlKTsKIH0KQEAg
LTIwMCw3ICsyMDAsNyBAQCBTdHJpbmcgSFRNTEJvZHlFbGVtZW50OjpiZ0NvbG9yKCkgY29uc3QK
ICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJnY29sb3JBdHRyKTsKIH0KIAotdm9pZCBIVE1MQm9k
eUVsZW1lbnQ6OnNldEJnQ29sb3IoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEJvZHlF
bGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmli
dXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7CiB9CkBAIC0yMTAsNyArMjEwLDcgQEAgU3RyaW5nIEhU
TUxCb2R5RWxlbWVudDo6bGluaygpIGNvbnN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsaW5r
QXR0cik7CiB9CiAKLXZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRMaW5rKGNvbnN0IFN0cmluZyAm
dmFsdWUpCit2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0TGluayhjb25zdCBTdHJpbmcmIHZhbHVl
KQogewogICAgIHNldEF0dHJpYnV0ZShsaW5rQXR0ciwgdmFsdWUpOwogfQpAQCAtMjIwLDcgKzIy
MCw3IEBAIFN0cmluZyBIVE1MQm9keUVsZW1lbnQ6OnRleHQoKSBjb25zdAogICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUodGV4dEF0dHIpOwogfQogCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0VGV4
dChjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldFRleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUodGV4dEF0dHIsIHZhbHVlKTsK
IH0KQEAgLTIzMCw3ICsyMzAsNyBAQCBTdHJpbmcgSFRNTEJvZHlFbGVtZW50Ojp2TGluaygpIGNv
bnN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2bGlua0F0dHIpOwogfQogCi12b2lkIEhUTUxC
b2R5RWxlbWVudDo6c2V0VkxpbmsoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEJvZHlF
bGVtZW50OjpzZXRWTGluayhjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0
ZSh2bGlua0F0dHIsIHZhbHVlKTsKIH0KQEAgLTI0MSw3ICsyNDEsNiBAQCBpbnQgSFRNTEJvZHlF
bGVtZW50OjpzY3JvbGxMZWZ0KCkgY29uc3QKICAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQo
KTsKICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAg
IEZyYW1lVmlldyogdmlldyA9IGRvYy0+dmlldygpOwotICAgIAogICAgIHJldHVybiB2aWV3ID8g
dmlldy0+Y29udGVudHNYKCkgOiAwOwogfQogCkBAIC0yNjEsNyArMjYwLDYgQEAgaW50IEhUTUxC
b2R5RWxlbWVudDo6c2Nyb2xsVG9wKCkgY29uc3QKICAgICBEb2N1bWVudCogZG9jID0gZG9jdW1l
bnQoKTsKICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
ICAgIEZyYW1lVmlldyogdmlldyA9IGRvYy0+dmlldygpOwotICAgIAogICAgIHJldHVybiB2aWV3
ID8gdmlldy0+Y29udGVudHNZKCkgOiAwOwogfQogCkBAIC0yODEsNyArMjc5LDYgQEAgaW50IEhU
TUxCb2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkgY29ucwogICAgIERvY3VtZW50KiBkb2MgPSBk
b2N1bWVudCgpOwogICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jLT52aWV3KCk7Ci0gICAgCiAgICAgcmV0dXJu
IHZpZXcgPyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMDsgICAgCiB9CiAKQEAgLTI5MSw3ICsy
ODgsNiBAQCBpbnQgSFRNTEJvZHlFbGVtZW50OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAgICAgRG9j
dW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7CiAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2MtPnZpZXcoKTsKLSAg
ICAKICAgICByZXR1cm4gdmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDA7ICAgIAogfQog
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCAr
MSw4IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRp
b24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFT
dGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0
ZWNoIEFTQQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDYgKzIwLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogCkBAIC02NCw3ICs2Myw3IEBAIHN0YXRp
YyBpbmxpbmUgUmVuZGVyV2lkZ2V0KiBmaW5kV2lkZ2V0UmUKICAgICAgICAgPyBzdGF0aWNfY2Fz
dDxSZW5kZXJXaWRnZXQqPihuLT5yZW5kZXJlcigpKSA6IDA7CiB9CiAgICAgCi1LSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZSAqSFRNTEVtYmVkRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAorS0pT
OjpCaW5kaW5nczo6SW5zdGFuY2UqIEhUTUxFbWJlZEVsZW1lbnQ6OmdldEluc3RhbmNlKCkgY29u
c3QKIHsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYgogICAgICAgICBpZiAocG9zICE9IC0xKQogICAgICAgICAgICAgbV9zZXJ2aWNl
VHlwZSA9IG1fc2VydmljZVR5cGUubGVmdChwb3MpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGNvZGVBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKQotICAgICAgICAgdXJs
ID0gcGFyc2VVUkwodmFsKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIG1fdXJsID0gcGFy
c2VVUkwodmFsKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcGx1Z2lucGFnZUF0dHIg
fHwgYXR0ci0+bmFtZSgpID09IHBsdWdpbnNwYWdlQXR0cikKICAgICAgICAgbV9wbHVnaW5QYWdl
ID0gdmFsOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoaWRkZW5BdHRyKSB7CkBAIC0x
MjcsMTMgKzEyNiwxMyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
CiAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
IH0KIAotYm9vbCBIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxl
ICpzdHlsZSkKK2Jvb2wgSFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJT
dHlsZSogc3R5bGUpCiB7Ci0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
KyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5vZGUgKnAgPSBwYXJlbnROb2RlKCk7Cisg
ICAgTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAocCAmJiBwLT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpIHsKICAgICAgICAgQVNTRVJUKHAtPnJlbmRlcmVyKCkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNDIsNyArMTQxLDcgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50OjpyZW5k
ZXJlcklzTmVlZGVkKAogICAgIHJldHVybiB0cnVlOwogfQogCi1SZW5kZXJPYmplY3QgKkhUTUxF
bWJlZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5
bGUgKnN0eWxlKQorUmVuZGVyT2JqZWN0KiBIVE1MRW1iZWRFbGVtZW50OjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVyUGFydE9iamVjdCh0aGlzKTsKIH0KQEAgLTE3MSw3ICsxNzAsNyBA
QCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCgpCiB2b2lkIEhUTUxFbWJlZEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNI
VE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnQgKmRvYyA9IHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudCAqPihkb2N1bWVudCgpKTsKKyAgICAgICAgSFRNTERvY3VtZW50KiBkb2Mg
PSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCgpKTsKICAgICAgICAgZG9jLT5h
ZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwogICAgIH0KIApAQCAtMTk1LDcgKzE5NCw3IEBAIHZv
aWQgSFRNTEVtYmVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW0KIHZvaWQgSFRNTEVtYmVkRWxl
bWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGRvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7CisgICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0g
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7CiAgICAgICAgIGRvYy0+cmVt
b3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKICAgICB9CiAKQEAgLTIxNSw3ICsyMTQsNyBAQCB2
b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoCiAgICAgfQogfQogCi1ib29s
IEhUTUxFbWJlZEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QK
K2Jvb2wgSFRNTEVtYmVkRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKSBj
b25zdAogewogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cjsKIH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxFbWJlZEVsZW1lbnQuaAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEVtYmVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNjcsNyArNjUsMTEgQEAgcHVibGljOgogICAgIFN0cmluZyB0eXBl
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgRGVwcmVj
YXRlZFN0cmluZyB1cmw7CisgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgc2VydmljZVR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3NlcnZpY2VUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fdXJsOwogICAgIFN0cmlu
ZyBtX3BsdWdpblBhZ2U7CiAgICAgU3RyaW5nIG1fc2VydmljZVR5cGU7CiAgICAgYm9vbCBtX25l
ZWRXaWRnZXRVcGRhdGU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24g
MzAyMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAg
ICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTg2LDEyICs4Niw5IEBAIEhUTUxGb3JtRWxlbWVudDo6fkhUTUxGb3JtRWxlbWVudCgp
CiAgICAgICAgIGltZ0VsZW1lbnRzW2ldLT5tX2Zvcm0gPSAwOwogfQogCi1ib29sIEhUTUxGb3Jt
RWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgU3RyaW5nICZ1cmwp
Citib29sIEhUTUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29u
c3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKHVybC5pc051bGwoKSkgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwu
ZGVwcmVjYXRlZFN0cmluZygpKS5zdGFydHNXaXRoKCJodHRwczoiLCBmYWxzZSk7CisgICAgcmV0
dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkucHJvdG9jb2xJcygiaHR0cHMiKTsKIH0K
IAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmF0dGFjaCgpCkBAIC0xMDIsNyArOTksNyBAQCB2b2lk
IEhUTUxGb3JtRWxlbWVudDo6YXR0YWNoKCkKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
IHsKLSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQg
Kj4oZG9jdW1lbnQoKSk7CisgICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7CiAgICAgICAgIGRvYy0+YWRkTmFtZWRJdGVtKG9s
ZE5hbWVBdHRyKTsKICAgICB9CiAKQEAgLTExMiw3ICsxMDksNyBAQCB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCgpCiB7CiAgICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsK
LSAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4o
ZG9jdW1lbnQoKSk7CisgICAgICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50Kj4oZG9jdW1lbnQoKSk7CiAgICAgICAgIGRvYy0+cmVtb3ZlTmFtZWRJdGVtKG9s
ZE5hbWVBdHRyKTsKICAgICB9CiAgICAKQEAgLTE0OSw3ICsxNDYsNyBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0Q2xpY2soRXZlbnQqCiAgICAgYm9vbCBzdWJtaXRGb3VuZCA9IGZhbHNl
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkg
ewotICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQgKj4oZm9ybUVsZW1lbnRzW2ldKTsKKyAgICAgICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVs
ZW1lbnRzW2ldKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24oKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgc3VibWl0
Rm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoU2ltdWxhdGVk
Q2xpY2soZXZlbnQpOwpAQCAtMTY3LDcgKzE2NCw3IEBAIHN0YXRpYyBEZXByZWNhdGVkQ1N0cmlu
ZyBlbmNvZGVDU3RyaW5nKGMKIAogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2lu
dGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMy40LjEKICAgICAvLyBzYW1lIHNhZmUgY2hhcmFjdGVy
cyBhcyBOZXRzY2FwZSBmb3IgY29tcGF0aWJpbGl0eQotICAgIHN0YXRpYyBjb25zdCBjaGFyICpz
YWZlID0gIi0uXyoiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzYWZlID0gIi0uXyoiOwogICAg
IGludCBlbGVuID0gZS5sZW5ndGgoKTsKICAgICBEZXByZWNhdGVkQ1N0cmluZyBlbmNvZGVkKChl
bGVuICsgZS5jb250YWlucygnXG4nKSkgKiAzICsgMSk7CiAgICAgaW50IGVuY2xlbiA9IDA7CkBA
IC0yNDYsNyArMjQzLDggQEAgVGV4dEVuY29kaW5nIEhUTUxGb3JtRWxlbWVudDo6ZGF0YUVuY29k
aQogICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKICAgICBTdHJpbmcgc3RyID0gbV9hY2NlcHRj
aGFyc2V0OwogICAgIHN0ci5yZXBsYWNlKCcsJywgJyAnKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBj
aGFyc2V0cyA9IHN0ci5zcGxpdCgnICcpOworICAgIFZlY3RvcjxTdHJpbmc+IGNoYXJzZXRzOwor
ICAgIHN0ci5zcGxpdCgnICcsIGNoYXJzZXRzKTsKICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY2hhcnNldHMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGFyc2V0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAg
ICAgICAgIGlmICgoZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKml0KSkuaXNWYWxpZCgpKQpAQCAt
MzEyLDEwICszMTAsMTAgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50Ojpm
bwogICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSAiXCIiOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjdXJyZW50KS0+
dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRo
KHBhdGgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgocGF0
aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSAiXHJcbkNvbnRlbnQt
VHlwZTogIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSBtaW1lVHlw
ZS5hc2NpaSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3RyICs9IG1pbWVU
eXBlLmxhdGluMSgpLmRlcHJlY2F0ZWRDU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0zNjQsNyArMzYyLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlRW5jdHlwZShj
b25zdAogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6aXNNYWlsdG9Gb3JtKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV91cmwuc3RhcnRzV2l0aCgibWFpbHRvOiIsIGZhbHNlKTsKKyAgICByZXR1cm4g
cHJvdG9jb2xJcyhtX3VybCwgIm1haWx0byIpOwogfQogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6
cHJlcGFyZVN1Ym1pdChFdmVudCogZXZlbnQpCkBAIC00NDQsOCArNDQyLDggQEAgc3RhdGljIHZv
aWQgZ2V0VW5pcXVlQm91bmRhcnlTdHJpbmcoVmVjdAogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6
c3VibWl0KEV2ZW50KiBldmVudCwgYm9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbikKIHsKLSAgICBG
cmFtZVZpZXcgKnZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgRnJhbWUgKmZyYW1lID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52
aWV3KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAo
IXZpZXcgfHwgIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ4Miw3ICs0ODAsNyBAQCB2
b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgICAgIGZpcnN0U3Vj
Y2Vzc2Z1bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3VibWl0KHRydWUpOwogICAgIAogICAg
IGlmICghbV91cmwpCi0gICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgICAg
IG1fdXJsID0gZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAKICAgICBpZiAobV9wb3N0KSB7
CiAgICAgICAgIGlmIChtX211bHRpcGFydCAmJiBpc01haWx0b0Zvcm0oKSkgewpAQCAtNDk2LDcg
KzQ5NCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICAg
ICAgICAgICAgICBTdHJpbmcgYm9keSA9IGRhdGEtPmZsYXR0ZW5Ub1N0cmluZygpOwogICAgICAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbmN0eXBlKCksICJ0ZXh0L3BsYWluIikp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVudGlvbiBzZWVtcyB0byBiZSB0byBkZWNv
ZGUsIGFuZCBzLyYvXHJcbi8uIEFsc28sIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyAlMjAuCi0gICAg
ICAgICAgICAgICAgICAgIGJvZHkgPSBLVVJMOjpkZWNvZGVfc3RyaW5nKGJvZHkucmVwbGFjZSgn
JicsICJcclxuIikucmVwbGFjZSgnKycsICcgJykuZGVwcmVjYXRlZFN0cmluZygpICsgIlxyXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgYm9keSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhi
b2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxhY2UoJysnLCAnICcpICsgIlxyXG4iKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YSgoU3Ry
aW5nKCJib2R5PSIpICsgZW5jb2RlQ1N0cmluZyhib2R5LnV0ZjgoKSkpLnJlcGxhY2UoJysnLCAi
JTIwIikubGF0aW4xKCkpOwogICAgICAgICAgICAgfQpAQCAtNTE5LDcgKzUxNyw3IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KIAogdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnJlc2V0KCkKIHsKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKG1faW5yZXNl
dCB8fCAhZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTM4LDcgKzUzNiw3IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAgbV9pbnJlc2V0ID0gZmFsc2U7CiB9CiAKLXZv
aWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWN0aW9uQXR0cikK
ICAgICAgICAgbV91cmwgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKQEAgLTU2Niw3ICs1NjQs
NyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIFN0cmluZyBuZXdOYW1lQXR0
ciA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTERvY3VtZW50ICpkb2MgPSBz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBIVE1M
RG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50KCkpOwog
ICAgICAgICAgICAgZG9jLT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwogICAgICAgICAg
ICAgZG9jLT5hZGROYW1lZEl0ZW0obmV3TmFtZUF0dHIpOwogICAgICAgICB9CkBAIC01ODUsNyAr
NTgzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIAogICAgICAg
ICB9CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50ICplKQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxl
bWVudEluZGV4KEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqIGUpCiB7CiAgICAgLy8gQ2hlY2sgZm9y
IHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhpcyBlbGVtZW50IGlzIHRoZSB2ZXJ5IGxhc3QgdGhp
bmcgaW4KICAgICAvLyB0aGUgZm9ybSdzIHRyZWUgb2YgY2hpbGRyZW47IHdlIGRvbid0IHdhbnQg
dG8gd2FsayB0aGUgZW50aXJlIHRyZWUgaW4gdGhhdApAQCAtNTkzLDEyICs1OTEsMTIgQEAgdW5z
aWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgIC8vIHRoYXQgc2F5cyAi
YWRkIHRoaXMgZm9ybSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KICAgICBpZiAo
ZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgewogICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAg
ICAgICAgZm9yIChOb2RlICpub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUodGhpcykpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKICAgICAgICAgICAgIGlmIChu
b2RlID09IGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgICBpZiAobm9k
ZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50ICo+KG5vZGUpLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpCi0gICAgICAgICAgICAg
ICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQgKj4obm9kZSktPmZv
cm0oKSA9PSB0aGlzKQorICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KG5vZGUpLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpCisgICAgICAgICAgICAgICAgICAg
ICYmIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqPihub2RlKS0+Zm9ybSgpID09
IHRoaXMpCiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICB9CiAgICAgfQpAQCAtNjE4LDE3
ICs2MTYsMTcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KAogICAg
IHJlbW92ZUZyb21WZWN0b3IoZm9ybUVsZW1lbnRzLCBlKTsKIH0KIAotYm9vbCBIVE1MRm9ybUVs
ZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKK2Jvb2wgSFRNTEZv
cm1FbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGF0dHItPm5hbWUoKSA9PSBhY3Rpb25BdHRyOwogfQogCi12b2lkIEhUTUxGb3JtRWxl
bWVudDo6cmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQgKmUpCit2b2lkIEhUTUxG
b3JtRWxlbWVudDo6cmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqIGUpCiB7CiAg
ICAgaW1nRWxlbWVudHMuYXBwZW5kKGUpOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVt
b3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50ICplKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlbW92ZUltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVudCogZSkKIHsKICAgICByZW1vdmVGcm9t
VmVjdG9yKGltZ0VsZW1lbnRzLCBlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVF
bGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnRCYXNlLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxl
bWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsxLDkgQEAKLS8qKgotICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8q
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiAoaGF1c21hbm5Aa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsNiArMjAsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogCkBAIC02MSwyOCArNjAsMjUgQEAgYm9vbCBI
VE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxBbGxvd2VkKAogICAgIGlmIChVUkxTdHJpbmcuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEtVUkwgY29tcGxldGVVUkwoZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoVVJMU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOwotICAg
IGNvbXBsZXRlVVJMLnNldFJlZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKKyAgICBLVVJMIGNv
bXBsZXRlVVJMKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKFVSTFN0cmluZykpOwogCiAgICAgLy8g
RG9uJ3QgYWxsb3cgbW9yZSB0aGFuIDIwMCB0b3RhbCBmcmFtZXMgaW4gYSBzZXQuIFRoaXMgc2Vl
bXMKICAgICAvLyBsaWtlIGEgcmVhc29uYWJsZSB1cHBlciBib3VuZCwgYW5kIG90aGVyd2lzZSBt
dXR1YWxseSByZWN1cnNpdmUKICAgICAvLyBmcmFtZXNldCBwYWdlcyBjYW4gcXVpY2tseSBicmlu
ZyB0aGUgcHJvZ3JhbSB0byBpdHMga25lZXMgd2l0aAogICAgIC8vIGV4cG9uZW50aWFsIGdyb3d0
aCBpbiB0aGUgbnVtYmVyIG9mIGZyYW1lcy4KLQotICAgIC8vIEZJWE1FOiBUaGlzIGxpbWl0IGNv
dWxkIGJlIGhpZ2hlciwgYnV0IFdlYktpdCBoYXMgc29tZQorICAgIC8vIEZJWE1FOiBUaGlzIGxp
bWl0IGNvdWxkIGJlIGhpZ2hlciwgYnV0IGJlY2F1c2UgV2ViS2l0IGhhcyBzb21lCiAgICAgLy8g
YWxnb3JpdGhtcyB0aGF0IGhhcHBlbiB3aGlsZSBsb2FkaW5nIHdoaWNoIGFwcGVhciB0byBiZSBO
XjIgb3IKLSAgICAvLyB3b3JzZSBpbiB0aGUgbnVtYmVyIG9mIGZyYW1lcwotICAgIGlmIChGcmFt
ZSogcGFyZW50RnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgIC8vIHdvcnNlIGluIHRo
ZSBudW1iZXIgb2YgZnJhbWVzLCB3ZSdsbCBrZWVwIGl0IGF0IDIwMCBmb3Igbm93LgorICAgIGlm
IChGcmFtZSogcGFyZW50RnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIGlm
IChwYXJlbnRGcmFtZS0+cGFnZSgpLT5mcmFtZUNvdW50KCkgPiAyMDApCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gV2UgYWxsb3cgb25lIGxldmVsIG9mIHNlbGYt
cmVmZXJlbmNlIGJlY2F1c2Ugc29tZSBzaXRlcyBkZXBlbmQgb24gdGhhdC4KICAgICAvLyBCdXQg
d2UgZG9uJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZS4KICAgICBib29sIGZvdW5kU2VsZlJlZmVyZW5j
ZSA9IGZhbHNlOwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKLSAgICAgICAgS1VSTCBm
cmFtZVVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0gICAgICAgIGZyYW1lVVJMLnNldFJl
ZihEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICAgICAgaWYgKGZyYW1lVVJMID09IGNvbXBs
ZXRlVVJMKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nUmVmKGZyYW1lLT5sb2FkZXIoKS0+
dXJsKCksIGNvbXBsZXRlVVJMKSkgewogICAgICAgICAgICAgaWYgKGZvdW5kU2VsZlJlZmVyZW5j
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBmb3VuZFNlbGZS
ZWZlcmVuY2UgPSB0cnVlOwpAQCAtMTAwLDcgKzk2LDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50
QmFzZTo6b3BlblVSTCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX1VSTC5pc0VtcHR5
KCkpCi0gICAgICAgIG1fVVJMID0gImFib3V0OmJsYW5rIjsKKyAgICAgICAgbV9VUkwgPSBibGFu
a1VSTCgpLnN0cmluZygpOwogCiAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKTsKICAgICBpZiAoIXBhcmVudEZyYW1lKQpAQCAtMjAzLDcgKzE5OSw3IEBAIHZvaWQg
SFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpCiAgICAgICAgICAgICByZW5kZXJQYXJ0LT5z
ZXRXaWRnZXQoZnJhbWUtPnZpZXcoKSk7CiB9CiAKLVN0cmluZyBIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6bG9jYXRpb24oKSBjb25zdAorS1VSTCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bG9jYXRpb24o
KSBjb25zdAogewogICAgIHJldHVybiBzcmMoKTsKIH0KQEAgLTMwMiw3ICsyOTgsNyBAQCB2b2lk
IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRTY3JvbGxpbmcoCiAgICAgc2V0QXR0cmlidXRlKHNj
cm9sbGluZ0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
cmMoKSBjb25zdAorS1VSTCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c3JjKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsK
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiAzMDIzMSkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwICsxLDggQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhh
dXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDcgKzM4LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogCi0gICAgU3RyaW5nIGxvY2F0
aW9uKCkgY29uc3Q7CisgICAgS1VSTCBsb2NhdGlvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0TG9j
YXRpb24oY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBj
b25zdDsKQEAgLTc0LDcgKzcyLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBzY3JvbGxpbmcoKSBj
b25zdDsKICAgICB2b2lkIHNldFNjcm9sbGluZyhjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmlu
ZyBzcmMoKSBjb25zdDsKKyAgICBLVVJMIHNyYygpIGNvbnN0OwogICAgIHZvaWQgc2V0U3JjKGNv
bnN0IFN0cmluZyYpOwogCiAgICAgaW50IHdpZHRoKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSFRN
TEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgaWYgKGF0dHItPnZhbHVl
KCkuZG9tU3RyaW5nKClbMF0gPT0gJyMnKQogICAgICAgICAgICAgdXNlbWFwID0gYXR0ci0+dmFs
dWUoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdXNlbWFwID0gZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOworICAgICAgICAgICAgdXNlbWFwID0g
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpLnN0cmluZygp
OwogICAgICAgICBtX2lzTGluayA9ICFhdHRyLT5pc051bGwoKTsKICAgICB9IGVsc2UgaWYgKGF0
dHJOYW1lID09IGlzbWFwQXR0cikKICAgICAgICAgaXNtYXAgPSB0cnVlOwpAQCAtMzQyLDcgKzM0
Miw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SXNNYXAoYm9vbCBpc00KICAgICBzZXRB
dHRyaWJ1dGUoaXNtYXBBdHRyLCBpc01hcCA/ICIiIDogMCk7CiB9CiAKLVN0cmluZyBIVE1MSW1h
Z2VFbGVtZW50Ojpsb25nRGVzYygpIGNvbnN0CitLVVJMIEhUTUxJbWFnZUVsZW1lbnQ6OmxvbmdE
ZXNjKCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0
cmlidXRlKGxvbmdkZXNjQXR0cikpOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2V0TG9uZ0Rlc2MoY29uc3QKICAgICBzZXRBdHRyaWJ1dGUobG9uZ2Rlc2NB
dHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50Ojpsb3dzcmMoKSBjb25z
dAorS1VSTCBIVE1MSW1hZ2VFbGVtZW50Ojpsb3dzcmMoKSBjb25zdAogewogICAgIHJldHVybiBk
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUobG93c3JjQXR0cikpOwogfQpAQCAt
MzYyLDcgKzM2Miw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0TG93c3JjKGNvbnN0IFMK
ICAgICBzZXRBdHRyaWJ1dGUobG93c3JjQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTElt
YWdlRWxlbWVudDo6c3JjKCkgY29uc3QKK0tVUkwgSFRNTEltYWdlRWxlbWVudDo6c3JjKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNy
Y0F0dHIpKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMzAyMzEp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50
YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTIgKzIzLDEzIEBACiAjaWZuZGVmIEhUTUxJ
bWFnZUVsZW1lbnRfaAogI2RlZmluZSBIVE1MSW1hZ2VFbGVtZW50X2gKIAotI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CisKK2NsYXNzIEhUTUxGb3JtRWxlbWVu
dDsKIAogY2xhc3MgSFRNTEltYWdlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiAgICAg
ZnJpZW5kIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKQEAgLTYyLDggKzYxLDYgQEAgcHVibGljOgog
CiAgICAgU3RyaW5nIGFsdFRleHQoKSBjb25zdDsKIAotICAgIFN0cmluZyBpbWFnZU1hcCgpIGNv
bnN0IHsgcmV0dXJuIHVzZW1hcDsgfQotICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKIAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQpAQCAtOTMs
MTMgKzkwLDEzIEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRJc01hcChib29sKTsKIAotICAgIFN0cmluZyBsb25nRGVzYygpIGNvbnN0OworICAgIEtVUkwg
bG9uZ0Rlc2MoKSBjb25zdDsKICAgICB2b2lkIHNldExvbmdEZXNjKGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgU3RyaW5nIGxvd3NyYygpIGNvbnN0OworICAgIEtVUkwgbG93c3JjKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRMb3dzcmMoY29uc3QgU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgc3JjKCkgY29u
c3Q7CisgICAgS1VSTCBzcmMoKSBjb25zdDsKICAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcm
KTsKIAogICAgIFN0cmluZyB1c2VNYXAoKSBjb25zdDsKQEAgLTExNiw3ICsxMTMsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBjb21wbGV0ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBoYXZlRmlyZWRMb2Fk
RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlTG9hZGVyLmhhdmVGaXJlZExvYWRFdmVudCgp
OyB9Ci1wcm90ZWN0ZWQ6CisKK3ByaXZhdGU6CiAgICAgSFRNTEltYWdlTG9hZGVyIG1faW1hZ2VM
b2FkZXI7CiAgICAgU3RyaW5nIHVzZW1hcDsKICAgICBib29sIGlzbWFwOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDksNyArMTQ0OSw3IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0U2l6ZSh1bnNpZ25lZCAKICAgICBzZXRBdHRyaWJ1dGUo
c2l6ZUF0dHIsIFN0cmluZzo6bnVtYmVyKF9zaXplKSk7CiB9CiAKLVN0cmluZyBIVE1MSW5wdXRF
bGVtZW50OjpzcmMoKSBjb25zdAorS1VSTCBIVE1MSW5wdXRFbGVtZW50OjpzcmMoKSBjb25zdAog
ewogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0
cikpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiAzMDIzMSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEltYWdlTG9hZGVyOwor
Y2xhc3MgS1VSTDsKIGNsYXNzIFNlbGVjdGlvbjsKIAogY2xhc3MgSFRNTElucHV0RWxlbWVudCA6
IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsKQEAgLTE2Niw3ICsxNjcs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNpemUodW5zaWduZWQpOwogCi0gICAgU3RyaW5n
IHNyYygpIGNvbnN0OworICAgIEtVUkwgc3JjKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTcmMoY29u
c3QgU3RyaW5nJik7CiAKICAgICB2b2lkIHNldE1heExlbmd0aChpbnQpOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxM
aW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoqCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgor
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMSw2ICsxOSw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxM
aW5rRWxlbWVudC5oIgogCkBAIC0xMDgsNyArMTA3LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52
YWx1ZSgpKTsKICAgICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGhyZWZBdHRyKSB7Ci0gICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
cGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOworICAgICAgICBtX3VybCA9IGRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKS5zdHJpbmcoKTsKICAgICAgICAgcHJv
Y2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7CiAgICAg
ICAgIG1fdHlwZSA9IGF0dHItPnZhbHVlKCk7CkBAIC0xMzgsNyArMTM3LDggQEAgdm9pZCBIVE1M
TGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidQogICAgIGVsc2UgewogICAgICAgICAvLyBU
b2tlbml6ZSB0aGUgcmVsIGF0dHJpYnV0ZSBhbmQgc2V0IGJpdHMgYmFzZWQgb24gc3BlY2lmaWMg
a2V5d29yZHMgdGhhdCB3ZSBmaW5kLgogICAgICAgICByZWwucmVwbGFjZSgnXG4nLCAnICcpOwot
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gcmVsLnNwbGl0KCcgJyk7CisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGxpc3Q7CisgICAgICAgIHJlbC5zcGxpdCgnICcsIGxpc3QpOwogICAgICAg
ICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGlzdC5lbmQoKTsKICAgICAg
ICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKCppdCA9PSAic3R5bGVzaGVldCIp
CkBAIC0yNzQsNyArMjc0LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENoYXJzZXQoY29u
c3QgUwogICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcg
SFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QKK0tVUkwgSFRNTExpbmtFbGVtZW50OjpocmVm
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmli
dXRlKGhyZWZBdHRyKSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCShyZXZpc2lvbiAz
MDIzMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDE5ICsxOSwyMCBAQAogICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgSFRNTExpbmtFbGVtZW50
X2gKICNkZWZpbmUgSFRNTExpbmtFbGVtZW50X2gKIAotI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNo
ZWV0LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZENTU1N0eWxl
U2hlZXQ7CitjbGFzcyBLVVJMOwogCi1jbGFzcyBIVE1MTGlua0VsZW1lbnQgOiBwdWJsaWMgSFRN
TEVsZW1lbnQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudAoteworY2xhc3MgSFRNTExpbmtF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQg
ewogcHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudChEb2N1bWVudCopOwogICAgIH5IVE1MTGlu
a0VsZW1lbnQoKTsKQEAgLTQ3LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBjaGFyc2V0
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCi0gICAgU3Ry
aW5nIGhyZWYoKSBjb25zdDsKKyAgICBLVVJMIGhyZWYoKSBjb25zdDsKICAgICB2b2lkIHNldEhy
ZWYoY29uc3QgU3RyaW5nJik7CiAKICAgICBTdHJpbmcgaHJlZmxhbmcoKSBjb25zdDsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI2LDcgKzIy
Niw3IEBAIFBhc3NSZWZQdHI8TWVkaWFFcnJvcj4gSFRNTE1lZGlhRWxlbWVudDoKICAgICByZXR1
cm4gbV9lcnJvcjsKIH0KIAotU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OnNyYygpIGNvbnN0CitL
VVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNyYygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CkBAIC04MTksMTMgKzgx
OSwxMyBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6cGlja01lZGlhKCkKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE1lZGlhTUlNRVR5cGUo
dHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbWVkaWFTcmMgPSBzb3VyY2UtPnNyYygpOworICAgICAgICAg
ICAgICAgIG1lZGlhU3JjID0gc291cmNlLT5zcmMoKS5zdHJpbmcoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1lZGlh
U3JjLmlzRW1wdHkoKSkKLSAgICAgICAgbWVkaWFTcmMgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChtZWRpYVNyYyk7CisgICAgICAgIG1lZGlhU3JjID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
bWVkaWFTcmMpLnN0cmluZygpOwogICAgIHJldHVybiBtZWRpYVNyYzsKIH0KIApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYUVycm9yOwogY2xhc3MgVGltZVJhbmdlczsKK2NsYXNz
IEtVUkw7CiAgICAgCiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50
LCBwdWJsaWMgTWVkaWFQbGF5ZXJDbGllbnQgewogcHVibGljOgpAQCAtNzEsNyArNzIsNyBAQCBw
dWJsaWM6CiAgICAgUGFzc1JlZlB0cjxNZWRpYUVycm9yPiBlcnJvcigpIGNvbnN0OwogCiAvLyBu
ZXR3b3JrIHN0YXRlCi0gICAgU3RyaW5nIHNyYygpIGNvbnN0OworICAgIEtVUkwgc3JjKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGN1cnJlbnRT
cmMoKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2
aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5z
a2kgKDFTdGVpbkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjYw
LDcgKzI2MCw3IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxPYmplY3RFbGVtZW50OjoKIAog
Ym9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aXNJbWFnZVR5cGUoKQogewotICAgIGlmIChtX3NlcnZp
Y2VUeXBlLmlzRW1wdHkoKSAmJiBtX3VybC5zdGFydHNXaXRoKCJkYXRhOiIpKSB7CisgICAgaWYg
KG1fc2VydmljZVR5cGUuaXNFbXB0eSgpICYmIHByb3RvY29sSXMobV91cmwsICJkYXRhIikpIHsK
ICAgICAgICAgLy8gRXh0cmFjdCB0aGUgTUlNRSB0eXBlIGZyb20gdGhlIGRhdGEgVVJMLgogICAg
ICAgICBpbnQgaW5kZXggPSBtX3VybC5maW5kKCc7Jyk7CiAgICAgICAgIGlmIChpbmRleCA9PSAt
MSkKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRDb2RlVHlw
ZShjb25zCiAgICAgc2V0QXR0cmlidXRlKGNvZGV0eXBlQXR0ciwgdmFsdWUpOwogfQogCi1TdHJp
bmcgSFRNTE9iamVjdEVsZW1lbnQ6OmRhdGEoKSBjb25zdAorS1VSTCBIVE1MT2JqZWN0RWxlbWVu
dDo6ZGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdl
dEF0dHJpYnV0ZShkYXRhQXR0cikpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPYmplY3RF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJ
KHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjksNiArMjksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBIVE1MSW1hZ2VMb2FkZXI7CitjbGFzcyBLVVJMOwogCiBjbGFzcyBIVE1MT2JqZWN0RWxl
bWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudCB7CiBwdWJsaWM6CkBAIC03OSw3ICs4MCw3
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgY29kZVR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldENv
ZGVUeXBlKGNvbnN0IFN0cmluZyYpOwogICAgIAotICAgIFN0cmluZyBkYXRhKCkgY29uc3Q7Cisg
ICAgS1VSTCBkYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYpOwog
CiAgICAgYm9vbCBkZWNsYXJlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAbnlwb3AuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIEhUTUxP
cHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlCiAKIFN0cmluZyBIVE1MT3B0R3JvdXBFbGVt
ZW50Ojpncm91cExhYmVsVGV4dCgpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBpdGVt
VGV4dCA9IGdldEF0dHJpYnV0ZShsYWJlbEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBT
dHJpbmcgaXRlbVRleHQgPSBnZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKICAgICAKICAgICBpdGVt
VGV4dC5yZXBsYWNlKCdcXCcsIGRvY3VtZW50KCktPmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wo
KSk7CiAgICAgLy8gSW4gV2luSUUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMg
aWdub3JlZCBpbiBvcHRpb25zIGFuZCBvcHRncm91cHMuIFdlIG1hdGNoIHRoaXMgYmVoYXZpb3Iu
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3Nyw3ICsxNDc3LDkgQEAgdm9pZCBI
VE1MUGFyc2VyOjpyZXBvcnRFcnJvclRvQ29uc29sZShIVAogICAgIG1lc3NhZ2UucmVwbGFjZSgi
JXRhZzEiLCB0YWcxKTsKICAgICBtZXNzYWdlLnJlcGxhY2UoIiV0YWcyIiwgdGFnMik7CiAKLSAg
ICBwYWdlLT5jaHJvbWUoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShIVE1MTWVzc2FnZVNvdXJjZSwg
aXNXYXJuaW5nKGVycm9yQ29kZSkgPyBXYXJuaW5nTWVzc2FnZUxldmVsOiBFcnJvck1lc3NhZ2VM
ZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgZG9jdW1lbnQtPnVybCgpKTsKKyAgICBwYWdlLT5j
aHJvbWUoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShIVE1MTWVzc2FnZVNvdXJjZSwKKyAgICAgICAg
aXNXYXJuaW5nKGVycm9yQ29kZSkgPyBXYXJuaW5nTWVzc2FnZUxldmVsIDogRXJyb3JNZXNzYWdl
TGV2ZWwsCisgICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGRvY3VtZW50LT51cmwoKS5zdHJp
bmcoKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAkocmV2aXNp
b24gMzAyMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwICsxLDggQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw2ICsxOSw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAKQEAgLTQwLDcgKzM5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwogCi1IVE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoRG9j
dW1lbnQgKmRvYykKK0hUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChEb2N1bWVu
dCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQoc2NyaXB0VGFnLCBkb2MpCiAgICAgLCBtX2NhY2hl
ZFNjcmlwdCgwKQogICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpCkBAIC01NCw3ICs1Myw3
IEBAIEhUTUxTY3JpcHRFbGVtZW50Ojp+SFRNTFNjcmlwdEVsZW1lbnQoKQogICAgICAgICBtX2Nh
Y2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9CiAKLWJvb2wgSFRNTFNjcmlwdEVsZW1lbnQ6Omlz
VVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKK2Jvb2wgSFRNTFNjcmlwdEVsZW1l
bnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4g
YXR0ci0+bmFtZSgpID09IHNyY0F0dHI7CiB9CkBAIC02NSwxMSArNjQsMTEgQEAgdm9pZCBIVE1M
U2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKAogICAgIC8vIGFuZCB0aGUgc2NyaXB0IGVs
ZW1lbnQgaGFzIGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50CiAgICAgLy8gd2UgZXZhbHVh
dGUgdGhlIHNjcmlwdC4KICAgICBpZiAoIW1fY3JlYXRlZEJ5UGFyc2VyICYmIGluRG9jdW1lbnQo
KSAmJiBmaXJzdENoaWxkKCkpCi0gICAgICAgIGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCktPnVy
bCgpLCB0ZXh0KCkpOworICAgICAgICBldmFsdWF0ZVNjcmlwdChkb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSwgdGV4dCgpKTsKICAgICBIVE1MRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5n
ZWRCeVBhcnNlcik7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKICAgICBpZiAoYXR0ck5hbWUg
PT0gc3JjQXR0cikgewpAQCAtMTM5LDcgKzEzOCw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3UKICAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgZXZh
bHVhdGVTY3JpcHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KICAgICBTdHJpbmcgc2Ny
aXB0U3RyaW5nID0gdGV4dCgpOyAgICAKICAgICBpZiAoIXNjcmlwdFN0cmluZy5pc0VtcHR5KCkp
Ci0gICAgICAgIGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCktPnVybCgpLCBzY3JpcHRTdHJpbmcp
OworICAgICAgICBldmFsdWF0ZVNjcmlwdChkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgc2Ny
aXB0U3RyaW5nKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCgpCkBAIC0xNTQsNyArMTUzLDcgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSogbykKIHsKLSAgICBDYWNoZWRTY3JpcHQgKmNzID0gc3RhdGljX2Nhc3Q8Q2Fj
aGVkU2NyaXB0ICo+KG8pOworICAgIENhY2hlZFNjcmlwdCogY3MgPSBzdGF0aWNfY2FzdDxDYWNo
ZWRTY3JpcHQqPihvKTsKIAogICAgIEFTU0VSVChjcyA9PSBtX2NhY2hlZFNjcmlwdCk7CiAKQEAg
LTI0NSwxNCArMjQ0LDE0IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmV2YWx1YXRlU2NyaXB0
KGMKIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojp0ZXh0KCkgY29uc3QKIHsKLSAgICBTdHJp
bmcgdmFsID0gIiI7CisgICAgVmVjdG9yPFVDaGFyPiB2YWw7CiAgICAgCi0gICAgZm9yIChOb2Rl
ICpuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAo
Tm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbCArPSBzdGF0aWNfY2FzdDxU
ZXh0ICo+KG4pLT5kYXRhKCk7CisgICAgICAgICAgICBhcHBlbmQodmFsLCBzdGF0aWNfY2FzdDxU
ZXh0Kj4obiktPmRhdGEoKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiB2YWw7CisgICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQodmFsKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0
VGV4dChjb25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtMjY1LDkgKzI2NCw4IEBAIHZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBpZiAobnVtQ2hpbGRyZW4gPiAwKSB7CisgICAgaWYgKG51bUNoaWxkcmVuID4gMCkK
ICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICB9CiAgICAgCiAgICAgYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodmFsdWUuaW1wbCgpKSwgZWMpOwogfQpAQCAtMjc4
LDcgKzI3Niw3IEBAIFN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6aHRtbEZvcigpIGNvbnMKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldEh0bWxG
b3IoY29uc3QgU3RyaW5nICYvKnZhbHVlKi8pCit2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRI
dG1sRm9yKGNvbnN0IFN0cmluZyYgLyp2YWx1ZSovKQogewogICAgIC8vIERPTSBMZXZlbCAxIHNh
eXM6IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgogfQpAQCAtMjg5LDcgKzI4Nyw3IEBAIFN0cmlu
ZyBIVE1MU2NyaXB0RWxlbWVudDo6ZXZlbnQoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIAotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0RXZlbnQoY29uc3QgU3RyaW5nICYvKnZh
bHVlKi8pCit2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRFdmVudChjb25zdCBTdHJpbmcmIC8q
dmFsdWUqLykKIHsKICAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJl
IHVzZS4KIH0KQEAgLTMxNCw3ICszMTIsNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRE
ZWZlcihib29sIGRlCiAgICAgc2V0QXR0cmlidXRlKGRlZmVyQXR0ciwgZGVmZXIgPyAiIiA6IDAp
OwogfQogCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnNyYygpIGNvbnN0CitLVVJMIEhUTUxT
Y3JpcHRFbGVtZW50OjpzcmMoKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRF
bGVtZW50LmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjksNyAr
NjksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkZWZlcigpIGNvbnN0OwogICAgIHZvaWQgc2V0RGVm
ZXIoYm9vbCk7CiAKLSAgICBTdHJpbmcgc3JjKCkgY29uc3Q7CisgICAgS1VSTCBzcmMoKSBjb25z
dDsKICAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyB0eXBlKCkg
Y29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIApAQCAtNTYsNyArNTcsNyBAQCB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1CiAgICAgfQogfQogCi1TdHJpbmcgSFRNTFNvdXJjZUVsZW1lbnQ6OnNyYygp
IGNvbnN0CitLVVJMIEhUTUxTb3VyY2VFbGVtZW50OjpzcmMoKSBjb25zdAogewogICAgIHJldHVy
biBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxTb3VyY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxNSArMjksMTIgQEAK
ICNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgPGxpbWl0cz4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotICAgIAotY2xhc3MgTWVkaWFFcnJvcjsKLSAg
ICAKK2NsYXNzIEtVUkw7CisKIGNsYXNzIEhUTUxTb3VyY2VFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MU291cmNlRWxlbWVudChEb2N1bWVudCopOwpAQCAt
NDgsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7CiAgICAgCi0gICAgU3RyaW5nIHNyYygpIGNvbnN0OworICAgIEtVUkwgc3Jj
KCkgY29uc3Q7CiAgICAgU3RyaW5nIG1lZGlhKCkgY29uc3Q7CiAgICAgU3RyaW5nIHR5cGUoKSBj
b25zdDsKICAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsgICAgCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
VGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDcgKzM1MSw3IEBAIHZvaWQg
SFRNTFRhYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0cikgewogICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VV
UkwoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGFkZENTU0ltYWdlUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwg
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSk7CisgICAgICAgICAgICBhZGRDU1NJbWFnZVBy
b3BlcnR5KGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHVybCkuc3RyaW5nKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGZy
YW1lQXR0cikgewogICAgICAgICAvLyBDYWNoZSB0aGUgdmFsdWUgb2YgImZyYW1lIiBzbyB0aGF0
IHRoZSB0YWJsZSBjYW4gZXhhbWluZSBpdCBsYXRlci4KICAgICAgICAgbV9mcmFtZUF0dHIgPSBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MzAyMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXQKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYmFja2dyb3VuZEF0dHIpIHsK
ICAgICAgICAgU3RyaW5nIHVybCA9IHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBp
ZiAoIXVybC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIs
IENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkp
OworICAgICAgICAgICAgYWRkQ1NTSW1hZ2VQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JP
VU5EX0lNQUdFLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLnN0cmluZygpKTsKICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBib3JkZXJjb2xvckF0dHIpIHsKICAgICAgICAgaWYg
KCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYWRkQ1NTQ29sb3IoYXR0
ciwgQ1NTX1BST1BfQk9SREVSX0NPTE9SLCBhdHRyLT52YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcg
QEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZShjb25zdAogewogICAgIC8vIENv
ZGUgZWxzZXdoZXJlIG5vcm1hbGl6ZXMgbGluZSBlbmRpbmdzIGFkZGVkIGJ5IHRoZSB1c2VyIHZp
YSB0aGUga2V5Ym9hcmQgb3IgcGFzdGluZy4KICAgICAvLyBXZSBtdXN0IG5vcm1hbGl6ZSBsaW5l
IGVuZGluZ3MgY29taW5nIGZyb20gSlMuCi0gICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZVdpdGhO
b3JtYWxpemVkTGluZUVuZGluZ3MgPSB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3Ry
aW5nIHZhbHVlV2l0aE5vcm1hbGl6ZWRMaW5lRW5kaW5ncyA9IHZhbHVlOwogICAgIHZhbHVlV2l0
aE5vcm1hbGl6ZWRMaW5lRW5kaW5ncy5yZXBsYWNlKCJcclxuIiwgIlxuIik7CiAgICAgdmFsdWVX
aXRoTm9ybWFsaXplZExpbmVFbmRpbmdzLnJlcGxhY2UoIlxyIiwgIlxuIik7CiAgICAgCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDcgKzUxMCw3IEBAIEhUTUxU
b2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmkKICAgICBpZiAobV9mcmFnbWVudCB8
fCAhbV9kb2MtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBzdGF0ZTsKICAgICBtX2V4ZWN1dGlu
Z1NjcmlwdCsrOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsID0gc2NyaXB0VVJMLmlzTnVsbCgp
ID8gbV9kb2MtPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpIDogc2NyaXB0VVJMLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKKyAgICBTdHJpbmcgdXJsID0gc2NyaXB0VVJMLmlzTnVsbCgpID8gbV9kb2Mt
PmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpIDogc2NyaXB0VVJMOwogCiAgICAg
U2VnbWVudGVkU3RyaW5nICpzYXZlZFByZXBlbmRpbmdTcmMgPSBjdXJyZW50UHJlcGVuZGluZ1Ny
YzsKICAgICBTZWdtZW50ZWRTdHJpbmcgcHJlcGVuZGluZ1NyYzsKQEAgLTEyMjAsNyArMTIyMCw3
IEBAIEhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnBhcnMKICAgICAgICAgICAg
ICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9kb2MtPnNldHRpbmdzKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxl
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPSBjdXJyVG9rZW4uYXR0cnMt
PmdldEF0dHJpYnV0ZUl0ZW0oc3JjQXR0cikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmlwdFNyYyA9IG1fZG9jLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhLT52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0U3JjID0gbV9kb2MtPmNvbXBsZXRlVVJM
KHBhcnNlVVJMKGEtPnZhbHVlKCkpKS5zdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoYSA9IGN1cnJUb2tlbi5hdHRycy0+Z2V0QXR0cmlidXRlSXRlbShjaGFyc2V0QXR0cikp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdFNyY0NoYXJzZXQgPSBhLT52YWx1
ZSgpLmRvbVN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNjcmlwdFNyY0NoYXJzZXQuaXNFbXB0eSgpKQpAQCAtMTYxNSw4ICsxNjE1LDggQEAg
UGFzc1JlZlB0cjxOb2RlPiBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVAogICAgICAgICBqc1Byb3h5
LT5zZXRFdmVudEhhbmRsZXJMaW5lbm8odGFnU3RhcnRMaW5lbm8pOwogICAgIGlmIChkZXN0ID4g
YnVmZmVyKSB7CiAjaWZkZWYgVE9LRU5fREVCVUcKLSAgICAgICAgaWYoY3VyclRva2VuLnRhZ05h
bWUubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHFEZWJ1ZyggInVuZXhwZWN0ZWQgdG9rZW46ICVz
LCBzdHI6IColcyoiLCBjdXJyVG9rZW4udGFnTmFtZS5kZXByZWNhdGVkU3RyaW5nKCkubGF0aW4x
KCksRGVwcmVjYXRlZENvbnN0U3RyaW5nKCBidWZmZXIsZGVzdC1idWZmZXIgKS5kZXByZWNhdGVk
U3RyaW5nKCkubGF0aW4xKCkgKTsKKyAgICAgICAgaWYgKGN1cnJUb2tlbi50YWdOYW1lLmxlbmd0
aCgpKSB7CisgICAgICAgICAgICBxRGVidWcoICJ1bmV4cGVjdGVkIHRva2VuOiAlcywgc3RyOiAq
JXMqIiwgY3VyclRva2VuLnRhZ05hbWUubGF0aW4xKCkuZGF0YSgpLCBEZXByZWNhdGVkQ29uc3RT
dHJpbmcoYnVmZmVyLCBkZXN0LWJ1ZmZlcikuZGVwcmVjYXRlZFN0cmluZygpLmxhdGluMSgpKTsK
ICAgICAgICAgICAgIEFTU0VSVCgwKTsKICAgICAgICAgfQogCkBAIC0xNjM2LDcgKzE2MzYsNyBA
QCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUCiAjaWZkZWYgVE9LRU5f
REVCVUcKICAgICBEZXByZWNhdGVkU3RyaW5nIG5hbWUgPSBjdXJyVG9rZW4udGFnTmFtZS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CiAgICAgRGVwcmVjYXRlZFN0cmluZyB0ZXh0OwotICAgIGlmKGN1cnJU
b2tlbi50ZXh0KQorICAgIGlmIChjdXJyVG9rZW4udGV4dCkKICAgICAgICAgdGV4dCA9IERlcHJl
Y2F0ZWRDb25zdFN0cmluZyhjdXJyVG9rZW4udGV4dC0+dW5pY29kZSgpLCBjdXJyVG9rZW4udGV4
dC0+bGVuZ3RoKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAogICAgIGtkRGVidWcoIDYwMzYgKSA8
PCAiVG9rZW4gLS0+ICIgPDwgbmFtZSA8PCBlbmRsOwpAQCAtMTcxNyw3ICsxNzE3LDcgQEAgdm9p
ZCBIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZChDYWNoZQogICAgIC8vIGZpbGUgbG9hZHMg
d2VyZSBzZXJpYWxpemVkIGluIGxvd2VyIGxldmVsLgogICAgIC8vIEZJWE1FOiB0aGlzIHNob3Vs
ZCByZWFsbHkgYmUgZG9uZSBmb3IgYWxsIHNjcmlwdCBsb2FkcyBvciB0aGUgc2FtZSBlZmZlY3Qg
c2hvdWxkIGJlIGFjaGlldmVkIGJ5IG90aGVyCiAgICAgLy8gbWVhbnMsIGxpa2UgamF2YXNjcmlw
dCBzdXNwZW5kL3Jlc3VtZQotICAgIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyA9
ICFtX2RvYy0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgcGVuZGluZ1NjcmlwdHMuaGVhZCgp
LT51cmwoKS5zdGFydHNXaXRoKCJmaWxlOiIsIGZhbHNlKTsKKyAgICBtX2hhc1NjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHMgPSAhbV9kb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmIHBy
b3RvY29sSXMocGVuZGluZ1NjcmlwdHMuaGVhZCgpLT51cmwoKSwgImZpbGUiKTsKICAgICBpZiAo
bV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKQogICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBA
QCB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OmRldGFjaCgpCiAgICAgICAgICAgICBtX2ltYWdlTG9h
ZGVyLmNsZWFyKCk7CiB9CiAKLXZvaWQgSFRNTFZpZGVvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQordm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CiAKQEAgLTE0MCw3ICsxNDAsNyBA
QCB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnNldEhlaWdodChpbnQgdmFsCiAgICAgc2V0QXR0cmli
dXRlKGhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKLVN0cmluZyBIVE1M
VmlkZW9FbGVtZW50Ojpwb3N0ZXIoKSBjb25zdAorS1VSTCBIVE1MVmlkZW9FbGVtZW50Ojpwb3N0
ZXIoKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRy
aWJ1dGUocG9zdGVyQXR0cikpOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgSFRNTFZpZGVv
RWxlbWVudDo6c2V0UG9zdGVyKGNvbnN0IFMKICAgICBzZXRBdHRyaWJ1dGUocG9zdGVyQXR0ciwg
dmFsdWUpOwogfQogCi1ib29sIEhUTUxWaWRlb0VsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZSAqYXR0cikgY29uc3QKK2Jvb2wgSFRNTFZpZGVvRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKSBjb25zdAogewogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gcG9z
dGVyQXR0cjsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMzAyMzEp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgs
NyArNTgsNyBAQCBwdWJsaWM6CiAgICAgaW50IHZpZGVvV2lkdGgoKSBjb25zdDsKICAgICBpbnQg
dmlkZW9IZWlnaHQoKSBjb25zdDsKICAgICAKLSAgICBTdHJpbmcgcG9zdGVyKCkgY29uc3Q7Cisg
ICAgS1VSTCBwb3N0ZXIoKSBjb25zdDsKICAgICB2b2lkIHNldFBvc3Rlcihjb25zdCBTdHJpbmcm
KTsKIAogICAgIHZvaWQgdXBkYXRlUG9zdGVySW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9odG1s
L0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIz
LDggKzIzLDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRE9NSW1w
bGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJIVE1MVmlld1NvdXJjZURvY3VtZW50LmgiCisKKyNp
bmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIK
ICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVu
dC5oIgpAQCAtMzgsOCArMzksNyBAQAogI2luY2x1ZGUgIlRleHREb2N1bWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogCi1uYW1lc3BhY2UgV2ViQ29yZQoteworbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCkBAIC0yNDgsNyArMjQ4LDggQEAg
dm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRUZXh0KGNvbgogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBBZGQgaW4gdGhlIGNvbnRlbnQsIHNwbGl0dGluZyBvbiBuZXdsaW5lcy4KLSAg
ICBWZWN0b3I8U3RyaW5nPiBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJywgdHJ1ZSk7CisgICAgVmVj
dG9yPFN0cmluZz4gbGluZXM7CisgICAgdGV4dC5zcGxpdCgnXG4nLCB0cnVlLCBsaW5lcyk7CiAg
ICAgdW5zaWduZWQgc2l6ZSA9IGxpbmVzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgIFN0cmluZyBzdWJzdHJpbmcgPSBsaW5lc1tpXTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2xvYWRl
ci9Eb2NMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKIC8qCi0gICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLQogICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBDb3B5cmlnaHQgKEMp
IDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAK
ICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY1LDcgKzYzLDExIEBAIERvY0xvYWRlcjo6fkRvY0xvYWRl
cigpCiB2b2lkIERvY0xvYWRlcjo6Y2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSTCYgZnVsbFVSTCkK
IHsKICAgICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQotICAgICAgICByZXR1cm47IC8vRG9u
J3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nCisgICAgICAgIHJldHVybjsgLy8gRG9u
J3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBwYXN0aW5nCisKKyAgICBpZiAoZnVsbFVSTC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2NhY2hlUG9saWN5ID09IENhY2hl
UG9saWN5VmVyaWZ5KSB7CiAgICAgICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxs
VVJMLnN0cmluZygpKSkgewogICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNh
Y2hlKCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwuc3RyaW5nKCkpOwpAQCAtMTQxLDcgKzE0Myw3
IEBAIENhY2hlZFhCTERvY3VtZW50KiBEb2NMb2FkZXI6OnJlcXVlc3RYQkwKIAogQ2FjaGVkUmVz
b3VyY2UqIERvY0xvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcqIGNoYXJzZXQsIGJvb2wgc2tpcENh
bkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewotICAgIEtVUkwg
ZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAg
ICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVVUkwodXJsKTsKICAgICAKICAgICBpZiAo
Y2FjaGUoKS0+ZGlzYWJsZWQoKSkgewogICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVz
b3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2RvY1Jlc291cmNlcy5maW5kKGZ1bGxVUkwuc3RyaW5n
KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAkocmV2aXNp
b24gMzAyMzEpCisrKyBXZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCwxMiArMjgsOSBAQAogCiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMu
aCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MVGFibGVTZWN0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlQYXJzZXIuaCIKQEAgLTQxLDEyICsz
OCw2IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
ICNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCi0KLS8vIE9uIFdp
biwgdGhlIHRocmVhZHNhZmUgKl9yIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGdvdHRlbiBmcm9tIHB0
aHJlYWRzLiAKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiBVU0UoUFRIUkVBRFMpCi0jaW5jbHVkZSA8
cHRocmVhZC5oPgotI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRRGF0ZVRp
bWU+CkBAIC02MCw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAgICAgCiBj
bGFzcyBGVFBEaXJlY3RvcnlUb2tlbml6ZXIgOiBwdWJsaWMgSFRNTFRva2VuaXplciB7CiBwdWJs
aWM6Ci0gICAgRlRQRGlyZWN0b3J5VG9rZW5pemVyKEhUTUxEb2N1bWVudCogZG9jKTsKKyAgICBG
VFBEaXJlY3RvcnlUb2tlbml6ZXIoSFRNTERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wg
d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmREYXRhKTsKICAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoKCk7CkBAIC0xNDksNyArMTQwLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50
PiBGVFBEaXJlY3RvcnlUb2tlbml6ZQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgCi0g
ICAgU3RyaW5nIGZ1bGxVUkwgPSBtX2RvYy0+YmFzZVVSTCgpOworICAgIFN0cmluZyBmdWxsVVJM
ID0gbV9kb2MtPmJhc2VVUkwoKS5zdHJpbmcoKTsKICAgICBpZiAoZnVsbFVSTFtmdWxsVVJMLmxl
bmd0aCgpIC0gMV0gPT0gJy8nKQogICAgICAgICBmdWxsVVJMLmFwcGVuZChmaWxlbmFtZSk7CiAg
ICAgZWxzZQpAQCAtMzA3LDEwICsyOTgsNyBAQCB2b2lkIEZUUERpcmVjdG9yeVRva2VuaXplcjo6
cGFyc2VBbmRBcHBlCiB7CiAgICAgTGlzdFJlc3VsdCByZXN1bHQ7CiAKLSAgICBEZXByZWNhdGVk
U3RyaW5nIGRlcFN0cmluZyA9IGlucHV0TGluZS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgY29u
c3QgY2hhciogbGluZSA9IGRlcFN0cmluZy5hc2NpaSgpOwotICAgIAotICAgIEZUUEVudHJ5VHlw
ZSB0eXBlUmVzdWx0ID0gcGFyc2VPbmVGVFBMaW5lKGxpbmUsIG1fbGlzdFN0YXRlLCByZXN1bHQp
OworICAgIEZUUEVudHJ5VHlwZSB0eXBlUmVzdWx0ID0gcGFyc2VPbmVGVFBMaW5lKGlucHV0TGlu
ZS5sYXRpbjEoKS5kYXRhKCksIG1fbGlzdFN0YXRlLCByZXN1bHQpOwogICAgIAogICAgIC8vIEZU
UE1pc2NFbnRyeSBpcyBhIGNvbW1lbnQgb3IgdXNhZ2Ugc3RhdGlzdGljIHdoaWNoIHdlIGRvbid0
IGNhcmUgYWJvdXQsIGFuZCBqdW5rIGlzIGludmFsaWQgZGF0YSAtIGJhaWwgaW4gdGhlc2UgMiBj
YXNlcwogICAgIGlmICh0eXBlUmVzdWx0ID09IEZUUE1pc2NFbnRyeSB8fCB0eXBlUmVzdWx0ID09
IEZUUEp1bmtFbnRyeSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xs
dGVjaCBBU0EKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxMiw5ICs0MTIsOSBAQCBib29sIEZyYW1l
TG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lCiAgICAgLy8gU3VwcG9ydCBmb3IgPGZyYW1l
IHNyYz0iamF2YXNjcmlwdDpzdHJpbmciPgogICAgIEtVUkwgc2NyaXB0VVJMOwogICAgIEtVUkwg
dXJsOwotICAgIGlmICh1cmxTdHJpbmcuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkp
IHsKLSAgICAgICAgc2NyaXB0VVJMID0gdXJsU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAg
ICAgICAgdXJsID0gImFib3V0OmJsYW5rIjsKKyAgICBpZiAocHJvdG9jb2xJcyh1cmxTdHJpbmcs
ICJqYXZhc2NyaXB0IikpIHsKKyAgICAgICAgc2NyaXB0VVJMID0gS1VSTCh1cmxTdHJpbmcpOwor
ICAgICAgICB1cmwgPSBibGFua1VSTCgpOwogICAgIH0gZWxzZQogICAgICAgICB1cmwgPSBjb21w
bGV0ZVVSTCh1cmxTdHJpbmcpOwogCkBAIC00NzIsNyArNDcyLDcgQEAgRnJhbWUqIEZyYW1lTG9h
ZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYQogICAgIC8vIEZJWE1FOiBJbiB0aGlzIGNhc2UgdGhl
IEZyYW1lIHdpbGwgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGJlZm9yZSAKICAgICAvLyBpdCdzIGJl
aW5nIGFkZGVkIHRvIHRoZSBjaGlsZCBsaXN0LiBJdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0bwog
ICAgIC8vIGNyZWF0ZSB0aGUgY2hpbGQgZmlyc3QsIHRoZW4gaW52b2tlIHRoZSBsb2FkZXIgc2Vw
YXJhdGVseS4KLSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCB1cmwgPT0gImFib3V0OmJsYW5rIikg
eworICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8IHVybCA9PSBibGFua1VSTCgpKSB7CiAgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVkKCk7CiAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+
Y2hlY2tDb21wbGV0ZWQoKTsKICAgICB9CkBAIC01MDEsOCArNTAxLDcgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6c3VibWl0Rm9ybShjb25zdCBjaGFyKgogICAgIGlmICh1LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcgPSB1LmRlcHJlY2F0
ZWRTdHJpbmcoKTsKLSAgICBpZiAodXJsU3RyaW5nLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6Iiwg
ZmFsc2UpKSB7CisgICAgaWYgKHUucHJvdG9jb2xJcygiamF2YXNjcmlwdCIpKSB7CiAgICAgICAg
IG1faXNFeGVjdXRpbmdKYXZhU2NyaXB0Rm9ybUFjdGlvbiA9IHRydWU7CiAgICAgICAgIGV4ZWN1
dGVJZkphdmFTY3JpcHRVUkwodSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgbV9pc0V4ZWN1dGlu
Z0phdmFTY3JpcHRGb3JtQWN0aW9uID0gZmFsc2U7CkBAIC01MzIsMTEgKzUzMSwxMSBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqCiAgICAgICAgIFN0cmluZyBxdWVy
eSA9IHUucXVlcnkoKTsKICAgICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBxdWVyeS5hcHBlbmQoJyYnKTsKLSAgICAgICAgdS5zZXRRdWVyeSgocXVlcnkgKyBib2R5KS5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgICAgICB1LnNldFF1ZXJ5KHF1ZXJ5ICsgYm9keSk7CiAg
ICAgfQogCiAgICAgaWYgKHN0cmNtcChhY3Rpb24sICJHRVQiKSA9PSAwKSB7Ci0gICAgICAgIHUu
c2V0UXVlcnkoZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
CisgICAgICAgIHUuc2V0UXVlcnkoZm9ybURhdGEtPmZsYXR0ZW5Ub1N0cmluZygpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIWlzTWFpbHRvRm9ybSkKICAgICAgICAgICAgIGZyYW1lUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShmb3JtRGF0YS5nZXQoKSk7CkBAIC02
NDksMTYgKzY0OCwxNiBAQCBLVVJMIEZyYW1lTG9hZGVyOjppY29uVVJMKCkKIHsKICAgICAvLyBJ
ZiB0aGlzIGlzbid0IGEgdG9wIGxldmVsIGZyYW1lLCByZXR1cm4gbm90aGluZwogICAgIGlmICht
X2ZyYW1lLT50cmVlKCkgJiYgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgcmV0
dXJuICIiOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKwogICAgIC8vIElmIHdl
IGhhdmUgYW4gaWNvblVSTCBmcm9tIGEgTGluayBlbGVtZW50LCByZXR1cm4gdGhhdAogICAgIGlm
IChtX2ZyYW1lLT5kb2N1bWVudCgpICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5pY29uVVJMKCku
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNvblVSTCgp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBLVVJMKG1fZnJh
bWUtPmRvY3VtZW50KCktPmljb25VUkwoKSk7CisKICAgICAvLyBEb24ndCByZXR1cm4gYSBmYXZp
Y29uIGljb25VUkwgdW5sZXNzIHdlJ3JlIGh0dHAgb3IgaHR0cHMKLSAgICBpZiAobV9VUkwucHJv
dG9jb2woKSAhPSAiaHR0cCIgJiYgbV9VUkwucHJvdG9jb2woKSAhPSAiaHR0cHMiKQotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgICAgIAorICAgIGlmICghbV9VUkwucHJvdG9jb2xJcygiaHR0cCIp
ICYmICFtX1VSTC5wcm90b2NvbElzKCJodHRwcyIpKQorICAgICAgICByZXR1cm4gS1VSTCgpOwor
CiAgICAgS1VSTCB1cmw7CiAgICAgdXJsLnNldFByb3RvY29sKG1fVVJMLnByb3RvY29sKCkpOwog
ICAgIHVybC5zZXRIb3N0KG1fVVJMLmhvc3QoKSk7CkBAIC02ODcsNyArNjg2LDcgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6ZGlkT3BlblVSTChjb25zdCBLVVJMJgogICAgIG1fZnJhbWUtPnNldEpTRGVm
YXVsdFN0YXR1c0JhclRleHQoU3RyaW5nKCkpOwogCiAgICAgbV9VUkwgPSB1cmw7Ci0gICAgaWYg
KG1fVVJMLnByb3RvY29sKCkuc3RhcnRzV2l0aCgiaHR0cCIpICYmICFtX1VSTC5ob3N0KCkuaXNF
bXB0eSgpICYmIG1fVVJMLnBhdGgoKS5pc0VtcHR5KCkpCisgICAgaWYgKChtX1VSTC5wcm90b2Nv
bElzKCJodHRwIikgfHwgbV9VUkwucHJvdG9jb2xJcygiaHR0cHMiKSkgJiYgIW1fVVJMLmhvc3Qo
KS5pc0VtcHR5KCkgJiYgbV9VUkwucGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgbV9VUkwuc2V0
UGF0aCgiLyIpOwogICAgIG1fd29ya2luZ1VSTCA9IG1fVVJMOwogCkBAIC03MDksMTYgKzcwOCwx
NiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaWRFeHBsaWNpdE9wZW4oKQogICAgIC8vIENhbmNlbGxp
bmcgcmVkaXJlY3Rpb24gaGVyZSB3b3JrcyBmb3IgYWxsIGNhc2VzIGJlY2F1c2UgZG9jdW1lbnQu
b3BlbiAKICAgICAvLyBpbXBsaWNpdGx5IHByZWNlZGVzIGRvY3VtZW50LndyaXRlLgogICAgIGNh
bmNlbFJlZGlyZWN0aW9uKCk7IAotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSAh
PSAiYWJvdXQ6YmxhbmsiKQorICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSAhPSBi
bGFua1VSTCgpKQogICAgICAgICBtX1VSTCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOwog
fQogCiBib29sIEZyYW1lTG9hZGVyOjpleGVjdXRlSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwm
IHVybCwgYm9vbCB1c2VyR2VzdHVyZSwgYm9vbCByZXBsYWNlRG9jdW1lbnQpCiB7Ci0gICAgaWYg
KCF1cmwuZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2Up
KQorICAgIGlmICghdXJsLnByb3RvY29sSXMoImphdmFzY3JpcHQiKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgU3RyaW5nIHNjcmlwdCA9IEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRl
cHJlY2F0ZWRTdHJpbmcoKS5taWQoc3RybGVuKCJqYXZhc2NyaXB0OiIpKSk7CisgICAgU3RyaW5n
IHNjcmlwdCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5n
KHN0cmxlbigiamF2YXNjcmlwdDoiKSkpOwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4ZWN1dGVT
Y3JpcHQoc2NyaXB0LCB1c2VyR2VzdHVyZSk7CiAKICAgICBTdHJpbmcgc2NyaXB0UmVzdWx0OwpA
QCAtODU5LDcgKzg1OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkRmlyc3REYXRhKCkK
ICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgdXJsID0gbV9VUkwuc3RyaW5nKCk7CiAg
ICAgZWxzZQotICAgICAgICB1cmwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmwpOworICAgICAgICB1cmwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwp
LnN0cmluZygpOwogCiAgICAgc2NoZWR1bGVIVFRQUmVkaXJlY3Rpb24oZGVsYXksIHVybCk7CiB9
CkBAIC04OTcsMjMgKzg5NiwyMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpiZWdpbihjb25zdCBLVVJM
JiB1cmwsCiAgICAgbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IG1fY3JlYXRp
bmdJbml0aWFsRW1wdHlEb2N1bWVudDsKIAogICAgIEtVUkwgcmVmKHVybCk7Ci0gICAgcmVmLnNl
dFVzZXIoRGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICByZWYuc2V0UGFzcyhEZXByZWNhdGVkU3Ry
aW5nKCkpOwotICAgIHJlZi5zZXRSZWYoRGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICByZWYuc2V0
VXNlcihTdHJpbmcoKSk7CisgICAgcmVmLnNldFBhc3MoU3RyaW5nKCkpOworICAgIHJlZi5zZXRS
ZWYoU3RyaW5nKCkpOwogICAgIG1fb3V0Z29pbmdSZWZlcnJlciA9IHJlZi5zdHJpbmcoKTsKICAg
ICBtX1VSTCA9IHVybDsKLSAgICBLVVJMIGJhc2V1cmw7Ci0KKyAgICBLVVJMIGJhc2VVUkw7CiAg
ICAgaWYgKCFtX1VSTC5pc0VtcHR5KCkpCi0gICAgICAgIGJhc2V1cmwgPSBtX1VSTDsKKyAgICAg
ICAgYmFzZVVSTCA9IG1fVVJMOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IERP
TUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgpLT5jcmVhdGVEb2N1bWVudChtX3Jlc3BvbnNlTUlN
RVR5cGUsIG1fZnJhbWUsIG1fZnJhbWUtPmluVmlld1NvdXJjZU1vZGUoKSk7CiAgICAgbV9mcmFt
ZS0+c2V0RG9jdW1lbnQoZG9jdW1lbnQpOwogCi0gICAgZG9jdW1lbnQtPnNldFVSTChtX1VSTC5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgIGRvY3VtZW50LT5zZXRVUkwobV9VUkwpOwogICAgIC8v
IFdlIHByZWZlciBtX2Jhc2VVUkwgb3ZlciBtX1VSTCBiZWNhdXNlIG1fVVJMIGNoYW5nZXMgd2hl
biB3ZSBhcmUKICAgICAvLyBhYm91dCB0byBsb2FkIGEgbmV3IHBhZ2UuCi0gICAgZG9jdW1lbnQt
PnNldEJhc2VVUkwoYmFzZXVybC5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIGRvY3VtZW50LT5z
ZXRCYXNlVVJMKGJhc2VVUkwpOwogICAgIGlmIChtX2RlY29kZXIpCiAgICAgICAgIGRvY3VtZW50
LT5zZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7CiAgICAgaWYgKGZvcmNlZFNlY3VyaXR5T3Jp
Z2luKQpAQCAtMTE4NSwyMSArMTE4MywxOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3JlRG9j
dW1lbnRTdGF0ZSgpCiB2b2lkIEZyYW1lTG9hZGVyOjpnb3RvQW5jaG9yKCkKIHsKICAgICAvLyBJ
ZiBvdXIgVVJMIGhhcyBubyByZWYsIHRoZW4gd2UgaGF2ZSBubyBwbGFjZSB3ZSBuZWVkIHRvIGp1
bXAgdG8uCi0gICAgLy8gT1RPSCBpZiBjc3MgdGFyZ2V0IHdhcyBzZXQgcHJldmlvdXNseSwgd2Ug
d2FudCB0byBzZXQgaXQgdG8gMCwgcmVjYWxjCisgICAgLy8gT1RPSCBJZiBDU1MgdGFyZ2V0IHdh
cyBzZXQgcHJldmlvdXNseSwgd2Ugd2FudCB0byBzZXQgaXQgdG8gMCwgcmVjYWxjCiAgICAgLy8g
YW5kIHBvc3NpYmx5IHJlcGFpbnQgYmVjYXVzZSA6dGFyZ2V0IHBzZXVkbyBjbGFzcyBtYXkgaGF2
ZSBiZWVuCi0gICAgLy8gc2V0KFNlZSBidWcgMTEzMjEpCi0gICAgaWYgKCFtX1VSTC5oYXNSZWYo
KSAmJgotICAgICAgICAhKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Z2V0Q1NTVGFyZ2V0KCkpKQorICAgIC8vIHNldCAoc2VlIGJ1ZyAxMTMyMSkuCisgICAgaWYg
KCFtX1VSTC5oYXNSZWYoKSAmJiAhKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+Z2V0Q1NTVGFyZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHJlZiA9IG1fVVJMLmVuY29kZWRIdG1sUmVmKCk7Ci0gICAgaWYgKCFnb3RvQW5j
aG9yKHJlZikpIHsKLSAgICAgICAgLy8gQ2FuJ3QgdXNlIGh0bWxSZWYoKSBoZXJlIGJlY2F1c2Ug
aXQgZG9lc24ndCBrbm93IHdoaWNoIGVuY29kaW5nIHRvIHVzZSB0byBkZWNvZGUuCi0gICAgICAg
IC8vIERlY29kaW5nIGhlcmUgaGFzIHRvIG1hdGNoIGVuY29kaW5nIGluIGNvbXBsZXRlVVJMLCB3
aGljaCBtZWFucyBpdCBoYXMgdG8gdXNlIHRoZQotICAgICAgICAvLyBwYWdlJ3MgZW5jb2Rpbmcg
cmF0aGVyIHRoYW4gVVRGLTguCi0gICAgICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgICAgICBn
b3RvQW5jaG9yKEtVUkw6OmRlY29kZV9zdHJpbmcocmVmLCBtX2RlY29kZXItPmVuY29kaW5nKCkp
KTsKLSAgICB9CisgICAgU3RyaW5nIHJlZiA9IG1fVVJMLnJlZigpOworICAgIGlmIChnb3RvQW5j
aG9yKHJlZikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRyeSBhZ2FpbiBhZnRlciBkZWNv
ZGluZyB0aGUgcmVmLCBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBlbmNvZGluZy4KKyAgICBpZiAo
bV9kZWNvZGVyKQorICAgICAgICBnb3RvQW5jaG9yKGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhy
ZWYsIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKSkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpmaW5p
c2hlZFBhcnNpbmcoKQpAQCAtMTMyNiw3ICsxMzIyLDcgQEAgU3RyaW5nIEZyYW1lTG9hZGVyOjpi
YXNlVGFyZ2V0KCkgY29uc3QKIEtVUkwgRnJhbWVMb2FkZXI6OmNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKQogewogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICByZXR1
cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKS5kZXByZWNhdGVkU3RyaW5n
KCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCk7CiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlSFRUUFJlZGlyZWN0aW9uKGRvdWJsZSBkZWxh
eSwgY29uc3QgU3RyaW5nJiB1cmwpCkBAIC0xMzQzLDggKzEzMzksOCBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlCiB7ICAgIAogICAgIC8vIElmIHRoZSBVUkwgd2Un
cmUgZ29pbmcgdG8gbmF2aWdhdGUgdG8gaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgb25lLCBl
eGNlcHQgZm9yIHRoZQogICAgIC8vIGZyYWdtZW50IHBhcnQsIHdlIGRvbid0IG5lZWQgdG8gc2No
ZWR1bGUgdGhlIGxvY2F0aW9uIGNoYW5nZS4KLSAgICBLVVJMIHUodXJsLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7Ci0gICAgaWYgKHUuaGFzUmVmKCkgJiYgZXF1YWxJZ25vcmluZ1JlZihtX1VSTCwgdSkp
IHsKKyAgICBLVVJMIHBhcnNlZFVSTCh1cmwpOworICAgIGlmIChwYXJzZWRVUkwuaGFzUmVmKCkg
JiYgZXF1YWxJZ25vcmluZ1JlZihtX1VSTCwgcGFyc2VkVVJMKSkgewogICAgICAgICBjaGFuZ2VM
b2NhdGlvbih1cmwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgd2FzVXNlckdlc3R1cmUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc3MCw3ICsxNzY2LDcgQEAgYm9vbCBGcmFtZUxvYWRl
cjo6Y2FuQ2FjaGVQYWdlKCkKICAgICAgICAgLy8gdGhleSB3b3VsZCBuZWVkIHRvIGJlIGRlc3Ry
b3llZCBhbmQgdGhlbiByZWNyZWF0ZWQsIGFuZCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4g
cmVjcmVhdGUKICAgICAgICAgLy8gdGhlIHJpZ2h0IE5QT2JqZWN0cy4gU2VlIDxyZGFyOi8vcHJv
YmxlbS81MTk3MDQxPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgJiYgIW1fY29udGFp
bnNQbHVnSW5zCi0gICAgICAgICYmICFtX1VSTC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHBz
IikKKyAgICAgICAgJiYgIW1fVVJMLnByb3RvY29sSXMoImh0dHBzIikKICAgICAgICAgJiYgbV9m
cmFtZS0+ZG9jdW1lbnQoKQogICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXBwbGV0
cygpLT5sZW5ndGgoKQogICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFzV2luZG93
RXZlbnRMaXN0ZW5lcih1bmxvYWRFdmVudCkKQEAgLTE3OTUsMTUgKzE3OTEsMTUgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6dXBkYXRlUG9saWN5QmFzZVVSTCgpCiAgICAgaWYgKG1fZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCkgJiYgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKS0+ZG9jdW1lbnQoKSkKICAg
ICAgICAgc2V0UG9saWN5QmFzZVVSTChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT5kb2N1bWVu
dCgpLT5wb2xpY3lCYXNlVVJMKCkpOwogICAgIGVsc2UKLSAgICAgICAgc2V0UG9saWN5QmFzZVVS
TChtX1VSTC5zdHJpbmcoKSk7CisgICAgICAgIHNldFBvbGljeUJhc2VVUkwobV9VUkwpOwogfQog
Ci12b2lkIEZyYW1lTG9hZGVyOjpzZXRQb2xpY3lCYXNlVVJMKGNvbnN0IFN0cmluZyYgcykKK3Zv
aWQgRnJhbWVMb2FkZXI6OnNldFBvbGljeUJhc2VVUkwoY29uc3QgS1VSTCYgdXJsKQogewogICAg
IGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5z
ZXRQb2xpY3lCYXNlVVJMKHMpOworICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRQb2xp
Y3lCYXNlVVJMKHVybCk7CiAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCkt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgY2hpbGQtPmxvYWRlcigpLT5zZXRQb2xpY3lCYXNlVVJMKHMpOworICAgICAg
ICBjaGlsZC0+bG9hZGVyKCktPnNldFBvbGljeUJhc2VVUkwodXJsKTsKIH0KIAogLy8gVGhpcyBk
b2VzIHRoZSBzYW1lIGtpbmQgb2Ygd29yayB0aGF0IEZyYW1lTG9hZGVyOjpvcGVuVVJMIGRvZXMs
IGV4Y2VwdCBpdCByZWxpZXMgb24gdGhlIGZhY3QKQEAgLTE4NDcsNyArMTg0Myw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OnN0YXJ0UmVkaXJlY3Rpb25UaW1lcigKICAgICAgICAgY2FzZSBTY2hlZHVs
ZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OmxvY2F0aW9uQ2hhbmdlOgogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
Ojpsb2NhdGlvbkNoYW5nZUR1cmluZ0xvYWQ6Ci0gICAgICAgICAgICBjbGllbnRSZWRpcmVjdGVk
KG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnVybC5kZXByZWNhdGVkU3RyaW5nKCksCisgICAgICAg
ICAgICBjbGllbnRSZWRpcmVjdGVkKEtVUkwobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dXJsKSwK
ICAgICAgICAgICAgICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5kZWxheSwKICAgICAgICAg
ICAgICAgICBjdXJyZW50VGltZSgpICsgbV9yZWRpcmVjdGlvblRpbWVyLm5leHRGaXJlSW50ZXJ2
YWwoKSwKICAgICAgICAgICAgICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5sb2NrSGlzdG9y
eSwKQEAgLTE5NDYsNyArMTk0Miw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWQoY29uc3QgRnJh
bWVMb2FkUmUKICAgICAgICAgcmVmZXJyZXIgPSBtX291dGdvaW5nUmVmZXJyZXI7CiAgCiAgICAg
QVNTRVJUKGZyYW1lKCktPmRvY3VtZW50KCkpOwotICAgIGlmICh1cmwuZGVwcmVjYXRlZFN0cmlu
ZygpLnN0YXJ0c1dpdGgoImZpbGU6IiwgZmFsc2UpKSB7CisgICAgaWYgKHVybC5wcm90b2NvbElz
KCJmaWxlIikpIHsKICAgICAgICAgaWYgKCFjYW5Mb2FkKHVybCwgZnJhbWUoKS0+ZG9jdW1lbnQo
KSkgJiYgIWNhbkxvYWQodXJsLCByZWZlcnJlcikpIHsKICAgICAgICAgICAgIEZyYW1lTG9hZGVy
OjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZS0+cGFnZSgpLCB1cmwuc3RyaW5nKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjE3Miw4ICsyMTY4LDggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKAogCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRIaWRl
UmVmZXJyZXIoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKQogewotICAg
IGJvb2wgcmVmZXJyZXJJc1NlY3VyZVVSTCA9IHJlZmVycmVyLnN0YXJ0c1dpdGgoImh0dHBzOiIs
IGZhbHNlKTsKLSAgICBib29sIHJlZmVycmVySXNXZWJVUkwgPSByZWZlcnJlcklzU2VjdXJlVVJM
IHx8IHJlZmVycmVyLnN0YXJ0c1dpdGgoImh0dHA6IiwgZmFsc2UpOworICAgIGJvb2wgcmVmZXJy
ZXJJc1NlY3VyZVVSTCA9IHByb3RvY29sSXMocmVmZXJyZXIsICJodHRwcyIpOworICAgIGJvb2wg
cmVmZXJyZXJJc1dlYlVSTCA9IHJlZmVycmVySXNTZWN1cmVVUkwgfHwgcHJvdG9jb2xJcyhyZWZl
cnJlciwgImh0dHAiKTsKIAogICAgIGlmICghcmVmZXJyZXJJc1dlYlVSTCkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMTgxLDcgKzIxNzcsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRI
aWRlUmVmZXJyZXIoY29uCiAgICAgaWYgKCFyZWZlcnJlcklzU2VjdXJlVVJMKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIFVSTElzU2VjdXJlVVJMID0gdXJsLmRlcHJlY2F0ZWRT
dHJpbmcoKS5zdGFydHNXaXRoKCJodHRwczoiLCBmYWxzZSk7CisgICAgYm9vbCBVUkxJc1NlY3Vy
ZVVSTCA9IHVybC5wcm90b2NvbElzKCJodHRwcyIpOwogCiAgICAgcmV0dXJuICFVUkxJc1NlY3Vy
ZVVSTDsKIH0KQEAgLTIzNTgsNyArMjM1NCw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZEFs
bG93TmF2aWdhdGlvbigKICAgICAgICAgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50ID0gdGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGVycm9yIG1lc3NhZ2Ug
c2hvdWxkIGNvbnRhaW4gbW9yZSBzcGVjaWZpY3Mgb2Ygd2h5IHRoZSBuYXZpZ2F0aW9uIGNoYW5n
ZSBpcyBub3QgYWxsb3dlZC4KICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1h
dCgiVW5zYWZlIEphdmFTY3JpcHQgYXR0ZW1wdCB0byBpbml0aWF0ZSBhIG5hdmlnYXRpb24gY2hh
bmdlIGZvciBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLlxuIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXREb2N1bWVudC0+dXJs
KCkudXRmOCgpLmRhdGEoKSwgYWN0aXZlRG9jdW1lbnQtPnVybCgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgdGFyZ2V0RG9jdW1lbnQtPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IGFjdGl2ZURvY3VtZW50LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgICAg
ICBpZiAoS0pTOjpJbnRlcnByZXRlcjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCiAgICAgICAg
ICAgICBwcmludGYoIiVzIiwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKQEAgLTI1NTgsNyArMjU1
NCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgKICAgICAgICAg
aWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgICAgICB1cmwgPSBwZGwtPnJlc3BvbnNlVVJMKCk7
CiAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgdXJsID0gImFib3V0OmJs
YW5rIjsKKyAgICAgICAgICAgIHVybCA9IGJsYW5rVVJMKCk7CiAKICAgICAgICAgZGlkT3BlblVS
TCh1cmwpOwogICAgIH0KQEAgLTI3NDgsNyArMjc0NCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6Om9w
ZW4oQ2FjaGVkUGFnZSYgY2FjaGUKIAogICAgIEtVUkwgdXJsID0gY2FjaGVkUGFnZS51cmwoKTsK
IAotICAgIGlmICh1cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJodHRwIikgJiYgIXVybC5ob3N0
KCkuaXNFbXB0eSgpICYmIHVybC5wYXRoKCkuaXNFbXB0eSgpKQorICAgIGlmICgodXJsLnByb3Rv
Y29sSXMoImh0dHAiKSB8fCB1cmwucHJvdG9jb2xJcygiaHR0cHMiKSkgJiYgIXVybC5ob3N0KCku
aXNFbXB0eSgpICYmIHVybC5wYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICB1cmwuc2V0UGF0aCgi
LyIpOwogICAgIAogICAgIG1fVVJMID0gdXJsOwpAQCAtMzgyNiw5ICszODIyLDkgQEAgUGFzc1Jl
ZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZQogICAgIC8vIExhdGVyIHdlIG1heSB3
YW50IHRvIGxlYXJuIHRvIGxpdmUgd2l0aCBuaWwgZm9yIFVSTC4KICAgICAvLyBTZWUgYnVnIDMz
NjgyMzYgYW5kIHJlbGF0ZWQgYnVncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICBpZiAodXJs
LmlzRW1wdHkoKSkgCi0gICAgICAgIHVybCA9IEtVUkwoImFib3V0OmJsYW5rIik7CisgICAgICAg
IHVybCA9IGJsYW5rVVJMKCk7CiAgICAgaWYgKG9yaWdpbmFsVVJMLmlzRW1wdHkoKSkKLSAgICAg
ICAgb3JpZ2luYWxVUkwgPSBLVVJMKCJhYm91dDpibGFuayIpOworICAgICAgICBvcmlnaW5hbFVS
TCA9IGJsYW5rVVJMKCk7CiAgICAgCiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbmV3
IEhpc3RvcnlJdGVtKHVybCwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCksIG1fZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCkgPyBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT50cmVlKCktPm5hbWUoKSA6
ICIiLCBkb2NMb2FkZXIgPyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIik7CiAgICAgaXRlbS0+c2V0
T3JpZ2luYWxVUkxTdHJpbmcob3JpZ2luYWxVUkwuc3RyaW5nKCkpOwpAQCAtNDU3NSw3ICs0NTcx
LDcgQEAgV2lkZ2V0KiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZAogICAgIH0KICAg
ICAKICAgICBpZiAoYmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGJhc2VVUkxTdHJp
bmcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7CisgICAgICAgIGJhc2VVUkxTdHJp
bmcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5nKCk7CiAgICAgS1VSTCBi
YXNlVVJMID0gY29tcGxldGVVUkwoYmFzZVVSTFN0cmluZyk7CiAKICAgICByZXR1cm4gbV9jbGll
bnQtPmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoc2l6ZSwgZWxlbWVudCwgYmFzZVVSTCwgcGFyYW1O
YW1lcywgcGFyYW1WYWx1ZXMpOwpAQCAtNDc5Miw4ICs0Nzg4LDggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6c3dpdGNoT3V0TG93QmFuZHdpZHRoRAogICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBu
ZXdEb2MgPSBET01JbXBsZW1lbnRhdGlvbjo6aW5zdGFuY2UoKS0+CiAgICAgICAgICAgICAgICAg
Y3JlYXRlRG9jdW1lbnQobV9yZXNwb25zZU1JTUVUeXBlLCBtX2ZyYW1lLCBtX2ZyYW1lLT5pblZp
ZXdTb3VyY2VNb2RlKCkpOwogICAgICAgICAgICAgbV9mcmFtZS0+c2V0RG9jdW1lbnQobmV3RG9j
KTsKLSAgICAgICAgICAgIG5ld0RvYy0+c2V0VVJMKG1fVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
Ci0gICAgICAgICAgICBuZXdEb2MtPnNldEJhc2VVUkwobV9VUkwuZGVwcmVjYXRlZFN0cmluZygp
KTsKKyAgICAgICAgICAgIG5ld0RvYy0+c2V0VVJMKG1fVVJMKTsKKyAgICAgICAgICAgIG5ld0Rv
Yy0+c2V0QmFzZVVSTChtX1VSTCk7CiAgICAgICAgICAgICBpZiAobV9kZWNvZGVyKQogICAgICAg
ICAgICAgICAgIG5ld0RvYy0+c2V0RGVjb2RlcihtX2RlY29kZXIuZ2V0KCkpOwogICAgICAgICAg
ICAgcmVzdG9yZURvY3VtZW50U3RhdGUoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNp
b24gMzAyMzEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NzgsNyArNDc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJl
Y2VpdmVkRmlyc3REYXRhKCk7CiAKICAgICAgICAgdm9pZCB1cGRhdGVQb2xpY3lCYXNlVVJMKCk7
Ci0gICAgICAgIHZvaWQgc2V0UG9saWN5QmFzZVVSTChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAg
dm9pZCBzZXRQb2xpY3lCYXNlVVJMKGNvbnN0IEtVUkwmKTsKIAogICAgICAgICAvLyBBbHNvIG5v
dCBjb29sLgogICAgICAgICB2b2lkIHN0b3BMb2FkaW5nU3ViZnJhbWVzKCk7CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2xvYWRlci9J
bWFnZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY3LDcgKzE2Nyw3
IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3QKICAgICAKICAgICBp
bWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsICItd2Via2l0LXVzZXItc2VsZWN0
OiBub25lIik7ICAgICAgICAKICAgICBpbWFnZUVsZW1lbnQtPnNldExvYWRNYW51YWxseSh0cnVl
KTsKLSAgICBpbWFnZUVsZW1lbnQtPnNldFNyYyh1cmwoKSk7CisgICAgaW1hZ2VFbGVtZW50LT5z
ZXRTcmModXJsKCkuc3RyaW5nKCkpOwogICAgIAogICAgIGJvZHktPmFwcGVuZENoaWxkKGltYWdl
RWxlbWVudCwgZWMpOwogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkocmV2
aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNyArODgsNyBAQCB2b2lkIFBsdWdpblRva2VuaXplcjo6
Y3JlYXRlRG9jdW1lbnRTdHJ1CiAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShoZWln
aHRBdHRyLCAiMTAwJSIpOwogICAgIAogICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
bmFtZUF0dHIsICJwbHVnaW4iKTsKLSAgICBtX2VtYmVkRWxlbWVudC0+c2V0U3JjKG1fZG9jLT51
cmwoKSk7CisgICAgbV9lbWJlZEVsZW1lbnQtPnNldFNyYyhtX2RvYy0+dXJsKCkuc3RyaW5nKCkp
OwogICAgIG1fZW1iZWRFbGVtZW50LT5zZXRUeXBlKG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+
cmVzcG9uc2VNSU1FVHlwZSgpKTsKICAgICAKICAgICBib2R5LT5hcHBlbmRDaGlsZChlbWJlZEVs
ZW1lbnQsIGVjKTsgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2Vi
Q29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgICAg
Q29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC03NCwxMyArNzQsMTAgQEAgdm9pZCBMb2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKCkK
ICAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2VwdChyZXEtPmNhY2hlZFJlc291cmNlKCkt
PmFjY2VwdCgpKTsKIAogICAgICAgICBLVVJMIHIgPSBkbC0+ZG9jKCktPnVybCgpOwotICAgICAg
ICBpZiAoci5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiByLnBhdGgoKS5pc0VtcHR5
KCkpCisgICAgICAgIGlmICgoci5wcm90b2NvbElzKCJodHRwIikgfHwgci5wcm90b2NvbElzKCJo
dHRwcyIpKSAmJiByLnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByLnNldFBhdGgoIi8i
KTsKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIoci5zdHJpbmcoKSk7Ci0gICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgZG9tYWluID0gci5ob3N0KCk7Ci0gICAgICAgIGlmIChkbC0+ZG9j
KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgICAgICBkb21haW4gPSBzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnQqPihkbC0+ZG9jKCkpLT5kb21haW4oKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0g
ICAgICAgIAorCiAgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3Vi
cmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShkbC0+ZG9jKCktPmZyYW1lKCksCiAgICAgICAgICAgICB0
aGlzLCByZXF1ZXN0LCByZXEtPnNob3VsZFNraXBDYW5Mb2FkQ2hlY2soKSwgcmVxLT5zZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2UuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDEzICsyMTgsMTEgQEAgdm9pZCBJY29uRGF0
YWJhc2U6OnJlbW92ZUFsbEljb25zKCkKIEltYWdlKiBJY29uRGF0YWJhc2U6Omljb25Gb3JQYWdl
VVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTE9yaWdpbmFsLCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIGNhY2hlKQogeyAgIAogICAgIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKTsKLSAgICAKLSAg
ICBBU1NFUlQoIXBhZ2VVUkxPcmlnaW5hbC5pc051bGwoKSk7CiAKLSAgICAvLyBwYWdlVVJMT3Jp
Z2luYWwgY2FuIG5vdCBiZSBzdG9yZWQgd2l0aG91dCBiZWluZyBkZWVwIGNvcGllZCBmaXJzdC4g
IAorICAgIC8vIHBhZ2VVUkxPcmlnaW5hbCBjYW5ub3QgYmUgc3RvcmVkIHdpdGhvdXQgYmVpbmcg
ZGVlcCBjb3BpZWQgZmlyc3QuICAKICAgICAvLyBXZSBzaG91bGQgZ28gb3VyIG9mIG91ciB3YXkg
dG8gb25seSBjb3B5IGl0IGlmIHdlIGhhdmUgdG8gc3RvcmUgaXQKICAgICAKLSAgICBpZiAoIWlz
T3BlbigpKQorICAgIGlmICghaXNPcGVuKCkgfHwgcGFnZVVSTE9yaWdpbmFsLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGRlZmF1bHRJY29uKHNpemUpOwogCiAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdXJsQW5kSWNvbkxvY2spOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmgJKHJl
dmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTUgKzI2LDE2IEBACiAjaWZuZGVmIEljb25Mb2FkZXJf
aAogI2RlZmluZSBJY29uTG9hZGVyX2gKIAotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJT
dWJyZXNvdXJjZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZyYW1lOworY2xhc3MgS1VSTDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
IAogY2xhc3MgSWNvbkxvYWRlciA6IHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQsIE5v
bmNvcHlhYmxlIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJOU1VSTEV4dHJhcy5t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJOU1VSTEV4dHJhcy5tCShy
ZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJOU1VSTEV4dHJhcy5t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjE0LDcgKzIxNCw3IEBAIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFt
ZVdpdGhNSU1FVHlwZSgKIAogICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwIHx8IFtsYXN0
UGF0aENvbXBvbmVudCBpc0VxdWFsVG9TdHJpbmc6QCIvIl0pIHsKICAgICAgICAgLy8gbGFzdFBh
dGhDb21wb25lbnQgaXMgbm8gZ29vZCwgdHJ5IHRoZSBob3N0LgotICAgICAgICBOU1N0cmluZyAq
aG9zdCA9IChOU1N0cmluZyAqKShLVVJMKHVybCkuaG9zdCgpKTsKKyAgICAgICAgTlNTdHJpbmcg
Kmhvc3QgPSBLVVJMKHVybCkuaG9zdCgpOwogICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lQnlG
aXhpbmdJbGxlZ2FsQ2hhcmFjdGVycyhob3N0KTsKICAgICAgICAgaWYgKFtmaWxlbmFtZSBsZW5n
dGhdID09IDApIHsKICAgICAgICAgICAgIC8vIENhbid0IG1ha2UgYSBmaWxlbmFtZSB1c2luZyB0
aGlzIFVSTCwgdXNlICJ1bmtub3duIi4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAi
SGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKSW5kZXg6IFdl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI4LDIxICsyOCwxMSBAQAogCiAjaW5jbHVkZSAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW5j
bHVkZSAiQ2xpcGJvYXJkTWFjLmgiCi0jaW5jbHVkZSAiQ3Vyc29yLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIK
LSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgog
I2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJQYWdl
LmgiCkBAIC0xNDgsNyArMTM4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6Om5lZWRzS2V5Ym9hcmRF
dmVudERpcwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBSU1MgdmlldyBuZWVkcyBh
cnJvdyBrZXkga2V5cHJlc3MgZXZlbnRzLgotICAgIGlmIChpc1NhZmFyaSAmJiBkb2N1bWVudC0+
dXJsKCkuc3RhcnRzV2l0aCgiZmVlZDoiLCBmYWxzZSkgfHwgZG9jdW1lbnQtPnVybCgpLnN0YXJ0
c1dpdGgoImZlZWRzOiIsIGZhbHNlKSkKKyAgICBpZiAoaXNTYWZhcmkgJiYgZG9jdW1lbnQtPnVy
bCgpLnByb3RvY29sSXMoImZlZWQiKSB8fCBkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJcygiZmVl
ZHMiKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzKQpJbmRleDogV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21h
Yy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKICAqCkBA
IC02MjcsMTIgKzYyNywxMSBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZy
b21ECiAKIC0gKE5TVVJMICopVVJMV2l0aEF0dHJpYnV0ZVN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcKIHsKLSAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1
bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAvLyBGSVhNRTogaXMgcGFyc2VVUkwgYXBwcm9wcmlhdGUgaGVyZT8K
LSAgICBEZXByZWNhdGVkU3RyaW5nIHJlbCA9IHBhcnNlVVJMKHN0cmluZykuZGVwcmVjYXRlZFN0
cmluZygpOwotICAgIHJldHVybiBLVVJMKGRvYy0+Y29tcGxldGVVUkwocmVsKSkuZ2V0TlNVUkwo
KTsKKyAgICByZXR1cm4gZG9jLT5jb21wbGV0ZVVSTChwYXJzZVVSTChzdHJpbmcpKTsKIH0KIAog
LSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3
YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBzdGFy
dEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KQEAgLTc0Nyw3ICs3NDYsNyBAQCBz
dGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ECiAKIC0gKE5TVVJMICopYmFz
ZVVSTAogewotICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpKS5nZXROU1VSTCgpOworICAgIHJldHVybiBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopc3RyaW5nV2l0aERh
dGE6KE5TRGF0YSAqKWRhdGEKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw4IEBA
CiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNp
bmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwogI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRl
IDx1bmljb2RlL3VpZG5hLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCkBAIC00Miw2ICs0MSwx
MyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVk
ZWYgVmVjdG9yPGNoYXIsIDUxMj4gQ2hhckJ1ZmZlcjsKK3R5cGVkZWYgVmVjdG9yPFVDaGFyLCA1
MTI+IFVDaGFyQnVmZmVyOworCisvLyBGSVhNRTogVGhpcyBmaWxlIG1ha2VzIHRvbyBtdWNoIHVz
ZSBvZiB0aGUgKyBvcGVyYXRvciBvbiBTdHJpbmcuCisvLyBXZSBlaXRoZXIgaGF2ZSB0byBvcHRp
bWl6ZSB0aGF0IG9wZXJhdG9yIHNvIGl0IGRvZXNuJ3QgaW52b2x2ZQorLy8gc28gbWFueSBhbGxv
Y2F0aW9ucywgb3IgY2hhbmdlIHRoaXMgdG8gdXNlIFZlY3RvcjxVQ2hhcj4gaW5zdGVhZC4KKwog
ZW51bSBVUkxDaGFyYWN0ZXJDbGFzc2VzIHsKICAgICAvLyBhbHBoYSAKICAgICBTY2hlbWVGaXJz
dENoYXIgPSAxIDw8IDAsCkBAIC02Niw1NiArNzIsNTIgQEAgZW51bSBVUkxDaGFyYWN0ZXJDbGFz
c2VzIHsKICAgICAvLyAiIyIgfCAiPyIgfCAiLyIgfCBudWwKICAgICBQYXRoU2VnbWVudEVuZENo
YXIgPSAxIDw8IDUsCiAKLSAgICAvLyBkaWdpdCB8ICJBIiB8ICJCIiB8ICJDIiB8ICJEIiB8ICJF
IiB8ICJGIiB8ICJhIiB8ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJmIgotICAgIEhleERpZ2l0
Q2hhciA9IDEgPDwgNiwKLQogICAgIC8vIG5vdCBhbGxvd2VkIGluIHBhdGgKLSAgICBCYWRDaGFy
ID0gMSA8PCA3Ci0KKyAgICBCYWRDaGFyID0gMSA8PCA2CiB9OwogCiBzdGF0aWMgY29uc3QgY2hh
ciBoZXhEaWdpdHNbMTddID0gIjAxMjM0NTY3ODlBQkNERUYiOwogCiBzdGF0aWMgY29uc3QgdW5z
aWduZWQgY2hhciBjaGFyYWN0ZXJDbGFzc1RhYmxlWzI1Nl0gPSB7CiAgICAgLyogMCBudWwgKi8g
UGF0aFNlZ21lbnRFbmRDaGFyLCAgICAvKiAxIHNvaCAqLyBCYWRDaGFyLAotICAgIC8qIDIgc3R4
ICovIEJhZENoYXIsICAgIC8qIDMgZXR4ICovIEJhZENoYXIsICAgIAorICAgIC8qIDIgc3R4ICov
IEJhZENoYXIsICAgIC8qIDMgZXR4ICovIEJhZENoYXIsCiAgICAgLyogNCBlb3QgKi8gQmFkQ2hh
ciwgICAgLyogNSBlbnEgKi8gQmFkQ2hhciwgICAgLyogNiBhY2sgKi8gQmFkQ2hhciwgICAgLyog
NyBiZWwgKi8gQmFkQ2hhciwKLSAgICAvKiA4IGJzICovIEJhZENoYXIsICAgICAvKiA5IGh0ICov
IEJhZENoYXIsICAgIC8qIDEwIG5sICovIEJhZENoYXIsICAgIC8qIDExIHZ0ICovIEJhZENoYXIs
CisgICAgLyogOCBicyAqLyBCYWRDaGFyLCAgICAgLyogOSBodCAqLyBCYWRDaGFyLCAgICAgLyog
MTAgbmwgKi8gQmFkQ2hhciwgICAgLyogMTEgdnQgKi8gQmFkQ2hhciwKICAgICAvKiAxMiBucCAq
LyBCYWRDaGFyLCAgICAvKiAxMyBjciAqLyBCYWRDaGFyLCAgICAvKiAxNCBzbyAqLyBCYWRDaGFy
LCAgICAvKiAxNSBzaSAqLyBCYWRDaGFyLAogICAgIC8qIDE2IGRsZSAqLyBCYWRDaGFyLCAgIC8q
IDE3IGRjMSAqLyBCYWRDaGFyLCAgIC8qIDE4IGRjMiAqLyBCYWRDaGFyLCAgIC8qIDE5IGRjMyAq
LyBCYWRDaGFyLAogICAgIC8qIDIwIGRjNCAqLyBCYWRDaGFyLCAgIC8qIDIxIG5hayAqLyBCYWRD
aGFyLCAgIC8qIDIyIHN5biAqLyBCYWRDaGFyLCAgIC8qIDIzIGV0YiAqLyBCYWRDaGFyLAogICAg
IC8qIDI0IGNhbiAqLyBCYWRDaGFyLCAgIC8qIDI1IGVtICovIEJhZENoYXIsICAgIC8qIDI2IHN1
YiAqLyBCYWRDaGFyLCAgIC8qIDI3IGVzYyAqLyBCYWRDaGFyLAogICAgIC8qIDI4IGZzICovIEJh
ZENoYXIsICAgIC8qIDI5IGdzICovIEJhZENoYXIsICAgIC8qIDMwIHJzICovIEJhZENoYXIsICAg
IC8qIDMxIHVzICovIEJhZENoYXIsCiAgICAgLyogMzIgc3AgKi8gQmFkQ2hhciwgICAgLyogMzMg
ICEgKi8gVXNlckluZm9DaGFyLAotICAgIC8qIDM0ICAiICovIEJhZENoYXIsICAgIC8qIDM1ICAj
ICovIFBhdGhTZWdtZW50RW5kQ2hhciB8IEJhZENoYXIsICAgIAorICAgIC8qIDM0ICAiICovIEJh
ZENoYXIsICAgIC8qIDM1ICAjICovIFBhdGhTZWdtZW50RW5kQ2hhciB8IEJhZENoYXIsCiAgICAg
LyogMzYgICQgKi8gVXNlckluZm9DaGFyLCAgICAvKiAzNyAgJSAqLyBVc2VySW5mb0NoYXIgfCBI
b3N0bmFtZUNoYXIgfCBJUHY2Q2hhciB8IEJhZENoYXIsCiAgICAgLyogMzggICYgKi8gVXNlcklu
Zm9DaGFyLCAgICAvKiAzOSAgJyAqLyBVc2VySW5mb0NoYXIsCi0gICAgLyogNDAgICggKi8gVXNl
ckluZm9DaGFyLCAgICAvKiA0MSAgKSAqLyBVc2VySW5mb0NoYXIsICAgIAorICAgIC8qIDQwICAo
ICovIFVzZXJJbmZvQ2hhciwgICAgLyogNDEgICkgKi8gVXNlckluZm9DaGFyLAogICAgIC8qIDQy
ICAqICovIFVzZXJJbmZvQ2hhciwgICAgLyogNDMgICsgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZv
Q2hhciwKLSAgICAvKiA0NCAgLCAqLyBVc2VySW5mb0NoYXIsICAgIAotICAgIC8qIDQ1ICAtICov
IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIsIAotICAgIC8qIDQ2ICAu
ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIsICAgCisgICAgLyog
NDQgICwgKi8gVXNlckluZm9DaGFyLAorICAgIC8qIDQ1ICAtICovIFNjaGVtZUNoYXIgfCBVc2Vy
SW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIsCisgICAgLyogNDYgIC4gKi8gU2NoZW1lQ2hhciB8IFVz
ZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwKICAgICAvKiA0NyAgLyAqLyBQYXRoU2VnbWVudEVu
ZENoYXIsCi0gICAgLyogNDggIDAgKi8gU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3Ru
YW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLCAKLSAgICAvKiA0OSAgMSAqLyBTY2hl
bWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2
NkNoYXIsICAgIAotICAgIC8qIDUwICAyICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBI
b3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hhciwgCi0gICAgLyogNTEgIDMgKi8g
U2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8
IElQdjZDaGFyLAotICAgIC8qIDUyICA0ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBI
b3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hhciwgCi0gICAgLyogNTMgIDUgKi8g
U2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8
IElQdjZDaGFyLAotICAgIC8qIDU0ICA2ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBI
b3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hhciwgCi0gICAgLyogNTUgIDcgKi8g
U2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8
IElQdjZDaGFyLAotICAgIC8qIDU2ICA4ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBI
b3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hhciwgCi0gICAgLyogNTcgIDkgKi8g
U2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8
IElQdjZDaGFyLAorICAgIC8qIDQ4ICAwICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBI
b3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwgCisgICAgLyogNDkgIDEgKi8gU2NoZW1lQ2hhciB8IFVz
ZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLCAgICAKKyAgICAvKiA1MCAgMiAq
LyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsIAor
ICAgIC8qIDUxICAzICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIg
fCBJUHY2Q2hhciwKKyAgICAvKiA1MiAgNCAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwg
SG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsIAorICAgIC8qIDUzICA1ICovIFNjaGVtZUNoYXIgfCBV
c2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwKKyAgICAvKiA1NCAgNiAqLyBT
Y2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsIAorICAg
IC8qIDU1ICA3ICovIFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJ
UHY2Q2hhciwKKyAgICAvKiA1NiAgOCAqLyBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9z
dG5hbWVDaGFyIHwgSVB2NkNoYXIsIAorICAgIC8qIDU3ICA5ICovIFNjaGVtZUNoYXIgfCBVc2Vy
SW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwKICAgICAvKiA1OCAgOiAqLyBVc2Vy
SW5mb0NoYXIgfCBJUHY2Q2hhciwgICAgLyogNTkgIDsgKi8gVXNlckluZm9DaGFyLAogICAgIC8q
IDYwICA8ICovIEJhZENoYXIsICAgIC8qIDYxICA9ICovIFVzZXJJbmZvQ2hhciwKICAgICAvKiA2
MiAgPiAqLyBCYWRDaGFyLCAgICAvKiA2MyAgPyAqLyBQYXRoU2VnbWVudEVuZENoYXIgfCBCYWRD
aGFyLAogICAgIC8qIDY0ICBAICovIDAsCi0gICAgLyogNjUgIEEgKi8gU2NoZW1lRmlyc3RDaGFy
IHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hh
ciB8IElQdjZDaGFyLCAgICAKLSAgICAvKiA2NiAgQiAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hl
bWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2
NkNoYXIsCi0gICAgLyogNjcgIEMgKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVz
ZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLAotICAg
IC8qIDY4ICBEICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIg
fCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hhciwKLSAgICAvKiA2OSAgRSAq
LyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVD
aGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsCi0gICAgLyogNzAgIEYgKi8gU2NoZW1lRmly
c3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IEhleERp
Z2l0Q2hhciB8IElQdjZDaGFyLAorICAgIC8qIDY1ICBBICovIFNjaGVtZUZpcnN0Q2hhciB8IFNj
aGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwgICAgCisg
ICAgLyogNjYgIEIgKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLAorICAgIC8qIDY3ICBDICovIFNjaGVtZUZpcnN0
Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hh
ciwKKyAgICAvKiA2OCAgRCAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlcklu
Zm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsCisgICAgLyogNjkgIEUgKi8gU2NoZW1l
Rmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQ
djZDaGFyLAorICAgIC8qIDcwICBGICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBV
c2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwKICAgICAvKiA3MSAgRyAqLyBT
Y2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFy
LAogICAgIC8qIDcyICBIICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5m
b0NoYXIgfCBIb3N0bmFtZUNoYXIsCiAgICAgLyogNzMgIEkgKi8gU2NoZW1lRmlyc3RDaGFyIHwg
U2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwKQEAgLTE0MSwxMiArMTQz
LDEyIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlckNsYXMKICAgICAvKiA5
NCAgXiAqLyAwLAogICAgIC8qIDk1ICBfICovIFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwK
ICAgICAvKiA5NiAgYCAqLyAwLAotICAgIC8qIDk3ICBhICovIFNjaGVtZUZpcnN0Q2hhciB8IFNj
aGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJ
UHY2Q2hhciwKLSAgICAvKiA5OCAgYiAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwg
VXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRDaGFyIHwgSVB2NkNoYXIsIAot
ICAgIC8qIDk5ICBjICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVtZUNoYXIgfCBVc2VySW5mb0No
YXIgfCBIb3N0bmFtZUNoYXIgfCBIZXhEaWdpdENoYXIgfCBJUHY2Q2hhciwKLSAgICAvKiAxMDAg
IGQgKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3Ru
YW1lQ2hhciB8IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLCAKLSAgICAvKiAxMDEgIGUgKi8gU2No
ZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8
IEhleERpZ2l0Q2hhciB8IElQdjZDaGFyLAotICAgIC8qIDEwMiAgZiAqLyBTY2hlbWVGaXJzdENo
YXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSGV4RGlnaXRD
aGFyIHwgSVB2NkNoYXIsIAorICAgIC8qIDk3ICBhICovIFNjaGVtZUZpcnN0Q2hhciB8IFNjaGVt
ZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwKKyAgICAvKiA5
OCAgYiAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9z
dG5hbWVDaGFyIHwgSVB2NkNoYXIsIAorICAgIC8qIDk5ICBjICovIFNjaGVtZUZpcnN0Q2hhciB8
IFNjaGVtZUNoYXIgfCBVc2VySW5mb0NoYXIgfCBIb3N0bmFtZUNoYXIgfCBJUHY2Q2hhciwKKyAg
ICAvKiAxMDAgIGQgKi8gU2NoZW1lRmlyc3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hh
ciB8IEhvc3RuYW1lQ2hhciB8IElQdjZDaGFyLCAKKyAgICAvKiAxMDEgIGUgKi8gU2NoZW1lRmly
c3RDaGFyIHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciB8IElQdjZD
aGFyLAorICAgIC8qIDEwMiAgZiAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNl
ckluZm9DaGFyIHwgSG9zdG5hbWVDaGFyIHwgSVB2NkNoYXIsIAogICAgIC8qIDEwMyAgZyAqLyBT
Y2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlckluZm9DaGFyIHwgSG9zdG5hbWVDaGFy
LAogICAgIC8qIDEwNCAgaCAqLyBTY2hlbWVGaXJzdENoYXIgfCBTY2hlbWVDaGFyIHwgVXNlcklu
Zm9DaGFyIHwgSG9zdG5hbWVDaGFyLCAKICAgICAvKiAxMDUgIGkgKi8gU2NoZW1lRmlyc3RDaGFy
IHwgU2NoZW1lQ2hhciB8IFVzZXJJbmZvQ2hhciB8IEhvc3RuYW1lQ2hhciwKQEAgLTIwNCwxMjYg
KzIwNiwxNTcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyQ2xhcwogfTsK
IAogc3RhdGljIGludCBjb3B5UGF0aFJlbW92aW5nRG90cyhjaGFyKiBkc3QsIGNvbnN0IGNoYXIq
IHNyYywgaW50IHNyY1N0YXJ0LCBpbnQgc3JjRW5kKTsKLXN0YXRpYyBjaGFyKiBlbmNvZGVSZWxh
dGl2ZVN0cmluZyhjb25zdCBLVVJMICZiYXNlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiByZWws
IGNvbnN0IFRleHRFbmNvZGluZyYpOwotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0
ZUJhY2tzbGFzaGVzKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmluZyk7CitzdGF0aWMgdm9p
ZCBlbmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBTdHJpbmcmIHJlbCwgY29uc3QgVGV4dEVuY29k
aW5nJiwgQ2hhckJ1ZmZlciYgb3VwdXQpOworc3RhdGljIFN0cmluZyBzdWJzdGl0dXRlQmFja3Ns
YXNoZXMoY29uc3QgU3RyaW5nJik7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUZpcnN0
Q2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBT
Y2hlbWVGaXJzdENoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUNoYXIodW5zaWdu
ZWQgY2hhciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgU2NoZW1lQ2hhcjsg
fQorc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKGNoYXIgYykgeyByZXR1cm4g
Y2hhcmFjdGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKV0gJiBTY2hl
bWVGaXJzdENoYXI7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NjaGVtZUZpcnN0Q2hhcihVQ2hh
ciBjKSB7IHJldHVybiBjIDw9IDB4ZmYgJiYgKGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBTY2hl
bWVGaXJzdENoYXIpOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY2hlbWVDaGFyKGNoYXIgYykg
eyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihj
KV0gJiBTY2hlbWVDaGFyOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNTY2hlbWVDaGFyKFVDaGFy
IGMpIHsgcmV0dXJuIGMgPD0gMHhmZiAmJiAoY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIFNjaGVt
ZUNoYXIpOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNVc2VySW5mb0NoYXIodW5zaWduZWQgY2hh
ciBjKSB7IHJldHVybiBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgVXNlckluZm9DaGFyOyB9CiBz
dGF0aWMgaW5saW5lIGJvb2wgaXNIb3N0bmFtZUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVy
biBjaGFyYWN0ZXJDbGFzc1RhYmxlW2NdICYgSG9zdG5hbWVDaGFyOyB9CiBzdGF0aWMgaW5saW5l
IGJvb2wgaXNJUHY2Q2hhcih1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlckNsYXNz
VGFibGVbY10gJiBJUHY2Q2hhcjsgfQotc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRF
bmRDaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAm
IFBhdGhTZWdtZW50RW5kQ2hhcjsgfQorc3RhdGljIGlubGluZSBib29sIGlzUGF0aFNlZ21lbnRF
bmRDaGFyKGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjKV0gJiBQYXRoU2VnbWVudEVuZENoYXI7IH0KK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1BhdGhTZWdtZW50RW5kQ2hhcihVQ2hhciBjKSB7IHJldHVybiBjIDw9IDB4ZmYgJiYg
KGNoYXJhY3RlckNsYXNzVGFibGVbY10gJiBQYXRoU2VnbWVudEVuZENoYXIpOyB9CiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNCYWRDaGFyKHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVy
Q2xhc3NUYWJsZVtjXSAmIEJhZENoYXI7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0hleERpZ2l0
KHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gY2hhcmFjdGVyQ2xhc3NUYWJsZVtjXSAmIEhleERp
Z2l0Q2hhcjsgfQogCi1zdGF0aWMgaW5saW5lIGludCBoZXhEaWdpdFZhbHVlKHVuc2lnbmVkIGNo
YXIgYykKK3N0YXRpYyBpbmxpbmUgaW50IGhleERpZ2l0VmFsdWUoVUNoYXIgYykKIHsKLSAgICBB
U1NFUlQoaXNIZXhEaWdpdChjKSk7CisgICAgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChjKSk7CiAg
ICAgaWYgKGMgPCAnQScpCiAgICAgICAgIHJldHVybiBjIC0gJzAnOwogICAgIHJldHVybiAoYyAt
ICdBJyArIDEwKSAmIDB4RjsgLy8gaGFuZGxlIGJvdGggdXBwZXIgYW5kIGxvd2VyIGNhc2Ugd2l0
aG91dCBhIGJyYW5jaAogfQogCisvLyBDb3BpZXMgdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRp
b24sIGFzc3VtaW5nIGFsbCB0aGUgc291cmNlIGNoYXJhY3RlcnMgYXJlCisvLyBBU0NJSS4gVGhl
IGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaC4gTnVsbCBjaGFyYWN0ZXJz
IGFyZSBhbGxvd2VkCisvLyBpbiB0aGUgc291cmNlIHN0cmluZywgYW5kIG5vIGF0dGVtcHQgaXMg
bWFkZSB0byBudWxsLXRlcm1pbmF0ZSB0aGUgcmVzdWx0Lgorc3RhdGljIHZvaWQgY29weUFTQ0lJ
KGNvbnN0IFVDaGFyKiBzcmMsIGludCBsZW5ndGgsIGNoYXIqIGRlc3QpCit7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZGVzdFtpXSA9IHN0YXRpY19jYXN0
PGNoYXI+KHNyY1tpXSk7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRvIFBsYXRmb3JtU3RyaW5nLmgg
ZXZlbnR1YWxseS4KKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpbmRleCBpbiBz
dHJpbmcgfHN8IG9mIGFueSBvZiB0aGUgY2hhcmFjdGVycworLy8gaW4gfHRvRmluZHwuIHx0b0Zp
bmR8IHNob3VsZCBiZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIGFsbCBjaGFyYWN0ZXJzIHVw
CisvLyB0byB0aGUgbnVsbCB3aWxsIGJlIHNlYXJjaGVkLiBSZXR1cm5zIGludCBpZiBub3QgZm91
bmQuCitzdGF0aWMgaW50IGZpbmRGaXJzdE9mKGNvbnN0IFVDaGFyKiBzLCBpbnQgc0xlbiwgaW50
IHN0YXJ0UG9zLCBjb25zdCBjaGFyKiB0b0ZpbmQpCit7CisgICAgZm9yIChpbnQgaSA9IHN0YXJ0
UG9zOyBpIDwgc0xlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGN1ciA9IHRvRmluZDsK
KyAgICAgICAgd2hpbGUgKCpjdXIpIHsKKyAgICAgICAgICAgIGlmIChzW2ldID09ICooY3VyKysp
KQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biAtMTsKK30KKwogLy8gS1VSTAogCi1LVVJMOjpLVVJMKCkgOiBtX2lzVmFsaWQoZmFsc2UpCitp
bmxpbmUgYm9vbCBLVVJMOjpwcm90b2NvbElzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBj
aGFyKiBwcm90b2NvbCkKIHsKKyAgICByZXR1cm4gV2ViQ29yZTo6cHJvdG9jb2xJcyhzdHJpbmcs
IHByb3RvY29sKTsKIH0KIAotS1VSTDo6S1VSTChjb25zdCBjaGFyICp1cmwpCitLVVJMOjpLVVJM
KCkKKyAgICA6IG1faXNWYWxpZChmYWxzZSkKIHsKLSAgICBpZiAodXJsICYmIHVybFswXSA9PSAn
LycpIHsKLSAgICAgICAgIC8vIDUgZm9yICJmaWxlOiIsIDEgZm9yIHRlcm1pbmF0b3IKLSAgICAg
ICAgc2l6ZV90IHVybExlbmd0aCA9IHN0cmxlbih1cmwpICsgMTsKLSAgICAgICAgVmVjdG9yPGNo
YXIsIDIwNDg+IGJ1ZmZlcih1cmxMZW5ndGggKyA1KTsKLSAgICAgICAgYnVmZmVyWzBdID0gJ2Yn
OwotICAgICAgICBidWZmZXJbMV0gPSAnaSc7Ci0gICAgICAgIGJ1ZmZlclsyXSA9ICdsJzsKLSAg
ICAgICAgYnVmZmVyWzNdID0gJ2UnOwotICAgICAgICBidWZmZXJbNF0gPSAnOic7Ci0gICAgICAg
IG1lbWNweSgmYnVmZmVyWzVdLCB1cmwsIHVybExlbmd0aCk7Ci0gICAgICAgIHBhcnNlKGJ1ZmZl
ci5kYXRhKCksIDApOwotICAgIH0gZWxzZQorfQorCitLVVJMOjpLVVJMKGNvbnN0IGNoYXIqIHVy
bCkKK3sKKyAgICBpZiAoIXVybCB8fCB1cmxbMF0gIT0gJy8nKSB7CiAgICAgICAgIHBhcnNlKHVy
bCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgdXJsTGVuZ3RoID0g
c3RybGVuKHVybCkgKyAxOworICAgIENoYXJCdWZmZXIgYnVmZmVyKHVybExlbmd0aCArIDUpOyAv
LyA1IGZvciAiZmlsZToiLgorICAgIGJ1ZmZlclswXSA9ICdmJzsKKyAgICBidWZmZXJbMV0gPSAn
aSc7CisgICAgYnVmZmVyWzJdID0gJ2wnOworICAgIGJ1ZmZlclszXSA9ICdlJzsKKyAgICBidWZm
ZXJbNF0gPSAnOic7CisgICAgbWVtY3B5KCZidWZmZXJbNV0sIHVybCwgdXJsTGVuZ3RoKTsKKyAg
ICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKIH0KIAotS1VSTDo6S1VSTChjb25zdCBEZXByZWNh
dGVkU3RyaW5nICZ1cmwpCitLVVJMOjpLVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIGlm
ICghdXJsLmlzRW1wdHkoKSAmJiB1cmxbMF0gPT0gJy8nKSB7Ci0gICAgICAgIC8vIDUgZm9yICJm
aWxlOiIsIDEgZm9yIHRlcm1pbmF0b3IKLSAgICAgICAgVmVjdG9yPGNoYXIsIDIwNDg+IGJ1ZmZl
cih1cmwubGVuZ3RoKCkgKyA2KTsKLSAgICAgICAgYnVmZmVyWzBdID0gJ2YnOwotICAgICAgICBi
dWZmZXJbMV0gPSAnaSc7Ci0gICAgICAgIGJ1ZmZlclsyXSA9ICdsJzsKLSAgICAgICAgYnVmZmVy
WzNdID0gJ2UnOwotICAgICAgICBidWZmZXJbNF0gPSAnOic7Ci0gICAgICAgIHVybC5jb3B5TGF0
aW4xKCZidWZmZXJbNV0pOwotICAgICAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgcGFyc2UodXJsLmFzY2lpKCksICZ1cmwpOworICAgIGlmICh1cmxbMF0g
IT0gJy8nKSB7CisgICAgICAgIHBhcnNlKHVybCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBDaGFyQnVmZmVyIGJ1ZmZlcih1cmwubGVuZ3RoKCkgKyA2KTsgLy8gNSBmb3IgImZpbGU6
IiwgMSBmb3IgdGVybWluYXRvci4KKyAgICBidWZmZXJbMF0gPSAnZic7CisgICAgYnVmZmVyWzFd
ID0gJ2knOworICAgIGJ1ZmZlclsyXSA9ICdsJzsKKyAgICBidWZmZXJbM10gPSAnZSc7CisgICAg
YnVmZmVyWzRdID0gJzonOworICAgIGNvcHlBU0NJSSh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVu
Z3RoKCksICZidWZmZXJbNV0pOworICAgIGJ1ZmZlclt1cmwubGVuZ3RoKCkgKyA0XSA9ICdcMCc7
IC8vIE5lZWQgbnVsbCB0ZXJtaW5hdG9yLgorCisgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7
CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyYgcmVsYXRpdmUpCitLVVJMOjpLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYg
cmVsYXRpdmUpCiB7CiAgICAgaW5pdChiYXNlLCByZWxhdGl2ZSwgVVRGOEVuY29kaW5nKCkpOwog
fQogCi1LVVJMOjpLVVJMKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
IHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorS1VSTDo6S1VSTChjb25z
dCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nKQogewogICAgIGluaXQoYmFzZSwgcmVsYXRpdmUsIGVuY29kaW5nKTsKIH0KIAot
dm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcg
JnJlbGF0aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQordm9pZCBLVVJMOjppbml0
KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmUsIGNvbnN0IFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgLy8gQWxsb3cgYXQgbGVhc3QgYWJzb2x1dGUgVVJMcyB0
byByZXNvbHZlIGFnYWluc3QgYW4gZW1wdHkgVVJMLgogICAgIGlmICghYmFzZS5tX2lzVmFsaWQg
JiYgIWJhc2UuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fc3RyaW5nID0gcmVsYXRpdmU7CiAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAg
IGJvb2wgYWJzb2x1dGUgPSBmYWxzZTsKIAotICAgIC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGgg
V2luIElFLCB3ZSBtdXN0IHRyZWF0IGJhY2tzbGFzaGVzIGFzIGlmIHRoZXkgd2VyZSBzbGFzaGVz
LCBhcyBsb25nIGFzIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdGhlIGphdmFzY3JpcHQ6IHNjaGVt
YQotICAgIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0ZWRSZWxhdGl2ZTsKLSAgICBib29sIHNo
b3VsZFN1YnN0aXR1dGVCYWNrc2xhc2hlcyA9IHJlbGF0aXZlLmNvbnRhaW5zKCdcXCcpICYmICEo
cmVsYXRpdmUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgcmVsYXRpdmUuc3Rh
cnRzV2l0aCgiZGF0YToiLCBmYWxzZSkpOwotICAgIGlmIChzaG91bGRTdWJzdGl0dXRlQmFja3Ns
YXNoZXMpCi0gICAgICAgIHN1YnN0aXR1dGVkUmVsYXRpdmUgPSBzdWJzdGl0dXRlQmFja3NsYXNo
ZXMocmVsYXRpdmUpOwotCi0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcmVsID0gc2hvdWxk
U3Vic3RpdHV0ZUJhY2tzbGFzaGVzID8gc3Vic3RpdHV0ZWRSZWxhdGl2ZSA6IHJlbGF0aXZlOwot
ICAgIAotICAgIGJvb2wgYWxsQVNDSUkgPSByZWwuaXNBbGxBU0NJSSgpOwotICAgIGNoYXIgKnN0
ckJ1ZmZlcjsKLSAgICBjb25zdCBjaGFyICpzdHI7CisgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBXaW4gSUUsIHRyZWF0IGJhY2tzbGFzaGVzIGFzIGlmIHRoZXkgd2VyZSBzbGFzaGVzLAor
ICAgIC8vIGFzIGxvbmcgYXMgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBqYXZhc2NyaXB0OiBvciBk
YXRhOiBVUkxzLgorICAgIFN0cmluZyByZWwgPSByZWxhdGl2ZTsKKyAgICBpZiAocmVsLmNvbnRh
aW5zKCdcXCcpICYmICEocHJvdG9jb2xJcyhyZWwsICJqYXZhc2NyaXB0IikgfHwgcHJvdG9jb2xJ
cyhyZWwsICJkYXRhIikpKQorICAgICAgICByZWwgPSBzdWJzdGl0dXRlQmFja3NsYXNoZXMocmVs
KTsKKworICAgIFN0cmluZyogb3JpZ2luYWxTdHJpbmcgPSAmcmVsOworCisgICAgYm9vbCBhbGxB
U0NJSSA9IGNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWwuY2hhcmFjdGVycygpLCByZWwubGVuZ3Ro
KCkpOworICAgIENoYXJCdWZmZXIgc3RyQnVmZmVyOworICAgIGNoYXIqIHN0cjsKKyAgICBzaXpl
X3QgbGVuOwogICAgIGlmIChhbGxBU0NJSSkgewotICAgICAgICBzdHJCdWZmZXIgPSAwOwotICAg
ICAgICBzdHIgPSByZWwuYXNjaWkoKTsKKyAgICAgICAgbGVuID0gcmVsLmxlbmd0aCgpOworICAg
ICAgICBzdHJCdWZmZXIucmVzaXplKGxlbiArIDEpOworICAgICAgICBjb3B5QVNDSUkocmVsLmNo
YXJhY3RlcnMoKSwgbGVuLCBzdHJCdWZmZXIuZGF0YSgpKTsKKyAgICAgICAgc3RyQnVmZmVyW2xl
bl0gPSAwOworICAgICAgICBzdHIgPSBzdHJCdWZmZXIuZGF0YSgpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHN0ckJ1ZmZlciA9IGVuY29kZVJlbGF0aXZlU3RyaW5nKGJhc2UsIHJlbCwgZW5jb2Rp
bmcpOwotICAgICAgICBzdHIgPSBzdHJCdWZmZXI7CisgICAgICAgIG9yaWdpbmFsU3RyaW5nID0g
MDsKKyAgICAgICAgZW5jb2RlUmVsYXRpdmVTdHJpbmcocmVsLCBlbmNvZGluZywgc3RyQnVmZmVy
KTsKKyAgICAgICAgc3RyID0gc3RyQnVmZmVyLmRhdGEoKTsKKyAgICAgICAgbGVuID0gc3RybGVu
KHN0cik7CiAgICAgfQotICAgIAotICAgIC8vIHdvcmthcm91bmQgZm9yIHNpdGVzIHRoYXQgcHV0
IGxlYWRpbmcgd2hpdGVzcGFjZSB3aGl0ZXNwYWNlIG9uCi0gICAgLy8gVVJMIHJlZmVyZW5jZXMK
LSAgICBib29sIHN0cmlwcGVkU3RhcnQgPSBmYWxzZTsKKworICAgIC8vIEdldCByaWQgb2YgbGVh
ZGluZyB3aGl0ZXNwYWNlLgogICAgIHdoaWxlICgqc3RyID09ICcgJykgeworICAgICAgICBvcmln
aW5hbFN0cmluZyA9IDA7CiAgICAgICAgIHN0cisrOwotICAgICAgICBzdHJpcHBlZFN0YXJ0ID0g
dHJ1ZTsKKyAgICAgICAgLS1sZW47CiAgICAgfQogCi0gICAgLy8gd29ya2Fyb3VuZCBmb3IgdHJh
aWxpbmcgd2hpdGVzcGFjZSAtIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgY2F1c2Ugd2UgaGF2ZSB0
byBjb3B5Ci0gICAgLy8gaXQgd291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gcmVwbGFjZSBudWxsLXRl
cm1pbmF0aW9uIHdpdGggYSBsZW5ndGggcGFyYW1ldGVyCi0gICAgaW50IGxlbiA9IHN0cmxlbihz
dHIpOwotICAgIGludCBjaGFyc1RvQ2hvcE9mZkVuZCA9IDA7Ci0gICAgZm9yIChpbnQgcG9zID0g
bGVuIC0gMTsgcG9zID49IDAgJiYgc3RyW3Bvc10gPT0gJyAnOyBwb3MtLSkgewotICAgICAgICBj
aGFyc1RvQ2hvcE9mZkVuZCsrOwotICAgIH0KLSAgICBpZiAoY2hhcnNUb0Nob3BPZmZFbmQgPiAw
KSB7Ci0gICAgICAgIGNoYXIgKm5ld1N0ckJ1ZmZlciA9IChjaGFyICopZmFzdE1hbGxvYygobGVu
ICsgMSkgLSBjaGFyc1RvQ2hvcE9mZkVuZCk7Ci0gICAgICAgIHN0cm5jcHkobmV3U3RyQnVmZmVy
LCBzdHIsIGxlbiAtIGNoYXJzVG9DaG9wT2ZmRW5kKTsKLSAgICAgICAgbmV3U3RyQnVmZmVyW2xl
biAtIGNoYXJzVG9DaG9wT2ZmRW5kXSA9ICdcMCc7Ci0gICAgICAgIGZhc3RGcmVlKHN0ckJ1ZmZl
cik7Ci0gICAgICAgIHN0ckJ1ZmZlciA9IG5ld1N0ckJ1ZmZlcjsKLSAgICAgICAgc3RyID0gc3Ry
QnVmZmVyOworICAgIC8vIEdldCByaWQgb2YgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICB3aGls
ZSAobGVuICYmIHN0cltsZW4gLSAxXSA9PSAnICcpIHsKKyAgICAgICAgb3JpZ2luYWxTdHJpbmcg
PSAwOworICAgICAgICBzdHJbLS1sZW5dID0gJ1wwJzsKICAgICB9CiAKICAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIFJGQywgdGhlIHJlZmVyZW5jZSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYW4K
QEAgLTMzMSwxMTkgKzM2NCwxMDggQEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwgJmJhc2Us
IGNvbnN0IAogICAgIC8vIGFsZ29yaXRobS4gSWYgdGhlIFVSSSByZWZlcmVuY2UgaXMgYWJzb2x1
dGUgaXQgd2lsbCBoYXZlIGEKICAgICAvLyBzY2hlbWUsIG1lYW5pbmcgdGhhdCBpdCB3aWxsIGhh
dmUgYSBjb2xvbiBiZWZvcmUgdGhlIGZpcnN0CiAgICAgLy8gbm9uLXNjaGVtZSBlbGVtZW50Lgot
ICAgIGNvbnN0IGNoYXIgKnAgPSBzdHI7CisgICAgYm9vbCBhYnNvbHV0ZSA9IGZhbHNlOworICAg
IGNoYXIqIHAgPSBzdHI7CiAgICAgaWYgKGlzU2NoZW1lRmlyc3RDaGFyKCpwKSkgewogICAgICAg
ICArK3A7CiAgICAgICAgIHdoaWxlIChpc1NjaGVtZUNoYXIoKnApKSB7CiAgICAgICAgICAgICAr
K3A7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCpwID09ICc6JykgewotICAgICAgICAgICAgaWYg
KHBbMV0gIT0gJy8nICYmIGJhc2UucHJvdG9jb2woKS5sb3dlcigpID09IERlcHJlY2F0ZWRTdHJp
bmcoc3RyLCBwIC0gc3RyKS5sb3dlcigpICYmIGJhc2UuaXNIaWVyYXJjaGljYWwoKSkKKyAgICAg
ICAgICAgIGlmIChwWzFdICE9ICcvJyAmJiBlcXVhbElnbm9yaW5nQ2FzZShiYXNlLnByb3RvY29s
KCksIFN0cmluZyhzdHIsIHAgLSBzdHIpKSAmJiBiYXNlLmlzSGllcmFyY2hpY2FsKCkpIHsKICAg
ICAgICAgICAgICAgICBzdHIgPSBwICsgMTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBvcmlnaW5hbFN0cmluZyA9IDA7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICBhYnNvbHV0ZSA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoYWJzb2x1
dGUpIHsKLSAgICAgICAgcGFyc2Uoc3RyLCAoYWxsQVNDSUkgJiYgIXN0cmlwcGVkU3RhcnQgJiYg
KGNoYXJzVG9DaG9wT2ZmRW5kID09IDApKSA/ICZyZWwgOiAwKTsKKyAgICAgICAgcGFyc2Uoc3Ry
LCBvcmlnaW5hbFN0cmluZyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhlIGJhc2Ug
aXMgZW1wdHkgb3Igb3BhcXVlIChlLmcuIGRhdGE6IG9yIGphdmFzY3JpcHQ6KSwgdGhlbiB0aGUg
VVJMIGlzIGludmFsaWQKICAgICAgICAgLy8gdW5sZXNzIHRoZSByZWxhdGl2ZSBVUkwgaXMgYSBz
aW5nbGUgZnJhZ21lbnQuCiAgICAgICAgIGlmICghYmFzZS5pc0hpZXJhcmNoaWNhbCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoc3RyWzBdID09ICcjJykgewotICAgICAgICAgICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgbmV3VVJMID0gYmFzZS51cmxTdHJpbmcubGVmdChiYXNlLnF1ZXJ5RW5kUG9zKSAr
IHN0cjsKLSAgICAgICAgICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0g
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGlmIChzdHJbMF0gPT0gJyMnKQorICAgICAg
ICAgICAgICAgIHBhcnNlKGJhc2UubV9zdHJpbmcubGVmdChiYXNlLnF1ZXJ5RW5kUG9zKSArIHN0
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3N0cmluZyA9IHJlbGF0
aXZlOwogICAgICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoc3RyQnVmZmVyKQotICAgICAgICAgICAgICAgIGZhc3RGcmVlKHN0ckJ1
ZmZlcik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBzd2l0Y2goc3RyWzBdKSB7CisgICAgICAgIHN3aXRjaCAoc3RyWzBdKSB7CiAgICAg
ICAgIGNhc2UgJ1wwJzoKICAgICAgICAgICAgIC8vIHRoZSByZWZlcmVuY2UgbXVzdCBiZSBlbXB0
eSAtIHRoZSBSRkMgc2F5cyB0aGlzIGlzIGEKICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0
aGUgc2FtZSBkb2N1bWVudAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICp0aGlzID0g
YmFzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICp0aGlzID0gYmFzZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICcjJzoKICAg
ICAgICAgICAgIC8vIG11c3QgYmUgZnJhZ21lbnQtb25seSByZWZlcmVuY2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3Ry
aW5nLmxlZnQoYmFzZS5xdWVyeUVuZFBvcykgKyBzdHI7Ci0gICAgICAgICAgICAgICAgcGFyc2Uo
bmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJhc2UucXVlcnlF
bmRQb3MpICsgc3RyKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICc/JzoKICAg
ICAgICAgICAgIC8vIHF1ZXJ5LW9ubHkgcmVmZXJlbmNlLCBzcGVjaWFsIGNhc2UgbmVlZGVkIGZv
ciBub24tVVJMIHJlc3VsdHMKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5wYXRoRW5kUG9zKSAr
IHN0cjsKLSAgICAgICAgICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJzZShi
YXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5wYXRoRW5kUG9zKSArIHN0cik7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAvLyBtdXN0IGJlIG5ldC1wYXRo
IG9yIGFic29sdXRlLXBhdGggcmVmZXJlbmNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0clsxXSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbmV0LXBhdGgK
LSAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBiYXNlLnVybFN0
cmluZy5sZWZ0KGJhc2Uuc2NoZW1lRW5kUG9zICsgMSkgKyBzdHI7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAvLyBhYnMtcGF0aAotICAgICAgICAgICAgICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5wb3J0
RW5kUG9zKSArIHN0cjsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCks
ICZuZXdVUkwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChzdHJbMV0gPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgLy8gbmV0LXBh
dGgKKyAgICAgICAgICAgICAgICBwYXJzZShiYXNlLm1fc3RyaW5nLmxlZnQoYmFzZS5zY2hlbWVF
bmRQb3MgKyAxKSArIHN0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIGFicy1wYXRoCisgICAgICAgICAgICAgICAgcGFyc2UoYmFzZS5tX3N0cmluZy5sZWZ0KGJh
c2UucG9ydEVuZFBvcykgKyBzdHIpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gbXVz
dCBiZSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZQogCiAgICAgICAgICAgICAgICAgLy8gQmFzZSBw
YXJ0IHBsdXMgcmVsYXRpdmUgcGFydCBwbHVzIG9uZSBwb3NzaWJsZSBzbGFzaCBhZGRlZCBpbiBi
ZXR3ZWVuIHBsdXMgdGVybWluYXRpbmcgXDAgYnl0ZS4KLSAgICAgICAgICAgICAgICBWZWN0b3I8
Y2hhciwgMjA0OD4gYnVmZmVyKGJhc2UucGF0aEVuZFBvcyArIDEgKyBzdHJsZW4oc3RyKSArIDEp
OworICAgICAgICAgICAgICAgIENoYXJCdWZmZXIgYnVmZmVyKGJhc2UucGF0aEVuZFBvcyArIDEg
KyBsZW4gKyAxKTsKKworICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlclBvcyA9IGJ1ZmZlci5k
YXRhKCk7CiAKLSAgICAgICAgICAgICAgICBjaGFyICpidWZmZXJQb3MgPSBidWZmZXIuZGF0YSgp
OwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNvcHkgZXZlcnl0
aGluZyBiZWZvcmUgdGhlIHBhdGggZnJvbSB0aGUgYmFzZQotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmJhc2VTdHJpbmcgPSBiYXNlLnVybFN0cmluZy5hc2NpaSgpOwotICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJpbmdTdGFydCA9IGJhc2VTdHJpbmc7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcGF0aFN0YXJ0ID0gYmFzZVN0cmluZ1N0YXJ0ICsgYmFzZS5wb3J0
RW5kUG9zOwotICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlU3RyaW5nU3RhcnQgPCBwYXRoU3Rh
cnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gYmFzZS5tX3N0cmlu
Zy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogYmFzZUNoYXJhY3RlcnMg
PSBiYXNlLm1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgICAgICBDaGFyQnVmZmVy
IGJhc2VTdHJpbmdCdWZmZXIoYmFzZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJhc2VMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZVN0cmluZ0J1ZmZlcltpXSA9IHN0YXRpY19jYXN0PGNoYXI+KGJhc2VDaGFyYWN0ZXJzW2ldKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nID0gYmFzZVN0cmluZ0J1ZmZl
ci5kYXRhKCk7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZ1N0YXJ0ID0g
YmFzZVN0cmluZzsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoU3RhcnQgPSBiYXNl
U3RyaW5nU3RhcnQgKyBiYXNlLnBvcnRFbmRQb3M7CisgICAgICAgICAgICAgICAgd2hpbGUgKGJh
c2VTdHJpbmdTdGFydCA8IHBhdGhTdGFydCkKICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlclBv
cysrID0gKmJhc2VTdHJpbmdTdGFydCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBjaGFyICpidWZmZXJQYXRoU3RhcnQgPSBidWZmZXJQb3M7CisgICAgICAgICAgICAgICAg
Y2hhciogYnVmZmVyUGF0aFN0YXJ0ID0gYnVmZmVyUG9zOworCisgICAgICAgICAgICAgICAgLy8g
bm93IGNvcHkgdGhlIGJhc2UgcGF0aAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VT
dHJpbmdFbmQgPSBiYXNlU3RyaW5nICsgYmFzZS5wYXRoRW5kUG9zOwogCi0gICAgICAgICAgICAg
ICAgLy8gbm93IGNvcHkgdGhlIGJhc2UgcGF0aCAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpiYXNlU3RyaW5nRW5kID0gYmFzZVN0cmluZyArIGJhc2UucGF0aEVuZFBvczsKLSAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBnbyBiYWNrIHRvIHRoZSBsYXN0IHNsYXNoCi0g
ICAgICAgICAgICAgICAgd2hpbGUgKGJhc2VTdHJpbmdFbmQgPiBiYXNlU3RyaW5nU3RhcnQgJiYg
YmFzZVN0cmluZ0VuZFstMV0gIT0gJy8nKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGJhc2VT
dHJpbmdFbmQgPiBiYXNlU3RyaW5nU3RhcnQgJiYgYmFzZVN0cmluZ0VuZFstMV0gIT0gJy8nKQog
ICAgICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nRW5kLS07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKGJhc2VTdHJpbmdFbmQgPT0g
YmFzZVN0cmluZ1N0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIG5vIHBhdGggaW4gYmFz
ZSwgYWRkIGEgcGF0aCBzZXBhcmF0b3IgaWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChiYXNlLnNjaGVtZUVuZFBvcyArIDEgIT0gYmFzZS5wYXRoRW5kUG9zICYmICpzdHIgIT0g
J1wwJyAmJiAqc3RyICE9ICc/JyAmJiAqc3RyICE9ICcjJykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoYmFzZS5zY2hlbWVFbmRQb3MgKyAxICE9IGJhc2UucGF0aEVuZFBvcyAmJiAqc3RyICE9
ICdcMCcgJiYgKnN0ciAhPSAnPycgJiYgKnN0ciAhPSAnIycpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAqYnVmZmVyUG9zKysgPSAnLyc7Ci0gICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gY29weVBh
dGhSZW1vdmluZ0RvdHMoYnVmZmVyUG9zLCBiYXNlU3RyaW5nU3RhcnQsIDAsIGJhc2VTdHJpbmdF
bmQgLSBiYXNlU3RyaW5nU3RhcnQpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnJlbFN0cmluZ1N0YXJ0ID0gc3RyOwotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKnJlbFN0cmluZ1BvcyA9IHJlbFN0cmluZ1N0YXJ0OwotICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbFN0cmluZ1N0YXJ0ID0gc3RyOworICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbFN0cmluZ1BvcyA9IHJlbFN0cmluZ1N0YXJ0Owor
CiAgICAgICAgICAgICAgICAgd2hpbGUgKCpyZWxTdHJpbmdQb3MgIT0gJ1wwJyAmJiAqcmVsU3Ry
aW5nUG9zICE9ICc/JyAmJiAqcmVsU3RyaW5nUG9zICE9ICcjJykgewogICAgICAgICAgICAgICAg
ICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09ICcuJyAmJiBidWZmZXJQb3NbLTFdID09ICcvJykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKHJlbFN0
cmluZ1Bvc1sxXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIg
Ii4iIHNlZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJpbmdQb3MgKz0g
MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09ICcv
JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0g
Jy8nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJpbmdQb3MrKzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlbFN0cmluZ1Bv
c1sxXSA9PSAnLicgJiYgaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzJdKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLi4iIHNlZ21lbnQgYW5k
IHJld2luZCB0aGUgbGFzdCBzZWdtZW50CkBAIC00NTEsMTkgKzQ3MywxNiBAQCB2b2lkIEtVUkw6
OmluaXQoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gIi4uIiBzZWdtZW50cyAtIHdlIGNob29zZSB0byBkcm9wIHRoZW0gc2luY2Ugc29tZSB3
ZWIgY29udGVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbGllcyBvbiB0aGlz
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcyArPSAyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcysrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVy
UG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChidWZmZXJQb3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXJQb3MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBh
dGhTdGFydCArIDEgICYmIGJ1ZmZlclBvc1stMV0gIT0gJy8nKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFydCArIDEgICYmIGJ1
ZmZlclBvc1stMV0gIT0gJy8nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXJQb3MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAg
ICAgKmJ1ZmZlclBvcyA9ICpyZWxTdHJpbmdQb3M7CiAgICAgICAgICAgICAgICAgICAgIHJlbFN0
cmluZ1BvcysrOwogICAgICAgICAgICAgICAgICAgICBidWZmZXJQb3MrKzsKQEAgLTQ3NCwxNiAr
NDkzLDEyIEBAIHZvaWQgS1VSTDo6aW5pdChjb25zdCBLVVJMICZiYXNlLCBjb25zdCAKICAgICAg
ICAgICAgICAgICBzdHJjcHkoYnVmZmVyUG9zLCByZWxTdHJpbmdQb3MpOwogCiAgICAgICAgICAg
ICAgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlci5kYXRhKCkpICsgMSA8PSBidWZmZXIuc2l6
ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KLSAgICAKLSAgICBpZiAoc3RyQnVmZmVyKSB7Ci0gICAgICAgIGZhc3RGcmVlKHN0ckJ1
ZmZlcik7Ci0gICAgfQogfQogCiBib29sIEtVUkw6Omhhc1BhdGgoKSBjb25zdApAQCAtNDkxLDg5
ICs1MDYsNzkgQEAgYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1Zh
bGlkICYmIHBhdGhFbmRQb3MgIT0gcG9ydEVuZFBvczsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBL
VVJMOjpsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0CitTdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21w
b25lbnQoKSBjb25zdAogewogICAgIGlmICghaGFzUGF0aCgpKQotICAgICAgICByZXR1cm4gRGVw
cmVjYXRlZFN0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpbnQgZW5k
ID0gcGF0aEVuZFBvcyAtIDE7Ci0gICAgaWYgKHVybFN0cmluZ1tlbmRdID09ICcvJykKKyAgICBp
ZiAobV9zdHJpbmdbZW5kXSA9PSAnLycpCiAgICAgICAgIC0tZW5kOwogCi0gICAgaW50IHN0YXJ0
ID0gdXJsU3RyaW5nLmZpbmRSZXYoJy8nLCBlbmQpOworICAgIGludCBzdGFydCA9IG1fc3RyaW5n
LnJldmVyc2VGaW5kKCcvJywgZW5kKTsKICAgICBpZiAoc3RhcnQgPCBwb3J0RW5kUG9zKQotICAg
ICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAgICAgKytzdGFydDsKIAotICAgIHJldHVybiB1cmxTdHJpbmcubWlkKHN0YXJ0LCBlbmQgLSBz
dGFydCArIDEpOworICAgIHJldHVybiBtX3N0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0
YXJ0ICsgMSk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6cHJvdG9jb2woKSBjb25zdAor
U3RyaW5nIEtVUkw6OnByb3RvY29sKCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewot
ICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0KKyAgICBpZiAoIW1faXNW
YWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybFN0cmluZy5s
ZWZ0KHNjaGVtZUVuZFBvcyk7CisgICAgcmV0dXJuIG1fc3RyaW5nLmxlZnQoc2NoZW1lRW5kUG9z
KTsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpob3N0KCkgY29uc3QKK1N0cmluZyBLVVJM
Ojpob3N0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4g
RGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0KKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCiAgICAgaW50IHN0YXJ0ID0gKHBhc3N3b3JkRW5kUG9zID09IHVz
ZXJTdGFydFBvcykgPyBwYXNzd29yZEVuZFBvcyA6IHBhc3N3b3JkRW5kUG9zICsgMTsKLSAgICBy
ZXR1cm4gZGVjb2RlX3N0cmluZyh1cmxTdHJpbmcubWlkKHN0YXJ0LCBob3N0RW5kUG9zIC0gc3Rh
cnQpKTsKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1YnN0
cmluZyhzdGFydCwgaG9zdEVuZFBvcyAtIHN0YXJ0KSk7CiB9CiAKLXVuc2lnbmVkIHNob3J0IGlu
dCBLVVJMOjpwb3J0KCkgY29uc3QKK3Vuc2lnbmVkIHNob3J0IEtVUkw6OnBvcnQoKSBjb25zdAog
ewotICAgIGlmICghbV9pc1ZhbGlkKSB7CisgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIH0KIAotICAgIGlmIChob3N0RW5kUG9zICE9IHBvcnRFbmRQb3MpIHsKLSAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzdWx0ID0gdXJsU3RyaW5n
Lm1pZChob3N0RW5kUG9zICsgMSwgcG9ydEVuZFBvcyAtIGhvc3RFbmRQb3MgLSAxKS50b1VTaG9y
dCgmb2spOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChob3N0RW5kUG9z
ID09IHBvcnRFbmRQb3MpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIDA7CisgICAg
aW50IG51bWJlciA9IG1fc3RyaW5nLnN1YnN0cmluZyhob3N0RW5kUG9zICsgMSwgcG9ydEVuZFBv
cyAtIGhvc3RFbmRQb3MgLSAxKS50b0ludCgpOworICAgIGlmIChudW1iZXIgPCAwIHx8IG51bWJl
ciA+IDB4RkZGRikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAot
RGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwYXNzKCkgY29uc3QKK1N0cmluZyBLVVJMOjpwYXNzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4gRGVwcmVjYXRl
ZFN0cmluZygpOwotICAgIH0KKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgaWYgKHBhc3N3b3JkRW5kUG9zID09IHVzZXJFbmRQb3MpIHsKLSAgICAg
ICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9CisgICAgaWYgKHBhc3N3b3JkRW5k
UG9zID09IHVzZXJFbmRQb3MpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVy
biBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5taWQodXNlckVuZFBvcyArIDEsIHBhc3N3b3JkRW5k
UG9zIC0gdXNlckVuZFBvcyAtIDEpKTsgCisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhtX3N0cmluZy5zdWJzdHJpbmcodXNlckVuZFBvcyArIDEsIHBhc3N3b3JkRW5kUG9zIC0g
dXNlckVuZFBvcyAtIDEpKTsgCiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6dXNlcigpIGNv
bnN0CitTdHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsK
LSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9CisgICAgaWYgKCFtX2lz
VmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBkZWNvZGVfc3Ry
aW5nKHVybFN0cmluZy5taWQodXNlclN0YXJ0UG9zLCB1c2VyRW5kUG9zIC0gdXNlclN0YXJ0UG9z
KSk7CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJzdHJp
bmcodXNlclN0YXJ0UG9zLCB1c2VyRW5kUG9zIC0gdXNlclN0YXJ0UG9zKSk7CiB9CiAKLURlcHJl
Y2F0ZWRTdHJpbmcgS1VSTDo6cmVmKCkgY29uc3QKK1N0cmluZyBLVVJMOjpyZWYoKSBjb25zdAog
ewotICAgIGlmICghbV9pc1ZhbGlkIHx8IGZyYWdtZW50RW5kUG9zID09IHF1ZXJ5RW5kUG9zKSB7
Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgfQorICAgIGlmICghbV9p
c1ZhbGlkIHx8IGZyYWdtZW50RW5kUG9zID09IHF1ZXJ5RW5kUG9zKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICByZXR1cm4gdXJsU3RyaW5nLm1pZChxdWVyeUVuZFBvcyArIDEsIGZy
YWdtZW50RW5kUG9zIC0gKHF1ZXJ5RW5kUG9zICsgMSkpOworICAgIHJldHVybiBtX3N0cmluZy5z
dWJzdHJpbmcocXVlcnlFbmRQb3MgKyAxLCBmcmFnbWVudEVuZFBvcyAtIChxdWVyeUVuZFBvcyAr
IDEpKTsKIH0KIAogYm9vbCBLVVJMOjpoYXNSZWYoKSBjb25zdApAQCAtNTgxLDIwMiArNTg2LDIy
NiBAQCBib29sIEtVUkw6Omhhc1JlZigpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNWYWxpZCAmJiBm
cmFnbWVudEVuZFBvcyAhPSBxdWVyeUVuZFBvczsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJM
OjpxdWVyeSgpIGNvbnN0CitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0UHJvdG9jb2xJc0dvb2Qo
Y29uc3QgY2hhciogcHJvdG9jb2wpCiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgY29uc3QgY2hh
ciogcCA9IHByb3RvY29sOworICAgIHdoaWxlICgqcCkgeworICAgICAgICBBU1NFUlQoKnAgPiAn
ICcgJiYgKnAgPCAweDdGICYmICEoKnAgPj0gJ0EnICYmICpwIDw9ICdaJykpOworICAgICAgICAr
K3A7CiAgICAgfQotCi0gICAgcmV0dXJuIHVybFN0cmluZy5taWQocGF0aEVuZFBvcywgcXVlcnlF
bmRQb3MgLSBwYXRoRW5kUG9zKTsgCisjZW5kaWYKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBLVVJM
OjpwYXRoKCkgY29uc3QKK2Jvb2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBjaGFyKiBwcm90b2Nv
bCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewotICAgICAgICByZXR1cm4gRGVwcmVj
YXRlZFN0cmluZygpOworICAgIC8vIERvIHRoZSBjb21wYXJpc29uIHdpdGhvdXQgbWFraW5nIGEg
bmV3IHN0cmluZyBvYmplY3QuCisgICAgYXNzZXJ0UHJvdG9jb2xJc0dvb2QocHJvdG9jb2wpOwor
ICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzY2hlbWVFbmRQb3M7ICsraSkgeworICAgICAgICBpZiAoIXByb3RvY29sW2ld
IHx8IHRvQVNDSUlMb3dlcihtX3N0cmluZ1tpXSkgIT0gcHJvdG9jb2xbaV0pCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHJldHVybiAhcHJvdG9jb2xbc2NoZW1lRW5kUG9z
XTsgLy8gV2Ugc2hvdWxkIGhhdmUgY29uc3VtZWQgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGFyZ3Vt
ZW50LgorfQorCitTdHJpbmcgS1VSTDo6cXVlcnkoKSBjb25zdAoreworICAgIGlmICghbV9pc1Zh
bGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gZGVjb2RlX3N0cmlu
Zyh1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MsIHBhdGhFbmRQb3MgLSBwb3J0RW5kUG9zKSk7IAor
ICAgIHJldHVybiBtX3N0cmluZy5zdWJzdHJpbmcocGF0aEVuZFBvcywgcXVlcnlFbmRQb3MgLSBw
YXRoRW5kUG9zKTsgCiB9CiAKLXZvaWQgS1VSTDo6c2V0UHJvdG9jb2woY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyAmcykKK1N0cmluZyBLVVJMOjpwYXRoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faXNW
YWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJzdHJpbmcocG9ydEVuZFBvcywgcGF0aEVuZFBvcyAt
IHBvcnRFbmRQb3MpKTsgCit9CisKK3ZvaWQgS1VSTDo6c2V0UHJvdG9jb2woY29uc3QgU3RyaW5n
JiBzKQogewogICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcg
bmV3VVJMID0gcyArICI6IiArIHVybFN0cmluZzsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lp
KCksICZuZXdVUkwpOworICAgICAgICBwYXJzZShzICsgIjoiICsgbV9zdHJpbmcpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSBzICsgdXJs
U3RyaW5nLm1pZChzY2hlbWVFbmRQb3MpOwotICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3
VVJMKTsKKyAgICBwYXJzZShzICsgbV9zdHJpbmcuc3Vic3RyaW5nKHNjaGVtZUVuZFBvcykpOwog
fQogCi12b2lkIEtVUkw6OnNldEhvc3QoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykKK3ZvaWQg
S1VSTDo6c2V0SG9zdChjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgaWYgKG1faXNWYWxpZCkgewot
ICAgICAgICBib29sIHNsYXNoU2xhc2hOZWVkZWQgPSB1c2VyU3RhcnRQb3MgPT0gc2NoZW1lRW5k
UG9zICsgMTsKLSAgICAgICAgaW50IGhvc3RTdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2Vy
U3RhcnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7Ci0gICAgICAg
IAotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KGhvc3RT
dGFydCkgKyAoc2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiBEZXByZWNhdGVkU3RyaW5nKCkpICsg
cyArIHVybFN0cmluZy5taWQoaG9zdEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2Np
aSgpLCAmbmV3VVJMKTsKLSAgICB9CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGJvb2wgc2xhc2hTbGFzaE5lZWRlZCA9IHVzZXJTdGFydFBvcyA9PSBzY2hlbWVF
bmRQb3MgKyAxOworICAgIGludCBob3N0U3RhcnQgPSAocGFzc3dvcmRFbmRQb3MgPT0gdXNlclN0
YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAxOworCisgICAgcGFy
c2UobV9zdHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDog
IiIpICsgcyArIG1fc3RyaW5nLnN1YnN0cmluZyhob3N0RW5kUG9zKSk7CiB9CiAKIHZvaWQgS1VS
TDo6c2V0UG9ydCh1bnNpZ25lZCBzaG9ydCBpKQogewotICAgIGlmIChtX2lzVmFsaWQpIHsKLSAg
ICAgICAgYm9vbCBjb2xvbk5lZWRlZCA9IHBvcnRFbmRQb3MgPT0gaG9zdEVuZFBvczsKLSAgICAg
ICAgaW50IHBvcnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IGhvc3RFbmRQb3MgOiBob3N0RW5kUG9z
ICsgMSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQo
cG9ydFN0YXJ0KSArIChjb2xvbk5lZWRlZCA/ICI6IiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaSkgKyB1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MpOwot
ICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0gICAgfQorICAgIGlmICgh
bV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGNvbG9uTmVlZGVkID0gcG9y
dEVuZFBvcyA9PSBob3N0RW5kUG9zOworICAgIGludCBwb3J0U3RhcnQgPSAoY29sb25OZWVkZWQg
PyBob3N0RW5kUG9zIDogaG9zdEVuZFBvcyArIDEpOworCisgICAgcGFyc2UobV9zdHJpbmcubGVm
dChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVkID8gIjoiIDogIiIpICsgU3RyaW5nOjpudW1iZXIo
aSkgKyBtX3N0cmluZy5zdWJzdHJpbmcocG9ydEVuZFBvcykpOwogfQogCi12b2lkIEtVUkw6OnNl
dEhvc3RBbmRQb3J0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhvc3RBbmRQb3J0KQordm9pZCBL
VVJMOjpzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0KQogewotICAgIGlm
IChtX2lzVmFsaWQpIHsKLSAgICAgICAgYm9vbCBzbGFzaFNsYXNoTmVlZGVkID0gdXNlclN0YXJ0
UG9zID09IHNjaGVtZUVuZFBvcyArIDE7Ci0gICAgICAgIGludCBob3N0U3RhcnQgPSAocGFzc3dv
cmRFbmRQb3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQ
b3MgKyAxOwotICAgICAgICAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxT
dHJpbmcubGVmdChob3N0U3RhcnQpICsgKHNsYXNoU2xhc2hOZWVkZWQgPyAiLy8iIDogRGVwcmVj
YXRlZFN0cmluZygpKSArIGhvc3RBbmRQb3J0ICsgdXJsU3RyaW5nLm1pZChwb3J0RW5kUG9zKTsK
LSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwotICAgIH0KKyAgICBpZiAo
IW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzbGFzaFNsYXNoTmVlZGVk
ID0gdXNlclN0YXJ0UG9zID09IHNjaGVtZUVuZFBvcyArIDE7CisgICAgaW50IGhvc3RTdGFydCA9
IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNz
d29yZEVuZFBvcyArIDE7CisKKyAgICBwYXJzZShtX3N0cmluZy5sZWZ0KGhvc3RTdGFydCkgKyAo
c2xhc2hTbGFzaE5lZWRlZCA/ICIvLyIgOiAiIikgKyBob3N0QW5kUG9ydCArIG1fc3RyaW5nLnN1
YnN0cmluZyhwb3J0RW5kUG9zKSk7CiB9CiAKLXZvaWQgS1VSTDo6c2V0VXNlcihjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nICZ1c2VyKQordm9pZCBLVVJMOjpzZXRVc2VyKGNvbnN0IFN0cmluZyYgdXNl
cikKIHsKLSAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdTsK
LSAgICAgICAgaW50IGVuZCA9IHVzZXJFbmRQb3M7Ci0gICAgICAgIGlmICghdXNlci5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIHUgPSB1c2VyOwotICAgICAgICAgICAgaWYgKHVzZXJTdGFydFBv
cyA9PSBzY2hlbWVFbmRQb3MgKyAxKQotICAgICAgICAgICAgICAgIHUgPSAiLy8iICsgdTsKLSAg
ICAgICAgICAgIC8vIEFkZCAnQCcgaWYgd2UgZGlkbid0IGhhdmUgb25lIGJlZm9yZS4KLSAgICAg
ICAgICAgIGlmIChlbmQgPT0gaG9zdEVuZFBvcyB8fCAoZW5kID09IHBhc3N3b3JkRW5kUG9zICYm
IHVybFN0cmluZ1tlbmRdICE9ICdAJykpCi0gICAgICAgICAgICAgICAgdSArPSAnQCc7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5l
aXRoZXIgdXNlciBub3IgcGFzc3dvcmQuCi0gICAgICAgICAgICBpZiAodXNlckVuZFBvcyA9PSBw
YXNzd29yZEVuZFBvcyAmJiBlbmQgIT0gaG9zdEVuZFBvcyAmJiB1cmxTdHJpbmdbZW5kXSA9PSAn
QCcpCi0gICAgICAgICAgICAgICAgZW5kICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdCh1c2VyU3RhcnRQb3MpICsg
dSArIHVybFN0cmluZy5taWQoZW5kKTsKLSAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZu
ZXdVUkwpOworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJp
bmcgdTsKKyAgICBpbnQgZW5kID0gdXNlckVuZFBvczsKKyAgICBpZiAoIXVzZXIuaXNFbXB0eSgp
KSB7CisgICAgICAgIHUgPSB1c2VyOworICAgICAgICBpZiAodXNlclN0YXJ0UG9zID09IHNjaGVt
ZUVuZFBvcyArIDEpCisgICAgICAgICAgICB1ID0gIi8vIiArIHU7CisgICAgICAgIC8vIEFkZCAn
QCcgaWYgd2UgZGlkbid0IGhhdmUgb25lIGJlZm9yZS4KKyAgICAgICAgaWYgKGVuZCA9PSBob3N0
RW5kUG9zIHx8IChlbmQgPT0gcGFzc3dvcmRFbmRQb3MgJiYgbV9zdHJpbmdbZW5kXSAhPSAnQCcp
KQorICAgICAgICAgICAgdS5hcHBlbmQoJ0AnKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBS
ZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dvcmQuCisgICAg
ICAgIGlmICh1c2VyRW5kUG9zID09IHBhc3N3b3JkRW5kUG9zICYmIGVuZCAhPSBob3N0RW5kUG9z
ICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAgICAgICAgICAgZW5kICs9IDE7CiAgICAgfQor
ICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQodXNlclN0YXJ0UG9zKSArIHUgKyBtX3N0cmluZy5zdWJz
dHJpbmcoZW5kKSk7CiB9CiAKLXZvaWQgS1VSTDo6c2V0UGFzcyhjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZwYXNzd29yZCkKLXsKLSAgICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgcDsKLSAgICAgICAgaW50IGVuZCA9IHBhc3N3b3JkRW5kUG9zOwotICAgICAgICBp
ZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcCA9ICc6JyArIHBhc3N3b3Jk
ICsgJ0AnOwotICAgICAgICAgICAgaWYgKHVzZXJFbmRQb3MgPT0gc2NoZW1lRW5kUG9zICsgMSkK
LSAgICAgICAgICAgICAgICBwID0gIi8vIiArIHA7Ci0gICAgICAgICAgICAvLyBFYXQgdGhlIGV4
aXN0aW5nICdAJyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYWRkIG91ciBvd24uCi0gICAgICAgICAg
ICBpZiAoZW5kICE9IGhvc3RFbmRQb3MgJiYgdXJsU3RyaW5nW2VuZF0gPT0gJ0AnKQotICAgICAg
ICAgICAgICAgIGVuZCArPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVt
b3ZlICdAJyBpZiB3ZSBub3cgaGF2ZSBuZWl0aGVyIHVzZXIgbm9yIHBhc3N3b3JkLgotICAgICAg
ICAgICAgaWYgKHVzZXJTdGFydFBvcyA9PSB1c2VyRW5kUG9zICYmIGVuZCAhPSBob3N0RW5kUG9z
ICYmIHVybFN0cmluZ1tlbmRdID09ICdAJykKLSAgICAgICAgICAgICAgICBlbmQgKz0gMTsKLSAg
ICAgICAgfQotICAgICAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmlu
Zy5sZWZ0KHVzZXJFbmRQb3MpICsgcCArIHVybFN0cmluZy5taWQoZW5kKTsKLSAgICAgICAgcGFy
c2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwordm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpCit7CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBwOworICAgIGludCBlbmQgPSBwYXNzd29yZEVuZFBvczsKKyAgICBpZiAo
IXBhc3N3b3JkLmlzRW1wdHkoKSkgeworICAgICAgICBwID0gIjoiICsgcGFzc3dvcmQgKyAiQCI7
CisgICAgICAgIGlmICh1c2VyRW5kUG9zID09IHNjaGVtZUVuZFBvcyArIDEpCisgICAgICAgICAg
ICBwID0gIi8vIiArIHA7CisgICAgICAgIC8vIEVhdCB0aGUgZXhpc3RpbmcgJ0AnIHNpbmNlIHdl
IGFyZSBnb2luZyB0byBhZGQgb3VyIG93bi4KKyAgICAgICAgaWYgKGVuZCAhPSBob3N0RW5kUG9z
ICYmIG1fc3RyaW5nW2VuZF0gPT0gJ0AnKQorICAgICAgICAgICAgZW5kICs9IDE7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gUmVtb3ZlICdAJyBpZiB3ZSBub3cgaGF2ZSBuZWl0aGVyIHVzZXIg
bm9yIHBhc3N3b3JkLgorICAgICAgICBpZiAodXNlclN0YXJ0UG9zID09IHVzZXJFbmRQb3MgJiYg
ZW5kICE9IGhvc3RFbmRQb3MgJiYgbV9zdHJpbmdbZW5kXSA9PSAnQCcpCisgICAgICAgICAgICBl
bmQgKz0gMTsKICAgICB9CisgICAgcGFyc2UobV9zdHJpbmcubGVmdCh1c2VyRW5kUG9zKSArIHAg
KyBtX3N0cmluZy5zdWJzdHJpbmcoZW5kKSk7CiB9CiAKLXZvaWQgS1VSTDo6c2V0UmVmKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcgJnMpCit2b2lkIEtVUkw6OnNldFJlZihjb25zdCBTdHJpbmcmIHMp
CiB7Ci0gICAgaWYgKG1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VS
TCA9IHVybFN0cmluZy5sZWZ0KHF1ZXJ5RW5kUG9zKSArIChzLmlzRW1wdHkoKSA/IERlcHJlY2F0
ZWRTdHJpbmcoKSA6ICIjIiArIHMpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5l
d1VSTCk7Ci0gICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisgICAg
cGFyc2UobV9zdHJpbmcubGVmdChxdWVyeUVuZFBvcykgKyAocy5pc0VtcHR5KCkgPyAiIiA6ICIj
IiArIHMpKTsKIH0KIAotdm9pZCBLVVJMOjpzZXRRdWVyeShjb25zdCBEZXByZWNhdGVkU3RyaW5n
ICZxdWVyeSkKK3ZvaWQgS1VSTDo6c2V0UXVlcnkoY29uc3QgU3RyaW5nJiBxdWVyeSkKIHsKLSAg
ICBpZiAobV9pc1ZhbGlkKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcTsKLSAgICAgICAg
aWYgKCFxdWVyeS5pc051bGwoKSAmJiAocXVlcnkuaXNFbXB0eSgpIHx8IHF1ZXJ5WzBdICE9ICc/
JykpIHsKLSAgICAgICAgICAgIHEgPSAiPyIgKyBxdWVyeTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHEgPSBxdWVyeTsKLSAgICAgICAgfQorICAgIGlmICghbV9pc1ZhbGlkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoKHF1ZXJ5LmlzRW1wdHkoKSB8fCBxdWVyeVswXSAhPSAn
PycpICYmICFxdWVyeS5pc051bGwoKSkKKyAgICAgICAgcGFyc2UobV9zdHJpbmcubGVmdChwYXRo
RW5kUG9zKSArICI/IiArIHF1ZXJ5ICsgbV9zdHJpbmcuc3Vic3RyaW5nKHF1ZXJ5RW5kUG9zKSk7
CisgICAgZWxzZQorICAgICAgICBwYXJzZShtX3N0cmluZy5sZWZ0KHBhdGhFbmRQb3MpICsgcXVl
cnkgKyBtX3N0cmluZy5zdWJzdHJpbmcocXVlcnlFbmRQb3MpKTsKIAotICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBhdGhFbmRQb3MpICsgcSArIHVybFN0
cmluZy5taWQocXVlcnlFbmRQb3MpOwotICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5l
d1VSTCk7Ci0gICAgfQogfQogCi12b2lkIEtVUkw6OnNldFBhdGgoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAmcykKK3ZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgaWYg
KG1faXNWYWxpZCkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmlu
Zy5sZWZ0KHBvcnRFbmRQb3MpICsgZW5jb2RlX3N0cmluZyhzKSArIHVybFN0cmluZy5taWQocGF0
aEVuZFBvcyk7Ci0gICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKLSAgICB9
CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIHBhcnNlKG1fc3Ry
aW5nLmxlZnQocG9ydEVuZFBvcykgKyBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHMpICsg
bV9zdHJpbmcuc3Vic3RyaW5nKHBhdGhFbmRQb3MpKTsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBL
VVJMOjpwcmV0dHlVUkwoKSBjb25zdAorU3RyaW5nIEtVUkw6OnByZXR0eVVSTCgpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKLSAgICAgICAgcmV0dXJuIHVybFN0cmluZzsKLSAgICB9
CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBtX3N0cmluZzsKIAotICAgIERl
cHJlY2F0ZWRTdHJpbmcgcmVzdWx0ID0gcHJvdG9jb2woKSArICI6IjsKKyAgICBWZWN0b3I8VUNo
YXI+IHJlc3VsdDsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXV0aG9yaXR5OworICAgIGFwcGVu
ZChyZXN1bHQsIHByb3RvY29sKCkpOworICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKKworICAgIFZl
Y3RvcjxVQ2hhcj4gYXV0aG9yaXR5OwogCiAgICAgaWYgKGhvc3RFbmRQb3MgIT0gcGFzc3dvcmRF
bmRQb3MpIHsKICAgICAgICAgaWYgKHVzZXJFbmRQb3MgIT0gdXNlclN0YXJ0UG9zKSB7Ci0gICAg
ICAgICAgICBhdXRob3JpdHkgKz0gdXNlcigpOwotICAgICAgICAgICAgYXV0aG9yaXR5ICs9ICJA
IjsKKyAgICAgICAgICAgIGFwcGVuZChhdXRob3JpdHksIHVzZXIoKSk7CisgICAgICAgICAgICBh
dXRob3JpdHkuYXBwZW5kKCdAJyk7CiAgICAgICAgIH0KLSAgICAgICAgYXV0aG9yaXR5ICs9IGhv
c3QoKTsKKyAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwgaG9zdCgpKTsKICAgICAgICAgaWYgKHBv
cnQoKSAhPSAwKSB7Ci0gICAgICAgICAgICBhdXRob3JpdHkgKz0gIjoiOwotICAgICAgICAgICAg
YXV0aG9yaXR5ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihwb3J0KCkpOworICAgICAgICAg
ICAgYXV0aG9yaXR5LmFwcGVuZCgnOicpOworICAgICAgICAgICAgYXBwZW5kKGF1dGhvcml0eSwg
U3RyaW5nOjpudW1iZXIocG9ydCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWF1
dGhvcml0eS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdCArPSAiLy8iICsgYXV0aG9yaXR5Owot
ICAgIGVsc2UgaWYgKHByb3RvY29sKCkgPT0gImZpbGUiKQotICAgICAgICByZXN1bHQgKz0gIi8v
IjsKKyAgICBpZiAoIWF1dGhvcml0eS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnLycpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYXV0aG9yaXR5KTsKKyAgICB9IGVsc2UgaWYgKHByb3RvY29sSXMoImZpbGUiKSkgeworICAg
ICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKKyAg
ICB9CiAKLSAgICByZXN1bHQgKz0gcGF0aCgpOwotICAgIHJlc3VsdCArPSBxdWVyeSgpOworICAg
IGFwcGVuZChyZXN1bHQsIHBhdGgoKSk7CisgICAgYXBwZW5kKHJlc3VsdCwgcXVlcnkoKSk7CiAK
ICAgICBpZiAoZnJhZ21lbnRFbmRQb3MgIT0gcXVlcnlFbmRQb3MpIHsKLSAgICAgICAgcmVzdWx0
ICs9ICIjIiArIHJlZigpOworICAgICAgICByZXN1bHQuYXBwZW5kKCcjJyk7CisgICAgICAgIGFw
cGVuZChyZXN1bHQsIHJlZigpKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgS1VSTDo6
ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1cmxTdHJpbmcpCitTdHJpbmcg
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyKQogewotICAgIHJldHVy
biBkZWNvZGVfc3RyaW5nKHVybFN0cmluZywgVVRGOEVuY29kaW5nKCkpOworICAgIHJldHVybiBk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoc3RyLCBVVEY4RW5jb2RpbmcoKSk7CiB9CiAKLURlcHJl
Y2F0ZWRTdHJpbmcgS1VSTDo6ZGVjb2RlX3N0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1
cmxTdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCitTdHJpbmcgZGVjb2RlVVJM
RXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nKQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KCIiKTsKKyAgICBWZWN0b3I8
VUNoYXI+IHJlc3VsdDsKIAotICAgIFZlY3RvcjxjaGFyLCAyMDQ4PiBidWZmZXIoMCk7CisgICAg
Q2hhckJ1ZmZlciBidWZmZXI7CiAKLSAgICBpbnQgbGVuZ3RoID0gdXJsU3RyaW5nLmxlbmd0aCgp
OworICAgIGludCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAgaW50IGRlY29kZWRQb3NpdGlv
biA9IDA7CiAgICAgaW50IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBpbnQgZW5jb2RlZFJ1blBv
c2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gdXJsU3RyaW5nLmZpbmQo
JyUnLCBzZWFyY2hQb3NpdGlvbikpID49IDApIHsKKyAgICB3aGlsZSAoKGVuY29kZWRSdW5Qb3Np
dGlvbiA9IHN0ci5maW5kKCclJywgc2VhcmNoUG9zaXRpb24pKSA+PSAwKSB7CiAgICAgICAgIC8v
IEZpbmQgdGhlIHNlcXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgogICAgICAgICBpbnQgZW5jb2Rl
ZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICAgICAgd2hpbGUgKGxlbmd0aCAtIGVu
Y29kZWRSdW5FbmQgPj0gMwotICAgICAgICAgICAgICAgICYmIHVybFN0cmluZ1tlbmNvZGVkUnVu
RW5kXSA9PSAnJScKLSAgICAgICAgICAgICAgICAmJiBpc0hleERpZ2l0KHVybFN0cmluZ1tlbmNv
ZGVkUnVuRW5kICsgMV0ubGF0aW4xKCkpCi0gICAgICAgICAgICAgICAgJiYgaXNIZXhEaWdpdCh1
cmxTdHJpbmdbZW5jb2RlZFJ1bkVuZCArIDJdLmxhdGluMSgpKSkKKyAgICAgICAgICAgICAgICAm
JiBzdHJbZW5jb2RlZFJ1bkVuZF0gPT0gJyUnCisgICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhl
eERpZ2l0KHN0cltlbmNvZGVkUnVuRW5kICsgMV0pCisgICAgICAgICAgICAgICAgJiYgaXNBU0NJ
SUhleERpZ2l0KHN0cltlbmNvZGVkUnVuRW5kICsgMl0pKQogICAgICAgICAgICAgZW5jb2RlZFJ1
bkVuZCArPSAzOwogICAgICAgICBpZiAoZW5jb2RlZFJ1bkVuZCA9PSBlbmNvZGVkUnVuUG9zaXRp
b24pIHsKICAgICAgICAgICAgICsrc2VhcmNoUG9zaXRpb247CkBAIC03ODQsMTYgKzgxMywxMiBA
QCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uCiAgICAgICAgIH0KICAg
ICAgICAgc2VhcmNoUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwogCi0gICAgICAgIC8vIENvcHkg
dGhlIGVudGlyZSAlLWVzY2FwZSBzZXF1ZW5jZSBpbnRvIGFuIDgtYml0IGJ1ZmZlci4KLSAgICAg
ICAgaW50IGVuY29kZWRSdW5MZW5ndGggPSBlbmNvZGVkUnVuRW5kIC0gZW5jb2RlZFJ1blBvc2l0
aW9uOwotICAgICAgICBidWZmZXIuY2xlYXIoKTsKLSAgICAgICAgYnVmZmVyLmdyb3coZW5jb2Rl
ZFJ1bkxlbmd0aCArIDEpOwotICAgICAgICB1cmxTdHJpbmcuY29weUxhdGluMShidWZmZXIuZGF0
YSgpLCBlbmNvZGVkUnVuUG9zaXRpb24sIGVuY29kZWRSdW5MZW5ndGgpOwotCiAgICAgICAgIC8v
IERlY29kZSB0aGUgJS1lc2NhcGVzIGludG8gYnl0ZXMuCi0gICAgICAgIGNoYXIgKnAgPSBidWZm
ZXIuZGF0YSgpOwotICAgICAgICBjb25zdCBjaGFyICpxID0gYnVmZmVyLmRhdGEoKTsKLSAgICAg
ICAgd2hpbGUgKCpxKSB7CisgICAgICAgIHVuc2lnbmVkIHJ1bkxlbmd0aCA9IChlbmNvZGVkUnVu
RW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uKSAvIDM7CisgICAgICAgIGJ1ZmZlci5yZXNpemUocnVu
TGVuZ3RoKTsKKyAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgICAgIGNvbnN0
IFVDaGFyKiBxID0gc3RyLmNoYXJhY3RlcnMoKSArIGVuY29kZWRSdW5Qb3NpdGlvbjsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsgKytpKSB7CiAgICAgICAgICAg
ICAqcCsrID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBoZXhEaWdpdFZhbHVlKHFbMl0p
OwogICAgICAgICAgICAgcSArPSAzOwogICAgICAgICB9CkBAIC04MDQsMTMgKzgyOSwxNCBAQCBE
ZXByZWNhdGVkU3RyaW5nIEtVUkw6OmRlY29kZV9zdHJpbmcoY29uCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAvLyBCdWlsZCB1cCB0aGUgc3RyaW5nIHdpdGggd2hhdCB3ZSBqdXN0
IHNraXBwZWQgYW5kIHdoYXQgd2UganVzdCBkZWNvZGVkLgotICAgICAgICByZXN1bHQuYXBwZW5k
KHVybFN0cmluZy5taWQoZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNv
ZGVkUG9zaXRpb24pKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IERlcHJlY2F0ZWRDaGFyKj4oZGVjb2RlZC5jaGFyYWN0ZXJzKCkpLCBkZWNvZGVkLmxlbmd0
aCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpICsgZGVjb2RlZFBv
c2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGRlY29kZWQuY2hhcmFjdGVycygpLCBkZWNvZGVkLmxlbmd0aCgpKTsKICAg
ICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKICAgICB9CiAKLSAgICByZXN1
bHQuYXBwZW5kKHVybFN0cmluZy5taWQoZGVjb2RlZFBvc2l0aW9uLCBsZW5ndGggLSBkZWNvZGVk
UG9zaXRpb24pKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNo
YXJhY3RlcnMoKSArIGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsK
KworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CiB9CiAKIGJvb2wgS1VSTDo6aXNM
b2NhbEZpbGUoKSBjb25zdApAQCAtODE5LDE1ICs4NDUsMTUgQEAgYm9vbCBLVVJMOjppc0xvY2Fs
RmlsZSgpIGNvbnN0CiAgICAgLy8gYW5kIGluY2x1ZGluZyBmZWVkIHdvdWxkIGFsbG93IGZlZWRz
IHRvIHBvdGVudGlhbGx5IGxldCBzb21lb25lJ3MgYmxvZwogICAgIC8vIHJlYWQgdGhlIGNvbnRl
bnRzIG9mIHRoZSBjbGlwYm9hcmQgb24gYSBkcmFnLCBldmVuIHdpdGhvdXQgYSBkcm9wLgogICAg
IC8vIExpa2V3aXNlIHdpdGggdXNpbmcgdGhlIEZyYW1lTG9hZGVyOjpzaG91bGRUcmVhdFVSTEFz
TG9jYWwoKSBmdW5jdGlvbi4KLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2wo
KSwgImZpbGUiKTsKKyAgICByZXR1cm4gcHJvdG9jb2xJcygiZmlsZSIpOwogfQogCi1zdGF0aWMg
dm9pZCBhcHBlbmRFc2NhcGluZ0JhZENoYXJzKGNoYXIqJiBidWZmZXIsIGNvbnN0IGNoYXIgKnN0
clN0YXJ0LCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIHZvaWQgYXBwZW5kRXNjYXBpbmdCYWRDaGFy
cyhjaGFyKiYgYnVmZmVyLCBjb25zdCBjaGFyKiBzdHJTdGFydCwgc2l6ZV90IGxlbmd0aCkKIHsK
LSAgICBjaGFyICpwID0gYnVmZmVyOworICAgIGNoYXIqIHAgPSBidWZmZXI7CiAKLSAgICBjb25z
dCBjaGFyICpzdHIgPSBzdHJTdGFydDsKLSAgICBjb25zdCBjaGFyICpzdHJFbmQgPSBzdHJTdGFy
dCArIGxlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBzdHIgPSBzdHJTdGFydDsKKyAgICBjb25zdCBj
aGFyKiBzdHJFbmQgPSBzdHJTdGFydCArIGxlbmd0aDsKICAgICB3aGlsZSAoc3RyIDwgc3RyRW5k
KSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpzdHIrKzsKICAgICAgICAgaWYgKGlzQmFk
Q2hhcihjKSkgewpAQCAtODQyLDIwICs4NjgsMjAgQEAgc3RhdGljIHZvaWQgYXBwZW5kRXNjYXBp
bmdCYWRDaGFycyhjaGFyKgogICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCisKICAgICBidWZmZXIgPSBwOwogfQogCiAvLyBjb3B5IGEgcGF0aCwgYWNjb3VudGlu
ZyBmb3IgIi4iIGFuZCAiLi4iIHNlZ21lbnRzCi1zdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdE
b3RzKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQp
CitzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIqIGRzdCwgY29uc3QgY2hhciog
c3JjLCBpbnQgc3JjU3RhcnQsIGludCBzcmNFbmQpCiB7Ci0gICAgY2hhciAqYnVmZmVyUGF0aFN0
YXJ0ID0gZHN0OworICAgIGNoYXIqIGJ1ZmZlclBhdGhTdGFydCA9IGRzdDsKIAogICAgIC8vIGVt
cHR5IHBhdGggaXMgYSBzcGVjaWFsIGNhc2UsIGFuZCBuZWVkIG5vdCBoYXZlIGEgbGVhZGluZyBz
bGFzaAogICAgIGlmIChzcmNTdGFydCAhPSBzcmNFbmQpIHsKLSAgICAgICAgY29uc3QgY2hhciAq
YmFzZVN0cmluZ1N0YXJ0ID0gc3JjICsgc3JjU3RhcnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmJh
c2VTdHJpbmdFbmQgPSBzcmMgKyBzcmNFbmQ7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmJhc2VTdHJp
bmdQb3MgPSBiYXNlU3RyaW5nU3RhcnQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VTdHJpbmdT
dGFydCA9IHNyYyArIHNyY1N0YXJ0OworICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nRW5k
ID0gc3JjICsgc3JjRW5kOworICAgICAgICBjb25zdCBjaGFyKiBiYXNlU3RyaW5nUG9zID0gYmFz
ZVN0cmluZ1N0YXJ0OwogCiAgICAgICAgIC8vIHRoaXMgY29kZSBpcyB1bnByZXBhcmVkIGZvciBw
YXRocyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRoIGEKICAgICAgICAgLy8gc2xhc2ggYW5kIHdlIHNo
b3VsZCBhbHdheXMgaGF2ZSBvbmUgaW4gdGhlIHNvdXJjZSBzdHJpbmcKQEAgLTkwNCw5ICs5MzAs
OSBAQCBzdGF0aWMgaW50IGNvcHlQYXRoUmVtb3ZpbmdEb3RzKGNoYXIgKmRzCiAgICAgcmV0dXJu
IGRzdCAtIGJ1ZmZlclBhdGhTdGFydDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGhhc1NsYXNo
RG90T3JEb3REb3QoY29uc3QgY2hhciAqc3RyKQorc3RhdGljIGlubGluZSBib29sIGhhc1NsYXNo
RG90T3JEb3REb3QoY29uc3QgY2hhciogc3RyKQogewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oc3RyKTsKKyAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oc3RyKTsKICAgICBpZiAoISpwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdW5z
aWduZWQgY2hhciBwYyA9ICpwOwpAQCAtOTIzLDIxICs5NDksMzAgQEAgc3RhdGljIGlubGluZSBi
b29sIG1hdGNoTGV0dGVyKGNoYXIgYywgYwogICAgIHJldHVybiAoYyB8IDB4MjApID09IGxvd2Vy
Y2FzZUxldHRlcjsKIH0KIAotdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcgKm9yaWdpbmFsU3RyaW5nKQordm9pZCBLVVJMOjpwYXJzZShjb25z
dCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyB0aHJvd3MgYXdheSB0aGUg
aGlnaCBieXRlcyBvZiBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyEKKyAgICBDaGFy
QnVmZmVyIGJ1ZmZlcihzdHJpbmcubGVuZ3RoKCkgKyAxKTsKKyAgICBjb3B5QVNDSUkoc3RyaW5n
LmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBidWZmZXIuZGF0YSgpKTsKKyAgICBidWZm
ZXJbc3RyaW5nLmxlbmd0aCgpXSA9ICdcMCc7CisgICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgJnN0
cmluZyk7Cit9CisKK3ZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciogdXJsLCBjb25zdCBTdHJp
bmcqIG9yaWdpbmFsU3RyaW5nKQogewogICAgIG1faXNWYWxpZCA9IHRydWU7CiAKICAgICBpZiAo
IXVybCB8fCB1cmxbMF0gPT0gJ1wwJykgewogICAgICAgICAvLyB2YWxpZCBVUkwgbXVzdCBiZSBu
b24tZW1wdHkKKyAgICAgICAgbV9zdHJpbmcgPSBvcmlnaW5hbFN0cmluZyA/ICpvcmlnaW5hbFN0
cmluZyA6IHVybDsKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHVybFN0cmlu
ZyA9IHVybDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghaXNTY2hlbWVGaXJz
dENoYXIodXJsWzBdKSkgewogICAgICAgICAvLyBzY2hlbWUgbXVzdCBzdGFydCB3aXRoIGFuIGFs
cGhhYmV0aWMgY2hhcmFjdGVyCisgICAgICAgIG1fc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcgPyAq
b3JpZ2luYWxTdHJpbmcgOiB1cmw7CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAg
ICB1cmxTdHJpbmcgPSB1cmw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk0OCw4ICs5
ODMsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgfQog
CiAgICAgaWYgKHVybFtzY2hlbWVFbmRdICE9ICc6JykgeworICAgICAgICBtX3N0cmluZyA9IG9y
aWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwogICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgdXJsU3RyaW5nID0gdXJsOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC05NjcsNyArMTAwMiw3IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJs
LCBjb25zdCAKICAgICBpZiAoaGllcmFyY2hpY2FsICYmIHVybFtzY2hlbWVFbmQgKyAyXSA9PSAn
LycpIHsKICAgICAgICAgLy8gcGFydCBhZnRlciB0aGUgc2NoZW1lIG11c3QgYmUgYSBuZXRfcGF0
aCwgcGFyc2UgdGhlIGF1dGhvcml0eSBzZWN0aW9uCiAKLSAgICAgICAgLy8gRklYTUU6IGF1dGhv
cml0eSBjaGFyYWN0ZXJzIG1heSBiZSBzY2FubmVkIHR3aWNlCisgICAgICAgIC8vIEZJWE1FOiBB
dXRob3JpdHkgY2hhcmFjdGVycyBtYXkgYmUgc2Nhbm5lZCB0d2ljZS4KICAgICAgICAgdXNlclN0
YXJ0ICs9IDI7CiAgICAgICAgIHVzZXJFbmQgPSB1c2VyU3RhcnQ7CiAKQEAgLTk3OCw3ICsxMDEz
LDcgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdXNlckVuZCsrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmICh1cmxbdXNlckVuZF0gPT0gJ0AnKSB7CiAgICAgICAgICAgICAvLyBhY3R1YWwgZW5k
IG9mIHRoZSB1c2VyaW5mbywgc3RhcnQgb24gdGhlIGhvc3QKICAgICAgICAgICAgIGlmIChjb2xv
blBvcyAhPSAwKSB7CkBAIC05OTgsOCArMTAzMyw4IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3Qg
Y2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgICAgIGhvc3RTdGFydCA9IHVzZXJTdGFydDsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIGludmFsaWQgY2hhcmFjdGVyCisgICAgICAg
ICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3RyaW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwog
ICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB1cmxTdHJpbmcgPSB1
cmw7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTAxNSw4ICsxMDUwLDgg
QEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAgICAg
ICAgIGhvc3RFbmQrKzsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
aW52YWxpZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBtX3N0cmluZyA9IG9yaWdpbmFsU3Ry
aW5nID8gKm9yaWdpbmFsU3RyaW5nIDogdXJsOwogICAgICAgICAgICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIHVybFN0cmluZyA9IHVybDsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDM5LDggKzEw
NzQsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAKICAgICAg
ICAgaWYgKCFpc1BhdGhTZWdtZW50RW5kQ2hhcih1cmxbcG9ydEVuZF0pKSB7CiAgICAgICAgICAg
ICAvLyBpbnZhbGlkIGNoYXJhY3RlcgorICAgICAgICAgICAgbV9zdHJpbmcgPSBvcmlnaW5hbFN0
cmluZyA/ICpvcmlnaW5hbFN0cmluZyA6IHVybDsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwotICAgICAgICAgICAgdXJsU3RyaW5nID0gdXJsOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTEwNTAsNyArMTA4NSw3IEBAIHZvaWQgS1VSTDo6
cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICAgICAgaG9zdFN0YXJ0ID0gaG9zdEVu
ZCA9IHBhc3N3b3JkRW5kOwogICAgICAgICBwb3J0U3RhcnQgPSBwb3J0RW5kID0gaG9zdEVuZDsK
ICAgICB9Ci0gICAgICAgIAorCiAgICAgaW50IHBhdGhTdGFydCA9IHBvcnRFbmQ7CiAgICAgaW50
IHBhdGhFbmQgPSBwYXRoU3RhcnQ7CiAgICAgaW50IHF1ZXJ5U3RhcnQ7CkBAIC0xMDYxLDE0ICsx
MDk2LDE0IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAqdXJsLCBjb25zdCAKICAgICBp
ZiAoIWhpZXJhcmNoaWNhbCkgewogICAgICAgICB3aGlsZSAodXJsW3BhdGhFbmRdICE9ICdcMCcg
JiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0aEVuZF0gIT0gJyMnKQogICAgICAgICAg
ICAgcGF0aEVuZCsrOwotICAgICAgICAKKwogICAgICAgICBxdWVyeVN0YXJ0ID0gcGF0aEVuZDsK
ICAgICAgICAgcXVlcnlFbmQgPSBxdWVyeVN0YXJ0OwogICAgICAgICBpZiAodXJsW3F1ZXJ5U3Rh
cnRdID09ICc/JykgewogICAgICAgICAgICAgd2hpbGUgKHVybFtxdWVyeUVuZF0gIT0gJ1wwJyAm
JiB1cmxbcXVlcnlFbmRdICE9ICcjJykKICAgICAgICAgICAgICAgICBxdWVyeUVuZCsrOwogICAg
ICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZyYWdtZW50U3RhcnQgPSBxdWVyeUVuZDsKICAg
ICAgICAgZnJhZ21lbnRFbmQgPSBmcmFnbWVudFN0YXJ0OwogICAgICAgICBpZiAodXJsW2ZyYWdt
ZW50U3RhcnRdID09ICcjJykgewpAQCAtMTA3NiwxMyArMTExMSwxMyBAQCB2b2lkIEtVUkw6OnBh
cnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgICAgICAgICBmcmFnbWVudEVuZCA9IGZy
YWdtZW50U3RhcnQ7CiAgICAgICAgICAgICB3aGlsZSAodXJsW2ZyYWdtZW50RW5kXSAhPSAnXDAn
KQogICAgICAgICAgICAgICAgIGZyYWdtZW50RW5kKys7Ci0gICAgICAgIH0gICAgICAgIAorICAg
ICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3aGlsZSAodXJsW3BhdGhFbmRdICE9
ICdcMCcgJiYgdXJsW3BhdGhFbmRdICE9ICc/JyAmJiB1cmxbcGF0aEVuZF0gIT0gJyMnKSB7CiAg
ICAgICAgICAgICBwYXRoRW5kKys7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBxdWVyeVN0
YXJ0ID0gcGF0aEVuZDsKICAgICAgICAgcXVlcnlFbmQgPSBxdWVyeVN0YXJ0OwogICAgICAgICBp
ZiAodXJsW3F1ZXJ5U3RhcnRdID09ICc/JykgewpAQCAtMTA5MCw3ICsxMTI1LDcgQEAgdm9pZCBL
VVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAgICAgICAgIHF1ZXJ5
RW5kKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZnJh
Z21lbnRTdGFydCA9IHF1ZXJ5RW5kOwogICAgICAgICBmcmFnbWVudEVuZCA9IGZyYWdtZW50U3Rh
cnQ7CiAgICAgICAgIGlmICh1cmxbZnJhZ21lbnRTdGFydF0gPT0gJyMnKSB7CkBAIC0xMTExLDkg
KzExNDYsOCBAQCB2b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAKICAg
ICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKICAgICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1
cmwgKyBzY2hlbWVFbmQ7Ci0gICAgd2hpbGUgKHN0clB0ciA8IHNjaGVtZUVuZFB0cikgeworICAg
IHdoaWxlIChzdHJQdHIgPCBzY2hlbWVFbmRQdHIpCiAgICAgICAgICpwKysgPSAqc3RyUHRyKys7
Ci0gICAgfQogICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwogCiAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgaHR0cCBvciBodHRwcy4KQEAgLTExNDAsMTIgKzExNzQsMTIgQEAgdm9p
ZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogICAgICAgICAmJiBtYXRjaExl
dHRlcih1cmxbMl0sICdsJykKICAgICAgICAgJiYgbWF0Y2hMZXR0ZXIodXJsWzNdLCAnZScpCiAg
ICAgICAgICYmIHVybFs0XSA9PSAnOic7Ci0gICAgICAgIAorCiAgICAgLy8gRmlsZSBVUkxzIG5l
ZWQgYSBob3N0IHBhcnQgdW5sZXNzIGl0IGlzIGp1c3QgZmlsZTovLyBvciBmaWxlOi8vbG9jYWxo
b3N0CiAgICAgYm9vbCBkZWdlbkZpbGVQYXRoID0gcGF0aFN0YXJ0ID09IHBhdGhFbmQKICAgICAg
ICAgJiYgKGhvc3RTdGFydCA9PSBob3N0RW5kCiAgICAgICAgICAgICB8fCBob3N0SXNMb2NhbEhv
c3QpOwotICAgIAorCiAgICAgYm9vbCBoYXZlTm9uSG9zdEF1dGhvcml0eVBhcnQgPSB1c2VyU3Rh
cnQgIT0gdXNlckVuZCB8fCBwYXNzd29yZFN0YXJ0ICE9IHBhc3N3b3JkRW5kIHx8IHBvcnRTdGFy
dCAhPSBwb3J0RW5kOwogCiAgICAgLy8gYWRkICI6IiBhZnRlciBzY2hlbWUKQEAgLTExNjgsNDYg
KzEyMDIsNDEgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IAogCiAg
ICAgICAgIC8vIGNvcHkgaW4gdGhlIHVzZXIKICAgICAgICAgc3RyUHRyID0gdXJsICsgdXNlclN0
YXJ0OwotICAgICAgICBjb25zdCBjaGFyICp1c2VyRW5kUHRyID0gdXJsICsgdXNlckVuZDsKLSAg
ICAgICAgd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpIHsKKyAgICAgICAgY29uc3QgY2hhciog
dXNlckVuZFB0ciA9IHVybCArIHVzZXJFbmQ7CisgICAgICAgIHdoaWxlIChzdHJQdHIgPCB1c2Vy
RW5kUHRyKQogICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICAgICAgfQogICAgICAg
ICB1c2VyRW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IGNvcHkgaW4gdGhlIHBhc3N3b3JkCiAgICAgICAgIGlmIChwYXNzd29yZEVuZCAhPSBwYXNzd29y
ZFN0YXJ0KSB7CiAgICAgICAgICAgICAqcCsrID0gJzonOwogICAgICAgICAgICAgc3RyUHRyID0g
dXJsICsgcGFzc3dvcmRTdGFydDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkRW5k
UHRyID0gdXJsICsgcGFzc3dvcmRFbmQ7Ci0gICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgcGFz
c3dvcmRFbmRQdHIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkRW5kUHRyID0g
dXJsICsgcGFzc3dvcmRFbmQ7CisgICAgICAgICAgICB3aGlsZSAoc3RyUHRyIDwgcGFzc3dvcmRF
bmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBwYXNzd29yZEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwot
ICAgICAgICAKKwogICAgICAgICAvLyBJZiB3ZSBoYWQgYW55IHVzZXIgaW5mbywgYWRkICJAIgot
ICAgICAgICBpZiAocCAtIGJ1ZmZlci5kYXRhKCkgIT0gdXNlclN0YXJ0UG9zKSB7CisgICAgICAg
IGlmIChwIC0gYnVmZmVyLmRhdGEoKSAhPSB1c2VyU3RhcnRQb3MpCiAgICAgICAgICAgICAqcCsr
ID0gJ0AnOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIGhv
c3QsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIGZpbGUgVVJMIHdpdGggYXV0aG9yaXR5PSJsb2Nh
bGhvc3QiCiAgICAgICAgIGlmICghKGlzRmlsZSAmJiBob3N0SXNMb2NhbEhvc3QgJiYgIWhhdmVO
b25Ib3N0QXV0aG9yaXR5UGFydCkpIHsKICAgICAgICAgICAgIHN0clB0ciA9IHVybCArIGhvc3RT
dGFydDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RFbmRQdHIgPSB1cmwgKyBob3N0RW5k
OwotICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpIHsKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGhvc3RFbmRQdHIgPSB1cmwgKyBob3N0RW5kOworICAgICAgICAgICAgd2hp
bGUgKHN0clB0ciA8IGhvc3RFbmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIr
KzsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBob3N0RW5kUG9zID0gcCAtIGJ1
ZmZlci5kYXRhKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGNvcHkgaW4gdGhlIHBvcnQKICAg
ICAgICAgaWYgKGhvc3RFbmQgIT0gcG9ydFN0YXJ0KSB7CiAgICAgICAgICAgICAqcCsrID0gJzon
OwogICAgICAgICAgICAgc3RyUHRyID0gdXJsICsgcG9ydFN0YXJ0OwogICAgICAgICAgICAgY29u
c3QgY2hhciAqcG9ydEVuZFB0ciA9IHVybCArIHBvcnRFbmQ7Ci0gICAgICAgICAgICB3aGlsZSAo
c3RyUHRyIDwgcG9ydEVuZFB0cikgeworICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IHBvcnRF
bmRQdHIpCiAgICAgICAgICAgICAgICAgKnArKyA9ICpzdHJQdHIrKzsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAgICAg
fSBlbHNlIHsKQEAgLTEyMTYsMjYgKzEyNDUsMjMgQEAgdm9pZCBLVVJMOjpwYXJzZShjb25zdCBj
aGFyICp1cmwsIGNvbnN0IAogCiAgICAgLy8gRm9yIGNhbm9uaWNhbGl6YXRpb24sIGVuc3VyZSB3
ZSBoYXZlIGEgJy8nIGZvciBubyBwYXRoLgogICAgIC8vIE9ubHkgZG8gdGhpcyBmb3IgaHR0cCBh
bmQgaHR0cHMuCi0gICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0aEVuZCAtIHBhdGhTdGFydCA9
PSAwKSB7CisgICAgaWYgKGlzSFRUUG9ySFRUUFMgJiYgcGF0aEVuZCAtIHBhdGhTdGFydCA9PSAw
KQogICAgICAgICAqcCsrID0gJy8nOwotICAgIH0KLSAgICAgICAKKwogICAgIC8vIGFkZCBwYXRo
LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwotICAgIAogICAgIGlmIChoaWVyYXJjaGljYWwgJiYg
aGFzU2xhc2hEb3RPckRvdERvdCh1cmwpKSB7Ci0gICAgICAgIFZlY3RvcjxjaGFyLCA0MDk2PiBw
YXRoX2J1ZmZlcihwYXRoRW5kIC0gcGF0aFN0YXJ0ICsgMSk7CisgICAgICAgIENoYXJCdWZmZXIg
cGF0aF9idWZmZXIocGF0aEVuZCAtIHBhdGhTdGFydCArIDEpOwogICAgICAgICBjb3B5UGF0aFJl
bW92aW5nRG90cyhwYXRoX2J1ZmZlci5kYXRhKCksIHVybCwgcGF0aFN0YXJ0LCBwYXRoRW5kKTsK
ICAgICAgICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCBwYXRoX2J1ZmZlci5kYXRhKCksIHN0
cmxlbihwYXRoX2J1ZmZlci5kYXRhKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAgYXBwZW5kRXNj
YXBpbmdCYWRDaGFycyhwLCB1cmwgKyBwYXRoU3RhcnQsIHBhdGhFbmQgLSBwYXRoU3RhcnQpOwog
CiAgICAgcGF0aEVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgIAotICAgIAorCiAgICAg
Ly8gYWRkIHF1ZXJ5LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwogICAgIGFwcGVuZEVzY2FwaW5n
QmFkQ2hhcnMocCwgdXJsICsgcXVlcnlTdGFydCwgcXVlcnlFbmQgLSBxdWVyeVN0YXJ0KTsKICAg
ICBxdWVyeUVuZFBvcyA9IHAgLSBidWZmZXIuZGF0YSgpOwotICAgIAorCiAgICAgLy8gYWRkIGZy
YWdtZW50LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwogICAgIGlmIChmcmFnbWVudEVuZCAhPSBx
dWVyeUVuZCkgewogICAgICAgICAqcCsrID0gJyMnOwpAQCAtMTI0MywzNiArMTI2OSwzNiBAQCB2
b2lkIEtVUkw6OnBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgCiAgICAgfQogICAgIGZyYWdt
ZW50RW5kUG9zID0gcCAtIGJ1ZmZlci5kYXRhKCk7CiAKLSAgICAvLyBJZiB3ZSBkaWRuJ3QgZW5k
IHVwIGFjdHVhbGx5IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBzdHJpbmcgYW5kCi0gICAgLy8gaXQg
c3RhcnRlZCBhcyBhIERlcHJlY2F0ZWRTdHJpbmcsIGp1c3QgcmV1c2UgaXQsIHRvIGF2b2lkIGV4
dHJhCi0gICAgLy8gYWxsb2NhdGlvbi4KLSAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNt
cChidWZmZXIuZGF0YSgpLCB1cmwsIGZyYWdtZW50RW5kUG9zKSA9PSAwKSB7Ci0gICAgICAgIHVy
bFN0cmluZyA9ICpvcmlnaW5hbFN0cmluZzsKLSAgICB9IGVsc2UKLSAgICAgICAgdXJsU3RyaW5n
ID0gRGVwcmVjYXRlZFN0cmluZyhidWZmZXIuZGF0YSgpLCBmcmFnbWVudEVuZFBvcyk7Ci0KICAg
ICBBU1NFUlQocCAtIGJ1ZmZlci5kYXRhKCkgPD0gKGludClidWZmZXIuc2l6ZSgpKTsKLX0KIAot
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwgJmEsIGNvbnN0IEtVUkwgJmIpCi17Ci0gICAgcmV0
dXJuIGEudXJsU3RyaW5nID09IGIudXJsU3RyaW5nOworICAgIC8vIElmIHdlIGRpZG4ndCBlbmQg
dXAgYWN0dWFsbHkgY2hhbmdpbmcgdGhlIG9yaWdpbmFsIHN0cmluZyBhbmQKKyAgICAvLyBpdCB3
YXMgYWxyZWFkeSBpbiBhIFN0cmluZywgcmV1c2UgaXQgdG8gYXZvaWQgZXh0cmEgYWxsb2NhdGlv
bi4KKyAgICBpZiAob3JpZ2luYWxTdHJpbmcgJiYgc3RybmNtcChidWZmZXIuZGF0YSgpLCB1cmws
IGZyYWdtZW50RW5kUG9zKSA9PSAwKQorICAgICAgICBtX3N0cmluZyA9ICpvcmlnaW5hbFN0cmlu
ZzsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGZy
YWdtZW50RW5kUG9zKTsKIH0KIAogYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtVUkwmIGEs
IGNvbnN0IEtVUkwmIGIpCiB7Ci0gICAgcmV0dXJuIGEudXJsU3RyaW5nLmxlZnQoYS5xdWVyeUVu
ZFBvcykgPT0gYi51cmxTdHJpbmcubGVmdChiLnF1ZXJ5RW5kUG9zKTsKKyAgICBpZiAoYS5xdWVy
eUVuZFBvcyAhPSBiLnF1ZXJ5RW5kUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5z
aWduZWQgcXVlcnlMZW5ndGggPSBhLnF1ZXJ5RW5kUG9zOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBxdWVyeUxlbmd0aDsgKytpKQorICAgICAgICBpZiAoYS5zdHJpbmcoKVtpXSAhPSBi
LnN0cmluZygpW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVl
OwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtVUkw6OmVuY29kZV9zdHJpbmcoY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYgbm90RW5jb2RlZFN0cmluZykKK1N0cmluZyBlbmNvZGVXaXRoVVJMRXNjYXBl
U2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgbm90RW5jb2RlZFN0cmluZykKIHsKLSAgICBEZXByZWNh
dGVkQ1N0cmluZyBhc1VURjggPSBub3RFbmNvZGVkU3RyaW5nLnV0ZjgoKTsKLSAgICAKLSAgICBW
ZWN0b3I8Y2hhciwgNDA5Nj4gYnVmZmVyKGFzVVRGOC5sZW5ndGgoKSAqIDMgKyAxKTsKLSAgICBj
aGFyICpwID0gYnVmZmVyLmRhdGEoKTsKKyAgICBDU3RyaW5nIGFzVVRGOCA9IG5vdEVuY29kZWRT
dHJpbmcudXRmOCgpOwogCi0gICAgY29uc3QgY2hhciAqc3RyID0gYXNVVEY4OwotICAgIGNvbnN0
IGNoYXIgKnN0ckVuZCA9IHN0ciArIGFzVVRGOC5sZW5ndGgoKTsKKyAgICBDaGFyQnVmZmVyIGJ1
ZmZlcihhc1VURjgubGVuZ3RoKCkgKiAzICsgMSk7CisgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRh
KCk7CisKKyAgICBjb25zdCBjaGFyKiBzdHIgPSBhc1VURjguZGF0YSgpOworICAgIGNvbnN0IGNo
YXIqIHN0ckVuZCA9IHN0ciArIGFzVVRGOC5sZW5ndGgoKTsKICAgICB3aGlsZSAoc3RyIDwgc3Ry
RW5kKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpzdHIrKzsKICAgICAgICAgaWYgKGlz
QmFkQ2hhcihjKSkgewpAQCAtMTI4Miw5NiArMTMwOCw5MiBAQCBEZXByZWNhdGVkU3RyaW5nIEtV
Ukw6OmVuY29kZV9zdHJpbmcoY29uCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgKnArKyA9
IGM7CiAgICAgfQotICAgIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KGJ1ZmZlci5kYXRh
KCksIHAgLSBidWZmZXIuZGF0YSgpKTsKLSAgICAKLSAgICBBU1NFUlQocCAtIGJ1ZmZlci5kYXRh
KCkgPD0gKGludClidWZmZXIuc2l6ZSgpKTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgQVNT
RVJUKHAgLSBidWZmZXIuZGF0YSgpIDw9IHN0YXRpY19jYXN0PGludD4oYnVmZmVyLnNpemUoKSkp
OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7
CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGVuY29kZUhvc3RuYW1lKGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcgJnMpCisvLyBBcHBlbmRzIHRoZSBwdW55Y29kZWQgaG9zdG5hbWUgaWRlbnRp
ZmllZCBieSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBsZW5ndGggdG8KKy8vIHRoZSBvdXRwdXQgYnVm
ZmVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG51bGwgdGVybWluYXRlZC4KK3N0YXRpYyB2b2lk
IGFwcGVuZEVuY29kZWRIb3N0bmFtZShVQ2hhckJ1ZmZlciYgYnVmZmVyLCBjb25zdCBVQ2hhciog
c3RyLCB1bnNpZ25lZCBzdHJMZW4pCiB7CiAgICAgLy8gTmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0
byBob2xkIGFuIElETi1lbmNvZGVkIG5hbWUuCiAgICAgLy8gRm9yIGhvc3QgbmFtZXMgYmlnZ2Vy
IHRoYW4gdGhpcywgd2Ugd29uJ3QgZG8gSUROIGVuY29kaW5nLCB3aGljaCBpcyBhbG1vc3QgY2Vy
dGFpbmx5IE9LLgogICAgIGNvbnN0IHVuc2lnbmVkIGhvc3RuYW1lQnVmZmVyTGVuZ3RoID0gMjA0
ODsKIAotICAgIGlmIChzLmlzQWxsQVNDSUkoKSB8fCBzLmxlbmd0aCgpID4gaG9zdG5hbWVCdWZm
ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBzOworICAgIGlmIChzdHJMZW4gPiBob3N0bmFtZUJ1
ZmZlckxlbmd0aCB8fCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoc3RyLCBzdHJMZW4pKQorICAgICAg
ICBidWZmZXIuYXBwZW5kKHN0ciwgc3RyTGVuKTsKIAogI2lmIFVTRShJQ1VfVU5JQ09ERSkKLSAg
ICBVQ2hhciBidWZmZXJbaG9zdG5hbWVCdWZmZXJMZW5ndGhdOyAgICAKKyAgICBVQ2hhciBob3N0
bmFtZUJ1ZmZlcltob3N0bmFtZUJ1ZmZlckxlbmd0aF07CiAgICAgVUVycm9yQ29kZSBlcnJvciA9
IFVfWkVST19FUlJPUjsKLSAgICBpbnQzMl90IG51bUNoYXJhY3RlcnNDb252ZXJ0ZWQgPSB1aWRu
YV9JRE5Ub0FTQ0lJCi0gICAgICAgIChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyICo+KHMu
dW5pY29kZSgpKSwgcy5sZW5ndGgoKSwgYnVmZmVyLCBob3N0bmFtZUJ1ZmZlckxlbmd0aCwgVUlE
TkFfQUxMT1dfVU5BU1NJR05FRCwgMCwgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IgIT0gVV9aRVJP
X0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICByZXR1cm4gRGVwcmVjYXRl
ZFN0cmluZyhyZWludGVycHJldF9jYXN0PERlcHJlY2F0ZWRDaGFyICo+KGJ1ZmZlciksIG51bUNo
YXJhY3RlcnNDb252ZXJ0ZWQpOworICAgIGludDMyX3QgbnVtQ2hhcmFjdGVyc0NvbnZlcnRlZCA9
IHVpZG5hX0lETlRvQVNDSUkoc3RyLCBzdHJMZW4sIGhvc3RuYW1lQnVmZmVyLAorICAgICAgICBo
b3N0bmFtZUJ1ZmZlckxlbmd0aCwgVUlETkFfQUxMT1dfVU5BU1NJR05FRCwgMCwgJmVycm9yKTsK
KyAgICBpZiAoZXJyb3IgIT0gVV9aRVJPX0VSUk9SKQorICAgICAgICBidWZmZXIuYXBwZW5kKGhv
c3RuYW1lQnVmZmVyLCBudW1DaGFyYWN0ZXJzQ29udmVydGVkKTsKICNlbGlmIFVTRShRVDRfVU5J
Q09ERSkKLSAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRvQWNlKHMpOwotICAgIHJldHVy
biBEZXByZWNhdGVkU3RyaW5nKHJlc3VsdC5jb25zdERhdGEoKSwgcmVzdWx0Lmxlbmd0aCgpKTsK
KyAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFVcmw6OnRvQWNlKHMpOyAvLyBGSVhNRTogVGhpcyBp
cyB3cm9uZywgYnV0IEkgZG9uJ3Qga25vdyB3aGF0IGl0IHNob3VsZCBiZS4KKyAgICBidWZmZXIu
YXBwZW5kKHJlc3VsdC5jb25zdERhdGEsIHJlc3VsdC5sZW5ndGgoKSk7CiAjZW5kaWYKIH0KIAot
c3RhdGljIFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGZpbmRIb3N0bmFtZXNJbk1haWxUb1VSTChj
b25zdCBEZXByZWNhdGVkU3RyaW5nICZzKQorc3RhdGljIHZvaWQgZmluZEhvc3RuYW1lc0luTWFp
bFRvVVJMKGNvbnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW4sIFZlY3RvcjxwYWlyPGludCwgaW50
PiA+JiBuYW1lUmFuZ2VzKQogewogICAgIC8vIEluIGEgbWFpbHRvOiBVUkwsIGhvc3QgbmFtZXMg
Y29tZSBhZnRlciBhICdAJyBjaGFyYWN0ZXIgYW5kIGVuZCB3aXRoIGEgJz4nIG9yICcsJyBvciAn
Pycgb3IgZW5kIG9mIHN0cmluZyBjaGFyYWN0ZXIuCiAgICAgLy8gU2tpcCBxdW90ZWQgc3RyaW5n
cyBzbyB0aGF0IGNoYXJhY3RlcnMgaW4gdGhlbSBkb24ndCBjb25mdXNlIHVzLgogICAgIC8vIFdo
ZW4gd2UgZmluZCBhICc/JyBjaGFyYWN0ZXIsIHdlIGFyZSBwYXN0IHRoZSBwYXJ0IG9mIHRoZSBV
UkwgdGhhdCBjb250YWlucyBob3N0IG5hbWVzLgogCi0gICAgVmVjdG9yPHBhaXI8aW50LCBpbnQ+
ID4gYTsKKyAgICBuYW1lUmFuZ2VzLmNsZWFyKCk7CiAKICAgICBpbnQgcCA9IDA7CiAgICAgd2hp
bGUgKDEpIHsKICAgICAgICAgLy8gRmluZCBzdGFydCBvZiBob3N0IG5hbWUgb3Igb2YgcXVvdGVk
IHN0cmluZy4KLSAgICAgICAgaW50IGhvc3RuYW1lT3JTdHJpbmdTdGFydCA9IHMuZmluZChSZWd1
bGFyRXhwcmVzc2lvbigiW1wiQD9dIiksIHApOwotICAgICAgICBpZiAoaG9zdG5hbWVPclN0cmlu
Z1N0YXJ0ID09IC0xKSB7Ci0gICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotICAgICAg
ICBEZXByZWNhdGVkQ2hhciBjID0gc1tob3N0bmFtZU9yU3RyaW5nU3RhcnRdOworICAgICAgICBp
bnQgaG9zdG5hbWVPclN0cmluZ1N0YXJ0ID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIHAsICJc
IkA/Iik7CisgICAgICAgIGlmIChob3N0bmFtZU9yU3RyaW5nU3RhcnQgPT0gLTEpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIFVDaGFyIGMgPSBzdHJbaG9zdG5hbWVPclN0cmluZ1N0YXJ0
XTsKICAgICAgICAgcCA9IGhvc3RuYW1lT3JTdHJpbmdTdGFydCArIDE7CiAKLSAgICAgICAgaWYg
KGMgPT0gJz8nKSB7Ci0gICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotICAgICAgICAK
KyAgICAgICAgaWYgKGMgPT0gJz8nKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlm
IChjID09ICdAJykgewogICAgICAgICAgICAgLy8gRmluZCBlbmQgb2YgaG9zdCBuYW1lLgogICAg
ICAgICAgICAgaW50IGhvc3RuYW1lU3RhcnQgPSBwOwotICAgICAgICAgICAgaW50IGhvc3RuYW1l
RW5kID0gcy5maW5kKFJlZ3VsYXJFeHByZXNzaW9uKCJbPiw/XSIpLCBwKTsKKyAgICAgICAgICAg
IGludCBob3N0bmFtZUVuZCA9IGZpbmRGaXJzdE9mKHN0ciwgc3RyTGVuLCBwLCAiPiw/Iik7CiAg
ICAgICAgICAgICBib29sIGRvbmU7CiAgICAgICAgICAgICBpZiAoaG9zdG5hbWVFbmQgPT0gLTEp
IHsKLSAgICAgICAgICAgICAgICBob3N0bmFtZUVuZCA9IHMubGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgaG9zdG5hbWVFbmQgPSBzdHJMZW47CiAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHAgPSBob3N0bmFtZUVuZDsK
ICAgICAgICAgICAgICAgICBkb25lID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGEuYXBwZW5kKG1ha2VfcGFpcihob3N0bmFtZVN0YXJ0LCBob3N0bmFtZUVuZCkpOworICAg
ICAgICAgICAgbmFtZVJhbmdlcy5hcHBlbmQobWFrZV9wYWlyKGhvc3RuYW1lU3RhcnQsIGhvc3Ru
YW1lRW5kKSk7CiAKICAgICAgICAgICAgIGlmIChkb25lKQotICAgICAgICAgICAgICAgIHJldHVy
biBhOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIFNraXAgcXVvdGVkIHN0cmluZy4KICAgICAgICAgICAgIEFTU0VSVChjID09ICciJyk7
CiAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGludCBlc2NhcGVkQ2hh
cmFjdGVyT3JTdHJpbmdFbmQgPSBzLmZpbmQoUmVndWxhckV4cHJlc3Npb24oIltcIlxcXSIpLCBw
KTsKKyAgICAgICAgICAgICAgICBpbnQgZXNjYXBlZENoYXJhY3Rlck9yU3RyaW5nRW5kID0gZmlu
ZEZpcnN0T2Yoc3RyLCBzdHJMZW4sIHAsICJcIlxcIik7CiAgICAgICAgICAgICAgICAgaWYgKGVz
Y2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZCA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIGMg
PSBzW2VzY2FwZWRDaGFyYWN0ZXJPclN0cmluZ0VuZF07CisgICAgICAgICAgICAgICAgYyA9IHN0
cltlc2NhcGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmRdOwogICAgICAgICAgICAgICAgIHAgPSBlc2Nh
cGVkQ2hhcmFjdGVyT3JTdHJpbmdFbmQgKyAxOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UgYXJlIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgdGhlbiBicmVhayBm
cm9tIHRoZSBzdHJpbmcgbG9vcCBiYWNrIHRvIHRoZSBob3N0IG5hbWUgbG9vcC4KICAgICAgICAg
ICAgICAgICBpZiAoYyA9PSAnIicpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gU2tpcCBlc2NhcGVkIGNoYXJhY3Rlci4K
ICAgICAgICAgICAgICAgICBBU1NFUlQoYyA9PSAnXFwnKTsKLSAgICAgICAgICAgICAgICBpZiAo
cCA9PSBzdGF0aWNfY2FzdDxpbnQ+KHMubGVuZ3RoKCkpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYTsKKyAgICAgICAgICAgICAgICBpZiAocCA9PSBzdHJMZW4pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICsrcDsKICAgICAgICAgICAgIH0KQEAg
LTEzNzksMTQ0ICsxNDAxLDE2OCBAQCBzdGF0aWMgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gZmlu
ZEhvc3RuCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNh
bFVSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzLCBpbnQgJnN0YXJ0T2Zmc2V0LCBpbnQgJmVu
ZE9mZnNldCkKK3N0YXRpYyBib29sIGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKGNvbnN0
IFVDaGFyKiBzdHIsIGludCBzdHJMZW4sIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0
KQogewogICAgIC8vIEZpbmQgdGhlIGhvc3QgbmFtZSBpbiBhIGhpZXJhcmNoaWNhbCBVUkwuCi0g
ICAgLy8gSXQgY29tZXMgYWZ0ZXIgYSAiOi8vIiBzZXF1ZW5jZSwgd2l0aCBzY2hlbWUgY2hhcmFj
dGVycyBwcmVjZWRpbmcuCi0gICAgLy8gSWYgZW5kcyB3aXRoIHRoZSBlbmQgb2YgdGhlIHN0cmlu
ZyBvciBhICI6IiBvciBhIHBhdGggc2VnbWVudCBlbmRpbmcgY2hhcmFjdGVyLgorICAgIC8vIEl0
IGNvbWVzIGFmdGVyIGEgIjovLyIgc2VxdWVuY2UsIHdpdGggc2NoZW1lIGNoYXJhY3RlcnMgcHJl
Y2VkaW5nLCBhbmQKKyAgICAvLyB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3QgY29sb24gaW4gdGhl
IHN0cmluZy4KKyAgICAvLyBJdCBlbmRzIHdpdGggdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG9yIGEg
IjoiIG9yIGEgcGF0aCBzZWdtZW50IGVuZGluZyBjaGFyYWN0ZXIuCiAgICAgLy8gSWYgdGhlcmUg
aXMgYSAiQCIgY2hhcmFjdGVyLCB0aGUgaG9zdCBwYXJ0IGlzIGp1c3QgdGhlIHBhcnQgYWZ0ZXIg
dGhlICJAIi4KLSAgICBpbnQgc2VwYXJhdG9yID0gcy5maW5kKCI6Ly8iKTsKLSAgICBpZiAoc2Vw
YXJhdG9yIDw9IDApIHsKKyAgICBpbnQgc2VwYXJhdG9yID0gZmluZEZpcnN0T2Yoc3RyLCBzdHJM
ZW4sIDAsICI6Iik7CisgICAgaWYgKHNlcGFyYXRvciA9PSAtMSB8fCBzZXBhcmF0b3IgKyAyID49
IHN0ckxlbiB8fAorICAgICAgICBzdHJbc2VwYXJhdG9yICsgMV0gIT0gJy8nIHx8IHN0cltzZXBh
cmF0b3IgKyAyXSAhPSAnLycpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKICAgICAv
LyBDaGVjayB0aGF0IGFsbCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgOi8vIGFyZSB2YWxpZCBzY2hl
bWUgY2hhcmFjdGVycy4KLSAgICBpZiAoIWlzU2NoZW1lRmlyc3RDaGFyKHNbMF0ubGF0aW4xKCkp
KSB7CisgICAgaWYgKCFpc1NjaGVtZUZpcnN0Q2hhcihzdHJbMF0pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2VwYXJhdG9yOyArK2kpIHsK
LSAgICAgICAgaWYgKCFpc1NjaGVtZUNoYXIoc1tpXS5sYXRpbjEoKSkpIHsKKyAgICAgICAgaWYg
KCFpc1NjaGVtZUNoYXIoc3RyW2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQogICAgIH0KIAogICAgIC8vIFN0YXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuCiAgICAgaW50
IGF1dGhvcml0eVN0YXJ0ID0gc2VwYXJhdG9yICsgMzsKIAogICAgIC8vIEZpbmQgdGVybWluYXRp
bmcgY2hhcmFjdGVyLgotICAgIGludCBsZW5ndGggPSBzLmxlbmd0aCgpOwotICAgIGludCBob3N0
bmFtZUVuZCA9IGxlbmd0aDsKLSAgICBmb3IgKGludCBpID0gYXV0aG9yaXR5U3RhcnQ7IGkgPCBs
ZW5ndGg7ICsraSkgewotICAgICAgICBjaGFyIGMgPSBzW2ldLmxhdGluMSgpOwotICAgICAgICBp
ZiAoYyA9PSAnOicgfHwgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKGMpICYmIGMgIT0gJ1wwJykpIHsK
KyAgICBpbnQgaG9zdG5hbWVFbmQgPSBzdHJMZW47CisgICAgZm9yIChpbnQgaSA9IGF1dGhvcml0
eVN0YXJ0OyBpIDwgc3RyTGVuOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHN0cltpXTsKKyAg
ICAgICAgaWYgKGMgPT0gJzonIHx8IChpc1BhdGhTZWdtZW50RW5kQ2hhcihjKSAmJiBjICE9IDAp
KSB7CiAgICAgICAgICAgICBob3N0bmFtZUVuZCA9IGk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIEZpbmQgIkAiIGZvciB0aGUgc3RhcnQgb2YgdGhlIGhv
c3QgbmFtZS4KLSAgICBpbnQgdXNlckluZm9UZXJtaW5hdG9yID0gcy5maW5kKCdAJywgYXV0aG9y
aXR5U3RhcnQpOworICAgIGludCB1c2VySW5mb1Rlcm1pbmF0b3IgPSBmaW5kRmlyc3RPZihzdHIs
IHN0ckxlbiwgYXV0aG9yaXR5U3RhcnQsICJAIik7CiAgICAgaW50IGhvc3RuYW1lU3RhcnQ7Ci0g
ICAgaWYgKHVzZXJJbmZvVGVybWluYXRvciA9PSAtMSB8fCB1c2VySW5mb1Rlcm1pbmF0b3IgPiBo
b3N0bmFtZUVuZCkgeworICAgIGlmICh1c2VySW5mb1Rlcm1pbmF0b3IgPT0gLTEgfHwgdXNlcklu
Zm9UZXJtaW5hdG9yID4gaG9zdG5hbWVFbmQpCiAgICAgICAgIGhvc3RuYW1lU3RhcnQgPSBhdXRo
b3JpdHlTdGFydDsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAgICAgICAgaG9zdG5hbWVTdGFy
dCA9IHVzZXJJbmZvVGVybWluYXRvciArIDE7Ci0gICAgfQogCiAgICAgc3RhcnRPZmZzZXQgPSBo
b3N0bmFtZVN0YXJ0OwogICAgIGVuZE9mZnNldCA9IGhvc3RuYW1lRW5kOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVIb3N0bmFtZXMoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmcykKLXsKLSAgICBpZiAocy5zdGFydHNXaXRoKCJtYWlsdG86Iiwg
ZmFsc2UpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxwYWlyPGludCwgaW50PiA+IGhvc3RuYW1l
UmFuZ2VzID0gZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKHMpOworLy8gQ29udmVydHMgYWxsIGhv
c3RuYW1lcyBmb3VuZCBpbiB0aGUgZ2l2ZW4gaW5wdXQgdG8gcHVueWNvZGUsIHByZXNlcnZpbmcg
dGhlCisvLyByZXN0IG9mIHRoZSBVUkwgdW5jaGFuZ2VkLiBUaGUgb3V0cHV0IHdpbGwgTk9UIGJl
IG51bGwtdGVybWluYXRlZC4KK3N0YXRpYyB2b2lkIGVuY29kZUhvc3RuYW1lcyhjb25zdCBTdHJp
bmcmIHN0ciwgVUNoYXJCdWZmZXImIG91dHB1dCkKK3sKKyAgICBvdXRwdXQuY2xlYXIoKTsKKwor
ICAgIGlmIChwcm90b2NvbElzKHN0ciwgIm1haWx0byIpKSB7CisgICAgICAgIFZlY3RvcjxwYWly
PGludCwgaW50PiA+IGhvc3RuYW1lUmFuZ2VzOworICAgICAgICBmaW5kSG9zdG5hbWVzSW5NYWls
VG9VUkwoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpLCBob3N0bmFtZVJhbmdlcyk7CiAg
ICAgICAgIGludCBuID0gaG9zdG5hbWVSYW5nZXMuc2l6ZSgpOwotICAgICAgICBpZiAobiAhPSAw
KSB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHAgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBwYWlyPGludCwgaW50PiAmciA9IGhvc3RuYW1lUmFuZ2Vz
W2ldOwotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzLm1pZChwLCByLmZpcnN0KTsKLSAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gZW5jb2RlSG9zdG5hbWUocy5taWQoci5maXJzdCwgci5zZWNv
bmQgLSByLmZpcnN0KSk7Ci0gICAgICAgICAgICAgICAgcCA9IHIuc2Vjb25kOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmVzdWx0ICs9IHMubWlkKHApOwotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfQorICAgICAgICBpbnQgcCA9IDA7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBwYWlyPGludCwgaW50PiYg
ciA9IGhvc3RuYW1lUmFuZ2VzW2ldOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgmc3RyLmNo
YXJhY3RlcnMoKVtwXSwgci5maXJzdCAtIHApOworICAgICAgICAgICAgYXBwZW5kRW5jb2RlZEhv
c3RuYW1lKG91dHB1dCwgJnN0ci5jaGFyYWN0ZXJzKClbci5maXJzdF0sIHIuc2Vjb25kIC0gci5m
aXJzdCk7CisgICAgICAgICAgICBwID0gci5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgLy8g
VGhpcyB3aWxsIGNvcHkgZWl0aGVyIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QgaG9zdG5hbWUs
IG9yIHRoZQorICAgICAgICAvLyB3aG9sZSB0aGluZyBpZiB0aGVyZSBpcyBubyBob3N0bmFtZS4K
KyAgICAgICAgb3V0cHV0LmFwcGVuZCgmc3RyLmNoYXJhY3RlcnMoKVtwXSwgc3RyLmxlbmd0aCgp
IC0gcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50IGhvc3RTdGFydCwgaG9zdEVuZDsKLSAg
ICAgICAgaWYgKGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKHMsIGhvc3RTdGFydCwgaG9z
dEVuZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBzLmxlZnQoaG9zdFN0YXJ0KSArIGVuY29kZUhv
c3RuYW1lKHMubWlkKGhvc3RTdGFydCwgaG9zdEVuZCAtIGhvc3RTdGFydCkpICsgcy5taWQoaG9z
dEVuZCk7IAorICAgICAgICBpZiAoZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxVUkwoc3RyLmNo
YXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpLCBob3N0U3RhcnQsIGhvc3RFbmQpKSB7CisgICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIGhvc3RTdGFydCk7IC8vIEJlZm9y
ZSBob3N0bmFtZS4KKyAgICAgICAgICAgIGFwcGVuZEVuY29kZWRIb3N0bmFtZShvdXRwdXQsICZz
dHIuY2hhcmFjdGVycygpW2hvc3RTdGFydF0sIGhvc3RFbmQgLSBob3N0U3RhcnQpOworICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZCgmc3RyLmNoYXJhY3RlcnMoKVtob3N0RW5kXSwgc3RyLmxlbmd0
aCgpIC0gaG9zdEVuZCk7IC8vIEFmdGVyIGhvc3RuYW1lLgorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gTm8gaG9zdG5hbWUgdG8gZW5jb2RlLCByZXR1cm4gdGhlIGlucHV0LgorICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpOwog
ICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzOwogfQogCi1zdGF0aWMgY2hhciAqZW5jb2Rl
UmVsYXRpdmVTdHJpbmcoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAm
cmVsLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorc3RhdGljIHZvaWQgZW5jb2RlUmVs
YXRpdmVTdHJpbmcoY29uc3QgU3RyaW5nJiByZWwsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcsIENoYXJCdWZmZXImIG91dHB1dCkKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBlbmNv
ZGVIb3N0bmFtZXMocmVsKTsKLQotICAgIGNoYXIgKnN0ckJ1ZmZlcjsKKyAgICBVQ2hhckJ1ZmZl
ciBzOworICAgIGVuY29kZUhvc3RuYW1lcyhyZWwsIHMpOwogCiAgICAgVGV4dEVuY29kaW5nIHBh
dGhFbmNvZGluZyhVVEY4RW5jb2RpbmcoKSk7Ci0gICAgVGV4dEVuY29kaW5nIG90aGVyRW5jb2Rp
bmcgPSAoZW5jb2RpbmcuaXNWYWxpZCgpICYmICFyZWwuc3RhcnRzV2l0aCgibWFpbHRvOiIsIGZh
bHNlKSkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGluZygpOwotICAgIAorICAgIFRleHRFbmNvZGlu
ZyBvdGhlckVuY29kaW5nID0gKGVuY29kaW5nLmlzVmFsaWQoKSAmJiAhcHJvdG9jb2xJcyhyZWws
ICJtYWlsdG8iKSkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGluZygpOworCiAgICAgaW50IHBhdGhF
bmQgPSAtMTsKICAgICBpZiAocGF0aEVuY29kaW5nICE9IG90aGVyRW5jb2RpbmcpIHsKLSAgICAg
ICAgcGF0aEVuZCA9IHMuZmluZChSZWd1bGFyRXhwcmVzc2lvbigiWz8jXSIpKTsKKyAgICAgICAg
Ly8gRmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWl0aGVyICMgb3IgPywga2VlcCBwYXRoRW5k
IGF0IC0xIG90aGVyd2lzZS4KKyAgICAgICAgcGF0aEVuZCA9IGZpbmRGaXJzdE9mKHMuZGF0YSgp
LCBzLnNpemUoKSwgMCwgIiM/Iik7CiAgICAgfQorCiAgICAgaWYgKHBhdGhFbmQgPT0gLTEpIHsK
LSAgICAgICAgQ1N0cmluZyBkZWNvZGVkID0gcGF0aEVuY29kaW5nLmVuY29kZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4ocy51bmljb2RlKCkpLCBzLmxlbmd0aCgpKTsKLSAgICAgICAg
aW50IGRlY29kZWRMZW5ndGggPSBkZWNvZGVkLmxlbmd0aCgpOwotICAgICAgICBzdHJCdWZmZXIg
PSBzdGF0aWNfY2FzdDxjaGFyICo+KGZhc3RNYWxsb2MoZGVjb2RlZExlbmd0aCArIDEpKTsKLSAg
ICAgICAgbWVtY3B5KHN0ckJ1ZmZlciwgZGVjb2RlZC5kYXRhKCksIGRlY29kZWRMZW5ndGgpOwot
ICAgICAgICBzdHJCdWZmZXJbZGVjb2RlZExlbmd0aF0gPSAwOworICAgICAgICBDU3RyaW5nIGRl
Y29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHMuZGF0YSgpLCBzLnNpemUoKSk7CisgICAgICAg
IG91dHB1dC5yZXNpemUoZGVjb2RlZC5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShvdXRwdXQu
ZGF0YSgpLCBkZWNvZGVkLmRhdGEoKSwgZGVjb2RlZC5sZW5ndGgoKSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgaW50IGxlbmd0aCA9IHMubGVuZ3RoKCk7Ci0gICAgICAgIENTdHJpbmcgcGF0aERl
Y29kZWQgPSBwYXRoRW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihzLnVuaWNvZGUoKSksIHBhdGhFbmQpOwotICAgICAgICBDU3RyaW5nIG90aGVyRGVjb2RlZCA9
IG90aGVyRW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzLnVu
aWNvZGUoKSkgKyBwYXRoRW5kLCBsZW5ndGggLSBwYXRoRW5kKTsKLSAgICAgICAgaW50IHBhdGhE
ZWNvZGVkTGVuZ3RoID0gcGF0aERlY29kZWQubGVuZ3RoKCk7Ci0gICAgICAgIGludCBvdGhlckRl
Y29kZWRMZW5ndGggPSBvdGhlckRlY29kZWQubGVuZ3RoKCk7Ci0gICAgICAgIHN0ckJ1ZmZlciA9
IHN0YXRpY19jYXN0PGNoYXIgKj4oZmFzdE1hbGxvYyhwYXRoRGVjb2RlZExlbmd0aCArIG90aGVy
RGVjb2RlZExlbmd0aCArIDEpKTsKLSAgICAgICAgbWVtY3B5KHN0ckJ1ZmZlciwgcGF0aERlY29k
ZWQuZGF0YSgpLCBwYXRoRGVjb2RlZExlbmd0aCk7Ci0gICAgICAgIG1lbWNweShzdHJCdWZmZXIg
KyBwYXRoRGVjb2RlZExlbmd0aCwgb3RoZXJEZWNvZGVkLmRhdGEoKSwgb3RoZXJEZWNvZGVkTGVu
Z3RoKTsKLSAgICAgICAgc3RyQnVmZmVyW3BhdGhEZWNvZGVkTGVuZ3RoICsgb3RoZXJEZWNvZGVk
TGVuZ3RoXSA9IDA7Ci0gICAgfQorICAgICAgICBDU3RyaW5nIHBhdGhEZWNvZGVkID0gcGF0aEVu
Y29kaW5nLmVuY29kZShzLmRhdGEoKSwgcGF0aEVuZCk7CisgICAgICAgIENTdHJpbmcgb3RoZXJE
ZWNvZGVkID0gb3RoZXJFbmNvZGluZy5lbmNvZGUocy5kYXRhKCkgKyBwYXRoRW5kLCBzLnNpemUo
KSAtIHBhdGhFbmQpOwogCi0gICAgcmV0dXJuIHN0ckJ1ZmZlcjsKKyAgICAgICAgb3V0cHV0LnJl
c2l6ZShwYXRoRGVjb2RlZC5sZW5ndGgoKSArIG90aGVyRGVjb2RlZC5sZW5ndGgoKSk7CisgICAg
ICAgIG1lbWNweShvdXRwdXQuZGF0YSgpLCBwYXRoRGVjb2RlZC5kYXRhKCksIHBhdGhEZWNvZGVk
Lmxlbmd0aCgpKTsKKyAgICAgICAgbWVtY3B5KG91dHB1dC5kYXRhKCkgKyBwYXRoRGVjb2RlZC5s
ZW5ndGgoKSwgb3RoZXJEZWNvZGVkLmRhdGEoKSwgb3RoZXJEZWNvZGVkLmxlbmd0aCgpKTsKKyAg
ICB9CisgICAgb3V0cHV0LmFwcGVuZCgnXDAnKTsgLy8gbnVsbC10ZXJtaW5hdGUgdGhlIG91dHB1
dC4KIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmluZykKK3N0YXRpYyBTdHJpbmcgc3Vic3RpdHV0ZUJh
Y2tzbGFzaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGludCBxdWVzdGlvblBvcyA9
IHN0cmluZy5maW5kKCc/Jyk7CiAgICAgaW50IGhhc2hQb3MgPSBzdHJpbmcuZmluZCgnIycpOwot
ICAgIHVuc2lnbmVkIHBhdGhFbmQ7Ci0gICAgCi0gICAgaWYgKGhhc2hQb3MgPj0gMCAmJiAocXVl
c3Rpb25Qb3MgPCAwIHx8IHF1ZXN0aW9uUG9zID4gaGFzaFBvcykpIHsKKyAgICBpbnQgcGF0aEVu
ZDsKKworICAgIGlmIChoYXNoUG9zID49IDAgJiYgKHF1ZXN0aW9uUG9zIDwgMCB8fCBxdWVzdGlv
blBvcyA+IGhhc2hQb3MpKQogICAgICAgICBwYXRoRW5kID0gaGFzaFBvczsKLSAgICB9IGVsc2Ug
aWYgKHF1ZXN0aW9uUG9zID49IDApIHsKKyAgICBlbHNlIGlmIChxdWVzdGlvblBvcyA+PSAwKQog
ICAgICAgICBwYXRoRW5kID0gcXVlc3Rpb25Qb3M7Ci0gICAgfSBlbHNlIHsKKyAgICBlbHNlCiAg
ICAgICAgIHBhdGhFbmQgPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgfQogCi0gICAgcmV0dXJuIHN0
cmluZy5sZWZ0KHBhdGhFbmQpLnJlcGxhY2UoJ1xcJywnLycpICsgc3RyaW5nLm1pZChwYXRoRW5k
KTsKKyAgICByZXR1cm4gc3RyaW5nLmxlZnQocGF0aEVuZCkucmVwbGFjZSgnXFwnLCcvJykgKyBz
dHJpbmcuc3Vic3RyaW5nKHBhdGhFbmQpOwogfQogCiBib29sIEtVUkw6OmlzSGllcmFyY2hpY2Fs
KCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIEFTU0VSVCh1cmxTdHJpbmdbc2NoZW1lRW5kUG9zXSA9PSAnOicpOwotICAgIHJldHVybiB1
cmxTdHJpbmdbc2NoZW1lRW5kUG9zICsgMV0gPT0gJy8nOworICAgIEFTU0VSVChtX3N0cmluZ1tz
Y2hlbWVFbmRQb3NdID09ICc6Jyk7CisgICAgcmV0dXJuIG1fc3RyaW5nW3NjaGVtZUVuZFBvcyAr
IDFdID09ICcvJzsKK30KKwordm9pZCBLVVJMOjpjb3B5VG9CdWZmZXIoQ2hhckJ1ZmZlciYgYnVm
ZmVyKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHRocm93cyBhd2F5IHRoZSBoaWdoIGJ5
dGVzIG9mIGFsbCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIQorICAgIC8vIFRoYXQncyBm
aW5lIGZvciBhIHZhbGlkIFVSTCwgd2hpY2ggaXMgYWxsIEFTQ0lJLCBidXQgbm90IGZvciBpbnZh
bGlkIFVSTHMuCisgICAgYnVmZmVyLnJlc2l6ZShtX3N0cmluZy5sZW5ndGgoKSk7CisgICAgY29w
eUFTQ0lJKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgbV9zdHJpbmcubGVuZ3RoKCksIGJ1ZmZlci5k
YXRhKCkpOworfQorCitib29sIHByb3RvY29sSXMoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGNo
YXIqIHByb3RvY29sKQoreworICAgIC8vIERvIHRoZSBjb21wYXJpc29uIHdpdGhvdXQgbWFraW5n
IGEgbmV3IHN0cmluZyBvYmplY3QuCisgICAgYXNzZXJ0UHJvdG9jb2xJc0dvb2QocHJvdG9jb2wp
OworICAgIGZvciAoaW50IGkgPSAwOyA7ICsraSkgeworICAgICAgICBpZiAoIXByb3RvY29sW2ld
KQorICAgICAgICAgICAgcmV0dXJuIHVybFtpXSA9PSAnOic7CisgICAgICAgIGlmICh0b0FTQ0lJ
TG93ZXIodXJsW2ldKSAhPSBwcm90b2NvbFtpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2NvbnN0IEtVUkwmIGJsYW5rVVJMKCkKK3sKKyAgICBzdGF0aWMgS1VSTCBz
dGF0aWNCbGFua1VSTCgiYWJvdXQ6YmxhbmsiKTsKKyAgICByZXR1cm4gc3RhdGljQmxhbmtVUkw7
CiB9CiAKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEtVUkw6OnByaW50KCkgY29uc3QKIHsKLSAgICBw
cmludGYoIiVzXG4iLCB1cmxTdHJpbmcuYXNjaWkoKSk7CisgICAgcHJpbnRmKCIlc1xuIiwgbV9z
dHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9u
IDMwMjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEyICsyNiwxMCBA
QAogI2lmbmRlZiBLVVJMX2gKICNkZWZpbmUgS1VSTF9oCiAKLSNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KIAogI2lmIFBMQVRGT1JNKENGKQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVS
TCAqIENGVVJMUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCogQ0ZVUkxSZWY7CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTQxLDk5ICszOSwxNDEgQEAgdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX19DRlVSTCAqIENGVVJMUmVmOwogY2xhc3MgTlNVUkw7CiAjZW5kaWYKICNl
bmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBRVXJsOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgVGV4dEVuY29kaW5nOwot
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7Ci0gICAgaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLVVJMICZhLCBjb25zdCBLVVJMICZiKSB7IHJldHVy
biAhKGEgPT0gYik7IH0KLQotICAgIGJvb2wgZXF1YWxJZ25vcmluZ1JlZihjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYpOworY2xhc3MgVGV4dEVuY29kaW5nOwogCiBjbGFzcyBLVVJMIHsKIHB1Ymxp
YzoKKyAgICAvLyBHZW5lcmF0ZXMgYSBVUkwgd2hpY2ggY29udGFpbnMgYSBudWxsIHN0cmluZy4K
ICAgICBLVVJMKCk7Ci0gICAgS1VSTChjb25zdCBjaGFyKik7Ci0gICAgS1VSTChjb25zdCBLVVJM
JiwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwotICAgIEtVUkwoY29uc3QgS1VSTCYsIGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKLSAgICBLVVJMKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgS1VSTChOU1VSTCop
OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ0YpCi0gICAgS1VSTChDRlVSTFJlZik7Ci0jZW5kaWYK
LSNpZiBQTEFURk9STShRVCkKLSAgICBLVVJMKGNvbnN0IFFVcmwmKTsKLSNlbmRpZgotCi0gICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcuaXNOdWxsKCk7IH0KLSAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB1cmxTdHJpbmcuaXNFbXB0eSgpOyB9CiAKKyAg
ICAvLyBUaGUgYXJndW1lbnQgaXMgYW4gYWJzb2x1dGUgVVJMIHN0cmluZy4gVGhlIHN0cmluZyBp
cyBhc3N1bWVkIHRvIGJlCisgICAgLy8gYWxyZWFkeSBlbmNvZGVkLgorICAgIC8vIEZJWE1FOiBU
aGlzIGNvbnN0cnVjdG9yIGhhcyBhIHNwZWNpYWwgY2FzZSBmb3Igc3RyaW5ncyB0aGF0IHN0YXJ0
IHdpdGgKKyAgICAvLyAiLyIsIHByZXBlbmRpbmcgImZpbGU6Ly8iIHRvIHN1Y2ggc3RyaW5nczsg
aXQgd291bGQgYmUgZ29vZCB0byBnZXQKKyAgICAvLyByaWQgb2YgdGhhdCBzcGVjaWFsIGNhc2Uu
CisgICAgZXhwbGljaXQgS1VSTChjb25zdCBjaGFyKik7CisKKyAgICAvLyBUaGUgYXJndW1lbnQg
aXMgYW4gYWJzb2x1dGUgVVJMIHN0cmluZy4gVGhlIHN0cmluZyBpcyBhc3N1bWVkIHRvIGJlCisg
ICAgLy8gYWxyZWFkeSBlbmNvZGVkLgorICAgIC8vIEZJWE1FOiBGb3IgY2hhcmFjdGVycyB3aXRo
IGNvZGVzIG90aGVyIHRoYW4gMDAwMC0wMEZGIHdpbGwgYmUgY2hvcHBlZAorICAgIC8vIG9mZiwg
c28gdGhpcyBjYWxsIGlzIGN1cnJlbnRseSBub3Qgc2FmZSB0byB1c2Ugd2l0aCBhcmJpdHJhcnkg
c3RyaW5ncy4KKyAgICAvLyBGSVhNRTogVGhpcyBjb25zdHJ1Y3RvciBoYXMgYSBzcGVjaWFsIGNh
c2UgZm9yIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoCisgICAgLy8gIi8iLCBwcmVwZW5kaW5nICJm
aWxlOi8vIiB0byBzdWNoIHN0cmluZ3M7IGl0IHdvdWxkIGJlIGdvb2QgdG8gZ2V0CisgICAgLy8g
cmlkIG9mIHRoYXQgc3BlY2lhbCBjYXNlLgorICAgIGV4cGxpY2l0IEtVUkwoY29uc3QgU3RyaW5n
Jik7CisKKyAgICAvLyBSZXNvbHZlcyB0aGUgcmVsYXRpdmUgVVJMIHdpdGggdGhlIGdpdmVuIGJh
c2UgVVJMLiBJZiBwcm92aWRlZCwgdGhlCisgICAgLy8gVGV4dEVuY29kaW5nIGlzIHVzZWQgdG8g
ZW5jb2RlIG5vbi1BU0NJSSBjaGFyYWNlcnMuIFRoZSBiYXNlIFVSTCBjYW4gYmUKKyAgICAvLyBu
dWxsIG9yIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSByZWxhdGl2ZSBVUkwgd2lsbCBiZSBpbnRl
cnByZXRlZCBhcworICAgIC8vIGFic29sdXRlLgorICAgIC8vIEZJWE1FOiBJZiB0aGUgYmFzZSBV
UkwgaXMgaW52YWxpZCwgdGhpcyBhbHdheXMgY3JlYXRlcyBhbiBpbnZhbGlkCisgICAgLy8gVVJM
LiBJbnN0ZWFkIEkgdGhpbmsgaXQgd291bGQgYmUgYmV0dGVyIHRvIHRyZWF0IGFsbCBpbnZhbGlk
IGJhc2UgVVJMcworICAgIC8vIHRoZSBzYW1lIHdheSB3ZSB0cmVhdGUgbnVsbCBhbmQgZW1wdHkg
YmFzZSBVUkxzLgorICAgIEtVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxh
dGl2ZSk7CisgICAgS1VSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZl
LCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKworICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgZnVuY3Rp
b25zIHNob3VsZCBiZSBoYXJtb25pemVkIHNvIHRoYXQgcGFzc2luZyBhCisgICAgLy8gYmFzZSBv
ZiBudWxsIG9yIHRoZSBlbXB0eSBzdHJpbmcgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZQor
ICAgIC8vIHN0YW5kYXJkIFN0cmluZyBjb25zdHJ1Y3Rvci4KKworICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7IH0KKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIFVSTCBoYXMgYSBwYXRoLiBOb3RlIHRoYXQgImh0dHA6Ly9mb28uY29tLyIgaGFz
IGEKKyAgICAvLyBwYXRoIG9mICIvIiwgc28gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0cnVl
LiBPbmx5IGludmFsaWQgb3IKKyAgICAvLyBub24taGllcmFyY2hpY2FsIChsaWtlICJqYXZhc2Ny
aXB0OiIpIFVSTHMgd2lsbCBoYXZlIG5vIHBhdGguCiAgICAgYm9vbCBoYXNQYXRoKCkgY29uc3Q7
CiAKLSAgICBTdHJpbmcgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdXJsU3RyaW5nOyB9Ci0gICAg
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IHVybFN0cmluZzsgfQorICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmc7IH0KIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKLSAg
ICBEZXByZWNhdGVkU3RyaW5nIGhvc3QoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
cG9ydCgpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgdXNlcigpIGNvbnN0OwotICAgIERl
cHJlY2F0ZWRTdHJpbmcgcGFzcygpIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcGF0aCgp
IGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgbGFzdFBhdGhDb21wb25lbnQoKSBjb25zdDsK
LSAgICBEZXByZWNhdGVkU3RyaW5nIHF1ZXJ5KCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmlu
ZyByZWYoKSBjb25zdDsKKyAgICBTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKKyAgICBTdHJpbmcg
aG9zdCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQoKSBjb25zdDsKKyAgICBTdHJp
bmcgdXNlcigpIGNvbnN0OworICAgIFN0cmluZyBwYXNzKCkgY29uc3Q7CisgICAgU3RyaW5nIHBh
dGgoKSBjb25zdDsKKyAgICBTdHJpbmcgbGFzdFBhdGhDb21wb25lbnQoKSBjb25zdDsKKyAgICBT
dHJpbmcgcXVlcnkoKSBjb25zdDsgLy8gSW5jbHVkZXMgdGhlICI/Ii4KKyAgICBTdHJpbmcgcmVm
KCkgY29uc3Q7IC8vIERvZXMgKm5vdCogaW5jbHVkZSB0aGUgIiMiLgogICAgIGJvb2wgaGFzUmVm
KCkgY29uc3Q7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGVuY29kZWRIdG1sUmVmKCkgY29uc3Qg
eyByZXR1cm4gcmVmKCk7IH0KKyAgICBTdHJpbmcgcHJldHR5VVJMKCkgY29uc3Q7CisgICAgU3Ry
aW5nIGZpbGVTeXN0ZW1QYXRoKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFByb3RvY29sKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRIb3N0KGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQb3J0KHVuc2lnbmVkIHNob3J0IGludCk7Ci0gICAgdm9p
ZCBzZXRIb3N0QW5kUG9ydChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRV
c2VyKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQYXNzKGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRQYXRoKGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJik7Ci0gICAgdm9pZCBzZXRRdWVyeShjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwotICAg
IHZvaWQgc2V0UmVmKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7CisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBjdXJyZW50IFVSTCdzIHByb3RvY29sIGlzIHRoZSBzYW1lIGFzIHRoZSBudWxs
LQorICAgIC8vIHRlcm1pbmF0ZWQgQVNDSUkgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBtdXN0IGJl
IGxvd2VyLWNhc2UuCisgICAgYm9vbCBwcm90b2NvbElzKGNvbnN0IGNoYXIqKSBjb25zdDsKKyAg
ICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFByb3RvY29sKGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgc2V0SG9zdChjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIFNl
dHRpbmcgdGhlIHBvcnQgdG8gMCB3aWxsIGNsZWFyIGFueSBwb3J0IGZyb20gdGhlIFVSTC4KKyAg
ICB2b2lkIHNldFBvcnQodW5zaWduZWQgc2hvcnQpOworCisgICAgLy8gSW5wdXQgaXMgbGlrZSAi
Zm9vLmNvbSIgb3IgImZvby5jb206ODAwMCIuCisgICAgdm9pZCBzZXRIb3N0QW5kUG9ydChjb25z
dCBTdHJpbmcmKTsKKworICAgIHZvaWQgc2V0VXNlcihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IHNldFBhc3MoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBJZiB5b3UgcGFzcyBhbiBlbXB0eSBw
YXRoIGZvciBIVFRQIG9yIEhUVFBTIFVSTHMsIHRoZSByZXN1bHRpbmcgcGF0aAorICAgIC8vIHdp
bGwgYmUgIi8iLgorICAgIHZvaWQgc2V0UGF0aChjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIFRo
ZSBxdWVyeSBtYXkgYmVnaW4gd2l0aCBhIHF1ZXN0aW9uIG1hcmssIG9yLCBpZiBub3QsIG9uZSB3
aWxsIGJlIGFkZGVkCisgICAgLy8gZm9yIHlvdS4gU2V0dGluZyB0aGUgcXVlcnkgdG8gdGhlIGVt
cHR5IHN0cmluZyB3aWxsIGxlYXZlIGEgIj8iIGluIHRoZQorICAgIC8vIFVSTCAod2l0aCBub3Ro
aW5nIGFmdGVyIGl0KS4gVG8gY2xlYXIgdGhlIHF1ZXJ5LCBwYXNzIGEgbnVsbCBzdHJpbmcuCisg
ICAgdm9pZCBzZXRRdWVyeShjb25zdCBTdHJpbmcmKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cHJldHR5VVJMKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZWYoY29uc3QgU3RyaW5nJik7CisKKyAg
ICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7
CisKKyAgICBvcGVyYXRvciBLSlM6OlVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsg
fQogCiAjaWYgUExBVEZPUk0oQ0YpCisgICAgS1VSTChDRlVSTFJlZik7CiAgICAgQ0ZVUkxSZWYg
Y3JlYXRlQ0ZVUkwoKSBjb25zdDsKICNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIE5T
VVJMICpnZXROU1VSTCgpIGNvbnN0OworICAgIEtVUkwoTlNVUkwqKTsKKyAgICBvcGVyYXRvciBO
U1VSTCooKSBjb25zdDsKKyNlbmRpZgorI2lmZGVmIF9fT0JKQ19fCisgICAgb3BlcmF0b3IgTlNT
dHJpbmcqKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oUVQpCisgICAgS1VSTChjb25zdCBRVXJsJik7CiAgICAgb3BlcmF0b3IgUVVybCgpIGNvbnN0
OwogI2VuZGlmCiAKLSAgICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGZp
bGVTeXN0ZW1QYXRoKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBkZWNv
ZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRl
ZFN0cmluZyBkZWNvZGVfc3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBjb25zdCBUZXh0
RW5jb2RpbmcmKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVfc3RyaW5nKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKLSAgICAKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtVUkwgJiwgY29uc3QgS1VSTCAmKTsKLQogI2lmbmRlZiBOREVCVUcKICAgICB2b2lk
IHByaW50KCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKICAgICBib29sIGlzSGllcmFyY2hp
Y2FsKCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0KGNvbnN0IEtVUkwmLCBjb25zdCBEZXByZWNhdGVk
U3RyaW5nJiwgY29uc3QgVGV4dEVuY29kaW5nJik7Ci0gICAgdm9pZCBwYXJzZShjb25zdCBjaGFy
ICp1cmwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgKm9yaWdpbmFsU3RyaW5nKTsKKyAgICB2b2lk
IGluaXQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwor
ICAgIHN0YXRpYyBib29sIHByb3RvY29sSXMoY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciopOwor
ICAgIHZvaWQgY29weVRvQnVmZmVyKFZlY3RvcjxjaGFyLCA1MTI+JiBidWZmZXIpIGNvbnN0Owor
CisgICAgLy8gUGFyc2VzIHRoZSBnaXZlbiBVUkwuIFRoZSBvcmlnaW5hbFN0cmluZyBwYXJhbWV0
ZXIgYWxsb3dzIGZvciBhbgorICAgIC8vIG9wdGltaXphdGlvbjogV2hlbiB0aGUgc291cmNlIGlz
IHRoZSBzYW1lIGFzIHRoZSBmaXhlZC11cCBzdHJpbmcsCisgICAgLy8gaXQgd2lsbCB1c2UgdGhl
IHBhc3NlZC1pbiBzdHJpbmcgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IG9uZS4KKyAgICB2
b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcGFyc2UoY29uc3QgY2hhciogdXJs
LCBjb25zdCBTdHJpbmcqIG9yaWdpbmFsU3RyaW5nKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcg
dXJsU3RyaW5nOworICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBib29sIG1faXNWYWxpZDsKICAg
ICBpbnQgc2NoZW1lRW5kUG9zOwogICAgIGludCB1c2VyU3RhcnRQb3M7CkBAIC0xNDQsMTAgKzE4
NCw2NCBAQCBwcml2YXRlOgogICAgIGludCBwYXRoRW5kUG9zOwogICAgIGludCBxdWVyeUVuZFBv
czsKICAgICBpbnQgZnJhZ21lbnRFbmRQb3M7Ci0gICAgCi0gICAgZnJpZW5kIGJvb2wgZXF1YWxJ
Z25vcmluZ1JlZihjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJMJiBiKTsKIH07CiAKK2Jvb2wgb3Bl
cmF0b3I9PShjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmLCBj
b25zdCBLVVJMJik7Citib29sIG9wZXJhdG9yIT0oY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsK
K2Jvb2wgb3BlcmF0b3IhPShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Citib29sIG9wZXJh
dG9yIT0oY29uc3QgU3RyaW5nJiwgY29uc3QgS1VSTCYpOworCitib29sIGVxdWFsSWdub3JpbmdS
ZWYoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKworY29uc3QgS1VSTCYgYmxhbmtVUkwoKTsK
KworLy8gRnVuY3Rpb25zIHRvIGRvIFVSTCBvcGVyYXRpb25zIG9uIHN0cmluZ3MuCisvLyBUaGVz
ZSBhcmUgb3BlcmF0aW9ucyB0aGF0IGFyZW4ndCBmYXN0ZXIgb24gYSBwYXJzZWQgVVJMLgorCiti
b29sIHByb3RvY29sSXMoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGNoYXIqIHByb3RvY29sKTsK
KworLy8gVW5lc2NhcGVzIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgVVJMIGVzY2FwaW5nIHJ1bGVz
LCBnaXZlbiBhbiBvcHRpb25hbAorLy8gZW5jb2RpbmcgKGRlZmF1bHRpbmcgdG8gVVRGLTggb3Ro
ZXJ3aXNlKS4gREFOR0VSOiBJZiB0aGUgVVJMIGhhcyAiJTAwIgorLy8gaW4gaXQsIHRoZSByZXN1
bHRpbmcgc3RyaW5nIHdpbGwgaGF2ZSBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMhCitTdHJpbmcg
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYpOworU3RyaW5nIGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKwor
U3RyaW5nIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJik7CisKKy8v
IElubGluZXMuCisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgS1VSTCYgYSwgY29uc3Qg
S1VSTCYgYikKK3sKKyAgICByZXR1cm4gYS5zdHJpbmcoKSA9PSBiLnN0cmluZygpOworfQorCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtVUkwmIGEsIGNvbnN0IFN0cmluZyYgYikKK3sK
KyAgICByZXR1cm4gYS5zdHJpbmcoKSA9PSBiOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgS1VSTCYgYikKK3sKKyAgICByZXR1cm4gYSA9PSBiLnN0
cmluZygpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtVUkwmIGEsIGNvbnN0
IEtVUkwmIGIpCit7CisgICAgcmV0dXJuIGEuc3RyaW5nKCkgIT0gYi5zdHJpbmcoKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLVVJMJiBhLCBjb25zdCBTdHJpbmcmIGIpCit7
CisgICAgcmV0dXJuIGEuc3RyaW5nKCkgIT0gYjsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEtVUkwmIGIpCit7CisgICAgcmV0dXJuIGEgIT0gYi5z
dHJpbmcoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gS1VSTF9oCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2NmL0tVUkxDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jZi9L
VVJMQ0ZOZXQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2YvS1VS
TENGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiS1VSTC5oIgogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlVSTC5oPgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwpAQCAtMzYsMzUgKzM1LDQ2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
S1VSTDo6S1VSTChDRlVSTFJlZiB1cmwpCiB7Ci0gICAgaWYgKHVybCkgewotICAgICAgICBDRklu
ZGV4IGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcyh1cmwsIDAsIDApOwotICAgICAgICBWZWN0
b3I8Y2hhciwgMjA0OD4gYnVmZmVyKGJ5dGVzTGVuZ3RoICsgNik7IC8vIDYgZm9yICJmaWxlOiIs
IDEgZm9yIE5VTCB0ZXJtaW5hdG9yCi0gICAgICAgIGNoYXIqIGJ5dGVzID0gJmJ1ZmZlcls1XTsK
LSAgICAgICAgQ0ZVUkxHZXRCeXRlcyh1cmwsIChVSW50OCopYnl0ZXMsIGJ5dGVzTGVuZ3RoKTsK
LSAgICAgICAgYnl0ZXNbYnl0ZXNMZW5ndGhdID0gJ1wwJzsKLSAgICAgICAgaWYgKGJ5dGVzWzBd
ID09ICcvJykgewotICAgICAgICAgICAgYnVmZmVyWzBdID0gJ2YnOwotICAgICAgICAgICAgYnVm
ZmVyWzFdID0gJ2knOwotICAgICAgICAgICAgYnVmZmVyWzJdID0gJ2wnOwotICAgICAgICAgICAg
YnVmZmVyWzNdID0gJ2UnOwotICAgICAgICAgICAgYnVmZmVyWzRdID0gJzonOwotICAgICAgICAg
ICAgcGFyc2UoYnVmZmVyLmRhdGEoKSwgMCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
cGFyc2UoYnl0ZXMsIDApOwotICAgIH0gZWxzZQotICAgICAgICBwYXJzZSgiIiwgMCk7CisgICAg
aWYgKCF1cmwpIHsKKyAgICAgICAgcGFyc2UoMCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBDRkluZGV4IGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcyh1cmwsIDAsIDApOwor
ICAgIFZlY3RvcjxjaGFyLCA1MTI+IGJ1ZmZlcihieXRlc0xlbmd0aCArIDYpOyAvLyA1IGZvciAi
ZmlsZToiLCAxIGZvciBudWxsIGNoYXJhY3RlciB0byBlbmQgQyBzdHJpbmcKKyAgICBjaGFyKiBi
eXRlcyA9ICZidWZmZXJbNV07CisgICAgQ0ZVUkxHZXRCeXRlcyh1cmwsIHJlaW50ZXJwcmV0X2Nh
c3Q8VUludDgqPihieXRlcyksIGJ5dGVzTGVuZ3RoKTsKKyAgICBpZiAoYnl0ZXNbMF0gIT0gJy8n
KSB7CisgICAgICAgIHBhcnNlKGJ5dGVzLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBieXRlc1tieXRlc0xlbmd0aF0gPSAnXDAnOworCisgICAgYnVmZmVyWzBdID0gJ2YnOworICAg
IGJ1ZmZlclsxXSA9ICdpJzsKKyAgICBidWZmZXJbMl0gPSAnbCc7CisgICAgYnVmZmVyWzNdID0g
J2UnOworICAgIGJ1ZmZlcls0XSA9ICc6JzsKKworICAgIHBhcnNlKGJ1ZmZlci5kYXRhKCksIDAp
OwogfQogCiBDRlVSTFJlZiBLVVJMOjpjcmVhdGVDRlVSTCgpIGNvbnN0CiB7Ci0gICAgY29uc3Qg
VUludDggKmJ5dGVzID0gKGNvbnN0IFVJbnQ4ICopdXJsU3RyaW5nLmxhdGluMSgpOworICAgIC8v
IEZJWE1FOiBXaGF0IHNob3VsZCB0aGlzIHJldHVybiBmb3IgaW52YWxpZCBVUkxzPworICAgIC8v
IEN1cnJlbnRseSBpdCB0aHJvd3MgYXdheSB0aGUgaGlnaCBieXRlcyBvZiB0aGUgY2hhcmFjdGVy
cyBpbiB0aGUgc3RyaW5nIGluIHRoYXQgY2FzZSwKKyAgICAvLyB3aGljaCBpcyBjbGVhcmx5IHdy
b25nLgorCisgICAgVmVjdG9yPGNoYXIsIDUxMj4gYnVmZmVyOworICAgIGNvcHlUb0J1ZmZlcihi
dWZmZXIpOworCiAgICAgLy8gTk9URTogV2UgdXNlIFVURi04IGhlcmUgc2luY2UgdGhpcyBlbmNv
ZGluZyBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHN0cmluZ3Mgd2hlbiByZXR1cm5pbmcgVVJMIGNv
bXBvbmVudHMKICAgICAvLyAoZS5nIGNhbGxzIHRvIE5TVVJMIC1wYXRoKS4gSG93ZXZlciwgdGhp
cyBmdW5jdGlvbiBpcyBub3QgdG9sZXJhbnQgb2YgaWxsZWdhbCBVVEYtOCBzZXF1ZW5jZXMsIHdo
aWNoCiAgICAgLy8gY291bGQgZWl0aGVyIGJlIGEgbWFsZm9ybWVkIHN0cmluZyBvciBieXRlcyBp
biBhIGRpZmZlcmVudCBlbmNvZGluZywgbGlrZSBTaGlmdC1KSVMsIHNvIHdlIGZhbGwgYmFjawog
ICAgIC8vIG9udG8gdXNpbmcgSVNPIExhdGluLTEgaW4gdGhvc2UgY2FzZXMuCi0gICAgQ0ZVUkxS
ZWYgcmVzdWx0ID0gQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcygwLCBieXRlcywgdXJs
U3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIDAsIHRydWUpOworICAgIENG
VVJMUmVmIHJlc3VsdCA9IENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMoMCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuc2l6ZSgpLCBr
Q0ZTdHJpbmdFbmNvZGluZ1VURjgsIDAsIHRydWUpOwogICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXN1bHQgPSBDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKDAsIGJ5dGVzLCB1cmxT
dHJpbmcubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLCAwLCB0cnVlKTsKKyAg
ICAgICAgcmVzdWx0ID0gQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcygwLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCksIGtD
RlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLCAwLCB0cnVlKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC03OSw5ICs4OSw3IEBAIFN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0
CiAjZWxzZQogICAgIENGVVJMUGF0aFN0eWxlIHBhdGhTdHlsZSA9IGtDRlVSTFBPU0lYUGF0aFN0
eWxlOwogI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGgoQWRvcHRDRiwg
Q0ZVUkxDb3B5RmlsZVN5c3RlbVBhdGgoY2ZVUkwuZ2V0KCksIHBhdGhTdHlsZSkpOwotICAgIHJl
dHVybiBwYXRoLmdldCgpOworICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+KEFkb3B0
Q0YsIENGVVJMQ29weUZpbGVTeXN0ZW1QYXRoKGNmVVJMLmdldCgpLCBwYXRoU3R5bGUpKS5nZXQo
KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHJldmlzaW9uIDMwMjMxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE2MywxMSArMTYzLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpj
cmVhdGVRVE1vdmllKGMKICAgICBtX3F0TW92aWUgPSAwOwogICAgIAogICAgIC8vIERpc2FibGUg
c3RyZWFtaW5nIHN1cHBvcnQgZm9yIG5vdywgPHJkYXI6Ly9wcm9ibGVtLzU2OTM5Njc+Ci0gICAg
aWYgKHVybC5zdGFydHNXaXRoKCJydHNwOiIpKQorICAgIGlmIChwcm90b2NvbElzKHVybCwgInJ0
c3AiKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TRGljdGlvbmFyeSogbW92aWVBdHRy
aWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtVUkwodXJsLmRlcHJlY2F0ZWRTdHJp
bmcoKSkuZ2V0TlNVUkwoKSwgUVRNb3ZpZVVSTEF0dHJpYnV0ZSwKKworICAgIE5TVVJMICpjb2Nv
YVVSTCA9IEtVUkwodXJsKTsKKyAgICBOU0RpY3Rpb25hcnkgKm1vdmllQXR0cmlidXRlcyA9IFtO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2NvYVVSTCwgUVRNb3ZpZVVSTEF0dHJpYnV0ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6WUVTXSwgUVRNb3ZpZVByZXZlbnRFeHRlcm5hbFVSTExpbmtzQXR0cmlidXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZ
RVNdLCBRVFNlY3VyaXR5UG9saWN5Tm9Dcm9zc1NpdGVBdHRyaWJ1dGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmlsXTsKQEAgLTE3Niw3ICsxNzcsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZShjCiAgICAgbV9xdE1vdmllLmFkb3B0TlMo
W1tRVE1vdmllIGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZXM6bW92aWVBdHRyaWJ1dGVzIGVycm9y
OiZlcnJvcl0pOwogICAgIAogICAgIC8vIEZJWE1FOiBGaW5kIGEgcHJvcGVyIHdheSB0byBkZXRl
Y3Qgc3RyZWFtaW5nIGNvbnRlbnQuCi0gICAgbV9pc1N0cmVhbWluZyA9IHVybC5zdGFydHNXaXRo
KCJydHNwOiIpOworICAgIG1faXNTdHJlYW1pbmcgPSBwcm90b2NvbElzKHVybCwgInJ0c3AiKTsK
ICAgICAKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjcgKzI2LDE3IEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIkNsaXBib2FyZE1hYy5oIgogCi0jaW1wb3J0ICJDYWNoZWRJbWFnZS5oIgotI2lt
cG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9y
dCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVk
aXRvci5oIgotI2ltcG9ydCAiRXZlbnRIYW5kbGVyLmgiCi0jaW1wb3J0ICJGbG9hdFJlY3QuaCIK
ICNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW1wb3J0ICJJbWFnZS5oIgogI2ltcG9ydCAiUGFnZS5o
IgogI2ltcG9ydCAiUGFzdGVib2FyZC5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJl
bmRlckltYWdlLmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlkZ2UuaCIKICNpbXBvcnQgIldl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIAotQGNsYXNzIFdlYkFyY2hpdmU7Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQ2xpcGJvYXJkTWFjOjpDbGlwYm9hcmRNYWMoYm9vbCBmb3JEcmFnZ2lu
ZywgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkLCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5
LCBGcmFtZSAqZnJhbWUpCkBAIC0zMzIsNyArMzIyLDcgQEAgdm9pZCBDbGlwYm9hcmRNYWM6OmRl
Y2xhcmVBbmRXcml0ZURyYWdJbQogewogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5j
bGllbnQoKS0+ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKG1fcGFzdGVib2FyZC5nZXQoKSwgW0RP
TUVsZW1lbnQgX3dyYXBFbGVtZW50OmVsZW1lbnRdLCB1cmwuZ2V0TlNVUkwoKSwgdGl0bGUsIGZy
YW1lKTsKKyAgICAgICAgcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+Y2xpZW50KCktPmRlY2xhcmVB
bmRXcml0ZURyYWdJbWFnZShtX3Bhc3RlYm9hcmQuZ2V0KCksIFtET01FbGVtZW50IF93cmFwRWxl
bWVudDplbGVtZW50XSwgdXJsLCB0aXRsZSwgZnJhbWUpOwogfQogICAgIAogRHJhZ0ltYWdlUmVm
IENsaXBib2FyZE1hYzo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBsb2MpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiwxNCArMjYsMTIgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQ29v
a2llSmFyLmgiCiAKLSNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5o
IgotI2ltcG9ydCAiUGxhdGZvcm1TdHJpbmcuaCIKLQorI2ltcG9ydCAiS1VSTC5oIgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLXR5cGVkZWYg
dW5zaWduZWQgaW50IE5TVUludGVnZXI7Cit0eXBlZGVmIHVuc2lnbmVkIE5TVUludGVnZXI7CiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsNyArNDAsNyBAQCBTdHJpbmcgY29v
a2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVuCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogCi0gICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybC5nZXROU1VSTCgpOworICAg
IE5TVVJMICpjb29raWVVUkwgPSB1cmw7CiAgICAgTlNBcnJheSAqY29va2llc0ZvclVSTCA9IFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc0ZvclVS
TDpjb29raWVVUkxdOwogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IE9uIDEwLjUs
IE5TSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgaGFwcGlseSBzdG9yZSBhbiBlbXB0eSBjb29raWUs
IHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCkBAIC03MCwxNCArNjgsMTQgQEAg
dm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIAogICAgIGlmIChjb29raWVT
dHIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU1VSTCAqY29va2llVVJMID0g
dXJsLmdldE5TVVJMKCk7CisgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKICAgICAKICAgICAv
LyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8v
NDQwOTAzND4KICAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3Qg
cGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKICAgICBTdHJpbmcgY29va2llU3RyaW5nID0g
Y29va2llU3RyLmNvbnRhaW5zKCc9JykgPyBjb29raWVTdHIgOiBjb29raWVTdHIgKyAiPSI7CiAg
ICAgCiAgICAgTlNBcnJheSAqY29va2llcyA9IFtOU0hUVFBDb29raWUgY29va2llc1dpdGhSZXNw
b25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNvb2tp
ZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF07Ci0gICAgW1tO
U0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmNv
b2tpZXMgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6cG9saWN5QmFzZVVSTC5nZXRO
U1VSTCgpXTsgICAgCisgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVT
dG9yYWdlXSBzZXRDb29raWVzOmNvb2tpZXMgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRV
Ukw6cG9saWN5QmFzZVVSTF07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS1VSTE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL21hYy9LVVJMTWFjLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vbWFjL0tVUkxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsNDIg
KzIzLDQ1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCisj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIktVUkwuaCIKIAogI2ltcG9ydCAiRm91bmRhdGlv
bkV4dHJhcy5oIgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBLVVJMOjpLVVJMKE5TVVJMICp1cmwpCiB7
Ci0gICAgaWYgKHVybCkgewotICAgICAgICBDRkluZGV4IGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRC
eXRlcygoQ0ZVUkxSZWYpdXJsLCAwLCAwKTsKLSAgICAgICAgVmVjdG9yPGNoYXIsIDIwNDg+IGJ1
ZmZlcihieXRlc0xlbmd0aCArIDYpOyAgLy8gNSBmb3IgImZpbGU6IiwgMSBmb3IgTlVMIHRlcm1p
bmF0b3IKLSAgICAgICAgY2hhciAqYnl0ZXMgPSAmYnVmZmVyWzVdOwotICAgICAgICBDRlVSTEdl
dEJ5dGVzKChDRlVSTFJlZil1cmwsIChVSW50OCAqKWJ5dGVzLCBieXRlc0xlbmd0aCk7Ci0gICAg
ICAgIGJ5dGVzW2J5dGVzTGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAgIGlmIChieXRlc1swXSA9PSAn
LycpIHsKLSAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdmJzsKLSAgICAgICAgICAgIGJ1ZmZlclsx
XSA9ICdpJzsKLSAgICAgICAgICAgIGJ1ZmZlclsyXSA9ICdsJzsKLSAgICAgICAgICAgIGJ1ZmZl
clszXSA9ICdlJzsKLSAgICAgICAgICAgIGJ1ZmZlcls0XSA9ICc6JzsKLSAgICAgICAgICAgIHBh
cnNlKGJ1ZmZlci5kYXRhKCksIDApOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBhcnNl
KGJ5dGVzLCAwKTsKLSAgICB9IGVsc2UKKyAgICBpZiAoIXVybCkgewogICAgICAgICBwYXJzZSgw
LCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENGSW5kZXggYnl0ZXNMZW5ndGgg
PSBDRlVSTEdldEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZVUkxSZWY+KHVybCksIDAsIDApOwor
ICAgIFZlY3RvcjxjaGFyLCA1MTI+IGJ1ZmZlcihieXRlc0xlbmd0aCArIDYpOyAvLyA1IGZvciAi
ZmlsZToiLCAxIGZvciBudWxsIGNoYXJhY3RlciB0byBlbmQgQyBzdHJpbmcKKyAgICBjaGFyKiBi
eXRlcyA9ICZidWZmZXJbNV07CisgICAgQ0ZVUkxHZXRCeXRlcyhyZWludGVycHJldF9jYXN0PENG
VVJMUmVmPih1cmwpLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4oYnl0ZXMpLCBieXRlc0xlbmd0
aCk7CisgICAgYnl0ZXNbYnl0ZXNMZW5ndGhdID0gJ1wwJzsKKyAgICBpZiAoYnl0ZXNbMF0gIT0g
Jy8nKSB7CisgICAgICAgIHBhcnNlKGJ5dGVzLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGJ1ZmZlclswXSA9ICdmJzsKKyAgICBidWZmZXJbMV0gPSAnaSc7CisgICAgYnVmZmVy
WzJdID0gJ2wnOworICAgIGJ1ZmZlclszXSA9ICdlJzsKKyAgICBidWZmZXJbNF0gPSAnOic7CisK
KyAgICBwYXJzZShidWZmZXIuZGF0YSgpLCAwKTsKIH0KIAotTlNVUkwgKktVUkw6OmdldE5TVVJM
KCkgY29uc3QKK0tVUkw6Om9wZXJhdG9yIE5TVVJMICooKSBjb25zdAogewotICAgIGlmICh1cmxT
dHJpbmcuaXNOdWxsKCkpCisgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgLy8gQ0ZVUkwgY2FuJ3QgaG9sZCBhbiBlbXB0eSBVUkwsIHVubGlrZSBOU1VSTAorICAg
IC8vIENGVVJMIGNhbid0IGhvbGQgYW4gZW1wdHkgVVJMLCB1bmxpa2UgTlNVUkwuCiAgICAgaWYg
KGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24gMzAyMzEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChOU1Bhc3RlYm9h
cmQqIAogICAgIAogICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7CiAgICAgCi0gICAgTlNVUkwg
KmNvY29hVVJMID0gdXJsLmdldE5TVVJMKCk7CisgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOwog
ICAgIE5TU3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyA9IGZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50
KCktPnVzZXJWaXNpYmxlU3RyaW5nKGNvY29hVVJMKTsKICAgICAKICAgICBOU1N0cmluZyAqdGl0
bGUgPSAoTlNTdHJpbmcqKXRpdGxlU3RyOwpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBBU1NFUlQobm9kZSk7CiAgICAgRnJh
bWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKIAotICAgIE5TVVJMICpjb2Nv
YVVSTCA9IHVybC5nZXROU1VSTCgpOworICAgIE5TVVJMICpjb2NvYVVSTCA9IHVybDsKICAgICBB
U1NFUlQoY29jb2FVUkwpOwogCiAgICAgTlNBcnJheSogdHlwZXMgPSB3cml0YWJsZVR5cGVzRm9y
SW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMu
bW0JKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJh
dG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgU3RyaW5n
IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZwogeyAgIAogICAgIHJldHVybiBbW1dl
YkNvcmVLZXlHZW5lcmF0b3Igc2hhcmVkR2VuZXJhdG9yXSBzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmdXaXRoU3RyZW5ndGhJbmRleDprZXlTaXplSW5kZXggCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlOmNoYWxsZW5nZVN0cmluZwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVVSTDp1cmwuZ2V0TlNVUkwoKV07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlVVJMOnVybF07CiB9CiAKIH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkocmV2aXNpb24gMzAy
MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsNyArMTAzLDggQEAgYm9vbCBwYXJzZUhUVFBSZWZy
ZXNoKGNvbnN0IFN0cmluZyYgcmVmcgogCiBTdHJpbmcgZmlsZW5hbWVGcm9tSFRUUENvbnRlbnRE
aXNwb3NpdGlvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFZlY3RvcjxTdHJpbmc+IGtl
eVZhbHVlUGFpcnMgPSB2YWx1ZS5zcGxpdCgnOycpOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVZh
bHVlUGFpcnM7CisgICAgdmFsdWUuc3BsaXQoJzsnLCBrZXlWYWx1ZVBhaXJzKTsKIAogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGtleVZhbHVlUGFpcnMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE3MywxMSArMTczLDExIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnBvcnRB
bGxvd2VkKGNvbnN0IFIKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBBbGxvdyBwb3J0
cyAyMSBhbmQgMjIgZm9yIEZUUCBVUkxzLCBhcyBNb3ppbGxhIGRvZXMuCi0gICAgaWYgKChwb3J0
ID09IDIxIHx8IHBvcnQgPT0gMjIpICYmIHJlcXVlc3QudXJsKCkuZGVwcmVjYXRlZFN0cmluZygp
LnN0YXJ0c1dpdGgoImZ0cDoiLCBmYWxzZSkpCisgICAgaWYgKChwb3J0ID09IDIxIHx8IHBvcnQg
PT0gMjIpICYmIHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiZnRwIikpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgLy8gQWxsb3cgYW55IHBvcnQgbnVtYmVyIGluIGEgZmlsZSBVUkwsIHNp
bmNlIHRoZSBwb3J0IG51bWJlciBpcyBpZ25vcmVkLgotICAgIGlmIChyZXF1ZXN0LnVybCgpLmRl
cHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCJmaWxlOiIsIGZhbHNlKSkKKyAgICBpZiAocmVx
dWVzdC51cmwoKS5wcm90b2NvbElzKCJmaWxlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291
cmNlRXJyb3JDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlRXJyb3JDRi5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlRXJyb3JDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3
ICsxMjAsNyBAQCBSZXNvdXJjZUVycm9yOjpvcGVyYXRvciBDRkVycm9yUmVmKCkgY29uCiAgICAg
ICAgIGlmICghbV9mYWlsaW5nVVJMLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBmYWlsaW5nVVJMU3RyaW5nKEFkb3B0Q0YsIG1fZmFpbGluZ1VSTC5jcmVh
dGVDRlN0cmluZygpKTsKICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHVzZXJJbmZv
LmdldCgpLCBmYWlsaW5nVVJMU3RyaW5nS2V5LCBmYWlsaW5nVVJMU3RyaW5nLmdldCgpKTsKLSAg
ICAgICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsKEFkb3B0Q0YsIEtVUkwobV9mYWlsaW5n
VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSkuY3JlYXRlQ0ZVUkwoKSk7CisgICAgICAgICAgICBSZXRh
aW5QdHI8Q0ZVUkxSZWY+IHVybChBZG9wdENGLCBLVVJMKG1fZmFpbGluZ1VSTCkuY3JlYXRlQ0ZV
UkwoKSk7CiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSh1c2VySW5mby5nZXQoKSwg
ZmFpbGluZ1VSTEtleSwgdXJsLmdldCgpKTsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5j
cHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBA
IHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCAKICAgICAgICAgaWYgKGh0
dHBDb2RlID49IDMwMCAmJiBodHRwQ29kZSA8IDQwMCkgewogICAgICAgICAgICAgU3RyaW5nIGxv
Y2F0aW9uID0gZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImxvY2F0aW9uIik7CiAgICAg
ICAgICAgICBpZiAoIWxvY2F0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIEtVUkwg
bmV3VVJMID0gS1VSTChqb2ItPnJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24uZGVwcmVjYXRlZFN0
cmluZygpKTsKKyAgICAgICAgICAgICAgICBLVVJMIG5ld1VSTCA9IEtVUkwoam9iLT5yZXF1ZXN0
KCkudXJsKCksIGxvY2F0aW9uKTsKIAogICAgICAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCBy
ZWRpcmVjdGVkUmVxdWVzdCA9IGpvYi0+cmVxdWVzdCgpOwogICAgICAgICAgICAgICAgIHJlZGly
ZWN0ZWRSZXF1ZXN0LnNldFVSTChuZXdVUkwpOwpAQCAtNDYzLDQxICs0NjMsNDEgQEAgYm9vbCBS
ZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnN0YXJ0U2NoZWR1bAogCiBzdGF0aWMgdm9pZCBwYXJzZURh
dGFVcmwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGRh
dGEgPSBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3Ry
aW5nIGRhdGEgPSBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKIAogICAgIEFTU0VS
VChkYXRhLnN0YXJ0c1dpdGgoImRhdGE6IiwgZmFsc2UpKTsKIAotICAgIERlcHJlY2F0ZWRTdHJp
bmcgaGVhZGVyOworICAgIFN0cmluZyBoZWFkZXI7CiAgICAgYm9vbCBiYXNlNjQgPSBmYWxzZTsK
IAogICAgIGludCBpbmRleCA9IGRhdGEuZmluZCgnLCcpOwogICAgIGlmIChpbmRleCAhPSAtMSkg
ewotICAgICAgICBoZWFkZXIgPSBkYXRhLm1pZCg1LCBpbmRleCAtIDUpLmxvd2VyKCk7Ci0gICAg
ICAgIGRhdGEgPSBkYXRhLm1pZChpbmRleCArIDEpOworICAgICAgICBoZWFkZXIgPSBkYXRhLnN1
YnN0cmluZyg1LCBpbmRleCAtIDUpLmxvd2VyKCk7CisgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0
cmluZyhpbmRleCArIDEpOwogCiAgICAgICAgIGlmIChoZWFkZXIuZW5kc1dpdGgoIjtiYXNlNjQi
KSkgewogICAgICAgICAgICAgYmFzZTY0ID0gdHJ1ZTsKICAgICAgICAgICAgIGhlYWRlciA9IGhl
YWRlci5sZWZ0KGhlYWRlci5sZW5ndGgoKSAtIDcpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0g
ICAgICAgIGRhdGEgPSBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIGRhdGEgPSBTdHJpbmco
KTsKIAotICAgIGRhdGEgPSBLVVJMOjpkZWNvZGVfc3RyaW5nKGRhdGEpOworICAgIGRhdGEgPSBk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7CiAKICAgICBpZiAoYmFzZTY0ICYmICFkYXRh
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBVc2UgdGhlIEdMaWIgQmFzZTY0IGlmIGF2YWlsYWJs
ZSwgc2luY2UgV2ViQ29yZSdzIGRlY29kZXIgaXNuJ3QKICAgICAgICAgLy8gZ2VuZXJhbC1wdXJw
b3NlIGFuZCBmYWlscyBvbiBBY2lkMyB0ZXN0IDk3ICh3aGl0ZXNwYWNlKS4KICNpZmRlZiBVU0Vf
R0xJQl9CQVNFNjQKICAgICAgICAgZ3NpemUgb3V0TGVuZ3RoOwotICAgICAgICBndWNoYXIqIG91
dCA9IGdfYmFzZTY0X2RlY29kZShkYXRhLmFzY2lpKCksICZvdXRMZW5ndGgpOwotICAgICAgICBk
YXRhID0gRGVwcmVjYXRlZFN0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPihvdXQpLCBvdXRM
ZW5ndGgpOworICAgICAgICBndWNoYXIqIG91dCA9IGdfYmFzZTY0X2RlY29kZShkYXRhLmxhdGlu
MSgpLmRhdGEoKSwgJm91dExlbmd0aCk7CisgICAgICAgIGRhdGEgPSBTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ob3V0KSwgb3V0TGVuZ3RoKTsKICAgICAgICAgZ19mcmVlKG91dCk7CiAj
ZWxzZQogICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICBpZiAoYmFzZTY0RGVjb2Rl
KGRhdGEuYXNjaWkoKSwgZGF0YS5sZW5ndGgoKSwgb3V0KSkKLSAgICAgICAgICAgIGRhdGEgPSBE
ZXByZWNhdGVkU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkpOworICAgICAgICBpZiAoYmFz
ZTY0RGVjb2RlKGRhdGEuLmxhdGluMSgpLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSwgb3V0KSkKKyAg
ICAgICAgICAgIGRhdGEgPSBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGRhdGEgPSBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAg
ICBkYXRhID0gU3RyaW5nKCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTUyNCw5ICs1MjQsOCBAQCBz
dGF0aWMgdm9pZCBwYXJzZURhdGFVcmwoUmVzb3VyY2VIYW5kbGUqCiB2b2lkIFJlc291cmNlSGFu
ZGxlTWFuYWdlcjo6c3RhcnRKb2IoUmVzb3VyY2VIYW5kbGUqIGpvYikKIHsKICAgICBLVVJMIGt1
cmwgPSBqb2ItPnJlcXVlc3QoKS51cmwoKTsKLSAgICBTdHJpbmcgcHJvdG9jb2wgPSBrdXJsLnBy
b3RvY29sKCk7CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2wsICJkYXRhIikp
IHsKKyAgICBpZiAoa3VybC5wcm90b2NvbElzKCJkYXRhIikpIHsKICAgICAgICAgcGFyc2VEYXRh
VXJsKGpvYik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01MzUsMTUgKzUzNCwxNSBAQCB2
b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c3RhcnRKb2IoUmVzCiAgICAga3VybC5zZXRSZWYo
IiIpOwogCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwo
KTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHVybCA9IGt1cmwuZGVwcmVjYXRlZFN0cmluZygpOwor
ICAgIFN0cmluZyB1cmwgPSBrdXJsLnN0cmluZygpOwogCiAgICAgaWYgKGt1cmwuaXNMb2NhbEZp
bGUoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHF1ZXJ5ID0ga3VybC5xdWVyeSgpOwor
ICAgICAgICBTdHJpbmcgcXVlcnkgPSBrdXJsLnF1ZXJ5KCk7CiAgICAgICAgIC8vIFJlbW92ZSBh
bnkgcXVlcnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZS4KICAgICAgICAgaWYgKCFxdWVyeS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICB1cmwgPSB1cmwubGVmdCh1cmwuZmluZChxdWVyeSkpOwog
ICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIE1JTUUgdHlwZSBiYXNlZCBvbiB0aGUgcGF0aC4KLSAg
ICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1F
VHlwZUZvclBhdGgoU3RyaW5nKHVybCkpKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1l
VHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgodXJsKSk7CiAgICAgfQog
CiAgICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwpAQCAtNTY4LDcgKzU2Nyw3IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzdGFydEpvYihSZXMKIAogICAgIC8vIHVybCBt
dXN0IHJlbWFpbiB2YWxpZCB0aHJvdWdoIHRoZSByZXF1ZXN0CiAgICAgQVNTRVJUKCFkLT5tX3Vy
bCk7Ci0gICAgZC0+bV91cmwgPSBzdHJkdXAodXJsLmFzY2lpKCkpOworICAgIGQtPm1fdXJsID0g
c3RyZHVwKHVybC5sYXRpbjEoKS5kYXRhKCkpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfVVJMLCBkLT5tX3VybCk7CiAKICAgICBpZiAobV9jb29raWVKYXJGaWxl
TmFtZSkgewpAQCAtNjExLDcgKzYxMCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpz
dGFydEpvYihSZXMKICAgICAvLyB0aW1lb3V0IHdpbGwgb2NjdXIgYW5kIGRvIGN1cmxfbXVsdGlf
cGVyZm9ybQogICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkg
ewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgcHJpbnRmKCJFcnJvciAlZCBzdGFydGluZyBqb2Ig
JXNcbiIsIHJldCwgam9iLT5yZXF1ZXN0KCkudXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lp
KCkpOworICAgICAgICBwcmludGYoIkVycm9yICVkIHN0YXJ0aW5nIGpvYiAlc1xuIiwgcmV0LCBq
b2ItPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwogI2VuZGlmCiAg
ICAgICAgIGpvYi0+Y2FuY2VsKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0JKHJldmlzaW9uIDMw
MjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLy8gLSotIG1vZGU6IGMrKzsgYy1iYXNp
Yy1vZmZzZXQ6IDQgLSotCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUsOCArMjUsOSBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiS1VSTC5oIgogI2ltcG9ydCAiUmVzb3VyY2VFcnJvci5oIgorCisjaW1wb3J0ICJLVVJM
LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KIAogQGludGVyZmFjZSBOU0Vy
cm9yIChXZWJFeHRyYXMpCkBAIC02Myw4ICs2NCw5IEBAIFJlc291cmNlRXJyb3I6Om9wZXJhdG9y
IE5TRXJyb3IqKCkgY29uc3QKICAgICAgICAgICAgIFt1c2VySW5mby5nZXQoKSBzZXRWYWx1ZTpt
X2xvY2FsaXplZERlc2NyaXB0aW9uIGZvcktleTpOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5XTsK
IAogICAgICAgICBpZiAoIW1fZmFpbGluZ1VSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5T
VVJMICpjb2NvYVVSTCA9IEtVUkwobV9mYWlsaW5nVVJMKTsKICAgICAgICAgICAgIFt1c2VySW5m
by5nZXQoKSBzZXRWYWx1ZTptX2ZhaWxpbmdVUkwgZm9yS2V5OkAiTlNFcnJvckZhaWxpbmdVUkxT
dHJpbmdLZXkiXTsKLSAgICAgICAgICAgIFt1c2VySW5mby5nZXQoKSBzZXRWYWx1ZTpLVVJMKG1f
ZmFpbGluZ1VSTC5kZXByZWNhdGVkU3RyaW5nKCkpLmdldE5TVVJMKCkgZm9yS2V5OkAiTlNFcnJv
ckZhaWxpbmdVUkxLZXkiXTsKKyAgICAgICAgICAgIFt1c2VySW5mby5nZXQoKSBzZXRWYWx1ZTpj
b2NvYVVSTCBmb3JLZXk6QCJOU0Vycm9yRmFpbGluZ1VSTEtleSJdOwogICAgICAgICB9CiAKICAg
ICAgICAgbV9wbGF0Zm9ybUVycm9yLmFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERv
bWFpbjptX2RvbWFpbiBjb2RlOm1fZXJyb3JDb2RlIHVzZXJJbmZvOnVzZXJJbmZvLmdldCgpXSk7
CkBAIC03NCw0ICs3NiwzIEBAIFJlc291cmNlRXJyb3I6Om9wZXJhdG9yIE5TRXJyb3IqKCkgY29u
c3QKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDMwMjMxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0
IC0qLQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZXNvdXJjZVJl
cXVlc3QgOiBwdWJsaWMgUmVzb3VyY2VSZXF1ZXN0QmFzZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpIAotICAgICAgICAgICAgOiBSZXNv
dXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSksIFVzZVByb3RvY29s
Q2FjaGVQb2xpY3kpCisgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTCh1cmwp
LCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQogICAgICAgICB7CiAgICAgICAgIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMu
bW0JKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZVJlcXVlc3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTc1LDE1ICs3NSwxNSBAQCB2b2lk
IFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlCiAgICAgTlNNdXRhYmxlVVJMUmVx
dWVzdCogbnNSZXF1ZXN0ID0gW21fbnNSZXF1ZXN0LmdldCgpIG11dGFibGVDb3B5XTsKIAogICAg
IGlmIChuc1JlcXVlc3QpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0VVJMOnVybCgpLmdldE5TVVJM
KCldOworICAgICAgICBbbnNSZXF1ZXN0IHNldFVSTDp1cmwoKV07CiAgICAgZWxzZQotICAgICAg
ICBuc1JlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOnVy
bCgpLmdldE5TVVJMKCldOworICAgICAgICBuc1JlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJlcXVl
c3QgYWxsb2NdIGluaXRXaXRoVVJMOnVybCgpXTsKICAgICAKICAgICB3a1N1cHBvcnRzTXVsdGlw
YXJ0WE1peGVkUmVwbGFjZShuc1JlcXVlc3QpOwogCiAgICAgW25zUmVxdWVzdCBzZXRDYWNoZVBv
bGljeTooTlNVUkxSZXF1ZXN0Q2FjaGVQb2xpY3kpY2FjaGVQb2xpY3koKV07CiAgICAgW25zUmVx
dWVzdCBzZXRUaW1lb3V0SW50ZXJ2YWw6dGltZW91dEludGVydmFsKCldOwotICAgIFtuc1JlcXVl
c3Qgc2V0TWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCgpLmdldE5TVVJMKCldOworICAg
IFtuc1JlcXVlc3Qgc2V0TWFpbkRvY3VtZW50VVJMOm1haW5Eb2N1bWVudFVSTCgpXTsKICAgICBp
ZiAoIWh0dHBNZXRob2QoKS5pc0VtcHR5KCkpCiAgICAgICAgIFtuc1JlcXVlc3Qgc2V0SFRUUE1l
dGhvZDpodHRwTWV0aG9kKCldOwogICAgIFtuc1JlcXVlc3Qgc2V0SFRUUFNob3VsZEhhbmRsZUNv
b2tpZXM6YWxsb3dIVFRQQ29va2llcygpXTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW0JKHJldmlzaW9uIDMwMjMxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVz
cG9uc2U6Om5zVVJMUmUKICAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IC0xOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBzdGF0aWNf
Y2FzdDxOU0ludGVnZXI+KG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgY29uc3Rf
Y2FzdDxSZXNvdXJjZVJlc3BvbnNlKj4odGhpcyktPm1fbnNSZXNwb25zZS5hZG9wdE5TKFtbTlNV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6bV91cmwuZ2V0TlNVUkwoKSBNSU1FVHlwZTpt
X21pbWVUeXBlIGV4cGVjdGVkQ29udGVudExlbmd0aDpleHBlY3RlZENvbnRlbnRMZW5ndGggdGV4
dEVuY29kaW5nTmFtZTptX3RleHRFbmNvZGluZ05hbWVdKTsKKyAgICAgICAgY29uc3RfY2FzdDxS
ZXNvdXJjZVJlc3BvbnNlKj4odGhpcyktPm1fbnNSZXNwb25zZS5hZG9wdE5TKFtbTlNVUkxSZXNw
b25zZSBhbGxvY10gaW5pdFdpdGhVUkw6bV91cmwgTUlNRVR5cGU6bV9taW1lVHlwZSBleHBlY3Rl
ZENvbnRlbnRMZW5ndGg6ZXhwZWN0ZWRDb250ZW50TGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bV90
ZXh0RW5jb2RpbmdOYW1lXSk7CiAgICAgfQogICAgIHJldHVybiBtX25zUmVzcG9uc2UuZ2V0KCk7
CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkocmV2aXNpb24gMzAyMzEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgQ2xpcGJvYXJkUXQ6OndyaXRlVVJMKGNvbnN0IEtVUkwm
IHUKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIAogICAgIFFMaXN0PFFVcmw+IHVybHM7Ci0gICAg
dXJscy5hcHBlbmQoUVVybChmcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsLmRlcHJl
Y2F0ZWRTdHJpbmcoKSkpKTsKKyAgICB1cmxzLmFwcGVuZChmcmFtZS0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsLnN0cmluZygpKSk7CiAgICAgaWYgKCFtX3dyaXRhYmxlRGF0YSkKICAgICAg
ICAgbV93cml0YWJsZURhdGEgPSBuZXcgUU1pbWVEYXRhOwogICAgIG1fd3JpdGFibGVEYXRhLT5z
ZXRVcmxzKHVybHMpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQ1N0cmluZy5oCShyZXZpc2lvbiAzMDIz
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDU3RyaW5nQnVmZmVy
KHVuc2lnbmVkIGxlbmd0aCkgOiBSZWZDb3VudGVkPENTdHJpbmdCdWZmZXI+KDApLCBtX3ZlY3Rv
cihsZW5ndGgpIHsgfQogCiAgICAgICAgIGNoYXIqIGRhdGEoKSB7IHJldHVybiBtX3ZlY3Rvci5k
YXRhKCk7IH0KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0
b3Iuc2l6ZSgpOyB9CisgICAgICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3Zl
Y3Rvci5zaXplKCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxjaGFyPiBtX3Zl
Y3RvcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lv
biAzMDIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzIsOCArMTMyLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMg
U3RyaW5nIGZvcm1hdChjb25zdCBjaGFyICosIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwg
Mik7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwg
Ym9vbCBhbGxvd0VtcHR5RW50cmllcyA9IGZhbHNlKSBjb25zdDsKLSAgICBWZWN0b3I8U3RyaW5n
PiBzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBmYWxzZSkg
Y29uc3Q7CisgICAgdm9pZCBzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwgVmVjdG9yPFN0
cmluZz4mIHJlc3VsdCkgY29uc3Q7CisgICAgdm9pZCBzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFy
YXRvciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcywgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29u
c3Q7CisgICAgdm9pZCBzcGxpdChVQ2hhciBzZXBhcmF0b3IsIFZlY3RvcjxTdHJpbmc+JiByZXN1
bHQpIGNvbnN0OworICAgIHZvaWQgc3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1w
dHlFbnRyaWVzLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdDsKIAogICAgIGludCB0b0lu
dChib29sKiBvayA9IDApIGNvbnN0OwogICAgIGludDY0X3QgdG9JbnQ2NChib29sKiBvayA9IDAp
IGNvbnN0OwpAQCAtMjI5LDYgKzIzMSwxMCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IERlcHJlY2F0ZWRTCiAKIGlubGluZSBib29sIG9wZXJhdG9yIShjb25zdCBTdHJpbmcmIHN0cikg
eyByZXR1cm4gc3RyLmlzTnVsbCgpOyB9CiAKK2Jvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNv
bnN0IFVDaGFyKiwgc2l6ZV90KTsKKwordm9pZCBhcHBlbmQoVmVjdG9yPFVDaGFyPiYsIGNvbnN0
IFN0cmluZyYpOworCiAjaWZkZWYgX19PQkpDX18KIC8vIFRoaXMgaXMgZm9yIHNpdHVhdGlvbnMg
aW4gV2ViS2l0IHdoZXJlIHRoZSBsb25nIHN0YW5kaW5nIGJlaGF2aW9yIGhhcyBiZWVuCiAvLyAi
bmlsIGlmIGVtcHR5Iiwgc28gd2UgdHJ5IHRvIG1haW50YWluIGxvbmdzdGFuZGluZyBiZWhhdmlv
ciBmb3IgdGhlIHNha2Ugb2YKQEAgLTIzNiw2ICsyNDIsMTkgQEAgaW5saW5lIGJvb2wgb3BlcmF0
b3IhKGNvbnN0IFN0cmluZyYgc3RyKQogaW5saW5lIE5TU3RyaW5nKiBuc1N0cmluZ05pbElmRW1w
dHkoY29uc3QgU3RyaW5nJiBzdHIpIHsgIHJldHVybiBzdHIuaXNFbXB0eSgpID8gbmlsIDogKE5T
U3RyaW5nKilzdHI7IH0KICNlbmRpZgogCitpbmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVND
SUkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit7CisgICAgVUNoYXIg
b3JlZCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAg
ICAgb3JlZCB8PSBjaGFyYWN0ZXJzW2ldOworICAgIHJldHVybiAhKG9yZWQgJiAweEZGODApOwor
fQorCitpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPFVDaGFyPiYgdmVjdG9yLCBjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICB2ZWN0b3IuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0
cmluZy5sZW5ndGgoKSk7Cit9CisKIH0KIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDEwICs0NzIsMTAgQEAgTGVuZ3Ro
KiBTdHJpbmc6OnRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pIAogICAgIHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPnRvTGVuZ3RoQXJyYXkobGVuKSA6IDA7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFN0cmlu
Zzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMp
IGNvbnN0Cit2b2lkIFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wg
YWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIAorICAgIHJlc3VsdC5jbGVhcigpOworCiAgICAg
aW50IHN0YXJ0UG9zID0gMDsKICAgICBpbnQgZW5kUG9zOwogICAgIHdoaWxlICgoZW5kUG9zID0g
ZmluZChzZXBhcmF0b3IsIHN0YXJ0UG9zKSkgIT0gLTEpIHsKQEAgLTQ4MywxNyArNDgzLDMzIEBA
IFZlY3RvcjxTdHJpbmc+IFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW4KICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykpOwogICAg
ICAgICBzdGFydFBvcyA9IGVuZFBvcyArIHNlcGFyYXRvci5sZW5ndGgoKTsKICAgICB9Ci0gICAg
aWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IChpbnQpbGVuZ3RoKCkpCisgICAg
aWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IHN0YXRpY19jYXN0PGludD4obGVu
Z3RoKCkpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcykpOworfQor
Cit2b2lkIFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIFZlY3RvcjxTdHJp
bmc+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNwbGl0KHNlcGFyYXRvciwgZmFsc2Us
IHJlc3VsdCk7Cit9CisKK3ZvaWQgU3RyaW5nOjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wg
YWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Cit7CisgICAg
cmVzdWx0LmNsZWFyKCk7CisKKyAgICBpbnQgc3RhcnRQb3MgPSAwOworICAgIGludCBlbmRQb3M7
CisgICAgd2hpbGUgKChlbmRQb3MgPSBmaW5kKHNlcGFyYXRvciwgc3RhcnRQb3MpKSAhPSAtMSkg
eworICAgICAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9zKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0
YXJ0UG9zKSk7CisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisgICAgaWYg
KGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IHN0YXRpY19jYXN0PGludD4obGVuZ3Ro
KCkpKQogICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcykpOwotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFN0cmluZzo6c3BsaXQoVUNo
YXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVzKSBjb25zdAordm9pZCBTdHJpbmc6
OnNwbGl0KFVDaGFyIHNlcGFyYXRvciwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIHsK
LSAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7Ci0gIAotICAgIHJldHVybiBzcGxpdChTdHJpbmco
JnNlcGFyYXRvciwgMSksIGFsbG93RW1wdHlFbnRyaWVzKTsKKyAgICByZXR1cm4gc3BsaXQoU3Ry
aW5nKCZzZXBhcmF0b3IsIDEpLCBmYWxzZSwgcmVzdWx0KTsKIH0KIAogI2lmbmRlZiBOREVCVUcK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vd2luL0JTdHJpbmcuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vd2luL0JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiRGVw
cmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgPHRjaGFyLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgpAQCAtNjcs
NiArNjgsMTQgQEAgQlN0cmluZzo6QlN0cmluZyhjb25zdCBTdHJpbmcmIHMpCiAgICAgICAgIG1f
YnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVuKHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgpKTsKIH0K
IAorQlN0cmluZzo6QlN0cmluZyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc051
bGwoKSkKKyAgICAgICAgbV9ic3RyID0gMDsKKyAgICBlbHNlCisgICAgICAgIG1fYnN0ciA9IFN5
c0FsbG9jU3RyaW5nTGVuKHVybC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIHVybC5zdHJpbmcoKS5s
ZW5ndGgoKSk7Cit9CisKIEJTdHJpbmc6OkJTdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYg
cykKIHsKICAgICBpZiAocy5pc051bGwoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0JT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9CU3RyaW5nLmgJKHJl
dmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQlN0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAgY2xhc3MgRGVwcmVjYXRlZFN0cmluZzsKKyAg
ICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFN0cmluZzsKIAogICAgIGNsYXNzIEJTdHJpbmcgewpA
QCAtNDYsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEJTdHJpbmcoY29u
c3QgU3RyaW5nJik7CiAgICAgICAgIEJTdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwog
ICAgICAgICBCU3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgICAgICBCU3RyaW5nKGNv
bnN0IEtVUkwmKTsKICNpZiBQTEFURk9STShDRikKICAgICAgICAgQlN0cmluZyhDRlN0cmluZ1Jl
Zik7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGll
c1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkVXRp
bGl0aWVzV2luLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCwx
MCBAQCBEZXByZWNhdGVkQ1N0cmluZyBtYXJrdXBUb0NGX0hUTUwoY29uc3QgCiAgICAgdW5zaWdu
ZWQgZW5kSFRNTE9mZnNldCA9IGVuZEZyYWdtZW50T2Zmc2V0ICsgZW5kTWFya3VwLmxlbmd0aCgp
OwogCiAgICAgLy8gZmlsbCBpbiBuZWVkZWQgZGF0YQotICAgIHN0YXJ0SFRNTC5hcHBlbmQoU3Ry
aW5nOjpmb3JtYXQoIiUwMTB1Iiwgc3RhcnRIVE1MT2Zmc2V0KS5kZXByZWNhdGVkU3RyaW5nKCku
dXRmOCgpKTsKLSAgICBlbmRIVE1MLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiJTAxMHUiLCBlbmRI
VE1MT2Zmc2V0KS5kZXByZWNhdGVkU3RyaW5nKCkudXRmOCgpKTsKLSAgICBzdGFydEZyYWdtZW50
LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiJTAxMHUiLCBzdGFydEZyYWdtZW50T2Zmc2V0KS5kZXBy
ZWNhdGVkU3RyaW5nKCkudXRmOCgpKTsKLSAgICBlbmRGcmFnbWVudC5hcHBlbmQoU3RyaW5nOjpm
b3JtYXQoIiUwMTB1IiwgZW5kRnJhZ21lbnRPZmZzZXQpLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4
KCkpOworICAgIHN0YXJ0SFRNTC5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIiUwMTB1Iiwgc3RhcnRI
VE1MT2Zmc2V0KS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbmRIVE1MLmFwcGVuZChTdHJpbmc6OmZv
cm1hdCgiJTAxMHUiLCBlbmRIVE1MT2Zmc2V0KS51dGY4KCkuZGF0YSgpKTsKKyAgICBzdGFydEZy
YWdtZW50LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiJTAxMHUiLCBzdGFydEZyYWdtZW50T2Zmc2V0
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbmRGcmFnbWVudC5hcHBlbmQoU3RyaW5nOjpmb3JtYXQo
IiUwMTB1IiwgZW5kRnJhZ21lbnRPZmZzZXQpLnV0ZjgoKS5kYXRhKCkpOwogICAgIHN0YXJ0TWFy
a3VwLmFwcGVuZChtYXJrdXBVVEY4LmRhdGEoKSk7CiAKICAgICAvLyBjcmVhdGUgZnVsbCBjZl9o
dG1sIHN0cmluZyBmcm9tIHRoZSBmcmFnbWVudHMKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2lu
L0NsaXBib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkV2luLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmgiCiAjaW5jbHVkZSAiY3NzaGVscGVyLmgiCiAjaW5j
bHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgi
CkBAIC0xNDAsNyArMTM5LDcgQEAgc3RhdGljIFN0cmluZyBmaWxlc3lzdGVtUGF0aEZyb21VcmxP
clRpdAogICAgICAgICAgICAgLy8gVGhlIGZpbGVuYW1lIGZvciBhbnkgY29udGVudCBiYXNlZCBk
cmFnIHNob3VsZCBiZSB0aGUgbGFzdCBlbGVtZW50IG9mIAogICAgICAgICAgICAgLy8gdGhlIHBh
dGguICBJZiB3ZSBjYW4ndCBmaW5kIGl0LCBvciB3ZSdyZSBjb21pbmcgdXAgd2l0aCB0aGUgbmFt
ZSBmb3IgYSBsaW5rCiAgICAgICAgICAgICAvLyB3ZSBqdXN0IHVzZSB0aGUgZW50aXJlIHVybC4K
LSAgICAgICAgICAgIEtVUkwga3VybCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAg
ICAgIEtVUkwga3VybCh1cmwpOwogICAgICAgICAgICAgU3RyaW5nIGxhc3RDb21wb25lbnQ7CiAg
ICAgICAgICAgICBpZiAoIWlzTGluayAmJiAhKGxhc3RDb21wb25lbnQgPSBrdXJsLmxhc3RQYXRo
Q29tcG9uZW50KCkpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGxlbiA9IG1pbjxEV09S
RD4oTUFYX1BBVEgsIGxhc3RDb21wb25lbnQubGVuZ3RoKCkpOwpAQCAtMjI2LDExICsyMjUsMTAg
QEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSERyb3BDb250ZW50KAogICAgIFdDSEFSIGZp
bGVQYXRoW01BWF9QQVRIXTsKIAogICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkgewotICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIHBhdGggPSB1cmwucGF0aCgpOworICAgICAgICBTdHJpbmcgbG9j
YWxQYXRoID0gdXJsLnBhdGgoKTsKICAgICAgICAgLy8gd2luZG93cyBkb2VzIG5vdCBlbmpveSBh
IGxlYWRpbmcgc2xhc2ggb24gcGF0aHMKLSAgICAgICAgaWYgKHBhdGhbMF0gPT0gJy8nKQotICAg
ICAgICAgICAgcGF0aCA9IHBhdGgubWlkKDEpOwotICAgICAgICBTdHJpbmcgbG9jYWxQYXRoID0g
cGF0aC5hc2NpaSgpOworICAgICAgICBpZiAobG9jYWxQYXRoWzBdID09ICcvJykKKyAgICAgICAg
ICAgIGxvY2FsUGF0aCA9IGxvY2FsUGF0aC5zdWJzdHJpbmcoMSk7CiAgICAgICAgIExQQ1RTVFIg
bG9jYWxQYXRoU3RyID0gbG9jYWxQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7
CiAgICAgICAgIGlmICh3Y3NsZW4obG9jYWxQYXRoU3RyKSArIDEgPCBNQVhfUEFUSCkKICAgICAg
ICAgICAgIHdjc2NweV9zKGZpbGVQYXRoLCBNQVhfUEFUSCwgbG9jYWxQYXRoU3RyKTsKQEAgLTUw
Myw3ICs1MDEsNyBAQCBTdHJpbmcgQ2xpcGJvYXJkV2luOjpnZXREYXRhKGNvbnN0IFN0cmluCiAg
ICAgcmV0dXJuICIiOwogfQogCi1ib29sIENsaXBib2FyZFdpbjo6c2V0RGF0YShjb25zdCBTdHJp
bmcgJnR5cGUsIGNvbnN0IFN0cmluZyAmZGF0YSkKK2Jvb2wgQ2xpcGJvYXJkV2luOjpzZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogewogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQgPHJkYXI6
Ly9wcm9ibGVtLzUwMTU5NDE+CiAgICAgQVNTRVJUKGlzRm9yRHJhZ2dpbmcoKSk7CkBAIC01MTMs
NyArNTExLDcgQEAgYm9vbCBDbGlwYm9hcmRXaW46OnNldERhdGEoY29uc3QgU3RyaW5nIAogICAg
IENsaXBib2FyZERhdGFUeXBlIHdpblR5cGUgPSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKHR5
cGUpOwogCiAgICAgaWYgKHdpblR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpCi0gICAgICAg
IHJldHVybiBXZWJDb3JlOjp3cml0ZVVSTChtX3dyaXRhYmxlRGF0YU9iamVjdC5nZXQoKSwgZGF0
YS5kZXByZWNhdGVkU3RyaW5nKCksIFN0cmluZygpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjp3cml0ZVVSTChtX3dyaXRhYmxlRGF0YU9iamVjdC5nZXQoKSwgS1VSTChk
YXRhKSwgU3RyaW5nKCksIGZhbHNlLCB0cnVlKTsKIAogICAgIGlmICh3aW5UeXBlID09IENsaXBi
b2FyZERhdGFUeXBlVGV4dCkgewogICAgICAgICBTVEdNRURJVU0gbWVkaXVtID0gezB9OwpAQCAt
NzE5LDcgKzcxNyw4IEBAIHZvaWQgQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWwK
ICAgICBtZWRpdW0udHltZWQgPSBUWU1FRF9IR0xPQkFMOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogCi0gICAgbWVkaXVtLmhHbG9iYWwgPSBjcmVhdGVHbG9iYWxEYXRhKG1hcmt1cFRvQ0Zf
SFRNTChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+dXJsKCkp
KTsKKyAgICBtZWRpdW0uaEdsb2JhbCA9IGNyZWF0ZUdsb2JhbERhdGEobWFya3VwVG9DRl9IVE1M
KGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKSwK
KyAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT51
cmwoKS5zdHJpbmcoKSkpOwogICAgIGlmIChtZWRpdW0uaEdsb2JhbCAmJiBGQUlMRUQobV93cml0
YWJsZURhdGFPYmplY3QtPlNldERhdGEoaHRtbEZvcm1hdCgpLCAmbWVkaXVtLCBUUlVFKSkpCiAg
ICAgICAgIDo6R2xvYmFsRnJlZShtZWRpdW0uaEdsb2JhbCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDggQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogcwogICAgIC8vIFB1
dCBDRl9IVE1MIGZvcm1hdCBvbiB0aGUgcGFzdGVib2FyZCAKICAgICBpZiAoOjpPcGVuQ2xpcGJv
YXJkKG1fb3duZXIpKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBI
R0xPQkFMIGNiRGF0YSA9IGNyZWF0ZUdsb2JhbERhdGEobWFya3VwVG9DRl9IVE1MKGNyZWF0ZU1h
cmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKSwgc2VsZWN0ZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT51cmwoKSkpOworICAgICAgICBI
R0xPQkFMIGNiRGF0YSA9IGNyZWF0ZUdsb2JhbERhdGEobWFya3VwVG9DRl9IVE1MKGNyZWF0ZU1h
cmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKSwKKyAgICAgICAg
ICAgIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+dXJsKCku
c3RyaW5nKCkpKTsKICAgICAgICAgaWYgKCE6OlNldENsaXBib2FyZERhdGEoSFRNTENsaXBib2Fy
ZEZvcm1hdCwgY2JEYXRhKSkKICAgICAgICAgICAgIDo6R2xvYmFsRnJlZShjYkRhdGEpOwogICAg
ICAgICA6OkNsb3NlQ2xpcGJvYXJkKCk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3Ry
ZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAko
cmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsMTAgQEAgdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0
U3RyZWFtKCkKIAogICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gpIGV4cGVjdCB0aGF0IGphdmFz
Y3JpcHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0aGlzIGlzIHRoZQogICAgIC8v
IGZvcm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgotICAgIGlmIChyZXNwb25zZVVS
TC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKLSAgICAgICAgbV9z
dHJlYW0udXJsID0gc3RyZHVwKHJlc3BvbnNlVVJMLmRlY29kZV9zdHJpbmcocmVzcG9uc2VVUkwu
ZGVwcmVjYXRlZFN0cmluZygpKS51dGY4KCkpOworICAgIGlmIChyZXNwb25zZVVSTC5wcm90b2Nv
bElzKCJqYXZhc2NyaXB0IikpCisgICAgICAgIG1fc3RyZWFtLnVybCA9IHN0cmR1cChkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5nKCkpLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbV9zdHJlYW0udXJsID0gc3RyZHVwKHJlc3BvbnNlVVJMLmRlcHJl
Y2F0ZWRTdHJpbmcoKS51dGY4KCkpOworICAgICAgICBtX3N0cmVhbS51cmwgPSBzdHJkdXAocmVz
cG9uc2VVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgCiAgICAgQ1N0cmluZyBtaW1l
VHlwZVN0ciA9IG1fcmVzb3VyY2VSZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKICAgICAKQEAg
LTI2Nyw3ICsyNjcsNyBAQCB2b2lkIFBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSgpCiAgICAg
ICAgICAgICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBpdCB0byAwCiAgICAgICAgICAgICBtX3N0
cmVhbS51cmwgPSAwOwogICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luRnVuY3MtPnVybG5vdGlm
eShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCku
dXRmOCgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKyAgICAgICAgbV9wbHVnaW5GdW5jcy0+
dXJsbm90aWZ5KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOwogICAgIH0KIAogICAgIG1fc3Ry
ZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZp
ZXdXaW4uY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
Vmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwxMSArMjA4LDExIEBAIHByaXZhdGU6
CiAKIHN0YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwm
IHVybCkKIHsKLSAgICBpZiAoIXVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIs
IGZhbHNlKSkKKyAgICBpZiAoIXVybC5wcm90b2NvbElzKCJqYXZhc2NyaXB0IikpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAogICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3Ry
aW5nCi0gICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJpbmco
KS5taWQoMTEpKTsKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJp
bmcoKS5zdWJzdHJpbmcoMTEpKTsKIH0KIAogUGx1Z2luVmlldyogUGx1Z2luVmlldzo6c19jdXJy
ZW50UGx1Z2luVmlldyA9IDA7CkBAIC04NzgsNyArODc4LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
ZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3Rp
ZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOwogICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2luc3Rh
bmNlLCByZXF1ZXN0VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIE5QUkVTX0RPTkUsIHJl
cXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CiAgICAgICAgICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTE1NjQsNyArMTU2NCw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZy
YW0KICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2UpCiAg
ICAgLCBtX3VybCh1cmwpCi0gICAgLCBtX2Jhc2VVUkwobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkt
PmNvbXBsZXRlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSkpCisgICAg
LCBtX2Jhc2VVUkwobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKS5zdHJpbmcoKSkpCiAgICAgLCBtX3N0YXR1cyhQ
bHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgLCBtX3JlcXVlc3RUaW1lcih0aGlz
LCAmUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQpCiAgICAgLCBtX2ludmFsaWRhdGVUaW1l
cih0aGlzLCAmUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQpCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSFRNTCByZW5kZXJpbmcgZW5naW5lIGZvciBL
REUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywxOSArMjEsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAKLSNpbmNsdWRlICJDU1NIZWxwZXIuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiS1VSTC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2Uu
aCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMjQxLDcgKzIzNCw3IEBAIEtVUkwgSGl0VGVz
dFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCgpIGMKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBL
VVJMKCk7CiAgICAgCi0gICAgcmV0dXJuIEtVUkwobV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKHVybFN0cmluZykuZGVwcmVjYXRlZFN0cmluZygp
KSk7CisgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpLT5jb21wbGV0
ZVVSTChwYXJzZVVSTCh1cmxTdHJpbmcpKTsKIH0KIAogS1VSTCBIaXRUZXN0UmVzdWx0OjphYnNv
bHV0ZUxpbmtVUkwoKSBjb25zdApAQCAtMjU5LDcgKzI1Miw3IEBAIEtVUkwgSGl0VGVzdFJlc3Vs
dDo6YWJzb2x1dGVMaW5rVVJMKCkgY28KICAgICBlbHNlCiAgICAgICAgIHJldHVybiBLVVJMKCk7
CiAKLSAgICByZXR1cm4gS1VSTChtX2lubmVyVVJMRWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwocGFyc2VVUkwodXJsU3RyaW5nKS5kZXByZWNhdGVkU3RyaW5nKCkpKTsKKyAgICByZXR1
cm4gbV9pbm5lclVSTEVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKHVy
bFN0cmluZykpOwogfQogCiBib29sIEhpdFRlc3RSZXN1bHQ6OmlzTGl2ZUxpbmsoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gMzAyMzEpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyOSw3ICszMjksNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlPdXRBeGlzKEdyaWRBeGlz
CiAgICAgfQogICAgIAogICAgIC8vIElmIHdlIHN0aWxsIGhhdmUgc29tZSBsZWZ0IG92ZXIgc3Bh
Y2Ugd2UgcHJvYmFibHkgZW5kZWQgdXAgd2l0aCBhIHJlbWFpbmRlciBvZgotICAgIC8vIGEgZGl2
aXNpb24uIFdlIGNhbiBub3Qgc3ByZWFkIGl0IGV2ZW5seSBhbnltb3JlLiBJZiB3ZSBoYXZlIGFu
eSBwZXJjZW50YWdlIAorICAgIC8vIGEgZGl2aXNpb24uIFdlIGNhbm5vdCBzcHJlYWQgaXQgZXZl
bmx5IGFueW1vcmUuIElmIHdlIGhhdmUgYW55IHBlcmNlbnRhZ2UgCiAgICAgLy8gY29sdW1ucy9y
b3dzIHNpbXBseSBzcHJlYWQgdGhlIHJlbWFpbmRlciBlcXVhbGx5IG92ZXIgYWxsIGF2YWlsYWJs
ZSBwZXJjZW50YWdlIGNvbHVtbnMsIAogICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgc2l6ZS4K
ICAgICBpZiAocmVtYWluaW5nTGVuICYmIGNvdW50UGVyY2VudCkgewpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsMTAgQEAKLS8qKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
Ky8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwNiBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20p
CiAgKiAgICAgICAgICAgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIy
NSw3ICsyMjMsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdGV4dCA9IG1fYWx0VGV4dC5kZXByZWNh
dGVkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBtX2FsdFRleHQ7CiAg
ICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1i
b2woKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Rm9udChzdHlsZSgpLT5mb250KCkp
OwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT5jb2xvcigp
KTsKQEAgLTIzNiw3ICsyMzQsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBh
aW50SW5mCiAKICAgICAgICAgICAgICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0ZXh0IGlmIGl0
J2xsIGZpdCB3aXRoaW4gdGhlIGNvbnRlbnQgYm94LAogICAgICAgICAgICAgICAgIC8vIGFuZCBv
bmx5IGlmIGl0IGZpdHMgYWJvdmUgdGhlIGVycm9yIGltYWdlLgotICAgICAgICAgICAgICAgIFRl
eHRSdW4gdGV4dFJ1bihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odGV4dC51bmljb2Rl
KCkpLCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4odGV4
dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgIGludCB0ZXh0
V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBp
Y3R1cmVEcmF3bikgewogICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4
dFdpZHRoICYmIGZvbnQuaGVpZ2h0KCkgPD0gaW1hZ2VZKQpAQCAtMjY3LDcgKzI2NSw3IEBAIGlu
dCBSZW5kZXJJbWFnZTo6bWluaW11bVJlcGxhY2VkSGVpZ2h0KCkKIEhUTUxNYXBFbGVtZW50KiBS
ZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKQogewogICAgIEhUTUxJbWFnZUVsZW1lbnQqIGkgPSBlbGVt
ZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKGltZ1RhZykgPyBzdGF0aWNfY2FzdDxIVE1M
SW1hZ2VFbGVtZW50Kj4oZWxlbWVudCgpKSA6IDA7Ci0gICAgcmV0dXJuIGkgPyBpLT5kb2N1bWVu
dCgpLT5nZXRJbWFnZU1hcChpLT5pbWFnZU1hcCgpKSA6IDA7CisgICAgcmV0dXJuIGkgPyBpLT5k
b2N1bWVudCgpLT5nZXRJbWFnZU1hcChpLT51c2VNYXAoKSkgOiAwOwogfQogCiBib29sIFJlbmRl
ckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NjgsMjQgKzE2NjgsMTcgQEAgSW50UmVjdCBSZW5kZXJPYmpl
Y3Q6OnBhaW50aW5nUm9vdFJlY3QoSQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVu
ZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
LCBJbnRSZWN0IHJlY3QpCit2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CisgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQoKTsK
LSAgICBpZiAobm9kZSkgewotICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KSB7Ci0gICAgICAg
ICAgICBpZiAocmVjdC53aWR0aCgpID4gMCAmJiByZWN0LmhlaWdodCgpID4gMCkgewotICAgICAg
ICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGhyZWY7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmlzTGluaygpKQotICAgICAgICAgICAgICAgICAgICBocmVmID0gZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGhyZWZBdHRyKTsKLQotICAgICAgICAgICAgICAgIGlmICghaHJlZi5pc051bGwoKSkg
ewotICAgICAgICAgICAgICAgICAgICBLVVJMIGxpbmsgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChocmVmLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0VVJMRm9yUmVjdChsaW5rLCByZWN0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFub2RlIHx8
ICFub2RlLT5pc0xpbmsoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1
cm47CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBocmVmID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgIGlmIChocmVmLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm47CisgICAgY29udGV4dC0+c2V0VVJMRm9yUmVjdChub2RlLT5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChocmVmKSwgcmVjdCk7CiB9CiAKIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMp
IDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDQgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTQ4OCw3ICs0ODgsNyBAQCBwdWJsaWM6CiAgICAgLyogVGhpcyBmdW5jdGlvbiBwZXJmb3Jt
cyBhIGxheW91dCBvbmx5IGlmIG9uZSBpcyBuZWVkZWQuICovCiAgICAgdm9pZCBsYXlvdXRJZk5l
ZWRlZCgpIHsgaWYgKG5lZWRzTGF5b3V0KCkpIGxheW91dCgpOyB9CiAKLSAgICAvLyB1c2VkIGZv
ciBlbGVtZW50IHN0YXRlIHVwZGF0ZXMgdGhhdCBjYW4gbm90IGJlIGZpeGVkIHdpdGggYQorICAg
IC8vIHVzZWQgZm9yIGVsZW1lbnQgc3RhdGUgdXBkYXRlcyB0aGF0IGNhbm5vdCBiZSBmaXhlZCB3
aXRoIGEKICAgICAvLyByZXBhaW50IGFuZCBkbyBub3QgbmVlZCBhIHJlbGF5b3V0CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCkgeyB9CiAKQEAgLTY3MSw3ICs2NzEsNyBAQCBw
dWJsaWM6CiAgICAgLy8gdGhlIHJlY3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmpl
Y3QgaXMgcGFzc2VkIGFzIHRoZSBwYWludGluZ1Jvb3QKICAgICBJbnRSZWN0IHBhaW50aW5nUm9v
dFJlY3QoSW50UmVjdCYgdG9wTGV2ZWxSZWN0KTsKIAotICAgIHZvaWQgYWRkUERGVVJMUmVjdChH
cmFwaGljc0NvbnRleHQqLCBJbnRSZWN0KTsKKyAgICB2b2lkIGFkZFBERlVSTFJlY3QoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTAgKzEsOCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3Qu
Ci0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3Jn
PgogICogICAgICAgICAgIChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpICgxU3RlaW5AZ214LmRl
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxMSArMjAsMTAgQEAK
ICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgogCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAg
LTM3LDEwICszNCw4IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9i
amVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCi0jaW5jbHVkZSAi
S1VSTC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNjEsMjEgKzU2LDE3IEBAIFJlbmRlclBhcnRPYmplY3Q6On5SZW5kZXJQ
YXJ0T2JqZWN0KCkKICAgICAgICAgbV92aWV3LT5yZW1vdmVXaWRnZXRUb1VwZGF0ZSh0aGlzKTsK
IH0KIAotc3RhdGljIGJvb2wgaXNVUkxBbGxvd2VkKERvY3VtZW50ICpkb2MsIGNvbnN0IFN0cmlu
ZyAmdXJsKQorc3RhdGljIGJvb2wgaXNVUkxBbGxvd2VkKERvY3VtZW50KiBkb2MsIGNvbnN0IFN0
cmluZyYgdXJsKQogewotICAgIEtVUkwgbmV3VVJMKGRvYy0+Y29tcGxldGVVUkwodXJsLmRlcHJl
Y2F0ZWRTdHJpbmcoKSkpOwotICAgIG5ld1VSTC5zZXRSZWYoRGVwcmVjYXRlZFN0cmluZzo6bnVs
bCk7Ci0gICAgCiAgICAgaWYgKGRvYy0+ZnJhbWUoKS0+cGFnZSgpLT5mcmFtZUNvdW50KCkgPj0g
MjAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXZSBhbGxvdyBvbmUgbGV2ZWwg
b2Ygc2VsZi1yZWZlcmVuY2UgYmVjYXVzZSBzb21lIHNpdGVzIGRlcGVuZCBvbiB0aGF0LgogICAg
IC8vIEJ1dCB3ZSBkb24ndCBhbGxvdyBtb3JlIHRoYW4gb25lLgorICAgIEtVUkwgY29tcGxldGVV
UkwgPSBkb2MtPmNvbXBsZXRlVVJMKHVybCk7CiAgICAgYm9vbCBmb3VuZFNlbGZSZWZlcmVuY2Ug
PSBmYWxzZTsKLSAgICBmb3IgKEZyYW1lICpmcmFtZSA9IGRvYy0+ZnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKLSAgICAgICAgS1VSTCBmcmFtZVVSTCA9
IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0gICAgICAgIGZyYW1lVVJMLnNldFJlZihEZXByZWNh
dGVkU3RyaW5nOjpudWxsKTsKLSAgICAgICAgaWYgKGZyYW1lVVJMID09IG5ld1VSTCkgeworICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gZG9jLT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ1JlZihmcmFtZS0+
bG9hZGVyKCktPnVybCgpLCBjb21wbGV0ZVVSTCkpIHsKICAgICAgICAgICAgIGlmIChmb3VuZFNl
bGZSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
Zm91bmRTZWxmUmVmZXJlbmNlID0gdHJ1ZTsKQEAgLTEwMiwxMCArOTMsMTAgQEAgc3RhdGljIGlu
bGluZSB2b2lkIG1hcENsYXNzSWRUb1NlcnZpY2VUeQogICAgICAgICBzZXJ2aWNlVHlwZSA9ICJh
cHBsaWNhdGlvbi94LWRpcmVjdG9yIjsKICAgICBlbHNlIGlmIChjbGFzc0lkLmNvbnRhaW5zKCI2
QkY1MkE1Mi0zOTRBLTExZDMtQjE1My0wMEMwNEY3OUZBQTYiKSkKICAgICAgICAgc2VydmljZVR5
cGUgPSAiYXBwbGljYXRpb24veC1tcGxheWVyMiI7Ci0gICAgZWxzZSBpZiAoIWNsYXNzSWQuaXNF
bXB0eSgpKQotICAgICAgICAvLyBXZSBoYXZlIGEgY2xzaWQsIG1lYW5zIHRoaXMgaXMgYWN0aXZl
eCAoTmlrbykKKyAgICBlbHNlIGlmICghY2xhc3NJZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
V2UgaGF2ZSBhIGNsc2lkLCBtZWFucyB0aGlzIGlzIEFjdGl2ZSBYIChOaWtvKQogICAgICAgICBz
ZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94LWFjdGl2ZXgtaGFuZGxlciI7Ci0gICAgLy8gVE9E
TzogYWRkIG1vcmUgcGx1Z2lucyBoZXJlCisgICAgfQogfQogCiB2b2lkIFJlbmRlclBhcnRPYmpl
Y3Q6OnVwZGF0ZVdpZGdldChib29sIG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpCkBAIC0x
MzksOCArMTMwLDggQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAog
ICAgICAgSFRNTEVsZW1lbnQgKmVtYmVkT3JPYmplY3Q7CiAgICAgICBpZiAoZW1iZWQpIHsKICAg
ICAgICAgICBlbWJlZE9yT2JqZWN0ID0gKEhUTUxFbGVtZW50ICopZW1iZWQ7Ci0gICAgICAgICAg
dXJsID0gZW1iZWQtPnVybDsKLSAgICAgICAgICBzZXJ2aWNlVHlwZSA9IGVtYmVkLT5tX3NlcnZp
Y2VUeXBlOworICAgICAgICAgIHVybCA9IGVtYmVkLT51cmwoKTsKKyAgICAgICAgICBzZXJ2aWNl
VHlwZSA9IGVtYmVkLT5zZXJ2aWNlVHlwZSgpOwogICAgICAgfSBlbHNlCiAgICAgICAgICAgZW1i
ZWRPck9iamVjdCA9IChIVE1MRWxlbWVudCAqKW87CiAgICAgICAKQEAgLTIzMSw4ICsyMjIsOCBA
QCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sCiAgIH0gZWxzZSBpZiAo
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewogICAgICAgSFRNTEVtYmVkRWxlbWVu
dCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihlbGVtZW50KCkpOwogICAgICAg
by0+c2V0TmVlZFdpZGdldFVwZGF0ZShmYWxzZSk7Ci0gICAgICB1cmwgPSBvLT51cmw7Ci0gICAg
ICBzZXJ2aWNlVHlwZSA9IG8tPm1fc2VydmljZVR5cGU7CisgICAgICB1cmwgPSBvLT51cmwoKTsK
KyAgICAgIHNlcnZpY2VUeXBlID0gby0+c2VydmljZVR5cGUoKTsKIAogICAgICAgaWYgKHVybC5p
c0VtcHR5KCkgJiYgc2VydmljZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMTAg
QEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8g
RklYTUU6IE1vdmUgdG8gU3RyaW5nSW1wbC5oIGV2ZW50dWFsbHkuCiBzdGF0aWMgaW5saW5lIGJv
b2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKFN0cmluZ0ltcGwqIHRleHQpCiB7Ci0gICAgY29uc3Qg
VUNoYXIqIGNoYXJzID0gdGV4dC0+Y2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRleHQtPmxlbmd0aCgpOwotICAgIFVDaGFyIG9yZWQgPSAwOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgb3JlZCB8PSBjaGFyc1tpXTsKLSAgICBy
ZXR1cm4gIShvcmVkICYgMHhGRjgwKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJ
KHRleHQtPmNoYXJhY3RlcnMoKSwgdGV4dC0+bGVuZ3RoKCkpOwogfQogCiBSZW5kZXJUZXh0OjpS
ZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyKQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw0IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIFdlYktpdC4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiAgICAgICAgICAgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KQEAgLTEzOCw2ICsxMzYsNyBAQCB2b2lkIHJlbmRlclN1YnRy
ZWVUb0ltYWdlKEltYWdlQnVmZmVyKiBpCiAgICAgaWYgKHN2Z0NvbnRhaW5lciAmJiAhZHJhd3ND
b250ZW50cykKICAgICAgICAgc3ZnQ29udGFpbmVyLT5zZXREcmF3c0NvbnRlbnRzKHRydWUpOwog
CisgICAgaXRlbS0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICBpdGVtLT5wYWludChpbmZvLCAwLCAw
KTsKIAogICAgIGlmIChzdmdDb250YWluZXIgJiYgIWRyYXdzQ29udGVudHMpCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKFNWRykKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmcuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9z
dmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNSArNTEsMTUgQEAg
dm9pZCBTVkdJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIAogICAgIENhY2hl
ZEltYWdlICpuZXdJbWFnZSA9IDA7CiAgICAgaWYgKCFpbWFnZUVsZW1lbnQtPmhyZWYoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB1cmkgPSBpbWFnZUVsZW1lbnQtPmJh
c2VVUkkoKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIEtVUkwgdXJpID0gaW1hZ2VFbGVt
ZW50LT5iYXNlVVJJKCk7CiAgICAgICAgIGlmICghdXJpLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHVyaSA9IEtVUkwodXJpLCBpbWFnZUVsZW1lbnQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgIHVyaSA9IEtVUkwodXJpLCBpbWFnZUVs
ZW1lbnQtPmhyZWYoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVyaSA9IGltYWdlRWxl
bWVudC0+aHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgbmV3SW1hZ2UgPSBkb2Mt
PmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UodXJpKTsKKyAgICAgICAgICAgIHVyaSA9IEtVUkwo
aW1hZ2VFbGVtZW50LT5ocmVmKCkpOworICAgICAgICBuZXdJbWFnZSA9IGRvYy0+ZG9jTG9hZGVy
KCktPnJlcXVlc3RJbWFnZSh1cmkuc3RyaW5nKCkpOwogICAgIH0KIAotICAgIENhY2hlZEltYWdl
ICpvbGRJbWFnZSA9IGltYWdlKCk7CisgICAgQ2FjaGVkSW1hZ2UqIG9sZEltYWdlID0gaW1hZ2Uo
KTsKICAgICBpZiAobmV3SW1hZ2UgIT0gb2xkSW1hZ2UpIHsKICAgICAgICAgc2V0TG9hZGluZ0lt
YWdlKG5ld0ltYWdlKTsKICAgICAgICAgaWYgKG5ld0ltYWdlKQpJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdJbWFnZS5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVkUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCkBAIC0zOSw3ICs0MSw2IEBA
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRl
ICJTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIlNWR0ltYWdlLmgiCiAjaW5jbHVkZSAiU1ZHTGVu
Z3RoLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnQuaCIKQEAgLTEzOCw3ICsxMzksMTEgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGNvbgogICAgIGNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0
KSk7CiAgICAgY29udGV4dC0+dHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKS54KCksIGRzdFJl
Y3QubG9jYXRpb24oKS55KCkpOwogICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0
LndpZHRoKCkvc3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpL3NyY1JlY3QuaGVpZ2h0
KCkpKTsKKyAgICAKKyAgICBpZiAobV9mcmFtZS0+dmlldygpLT5uZWVkc0xheW91dCgpKQorICAg
ICAgICBtX2ZyYW1lLT52aWV3KCktPmxheW91dCgpOwogICAgIG1fZnJhbWUtPnBhaW50KGNvbnRl
eHQsIGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVjdCkpOworCiAgICAgY29udGV4dC0+cmVzdG9yZSgp
OwogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTE5Nyw3ICsyMDIsNyBAQCBib29sIFNW
R0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSCiAgICAgICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5jYW5jZWxDb250ZW50UG9saWN5Q2hlY2soKTsgLy8gY2FuY2VsIGFueSBwb2xpY3kgY2hl
Y2tzCiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7
CiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zZXRSZXNwb25zZU1JTUVUeXBlKCJpbWFnZS9z
dmcreG1sIik7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5iZWdpbigicGxhY2Vob2xkZXIu
c3ZnIik7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKKyAgICAgICAgbV9mcmFtZS0+bG9h
ZGVyKCktPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKICAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUo
KSk7CiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5lbmQoKTsKICAgICB9CkluZGV4OiBXZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykg
MjAwNS0yMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEp1bGllbiBDaGFmZnJhaXggPGp1bGllbi5jaGFmZnJhaXhAZ21haWwuY29t
PgogICoKQEAgLTIzLDMxICsyMiwyMCBAQAogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJET01J
bXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGb3JtRGF0YS5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJI
VE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNz
aW9uLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAia2pzX2JpbmRpbmcuaCIKLSNpbmNsdWRlIDxranMvcHJvdGVjdC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzMsNyArMTYxLDcgQEAg
RG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZVhNTAogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbV9yZXNwb25zZVhNTCA9IG1fZG9jLT5pbXBsZW1lbnRhdGlvbigpLT5j
cmVhdGVEb2N1bWVudCgwKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPm9wZW4oKTsKLSAg
ICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldFVSTChtX3VybC5kZXByZWNhdGVkU3RyaW5nKCkp
OworICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0VVJMKG1fdXJsKTsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBzZXQgTGFzdC1Nb2RpZmllZCBhbmQgY29va2llcyAoY3VycmVudGx5LCB0aG9z
ZSBhcmUgb25seSBhdmFpbGFibGUgZm9yIEhUTUxEb2N1bWVudHMpLgogICAgICAgICAgICAgbV9y
ZXNwb25zZVhNTC0+d3JpdGUoU3RyaW5nKG1fcmVzcG9uc2VUZXh0KSk7CiAgICAgICAgICAgICBt
X3Jlc3BvbnNlWE1MLT5maW5pc2hQYXJzaW5nKCk7CkBAIC0zMjIsNyArMzEwLDcgQEAgYm9vbCBY
TUxIdHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RAogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIC8vIGJ1dCBhIHJlbW90ZSBkb2N1bWVudCBjYW4gb25seSBsb2FkIGZyb20gdGhlIHNh
bWUgcG9ydCBvbiB0aGUgc2VydmVyCi0gICAgS1VSTCBkb2N1bWVudFVSTCA9IG1fZG9jLT51cmwo
KTsKKyAgICBLVVJMIGRvY3VtZW50VVJMKG1fZG9jLT51cmwoKSk7CiAgICAgaWYgKGRvY3VtZW50
VVJMLnByb3RvY29sKCkubG93ZXIoKSA9PSB1cmwucHJvdG9jb2woKS5sb3dlcigpCiAgICAgICAg
ICAgICAmJiBkb2N1bWVudFVSTC5ob3N0KCkubG93ZXIoKSA9PSB1cmwuaG9zdCgpLmxvd2VyKCkK
ICAgICAgICAgICAgICYmIGRvY3VtZW50VVJMLnBvcnQoKSA9PSB1cmwucG9ydCgpKQpAQCAtMzcy
LDkgKzM2MCw5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiAKICAg
ICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIklOREVYIiB8fCBtZXRob2RVcHBlciA9PSAiTE9DSyIg
fHwgbWV0aG9kVXBwZXIgPT0gIk0tUE9TVCIgfHwgbWV0aG9kVXBwZXIgPT0gIk1LQ09MIiB8fCBt
ZXRob2RVcHBlciA9PSAiTU9WRSIKICAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIk9QVElPTlMi
IHx8IG1ldGhvZFVwcGVyID09ICJQT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUEZJTkQiIHx8
IG1ldGhvZFVwcGVyID09ICJQUk9QUEFUQ0giIHx8IG1ldGhvZFVwcGVyID09ICJQVVQiIAogICAg
ICAgICB8fCBtZXRob2RVcHBlciA9PSAiVU5MT0NLIikKLSAgICAgICAgbV9tZXRob2QgPSBtZXRo
b2RVcHBlci5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIG1fbWV0aG9kID0gbWV0aG9kVXBw
ZXI7CiAgICAgZWxzZQotICAgICAgICBtX21ldGhvZCA9IG1ldGhvZC5kZXByZWNhdGVkU3RyaW5n
KCk7CisgICAgICAgIG1fbWV0aG9kID0gbWV0aG9kOwogCiAgICAgbV9hc3luYyA9IGFzeW5jOwog
CkBAIC0zODQsNyArMzcyLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJp
bmcmIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29u
c3QgS1VSTCYgdXJsLCBib29sIGFzeW5jLCBjb25zdCBTdHJpbmcmIHVzZXIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIEtVUkwgdXJsV2l0aENyZWRlbnRpYWxzKHVybCk7Ci0gICAgdXJsV2l0
aENyZWRlbnRpYWxzLnNldFVzZXIodXNlci5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIHVybFdp
dGhDcmVkZW50aWFscy5zZXRVc2VyKHVzZXIpOwogICAgIAogICAgIG9wZW4obWV0aG9kLCB1cmxX
aXRoQ3JlZGVudGlhbHMsIGFzeW5jLCBlYyk7CiB9CkBAIC0zOTIsOCArMzgwLDggQEAgdm9pZCBY
TUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6
b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBib29sIGFzeW5jLCBj
b25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIEtVUkwgdXJsV2l0aENyZWRlbnRpYWxzKHVybCk7Ci0gICAgdXJsV2l0aENy
ZWRlbnRpYWxzLnNldFVzZXIodXNlci5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIHVybFdpdGhD
cmVkZW50aWFscy5zZXRQYXNzKHBhc3N3b3JkLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgdXJs
V2l0aENyZWRlbnRpYWxzLnNldFVzZXIodXNlcik7CisgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNl
dFBhc3MocGFzc3dvcmQpOwogICAgIAogICAgIG9wZW4obWV0aG9kLCB1cmxXaXRoQ3JlZGVudGlh
bHMsIGFzeW5jLCBlYyk7CiB9CkBAIC00NzIsNyArNDYwLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6c2VuZChjb25zdCBTdHJpbmcmIAogICAgIHJlZigpOwogICAgIHsKICAgICAgICAgS0pTOjpK
U0xvY2sgbG9jazsKLSAgICAgICAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KEtKUzo6U2NyaXB0SW50
ZXJwcmV0ZXI6OmdldERPTU9iamVjdCh0aGlzKSk7CisgICAgICAgIGdjUHJvdGVjdE51bGxUb2xl
cmFudChTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KHRoaXMpKTsKICAgICB9CiAgIAog
ICAgIC8vIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgY2FuIHJldHVybiBudWxsIGhlcmUsIGZv
ciBleGFtcGxlIGlmIHdlJ3JlIG5vIGxvbmdlciBhdHRhY2hlZCB0byBhIHBhZ2UuCkBAIC01MDcs
NyArNDk1LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKSAgIAogewog
ICAgIHsKICAgICAgICAgS0pTOjpKU0xvY2sgbG9jazsKLSAgICAgICAgS0pTOjpKU1ZhbHVlKiB3
cmFwcGVyID0gS0pTOjpTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KHRoaXMpOworICAg
ICAgICBLSlM6OkpTVmFsdWUqIHdyYXBwZXIgPSBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2Jq
ZWN0KHRoaXMpOwogICAgICAgICBLSlM6OmdjVW5wcm90ZWN0TnVsbFRvbGVyYW50KHdyYXBwZXIp
OwogICAgIAogICAgICAgICAvLyB0aGUgWEhSIG9iamVjdCBpdHNlbGYgaG9sZHMgb24gdG8gdGhl
IHJlc3BvbnNlVGV4dCwgYW5kCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDUgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTIzLDI2ICsyMSwxMyBAQAogI2RlZmluZSBYTUxIdHRwUmVxdWVzdF9oCiAKICNpbmNsdWRl
ICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKLSNpbmNsdWRlICJL
VVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
c3BvbnNlLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlN1YnJlc291cmNl
TG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSA8a2pzL3VzdHJpbmcuaD4KLQotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNz
IEV2ZW50OwotY2xhc3MgRXZlbnRMaXN0ZW5lcjsKLWNsYXNzIFN0cmluZzsKLQotdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKK2NsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiAKIC8vIHRoZXNl
IGV4YWN0IG51bWVyaWMgdmFsdWVzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3RzIHRo
ZW0KIGVudW0gWE1MSHR0cFJlcXVlc3RTdGF0ZSB7CkBAIC0xMjgsNyArMTEzLDcgQEAgcHJpdmF0
ZToKICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOwogCiAgICAgS1VSTCBt
X3VybDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIG1fbWV0aG9kOworICAgIFN0cmluZyBtX21ldGhv
ZDsKICAgICBIVFRQSGVhZGVyTWFwIG1fcmVxdWVzdEhlYWRlcnM7CiAgICAgU3RyaW5nIG1fbWlt
ZVR5cGVPdmVycmlkZTsKICAgICBib29sIG1fYXN5bmM7CkluZGV4OiBXZWJDb3JlL3htbC9YU0xJ
bXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNw
cAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKLS8qKgorLyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0
KCkKICAgICBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsK
ICAgICBpZiAoIXBhcmVudFNoZWV0LT5ocmVmKCkuaXNOdWxsKCkpCiAgICAgICAgIC8vIHVzZSBw
YXJlbnQgc3R5bGVoZWV0J3MgVVJMIGFzIHRoZSBiYXNlIFVSTAotICAgICAgICBhYnNIcmVmID0g
S1VSTChwYXJlbnRTaGVldC0+aHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgbV9zdHJIcmVmLmRl
cHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCk7CisgICAgICAgIGFic0hyZWYgPSBLVVJMKEtVUkwo
cGFyZW50U2hlZXQtPmhyZWYoKSksIG1fc3RySHJlZikuc3RyaW5nKCk7CiAgICAgCiAgICAgLy8g
Q2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBh
IHN0eWxlc2hlZXQKICAgICAvLyBpbiBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJM
LCB0aGVuIGp1c3QgYmFpbC4KSW5kZXg6IFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAzMDIz
MSkKKysrIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAotLyoqCisvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBs
ZW1lbnRhdGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5
MCw3ICsxOTAsNyBAQCB2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0cygpCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoSVNfWFNMVF9FTEVNKGN1cnIpICYmIElTX1hTTFRf
TkFNRShjdXJyLCAiaW1wb3J0IikpIHsKICAgICAgICAgICAgICAgICB4bWxDaGFyKiB1cmlSZWYg
PSB4c2x0R2V0TnNQcm9wKGN1cnIsIChjb25zdCB4bWxDaGFyKikiaHJlZiIsIFhTTFRfTkFNRVNQ
QUNFKTsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbVV0ZjgoKGNvbnN0IGNoYXIqKXVyaVJlZikpOworICAgICAgICAg
ICAgICAgIGxvYWRDaGlsZFNoZWV0KFN0cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXVyaVJl
ZikpOwogICAgICAgICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgWFNMU3R5
bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKCkKICAgICAgICAgd2hpbGUgKGN1cnIpIHsKICAgICAg
ICAgICAgIGlmIChjdXJyLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUgJiYgSVNfWFNMVF9FTEVN
KGN1cnIpICYmIElTX1hTTFRfTkFNRShjdXJyLCAiaW5jbHVkZSIpKSB7CiAgICAgICAgICAgICAg
ICAgeG1sQ2hhciogdXJpUmVmID0geHNsdEdldE5zUHJvcChjdXJyLCAoY29uc3QgeG1sQ2hhciop
ImhyZWYiLCBYU0xUX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQo
RGVwcmVjYXRlZFN0cmluZzo6ZnJvbVV0ZjgoKGNvbnN0IGNoYXIqKXVyaVJlZikpOworICAgICAg
ICAgICAgICAgIGxvYWRDaGlsZFNoZWV0KFN0cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXVy
aVJlZikpOwogICAgICAgICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQg
WFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKCkKICAgICB9CiB9CiAKLXZvaWQgWFNMU3R5
bGVTaGVldDo6bG9hZENoaWxkU2hlZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgaHJlZikKK3Zv
aWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmKQogewog
ICAgIFJlZlB0cjxYU0xJbXBvcnRSdWxlPiBjaGlsZFJ1bGUgPSBuZXcgWFNMSW1wb3J0UnVsZSh0
aGlzLCBocmVmKTsKICAgICBhcHBlbmQoY2hpbGRSdWxlKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hT
TFN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgJ
KHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBY
U0wgaW1wbGVtZW50YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKIAogICAgIHZv
aWQgbG9hZENoaWxkU2hlZXRzKCk7Ci0gICAgdm9pZCBsb2FkQ2hpbGRTaGVldChjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJiBocmVmKTsKKyAgICB2b2lkIGxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmlu
ZyYgaHJlZik7CiAKICAgICB4c2x0U3R5bGVzaGVldFB0ciBjb21waWxlU3R5bGVTaGVldCgpOwog
CkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKLS8qKgor
LyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRpb24uCiAgKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IDxhcEB3ZWJraXQub3JnPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExMiw3ICsxMTIsNyBA
QCBzdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sCiAgICAgICAgIGNhc2Ug
WFNMVF9MT0FEX0RPQ1VNRU5UOiB7CiAgICAgICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0
ciBjb250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7CiAgICAgICAgICAgICB4
bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29u
dGV4dC0+bm9kZSk7Ci0gICAgICAgICAgICBLVVJMIHVybCgoY29uc3QgY2hhciopYmFzZSwgKGNv
bnN0IGNoYXIqKXVyaSk7CisgICAgICAgICAgICBLVVJMIHVybChLVVJMKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJp
KSk7CiAgICAgICAgICAgICB4bWxGcmVlKGJhc2UpOwogICAgICAgICAgICAgUmVzb3VyY2VFcnJv
ciBlcnJvcjsKICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CkBAIC0yOTMs
NyArMjkzLDggQEAgc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gYwogc3Rh
dGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0UG9pbnRlcihSZWZQdHI8WFNMU3R5
bGVTaGVldD4mIGNhY2hlZFN0eWxlc2hlZXQsIE5vZGUqIHN0eWxlc2hlZXRSb290Tm9kZSkKIHsK
ICAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgJiYgc3R5bGVzaGVldFJvb3ROb2RlKSB7Ci0gICAg
ICAgIGNhY2hlZFN0eWxlc2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldChzdHlsZXNoZWV0Um9vdE5v
ZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA6IHN0eWxlc2hlZXRS
b290Tm9kZSwgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1bWVudCgpLT51cmwoKSk7CisgICAgICAg
IGNhY2hlZFN0eWxlc2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldChzdHlsZXNoZWV0Um9vdE5vZGUt
PnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA6IHN0eWxlc2hlZXRSb290
Tm9kZSwKKyAgICAgICAgICAgIHN0eWxlc2hlZXRSb290Tm9kZS0+ZG9jdW1lbnQoKS0+dXJsKCku
c3RyaW5nKCkpOwogICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5wYXJzZVN0cmluZyhjcmVhdGVN
YXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7CiAgICAgfQogICAgIApAQCAtMzEyLDcgKzMxMyw4
IEBAIHN0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZyb21Ob2QKICAgICBpZiAoc291
cmNlSXNEb2N1bWVudCkKICAgICAgICAgc291cmNlRG9jID0gKHhtbERvY1B0cilvd25lckRvY3Vt
ZW50LT50cmFuc2Zvcm1Tb3VyY2UoKTsKICAgICBpZiAoIXNvdXJjZURvYykgewotICAgICAgICBz
b3VyY2VEb2MgPSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0cmluZyhvd25lckRvY3VtZW50LT5k
b2NMb2FkZXIoKSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUpLCBzb3VyY2VJc0RvY3VtZW50ID8g
b3duZXJEb2N1bWVudC0+dXJsKCkgOiBEZXByZWNhdGVkU3RyaW5nKCkpOworICAgICAgICBzb3Vy
Y2VEb2MgPSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0cmluZyhvd25lckRvY3VtZW50LT5kb2NM
b2FkZXIoKSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUpLAorICAgICAgICAgICAgc291cmNlSXNE
b2N1bWVudCA/IG93bmVyRG9jdW1lbnQtPnVybCgpLnN0cmluZygpIDogU3RyaW5nKCkpOwogICAg
ICAgICBzaG91bGREZWxldGUgPSAoc291cmNlRG9jICE9IDApOwogICAgIH0KICAgICByZXR1cm4g
c291cmNlRG9jOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAwOC0wMi0xNCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CisKKyAgICAgICAgLSB1cGRhdGVkIGZvciBXZWJDb3JlIEtVUkwgY2hhbmdlcworCisgICAgICAg
ICogSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbToKKyAgICAgICAgKC1bV2ViSGlzdG9yeUl0ZW0g
VVJMXSk6IFJlbW92ZWQgZ2V0TlNVUkwgY2FsbC4KKyAgICAgICAgKiBNaXNjL1dlYkVsZW1lbnRE
aWN0aW9uYXJ5Lm1tOgorICAgICAgICAoLVtXZWJFbGVtZW50RGljdGlvbmFyeSBfYWJzb2x1dGVJ
bWFnZVVSTF0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRWxlbWVudERpY3Rpb25hcnkgX2Fic29s
dXRlTGlua1VSTF0pOiBEaXR0by4KKyAgICAgICAgKiBNaXNjL1dlYk5TQXR0cmlidXRlZFN0cmlu
Z0V4dHJhcy5tbToKKyAgICAgICAgKGZpbGVXcmFwcGVyRm9yRWxlbWVudCk6IERpdHRvLgorICAg
ICAgICAoK1tOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
Ol0pOiBEaXR0by4KKyAgICAgICAgKiBNaXNjL1dlYk5TVVJMRXh0cmFzLm1tOgorICAgICAgICAo
LVtOU1N0cmluZyBfd2Via2l0X3N0cmluZ0J5UmVwbGFjaW5nVmFsaWRQZXJjZW50RXNjYXBlc10p
OiBVcGRhdGVkCisgICAgICAgIGZvciBmdW5jdGlvbiBuYW1lIGNoYW5nZS4KKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRl
eHRNZW51Q2xpZW50Ojpkb3dubG9hZFVSTCk6IFJlbW92ZWQgZ2V0TlNVUkwgY2FsbC4KKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRHJhZ0Ns
aWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6IERpdHRvLgorICAgICAg
ICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yU3RhbmRhcmRMb2Fk
KTogRGl0dG8uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlz
dG9yeUZvclJlbG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNh
bmNlbGxlZEVycm9yKTogRGl0dG8uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Ymxv
Y2tlZEVycm9yKTogRGl0dG8uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2Fubm90
U2hvd1VSTEVycm9yKTogRGl0dG8uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6aW50
ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpjYW5ub3RTaG93TUlNRVR5cGVFcnJvcik6IERpdHRvLgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmZpbGVEb2VzTm90RXhpc3RFcnJvcik6IERpdHRvLgorICAgICAg
ICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndpbGxVc2VBcmNoaXZlKTogRGl0dG8uCisgICAgICAg
IChXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0VGl0bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjphY3Rpb25EaWN0aW9uYXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZSk6IERpdHRvLgorICAgICAgICAoV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6IERpdHRvLgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQpOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkRhdGFTb3VyY2UubW06CisgICAgICAgICgtW1dlYkRhdGFTb3VyY2UgX1VSTF0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBfaW5pdFdpdGhEb2N1bWVudExvYWRl
cjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkRhdGFTb3VyY2UgdW5yZWFjaGFibGVVUkxdKTog
RGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjpdKTogRGl0
dG8uCisKIDIwMDgtMDItMTQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJLaXQvbWFjL0hpc3Rv
cnkvV2ViSGlzdG9yeUl0ZW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0b3J5L1dl
Ykhpc3RvcnlJdGVtLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9X
ZWJIaXN0b3J5SXRlbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NjQsNyAr
NDY0LDkgQEAgc3RhdGljIFdlYldpbmRvd1dhdGNoZXIgKl93aW5kb3dXYXRjaGVyIAogewogICAg
IEFTU0VSVF9NQUlOX1RIUkVBRCgpOwogICAgIEtVUkwgdXJsID0gY29yZShfcHJpdmF0ZSktPnVy
bCgpOwotICAgIHJldHVybiB1cmwuaXNFbXB0eSgpID8gbmlsIDogdXJsLmdldE5TVVJMKCk7Cisg
ICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHVy
bDsKIH0KIAogLy8gVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBmb3IgV2ViSGlz
dG9yeUl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgaW5jbHVkZWQKSW5kZXg6IFdlYktpdC9tYWMvTWlz
Yy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2Mv
V2ViRWxlbWVudERpY3Rpb25hcnkubW0JKHJldmlzaW9uIDMwMjMxKQorKysgV2ViS2l0L21hYy9N
aXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDE0ICszNSwxMyBAQAogI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgogI2ltcG9ydCAi
V2ViVmlldy5oIgogI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUuaCIKLQotI2ltcG9ydCA8V2ViS2l0
L0RPTUNvcmUuaD4KLSNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvS1VSTC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0L0RPTUNvcmUuaD4K
KyNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC0yMDUsNyArMjA0LDcgQEAgc3RhdGljIE5TU3RyaW5nKiBOU1N0cmluZ09yTmls
KFN0cmluZyBjbwogCiAtIChOU1VSTCAqKV9hYnNvbHV0ZUltYWdlVVJMCiB7Ci0gICAgcmV0dXJu
IF9yZXN1bHQtPmFic29sdXRlSW1hZ2VVUkwoKS5nZXROU1VSTCgpOworICAgIHJldHVybiBfcmVz
dWx0LT5hYnNvbHV0ZUltYWdlVVJMKCk7CiB9CiAKIC0gKE5TTnVtYmVyICopX2lzU2VsZWN0ZWQK
QEAgLTIyMCw3ICsyMTksNyBAQCBzdGF0aWMgTlNTdHJpbmcqIE5TU3RyaW5nT3JOaWwoU3RyaW5n
IGNvCiAKIC0gKE5TVVJMICopX2Fic29sdXRlTGlua1VSTAogewotICAgIHJldHVybiBfcmVzdWx0
LT5hYnNvbHV0ZUxpbmtVUkwoKS5nZXROU1VSTCgpOworICAgIHJldHVybiBfcmVzdWx0LT5hYnNv
bHV0ZUxpbmtVUkwoKTsKIH0KIAogLSAoV2ViRnJhbWUgKilfdGFyZ2V0V2ViRnJhbWUKSW5kZXg6
IFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkocmV2
aXNpb24gMzAyMzEpCisrKyBXZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0
cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDcgKzk0LDcgQEAgc3Rh
dGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbQogICAgIAogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0ciA9IGUtPmdldEF0dHJpYnV0ZShzcmNBdHRyKTsKICAgICBpZiAoIWF0
dHIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5TVVJMICpVUkwgPSBLVVJMKGUtPmRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKGF0dHIuZGVwcmVjYXRlZFN0cmluZygpKSkuZ2V0TlNVUkwoKTsKKyAgICAg
ICAgTlNVUkwgKlVSTCA9IGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHIpOwogICAgICAg
ICB3cmFwcGVyID0gW1traXQoZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgX2RhdGFTb3VyY2VdIF9m
aWxlV3JhcHBlckZvclVSTDpVUkxdOwogICAgIH0KICAgICBpZiAoIXdyYXBwZXIpIHsKQEAgLTQy
MiwxMCArNDIyLDcgQEAgc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbQog
ICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQg
d2UgY3JlYXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCiAgICAg
ICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8
YT4gZWxlbWVudHMuCiAgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgY3VycmVu
dE5vZGUgPT0gbGlua1N0YXJ0Tm9kZSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaHJl
ZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUtPmdldEF0dHJpYnV0ZShocmVmQXR0cikpOwotICAg
ICAgICAgICAgICAgICAgICBLVVJMIGtVUkwgPSBsaW5rU3RhcnROb2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoaHJlZi5kZXByZWNhdGVkU3RyaW5nKCkpOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtV
UkwuZ2V0TlNVUkwoKTsKKyAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGxpbmtTdGFy
dE5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5jb21wbGV0ZVVSTChwYXJzZVVS
TChsaW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIE5TUmFuZ2UgdGVtcFJhbmdlID0geyBsaW5rU3RhcnRMb2NhdGlvbiwgW3Jlc3VsdCBs
ZW5ndGhdLWxpbmtTdGFydExvY2F0aW9uIH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKICAg
ICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFt
ZSB2YWx1ZTpVUkwgcmFuZ2U6dGVtcFJhbmdlXTsKICAgICAgICAgICAgICAgICAgICAgbGlua1N0
YXJ0Tm9kZSA9IDA7CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAz
MDIzMSkKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC04MDIsOCArODAyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCiAtIChOU1N0cmluZyAqKV93ZWJr
aXRfc3RyaW5nQnlSZXBsYWNpbmdWYWxpZFBlcmNlbnRFc2NhcGVzCiB7Ci0gICAgRGVwcmVjYXRl
ZFN0cmluZyBzID0gS1VSTDo6ZGVjb2RlX3N0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpmcm9tTlNT
dHJpbmcoc2VsZikpOwotICAgIHJldHVybiBzLmdldE5TU3RyaW5nKCk7CisgICAgcmV0dXJuIGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhzZWxmKTsKIH0KIAogLSAoTlNTdHJpbmcgKilfd2Via2l0
X3NjcmlwdElmSmF2YVNjcmlwdFVSTApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDb250ZXh0TWVudUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudUNsaWVu
dDo6Y29udGV4dE1lbnVJdAogCiB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50Ojpkb3dubG9hZFVS
TChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgW21fd2ViVmlldyBfZG93bmxvYWRVUkw6dXJsLmdl
dE5TVVJMKCldOworICAgIFttX3dlYlZpZXcgX2Rvd25sb2FkVVJMOnVybF07CiB9CiAKIHZvaWQg
V2ViQ29udGV4dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhTcG90bGlnaHQoKQpJbmRleDogV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbQkocmV2aXNpb24gMzAyMzEpCisr
KyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMjEsMTEgKzEyMSwxMiBAQCBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVudDo6Y3JlYXRl
RHJhZ0ltCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBXZWJI
VE1MVmlldyogaHRtbFZpZXcgPSAoV2ViSFRNTFZpZXcqKVtba2l0KGZyYW1lKSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld107CisgICAgV2ViSFRNTFZpZXcgKmh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3
ICopW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICBOU1N0cmluZyAq
bGFiZWwgPSAwOwogICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQotICAgICAgICBsYWJlbCA9IChO
U1N0cmluZyopdGl0bGU7Ci0gICAgcmV0dXJuIFtodG1sVmlldyBfZHJhZ0ltYWdlRm9yVVJMOlt1
cmwuZ2V0TlNVUkwoKSBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSB3aXRoTGFiZWw6bGFiZWxdOwor
ICAgICAgICBsYWJlbCA9IHRpdGxlOworICAgIE5TVVJMICpjb2NvYVVSTCA9IHVybDsKKyAgICBy
ZXR1cm4gW2h0bWxWaWV3IF9kcmFnSW1hZ2VGb3JVUkw6W2NvY29hVVJMIF93ZWJfdXNlclZpc2li
bGVTdHJpbmddIHdpdGhMYWJlbDpsYWJlbF07CiB9CiAKIApJbmRleDogV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDIz
MSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyNiwxMiArNDI2LDE0IEBAIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2EKICAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVn
YXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZUZ1bmMs
IHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJh
bWU6KSwgbV93ZWJGcmFtZS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiBVUkwsIGRvdWJs
ZSBkZWxheSwgZG91YmxlIGZpcmVEYXRlKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIGRl
bGF5LCBkb3VibGUgZmlyZURhdGUpCiB7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZp
ZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJ
bXBsZW1lbnRhdGlvbnMod2ViVmlldyk7Ci0gICAgaWYgKGltcGxlbWVudGF0aW9ucy0+d2lsbFBl
cmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMRGVsYXlGaXJlRGF0ZUZvckZyYW1lRnVuYykKLSAgICAg
ICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+d2lsbFBlcmZvcm1DbGll
bnRSZWRpcmVjdFRvVVJMRGVsYXlGaXJlRGF0ZUZvckZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVj
dG9yKHdlYlZpZXc6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOmRlbGF5OmZpcmVEYXRl
OmZvckZyYW1lOiksIFVSTC5nZXROU1VSTCgpLCBkZWxheSwgW05TRGF0ZSBkYXRlV2l0aFRpbWVJ
bnRlcnZhbFNpbmNlMTk3MDpmaXJlRGF0ZV0sIG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIGlmIChp
bXBsZW1lbnRhdGlvbnMtPndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTERlbGF5RmlyZURh
dGVGb3JGcmFtZUZ1bmMpIHsKKyAgICAgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOworICAgICAg
ICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0VG9VUkxEZWxheUZpcmVEYXRlRm9yRnJhbWVGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0
b3Iod2ViVmlldzp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6ZGVsYXk6ZmlyZURhdGU6
Zm9yRnJhbWU6KSwgY29jb2FVUkwsIGRlbGF5LCBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFs
U2luY2UxOTcwOmZpcmVEYXRlXSwgbV93ZWJGcmFtZS5nZXQoKSk7CisgICAgfQogfQogCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFn
ZSgpCkBAIC02NzcsNyArNjc5LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFp
bkZyYW1lRAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCBkb3dubG9h
ZCBmdWxsIHJlcXVlc3QuCi0gICAgV2ViRG93bmxvYWQgKmRvd25sb2FkID0gW2dldFdlYlZpZXco
bV93ZWJGcmFtZS5nZXQoKSkgX2Rvd25sb2FkVVJMOnJlcXVlc3QudXJsKCkuZ2V0TlNVUkwoKV07
CisgICAgV2ViRG93bmxvYWQgKmRvd25sb2FkID0gW2dldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQo
KSkgX2Rvd25sb2FkVVJMOnJlcXVlc3QudXJsKCldOwogICAgIAogICAgIHNldE9yaWdpbmFsVVJM
Rm9yRG93bmxvYWQoZG93bmxvYWQsIHJlcXVlc3QpOwogfQpAQCAtNzE1LDggKzcxNyw4IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmFsU2V0dXBGb3IKIC8vIE9uY2UgdGhhdCB0YXNr
IGlzIGNvbXBsZXRlLCB0aGlzIHdpbGwgZ28gYXdheQogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6dXBkYXRlR2xvYmFsSGlzdG9yeUZvclN0YW5kYXJkTG9hZChjb25zdCBLVVJMJiB1cmwpCiB7
Ci0gICAgTlNVUkwgKm5zdXJsID0gdXJsLmdldE5TVVJMKCk7Ci0gICAgV2ViSGlzdG9yeUl0ZW0g
KmVudHJ5ID0gW1tXZWJIaXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0gYWRkSXRlbUZvclVS
TDpuc3VybF07CisgICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOworICAgIFdlYkhpc3RvcnlJdGVt
ICplbnRyeSA9IFtbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIGFkZEl0ZW1Gb3JV
Ukw6Y29jb2FVUkxdOwogICAgIFN0cmluZyBwYWdlVGl0bGUgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0
KCkpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKTsKICAgICBpZiAocGFnZVRp
dGxlLmxlbmd0aCgpKQogICAgICAgICBbZW50cnkgc2V0VGl0bGU6cGFnZVRpdGxlXTsKQEAgLTcy
Nyw3ICs3MjksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxICiB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yUmVsb2FkKGNv
bnN0IEtVUkwmIHVybCkKIHsKICAgICBXZWJIaXN0b3J5ICpzaGFyZWRIaXN0b3J5ID0gW1dlYkhp
c3Rvcnkgb3B0aW9uYWxTaGFyZWRIaXN0b3J5XTsKLSAgICBXZWJIaXN0b3J5SXRlbSAqaXRlbSA9
IFtzaGFyZWRIaXN0b3J5IGl0ZW1Gb3JVUkw6dXJsLmdldE5TVVJMKCldOworICAgIFdlYkhpc3Rv
cnlJdGVtICppdGVtID0gW3NoYXJlZEhpc3RvcnkgaXRlbUZvclVSTDp1cmxdOwogICAgIGlmIChp
dGVtKQogICAgICAgICBbc2hhcmVkSGlzdG9yeSBzZXRMYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDpb
TlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0gZm9ySXRlbTppdGVtXTsKIH0K
QEAgLTc0MiwzMiArNzQ0LDMyIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZEdv
VG9IaXMKIAogUmVzb3VyY2VFcnJvciBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuY2VsbGVkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVybiBbTlNFcnJv
ciBfd2ViS2l0RXJyb3JXaXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTpOU1VSTEVycm9y
Q2FuY2VsbGVkIFVSTDpyZXF1ZXN0LnVybCgpLmdldE5TVVJMKCldOworICAgIHJldHVybiBbTlNF
cnJvciBfd2ViS2l0RXJyb3JXaXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTpOU1VSTEVy
cm9yQ2FuY2VsbGVkIFVSTDpyZXF1ZXN0LnVybCgpXTsKIH0KICAgICAKIFJlc291cmNlRXJyb3Ig
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46
V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0
IFVSTDpyZXF1ZXN0LnVybCgpLmdldE5TVVJMKCldOworICAgIHJldHVybiBbTlNFcnJvciBfd2Vi
S2l0RXJyb3JXaXRoRG9tYWluOldlYktpdEVycm9yRG9tYWluIGNvZGU6V2ViS2l0RXJyb3JDYW5u
b3RVc2VSZXN0cmljdGVkUG9ydCBVUkw6cmVxdWVzdC51cmwoKV07CiB9CiAKIFJlc291cmNlRXJy
b3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldp
dGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckNhbm5vdFNob3dVUkwg
VVJMOnJlcXVlc3QudXJsKCkuZ2V0TlNVUkwoKV07CisgICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJL
aXRFcnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckNhbm5v
dFNob3dVUkwgVVJMOnJlcXVlc3QudXJsKCldOwogfQogCiBSZXNvdXJjZUVycm9yIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldp
dGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckZyYW1lTG9hZEludGVy
cnVwdGVkQnlQb2xpY3lDaGFuZ2UgVVJMOnJlcXVlc3QudXJsKCkuZ2V0TlNVUkwoKV07CisgICAg
cmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4g
Y29kZTpXZWJLaXRFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UgVVJMOnJl
cXVlc3QudXJsKCldOwogfQogCiBSZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpj
YW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
IHsKLSAgICByZXR1cm4gW05TRXJyb3IgX3dlYktpdEVycm9yV2l0aERvbWFpbjpOU1VSTEVycm9y
RG9tYWluIGNvZGU6V2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgVVJMOnJlc3BvbnNlLnVy
bCgpLmdldE5TVVJMKCldOworICAgIHJldHVybiBbTlNFcnJvciBfd2ViS2l0RXJyb3JXaXRoRG9t
YWluOk5TVVJMRXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckNhbm5vdFNob3dNSU1FVHlwZSBV
Ukw6cmVzcG9uc2UudXJsKCldOwogfQogCiBSZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCiB7Ci0gICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46TlNVUkxF
cnJvckRvbWFpbiBjb2RlOk5TVVJMRXJyb3JGaWxlRG9lc05vdEV4aXN0IFVSTDpyZXNwb25zZS51
cmwoKS5nZXROU1VSTCgpXTsgICAgCisgICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldp
dGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJMRXJyb3JGaWxlRG9lc05vdEV4aXN0
IFVSTDpyZXNwb25zZS51cmwoKV07ICAgIAogfQogCiBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpzaG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTc5MCw3ICs3
OTIsNyBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3aWxsVXNlQXJjaGl2CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIWNhblVzZUFyY2hpdmVkUmVzb3VyY2UocmVxdWVzdC5u
c1VSTFJlcXVlc3QoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXZWJSZXNvdXJjZSAq
cmVzb3VyY2UgPSBbZGF0YVNvdXJjZShjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS0+
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSkgX2FyY2hpdmVkU3VicmVzb3VyY2VGb3JVUkw6b3JpZ2lu
YWxVUkwuZ2V0TlNVUkwoKV07CisgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW2RhdGFTb3Vy
Y2UoY29yZShtX3dlYkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVy
KCkpIF9hcmNoaXZlZFN1YnJlc291cmNlRm9yVVJMOm9yaWdpbmFsVVJMXTsKICAgICBpZiAoIXJl
c291cmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFjYW5Vc2VBcmNoaXZlZFJl
c291cmNlKFtyZXNvdXJjZSBfcmVzcG9uc2VdKSkKQEAgLTk0Miw3ICs5NDQsNyBAQCBQYXNzUmVm
UHRyPERvY3VtZW50TG9hZGVyPiBXZWJGcmFtZUxvYWRlCiAvLyBPbmNlIHRoYXQgdGFzayBpcyBj
b21wbGV0ZSwgdGhpcyB3aWxsIGdvIGF3YXkKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNl
dFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmIFVSTCkKIHsKLSAgICBOU1VS
TCogbnNVUkwgPSBjYW5vbmljYWxVUkwoVVJMLmdldE5TVVJMKCkpOworICAgIE5TVVJMKiBuc1VS
TCA9IGNhbm9uaWNhbFVSTChVUkwpOwogICAgIGlmKCFuc1VSTCkKICAgICAgICAgcmV0dXJuOwog
ICAgIE5TU3RyaW5nICp0aXRsZU5TU3RyaW5nID0gdGl0bGU7CkBAIC0xMTE0LDYgKzExMTYsNyBA
QCBOU0RpY3Rpb25hcnkgKldlYkZyYW1lTG9hZGVyQ2xpZW50OjphY3RpCiAgICAgICAgIGlmIChr
ZXlTdGF0ZUV2ZW50LT5tZXRhS2V5KCkpCiAgICAgICAgICAgICBtb2RpZmllckZsYWdzIHw9IE5T
Q29tbWFuZEtleU1hc2s7CiAgICAgfQorICAgIE5TVVJMICpvcmlnaW5hbFVSTCA9IGFjdGlvbi51
cmwoKTsKICAgICBpZiAoY29uc3QgTW91c2VFdmVudCogbW91c2VFdmVudCA9IGZpbmRNb3VzZUV2
ZW50KGV2ZW50KSkgewogICAgICAgICBJbnRQb2ludCBwb2ludChtb3VzZUV2ZW50LT5wYWdlWCgp
LCBtb3VzZUV2ZW50LT5wYWdlWSgpKTsKICAgICAgICAgV2ViRWxlbWVudERpY3Rpb25hcnkgKmVs
ZW1lbnQgPSBbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXQpAQCAtMTEyMyw3ICsxMTI2LDcg
QEAgTlNEaWN0aW9uYXJ5ICpXZWJGcmFtZUxvYWRlckNsaWVudDo6YWN0aQogICAgICAgICAgICAg
ZWxlbWVudCwgV2ViQWN0aW9uRWxlbWVudEtleSwKICAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoSW50Om1vdXNlRXZlbnQtPmJ1dHRvbigpXSwgV2ViQWN0aW9uQnV0dG9uS2V5LAogICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bW9kaWZpZXJGbGFnc10sIFdlYkFjdGlv
bk1vZGlmaWVyRmxhZ3NLZXksCi0gICAgICAgICAgICBhY3Rpb24udXJsKCkuZ2V0TlNVUkwoKSwg
V2ViQWN0aW9uT3JpZ2luYWxVUkxLZXksCisgICAgICAgICAgICBvcmlnaW5hbFVSTCwgV2ViQWN0
aW9uT3JpZ2luYWxVUkxLZXksCiAgICAgICAgICAgICBuaWxdOwogICAgICAgICBbZWxlbWVudCBy
ZWxlYXNlXTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMzEsNyArMTEzNCw3IEBAIE5T
RGljdGlvbmFyeSAqV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjdGkKICAgICByZXR1cm4gW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDphY3Rpb24udHlwZSgpXSwgV2ViQWN0aW9uTmF2aWdhdGlvblR5cGVLZXks
CiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1vZGlmaWVyRmxhZ3NdLCBXZWJBY3Rp
b25Nb2RpZmllckZsYWdzS2V5LAotICAgICAgICBhY3Rpb24udXJsKCkuZ2V0TlNVUkwoKSwgV2Vi
QWN0aW9uT3JpZ2luYWxVUkxLZXksCisgICAgICAgIG9yaWdpbmFsVVJMLCBXZWJBY3Rpb25Pcmln
aW5hbFVSTEtleSwKICAgICAgICAgbmlsXTsKIH0KIApAQCAtMTE0OCw3ICsxMTUxLDcgQEAgUGFz
c1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OgogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKICAgICAKICAgICByZXR1cm4gW2JyaWRnZSBjcmVhdGVDaGlsZEZyYW1l
TmFtZWQ6bmFtZQotICAgICAgICAgICAgICAgICAgIHdpdGhVUkw6dXJsLmdldE5TVVJMKCkKKyAg
ICAgICAgICAgICAgICAgICB3aXRoVVJMOnVybAogICAgICAgICAgICAgICAgICAgIHJlZmVycmVy
OnJlZmVycmVyIAogICAgICAgICAgICAgICAgICAgIG93bmVyRWxlbWVudDpvd25lckVsZW1lbnQK
ICAgICAgICAgICAgICAgICAgICBhbGxvd3NTY3JvbGxpbmc6YWxsb3dzU2Nyb2xsaW5nCkBAIC0x
MTYzLDcgKzExNjYsNyBAQCBPYmplY3RDb250ZW50VHlwZSBXZWJGcmFtZUxvYWRlckNsaWVudDo6
CiB7CiAgICAgV2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5i
cmlkZ2U7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBbYnJp
ZGdlIGRldGVybWluZU9iamVjdEZyb21NSU1FVHlwZTptaW1lVHlwZSBVUkw6dXJsLmdldE5TVVJM
KCldOworICAgIHJldHVybiBbYnJpZGdlIGRldGVybWluZU9iamVjdEZyb21NSU1FVHlwZTptaW1l
VHlwZSBVUkw6dXJsXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIHJldHVy
biBPYmplY3RDb250ZW50Tm9uZTsKIH0KQEAgLTExODQsNyArMTE4Nyw3IEBAIFdpZGdldCogV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWcKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICByZXR1cm4gbmV3IFdpZGdldChbYnJpZGdlIHZpZXdGb3JQbHVnaW5XaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVybC5nZXRO
U1VSTCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVJMOnVybAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVO
YW1lczpuc0FycmF5KHBhcmFtTmFtZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlVmFsdWVzOm5zQXJyYXkocGFyYW1WYWx1ZXMpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOm1pbWVUeXBlCkBAIC0xMjEy
LDcgKzEyMTUsNyBAQCBXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhCiAg
ICAgcmVzdWx0LT5zZXRWaWV3KFticmlkZ2Ugdmlld0ZvckphdmFBcHBsZXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6bnNBcnJheShwYXJhbU5hbWVzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpuc0FycmF5KHBhcmFtVmFsdWVz
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVUkw6YmFzZVVSTC5nZXROU1VSTCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRE9NRWxlbWVudDpbRE9NRWxlbWVudCBfd3JhcEVsZW1lbnQ6ZWxl
bWVudF1dKTsgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMTksOCArMzE5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBl
c0Zyb21DbGFzcyhOU00KIC8vIE1heSByZXR1cm4gbmlsIGlmIG5vdCBpbml0aWFsaXplZCB3aXRo
IGEgVVJMLgogLSAoTlNVUkwgKilfVVJMCiB7Ci0gICAgS1VSTCBVUkwgPSBfcHJpdmF0ZS0+bG9h
ZGVyLT51cmwoKTsKLSAgICByZXR1cm4gVVJMLmlzRW1wdHkoKSA/IG5pbCA6IFVSTC5nZXROU1VS
TCgpOworICAgIEtVUkwgdXJsID0gX3ByaXZhdGUtPmxvYWRlci0+dXJsKCk7CisgICAgaWYgKHVy
bC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHVybDsKIH0KIAog
LSAoV2ViQXJjaGl2ZSAqKV9wb3BTdWJmcmFtZUFyY2hpdmVXaXRoTmFtZTooTlNTdHJpbmcgKilm
cmFtZU5hbWUKQEAgLTM4Miw3ICszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNG
cm9tQ2xhc3MoTlNNCiAgICAgX3ByaXZhdGUtPmxvYWRlciA9IGxvYWRlcjsKICAgICBsb2FkZXIt
PnJlZigpOwogICAgICAgICAKLSAgICBMT0coTG9hZGluZywgImNyZWF0aW5nIGRhdGFzb3VyY2Ug
Zm9yICVAIiwgX3ByaXZhdGUtPmxvYWRlci0+cmVxdWVzdCgpLnVybCgpLmdldE5TVVJMKCkpOwor
ICAgIExPRyhMb2FkaW5nLCAiY3JlYXRpbmcgZGF0YXNvdXJjZSBmb3IgJUAiLCBzdGF0aWNfY2Fz
dDxOU1VSTCAqPihfcHJpdmF0ZS0+bG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKTsKICAgICAKICAg
ICArK1dlYkRhdGFTb3VyY2VDb3VudDsKICAgICAKQEAgLTQ3Niw4ICs0NzgsMTAgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChOU1VSTCAqKXVucmVhY2hh
YmxlVVJMCiB7Ci0gICAgS1VSTCBVUkwgPSBfcHJpdmF0ZS0+bG9hZGVyLT51bnJlYWNoYWJsZVVS
TCgpOwotICAgIHJldHVybiBVUkwuaXNFbXB0eSgpID8gbmlsIDogVVJMLmdldE5TVVJMKCk7Cisg
ICAgS1VSTCB1bnJlYWNoYWJsZVVSTCA9IF9wcml2YXRlLT5sb2FkZXItPnVucmVhY2hhYmxlVVJM
KCk7CisgICAgaWYgKHVucmVhY2hhYmxlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gdW5yZWFjaGFibGVVUkw7CiB9CiAKIC0gKFdlYkFyY2hpdmUgKil3ZWJB
cmNoaXZlCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAzMDIzMSkK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAo
QykgMjAwNiwgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTMxMTAsNyArMzExMCw3IEBAIG5vUHJvbWlzZWREYXRhOgogICAg
ICAgICAKICAgICAgICAgS1VSTCBpbWFnZVVSTCA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRy
YWdnaW5nSW1hZ2VVUkwoKTsKICAgICAgICAgQVNTRVJUKCFpbWFnZVVSTC5pc0VtcHR5KCkpOwot
ICAgICAgICBkcmFnZ2luZ0ltYWdlVVJMID0gaW1hZ2VVUkwuZ2V0TlNVUkwoKTsKKyAgICAgICAg
ZHJhZ2dpbmdJbWFnZVVSTCA9IGltYWdlVVJMOwogCiAgICAgICAgIHdyYXBwZXIgPSBbW3NlbGYg
X2RhdGFTb3VyY2VdIF9maWxlV3JhcHBlckZvclVSTDpkcmFnZ2luZ0ltYWdlVVJMXTsKICAgICB9
CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0No
YW5nZUxvZwkocmV2aXNpb24gMzAyMzgpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDA4LTAyLTE0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICAtIHVwZGF0ZWQgZm9yIFdlYkNvcmUgS1VSTCBjaGFuZ2Vz
CisKKyAgICAgICAgKiBNYXJzaGFsbGluZ0hlbHBlcnMuY3BwOgorICAgICAgICAoTWFyc2hhbGxp
bmdIZWxwZXJzOjpCU1RSVG9LVVJMKTogUmVtb3ZlZCBkZXByZWNhdGVkU3RyaW5nIGNhbGwuCisg
ICAgICAgIChNYXJzaGFsbGluZ0hlbHBlcnM6OktVUkxUb0JTVFIpOiBUd2Vha2VkIGZvciBlZmZp
Y2llbmN5LgorICAgICAgICAqIFdlYkNvbnRleHRNZW51Q2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29vZ2xlKTogVXBkYXRlZCBmb3IgS1VSTCBj
aGFuZ2VzLgorICAgICAgICAqIFdlYkRhdGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViRGF0YVNv
dXJjZTo6dW5yZWFjaGFibGVVUkwpOiBEaXR0by4KKyAgICAgICAgKiBXZWJEb3dubG9hZC5jcHA6
CisgICAgICAgIChXZWJEb3dubG9hZDo6aW5pdCk6IERpdHRvLgorICAgICAgICAoV2ViRG93bmxv
YWQ6OmluaXRXaXRoUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkZyYW1lOjpsb2FkRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViRnJhbWU6Omxv
YWRVUkxJbnRvQ2hpbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkZyYW1lOjpvYmplY3RDb250ZW50
VHlwZSk6IERpdHRvLgorICAgICAgICAqIFdlYlJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYlJl
c291cmNlOjppbml0V2l0aERhdGEpOiBEaXR0by4KKyAgICAgICAgKiBXZWJVUkxSZXNwb25zZS5j
cHA6CisgICAgICAgIChXZWJVUkxSZXNwb25zZTo6Y3JlYXRlSW5zdGFuY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYlVSTFJlc3BvbnNlOjppbml0V2l0aFVSTCk6IERpdHRvLgorCiAyMDA4LTAyLTE0
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICAqIFdlYkNo
cm9tZUNsaWVudC5jcHA6IChXZWJDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6
IEZvcmdvdCB0byByZS1hcHBseSByZXZpZXcgY29tbWVudHMgdG8KSW5kZXg6IFdlYktpdC93aW4v
TWFyc2hhbGxpbmdIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL01hcnNoYWxs
aW5nSGVscGVycy5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViS2l0L3dpbi9NYXJzaGFsbGlu
Z0hlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMTIgQEAgQ0ZEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MgTWFyc2hhbGxpbmdIZQogCiBLVVJMIE1hcnNoYWxsaW5nSGVscGVy
czo6QlNUUlRvS1VSTChCU1RSIHVybFN0cikKIHsKLSAgICByZXR1cm4gS1VSTChTdHJpbmcodXJs
U3RyLCBTeXNTdHJpbmdMZW4odXJsU3RyKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICByZXR1
cm4gS1VSTChTdHJpbmcodXJsU3RyLCBTeXNTdHJpbmdMZW4odXJsU3RyKSkpOwogfQogCiBCU1RS
IE1hcnNoYWxsaW5nSGVscGVyczo6S1VSTFRvQlNUUihjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAg
U3RyaW5nIHVybFN0cmluZyh1cmwuc3RyaW5nKCkpOwotICAgIHJldHVybiBTeXNBbGxvY1N0cmlu
Z0xlbih1cmxTdHJpbmcuY2hhcmFjdGVycygpLCB1cmxTdHJpbmcubGVuZ3RoKCkpOworICAgIHJl
dHVybiBTeXNBbGxvY1N0cmluZ0xlbih1cmwuc3RyaW5nKCkuY2hhcmFjdGVycygpLCB1cmwuc3Ry
aW5nKCkubGVuZ3RoKCkpOwogfQogCiBDRlVSTFJlZiBNYXJzaGFsbGluZ0hlbHBlcnM6OlBhdGhT
dHJpbmdUb0ZpbGVDRlVSTFJlZihjb25zdCBTdHJpbmcmIHN0cmluZykKSW5kZXg6IFdlYktpdC93
aW4vV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2Vi
Q29udGV4dE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYktpdC93aW4vV2Vi
Q29udGV4dE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsMTEgKzE1MSwxMSBA
QCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29vCiB7CiAgICAgU3RyaW5n
IHNlYXJjaFN0cmluZyA9IGZyYW1lLT5zZWxlY3RlZFRleHQoKTsKICAgICBzZWFyY2hTdHJpbmcu
c3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBlbmNvZGVkID0gS1VSTDo6
ZW5jb2RlX3N0cmluZyhzZWFyY2hTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBlbmNv
ZGVkLnJlcGxhY2UoRGVwcmVjYXRlZFN0cmluZygiJTIwIiksIERlcHJlY2F0ZWRTdHJpbmcoIisi
KSk7CisgICAgU3RyaW5nIGVuY29kZWQgPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHNl
YXJjaFN0cmluZyk7CisgICAgZW5jb2RlZC5yZXBsYWNlKCIlMjAiLCAiKyIpOwogICAgIAogICAg
IFN0cmluZyB1cmwoImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT0iKTsKLSAgICB1cmwu
YXBwZW5kKFN0cmluZyhlbmNvZGVkKSk7CisgICAgdXJsLmFwcGVuZChlbmNvZGVkKTsKICAgICB1
cmwuYXBwZW5kKCImaWU9VVRGLTgmb2U9VVRGLTgiKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KHVybCk7CkluZGV4OiBXZWJLaXQvd2luL1dlYkRhdGFT
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViRGF0YVNvdXJjZS5jcHAJKHJl
dmlzaW9uIDMwMjMxKQorKysgV2ViS2l0L3dpbi9XZWJEYXRhU291cmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRGF0
YVNvdXJjZToKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHVybCkKIHsKICAgICBLVVJM
IHVucmVhY2hhYmxlVVJMID0gbV9sb2FkZXItPnVucmVhY2hhYmxlVVJMKCk7Ci0gICAgQlN0cmlu
ZyB1cmxTdHJpbmcoKExQT0xFU1RSKXVucmVhY2hhYmxlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51
bmljb2RlKCksIHVucmVhY2hhYmxlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS5sZW5ndGgoKSk7Cisg
ICAgQlN0cmluZyB1cmxTdHJpbmcoKExQT0xFU1RSKXVucmVhY2hhYmxlVVJMLnN0cmluZygpLmNo
YXJhY3RlcnMoKSwgdW5yZWFjaGFibGVVUkwuc3RyaW5nKCkubGVuZ3RoKCkpOwogCiAgICAgKnVy
bCA9IHVybFN0cmluZy5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CkluZGV4OiBXZWJLaXQv
d2luL1dlYkRvd25sb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkRvd25sb2Fk
LmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJLaXQvd2luL1dlYkRvd25sb2FkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIldlYktpdERMTC5oIgogI2lu
Y2x1ZGUgIldlYkRvd25sb2FkLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
RGVmYXVsdERvd25sb2FkRGVsZWdhdGUuaCIKICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBlcnMu
aCIKICNpbmNsdWRlICJXZWJFcnJvci5oIgpAQCAtMTAyLDkgKzEwMyw5IEBAIHZvaWQgV2ViRG93
bmxvYWQ6OmluaXQoUmVzb3VyY2VIYW5kbGUqIGgKICAgICAvLyBIb3dldmVyLCB3ZSBzaG91bGQg
bmV2ZXIgaGl0IHRoYXQgY2FzZQogICAgIGlmICghbV9kb3dubG9hZCkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgTE9HX0VSUk9SKCJXZWJEb3dubG9hZCAtIEZhaWxl
ZCB0byBjcmVhdGUgV2ViRG93bmxvYWQgZnJvbSBleGlzdGluZyBjb25uZWN0aW9uICglcykiLCBy
ZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsKKyAgICAgICAgTE9HX0VS
Uk9SKCJXZWJEb3dubG9hZCAtIEZhaWxlZCB0byBjcmVhdGUgV2ViRG93bmxvYWQgZnJvbSBleGlz
dGluZyBjb25uZWN0aW9uICglcykiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIH0gZWxzZQotICAgICAgICBMT0coRG93bmxvYWQsICJXZWJEb3dubG9hZCAtIENy
ZWF0ZWQgV2ViRG93bmxvYWQgJXAgZnJvbSBleGlzdGluZyBjb25uZWN0aW9uICglcykiLCB0aGlz
LCByZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsKKyAgICAgICAgTE9H
KERvd25sb2FkLCAiV2ViRG93bmxvYWQgLSBDcmVhdGVkIFdlYkRvd25sb2FkICVwIGZyb20gZXhp
c3RpbmcgY29ubmVjdGlvbiAoJXMpIiwgdGhpcywgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKIAogICAgIC8vIFRoZSBDRlVSTERvd25sb2FkIGVpdGhlciBzdGFydHMgc3Vj
Y2Vzc2Z1bGx5IGFuZCByZXRhaW5zIHRoZSBDRlVSTENvbm5lY3Rpb24sIAogICAgIC8vIG9yIGl0
IGZhaWxzIHRvIGNyZWF0aW5nIGFuZCB3ZSBoYXZlIGEgbm93LXVzZWxlc3MgY29ubmVjdGlvbiB3
aXRoIGEgZGFuZ2xpbmcgcmVmLiAKQEAgLTEzMCw3ICsxMzEsNyBAQCB2b2lkIFdlYkRvd25sb2Fk
Ojppbml0KGNvbnN0IEtVUkwmIHVybCwgCiAgICAgQ0ZVUkxEb3dubG9hZFNjaGVkdWxlV2l0aEN1
cnJlbnRNZXNzYWdlUXVldWUobV9kb3dubG9hZC5nZXQoKSk7CiAgICAgQ0ZVUkxEb3dubG9hZFNj
aGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChtX2Rvd25sb2FkLmdldCgpLCBSZXNvdXJjZUhhbmRs
ZTo6bG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogCi0gICAgTE9HKERv
d25sb2FkLCAiV2ViRG93bmxvYWQgLSBJbml0aWFsaXplZCBkb3dubG9hZCBvZiB1cmwgJXMgaW4g
V2ViRG93bmxvYWQgJXAiLCB1cmwuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCksIHRoaXMpOwor
ICAgIExPRyhEb3dubG9hZCwgIldlYkRvd25sb2FkIC0gSW5pdGlhbGl6ZWQgZG93bmxvYWQgb2Yg
dXJsICVzIGluIFdlYkRvd25sb2FkICVwIiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRo
aXMpOwogfQogCiBXZWJEb3dubG9hZDo6fldlYkRvd25sb2FkKCkKQEAgLTIzMiw3ICsyMzMsNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjppCiAgICAgQ0ZVUkxEb3du
bG9hZFNjaGVkdWxlV2l0aEN1cnJlbnRNZXNzYWdlUXVldWUobV9kb3dubG9hZC5nZXQoKSk7CiAg
ICAgQ0ZVUkxEb3dubG9hZFNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChtX2Rvd25sb2FkLmdl
dCgpLCBSZXNvdXJjZUhhbmRsZTo6bG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1v
ZGUpOwogCi0gICAgTE9HKERvd25sb2FkLCAiV2ViRG93bmxvYWQgLSBpbml0V2l0aFJlcXVlc3Qg
Y29tcGxldGUsIHN0YXJ0ZWQgZG93bmxvYWQgb2YgdXJsICVzIiwgd2ViUmVxdWVzdC0+cmVzb3Vy
Y2VSZXF1ZXN0KCkudXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkpOworICAgIExPRyhE
b3dubG9hZCwgIldlYkRvd25sb2FkIC0gaW5pdFdpdGhSZXF1ZXN0IGNvbXBsZXRlLCBzdGFydGVk
IGRvd25sb2FkIG9mIHVybCAlcyIsIHdlYlJlcXVlc3QtPnJlc291cmNlUmVxdWVzdCgpLnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBTX09LOwogfQogCkluZGV4OiBX
ZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkZyYW1l
LmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMwLDggKzYzMCw4IEBAIHZvaWQgV2ViRnJhbWU6OmxvYWREYXRhKFBhc3NS
ZWZQdHI8V2ViQ28KICAgICAgICAgbWltZVR5cGVTdHJpbmcgPSAidGV4dC9odG1sIjsKIAogICAg
IFN0cmluZyBlbmNvZGluZ1N0cmluZyh0ZXh0RW5jb2RpbmdOYW1lLCBTeXNTdHJpbmdMZW4odGV4
dEVuY29kaW5nTmFtZSkpOwotICAgIEtVUkwgYmFzZUtVUkwgPSBEZXByZWNhdGVkU3RyaW5nKChE
ZXByZWNhdGVkQ2hhciopYmFzZVVSTCwgU3lzU3RyaW5nTGVuKGJhc2VVUkwpKTsKLSAgICBLVVJM
IGZhaWxpbmdLVVJMID0gRGVwcmVjYXRlZFN0cmluZygoRGVwcmVjYXRlZENoYXIqKWZhaWxpbmdV
UkwsIFN5c1N0cmluZ0xlbihmYWlsaW5nVVJMKSk7CisgICAgS1VSTCBiYXNlS1VSTChTdHJpbmco
YmFzZVVSTCwgU3lzU3RyaW5nTGVuKGJhc2VVUkwpKSk7CisgICAgS1VSTCBmYWlsaW5nS1VSTChT
dHJpbmcoZmFpbGluZ1VSTCwgU3lzU3RyaW5nTGVuKGZhaWxpbmdVUkwpKSk7CiAKICAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChiYXNlS1VSTCk7CiAgICAgU3Vic3RpdHV0ZURhdGEgc3Vic3Rp
dHV0ZURhdGEoZGF0YSwgbWltZVR5cGVTdHJpbmcsIGVuY29kaW5nU3RyaW5nLCBmYWlsaW5nS1VS
TCk7CkBAIC0xMzY4LDcgKzEzNjgsNyBAQCB2b2lkIFdlYkZyYW1lOjpsb2FkVVJMSW50b0NoaWxk
KGNvbnN0IEtVCiAgICAgICAgICAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIFVSTCB0byBlbnN1cmUg
d2UgZ2V0IGFsbCB0aGUgc2lkZS1lZmZlY3RzLCBzdWNoIGFzCiAgICAgICAgICAgICAvLyBvbkxv
YWQgaGFuZGxlcnMsIG9mIGFueSByZWRpcmVjdHMgdGhhdCBoYXBwZW5lZC4gQW4gZXhhbXBsZSBv
ZiB3aGVyZQogICAgICAgICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgaXMgUmFkYXIgMzIxMzU1Ni4K
LSAgICAgICAgICAgIHVybCA9IGNoaWxkSXRlbS0+b3JpZ2luYWxVUkxTdHJpbmcoKS5kZXByZWNh
dGVkU3RyaW5nKCk7CisgICAgICAgICAgICB1cmwgPSBjaGlsZEl0ZW0tPm9yaWdpbmFsVVJMKCk7
CiAgICAgICAgICAgICAvLyBUaGVzZSBiZWhhdmlvcnMgaW1wbGllZCBieSB0aGVzZSBsb2FkVHlw
ZXMgc2hvdWxkIGFwcGx5IHRvIHRoZSBjaGlsZCBmcmFtZXMKICAgICAgICAgICAgIGNoaWxkTG9h
ZFR5cGUgPSBsb2FkVHlwZTsKIApAQCAtMjQyNyw3ICsyNDI3LDcgQEAgT2JqZWN0Q29udGVudFR5
cGUgV2ViRnJhbWU6Om9iamVjdENvbnRlbgogewogICAgIFN0cmluZyBtaW1lVHlwZSA9IG1pbWVU
eXBlSW47CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgbWltZVR5cGUgPSBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbih1cmwucGF0aCgpLm1pZCh1
cmwucGF0aCgpLmZpbmRSZXYoJy4nKSsxKSk7CisgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24odXJsLnBhdGgoKS5zdWJzdHJpbmcodXJs
LnBhdGgoKS5yZXZlcnNlRmluZCgnLicpICsgMSkpOwogCiAgICAgaWYgKG1pbWVUeXBlLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsgLy8gR28gYWhlYWQgYW5k
IGhvcGUgdGhhdCB3ZSBjYW4gZGlzcGxheSB0aGUgY29udGVudC4KSW5kZXg6IFdlYktpdC93aW4v
V2ViUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViUmVzb3VyY2UuY3Bw
CShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYktpdC93aW4vV2ViUmVzb3VyY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJS
ZXNvdXJjZTo6aQogICAgIC8qIFtpbl0gKi8gQlNUUiBmcmFtZU5hbWUpCiB7CiAgICAgbV9kYXRh
ID0gZGF0YTsKLSAgICBtX3VybCA9IEtVUkwoU3RyaW5nKHVybCkuZGVwcmVjYXRlZFN0cmluZygp
KTsKKyAgICBtX3VybCA9IEtVUkwoU3RyaW5nKHVybCkpOwogICAgIG1fbWltZVR5cGUgPSBTdHJp
bmcobWltZVR5cGUpOwogICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IFN0cmluZyh0ZXh0RW5jb2Rp
bmdOYW1lKTsKICAgICBtX2ZyYW1lTmFtZSA9IFN0cmluZyhmcmFtZU5hbWUpOwpJbmRleDogV2Vi
S2l0L3dpbi9XZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJV
UkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViS2l0L3dpbi9XZWJVUkxSZXNw
b25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBXZWJVUkxSZXNwb25z
ZSogV2ViVVJMUmVzcG9uc2U6OmNyZWF0ZUluCiB7CiAgICAgV2ViVVJMUmVzcG9uc2UqIGluc3Rh
bmNlID0gbmV3IFdlYlVSTFJlc3BvbnNlKCk7CiAgICAgLy8gZmFrZSBhbiBodHRwIHJlc3BvbnNl
IC0gc28gaXQgaGFzIHRoZSBJV2ViSFRUUFVSTFJlc3BvbnNlIGludGVyZmFjZQotICAgIGluc3Rh
bmNlLT5tX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShTdHJpbmcoImh0dHA6Ly8iKS5kZXBy
ZWNhdGVkU3RyaW5nKCksIFN0cmluZygpLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkpOworICAgIGlu
c3RhbmNlLT5tX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShLVVJMKCJodHRwOi8vIiksIFN0
cmluZygpLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkpOwogICAgIGluc3RhbmNlLT5BZGRSZWYoKTsK
ICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZQogICAgIC8qIFtpbl0gKi8gaW50IGV4cGVjdGVk
Q29udGVudExlbmd0aCwKICAgICAvKiBbaW5dICovIEJTVFIgdGV4dEVuY29kaW5nTmFtZSkKIHsK
LSAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShTdHJpbmcodXJsKS5kZXByZWNhdGVk
U3RyaW5nKCksIFN0cmluZyhtaW1lVHlwZSksIGV4cGVjdGVkQ29udGVudExlbmd0aCwgU3RyaW5n
KHRleHRFbmNvZGluZ05hbWUpLCBTdHJpbmcoKSk7CisgICAgbV9yZXNwb25zZSA9IFJlc291cmNl
UmVzcG9uc2UoS1VSTCh1cmwpLCBTdHJpbmcobWltZVR5cGUpLCBleHBlY3RlZENvbnRlbnRMZW5n
dGgsIFN0cmluZyh0ZXh0RW5jb2RpbmdOYW1lKSwgU3RyaW5nKCkpOwogICAgIHJldHVybiBTX09L
OwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>