<?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>23051</bug_id>
          
          <creation_ts>2008-12-30 23:37:30 -0800</creation_ts>
          <short_desc>web page searching should use ICU&apos;s search so it can ignore diacritical differences</short_desc>
          <delta_ts>2009-01-01 19:54:00 -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>HTML Editing</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>103871</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-30 23:37:30 -0800</bug_when>
    <thetext>Right now if you search for &quot;test&quot; you won&apos;t find &quot;tëst&quot;, but that should work. A good way to fix that is to use ICU&apos;s usearch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103875</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-31 00:20:00 -0800</bug_when>
    <thetext>&lt;rdar://problem/3574497&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103876</commentid>
    <comment_count>2</comment_count>
      <attachid>26332</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-31 00:20:55 -0800</bug_when>
    <thetext>Created attachment 26332
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103943</commentid>
    <comment_count>3</comment_count>
      <attachid>26332</attachid>
    <who name="">mitz</who>
    <bug_when>2008-12-31 16:40:04 -0800</bug_when>
    <thetext>Comment on attachment 26332
patch

&gt; +#if HAVE(ICU_SEARCH)
&gt; +
&gt; +private:
&gt; +    String m_target;
&gt; +    Vector&lt;UChar&gt; m_buffer;
&gt; +    size_t m_overlap;
&gt; +    bool m_atBreak;
&gt; +
&gt; +#else
[...]
&gt; +
&gt; +    bool m_atBreak;
&gt; +
&gt; +#endif

Maybe m_atBreak should be common.

&gt; +    Node* startContainer = r-&gt;startContainer();
&gt; +    int startOffset = r-&gt;startOffset();
&gt; +    Node* endContainer = r-&gt;endContainer();
&gt; +    int endOffset = r-&gt;endOffset();
&gt; +    if (!startContainer)
&gt;          return;

You can move the return right after calling startContainer().

&gt; +    Node* startNode = r-&gt;startContainer();
&gt; +    Node* endNode = r-&gt;endContainer();
&gt; +    int startOffset = r-&gt;startOffset();
&gt; +    int endOffset = r-&gt;endOffset();
&gt; +    if (!startNode)
&gt;          return;

Here too. I guess it makes little difference in practice.

Everything else looks good, but I can&apos;t r+ this patch because I don&apos;t understand the logic here:

