<?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>22949</bug_id>
          
          <creation_ts>2008-12-20 17:14:12 -0800</creation_ts>
          <short_desc>Refactor HTMLFormElement code</short_desc>
          <delta_ts>2008-12-21 17:46:37 -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>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>20393</blocked>
    
    <blocked>22638</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>103084</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-20 17:14:12 -0800</bug_when>
    <thetext>HTMLFormElement contains useful code regarding GET/POST to url handling, multi-part form handling, boundary string generation etc.

This should be abstracted in a helper class usable by both HTMLFormElement &amp; WMLGoElement - to share the whole fragile form-building logic in a central place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103085</commentid>
    <comment_count>1</comment_count>
      <attachid>26173</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-20 17:19:55 -0800</bug_when>
    <thetext>Created attachment 26173
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103093</commentid>
    <comment_count>2</comment_count>
      <attachid>26173</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-20 18:48:50 -0800</bug_when>
    <thetext>Comment on attachment 26173
Initial patch

Clearing review flag for now. As suggested by Holger, a better approach would be to create a FormDataBuilder class, which encapsulates the Vector&lt;char&gt; instead of having to pass it to several functions, as it is in this patch. Uploading a revised version soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103097</commentid>
    <comment_count>3</comment_count>
      <attachid>26179</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-20 19:39:43 -0800</bug_when>
    <thetext>Created attachment 26179
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103099</commentid>
    <comment_count>4</comment_count>
      <attachid>26179</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-20 20:02:03 -0800</bug_when>
    <thetext>Comment on attachment 26179
Updated patch

Okay, I&apos;ve realized memory is not freed immediately with the current patch.
The simple fix is to move &quot;m_formDataBuilder.clear()&quot; from the beginning of the createFormData() to the end.

Note: the memory is not leaked, it&apos;s just freed too late - upon HTMLFormElement destruction, or if another createFormData() call is invoked. This is not a good idea, the m_encodedData / m_multiPartData fields of FormDataBuilder, aren&apos;t needed anymore after processing, as FormData:appendString() memcpy&apos;s the char ptr, in it&apos;s internal data buffer.

&gt; +PassRefPtr&lt;FormData&gt; HTMLFormElement::createFormData(const CString&amp; boundary)
&gt;  {
&gt; +    m_formDataBuilder.clear();

Move the call

&gt;      result-&gt;appendData(encodedData.data(), encodedData.size());
-&gt; here.
&gt;      return result;
&gt;  }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103119</commentid>
    <comment_count>5</comment_count>
      <attachid>26179</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-21 09:54:14 -0800</bug_when>
    <thetext>Comment on attachment 26179
Updated patch

I think the basic idea on this patch is OK, but making the data used to build form data into a member of HTMLFormElement is a step backward. Your troubles with the lifetime of the contents of m_encodedData and m_multiPartData demonstrate this. It&apos;s just not good to take local data and turn it into a data member.

There are plenty of ways around this. One is to pass the vectors in to all the relevant functions. The other is to make this two classes instead of one.

&gt; + * Copyright (C) 2008 Nikolas Zimmermann &lt;nikolas.zimmermann@torchmobile.com&gt;

When you&apos;re grabbing a bunch of existing code and refactoring it, you should not assume that the original copyright holders are relinquishing copyright on all the code. You need to list the appropriate original authors here too.

&gt; +static inline void appendString(Vector&lt;char&gt;&amp; buffer, const char string)
&gt; +{
&gt; +    buffer.append(string);
&gt; +}

It&apos;s strange to call this function &quot;appendString&quot; since it appends a character, not a string. The &quot;string&quot; in &quot;appendString&quot; is what&apos;s being appended, not what you&apos;re appending to. Maybe we should just name the helper function &quot;append&quot; instead of &quot;appendString&quot;. Also, the type of the argument should be &quot;char&quot;, not &quot;const char&quot;.

&gt; +    static const char s_hexDigits[17] = &quot;0123456789ABCDEF&quot;;
&gt; +
&gt; +    // Same safe characters as Netscape for compatibility.
&gt; +    static const char s_safeCharacters[] = &quot;-._*&quot;;

I don&apos;t think these s_ prefixes add anything; since these are so local I think it reads great to just use normal names. I also think the code read well when the definitions were right where these things were used.

&gt; +    // The RFC 2046 spec says the AlphaNumeric characters plus the following characters

The word &quot;alphanumeric&quot; does not have a capital &quot;n&quot; nor should it be capitalized.

&gt; +    // are legal for boundaries:  &apos;()+_,-./:=?
&gt; +    // However the following characters, though legal, cause some sites to fail:
&gt; +    // (),./:=
&gt; +    // http://bugs.webkit.org/show_bug.cgi?id=13352
&gt; +    static const char s_alphaNumericEncodingMap[64] =
&gt; +    {
&gt; +      0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,

Braces go on the same line as the definition.

Indentation is 4 spaces, not 2 spaces.

&gt; +    bool isPostMethod() const { return m_isPostMethod; }
&gt; +    void setIsPostMethod(bool value) { m_isPostMethod = value; }
&gt; +
&gt; +    bool isMultiPartForm() const { return m_isMultiPartForm; }
&gt; +    void setIsMultiPartForm(bool value) { m_isMultiPartForm = value; }
&gt; +
&gt; +    String encodingType() const { return m_encodingType; }
&gt; +    void setEncodingType(const String&amp; value) { m_encodingType = value; }
&gt; +
&gt; +    String acceptCharset() const { return m_acceptCharset; }
&gt; +    void setAcceptCharset(const String&amp; value) { m_acceptCharset = value; }
&gt; +
&gt; +    void parseEncodingType(const String&amp;);
&gt; +    void parseMethodType(const String&amp;);
&gt; +
&gt; +    TextEncoding dataEncoding(Document*) const;
&gt; +
&gt; +    // Helper functions used by HTMLFormElement/WMLGoElement for multi-part form data
&gt; +    void beginMultiPartHeader(Vector&lt;char&gt;&amp;, const CString&amp; boundary, const CString&amp; name) const;
&gt; +    void addBoundaryToMultiPartHeader(Vector&lt;char&gt;&amp; header, const CString&amp; boundary, bool isLastBoundary = false) const;
&gt; +    void addFileNameToMultiPartHeader(Vector&lt;char&gt;&amp;, const TextEncoding&amp; encoding, const String&amp; fileName) const;
&gt; +    void addContentTypeToMultiPartHeader(Vector&lt;char&gt;&amp;, const CString&amp; mimeType) const;
&gt; +    void finishMultiPartHeader(Vector&lt;char&gt;&amp;) const;
&gt; +
&gt; +    // Functions used by HTMLFormElement/WMLGoElement for non multi-part form data
&gt; +    void addKeyValuePairAsFormData(Vector&lt;char&gt;&amp;, const CString&amp; key, const CString&amp; value) const;
&gt; +
&gt; +    // Encode the input string as HTML form compatible data
&gt; +    void encodeAsFormData(Vector&lt;char&gt;&amp;, const CString&amp;) const;
&gt; +
&gt; +    // Returns a 0-terminated C string in the vector
&gt; +    void generateUniqueBoundaryString(Vector&lt;char&gt;&amp;) const;

Can any of these functions be private? When you make a new class with so many public functions and so few private ones, I worry that the architecture isn&apos;t right.

There&apos;s no need for the name &quot;encoding&quot; for the const TextEncoding&amp; argument.

Do we use the spelling &quot;fileName&quot; or &quot;filename&quot; in WebKit? It looks like you preferred &quot;fileName&quot;, treating it as two separate words, and renamed many things from &quot;fileName&quot; to &quot;filename&quot; but I see &quot;filename&quot; in all sorts of other places in the WebKit code; maybe we should standardize on that.

I originally preferred &quot;fileName&quot;, but now I&apos;m leaning toward &quot;filename&quot;.

I&apos;m going to say review- because I don&apos;t think it&apos;s good to add two Vector members to HTMLFormElement that used to be local variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103124</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-21 10:40:31 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 26179 [review])
&gt; I think the basic idea on this patch is OK, but making the data used to build
&gt; form data into a member of HTMLFormElement is a step backward. Your troubles
&gt; with the lifetime of the contents of m_encodedData and m_multiPartData
&gt; demonstrate this. It&apos;s just not good to take local data and turn it into a data
&gt; member.

Hey Darin,

okay, this is really stupid. This was exactly my previous approach - as seen in &quot;Initial patch&quot;. Holger convinced me this was not the right way to go, and I updated the patch....

Would you prefer a solution, as it&apos;s done in the &apos;Initial patch&apos;?

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103129</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-21 11:09:50 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; okay, this is really stupid. This was exactly my previous approach - as seen in
&gt; &quot;Initial patch&quot;. Holger convinced me this was not the right way to go, and I
&gt; updated the patch....

Sorry, I don&apos;t mean to make you go in circles like this.

&gt; Would you prefer a solution, as it&apos;s done in the &apos;Initial patch&apos;?

Yes, I do prefer that aspect of the initial patch.

Holger might be right that it&apos;s easier to read when the code has fewer arguments. That could be addressed by making those arguments be a class that groups them together or some other similar simplification.

But having state in the DOM tree all the time that has to do only with the encoding process both makes the DOM tree bigger and makes bugs possible that are otherwise impossible. It&apos;s better to make bugs due to leftover state completely impossible, by leaving that state out.

Sorry I haven&apos;t been on IRC with you and Holger so we could all discuss it together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103133</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-21 12:11:13 -0800</bug_when>
    <thetext>Good evening,
 
&gt; Sorry, I don&apos;t mean to make you go in circles like this.
No problem, you couldn&apos;t know it - there are no comments in the bug report that indicate Holgers influence :-)
 
&gt; Yes, I do prefer that aspect of the initial patch.
&gt; 
&gt; Holger might be right that it&apos;s easier to read when the code has fewer
&gt; arguments. That could be addressed by making those arguments be a class that
&gt; groups them together or some other similar simplification.
Okay, I readded the &quot;Vector&lt;char&gt;&amp;&quot; as first parameter to the affected functions, and made them static.
 
&gt; But having state in the DOM tree all the time that has to do only with the
&gt; encoding process both makes the DOM tree bigger and makes bugs possible that
&gt; are otherwise impossible. It&apos;s better to make bugs due to leftover state
&gt; completely impossible, by leaving that state out.
Yes, you&apos;re definately right. It&apos;s better to combine the both patch variations, so after all it wasn&apos;t the worst idea to code both :-)

&gt; 
&gt; Sorry I haven&apos;t been on IRC with you and Holger so we could all discuss it
&gt; together.
No worries, a new patch will be uploaded later.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103143</commentid>
    <comment_count>9</comment_count>
      <attachid>26190</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-21 15:33:25 -0800</bug_when>
    <thetext>Created attachment 26190
Updated patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103148</commentid>
    <comment_count>10</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-12-21 17:42:41 -0800</bug_when>
    <thetext>r+ with comment about incorrect copyright notices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103149</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-21 17:46:37 -0800</bug_when>
    <thetext>Thanks for the review.

As Darins issues appear to be solved - landed in r39430.
Darin, in case you still see issues, please comment and I&apos;ll revert and/or fix them.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26173</attachid>
            <date>2008-12-20 17:19:55 -0800</date>
            <delta_ts>2008-12-20 19:39:43 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>FormRefactor.diff</filename>
            <type>text/plain</type>
            <size>51586</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5NDI1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMDgtMTIt
MjAgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4
ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk0OQorCisgICAg
ICAgIFJlZmFjdG9yIEhUTUxGb3JtRWxlbWVudCB0byBzaGFyZSBhIG1heGltdW0gbGV2ZWwgb2Yg
Y29kZSBiZXR3ZWVuIEhUTUxGb3JtRWxlbWVudCAmIFdNTEdvRWxlbWVudC4KKyAgICAgICAgQ3Jl
YXRlIGEgbmV3IGhlbHBlciBjbGFzcyAnRm9ybUVsZW1lbnREYXRhJyAoc2ltaWxhciB0byBTY3Jp
cHRFbGVtZW50RGF0YSksIHdoaWNoIGlzIGhvbGQgYXMKKyAgICAgICAgbWVtYmVyIHZhcmlhYmxl
IGluIHRob3NlIGNsYXNzZXMuIEFsbCBjb2RlIHJlbGF0aW5nIHRvIEZvcm1EYXRhIGNyZWF0aW9u
IGxpdmVzIGluIGEgY2VudHJhbCBwbGFjZSBub3cuCisKKyAgICAgICAgTm8gZnVuY3Rpb24gY2hh
bmdlcy4KKyAgICAgICAgV01MR29FbGVtZW50IHdpbGwgYmUgY29udmVydGVkIGluIGEgZm9sbG93
LXVwIHBhdGNoLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS5zY29uczoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIGRvbS9Gb3Jt
RWxlbWVudERhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1FbGVtZW50RGF0
YTo6Rm9ybUVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1FbGVtZW50RGF0YTo6
fkZvcm1FbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRWxlbWVudERhdGE6OnBh
cnNlRW5jb2RpbmdUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1FbGVtZW50RGF0YTo6cGFy
c2VNZXRob2RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1FbGVtZW50RGF0YTo6ZGF0YUVu
Y29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRWxlbWVudERhdGE6OmJlZ2luTXVsdGlQYXJ0SGVhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1FbGVtZW50RGF0YTo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRWxlbWVudERhdGE6OmFkZEZpbGVOYW1lVG9NdWx0aVBhcnRI
ZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRhOjphZGRDb250ZW50VHlw
ZVRvTXVsdGlQYXJ0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1FbGVtZW50RGF0YTo6
ZmluaXNoTXVsdGlQYXJ0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1FbGVtZW50RGF0
YTo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRWxl
bWVudERhdGE6OmVuY29kZUFzRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1l
bnREYXRhOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKToKKyAgICAgICAgKiBkb20vRm9y
bUVsZW1lbnREYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRh
Ojppc1Bvc3RNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRhOjpzZXRJ
c1Bvc3RNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRhOjppc011bHRp
UGFydEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRhOjpzZXRJc011bHRp
UGFydEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRhOjplbmNvZGluZ1R5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRhOjpzZXRFbmNvZGluZ1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUVsZW1lbnREYXRhOjphY2NlcHRDaGFyc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1FbGVtZW50RGF0YTo6c2V0QWNjZXB0Q2hhcnNldCk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpIVE1MRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50OjpkYXRhRW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
Ojpmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50OjplbmN0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6ZW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzZXRF
bmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmFjY2VwdENoYXJz
ZXQpOgorCiAyMDA4LTEyLTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IHR5cG8gIkNTU0FmZXJSdWxlVmFsdWUiIHRvICJDU1NBZnRlclJ1bGVWYWx1
ZSIKSW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShy
ZXZpc2lvbiAzOTQyNSkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01ODcs
NiArNTg3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2RvbS9FeGNlcHRpb25C
YXNlLmggXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuY3BwIFwKIAlXZWJDb3JlL2RvbS9F
eGNlcHRpb25Db2RlLmggXAorCVdlYkNvcmUvZG9tL0Zvcm1FbGVtZW50RGF0YS5jcHAgXAorCVdl
YkNvcmUvZG9tL0Zvcm1FbGVtZW50RGF0YS5oIFwKIAlXZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50
LmNwcCBcCiAJV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oIFwKIAlXZWJDb3JlL2RvbS9NYXBw
ZWRBdHRyaWJ1dGUuY3BwIFwKSW5kZXg6IFdlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUucHJvCShyZXZpc2lvbiAzOTQyNSkKKysrIFdlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBA
IC01NzEsNiArNTcxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZG9tL0V2ZW50VGFyZ2V0Tm9kZS5j
cHAgXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmNwcCBcCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGUu
Y3BwIFwKKyAgICBkb20vRm9ybUVsZW1lbnREYXRhLmNwcCBcCiAgICAgZG9tL0tleWJvYXJkRXZl
bnQuY3BwIFwKICAgICBkb20vTWFwcGVkQXR0cmlidXRlLmNwcCBcCiAgICAgZG9tL01lc3NhZ2VD
aGFubmVsLmNwcCBcCkluZGV4OiBXZWJDb3JlLnNjb25zCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUu
c2NvbnMJKHJldmlzaW9uIDM5NDI1KQorKysgV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpA
QCAtOTMsNiArOTMsNyBAQCBzb3VyY2VzWydkb20nXSA9IFsKICAgICAnZG9tL0V2ZW50VGFyZ2V0
Tm9kZS5jcHAnLAogICAgICdkb20vRXhjZXB0aW9uQmFzZS5jcHAnLAogICAgICdkb20vRXhjZXB0
aW9uQ29kZS5jcHAnLAorICAgICdkb20vRm9ybUVsZW1lbnREYXRhLmNwcCcsCiAgICAgJ2RvbS9L
ZXlib2FyZEV2ZW50LmNwcCcsCiAgICAgJ2RvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwJywKICAgICAn
ZG9tL01lc3NhZ2VDaGFubmVsLmNwcCcsCkluZGV4OiBXZWJDb3JlU291cmNlcy5ia2wKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAzOTQyNSkKKysrIFdlYkNvcmVT
b3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDA2LDYgKzQwNiw3IEBAIFRoaXMgZmlsZSBj
b250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgZG9tL0V2ZW50VGFyZ2V0Tm9k
ZS5jcHAKICAgICAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAgICAgIGRvbS9FeGNlcHRp
b25Db2RlLmNwcAorICAgICAgICBkb20vRm9ybUVsZW1lbnREYXRhLmNwcAogICAgICAgICBkb20v
S2V5Ym9hcmRFdmVudC5jcHAKICAgICAgICAgZG9tL01hcHBlZEF0dHJpYnV0ZS5jcHAKICAgICAg
ICAgZG9tL01lc3NhZ2VDaGFubmVsLmNwcApJbmRleDogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlz
aW9uIDM5NDI1KQorKysgV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTExMjk0LDYgKzExMjk0LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxGb3JtRWxlbWVudERhdGEuY3BwIg0KKwkJCQk+
DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIi
DQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQor
CQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KKwkJCQkJLz4NCisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxkb21cRm9ybUVsZW1lbnREYXRhLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cS2V5Ym9hcmRFdmVudC5jcHAiDQogCQkJ
CT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMzk0MjUpCisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDggQEAKIAkJMDgzOTQ3NkQwRUNFNEJENjAw
MDI3MzUwIC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMTBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxlbWVu
dEZhY3RvcnkuaCAqLzsgfTsKIAkJMDg0REJBQTEwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlh
Ymxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODREQkE5RDBFRDM5RDM1MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLzsgfTsKIAkJMDg0
REJBQTIwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0REJBOUUwRUQzOUQzNjAwMzhDMjI2IC8q
IFdNTFZhcmlhYmxlcy5oICovOyB9OworCQkwODVBRjRGRTBFRjg3Q0JFMDAzNTQxQzYgLyogRm9y
bUVsZW1lbnREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NUFGNEZDMEVGODdDQkUwMDM1NDFDNiAvKiBGb3JtRWxlbWVudERhdGEuY3BwICov
OyB9OworCQkwODVBRjRGRjBFRjg3Q0JFMDAzNTQxQzYgLyogRm9ybUVsZW1lbnREYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVBRjRGRDBFRjg3
Q0JFMDAzNTQxQzYgLyogRm9ybUVsZW1lbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg2NUNDRTYwRURERjUxQjAwREY5RUMzIC8qIFdN
TE5vb3BFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NjVDQ0U0MEVEREY1MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5jcHAgKi87
IH07CiAJCTA4NjVDQ0U3MEVEREY1MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NUNDRTUwRURERjUx
QjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmggKi87IH07CiAJCTA4NzQ0QkFBMEVEQjdEODYw
MDRDOUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODc0NEJBOTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25F
dmVudEVsZW1lbnQuY3BwICovOyB9OwpAQCAtNDg1Niw2ICs0ODU4LDggQEAKIAkJMDgyMDNBOUUw
RUQ4QzM1MzAwQjhCNjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MQWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODREQkE5RDBFRDM5RDM1MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFZhcmlhYmxlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NERCQTlFMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxW
YXJpYWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVmFyaWFibGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4NUFGNEZDMEVGODdDQkUwMDM1NDFD
NiAvKiBGb3JtRWxlbWVudERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRm9ybUVsZW1lbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDg1QUY0RkQwRUY4N0NCRTAwMzU0MUM2IC8qIEZvcm1FbGVtZW50RGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtRWxlbWVudERhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg2NUNDRTQwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTE5vb3BFbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NUNDRTUwRURERjUxQjAwREY5
RUMzIC8qIFdNTE5vb3BFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdNTE5vb3BFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzQ0QkE5
MEVEQjdEODYwMDRDOUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxPbkV2ZW50RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNDEzNSw2ICsxNDEzOSw4IEBACiAJCQkJQkM2MEQ4RjEwRDJB
MTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlvbkJhc2UuaCAqLywKIAkJCQk5MzgzMUI1NjBEMDg3RDYw
MDBFNUM5ODQgLyogRXhjZXB0aW9uQ29kZS5jcHAgKi8sCiAJCQkJOTM1RkJDRjEwOUJBMTQzQjAw
RTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLywKKwkJCQkwODVBRjRGQzBFRjg3Q0JFMDAzNTQx
QzYgLyogRm9ybUVsZW1lbnREYXRhLmNwcCAqLywKKwkJCQkwODVBRjRGRDBFRjg3Q0JFMDAzNTQx
QzYgLyogRm9ybUVsZW1lbnREYXRhLmggKi8sCiAJCQkJODUwMzFCMkQwQTQ0RUZDNzAwRjk5MkUw
IC8qIEtleWJvYXJkRXZlbnQuY3BwICovLAogCQkJCTg1MDMxQjJFMEE0NEVGQzcwMEY5OTJFMCAv
KiBLZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJMTRDRjdDMjAwOUY3MTEwNjAwRUIzNjY1IC8qIEtl
eWJvYXJkRXZlbnQuaWRsICovLApAQCAtMTQyOTMsOCArMTQyOTksMTEgQEAKIAkJCQkyOUFBQzUx
RjBFNTM5NjNCMDA4RjlCM0IgLyogQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyOTgwMEM5NTBFNTI0QzhCMDAwMjU1MzYgLyogQWNjZXNzaWJp
bGl0eVRhYmxlUm93LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUM0REU2OTBFQTc1QzFFMDAyM0ND
RDYgLyogQWN0aXZlRE9NT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5MTFDNDBFRjg2
RDQ3MDA5RDBDQUYgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5
MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTZGRTExMjBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE2RkUxMTQwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTQ5RTkxMkFEMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb25M
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURENzA5OUU2NDkyMDA1NkU1ODEgLyogQXBw
ZW5kTm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEY2QkJEMERCNTVDREMwMDFE
Qjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThGNkJCRjBE
QjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZUdyb3VwLmggaW4gSGVhZGVycyAqLywK
QEAgLTE1MjY2LDYgKzE1Mjc1LDcgQEAKIAkJCQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyog
Rm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2RDM4MDk3M0E4RTcwMEQ3NDQ2MyAv
KiBGb3JtRGF0YUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjRFMENFOTIzNEUwMDdF
RjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg1QUY0RkYw
RUY4N0NCRTAwMzU0MUM2IC8qIEZvcm1FbGVtZW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NjU2RDM3M0EwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRDA1Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM1QzQ3NkQwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25FeHRy
YXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTUzODcsNiArMTUzOTcsNyBAQAogCQkJCTFBMkQ3NTNE
MERFNDdGQUIwMEYwQTY0OCAvKiBJY29uRmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
RjE0NTQwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUU5MTFDNTBFRjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkgLyog
SW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTE1Nzk0LDYgKzE1ODA1LDcgQEAKIAkJCQkx
QThGNkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QzRBODA1MDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QzRBODRDMDlENTY0OUQwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1
dGVFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQzcwRUY4NkQ0NzAwOUQwQ0FGIC8q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJGRTdFMTMw
RDMyRkFGNjAwNjZGNEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQjQwNDg0RTBFMDgzRkE4MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ0NjEzQUQwQ0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlhRXJyb3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU5NzgsNiArMTU5OTAsNyBAQAogCQkJCTUxNEM3NjU0MENFOTIzNEUw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3
RjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4Q0ZGNUUxMEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0OUU5MTFDOTBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEFGRDAwQzBEQUYzMzU0MDBGNUY1NUMg
LyogU01JTFRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUZEMDBFMERBRjMzNTUwMEY1RjU1
QyAvKiBTTUlMVGltZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFQzkyNTkwQ0U5
MERCNDAwRjkwMzA4IC8qIFNRTEVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MTc0LDkgKzE2
MTg3LDExIEBACiAJCQkJQjIyMjdBRjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ZpZXdTcGVjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FGNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHWm9vbUFu
ZFBhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJFNEVDOTgwRDAwQzIyQjAwNDMyNjQzIC8qIFNW
R1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQ0IwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VGQzlC
OTBENzhEQzhDMDA3RDI1NzkgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0VDMDFCRTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0MUYxRDIxRjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkUGFnZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRD
YWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkU3NUJFMEVERjhGRDcwMDM2MEUxRCAv
KiBTY3JpcHRDYWxsU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjcwRDcwMDlFQjBDN0Mw
MDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MjEyLDYg
KzE2MjI3LDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVk
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBT
aW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQ0QwRUY4NkQ0NzAwOUQw
Q0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRCNkZB
NkY0MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywK
QEAgLTE2Mjg4LDcgKzE2MzA0LDExIEBACiAJCQkJNTFERjZEN0UwQjkyQTE2RDAwQzJEQzg1IC8q
IFRocmVhZENoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNCMDBDRDYzMzEwMDBGQURB
NzUgLyogVGltZVJhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwNUIyNEQwOThGMUI2QjAw
QzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5MTJBRTBFRkFDOTA2MDA5
RDBDQUYgLyogVGltaW5nRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0ZCQUU4MEI1
MTUyRUQwMDAxRjFENyAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkxMUNF
MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5RTkxMUQwMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OUU5MTFEMjBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNzBBMjI5N0JFMDA1
OEQ3QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE5RDJDNTBDRUE2RjYx
MDBGRjUwN0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzkwQTIy
OTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTYzNDEsNiAr
MTYzNjEsNyBAQAogCQkJCTA4ODA3QjdEMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxQcmV2RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4MDdCN0YwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTFJl
ZnJlc2hFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODgwN0I4MTBFRDcwOUFCMDAzRjY5
NzUgLyogV01MU2V0dmFyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg4MjBCREYwRUY1
RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhD
RDYxQkQwRUQzOTI5QzAwMkRERjUxIC8qIFdNTFRhc2tFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODBGQUUxQjBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODFEODEzMjBFRTBFNzREMDBENzM2ODkgLyogV01MVGltZXJFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE2NDQxLDIwICsxNjQ2Miw2IEBACiAJCQkJMUE1NjlE
MjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMDg4MjBCREYwRUY1RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFGMUQyMUYwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlw
dENhY2hlZFBhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFDNDBFRjg2RDQ3MDA5
RDBDQUYgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFDNTBF
Rjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTQ5RTkxMUM3MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUM5MEVGODZENDcwMDlEMENBRiAvKiBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUNCMEVG
ODZENDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNDlFOTExQ0QwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUNFMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUQwMEVGODZENDcwMDlEMENB
RiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFEMjBF
Rjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk0OUU5MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk0OUU5MTJBRDBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFOTEyQUUwRUZBQzkwNjAwOUQwQ0FGIC8qIFRpbWluZ0Z1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE2NzQwLDkgKzE2NzQ3LDEyIEBACiAJCQkJMjlB
QUM1MjAwRTUzOTYzQjAwOEY5QjNCIC8qIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5l
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTgwMEM5NjBFNTI0QzhCMDAwMjU1MzYgLyogQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzRERTZFMEVBNzVD
NjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlF
OTExQzMwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTEyQUEwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExMTBFNkUxREE3MDBCRjYwODggLyogQW5p
bWF0aW9uQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExMzBFNkUxREE3MDBCRjYw
ODggLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUU5MTJB
QzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOURENjA5OUU2NDkyMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE4RjZCQkMwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2Fj
aGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RjZCQkUwREI1NUNEQzAwMURCNzk0IC8qIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE3MjIzLDYgKzE3MjMz
LDcgQEAKIAkJCQk1MTRDNzY2RjBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTgxMzZEMzkwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY0RjBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURh
dGFTdHJlYW1NYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkwODVBRjRGRTBFRjg3Q0JFMDAzNTQx
QzYgLyogRm9ybUVsZW1lbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NkQzNzNCMEFE
QkE1REUwMEE0NTU0RCAvKiBGb3JtU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDA1Q0VE
MjkwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NUJGMDIyRTA5NzQ4MTYzMDBDNDMxOTYgLyogRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xNzgwNCw2ICsxNzgxNSw3IEBACiAJCQkJOTNFMjI3RTEwQUY1ODlBRDAwRDQ4MzI0
IC8qIE1haW5SZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQThGNkJDNTBE
QjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThDNEE4MDYwOUQ1NjMyNzAwMDNBQzhEIC8qIE1hcHBlZEF0dHJpYnV0ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0OUU5MTFDNjBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCRkU3RTEyMEQzMkZBRjYwMDY2RjREMiAv
KiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQjQwNDg0RDBF
MDgzRkE4MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
RTE5NTkyMTBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0xNzk2Nyw2ICsxNzk3OSw3IEBACiAJCQkJNTE0Qzc2N0UwQ0U5MjNBMTAwN0VG
M0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3
NjU1MENFOTIzNEYwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQThDRkY1RTcwQTE1NUEwNTAwMEE0MjM0IC8qIFJvb3RJbmxpbmVCb3guY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDlFOTExQzgwRUY4NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAwQjBEQUYzMzU0MDBG
NUY1NUMgLyogU01JTFRpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRBRkQwMEQwREFGMzM1
NTAwRjVGNTVDIC8qIFNNSUxUaW1lQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
OTYxMTczMENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xODE1NiwxMCArMTgxNjksMTIgQEAKIAkJCQlCMjIyN0FGMjBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHVmlld1NwZWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBRjUwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFNEVDOTcw
RDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUNFRkM5QkEwRDc4REM4QzAwN0QyNTc5IC8qIFNjaGVkdWxlUGFp
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0UyNEY5NzBEN0NBRjBFMDA3RTA0QzIgLyogU2No
ZWR1bGVQYWlyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNURGRThGNTYwRDE2NDc3QjAwNzZF
OTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VDMDFCRDBD
Mjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxRjFEMjIw
MEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRQYWdlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MTZFNzVDQzBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxNkU3NUJGMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxs
U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBENkYwOUVCMEM3QzAwOUQ4NDY4IC8q
IFNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xODE5Myw2ICsxODIwOCw3
IEBACiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnRE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1QzEwMDMwMDc0RCAvKiBT
aW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTQ5RTkxMUNDMEVGODZENDcw
MDlEMENBRiAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTRCNkZBNkY1MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5t
bSBpbiBTb3VyY2VzICovLApAQCAtMTgyNTgsNiArMTgyNzQsOCBAQAogCQkJCTUxREY2RDgwMEI5
MkExOEUwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5tbSBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYx
M0FGMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFuZ2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMzA5RUE0MDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1lci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0OUU5MTFDRjBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0OUU5MTFEMTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM2MEEyMjk3QkUw
MDU4RDdBRCAvKiBUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzgwQTIy
OTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MTkwOTlFNjQ5MjAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xODMwNyw2ICsxODMyNSw3IEBACiAJCQkJMDg4MDdCN0MwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdN
TFByZXZFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4ODA3QjdFMEVENzA5QUIwMDNG
Njk3NSAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODgwN0I4
MDBFRDcwOUFCMDAzRjY5NzUgLyogV01MU2V0dmFyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwODgyMEJERTBFRjVEMzgxMDA5MDk5QTggLyogV01MVGFibGVFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA4Q0Q2MUJDMEVEMzkyOUMwMDJEREY1MSAvKiBXTUxUYXNrRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODBGQUUxQTBFRUVCREE4MDBBQUNERTkgLyogV01M
VGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4MUQ4MTMxMEVFMEU3NEQw
MEQ3MzY4OSAvKiBXTUxUaW1lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xODM5Niwx
NyArMTg0MTUsNiBAQAogCQkJCTFBNTY5RDIyMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX29i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUQyNDBEN0UyQjgyMDA3QzM5ODMgLyog
cnVudGltZV9yb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFEMDk5RTY0OTIwMDU2
RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4ODIwQkRFMEVG
NUQzODEwMDkwOTlBOCAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NDFGMUQyMjAwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZFBhZ2VEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTQ5RTkxMUMzMEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zv
cm0uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTExQzYwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUU5MTFDODBF
Rjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTQ5RTkxMUNBMEVGODZENDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUU5MTFDQzBFRjg2RDQ3MDA5RDBDQUYgLyog
U2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUU5MTFDRjBF
Rjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk0OUU5MTFEMTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RTkxMkFBMEVGQUM5MDYwMDlEMENBRiAvKiBB
bmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTEyQUMwRUZBQzkwNjAwOUQwQ0FG
IC8qIEFuaW1hdGlvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBkb20vRm9ybUVsZW1l
bnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRm9ybUVsZW1lbnREYXRhLmNwcAkocmV2aXNp
b24gMCkKKysrIGRvbS9Gb3JtRWxlbWVudERhdGEuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPG5p
a29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGb3JtRWxlbWVudERhdGEuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgPGxpbWl0cz4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb3JtRWxlbWVudERhdGE6OkZvcm1FbGVtZW50RGF0
YSgpCisgICAgOiBtX2lzUG9zdE1ldGhvZChmYWxzZSkKKyAgICAsIG1faXNNdWx0aVBhcnRGb3Jt
KGZhbHNlKQorICAgICwgbV9lbmNvZGluZ1R5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZCIpCit7Cit9CisKK0Zvcm1FbGVtZW50RGF0YTo6fkZvcm1FbGVtZW50RGF0YSgpCit7
Cit9CisKK3ZvaWQgRm9ybUVsZW1lbnREYXRhOjpwYXJzZUVuY29kaW5nVHlwZShjb25zdCBTdHJp
bmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuY29udGFpbnMoIm11bHRpcGFydCIsIGZhbHNlKSB8
fCB0eXBlLmNvbnRhaW5zKCJmb3JtLWRhdGEiLCBmYWxzZSkpIHsKKyAgICAgICAgbV9lbmNvZGlu
Z1R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7CisgICAgICAgIG1faXNNdWx0aVBhcnRGb3Jt
ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUuY29udGFpbnMoInRleHQiLCBmYWxzZSkgfHwg
dHlwZS5jb250YWlucygicGxhaW4iLCBmYWxzZSkpIHsKKyAgICAgICAgbV9lbmNvZGluZ1R5cGUg
PSAidGV4dC9wbGFpbiI7CisgICAgICAgIG1faXNNdWx0aVBhcnRGb3JtID0gZmFsc2U7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9lbmNvZGluZ1R5cGUgPSAiYXBwbGljYXRpb24veC13d3ctZm9y
bS11cmxlbmNvZGVkIjsKKyAgICAgICAgbV9pc011bHRpUGFydEZvcm0gPSBmYWxzZTsKKyAgICB9
Cit9CisKK3ZvaWQgRm9ybUVsZW1lbnREYXRhOjpwYXJzZU1ldGhvZFR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQoreworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0eXBlLCAicG9zdCIpKQorICAg
ICAgICBtX2lzUG9zdE1ldGhvZCA9IHRydWU7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UodHlwZSwgImdldCIpKQorICAgICAgICBtX2lzUG9zdE1ldGhvZCA9IGZhbHNlOworfQorCitU
ZXh0RW5jb2RpbmcgRm9ybUVsZW1lbnREYXRhOjpkYXRhRW5jb2RpbmcoRG9jdW1lbnQqIGRvY3Vt
ZW50KSBjb25zdAoreworICAgIFN0cmluZyBhY2NlcHRDaGFyc2V0ID0gbV9hY2NlcHRDaGFyc2V0
OworICAgIGFjY2VwdENoYXJzZXQucmVwbGFjZSgnLCcsICcgJyk7CisKKyAgICBWZWN0b3I8U3Ry
aW5nPiBjaGFyc2V0czsKKyAgICBhY2NlcHRDaGFyc2V0LnNwbGl0KCcgJywgY2hhcnNldHMpOwor
CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGNoYXJzZXRzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnNldHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIGlmICgoZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKml0KSkuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVuY29kaW5nOworICAgIH0KKworICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+
ZW5jb2RpbmcoKTsKKworICAgIHJldHVybiBMYXRpbjFFbmNvZGluZygpOworfQorCisvLyBIZWxw
ZXIgZnVuY3Rpb25zCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nKFZlY3RvcjxjaGFy
PiYgYnVmZmVyLCBjb25zdCBjaGFyIHN0cmluZykKK3sKKyAgICBidWZmZXIuYXBwZW5kKHN0cmlu
Zyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRTdHJpbmcoVmVjdG9yPGNoYXI+JiBi
dWZmZXIsIGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICBidWZmZXIuYXBwZW5kKHN0cmluZywg
c3RybGVuKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nKFZl
Y3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgYnVmZmVy
LmFwcGVuZChzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOworfQorCit2b2lkIEZvcm1F
bGVtZW50RGF0YTo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBoZWFkZXIsIGNv
bnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAg
IGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBib3VuZGFyeSk7CisgICAgYXBw
ZW5kU3RyaW5nKGhlYWRlciwgIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1c
IiIpOworICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIG5hbWUpOworICAgIGFwcGVuZFN0cmluZyho
ZWFkZXIsICciJyk7Cit9CisKK3ZvaWQgRm9ybUVsZW1lbnREYXRhOjphZGRCb3VuZGFyeVRvTXVs
dGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgaGVhZGVyLCBjb25zdCBDU3RyaW5nJiBib3VuZGFy
eSwgYm9vbCBpc0xhc3RCb3VuZGFyeSkgY29uc3QKK3sKKyAgICBhcHBlbmRTdHJpbmcoaGVhZGVy
LCAiLS0iKTsKKyAgICBhcHBlbmRTdHJpbmcoaGVhZGVyLCBib3VuZGFyeSk7CisKKyAgICBpZiAo
aXNMYXN0Qm91bmRhcnkpCisgICAgICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsICItLSIpOworCisg
ICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIlxyXG4iKTsKK30KKwordm9pZCBGb3JtRWxlbWVudERh
dGE6OmFkZEZpbGVOYW1lVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBoZWFkZXIsIGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIGNvbnN0
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29yayBpZiB0aGUgZmlsZW5hbWUgaW5jbHVk
ZXMgYSAiIG1hcmssCisgICAgLy8gb3IgY29udHJvbCBjaGFyYWN0ZXJzIGxpa2UgQ1Igb3IgTEYu
IFRoaXMgYWxzbyBkb2VzIHN0cmFuZ2UKKyAgICAvLyB0aGluZ3MgaWYgdGhlIGZpbGVuYW1lIGlu
Y2x1ZGVzIGNoYXJhY3RlcnMgeW91IGNhbid0IGVuY29kZQorICAgIC8vIGluIHRoZSB3ZWJzaXRl
J3MgY2hhcmFjdGVyIHNldC4KKyAgICBhcHBlbmRTdHJpbmcoaGVhZGVyLCAiOyBmaWxlbmFtZT1c
IiIpOworICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIGVuY29kaW5nLmVuY29kZShmaWxlTmFtZS5j
aGFyYWN0ZXJzKCksIGZpbGVOYW1lLmxlbmd0aCgpLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFi
bGVzKSk7CisgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgJyInKTsKK30KKwordm9pZCBGb3JtRWxl
bWVudERhdGE6OmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9yPGNoYXI+JiBk
YXRhLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICBhcHBlbmRTdHJpbmco
ZGF0YSwgIlxyXG5Db250ZW50LVR5cGU6ICIpOworICAgIGFwcGVuZFN0cmluZyhkYXRhLCBtaW1l
VHlwZSk7Cit9CisKK3ZvaWQgRm9ybUVsZW1lbnREYXRhOjpmaW5pc2hNdWx0aVBhcnRIZWFkZXIo
VmVjdG9yPGNoYXI+JiBoZWFkZXIpIGNvbnN0Cit7CisgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwg
IlxyXG5cclxuIik7Cit9CisKK3ZvaWQgRm9ybUVsZW1lbnREYXRhOjphZGRLZXlWYWx1ZVBhaXJB
c0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgQ1N0cmluZyYga2V5LCBjb25zdCBD
U3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBpZiAoIWRhdGEuaXNFbXB0eSgpKQorICAgICAg
ICBhcHBlbmRTdHJpbmcoZGF0YSwgJyYnKTsKKworICAgIGVuY29kZUFzRm9ybURhdGEoZGF0YSwg
a2V5KTsKKyAgICBhcHBlbmRTdHJpbmcoZGF0YSwgJz0nKTsKKyAgICBlbmNvZGVBc0Zvcm1EYXRh
KGRhdGEsIHZhbHVlKTsKK30KKwordm9pZCBGb3JtRWxlbWVudERhdGE6OmVuY29kZUFzRm9ybURh
dGEoVmVjdG9yPGNoYXI+JiBkYXRhLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpIGNvbnN0Cit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIgc19oZXhEaWdpdHNbMTddID0gIjAxMjM0NTY3ODlBQkNERUYi
OworCisgICAgLy8gU2FtZSBzYWZlIGNoYXJhY3RlcnMgYXMgTmV0c2NhcGUgZm9yIGNvbXBhdGli
aWxpdHkuCisgICAgc3RhdGljIGNvbnN0IGNoYXIgc19zYWZlQ2hhcmFjdGVyc1tdID0gIi0uXyoi
OworCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRt
bCNoLTE3LjEzLjQuMQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtpXTsKKworICAgICAgICBpZiAoKGMgPj0gJ0EnICYm
IGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IChjID49ICcwJyAmJiBjIDw9
ICc5JykgfHwgc3RyY2hyKHNfc2FmZUNoYXJhY3RlcnMsIGMpKQorICAgICAgICAgICAgYXBwZW5k
U3RyaW5nKGRhdGEsIGMpOworICAgICAgICBlbHNlIGlmIChjID09ICcgJykKKyAgICAgICAgICAg
IGFwcGVuZFN0cmluZyhkYXRhLCAnKycpOworICAgICAgICBlbHNlIGlmIChjID09ICdcbicgfHwg
KGMgPT0gJ1xyJyAmJiAoaSArIDEgPj0gbGVuZ3RoIHx8IHN0cmluZy5kYXRhKClbaSArIDFdICE9
ICdcbicpKSkKKyAgICAgICAgICAgIGFwcGVuZFN0cmluZyhkYXRhLCAiJTBEJTBBIik7CisgICAg
ICAgIGVsc2UgaWYgKGMgIT0gJ1xyJykgeworICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGRhdGEs
ICclJyk7CisgICAgICAgICAgICBhcHBlbmRTdHJpbmcoZGF0YSwgc19oZXhEaWdpdHNbYyA+PiA0
XSk7CisgICAgICAgICAgICBhcHBlbmRTdHJpbmcoZGF0YSwgc19oZXhEaWdpdHNbYyAmIDB4Rl0p
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEZvcm1FbGVtZW50RGF0YTo6Z2VuZXJhdGVV
bmlxdWVCb3VuZGFyeVN0cmluZyhWZWN0b3I8Y2hhcj4mIGJvdW5kYXJ5KSBjb25zdAoreworICAg
IC8vIFRoZSBSRkMgMjA0NiBzcGVjIHNheXMgdGhlIEFscGhhTnVtZXJpYyBjaGFyYWN0ZXJzIHBs
dXMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzCisgICAgLy8gYXJlIGxlZ2FsIGZvciBib3VuZGFy
aWVzOiAgJygpK18sLS4vOj0/CisgICAgLy8gSG93ZXZlciB0aGUgZm9sbG93aW5nIGNoYXJhY3Rl
cnMsIHRob3VnaCBsZWdhbCwgY2F1c2Ugc29tZSBzaXRlcyB0byBmYWlsOgorICAgIC8vICgpLC4v
Oj0KKyAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1Mgor
ICAgIHN0YXRpYyBjb25zdCBjaGFyIHNfYWxwaGFOdW1lcmljRW5jb2RpbmdNYXBbNjRdID0KKyAg
ICB7CisgICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4
LAorICAgICAgMHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwK
KyAgICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCisg
ICAgICAweDU5LCAweDVBLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAorICAg
ICAgMHg2NywgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwKKyAgICAg
IDB4NkYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCisgICAgICAw
eDc3LCAweDc4LCAweDc5LCAweDdBLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAorICAgICAgMHgz
NCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHg0MQorICAgICAgLy8gRklY
TUUgPHJkYXI6Ly9wcm9ibGVtLzUyNTI1Nzc+IGdtYWlsIGRvZXMgbm90IGFjY2VwdCBsZWdhbCBj
aGFyYWN0ZXJzIGluIHRoZSBmb3JtIGJvdW5kYXJ5CisgICAgICAvLyBBcyBzdGF0ZWQgYWJvdmUs
IHNvbWUgbGVnYWwgY2hhcmFjdGVycyBjYXVzZSwgc2l0ZXMgdG8gZmFpbC4gU3BlY2lmaWNhbGx5
CisgICAgICAvLyB0aGUgLyBjaGFyYWN0ZXIgd2hpY2ggd2FzIHRoZSBsYXN0IGNoYXJhY3RlciBp
biB0aGUgYWJvdmUgYXJyYXkuIEkgaGF2ZQorICAgICAgLy8gcmVwbGFjZWQgdGhlIGxhc3QgY2hh
cmFjdGVyIHdpdGggYW5vdGhlciBjaGFyYWN0ZXIgYWxyZWFkeSBpbiB0aGUgYXJyYXkKKyAgICAg
IC8vIChub3RpY2UgdGhlIGZpcnN0IGFuZCBsYXN0IHZhbHVlcyBhcmUgYm90aCAweDQxLCBBKS4g
SW5zdGVhZCBvZiBwaWNraW5nCisgICAgICAvLyBhbm90aGVyIHVuaXF1ZSBsZWdhbCBjaGFyYWN0
ZXIgZm9yIGJvdW5kYXJ5IHN0cmluZ3MgdGhhdCwgYmVjYXVzZSBpdCBoYXMKKyAgICAgIC8vIG5l
dmVyIGJlZW4gdGVzdGVkLCBtYXkgb3IgbWF5IG5vdCBicmVhayBvdGhlciBzaXRlcywgSSBzaW1w
bHkKKyAgICAgIC8vIHJlcGxhY2VkIC8gd2l0aCBBLiAgVGhpcyBtZWFucyBBIGlzIHR3aWNlIGFz
IGxpa2VseSB0byBvY2N1ciBpbiBvdXIgYm91bmRhcnkKKyAgICAgIC8vIHN0cmluZ3MgdGhhbiBh
bnkgb3RoZXIgY2hhcmFjdGVyIGJ1dCBJIHRoaW5rIHRoaXMgaXMgZmluZSBmb3IgdGhlIHRpbWUg
YmVpbmcuCisgICAgICAvLyBUaGUgRklYTUUgaGVyZSBpcyBhYm91dCByZXN0b3JpbmcgdGhlIC8g
Y2hhcmFjdGVyIG9uY2UgdGhlIGFmb3JlbWVudGlvbmVkCisgICAgICAvLyByYWRhciBoYXMgYmVl
biByZXNvbHZlZC4KKyAgICB9OworCisgICAgLy8gU3RhcnQgd2l0aCBhbiBpbmZvcm1hdGl2ZSBw
cmVmaXguCisgICAgYXBwZW5kU3RyaW5nKGJvdW5kYXJ5LCAiLS0tLVdlYktpdEZvcm1Cb3VuZGFy
eSIpOworCisgICAgLy8gQXBwZW5kIDE2IHJhbmRvbSA3Yml0IGFzY2lpIEFscGhhTnVtZXJpYyBj
aGFyYWN0ZXJzLgorICAgIFZlY3RvcjxjaGFyPiByYW5kb21CeXRlczsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgcmFuZG9tbmVzcyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6OnJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpOworICAgICAgICByYW5kb21CeXRlcy5h
cHBlbmQoc19hbHBoYU51bWVyaWNFbmNvZGluZ01hcFsocmFuZG9tbmVzcyA+PiAyNCkgJiAweDNG
XSk7CisgICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChzX2FscGhhTnVtZXJpY0VuY29kaW5nTWFw
WyhyYW5kb21uZXNzID4+IDE2KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5k
KHNfYWxwaGFOdW1lcmljRW5jb2RpbmdNYXBbKHJhbmRvbW5lc3MgPj4gOCkgJiAweDNGXSk7Cisg
ICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChzX2FscGhhTnVtZXJpY0VuY29kaW5nTWFwW3JhbmRv
bW5lc3MgJiAweDNGXSk7CisgICAgfQorCisgICAgYm91bmRhcnkuYXBwZW5kKHJhbmRvbUJ5dGVz
KTsKKyAgICBib3VuZGFyeS5hcHBlbmQoMCk7IC8vIEFkZCBhIDAgYXQgdGhlIGVuZCBzbyB3ZSBj
YW4gdXNlIHRoaXMgYXMgYSBDLXN0eWxlIHN0cmluZy4KK30KKworfQpJbmRleDogZG9tL0Zvcm1F
bGVtZW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Gb3JtRWxlbWVudERhdGEuaAkocmV2aXNp
b24gMCkKKysrIGRvbS9Gb3JtRWxlbWVudERhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPG5pa29s
YXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvcm1FbGVtZW50RGF0
YV9oCisjZGVmaW5lIEZvcm1FbGVtZW50RGF0YV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTdHJpbmc7CitjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIFRleHRFbmNvZGluZzsKKworY2xhc3MgRm9ybUVsZW1lbnREYXRhIHsKK3B1
YmxpYzoKKyAgICBGb3JtRWxlbWVudERhdGEoKTsKKyAgICB+Rm9ybUVsZW1lbnREYXRhKCk7CisK
KyAgICBib29sIGlzUG9zdE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQb3N0TWV0aG9kOyB9
CisgICAgdm9pZCBzZXRJc1Bvc3RNZXRob2QoYm9vbCB2YWx1ZSkgeyBtX2lzUG9zdE1ldGhvZCA9
IHZhbHVlOyB9CisKKyAgICBib29sIGlzTXVsdGlQYXJ0Rm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNNdWx0aVBhcnRGb3JtOyB9CisgICAgdm9pZCBzZXRJc011bHRpUGFydEZvcm0oYm9vbCB2YWx1
ZSkgeyBtX2lzTXVsdGlQYXJ0Rm9ybSA9IHZhbHVlOyB9CisKKyAgICBTdHJpbmcgZW5jb2RpbmdU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZ1R5cGU7IH0KKyAgICB2b2lkIHNldEVuY29k
aW5nVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fZW5jb2RpbmdUeXBlID0gdmFsdWU7IH0K
KworICAgIFN0cmluZyBhY2NlcHRDaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9hY2NlcHRDaGFy
c2V0OyB9CisgICAgdm9pZCBzZXRBY2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpIHsg
bV9hY2NlcHRDaGFyc2V0ID0gdmFsdWU7IH0KKworICAgIHZvaWQgcGFyc2VFbmNvZGluZ1R5cGUo
Y29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBwYXJzZU1ldGhvZFR5cGUoY29uc3QgU3RyaW5nJik7
CisKKyAgICBUZXh0RW5jb2RpbmcgZGF0YUVuY29kaW5nKERvY3VtZW50KikgY29uc3Q7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50L1dNTEdvRWxlbWVu
dCBmb3IgbXVsdGktcGFydCBmb3JtIGRhdGEKKyAgICB2b2lkIGJlZ2luTXVsdGlQYXJ0SGVhZGVy
KFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBjb25zdCBDU3RyaW5nJiBu
YW1lKSBjb25zdDsKKyAgICB2b2lkIGFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoVmVjdG9y
PGNoYXI+JiBoZWFkZXIsIGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGlzTGFzdEJvdW5k
YXJ5ID0gZmFsc2UpIGNvbnN0OworICAgIHZvaWQgYWRkRmlsZU5hbWVUb011bHRpUGFydEhlYWRl
cihWZWN0b3I8Y2hhcj4mLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJp
bmcmIGZpbGVOYW1lKSBjb25zdDsKKyAgICB2b2lkIGFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRI
ZWFkZXIoVmVjdG9yPGNoYXI+JiwgY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAg
IHZvaWQgZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYpIGNvbnN0OworCisgICAg
Ly8gRnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50L1dNTEdvRWxlbWVudCBmb3Igbm9u
IG11bHRpLXBhcnQgZm9ybSBkYXRhCisgICAgdm9pZCBhZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRh
KFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGtleSwgY29uc3QgQ1N0cmluZyYgdmFsdWUp
IGNvbnN0OworCisgICAgLy8gRW5jb2RlIHRoZSBpbnB1dCBzdHJpbmcgYXMgSFRNTCBmb3JtIGNv
bXBhdGlibGUgZGF0YQorICAgIHZvaWQgZW5jb2RlQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBj
b25zdCBDU3RyaW5nJikgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIGEgMC10ZXJtaW5hdGVkIEMg
c3RyaW5nIGluIHRoZSB2ZWN0b3IKKyAgICB2b2lkIGdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJp
bmcoVmVjdG9yPGNoYXI+JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzUG9zdE1l
dGhvZDsKKyAgICBib29sIG1faXNNdWx0aVBhcnRGb3JtOworCisgICAgU3RyaW5nIG1fZW5jb2Rp
bmdUeXBlOworICAgIFN0cmluZyBtX2FjY2VwdENoYXJzZXQ7Cit9OworCit9CisKKyNlbmRpZgpJ
bmRleDogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAkocmV2aXNpb24gMzk0MjUpCisrKyBodG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE1ICs2MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGhleERp
Z2l0c1sxN10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7Ci0KIEhUTUxGb3JtRWxlbWVudDo6SFRNTEZv
cm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAg
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2VsZW1lbnRBbGlhc2VzKDAp
CiAgICAgLCBjb2xsZWN0aW9uSW5mbygwKQotICAgICwgbV9lbmN0eXBlKCJhcHBsaWNhdGlvbi94
LXd3dy1mb3JtLXVybGVuY29kZWQiKQotICAgICwgbV9wb3N0KGZhbHNlKQotICAgICwgbV9tdWx0
aXBhcnQoZmFsc2UpCiAgICAgLCBtX2F1dG9jb21wbGV0ZSh0cnVlKQogICAgICwgbV9pbnN1Ym1p
dChmYWxzZSkKICAgICAsIG1fZG9pbmdzdWJtaXQoZmFsc2UpCkBAIC0xNjEsNTkgKzE1NiwxNSBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0Q2xpY2soRXZlbnQqCiAgICAgICAgIHByZXBh
cmVTdWJtaXQoZXZlbnQpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmcoVmVjdG9yPGNo
YXI+JiBidWZmZXIsIGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAgICBidWZmZXIuYXBwZW5kKHN0
cmluZywgc3RybGVuKHN0cmluZykpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmcoVmVj
dG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKLXsKLSAgICBidWZmZXIu
YXBwZW5kKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGFwcGVuZEVuY29kZWRTdHJpbmcoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IENTdHJpbmcm
IHN0cmluZykKLXsKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9pbnRlcmFjdC9m
b3Jtcy5odG1sI2gtMTcuMTMuNC4xCi0gICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgYyA9IHN0cmluZy5kYXRhKClbaV07Ci0KLSAgICAgICAgLy8gU2FtZSBzYWZlIGNoYXJh
Y3RlcnMgYXMgTmV0c2NhcGUgZm9yIGNvbXBhdGliaWxpdHkuCi0gICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyIHNhZmVbXSA9ICItLl8qIjsKLSAgICAgICAgaWYgKChjID49ICdBJyAmJiBjIDw9ICda
JykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8
IHN0cmNocihzYWZlLCBjKSkKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoYyk7Ci0gICAgICAg
IGVsc2UgaWYgKGMgPT0gJyAnKQotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnKycpOwotICAg
ICAgICBlbHNlIGlmIChjID09ICdcbicgfHwgKGMgPT0gJ1xyJyAmJiAoaSArIDEgPj0gbGVuZ3Ro
IHx8IHN0cmluZy5kYXRhKClbaSArIDFdICE9ICdcbicpKSkKLSAgICAgICAgICAgIGFwcGVuZFN0
cmluZyhidWZmZXIsICIlMEQlMEEiKTsKLSAgICAgICAgZWxzZSBpZiAoYyAhPSAnXHInKSB7Ci0g
ICAgICAgICAgICBidWZmZXIuYXBwZW5kKCclJyk7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5k
KGhleERpZ2l0c1tjID4+IDRdKTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoaGV4RGlnaXRz
W2MgJiAweEZdKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogVGV4dEVuY29kaW5nIEhUTUxGb3Jt
RWxlbWVudDo6ZGF0YUVuY29kaW5nKCkgY29uc3QKIHsKICAgICBpZiAoaXNNYWlsdG9Gb3JtKCkp
CiAgICAgICAgIHJldHVybiBVVEY4RW5jb2RpbmcoKTsKIAotICAgIFRleHRFbmNvZGluZyBlbmNv
ZGluZzsKLSAgICBTdHJpbmcgc3RyID0gbV9hY2NlcHRjaGFyc2V0OwotICAgIHN0ci5yZXBsYWNl
KCcsJywgJyAnKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBjaGFyc2V0czsKLSAgICBzdHIuc3BsaXQo
JyAnLCBjaGFyc2V0cyk7Ci0gICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGNoYXJzZXRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gY2hhcnNldHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAoKGVu
Y29kaW5nID0gVGV4dEVuY29kaW5nKCppdCkpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVy
biBlbmNvZGluZzsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkK
LSAgICAgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKLSAgICByZXR1cm4g
TGF0aW4xRW5jb2RpbmcoKTsKKyAgICByZXR1cm4gbV9kYXRhLmRhdGFFbmNvZGluZyhkb2N1bWVu
dCgpKTsKIH0KIAotUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50Ojpmb3JtRGF0
YShjb25zdCBjaGFyKiBib3VuZGFyeSkgY29uc3QKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxG
b3JtRWxlbWVudDo6Zm9ybURhdGEoY29uc3QgQ1N0cmluZyYgYm91bmRhcnkpIGNvbnN0CiB7CiAg
ICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9
IGRhdGFFbmNvZGluZygpLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKTsKQEAgLTIyNCw3NCAr
MTc1LDU0IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Zm8KICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKICAg
ICAgICAgRm9ybURhdGFMaXN0IGxpc3QoZW5jb2RpbmcpOwogCi0gICAgICAgIGlmICghY29udHJv
bC0+ZGlzYWJsZWQoKSAmJiBjb250cm9sLT5hcHBlbmRGb3JtRGF0YShsaXN0LCBtX211bHRpcGFy
dCkpIHsKKyAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpICYmIGNvbnRyb2wtPmFwcGVu
ZEZvcm1EYXRhKGxpc3QsIG1fZGF0YS5pc011bHRpUGFydEZvcm0oKSkpIHsKICAgICAgICAgICAg
IHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gbGlzdC5saXN0KCkuc2l6ZSgpOwogICAgICAgICAg
ICAgQVNTRVJUKGZvcm1EYXRhTGlzdFNpemUgJSAyID09IDApOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBmb3JtRGF0YUxpc3RTaXplOyBqICs9IDIpIHsKICAgICAgICAgICAg
ICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtleSA9IGxpc3QubGlzdCgpW2pdOwogICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBsaXN0Lmxpc3Qo
KVtqICsgMV07Ci0gICAgICAgICAgICAgICAgaWYgKCFtX211bHRpcGFydCkgeworICAgICAgICAg
ICAgICAgIGlmICghbV9kYXRhLmlzTXVsdGlQYXJ0Rm9ybSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0
YSBlbGVtZW50LgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBn
b29kIHJ1bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93PwogICAgICAgICAgICAgICAgICAgICBpZiAo
ZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS5kYXRhKCkgPT0gImlzaW5kZXgiKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kRW5jb2RlZFN0cmluZyhlbmNvZGVkRGF0YSwgdmFsdWUu
ZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVuY29kZWREYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmNvZGVkRGF0YS5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZEVuY29kZWRTdHJpbmcoZW5jb2RlZERhdGEsIGtleS5kYXRhKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZW5jb2RlZERhdGEuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRFbmNvZGVkU3RyaW5nKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEuZW5jb2Rl
QXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgdmFsdWUuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLmFkZEtleVZhbHVlUGFpckFz
Rm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRl
cjsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIi0tIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIGJvdW5kYXJ5KTsKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIlxyXG4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0
YTsgbmFtZT1cIiIpOwotICAgICAgICAgICAgICAgICAgICBoZWFkZXIuYXBwZW5kKGtleS5kYXRh
KCkuZGF0YSgpLCBrZXkuZGF0YSgpLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGVh
ZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAgICAgICAgICBtX2RhdGEuYmVnaW5NdWx0aVBh
cnRIZWFkZXIoaGVhZGVyLCBib3VuZGFyeSwga2V5LmRhdGEoKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gaWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0bwot
ICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBmaWxlbmFtZQorICAgICAgICAgICAg
ICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVk
IHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5m
aWxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZh
bHVlLmZpbGUoKS0+cGF0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVu
YW1lID0gdmFsdWUuZmlsZSgpLT5maWxlTmFtZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgpLT5maWxlTmFtZSgpOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBp
ZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9h
ZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2Uo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ2VuZXJhdGVkRmls
ZW5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlRmls
ZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRG
aWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVuYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZ2VuZXJhdGVkRmlsZW5hbWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+c2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBs
b2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJhdGVkRmlsZU5hbWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kYXRhLmFkZEZpbGVOYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVh
ZGVyLCBlbmNvZGluZywgZmlsZU5hbWUpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyB3b24ndCB3b3JrIGlmIHRoZSBmaWxlbmFtZSBpbmNsdWRlcyBhICIgbWFyaywK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBsaWtlIENS
IG9yIExGLiBUaGlzIGFsc28gZG9lcyBzdHJhbmdlCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGluZ3MgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGNoYXJhY3RlcnMgeW91IGNhbid0IGVu
Y29kZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0
ZXIgc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIjsg
ZmlsZW5hbWU9XCIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhoZWFk
ZXIsIGVuY29kaW5nLmVuY29kZShmaWxlbmFtZS5jaGFyYWN0ZXJzKCksIGZpbGVuYW1lLmxlbmd0
aCgpLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBoZWFkZXIuYXBwZW5kKCciJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZmlsZW5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBNSU1FVHlwZVJlZ2lzdHJ5IGZ1bmN0aW9uJ3MgbmFtZSBtYWtlcyBpdCBzb3VuZCBs
aWtlIGl0IHRha2VzIGEgcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3Qg
anVzdCBhIGJhc2VuYW1lLiBCdXQgZmlsZW5hbWUgaXMgbm90IHRoZSBwYXRoLiBCdXQgbm90ZSB0
aGF0IGl0J3Mgbm90IHNhZmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0
IHVzZSBwYXRoIGluc3RlYWQgc2luY2UgaW4gdGhlIGdlbmVyYXRlZC1maWxlIGNhc2UgaXQgd2ls
bCBub3QgcmVmbGVjdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNSU1FIHR5
cGUgb2YgdGhlIGdlbmVyYXRlZCBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxl
bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRl
ciwgIlxyXG5Db250ZW50LVR5cGU6ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRTdHJpbmcoaGVhZGVyLCBtaW1lVHlwZS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtaW1l
VHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlTmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS5hZGRDb250ZW50VHlwZVRvTXVsdGlQ
YXJ0SGVhZGVyKGhlYWRlciwgbWltZVR5cGUubGF0aW4xKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kU3RyaW5nKGhlYWRlciwgIlxyXG5cclxuIik7CisgICAgICAgICAgICAgICAgICAgIG1fZGF0
YS5maW5pc2hNdWx0aVBhcnRIZWFkZXIoaGVhZGVyKTsKIAotICAgICAgICAgICAgICAgICAgICAv
LyBhcHBlbmQgYm9keQorICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgYm9keQogICAgICAg
ICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNp
emUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5k
YXRhKCkubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERh
dGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwpAQCAtMzAzLDMxICsyMzQsMTMgQEAg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50OjpmbwogICAgICAgICB9CiAgICAg
fQogCi0KLSAgICBpZiAobV9tdWx0aXBhcnQpIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29k
ZWREYXRhLCAiLS0iKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29kZWREYXRhLCBib3VuZGFy
eSk7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhlbmNvZGVkRGF0YSwgIi0tXHJcbiIpOwotICAgIH0K
KyAgICBpZiAobV9kYXRhLmlzTXVsdGlQYXJ0Rm9ybSgpKQorICAgICAgICBtX2RhdGEuYWRkQm91
bmRhcnlUb011bHRpUGFydEhlYWRlcihlbmNvZGVkRGF0YSwgYm91bmRhcnksIHRydWUpOwogCiAg
ICAgcmVzdWx0LT5hcHBlbmREYXRhKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6
ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFy
c2VFbmN0eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBpZih0eXBlLmNvbnRhaW5zKCJt
dWx0aXBhcnQiLCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygiZm9ybS1kYXRhIiwgZmFsc2UpKSB7
Ci0gICAgICAgIG1fZW5jdHlwZSA9ICJtdWx0aXBhcnQvZm9ybS1kYXRhIjsKLSAgICAgICAgbV9t
dWx0aXBhcnQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAodHlwZS5jb250YWlucygidGV4dCIsIGZh
bHNlKSB8fCB0eXBlLmNvbnRhaW5zKCJwbGFpbiIsIGZhbHNlKSkgewotICAgICAgICBtX2VuY3R5
cGUgPSAidGV4dC9wbGFpbiI7Ci0gICAgICAgIG1fbXVsdGlwYXJ0ID0gZmFsc2U7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9lbmN0eXBlID0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5j
b2RlZCI7Ci0gICAgICAgIG1fbXVsdGlwYXJ0ID0gZmFsc2U7Ci0gICAgfQotfQotCiBib29sIEhU
TUxGb3JtRWxlbWVudDo6aXNNYWlsdG9Gb3JtKCkgY29uc3QKIHsKICAgICByZXR1cm4gcHJvdG9j
b2xJcyhtX3VybCwgIm1haWx0byIpOwpAQCAtMzU4LDU2ICsyNzEsNiBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0KCkKICAgICBzdWJtaXQoMCwgZmFsc2UpOwogfQogCi0vLyBSZXR1cm5z
IGEgMC10ZXJtaW5hdGVkIEMgc3RyaW5nIGluIHRoZSB2ZWN0b3IuCi1zdGF0aWMgdm9pZCBnZXRV
bmlxdWVCb3VuZGFyeVN0cmluZyhWZWN0b3I8Y2hhcj4mIGJvdW5kYXJ5KQotewotICAgIC8vIFRo
ZSBSRkMgMjA0NiBzcGVjIHNheXMgdGhlIEFscGhhTnVtZXJpYyBjaGFyYWN0ZXJzIHBsdXMgdGhl
IGZvbGxvd2luZyBjaGFyYWN0ZXJzCi0gICAgLy8gYXJlIGxlZ2FsIGZvciBib3VuZGFyaWVzOiAg
JygpK18sLS4vOj0/Ci0gICAgLy8gSG93ZXZlciB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMsIHRo
b3VnaCBsZWdhbCwgY2F1c2Ugc29tZSBzaXRlcyB0byBmYWlsOgotICAgIC8vICgpLC4vOj0KLSAg
ICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1MgotICAgIHN0
YXRpYyBjb25zdCBjaGFyIEFscGhhTnVtZXJpY0VuY01hcFs2NF0gPQotICAgIHsKLSAgICAgIDB4
NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsCi0gICAgICAweDQ5
LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUwLAotICAgICAgMHg1MSwg
MHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKLSAgICAgIDB4NTksIDB4
NUEsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsCi0gICAgICAweDY3LCAweDY4
LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLAotICAgICAgMHg2RiwgMHg3MCwg
MHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwKLSAgICAgIDB4NzcsIDB4NzgsIDB4
NzksIDB4N0EsIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsCi0gICAgICAweDM0LCAweDM1LCAweDM2
LCAweDM3LCAweDM4LCAweDM5LCAweDJCLCAweDQxCi0gICAgICAvLyBGSVhNRSA8cmRhcjovL3By
b2JsZW0vNTI1MjU3Nz4gZ21haWwgZG9lcyBub3QgYWNjZXB0IGxlZ2FsIGNoYXJhY3RlcnMgaW4g
dGhlIGZvcm0gYm91bmRhcnkKLSAgICAgIC8vIEFzIHN0YXRlZCBhYm92ZSwgc29tZSBsZWdhbCBj
aGFyYWN0ZXJzIGNhdXNlLCBzaXRlcyB0byBmYWlsLiBTcGVjaWZpY2FsbHkKLSAgICAgIC8vIHRo
ZSAvIGNoYXJhY3RlciB3aGljaCB3YXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBhYm92ZSBh
cnJheS4gSSBoYXZlCi0gICAgICAvLyByZXBsYWNlZCB0aGUgbGFzdCBjaGFyYWN0ZXIgd2l0aCBh
bm90aGVyIGNoYXJhY3RlciBhbHJlYWR5IGluIHRoZSBhcnJheQotICAgICAgLy8gKG5vdGljZSB0
aGUgZmlyc3QgYW5kIGxhc3QgdmFsdWVzIGFyZSBib3RoIDB4NDEsIEEpLiBJbnN0ZWFkIG9mIHBp
Y2tpbmcKLSAgICAgIC8vIGFub3RoZXIgdW5pcXVlIGxlZ2FsIGNoYXJhY3RlciBmb3IgYm91bmRh
cnkgc3RyaW5ncyB0aGF0LCBiZWNhdXNlIGl0IGhhcwotICAgICAgLy8gbmV2ZXIgYmVlbiB0ZXN0
ZWQsIG1heSBvciBtYXkgbm90IGJyZWFrIG90aGVyIHNpdGVzLCBJIHNpbXBseQotICAgICAgLy8g
cmVwbGFjZWQgLyB3aXRoIEEuICBUaGlzIG1lYW5zIEEgaXMgdHdpY2UgYXMgbGlrZWx5IHRvIG9j
Y3VyIGluIG91ciBib3VuZGFyeQotICAgICAgLy8gc3RyaW5ncyB0aGFuIGFueSBvdGhlciBjaGFy
YWN0ZXIgYnV0IEkgdGhpbmsgdGhpcyBpcyBmaW5lIGZvciB0aGUgdGltZSBiZWluZy4KLSAgICAg
IC8vIFRoZSBGSVhNRSBoZXJlIGlzIGFib3V0IHJlc3RvcmluZyB0aGUgLyBjaGFyYWN0ZXIgb25j
ZSB0aGUgYWZvcmVtZW50aW9uZWQKLSAgICAgIC8vIHJhZGFyIGhhcyBiZWVuIHJlc29sdmVkLgot
ICAgIH07Ci0KLSAgICAvLyBTdGFydCB3aXRoIGFuIGluZm9ybWF0aXZlIHByZWZpeC4KLSAgICBj
b25zdCBjaGFyIGJvdW5kYXJ5UHJlZml4W10gPSAiLS0tLVdlYktpdEZvcm1Cb3VuZGFyeSI7Ci0g
ICAgYm91bmRhcnkuYXBwZW5kKGJvdW5kYXJ5UHJlZml4LCBzdHJsZW4oYm91bmRhcnlQcmVmaXgp
KTsKLQotICAgIC8vIEFwcGVuZCAxNiByYW5kb20gN2JpdCBhc2NpaSBBbHBoYU51bWVyaWMgY2hh
cmFjdGVycy4KLSAgICBWZWN0b3I8Y2hhcj4gcmFuZG9tQnl0ZXM7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICB1bnNpZ25lZCByYW5kb21uZXNzID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFdURjo6cmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSk7Ci0gICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChB
bHBoYU51bWVyaWNFbmNNYXBbKHJhbmRvbW5lc3MgPj4gMjQpICYgMHgzRl0pOwotICAgICAgICBy
YW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21uZXNzID4+IDE2KSAm
IDB4M0ZdKTsKLSAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFso
cmFuZG9tbmVzcyA+PiA4KSAmIDB4M0ZdKTsKLSAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFs
cGhhTnVtZXJpY0VuY01hcFtyYW5kb21uZXNzICYgMHgzRl0pOwotICAgIH0KLQotICAgIGJvdW5k
YXJ5LmFwcGVuZChyYW5kb21CeXRlcyk7Ci0gICAgYm91bmRhcnkuYXBwZW5kKDApOyAvLyBBZGQg
YSAwIGF0IHRoZSBlbmQgc28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgQy1zdHlsZSBzdHJpbmcuCi19
Ci0KIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW50LCBib29sIGFjdGl2
YXRlU3VibWl0QnV0dG9uKQogewogICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50KCktPnZp
ZXcoKTsKQEAgLTQ1MSwzNCArMzE0LDM0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQo
RXZlbnQqIGV2ZW4KICAgICBpZiAobV91cmwuaXNFbXB0eSgpKQogICAgICAgICBtX3VybCA9IGRv
Y3VtZW50KCktPnVybCgpLnN0cmluZygpOwogCi0gICAgaWYgKG1fcG9zdCkgewotICAgICAgICBp
ZiAobV9tdWx0aXBhcnQgJiYgaXNNYWlsdG9Gb3JtKCkpIHsKKyAgICBpZiAobV9kYXRhLmlzUG9z
dE1ldGhvZCgpKSB7CisgICAgICAgIGlmIChtX2RhdGEuaXNNdWx0aVBhcnRGb3JtKCkgJiYgaXNN
YWlsdG9Gb3JtKCkpIHsKICAgICAgICAgICAgIHNldEVuY3R5cGUoImFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZCIpOwotICAgICAgICAgICAgbV9tdWx0aXBhcnQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9kYXRhLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICghbV9tdWx0aXBhcnQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxGb3JtRGF0
YT4gZGF0YSA9IGZvcm1EYXRhKDApOworICAgICAgICBpZiAoIW1fZGF0YS5pc011bHRpUGFydEZv
cm0oKSkgeworICAgICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBkYXRhID0gZm9ybURhdGEoQ1N0
cmluZygpKTsKICAgICAgICAgICAgIGlmIChpc01haWx0b0Zvcm0oKSkgewogICAgICAgICAgICAg
ICAgIFN0cmluZyBib2R5ID0gZGF0YS0+ZmxhdHRlblRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVuY3R5cGUoKSwgInRleHQvcGxhaW4iKSkgeworICAg
ICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtX2RhdGEuZW5jb2RpbmdUeXBlKCks
ICJ0ZXh0L3BsYWluIikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVudGlvbiBzZWVt
cyB0byBiZSB0byBkZWNvZGUsIGFuZCBzLyYvXHJcbi8uIEFsc28sIHNwYWNlcyBhcmUgZW5jb2Rl
ZCBhcyAlMjAuCiAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXMoYm9keS5yZXBsYWNlKCcmJywgIlxyXG4iKS5yZXBsYWNlKCcrJywgJyAnKSArICJcclxu
Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBib2R5
RGF0YTsKLSAgICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcoYm9keURhdGEsICJib2R5PSIpOwot
ICAgICAgICAgICAgICAgIGFwcGVuZEVuY29kZWRTdHJpbmcoYm9keURhdGEsIGJvZHkudXRmOCgp
KTsKKyAgICAgICAgICAgICAgICBib2R5RGF0YS5hcHBlbmQoImJvZHk9IiwgNSk7CisgICAgICAg
ICAgICAgICAgbV9kYXRhLmVuY29kZUFzRm9ybURhdGEoYm9keURhdGEsIGJvZHkudXRmOCgpKTsK
ICAgICAgICAgICAgICAgICBkYXRhID0gRm9ybURhdGE6OmNyZWF0ZShTdHJpbmcoYm9keURhdGEu
ZGF0YSgpLCBib2R5RGF0YS5zaXplKCkpLnJlcGxhY2UoJysnLCAiJTIwIikubGF0aW4xKCkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQ
T1NUIiwgbV91cmwsIGRhdGEsIG1fdGFyZ2V0LCBlbmN0eXBlKCksIFN0cmluZygpLCBldmVudCk7
CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwg
ZGF0YSwgbV90YXJnZXQsIG1fZGF0YS5lbmNvZGluZ1R5cGUoKSwgU3RyaW5nKCksIGV2ZW50KTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKLSAg
ICAgICAgICAgIGdldFVuaXF1ZUJvdW5kYXJ5U3RyaW5nKGJvdW5kYXJ5KTsKLSAgICAgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1fdXJsLCBmb3JtRGF0YShib3Vu
ZGFyeS5kYXRhKCkpLCBtX3RhcmdldCwgZW5jdHlwZSgpLCBib3VuZGFyeS5kYXRhKCksIGV2ZW50
KTsKKyAgICAgICAgICAgIG1fZGF0YS5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKGJvdW5k
YXJ5KTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiUE9TVCIsIG1f
dXJsLCBmb3JtRGF0YShib3VuZGFyeS5kYXRhKCkpLCBtX3RhcmdldCwgbV9kYXRhLmVuY29kaW5n
VHlwZSgpLCBib3VuZGFyeS5kYXRhKCksIGV2ZW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIG1fbXVsdGlwYXJ0ID0gZmFsc2U7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+
c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGZvcm1EYXRhKDApLCBtX3RhcmdldCwgU3RyaW5nKCks
IFN0cmluZygpLCBldmVudCk7CisgICAgICAgIG1fZGF0YS5zZXRJc011bHRpUGFydEZvcm0oZmFs
c2UpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1fdXJsLCBm
b3JtRGF0YShDU3RyaW5nKCkpLCBtX3RhcmdldCwgU3RyaW5nKCksIFN0cmluZygpLCBldmVudCk7
CiAgICAgfQogCiAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbikKQEAgLTUxNCwxNyArMzc3LDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICAgICAgbV91cmwgPSBwYXJzZVVSTChhdHRyLT52YWx1
ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikKICAgICAgICAg
bV90YXJnZXQgPSBhdHRyLT52YWx1ZSgpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBt
ZXRob2RBdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAicG9zdCIpKQotICAgICAgICAgICAgbV9wb3N0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImdldCIpKQotICAgICAgICAgICAgbV9w
b3N0ID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0dHIp
Ci0gICAgICAgIHBhcnNlRW5jdHlwZShhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gbWV0aG9kQXR0cikKKyAgICAgICAgbV9kYXRhLnBhcnNlTWV0aG9kVHlwZShh
dHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0dHIp
CisgICAgICAgIG1fZGF0YS5wYXJzZUVuY29kaW5nVHlwZShhdHRyLT52YWx1ZSgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKQogICAgICAgICAvLyBz
cGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyc2V0cyB0aGUgc2VydmVyCiAgICAgICAgIC8vIGFj
Y2VwdHMgLSBzZWUgcmZjMjA0NQotICAgICAgICBtX2FjY2VwdGNoYXJzZXQgPSBhdHRyLT52YWx1
ZSgpOworICAgICAgICBtX2RhdGEuc2V0QWNjZXB0Q2hhcnNldChhdHRyLT52YWx1ZSgpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0QXR0cikgewogICAgICAgICAvLyBpZ25v
cmUgdGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CkBAIC02MjIsMTEgKzQ4Miw2IEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmkKICAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIs
IHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxGb3JtRWxlbWVudDo6YWNjZXB0Q2hhcnNldCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2NlcHRfY2hhcnNldEF0dHIpOwotfQot
CiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcgJnZh
bHVlKQogewogICAgIHNldEF0dHJpYnV0ZShhY2NlcHRfY2hhcnNldEF0dHIsIHZhbHVlKTsKSW5k
ZXg6IGh0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaAkocmV2aXNpb24gMzk0MjUpCisrKyBodG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEhUTUxGb3JtRWxlbWVudF9oCiAj
ZGVmaW5lIEhUTUxGb3JtRWxlbWVudF9oCiAKKyNpbmNsdWRlICJGb3JtRWxlbWVudERhdGEuaCIK
ICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgog
CkBAIC0zOSw3ICs0MCw3IEBAIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9y
bUNvbGxlY3Rpb247CiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQgeyAKIHB1YmxpYzoKICAgICBIVE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+SFRNTEZvcm1FbGVtZW50KCk7CkBA
IC01OSwxMSArNjAsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owog
ICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCi0gICAgU3RyaW5nIGVuY3R5cGUoKSBj
b25zdCB7IHJldHVybiBtX2VuY3R5cGU7IH0KKyAgICBTdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YS5lbmNvZGluZ1R5cGUoKTsgfQogICAgIHZvaWQgc2V0RW5jdHlwZShjb25z
dCBTdHJpbmcmKTsKIAotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5j
dHlwZTsgfQotICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBlbmN0eXBlKSB7IHNl
dEVuY3R5cGUoZW5jdHlwZSk7IH0KKyAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVy
biBtX2RhdGEuZW5jb2RpbmdUeXBlKCk7IH0KKyAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpIHsgc2V0RW5jdHlwZSh2YWx1ZSk7IH0KIAogICAgIGJvb2wgYXV0b0NvbXBs
ZXRlKCkgY29uc3QgeyByZXR1cm4gbV9hdXRvY29tcGxldGU7IH0KIApAQCAtOTEsNyArOTIsNyBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIHNldE5hbWUoY29u
c3QgU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgYWNjZXB0Q2hhcnNldCgpIGNvbnN0OworICAgIFN0
cmluZyBhY2NlcHRDaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFjY2VwdENoYXJzZXQo
KTsgfQogICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0
cmluZyBhY3Rpb24oKSBjb25zdDsKQEAgLTEyOSwxNiArMTMwLDE2IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCiBwcml2YXRlOgot
ICAgIHZvaWQgcGFyc2VFbmN0eXBlKGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgaXNNYWlsdG9G
b3JtKCkgY29uc3Q7CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygpIGNvbnN0OwotICAg
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKGNvbnN0IGNoYXIqIGJvdW5kYXJ5KSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3Vu
ZGFyeSkgY29uc3Q7CiAgICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiwgUmVmUHRyPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+ID4gQWxpYXNNYXA7Ci0gICAgCisKKyAgICBGb3JtRWxlbWVudERh
dGEgbV9kYXRhOwogICAgIEFsaWFzTWFwKiBtX2VsZW1lbnRBbGlhc2VzOwogICAgIEhUTUxDb2xs
ZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogY29sbGVjdGlvbkluZm87CiAKQEAgLTE0NywxMCArMTQ4
LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SFRNTEltYWdlRWxlbWVudCo+IGltZ0VsZW1lbnRz
OwogICAgIFN0cmluZyBtX3VybDsKICAgICBTdHJpbmcgbV90YXJnZXQ7Ci0gICAgU3RyaW5nIG1f
ZW5jdHlwZTsKLSAgICBTdHJpbmcgbV9hY2NlcHRjaGFyc2V0OwotICAgIGJvb2wgbV9wb3N0IDog
MTsKLSAgICBib29sIG1fbXVsdGlwYXJ0IDogMTsKICAgICBib29sIG1fYXV0b2NvbXBsZXRlIDog
MTsKICAgICBib29sIG1faW5zdWJtaXQgOiAxOwogICAgIGJvb2wgbV9kb2luZ3N1Ym1pdCA6IDE7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26179</attachid>
            <date>2008-12-20 19:39:43 -0800</date>
            <delta_ts>2008-12-21 15:33:25 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>FormRefactor.diff</filename>
            <type>text/plain</type>
            <size>53593</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5NDI1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMDgtMTIt
MjAgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4
ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk0OQorCisgICAg
ICAgIFJlZmFjdG9yIEhUTUxGb3JtRWxlbWVudCB0byBzaGFyZSBhIG1heGltdW0gbGV2ZWwgb2Yg
Y29kZSBiZXR3ZWVuIEhUTUxGb3JtRWxlbWVudCAmIFdNTEdvRWxlbWVudC4KKyAgICAgICAgQ3Jl
YXRlIGEgbmV3IGhlbHBlciBjbGFzcyAnRm9ybURhdGFCdWlsZGVyJywgd2hpY2ggaXMgaG9sZCBh
cyBtZW1iZXIgdmFyaWFibGUgaW4gdGhvc2UgY2xhc3Nlcy4KKyAgICAgICAgSXQgZW5jYXBzdWxh
dGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCB0byBnZW5lcmF0ZSBhIEZvcm1EYXRhIG9iamVj
dCwgdXNhYmUgZm9yIEhUTUwvV01MIGZvcm0KKyAgICAgICAgc3VibWlzc2lvbiwgaW5jbHVkaW5n
IGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0aW9uLCBtdWx0aS1wYXJ0IGZvcm0gaGFuZGxpbmcgZXRj
LgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcywgbm8gdGVzdCBjYXNlcyBhZmZlY3Rl
ZC4KKyAgICAgICAgV01MR29FbGVtZW50IHdpbGwgYmUgY29udmVydGVkIGluIGEgZm9sbG93LXVw
IHBhdGNoLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS5zY29uczoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6SFRNTEZv
cm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZGF0YUVuY29k
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6ZW5jdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmVuY29k
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c2V0RW5jb2RpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjphY2NlcHRDaGFyc2V0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpGb3JtRGF0YUJ1aWxkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjp+Rm9ybURhdGFCdWlsZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6cGFyc2VFbmNvZGluZ1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFCdWlsZGVyOjpwYXJzZU1ldGhvZFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGFCdWlsZGVyOjpkYXRhRW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6YXBw
ZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0
aVBhcnRIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjphZGRCb3Vu
ZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRl
cjo6YWRkRmlsZU5hbWVUb011bHRpUGFydEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUJ1aWxkZXI6OmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpmaW5pc2hNdWx0aVBhcnRIZWFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmlzUG9zdE1ldGhvZCk6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OnNldElzUG9zdE1ldGhvZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmlzTXVsdGlQYXJ0Rm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUJ1aWxkZXI6OnNldElzTXVsdGlQYXJ0Rm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVuY29kaW5nVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUJ1aWxkZXI6OnNldEVuY29kaW5nVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUJ1aWxkZXI6OmFjY2VwdENoYXJzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFC
dWlsZGVyOjpzZXRBY2NlcHRDaGFyc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVp
bGRlcjo6ZW5jb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpt
dWx0aVBhcnREYXRhKToKKwogMjAwOC0xMi0yMCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB0eXBvICJDU1NBZmVyUnVsZVZhbHVlIiB0byAiQ1NTQWZ0
ZXJSdWxlVmFsdWUiCkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBHTlVtYWtl
ZmlsZS5hbQkocmV2aXNpb24gMzk0MjUpCisrKyBHTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtMTM1Nyw2ICsxMzU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRE5TLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
SFRUUEhlYWRlck1hcC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaCBcCkluZGV4OiBX
ZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnBybwkocmV2aXNpb24gMzk0MjUpCisr
KyBXZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtODkwLDYgKzg5MCw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNw
cCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsLmNwcCBcCiAgICAgcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAgXAorICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAgXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL1Byb3RlY3Rpb25TcGFjZS5jcHAgXApJbmRleDogV2ViQ29yZS5zY29ucwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlLnNjb25zCShyZXZpc2lvbiAzOTQyNSkKKysrIFdlYkNvcmUuc2NvbnMJ
KHdvcmtpbmcgY29weSkKQEAgLTc1Nyw2ICs3NTcsNyBAQCBzb3VyY2VzWydwbGF0Zm9ybS9uZXR3
b3JrJ10gPSBbCiAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlLmNwcCcsCiAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAnLAogICAgICdw
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCcsCisgICAgJ3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGFCdWlsZGVyLmNwcCcsCiAgICAgJ3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3Bw
JywKICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvTmV0d29ya1N0YXRlTm90aWZpZXJNYWMuY3Bw
JywKICAgICAncGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAnLApJbmRl
eDogV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmVTb3VyY2VzLmJrbAko
cmV2aXNpb24gMzk0MjUpCisrKyBXZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAg
LTc3NSw2ICs3NzUsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVl
CiAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAKICAgICAgICAgcGxhdGZv
cm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNwcApJbmRleDogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDM5NDI1KQorKysgV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTU4MjEsNiArNTgyMSwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xGb3JtRGF0YUJ1
aWxkZXIuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcRm9ybURhdGFCdWlsZGVyLmgiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cbmV0d29ya1xIVFRQSGVhZGVyTWFwLmgiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4
OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzOTQyNSkKKysrIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBA
QAogCQkwODM5NDc2RDBFQ0U0QkQ2MDAwMjczNTAgLyogV01MRWxlbWVudEZhY3RvcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RkI4NEIxMEVDRTM3
MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OwogCQkwODREQkFBMTBFRDM5
RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERCQTlEMEVEMzlEMzUwMDM4QzIyNiAvKiBXTUxWYXJp
YWJsZXMuY3BwICovOyB9OwogCQkwODREQkFBMjBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFi
bGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRE
QkE5RTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggKi87IH07CisJCTA4NUI5MkJB
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjkyQjgwRUZERTczRDAwRTYxMjNDIC8q
IEZvcm1EYXRhQnVpbGRlci5jcHAgKi87IH07CisJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAv
KiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCAq
LzsgfTsKIAkJMDg2NUNDRTYwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NjVDQ0U0MEVE
REY1MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5jcHAgKi87IH07CiAJCTA4NjVDQ0U3MEVE
REY1MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NUNDRTUwRURERjUxQjAwREY5RUMzIC8qIFdNTE5v
b3BFbGVtZW50LmggKi87IH07CiAJCTA4NzQ0QkFBMEVEQjdEODYwMDRDOUU2MyAvKiBXTUxPbkV2
ZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODc0NEJBOTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuY3BwICov
OyB9OwpAQCAtNDg1Niw2ICs0ODU4LDggQEAKIAkJMDgyMDNBOUUwRUQ4QzM1MzAwQjhCNjFBIC8q
IFdNTEFjY2Vzc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
QWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODREQkE5RDBF
RDM5RDM1MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdNTFZhcmlhYmxlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4NERCQTlFMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVmFyaWFibGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTA4NUI5MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGFCdWls
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDg1QjkyQjkwRUZERTczRDAw
RTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb3JtRGF0YUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2
NUNDRTQwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTE5vb3BFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NUNDRTUwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE5vb3BFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzQ0QkE5MEVEQjdEODYwMDRDOUU2MyAv
KiBXTUxPbkV2ZW50RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXTUxPbkV2ZW50RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05ODIyLDYgKzk4MjYsOCBAQAogCQkJCUIyRjM0RkU1MEU4MkY4MTQwMEY2MjdDRCAvKiBETlMu
aCAqLywKIAkJCQk1MTRDNzY1QTBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwICovLAog
CQkJCTUxNEM3NjVCMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oICovLAorCQkJCTA4NUI5
MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovLAorCQkJCTA4NUI5
MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCAqLywKIAkJCQk1MTRDNzY1
QzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUEhlYWRlck1hcC5oICovLAogCQkJCTUxNEM3NjVEMENF
OTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgKi8sCiAJCQkJNTE0Qzc2NUUwQ0U5MjNB
MTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi8sCkBAIC0xNDI5Myw4ICsxNDI5OSwxMSBAQAog
CQkJCTI5QUFDNTFGMEU1Mzk2M0IwMDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJD
b250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5ODAwQzk1MEU1MjRDOEIwMDAyNTUzNiAv
KiBBY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzRERTY5MEVB
NzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
RTkxMUM0MEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ5RTkxMkFCMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxNkZFMTEyMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTZGRTExNDBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTEyQUQwRUZBQzkwNjAwOUQwQ0FGIC8q
IEFuaW1hdGlvbkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REQ3MDk5RTY0OTIwMDU2
RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RjZCQkQw
REI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBOEY2QkJGMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTUyNjQsNiArMTUyNzMsNyBAQAogCQkJCTM3ODRDMzRCMEUxMUFBMzQw
MDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRUQw
QTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2
NzAwQ0U5MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwODVC
OTJCQjBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODEzNkQzODA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTRDNzY0RTBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1NkQzNzNBMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3Rh
dGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUzODcsNiArMTUzOTcsNyBAQAogCQkJCTFBMkQ3NTNE
MERFNDdGQUIwMEYwQTY0OCAvKiBJY29uRmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
RjE0NTQwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUU5MTFDNTBFRjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkgLyog
SW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTE1Nzk0LDYgKzE1ODA1LDcgQEAKIAkJCQkx
QThGNkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QzRBODA1MDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QzRBODRDMDlENTY0OUQwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1
dGVFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQzcwRUY4NkQ0NzAwOUQwQ0FGIC8q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJGRTdFMTMw
RDMyRkFGNjAwNjZGNEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQjQwNDg0RTBFMDgzRkE4MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ0NjEzQUQwQ0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlhRXJyb3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU5NzgsNiArMTU5OTAsNyBAQAogCQkJCTUxNEM3NjU0MENFOTIzNEUw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3
RjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4Q0ZGNUUxMEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0OUU5MTFDOTBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEFGRDAwQzBEQUYzMzU0MDBGNUY1NUMg
LyogU01JTFRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUZEMDBFMERBRjMzNTUwMEY1RjU1
QyAvKiBTTUlMVGltZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFQzkyNTkwQ0U5
MERCNDAwRjkwMzA4IC8qIFNRTEVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MTc0LDkgKzE2
MTg3LDExIEBACiAJCQkJQjIyMjdBRjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ZpZXdTcGVjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FGNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHWm9vbUFu
ZFBhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJFNEVDOTgwRDAwQzIyQjAwNDMyNjQzIC8qIFNW
R1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQ0IwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VGQzlC
OTBENzhEQzhDMDA3RDI1NzkgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0VDMDFCRTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0MUYxRDIxRjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkUGFnZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRD
YWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkU3NUJFMEVERjhGRDcwMDM2MEUxRCAv
KiBTY3JpcHRDYWxsU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjcwRDcwMDlFQjBDN0Mw
MDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MjEyLDYg
KzE2MjI3LDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVk
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBT
aW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQ0QwRUY4NkQ0NzAwOUQw
Q0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRCNkZB
NkY0MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywK
QEAgLTE2Mjg4LDcgKzE2MzA0LDExIEBACiAJCQkJNTFERjZEN0UwQjkyQTE2RDAwQzJEQzg1IC8q
IFRocmVhZENoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNCMDBDRDYzMzEwMDBGQURB
NzUgLyogVGltZVJhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwNUIyNEQwOThGMUI2QjAw
QzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5MTJBRTBFRkFDOTA2MDA5
RDBDQUYgLyogVGltaW5nRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0ZCQUU4MEI1
MTUyRUQwMDAxRjFENyAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkxMUNF
MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5RTkxMUQwMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OUU5MTFEMjBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNzBBMjI5N0JFMDA1
OEQ3QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE5RDJDNTBDRUE2RjYx
MDBGRjUwN0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzkwQTIy
OTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTYzNDEsNiAr
MTYzNjEsNyBAQAogCQkJCTA4ODA3QjdEMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxQcmV2RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4MDdCN0YwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTFJl
ZnJlc2hFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODgwN0I4MTBFRDcwOUFCMDAzRjY5
NzUgLyogV01MU2V0dmFyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg4MjBCREYwRUY1
RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhD
RDYxQkQwRUQzOTI5QzAwMkRERjUxIC8qIFdNTFRhc2tFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODBGQUUxQjBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODFEODEzMjBFRTBFNzREMDBENzM2ODkgLyogV01MVGltZXJFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE2NDQxLDIwICsxNjQ2Miw2IEBACiAJCQkJMUE1NjlE
MjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMDg4MjBCREYwRUY1RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFGMUQyMUYwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlw
dENhY2hlZFBhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFDNDBFRjg2RDQ3MDA5
RDBDQUYgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFDNTBF
Rjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTQ5RTkxMUM3MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUM5MEVGODZENDcwMDlEMENBRiAvKiBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUNCMEVG
ODZENDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNDlFOTExQ0QwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUNFMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUQwMEVGODZENDcwMDlEMENB
RiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFEMjBF
Rjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk0OUU5MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk0OUU5MTJBRDBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFOTEyQUUwRUZBQzkwNjAwOUQwQ0FGIC8qIFRpbWluZ0Z1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE2NzQwLDkgKzE2NzQ3LDEyIEBACiAJCQkJMjlB
QUM1MjAwRTUzOTYzQjAwOEY5QjNCIC8qIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5l
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTgwMEM5NjBFNTI0QzhCMDAwMjU1MzYgLyogQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzRERTZFMEVBNzVD
NjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlF
OTExQzMwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTEyQUEwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExMTBFNkUxREE3MDBCRjYwODggLyogQW5p
bWF0aW9uQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExMzBFNkUxREE3MDBCRjYw
ODggLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUU5MTJB
QzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOURENjA5OUU2NDkyMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE4RjZCQkMwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2Fj
aGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RjZCQkUwREI1NUNEQzAwMURCNzk0IC8qIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE3MjIxLDYgKzE3MjMx
LDcgQEAKIAkJCQlCMkFGRkM4MjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udFBsYXRmb3JtRGF0YU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2Q0YxMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NkYwQ0U5MjNBMTAwN0VGM0NEIC8q
IEZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4NUI5MkJBMEVGREU3M0QwMEU2MTIz
QyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxMzZEMzkwOTcz
QThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRD
NzY0RjBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk2NTZEMzczQjBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTc4MDQsNiArMTc4MTUsNyBAQAogCQkJCTkzRTIyN0UxMEFGNTg5QUQwMEQ0
ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RjZC
QzUwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4QzRBODA2MDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDlFOTExQzYwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQkZFN0UxMjBEMzJGQUY2MDA2NkY0
RDIgLyogTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUI0MDQ4
NEQwRTA4M0ZBODAwN0Q2OTIwIC8qIE1lZGlhRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNEUxOTU5MjEwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTc5NjcsNiArMTc5NzksNyBAQAogCQkJCTUxNEM3NjdFMENFOTIzQTEw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTRDNzY1NTBDRTkyMzRGMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4Q0ZGNUU3MEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RTkxMUM4MEVGODZENDcwMDlEMENBRiAvKiBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRBRkQwMEIwREFGMzM1
NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0QUZEMDBEMERB
RjMzNTUwMEY1RjU1QyAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTk2MTE3MzBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMTgxNTYsMTAgKzE4MTY5LDEyIEBACiAJCQkJQjIyMjdBRjIwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR1ZpZXdTcGVjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUY1MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRTRF
Qzk3MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDlFOTExQ0EwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDRUZDOUJBMEQ3OERDOEMwMDdEMjU3OSAvKiBTY2hlZHVs
ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFMjRGOTcwRDdDQUYwRTAwN0UwNEMyIC8q
IFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVERkU4RjU2MEQxNjQ3N0Iw
MDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQzAx
QkQwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUYx
RDIyMDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkUGFnZURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDE2RTc1Q0MwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0
Q2FsbFN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQjcwRDZGMDlFQjBDN0MwMDlEODQ2
OCAvKiBTY3JpcHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTgxOTMsNiArMTgy
MDgsNyBAQAogCQkJCTkzMzA5RUEyMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVG
b250RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM3RjBEMDBBNUMxMDAzMDA3NEQg
LyogU2ltcGxlRm9udERhdGFNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk0OUU5MTFDQzBFRjg2
RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0QjZGQTZGNTBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTRCNkZBNkY3MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRN
YWMubW0gaW4gU291cmNlcyAqLywKQEAgLTE4MjU4LDYgKzE4Mjc0LDggQEAKIAkJCQk1MURGNkQ4
MDBCOTJBMThFMDBDMkRDODUgLyogVGhyZWFkQ2hlY2subW0gaW4gU291cmNlcyAqLywKIAkJCQlF
NDQ2MTNBRjBDRDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDlFOTExQ0YwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExRDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNjBBMjI5
N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM4
MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTE5MDk5RTY0OTIwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMTgzMDcsNiArMTgzMjUsNyBAQAogCQkJCTA4ODA3QjdDMEVENzA5QUIwMDNGNjk3NSAv
KiBXTUxQcmV2RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODgwN0I3RTBFRDcwOUFC
MDAzRjY5NzUgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg4
MDdCODAwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMDg4MjBCREUwRUY1RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwOENENjFCQzBFRDM5MjlDMDAyRERGNTEgLyogV01MVGFza0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgwRkFFMUEwRUVFQkRBODAwQUFDREU5IC8q
IFdNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFEODEzMTBFRTBF
NzREMDBENzM2ODkgLyogV01MVGltZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTgz
OTYsMTcgKzE4NDE1LDYgQEAKIAkJCQkxQTU2OUQyMjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGlt
ZV9vYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0MzOTgz
IC8qIHJ1bnRpbWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDky
MDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwODgyMEJE
RTBFRjVEMzgxMDA5MDk5QTggLyogV01MVGFibGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQxRjFEMjIwMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRQYWdlRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk0OUU5MTFDMzBFRjg2RDQ3MDA5RDBDQUYgLyogQWZmaW5lVHJh
bnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAv
KiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTEx
QzgwRUY4NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk0OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTExQ0MwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTEx
Q0YwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNDlFOTExRDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUU5MTJBQTBFRkFDOTA2MDA5RDBDQUYg
LyogQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RTkxMkFDMEVGQUM5MDYwMDlE
MENBRiAvKiBBbmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAko
cmV2aXNpb24gMzk0MjUpCisrKyBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDE1ICs2MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGhleERpZ2l0c1sxN10gPSAiMDEy
MzQ1Njc4OUFCQ0RFRiI7Ci0KIEhUTUxGb3JtRWxlbWVudDo6SFRNTEZvcm1FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBIVE1MRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2VsZW1lbnRBbGlhc2VzKDApCiAgICAgLCBjb2xsZWN0
aW9uSW5mbygwKQotICAgICwgbV9lbmN0eXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQiKQotICAgICwgbV9wb3N0KGZhbHNlKQotICAgICwgbV9tdWx0aXBhcnQoZmFsc2UpCiAg
ICAgLCBtX2F1dG9jb21wbGV0ZSh0cnVlKQogICAgICwgbV9pbnN1Ym1pdChmYWxzZSkKICAgICAs
IG1fZG9pbmdzdWJtaXQoZmFsc2UpCkBAIC0xNjEsMTczICsxNTYsOTQgQEAgdm9pZCBIVE1MRm9y
bUVsZW1lbnQ6OnN1Ym1pdENsaWNrKEV2ZW50KgogICAgICAgICBwcmVwYXJlU3VibWl0KGV2ZW50
KTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBj
b25zdCBjaGFyKiBzdHJpbmcpCi17Ci0gICAgYnVmZmVyLmFwcGVuZChzdHJpbmcsIHN0cmxlbihz
dHJpbmcpKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVm
ZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgYnVmZmVyLmFwcGVuZChzdHJpbmcu
ZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVk
U3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3
LjEzLjQuMQotICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBzdHJp
bmcuZGF0YSgpW2ldOwotCi0gICAgICAgIC8vIFNhbWUgc2FmZSBjaGFyYWN0ZXJzIGFzIE5ldHNj
YXBlIGZvciBjb21wYXRpYmlsaXR5LgotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBzYWZlW10g
PSAiLS5fKiI7Ci0gICAgICAgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdh
JyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBzdHJjaHIoc2FmZSwg
YykpCi0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICBlbHNlIGlmIChjID09
ICcgJykKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJysnKTsKLSAgICAgICAgZWxzZSBpZiAo
YyA9PSAnXG4nIHx8IChjID09ICdccicgJiYgKGkgKyAxID49IGxlbmd0aCB8fCBzdHJpbmcuZGF0
YSgpW2kgKyAxXSAhPSAnXG4nKSkpCi0gICAgICAgICAgICBhcHBlbmRTdHJpbmcoYnVmZmVyLCAi
JTBEJTBBIik7Ci0gICAgICAgIGVsc2UgaWYgKGMgIT0gJ1xyJykgewotICAgICAgICAgICAgYnVm
ZmVyLmFwcGVuZCgnJScpOwotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChoZXhEaWdpdHNbYyA+
PiA0XSk7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGhleERpZ2l0c1tjICYgMHhGXSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIFRleHRFbmNvZGluZyBIVE1MRm9ybUVsZW1lbnQ6OmRhdGFF
bmNvZGluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzTWFpbHRvRm9ybSgpKQogICAgICAgICByZXR1
cm4gVVRGOEVuY29kaW5nKCk7CiAKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7Ci0gICAgU3Ry
aW5nIHN0ciA9IG1fYWNjZXB0Y2hhcnNldDsKLSAgICBzdHIucmVwbGFjZSgnLCcsICcgJyk7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gY2hhcnNldHM7Ci0gICAgc3RyLnNwbGl0KCcgJywgY2hhcnNldHMp
OwotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGFyc2V0cy5lbmQo
KTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoYXJzZXRz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKChlbmNvZGluZyA9IFRleHRF
bmNvZGluZygqaXQpKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2Rpbmc7Ci0g
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHJldHVy
biBmcmFtZS0+bG9hZGVyKCktPmVuY29kaW5nKCk7Ci0gICAgcmV0dXJuIExhdGluMUVuY29kaW5n
KCk7CisgICAgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmRhdGFFbmNvZGluZyhkb2N1bWVudCgp
KTsKIH0KIAotUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50Ojpmb3JtRGF0YShj
b25zdCBjaGFyKiBib3VuZGFyeSkgY29uc3QKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3Jt
RWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoY29uc3QgQ1N0cmluZyYgYm91bmRhcnkpCiB7Ci0gICAg
VmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOworICAgIG1fZm9ybURhdGFCdWlsZGVyLmNsZWFyKCk7
CisKICAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcgPSBkYXRhRW5jb2RpbmcoKS5lbmNvZGluZ0Zv
ckZvcm1TdWJtaXNzaW9uKCk7CisgICAgVmVjdG9yPGNoYXI+JiBlbmNvZGVkRGF0YSA9IG1fZm9y
bURhdGFCdWlsZGVyLmVuY29kZWREYXRhKCk7CiAKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3Vs
dCA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKLSAgICAKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogY29udHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKICAgICAgICAgRm9ybURhdGFMaXN0
IGxpc3QoZW5jb2RpbmcpOwogCi0gICAgICAgIGlmICghY29udHJvbC0+ZGlzYWJsZWQoKSAmJiBj
b250cm9sLT5hcHBlbmRGb3JtRGF0YShsaXN0LCBtX211bHRpcGFydCkpIHsKKyAgICAgICAgaWYg
KCFjb250cm9sLT5kaXNhYmxlZCgpICYmIGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKGxpc3QsIG1f
Zm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSkgewogICAgICAgICAgICAgc2l6ZV90
IGZvcm1EYXRhTGlzdFNpemUgPSBsaXN0Lmxpc3QoKS5zaXplKCk7CiAgICAgICAgICAgICBBU1NF
UlQoZm9ybURhdGFMaXN0U2l6ZSAlIDIgPT0gMCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGZvcm1EYXRhTGlzdFNpemU7IGogKz0gMikgewogICAgICAgICAgICAgICAgIGNv
bnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYga2V5ID0gbGlzdC5saXN0KClbal07CiAgICAgICAgICAg
ICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2YWx1ZSA9IGxpc3QubGlzdCgpW2ogKyAx
XTsKLSAgICAgICAgICAgICAgICBpZiAoIW1fbXVsdGlwYXJ0KSB7CisgICAgICAgICAgICAgICAg
aWYgKCFtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBPbWl0IHRoZSBuYW1lICJpc2luZGV4IiBpZiBpdCdzIHRoZSBmaXJzdCBmb3Jt
IGRhdGEgZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlz
IGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5vdz8KICAgICAgICAgICAgICAgICAgICAg
aWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAmJiBrZXkuZGF0YSgpID09ICJpc2luZGV4IikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuY29kZWRTdHJpbmcoZW5jb2RlZERhdGEsIHZh
bHVlLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFlbmNvZGVkRGF0YS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5jb2RlZERhdGEuYXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRFbmNvZGVkU3RyaW5nKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVuY29kZWREYXRhLmFwcGVuZCgnPScpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kRW5jb2RlZFN0cmluZyhlbmNvZGVkRGF0YSwgdmFsdWUuZGF0YSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgRm9ybURhdGFC
dWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Zv
cm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGtleS5kYXRhKCksIHZhbHVl
LmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhl
YWRlciwgIi0tIik7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIGJv
dW5kYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIlxyXG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIkNvbnRlbnQtRGlz
cG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiIpOwotICAgICAgICAgICAgICAgICAgICBoZWFk
ZXIuYXBwZW5kKGtleS5kYXRhKCkuZGF0YSgpLCBrZXkuZGF0YSgpLmxlbmd0aCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAgICAgICAgICBt
X2Zvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihib3VuZGFyeSwga2V5LmRhdGEo
KSk7CiAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0
aGVuIHdlIGFsc28gbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBm
aWxlbmFtZQorICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJ
TEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCiAgICAgICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5maWxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmZpbGUoKS0+cGF0aCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gdmFsdWUuZmlsZSgpLT5maWxlTmFtZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdmFsdWUuZmlsZSgpLT5maWxl
TmFtZSgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9u
IHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1l
bnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0
aC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgZ2VuZXJhdGVkRmlsZW5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2hvdWxk
UmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVuYW1l
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmls
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZ2VuZXJh
dGVkRmlsZW5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5l
cmF0ZWRGaWxlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3Vs
ZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2hvdWxkUmVwbGFjZVdp
dGhHZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJhdGVkRmlsZU5h
bWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB3b24ndCB3b3Jr
IGlmIHRoZSBmaWxlbmFtZSBpbmNsdWRlcyBhICIgbWFyaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBsaWtlIENSIG9yIExGLiBUaGlzIGFsc28gZG9l
cyBzdHJhbmdlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGluZ3MgaWYgdGhlIGZpbGVu
YW1lIGluY2x1ZGVzIGNoYXJhY3RlcnMgeW91IGNhbid0IGVuY29kZQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIHdlYnNpdGUncyBjaGFyYWN0ZXIgc2V0LgotICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIjsgZmlsZW5hbWU9XCIiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIGVuY29kaW5nLmVuY29kZShm
aWxlbmFtZS5jaGFyYWN0ZXJzKCksIGZpbGVuYW1lLmxlbmd0aCgpLCBRdWVzdGlvbk1hcmtzRm9y
VW5lbmNvZGFibGVzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuYXBwZW5kKCci
Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZEZpbGVOYW1l
VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFmaWxlbmFtZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIE1JTUVUeXBlUmVnaXN0cnkgZnVuY3Rpb24ncyBuYW1lIG1h
a2VzIGl0IHNvdW5kIGxpa2UgaXQgdGFrZXMgYSBwYXRoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG5vdCBqdXN0IGEgYmFzZW5hbWUuIEJ1dCBmaWxlbmFtZSBpcyBub3QgdGhlIHBh
dGguIEJ1dCBub3RlIHRoYXQgaXQncyBub3Qgc2FmZSB0bwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGp1c3QgdXNlIHBhdGggaW5zdGVhZCBzaW5jZSBpbiB0aGUgZ2VuZXJhdGVkLWZp
bGUgY2FzZSBpdCB3aWxsIG5vdCByZWZsZWN0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE1JTUUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIGZpbGUuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5
cGVGb3JQYXRoKGZpbGVuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1p
bWVUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRTdHJpbmcoaGVhZGVyLCAiXHJcbkNvbnRlbnQtVHlwZTogIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIG1pbWVUeXBlLmxhdGluMSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRo
KGZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1pbWVUeXBlLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxk
ZXIuYWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihtaW1lVHlwZS5sYXRpbjEoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRTdHJpbmcoaGVhZGVyLCAiXHJcblxyXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuZmluaXNoTXVsdGlQYXJ0SGVhZGVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiYgaGVhZGVyID0gbV9mb3JtRGF0YUJ1aWxk
ZXIubXVsdGlQYXJ0RGF0YSgpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIGFwcGVuZCBib2R5
CisgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSh2YWx1ZS5kYXRh
KCkuZGF0YSgpLCBkYXRhU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVl
LmZpbGUoKSAmJiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91
bGRHZW5lcmF0ZUZpbGUpOworCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0
YSgiXHJcbiIsIDIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAotCi0gICAgaWYgKG1fbXVsdGlwYXJ0KSB7Ci0gICAgICAgIGFwcGVuZFN0cmlu
ZyhlbmNvZGVkRGF0YSwgIi0tIik7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhlbmNvZGVkRGF0YSwg
Ym91bmRhcnkpOwotICAgICAgICBhcHBlbmRTdHJpbmcoZW5jb2RlZERhdGEsICItLVxyXG4iKTsK
LSAgICB9CisgICAgaWYgKG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKQorICAg
ICAgICBtX2Zvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGJvdW5k
YXJ5LCB0cnVlKTsKIAogICAgIHJlc3VsdC0+YXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRhKCks
IGVuY29kZWREYXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnBhcnNlRW5jdHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgaWYo
dHlwZS5jb250YWlucygibXVsdGlwYXJ0IiwgZmFsc2UpIHx8IHR5cGUuY29udGFpbnMoImZvcm0t
ZGF0YSIsIGZhbHNlKSkgewotICAgICAgICBtX2VuY3R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0
YSI7Ci0gICAgICAgIG1fbXVsdGlwYXJ0ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUuY29u
dGFpbnMoInRleHQiLCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygicGxhaW4iLCBmYWxzZSkpIHsK
LSAgICAgICAgbV9lbmN0eXBlID0gInRleHQvcGxhaW4iOwotICAgICAgICBtX211bHRpcGFydCA9
IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZW5jdHlwZSA9ICJhcHBsaWNhdGlvbi94
LXd3dy1mb3JtLXVybGVuY29kZWQiOwotICAgICAgICBtX211bHRpcGFydCA9IGZhbHNlOwotICAg
IH0KLX0KLQogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmlzTWFpbHRvRm9ybSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHByb3RvY29sSXMobV91cmwsICJtYWlsdG8iKTsKQEAgLTM1OCw1NiArMjc0LDYg
QEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpCiAgICAgc3VibWl0KDAsIGZhbHNlKTsK
IH0KIAotLy8gUmV0dXJucyBhIDAtdGVybWluYXRlZCBDIHN0cmluZyBpbiB0aGUgdmVjdG9yLgot
c3RhdGljIHZvaWQgZ2V0VW5pcXVlQm91bmRhcnlTdHJpbmcoVmVjdG9yPGNoYXI+JiBib3VuZGFy
eSkKLXsKLSAgICAvLyBUaGUgUkZDIDIwNDYgc3BlYyBzYXlzIHRoZSBBbHBoYU51bWVyaWMgY2hh
cmFjdGVycyBwbHVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycwotICAgIC8vIGFyZSBsZWdhbCBm
b3IgYm91bmRhcmllczogICcoKStfLC0uLzo9PwotICAgIC8vIEhvd2V2ZXIgdGhlIGZvbGxvd2lu
ZyBjaGFyYWN0ZXJzLCB0aG91Z2ggbGVnYWwsIGNhdXNlIHNvbWUgc2l0ZXMgdG8gZmFpbDoKLSAg
ICAvLyAoKSwuLzo9Ci0gICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzNTIKLSAgICBzdGF0aWMgY29uc3QgY2hhciBBbHBoYU51bWVyaWNFbmNNYXBbNjRdID0K
LSAgICB7Ci0gICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAw
eDQ4LAotICAgICAgMHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1
MCwKLSAgICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgs
Ci0gICAgICAweDU5LCAweDVBLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAot
ICAgICAgMHg2NywgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwKLSAg
ICAgIDB4NkYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCi0gICAg
ICAweDc3LCAweDc4LCAweDc5LCAweDdBLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAotICAgICAg
MHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHg0MQotICAgICAgLy8g
RklYTUUgPHJkYXI6Ly9wcm9ibGVtLzUyNTI1Nzc+IGdtYWlsIGRvZXMgbm90IGFjY2VwdCBsZWdh
bCBjaGFyYWN0ZXJzIGluIHRoZSBmb3JtIGJvdW5kYXJ5Ci0gICAgICAvLyBBcyBzdGF0ZWQgYWJv
dmUsIHNvbWUgbGVnYWwgY2hhcmFjdGVycyBjYXVzZSwgc2l0ZXMgdG8gZmFpbC4gU3BlY2lmaWNh
bGx5Ci0gICAgICAvLyB0aGUgLyBjaGFyYWN0ZXIgd2hpY2ggd2FzIHRoZSBsYXN0IGNoYXJhY3Rl
ciBpbiB0aGUgYWJvdmUgYXJyYXkuIEkgaGF2ZQotICAgICAgLy8gcmVwbGFjZWQgdGhlIGxhc3Qg
Y2hhcmFjdGVyIHdpdGggYW5vdGhlciBjaGFyYWN0ZXIgYWxyZWFkeSBpbiB0aGUgYXJyYXkKLSAg
ICAgIC8vIChub3RpY2UgdGhlIGZpcnN0IGFuZCBsYXN0IHZhbHVlcyBhcmUgYm90aCAweDQxLCBB
KS4gSW5zdGVhZCBvZiBwaWNraW5nCi0gICAgICAvLyBhbm90aGVyIHVuaXF1ZSBsZWdhbCBjaGFy
YWN0ZXIgZm9yIGJvdW5kYXJ5IHN0cmluZ3MgdGhhdCwgYmVjYXVzZSBpdCBoYXMKLSAgICAgIC8v
IG5ldmVyIGJlZW4gdGVzdGVkLCBtYXkgb3IgbWF5IG5vdCBicmVhayBvdGhlciBzaXRlcywgSSBz
aW1wbHkKLSAgICAgIC8vIHJlcGxhY2VkIC8gd2l0aCBBLiAgVGhpcyBtZWFucyBBIGlzIHR3aWNl
IGFzIGxpa2VseSB0byBvY2N1ciBpbiBvdXIgYm91bmRhcnkKLSAgICAgIC8vIHN0cmluZ3MgdGhh
biBhbnkgb3RoZXIgY2hhcmFjdGVyIGJ1dCBJIHRoaW5rIHRoaXMgaXMgZmluZSBmb3IgdGhlIHRp
bWUgYmVpbmcuCi0gICAgICAvLyBUaGUgRklYTUUgaGVyZSBpcyBhYm91dCByZXN0b3JpbmcgdGhl
IC8gY2hhcmFjdGVyIG9uY2UgdGhlIGFmb3JlbWVudGlvbmVkCi0gICAgICAvLyByYWRhciBoYXMg
YmVlbiByZXNvbHZlZC4KLSAgICB9OwotCi0gICAgLy8gU3RhcnQgd2l0aCBhbiBpbmZvcm1hdGl2
ZSBwcmVmaXguCi0gICAgY29uc3QgY2hhciBib3VuZGFyeVByZWZpeFtdID0gIi0tLS1XZWJLaXRG
b3JtQm91bmRhcnkiOwotICAgIGJvdW5kYXJ5LmFwcGVuZChib3VuZGFyeVByZWZpeCwgc3RybGVu
KGJvdW5kYXJ5UHJlZml4KSk7Ci0KLSAgICAvLyBBcHBlbmQgMTYgcmFuZG9tIDdiaXQgYXNjaWkg
QWxwaGFOdW1lcmljIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPGNoYXI+IHJhbmRvbUJ5dGVzOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgcmFu
ZG9tbmVzcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6OnJhbmRvbU51bWJlcigpICogKHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpOwotICAgICAgICByYW5k
b21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21uZXNzID4+IDI0KSAmIDB4
M0ZdKTsKLSAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFsocmFu
ZG9tbmVzcyA+PiAxNikgJiAweDNGXSk7Ci0gICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChBbHBo
YU51bWVyaWNFbmNNYXBbKHJhbmRvbW5lc3MgPj4gOCkgJiAweDNGXSk7Ci0gICAgICAgIHJhbmRv
bUJ5dGVzLmFwcGVuZChBbHBoYU51bWVyaWNFbmNNYXBbcmFuZG9tbmVzcyAmIDB4M0ZdKTsKLSAg
ICB9Ci0KLSAgICBib3VuZGFyeS5hcHBlbmQocmFuZG9tQnl0ZXMpOwotICAgIGJvdW5kYXJ5LmFw
cGVuZCgwKTsgLy8gQWRkIGEgMCBhdCB0aGUgZW5kIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIEMt
c3R5bGUgc3RyaW5nLgotfQotCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBl
dmVudCwgYm9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbikKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcg
PSBkb2N1bWVudCgpLT52aWV3KCk7CkBAIC00NTEsMzQgKzMxNywzMyBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgaWYgKG1fdXJsLmlzRW1wdHkoKSkKICAg
ICAgICAgbV91cmwgPSBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKIAotICAgIGlmIChtX3Bv
c3QpIHsKLSAgICAgICAgaWYgKG1fbXVsdGlwYXJ0ICYmIGlzTWFpbHRvRm9ybSgpKSB7CisgICAg
aWYgKG1fZm9ybURhdGFCdWlsZGVyLmlzUG9zdE1ldGhvZCgpKSB7CisgICAgICAgIGlmIChtX2Zv
cm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSAmJiBpc01haWx0b0Zvcm0oKSkgewogICAg
ICAgICAgICAgc2V0RW5jdHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7
Ci0gICAgICAgICAgICBtX211bHRpcGFydCA9IGZhbHNlOworICAgICAgICAgICAgQVNTRVJUKCFt
X2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIW1fbXVsdGlwYXJ0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IGRhdGEg
PSBmb3JtRGF0YSgwKTsKKyAgICAgICAgaWYgKCFtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFy
dEZvcm0oKSkgeworICAgICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBkYXRhID0gY3JlYXRlRm9y
bURhdGEoQ1N0cmluZygpKTsKICAgICAgICAgICAgIGlmIChpc01haWx0b0Zvcm0oKSkgewogICAg
ICAgICAgICAgICAgIFN0cmluZyBib2R5ID0gZGF0YS0+ZmxhdHRlblRvU3RyaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVuY3R5cGUoKSwgInRleHQvcGxhaW4i
KSkgeworICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtX2Zvcm1EYXRhQnVp
bGRlci5lbmNvZGluZ1R5cGUoKSwgInRleHQvcGxhaW4iKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBDb252ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGRlY29kZSwgYW5kIHMvJi9cclxuLy4gQWxz
bywgc3BhY2VzIGFyZSBlbmNvZGVkIGFzICUyMC4KICAgICAgICAgICAgICAgICAgICAgYm9keSA9
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhib2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxh
Y2UoJysnLCAnICcpICsgIlxyXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGJvZHlEYXRhOwotICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhi
b2R5RGF0YSwgImJvZHk9Iik7Ci0gICAgICAgICAgICAgICAgYXBwZW5kRW5jb2RlZFN0cmluZyhi
b2R5RGF0YSwgYm9keS51dGY4KCkpOworICAgICAgICAgICAgICAgIGJvZHlEYXRhLmFwcGVuZCgi
Ym9keT0iLCA1KTsKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoYm9keURhdGEsIGJvZHkudXRmOCgpKTsKICAgICAgICAgICAgICAgICBkYXRh
ID0gRm9ybURhdGE6OmNyZWF0ZShTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5RGF0YS5zaXpl
KCkpLnJlcGxhY2UoJysnLCAiJTIwIikubGF0aW4xKCkpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEsIG1f
dGFyZ2V0LCBlbmN0eXBlKCksIFN0cmluZygpLCBldmVudCk7CisgICAgICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgZGF0YSwgbV90YXJnZXQsIG1fZm9y
bURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgZXZlbnQpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5OwotICAgICAgICAgICAg
Z2V0VW5pcXVlQm91bmRhcnlTdHJpbmcoYm91bmRhcnkpOwotICAgICAgICAgICAgZnJhbWUtPmxv
YWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGZvcm1EYXRhKGJvdW5kYXJ5LmRhdGEo
KSksIG1fdGFyZ2V0LCBlbmN0eXBlKCksIGJvdW5kYXJ5LmRhdGEoKSwgZXZlbnQpOworICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0gbV9mb3JtRGF0YUJ1aWxkZXIuZ2VuZXJhdGVV
bmlxdWVCb3VuZGFyeVN0cmluZygpOworICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJt
aXRGb3JtKCJQT1NUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKGJvdW5kYXJ5LmRhdGEoKSksIG1f
dGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgYm91bmRhcnkuZGF0YSgp
LCBldmVudCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX211bHRpcGFydCA9
IGZhbHNlOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1fdXJs
LCBmb3JtRGF0YSgwKSwgbV90YXJnZXQsIFN0cmluZygpLCBTdHJpbmcoKSwgZXZlbnQpOworICAg
ICAgICBtX2Zvcm1EYXRhQnVpbGRlci5zZXRJc011bHRpUGFydEZvcm0oZmFsc2UpOworICAgICAg
ICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0
YShDU3RyaW5nKCkpLCBtX3RhcmdldCwgU3RyaW5nKCksIFN0cmluZygpLCBldmVudCk7CiAgICAg
fQogCiAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1p
dEJ1dHRvbikKQEAgLTUxNCwxNyArMzc5LDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnUKICAgICAgICAgbV91cmwgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikKICAgICAgICAgbV90YXJn
ZXQgPSBhdHRyLT52YWx1ZSgpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZXRob2RB
dHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicG9z
dCIpKQotICAgICAgICAgICAgbV9wb3N0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImdldCIpKQotICAgICAgICAgICAgbV9wb3N0ID0g
ZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0dHIpCi0gICAg
ICAgIHBhcnNlRW5jdHlwZShhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gbWV0aG9kQXR0cikKKyAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VNZXRob2RU
eXBlKGF0dHItPnZhbHVlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbmN0eXBl
QXR0cikKKyAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VFbmNvZGluZ1R5cGUoYXR0ci0+
dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2VwdF9jaGFyc2V0QXR0
cikKICAgICAgICAgLy8gc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcnNldHMgdGhlIHNlcnZl
cgogICAgICAgICAvLyBhY2NlcHRzIC0gc2VlIHJmYzIwNDUKLSAgICAgICAgbV9hY2NlcHRjaGFy
c2V0ID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuc2V0QWNjZXB0
Q2hhcnNldChhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNj
ZXB0QXR0cikgewogICAgICAgICAvLyBpZ25vcmUgdGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4K
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CkBAIC02
MjIsMTEgKzQ4NCw2IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmkK
ICAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxGb3Jt
RWxlbWVudDo6YWNjZXB0Q2hhcnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShhY2NlcHRfY2hhcnNldEF0dHIpOwotfQotCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0QWNj
ZXB0Q2hhcnNldChjb25zdCBTdHJpbmcgJnZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShhY2Nl
cHRfY2hhcnNldEF0dHIsIHZhbHVlKTsKSW5kZXg6IGh0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMzk0MjUpCisrKyBo
dG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAj
aWZuZGVmIEhUTUxGb3JtRWxlbWVudF9oCiAjZGVmaW5lIEhUTUxGb3JtRWxlbWVudF9oCiAKKyNp
bmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIiAK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCkBAIC0zOSw3ICs0MCw3IEBAIGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiBjbGFzcyBUZXh0RW5jb2Rp
bmc7CiAKLWNsYXNzIEhUTUxGb3JtRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFz
cyBIVE1MRm9ybUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeyAKIHB1YmxpYzoKICAgICBI
VE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmly
dHVhbCB+SFRNTEZvcm1FbGVtZW50KCk7CkBAIC01OSwxMSArNjAsMTEgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgp
OwogCi0gICAgU3RyaW5nIGVuY3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2VuY3R5cGU7IH0KKyAg
ICBTdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmVuY29k
aW5nVHlwZSgpOyB9CiAgICAgdm9pZCBzZXRFbmN0eXBlKGNvbnN0IFN0cmluZyYpOwogCi0gICAg
U3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmN0eXBlOyB9Ci0gICAgdm9pZCBz
ZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGVuY3R5cGUpIHsgc2V0RW5jdHlwZShlbmN0eXBlKTsg
fQorICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVy
LmVuY29kaW5nVHlwZSgpOyB9CisgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKSB7IHNldEVuY3R5cGUodmFsdWUpOyB9CiAKICAgICBib29sIGF1dG9Db21wbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXV0b2NvbXBsZXRlOyB9CiAKQEAgLTkxLDcgKzkyLDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYpOwogCi0gICAgU3RyaW5nIGFjY2VwdENoYXJzZXQoKSBjb25zdDsKKyAgICBTdHJpbmcgYWNj
ZXB0Q2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmFjY2VwdENoYXJz
ZXQoKTsgfQogICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKIAogICAg
IFN0cmluZyBhY3Rpb24oKSBjb25zdDsKQEAgLTEyOSwxNiArMTMwLDE2IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCiBwcml2YXRl
OgotICAgIHZvaWQgcGFyc2VFbmN0eXBlKGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgaXNNYWls
dG9Gb3JtKCkgY29uc3Q7CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygpIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKGNvbnN0IGNoYXIqIGJvdW5kYXJ5KSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YShjb25zdCBDU3Ry
aW5nJiBib3VuZGFyeSk7CiAgICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uOwog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiwgUmVmUHRyPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gQWxpYXNNYXA7Ci0gICAgCisKKyAgICBGb3JtRGF0YUJ1
aWxkZXIgbV9mb3JtRGF0YUJ1aWxkZXI7CiAgICAgQWxpYXNNYXAqIG1fZWxlbWVudEFsaWFzZXM7
CiAgICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKiBjb2xsZWN0aW9uSW5mbzsKIApA
QCAtMTQ3LDEwICsxNDgsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIVE1MSW1hZ2VFbGVtZW50
Kj4gaW1nRWxlbWVudHM7CiAgICAgU3RyaW5nIG1fdXJsOwogICAgIFN0cmluZyBtX3RhcmdldDsK
LSAgICBTdHJpbmcgbV9lbmN0eXBlOwotICAgIFN0cmluZyBtX2FjY2VwdGNoYXJzZXQ7Ci0gICAg
Ym9vbCBtX3Bvc3QgOiAxOwotICAgIGJvb2wgbV9tdWx0aXBhcnQgOiAxOwogICAgIGJvb2wgbV9h
dXRvY29tcGxldGUgOiAxOwogICAgIGJvb2wgbV9pbnN1Ym1pdCA6IDE7CiAgICAgYm9vbCBtX2Rv
aW5nc3VibWl0IDogMTsKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAqICAgICAgICAgICAo
QykgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmls
ZS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIK
KworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKKworI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
b3JtRGF0YUJ1aWxkZXI6OkZvcm1EYXRhQnVpbGRlcigpCisgICAgOiBtX2lzUG9zdE1ldGhvZChm
YWxzZSkKKyAgICAsIG1faXNNdWx0aVBhcnRGb3JtKGZhbHNlKQorICAgICwgbV9lbmNvZGluZ1R5
cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCit7Cit9CisKK0Zvcm1EYXRh
QnVpbGRlcjo6fkZvcm1EYXRhQnVpbGRlcigpCit7Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVy
OjpwYXJzZUVuY29kaW5nVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUu
Y29udGFpbnMoIm11bHRpcGFydCIsIGZhbHNlKSB8fCB0eXBlLmNvbnRhaW5zKCJmb3JtLWRhdGEi
LCBmYWxzZSkpIHsKKyAgICAgICAgbV9lbmNvZGluZ1R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0
YSI7CisgICAgICAgIG1faXNNdWx0aVBhcnRGb3JtID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHR5
cGUuY29udGFpbnMoInRleHQiLCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygicGxhaW4iLCBmYWxz
ZSkpIHsKKyAgICAgICAgbV9lbmNvZGluZ1R5cGUgPSAidGV4dC9wbGFpbiI7CisgICAgICAgIG1f
aXNNdWx0aVBhcnRGb3JtID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lbmNvZGlu
Z1R5cGUgPSAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjsKKyAgICAgICAgbV9p
c011bHRpUGFydEZvcm0gPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVy
OjpwYXJzZU1ldGhvZFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZSh0eXBlLCAicG9zdCIpKQorICAgICAgICBtX2lzUG9zdE1ldGhvZCA9IHRydWU7
CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwgImdldCIpKQorICAgICAgICBt
X2lzUG9zdE1ldGhvZCA9IGZhbHNlOworfQorCitUZXh0RW5jb2RpbmcgRm9ybURhdGFCdWlsZGVy
OjpkYXRhRW5jb2RpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAoreworICAgIFN0cmluZyBh
Y2NlcHRDaGFyc2V0ID0gbV9hY2NlcHRDaGFyc2V0OworICAgIGFjY2VwdENoYXJzZXQucmVwbGFj
ZSgnLCcsICcgJyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBjaGFyc2V0czsKKyAgICBhY2NlcHRD
aGFyc2V0LnNwbGl0KCcgJywgY2hhcnNldHMpOworCisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
OworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzZXRzLmVu
ZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnNl
dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoZW5jb2RpbmcgPSBU
ZXh0RW5jb2RpbmcoKml0KSkuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kaW5n
OworICAgIH0KKworICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKKyAg
ICAgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKworICAgIHJldHVybiBM
YXRpbjFFbmNvZGluZygpOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb25zCitzdGF0aWMgaW5saW5l
IHZvaWQgYXBwZW5kU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBjaGFyIHN0cmlu
ZykKK3sKKyAgICBidWZmZXIuYXBwZW5kKHN0cmluZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBhcHBlbmRTdHJpbmcoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNvbnN0IGNoYXIqIHN0cmluZykK
K3sKKyAgICBidWZmZXIuYXBwZW5kKHN0cmluZywgc3RybGVuKHN0cmluZykpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYXBwZW5kU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBD
U3RyaW5nJiBzdHJpbmcpCit7CisgICAgYnVmZmVyLmFwcGVuZChzdHJpbmcuZGF0YSgpLCBzdHJp
bmcubGVuZ3RoKCkpOworfQorCit2b2lkIEZvcm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRI
ZWFkZXIoY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGNvbnN0IENTdHJpbmcmIG5hbWUpCit7Cisg
ICAgYWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihib3VuZGFyeSk7CisKKyAgICBhcHBlbmRT
dHJpbmcobV9tdWx0aVBhcnREYXRhLCAiQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBu
YW1lPVwiIik7CisgICAgYXBwZW5kU3RyaW5nKG1fbXVsdGlQYXJ0RGF0YSwgbmFtZSk7CisgICAg
YXBwZW5kU3RyaW5nKG1fbXVsdGlQYXJ0RGF0YSwgJyInKTsKK30KKwordm9pZCBGb3JtRGF0YUJ1
aWxkZXI6OmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoY29uc3QgQ1N0cmluZyYgYm91bmRh
cnksIGJvb2wgaXNMYXN0Qm91bmRhcnkpCit7CisgICAgYXBwZW5kU3RyaW5nKG1fbXVsdGlQYXJ0
RGF0YSwgIi0tIik7CisgICAgYXBwZW5kU3RyaW5nKG1fbXVsdGlQYXJ0RGF0YSwgYm91bmRhcnkp
OworCisgICAgaWYgKGlzTGFzdEJvdW5kYXJ5KQorICAgICAgICBhcHBlbmRTdHJpbmcobV9tdWx0
aVBhcnREYXRhLCAiLS0iKTsKKworICAgIGFwcGVuZFN0cmluZyhtX211bHRpUGFydERhdGEsICJc
clxuIik7Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRGaWxlTmFtZVRvTXVsdGlQYXJ0
SGVhZGVyKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCit7CisgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29yayBpZiB0aGUgZmlsZW5hbWUgaW5j
bHVkZXMgYSAiIG1hcmssCisgICAgLy8gb3IgY29udHJvbCBjaGFyYWN0ZXJzIGxpa2UgQ1Igb3Ig
TEYuIFRoaXMgYWxzbyBkb2VzIHN0cmFuZ2UKKyAgICAvLyB0aGluZ3MgaWYgdGhlIGZpbGVuYW1l
IGluY2x1ZGVzIGNoYXJhY3RlcnMgeW91IGNhbid0IGVuY29kZQorICAgIC8vIGluIHRoZSB3ZWJz
aXRlJ3MgY2hhcmFjdGVyIHNldC4KKyAgICBhcHBlbmRTdHJpbmcobV9tdWx0aVBhcnREYXRhLCAi
OyBmaWxlbmFtZT1cIiIpOworICAgIGFwcGVuZFN0cmluZyhtX211bHRpUGFydERhdGEsIGVuY29k
aW5nLmVuY29kZShmaWxlTmFtZS5jaGFyYWN0ZXJzKCksIGZpbGVOYW1lLmxlbmd0aCgpLCBRdWVz
dGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKSk7CisgICAgYXBwZW5kU3RyaW5nKG1fbXVsdGlQYXJ0
RGF0YSwgJyInKTsKK30KKwordm9pZCBGb3JtRGF0YUJ1aWxkZXI6OmFkZENvbnRlbnRUeXBlVG9N
dWx0aVBhcnRIZWFkZXIoY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpCit7CisgICAgYXBwZW5kU3Ry
aW5nKG1fbXVsdGlQYXJ0RGF0YSwgIlxyXG5Db250ZW50LVR5cGU6ICIpOworICAgIGFwcGVuZFN0
cmluZyhtX211bHRpUGFydERhdGEsIG1pbWVUeXBlKTsKK30KKwordm9pZCBGb3JtRGF0YUJ1aWxk
ZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcigpCit7CisgICAgYXBwZW5kU3RyaW5nKG1fbXVsdGlQ
YXJ0RGF0YSwgIlxyXG5cclxuIik7Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVyOjpjbGVhcigp
Cit7CisgICAgbV9tdWx0aVBhcnREYXRhLmNsZWFyKCk7CisgICAgbV9lbmNvZGVkRGF0YS5jbGVh
cigpOworfQorCit2b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0
YShjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICgh
bV9lbmNvZGVkRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIGFwcGVuZFN0cmluZyhtX2VuY29kZWRE
YXRhLCAnJicpOworCisgICAgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShtX2VuY29kZWREYXRhLCBr
ZXkpOworICAgIGFwcGVuZFN0cmluZyhtX2VuY29kZWREYXRhLCAnPScpOworICAgIGVuY29kZVN0
cmluZ0FzRm9ybURhdGEobV9lbmNvZGVkRGF0YSwgdmFsdWUpOworfQorCit2b2lkIEZvcm1EYXRh
QnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGVuY29kZWREYXRh
LCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgc19oZXhE
aWdpdHNbMTddID0gIjAxMjM0NTY3ODlBQkNERUYiOworCisgICAgLy8gU2FtZSBzYWZlIGNoYXJh
Y3RlcnMgYXMgTmV0c2NhcGUgZm9yIGNvbXBhdGliaWxpdHkuCisgICAgc3RhdGljIGNvbnN0IGNo
YXIgc19zYWZlQ2hhcmFjdGVyc1tdID0gIi0uXyoiOworCisgICAgLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQuMQorICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gc3RyaW5nLmRhdGEoKVtp
XTsKKworICAgICAgICBpZiAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYg
YyA8PSAneicpIHx8IChjID49ICcwJyAmJiBjIDw9ICc5JykgfHwgc3RyY2hyKHNfc2FmZUNoYXJh
Y3RlcnMsIGMpKQorICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29kZWREYXRhLCBjKTsKKyAg
ICAgICAgZWxzZSBpZiAoYyA9PSAnICcpCisgICAgICAgICAgICBhcHBlbmRTdHJpbmcoZW5jb2Rl
ZERhdGEsICcrJyk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1xuJyB8fCAoYyA9PSAnXHInICYm
IChpICsgMSA+PSBsZW5ndGggfHwgc3RyaW5nLmRhdGEoKVtpICsgMV0gIT0gJ1xuJykpKQorICAg
ICAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29kZWREYXRhLCAiJTBEJTBBIik7CisgICAgICAgIGVs
c2UgaWYgKGMgIT0gJ1xyJykgeworICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29kZWREYXRh
LCAnJScpOworICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29kZWREYXRhLCBzX2hleERpZ2l0
c1tjID4+IDRdKTsKKyAgICAgICAgICAgIGFwcGVuZFN0cmluZyhlbmNvZGVkRGF0YSwgc19oZXhE
aWdpdHNbYyAmIDB4Rl0pOworICAgICAgICB9CisgICAgfQorfQorCitWZWN0b3I8Y2hhcj4gRm9y
bURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCkKK3sKKyAgICBWZWN0
b3I8Y2hhcj4gYm91bmRhcnk7CisKKyAgICAvLyBUaGUgUkZDIDIwNDYgc3BlYyBzYXlzIHRoZSBB
bHBoYU51bWVyaWMgY2hhcmFjdGVycyBwbHVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycworICAg
IC8vIGFyZSBsZWdhbCBmb3IgYm91bmRhcmllczogICcoKStfLC0uLzo9PworICAgIC8vIEhvd2V2
ZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzLCB0aG91Z2ggbGVnYWwsIGNhdXNlIHNvbWUgc2l0
ZXMgdG8gZmFpbDoKKyAgICAvLyAoKSwuLzo9CisgICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNTIKKyAgICBzdGF0aWMgY29uc3QgY2hhciBzX2FscGhhTnVt
ZXJpY0VuY29kaW5nTWFwWzY0XSA9CisgICAgeworICAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0
NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKKyAgICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMs
IDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCisgICAgICAweDUxLCAweDUyLCAweDUzLCAweDU0LCAw
eDU1LCAweDU2LCAweDU3LCAweDU4LAorICAgICAgMHg1OSwgMHg1QSwgMHg2MSwgMHg2MiwgMHg2
MywgMHg2NCwgMHg2NSwgMHg2NiwKKyAgICAgIDB4NjcsIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIs
IDB4NkMsIDB4NkQsIDB4NkUsCisgICAgICAweDZGLCAweDcwLCAweDcxLCAweDcyLCAweDczLCAw
eDc0LCAweDc1LCAweDc2LAorICAgICAgMHg3NywgMHg3OCwgMHg3OSwgMHg3QSwgMHgzMCwgMHgz
MSwgMHgzMiwgMHgzMywKKyAgICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4Mzks
IDB4MkIsIDB4NDEKKyAgICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS81MjUyNTc3PiBnbWFp
bCBkb2VzIG5vdCBhY2NlcHQgbGVnYWwgY2hhcmFjdGVycyBpbiB0aGUgZm9ybSBib3VuZGFyeQor
ICAgICAgLy8gQXMgc3RhdGVkIGFib3ZlLCBzb21lIGxlZ2FsIGNoYXJhY3RlcnMgY2F1c2UsIHNp
dGVzIHRvIGZhaWwuIFNwZWNpZmljYWxseQorICAgICAgLy8gdGhlIC8gY2hhcmFjdGVyIHdoaWNo
IHdhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGFib3ZlIGFycmF5LiBJIGhhdmUKKyAgICAg
IC8vIHJlcGxhY2VkIHRoZSBsYXN0IGNoYXJhY3RlciB3aXRoIGFub3RoZXIgY2hhcmFjdGVyIGFs
cmVhZHkgaW4gdGhlIGFycmF5CisgICAgICAvLyAobm90aWNlIHRoZSBmaXJzdCBhbmQgbGFzdCB2
YWx1ZXMgYXJlIGJvdGggMHg0MSwgQSkuIEluc3RlYWQgb2YgcGlja2luZworICAgICAgLy8gYW5v
dGhlciB1bmlxdWUgbGVnYWwgY2hhcmFjdGVyIGZvciBib3VuZGFyeSBzdHJpbmdzIHRoYXQsIGJl
Y2F1c2UgaXQgaGFzCisgICAgICAvLyBuZXZlciBiZWVuIHRlc3RlZCwgbWF5IG9yIG1heSBub3Qg
YnJlYWsgb3RoZXIgc2l0ZXMsIEkgc2ltcGx5CisgICAgICAvLyByZXBsYWNlZCAvIHdpdGggQS4g
IFRoaXMgbWVhbnMgQSBpcyB0d2ljZSBhcyBsaWtlbHkgdG8gb2NjdXIgaW4gb3VyIGJvdW5kYXJ5
CisgICAgICAvLyBzdHJpbmdzIHRoYW4gYW55IG90aGVyIGNoYXJhY3RlciBidXQgSSB0aGluayB0
aGlzIGlzIGZpbmUgZm9yIHRoZSB0aW1lIGJlaW5nLgorICAgICAgLy8gVGhlIEZJWE1FIGhlcmUg
aXMgYWJvdXQgcmVzdG9yaW5nIHRoZSAvIGNoYXJhY3RlciBvbmNlIHRoZSBhZm9yZW1lbnRpb25l
ZAorICAgICAgLy8gcmFkYXIgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgfTsKKworICAgIC8vIFN0
YXJ0IHdpdGggYW4gaW5mb3JtYXRpdmUgcHJlZml4LgorICAgIGFwcGVuZFN0cmluZyhib3VuZGFy
eSwgIi0tLS1XZWJLaXRGb3JtQm91bmRhcnkiKTsKKworICAgIC8vIEFwcGVuZCAxNiByYW5kb20g
N2JpdCBhc2NpaSBBbHBoYU51bWVyaWMgY2hhcmFjdGVycy4KKyAgICBWZWN0b3I8Y2hhcj4gcmFu
ZG9tQnl0ZXM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAg
ICAgIHVuc2lnbmVkIHJhbmRvbW5lc3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV1RGOjpyYW5k
b21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjAp
KTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKHNfYWxwaGFOdW1lcmljRW5jb2RpbmdNYXBb
KHJhbmRvbW5lc3MgPj4gMjQpICYgMHgzRl0pOworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQo
c19hbHBoYU51bWVyaWNFbmNvZGluZ01hcFsocmFuZG9tbmVzcyA+PiAxNikgJiAweDNGXSk7Cisg
ICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChzX2FscGhhTnVtZXJpY0VuY29kaW5nTWFwWyhyYW5k
b21uZXNzID4+IDgpICYgMHgzRl0pOworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQoc19hbHBo
YU51bWVyaWNFbmNvZGluZ01hcFtyYW5kb21uZXNzICYgMHgzRl0pOworICAgIH0KKworICAgIGJv
dW5kYXJ5LmFwcGVuZChyYW5kb21CeXRlcyk7CisgICAgYm91bmRhcnkuYXBwZW5kKDApOyAvLyBB
ZGQgYSAwIGF0IHRoZSBlbmQgc28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgQy1zdHlsZSBzdHJpbmcu
CisgICAgcmV0dXJuIGJvdW5kYXJ5OworfQorCit9CkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFC
dWlsZGVyLmgJKHJldmlzaW9uIDApCisrKyBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IE5pa29sYXMgWmltbWVybWFubiA8bmlrb2xhcy56aW1tZXJtYW5uQHRvcmNobW9iaWxlLmNv
bT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgRm9ybURhdGFCdWlsZGVyX2gKKyNkZWZpbmUgRm9ybURhdGFCdWlsZGVy
X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1N0cmluZzsKK2NsYXNzIERv
Y3VtZW50OworY2xhc3MgVGV4dEVuY29kaW5nOworCitjbGFzcyBGb3JtRGF0YUJ1aWxkZXIgOiBO
b25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgRm9ybURhdGFCdWlsZGVyKCk7CisgICAgfkZvcm1E
YXRhQnVpbGRlcigpOworCisgICAgYm9vbCBpc1Bvc3RNZXRob2QoKSBjb25zdCB7IHJldHVybiBt
X2lzUG9zdE1ldGhvZDsgfQorICAgIHZvaWQgc2V0SXNQb3N0TWV0aG9kKGJvb2wgdmFsdWUpIHsg
bV9pc1Bvc3RNZXRob2QgPSB2YWx1ZTsgfQorCisgICAgYm9vbCBpc011bHRpUGFydEZvcm0oKSBj
b25zdCB7IHJldHVybiBtX2lzTXVsdGlQYXJ0Rm9ybTsgfQorICAgIHZvaWQgc2V0SXNNdWx0aVBh
cnRGb3JtKGJvb2wgdmFsdWUpIHsgbV9pc011bHRpUGFydEZvcm0gPSB2YWx1ZTsgfQorCisgICAg
U3RyaW5nIGVuY29kaW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RpbmdUeXBlOyB9Cisg
ICAgdm9pZCBzZXRFbmNvZGluZ1R5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX2VuY29kaW5n
VHlwZSA9IHZhbHVlOyB9CisKKyAgICBTdHJpbmcgYWNjZXB0Q2hhcnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fYWNjZXB0Q2hhcnNldDsgfQorICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25zdCBT
dHJpbmcmIHZhbHVlKSB7IG1fYWNjZXB0Q2hhcnNldCA9IHZhbHVlOyB9CisKKyAgICBWZWN0b3I8
Y2hhcj4mIGVuY29kZWREYXRhKCkgeyByZXR1cm4gbV9lbmNvZGVkRGF0YTsgfQorICAgIFZlY3Rv
cjxjaGFyPiYgbXVsdGlQYXJ0RGF0YSgpIHsgcmV0dXJuIG1fbXVsdGlQYXJ0RGF0YTsgfQorCisg
ICAgdm9pZCBwYXJzZUVuY29kaW5nVHlwZShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHBhcnNl
TWV0aG9kVHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2Rp
bmcoRG9jdW1lbnQqKSBjb25zdDsKKworICAgIC8vIFJlc2V0IHRoZSB2ZWN0b3JzIGhvbGRpbmcg
dGhlIG11bHRpLXBhcnQgZm9ybSBkYXRhICYgcXVlcnkgZGF0YQorICAgIHZvaWQgY2xlYXIoKTsK
KworICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBIVE1MRm9ybUVsZW1lbnQvV01MR29F
bGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YQorICAgIHZvaWQgYmVnaW5NdWx0aVBhcnRI
ZWFkZXIoY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGNvbnN0IENTdHJpbmcmIG5hbWUpOworICAg
IHZvaWQgYWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihjb25zdCBDU3RyaW5nJiBib3VuZGFy
eSwgYm9vbCBpc0xhc3RCb3VuZGFyeSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZEZpbGVOYW1lVG9N
dWx0aVBhcnRIZWFkZXIoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSk7CisgICAgdm9pZCBhZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKGNv
bnN0IENTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICB2b2lkIGZpbmlzaE11bHRpUGFydEhlYWRlcigp
OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudC9XTUxH
b0VsZW1lbnQgZm9yIG5vbiBtdWx0aS1wYXJ0IGZvcm0gZGF0YQorICAgIHZvaWQgYWRkS2V5VmFs
dWVQYWlyQXNGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBrZXksIGNvbnN0IENTdHJpbmcmIHZhbHVl
KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBlbmNvZGUgdGhlIGlucHV0IHN0cmluZyBh
cyBIVE1MIGZvcm0gY29tcGF0aWJsZSBkYXRhCisgICAgc3RhdGljIHZvaWQgZW5jb2RlU3RyaW5n
QXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGVuY29kZWREYXRhLCBjb25zdCBDU3RyaW5nJik7CisK
KyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB1bmlxdWUgYm91bmRhcnkgc3Ry
aW5nIGZvciBhIG11bHRpLXBhcnQgZm9ybQorICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZ2VuZXJh
dGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9pc1Bvc3RN
ZXRob2Q7CisgICAgYm9vbCBtX2lzTXVsdGlQYXJ0Rm9ybTsKKworICAgIFN0cmluZyBtX2VuY29k
aW5nVHlwZTsKKyAgICBTdHJpbmcgbV9hY2NlcHRDaGFyc2V0OworCisgICAgVmVjdG9yPGNoYXI+
IG1fZW5jb2RlZERhdGE7CisgICAgVmVjdG9yPGNoYXI+IG1fbXVsdGlQYXJ0RGF0YTsKK307CisK
K30KKworI2VuZGlmCg==
</data>
<flag name="review"
          id="12364"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26190</attachid>
            <date>2008-12-21 15:33:25 -0800</date>
            <delta_ts>2008-12-21 17:42:17 -0800</delta_ts>
            <desc>Updated patch v2</desc>
            <filename>FormRefactor.diff</filename>
            <type>text/plain</type>
            <size>52830</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5NDI1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMDgtMTIt
MjAgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4
ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk0OQorCisgICAg
ICAgIFJlZmFjdG9yIEhUTUxGb3JtRWxlbWVudCB0byBzaGFyZSBhIG1heGltdW0gbGV2ZWwgb2Yg
Y29kZSBiZXR3ZWVuIEhUTUxGb3JtRWxlbWVudCAmIFdNTEdvRWxlbWVudC4KKyAgICAgICAgQ3Jl
YXRlIGEgbmV3IGhlbHBlciBjbGFzcyAnRm9ybURhdGFCdWlsZGVyJywgd2hpY2ggaXMgaG9sZCBh
cyBtZW1iZXIgdmFyaWFibGUgaW4gdGhvc2UgY2xhc3Nlcy4KKyAgICAgICAgSXQgZW5jYXBzdWxh
dGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCB0byBnZW5lcmF0ZSBhIEZvcm1EYXRhIG9iamVj
dCwgdXNhYmUgZm9yIEhUTUwvV01MIGZvcm0KKyAgICAgICAgc3VibWlzc2lvbiwgaW5jbHVkaW5n
IGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0aW9uLCBtdWx0aS1wYXJ0IGZvcm0gaGFuZGxpbmcgZXRj
LgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcywgbm8gdGVzdCBjYXNlcyBhZmZlY3Rl
ZC4KKyAgICAgICAgV01MR29FbGVtZW50IHdpbGwgYmUgY29udmVydGVkIGluIGEgZm9sbG93LXVw
IHBhdGNoLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS5zY29uczoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6SFRNTEZv
cm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZGF0YUVuY29k
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6ZW5jdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmVuY29k
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c2V0RW5jb2RpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjphY2NlcHRDaGFyc2V0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpGb3JtRGF0YUJ1aWxkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjp+Rm9ybURhdGFCdWlsZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6cGFyc2VFbmNvZGluZ1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFCdWlsZGVyOjpwYXJzZU1ldGhvZFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGFCdWlsZGVyOjpkYXRhRW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6YXBw
ZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0
aVBhcnRIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjphZGRCb3Vu
ZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRl
cjo6YWRkRmlsZU5hbWVUb011bHRpUGFydEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUJ1aWxkZXI6OmFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpmaW5pc2hNdWx0aVBhcnRIZWFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmlzUG9zdE1ldGhvZCk6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OnNldElzUG9zdE1ldGhvZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmlzTXVsdGlQYXJ0Rm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUJ1aWxkZXI6OnNldElzTXVsdGlQYXJ0Rm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVuY29kaW5nVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUJ1aWxkZXI6OnNldEVuY29kaW5nVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUJ1aWxkZXI6OmFjY2VwdENoYXJzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFC
dWlsZGVyOjpzZXRBY2NlcHRDaGFyc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVp
bGRlcjo6ZW5jb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFCdWlsZGVyOjpt
dWx0aVBhcnREYXRhKToKKwogMjAwOC0xMi0yMCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB0eXBvICJDU1NBZmVyUnVsZVZhbHVlIiB0byAiQ1NTQWZ0
ZXJSdWxlVmFsdWUiCkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBHTlVtYWtl
ZmlsZS5hbQkocmV2aXNpb24gMzk0MjUpCisrKyBHTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtMTM1Nyw2ICsxMzU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRE5TLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
SFRUUEhlYWRlck1hcC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaCBcCkluZGV4OiBX
ZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnBybwkocmV2aXNpb24gMzk0MjUpCisr
KyBXZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtODkwLDYgKzg5MCw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNw
cCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsLmNwcCBcCiAgICAgcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAgXAorICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWls
ZGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAgXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL1Byb3RlY3Rpb25TcGFjZS5jcHAgXApJbmRleDogV2ViQ29yZS5zY29ucwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlLnNjb25zCShyZXZpc2lvbiAzOTQyNSkKKysrIFdlYkNvcmUuc2NvbnMJ
KHdvcmtpbmcgY29weSkKQEAgLTc1Nyw2ICs3NTcsNyBAQCBzb3VyY2VzWydwbGF0Zm9ybS9uZXR3
b3JrJ10gPSBbCiAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlLmNwcCcsCiAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAnLAogICAgICdw
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCcsCisgICAgJ3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGFCdWlsZGVyLmNwcCcsCiAgICAgJ3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3Bw
JywKICAgICAncGxhdGZvcm0vbmV0d29yay9tYWMvTmV0d29ya1N0YXRlTm90aWZpZXJNYWMuY3Bw
JywKICAgICAncGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAnLApJbmRl
eDogV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmVTb3VyY2VzLmJrbAko
cmV2aXNpb24gMzk0MjUpCisrKyBXZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAg
LTc3NSw2ICs3NzUsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVl
CiAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbC5jcHAKICAgICAgICAgcGxhdGZv
cm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHAKKyAgICAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNwcApJbmRleDogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDM5NDI1KQorKysgV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTU4MjEsNiArNTgyMSwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xGb3JtRGF0YUJ1
aWxkZXIuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcRm9ybURhdGFCdWlsZGVyLmgiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cbmV0d29ya1xIVFRQSGVhZGVyTWFwLmgiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4
OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzOTQyNSkKKysrIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBA
QAogCQkwODM5NDc2RDBFQ0U0QkQ2MDAwMjczNTAgLyogV01MRWxlbWVudEZhY3RvcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RkI4NEIxMEVDRTM3
MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OwogCQkwODREQkFBMTBFRDM5
RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERCQTlEMEVEMzlEMzUwMDM4QzIyNiAvKiBXTUxWYXJp
YWJsZXMuY3BwICovOyB9OwogCQkwODREQkFBMjBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFi
bGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRE
QkE5RTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggKi87IH07CisJCTA4NUI5MkJB
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjkyQjgwRUZERTczRDAwRTYxMjNDIC8q
IEZvcm1EYXRhQnVpbGRlci5jcHAgKi87IH07CisJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAv
KiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCAq
LzsgfTsKIAkJMDg2NUNDRTYwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NjVDQ0U0MEVE
REY1MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5jcHAgKi87IH07CiAJCTA4NjVDQ0U3MEVE
REY1MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NUNDRTUwRURERjUxQjAwREY5RUMzIC8qIFdNTE5v
b3BFbGVtZW50LmggKi87IH07CiAJCTA4NzQ0QkFBMEVEQjdEODYwMDRDOUU2MyAvKiBXTUxPbkV2
ZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODc0NEJBOTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuY3BwICov
OyB9OwpAQCAtNDg1Niw2ICs0ODU4LDggQEAKIAkJMDgyMDNBOUUwRUQ4QzM1MzAwQjhCNjFBIC8q
IFdNTEFjY2Vzc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
QWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODREQkE5RDBF
RDM5RDM1MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdNTFZhcmlhYmxlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4NERCQTlFMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVmFyaWFibGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTA4NUI5MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGFCdWls
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDg1QjkyQjkwRUZERTczRDAw
RTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb3JtRGF0YUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2
NUNDRTQwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTE5vb3BFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NUNDRTUwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE5vb3BFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzQ0QkE5MEVEQjdEODYwMDRDOUU2MyAv
KiBXTUxPbkV2ZW50RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXTUxPbkV2ZW50RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05ODIyLDYgKzk4MjYsOCBAQAogCQkJCUIyRjM0RkU1MEU4MkY4MTQwMEY2MjdDRCAvKiBETlMu
aCAqLywKIAkJCQk1MTRDNzY1QTBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwICovLAog
CQkJCTUxNEM3NjVCMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oICovLAorCQkJCTA4NUI5
MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovLAorCQkJCTA4NUI5
MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCAqLywKIAkJCQk1MTRDNzY1
QzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUEhlYWRlck1hcC5oICovLAogCQkJCTUxNEM3NjVEMENF
OTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgKi8sCiAJCQkJNTE0Qzc2NUUwQ0U5MjNB
MTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi8sCkBAIC0xNDI5Myw4ICsxNDI5OSwxMSBAQAog
CQkJCTI5QUFDNTFGMEU1Mzk2M0IwMDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJD
b250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5ODAwQzk1MEU1MjRDOEIwMDAyNTUzNiAv
KiBBY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzRERTY5MEVB
NzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
RTkxMUM0MEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ5RTkxMkFCMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxNkZFMTEyMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTZGRTExNDBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTEyQUQwRUZBQzkwNjAwOUQwQ0FGIC8q
IEFuaW1hdGlvbkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REQ3MDk5RTY0OTIwMDU2
RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RjZCQkQw
REI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBOEY2QkJGMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTUyNjQsNiArMTUyNzMsNyBAQAogCQkJCTM3ODRDMzRCMEUxMUFBMzQw
MDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRUQw
QTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2
NzAwQ0U5MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwODVC
OTJCQjBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODEzNkQzODA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTRDNzY0RTBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1NkQzNzNBMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3Rh
dGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUzODcsNiArMTUzOTcsNyBAQAogCQkJCTFBMkQ3NTNE
MERFNDdGQUIwMEYwQTY0OCAvKiBJY29uRmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
RjE0NTQwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUU5MTFDNTBFRjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkgLyog
SW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTE1Nzk0LDYgKzE1ODA1LDcgQEAKIAkJCQkx
QThGNkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QzRBODA1MDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QzRBODRDMDlENTY0OUQwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1
dGVFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQzcwRUY4NkQ0NzAwOUQwQ0FGIC8q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJGRTdFMTMw
RDMyRkFGNjAwNjZGNEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQjQwNDg0RTBFMDgzRkE4MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ0NjEzQUQwQ0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlhRXJyb3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU5NzgsNiArMTU5OTAsNyBAQAogCQkJCTUxNEM3NjU0MENFOTIzNEUw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3
RjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4Q0ZGNUUxMEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0OUU5MTFDOTBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEFGRDAwQzBEQUYzMzU0MDBGNUY1NUMg
LyogU01JTFRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUZEMDBFMERBRjMzNTUwMEY1RjU1
QyAvKiBTTUlMVGltZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFQzkyNTkwQ0U5
MERCNDAwRjkwMzA4IC8qIFNRTEVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MTc0LDkgKzE2
MTg3LDExIEBACiAJCQkJQjIyMjdBRjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ZpZXdTcGVjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FGNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHWm9vbUFu
ZFBhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJFNEVDOTgwRDAwQzIyQjAwNDMyNjQzIC8qIFNW
R1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQ0IwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VGQzlC
OTBENzhEQzhDMDA3RDI1NzkgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0VDMDFCRTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0MUYxRDIxRjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkUGFnZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRD
YWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkU3NUJFMEVERjhGRDcwMDM2MEUxRCAv
KiBTY3JpcHRDYWxsU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjcwRDcwMDlFQjBDN0Mw
MDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MjEyLDYg
KzE2MjI3LDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVk
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBT
aW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQ0QwRUY4NkQ0NzAwOUQw
Q0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRCNkZB
NkY0MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywK
QEAgLTE2Mjg4LDcgKzE2MzA0LDExIEBACiAJCQkJNTFERjZEN0UwQjkyQTE2RDAwQzJEQzg1IC8q
IFRocmVhZENoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNCMDBDRDYzMzEwMDBGQURB
NzUgLyogVGltZVJhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwNUIyNEQwOThGMUI2QjAw
QzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5MTJBRTBFRkFDOTA2MDA5
RDBDQUYgLyogVGltaW5nRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0ZCQUU4MEI1
MTUyRUQwMDAxRjFENyAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkxMUNF
MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5RTkxMUQwMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OUU5MTFEMjBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNzBBMjI5N0JFMDA1
OEQ3QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE5RDJDNTBDRUE2RjYx
MDBGRjUwN0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzkwQTIy
OTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTYzNDEsNiAr
MTYzNjEsNyBAQAogCQkJCTA4ODA3QjdEMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxQcmV2RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4MDdCN0YwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTFJl
ZnJlc2hFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODgwN0I4MTBFRDcwOUFCMDAzRjY5
NzUgLyogV01MU2V0dmFyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg4MjBCREYwRUY1
RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhD
RDYxQkQwRUQzOTI5QzAwMkRERjUxIC8qIFdNTFRhc2tFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODBGQUUxQjBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODFEODEzMjBFRTBFNzREMDBENzM2ODkgLyogV01MVGltZXJFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE2NDQxLDIwICsxNjQ2Miw2IEBACiAJCQkJMUE1NjlE
MjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMDg4MjBCREYwRUY1RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFGMUQyMUYwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlw
dENhY2hlZFBhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFDNDBFRjg2RDQ3MDA5
RDBDQUYgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFDNTBF
Rjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTQ5RTkxMUM3MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUM5MEVGODZENDcwMDlEMENBRiAvKiBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUNCMEVG
ODZENDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNDlFOTExQ0QwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUNFMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RTkxMUQwMEVGODZENDcwMDlEMENB
RiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUU5MTFEMjBF
Rjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk0OUU5MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk0OUU5MTJBRDBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFOTEyQUUwRUZBQzkwNjAwOUQwQ0FGIC8qIFRpbWluZ0Z1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE2NzQwLDkgKzE2NzQ3LDEyIEBACiAJCQkJMjlB
QUM1MjAwRTUzOTYzQjAwOEY5QjNCIC8qIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5l
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTgwMEM5NjBFNTI0QzhCMDAwMjU1MzYgLyogQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzRERTZFMEVBNzVD
NjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlF
OTExQzMwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTEyQUEwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExMTBFNkUxREE3MDBCRjYwODggLyogQW5p
bWF0aW9uQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExMzBFNkUxREE3MDBCRjYw
ODggLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUU5MTJB
QzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOURENjA5OUU2NDkyMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE4RjZCQkMwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2Fj
aGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RjZCQkUwREI1NUNEQzAwMURCNzk0IC8qIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE3MjIxLDYgKzE3MjMx
LDcgQEAKIAkJCQlCMkFGRkM4MjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udFBsYXRmb3JtRGF0YU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2Q0YxMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NkYwQ0U5MjNBMTAwN0VGM0NEIC8q
IEZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4NUI5MkJBMEVGREU3M0QwMEU2MTIz
QyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxMzZEMzkwOTcz
QThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRD
NzY0RjBDRTkyMzRFMDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk2NTZEMzczQjBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTc4MDQsNiArMTc4MTUsNyBAQAogCQkJCTkzRTIyN0UxMEFGNTg5QUQwMEQ0
ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RjZC
QzUwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4QzRBODA2MDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDlFOTExQzYwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQkZFN0UxMjBEMzJGQUY2MDA2NkY0
RDIgLyogTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUI0MDQ4
NEQwRTA4M0ZBODAwN0Q2OTIwIC8qIE1lZGlhRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNEUxOTU5MjEwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTc5NjcsNiArMTc5NzksNyBAQAogCQkJCTUxNEM3NjdFMENFOTIzQTEw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTRDNzY1NTBDRTkyMzRGMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4Q0ZGNUU3MEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RTkxMUM4MEVGODZENDcwMDlEMENBRiAvKiBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRBRkQwMEIwREFGMzM1
NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0QUZEMDBEMERB
RjMzNTUwMEY1RjU1QyAvKiBTTUlMVGltZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTk2MTE3MzBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMTgxNTYsMTAgKzE4MTY5LDEyIEBACiAJCQkJQjIyMjdBRjIwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR1ZpZXdTcGVjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUY1MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRTRF
Qzk3MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDlFOTExQ0EwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDRUZDOUJBMEQ3OERDOEMwMDdEMjU3OSAvKiBTY2hlZHVs
ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFMjRGOTcwRDdDQUYwRTAwN0UwNEMyIC8q
IFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVERkU4RjU2MEQxNjQ3N0Iw
MDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQzAx
QkQwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUYx
RDIyMDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkUGFnZURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDE2RTc1Q0MwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0
Q2FsbFN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQjcwRDZGMDlFQjBDN0MwMDlEODQ2
OCAvKiBTY3JpcHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTgxOTMsNiArMTgy
MDgsNyBAQAogCQkJCTkzMzA5RUEyMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVG
b250RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM3RjBEMDBBNUMxMDAzMDA3NEQg
LyogU2ltcGxlRm9udERhdGFNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk0OUU5MTFDQzBFRjg2
RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0QjZGQTZGNTBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTRCNkZBNkY3MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRN
YWMubW0gaW4gU291cmNlcyAqLywKQEAgLTE4MjU4LDYgKzE4Mjc0LDggQEAKIAkJCQk1MURGNkQ4
MDBCOTJBMThFMDBDMkRDODUgLyogVGhyZWFkQ2hlY2subW0gaW4gU291cmNlcyAqLywKIAkJCQlF
NDQ2MTNBRjBDRDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzMwOUVBNDA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDlFOTExQ0YwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExRDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNjBBMjI5
N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM4
MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTE5MDk5RTY0OTIwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMTgzMDcsNiArMTgzMjUsNyBAQAogCQkJCTA4ODA3QjdDMEVENzA5QUIwMDNGNjk3NSAv
KiBXTUxQcmV2RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODgwN0I3RTBFRDcwOUFC
MDAzRjY5NzUgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg4
MDdCODAwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMDg4MjBCREUwRUY1RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwOENENjFCQzBFRDM5MjlDMDAyRERGNTEgLyogV01MVGFza0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgwRkFFMUEwRUVFQkRBODAwQUFDREU5IC8q
IFdNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFEODEzMTBFRTBF
NzREMDBENzM2ODkgLyogV01MVGltZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTgz
OTYsMTcgKzE4NDE1LDYgQEAKIAkJCQkxQTU2OUQyMjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGlt
ZV9vYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0MzOTgz
IC8qIHJ1bnRpbWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDky
MDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwODgyMEJE
RTBFRjVEMzgxMDA5MDk5QTggLyogV01MVGFibGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQxRjFEMjIwMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRQYWdlRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk0OUU5MTFDMzBFRjg2RDQ3MDA5RDBDQUYgLyogQWZmaW5lVHJh
bnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAv
KiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTEx
QzgwRUY4NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk0OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTExQ0MwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFOTEx
Q0YwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNDlFOTExRDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUU5MTJBQTBFRkFDOTA2MDA5RDBDQUYg
LyogQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RTkxMkFDMEVGQUM5MDYwMDlE
MENBRiAvKiBBbmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAko
cmV2aXNpb24gMzk0MjUpCisrKyBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDE1ICs2MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGhleERpZ2l0c1sxN10gPSAiMDEy
MzQ1Njc4OUFCQ0RFRiI7Ci0KIEhUTUxGb3JtRWxlbWVudDo6SFRNTEZvcm1FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBIVE1MRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2VsZW1lbnRBbGlhc2VzKDApCiAgICAgLCBjb2xsZWN0
aW9uSW5mbygwKQotICAgICwgbV9lbmN0eXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQiKQotICAgICwgbV9wb3N0KGZhbHNlKQotICAgICwgbV9tdWx0aXBhcnQoZmFsc2UpCiAg
ICAgLCBtX2F1dG9jb21wbGV0ZSh0cnVlKQogICAgICwgbV9pbnN1Ym1pdChmYWxzZSkKICAgICAs
IG1fZG9pbmdzdWJtaXQoZmFsc2UpCkBAIC0xNjEsMTczICsxNTYsOTIgQEAgdm9pZCBIVE1MRm9y
bUVsZW1lbnQ6OnN1Ym1pdENsaWNrKEV2ZW50KgogICAgICAgICBwcmVwYXJlU3VibWl0KGV2ZW50
KTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBj
b25zdCBjaGFyKiBzdHJpbmcpCi17Ci0gICAgYnVmZmVyLmFwcGVuZChzdHJpbmcsIHN0cmxlbihz
dHJpbmcpKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVm
ZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgYnVmZmVyLmFwcGVuZChzdHJpbmcu
ZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVk
U3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3
LjEzLjQuMQotICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBzdHJp
bmcuZGF0YSgpW2ldOwotCi0gICAgICAgIC8vIFNhbWUgc2FmZSBjaGFyYWN0ZXJzIGFzIE5ldHNj
YXBlIGZvciBjb21wYXRpYmlsaXR5LgotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBzYWZlW10g
PSAiLS5fKiI7Ci0gICAgICAgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdh
JyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBzdHJjaHIoc2FmZSwg
YykpCi0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotICAgICAgICBlbHNlIGlmIChjID09
ICcgJykKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJysnKTsKLSAgICAgICAgZWxzZSBpZiAo
YyA9PSAnXG4nIHx8IChjID09ICdccicgJiYgKGkgKyAxID49IGxlbmd0aCB8fCBzdHJpbmcuZGF0
YSgpW2kgKyAxXSAhPSAnXG4nKSkpCi0gICAgICAgICAgICBhcHBlbmRTdHJpbmcoYnVmZmVyLCAi
JTBEJTBBIik7Ci0gICAgICAgIGVsc2UgaWYgKGMgIT0gJ1xyJykgewotICAgICAgICAgICAgYnVm
ZmVyLmFwcGVuZCgnJScpOwotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChoZXhEaWdpdHNbYyA+
PiA0XSk7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGhleERpZ2l0c1tjICYgMHhGXSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIFRleHRFbmNvZGluZyBIVE1MRm9ybUVsZW1lbnQ6OmRhdGFF
bmNvZGluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzTWFpbHRvRm9ybSgpKQogICAgICAgICByZXR1
cm4gVVRGOEVuY29kaW5nKCk7CiAKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7Ci0gICAgU3Ry
aW5nIHN0ciA9IG1fYWNjZXB0Y2hhcnNldDsKLSAgICBzdHIucmVwbGFjZSgnLCcsICcgJyk7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gY2hhcnNldHM7Ci0gICAgc3RyLnNwbGl0KCcgJywgY2hhcnNldHMp
OwotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGFyc2V0cy5lbmQo
KTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoYXJzZXRz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKChlbmNvZGluZyA9IFRleHRF
bmNvZGluZygqaXQpKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2Rpbmc7Ci0g
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHJldHVy
biBmcmFtZS0+bG9hZGVyKCktPmVuY29kaW5nKCk7Ci0gICAgcmV0dXJuIExhdGluMUVuY29kaW5n
KCk7CisgICAgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmRhdGFFbmNvZGluZyhkb2N1bWVudCgp
KTsKIH0KIAotUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50Ojpmb3JtRGF0YShj
b25zdCBjaGFyKiBib3VuZGFyeSkgY29uc3QKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3Jt
RWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoY29uc3QgQ1N0cmluZyYgYm91bmRhcnkpCiB7CiAgICAg
VmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IGRh
dGFFbmNvZGluZygpLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKTsKIAogICAgIFJlZlB0cjxG
b3JtRGF0YT4gcmVzdWx0ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotICAgIAorCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOwogICAgICAg
ICBGb3JtRGF0YUxpc3QgbGlzdChlbmNvZGluZyk7CiAKLSAgICAgICAgaWYgKCFjb250cm9sLT5k
aXNhYmxlZCgpICYmIGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKGxpc3QsIG1fbXVsdGlwYXJ0KSkg
eworICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkgJiYgY29udHJvbC0+YXBwZW5kRm9y
bURhdGEobGlzdCwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpKSB7CiAgICAg
ICAgICAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGxpc3QubGlzdCgpLnNpemUoKTsKICAg
ICAgICAgICAgIEFTU0VSVChmb3JtRGF0YUxpc3RTaXplICUgMiA9PSAwKTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZm9ybURhdGFMaXN0U2l6ZTsgaiArPSAyKSB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiBrZXkgPSBsaXN0Lmxpc3QoKVtq
XTsKICAgICAgICAgICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIHZhbHVlID0gbGlz
dC5saXN0KClbaiArIDFdOwotICAgICAgICAgICAgICAgIGlmICghbV9tdWx0aXBhcnQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3Mg
dGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93PwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS5kYXRhKCkgPT0g
ImlzaW5kZXgiKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kRW5jb2RlZFN0cmluZyhl
bmNvZGVkRGF0YSwgdmFsdWUuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVuY29kZWREYXRhLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkRGF0YS5hcHBlbmQoJyYnKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZEVuY29kZWRTdHJpbmcoZW5jb2RlZERhdGEsIGtleS5kYXRh
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZERhdGEuYXBwZW5kKCc9Jyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmNvZGVkU3RyaW5nKGVuY29kZWREYXRhLCB2
YWx1ZS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEs
IHZhbHVlLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoZW5j
b2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRlciwgIi0tIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFN0cmluZyhoZWFkZXIsIGJvdW5kYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kU3RyaW5nKGhlYWRlciwgIlxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
U3RyaW5nKGhlYWRlciwgIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiIp
OwotICAgICAgICAgICAgICAgICAgICBoZWFkZXIuYXBwZW5kKGtleS5kYXRhKCkuZGF0YSgpLCBr
ZXkuZGF0YSgpLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZCgn
IicpOworICAgICAgICAgICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFy
dEhlYWRlcihoZWFkZXIsIGJvdW5kYXJ5LCBrZXkuZGF0YSgpKTsKIAogICAgICAgICAgICAgICAg
ICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAvLyBpZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGZpbGVuYW1lCisgICAgICAgICAgICAg
ICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQg
dG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmZp
bGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFs
dWUuZmlsZSgpLT5wYXRoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZW5h
bWUgPSB2YWx1ZS5maWxlKCktPmZpbGVOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgZmlsZU5hbWUgPSB2YWx1ZS5maWxlKCktPmZpbGVOYW1lKCk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlm
IGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2Fk
LgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxl
bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVGaWxl
ID0gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZp
bGVGb3JVcGxvYWQocGF0aCwgZ2VuZXJhdGVkRmlsZW5hbWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGVGaWxlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBnZW5lcmF0ZWRGaWxlbmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVyYXRlZEZpbGVOYW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGVGaWxlID0gcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxv
YWQocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsZU5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IHdvcmsgaWYgdGhlIGZpbGVuYW1lIGluY2x1
ZGVzIGEgIiBtYXJrLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3IgY29udHJvbCBjaGFy
YWN0ZXJzIGxpa2UgQ1Igb3IgTEYuIFRoaXMgYWxzbyBkb2VzIHN0cmFuZ2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoaW5ncyBpZiB0aGUgZmlsZW5hbWUgaW5jbHVkZXMgY2hhcmFjdGVy
cyB5b3UgY2FuJ3QgZW5jb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgd2Vi
c2l0ZSdzIGNoYXJhY3RlciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRTdHJp
bmcoaGVhZGVyLCAiOyBmaWxlbmFtZT1cIiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kU3RyaW5nKGhlYWRlciwgZW5jb2RpbmcuZW5jb2RlKGZpbGVuYW1lLmNoYXJhY3RlcnMoKSwg
ZmlsZW5hbWUubGVuZ3RoKCksIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmQoJyInKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFk
ZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZmlsZW5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBNSU1FVHlwZVJlZ2lzdHJ5IGZ1bmN0aW9uJ3MgbmFtZSBtYWtlcyBpdCBzb3VuZCBs
aWtlIGl0IHRha2VzIGEgcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3Qg
anVzdCBhIGJhc2VuYW1lLiBCdXQgZmlsZW5hbWUgaXMgbm90IHRoZSBwYXRoLiBCdXQgbm90ZSB0
aGF0IGl0J3Mgbm90IHNhZmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0
IHVzZSBwYXRoIGluc3RlYWQgc2luY2UgaW4gdGhlIGdlbmVyYXRlZC1maWxlIGNhc2UgaXQgd2ls
bCBub3QgcmVmbGVjdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNSU1FIHR5
cGUgb2YgdGhlIGdlbmVyYXRlZCBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxl
bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKGhlYWRl
ciwgIlxyXG5Db250ZW50LVR5cGU6ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRTdHJpbmcoaGVhZGVyLCBtaW1lVHlwZS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtaW1l
VHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlTmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZENvbnRlbnRU
eXBlVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtaW1lVHlwZS5sYXRpbjEoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRTdHJpbmcoaGVhZGVyLCAiXHJcblxyXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuZmluaXNoTXVsdGlQYXJ0SGVhZGVyKGhlYWRlcik7CiAK
LSAgICAgICAgICAgICAgICAgICAgLy8gYXBwZW5kIGJvZHkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQXBwZW5kIGJvZHkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGhl
YWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc2l6
ZV90IGRhdGFTaXplID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZmlsZSgpICYmICF2YWx1ZS5maWxl
KCktPnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFw
cGVuZEZpbGUodmFsdWUuZmlsZSgpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CisKICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKCJcclxuIiwgMik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0KLSAgICBpZiAo
bV9tdWx0aXBhcnQpIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29kZWREYXRhLCAiLS0iKTsK
LSAgICAgICAgYXBwZW5kU3RyaW5nKGVuY29kZWREYXRhLCBib3VuZGFyeSk7Ci0gICAgICAgIGFw
cGVuZFN0cmluZyhlbmNvZGVkRGF0YSwgIi0tXHJcbiIpOwotICAgIH0KKyAgICBpZiAobV9mb3Jt
RGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpCisgICAgICAgIG1fZm9ybURhdGFCdWlsZGVy
LmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIGJvdW5kYXJ5LCB0cnVl
KTsKIAogICAgIHJlc3VsdC0+YXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWRE
YXRhLnNpemUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnBhcnNlRW5jdHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgaWYodHlwZS5jb250
YWlucygibXVsdGlwYXJ0IiwgZmFsc2UpIHx8IHR5cGUuY29udGFpbnMoImZvcm0tZGF0YSIsIGZh
bHNlKSkgewotICAgICAgICBtX2VuY3R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7Ci0gICAg
ICAgIG1fbXVsdGlwYXJ0ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUuY29udGFpbnMoInRl
eHQiLCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygicGxhaW4iLCBmYWxzZSkpIHsKLSAgICAgICAg
bV9lbmN0eXBlID0gInRleHQvcGxhaW4iOwotICAgICAgICBtX211bHRpcGFydCA9IGZhbHNlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZW5jdHlwZSA9ICJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQiOwotICAgICAgICBtX211bHRpcGFydCA9IGZhbHNlOwotICAgIH0KLX0KLQog
Ym9vbCBIVE1MRm9ybUVsZW1lbnQ6OmlzTWFpbHRvRm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHByb3RvY29sSXMobV91cmwsICJtYWlsdG8iKTsKQEAgLTM1OCw1NiArMjcyLDYgQEAgdm9pZCBI
VE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpCiAgICAgc3VibWl0KDAsIGZhbHNlKTsKIH0KIAotLy8g
UmV0dXJucyBhIDAtdGVybWluYXRlZCBDIHN0cmluZyBpbiB0aGUgdmVjdG9yLgotc3RhdGljIHZv
aWQgZ2V0VW5pcXVlQm91bmRhcnlTdHJpbmcoVmVjdG9yPGNoYXI+JiBib3VuZGFyeSkKLXsKLSAg
ICAvLyBUaGUgUkZDIDIwNDYgc3BlYyBzYXlzIHRoZSBBbHBoYU51bWVyaWMgY2hhcmFjdGVycyBw
bHVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycwotICAgIC8vIGFyZSBsZWdhbCBmb3IgYm91bmRh
cmllczogICcoKStfLC0uLzo9PwotICAgIC8vIEhvd2V2ZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0
ZXJzLCB0aG91Z2ggbGVnYWwsIGNhdXNlIHNvbWUgc2l0ZXMgdG8gZmFpbDoKLSAgICAvLyAoKSwu
Lzo9Ci0gICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNTIK
LSAgICBzdGF0aWMgY29uc3QgY2hhciBBbHBoYU51bWVyaWNFbmNNYXBbNjRdID0KLSAgICB7Ci0g
ICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAotICAg
ICAgMHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKLSAgICAg
IDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCi0gICAgICAw
eDU5LCAweDVBLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAotICAgICAgMHg2
NywgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwKLSAgICAgIDB4NkYs
IDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCi0gICAgICAweDc3LCAw
eDc4LCAweDc5LCAweDdBLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAotICAgICAgMHgzNCwgMHgz
NSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHg0MQotICAgICAgLy8gRklYTUUgPHJk
YXI6Ly9wcm9ibGVtLzUyNTI1Nzc+IGdtYWlsIGRvZXMgbm90IGFjY2VwdCBsZWdhbCBjaGFyYWN0
ZXJzIGluIHRoZSBmb3JtIGJvdW5kYXJ5Ci0gICAgICAvLyBBcyBzdGF0ZWQgYWJvdmUsIHNvbWUg
bGVnYWwgY2hhcmFjdGVycyBjYXVzZSwgc2l0ZXMgdG8gZmFpbC4gU3BlY2lmaWNhbGx5Ci0gICAg
ICAvLyB0aGUgLyBjaGFyYWN0ZXIgd2hpY2ggd2FzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUg
YWJvdmUgYXJyYXkuIEkgaGF2ZQotICAgICAgLy8gcmVwbGFjZWQgdGhlIGxhc3QgY2hhcmFjdGVy
IHdpdGggYW5vdGhlciBjaGFyYWN0ZXIgYWxyZWFkeSBpbiB0aGUgYXJyYXkKLSAgICAgIC8vIChu
b3RpY2UgdGhlIGZpcnN0IGFuZCBsYXN0IHZhbHVlcyBhcmUgYm90aCAweDQxLCBBKS4gSW5zdGVh
ZCBvZiBwaWNraW5nCi0gICAgICAvLyBhbm90aGVyIHVuaXF1ZSBsZWdhbCBjaGFyYWN0ZXIgZm9y
IGJvdW5kYXJ5IHN0cmluZ3MgdGhhdCwgYmVjYXVzZSBpdCBoYXMKLSAgICAgIC8vIG5ldmVyIGJl
ZW4gdGVzdGVkLCBtYXkgb3IgbWF5IG5vdCBicmVhayBvdGhlciBzaXRlcywgSSBzaW1wbHkKLSAg
ICAgIC8vIHJlcGxhY2VkIC8gd2l0aCBBLiAgVGhpcyBtZWFucyBBIGlzIHR3aWNlIGFzIGxpa2Vs
eSB0byBvY2N1ciBpbiBvdXIgYm91bmRhcnkKLSAgICAgIC8vIHN0cmluZ3MgdGhhbiBhbnkgb3Ro
ZXIgY2hhcmFjdGVyIGJ1dCBJIHRoaW5rIHRoaXMgaXMgZmluZSBmb3IgdGhlIHRpbWUgYmVpbmcu
Ci0gICAgICAvLyBUaGUgRklYTUUgaGVyZSBpcyBhYm91dCByZXN0b3JpbmcgdGhlIC8gY2hhcmFj
dGVyIG9uY2UgdGhlIGFmb3JlbWVudGlvbmVkCi0gICAgICAvLyByYWRhciBoYXMgYmVlbiByZXNv
bHZlZC4KLSAgICB9OwotCi0gICAgLy8gU3RhcnQgd2l0aCBhbiBpbmZvcm1hdGl2ZSBwcmVmaXgu
Ci0gICAgY29uc3QgY2hhciBib3VuZGFyeVByZWZpeFtdID0gIi0tLS1XZWJLaXRGb3JtQm91bmRh
cnkiOwotICAgIGJvdW5kYXJ5LmFwcGVuZChib3VuZGFyeVByZWZpeCwgc3RybGVuKGJvdW5kYXJ5
UHJlZml4KSk7Ci0KLSAgICAvLyBBcHBlbmQgMTYgcmFuZG9tIDdiaXQgYXNjaWkgQWxwaGFOdW1l
cmljIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPGNoYXI+IHJhbmRvbUJ5dGVzOwotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgcmFuZG9tbmVzcyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6OnJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpOwotICAgICAgICByYW5kb21CeXRlcy5h
cHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21uZXNzID4+IDI0KSAmIDB4M0ZdKTsKLSAg
ICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFsocmFuZG9tbmVzcyA+
PiAxNikgJiAweDNGXSk7Ci0gICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChBbHBoYU51bWVyaWNF
bmNNYXBbKHJhbmRvbW5lc3MgPj4gOCkgJiAweDNGXSk7Ci0gICAgICAgIHJhbmRvbUJ5dGVzLmFw
cGVuZChBbHBoYU51bWVyaWNFbmNNYXBbcmFuZG9tbmVzcyAmIDB4M0ZdKTsKLSAgICB9Ci0KLSAg
ICBib3VuZGFyeS5hcHBlbmQocmFuZG9tQnl0ZXMpOwotICAgIGJvdW5kYXJ5LmFwcGVuZCgwKTsg
Ly8gQWRkIGEgMCBhdCB0aGUgZW5kIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIEMtc3R5bGUgc3Ry
aW5nLgotfQotCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVudCwgYm9v
bCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbikKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVu
dCgpLT52aWV3KCk7CkBAIC00NTEsMzQgKzMxNSwzMyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6
c3VibWl0KEV2ZW50KiBldmVuCiAgICAgaWYgKG1fdXJsLmlzRW1wdHkoKSkKICAgICAgICAgbV91
cmwgPSBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKIAotICAgIGlmIChtX3Bvc3QpIHsKLSAg
ICAgICAgaWYgKG1fbXVsdGlwYXJ0ICYmIGlzTWFpbHRvRm9ybSgpKSB7CisgICAgaWYgKG1fZm9y
bURhdGFCdWlsZGVyLmlzUG9zdE1ldGhvZCgpKSB7CisgICAgICAgIGlmIChtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSAmJiBpc01haWx0b0Zvcm0oKSkgewogICAgICAgICAgICAg
c2V0RW5jdHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7Ci0gICAgICAg
ICAgICBtX211bHRpcGFydCA9IGZhbHNlOworICAgICAgICAgICAgQVNTRVJUKCFtX2Zvcm1EYXRh
QnVpbGRlci5pc011bHRpUGFydEZvcm0oKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1f
bXVsdGlwYXJ0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Rm9ybURhdGE+IGRhdGEgPSBmb3JtRGF0
YSgwKTsKKyAgICAgICAgaWYgKCFtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkg
eworICAgICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBkYXRhID0gY3JlYXRlRm9ybURhdGEoQ1N0
cmluZygpKTsKICAgICAgICAgICAgIGlmIChpc01haWx0b0Zvcm0oKSkgewogICAgICAgICAgICAg
ICAgIFN0cmluZyBib2R5ID0gZGF0YS0+ZmxhdHRlblRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVuY3R5cGUoKSwgInRleHQvcGxhaW4iKSkgeworICAg
ICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtX2Zvcm1EYXRhQnVpbGRlci5lbmNv
ZGluZ1R5cGUoKSwgInRleHQvcGxhaW4iKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBDb252
ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGRlY29kZSwgYW5kIHMvJi9cclxuLy4gQWxzbywgc3BhY2Vz
IGFyZSBlbmNvZGVkIGFzICUyMC4KICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhib2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxhY2UoJysnLCAn
ICcpICsgIlxyXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IGJvZHlEYXRhOwotICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhib2R5RGF0YSwg
ImJvZHk9Iik7Ci0gICAgICAgICAgICAgICAgYXBwZW5kRW5jb2RlZFN0cmluZyhib2R5RGF0YSwg
Ym9keS51dGY4KCkpOworICAgICAgICAgICAgICAgIGJvZHlEYXRhLmFwcGVuZCgiYm9keT0iLCA1
KTsKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURh
dGEoYm9keURhdGEsIGJvZHkudXRmOCgpKTsKICAgICAgICAgICAgICAgICBkYXRhID0gRm9ybURh
dGE6OmNyZWF0ZShTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5RGF0YS5zaXplKCkpLnJlcGxh
Y2UoJysnLCAiJTIwIikubGF0aW4xKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEsIG1fdGFyZ2V0LCBl
bmN0eXBlKCksIFN0cmluZygpLCBldmVudCk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkt
PnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgZGF0YSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWls
ZGVyLmVuY29kaW5nVHlwZSgpLCBTdHJpbmcoKSwgZXZlbnQpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5OwotICAgICAgICAgICAgZ2V0VW5pcXVl
Qm91bmRhcnlTdHJpbmcoYm91bmRhcnkpOwotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5z
dWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGZvcm1EYXRhKGJvdW5kYXJ5LmRhdGEoKSksIG1fdGFy
Z2V0LCBlbmN0eXBlKCksIGJvdW5kYXJ5LmRhdGEoKSwgZXZlbnQpOworICAgICAgICAgICAgVmVj
dG9yPGNoYXI+IGJvdW5kYXJ5ID0gbV9mb3JtRGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3Vu
ZGFyeVN0cmluZygpOworICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQ
T1NUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKGJvdW5kYXJ5LmRhdGEoKSksIG1fdGFyZ2V0LCBt
X2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgYm91bmRhcnkuZGF0YSgpLCBldmVudCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX211bHRpcGFydCA9IGZhbHNlOwot
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1fdXJsLCBmb3JtRGF0
YSgwKSwgbV90YXJnZXQsIFN0cmluZygpLCBTdHJpbmcoKSwgZXZlbnQpOworICAgICAgICBtX2Zv
cm1EYXRhQnVpbGRlci5zZXRJc011bHRpUGFydEZvcm0oZmFsc2UpOworICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPnN1Ym1pdEZvcm0oIkdFVCIsIG1fdXJsLCBjcmVhdGVGb3JtRGF0YShDU3RyaW5n
KCkpLCBtX3RhcmdldCwgU3RyaW5nKCksIFN0cmluZygpLCBldmVudCk7CiAgICAgfQogCiAgICAg
aWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikK
QEAgLTUxNCwxNyArMzc3LDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnUKICAgICAgICAgbV91cmwgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikKICAgICAgICAgbV90YXJnZXQgPSBhdHRy
LT52YWx1ZSgpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZXRob2RBdHRyKSB7Ci0g
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicG9zdCIpKQotICAg
ICAgICAgICAgbV9wb3N0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgImdldCIpKQotICAgICAgICAgICAgbV9wb3N0ID0gZmFsc2U7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0dHIpCi0gICAgICAgIHBhcnNl
RW5jdHlwZShhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWV0
aG9kQXR0cikKKyAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VNZXRob2RUeXBlKGF0dHIt
PnZhbHVlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbmN0eXBlQXR0cikKKyAg
ICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VFbmNvZGluZ1R5cGUoYXR0ci0+dmFsdWUoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2VwdF9jaGFyc2V0QXR0cikKICAgICAg
ICAgLy8gc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcnNldHMgdGhlIHNlcnZlcgogICAgICAg
ICAvLyBhY2NlcHRzIC0gc2VlIHJmYzIwNDUKLSAgICAgICAgbV9hY2NlcHRjaGFyc2V0ID0gYXR0
ci0+dmFsdWUoKTsKKyAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuc2V0QWNjZXB0Q2hhcnNldChh
dHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0QXR0cikg
ewogICAgICAgICAvLyBpZ25vcmUgdGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4KICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CkBAIC02MjIsMTEgKzQ4
Miw2IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmkKICAgICBzZXRB
dHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxGb3JtRWxlbWVudDo6
YWNjZXB0Q2hhcnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2NlcHRf
Y2hhcnNldEF0dHIpOwotfQotCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0QWNjZXB0Q2hhcnNl
dChjb25zdCBTdHJpbmcgJnZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShhY2NlcHRfY2hhcnNl
dEF0dHIsIHZhbHVlKTsKSW5kZXg6IGh0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMzk0MjUpCisrKyBodG1sL0hUTUxG
b3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEhU
TUxGb3JtRWxlbWVudF9oCiAjZGVmaW5lIEhUTUxGb3JtRWxlbWVudF9oCiAKKyNpbmNsdWRlICJG
b3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIiAKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogCkBAIC0zOSw3ICs0MCw3IEBAIGNsYXNzIEhUTUxJbnB1dEVsZW1l
bnQ7CiBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKLWNs
YXNzIEhUTUxGb3JtRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBIVE1MRm9y
bUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeyAKIHB1YmxpYzoKICAgICBIVE1MRm9ybUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+SFRN
TEZvcm1FbGVtZW50KCk7CkBAIC01OSwxMSArNjAsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwogICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCi0gICAg
U3RyaW5nIGVuY3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2VuY3R5cGU7IH0KKyAgICBTdHJpbmcg
ZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgp
OyB9CiAgICAgdm9pZCBzZXRFbmN0eXBlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgU3RyaW5nIGVu
Y29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmN0eXBlOyB9Ci0gICAgdm9pZCBzZXRFbmNvZGlu
Zyhjb25zdCBTdHJpbmcmIGVuY3R5cGUpIHsgc2V0RW5jdHlwZShlbmN0eXBlKTsgfQorICAgIFN0
cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5n
VHlwZSgpOyB9CisgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSB7IHNl
dEVuY3R5cGUodmFsdWUpOyB9CiAKICAgICBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXV0b2NvbXBsZXRlOyB9CiAKQEAgLTkxLDcgKzkyLDcgQEAgcHVibGljOgogICAgIFN0
cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwogCi0g
ICAgU3RyaW5nIGFjY2VwdENoYXJzZXQoKSBjb25zdDsKKyAgICBTdHJpbmcgYWNjZXB0Q2hhcnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmFjY2VwdENoYXJzZXQoKTsgfQog
ICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyBh
Y3Rpb24oKSBjb25zdDsKQEAgLTEyOSwxNiArMTMwLDE2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCiBwcml2YXRlOgotICAgIHZv
aWQgcGFyc2VFbmN0eXBlKGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgaXNNYWlsdG9Gb3JtKCkg
Y29uc3Q7CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKGNvbnN0IGNoYXIqIGJvdW5kYXJ5KSBjb25zdDsKKyAg
ICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3Vu
ZGFyeSk7CiAgICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uOwogCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiwgUmVmUHRyPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+ID4gQWxpYXNNYXA7Ci0gICAgCisKKyAgICBGb3JtRGF0YUJ1aWxkZXIgbV9m
b3JtRGF0YUJ1aWxkZXI7CiAgICAgQWxpYXNNYXAqIG1fZWxlbWVudEFsaWFzZXM7CiAgICAgSFRN
TENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKiBjb2xsZWN0aW9uSW5mbzsKIApAQCAtMTQ3LDEw
ICsxNDgsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxIVE1MSW1hZ2VFbGVtZW50Kj4gaW1nRWxl
bWVudHM7CiAgICAgU3RyaW5nIG1fdXJsOwogICAgIFN0cmluZyBtX3RhcmdldDsKLSAgICBTdHJp
bmcgbV9lbmN0eXBlOwotICAgIFN0cmluZyBtX2FjY2VwdGNoYXJzZXQ7Ci0gICAgYm9vbCBtX3Bv
c3QgOiAxOwotICAgIGJvb2wgbV9tdWx0aXBhcnQgOiAxOwogICAgIGJvb2wgbV9hdXRvY29tcGxl
dGUgOiAxOwogICAgIGJvb2wgbV9pbnN1Ym1pdCA6IDE7CiAgICAgYm9vbCBtX2RvaW5nc3VibWl0
IDogMTsKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAqICAgICAgICAgICAoQykgMjAwOCBO
aWtvbGFzIFppbW1lcm1hbm4gPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKKworI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKwor
I2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9SYW5kb21OdW1iZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb3JtRGF0YUJ1
aWxkZXI6OkZvcm1EYXRhQnVpbGRlcigpCisgICAgOiBtX2lzUG9zdE1ldGhvZChmYWxzZSkKKyAg
ICAsIG1faXNNdWx0aVBhcnRGb3JtKGZhbHNlKQorICAgICwgbV9lbmNvZGluZ1R5cGUoImFwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCit7Cit9CisKK0Zvcm1EYXRhQnVpbGRlcjo6
fkZvcm1EYXRhQnVpbGRlcigpCit7Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVyOjpwYXJzZUVu
Y29kaW5nVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuY29udGFpbnMo
Im11bHRpcGFydCIsIGZhbHNlKSB8fCB0eXBlLmNvbnRhaW5zKCJmb3JtLWRhdGEiLCBmYWxzZSkp
IHsKKyAgICAgICAgbV9lbmNvZGluZ1R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7CisgICAg
ICAgIG1faXNNdWx0aVBhcnRGb3JtID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUuY29udGFp
bnMoInRleHQiLCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygicGxhaW4iLCBmYWxzZSkpIHsKKyAg
ICAgICAgbV9lbmNvZGluZ1R5cGUgPSAidGV4dC9wbGFpbiI7CisgICAgICAgIG1faXNNdWx0aVBh
cnRGb3JtID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lbmNvZGluZ1R5cGUgPSAi
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjsKKyAgICAgICAgbV9pc011bHRpUGFy
dEZvcm0gPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVyOjpwYXJzZU1l
dGhvZFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSh0eXBlLCAicG9zdCIpKQorICAgICAgICBtX2lzUG9zdE1ldGhvZCA9IHRydWU7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwgImdldCIpKQorICAgICAgICBtX2lzUG9zdE1l
dGhvZCA9IGZhbHNlOworfQorCitUZXh0RW5jb2RpbmcgRm9ybURhdGFCdWlsZGVyOjpkYXRhRW5j
b2RpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAoreworICAgIFN0cmluZyBhY2NlcHRDaGFy
c2V0ID0gbV9hY2NlcHRDaGFyc2V0OworICAgIGFjY2VwdENoYXJzZXQucmVwbGFjZSgnLCcsICcg
Jyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBjaGFyc2V0czsKKyAgICBhY2NlcHRDaGFyc2V0LnNw
bGl0KCcgJywgY2hhcnNldHMpOworCisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nOworCisgICAg
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzZXRzLmVuZCgpOworICAg
IGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnNldHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoZW5jb2RpbmcgPSBUZXh0RW5jb2Rp
bmcoKml0KSkuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kaW5nOworICAgIH0K
KworICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIGZyYW1lLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKTsKKworICAgIHJldHVybiBMYXRpbjFFbmNv
ZGluZygpOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb25zCitzdGF0aWMgaW5saW5lIHZvaWQgYXBw
ZW5kKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjaGFyIHN0cmluZykKK3sKKyAgICBidWZmZXIuYXBw
ZW5kKHN0cmluZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+
JiBidWZmZXIsIGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICBidWZmZXIuYXBwZW5kKHN0cmlu
Zywgc3RybGVuKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgYnVmZmVyLmFw
cGVuZChzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOworfQorCitWZWN0b3I8Y2hhcj4g
Rm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCkKK3sKKyAgICBW
ZWN0b3I8Y2hhcj4gYm91bmRhcnk7CisKKyAgICAvLyBUaGUgUkZDIDIwNDYgc3BlYyBzYXlzIHRo
ZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBwbHVzIHRoZQorICAgIC8vIGZvbGxvd2luZyBjaGFy
YWN0ZXJzIGFyZSBsZWdhbCBmb3IgYm91bmRhcmllczogICcoKStfLC0uLzo9PworICAgIC8vIEhv
d2V2ZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzLCB0aG91Z2ggbGVnYWwsIGNhdXNlIHNvbWUg
c2l0ZXMKKyAgICAvLyB0byBmYWlsOiAoKSwuLzo9IChodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzM1MikKKyAgICBzdGF0aWMgY29uc3QgY2hhciBhbHBoYU51bWVyaWNF
bmNvZGluZ01hcFs2NF0gPSB7CisgICAgICAgIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUs
IDB4NDYsIDB4NDcsIDB4NDgsCisgICAgICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQs
IDB4NEUsIDB4NEYsIDB4NTAsCisgICAgICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUs
IDB4NTYsIDB4NTcsIDB4NTgsCisgICAgICAgIDB4NTksIDB4NUEsIDB4NjEsIDB4NjIsIDB4NjMs
IDB4NjQsIDB4NjUsIDB4NjYsCisgICAgICAgIDB4NjcsIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIs
IDB4NkMsIDB4NkQsIDB4NkUsCisgICAgICAgIDB4NkYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMs
IDB4NzQsIDB4NzUsIDB4NzYsCisgICAgICAgIDB4NzcsIDB4NzgsIDB4NzksIDB4N0EsIDB4MzAs
IDB4MzEsIDB4MzIsIDB4MzMsCisgICAgICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4Mzgs
IDB4MzksIDB4MkIsIDB4NDEKKyAgICAgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzUyNTI1
Nzc+IGdtYWlsIGRvZXMgbm90IGFjY2VwdCBsZWdhbCBjaGFyYWN0ZXJzIGluIHRoZSBmb3JtIGJv
dW5kYXJ5CisgICAgICAgIC8vIEFzIHN0YXRlZCBhYm92ZSwgc29tZSBsZWdhbCBjaGFyYWN0ZXJz
IGNhdXNlLCBzaXRlcyB0byBmYWlsLiBTcGVjaWZpY2FsbHkKKyAgICAgICAgLy8gdGhlIC8gY2hh
cmFjdGVyIHdoaWNoIHdhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGFib3ZlIGFycmF5LiBJ
IGhhdmUKKyAgICAgICAgLy8gcmVwbGFjZWQgdGhlIGxhc3QgY2hhcmFjdGVyIHdpdGggYW5vdGhl
ciBjaGFyYWN0ZXIgYWxyZWFkeSBpbiB0aGUgYXJyYXkKKyAgICAgICAgLy8gKG5vdGljZSB0aGUg
Zmlyc3QgYW5kIGxhc3QgdmFsdWVzIGFyZSBib3RoIDB4NDEsIEEpLiBJbnN0ZWFkIG9mIHBpY2tp
bmcKKyAgICAgICAgLy8gYW5vdGhlciB1bmlxdWUgbGVnYWwgY2hhcmFjdGVyIGZvciBib3VuZGFy
eSBzdHJpbmdzIHRoYXQsIGJlY2F1c2UgaXQgaGFzCisgICAgICAgIC8vIG5ldmVyIGJlZW4gdGVz
dGVkLCBtYXkgb3IgbWF5IG5vdCBicmVhayBvdGhlciBzaXRlcywgSSBzaW1wbHkKKyAgICAgICAg
Ly8gcmVwbGFjZWQgLyB3aXRoIEEuICBUaGlzIG1lYW5zIEEgaXMgdHdpY2UgYXMgbGlrZWx5IHRv
IG9jY3VyIGluIG91ciBib3VuZGFyeQorICAgICAgICAvLyBzdHJpbmdzIHRoYW4gYW55IG90aGVy
IGNoYXJhY3RlciBidXQgSSB0aGluayB0aGlzIGlzIGZpbmUgZm9yIHRoZSB0aW1lIGJlaW5nLgor
ICAgICAgICAvLyBUaGUgRklYTUUgaGVyZSBpcyBhYm91dCByZXN0b3JpbmcgdGhlIC8gY2hhcmFj
dGVyIG9uY2UgdGhlIGFmb3JlbWVudGlvbmVkCisgICAgICAgIC8vIHJhZGFyIGhhcyBiZWVuIHJl
c29sdmVkLgorICAgIH07CisKKyAgICAvLyBTdGFydCB3aXRoIGFuIGluZm9ybWF0aXZlIHByZWZp
eC4KKyAgICBhcHBlbmQoYm91bmRhcnksICItLS0tV2ViS2l0Rm9ybUJvdW5kYXJ5Iik7CisKKyAg
ICAvLyBBcHBlbmQgMTYgcmFuZG9tIDdiaXQgYXNjaWkgQWxwaGFOdW1lcmljIGNoYXJhY3RlcnMu
CisgICAgVmVjdG9yPGNoYXI+IHJhbmRvbUJ5dGVzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDQ7ICsraSkgeworICAgICAgICB1bnNpZ25lZCByYW5kb21uZXNzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFdURjo6cmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpICsgMS4wKSk7CisgICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChhbHBo
YU51bWVyaWNFbmNvZGluZ01hcFsocmFuZG9tbmVzcyA+PiAyNCkgJiAweDNGXSk7CisgICAgICAg
IHJhbmRvbUJ5dGVzLmFwcGVuZChhbHBoYU51bWVyaWNFbmNvZGluZ01hcFsocmFuZG9tbmVzcyA+
PiAxNikgJiAweDNGXSk7CisgICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChhbHBoYU51bWVyaWNF
bmNvZGluZ01hcFsocmFuZG9tbmVzcyA+PiA4KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0
ZXMuYXBwZW5kKGFscGhhTnVtZXJpY0VuY29kaW5nTWFwW3JhbmRvbW5lc3MgJiAweDNGXSk7Cisg
ICAgfQorCisgICAgYm91bmRhcnkuYXBwZW5kKHJhbmRvbUJ5dGVzKTsKKyAgICBib3VuZGFyeS5h
cHBlbmQoMCk7IC8vIEFkZCBhIDAgYXQgdGhlIGVuZCBzbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBD
LXN0eWxlIHN0cmluZy4KKyAgICByZXR1cm4gYm91bmRhcnk7Cit9CisKK3ZvaWQgRm9ybURhdGFC
dWlsZGVyOjpiZWdpbk11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3Qg
Q1N0cmluZyYgYm91bmRhcnksIGNvbnN0IENTdHJpbmcmIG5hbWUpCit7CisgICAgYWRkQm91bmRh
cnlUb011bHRpUGFydEhlYWRlcihidWZmZXIsIGJvdW5kYXJ5KTsKKworICAgIGFwcGVuZChidWZm
ZXIsICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIiKTsKKyAgICBhcHBl
bmQoYnVmZmVyLCBuYW1lKTsKKyAgICBhcHBlbmQoYnVmZmVyLCAnIicpOworfQorCit2b2lkIEZv
cm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4m
IGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgYm91bmRhcnksIGJvb2wgaXNMYXN0Qm91bmRhcnkpCit7
CisgICAgYXBwZW5kKGJ1ZmZlciwgIi0tIik7CisgICAgYXBwZW5kKGJ1ZmZlciwgYm91bmRhcnkp
OworCisgICAgaWYgKGlzTGFzdEJvdW5kYXJ5KQorICAgICAgICBhcHBlbmQoYnVmZmVyLCAiLS0i
KTsKKworICAgIGFwcGVuZChidWZmZXIsICJcclxuIik7Cit9CisKK3ZvaWQgRm9ybURhdGFCdWls
ZGVyOjphZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IHdvcmsgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGEg
IiBtYXJrLAorICAgIC8vIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBsaWtlIENSIG9yIExGLiBUaGlz
IGFsc28gZG9lcyBzdHJhbmdlCisgICAgLy8gdGhpbmdzIGlmIHRoZSBmaWxlbmFtZSBpbmNsdWRl
cyBjaGFyYWN0ZXJzIHlvdSBjYW4ndCBlbmNvZGUKKyAgICAvLyBpbiB0aGUgd2Vic2l0ZSdzIGNo
YXJhY3RlciBzZXQuCisgICAgYXBwZW5kKGJ1ZmZlciwgIjsgZmlsZW5hbWU9XCIiKTsKKyAgICBh
cHBlbmQoYnVmZmVyLCBlbmNvZGluZy5lbmNvZGUoZmlsZW5hbWUuY2hhcmFjdGVycygpLCBmaWxl
bmFtZS5sZW5ndGgoKSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcykpOworICAgIGFwcGVu
ZChidWZmZXIsICciJyk7Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVyOjphZGRDb250ZW50VHlw
ZVRvTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3RyaW5nJiBt
aW1lVHlwZSkKK3sKKyAgICBhcHBlbmQoYnVmZmVyLCAiXHJcbkNvbnRlbnQtVHlwZTogIik7Cisg
ICAgYXBwZW5kKGJ1ZmZlciwgbWltZVR5cGUpOworfQorCit2b2lkIEZvcm1EYXRhQnVpbGRlcjo6
ZmluaXNoTXVsdGlQYXJ0SGVhZGVyKFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGFwcGVu
ZChidWZmZXIsICJcclxuXHJcbiIpOworfQorCit2b2lkIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5
VmFsdWVQYWlyQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYg
a2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkp
CisgICAgICAgIGFwcGVuZChidWZmZXIsICcmJyk7CisKKyAgICBlbmNvZGVTdHJpbmdBc0Zvcm1E
YXRhKGJ1ZmZlciwga2V5KTsKKyAgICBhcHBlbmQoYnVmZmVyLCAnPScpOworICAgIGVuY29kZVN0
cmluZ0FzRm9ybURhdGEoYnVmZmVyLCB2YWx1ZSk7Cit9CisKK3ZvaWQgRm9ybURhdGFCdWlsZGVy
OjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCBjb25zdCBDU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgaGV4RGlnaXRzWzE3XSA9ICIw
MTIzNDU2Nzg5QUJDREVGIjsKKworICAgIC8vIFNhbWUgc2FmZSBjaGFyYWN0ZXJzIGFzIE5ldHNj
YXBlIGZvciBjb21wYXRpYmlsaXR5LgorICAgIHN0YXRpYyBjb25zdCBjaGFyIHNhZmVDaGFyYWN0
ZXJzW10gPSAiLS5fKiI7CisKKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9pbnRl
cmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNC4xCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBzdHJpbmcuZGF0YSgpW2ldOworCisgICAgICAgIGlm
ICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMg
Pj0gJzAnICYmIGMgPD0gJzknKSB8fCBzdHJjaHIoc2FmZUNoYXJhY3RlcnMsIGMpKQorICAgICAg
ICAgICAgYXBwZW5kKGJ1ZmZlciwgYyk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJyAnKQorICAg
ICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgJysnKTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4n
IHx8IChjID09ICdccicgJiYgKGkgKyAxID49IGxlbmd0aCB8fCBzdHJpbmcuZGF0YSgpW2kgKyAx
XSAhPSAnXG4nKSkpCisgICAgICAgICAgICBhcHBlbmQoYnVmZmVyLCAiJTBEJTBBIik7CisgICAg
ICAgIGVsc2UgaWYgKGMgIT0gJ1xyJykgeworICAgICAgICAgICAgYXBwZW5kKGJ1ZmZlciwgJyUn
KTsKKyAgICAgICAgICAgIGFwcGVuZChidWZmZXIsIGhleERpZ2l0c1tjID4+IDRdKTsKKyAgICAg
ICAgICAgIGFwcGVuZChidWZmZXIsIGhleERpZ2l0c1tjICYgMHhGXSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK30KSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaAkocmV2aXNpb24g
MCkKKysrIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlrb2xhcyBaaW1tZXJt
YW5uIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb3Jt
RGF0YUJ1aWxkZXJfaAorI2RlZmluZSBGb3JtRGF0YUJ1aWxkZXJfaAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDU3RyaW5nOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBUZXh0
RW5jb2Rpbmc7CisKK2NsYXNzIEZvcm1EYXRhQnVpbGRlciA6IE5vbmNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICBGb3JtRGF0YUJ1aWxkZXIoKTsKKyAgICB+Rm9ybURhdGFCdWlsZGVyKCk7CisKKyAg
ICBib29sIGlzUG9zdE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQb3N0TWV0aG9kOyB9Cisg
ICAgdm9pZCBzZXRJc1Bvc3RNZXRob2QoYm9vbCB2YWx1ZSkgeyBtX2lzUG9zdE1ldGhvZCA9IHZh
bHVlOyB9CisKKyAgICBib29sIGlzTXVsdGlQYXJ0Rm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1faXNN
dWx0aVBhcnRGb3JtOyB9CisgICAgdm9pZCBzZXRJc011bHRpUGFydEZvcm0oYm9vbCB2YWx1ZSkg
eyBtX2lzTXVsdGlQYXJ0Rm9ybSA9IHZhbHVlOyB9CisKKyAgICBTdHJpbmcgZW5jb2RpbmdUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZ1R5cGU7IH0KKyAgICB2b2lkIHNldEVuY29kaW5n
VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fZW5jb2RpbmdUeXBlID0gdmFsdWU7IH0KKwor
ICAgIFN0cmluZyBhY2NlcHRDaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9hY2NlcHRDaGFyc2V0
OyB9CisgICAgdm9pZCBzZXRBY2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV9h
Y2NlcHRDaGFyc2V0ID0gdmFsdWU7IH0KKworICAgIHZvaWQgcGFyc2VFbmNvZGluZ1R5cGUoY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCBwYXJzZU1ldGhvZFR5cGUoY29uc3QgU3RyaW5nJik7CisK
KyAgICBUZXh0RW5jb2RpbmcgZGF0YUVuY29kaW5nKERvY3VtZW50KikgY29uc3Q7CisKKyAgICAv
LyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgSFRNTEZvcm1FbGVtZW50L1dNTEdvRWxlbWVudCBm
b3IgbXVsdGktcGFydCBmb3JtIGRhdGEKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGdlbmVyYXRl
VW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKKyAgICBzdGF0aWMgdm9pZCBiZWdpbk11bHRpUGFydEhl
YWRlcihWZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwgY29uc3QgQ1N0cmlu
ZyYgbmFtZSk7CisgICAgc3RhdGljIHZvaWQgYWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihW
ZWN0b3I8Y2hhcj4mLCBjb25zdCBDU3RyaW5nJiBib3VuZGFyeSwgYm9vbCBpc0xhc3RCb3VuZGFy
eSA9IGZhbHNlKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVy
KFZlY3RvcjxjaGFyPiYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUpOworICAgIHN0YXRpYyB2b2lkIGFkZENvbnRlbnRUeXBlVG9NdWx0aVBhcnRIZWFkZXIoVmVj
dG9yPGNoYXI+JiwgY29uc3QgQ1N0cmluZyYgbWltZVR5cGUpOworICAgIHN0YXRpYyB2b2lkIGZp
bmlzaE11bHRpUGFydEhlYWRlcihWZWN0b3I8Y2hhcj4mKTsKKworICAgIC8vIEhlbHBlciBmdW5j
dGlvbnMgdXNlZCBieSBIVE1MRm9ybUVsZW1lbnQvV01MR29FbGVtZW50IGZvciBub24gbXVsdGkt
cGFydCBmb3JtIGRhdGEKKyAgICBzdGF0aWMgdm9pZCBhZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRh
KFZlY3RvcjxjaGFyPiYsIGNvbnN0IENTdHJpbmcmIGtleSwgY29uc3QgQ1N0cmluZyYgdmFsdWUp
OworICAgIHN0YXRpYyB2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVjdG9yPGNoYXI+Jiwg
Y29uc3QgQ1N0cmluZyYpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9pc1Bvc3RNZXRob2Q7Cisg
ICAgYm9vbCBtX2lzTXVsdGlQYXJ0Rm9ybTsKKworICAgIFN0cmluZyBtX2VuY29kaW5nVHlwZTsK
KyAgICBTdHJpbmcgbV9hY2NlcHRDaGFyc2V0OworfTsKKworfQorCisjZW5kaWYK
</data>
<flag name="review"
          id="12369"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>