&gt; +    // Matches that are in the overlap area are only tentative.
&gt; +    // The same match may appear later, matching more characters,
&gt; +    // possibly including a combining character that&apos;s not yet in the buffer.
&gt; +    if (!m_atBreak &amp;&amp; matchStart + matchLength + m_overlap &gt;= size) {
&gt; +        memcpy(m_buffer.data(), m_buffer.data() + m_buffer.size() - m_overlap, m_overlap);
&gt; +        m_buffer.shrink(m_overlap);
&gt; +        return 0;
&gt; +    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103972</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-01 10:46:36 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; +#if HAVE(ICU_SEARCH)
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    String m_target;
&gt; &gt; +    Vector&lt;UChar&gt; m_buffer;
&gt; &gt; +    size_t m_overlap;
&gt; &gt; +    bool m_atBreak;
&gt; &gt; +
&gt; &gt; +#else
&gt; [...]
&gt; &gt; +
&gt; &gt; +    bool m_atBreak;
&gt; &gt; +
&gt; &gt; +#endif
&gt; 
&gt; Maybe m_atBreak should be common.

I&apos;m not sure it should be. I see it as a &quot;coincidence&quot; that they are currently the same, and it could change easily with future revision to either side&apos;s algorithm.

&gt; &gt; +    Node* startContainer = r-&gt;startContainer();
&gt; &gt; +    int startOffset = r-&gt;startOffset();
&gt; &gt; +    Node* endContainer = r-&gt;endContainer();
&gt; &gt; +    int endOffset = r-&gt;endOffset();
&gt; &gt; +    if (!startContainer)
&gt; &gt;          return;
&gt; 
&gt; You can move the return right after calling startContainer().

I&apos;ll do it.

&gt; Everything else looks good, but I can&apos;t r+ this patch because I don&apos;t
&gt; understand the logic here:
&gt; 
&gt; &gt; +    // Matches that are in the overlap area are only tentative.
&gt; &gt; +    // The same match may appear later, matching more characters,
&gt; &gt; +    // possibly including a combining character that&apos;s not yet in the buffer.
&gt; &gt; +    if (!m_atBreak &amp;&amp; matchStart + matchLength + m_overlap &gt;= size) {
&gt; &gt; +        memcpy(m_buffer.data(), m_buffer.data() + m_buffer.size() - m_overlap, m_overlap);
&gt; &gt; +        m_buffer.shrink(m_overlap);
&gt; &gt; +        return 0;
&gt; &gt; +    }

I believe the idea is that if you have the following text:

    abcde&lt;combing-umlaut&gt;

Then you can match abcde, but you can also match abcde&lt;combining-umlaut&gt;. And if the very last characters in the buffer are &quot;abcde&quot;, then you should not accept the match until you know if the subsequent character is &lt;combining-umlaut&gt;. So a match where the match touches the end of the buffer is only tentative if you might be receiving additional characters in the future, and thus needs to be ignored. To detect that you&apos;re in such a situation, I suppose we could detect that the match is at the very end of the buffer. My check for &quot;anywhere in the overlap area&quot; is massive overkill. But &quot;right at the end of the buffer&quot; might also be to narrow. Could character show up even later that could make a longer match if the match wasn&apos;t at the end of the buffer? I don&apos;t know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103981</commentid>
    <comment_count>5</comment_count>
      <attachid>26332</attachid>
    <who name="">mitz</who>
    <bug_when>2009-01-01 12:49:16 -0800</bug_when>
    <thetext>Comment on attachment 26332
patch

(In reply to comment #4)
&gt; &gt; Everything else looks good, but I can&apos;t r+ this patch because I don&apos;t
&gt; &gt; understand the logic here:
&gt; &gt; 
&gt; &gt; &gt; +    // Matches that are in the overlap area are only tentative.
&gt; &gt; &gt; +    // The same match may appear later, matching more characters,
&gt; &gt; &gt; +    // possibly including a combining character that&apos;s not yet in the buffer.
&gt; &gt; &gt; +    if (!m_atBreak &amp;&amp; matchStart + matchLength + m_overlap &gt;= size) {
&gt; &gt; &gt; +        memcpy(m_buffer.data(), m_buffer.data() + m_buffer.size() - m_overlap, m_overlap);
&gt; &gt; &gt; +        m_buffer.shrink(m_overlap);
&gt; &gt; &gt; +        return 0;
&gt; &gt; &gt; +    }
&gt; 
&gt; I believe the idea is that if you have the following text:
&gt; 
&gt;     abcde&lt;combing-umlaut&gt;
&gt; 
&gt; Then you can match abcde, but you can also match abcde&lt;combining-umlaut&gt;. And
&gt; if the very last characters in the buffer are &quot;abcde&quot;, then you should not
&gt; accept the match until you know if the subsequent character is
&gt; &lt;combining-umlaut&gt;. So a match where the match touches the end of the buffer is
&gt; only tentative if you might be receiving additional characters in the future,
&gt; and thus needs to be ignored.

It looks like the code checks if the match ends in the overlap area, but then it assumes that in that case, it also starts in the overlap area. I think that&apos;s what confused me, but it makes sense because the overlap area is guaranteed to be fairly large.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103986</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-01 13:19:28 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; It looks like the code checks if the match ends in the overlap area, but then
&gt; it assumes that in that case, it also starts in the overlap area.

Oops! That was a mistake. I changed it to only check if the match starts in the overlap area as I originally intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103987</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-01 13:30:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/39536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104015</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 19:51:48 -0800</bug_when>
    <thetext>This seems to have caused 12-13 new test failures, due to whitespace changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104017</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-01 19:54:00 -0800</bug_when>
    <thetext>Fixed bug 23071 in the test failures.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26332</attachid>
            <date>2008-12-31 00:20:55 -0800</date>
            <delta_ts>2009-01-01 12:49:16 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ICUSearchPatch.txt</filename>
            <type>text/plain</type>
            <size>72043</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTUyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDgtMTItMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MzA1MTogd2ViIHBhZ2Ugc2VhcmNoaW5nIHNob3VsZCB1c2UgSUNVJ3Mgc2VhcmNoIHNvIGl0IGNh
biBpZ25vcmUgZGlhY3JpdGljYWwgZGlmZmVyZW5jZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDUxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzM1
NzQ0OTcKKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL2ZpbmRTdHJpbmctZGlh
Y3JpdGljYWxzLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDogQ2hh
bmdlZCB0aGUgQ2lyY3VsYXJTZWFyY2hCdWZmZXIgY2xhc3MgdG8gaGF2ZSBhIG5ldworICAgICAg
ICBuYW1lLCBzaW5jZSBpdCBkb2Vzbid0IGFsd2F5cyB1c2UgYSBjaXJjdWxhciBidWZmZXIgYW55
IG1vcmUuIENoYW5nZWQgdGhlIGludGVyZmFjZQorICAgICAgICBzbyBpdCBjYW4gd29yayB3ZWxs
IGluIHRoZSBuZXcgY2h1bmt5IGNvbXBhcmlzb24gbW9kZSBmb3IgSUNVIHNlYXJjaCwgYW5kIGFs
c28KKyAgICAgICAgYWRkZWQgcHJpdmF0ZSBkYXRhIG1lbWJlcnMgZm9yIGJvdGggdGhlIElDVS1z
ZWFyY2ggYW5kIG5vbi1JQ1Utc2VhcmNoIGNvZGUgcGF0aHMuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6IFVzZSB0aGUgdmVyc2lvbnMgb2YgdGhlIFJhbmdl
IGZ1bmN0aW9ucworICAgICAgICB0aGF0IGRvbid0IHRha2UgYW4gZXhjZXB0aW9uIGNvZGUuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3gpOiBBZGRlZCBhIHNw
ZWNpYWwgY2FzZSB0byBoYW5kbGUgdGhlIHBvc2l0aW9uCisgICAgICAgIG9mIGEgY29sbGFwc2Vk
LWF3YXkgc3BhY2UgYmV0dGVyLiBUaGlzIGlzIG5vdCBuZWVkZWQgZm9yIHNlYXJjaCBtZWNoYW5p
c20sIGJ1dCB3YXMKKyAgICAgICAgaGVscGZ1bCBpbiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhp
cyBwYXRjaCwgYW5kIGlzIHN0aWxsIGFuIGltcHJvdmVtZW50LgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvcik6IFVzZSB0aGUKKyAgICAgICAgdmVyc2lvbnMgb2YgdGhlIFJhbmdlIGZ1bmN0aW9u
cyB0aGF0IGRvbid0IHRha2UgYW4gZXhjZXB0aW9uIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpD
aGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNoYXJh
Y3RlclN1YnJhbmdlKTogQWRkZWQuIEhlbHBlciBmdW5jdGlvbiB1c2VkIGluIGJvdGggcGxhY2Vz
IGJlbG93IHdoZXJlCisgICAgICAgIHdlIHdhbnQgdG8gY29udmVydCBhIHJhbmdlIGFuZCBjaGFy
YWN0ZXIgb2Zmc2V0cyBpbnRvIGEgc3VicmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpXb3JkQXdh
cmVJdGVyYXRvcjo6YWR2YW5jZSk6IFVzZSB0aGUgdmVyc2lvbnMgb2YgdGhlIFJhbmdlIGZ1bmN0
aW9ucyB0aGF0CisgICAgICAgIGRvbid0IHRha2UgYW4gZXhjZXB0aW9uIGNvZGUuCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVTZWFyY2hlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2Vh
cmNoZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvY2tTZWFyY2hlcik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6dW5sb2NrU2VhcmNoZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlYXJjaEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTZWFyY2hCdWZmZXI6On5TZWFyY2hCdWZmZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNlYXJjaEJ1ZmZlcjo6YXBwZW5kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hC
dWZmZXI6OmF0QnJlYWspOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEJ1ZmZlcjo6
cmVhY2hlZEJyZWFrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hCdWZmZXI6OnNl
YXJjaCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpsZW5ndGgpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c3VicmFuZ2UpOiBDaGFuZ2Vk
IHRvIGNhbGwgdGhlIGNoYXJhY3RlclN1YnJhbmdlCisgICAgICAgIGZ1bmN0aW9uIGFib3ZlLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0
aCk6IFVzZSB0aGUgdmVyc2lvbnMgb2YgdGhlCisgICAgICAgIFJhbmdlIGZ1bmN0aW9ucyB0aGF0
IGRvbid0IHRha2UgYW4gZXhjZXB0aW9uIGNvZGUuIEFsc28gdHdlYWsgc29tZSBvdGhlciBkZXRh
aWxzCisgICAgICAgIG9mIHRoZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6aXNBbGxDb2xsYXBz
aWJsZVdoaXRlc3BhY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbGxhcHNlZFRvQm91
bmRhcnkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRQbGFpblRleHQpOiBSZXdyb3Rl
IHRvIHVzZSBuZXcgaW50ZXJmYWNlIGFuZCBzdHJlYW1saW5lIHRoZQorICAgICAgICBsb2dpYyBh
IGJpdC4KKworICAgICAgICBBZGQgdGhlIHJlbGV2YW50IGZpbGVzIGluIHRoZSBpY3UgZGlyZWN0
b3J5LiBBcyBpY3UvUkVBRE1FIHNheXMsIHRoZSAiaWN1IgorICAgICAgICBkaXJlY3RvcnkgaXMg
cmVhbGx5IGp1c3QgZm9yIE1hYyBPUyBYLCB3aGVyZSB3ZSBoYXZlIHRoZSBJQ1UgbGlicmFyeSBi
dXQgbm90CisgICAgICAgIHRoZSBoZWFkZXJzIGluc3RhbGxlZC4gSXQgc2hvdWxkIGJlIG1vdmVk
IGluc2lkZSBwbGF0Zm9ybS9tYWMgYXQgc29tZSBwb2ludAorICAgICAgICB0byBtYWtlIHRoaXMg
bW9yZSBjbGVhciAoYW5kIHRoZSBjb3B5IGluIEphdmFTY3JpcHRDb3JlIHNob3VsZCBiZSBtb3Zl
ZAorICAgICAgICBzb21ld2hlcmUgc2ltaWxhciBmb3IgdGhlIHNhbWUgcmVhc29uKS4KKworICAg
ICAgICAqIGljdS91bmljb2RlL3Vjb2xlaXRyLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmlj
b2RlL3VzZWFyY2guaDogQWRkZWQuCisKIDIwMDgtMTItMzAgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAzOTUyNCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MCw2ICs0
MCwxNCBAQAogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAidmlzaWJs
ZV91bml0cy5oIgogCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikKKyNkZWZpbmUgSEFWRV9JQ1VfU0VBUkNIIDEKKyNlbmRpZgorCisjaWYgSEFWRShJQ1Vf
U0VBUkNIKQorI2luY2x1ZGUgPHVuaWNvZGUvdXNlYXJjaC5oPgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogCkBAIC00OSwyNiAr
NTcsNDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLy8gQnVmZmVyIHRoYXQga25v
d3MgaG93IHRvIGNvbXBhcmUgd2l0aCBhIHNlYXJjaCB0YXJnZXQuCiAvLyBLZWVwcyBlbm91Z2gg
b2YgdGhlIHByZXZpb3VzIHRleHQgdG8gYmUgYWJsZSB0byBzZWFyY2ggaW4gdGhlIGZ1dHVyZSwg
YnV0IG5vIG1vcmUuCi1jbGFzcyBDaXJjdWxhclNlYXJjaEJ1ZmZlciA6IE5vbmNvcHlhYmxlIHsK
Ky8vIE5vbi1icmVha2luZyBzcGFjZXMgYXJlIGFsd2F5cyBlcXVhbCB0byBub3JtYWwgc3BhY2Vz
LgorLy8gQ2FzZSBmb2xkaW5nIGlzIGFsc28gZG9uZSBpZiA8aXNDYXNlU2Vuc2l0aXZlPiBpcyBm
YWxzZS4KK2NsYXNzIFNlYXJjaEJ1ZmZlciA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBD
aXJjdWxhclNlYXJjaEJ1ZmZlcihjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBpc0Nhc2VTZW5z
aXRpdmUpOworICAgIFNlYXJjaEJ1ZmZlcihjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBpc0Nh
c2VTZW5zaXRpdmUpOworICAgIH5TZWFyY2hCdWZmZXIoKTsKIAotICAgIHZvaWQgY2xlYXIoKSB7
IG1fY3Vyc29yID0gMDsgbV9pc0J1ZmZlckZ1bGwgPSBmYWxzZTsgfQotICAgIHZvaWQgYXBwZW5k
KFVDaGFyKTsKKyAgICAvLyBSZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFwcGVuZGVkOyBn
dWFyYW50ZWVkIHRvIGJlIGluIHRoZSByYW5nZSBbMSwgbGVuZ3RoXS4KKyAgICBzaXplX3QgYXBw
ZW5kKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCk7CisgICAgdm9pZCByZWFjaGVkQnJlYWso
KTsKKworICAgIC8vIFJlc3VsdCBpcyB0aGUgc2l6ZSBpbiBjaGFyYWN0ZXJzIG9mIHdoYXQgd2Fz
IGZvdW5kLgorICAgIC8vIEFuZCA8c3RhcnRPZmZzZXQ+IGlzIHRoZSBudW1iZXIgb2YgY2hhcmFj
dGVzcnMgYmFjayB0byB0aGUgc3RhcnQgb2Ygd2hhdCB3YXMgZm91bmQuCisgICAgc2l6ZV90IHNl
YXJjaChzaXplX3QmIHN0YXJ0T2Zmc2V0KTsKKyAgICBib29sIGF0QnJlYWsoKSBjb25zdDsKIAot
ICAgIGJvb2wgaXNNYXRjaCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owor
I2lmIEhBVkUoSUNVX1NFQVJDSCkKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV90YXJnZXQ7Cisg
ICAgVmVjdG9yPFVDaGFyPiBtX2J1ZmZlcjsKKyAgICBzaXplX3QgbV9vdmVybGFwOworICAgIGJv
b2wgbV9hdEJyZWFrOworCisjZWxzZQogCiBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kKFVDaGFy
LCBib29sIGlzQ2hhcmFjdGVyU3RhcnQpOworICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKIAog
ICAgIFN0cmluZyBtX3RhcmdldDsKICAgICBib29sIG1faXNDYXNlU2Vuc2l0aXZlOwogCi0gICAg
VmVjdG9yPFVDaGFyPiBtX2NoYXJhY3RlckJ1ZmZlcjsKKyAgICBWZWN0b3I8VUNoYXI+IG1fYnVm
ZmVyOwogICAgIFZlY3Rvcjxib29sPiBtX2lzQ2hhcmFjdGVyU3RhcnRCdWZmZXI7CiAgICAgYm9v
bCBtX2lzQnVmZmVyRnVsbDsKLSAgICB1bnNpZ25lZCBtX2N1cnNvcjsKKyAgICBzaXplX3QgbV9j
dXJzb3I7CisKKyAgICBib29sIG1fYXRCcmVhazsKKworI2VuZGlmCiB9OwogCiAvLyAtLS0tLS0t
LQpAQCAtOTgsMTQgKzEyNywxMiBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBS
YW5nZSogCiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm47CiAKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICAKICAgICAvLyBnZXQgYW5kIHZhbGlkYXRlIHRoZSByYW5nZSBlbmRwb2lu
dHMKLSAgICBOb2RlICpzdGFydENvbnRhaW5lciA9IHItPnN0YXJ0Q29udGFpbmVyKGVjKTsKLSAg
ICBpbnQgc3RhcnRPZmZzZXQgPSByLT5zdGFydE9mZnNldChlYyk7Ci0gICAgTm9kZSAqZW5kQ29u
dGFpbmVyID0gci0+ZW5kQ29udGFpbmVyKGVjKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gci0+ZW5k
T2Zmc2V0KGVjKTsKLSAgICBpZiAoZWMpCisgICAgTm9kZSogc3RhcnRDb250YWluZXIgPSByLT5z
dGFydENvbnRhaW5lcigpOworICAgIGludCBzdGFydE9mZnNldCA9IHItPnN0YXJ0T2Zmc2V0KCk7
CisgICAgTm9kZSogZW5kQ29udGFpbmVyID0gci0+ZW5kQ29udGFpbmVyKCk7CisgICAgaW50IGVu
ZE9mZnNldCA9IHItPmVuZE9mZnNldCgpOworICAgIGlmICghc3RhcnRDb250YWluZXIpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIENhbGxlcnMgc2hvdWxkIGJlIGhhbmRpbmcgdXMgd2VsbC1m
b3JtZWQgcmFuZ2VzLiBJZiB3ZSBkaXNjb3ZlciB0aGF0IHRoaXMgaXNuJ3QKQEAgLTMyNCw3ICsz
NTEsMTMgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3goKQogICAgICAgICBib29s
IG5lZWRTcGFjZSA9IG1fbGFzdFRleHROb2RlRW5kZWRXaXRoQ29sbGFwc2VkU3BhY2UKICAgICAg
ICAgICAgIHx8IChtX3RleHRCb3ggPT0gZmlyc3RUZXh0Qm94ICYmIHRleHRCb3hTdGFydCA9PSBy
dW5TdGFydCAmJiBydW5TdGFydCA+IDApOwogICAgICAgICBpZiAobmVlZFNwYWNlICYmICFpc0Nv
bGxhcHNpYmxlV2hpdGVzcGFjZShtX2xhc3RDaGFyYWN0ZXIpICYmIG1fbGFzdENoYXJhY3Rlcikg
ewotICAgICAgICAgICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgcnVuU3RhcnQsIHJ1
blN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChtX2xhc3RUZXh0Tm9kZSA9PSBtX25vZGUgJiYgcnVu
U3RhcnQgPiAwICYmIHN0cltydW5TdGFydCAtIDFdID09ICcgJykgeworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNwYWNlUnVuU3RhcnQgPSBydW5TdGFydCAtIDE7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHNwYWNlUnVuU3RhcnQgPiAwICYmIHN0cltzcGFjZVJ1blN0YXJ0IC0gMV0gPT0gJyAn
KQorICAgICAgICAgICAgICAgICAgICAtLXNwYWNlUnVuU3RhcnQ7CisgICAgICAgICAgICAgICAg
ZW1pdFRleHQobV9ub2RlLCBzcGFjZVJ1blN0YXJ0LCBydW5TdGFydCk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCBydW5T
dGFydCwgcnVuU3RhcnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGludCB0ZXh0Qm94RW5kID0gdGV4dEJveFN0YXJ0ICsgbV90ZXh0Qm94LT5tX2xlbjsKQEAgLTc0
OSwxOCArNzgyLDExIEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWYK
ICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBleGNlcHRpb24gPSAwOwot
ICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHItPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7Ci0gICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIE5vZGUgKmVuZE5vZGUgPSByLT5l
bmRDb250YWluZXIoZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICByZXR1
cm47Ci0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKTsKLSAg
ICBpZiAoZXhjZXB0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IGVuZE9mZnNldCA9IHIt
PmVuZE9mZnNldChleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24pCisgICAgTm9kZSogc3Rh
cnROb2RlID0gci0+c3RhcnRDb250YWluZXIoKTsKKyAgICBOb2RlKiBlbmROb2RlID0gci0+ZW5k
Q29udGFpbmVyKCk7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gci0+c3RhcnRPZmZzZXQoKTsKKyAg
ICBpbnQgZW5kT2Zmc2V0ID0gci0+ZW5kT2Zmc2V0KCk7CisgICAgaWYgKCFzdGFydE5vZGUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmICghc3RhcnROb2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMo
KSkgewpAQCAtOTc2LDEyICsxMDAyLDEzIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IENoYXJhY3Rlckl0
ZXJhdG9yOjpyYW4KICAgICAgICAgaWYgKG1fdGV4dEl0ZXJhdG9yLmxlbmd0aCgpIDw9IDEpIHsK
ICAgICAgICAgICAgIEFTU0VSVChtX3J1bk9mZnNldCA9PSAwKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGludCBleGNlcHRpb24gPSAwOwotICAgICAgICAgICAgTm9kZSAqbiA9IHIt
PnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBBU1NFUlQobiA9PSByLT5l
bmRDb250YWluZXIoZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gci0+c3Rh
cnRPZmZzZXQoZXhjZXB0aW9uKSArIG1fcnVuT2Zmc2V0OwotICAgICAgICAgICAgci0+c2V0U3Rh
cnQobiwgb2Zmc2V0LCBleGNlcHRpb24pOwotICAgICAgICAgICAgci0+c2V0RW5kKG4sIG9mZnNl
dCArIDEsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICBOb2RlKiBuID0gci0+c3RhcnRDb250YWlu
ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVChuID09IHItPmVuZENvbnRhaW5lcigpKTsKKyAgICAg
ICAgICAgIGludCBvZmZzZXQgPSByLT5zdGFydE9mZnNldCgpICsgbV9ydW5PZmZzZXQ7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIHItPnNldFN0YXJ0KG4s
IG9mZnNldCwgZWMpOworICAgICAgICAgICAgci0+c2V0RW5kKG4sIG9mZnNldCArIDEsIGVjKTsK
KyAgICAgICAgICAgIEFTU0VSVCghZWMpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBy
LnJlbGVhc2UoKTsKQEAgLTEwNDUsNiArMTA3MiwyMCBAQCBTdHJpbmcgQ2hhcmFjdGVySXRlcmF0
b3I6OnN0cmluZyhpbnQgbnVtCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0K
IAorc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclN1YnJhbmdlKENoYXJhY3Rlckl0
ZXJhdG9yJiBpdCwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkKK3sKKyAgICBpdC5hZHZhbmNlKG9m
ZnNldCk7CisgICAgUmVmUHRyPFJhbmdlPiBzdGFydCA9IGl0LnJhbmdlKCk7CisKKyAgICBpZiAo
bGVuZ3RoID4gMSkKKyAgICAgICAgaXQuYWR2YW5jZShsZW5ndGggLSAxKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IGVuZCA9IGl0LnJhbmdlKCk7CisKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFy
dC0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSwgCisgICAgICAgIHN0YXJ0LT5zdGFydENv
bnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQoKSwgCisgICAgICAgIGVuZC0+ZW5kQ29udGFp
bmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworfQorCiAvLyAtLS0tLS0tLQogCiBXb3JkQXdhcmVJ
dGVyYXRvcjo6V29yZEF3YXJlSXRlcmF0b3IoKQpAQCAtMTExMyw3ICsxMTU0LDcgQEAgdm9pZCBX
b3JkQXdhcmVJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgIH0KICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKG1fdGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSwgbV90ZXh0SXRlcmF0b3IubGVuZ3Ro
KCkpOwogICAgICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgbV9yYW5nZS0+c2V0RW5k
KG1fdGV4dEl0ZXJhdG9yLnJhbmdlKCktPmVuZENvbnRhaW5lcihleGNlcHRpb24pLCBtX3RleHRJ
dGVyYXRvci5yYW5nZSgpLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgbV9yYW5nZS0+c2V0RW5kKG1fdGV4dEl0ZXJhdG9yLnJhbmdlKCktPmVuZENvbnRhaW5lcigp
LCBtX3RleHRJdGVyYXRvci5yYW5nZSgpLT5lbmRPZmZzZXQoKSwgZXhjZXB0aW9uKTsKICAgICB9
CiB9CiAKQEAgLTExMzcsMTAgKzExNzgsMTU1IEBAIGNvbnN0IFVDaGFyKiBXb3JkQXdhcmVJdGVy
YXRvcjo6Y2hhcmFjdGUKIAogLy8gLS0tLS0tLS0KIAotQ2lyY3VsYXJTZWFyY2hCdWZmZXI6OkNp
cmN1bGFyU2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgcywgYm9vbCBpc0Nhc2VTZW5zaXRpdmUp
Ci0gICAgOiBtX3RhcmdldChpc0Nhc2VTZW5zaXRpdmUgPyBzIDogcy5mb2xkQ2FzZSgpKQorI2lm
IEhBVkUoSUNVX1NFQVJDSCkKKworc3RhdGljIGNvbnN0IHNpemVfdCBtaW5pbXVtU2VhcmNoQnVm
ZmVyU2l6ZSA9IDgxOTI7CisKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgYm9vbCBzZWFyY2hlcklu
VXNlOworI2VuZGlmCisKK3N0YXRpYyBVU3RyaW5nU2VhcmNoKiBjcmVhdGVTZWFyY2hlcigpCit7
CisgICAgLy8gUHJvdmlkZSBhIG5vbi1lbXB0eSBwYXR0ZXJuIGFuZCBub24tZW1wdHkgdGV4dCBz
byB1c2VhcmNoX29wZW4gd2lsbCBub3QgZmFpbCwKKyAgICAvLyBidXQgaXQgZG9lc24ndCBtYXR0
ZXIgZXhhY3RseSB3aGF0IGl0IGlzLCBzaW5jZSB3ZSBkb24ndCBwZXJmb3JtIGFueSBzZWFyY2hl
cworICAgIC8vIHdpdGhvdXQgc2V0dGluZyBib3RoIHRoZSBwYXR0ZXJuIGFuZCB0aGUgdGV4dC4K
KworICAgIC8vIFBhc3MgZW1wdHkgc3RyaW5nIGZvciB0aGUgbG9jYWxlIGZvciBub3cgdG8gZ2V0
IHRoZSBVbmljb2RlIENvbGxhdGlvbiBBbGdvcml0aG0sCisgICAgLy8gcmF0aGVyIHRoYW4gc29t
ZXRoaW5nIGxvY2FsZS1zcGVjaWZpYy4KKworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOworICAgIFVTdHJpbmdTZWFyY2gqIHNlYXJjaGVyID0gdXNlYXJjaF9vcGVuKCZuZXds
aW5lQ2hhcmFjdGVyLCAxLCAmbmV3bGluZUNoYXJhY3RlciwgMSwgIiIsIDAsICZzdGF0dXMpOwor
ICAgIEFTU0VSVChzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKTsKKyAgICByZXR1cm4gc2VhcmNoZXI7
Cit9CisKK3N0YXRpYyBVU3RyaW5nU2VhcmNoKiBzZWFyY2hlcigpCit7CisgICAgc3RhdGljIFVT
dHJpbmdTZWFyY2gqIHNlYXJjaGVyID0gY3JlYXRlU2VhcmNoZXIoKTsKKyAgICByZXR1cm4gc2Vh
cmNoZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrU2VhcmNoZXIoKQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBBU1NFUlQoIXNlYXJjaGVySW5Vc2UpOworICAgIHNlYXJjaGVySW5Vc2Ug
PSB0cnVlOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tTZWFyY2hlcigp
Cit7CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChzZWFyY2hlckluVXNlKTsKKyAgICBzZWFy
Y2hlckluVXNlID0gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIFNlYXJjaEJ1ZmZlcjo6U2Vh
cmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGlzQ2FzZVNlbnNpdGl2ZSkKKyAg
ICA6IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAsIG1fYXRCcmVhayh0cnVlKQoreworICAgIEFTU0VS
VCghbV90YXJnZXQuaXNFbXB0eSgpKTsKKworICAgIHNpemVfdCB0YXJnZXRMZW5ndGggPSB0YXJn
ZXQubGVuZ3RoKCk7CisgICAgbV9idWZmZXIucmVzZXJ2ZUNhcGFjaXR5KG1heCh0YXJnZXRMZW5n
dGggKiA4LCBtaW5pbXVtU2VhcmNoQnVmZmVyU2l6ZSkpOworICAgIG1fb3ZlcmxhcCA9IG1fYnVm
ZmVyLmNhcGFjaXR5KCkgLyA0OworCisgICAgLy8gR3JhYiB0aGUgc2luZ2xlIGdsb2JhbCBzZWFy
Y2hlci4KKyAgICAvLyBJZiB3ZSBldmVyIGhhdmUgYSByZWFzb24gdG8gZG8gbW9yZSB0aGFuIG9u
Y2Ugc2VhcmNoIGJ1ZmZlciBhdCBvbmNlLCB3ZSdsbCBoYXZlCisgICAgLy8gdG8gbW92ZSB0byBt
dWx0aXBsZSBzZWFyY2hlcnMuCisgICAgbG9ja1NlYXJjaGVyKCk7CisKKyAgICBVU3RyaW5nU2Vh
cmNoKiBzZWFyY2hlciA9IFdlYkNvcmU6OnNlYXJjaGVyKCk7CisgICAgVUNvbGxhdG9yKiBjb2xs
YXRvciA9IHVzZWFyY2hfZ2V0Q29sbGF0b3Ioc2VhcmNoZXIpOworCisgICAgVUNvbGxhdGlvblN0
cmVuZ3RoIHN0cmVuZ3RoID0gaXNDYXNlU2Vuc2l0aXZlID8gVUNPTF9URVJUSUFSWSA6IFVDT0xf
UFJJTUFSWTsKKyAgICBpZiAodWNvbF9nZXRTdHJlbmd0aChjb2xsYXRvcikgIT0gc3RyZW5ndGgp
IHsKKyAgICAgICAgdWNvbF9zZXRTdHJlbmd0aChjb2xsYXRvciwgc3RyZW5ndGgpOworICAgICAg
ICB1c2VhcmNoX3Jlc2V0KHNlYXJjaGVyKTsKKyAgICB9CisKKyAgICBVRXJyb3JDb2RlIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKKyAgICB1c2VhcmNoX3NldFBhdHRlcm4oc2VhcmNoZXIsIG1fdGFy
Z2V0LmNoYXJhY3RlcnMoKSwgdGFyZ2V0TGVuZ3RoLCAmc3RhdHVzKTsKKyAgICBBU1NFUlQoc3Rh
dHVzID09IFVfWkVST19FUlJPUik7Cit9CisKK2lubGluZSBTZWFyY2hCdWZmZXI6On5TZWFyY2hC
dWZmZXIoKQoreworICAgIHVubG9ja1NlYXJjaGVyKCk7Cit9CisKK2lubGluZSBzaXplX3QgU2Vh
cmNoQnVmZmVyOjphcHBlbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
Cit7CisgICAgQVNTRVJUKGxlbmd0aCk7CisKKyAgICBpZiAobV9hdEJyZWFrKSB7CisgICAgICAg
IG1fYnVmZmVyLnNocmluaygwKTsKKyAgICAgICAgbV9hdEJyZWFrID0gZmFsc2U7CisgICAgfSBl
bHNlIGlmIChtX2J1ZmZlci5zaXplKCkgPT0gbV9idWZmZXIuY2FwYWNpdHkoKSkgeworICAgICAg
ICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5kYXRhKCkgKyBtX2J1ZmZlci5zaXpl
KCkgLSBtX292ZXJsYXAsIG1fb3ZlcmxhcCk7CisgICAgICAgIG1fYnVmZmVyLnNocmluayhtX292
ZXJsYXApOworICAgIH0KKworICAgIHNpemVfdCB1c2FibGVMZW5ndGggPSBtaW4obV9idWZmZXIu
Y2FwYWNpdHkoKSAtIG1fYnVmZmVyLnNpemUoKSwgbGVuZ3RoKTsKKyAgICBBU1NFUlQodXNhYmxl
TGVuZ3RoKTsKKyAgICBtX2J1ZmZlci5hcHBlbmQoY2hhcmFjdGVycywgdXNhYmxlTGVuZ3RoKTsK
KyAgICByZXR1cm4gdXNhYmxlTGVuZ3RoOworfQorCitpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6
OmF0QnJlYWsoKSBjb25zdAoreworICAgIHJldHVybiBtX2F0QnJlYWs7Cit9CisKK2lubGluZSB2
b2lkIFNlYXJjaEJ1ZmZlcjo6cmVhY2hlZEJyZWFrKCkKK3sKKyAgICBtX2F0QnJlYWsgPSB0cnVl
OworfQorCitpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6c2VhcmNoKHNpemVfdCYgc3RhcnQp
Cit7CisgICAgc2l6ZV90IHNpemUgPSBtX2J1ZmZlci5zaXplKCk7CisgICAgaWYgKCFtX2F0QnJl
YWsgJiYgc2l6ZSA8IG1fYnVmZmVyLmNhcGFjaXR5KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgVVN0cmluZ1NlYXJjaCogc2VhcmNoZXIgPSBXZWJDb3JlOjpzZWFyY2hlcigpOworCisgICAg
VUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgdXNlYXJjaF9zZXRUZXh0KHNl
YXJjaGVyLCBtX2J1ZmZlci5kYXRhKCksIHNpemUsICZzdGF0dXMpOworICAgIEFTU0VSVChzdGF0
dXMgPT0gVV9aRVJPX0VSUk9SKTsKKworICAgIGludCBtYXRjaFN0YXJ0ID0gdXNlYXJjaF9maXJz
dChzZWFyY2hlciwgJnN0YXR1cyk7CisgICAgQVNTRVJUKHN0YXR1cyA9PSBVX1pFUk9fRVJST1Ip
OworICAgIGlmIChtYXRjaFN0YXJ0ID09IFVTRUFSQ0hfRE9ORSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpbnQgbWF0Y2hMZW5ndGggPSB1c2VhcmNoX2dldE1hdGNoZWRMZW5ndGgoc2VhcmNo
ZXIpOworCisgICAgLy8gTWF0Y2hlcyB0aGF0IGFyZSBpbiB0aGUgb3ZlcmxhcCBhcmVhIGFyZSBv
bmx5IHRlbnRhdGl2ZS4KKyAgICAvLyBUaGUgc2FtZSBtYXRjaCBtYXkgYXBwZWFyIGxhdGVyLCBt
YXRjaGluZyBtb3JlIGNoYXJhY3RlcnMsCisgICAgLy8gcG9zc2libHkgaW5jbHVkaW5nIGEgY29t
YmluaW5nIGNoYXJhY3RlciB0aGF0J3Mgbm90IHlldCBpbiB0aGUgYnVmZmVyLgorICAgIGlmICgh
bV9hdEJyZWFrICYmIG1hdGNoU3RhcnQgKyBtYXRjaExlbmd0aCArIG1fb3ZlcmxhcCA+PSBzaXpl
KSB7CisgICAgICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLmRhdGEoKSArIG1f
YnVmZmVyLnNpemUoKSAtIG1fb3ZlcmxhcCwgbV9vdmVybGFwKTsKKyAgICAgICAgbV9idWZmZXIu
c2hyaW5rKG1fb3ZlcmxhcCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHNpemVf
dCBuZXdTaXplID0gc2l6ZSAtIChtYXRjaFN0YXJ0ICsgMSk7CisgICAgbWVtbW92ZShtX2J1ZmZl
ci5kYXRhKCksIG1fYnVmZmVyLmRhdGEoKSArIG1hdGNoU3RhcnQgKyAxLCBuZXdTaXplKTsKKyAg
ICBtX2J1ZmZlci5zaHJpbmsobmV3U2l6ZSk7CisKKyAgICBzdGFydCA9IHNpemUgLSBtYXRjaFN0
YXJ0OworICAgIHJldHVybiBtYXRjaExlbmd0aDsKK30KKworI2Vsc2UKKworaW5saW5lIFNlYXJj
aEJ1ZmZlcjo6U2VhcmNoQnVmZmVyKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGlzQ2FzZVNl
bnNpdGl2ZSkKKyAgICA6IG1fdGFyZ2V0KGlzQ2FzZVNlbnNpdGl2ZSA/IHRhcmdldCA6IHRhcmdl
dC5mb2xkQ2FzZSgpKQogICAgICwgbV9pc0Nhc2VTZW5zaXRpdmUoaXNDYXNlU2Vuc2l0aXZlKQot
ICAgICwgbV9jaGFyYWN0ZXJCdWZmZXIobV90YXJnZXQubGVuZ3RoKCkpCisgICAgLCBtX2J1ZmZl
cihtX3RhcmdldC5sZW5ndGgoKSkKICAgICAsIG1faXNDaGFyYWN0ZXJTdGFydEJ1ZmZlcihtX3Rh
cmdldC5sZW5ndGgoKSkKICAgICAsIG1faXNCdWZmZXJGdWxsKGZhbHNlKQogICAgICwgbV9jdXJz
b3IoMCkKQEAgLTExNDksOSArMTMzNSwyNCBAQCBDaXJjdWxhclNlYXJjaEJ1ZmZlcjo6Q2lyY3Vs
YXJTZWFyY2hCdWZmCiAgICAgbV90YXJnZXQucmVwbGFjZShub0JyZWFrU3BhY2UsICcgJyk7CiB9
CiAKLWlubGluZSB2b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjphcHBlbmQoVUNoYXIgYywgYm9v
bCBpc1N0YXJ0KQoraW5saW5lIFNlYXJjaEJ1ZmZlcjo6flNlYXJjaEJ1ZmZlcigpCiB7Ci0gICAg
bV9jaGFyYWN0ZXJCdWZmZXJbbV9jdXJzb3JdID0gYyA9PSBub0JyZWFrU3BhY2UgPyAnICcgOiBj
OworfQorCitpbmxpbmUgdm9pZCBTZWFyY2hCdWZmZXI6OnJlYWNoZWRCcmVhaygpCit7CisgICAg
bV9jdXJzb3IgPSAwOworICAgIG1faXNCdWZmZXJGdWxsID0gZmFsc2U7Cit9CisKK2lubGluZSBi
b29sIFNlYXJjaEJ1ZmZlcjo6YXRCcmVhaygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2N1cnNv
ciAmJiAhbV9pc0J1ZmZlckZ1bGw7Cit9CisKK2lubGluZSB2b2lkIFNlYXJjaEJ1ZmZlcjo6YXBw
ZW5kKFVDaGFyIGMsIGJvb2wgaXNTdGFydCkKK3sKKyAgICBtX2J1ZmZlclttX2N1cnNvcl0gPSBj
ID09IG5vQnJlYWtTcGFjZSA/ICcgJyA6IGM7CiAgICAgbV9pc0NoYXJhY3RlclN0YXJ0QnVmZmVy
W21fY3Vyc29yXSA9IGlzU3RhcnQ7CiAgICAgaWYgKCsrbV9jdXJzb3IgPT0gbV90YXJnZXQubGVu
Z3RoKCkpIHsKICAgICAgICAgbV9jdXJzb3IgPSAwOwpAQCAtMTE1OSwxNiArMTM2MCwxNyBAQCBp
bmxpbmUgdm9pZCBDaXJjdWxhclNlYXJjaEJ1ZmZlcjo6YXBwZW5kCiAgICAgfQogfQogCi1pbmxp
bmUgdm9pZCBDaXJjdWxhclNlYXJjaEJ1ZmZlcjo6YXBwZW5kKFVDaGFyIGMpCitpbmxpbmUgc2l6
ZV90IFNlYXJjaEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKQogeworICAgIEFTU0VSVChsZW5ndGgpOwogICAgIGlmIChtX2lzQ2FzZVNlbnNpdGl2
ZSkgewotICAgICAgICBhcHBlbmQoYywgdHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
YXBwZW5kKGNoYXJhY3RlcnNbMF0sIHRydWUpOworICAgICAgICByZXR1cm4gMTsKICAgICB9CiAg
ICAgY29uc3QgaW50IG1heEZvbGRlZENoYXJhY3RlcnMgPSAxNjsgLy8gc2Vuc2libGUgbWF4aW11
bSBpcyAzLCB0aGlzIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoCiAgICAgVUNoYXIgZm9sZGVk
Q2hhcmFjdGVyc1ttYXhGb2xkZWRDaGFyYWN0ZXJzXTsKICAgICBib29sIGVycm9yOwotICAgIGlu
dCBudW1Gb2xkZWRDaGFyYWN0ZXJzID0gZm9sZENhc2UoZm9sZGVkQ2hhcmFjdGVycywgbWF4Rm9s
ZGVkQ2hhcmFjdGVycywgJmMsIDEsICZlcnJvcik7CisgICAgaW50IG51bUZvbGRlZENoYXJhY3Rl
cnMgPSBmb2xkQ2FzZShmb2xkZWRDaGFyYWN0ZXJzLCBtYXhGb2xkZWRDaGFyYWN0ZXJzLCBjaGFy
YWN0ZXJzLCAxLCAmZXJyb3IpOwogICAgIEFTU0VSVCghZXJyb3IpOwogICAgIEFTU0VSVChudW1G
b2xkZWRDaGFyYWN0ZXJzKTsKICAgICBBU1NFUlQobnVtRm9sZGVkQ2hhcmFjdGVycyA8PSBtYXhG
b2xkZWRDaGFyYWN0ZXJzKTsKQEAgLTExNzgsMzQgKzEzODAsNDAgQEAgaW5saW5lIHZvaWQgQ2ly
Y3VsYXJTZWFyY2hCdWZmZXI6OmFwcGVuZAogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG51
bUZvbGRlZENoYXJhY3RlcnM7ICsraSkKICAgICAgICAgICAgIGFwcGVuZChmb2xkZWRDaGFyYWN0
ZXJzW2ldLCBmYWxzZSk7CiAgICAgfQorICAgIHJldHVybiAxOwogfQogCi1pbmxpbmUgYm9vbCBD
aXJjdWxhclNlYXJjaEJ1ZmZlcjo6aXNNYXRjaCgpIGNvbnN0CitpbmxpbmUgc2l6ZV90IFNlYXJj
aEJ1ZmZlcjo6c2VhcmNoKHNpemVfdCYgc3RhcnQpCiB7CiAgICAgaWYgKCFtX2lzQnVmZmVyRnVs
bCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1f
aXNDaGFyYWN0ZXJTdGFydEJ1ZmZlclttX2N1cnNvcl0pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB1bnNpZ25lZCB0YWlsU3BhY2UgPSBtX3RhcmdldC5s
ZW5ndGgoKSAtIG1fY3Vyc29yOwotICAgIHJldHVybiBtZW1jbXAoJm1fY2hhcmFjdGVyQnVmZmVy
W21fY3Vyc29yXSwgbV90YXJnZXQuY2hhcmFjdGVycygpLCB0YWlsU3BhY2UgKiBzaXplb2YoVUNo
YXIpKSA9PSAwCi0gICAgICAgICYmIG1lbWNtcCgmbV9jaGFyYWN0ZXJCdWZmZXJbMF0sIG1fdGFy
Z2V0LmNoYXJhY3RlcnMoKSArIHRhaWxTcGFjZSwgbV9jdXJzb3IgKiBzaXplb2YoVUNoYXIpKSA9
PSAwOworICAgIHNpemVfdCB0YWlsU3BhY2UgPSBtX3RhcmdldC5sZW5ndGgoKSAtIG1fY3Vyc29y
OworICAgIGlmIChtZW1jbXAoJm1fYnVmZmVyW21fY3Vyc29yXSwgbV90YXJnZXQuY2hhcmFjdGVy
cygpLCB0YWlsU3BhY2UgKiBzaXplb2YoVUNoYXIpKSAhPSAwKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAobWVtY21wKCZtX2J1ZmZlclswXSwgbV90YXJnZXQuY2hhcmFjdGVycygpICsgdGFp
bFNwYWNlLCBtX2N1cnNvciAqIHNpemVvZihVQ2hhcikpICE9IDApCisgICAgICAgIHJldHVybiAw
OworCisgICAgc3RhcnQgPSBsZW5ndGgoKTsKKyAgICByZXR1cm4gc3RhcnQ7CiB9CiAKIC8vIFJl
dHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBhcHBlbmRlZCB0byB0aGUg
YnVmZmVyICh3aGF0IHdlIGFyZSBzZWFyY2hpbmcgaW4pLgogLy8gVGhhdCdzIG5vdCBuZWNlc3Nh
cmlseSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHBhc3NlZC1pbiB0YXJnZXQgc3RyaW5nLCBiZWNh
dXNlIGNhc2UgZm9sZGluZwogLy8gY2FuIG1ha2UgdHdvIHN0cmluZ3MgbWF0Y2ggZXZlbiB0aG91
Z2ggdGhleSdyZSBub3QgdGhlIHNhbWUgbGVuZ3RoLgotdW5zaWduZWQgQ2lyY3VsYXJTZWFyY2hC
dWZmZXI6Omxlbmd0aCgpIGNvbnN0CitzaXplX3QgU2VhcmNoQnVmZmVyOjpsZW5ndGgoKSBjb25z
dAogewotICAgIEFTU0VSVChpc01hdGNoKCkpOwotCi0gICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9
IG1fdGFyZ2V0Lmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7ICsraSkKKyAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IG1fdGFyZ2V0Lmxlbmd0aCgpOworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgKytpKQogICAgICAgICBsZW5ndGggKz0gbV9p
c0NoYXJhY3RlclN0YXJ0QnVmZmVyW2ldOwogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKKyNlbmRp
ZgorCiAvLyAtLS0tLS0tLQogCiBpbnQgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb25zdCBS
YW5nZSAqciwgYm9vbCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24pCkBAIC0xMjE5LDIzICsxNDI3
LDggQEAgaW50IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29uc3QgUmFuZwogCiBQYXNzUmVm
UHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKFJhbmdlKiBlbnRpcmVSYW5nZSwgaW50
IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KQogewotICAgIENoYXJhY3Rlckl0
ZXJhdG9yIGNoYXJzKGVudGlyZVJhbmdlKTsKLQotICAgIGNoYXJzLmFkdmFuY2UoY2hhcmFjdGVy
T2Zmc2V0KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0ID0gY2hhcnMucmFuZ2UoKTsKLQotICAg
IGNoYXJzLmFkdmFuY2UoY2hhcmFjdGVyQ291bnQpOwotICAgIFJlZlB0cjxSYW5nZT4gZW5kID0g
Y2hhcnMucmFuZ2UoKTsKLSAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdChSYW5nZTo6Y3JlYXRlKGVudGlyZVJhbmdlLT5vd25lckRvY3VtZW50
KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQtPnN0YXJ0Q29u
dGFpbmVyKGVjKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC0+
c3RhcnRPZmZzZXQoZWMpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZC0+c3RhcnRDb250YWluZXIoZWMpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZC0+c3RhcnRPZmZzZXQoZWMpKSk7Ci0gICAgQVNTRVJUKCFlYyk7Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgZW50aXJlUmFu
Z2VJdGVyYXRvcihlbnRpcmVSYW5nZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlclN1YnJhbmdlKGVu
dGlyZVJhbmdlSXRlcmF0b3IsIGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogfQog
CiBQYXNzUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVu
Z3RoKEVsZW1lbnQgKnNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3RoLCBi
b29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKQEAgLTEyNTIsMTMgKzE0NDUsMTMgQEAgUGFz
c1JlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZybwogICAgIAogICAgIC8vIEZJWE1F
OiB0aGUgYXRFbmQoKSBjaGVjayBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCB3b3JrYXJvdW5kIGZv
ciA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4OT4uCiAgICAgaWYg
KHJhbmdlTG9jYXRpb24gPT0gMCAmJiByYW5nZUxlbmd0aCA9PSAwICYmIGl0LmF0RW5kKCkpIHsK
LSAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgIHRleHRSdW5SYW5nZSA9IGl0LnJh
bmdlKCk7CiAgICAgICAgIAotICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJh
bmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCAwLCBleGNlcHRpb24pOwotICAgICAgICBB
U1NFUlQoZXhjZXB0aW9uID09IDApOwotICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRS
dW5SYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgMCwgZXhjZXB0aW9uKTsKLSAgICAg
ICAgQVNTRVJUKGV4Y2VwdGlvbiA9PSAwKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIDAsIGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAgIHJlc3VsdFJhbmdl
LT5zZXRFbmQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCAwLCBlYyk7CisgICAgICAg
IEFTU0VSVCghZWMpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdFJhbmdlLnJlbGVh
c2UoKTsKICAgICB9CkBAIC0xMjc1LDEyICsxNDY4LDEzIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm8KICAgICAgICAgaWYgKGZvdW5kU3RhcnQgfHwgZm91bmRFbmQp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGZh
Y3QgdGhhdCB0aGUgZW5kIG9mIGEgcnVuIGlzIG9mdGVuIGF0IHRoZSB3cm9uZwogICAgICAgICAg
ICAgLy8gcG9zaXRpb24gZm9yIGVtaXR0ZWQgJ1xuJ3MuCi0gICAgICAgICAgICBpZiAobGVuID09
IDEgJiYgaXQuY2hhcmFjdGVycygpWzBdID09IFVDaGFyKCdcbicpKSB7CisgICAgICAgICAgICBp
ZiAobGVuID09IDEgJiYgaXQuY2hhcmFjdGVycygpWzBdID09ICdcbicpIHsKICAgICAgICAgICAg
ICAgICBQb3NpdGlvbiBydW5TdGFydCA9IHRleHRSdW5SYW5nZS0+c3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICAgICAgICAgIFBvc2l0aW9uIHJ1bkVuZCA9IFZpc2libGVQb3NpdGlvbihydW5TdGFy
dCkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKHJ1bkVuZC5p
c05vdE51bGwoKSkgewogICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocnVuRW5kLm5vZGUoKSwg
cnVuRW5kLm9mZnNldCgpLCBlYyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTI4OCwyNyAr
MTQ4MiwyNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvCiAgICAg
ICAgIGlmIChmb3VuZFN0YXJ0KSB7CiAgICAgICAgICAgICBzdGFydFJhbmdlRm91bmQgPSB0cnVl
OwogICAgICAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgICAgICAgICBpZiAodGV4dFJ1
blJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLT5pc1RleHROb2RlKCkpIHsKKyAgICAg
ICAgICAgIGlmICh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSByYW5nZUxvY2F0aW9uIC0gZG9jVGV4dFBv
c2l0aW9uOwotICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCh0ZXh0UnVuUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3Rh
cnRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICByZXN1bHRS
YW5nZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQgKyB0
ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIGV4Y2VwdGlvbik7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGlmIChyYW5nZUxvY2F0aW9uID09IGRvY1RleHRQb3NpdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KHRleHRSdW5SYW5n
ZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldChl
eGNlcHRpb24pLCBleGNlcHRpb24pOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+
c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0
YXJ0T2Zmc2V0KCksIGV4Y2VwdGlvbik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5lbmRDb250YWlu
ZXIoZXhjZXB0aW9uKSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KHRleHRSdW5S
YW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCksIGV4Y2VwdGlv
bik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRFbmQpIHsK
ICAgICAgICAgICAgIGludCBleGNlcHRpb24gPSAwOwotICAgICAgICAgICAgaWYgKHRleHRSdW5S
YW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAg
ICAgICBpZiAodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc1RleHROb2RlKCkpIHsK
ICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmFuZ2VFbmQgLSBkb2NUZXh0UG9zaXRpb247
Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKGV4Y2VwdGlvbiksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQo
ZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0
RW5kKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdl
LT5zdGFydE9mZnNldCgpLCBleGNlcHRpb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBpZiAocmFuZ2VFbmQgPT0gZG9jVGV4dFBvc2l0aW9uKQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIo
ZXhjZXB0aW9uKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldChleGNlcHRpb24pLCBleGNlcHRp
b24pOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpLCBleGNlcHRp
b24pOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFu
Z2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcihleGNlcHRpb24pLCB0ZXh0UnVu
UmFuZ2UtPmVuZE9mZnNldChleGNlcHRpb24pLCBleGNlcHRpb24pOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+ZW5kQ29udGFpbmVyKCksIHRl
eHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCksIGV4Y2VwdGlvbik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBkb2NUZXh0UG9zaXRpb24gKz0gbGVuOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
MzIxLDcgKzE1MTUsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJv
CiAgICAgCiAgICAgaWYgKHJhbmdlTGVuZ3RoICE9IDAgJiYgcmFuZ2VFbmQgPiBkb2NUZXh0UG9z
aXRpb24pIHsgLy8gcmFuZ2VFbmQgaXMgb3V0IG9mIGJvdW5kcwogICAgICAgICBpbnQgZXhjZXB0
aW9uID0gMDsKLSAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENv
bnRhaW5lcihleGNlcHRpb24pLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldChleGNlcHRpb24pLCBl
eGNlcHRpb24pOworICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+ZW5k
Q29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCksIGV4Y2VwdGlvbik7CiAgICAg
fQogICAgIAogICAgIHJldHVybiByZXN1bHRSYW5nZS5yZWxlYXNlKCk7CkBAIC0xMzk4LDU2ICsx
NTkyLDgwIEBAIFN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqIHIpCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotUGFzc1JlZlB0cjxSYW5nZT4gZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSog
cmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZVNlbnNp
dGl2ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZShjb25z
dCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICAvLyBGSVhNRTogQ2FuIHdlIGRvIEJveWVyLU1vb3Jl
IG9yIGVxdWl2YWxlbnQgaW5zdGVhZCBmb3Igc3BlZWQ/CisgICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgaWYgKCFpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShjaGFyYWN0ZXJzW2ldKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKK3N0
YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjb2xsYXBzZWRUb0JvdW5kYXJ5KGNvbnN0IFJhbmdlKiBy
YW5nZSwgYm9vbCBmb3J3YXJkKQorewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJl
ZlB0cjxSYW5nZT4gcmVzdWx0ID0gcmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgIEFTU0VSVCgh
ZWMpOwogICAgIHJlc3VsdC0+Y29sbGFwc2UoIWZvcndhcmQsIGVjKTsKKyAgICBBU1NFUlQoIWVj
KTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KIAotICAgIC8vIEZJWE1FOiBUaGlz
IGNvZGUgZG9lcyBub3QgYWxsb3cgXG4gYXQgdGhlIG1vbWVudCBiZWNhdXNlIG9mIGlzc3VlcyB3
aXRoIDxicj4uCi0gICAgLy8gT25jZSB3ZSBmaXggdGhvc2UsIHdlIGNhbiByZW1vdmUgdGhpcyBj
aGVjay4KLSAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSB8fCB0YXJnZXQuZmluZCgnXG4nKSAhPSAt
MSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CitzdGF0aWMgc2l6ZV90IGZpbmRQ
bGFpblRleHQoQ2hhcmFjdGVySXRlcmF0b3ImIGl0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9v
bCBmb3J3YXJkLCBib29sIGNhc2VTZW5zaXRpdmUsIHNpemVfdCYgbWF0Y2hTdGFydCkKK3sKKyAg
ICBtYXRjaFN0YXJ0ID0gMDsKKyAgICBzaXplX3QgbWF0Y2hMZW5ndGggPSAwOwogCi0gICAgdW5z
aWduZWQgbWF0Y2hTdGFydCA9IDA7Ci0gICAgdW5zaWduZWQgbWF0Y2hMZW5ndGggPSAwOwotICAg
IHsKLSAgICAgICAgQ2lyY3VsYXJTZWFyY2hCdWZmZXIgc2VhcmNoQnVmZmVyKHRhcmdldCwgY2Fz
ZVNlbnNpdGl2ZSk7Ci0gICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJhbmdlLCBmYWxzZSwg
dHJ1ZSk7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGlmIChzZWFyY2hCdWZmZXIu
aXNNYXRjaCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGZvdW5kIGEgbWF0
Y2gsIGFuZCB3aGVyZSB3ZSBmb3VuZCBpdC4KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYXRj
aEVuZCA9IGl0LmNoYXJhY3Rlck9mZnNldCgpOwotICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3Ro
ID0gc2VhcmNoQnVmZmVyLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVChtYXRjaExl
bmd0aCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1hdGNoRW5kID49IG1hdGNoTGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICBtYXRjaFN0YXJ0ID0gbWF0Y2hFbmQgLSBtYXRjaExlbmd0aDsKLSAg
ICAgICAgICAgICAgICAvLyBJZiBzZWFyY2hpbmcgZm9yd2FyZCwgc3RvcCBvbiB0aGUgZmlyc3Qg
bWF0Y2guCi0gICAgICAgICAgICAgICAgLy8gSWYgc2VhcmNoaW5nIGJhY2t3YXJkLCBkb24ndCBz
dG9wLCBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbGFzdCBtYXRjaC4KLSAgICAgICAgICAgICAgICBp
ZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoaXQuYXRCcmVhaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LmF0
RW5kKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHNlYXJj
aEJ1ZmZlci5jbGVhcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VhcmNoQnVmZmVy
LmFwcGVuZChpdC5jaGFyYWN0ZXJzKClbMF0pOwotICAgICAgICAgICAgaXQuYWR2YW5jZSgxKTsK
KyAgICBTZWFyY2hCdWZmZXIgYnVmZmVyKHRhcmdldCwgY2FzZVNlbnNpdGl2ZSk7CisKKyAgICB3
aGlsZSAoIWl0LmF0RW5kKCkpIHsKKyAgICAgICAgaXQuYWR2YW5jZShidWZmZXIuYXBwZW5kKGl0
LmNoYXJhY3RlcnMoKSwgaXQubGVuZ3RoKCkpKTsKK3RyeUFnYWluOgorICAgICAgICBzaXplX3Qg
bWF0Y2hTdGFydE9mZnNldDsKKyAgICAgICAgaWYgKHNpemVfdCBuZXdNYXRjaExlbmd0aCA9IGJ1
ZmZlci5zZWFyY2gobWF0Y2hTdGFydE9mZnNldCkpIHsKKyAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBmb3VuZCBhIG1hdGNoLCBhbmQgd2hlcmUgd2UgZm91bmQgaXQuCisgICAgICAgICAgICBz
aXplX3QgbGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0ID0gaXQuY2hhcmFjdGVyT2Zmc2V0KCk7
CisgICAgICAgICAgICBBU1NFUlQobGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0ID49IG1hdGNo
U3RhcnRPZmZzZXQpOworICAgICAgICAgICAgbWF0Y2hTdGFydCA9IGxhc3RDaGFyYWN0ZXJJbkJ1
ZmZlck9mZnNldCAtIG1hdGNoU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICBtYXRjaExlbmd0aCA9
IG5ld01hdGNoTGVuZ3RoOworICAgICAgICAgICAgLy8gSWYgc2VhcmNoaW5nIGZvcndhcmQsIHN0
b3Agb24gdGhlIGZpcnN0IG1hdGNoLgorICAgICAgICAgICAgLy8gSWYgc2VhcmNoaW5nIGJhY2t3
YXJkLCBkb24ndCBzdG9wLCBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbGFzdCBtYXRjaC4KKyAgICAg
ICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpdC5hdEJyZWFrKCkgJiYgIWJ1ZmZlci5hdEJyZWFrKCkpIHsKKyAgICAgICAg
ICAgIGJ1ZmZlci5yZWFjaGVkQnJlYWsoKTsKKyAgICAgICAgICAgIGdvdG8gdHJ5QWdhaW47CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobWF0Y2hMZW5ndGgpIHsKLSAgICAgICAgQ2hhcmFj
dGVySXRlcmF0b3IgaXQocmFuZ2UsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgaXQuYWR2YW5jZSht
YXRjaFN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdGFydChpdC5yYW5nZSgpLT5zdGFydENv
bnRhaW5lcihlYyksIGl0LnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGVjKSwgZWMpOwotICAgICAgICBp
dC5hZHZhbmNlKG1hdGNoTGVuZ3RoIC0gMSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RW5kKGl0LnJh
bmdlKCktPmVuZENvbnRhaW5lcihlYyksIGl0LnJhbmdlKCktPmVuZE9mZnNldChlYyksIGVjKTsK
KyAgICByZXR1cm4gbWF0Y2hMZW5ndGg7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IGZpbmRQbGFp
blRleHQoY29uc3QgUmFuZ2UqIHJhbmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3
YXJkLCBib29sIGNhc2VTZW5zaXRpdmUpCit7CisgICAgLy8gV2UgY2FuJ3Qgc2VhcmNoIGVmZmVj
dGl2ZWx5IGZvciBhIHN0cmluZyB0aGF0J3MgZW50aXJlbHkgbWFkZSBvZiBjb2xsYXBzaWJsZQor
ICAgIC8vIHdoaXRlc3BhY2UsIHNvIHdlIHdvbid0IGV2ZW4gdHJ5LiBUaGlzIGFsc28gdGFrZXMg
Y2FyZSBvZiB0aGUgZW1wdHkgc3RyaW5nIGNhc2UuCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBk
b2VzIG5vdCBhbGxvdyBcbiBhdCB0aGUgbW9tZW50IGJlY2F1c2Ugb2YgaXNzdWVzIHdpdGggPGJy
Pi4KKyAgICAvLyBPbmNlIHdlIGZpeCB0aG9zZSwgd2UgY2FuIHJlbW92ZSB0aGUgc3BlY2lmaWMg
Y2hlY2sgZm9yIFxuLgorICAgIGlmIChpc0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZSh0YXJnZXQp
IHx8IHRhcmdldC5jb250YWlucygnXG4nKSkKKyAgICAgICAgcmV0dXJuIGNvbGxhcHNlZFRvQm91
bmRhcnkocmFuZ2UsIGZvcndhcmQpOworCisgICAgLy8gRmlyc3QsIGZpbmQgdGhlIHRleHQuCisg
ICAgc2l6ZV90IG1hdGNoU3RhcnQ7CisgICAgc2l6ZV90IG1hdGNoTGVuZ3RoOworICAgIHsKKyAg
ICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgZmluZEl0ZXJhdG9yKHJhbmdlLCBmYWxzZSwgdHJ1ZSk7
CisgICAgICAgIG1hdGNoTGVuZ3RoID0gZmluZFBsYWluVGV4dChmaW5kSXRlcmF0b3IsIHRhcmdl
dCwgZm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwgbWF0Y2hTdGFydCk7CisgICAgICAgIGlmICghbWF0
Y2hMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gY29sbGFwc2VkVG9Cb3VuZGFyeShyYW5nZSwg
Zm9yd2FyZCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgLy8g
VGhlbiwgZmluZCB0aGUgZG9jdW1lbnQgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IGFuZCB0aGUgZW5k
IG9mIHRoZSB0ZXh0LgorICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNvbXB1dGVSYW5nZUl0ZXJhdG9y
KHJhbmdlLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlclN1YnJhbmdlKGNvbXB1
dGVSYW5nZUl0ZXJhdG9yLCBtYXRjaFN0YXJ0LCBtYXRjaExlbmd0aCk7CiB9CiAKIH0KSW5kZXg6
IFdlYkNvcmUvaWN1L3VuaWNvZGUvdWNvbGVpdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2lj
dS91bmljb2RlL3Vjb2xlaXRyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ljdS91bmljb2Rl
L3Vjb2xlaXRyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjY4IEBACisvKgorKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCBJbnRlcm5hdGlvbmFs
IEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgdWNvbGVpdHIu
Y3BwCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiBEYXRlICAgICAgICBOYW1lICAg
ICAgICBEZXNjcmlwdGlvbgorKiAwMi8xNS8yMDAxICBzeW53ZWUgICAgICBNb2RpZmllZCBhbGwg
bWV0aG9kcyB0byBwcm9jZXNzIGl0cyBvd24gZnVuY3Rpb24gCisqICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgZXF1aXZhbGVudCBjKysgYXBpIChjb2xlaXRy
LmgpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFVDT0xFSVRSX0gKKyNkZWZp
bmUgVUNPTEVJVFJfSAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworI2lmICFVQ09O
RklHX05PX0NPTExBVElPTgorCisvKiogIAorICogVGhpcyBpbmRpY2F0ZXMgYW4gZXJyb3IgaGFz
IG9jY3VyZWQgZHVyaW5nIHByb2Nlc3Npbmcgb3IgaWYgbm8gbW9yZSBDRXMgaXMgCisgKiB0byBi
ZSByZXR1cm5lZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisjZGVmaW5lIFVDT0xfTlVMTE9S
REVSICAgICAgICAoKGludDMyX3QpMHhGRkZGRkZGRikKKworI2luY2x1ZGUgInVuaWNvZGUvdWNv
bC5oIgorCisvKiogCisgKiBUaGUgVUNvbGxhdGlvbkVsZW1lbnRzIHN0cnVjdC4KKyAqIEZvciB1
c2FnZSBpbiBDIHByb2dyYW1zLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgc3Ry
dWN0IFVDb2xsYXRpb25FbGVtZW50cyBVQ29sbGF0aW9uRWxlbWVudHM7CisKKy8qKgorICogXGZp
bGUKKyAqIFxicmllZiBDIEFQSTogVUNvbGxhdGlvbkVsZW1lbnRzCisgKgorICogVGhlIFVDb2xs
YXRpb25FbGVtZW50cyBBUEkgaXMgdXNlZCBhcyBhbiBpdGVyYXRvciB0byB3YWxrIHRocm91Z2gg
ZWFjaCAKKyAqIGNoYXJhY3RlciBvZiBhbiBpbnRlcm5hdGlvbmFsIHN0cmluZy4gVXNlIHRoZSBp
dGVyYXRvciB0byByZXR1cm4gdGhlCisgKiBvcmRlcmluZyBwcmlvcml0eSBvZiB0aGUgcG9zaXRp
b25lZCBjaGFyYWN0ZXIuIFRoZSBvcmRlcmluZyBwcmlvcml0eSBvZiBhIAorICogY2hhcmFjdGVy
LCB3aGljaCB3ZSByZWZlciB0byBhcyBhIGtleSwgZGVmaW5lcyBob3cgYSBjaGFyYWN0ZXIgaXMg
Y29sbGF0ZWQgCisgKiBpbiB0aGUgZ2l2ZW4gY29sbGF0aW9uIG9iamVjdC4KKyAqIEZvciBleGFt
cGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGluIFNwYW5pc2g6CisgKiA8cHJlPgorICogLiAg
ICAgICAiY2EiIC0+IHRoZSBmaXJzdCBrZXkgaXMga2V5KCdjJykgYW5kIHNlY29uZCBrZXkgaXMg
a2V5KCdhJykuCisgKiAuICAgICAgICJjaGEiIC0+IHRoZSBmaXJzdCBrZXkgaXMga2V5KCdjaCcp
IGFuZCBzZWNvbmQga2V5IGlzIGtleSgnYScpLgorICogPC9wcmU+CisgKiBBbmQgaW4gR2VybWFu
LAorICogPHByZT4KKyAqIC4gICAgICAgIjxhZSBsaWdhdHVyZT5iIi0+IHRoZSBmaXJzdCBrZXkg
aXMga2V5KCdhJyksIHRoZSBzZWNvbmQga2V5IGlzIGtleSgnZScpLCBhbmQKKyAqIC4gICAgICAg
dGhlIHRoaXJkIGtleSBpcyBrZXkoJ2InKS4KKyAqIDwvcHJlPgorICogPHA+RXhhbXBsZSBvZiB0
aGUgaXRlcmF0b3IgdXNhZ2U6ICh3aXRob3V0IGVycm9yIGNoZWNraW5nKQorICogPHByZT4KKyAq
IC4gIHZvaWQgQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yX0V4YW1wbGUoKQorICogLiAgeworICog
LiAgICAgIFVDaGFyICpzOworICogLiAgICAgIHRfaW50MzIgb3JkZXIsIHByaW1hcnlPcmRlcjsK
KyAqIC4gICAgICBVQ29sbGF0aW9uRWxlbWVudHMgKmM7CisgKiAuICAgICAgVUNvbGxhdG9yT2xk
ICpjb2xsOworICogLiAgICAgIFVFcnJvckNvZGUgc3VjY2VzcyA9IFVfWkVST19FUlJPUjsKKyAq
IC4gICAgICBzPShVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikgKiAoc3RybGVuKCJUaGlzIGlz
IGEgdGVzdCIpKzEpICk7CisgKiAuICAgICAgdV91YXN0cmNweShzLCAiVGhpcyBpcyBhIHRlc3Qi
KTsKKyAqIC4gICAgICBjb2xsID0gdWNvbF9vcGVuKE5VTEwsICZzdWNjZXNzKTsKKyAqIC4gICAg
ICBjID0gdWNvbF9vcGVuRWxlbWVudHMoY29sbCwgc3RyLCB1X3N0cmxlbihzdHIpLCAmc3RhdHVz
KTsKKyAqIC4gICAgICBvcmRlciA9IHVjb2xfbmV4dChjLCAmc3VjY2Vzcyk7CisgKiAuICAgICAg
dWNvbF9yZXNldChjKTsKKyAqIC4gICAgICBvcmRlciA9IHVjb2xfcHJldihjLCAmc3VjY2Vzcyk7
CisgKiAuICAgICAgZnJlZShzKTsKKyAqIC4gICAgICB1Y29sX2Nsb3NlKGNvbGwpOworICogLiAg
ICAgIHVjb2xfY2xvc2VFbGVtZW50cyhjKTsKKyAqIC4gIH0KKyAqIDwvcHJlPgorICogPHA+Cisg
KiB1Y29sX25leHQoKSByZXR1cm5zIHRoZSBjb2xsYXRpb24gb3JkZXIgb2YgdGhlIG5leHQuCisg
KiB1Y29sX3ByZXYoKSByZXR1cm5zIHRoZSBjb2xsYXRpb24gb3JkZXIgb2YgdGhlIHByZXZpb3Vz
IGNoYXJhY3Rlci4KKyAqIFRoZSBDb2xsYXRpb24gRWxlbWVudCBJdGVyYXRvciBtb3ZlcyBvbmx5
IGluIG9uZSBkaXJlY3Rpb24gYmV0d2VlbiBjYWxscyB0bworICogdWNvbF9yZXNldC4gVGhhdCBp
cywgdWNvbF9uZXh0KCkgYW5kIHVjb2xfcHJldiBjYW4gbm90IGJlIGludGVyLXVzZWQuIAorICog
V2hlbmV2ZXIgdWNvbF9wcmV2IGlzIHRvIGJlIGNhbGxlZCBhZnRlciB1Y29sX25leHQoKSBvciB2
aWNlIHZlcnNhLCAKKyAqIHVjb2xfcmVzZXQgaGFzIHRvIGJlIGNhbGxlZCBmaXJzdCB0byByZXNl
dCB0aGUgc3RhdHVzLCBzaGlmdGluZyBwb2ludGVycyB0byAKKyAqIGVpdGhlciB0aGUgZW5kIG9y
IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLiBIZW5jZSBhdCB0aGUgbmV4dCBjYWxsIG9mIAorICog
dWNvbF9wcmV2IG9yIHVjb2xfbmV4dCwgdGhlIGZpcnN0IG9yIGxhc3QgY29sbGF0aW9uIG9yZGVy
IHdpbGwgYmUgcmV0dXJuZWQuIAorICogSWYgYSBjaGFuZ2Ugb2YgZGlyZWN0aW9uIGlzIGRvbmUg
d2l0aG91dCBhIHVjb2xfcmVzZXQsIHRoZSByZXN1bHQgaXMgCisgKiB1bmRlZmluZWQuCisgKiBU
aGUgcmVzdWx0IG9mIGEgZm9yd2FyZCBpdGVyYXRlICh1Y29sX25leHQpIGFuZCByZXZlcnNlZCBy
ZXN1bHQgb2YgdGhlICAKKyAqIGJhY2t3YXJkIGl0ZXJhdGUgKHVjb2xfcHJldikgb24gdGhlIHNh
bWUgc3RyaW5nIGFyZSBlcXVpdmFsZW50LCBpZiAKKyAqIGNvbGxhdGlvbiBvcmRlcnMgd2l0aCB0
aGUgdmFsdWUgVUNPTF9JR05PUkFCTEUgYXJlIGlnbm9yZWQuCisgKiBDaGFyYWN0ZXIgYmFzZWQg
b24gdGhlIGNvbXBhcmlzb24gbGV2ZWwgb2YgdGhlIGNvbGxhdG9yLiAgQSBjb2xsYXRpb24gb3Jk
ZXIgCisgKiBjb25zaXN0cyBvZiBwcmltYXJ5IG9yZGVyLCBzZWNvbmRhcnkgb3JkZXIgYW5kIHRl
cnRpYXJ5IG9yZGVyLiAgVGhlIGRhdGEgCisgKiB0eXBlIG9mIHRoZSBjb2xsYXRpb24gb3JkZXIg
aXMgPHN0cm9uZz50X2ludDMyPC9zdHJvbmc+LiAKKyAqCisgKiBAc2VlIFVDb2xsYXRvcgorICov
CisKKy8qKgorICogT3BlbiB0aGUgY29sbGF0aW9uIGVsZW1lbnRzIGZvciBhIHN0cmluZy4KKyAq
CisgKiBAcGFyYW0gY29sbCBUaGUgY29sbGF0b3IgY29udGFpbmluZyB0aGUgZGVzaXJlZCBjb2xs
YXRpb24gcnVsZXMuCisgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBpdGVyYXRlIG92ZXIuCisg
KiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGV4dCwgb3Ig
LTEgaWYgbnVsbC10ZXJtaW5hdGVkCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBV
RXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gYSBzdHJ1Y3QgY29u
dGFpbmluZyBjb2xsYXRpb24gZWxlbWVudCBpbmZvcm1hdGlvbgorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK1VfU1RBQkxFIFVDb2xsYXRpb25FbGVtZW50cyogVV9FWFBPUlQyIAordWNvbF9vcGVu
RWxlbWVudHMoY29uc3QgVUNvbGxhdG9yICAqY29sbCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyICAgICAgKnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgIHRl
eHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOwor
CisvKioKKyAqIGdldCBhIGhhc2ggY29kZSBmb3IgYSBrZXkuLi4gTm90IHZlcnkgdXNlZnVsIQor
ICogQHBhcmFtIGtleSAgICB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGxlbmd0aCB0aGUgc2l6
ZSBvZiB0aGUga2V5IGFycmF5LgorICogQHJldHVybiAgICAgICB0aGUgaGFzaCBjb2RlLgorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNvbF9r
ZXlIYXNoQ29kZShjb25zdCB1aW50OF90KiBrZXksIGludDMyX3QgbGVuZ3RoKTsKKworLyoqCisg
KiBDbG9zZSBhIFVDb2xsYXRpb25FbGVtZW50cy4KKyAqIE9uY2UgY2xvc2VkLCBhIFVDb2xsYXRp
b25FbGVtZW50cyBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisgKiBAcGFyYW0gZWxlbXMgVGhlIFVD
b2xsYXRpb25FbGVtZW50cyB0byBjbG9zZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NU
QUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vjb2xfY2xvc2VFbGVtZW50cyhVQ29sbGF0aW9uRWxlbWVu
dHMgKmVsZW1zKTsKKworLyoqCisgKiBSZXNldCB0aGUgY29sbGF0aW9uIGVsZW1lbnRzIHRvIHRo
ZWlyIGluaXRpYWwgc3RhdGUuCisgKiBUaGlzIHdpbGwgbW92ZSB0aGUgJ2N1cnNvcicgdG8gdGhl
IGJlZ2lubmluZyBvZiB0aGUgdGV4dC4KKyAqIFByb3BlcnR5IHNldHRpbmdzIGZvciBjb2xsYXRp
b24gd2lsbCBiZSByZXNldCB0byB0aGUgY3VycmVudCBzdGF0dXMuCisgKiBAcGFyYW0gZWxlbXMg
VGhlIFVDb2xsYXRpb25FbGVtZW50cyB0byByZXNldC4KKyAqIEBzZWUgdWNvbF9uZXh0CisgKiBA
c2VlIHVjb2xfcHJldmlvdXMKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3Vjb2xfcmVzZXQoVUNvbGxhdGlvbkVsZW1lbnRzICplbGVtcyk7CisKKy8q
KgorICogR2V0IHRoZSBvcmRlcmluZyBwcmlvcml0eSBvZiB0aGUgbmV4dCBjb2xsYXRpb24gZWxl
bWVudCBpbiB0aGUgdGV4dC4KKyAqIEEgc2luZ2xlIGNoYXJhY3RlciBtYXkgY29udGFpbiBtb3Jl
IHRoYW4gb25lIGNvbGxhdGlvbiBlbGVtZW50LgorICogQHBhcmFtIGVsZW1zIFRoZSBVQ29sbGF0
aW9uRWxlbWVudHMgY29udGFpbmluZyB0aGUgdGV4dC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2lu
dGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorICogQHJldHVybiBU
aGUgbmV4dCBjb2xsYXRpb24gZWxlbWVudHMgb3JkZXJpbmcsIG90aGVyd2lzZSByZXR1cm5zIE5V
TExPUkRFUiAKKyAqICAgICAgICAgaWYgYW4gZXJyb3IgaGFzIG9jY3VyZWQgb3IgaWYgdGhlIGVu
ZCBvZiBzdHJpbmcgaGFzIGJlZW4gcmVhY2hlZAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNvbF9uZXh0KFVDb2xsYXRpb25FbGVtZW50cyAq
ZWxlbXMsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICogR2V0IHRoZSBvcmRlcmluZyBw
cmlvcml0eSBvZiB0aGUgcHJldmlvdXMgY29sbGF0aW9uIGVsZW1lbnQgaW4gdGhlIHRleHQuCisg
KiBBIHNpbmdsZSBjaGFyYWN0ZXIgbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBjb2xsYXRpb24g
ZWxlbWVudC4KKyAqIE5vdGUgdGhhdCBpbnRlcm5hbGx5IGEgc3RhY2sgaXMgdXNlZCB0byBzdG9y
ZSBidWZmZXJlZCBjb2xsYXRpb24gZWxlbWVudHMuIAorICogSXQgaXMgdmVyeSByYXJlIHRoYXQg
dGhlIHN0YWNrIHdpbGwgb3ZlcmZsb3csIGhvd2V2ZXIgaWYgc3VjaCBhIGNhc2UgaXMgCisgKiBl
bmNvdW50ZXJlZCwgdGhlIHByb2JsZW0gY2FuIGJlIHNvbHZlZCBieSBpbmNyZWFzaW5nIHRoZSBz
aXplIAorICogVUNPTF9FWFBBTkRfQ0VfQlVGRkVSX1NJWkUgaW4gdWNvbF9pbXAuaC4KKyAqIEBw
YXJhbSBlbGVtcyBUaGUgVUNvbGxhdGlvbkVsZW1lbnRzIGNvbnRhaW5pbmcgdGhlIHRleHQuCisg
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycy4gTm90ZWFibHkgCisgKiAgICAgICAgICAgICAgIGEgVV9CVUZGRVJfT1ZFUkZMT1df
RVJST1IgaXMgcmV0dXJuZWQgaWYgdGhlIGludGVybmFsIHN0YWNrCisgKiAgICAgICAgICAgICAg
IGJ1ZmZlciBoYXMgYmVlbiBleGhhdXN0ZWQuCisgKiBAcmV0dXJuIFRoZSBwcmV2aW91cyBjb2xs
YXRpb24gZWxlbWVudHMgb3JkZXJpbmcsIG90aGVyd2lzZSByZXR1cm5zIAorICogICAgICAgICBO
VUxMT1JERVIgaWYgYW4gZXJyb3IgaGFzIG9jY3VyZWQgb3IgaWYgdGhlIHN0YXJ0IG9mIHN0cmlu
ZyBoYXMgCisgKiAgICAgICAgIGJlZW4gcmVhY2hlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3Vjb2xfcHJldmlvdXMoVUNvbGxhdGlvbkVs
ZW1lbnRzICplbGVtcywgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiBHZXQgdGhlIG1h
eGltdW0gbGVuZ3RoIG9mIGFueSBleHBhbnNpb24gc2VxdWVuY2VzIHRoYXQgZW5kIHdpdGggdGhl
IAorICogc3BlY2lmaWVkIGNvbXBhcmlzb24gb3JkZXIuCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3Ig
Li4uLiA/CisgKiBAcGFyYW0gZWxlbXMgVGhlIFVDb2xsYXRpb25FbGVtZW50cyBjb250YWluaW5n
IHRoZSB0ZXh0LgorICogQHBhcmFtIG9yZGVyIEEgY29sbGF0aW9uIG9yZGVyIHJldHVybmVkIGJ5
IHByZXZpb3VzIG9yIG5leHQuCisgKiBAcmV0dXJuIG1heGltdW0gc2l6ZSBvZiB0aGUgZXhwYW5z
aW9uIHNlcXVlbmNlcyBlbmRpbmcgd2l0aCB0aGUgY29sbGF0aW9uIAorICogICAgICAgICBlbGVt
ZW50IG9yIDEgaWYgY29sbGF0aW9uIGVsZW1lbnQgZG9lcyBub3Qgb2NjdXIgYXQgdGhlIGVuZCBv
ZiBhbnkgCisgKiAgICAgICAgIGV4cGFuc2lvbiBzZXF1ZW5jZQorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNvbF9nZXRNYXhFeHBhbnNpb24o
Y29uc3QgVUNvbGxhdGlvbkVsZW1lbnRzICplbGVtcywgaW50MzJfdCBvcmRlcik7CisKKy8qKgor
ICogU2V0IHRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIGNvbGxhdGlvbiBlbGVtZW50cy4KKyAqIFBy
b3BlcnR5IHNldHRpbmdzIGZvciBjb2xsYXRpb24gd2lsbCByZW1haW4gdGhlIHNhbWUuCisgKiBJ
biBvcmRlciB0byByZXNldCB0aGUgaXRlcmF0b3IgdG8gdGhlIGN1cnJlbnQgY29sbGF0aW9uIHBy
b3BlcnR5IHNldHRpbmdzLAorICogdGhlIEFQSSByZXNldCgpIGhhcyB0byBiZSBjYWxsZWQuCisg
KiBAcGFyYW0gZWxlbXMgVGhlIFVDb2xsYXRpb25FbGVtZW50cyB0byBzZXQuCisgKiBAcGFyYW0g
dGV4dCBUaGUgc291cmNlIHRleHQgY29udGFpbmluZyB0aGUgY29sbGF0aW9uIGVsZW1lbnRzLgor
ICogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRl
cm1pbmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRv
IHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEBzZWUgdWNvbF9nZXRUZXh0CisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y29sX3NldFRleHQoICAgICAg
VUNvbGxhdGlvbkVsZW1lbnRzICplbGVtcywgCisgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAg
ICAgICAgICAgICp0ZXh0LAorICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICB0
ZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICAqc3RhdHVz
KTsKKworLyoqCisgKiBHZXQgdGhlIG9mZnNldCBvZiB0aGUgY3VycmVudCBzb3VyY2UgY2hhcmFj
dGVyLgorICogVGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgdGV4dCBvZiB0aGUgY2hhcmFjdGVy
IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQKKyAqIGNvbGxhdGlvbiBlbGVtZW50cy4KKyAqIEBwYXJh
bSBlbGVtcyBUaGUgVUNvbGxhdGlvbkVsZW1lbnRzIHRvIHF1ZXJ5LgorICogQHJldHVybiBUaGUg
b2Zmc2V0IG9mIHRoZSBjdXJyZW50IHNvdXJjZSBjaGFyYWN0ZXIuCisgKiBAc2VlIHVjb2xfc2V0
T2Zmc2V0CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIgCit1Y29sX2dldE9mZnNldChjb25zdCBVQ29sbGF0aW9uRWxlbWVudHMgKmVsZW1zKTsKKwor
LyoqCisgKiBTZXQgdGhlIG9mZnNldCBvZiB0aGUgY3VycmVudCBzb3VyY2UgY2hhcmFjdGVyLgor
ICogVGhpcyBpcyBhbiBvZmZzZXQgaW50byB0aGUgdGV4dCBvZiB0aGUgY2hhcmFjdGVyIHRvIGJl
IHByb2Nlc3NlZC4KKyAqIFByb3BlcnR5IHNldHRpbmdzIGZvciBjb2xsYXRpb24gd2lsbCByZW1h
aW4gdGhlIHNhbWUuCisgKiBJbiBvcmRlciB0byByZXNldCB0aGUgaXRlcmF0b3IgdG8gdGhlIGN1
cnJlbnQgY29sbGF0aW9uIHByb3BlcnR5IHNldHRpbmdzLAorICogdGhlIEFQSSByZXNldCgpIGhh
cyB0byBiZSBjYWxsZWQuCisgKiBAcGFyYW0gZWxlbXMgVGhlIFVDb2xsYXRpb25FbGVtZW50cyB0
byBzZXQuCisgKiBAcGFyYW0gb2Zmc2V0IFRoZSBkZXNpcmVkIGNoYXJhY3RlciBvZmZzZXQuCisg
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycy4KKyAqIEBzZWUgdWNvbF9nZXRPZmZzZXQKKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vjb2xfc2V0T2Zmc2V0KFVDb2xsYXRpb25FbGVt
ZW50cyAqZWxlbXMsCisgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICBvZmZzZXQsCisgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBHZXQgdGhl
IHByaW1hcnkgb3JkZXIgb2YgYSBjb2xsYXRpb24gb3JkZXIuCisqIEBwYXJhbSBvcmRlciB0aGUg
Y29sbGF0aW9uIG9yZGVyCisqIEByZXR1cm4gdGhlIHByaW1hcnkgb3JkZXIgb2YgYSBjb2xsYXRp
b24gb3JkZXIuCisqIEBzdGFibGUgSUNVIDIuNgorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBP
UlQyCit1Y29sX3ByaW1hcnlPcmRlciAoaW50MzJfdCBvcmRlcik7IAorCisvKioKKyogR2V0IHRo
ZSBzZWNvbmRhcnkgb3JkZXIgb2YgYSBjb2xsYXRpb24gb3JkZXIuCisqIEBwYXJhbSBvcmRlciB0
aGUgY29sbGF0aW9uIG9yZGVyCisqIEByZXR1cm4gdGhlIHNlY29uZGFyeSBvcmRlciBvZiBhIGNv
bGxhdGlvbiBvcmRlci4KKyogQHN0YWJsZSBJQ1UgMi42CisqLworVV9TVEFCTEUgaW50MzJfdCBV
X0VYUE9SVDIKK3Vjb2xfc2Vjb25kYXJ5T3JkZXIgKGludDMyX3Qgb3JkZXIpOyAKKworLyoqCisq
IEdldCB0aGUgdGVydGlhcnkgb3JkZXIgb2YgYSBjb2xsYXRpb24gb3JkZXIuCisqIEBwYXJhbSBv
cmRlciB0aGUgY29sbGF0aW9uIG9yZGVyCisqIEByZXR1cm4gdGhlIHRlcnRpYXJ5IG9yZGVyIG9m
IGEgY29sbGF0aW9uIG9yZGVyLgorKiBAc3RhYmxlIElDVSAyLjYKKyovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMgordWNvbF90ZXJ0aWFyeU9yZGVyIChpbnQzMl90IG9yZGVyKTsgCisKKyNl
bmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OICovCisKKyNlbmRpZgoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS9pY3UvdW5pY29kZS91Y29sZWl0ci5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFt
ZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvaWN1L3VuaWNvZGUv
dXNlYXJjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaWN1L3VuaWNvZGUvdXNlYXJjaC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pY3UvdW5pY29kZS91c2VhcmNoLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjQzIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykg
MjAwMS0yMDA1IElCTSBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAwNi8yOC8y
MDAxICAgc3lud2VlICAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworI2lmbmRlZiBV
U0VBUkNIX0gKKyNkZWZpbmUgVVNFQVJDSF9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5o
IgorCisjaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OCisKKyNpbmNsdWRlICJ1bmljb2RlL3Vjb2wu
aCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vjb2xlaXRyLmgiCisjaW5jbHVkZSAidW5pY29kZS91YnJr
LmgiCisKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDIEFQSTogU3RyaW5nU2VhcmNoCisgKgor
ICogQyBBcGlzIGZvciBhbiBlbmdpbmUgdGhhdCBwcm92aWRlcyBsYW5ndWFnZS1zZW5zaXRpdmUg
dGV4dCBzZWFyY2hpbmcgYmFzZWQgCisgKiBvbiB0aGUgY29tcGFyaXNvbiBydWxlcyBkZWZpbmVk
IGluIGEgPHR0PlVDb2xsYXRvcjwvdHQ+IGRhdGEgc3RydWN0LAorICogc2VlIDx0dD51Y29sLmg8
L3R0Pi4gVGhpcyBlbnN1cmVzIHRoYXQgbGFuZ3VhZ2UgZWNjZW50cmljaXR5IGNhbiBiZSAKKyAq
IGhhbmRsZWQsIGUuZy4gZm9yIHRoZSBHZXJtYW4gY29sbGF0b3IsIGNoYXJhY3RlcnMgJnN6bGln
OyBhbmQgU1Mgd2lsbCBiZSBtYXRjaGVkIAorICogaWYgY2FzZSBpcyBjaG9zZW4gdG8gYmUgaWdu
b3JlZC4gCisgKiBTZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuaWN1LXByb2plY3Qub3JnL2Nn
aS1iaW4vdmlld2N2cy5jZ2kvfmNoZWNrb3V0fi9pY3VodG1sL2Rlc2lnbi9jb2xsYXRpb24vSUNV
X2NvbGxhdGlvbl9kZXNpZ24uaHRtIj4KKyAqICJJQ1UgQ29sbGF0aW9uIERlc2lnbiBEb2N1bWVu
dCI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogPHA+IAorICogVGhlIGFsZ29yaXRobSBp
bXBsZW1lbnRlZCBpcyBhIG1vZGlmaWVkIGZvcm0gb2YgdGhlIEJveWVyIE1vb3JlJ3Mgc2VhcmNo
LgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gIHNlZSAKKyAqIDxhIGhyZWY9Imh0dHA6Ly9pY3Uu
c291cmNlZm9yZ2UubmV0L2RvY3MvcGFwZXJzL2VmZmljaWVudF90ZXh0X3NlYXJjaGluZ19pbl9q
YXZhLmh0bWwiPgorICogIkVmZmljaWVudCBUZXh0IFNlYXJjaGluZyBpbiBKYXZhIjwvYT4sIHB1
Ymxpc2hlZCBpbiA8aT5KYXZhIFJlcG9ydDwvaT4gCisgKiBpbiBGZWJydWFyeSwgMTk5OSwgZm9y
IGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGFsZ29yaXRobS4KKyAqIDxwPgorICogVGhlcmUg
YXJlIDIgbWF0Y2ggb3B0aW9ucyBmb3Igc2VsZWN0aW9uOjxicj4KKyAqIExldCBTJyBiZSB0aGUg
c3ViLXN0cmluZyBvZiBhIHRleHQgc3RyaW5nIFMgYmV0d2VlbiB0aGUgb2Zmc2V0cyBzdGFydCBh
bmQgCisgKiBlbmQgPHN0YXJ0LCBlbmQ+LgorICogPGJyPgorICogQSBwYXR0ZXJuIHN0cmluZyBQ
IG1hdGNoZXMgYSB0ZXh0IHN0cmluZyBTIGF0IHRoZSBvZmZzZXRzIDxzdGFydCwgZW5kPiAKKyAq
IGlmCisgKiA8cHJlPiAKKyAqIG9wdGlvbiAxLiBTb21lIGNhbm9uaWNhbCBlcXVpdmFsZW50IG9m
IFAgbWF0Y2hlcyBzb21lIGNhbm9uaWNhbCBlcXVpdmFsZW50IAorICogICAgICAgICAgIG9mIFMn
CisgKiBvcHRpb24gMi4gUCBtYXRjaGVzIFMnIGFuZCBpZiBQIHN0YXJ0cyBvciBlbmRzIHdpdGgg
YSBjb21iaW5pbmcgbWFyaywgCisgKiAgICAgICAgICAgdGhlcmUgZXhpc3RzIG5vIG5vbi1pZ25v
cmFibGUgY29tYmluaW5nIG1hcmsgYmVmb3JlIG9yIGFmdGVyIFMnIAorICogICAgICAgICAgIGlu
IFMgcmVzcGVjdGl2ZWx5LiAKKyAqIDwvcHJlPgorICogT3B0aW9uIDIuIHdpbGwgYmUgdGhlIGRl
ZmF1bHQuCisgKiA8cD4KKyAqIFRoaXMgc2VhcmNoIGhhcyBBUElzIHNpbWlsYXIgdG8gdGhhdCBv
ZiBvdGhlciB0ZXh0IGl0ZXJhdGlvbiBtZWNoYW5pc21zIAorICogc3VjaCBhcyB0aGUgYnJlYWsg
aXRlcmF0b3JzIGluIDx0dD51YnJrLmg8L3R0Pi4gVXNpbmcgdGhlc2UgCisgKiBBUElzLCBpdCBp
cyBlYXN5IHRvIHNjYW4gdGhyb3VnaCB0ZXh0IGxvb2tpbmcgZm9yIGFsbCBvY2N1cmFuY2VzIG9m
IAorICogYSBnaXZlbiBwYXR0ZXJuLiBUaGlzIHNlYXJjaCBpdGVyYXRvciBhbGxvd3MgY2hhbmdp
bmcgb2YgZGlyZWN0aW9uIGJ5IAorICogY2FsbGluZyBhIDx0dD5yZXNldDwvdHQ+IGZvbGxvd2Vk
IGJ5IGEgPHR0Pm5leHQ8L3R0PiBvciA8dHQ+cHJldmlvdXM8L3R0Pi4gCisgKiBUaG91Z2ggYSBk
aXJlY3Rpb24gY2hhbmdlIGNhbiBvY2N1ciB3aXRob3V0IGNhbGxpbmcgPHR0PnJlc2V0PC90dD4g
Zmlyc3QsICAKKyAqIHRoaXMgb3BlcmF0aW9uIGNvbWVzIHdpdGggc29tZSBzcGVlZCBwZW5hbHR5
LgorICogR2VuZXJhbGx5LCBtYXRjaCByZXN1bHRzIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiB3
aWxsIG1hdGNoIHRoZSByZXN1bHQgCisgKiBtYXRjaGVzIGluIHRoZSBiYWNrd2FyZHMgZGlyZWN0
aW9uIGluIHRoZSByZXZlcnNlIG9yZGVyCisgKiA8cD4KKyAqIDx0dD51c2VhcmNoLmg8L3R0PiBw
cm92aWRlcyBBUElzIHRvIHNwZWNpZnkgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIAorICogd2l0aGlu
IHRoZSB0ZXh0IHN0cmluZyB0byBiZSBzZWFyY2hlZCwgZS5nLiA8dHQ+dXNlYXJjaF9zZXRPZmZz
ZXQ8L3R0PiwKKyAqIDx0dD51c2VhcmNoX3ByZWNlZGluZzwvdHQ+IGFuZCA8dHQ+dXNlYXJjaF9m
b2xsb3dpbmc8L3R0Pi4gU2luY2UgdGhlIAorICogc3RhcnRpbmcgcG9zaXRpb24gd2lsbCBiZSBz
ZXQgYXMgaXQgaXMgc3BlY2lmaWVkLCBwbGVhc2UgdGFrZSBub3RlIHRoYXQgCisgKiB0aGVyZSBh
cmUgc29tZSBkYW5nZXJvdXMgcG9zaXRpb25zIHdoaWNoIHRoZSBzZWFyY2ggbWF5IHJlbmRlciBp
bmNvcnJlY3QgCisgKiByZXN1bHRzOgorICogPHVsPgorICogPGxpPiBUaGUgbWlkc3Qgb2YgYSBz
dWJzdHJpbmcgdGhhdCByZXF1aXJlcyBub3JtYWxpemF0aW9uLgorICogPGxpPiBJZiB0aGUgZm9s
bG93aW5nIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCB0aGUgcG9zaXRpb24gc2hvdWxkIG5vdCBiZSB0
aGUKKyAqICAgICAgc2Vjb25kIGNoYXJhY3RlciB3aGljaCByZXF1aXJlcyB0byBiZSBzd2FwcGVk
IHdpdGggdGhlIHByZWNlZGluZyAKKyAqICAgICAgY2hhcmFjdGVyLiBWaWNlIHZlcnNhLCBpZiB0
aGUgcHJlY2VkaW5nIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCAKKyAqICAgICAgcG9zaXRpb24gdG8g
c2VhcmNoIGZyb20gc2hvdWxkIG5vdCBiZSB0aGUgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIAorICog
ICAgICByZXF1aXJlcyB0byBiZSBzd2FwcGVkIHdpdGggdGhlIG5leHQgY2hhcmFjdGVyLiBFLmcg
Y2VydGFpbiBUaGFpIGFuZAorICogICAgICBMYW8gY2hhcmFjdGVycyByZXF1aXJlIHN3YXBwaW5n
LgorICogPGxpPiBJZiBhIGZvbGxvd2luZyBwYXR0ZXJuIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCBh
bnkgcG9zaXRpb24gd2l0aGluIGEgCisgKiAgICAgIGNvbnRyYWN0aW5nIHNlcXVlbmNlIGV4Y2Vw
dCB0aGUgZmlyc3Qgd2lsbCBmYWlsLiBWaWNlIHZlcnNhIGlmIGEgCisgKiAgICAgIHByZWNlZGlu
ZyBwYXR0ZXJuIG1hdGNoIGlzIHRvIGJlIGZvdW5kLCBhIGludmFsaWQgc3RhcnRpbmcgcG9pbnQg
CisgKiAgICAgIHdvdWxkIGJlIGFueSBjaGFyYWN0ZXIgd2l0aGluIGEgY29udHJhY3Rpbmcgc2Vx
dWVuY2UgZXhjZXB0IHRoZSBsYXN0LgorICogPC91bD4KKyAqIDxwPgorICogQSBicmVha2l0ZXJh
dG9yIGNhbiBiZSB1c2VkIGlmIG9ubHkgbWF0Y2hlcyBhdCBsb2dpY2FsIGJyZWFrcyBhcmUgZGVz
aXJlZC4KKyAqIFVzaW5nIGEgYnJlYWtpdGVyYXRvciB3aWxsIG9ubHkgZ2l2ZSB5b3UgcmVzdWx0
cyB0aGF0IGV4YWN0bHkgbWF0Y2hlcyB0aGUKKyAqIGJvdW5kYXJpZXMgZ2l2ZW4gYnkgdGhlIGJy
ZWFraXRlcmF0b3IuIEZvciBpbnN0YW5jZSB0aGUgcGF0dGVybiAiZSIgd2lsbAorICogbm90IGJl
IGZvdW5kIGluIHRoZSBzdHJpbmcgIlx1MDBlOSIgaWYgYSBjaGFyYWN0ZXIgYnJlYWsgaXRlcmF0
b3IgaXMgdXNlZC4KKyAqIDxwPgorICogT3B0aW9ucyBhcmUgcHJvdmlkZWQgdG8gaGFuZGxlIG92
ZXJsYXBwaW5nIG1hdGNoZXMuIAorICogRS5nLiBJbiBFbmdsaXNoLCBvdmVybGFwcGluZyBtYXRj
aGVzIHByb2R1Y2VzIHRoZSByZXN1bHQgMCBhbmQgMiAKKyAqIGZvciB0aGUgcGF0dGVybiAiYWJh
YiIgaW4gdGhlIHRleHQgImFiYWJhYiIsIHdoZXJlIGVsc2UgbXV0dWFsbHkgCisgKiBleGNsdXNp
dmUgbWF0Y2hlcyBvbmx5IHByb2R1Y2UgdGhlIHJlc3VsdCBvZiAwLgorICogPHA+CisgKiBUaG91
Z2ggY29sbGF0b3IgYXR0cmlidXRlcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiB3
aGlsZSAKKyAqIHBlcmZvcm1pbmcgbWF0Y2hlcywgdGhlcmUgYXJlIG5vIEFQSXMgaGVyZSBmb3Ig
c2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgCisgKiBhdHRyaWJ1dGVzLiBUaGVzZSBhdHRyaWJ1dGVz
IGNhbiBiZSBzZXQgYnkgZ2V0dGluZyB0aGUgY29sbGF0b3IKKyAqIGZyb20gPHR0PnVzZWFyY2hf
Z2V0Q29sbGF0b3I8L3R0PiBhbmQgdXNpbmcgdGhlIEFQSXMgaW4gPHR0PnVjb2wuaDwvdHQ+Lgor
ICogTGFzdGx5IHRvIHVwZGF0ZSBTdHJpbmcgU2VhcmNoIHRvIHRoZSBuZXcgY29sbGF0b3IgYXR0
cmlidXRlcywgCisgKiB1c2VhcmNoX3Jlc2V0KCkgaGFzIHRvIGJlIGNhbGxlZC4KKyAqIDxwPiAK
KyAqIFJlc3RyaWN0aW9uOiA8YnI+CisgKiBDdXJyZW50bHkgdGhlcmUgYXJlIG5vIGNvbXBvc2l0
ZSBjaGFyYWN0ZXJzIHRoYXQgY29uc2lzdHMgb2YgYQorICogY2hhcmFjdGVyIHdpdGggY29tYmlu
aW5nIGNsYXNzID4gMCBiZWZvcmUgYSBjaGFyYWN0ZXIgd2l0aCBjb21iaW5pbmcgCisgKiBjbGFz
cyA9PSAwLiBIb3dldmVyLCBpZiBzdWNoIGEgY2hhcmFjdGVyIGV4aXN0cyBpbiB0aGUgZnV0dXJl
LCB0aGUgCisgKiBzZWFyY2ggbWVjaGFuaXNtIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgcmVzdWx0
cyBmb3Igb3B0aW9uIDEuCisgKiAKKyAqIDxwPgorICogRXhhbXBsZSBvZiB1c2U6PGJyPgorICog
PHByZT48Y29kZT4KKyAqIGNoYXIgKnRndHN0ciA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBl
ZCBvdmVyIHRoZSBsYXp5IGZveCI7CisgKiBjaGFyICpwYXRzdHIgPSAiZm94IjsKKyAqIFVDaGFy
IHRhcmdldFs2NF07CisgKiBVQ2hhciBwYXR0ZXJuWzE2XTsKKyAqIFVFcnJvckNvZGUgc3RhdHVz
ID0gVV9aRVJPX0VSUk9SOworICogdV91YXN0cmNweSh0YXJnZXQsIHRndHN0cik7CisgKiB1X3Vh
c3RyY3B5KHBhdHRlcm4sIHBhdHN0cik7CisgKgorICogVVN0cmluZ1NlYXJjaCAqc2VhcmNoID0g
dXNlYXJjaF9vcGVuKHBhdHRlcm4sIC0xLCB0YXJnZXQsIC0xLCAiZW5fVVMiLCAKKyAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dXMpOworICogaWYgKFVfU1VDQ0VTUyhz
dGF0dXMpKSB7CisgKiAgICAgZm9yIChpbnQgcG9zID0gdXNlYXJjaF9maXJzdChzZWFyY2gsICZz
dGF0dXMpOyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgIT0g
VVNFQVJDSF9ET05FOyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3MgPSB1c2VhcmNoX25leHQoc2VhcmNoLCAmc3RhdHVzKSkgeworICogICAgICAgICBwcmludGYo
IkZvdW5kIG1hdGNoIGF0ICVkIHBvcywgbGVuZ3RoIGlzICVkXG4iLCBwb3MsIAorICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlYXJjaF9nZXRNYXRjaExlbmd0aChz
ZWFyY2gpKTsKKyAqICAgICB9CisgKiB9CisgKiA8L2NvZGU+PC9wcmU+CisgKiBAc3RhYmxlIElD
VSAyLjQKKyAqLworCisvKioKKyogRE9ORSBpcyByZXR1cm5lZCBieSBwcmV2aW91cygpIGFuZCBu
ZXh0KCkgYWZ0ZXIgYWxsIHZhbGlkIG1hdGNoZXMgaGF2ZSAKKyogYmVlbiByZXR1cm5lZCwgYW5k
IGJ5IGZpcnN0KCkgYW5kIGxhc3QoKSBpZiB0aGVyZSBhcmUgbm8gbWF0Y2hlcyBhdCBhbGwuCisq
IEBzdGFibGUgSUNVIDIuNAorKi8KKyNkZWZpbmUgVVNFQVJDSF9ET05FIC0xCisKKy8qKgorKiBE
YXRhIHN0cnVjdHVyZSBmb3Igc2VhcmNoaW5nCisqIEBzdGFibGUgSUNVIDIuNAorKi8KK3N0cnVj
dCBVU3RyaW5nU2VhcmNoOworLyoqCisqIERhdGEgc3RydWN0dXJlIGZvciBzZWFyY2hpbmcKKyog
QHN0YWJsZSBJQ1UgMi40CisqLwordHlwZWRlZiBzdHJ1Y3QgVVN0cmluZ1NlYXJjaCBVU3RyaW5n
U2VhcmNoOworCisvKioKKyogQHN0YWJsZSBJQ1UgMi40CisqLwordHlwZWRlZiBlbnVtIHsKKyAg
ICAvKiogT3B0aW9uIGZvciBvdmVybGFwcGluZyBtYXRjaGVzICovCisgICAgVVNFQVJDSF9PVkVS
TEFQLAorICAgIC8qKiAKKyAgICBPcHRpb24gZm9yIGNhbm9uaWNhbCBtYXRjaGVzLiBvcHRpb24g
MSBpbiBoZWFkZXIgZG9jdW1lbnRhdGlvbi4KKyAgICBUaGUgZGVmYXVsdCB2YWx1ZSB3aWxsIGJl
IFVTRUFSQ0hfT0ZGCisgICAgKi8KKyAgICBVU0VBUkNIX0NBTk9OSUNBTF9NQVRDSCwKKyAgICBV
U0VBUkNIX0FUVFJJQlVURV9DT1VOVAorfSBVU2VhcmNoQXR0cmlidXRlOworCisvKioKKyogQHN0
YWJsZSBJQ1UgMi40CisqLwordHlwZWRlZiBlbnVtIHsKKyAgICAvKiogZGVmYXVsdCB2YWx1ZSBm
b3IgYW55IFVTZWFyY2hBdHRyaWJ1dGUgKi8KKyAgICBVU0VBUkNIX0RFRkFVTFQgPSAtMSwKKyAg
ICAvKiogdmFsdWUgZm9yIFVTRUFSQ0hfT1ZFUkxBUCBhbmQgVVNFQVJDSF9DQU5PTklDQUxfTUFU
Q0ggKi8KKyAgICBVU0VBUkNIX09GRiwgCisgICAgLyoqIHZhbHVlIGZvciBVU0VBUkNIX09WRVJM
QVAgYW5kIFVTRUFSQ0hfQ0FOT05JQ0FMX01BVENIICovCisgICAgVVNFQVJDSF9PTiwKKyAgICBV
U0VBUkNIX0FUVFJJQlVURV9WQUxVRV9DT1VOVAorfSBVU2VhcmNoQXR0cmlidXRlVmFsdWU7CisK
Ky8qIG9wZW4gYW5kIGNsb3NlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyogQ3JlYXRpbmcgYSBzZWFyY2ggaXRlcmF0b3Ig
ZGF0YSBzdHJ1Y3QgdXNpbmcgdGhlIGFyZ3VtZW50IGxvY2FsZSBsYW5ndWFnZQorKiBydWxlIHNl
dC4gQSBjb2xsYXRvciB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHByb2Nlc3MsIHdoaWNoIHdpbGwg
YmUgb3duZWQgYnkKKyogdGhpcyBzZWFyY2ggYW5kIHdpbGwgYmUgZGVsZXRlZCBpbiA8dHQ+dXNl
YXJjaF9jbG9zZTwvdHQ+LgorKiBAcGFyYW0gcGF0dGVybiBmb3IgbWF0Y2hpbmcKKyogQHBhcmFt
IHBhdHRlcm5sZW5ndGggbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLCAtMSBmb3IgbnVsbC10ZXJtaW5h
dGlvbgorKiBAcGFyYW0gdGV4dCB0ZXh0IHN0cmluZworKiBAcGFyYW0gdGV4dGxlbmd0aCBsZW5n
dGggb2YgdGhlIHRleHQgc3RyaW5nLCAtMSBmb3IgbnVsbC10ZXJtaW5hdGlvbgorKiBAcGFyYW0g
bG9jYWxlIG5hbWUgb2YgbG9jYWxlIGZvciB0aGUgcnVsZXMgdG8gYmUgdXNlZAorKiBAcGFyYW0g
YnJlYWtpdGVyIEEgQnJlYWtJdGVyYXRvciB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXN0cmljdCB0
aGUgcG9pbnRzCisqICAgICAgICAgICAgICAgICAgYXQgd2hpY2ggbWF0Y2hlcyBhcmUgZGV0ZWN0
ZWQuIElmIGEgbWF0Y2ggaXMgZm91bmQsIGJ1dCAKKyogICAgICAgICAgICAgICAgICB0aGUgbWF0
Y2gncyBzdGFydCBvciBlbmQgaW5kZXggaXMgbm90IGEgYm91bmRhcnkgYXMgCisqICAgICAgICAg
ICAgICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgPHR0PkJyZWFrSXRlcmF0b3I8L3R0PiwgdGhlIG1h
dGNoIHdpbGwgCisqICAgICAgICAgICAgICAgICAgYmUgcmVqZWN0ZWQgYW5kIGFub3RoZXIgd2ls
bCBiZSBzZWFyY2hlZCBmb3IuIAorKiAgICAgICAgICAgICAgICAgIElmIHRoaXMgcGFyYW1ldGVy
IGlzIDx0dD5OVUxMPC90dD4sIG5vIGJyZWFrIGRldGVjdGlvbiBpcyAKKyogICAgICAgICAgICAg
ICAgICBhdHRlbXB0ZWQuCisqIEBwYXJhbSBzdGF0dXMgZm9yIGVycm9ycyBpZiBpdCBvY2N1cnMu
IElmIHBhdHRlcm4gb3IgdGV4dCBpcyBOVUxMLCBvciBpZgorKiAgICAgICAgICAgICAgIHBhdHRl
cm5sZW5ndGggb3IgdGV4dGxlbmd0aCBpcyAwIHRoZW4gYW4gCisqICAgICAgICAgICAgICAgVV9J
TExFR0FMX0FSR1VNRU5UX0VSUk9SIGlzIHJldHVybmVkLgorKiBAcmV0dXJuIHNlYXJjaCBpdGVy
YXRvciBkYXRhIHN0cnVjdHVyZSwgb3IgTlVMTCBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKyogQHN0
YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUgVVN0cmluZ1NlYXJjaCAqIFVfRVhQT1JUMiB1c2Vh
cmNoX29wZW4oY29uc3QgVUNoYXIgICAgICAgICAgKnBhdHRlcm4sIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBwYXR0ZXJubGVu
Z3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hh
ciAgICAgICAgICAqdGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCAgICAgICAgIHRleHRsZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKmxvY2FsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQnJlYWtJdGVyYXRvciAq
YnJlYWtpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgICAgICpzdGF0dXMpOworCisvKioKKyogQ3JlYXRpbmcgYSBzZWFyY2ggaXRl
cmF0b3IgZGF0YSBzdHJ1Y3QgdXNpbmcgdGhlIGFyZ3VtZW50IGNvbGxhdG9yIGxhbmd1YWdlCisq
IHJ1bGUgc2V0LiBOb3RlLCB1c2VyIHJldGFpbnMgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGNvbGxh
dG9yLCB0aHVzIHRoZSAKKyogcmVzcG9uc2liaWxpdHkgb2YgZGVsZXRpb24gbGllcyB3aXRoIHRo
ZSB1c2VyLgorKiBOT1RFOiBzdHJpbmcgc2VhcmNoIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZnJv
bSBhIGNvbGxhdG9yIHRoYXQgaGFzIAorKiBjb2xsYXRlIGRpZ2l0cyBhcyBudW1iZXJzIChDT0RB
TikgdHVybmVkIG9uLgorKiBAcGFyYW0gcGF0dGVybiBmb3IgbWF0Y2hpbmcKKyogQHBhcmFtIHBh
dHRlcm5sZW5ndGggbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLCAtMSBmb3IgbnVsbC10ZXJtaW5hdGlv
bgorKiBAcGFyYW0gdGV4dCB0ZXh0IHN0cmluZworKiBAcGFyYW0gdGV4dGxlbmd0aCBsZW5ndGgg
b2YgdGhlIHRleHQgc3RyaW5nLCAtMSBmb3IgbnVsbC10ZXJtaW5hdGlvbgorKiBAcGFyYW0gY29s
bGF0b3IgdXNlZCBmb3IgdGhlIGxhbmd1YWdlIHJ1bGVzCisqIEBwYXJhbSBicmVha2l0ZXIgQSBC
cmVha0l0ZXJhdG9yIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBwb2ludHMKKyog
ICAgICAgICAgICAgICAgICBhdCB3aGljaCBtYXRjaGVzIGFyZSBkZXRlY3RlZC4gSWYgYSBtYXRj
aCBpcyBmb3VuZCwgYnV0IAorKiAgICAgICAgICAgICAgICAgIHRoZSBtYXRjaCdzIHN0YXJ0IG9y
IGVuZCBpbmRleCBpcyBub3QgYSBib3VuZGFyeSBhcyAKKyogICAgICAgICAgICAgICAgICBkZXRl
cm1pbmVkIGJ5IHRoZSA8dHQ+QnJlYWtJdGVyYXRvcjwvdHQ+LCB0aGUgbWF0Y2ggd2lsbCAKKyog
ICAgICAgICAgICAgICAgICBiZSByZWplY3RlZCBhbmQgYW5vdGhlciB3aWxsIGJlIHNlYXJjaGVk
IGZvci4gCisqICAgICAgICAgICAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgPHR0Pk5VTEw8
L3R0Piwgbm8gYnJlYWsgZGV0ZWN0aW9uIGlzIAorKiAgICAgICAgICAgICAgICAgIGF0dGVtcHRl
ZC4KKyogQHBhcmFtIHN0YXR1cyBmb3IgZXJyb3JzIGlmIGl0IG9jY3Vycy4gSWYgY29sbGF0b3Is
IHBhdHRlcm4gb3IgdGV4dCBpcyBOVUxMLCAKKyogICAgICAgICAgICAgICBvciBpZiBwYXR0ZXJu
bGVuZ3RoIG9yIHRleHRsZW5ndGggaXMgMCB0aGVuIGFuIAorKiAgICAgICAgICAgICAgIFVfSUxM
RUdBTF9BUkdVTUVOVF9FUlJPUiBpcyByZXR1cm5lZC4KKyogQHJldHVybiBzZWFyY2ggaXRlcmF0
b3IgZGF0YSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisqIEBzdGFi
bGUgSUNVIDIuNAorKi8KK1VfU1RBQkxFIFVTdHJpbmdTZWFyY2ggKiBVX0VYUE9SVDIgdXNlYXJj
aF9vcGVuRnJvbUNvbGxhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVQ2hhciAqcGF0dGVybiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBwYXR0ZXJubGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAgICAq
dGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgICAgICAgICB0ZXh0bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVQ29sbGF0b3IgICAgICAqY29sbGF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVCcmVha0l0ZXJhdG9yICpicmVha2l0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUgICAgICpzdGF0dXMpOworCisvKioKKyogRGVzdHJveWluZyBhbmQgY2xlYW5pbmcgdXAg
dGhlIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVjdC4KKyogSWYgYSBjb2xsYXRvciBpcyBjcmVh
dGVkIGluIDx0dD51c2VhcmNoX29wZW48L3R0PiwgaXQgd2lsbCBiZSBkZXN0cm95ZWQgaGVyZS4K
KyogQHBhcmFtIHNlYXJjaGl0ZXIgZGF0YSBzdHJ1Y3QgdG8gY2xlYW4gdXAKKyogQHN0YWJsZSBJ
Q1UgMi40CisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgdXNlYXJjaF9jbG9zZShVU3RyaW5n
U2VhcmNoICpzZWFyY2hpdGVyKTsKKworLyogZ2V0IGFuZCBzZXQgbWV0aG9kcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyogU2V0
cyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdGV4dCBzdHJpbmcgd2hpY2ggdGhlIG5leHQg
c2VhcmNoIHdpbGwgCisqIHN0YXJ0IGZyb20uIENsZWFycyBwcmV2aW91cyBzdGF0ZXMuIAorKiBU
aGlzIG1ldGhvZCB0YWtlcyB0aGUgYXJndW1lbnQgaW5kZXggYW5kIHNldHMgdGhlIHBvc2l0aW9u
IGluIHRoZSB0ZXh0IAorKiBzdHJpbmcgYWNjb3JkaW5nbHkgd2l0aG91dCBjaGVja2luZyBpZiB0
aGUgaW5kZXggaXMgcG9pbnRpbmcgdG8gYSAKKyogdmFsaWQgc3RhcnRpbmcgcG9pbnQgdG8gYmVn
aW4gc2VhcmNoaW5nLiAKKyogU2VhcmNoIHBvc2l0aW9ucyB0aGF0IG1heSByZW5kZXIgaW5jb3Jy
ZWN0IHJlc3VsdHMgYXJlIGhpZ2hsaWdodGVkIGluIHRoZQorKiBoZWFkZXIgY29tbWVudHMKKyog
QHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9yIGRhdGEgc3RydWN0CisqIEBwYXJhbSBwb3Np
dGlvbiBwb3NpdGlvbiB0byBzdGFydCBuZXh0IHNlYXJjaCBmcm9tLiBJZiBwb3NpdGlvbiBpcyBs
ZXNzCisqICAgICAgICAgIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSB0ZXh0IHJhbmdlIGZvciBz
ZWFyY2hpbmcsIAorKiAgICAgICAgICBhbiBVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SIHdpbGwg
YmUgcmV0dXJuZWQKKyogQHBhcmFtIHN0YXR1cyBlcnJvciBzdGF0dXMgaWYgYW55LgorKiBAc3Rh
YmxlIElDVSAyLjQKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiB1c2VhcmNoX3NldE9mZnNl
dChVU3RyaW5nU2VhcmNoICpzdHJzcmNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQzMl90ICAgIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgKnN0YXR1cyk7CisKKy8qKgorKiBSZXR1cm4g
dGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZyB0ZXh0IGJlaW5nIHNlYXJjaGVkLgorKiBJ
ZiB0aGUgaXRlcmF0aW9uIGhhcyBnb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgdGV4dCAob3IgcGFz
dCB0aGUgYmVnaW5uaW5nIAorKiBmb3IgYSBiYWNrd2FyZHMgc2VhcmNoKSwgPHR0PlVTRUFSQ0hf
RE9ORTwvdHQ+IGlzIHJldHVybmVkLgorKiBAcGFyYW0gc3Ryc3JjaCBzZWFyY2ggaXRlcmF0b3Ig
ZGF0YSBzdHJ1Y3QKKyogQHNlZSAjVVNFQVJDSF9ET05FCisqIEBzdGFibGUgSUNVIDIuNAorKi8K
K1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIHVzZWFyY2hfZ2V0T2Zmc2V0KGNvbnN0IFVTdHJp
bmdTZWFyY2ggKnN0cnNyY2gpOworICAgIAorLyoqCisqIFNldHMgdGhlIHRleHQgc2VhcmNoaW5n
IGF0dHJpYnV0ZXMgbG9jYXRlZCBpbiB0aGUgZW51bSBVU2VhcmNoQXR0cmlidXRlCisqIHdpdGgg
dmFsdWVzIGZyb20gdGhlIGVudW0gVVNlYXJjaEF0dHJpYnV0ZVZhbHVlLgorKiA8dHQ+VVNFQVJD
SF9ERUZBVUxUPC90dD4gY2FuIGJlIHVzZWQgZm9yIGFsbCBhdHRyaWJ1dGVzIGZvciByZXNldHRp
bmcuCisqIEBwYXJhbSBzdHJzcmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVjdAorKiBAcGFy
YW0gYXR0cmlidXRlIHRleHQgYXR0cmlidXRlIHRvIGJlIHNldAorKiBAcGFyYW0gdmFsdWUgdGV4
dCBhdHRyaWJ1dGUgdmFsdWUKKyogQHBhcmFtIHN0YXR1cyBmb3IgZXJyb3JzIGlmIGl0IG9jY3Vy
cworKiBAc2VlICN1c2VhcmNoX2dldEF0dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAyLjQKKyovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiB1c2VhcmNoX3NldEF0dHJpYnV0ZShVU3RyaW5nU2VhcmNo
ICAgICAgICAgKnN0cnNyY2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVTZWFyY2hBdHRyaWJ1dGUgICAgICAgYXR0cmlidXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTZWFyY2hBdHRyaWJ1dGVWYWx1ZSAgdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAg
ICAgICAgICAgICpzdGF0dXMpOworCisvKiogICAgCisqIEdldHMgdGhlIHRleHQgc2VhcmNoaW5n
IGF0dHJpYnV0ZXMuCisqIEBwYXJhbSBzdHJzcmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVj
dAorKiBAcGFyYW0gYXR0cmlidXRlIHRleHQgYXR0cmlidXRlIHRvIGJlIHJldHJpZXZlCisqIEBy
ZXR1cm4gdGV4dCBhdHRyaWJ1dGUgdmFsdWUKKyogQHNlZSAjdXNlYXJjaF9zZXRBdHRyaWJ1dGUK
KyogQHN0YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUgVVNlYXJjaEF0dHJpYnV0ZVZhbHVlIFVf
RVhQT1JUMiB1c2VhcmNoX2dldEF0dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVN0cmluZ1NlYXJjaCAgICAqc3Ryc3JjaCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNlYXJjaEF0dHJpYnV0ZSAg
YXR0cmlidXRlKTsKKworLyoqCisqIFJldHVybnMgdGhlIGluZGV4IHRvIHRoZSBtYXRjaCBpbiB0
aGUgdGV4dCBzdHJpbmcgdGhhdCB3YXMgc2VhcmNoZWQuCisqIFRoaXMgY2FsbCByZXR1cm5zIGEg
dmFsaWQgcmVzdWx0IG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gCisqIDx0dD51c2Vh
cmNoX2ZpcnN0PC90dD4sIDx0dD51c2VhcmNoX25leHQ8L3R0PiwgPHR0PnVzZWFyY2hfcHJldmlv
dXM8L3R0PiwgCisqIG9yIDx0dD51c2VhcmNoX2xhc3Q8L3R0Pi4KKyogSnVzdCBhZnRlciBjb25z
dHJ1Y3Rpb24sIG9yIGFmdGVyIGEgc2VhcmNoaW5nIG1ldGhvZCByZXR1cm5zIAorKiA8dHQ+VVNF
QVJDSF9ET05FPC90dD4sIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIDx0dD5VU0VBUkNIX0RPTkU8
L3R0Pi4KKyogPHA+CisqIFVzZSA8dHQ+dXNlYXJjaF9nZXRNYXRjaGVkTGVuZ3RoPC90dD4gdG8g
Z2V0IHRoZSBtYXRjaGVkIHN0cmluZyBsZW5ndGguCisqIEBwYXJhbSBzdHJzcmNoIHNlYXJjaCBp
dGVyYXRvciBkYXRhIHN0cnVjdAorKiBAcmV0dXJuIGluZGV4IHRvIGEgc3Vic3RyaW5nIHdpdGhp
biB0aGUgdGV4dCBzdHJpbmcgdGhhdCBpcyBiZWluZyAKKyogICAgICAgICBzZWFyY2hlZC4KKyog
QHNlZSAjdXNlYXJjaF9maXJzdAorKiBAc2VlICN1c2VhcmNoX25leHQKKyogQHNlZSAjdXNlYXJj
aF9wcmV2aW91cworKiBAc2VlICN1c2VhcmNoX2xhc3QKKyogQHNlZSAjVVNFQVJDSF9ET05FCisq
IEBzdGFibGUgSUNVIDIuNAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIHVzZWFyY2hf
Z2V0TWF0Y2hlZFN0YXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVU3RyaW5nU2VhcmNoICpzdHJzcmNoKTsKKyAgICAKKy8qKgorKiBSZXR1
cm5zIHRoZSBsZW5ndGggb2YgdGV4dCBpbiB0aGUgc3RyaW5nIHdoaWNoIG1hdGNoZXMgdGhlIHNl
YXJjaCBwYXR0ZXJuLiAKKyogVGhpcyBjYWxsIHJldHVybnMgYSB2YWxpZCByZXN1bHQgb25seSBh
ZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byAKKyogPHR0PnVzZWFyY2hfZmlyc3Q8L3R0PiwgPHR0
PnVzZWFyY2hfbmV4dDwvdHQ+LCA8dHQ+dXNlYXJjaF9wcmV2aW91czwvdHQ+LCAKKyogb3IgPHR0
PnVzZWFyY2hfbGFzdDwvdHQ+LgorKiBKdXN0IGFmdGVyIGNvbnN0cnVjdGlvbiwgb3IgYWZ0ZXIg
YSBzZWFyY2hpbmcgbWV0aG9kIHJldHVybnMgCisqIDx0dD5VU0VBUkNIX0RPTkU8L3R0PiwgdGhp
cyBtZXRob2Qgd2lsbCByZXR1cm4gMC4KKyogQHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9y
IGRhdGEgc3RydWN0CisqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaW4gdGhlIHN0
cmluZyB0ZXh0LCBvciAwIGlmIHRoZXJlIGlzIG5vIAorKiAgICAgICAgIG1hdGNoIGN1cnJlbnRs
eS4KKyogQHNlZSAjdXNlYXJjaF9maXJzdAorKiBAc2VlICN1c2VhcmNoX25leHQKKyogQHNlZSAj
dXNlYXJjaF9wcmV2aW91cworKiBAc2VlICN1c2VhcmNoX2xhc3QKKyogQHNlZSAjVVNFQVJDSF9E
T05FCisqIEBzdGFibGUgSUNVIDIuNAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIHVz
ZWFyY2hfZ2V0TWF0Y2hlZExlbmd0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVN0cmluZ1NlYXJjaCAqc3Ryc3JjaCk7CisKKy8qKgorKiBS
ZXR1cm5zIHRoZSB0ZXh0IHRoYXQgd2FzIG1hdGNoZWQgYnkgdGhlIG1vc3QgcmVjZW50IGNhbGwg
dG8gCisqIDx0dD51c2VhcmNoX2ZpcnN0PC90dD4sIDx0dD51c2VhcmNoX25leHQ8L3R0PiwgPHR0
PnVzZWFyY2hfcHJldmlvdXM8L3R0PiwgCisqIG9yIDx0dD51c2VhcmNoX2xhc3Q8L3R0Pi4KKyog
SWYgdGhlIGl0ZXJhdG9yIGlzIG5vdCBwb2ludGluZyBhdCBhIHZhbGlkIG1hdGNoIChlLmcuIGp1
c3QgYWZ0ZXIgCisqIGNvbnN0cnVjdGlvbiBvciBhZnRlciA8dHQ+VVNFQVJDSF9ET05FPC90dD4g
aGFzIGJlZW4gcmV0dXJuZWQsIHJldHVybnMKKyogYW4gZW1wdHkgc3RyaW5nLiBJZiByZXN1bHQg
aXMgbm90IGxhcmdlIGVub3VnaCB0byBzdG9yZSB0aGUgbWF0Y2hlZCB0ZXh0LAorKiByZXN1bHQg
d2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgcGFydGlhbCB0ZXh0IGFuZCBhbiBVX0JVRkZFUl9PVkVS
RkxPV19FUlJPUiAKKyogd2lsbCBiZSByZXR1cm5lZCBpbiBzdGF0dXMuIHJlc3VsdCB3aWxsIGJl
IG51bGwtdGVybWluYXRlZCB3aGVuZXZlciAKKyogcG9zc2libGUuIElmIHRoZSBidWZmZXIgZml0
cyB0aGUgbWF0Y2hlZCB0ZXh0IGV4YWN0bHksIGEgbnVsbC10ZXJtaW5hdGlvbiAKKyogaXMgbm90
IHBvc3NpYmxlLCB0aGVuIGEgVV9TVFJJTkdfTk9UX1RFUk1JTkFURURfRVJST1Igc2V0IGluIHN0
YXR1cy4KKyogUHJlLWZsaWdodGluZyBjYW4gYmUgZWl0aGVyIGRvbmUgd2l0aCBsZW5ndGggPSAw
IG9yIHRoZSBBUEkgCisqIDx0dD51c2VhcmNoX2dldE1hdGNoTGVuZ3RoPC90dD4uCisqIEBwYXJh
bSBzdHJzcmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVjdAorKiBAcGFyYW0gcmVzdWx0IFVD
aGFyIGJ1ZmZlciB0byBzdG9yZSB0aGUgbWF0Y2hlZCBzdHJpbmcKKyogQHBhcmFtIHJlc3VsdENh
cGFjaXR5IGxlbmd0aCBvZiB0aGUgcmVzdWx0IGJ1ZmZlcgorKiBAcGFyYW0gc3RhdHVzIGVycm9y
IHJldHVybmVkIGlmIHJlc3VsdCBpcyBub3QgbGFyZ2UgZW5vdWdoCisqIEByZXR1cm4gZXhhY3Qg
bGVuZ3RoIG9mIHRoZSBtYXRjaGVkIHRleHQsIG5vdCBjb3VudGluZyB0aGUgbnVsbC10ZXJtaW5h
dGlvbgorKiBAc2VlICN1c2VhcmNoX2ZpcnN0CisqIEBzZWUgI3VzZWFyY2hfbmV4dAorKiBAc2Vl
ICN1c2VhcmNoX3ByZXZpb3VzCisqIEBzZWUgI3VzZWFyY2hfbGFzdAorKiBAc2VlICNVU0VBUkNI
X0RPTkUKKyogQHN0YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIg
dXNlYXJjaF9nZXRNYXRjaGVkVGV4dChjb25zdCBVU3RyaW5nU2VhcmNoICpzdHJzcmNoLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAq
cmVzdWx0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCAgICAgICAgcmVzdWx0Q2FwYWNpdHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICpzdGF0dXMpOworCisjaWYgIVVDT05GSUdf
Tk9fQlJFQUtfSVRFUkFUSU9OCisKKy8qKgorKiBTZXQgdGhlIEJyZWFrSXRlcmF0b3IgdGhhdCB3
aWxsIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHBvaW50cyBhdCB3aGljaCAKKyogbWF0Y2hlcyBh
cmUgZGV0ZWN0ZWQuCisqIEBwYXJhbSBzdHJzcmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVj
dAorKiBAcGFyYW0gYnJlYWtpdGVyIEEgQnJlYWtJdGVyYXRvciB0aGF0IHdpbGwgYmUgdXNlZCB0
byByZXN0cmljdCB0aGUgcG9pbnRzCisqICAgICAgICAgICAgICAgICAgYXQgd2hpY2ggbWF0Y2hl
cyBhcmUgZGV0ZWN0ZWQuIElmIGEgbWF0Y2ggaXMgZm91bmQsIGJ1dCAKKyogICAgICAgICAgICAg
ICAgICB0aGUgbWF0Y2gncyBzdGFydCBvciBlbmQgaW5kZXggaXMgbm90IGEgYm91bmRhcnkgYXMg
CisqICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgPHR0PkJyZWFrSXRlcmF0b3I8
L3R0PiwgdGhlIG1hdGNoIHdpbGwgCisqICAgICAgICAgICAgICAgICAgYmUgcmVqZWN0ZWQgYW5k
IGFub3RoZXIgd2lsbCBiZSBzZWFyY2hlZCBmb3IuIAorKiAgICAgICAgICAgICAgICAgIElmIHRo
aXMgcGFyYW1ldGVyIGlzIDx0dD5OVUxMPC90dD4sIG5vIGJyZWFrIGRldGVjdGlvbiBpcyAKKyog
ICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQuCisqIEBwYXJhbSBzdGF0dXMgZm9yIGVycm9ycyBp
ZiBpdCBvY2N1cnMKKyogQHNlZSAjdXNlYXJjaF9nZXRCcmVha0l0ZXJhdG9yCisqIEBzdGFibGUg
SUNVIDIuNAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIHVzZWFyY2hfc2V0QnJlYWtJdGVy
YXRvcihVU3RyaW5nU2VhcmNoICAqc3Ryc3JjaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVCcmVha0l0ZXJhdG9yICpicmVha2l0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICpz
dGF0dXMpOworCisvKioKKyogUmV0dXJucyB0aGUgQnJlYWtJdGVyYXRvciB0aGF0IGlzIHVzZWQg
dG8gcmVzdHJpY3QgdGhlIHBvaW50cyBhdCB3aGljaCAKKyogbWF0Y2hlcyBhcmUgZGV0ZWN0ZWQu
IFRoaXMgd2lsbCBiZSB0aGUgc2FtZSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSAKKyog
Y29uc3RydWN0b3Igb3IgdG8gPHR0PnVzZWFyY2hfc2V0QnJlYWtJdGVyYXRvcjwvdHQ+LiBOb3Rl
IHRoYXQgCisqIDx0dD5OVUxMPC90dD4gCisqIGlzIGEgbGVnYWwgdmFsdWU7IGl0IG1lYW5zIHRo
YXQgYnJlYWsgZGV0ZWN0aW9uIHNob3VsZCBub3QgYmUgYXR0ZW1wdGVkLgorKiBAcGFyYW0gc3Ry
c3JjaCBzZWFyY2ggaXRlcmF0b3IgZGF0YSBzdHJ1Y3QKKyogQHJldHVybiBicmVhayBpdGVyYXRv
ciB1c2VkCisqIEBzZWUgI3VzZWFyY2hfc2V0QnJlYWtJdGVyYXRvcgorKiBAc3RhYmxlIElDVSAy
LjQKKyovCitVX1NUQUJMRSBjb25zdCBVQnJlYWtJdGVyYXRvciAqIFVfRVhQT1JUMiB1c2VhcmNo
X2dldEJyZWFrSXRlcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVVN0cmluZ1NlYXJjaCAqc3Ryc3JjaCk7CisgICAgCisjZW5kaWYKKyAg
ICAKKy8qKgorKiBTZXQgdGhlIHN0cmluZyB0ZXh0IHRvIGJlIHNlYXJjaGVkLiBUZXh0IGl0ZXJh
dGlvbiB3aWxsIGhlbmNlIGJlZ2luIGF0IHRoZSAKKyogc3RhcnQgb2YgdGhlIHRleHQgc3RyaW5n
LiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gcmUtdXNlIGFuIAorKiBpdGVy
YXRvciB0byBzZWFyY2ggZm9yIHRoZSBzYW1lIHBhdHRlcm4gd2l0aGluIGEgZGlmZmVyZW50IGJv
ZHkgb2YgdGV4dC4KKyogQHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9yIGRhdGEgc3RydWN0
CisqIEBwYXJhbSB0ZXh0IG5ldyBzdHJpbmcgdG8gbG9vayBmb3IgbWF0Y2gKKyogQHBhcmFtIHRl
eHRsZW5ndGggbGVuZ3RoIG9mIHRoZSBuZXcgc3RyaW5nLCAtMSBmb3IgbnVsbC10ZXJtaW5hdGlv
bgorKiBAcGFyYW0gc3RhdHVzIGZvciBlcnJvcnMgaWYgaXQgb2NjdXJzLiBJZiB0ZXh0IGlzIE5V
TEwsIG9yIHRleHRsZW5ndGggaXMgMCAKKyogICAgICAgICAgICAgICB0aGVuIGFuIFVfSUxMRUdB
TF9BUkdVTUVOVF9FUlJPUiBpcyByZXR1cm5lZCB3aXRoIG5vIGNoYW5nZQorKiAgICAgICAgICAg
ICAgIGRvbmUgdG8gc3Ryc3JjaC4KKyogQHNlZSAjdXNlYXJjaF9nZXRUZXh0CisqIEBzdGFibGUg
SUNVIDIuNAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIHVzZWFyY2hfc2V0VGV4dCggICAg
ICBVU3RyaW5nU2VhcmNoICpzdHJzcmNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgICAqdGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgdGV4dGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAqc3Rh
dHVzKTsKKworLyoqCisqIFJldHVybiB0aGUgc3RyaW5nIHRleHQgdG8gYmUgc2VhcmNoZWQuCisq
IEBwYXJhbSBzdHJzcmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVjdAorKiBAcGFyYW0gbGVu
Z3RoIHJldHVybmVkIHN0cmluZyB0ZXh0IGxlbmd0aAorKiBAcmV0dXJuIHN0cmluZyB0ZXh0IAor
KiBAc2VlICN1c2VhcmNoX3NldFRleHQKKyogQHN0YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUg
Y29uc3QgVUNoYXIgKiBVX0VYUE9SVDIgdXNlYXJjaF9nZXRUZXh0KGNvbnN0IFVTdHJpbmdTZWFy
Y2ggKnN0cnNyY2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQzMl90ICAgICAgICpsZW5ndGgpOworCisvKioKKyogR2V0cyB0aGUgY29sbGF0b3Ig
dXNlZCBmb3IgdGhlIGxhbmd1YWdlIHJ1bGVzLiAKKyogPHA+CisqIERlbGV0aW5nIHRoZSByZXR1
cm5lZCA8dHQ+VUNvbGxhdG9yPC90dD4gYmVmb3JlIGNhbGxpbmcgCisqIDx0dD51c2VhcmNoX2Ns
b3NlPC90dD4gd291bGQgY2F1c2UgdGhlIHN0cmluZyBzZWFyY2ggdG8gZmFpbC4KKyogPHR0PnVz
ZWFyY2hfY2xvc2U8L3R0PiB3aWxsIGRlbGV0ZSB0aGUgY29sbGF0b3IgaWYgdGhpcyBzZWFyY2gg
b3ducyBpdC4KKyogQHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9yIGRhdGEgc3RydWN0Cisq
IEByZXR1cm4gY29sbGF0b3IKKyogQHN0YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUgVUNvbGxh
dG9yICogVV9FWFBPUlQyIHVzZWFyY2hfZ2V0Q29sbGF0b3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVTdHJpbmdTZWFyY2ggKnN0cnNyY2gp
OworCisvKioKKyogU2V0cyB0aGUgY29sbGF0b3IgdXNlZCBmb3IgdGhlIGxhbmd1YWdlIHJ1bGVz
LiBVc2VyIHJldGFpbnMgdGhlIG93bmVyc2hpcCAKKyogb2YgdGhpcyBjb2xsYXRvciwgdGh1cyB0
aGUgcmVzcG9uc2liaWxpdHkgb2YgZGVsZXRpb24gbGllcyB3aXRoIHRoZSB1c2VyLgorKiBUaGlz
IG1ldGhvZCBjYXVzZXMgaW50ZXJuYWwgZGF0YSBzdWNoIGFzIEJveWVyLU1vb3JlIHNoaWZ0IHRh
YmxlcyB0byAgCisqIGJlIHJlY2FsY3VsYXRlZCwgYnV0IHRoZSBpdGVyYXRvcidzIHBvc2l0aW9u
IGlzIHVuY2hhbmdlZC4KKyogQHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9yIGRhdGEgc3Ry
dWN0CisqIEBwYXJhbSBjb2xsYXRvciB0byBiZSB1c2VkCisqIEBwYXJhbSBzdGF0dXMgZm9yIGVy
cm9ycyBpZiBpdCBvY2N1cnMKKyogQHN0YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUgdm9pZCBV
X0VYUE9SVDIgdXNlYXJjaF9zZXRDb2xsYXRvciggICAgICBVU3RyaW5nU2VhcmNoICpzdHJzcmNo
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDb2xs
YXRvciAgICAgKmNvbGxhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAgICAqc3RhdHVzKTsKKworLyoqCisqIFNldHMgdGhlIHBh
dHRlcm4gdXNlZCBmb3IgbWF0Y2hpbmcuCisqIEludGVybmFsIGRhdGEgbGlrZSB0aGUgQm95ZXIg
TW9vcmUgdGFibGUgd2lsbCBiZSByZWNhbGN1bGF0ZWQsIGJ1dCB0aGUgCisqIGl0ZXJhdG9yJ3Mg
cG9zaXRpb24gaXMgdW5jaGFuZ2VkLgorKiBAcGFyYW0gc3Ryc3JjaCBzZWFyY2ggaXRlcmF0b3Ig
ZGF0YSBzdHJ1Y3QKKyogQHBhcmFtIHBhdHRlcm4gc3RyaW5nCisqIEBwYXJhbSBwYXR0ZXJubGVu
Z3RoIHBhdHRlcm4gbGVuZ3RoLCAtMSBmb3IgbnVsbC10ZXJtaW5hdGVkIHN0cmluZworKiBAcGFy
YW0gc3RhdHVzIGZvciBlcnJvcnMgaWYgaXQgb2NjdXJzLiBJZiB0ZXh0IGlzIE5VTEwsIG9yIHRl
eHRsZW5ndGggaXMgMCAKKyogICAgICAgICAgICAgICB0aGVuIGFuIFVfSUxMRUdBTF9BUkdVTUVO
VF9FUlJPUiBpcyByZXR1cm5lZCB3aXRoIG5vIGNoYW5nZQorKiAgICAgICAgICAgICAgIGRvbmUg
dG8gc3Ryc3JjaC4KKyogQHN0YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9S
VDIgdXNlYXJjaF9zZXRQYXR0ZXJuKCAgICAgIFVTdHJpbmdTZWFyY2ggKnN0cnNyY2gsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAg
ICpwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICBwYXR0ZXJubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICpzdGF0dXMpOworCisvKioKKyog
R2V0cyB0aGUgc2VhcmNoIHBhdHRlcm4KKyogQHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9y
IGRhdGEgc3RydWN0CisqIEBwYXJhbSBsZW5ndGggcmV0dXJuIGxlbmd0aCBvZiB0aGUgcGF0dGVy
biwgLTEgaW5kaWNhdGVzIHRoYXQgdGhlIHBhdHRlcm4gCisqICAgICAgICAgICAgICAgaXMgbnVs
bC10ZXJtaW5hdGVkCisqIEByZXR1cm4gcGF0dGVybiBzdHJpbmcKKyogQHN0YWJsZSBJQ1UgMi40
CisqLworVV9TVEFCTEUgY29uc3QgVUNoYXIgKiBVX0VYUE9SVDIgdXNlYXJjaF9nZXRQYXR0ZXJu
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
U3RyaW5nU2VhcmNoICpzdHJzcmNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAqbGVuZ3RoKTsKKworLyogbWV0aG9k
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCisKKy8qKgorKiBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCB0aGUg
c3RyaW5nIHRleHQgbWF0Y2hlcyB0aGUgc2VhcmNoIAorKiBwYXR0ZXJuLiAgCisqIFRoZSBpdGVy
YXRvciBpcyBhZGp1c3RlZCBzbyB0aGF0IGl0cyBjdXJyZW50IGluZGV4IChhcyByZXR1cm5lZCBi
eSAKKyogPHR0PnVzZWFyY2hfZ2V0T2Zmc2V0PC90dD4pIGlzIHRoZSBtYXRjaCBwb3NpdGlvbiBp
ZiBvbmUgd2FzIGZvdW5kLgorKiBJZiBhIG1hdGNoIGlzIG5vdCBmb3VuZCwgPHR0PlVTRUFSQ0hf
RE9ORTwvdHQ+IHdpbGwgYmUgcmV0dXJuZWQgYW5kCisqIHRoZSBpdGVyYXRvciB3aWxsIGJlIGFk
anVzdGVkIHRvIHRoZSBpbmRleCA8dHQ+VVNFQVJDSF9ET05FPC90dD4uCisqIEBwYXJhbSBzdHJz
cmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVjdAorKiBAcGFyYW0gc3RhdHVzIGZvciBlcnJv
cnMgaWYgaXQgb2NjdXJzCisqIEByZXR1cm4gVGhlIGNoYXJhY3RlciBpbmRleCBvZiB0aGUgZmly
c3QgbWF0Y2gsIG9yIAorKiA8dHQ+VVNFQVJDSF9ET05FPC90dD4gaWYgdGhlcmUgYXJlIG5vIG1h
dGNoZXMuCisqIEBzZWUgI3VzZWFyY2hfZ2V0T2Zmc2V0CisqIEBzZWUgI1VTRUFSQ0hfRE9ORQor
KiBAc3RhYmxlIElDVSAyLjQKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiB1c2VhcmNo
X2ZpcnN0KFVTdHJpbmdTZWFyY2ggKnN0cnNyY2gsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgKnN0YXR1cyk7CisKKy8qKgorKiBSZXR1
cm5zIHRoZSBmaXJzdCBpbmRleCBncmVhdGVyIHRoYW4gPHR0PnBvc2l0aW9uPC90dD4gYXQgd2hp
Y2ggdGhlIHN0cmluZyAKKyogdGV4dCAKKyogbWF0Y2hlcyB0aGUgc2VhcmNoIHBhdHRlcm4uIFRo
ZSBpdGVyYXRvciBpcyBhZGp1c3RlZCBzbyB0aGF0IGl0cyBjdXJyZW50IAorKiBpbmRleCAoYXMg
cmV0dXJuZWQgYnkgPHR0PnVzZWFyY2hfZ2V0T2Zmc2V0PC90dD4pIGlzIHRoZSBtYXRjaCBwb3Np
dGlvbiBpZiAKKyogb25lIHdhcyBmb3VuZC4KKyogSWYgYSBtYXRjaCBpcyBub3QgZm91bmQsIDx0
dD5VU0VBUkNIX0RPTkU8L3R0PiB3aWxsIGJlIHJldHVybmVkIGFuZAorKiB0aGUgaXRlcmF0b3Ig
d2lsbCBiZSBhZGp1c3RlZCB0byB0aGUgaW5kZXggPHR0PlVTRUFSQ0hfRE9ORTwvdHQ+CisqIDxw
PgorKiBTZWFyY2ggcG9zaXRpb25zIHRoYXQgbWF5IHJlbmRlciBpbmNvcnJlY3QgcmVzdWx0cyBh
cmUgaGlnaGxpZ2h0ZWQgaW4gdGhlCisqIGhlYWRlciBjb21tZW50cy4gSWYgcG9zaXRpb24gaXMg
bGVzcyB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgdGV4dCByYW5nZSAKKyogZm9yIHNlYXJjaGlu
ZywgYW4gVV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUiB3aWxsIGJlIHJldHVybmVkCisqIEBwYXJh
bSBzdHJzcmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVjdAorKiBAcGFyYW0gcG9zaXRpb24g
dG8gc3RhcnQgdGhlIHNlYXJjaCBhdAorKiBAcGFyYW0gc3RhdHVzIGZvciBlcnJvcnMgaWYgaXQg
b2NjdXJzCisqIEByZXR1cm4gVGhlIGNoYXJhY3RlciBpbmRleCBvZiB0aGUgZmlyc3QgbWF0Y2gg
Zm9sbG93aW5nIDx0dD5wb3M8L3R0PiwKKyogICAgICAgICBvciA8dHQ+VVNFQVJDSF9ET05FPC90
dD4gaWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMuCisqIEBzZWUgI3VzZWFyY2hfZ2V0T2Zmc2V0Cisq
IEBzZWUgI1VTRUFSQ0hfRE9ORQorKiBAc3RhYmxlIElDVSAyLjQKKyovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMiB1c2VhcmNoX2ZvbGxvd2luZyhVU3RyaW5nU2VhcmNoICpzdHJzcmNoLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAg
ICBwb3NpdGlvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVFcnJvckNvZGUgICAgKnN0YXR1cyk7CisgICAgCisvKioKKyogUmV0dXJucyB0aGUgbGFz
dCBpbmRleCBpbiB0aGUgdGFyZ2V0IHRleHQgYXQgd2hpY2ggaXQgbWF0Y2hlcyB0aGUgc2VhcmNo
IAorKiBwYXR0ZXJuLiBUaGUgaXRlcmF0b3IgaXMgYWRqdXN0ZWQgc28gdGhhdCBpdHMgY3VycmVu
dCAKKyogaW5kZXggKGFzIHJldHVybmVkIGJ5IDx0dD51c2VhcmNoX2dldE9mZnNldDwvdHQ+KSBp
cyB0aGUgbWF0Y2ggcG9zaXRpb24gaWYgCisqIG9uZSB3YXMgZm91bmQuCisqIElmIGEgbWF0Y2gg
aXMgbm90IGZvdW5kLCA8dHQ+VVNFQVJDSF9ET05FPC90dD4gd2lsbCBiZSByZXR1cm5lZCBhbmQK
KyogdGhlIGl0ZXJhdG9yIHdpbGwgYmUgYWRqdXN0ZWQgdG8gdGhlIGluZGV4IDx0dD5VU0VBUkNI
X0RPTkU8L3R0Pi4KKyogQHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9yIGRhdGEgc3RydWN0
CisqIEBwYXJhbSBzdGF0dXMgZm9yIGVycm9ycyBpZiBpdCBvY2N1cnMKKyogQHJldHVybiBUaGUg
aW5kZXggb2YgdGhlIGZpcnN0IG1hdGNoLCBvciA8dHQ+VVNFQVJDSF9ET05FPC90dD4gaWYgdGhl
cmUgCisqICAgICAgICAgYXJlIG5vIG1hdGNoZXMuCisqIEBzZWUgI3VzZWFyY2hfZ2V0T2Zmc2V0
CisqIEBzZWUgI1VTRUFSQ0hfRE9ORQorKiBAc3RhYmxlIElDVSAyLjQKKyovCitVX1NUQUJMRSBp
bnQzMl90IFVfRVhQT1JUMiB1c2VhcmNoX2xhc3QoVVN0cmluZ1NlYXJjaCAqc3Ryc3JjaCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICpz
dGF0dXMpOworCisvKioKKyogUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggbGVzcyB0aGFuIDx0dD5w
b3NpdGlvbjwvdHQ+IGF0IHdoaWNoIHRoZSBzdHJpbmcgdGV4dCAKKyogbWF0Y2hlcyB0aGUgc2Vh
cmNoIHBhdHRlcm4uIFRoZSBpdGVyYXRvciBpcyBhZGp1c3RlZCBzbyB0aGF0IGl0cyBjdXJyZW50
IAorKiBpbmRleCAoYXMgcmV0dXJuZWQgYnkgPHR0PnVzZWFyY2hfZ2V0T2Zmc2V0PC90dD4pIGlz
IHRoZSBtYXRjaCBwb3NpdGlvbiBpZiAKKyogb25lIHdhcyBmb3VuZC4KKyogSWYgYSBtYXRjaCBp
cyBub3QgZm91bmQsIDx0dD5VU0VBUkNIX0RPTkU8L3R0PiB3aWxsIGJlIHJldHVybmVkIGFuZAor
KiB0aGUgaXRlcmF0b3Igd2lsbCBiZSBhZGp1c3RlZCB0byB0aGUgaW5kZXggPHR0PlVTRUFSQ0hf
RE9ORTwvdHQ+CisqIDxwPgorKiBTZWFyY2ggcG9zaXRpb25zIHRoYXQgbWF5IHJlbmRlciBpbmNv
cnJlY3QgcmVzdWx0cyBhcmUgaGlnaGxpZ2h0ZWQgaW4gdGhlCisqIGhlYWRlciBjb21tZW50cy4g
SWYgcG9zaXRpb24gaXMgbGVzcyB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgdGV4dCByYW5nZSAK
KyogZm9yIHNlYXJjaGluZywgYW4gVV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUiB3aWxsIGJlIHJl
dHVybmVkCisqIEBwYXJhbSBzdHJzcmNoIHNlYXJjaCBpdGVyYXRvciBkYXRhIHN0cnVjdAorKiBA
cGFyYW0gcG9zaXRpb24gaW5kZXggcG9zaXRpb24gdGhlIHNlYXJjaCBpcyB0byBiZWdpbiBhdAor
KiBAcGFyYW0gc3RhdHVzIGZvciBlcnJvcnMgaWYgaXQgb2NjdXJzCisqIEByZXR1cm4gVGhlIGNo
YXJhY3RlciBpbmRleCBvZiB0aGUgZmlyc3QgbWF0Y2ggcHJlY2VkaW5nIDx0dD5wb3M8L3R0PiwK
KyogICAgICAgICBvciA8dHQ+VVNFQVJDSF9ET05FPC90dD4gaWYgdGhlcmUgYXJlIG5vIG1hdGNo
ZXMuCisqIEBzZWUgI3VzZWFyY2hfZ2V0T2Zmc2V0CisqIEBzZWUgI1VTRUFSQ0hfRE9ORQorKiBA
c3RhYmxlIElDVSAyLjQKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiB1c2VhcmNoX3By
ZWNlZGluZyhVU3RyaW5nU2VhcmNoICpzdHJzcmNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICBwb3NpdGlvbiwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgKnN0YXR1
cyk7CisgICAgCisvKioKKyogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG5leHQgcG9pbnQgYXQg
d2hpY2ggdGhlIHN0cmluZyB0ZXh0IG1hdGNoZXMgdGhlCisqIHNlYXJjaCBwYXR0ZXJuLCBzdGFy
dGluZyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorKiBUaGUgaXRlcmF0b3IgaXMgYWRqdXN0
ZWQgc28gdGhhdCBpdHMgY3VycmVudCAKKyogaW5kZXggKGFzIHJldHVybmVkIGJ5IDx0dD51c2Vh
cmNoX2dldE9mZnNldDwvdHQ+KSBpcyB0aGUgbWF0Y2ggcG9zaXRpb24gaWYgCisqIG9uZSB3YXMg
Zm91bmQuCisqIElmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLCA8dHQ+VVNFQVJDSF9ET05FPC90dD4g
d2lsbCBiZSByZXR1cm5lZCBhbmQKKyogdGhlIGl0ZXJhdG9yIHdpbGwgYmUgYWRqdXN0ZWQgdG8g
dGhlIGluZGV4IDx0dD5VU0VBUkNIX0RPTkU8L3R0PgorKiBAcGFyYW0gc3Ryc3JjaCBzZWFyY2gg
aXRlcmF0b3IgZGF0YSBzdHJ1Y3QKKyogQHBhcmFtIHN0YXR1cyBmb3IgZXJyb3JzIGlmIGl0IG9j
Y3VycworKiBAcmV0dXJuIFRoZSBpbmRleCBvZiB0aGUgbmV4dCBtYXRjaCBhZnRlciB0aGUgY3Vy
cmVudCBwb3NpdGlvbiwgb3IgCisqICAgICAgICAgPHR0PlVTRUFSQ0hfRE9ORTwvdHQ+IGlmIHRo
ZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMuCisqIEBzZWUgI3VzZWFyY2hfZmlyc3QKKyogQHNlZSAj
dXNlYXJjaF9nZXRPZmZzZXQKKyogQHNlZSAjVVNFQVJDSF9ET05FCisqIEBzdGFibGUgSUNVIDIu
NAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIHVzZWFyY2hfbmV4dChVU3RyaW5nU2Vh
cmNoICpzdHJzcmNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgICAgKnN0YXR1cyk7CisKKy8qKgorKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0
aGUgcHJldmlvdXMgcG9pbnQgYXQgd2hpY2ggdGhlIHN0cmluZyB0ZXh0IG1hdGNoZXMKKyogdGhl
IHNlYXJjaCBwYXR0ZXJuLCBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyogVGhl
IGl0ZXJhdG9yIGlzIGFkanVzdGVkIHNvIHRoYXQgaXRzIGN1cnJlbnQgCisqIGluZGV4IChhcyBy
ZXR1cm5lZCBieSA8dHQ+dXNlYXJjaF9nZXRPZmZzZXQ8L3R0PikgaXMgdGhlIG1hdGNoIHBvc2l0
aW9uIGlmIAorKiBvbmUgd2FzIGZvdW5kLgorKiBJZiBhIG1hdGNoIGlzIG5vdCBmb3VuZCwgPHR0
PlVTRUFSQ0hfRE9ORTwvdHQ+IHdpbGwgYmUgcmV0dXJuZWQgYW5kCisqIHRoZSBpdGVyYXRvciB3
aWxsIGJlIGFkanVzdGVkIHRvIHRoZSBpbmRleCA8dHQ+VVNFQVJDSF9ET05FPC90dD4KKyogQHBh
cmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9yIGRhdGEgc3RydWN0CisqIEBwYXJhbSBzdGF0dXMg
Zm9yIGVycm9ycyBpZiBpdCBvY2N1cnMKKyogQHJldHVybiBUaGUgaW5kZXggb2YgdGhlIHByZXZp
b3VzIG1hdGNoIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiwKKyogICAgICAgICBvciA8dHQ+
VVNFQVJDSF9ET05FPC90dD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcy4KKyogQHNlZSAj
dXNlYXJjaF9sYXN0CisqIEBzZWUgI3VzZWFyY2hfZ2V0T2Zmc2V0CisqIEBzZWUgI1VTRUFSQ0hf
RE9ORQorKiBAc3RhYmxlIElDVSAyLjQKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiB1
c2VhcmNoX3ByZXZpb3VzKFVTdHJpbmdTZWFyY2ggKnN0cnNyY2gsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgKnN0YXR1cyk7Cisg
ICAgCisvKiogCisqIFJlc2V0IHRoZSBpdGVyYXRpb24uCisqIFNlYXJjaCB3aWxsIGJlZ2luIGF0
IHRoZSBzdGFydCBvZiB0aGUgdGV4dCBzdHJpbmcgaWYgYSBmb3J3YXJkIGl0ZXJhdGlvbiAKKyog
aXMgaW5pdGlhdGVkIGJlZm9yZSBhIGJhY2t3YXJkcyBpdGVyYXRpb24uIE90aGVyd2lzZSBpZiBh
IGJhY2t3YXJkcyAKKyogaXRlcmF0aW9uIGlzIGluaXRpYXRlZCBiZWZvcmUgYSBmb3J3YXJkcyBp
dGVyYXRpb24sIHRoZSBzZWFyY2ggd2lsbCBiZWdpbgorKiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0
IHN0cmluZy4KKyogQHBhcmFtIHN0cnNyY2ggc2VhcmNoIGl0ZXJhdG9yIGRhdGEgc3RydWN0Cisq
IEBzZWUgI3VzZWFyY2hfZmlyc3QKKyogQHN0YWJsZSBJQ1UgMi40CisqLworVV9TVEFCTEUgdm9p
ZCBVX0VYUE9SVDIgdXNlYXJjaF9yZXNldChVU3RyaW5nU2VhcmNoICpzdHJzcmNoKTsKKworI2Vu
ZGlmIC8qICNpZiAhVUNPTkZJR19OT19DT0xMQVRJT04gKi8KKworI2VuZGlmCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBXZWJDb3JlL2ljdS91bmljb2RlL3VzZWFyY2guaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzOTUyNCkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisy
MDA4LTEyLTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjMwNTE6IHdlYiBwYWdlIHNl
YXJjaGluZyBzaG91bGQgdXNlIElDVSdzIHNlYXJjaCBzbyBpdCBjYW4gaWdub3JlIGRpYWNyaXRp
Y2FsIGRpZmZlcmVuY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzA1MQorICAgICAgICByZGFyOi8vcHJvYmxlbS8zNTc0NDk3CisKKyAgICAgICAg
Q3VycmVudGx5IHRoaXMgaXMgb25seSBhY3RpdmF0ZWQgb24gdGhlIE1hYyBwbGF0Zm9ybSwgbm90
IGluY2x1ZGluZyBUaWdlci4KKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvZmluZFN0
cmluZy1kaWFjcml0aWNhbHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4gRXhwZWN0IGZhaWx1cmUuCisg
ICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9maW5kU3RyaW5nLWRpYWNyaXRpY2Fscy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtdGlnZXIvZWRpdGluZy9leGVjQ29tbWFu
ZDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXRpZ2VyL2VkaXRpbmcvZXhlY0NvbW1h
bmQvZmluZFN0cmluZy1kaWFjcml0aWNhbHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4gRXhwZWN0IGZh
aWx1cmUuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRpbmcvZXhlY0NvbW1hbmQvZmluZFN0
cmluZy1kaWFjcml0aWNhbHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4gRXhwZWN0IHN1Y2Nlc3MuCisK
IDIwMDgtMTItMzAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvZmluZFN0cmluZy1kaWFjcml0aWNhbHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZmluZFN0cmluZy1kaWFjcml0aWNhbHMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9maW5kU3RyaW5nLWRpYWNyaXRpY2Fscy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorVGVzdCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMDUxIHdlYiBwYWdlIHNlYXJjaGluZyBzaG91bGQgdXNlIElDVSdzIHNlYXJjaCBz
byBpdCBjYW4gaWdub3JlIGRpYWNyaXRpY2FsIGRpZmZlcmVuY2VzLgorCitUaGUgd29yZCAic8Op
bGVjdCIgc2hvdWxkIGJlIHNlbGVjdGVkLgorCitGQUlMCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2ZpbmRTdHJpbmctZGlhY3JpdGljYWxzLWV4
cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2ZpbmRTdHJpbmctZGlhY3JpdGlj
YWxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9m
aW5kU3RyaW5nLWRpYWNyaXRpY2Fscy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9maW5kU3RyaW5nLWRpYWNyaXRpY2Fscy5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE3IEBACis8cD4KKyAgICBUZXN0IGZvciA8aT48YSBocmVmPSJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNTEiPmh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA1MTwvYT4KKyAgICB3ZWIgcGFnZSBzZWFyY2hp
bmcgc2hvdWxkIHVzZSBJQ1UncyBzZWFyY2ggc28gaXQgY2FuIGlnbm9yZSBkaWFjcml0aWNhbCBk
aWZmZXJlbmNlczwvaT4uCis8L3A+Cis8cD4KKyAgICBUaGUgd29yZCAicyZlYWN1dGU7bGVjdCIg
c2hvdWxkIGJlIHNlbGVjdGVkLgorPC9wPgorPGhyPgorPHAgaWQ9InJlc3VsdCI+CisgICAgRkFJ
TAorPC9wPgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgaWYgKGRvY3Vt
ZW50LmV4ZWNDb21tYW5kKCJGaW5kU3RyaW5nIiwgZmFsc2UsICJTZWwiICsgU3RyaW5nLmZyb21D
aGFyQ29kZSgweDAwQ0IpICsgImN0IikpCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJyZXN1bHQiKS5pbm5lclRleHQgPSAiUEFTUyI7Cis8L3NjcmlwdD4KClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZmluZFN0cmluZy1kaWFjcml0
aWNhbHMuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwK
TmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy10aWdlci9lZGl0aW5nL2V4ZWNDb21tYW5kL2ZpbmRTdHJpbmctZGlhY3JpdGljYWxz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtdGln
ZXIvZWRpdGluZy9leGVjQ29tbWFuZC9maW5kU3RyaW5nLWRpYWNyaXRpY2Fscy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtdGlnZXIvZWRpdGlu
Zy9leGVjQ29tbWFuZC9maW5kU3RyaW5nLWRpYWNyaXRpY2Fscy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGVzdCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDUxIHdlYiBwYWdlIHNlYXJjaGluZyBzaG91bGQgdXNlIElDVSdz
IHNlYXJjaCBzbyBpdCBjYW4gaWdub3JlIGRpYWNyaXRpY2FsIGRpZmZlcmVuY2VzLgorCitUaGUg
d29yZCAic8OpbGVjdCIgc2hvdWxkIGJlIHNlbGVjdGVkLgorCitGQUlMCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtdGlnZXIvZWRpdGluZy9leGVjQ29tbWFu
ZC9maW5kU3RyaW5nLWRpYWNyaXRpY2Fscy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2VkaXRpbmcvZXhlY0NvbW1hbmQvZmluZFN0cmluZy1kaWFjcml0aWNhbHMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2V4ZWNDb21t
YW5kL2ZpbmRTdHJpbmctZGlhY3JpdGljYWxzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2V4ZWNDb21tYW5kL2ZpbmRTdHJpbmct
ZGlhY3JpdGljYWxzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitU
ZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNTEgd2Vi
IHBhZ2Ugc2VhcmNoaW5nIHNob3VsZCB1c2UgSUNVJ3Mgc2VhcmNoIHNvIGl0IGNhbiBpZ25vcmUg
ZGlhY3JpdGljYWwgZGlmZmVyZW5jZXMuCisKK1RoZSB3b3JkICJzw6lsZWN0IiBzaG91bGQgYmUg
c2VsZWN0ZWQuCisKK1BBU1MKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9lZGl0aW5nL2V4ZWNDb21tYW5kL2ZpbmRTdHJpbmctZGlhY3JpdGljYWxzLWV4cGVj
dGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCg==
</data>
<flag name="review"
          id="12478"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>