<?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>49939</bug_id>
          
          <creation_ts>2010-11-22 14:26:41 -0800</creation_ts>
          <short_desc>Implement FileWriterSync</short_desc>
          <delta_ts>2010-11-24 18:44:29 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44358</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric U.">ericu</reporter>
          <assigned_to name="Eric U.">ericu</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>312523</commentid>
    <comment_count>0</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-22 14:26:41 -0800</bug_when>
    <thetext>This bug is for the WebCore portion of the non-port-specific code [FileWriterSync.h, cpp] and such.  There will be separate bugs for the port-specific implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312619</commentid>
    <comment_count>1</comment_count>
      <attachid>74618</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-22 17:16:32 -0800</bug_when>
    <thetext>Created attachment 74618
Webcore implementation, down to the level of AsyncFileWriter

This patch is a bit smaller than it looks; there&apos;s a lot of boilerplate, build file changes, copyright headers, and refactoring in there.  I&apos;ve pulled out the chromium-specific changes into a separate bug, and kept the tests back until the test framework is checked in, but it&apos;s still big; sorry about that.  I don&apos;t see a clean cutting point that knocks this down much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312991</commentid>
    <comment_count>2</comment_count>
      <attachid>74690</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-23 13:23:44 -0800</bug_when>
    <thetext>Created attachment 74690
Fixed 3 typo-level bugs that killed the debug build.

Here are the changes between this and the last patch:

[WebKit] diff /tmp/webcore_sync*.patch

Move return outside the #ifdef guard.
330d329
&lt; +        return true;
331a331
&gt; +        return true;

Replace &quot;complete&quot; with &quot;true&quot; [copy-paste error].
1139c1139
&lt; +    m_complete = complete;
---
&gt; +    m_complete = true;
1149c1149
&lt; +    m_complete = complete;
---
&gt; +    m_complete = true;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313090</commentid>
    <comment_count>3</comment_count>
      <attachid>74708</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-23 17:29:18 -0800</bug_when>
    <thetext>Created attachment 74708
Merged out to resolve conflicts.  No functional changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313101</commentid>
    <comment_count>4</comment_count>
      <attachid>74713</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-23 18:10:28 -0800</bug_when>
    <thetext>Created attachment 74713
Merge out the .vcproj yet again.

No functional changes; I just merged out the .vcproj yet again to see if that fixes the merge conflict.  I don&apos;t see the conflict in my client, anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313117</commentid>
    <comment_count>5</comment_count>
      <attachid>74713</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-23 20:42:47 -0800</bug_when>
    <thetext>Comment on attachment 74713
Merge out the .vcproj yet again.

View in context: https://bugs.webkit.org/attachment.cgi?id=74713&amp;action=review

This seems fine. Just address the few issues I mentioned.

&gt; WebCore/GNUmakefile.am:1471
&gt; +	WebCore/fileapi/FileWriterBaseCallback.h \

Out of order. (Yes the next item is as well.)

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21454
&gt; -			developmentRegion = English;

Please add this back and consider upgrading your local version of xcode. :)

&gt; WebCore/fileapi/DOMFileSystemSync.cpp:100
&gt; +#endif

Add blank line.

&gt; WebCore/fileapi/DOMFileSystemSync.cpp:124
&gt; +    }

Add blank line.

&gt; WebCore/fileapi/DOMFileSystemSync.cpp:128
&gt; +    }

Add blank line.

&gt; WebCore/fileapi/DOMFileSystemSync.cpp:161
&gt; +    ASSERT(static_cast&lt;FileWriterSync*&gt;(successCallback-&gt;fileWriterBase()) == fileWriter.get());

I don&apos;t think the static_cast is needed here.

&gt; WebCore/fileapi/FileEntrySync.h:45
&gt; +class ScriptExecutionContext;

I suppose this was always needed but it happened to be declared elsewhere until this change, right?

&gt; WebCore/fileapi/FileSystemCallbacks.cpp:215
&gt; +// FileWriterBaseCallbacks ----------------------------------------------------------

I just wanted to take an opportunity to point out that one class per file makes it so much easier for future people to find things.

No need to do a change here (and perhaps not ever but especially not in this patch and I guess these are small classes so it feels like overkill to have their own file but I&apos;m starting to feel like even those cases may benefit from their own file).

Ok minor soliloquy is over...

&gt; WebCore/fileapi/FileWriter.cpp:47
&gt; +    : FileWriterBase()

I don&apos;t think you need to like a call to the default constructor.

&gt; WebCore/fileapi/FileWriterBase.h:48
&gt; +class FileWriterBase : public RefCounted&lt;FileWriterBase&gt;, public AsyncFileWriterClient {

I don&apos;t understand what AsyncFileWriterClient has to do with base functionality (especially because none of the callbacks are implemented here).

I understand that both derived class would need to derive from AsyncFileWriterClient but it feels like that is due to each of their own reasons (s it shouldn&apos;t be here -- I have a hard time explaining this well, so I won&apos;t defend it too hard but it feels wrong).

&gt; WebCore/fileapi/FileWriterBase.h:51
&gt; +    void initialize(PassOwnPtr&lt;AsyncFileWriter&gt; writer, long long length);

Remove param name &quot;writer&quot; and &quot;ec&quot;&quot; below.

&gt; WebCore/fileapi/FileWriterBase.h:55
&gt; +    void truncate(long long length, ExceptionCode&amp; ec);

Where are these implemented?

FileWriterBase::write, etc. (I see overrides in FileWriter but that is confusing to me because these aren&apos;t virtual.)

&gt; WebCore/fileapi/FileWriterSync.cpp:45
&gt; +    ASSERT(writer());

ASSERT(m_complete);

&gt; WebCore/fileapi/FileWriterSync.cpp:57
&gt; +    if (!ec) {

fail fast
if (ec)
  return;

&gt; WebCore/fileapi/FileWriterSync.cpp:64
&gt; +void FileWriterSync::seek(long long position, ExceptionCode&amp; ec)

This implementation seems like it should move into FileWriterBase.

Actually I think there should be a function that both FileWriterSync::seek and FileWriter::seek can call but it should likely not be seek as it is shouldn&apos;t be called on its own. (It is like &quot;baseSeek&quot; but that is a pretty terrible great name...)

&gt; WebCore/fileapi/FileWriterSync.cpp:66
&gt; +    ASSERT(writer());

ASSERT(m_complete);

&gt; WebCore/fileapi/FileWriterSync.cpp:79
&gt; +    ASSERT(writer());

ASSERT(m_complete);

&gt; WebCore/fileapi/FileWriterSync.cpp:90
&gt; +    if (m_error == FileError::OK) {

fail fast

&gt; WebCore/fileapi/FileWriterSync.cpp:128
&gt; +    : FileWriterBase()

Not needed.

&gt; WebCore/fileapi/FileWriterSync.cpp:137
&gt; +{

ASSERT(m_complete);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313441</commentid>
    <comment_count>6</comment_count>
      <attachid>74789</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-24 13:34:47 -0800</bug_when>
    <thetext>Created attachment 74789
Rolled in David&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313445</commentid>
    <comment_count>7</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-24 13:47:22 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 74713 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74713&amp;action=review
&gt; 
&gt; This seems fine. Just address the few issues I mentioned.
&gt; 
&gt; &gt; WebCore/GNUmakefile.am:1471
&gt; &gt; +	WebCore/fileapi/FileWriterBaseCallback.h \
&gt; 
&gt; Out of order. (Yes the next item is as well.)

Fixed.

&gt; &gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21454
&gt; &gt; -			developmentRegion = English;
&gt; 
&gt; Please add this back and consider upgrading your local version of xcode. :)

Arg.  Yeah, I&apos;ve been waiting to do that until after M9, so that I wouldn&apos;t risk delays.  I&apos;ll upgrade next week.

&gt; &gt; WebCore/fileapi/DOMFileSystemSync.cpp:100
&gt; &gt; +#endif
&gt; 
&gt; Add blank line.

Done.

&gt; &gt; WebCore/fileapi/DOMFileSystemSync.cpp:124
&gt; &gt; +    }
&gt; 
&gt; Add blank line.

Done.

&gt; &gt; WebCore/fileapi/DOMFileSystemSync.cpp:128
&gt; &gt; +    }
&gt; 
&gt; Add blank line.

Done.

&gt; &gt; WebCore/fileapi/DOMFileSystemSync.cpp:161
&gt; &gt; +    ASSERT(static_cast&lt;FileWriterSync*&gt;(successCallback-&gt;fileWriterBase()) == fileWriter.get());
&gt; 
&gt; I don&apos;t think the static_cast is needed here.

It is now ;&apos;&gt;.
I&apos;ve taken your advice to move the inheritance of AsyncFileWriterClient down to its subclasses, so I think this cast can now change the pointer value.

&gt; &gt; WebCore/fileapi/FileEntrySync.h:45
&gt; &gt; +class ScriptExecutionContext;
&gt; 
&gt; I suppose this was always needed but it happened to be declared elsewhere until this change, right?

Nope; it would have been needed if FileEntrySync had stayed an ActiveDOMObject, but when I took that out, this wasn&apos;t needed any more.
Removed.

&gt; &gt; WebCore/fileapi/FileSystemCallbacks.cpp:215
&gt; &gt; +// FileWriterBaseCallbacks ----------------------------------------------------------
&gt; 
&gt; I just wanted to take an opportunity to point out that one class per file makes it so much easier for future people to find things.
&gt; 
&gt; No need to do a change here (and perhaps not ever but especially not in this patch and I guess these are small classes so it feels like overkill to have their own file but I&apos;m starting to feel like even those cases may benefit from their own file).
&gt; 
&gt; Ok minor soliloquy is over...
&gt; 
&gt; &gt; WebCore/fileapi/FileWriter.cpp:47
&gt; &gt; +    : FileWriterBase()
&gt; 
&gt; I don&apos;t think you need to like a call to the default constructor.

Removed.

&gt; &gt; WebCore/fileapi/FileWriterBase.h:48
&gt; &gt; +class FileWriterBase : public RefCounted&lt;FileWriterBase&gt;, public AsyncFileWriterClient {
&gt; 
&gt; I don&apos;t understand what AsyncFileWriterClient has to do with base functionality (especially because none of the callbacks are implemented here).
&gt; 
&gt; I understand that both derived class would need to derive from AsyncFileWriterClient but it feels like that is due to each of their own reasons (s it shouldn&apos;t be here -- I have a hard time explaining this well, so I won&apos;t defend it too hard but it feels wrong).

No, you&apos;re absolutely right.  I&apos;ve pushed it down to the subclasses.

&gt; &gt; WebCore/fileapi/FileWriterBase.h:51
&gt; &gt; +    void initialize(PassOwnPtr&lt;AsyncFileWriter&gt; writer, long long length);
&gt; 
&gt; Remove param name &quot;writer&quot; and &quot;ec&quot;&quot; below.

Done.

&gt; &gt; WebCore/fileapi/FileWriterBase.h:55
&gt; &gt; +    void truncate(long long length, ExceptionCode&amp; ec);
&gt; 
&gt; Where are these implemented?
&gt; 
&gt; FileWriterBase::write, etc. (I see overrides in FileWriter but that is confusing to me because these aren&apos;t virtual.)

Copy/paste error; removed.

&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:45
&gt; &gt; +    ASSERT(writer());
&gt; 
&gt; ASSERT(m_complete);

Added these and several other asserts.

&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:57
&gt; &gt; +    if (!ec) {
&gt; 
&gt; fail fast
&gt; if (ec)
&gt;   return;

Done.

Fun C++ fact of the day: if you forget the semicolon after your return statement, in a function returning void, and the next line is a function call returning void, you compile with no warning or error.  You don&apos;t get what you expected, though.

&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:64
&gt; &gt; +void FileWriterSync::seek(long long position, ExceptionCode&amp; ec)
&gt; 
&gt; This implementation seems like it should move into FileWriterBase.
&gt; 
&gt; Actually I think there should be a function that both FileWriterSync::seek and FileWriter::seek can call but it should likely not be seek as it is shouldn&apos;t be called on its own. (It is like &quot;baseSeek&quot; but that is a pretty terrible great name...)

Done; I called it seekInternal.

&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:66
&gt; &gt; +    ASSERT(writer());
&gt; 
&gt; ASSERT(m_complete);
&gt; 
&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:79
&gt; &gt; +    ASSERT(writer());
&gt; 
&gt; ASSERT(m_complete);
&gt; 
&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:90
&gt; &gt; +    if (m_error == FileError::OK) {
&gt; 
&gt; fail fast

Done.

&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:128
&gt; &gt; +    : FileWriterBase()
&gt; 
&gt; Not needed.

Fixed.

&gt; &gt; WebCore/fileapi/FileWriterSync.cpp:137
&gt; &gt; +{
&gt; 
&gt; ASSERT(m_complete);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313459</commentid>
    <comment_count>8</comment_count>
      <attachid>74789</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-24 14:10:16 -0800</bug_when>
    <thetext>Comment on attachment 74789
Rolled in David&apos;s feedback.

View in context: https://bugs.webkit.org/attachment.cgi?id=74789&amp;action=review

Please consider a follow up clean up patch. Or just clean this one up and re-upload (with the reviewed by filled in as me and then get any committer to cq+ it).

Not cq+ so you can make this decision.

&gt; WebCore/fileapi/DOMFileSystemSync.cpp:94
&gt; +    }

Adding blank lines between methods would be nice.

&gt; WebCore/fileapi/FileWriter.h:59
&gt; +    // FileWriterBase

Nope.

&gt; WebCore/fileapi/FileWriter.h:60
&gt;      void write(Blob* data, ExceptionCode&amp; ec);

remove &quot;ec&quot; in all places.

&gt; WebCore/fileapi/FileWriterBase.h:76
&gt; +    }

blank

&gt; WebCore/fileapi/FileWriterBase.h:77
&gt; +    void seekInternal(long long position);

blank</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313486</commentid>
    <comment_count>9</comment_count>
      <attachid>74799</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-11-24 15:01:02 -0800</bug_when>
    <thetext>Created attachment 74799
Made the small tweaks David recommended.

Functionally the same; just needs a CQ+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313490</commentid>
    <comment_count>10</comment_count>
      <attachid>74799</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-11-24 15:12:11 -0800</bug_when>
    <thetext>Comment on attachment 74799
Made the small tweaks David recommended.

rs=me, based on dave&apos;s r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313585</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-24 18:42:52 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 74799:

http/tests/misc/uncacheable-script-repeated.html

Please file bugs against the tests.  These tests were authored by koivisto@iki.fi.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313586</commentid>
    <comment_count>12</comment_count>
      <attachid>74799</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-24 18:44:23 -0800</bug_when>
    <thetext>Comment on attachment 74799
Made the small tweaks David recommended.

Clearing flags on attachment: 74799

Committed r72715: &lt;http://trac.webkit.org/changeset/72715&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313587</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-24 18:44:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74618</attachid>
            <date>2010-11-22 17:16:32 -0800</date>
            <delta_ts>2010-11-23 13:23:44 -0800</delta_ts>
            <desc>Webcore implementation, down to the level of AsyncFileWriter</desc>
            <filename>webcore_sync.patch</filename>
            <type>text/plain</type>
            <size>43968</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjU3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjIgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgRmlsZVdyaXRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTM5CisKKyAgICAgICAgVGVzdHMgdG8gZm9sbG93IGluIGEgc2Vw
YXJhdGUgQ0wsIG9uY2UgdGhlIHRlc3QgZnJhbWV3b3JrIGluIDQ3NjgwIGdvZXMgaW4uCisKKyAg
ICAgICAgQnVpbGQgZmlsZSBjaGFuZ2VzIHRvIGFkZCBGaWxlV3JpdGVyQmFzZSBhbmQgRmlsZVdy
aXRlckJhc2VDYWxsYmFjay4KKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgdHVybiBvdXQgdG8gbmVlZCB0byBiZSBhbiBBY3RpdmVET01PYmplY3Qu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisKKyAgICAg
ICAgQWRkZWQgbmV3IEFzeW5jRmlsZVdyaXRlcjo6d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUg
dG8gZW5hYmxlCisgICAgICAgIHN5bmNocm9ub3VzIGNhbGxzLgorICAgICAgICAqIGZpbGVhcGkv
QXN5bmNGaWxlV3JpdGVyLmg6CisKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8gZ2V0IGEgRmlsZVN5
c3RlbVN5bmMuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6CisgICAg
ICAgICogZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVF
bnRyeVN5bmMuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuaWRsOgorCisgICAg
ICAgIEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yIE9LLCByYXRoZXIgdGhhbiBqdXN0IGhhdmluZyAw
IGV2ZXJ5d2hlcmUuCisgICAgICAgICogZmlsZWFwaS9GaWxlRXJyb3IuaDoKKworICAgICAgICBU
dXJuZWQgRmlsZVdyaXRlckNhbGxiYWNrIGludG8gRmlsZVdyaXRlckJhc2VDYWxsYmFjay4KKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAgICAgICAqIGZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorCisgICAgICAgIFJlZmFjdG9yZWQgb3V0IGEgY29t
bW9uIGJhc2UgY2xhc3MsIEZpbGVXcml0ZXJCYXNlLCBmb3IgRmlsZVdyaXRlciBhbmQKKyAgICAg
ICAgRmlsZVdyaXRlclN5bmMuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyLmNwcDoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0
ZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDogQWRkZWQu
CisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHA6CisgICAgICAgICogZmlsZWFw
aS9GaWxlV3JpdGVyU3luYy5oOgorCisgICAgICAgIFNtYWxsIHR3ZWFrcyB0byBkZWFsIHdpdGgg
dGhlIGJhc2UgY2xhc3MgcmVmYWN0b3JpbmcuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmg6CisKKyAgICAg
ICAgUmVtb3ZlZCAiQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsIGFzIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCBpdC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmlkbDoKKwogMjAxMC0xMS0yMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiA3MjIyNikKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTE2NzgsNiArMTY3OCw3IEBAIGlmIChFTkFCTEVfRklMRV9TWVNURU0pCiAgICAgICAgIGZpbGVh
cGkvRmlsZUVudHJ5U3luYy5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tz
LmNwcAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwCisgICAgICAgIGZpbGVhcGkvRmls
ZVdyaXRlckJhc2UuY3BwCiAgICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwCiAgICAg
ICAgIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcAogICAgICAgICBwbGF0Zm9ybS9Bc3luY0Zp
bGVTeXN0ZW0uY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQzNCw5ICsxNDM0LDEyIEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuY3BwIFwKIAlXZWJDb3Jl
L2ZpbGVhcGkvRmlsZVRocmVhZC5oIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZFRhc2su
aCBcCisJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBcCiAJV2ViQ29y
ZS9maWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFjay5oIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdy
aXRlci5jcHAgXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmggXAorCVdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAgXAorCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFz
ZS5oIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwIFwKIAlXZWJDb3JlL2Zp
bGVhcGkvRmlsZVdyaXRlclN5bmMuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZsYWdzLmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MjEsNiArMTUyMSw5IEBACiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwJywKICAgICAgICAg
ICAgICdmaWxlYXBpL0ZpbGVXcml0ZXIuaCcsCisgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3Jp
dGVyQmFzZS5jcHAnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaCcsCisg
ICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgnLAogICAgICAgICAg
ICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2ZpbGVhcGkv
RmlsZVdyaXRlclN5bmMuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTMwNDgsNiArMzA0OCw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9G
SUxFX1NZU1RFTT0xKSAKICAgICAgICAgZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2suaCBcCiAg
ICAgICAgIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oIFwKICAgICAgICAgZmlsZWFwaS9G
aWxlV3JpdGVyLmggXAorICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmggXAorICAgICAg
ICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBcCiAgICAgICAgIGZpbGVhcGkvRmls
ZVdyaXRlckNhbGxiYWNrLmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJDbGllbnQuaCBc
CiAgICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaCBcCkBAIC0zMDgwLDYgKzMwODIsNyBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRklMRV9TWVNURU09MSkgCiAgICAgICAgIGZpbGVh
cGkvRmlsZUVudHJ5U3luYy5jcHAgXAogICAgICAgICBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFj
a3MuY3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcCBcCisgICAgICAgIGZpbGVh
cGkvRmlsZVdyaXRlckJhc2UuY3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5j
cHAgXAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTUzMzEsNiArNTUzMzEsMTcgQEAKIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxG
aWxlV3JpdGVyQmFzZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEZpbGVXcml0ZXJCYXNlLmgiDQorCQkJCT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckJhc2VDYWxsYmFj
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZmlsZWFwaVxGaWxlV3JpdGVyQ2FsbGJhY2suaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NzIyMjYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtOTc0LDYgKzk3NCw5IEBACiAJCTQ2NzAwRUQwMTI3Qjk2Q0IwMEY1RDVE
NiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMu
Y3BwICovOyB9OwogCQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNG
MTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICovOyB9OwogCQk0Njg5RjFBRjEy
NjdCQUUxMDBFOEQzODAgLyogRmlsZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Njg5RjFBRTEyNjdCQUUxMDBFOEQzODAgLyogRmlsZU1l
dGFkYXRhLmggKi87IH07CisJCTQ2QkM3MjRFMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVy
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3BwICovOyB9OworCQk0
NkJDNzI0RjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZS5oICovOyB9OworCQk0NkJDNzI1MDEyOUIxMDRDMDA3MUMwN0Ug
LyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDZCQzcyNEQxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJC
YXNlQ2FsbGJhY2suaCAqLzsgfTsKIAkJNDZCRDE2RTMwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVD
dXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NkJEMTZFMjBCMjc5NDczMDAxRjA4MzkgLyogbm9uZUN1cnNvci5wbmcgKi87IH07CiAJCTQ2
RDRGMjQ5MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZENEYyNDYwQUY5N0U4MTAwMzUzODVB
IC8qIGNlbGxDdXJzb3IucG5nICovOyB9OwogCQk0NkQ0RjI0QTBBRjk3RTgxMDAzNTM4NUEgLyog
Y29udGV4dE1lbnVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NkQ0RjI0NzBBRjk3RTgxMDAzNTM4NUEgLyogY29udGV4dE1lbnVDdXJz
b3IucG5nICovOyB9OwpAQCAtNzA2NCw2ICs3MDY3LDkgQEAKIAkJNDY3MDBFQ0UxMjdCOTZDQjAw
RjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5
bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjcwMEVDRjEyN0I5NkNCMDBG
NUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRmlsZVdyaXRlclN5bmMuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY4OUYxQUUxMjY3QkFFMTAwRThEMzgwIC8qIEZp
bGVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlTWV0YWRh
dGEuaDsgcGF0aCA9IHBsYXRmb3JtL0ZpbGVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVdyaXRlckJhc2UuY3Bw
OyBwYXRoID0gZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZS5oOyBwYXRoID0g
ZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NkJDNzI0RDEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmg7IHBh
dGggPSBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDZCRDE2RTIwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVDdXJzb3IucG5nICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5n
OyBwYXRoID0gbm9uZUN1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2
RDRGMjQ2MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGNlbGxD
dXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkQ0RjI0NzBBRjk3RTgx
MDAzNTM4NUEgLyogY29udGV4dE1lbnVDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gY29udGV4dE1lbnVD
dXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxMTAsNiArMTUxMTYs
OSBAQAogCQkJCTk3NkQ2QzcwMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkVGFzay5oICov
LAogCQkJCTk3NkQ2QzcxMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlV3JpdGVyLmNwcCAqLywKIAkJ
CQk5NzZENkM3MjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVdyaXRlci5oICovLAorCQkJCTQ2QkM3
MjRCMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAgKi8sCisJCQkJNDZCQzcy
NEMxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmggKi8sCisJCQkJNDZCQzcyNEQx
MjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCAqLywKIAkJCQk4OTND
NDdBNjEyMzg5MDhCMDAyQjNEODYgLyogRmlsZVdyaXRlckNhbGxiYWNrLmggKi8sCiAJCQkJNDY3
MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLywKIAkJCQk0Njcw
MEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLywKQEAgLTIxMzMwLDYg
KzIxMzM5LDggQEAKIAkJCQkwODI1MDkzOTEyOEJENEQ4MDBFMkVEOEUgLyogU1ZHQW5pbWF0ZWRU
cmFuc2Zvcm1MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzODg4RjZFRjEyOEM5ODg5MDAwQ0E4
RTAgLyogSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0I5
MkQ0RjEyOTM1NTBCMDBDODM4N0YgLyogRm9udEJhc2VsaW5lLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0NkJDNzI0RjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQ2QkM3MjUwMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZUNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIxMzg5LDcgKzIxNDAwLDYgQEAKIAkJCWlzYSA9IFBC
WFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAw
OEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29y
ZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxv
cG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJ
CQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTIzODk2LDYgKzIzOTA2LDcgQEAK
IAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTlCM0M1QTEyOEM2NDFFMDBFNzI2QzIgLyogR3JhcGhpY3NMYXllck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTM4ODhGNkVFMTI4Qzk4ODkwMDBDQThFMCAvKiBJbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDZCQzcyNEUxMjlCMTA0
QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA3MjIy
NikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtp
bmcgY29weSkKQEAgLTI1NzIsNyArMjU3Miw2IEBAIHN1YiBJc0FjdGl2ZURvbVR5cGUKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCUmVxdWVzdCI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUg
ZXEgIkZpbGVSZWFkZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJGaWxlV3JpdGVyIjsK
LSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRlclN5bmMiOwogICAgIHJldHVybiAw
OwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlV3JpdGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRlci5oCShyZXZpc2lvbiA3MjIyNikK
KysrIFdlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZShsb25nIGxvbmcg
cG9zaXRpb24sIEJsb2IqIGRhdGEpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdHJ1bmNhdGUobG9u
ZyBsb25nIGxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSAvLyBOZWVkZWQgZm9yIEZp
bGVXcml0ZXJTeW5jIG9ubHkuCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
fTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAJKHJl
dmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRmlsZUVudHJ5LmgiCiAjaW5j
bHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIkZpbGVXcml0ZXIuaCIKKyNp
bmNsdWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZVdyaXRlckNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGFDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTc1LDYgKzc2LDI5IEBAIHZvaWQgRE9NRmlsZVN5c3Rl
bTo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJv
eWVkKCk7CiB9CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxs
YmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVm
UHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJhY2spCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjayhjYWxsYmFjaykpOworICAg
IH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJCYXNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHN0YXRpY19j
YXN0PEZpbGVXcml0ZXIqPihmaWxlV3JpdGVyQmFzZSkpOworICAgIH0KK3ByaXZhdGU6CisgICAg
Q29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrKFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNr
PiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICB9
CisgICAgUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gbV9jYWxsYmFjazsKK307CisKK30KKwog
dm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50
cnksIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKICAgICBBU1NFUlQoZmlsZUVu
dHJ5KTsKQEAgLTgyLDcgKzEwNiw4IEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVy
KGNvbnN0IEYKICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0gbV9hc3luY0ZpbGVTeXN0ZW0tPnZp
cnR1YWxUb1BsYXRmb3JtUGF0aChmaWxlRW50cnktPmZ1bGxQYXRoKCkpOwogCiAgICAgUmVmUHRy
PEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLSAgICBPd25QdHI8RmlsZVdyaXRlckNhbGxiYWNrcz4gY2FsbGJhY2tz
ID0gRmlsZVdyaXRlckNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjayk7CisgICAgUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IGNv
bnZlcnNpb25DYWxsYmFjayA9IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjazo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjayk7CisgICAgT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIGNvbnZl
cnNpb25DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNy
ZWF0ZVdyaXRlcihmaWxlV3JpdGVyLmdldCgpLCBwbGF0Zm9ybVBhdGgsIGNhbGxiYWNrcy5yZWxl
YXNlKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAJKHJl
dmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE5IEBACiAKICNpbmNsdWRlICJET01GaWxlUGF0
aC5oIgogI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5U3luYy5oIgorI2luY2x1ZGUgIkVycm9yQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUVudHJ5U3luYy5oIgor
I2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIKKyNpbmNs
dWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckJhc2VDYWxs
YmFjay5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJTeW5jLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRmlsZVdyaXRlckJhc2U7CisKIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5
bmM+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGUoRE9NRmlsZVN5c3RlbUJhc2UqIGZpbGVTeXN0
ZW0pCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxlU3lzdGVtU3luYyhmaWxlU3lz
dGVtLT5tX25hbWUsIGZpbGVTeXN0ZW0tPm1fYXN5bmNGaWxlU3lzdGVtLnJlbGVhc2UoKSkpOwpA
QCAtNjYsNiArNzQsOTQgQEAgUGFzc1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVtU3luYzo6Y3Jl
YQogICAgIHJldHVybiBGaWxlOjpjcmVhdGUocGxhdGZvcm1QYXRoKTsKIH0KIAorbmFtZXNwYWNl
IHsKKworY2xhc3MgUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNlaXZlRmls
ZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrKCkpOworICAgIH0KKworICAgIGJvb2wgaGFu
ZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyNpZm5kZWYg
TkRFQlVHCisgICAgICAgIG1fZmlsZVdyaXRlckJhc2UgPSBmaWxlV3JpdGVyQmFzZTsKKyNlbHNl
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZmlsZVdyaXRlckJhc2UsIGZpbGVXcml0ZXJCYXNlKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAg
IEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9maWxlV3JpdGVyQmFzZTsKKyAgICB9CisjZW5kaWYKK3ByaXZhdGU6CisgICAgUmVjZWl2ZUZp
bGVXcml0ZXJDYWxsYmFjaygpCisjaWZuZGVmIE5ERUJVRworICAgICAgICA6IG1fZmlsZVdyaXRl
ckJhc2UoMCkKKyNlbmRpZgorICAgIHsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEZpbGVX
cml0ZXJCYXNlKiBtX2ZpbGVXcml0ZXJCYXNlOworI2VuZGlmCit9OworCitjbGFzcyBMb2NhbEVy
cm9yQ2FsbGJhY2sgOiBwdWJsaWMgRXJyb3JDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TG9jYWxFcnJvckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbEVycm9yQ2FsbGJhY2soKSk7CisgICAgfQorCisgICAg
Ym9vbCBoYW5kbGVFdmVudChGaWxlRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgbV9lcnJv
ciA9IGVycm9yOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgRmlsZUVycm9yKiBl
cnJvcigpCisgICAgeworICAgICAgICByZXR1cm4gbV9lcnJvci5nZXQoKTsKKyAgICB9Citwcml2
YXRlOgorICAgIExvY2FsRXJyb3JDYWxsYmFjaygpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8
RmlsZUVycm9yPiBtX2Vycm9yOworfTsKKworfQorCitQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5j
PiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZp
bGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKGZpbGVFbnRyeSk7Cisg
ICAgZWMgPSAwOworCisgICAgU3RyaW5nIHBsYXRmb3JtUGF0aCA9IG1fYXN5bmNGaWxlU3lzdGVt
LT52aXJ0dWFsVG9QbGF0Zm9ybVBhdGgoZmlsZUVudHJ5LT5mdWxsUGF0aCgpKTsKKworICAgIFJl
ZlB0cjxGaWxlV3JpdGVyU3luYz4gZmlsZVdyaXRlciA9IEZpbGVXcml0ZXJTeW5jOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8UmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
ID0gUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjazo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExvY2Fs
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IExvY2FsRXJyb3JDYWxsYmFjazo6Y3JlYXRl
KCk7CisKKyAgICBPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZp
bGVXcml0ZXJCYXNlQ2FsbGJhY2tzOjpjcmVhdGUoZmlsZVdyaXRlciwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKTsKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlV3JpdGVyKGZp
bGVXcml0ZXIuZ2V0KCksIHBsYXRmb3JtUGF0aCwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7CisgICAg
aWYgKCFtX2FzeW5jRmlsZVN5c3RlbS0+d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSkgewor
ICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkFCT1JUX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIGlmIChlcnJvckNhbGxiYWNrLT5lcnJvcigpKSB7CisgICAgICAgIEFTU0VS
VCghc3VjY2Vzc0NhbGxiYWNrLT5maWxlV3JpdGVyQmFzZSgpKTsKKyAgICAgICAgZWMgPSBGaWxl
RXhjZXB0aW9uOjpFcnJvckNvZGVUb0V4Y2VwdGlvbkNvZGUoZXJyb3JDYWxsYmFjay0+ZXJyb3Io
KS0+Y29kZSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEFTU0VSVChzdWNjZXNz
Q2FsbGJhY2stPmZpbGVXcml0ZXJCYXNlKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxGaWxl
V3JpdGVyU3luYyo+KHN1Y2Nlc3NDYWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSkgPT0gZmlsZVdy
aXRlci5nZXQoKSk7CisgICAgcmV0dXJuIGZpbGVXcml0ZXI7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
U3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5o
CShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIERpcmVjdG9yeUVudHJ5U3luYzsKIGNsYXNzIEZpbGU7CiBjbGFzcyBGaWxlRW50cnlTeW5j
OworY2xhc3MgRmlsZVdyaXRlclN5bmM7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAK
QEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8RGlyZWN0b3J5RW50cnlT
eW5jPiByb290KCk7CiAKICAgICBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZUZpbGUoY29uc3QgRmls
ZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEZpbGVXcml0ZXJT
eW5jPiBjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsK
IAogcHJpdmF0ZToKICAgICBET01GaWxlU3lzdGVtU3luYyhjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVu
dHJ5U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMu
Y3BwCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKIAogI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyU3luYy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDYgKzQ4LDExIEBAIFBhc3NSZWZQdHI8RmlsZT4g
RmlsZUVudHJ5U3luYzo6ZmlsZShFeGMKICAgICByZXR1cm4gZmlsZXN5c3RlbSgpLT5jcmVhdGVG
aWxlKHRoaXMsIGVjKTsKIH0KIAorUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRmlsZUVudHJ5
U3luYzo6Y3JlYXRlV3JpdGVyKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBmaWxl
c3lzdGVtKCktPmNyZWF0ZVdyaXRlcih0aGlzLCBlYyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMuaAkocmV2aXNpb24g
NzIyMjYpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbGU7Citj
bGFzcyBGaWxlV3JpdGVyU3luYzsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNs
YXNzIEZpbGVFbnRyeVN5bmMgOiBwdWJsaWMgRW50cnlTeW5jIHsKIHB1YmxpYzoKQEAgLTUyLDYg
KzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICBQYXNzUmVmUHRyPEZpbGU+IGZpbGUoRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGNyZWF0ZVdyaXRlcihFeGNlcHRpb25Db2Rl
Jik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEVudHJ5U3luYzsKSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVh
cGkvRmlsZUVudHJ5U3luYy5pZGwJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBp
L0ZpbGVFbnRyeVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw1ICszNiw2IEBAIG1vZHVs
ZSBzdG9yYWdlIHsKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEZpbGVFbnRyeVN5bmMg
OiBFbnRyeVN5bmMgewogICAgICAgICBGaWxlIGZpbGUoKSByYWlzZXMgKEZpbGVFeGNlcHRpb24p
OworICAgICAgICBGaWxlV3JpdGVyU3luYyBjcmVhdGVXcml0ZXIoKSByYWlzZXMgKEZpbGVFeGNl
cHRpb24pOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVycm9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVFcnJvci5oCShyZXZpc2lvbiA3MjIyNikK
KysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWxlRXJyb3IgOiBwdWJsaWMgUmVm
Q291bnRlZDxGaWxlRXJyb3I+IHsKIHB1YmxpYzoKICAgICBlbnVtIEVycm9yQ29kZSB7CisgICAg
ICAgIE9LID0gMCwKICAgICAgICAgTk9UX0ZPVU5EX0VSUiA9IDEsCiAgICAgICAgIFNFQ1VSSVRZ
X0VSUiA9IDIsCiAgICAgICAgIEFCT1JUX0VSUiA9IDMsCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkv
RmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Zp
bGVTeXN0ZW1DYWxsYmFja3MuY3BwCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFw
aS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBA
QAogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgogI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgotI2luY2x1ZGUgIkZpbGVXcml0ZXIuaCIKLSNp
bmNsdWRlICJGaWxlV3JpdGVyQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZS5o
IgorI2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJNZXRhZGF0
YS5oIgogI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCkBAIC0yMTIsMjEgKzIxMiwyMSBAQCB2b2lkIE1ldGFkYXRhQ2FsbGJh
Y2tzOjpkaWRSZWFkTWV0YWRhdGEoCiAgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKIH0K
IAotLy8gRmlsZVdyaXRlckNhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLVBhc3NPd25QdHI8RmlsZVdyaXRlckNhbGxiYWNrcz4gRmlsZVdyaXRlckNhbGxiYWNrczo6
Y3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgUGFzc1JlZlB0cjxGaWxl
V3JpdGVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQorUGFzc093blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4gRmls
ZVdyaXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiBm
aWxlV3JpdGVyLCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRmlsZVdyaXRlckNhbGxiYWNrcyhmaWxlV3JpdGVyLCBzdWNjZXNz
Q2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2tzKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjaykpOwogfQogCi1GaWxlV3JpdGVyQ2FsbGJhY2tzOjpGaWxlV3JpdGVyQ2FsbGJhY2tzKFBh
c3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKQorRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tz
KFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+IGZpbGVXcml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdy
aXRlckJhc2VDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2spCiAgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJvckNh
bGxiYWNrKQogICAgICwgbV9maWxlV3JpdGVyKGZpbGVXcml0ZXIpCiAgICAgLCBtX3N1Y2Nlc3ND
YWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCiB7CiB9CiAKLXZvaWQgRmlsZVdyaXRlckNhbGxiYWNr
czo6ZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gYXN5bmNG
aWxlV3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQordm9pZCBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
czo6ZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gYXN5bmNG
aWxlV3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQogewogICAgIG1fZmlsZVdyaXRlci0+aW5pdGlh
bGl6ZShhc3luY0ZpbGVXcml0ZXIsIGxlbmd0aCk7CiAgICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNr
KQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCShyZXZpc2lvbiA3MjIy
NikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDggKzQ5LDggQEAgY2xhc3MgRW50cnlBcnJheTsKIGNsYXNzIEVudHJ5Q2FsbGJh
Y2s7CiBzdHJ1Y3QgRmlsZU1ldGFkYXRhOwogY2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOwotY2xh
c3MgRmlsZVdyaXRlcjsKLWNsYXNzIEZpbGVXcml0ZXJDYWxsYmFjazsKK2NsYXNzIEZpbGVXcml0
ZXJCYXNlOworY2xhc3MgRmlsZVdyaXRlckJhc2VDYWxsYmFjazsKIGNsYXNzIE1ldGFkYXRhQ2Fs
bGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgVm9pZENhbGxiYWNr
OwpAQCAtMTMzLDE1ICsxMzMsMTUgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TWV0YWRhdGFDYWxs
YmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CiB9OwogCi1jbGFzcyBGaWxlV3JpdGVyQ2FsbGJhY2tz
IDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKK2NsYXNzIEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQ2FsbGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0
cjxGaWxlV3JpdGVyPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+LCBQYXNzUmVmUHRy
PEVycm9yQ2FsbGJhY2s+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQmFzZUNh
bGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+LCBQYXNzUmVmUHRyPEZp
bGVXcml0ZXJCYXNlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRl
cj4sIGxvbmcgbG9uZyBsZW5ndGgpOwogCiBwcml2YXRlOgotICAgIEZpbGVXcml0ZXJDYWxsYmFj
a3MoUGFzc1JlZlB0cjxGaWxlV3JpdGVyPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAgICBSZWZQdHI8RmlsZVdyaXRlcj4gbV9m
aWxlV3JpdGVyOwotICAgIFJlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxi
YWNrOworICAgIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RmlsZVdyaXRlckJh
c2U+LCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+KTsKKyAgICBSZWZQdHI8RmlsZVdyaXRlckJhc2U+IG1fZmlsZVdyaXRlcjsKKyAg
ICBSZWZQdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CiB9Owog
CiBjbGFzcyBWb2lkQ2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsK
SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9m
aWxlYXBpL0ZpbGVXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGVXcml0ZXI6OkZpbGVXcml0ZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlz
KQorICAgIDogRmlsZVdyaXRlckJhc2UoKQorICAgICwgQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCiAgICAgLCBtX3JlYWR5U3RhdGUoSU5JVCkKLSAgICAsIG1fcG9zaXRpb24oMCkKICAg
ICAsIG1fc3RhcnRlZFdyaXRpbmcoZmFsc2UpCiAgICAgLCBtX2J5dGVzV3JpdHRlbigwKQogICAg
ICwgbV9ieXRlc1RvV3JpdGUoMCkKQEAgLTU0LDE0ICs1NCw2IEBAIEZpbGVXcml0ZXI6OkZpbGVX
cml0ZXIoU2NyaXB0RXhlY3V0aW9uQ28KIHsKIH0KIAotdm9pZCBGaWxlV3JpdGVyOjppbml0aWFs
aXplKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiB3cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgp
Ci17Ci0gICAgQVNTRVJUKCFtX3dyaXRlcik7Ci0gICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKLSAg
ICBtX3dyaXRlciA9IHdyaXRlcjsKLSAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLX0KLQogRmlsZVdy
aXRlcjo6fkZpbGVXcml0ZXIoKQogewogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gV1JJVElORykK
QEAgLTgxLDE1ICs3MywxNSBAQCBib29sIEZpbGVXcml0ZXI6OmNhblN1c3BlbmQoKSBjb25zdAog
CiB2b2lkIEZpbGVXcml0ZXI6OnN0b3AoKQogewotICAgIGlmIChtX3dyaXRlciAmJiBtX3JlYWR5
U3RhdGUgPT0gV1JJVElORykKLSAgICAgICAgbV93cml0ZXItPmFib3J0KCk7CisgICAgaWYgKHdy
aXRlcigpICYmIG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKQorICAgICAgICB3cml0ZXIoKS0+YWJv
cnQoKTsKICAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKICAgICBtX3JlYWR5U3RhdGUg
PSBET05FOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3dyaXRlcik7CisgICAgQVNTRVJUKHdyaXRlcigp
KTsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3Io
RmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0x
MDQsMTIgKzk2LDEyIEBAIHZvaWQgRmlsZVdyaXRlcjo6d3JpdGUoQmxvYiogZGF0YSwgRXhjZXAK
ICAgICBtX3N0YXJ0ZWRXcml0aW5nID0gZmFsc2U7CiAgICAgbV9ieXRlc1dyaXR0ZW4gPSAwOwog
ICAgIG1fYnl0ZXNUb1dyaXRlID0gZGF0YS0+c2l6ZSgpOwotICAgIG1fd3JpdGVyLT53cml0ZSht
X3Bvc2l0aW9uLCBkYXRhKTsKKyAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7
CiB9CiAKIHZvaWQgRmlsZVdyaXRlcjo6c2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3dyaXRlcik7CisgICAgQVNTRVJUKHdyaXRlcigp
KTsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3Io
RmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0x
MTcsMTggKzEwOSwxOCBAQCB2b2lkIEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBvc2l0aW9u
CiAKICAgICBtX2J5dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwotICAg
IGlmIChwb3NpdGlvbiA+IG1fbGVuZ3RoKQotICAgICAgICBwb3NpdGlvbiA9IG1fbGVuZ3RoOwor
ICAgIGlmIChwb3NpdGlvbiA+IGxlbmd0aCgpKQorICAgICAgICBwb3NpdGlvbiA9IGxlbmd0aCgp
OwogICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkKLSAgICAgICAgcG9zaXRpb24gPSBtX2xlbmd0
aCArIHBvc2l0aW9uOworICAgICAgICBwb3NpdGlvbiA9IGxlbmd0aCgpICsgcG9zaXRpb247CiAg
ICAgaWYgKHBvc2l0aW9uIDwgMCkKICAgICAgICAgcG9zaXRpb24gPSAwOwotICAgIG1fcG9zaXRp
b24gPSBwb3NpdGlvbjsKKyAgICBzZXRQb3NpdGlvbihwb3NpdGlvbik7CiB9CiAKIHZvaWQgRmls
ZVdyaXRlcjo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HIHx8IHBvc2l0aW9uIDwgMCkgewogICAgICAgICBzZXRF
cnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBlYyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTEzNywxOSArMTI5LDE5IEBAIHZvaWQgRmlsZVdyaXRlcjo6dHJ1bmNhdGUobG9uZyBsb25n
IHBvc2kKICAgICBtX2J5dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwog
ICAgIG1fdHJ1bmNhdGVMZW5ndGggPSBwb3NpdGlvbjsKLSAgICBtX3dyaXRlci0+dHJ1bmNhdGUo
cG9zaXRpb24pOworICAgIHdyaXRlcigpLT50cnVuY2F0ZShwb3NpdGlvbik7CiB9CiAKIHZvaWQg
RmlsZVdyaXRlcjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1fd3Jp
dGVyKTsKKyAgICBBU1NFUlQod3JpdGVyKCkpOwogICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gV1JJ
VElORykgewogICAgICAgICBzZXRFcnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBl
Yyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpj
cmVhdGUoRmlsZUVycm9yOjpBQk9SVF9FUlIpOwotICAgIG1fd3JpdGVyLT5hYm9ydCgpOworICAg
IHdyaXRlcigpLT5hYm9ydCgpOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZFdyaXRlKGxvbmcg
bG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKQEAgLTE2Miw5ICsxNTQsOSBAQCB2b2lkIEZpbGVX
cml0ZXI6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlCiAgICAgfQogICAgIG1fYnl0ZXNXcml0dGVu
ICs9IGJ5dGVzOwogICAgIEFTU0VSVCgobV9ieXRlc1dyaXR0ZW4gPT0gbV9ieXRlc1RvV3JpdGUp
IHx8ICFjb21wbGV0ZSk7Ci0gICAgbV9wb3NpdGlvbiArPSBieXRlczsKLSAgICBpZiAobV9wb3Np
dGlvbiA+IG1fbGVuZ3RoKQotICAgICAgICBtX2xlbmd0aCA9IG1fcG9zaXRpb247CisgICAgc2V0
UG9zaXRpb24ocG9zaXRpb24oKSArIGJ5dGVzKTsKKyAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0
aCgpKQorICAgICAgICBzZXRMZW5ndGgocG9zaXRpb24oKSk7CiAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5wcm9ncmVzc0V2ZW50KTsKICAgICBpZiAoY29tcGxldGUpIHsKICAgICAgICAgbV9i
bG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CkBAIC0xNzgsOSArMTcwLDkgQEAgdm9pZCBGaWxlV3Jp
dGVyOjpkaWRUcnVuY2F0ZSgpCiB7CiAgICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPj0gMCk7
CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwotICAgIG1fbGVu
Z3RoID0gbV90cnVuY2F0ZUxlbmd0aDsKLSAgICBpZiAobV9wb3NpdGlvbiA+IG1fbGVuZ3RoKQot
ICAgICAgICBtX3Bvc2l0aW9uID0gbV9sZW5ndGg7CisgICAgc2V0TGVuZ3RoKG1fdHJ1bmNhdGVM
ZW5ndGgpOworICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCisgICAgICAgIHNldFBvc2l0
aW9uKGxlbmd0aCgpKTsKICAgICBtX3RydW5jYXRlTGVuZ3RoID0gLTE7CiAgICAgZmlyZUV2ZW50
KGV2ZW50TmFtZXMoKS53cml0ZUV2ZW50KTsKICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwpJbmRl
eDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvRmlsZVdyaXRlci5oCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFwaS9G
aWxlV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDQ1ICszNCwzNiBAQAogI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkFzeW5jRmlsZVdyaXRlckNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSAiRmlsZVdyaXRlckJhc2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFzeW5jRmlsZVdyaXRlcjsKLWNsYXNzIEJsb2I7Ci1jbGFz
cyBGaWxlRXJyb3I7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi1jbGFzcyBGaWxl
V3JpdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlcj4sIHB1YmxpYyBBY3RpdmVET01P
YmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFzeW5jRmlsZVdyaXRlckNsaWVudCB7
CitjbGFzcyBGaWxlV3JpdGVyIDogcHVibGljIEZpbGVXcml0ZXJCYXNlLCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZpbGVXcml0ZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlV3JpdGVyKGNvbnRleHQp
KTsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemUoUGFzc093blB0cjxBc3luY0ZpbGVXcml0
ZXI+IHdyaXRlciwgbG9uZyBsb25nIGxlbmd0aCk7Ci0KICAgICBlbnVtIFJlYWR5U3RhdGUgewog
ICAgICAgICBJTklUID0gMCwKICAgICAgICAgV1JJVElORyA9IDEsCiAgICAgICAgIERPTkUgPSAy
CiAgICAgfTsKIAorICAgIC8vIEZpbGVXcml0ZXJCYXNlCiAgICAgdm9pZCB3cml0ZShCbG9iKiBk
YXRhLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgdm9pZCBzZWVrKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0
aCwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMp
OwogCisgICAgdm9pZCBhYm9ydChFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgUmVhZHlTdGF0ZSBy
ZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9CiAgICAgRmlsZUVycm9y
KiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0KLSAgICBsb25nIGxvbmcg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgbG9uZyBsb25nIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAvLyBBc3luY0ZpbGVXcml0
ZXJDbGllbnQKICAgICB2b2lkIGRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0
ZSk7CkBAIC04OCw4ICs3OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZpbGVXcml0ZXIqIHRv
RmlsZVdyaXRlcigpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVE
T01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgdXNpbmcgUmVmQ291
bnRlZDxGaWxlV3JpdGVyPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVdyaXRlcj46
OmRlcmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OjpyZWY7CisgICAg
dXNpbmcgUmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZT46OmRlcmVmOwogCiAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUih3cml0ZXN0YXJ0KTsKICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKQEAgLTEwMyw4ICs5NCw2IEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyKCk7CiAKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZD
b3VudGVkPEZpbGVXcml0ZXI+OwotCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZv
aWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZl
bnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KQEAgLTExNywxMCArMTA2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFJlZlB0cjxGaWxlRXJyb3I+IG1fZXJyb3I7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwotICAgIE93blB0cjxBc3luY0ZpbGVXcml0ZXI+IG1fd3JpdGVyOwogICAg
IFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGxvbmcgbG9uZyBtX3Bvc2l0aW9uOwotICAg
IGxvbmcgbG9uZyBtX2xlbmd0aDsKICAgICBib29sIG1fc3RhcnRlZFdyaXRpbmc7CiAgICAgbG9u
ZyBsb25nIG1fYnl0ZXNXcml0dGVuOwogICAgIGxvbmcgbG9uZyBtX2J5dGVzVG9Xcml0ZTsKSW5k
ZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
ZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVk
ZSAiRmlsZVdyaXRlckJhc2UuaCIKKworI2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlci5oIgorI2lu
Y2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmls
ZUVycm9yLmgiCisjaW5jbHVkZSAiRmlsZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlByb2dyZXNz
RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWxlV3JpdGVyQmFzZTo6fkZpbGVX
cml0ZXJCYXNlKCkKK3sKK30KKwordm9pZCBGaWxlV3JpdGVyQmFzZTo6aW5pdGlhbGl6ZShQYXNz
T3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gd3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAg
IEFTU0VSVCghbV93cml0ZXIpOworICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CisgICAgbV93cml0
ZXIgPSB3cml0ZXI7CisgICAgbV9sZW5ndGggPSBsZW5ndGg7Cit9CisKK0ZpbGVXcml0ZXJCYXNl
OjpGaWxlV3JpdGVyQmFzZSgpCisgICAgOiBtX3Bvc2l0aW9uKDApCit7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdl
YkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyQmFzZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9maWxlYXBpL0Zp
bGVXcml0ZXJCYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxl
V3JpdGVyQmFzZV9oCisjZGVmaW5lIEZpbGVXcml0ZXJCYXNlX2gKKworI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlckNsaWVudC5oIgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNGaWxl
V3JpdGVyOworY2xhc3MgQmxvYjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgRmlsZVdyaXRlckJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZT4sIHB1
YmxpYyBBc3luY0ZpbGVXcml0ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkZpbGVX
cml0ZXJCYXNlKCk7CisgICAgdm9pZCBpbml0aWFsaXplKFBhc3NPd25QdHI8QXN5bmNGaWxlV3Jp
dGVyPiB3cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgdm9pZCB3cml0ZShCbG9iKiBk
YXRhLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdm9pZCBzZWVrKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0
aCwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgbG9uZyBsb25nIHBvc2l0aW9uKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uOworICAgIH0KKyAgICBsb25nIGxvbmcg
bGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICBGaWxlV3JpdGVyQmFzZSgpOworICAgIEFzeW5jRmlsZVdyaXRlciog
d3JpdGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyaXRlci5nZXQoKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFBvc2l0aW9uKGxvbmcgbG9uZyBwb3NpdGlvbikKKyAgICB7CisgICAgICAg
IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9CisgICAgdm9pZCBzZXRMZW5ndGgobG9uZyBs
b25nIGxlbmd0aCkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZT47
CisKKyAgICBPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiBtX3dyaXRlcjsKKyAgICBsb25nIGxvbmcg
bV9wb3NpdGlvbjsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNlbmRpZiAvLyBG
aWxlV3JpdGVyQmFzZV9oCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxi
YWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxs
YmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxlV3JpdGVyQmFz
ZUNhbGxiYWNrX2gKKyNkZWZpbmUgRmlsZVdyaXRlckJhc2VDYWxsYmFja19oCisKKyNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbGVXcml0ZXJCYXNlOworCitjbGFzcyBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4g
eworcHVibGljOgorICAgIHZpcnR1YWwgfkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2soKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqKSA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjZW5kaWYg
Ly8gRmlsZVdyaXRlckJhc2VDYWxsYmFja19oCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdy
aXRlclN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3lu
Yy5jcHAJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNDcgKzM0LDExMyBAQAogCiAjaW5jbHVkZSAiRmls
ZVdyaXRlclN5bmMuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZpbGVXcml0ZXJT
eW5jOjp3cml0ZShCbG9iKiwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgotfQotCi12b2lkIEZpbGVXcml0
ZXJTeW5jOjpzZWVrKGxvbmcgbG9uZywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgotfQotCi12b2lkIEZp
bGVXcml0ZXJTeW5jOjp0cnVuY2F0ZShsb25nIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKQotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KLX0K
LQotYm9vbCBGaWxlV3JpdGVyU3luYzo6Y2FuU3VzcGVuZCgpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IEl0IGlzIG5vdCBjdXJyZW50bHkgcG9zc2libGUgdG8gc3VzcGVuZCBhIEZpbGVXcml0ZXJT
eW5jLCBzbyBwYWdlcyB3aXRoIEZpbGVXcml0ZXIgY2FuIG5vdCBnbyBpbnRvIHBhZ2UgY2FjaGUu
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZpbGVXcml0ZXJTeW5jOjpoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpOwotfQotCi12b2lkIEZpbGVXcml0ZXJTeW5jOjpzdG9wKCkKLXsKLX0KKyNp
bmNsdWRlICJBc3luY0ZpbGVXcml0ZXIuaCIKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAi
RmlsZUV4Y2VwdGlvbi5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbGVXcml0ZXJTeW5j
OjpGaWxlV3JpdGVyU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCi0gICAgLCBtX3Bvc2l0aW9uKDApCi0gICAg
LCBtX2xlbmd0aCgwKQordm9pZCBGaWxlV3JpdGVyU3luYzo6d3JpdGUoQmxvYiogZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQVNTRVJUKHdyaXRlcigpKTsKKyAgICBlYyA9IDA7Cisg
ICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6VFlQRV9NSVNNQVRD
SF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcmVwYXJlRm9yV3JpdGUoKTsK
KyAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7CisgICAgd3JpdGVyKCktPndh
aXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCk7CisgICAgQVNTRVJUKG1fY29tcGxldGUpOworICAg
IGVjID0gRmlsZUV4Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKG1fZXJyb3IpOwor
ICAgIGlmICghZWMpIHsKKyAgICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb24oKSArIGRhdGEtPnNp
emUoKSk7CisgICAgICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCisgICAgICAgICAgICBz
ZXRMZW5ndGgocG9zaXRpb24oKSk7CisgICAgfQorfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjpz
ZWVrKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJU
KHdyaXRlcigpKTsKKyAgICBlYyA9IDA7CisgICAgaWYgKHBvc2l0aW9uID4gbGVuZ3RoKCkpCisg
ICAgICAgIHBvc2l0aW9uID0gbGVuZ3RoKCk7CisgICAgZWxzZSBpZiAocG9zaXRpb24gPCAwKQor
ICAgICAgICBwb3NpdGlvbiA9IGxlbmd0aCgpICsgcG9zaXRpb247CisgICAgaWYgKHBvc2l0aW9u
IDwgMCkKKyAgICAgICAgcG9zaXRpb24gPSAwOworICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKTsK
K30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6dHJ1bmNhdGUobG9uZyBsb25nIG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKHdyaXRlcigpKTsKKyAgICBlYyA9IDA7Cisg
ICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpJTlZBTElE
X1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwcmVwYXJlRm9yV3JpdGUo
KTsKKyAgICB3cml0ZXIoKS0+dHJ1bmNhdGUob2Zmc2V0KTsKKyAgICB3cml0ZXIoKS0+d2FpdEZv
ck9wZXJhdGlvblRvQ29tcGxldGUoKTsKKyAgICBBU1NFUlQobV9jb21wbGV0ZSk7CisgICAgZWMg
PSBGaWxlRXhjZXB0aW9uOjpFcnJvckNvZGVUb0V4Y2VwdGlvbkNvZGUobV9lcnJvcik7CisgICAg
aWYgKG1fZXJyb3IgPT0gRmlsZUVycm9yOjpPSykgeworICAgICAgICBpZiAob2Zmc2V0IDwgcG9z
aXRpb24oKSkKKyAgICAgICAgICAgIHNldFBvc2l0aW9uKG9mZnNldCk7CisgICAgICAgIHNldExl
bmd0aChvZmZzZXQpOworICAgIH0KK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6ZGlkV3JpdGUo
bG9uZyBsb25nIGJ5dGVzLCBib29sIGNvbXBsZXRlKQoreworICAgIEFTU0VSVChtX2Vycm9yID09
IEZpbGVFcnJvcjo6T0spOworICAgIEFTU0VSVCghbV9jb21wbGV0ZSk7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fY29tcGxldGUgPSBjb21wbGV0ZTsKKyNlbHNlCisgICAgQVNTRVJUX1VOVVNFRChj
b21wbGV0ZSwgY29tcGxldGUpOworI2VuZGlmCit9CisKK3ZvaWQgRmlsZVdyaXRlclN5bmM6OmRp
ZFRydW5jYXRlKCkKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJyb3I6Ok9LKTsKKyAg
ICBBU1NFUlQoIW1fY29tcGxldGUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbXBsZXRlID0g
Y29tcGxldGU7CisjZW5kaWYKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6ZGlkRmFpbChGaWxl
RXJyb3I6OkVycm9yQ29kZSBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJy
b3I6Ok9LKTsKKyAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgQVNTRVJUKCFtX2NvbXBsZXRlKTsK
KyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21wbGV0ZSA9IGNvbXBsZXRlOworI2VuZGlmCit9CisK
K0ZpbGVXcml0ZXJTeW5jOjpGaWxlV3JpdGVyU3luYygpCisgICAgOiBGaWxlV3JpdGVyQmFzZSgp
CisgICAgLCBtX2Vycm9yKEZpbGVFcnJvcjo6T0spCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9j
b21wbGV0ZSh0cnVlKQorI2VuZGlmCit7Cit9CisKK3ZvaWQgRmlsZVdyaXRlclN5bmM6OnByZXBh
cmVGb3JXcml0ZSgpCit7CisgICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6T0s7CisjaWZuZGVmIE5E
RUJVRworICAgIG1fY29tcGxldGUgPSBmYWxzZTsKKyNlbmRpZgogfQogCi0KIEZpbGVXcml0ZXJT
eW5jOjp+RmlsZVdyaXRlclN5bmMoKQogewogfQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmgJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDkgQEAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJGaWxlRXJyb3IuaCIK
KyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MywzNyArNDQsMzIgQEAgY2xhc3MgQmxvYjsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKIAotLy8gRklYTUU6IFRoaXMgaXMgYW4gZW1wdHkgc2hlbGwgd2FpdGluZyBmb3IgaW1wbGVt
ZW50YXRpb24uCi1jbGFzcyBGaWxlV3JpdGVyU3luYyA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVX
cml0ZXJTeW5jPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitjbGFzcyBGaWxlV3JpdGVyU3lu
YyA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RmlsZVdyaXRlclN5bmM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBjcmVhdGUoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlV3JpdGVyU3luYyhjb250ZXh0KSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZVdyaXRlclN5bmMoKSk7CiAgICAgfQogICAg
IHZpcnR1YWwgfkZpbGVXcml0ZXJTeW5jKCk7CiAKKyAgICAvLyBGaWxlV3JpdGVyQmFzZQogICAg
IHZvaWQgd3JpdGUoQmxvYiogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2Vlayhs
b25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHRydW5jYXRlKGxv
bmcgbG9uZyBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIGxvbmcgbG9uZyBwb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAg
IHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhc1Bl
bmRpbmdBY3Rpdml0eSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7Ci0KLSAgICB1
c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXJTeW5jPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50
ZWQ8RmlsZVdyaXRlclN5bmM+OjpkZXJlZjsKKyAgICAvLyBBc3luY0ZpbGVXcml0ZXJDbGllbnQs
IHZpYSBGaWxlV3JpdGVyQmFzZQorICAgIHZvaWQgZGlkV3JpdGUobG9uZyBsb25nIGJ5dGVzLCBi
b29sIGNvbXBsZXRlKTsKKyAgICB2b2lkIGRpZFRydW5jYXRlKCk7CisgICAgdm9pZCBkaWRGYWls
KEZpbGVFcnJvcjo6RXJyb3JDb2RlKTsKIAogcHJpdmF0ZToKLSAgICBGaWxlV3JpdGVyU3luYyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0KLSAgICBmcmllbmQgY2xhc3MgUmVmQ291bnRlZDxG
aWxlV3JpdGVyU3luYz47CisgICAgRmlsZVdyaXRlclN5bmMoKTsKKyAgICB2b2lkIHByZXBhcmVG
b3JXcml0ZSgpOwogCi0gICAgbG9uZyBsb25nIG1fcG9zaXRpb247Ci0gICAgbG9uZyBsb25nIG1f
bGVuZ3RoOworICAgIEZpbGVFcnJvcjo6RXJyb3JDb2RlIG1fZXJyb3I7CisjaWZuZGVmIE5ERUJV
RworICAgIGJvb2wgbV9jb21wbGV0ZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaWRsCShyZXZpc2lvbiA3MjIyNikK
KysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDYgQEAKIG1vZHVsZSBodG1sIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBD
b25kaXRpb25hbD1GSUxFX1NZU1RFTSwKLSAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dAogICAgIF0gRmlsZVdyaXRlclN5bmMgewogICAgICAgICAvLyBzeW5jaHJvbm91cyB3
cml0ZS9tb2RpZnkgbWV0aG9kcwogICAgICAgICB2b2lkIHdyaXRlKGluIEJsb2IgZGF0YSkgcmFp
c2VzIChGaWxlRXhjZXB0aW9uKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74690</attachid>
            <date>2010-11-23 13:23:44 -0800</date>
            <delta_ts>2010-11-23 17:29:18 -0800</delta_ts>
            <desc>Fixed 3 typo-level bugs that killed the debug build.</desc>
            <filename>webcore_sync0.patch</filename>
            <type>text/plain</type>
            <size>43960</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjU3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjIgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgRmlsZVdyaXRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTM5CisKKyAgICAgICAgVGVzdHMgdG8gZm9sbG93IGluIGEgc2Vw
YXJhdGUgQ0wsIG9uY2UgdGhlIHRlc3QgZnJhbWV3b3JrIGluIDQ3NjgwIGdvZXMgaW4uCisKKyAg
ICAgICAgQnVpbGQgZmlsZSBjaGFuZ2VzIHRvIGFkZCBGaWxlV3JpdGVyQmFzZSBhbmQgRmlsZVdy
aXRlckJhc2VDYWxsYmFjay4KKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgdHVybiBvdXQgdG8gbmVlZCB0byBiZSBhbiBBY3RpdmVET01PYmplY3Qu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisKKyAgICAg
ICAgQWRkZWQgbmV3IEFzeW5jRmlsZVdyaXRlcjo6d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUg
dG8gZW5hYmxlCisgICAgICAgIHN5bmNocm9ub3VzIGNhbGxzLgorICAgICAgICAqIGZpbGVhcGkv
QXN5bmNGaWxlV3JpdGVyLmg6CisKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8gZ2V0IGEgRmlsZVN5
c3RlbVN5bmMuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6CisgICAg
ICAgICogZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVF
bnRyeVN5bmMuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuaWRsOgorCisgICAg
ICAgIEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yIE9LLCByYXRoZXIgdGhhbiBqdXN0IGhhdmluZyAw
IGV2ZXJ5d2hlcmUuCisgICAgICAgICogZmlsZWFwaS9GaWxlRXJyb3IuaDoKKworICAgICAgICBU
dXJuZWQgRmlsZVdyaXRlckNhbGxiYWNrIGludG8gRmlsZVdyaXRlckJhc2VDYWxsYmFjay4KKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAgICAgICAqIGZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorCisgICAgICAgIFJlZmFjdG9yZWQgb3V0IGEgY29t
bW9uIGJhc2UgY2xhc3MsIEZpbGVXcml0ZXJCYXNlLCBmb3IgRmlsZVdyaXRlciBhbmQKKyAgICAg
ICAgRmlsZVdyaXRlclN5bmMuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyLmNwcDoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0
ZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDogQWRkZWQu
CisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHA6CisgICAgICAgICogZmlsZWFw
aS9GaWxlV3JpdGVyU3luYy5oOgorCisgICAgICAgIFNtYWxsIHR3ZWFrcyB0byBkZWFsIHdpdGgg
dGhlIGJhc2UgY2xhc3MgcmVmYWN0b3JpbmcuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmg6CisKKyAgICAg
ICAgUmVtb3ZlZCAiQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsIGFzIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCBpdC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmlkbDoKKwogMjAxMC0xMS0yMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiA3MjIyNikKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTE2NzgsNiArMTY3OCw3IEBAIGlmIChFTkFCTEVfRklMRV9TWVNURU0pCiAgICAgICAgIGZpbGVh
cGkvRmlsZUVudHJ5U3luYy5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tz
LmNwcAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwCisgICAgICAgIGZpbGVhcGkvRmls
ZVdyaXRlckJhc2UuY3BwCiAgICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwCiAgICAg
ICAgIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcAogICAgICAgICBwbGF0Zm9ybS9Bc3luY0Zp
bGVTeXN0ZW0uY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQzNCw5ICsxNDM0LDEyIEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuY3BwIFwKIAlXZWJDb3Jl
L2ZpbGVhcGkvRmlsZVRocmVhZC5oIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZFRhc2su
aCBcCisJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBcCiAJV2ViQ29y
ZS9maWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFjay5oIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdy
aXRlci5jcHAgXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmggXAorCVdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAgXAorCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFz
ZS5oIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwIFwKIAlXZWJDb3JlL2Zp
bGVhcGkvRmlsZVdyaXRlclN5bmMuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZsYWdzLmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MjEsNiArMTUyMSw5IEBACiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwJywKICAgICAgICAg
ICAgICdmaWxlYXBpL0ZpbGVXcml0ZXIuaCcsCisgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3Jp
dGVyQmFzZS5jcHAnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaCcsCisg
ICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgnLAogICAgICAgICAg
ICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2ZpbGVhcGkv
RmlsZVdyaXRlclN5bmMuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTMwNDgsNiArMzA0OCw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9G
SUxFX1NZU1RFTT0xKSAKICAgICAgICAgZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2suaCBcCiAg
ICAgICAgIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oIFwKICAgICAgICAgZmlsZWFwaS9G
aWxlV3JpdGVyLmggXAorICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmggXAorICAgICAg
ICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBcCiAgICAgICAgIGZpbGVhcGkvRmls
ZVdyaXRlckNhbGxiYWNrLmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJDbGllbnQuaCBc
CiAgICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaCBcCkBAIC0zMDgwLDYgKzMwODIsNyBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRklMRV9TWVNURU09MSkgCiAgICAgICAgIGZpbGVh
cGkvRmlsZUVudHJ5U3luYy5jcHAgXAogICAgICAgICBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFj
a3MuY3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcCBcCisgICAgICAgIGZpbGVh
cGkvRmlsZVdyaXRlckJhc2UuY3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5j
cHAgXAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTUzMzEsNiArNTUzMzEsMTcgQEAKIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxG
aWxlV3JpdGVyQmFzZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEZpbGVXcml0ZXJCYXNlLmgiDQorCQkJCT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckJhc2VDYWxsYmFj
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZmlsZWFwaVxGaWxlV3JpdGVyQ2FsbGJhY2suaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NzIyMjYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtOTc0LDYgKzk3NCw5IEBACiAJCTQ2NzAwRUQwMTI3Qjk2Q0IwMEY1RDVE
NiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMu
Y3BwICovOyB9OwogCQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNG
MTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICovOyB9OwogCQk0Njg5RjFBRjEy
NjdCQUUxMDBFOEQzODAgLyogRmlsZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Njg5RjFBRTEyNjdCQUUxMDBFOEQzODAgLyogRmlsZU1l
dGFkYXRhLmggKi87IH07CisJCTQ2QkM3MjRFMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVy
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3BwICovOyB9OworCQk0
NkJDNzI0RjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZS5oICovOyB9OworCQk0NkJDNzI1MDEyOUIxMDRDMDA3MUMwN0Ug
LyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDZCQzcyNEQxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJC
YXNlQ2FsbGJhY2suaCAqLzsgfTsKIAkJNDZCRDE2RTMwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVD
dXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NkJEMTZFMjBCMjc5NDczMDAxRjA4MzkgLyogbm9uZUN1cnNvci5wbmcgKi87IH07CiAJCTQ2
RDRGMjQ5MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZENEYyNDYwQUY5N0U4MTAwMzUzODVB
IC8qIGNlbGxDdXJzb3IucG5nICovOyB9OwogCQk0NkQ0RjI0QTBBRjk3RTgxMDAzNTM4NUEgLyog
Y29udGV4dE1lbnVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NkQ0RjI0NzBBRjk3RTgxMDAzNTM4NUEgLyogY29udGV4dE1lbnVDdXJz
b3IucG5nICovOyB9OwpAQCAtNzA2NCw2ICs3MDY3LDkgQEAKIAkJNDY3MDBFQ0UxMjdCOTZDQjAw
RjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5
bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjcwMEVDRjEyN0I5NkNCMDBG
NUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRmlsZVdyaXRlclN5bmMuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY4OUYxQUUxMjY3QkFFMTAwRThEMzgwIC8qIEZp
bGVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlTWV0YWRh
dGEuaDsgcGF0aCA9IHBsYXRmb3JtL0ZpbGVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVdyaXRlckJhc2UuY3Bw
OyBwYXRoID0gZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZS5oOyBwYXRoID0g
ZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NkJDNzI0RDEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmg7IHBh
dGggPSBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDZCRDE2RTIwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVDdXJzb3IucG5nICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5n
OyBwYXRoID0gbm9uZUN1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2
RDRGMjQ2MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGNlbGxD
dXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkQ0RjI0NzBBRjk3RTgx
MDAzNTM4NUEgLyogY29udGV4dE1lbnVDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gY29udGV4dE1lbnVD
dXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxMTAsNiArMTUxMTYs
OSBAQAogCQkJCTk3NkQ2QzcwMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkVGFzay5oICov
LAogCQkJCTk3NkQ2QzcxMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlV3JpdGVyLmNwcCAqLywKIAkJ
CQk5NzZENkM3MjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVdyaXRlci5oICovLAorCQkJCTQ2QkM3
MjRCMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAgKi8sCisJCQkJNDZCQzcy
NEMxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmggKi8sCisJCQkJNDZCQzcyNEQx
MjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCAqLywKIAkJCQk4OTND
NDdBNjEyMzg5MDhCMDAyQjNEODYgLyogRmlsZVdyaXRlckNhbGxiYWNrLmggKi8sCiAJCQkJNDY3
MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLywKIAkJCQk0Njcw
MEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLywKQEAgLTIxMzMwLDYg
KzIxMzM5LDggQEAKIAkJCQkwODI1MDkzOTEyOEJENEQ4MDBFMkVEOEUgLyogU1ZHQW5pbWF0ZWRU
cmFuc2Zvcm1MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzODg4RjZFRjEyOEM5ODg5MDAwQ0E4
RTAgLyogSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0I5
MkQ0RjEyOTM1NTBCMDBDODM4N0YgLyogRm9udEJhc2VsaW5lLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0NkJDNzI0RjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQ2QkM3MjUwMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZUNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIxMzg5LDcgKzIxNDAwLDYgQEAKIAkJCWlzYSA9IFBC
WFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAw
OEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29y
ZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxv
cG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJ
CQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTIzODk2LDYgKzIzOTA2LDcgQEAK
IAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTlCM0M1QTEyOEM2NDFFMDBFNzI2QzIgLyogR3JhcGhpY3NMYXllck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTM4ODhGNkVFMTI4Qzk4ODkwMDBDQThFMCAvKiBJbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDZCQzcyNEUxMjlCMTA0
QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA3MjIy
NikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtp
bmcgY29weSkKQEAgLTI1NzIsNyArMjU3Miw2IEBAIHN1YiBJc0FjdGl2ZURvbVR5cGUKICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCUmVxdWVzdCI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUg
ZXEgIkZpbGVSZWFkZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJGaWxlV3JpdGVyIjsK
LSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRlclN5bmMiOwogICAgIHJldHVybiAw
OwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlV3JpdGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRlci5oCShyZXZpc2lvbiA3MjIyNikK
KysrIFdlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZShsb25nIGxvbmcg
cG9zaXRpb24sIEJsb2IqIGRhdGEpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdHJ1bmNhdGUobG9u
ZyBsb25nIGxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSAvLyBOZWVkZWQgZm9yIEZp
bGVXcml0ZXJTeW5jIG9ubHkuCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
fTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAJKHJl
dmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRmlsZUVudHJ5LmgiCiAjaW5j
bHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIkZpbGVXcml0ZXIuaCIKKyNp
bmNsdWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZVdyaXRlckNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGFDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTc1LDYgKzc2LDI5IEBAIHZvaWQgRE9NRmlsZVN5c3Rl
bTo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJv
eWVkKCk7CiB9CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxs
YmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVm
UHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJhY2spCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjayhjYWxsYmFjaykpOworICAg
IH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJCYXNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHN0YXRpY19j
YXN0PEZpbGVXcml0ZXIqPihmaWxlV3JpdGVyQmFzZSkpOworICAgIH0KK3ByaXZhdGU6CisgICAg
Q29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrKFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNr
PiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICB9
CisgICAgUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gbV9jYWxsYmFjazsKK307CisKK30KKwog
dm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50
cnksIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKICAgICBBU1NFUlQoZmlsZUVu
dHJ5KTsKQEAgLTgyLDcgKzEwNiw4IEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVy
KGNvbnN0IEYKICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0gbV9hc3luY0ZpbGVTeXN0ZW0tPnZp
cnR1YWxUb1BsYXRmb3JtUGF0aChmaWxlRW50cnktPmZ1bGxQYXRoKCkpOwogCiAgICAgUmVmUHRy
PEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLSAgICBPd25QdHI8RmlsZVdyaXRlckNhbGxiYWNrcz4gY2FsbGJhY2tz
ID0gRmlsZVdyaXRlckNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjayk7CisgICAgUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IGNv
bnZlcnNpb25DYWxsYmFjayA9IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjazo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjayk7CisgICAgT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIGNvbnZl
cnNpb25DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNy
ZWF0ZVdyaXRlcihmaWxlV3JpdGVyLmdldCgpLCBwbGF0Zm9ybVBhdGgsIGNhbGxiYWNrcy5yZWxl
YXNlKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAJKHJl
dmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE5IEBACiAKICNpbmNsdWRlICJET01GaWxlUGF0
aC5oIgogI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5U3luYy5oIgorI2luY2x1ZGUgIkVycm9yQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUVudHJ5U3luYy5oIgor
I2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIKKyNpbmNs
dWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckJhc2VDYWxs
YmFjay5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJTeW5jLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRmlsZVdyaXRlckJhc2U7CisKIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5
bmM+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGUoRE9NRmlsZVN5c3RlbUJhc2UqIGZpbGVTeXN0
ZW0pCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxlU3lzdGVtU3luYyhmaWxlU3lz
dGVtLT5tX25hbWUsIGZpbGVTeXN0ZW0tPm1fYXN5bmNGaWxlU3lzdGVtLnJlbGVhc2UoKSkpOwpA
QCAtNjYsNiArNzQsOTQgQEAgUGFzc1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVtU3luYzo6Y3Jl
YQogICAgIHJldHVybiBGaWxlOjpjcmVhdGUocGxhdGZvcm1QYXRoKTsKIH0KIAorbmFtZXNwYWNl
IHsKKworY2xhc3MgUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNlaXZlRmls
ZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrKCkpOworICAgIH0KKworICAgIGJvb2wgaGFu
ZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyNpZm5kZWYg
TkRFQlVHCisgICAgICAgIG1fZmlsZVdyaXRlckJhc2UgPSBmaWxlV3JpdGVyQmFzZTsKKyNlbHNl
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZmlsZVdyaXRlckJhc2UsIGZpbGVXcml0ZXJCYXNlKTsK
KyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAg
IEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9maWxlV3JpdGVyQmFzZTsKKyAgICB9CisjZW5kaWYKK3ByaXZhdGU6CisgICAgUmVjZWl2ZUZp
bGVXcml0ZXJDYWxsYmFjaygpCisjaWZuZGVmIE5ERUJVRworICAgICAgICA6IG1fZmlsZVdyaXRl
ckJhc2UoMCkKKyNlbmRpZgorICAgIHsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEZpbGVX
cml0ZXJCYXNlKiBtX2ZpbGVXcml0ZXJCYXNlOworI2VuZGlmCit9OworCitjbGFzcyBMb2NhbEVy
cm9yQ2FsbGJhY2sgOiBwdWJsaWMgRXJyb3JDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TG9jYWxFcnJvckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbEVycm9yQ2FsbGJhY2soKSk7CisgICAgfQorCisgICAg
Ym9vbCBoYW5kbGVFdmVudChGaWxlRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgbV9lcnJv
ciA9IGVycm9yOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgRmlsZUVycm9yKiBl
cnJvcigpCisgICAgeworICAgICAgICByZXR1cm4gbV9lcnJvci5nZXQoKTsKKyAgICB9Citwcml2
YXRlOgorICAgIExvY2FsRXJyb3JDYWxsYmFjaygpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8
RmlsZUVycm9yPiBtX2Vycm9yOworfTsKKworfQorCitQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5j
PiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZp
bGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKGZpbGVFbnRyeSk7Cisg
ICAgZWMgPSAwOworCisgICAgU3RyaW5nIHBsYXRmb3JtUGF0aCA9IG1fYXN5bmNGaWxlU3lzdGVt
LT52aXJ0dWFsVG9QbGF0Zm9ybVBhdGgoZmlsZUVudHJ5LT5mdWxsUGF0aCgpKTsKKworICAgIFJl
ZlB0cjxGaWxlV3JpdGVyU3luYz4gZmlsZVdyaXRlciA9IEZpbGVXcml0ZXJTeW5jOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8UmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
ID0gUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjazo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExvY2Fs
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IExvY2FsRXJyb3JDYWxsYmFjazo6Y3JlYXRl
KCk7CisKKyAgICBPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZp
bGVXcml0ZXJCYXNlQ2FsbGJhY2tzOjpjcmVhdGUoZmlsZVdyaXRlciwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKTsKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlV3JpdGVyKGZp
bGVXcml0ZXIuZ2V0KCksIHBsYXRmb3JtUGF0aCwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7CisgICAg
aWYgKCFtX2FzeW5jRmlsZVN5c3RlbS0+d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSkgewor
ICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkFCT1JUX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIGlmIChlcnJvckNhbGxiYWNrLT5lcnJvcigpKSB7CisgICAgICAgIEFTU0VS
VCghc3VjY2Vzc0NhbGxiYWNrLT5maWxlV3JpdGVyQmFzZSgpKTsKKyAgICAgICAgZWMgPSBGaWxl
RXhjZXB0aW9uOjpFcnJvckNvZGVUb0V4Y2VwdGlvbkNvZGUoZXJyb3JDYWxsYmFjay0+ZXJyb3Io
KS0+Y29kZSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEFTU0VSVChzdWNjZXNz
Q2FsbGJhY2stPmZpbGVXcml0ZXJCYXNlKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxGaWxl
V3JpdGVyU3luYyo+KHN1Y2Nlc3NDYWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSkgPT0gZmlsZVdy
aXRlci5nZXQoKSk7CisgICAgcmV0dXJuIGZpbGVXcml0ZXI7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
U3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5o
CShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIERpcmVjdG9yeUVudHJ5U3luYzsKIGNsYXNzIEZpbGU7CiBjbGFzcyBGaWxlRW50cnlTeW5j
OworY2xhc3MgRmlsZVdyaXRlclN5bmM7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAK
QEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8RGlyZWN0b3J5RW50cnlT
eW5jPiByb290KCk7CiAKICAgICBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZUZpbGUoY29uc3QgRmls
ZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEZpbGVXcml0ZXJT
eW5jPiBjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsK
IAogcHJpdmF0ZToKICAgICBET01GaWxlU3lzdGVtU3luYyhjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVu
dHJ5U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMu
Y3BwCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKIAogI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyU3luYy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDYgKzQ4LDExIEBAIFBhc3NSZWZQdHI8RmlsZT4g
RmlsZUVudHJ5U3luYzo6ZmlsZShFeGMKICAgICByZXR1cm4gZmlsZXN5c3RlbSgpLT5jcmVhdGVG
aWxlKHRoaXMsIGVjKTsKIH0KIAorUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRmlsZUVudHJ5
U3luYzo6Y3JlYXRlV3JpdGVyKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBmaWxl
c3lzdGVtKCktPmNyZWF0ZVdyaXRlcih0aGlzLCBlYyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMuaAkocmV2aXNpb24g
NzIyMjYpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbGU7Citj
bGFzcyBGaWxlV3JpdGVyU3luYzsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNs
YXNzIEZpbGVFbnRyeVN5bmMgOiBwdWJsaWMgRW50cnlTeW5jIHsKIHB1YmxpYzoKQEAgLTUyLDYg
KzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICBQYXNzUmVmUHRyPEZpbGU+IGZpbGUoRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGNyZWF0ZVdyaXRlcihFeGNlcHRpb25Db2Rl
Jik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEVudHJ5U3luYzsKSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVh
cGkvRmlsZUVudHJ5U3luYy5pZGwJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBp
L0ZpbGVFbnRyeVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw1ICszNiw2IEBAIG1vZHVs
ZSBzdG9yYWdlIHsKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEZpbGVFbnRyeVN5bmMg
OiBFbnRyeVN5bmMgewogICAgICAgICBGaWxlIGZpbGUoKSByYWlzZXMgKEZpbGVFeGNlcHRpb24p
OworICAgICAgICBGaWxlV3JpdGVyU3luYyBjcmVhdGVXcml0ZXIoKSByYWlzZXMgKEZpbGVFeGNl
cHRpb24pOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVycm9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVFcnJvci5oCShyZXZpc2lvbiA3MjIyNikK
KysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWxlRXJyb3IgOiBwdWJsaWMgUmVm
Q291bnRlZDxGaWxlRXJyb3I+IHsKIHB1YmxpYzoKICAgICBlbnVtIEVycm9yQ29kZSB7CisgICAg
ICAgIE9LID0gMCwKICAgICAgICAgTk9UX0ZPVU5EX0VSUiA9IDEsCiAgICAgICAgIFNFQ1VSSVRZ
X0VSUiA9IDIsCiAgICAgICAgIEFCT1JUX0VSUiA9IDMsCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkv
RmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Zp
bGVTeXN0ZW1DYWxsYmFja3MuY3BwCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFw
aS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBA
QAogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgogI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgotI2luY2x1ZGUgIkZpbGVXcml0ZXIuaCIKLSNp
bmNsdWRlICJGaWxlV3JpdGVyQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZS5o
IgorI2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJNZXRhZGF0
YS5oIgogI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCkBAIC0yMTIsMjEgKzIxMiwyMSBAQCB2b2lkIE1ldGFkYXRhQ2FsbGJh
Y2tzOjpkaWRSZWFkTWV0YWRhdGEoCiAgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKIH0K
IAotLy8gRmlsZVdyaXRlckNhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLVBhc3NPd25QdHI8RmlsZVdyaXRlckNhbGxiYWNrcz4gRmlsZVdyaXRlckNhbGxiYWNrczo6
Y3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgUGFzc1JlZlB0cjxGaWxl
V3JpdGVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQorUGFzc093blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4gRmls
ZVdyaXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiBm
aWxlV3JpdGVyLCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRmlsZVdyaXRlckNhbGxiYWNrcyhmaWxlV3JpdGVyLCBzdWNjZXNz
Q2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2tzKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjaykpOwogfQogCi1GaWxlV3JpdGVyQ2FsbGJhY2tzOjpGaWxlV3JpdGVyQ2FsbGJhY2tzKFBh
c3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKQorRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tz
KFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+IGZpbGVXcml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdy
aXRlckJhc2VDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2spCiAgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJvckNh
bGxiYWNrKQogICAgICwgbV9maWxlV3JpdGVyKGZpbGVXcml0ZXIpCiAgICAgLCBtX3N1Y2Nlc3ND
YWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCiB7CiB9CiAKLXZvaWQgRmlsZVdyaXRlckNhbGxiYWNr
czo6ZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gYXN5bmNG
aWxlV3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQordm9pZCBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
czo6ZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gYXN5bmNG
aWxlV3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQogewogICAgIG1fZmlsZVdyaXRlci0+aW5pdGlh
bGl6ZShhc3luY0ZpbGVXcml0ZXIsIGxlbmd0aCk7CiAgICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNr
KQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCShyZXZpc2lvbiA3MjIy
NikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDggKzQ5LDggQEAgY2xhc3MgRW50cnlBcnJheTsKIGNsYXNzIEVudHJ5Q2FsbGJh
Y2s7CiBzdHJ1Y3QgRmlsZU1ldGFkYXRhOwogY2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOwotY2xh
c3MgRmlsZVdyaXRlcjsKLWNsYXNzIEZpbGVXcml0ZXJDYWxsYmFjazsKK2NsYXNzIEZpbGVXcml0
ZXJCYXNlOworY2xhc3MgRmlsZVdyaXRlckJhc2VDYWxsYmFjazsKIGNsYXNzIE1ldGFkYXRhQ2Fs
bGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgVm9pZENhbGxiYWNr
OwpAQCAtMTMzLDE1ICsxMzMsMTUgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TWV0YWRhdGFDYWxs
YmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CiB9OwogCi1jbGFzcyBGaWxlV3JpdGVyQ2FsbGJhY2tz
IDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKK2NsYXNzIEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQ2FsbGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0
cjxGaWxlV3JpdGVyPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+LCBQYXNzUmVmUHRy
PEVycm9yQ2FsbGJhY2s+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQmFzZUNh
bGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+LCBQYXNzUmVmUHRyPEZp
bGVXcml0ZXJCYXNlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRl
cj4sIGxvbmcgbG9uZyBsZW5ndGgpOwogCiBwcml2YXRlOgotICAgIEZpbGVXcml0ZXJDYWxsYmFj
a3MoUGFzc1JlZlB0cjxGaWxlV3JpdGVyPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAgICBSZWZQdHI8RmlsZVdyaXRlcj4gbV9m
aWxlV3JpdGVyOwotICAgIFJlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxi
YWNrOworICAgIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RmlsZVdyaXRlckJh
c2U+LCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+KTsKKyAgICBSZWZQdHI8RmlsZVdyaXRlckJhc2U+IG1fZmlsZVdyaXRlcjsKKyAg
ICBSZWZQdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CiB9Owog
CiBjbGFzcyBWb2lkQ2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsK
SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9m
aWxlYXBpL0ZpbGVXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGVXcml0ZXI6OkZpbGVXcml0ZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlz
KQorICAgIDogRmlsZVdyaXRlckJhc2UoKQorICAgICwgQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCiAgICAgLCBtX3JlYWR5U3RhdGUoSU5JVCkKLSAgICAsIG1fcG9zaXRpb24oMCkKICAg
ICAsIG1fc3RhcnRlZFdyaXRpbmcoZmFsc2UpCiAgICAgLCBtX2J5dGVzV3JpdHRlbigwKQogICAg
ICwgbV9ieXRlc1RvV3JpdGUoMCkKQEAgLTU0LDE0ICs1NCw2IEBAIEZpbGVXcml0ZXI6OkZpbGVX
cml0ZXIoU2NyaXB0RXhlY3V0aW9uQ28KIHsKIH0KIAotdm9pZCBGaWxlV3JpdGVyOjppbml0aWFs
aXplKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiB3cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgp
Ci17Ci0gICAgQVNTRVJUKCFtX3dyaXRlcik7Ci0gICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKLSAg
ICBtX3dyaXRlciA9IHdyaXRlcjsKLSAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLX0KLQogRmlsZVdy
aXRlcjo6fkZpbGVXcml0ZXIoKQogewogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gV1JJVElORykK
QEAgLTgxLDE1ICs3MywxNSBAQCBib29sIEZpbGVXcml0ZXI6OmNhblN1c3BlbmQoKSBjb25zdAog
CiB2b2lkIEZpbGVXcml0ZXI6OnN0b3AoKQogewotICAgIGlmIChtX3dyaXRlciAmJiBtX3JlYWR5
U3RhdGUgPT0gV1JJVElORykKLSAgICAgICAgbV93cml0ZXItPmFib3J0KCk7CisgICAgaWYgKHdy
aXRlcigpICYmIG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKQorICAgICAgICB3cml0ZXIoKS0+YWJv
cnQoKTsKICAgICBtX2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKICAgICBtX3JlYWR5U3RhdGUg
PSBET05FOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3dyaXRlcik7CisgICAgQVNTRVJUKHdyaXRlcigp
KTsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3Io
RmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0x
MDQsMTIgKzk2LDEyIEBAIHZvaWQgRmlsZVdyaXRlcjo6d3JpdGUoQmxvYiogZGF0YSwgRXhjZXAK
ICAgICBtX3N0YXJ0ZWRXcml0aW5nID0gZmFsc2U7CiAgICAgbV9ieXRlc1dyaXR0ZW4gPSAwOwog
ICAgIG1fYnl0ZXNUb1dyaXRlID0gZGF0YS0+c2l6ZSgpOwotICAgIG1fd3JpdGVyLT53cml0ZSht
X3Bvc2l0aW9uLCBkYXRhKTsKKyAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7
CiB9CiAKIHZvaWQgRmlsZVdyaXRlcjo6c2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3dyaXRlcik7CisgICAgQVNTRVJUKHdyaXRlcigp
KTsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3Io
RmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0x
MTcsMTggKzEwOSwxOCBAQCB2b2lkIEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBvc2l0aW9u
CiAKICAgICBtX2J5dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwotICAg
IGlmIChwb3NpdGlvbiA+IG1fbGVuZ3RoKQotICAgICAgICBwb3NpdGlvbiA9IG1fbGVuZ3RoOwor
ICAgIGlmIChwb3NpdGlvbiA+IGxlbmd0aCgpKQorICAgICAgICBwb3NpdGlvbiA9IGxlbmd0aCgp
OwogICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkKLSAgICAgICAgcG9zaXRpb24gPSBtX2xlbmd0
aCArIHBvc2l0aW9uOworICAgICAgICBwb3NpdGlvbiA9IGxlbmd0aCgpICsgcG9zaXRpb247CiAg
ICAgaWYgKHBvc2l0aW9uIDwgMCkKICAgICAgICAgcG9zaXRpb24gPSAwOwotICAgIG1fcG9zaXRp
b24gPSBwb3NpdGlvbjsKKyAgICBzZXRQb3NpdGlvbihwb3NpdGlvbik7CiB9CiAKIHZvaWQgRmls
ZVdyaXRlcjo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HIHx8IHBvc2l0aW9uIDwgMCkgewogICAgICAgICBzZXRF
cnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBlYyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTEzNywxOSArMTI5LDE5IEBAIHZvaWQgRmlsZVdyaXRlcjo6dHJ1bmNhdGUobG9uZyBsb25n
IHBvc2kKICAgICBtX2J5dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwog
ICAgIG1fdHJ1bmNhdGVMZW5ndGggPSBwb3NpdGlvbjsKLSAgICBtX3dyaXRlci0+dHJ1bmNhdGUo
cG9zaXRpb24pOworICAgIHdyaXRlcigpLT50cnVuY2F0ZShwb3NpdGlvbik7CiB9CiAKIHZvaWQg
RmlsZVdyaXRlcjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1fd3Jp
dGVyKTsKKyAgICBBU1NFUlQod3JpdGVyKCkpOwogICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gV1JJ
VElORykgewogICAgICAgICBzZXRFcnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBl
Yyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpj
cmVhdGUoRmlsZUVycm9yOjpBQk9SVF9FUlIpOwotICAgIG1fd3JpdGVyLT5hYm9ydCgpOworICAg
IHdyaXRlcigpLT5hYm9ydCgpOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZFdyaXRlKGxvbmcg
bG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKQEAgLTE2Miw5ICsxNTQsOSBAQCB2b2lkIEZpbGVX
cml0ZXI6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlCiAgICAgfQogICAgIG1fYnl0ZXNXcml0dGVu
ICs9IGJ5dGVzOwogICAgIEFTU0VSVCgobV9ieXRlc1dyaXR0ZW4gPT0gbV9ieXRlc1RvV3JpdGUp
IHx8ICFjb21wbGV0ZSk7Ci0gICAgbV9wb3NpdGlvbiArPSBieXRlczsKLSAgICBpZiAobV9wb3Np
dGlvbiA+IG1fbGVuZ3RoKQotICAgICAgICBtX2xlbmd0aCA9IG1fcG9zaXRpb247CisgICAgc2V0
UG9zaXRpb24ocG9zaXRpb24oKSArIGJ5dGVzKTsKKyAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0
aCgpKQorICAgICAgICBzZXRMZW5ndGgocG9zaXRpb24oKSk7CiAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5wcm9ncmVzc0V2ZW50KTsKICAgICBpZiAoY29tcGxldGUpIHsKICAgICAgICAgbV9i
bG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CkBAIC0xNzgsOSArMTcwLDkgQEAgdm9pZCBGaWxlV3Jp
dGVyOjpkaWRUcnVuY2F0ZSgpCiB7CiAgICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPj0gMCk7
CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwotICAgIG1fbGVu
Z3RoID0gbV90cnVuY2F0ZUxlbmd0aDsKLSAgICBpZiAobV9wb3NpdGlvbiA+IG1fbGVuZ3RoKQot
ICAgICAgICBtX3Bvc2l0aW9uID0gbV9sZW5ndGg7CisgICAgc2V0TGVuZ3RoKG1fdHJ1bmNhdGVM
ZW5ndGgpOworICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCisgICAgICAgIHNldFBvc2l0
aW9uKGxlbmd0aCgpKTsKICAgICBtX3RydW5jYXRlTGVuZ3RoID0gLTE7CiAgICAgZmlyZUV2ZW50
KGV2ZW50TmFtZXMoKS53cml0ZUV2ZW50KTsKICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwpJbmRl
eDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvRmlsZVdyaXRlci5oCShyZXZpc2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFwaS9G
aWxlV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDQ1ICszNCwzNiBAQAogI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkFzeW5jRmlsZVdyaXRlckNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSAiRmlsZVdyaXRlckJhc2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFzeW5jRmlsZVdyaXRlcjsKLWNsYXNzIEJsb2I7Ci1jbGFz
cyBGaWxlRXJyb3I7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi1jbGFzcyBGaWxl
V3JpdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlcj4sIHB1YmxpYyBBY3RpdmVET01P
YmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFzeW5jRmlsZVdyaXRlckNsaWVudCB7
CitjbGFzcyBGaWxlV3JpdGVyIDogcHVibGljIEZpbGVXcml0ZXJCYXNlLCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZpbGVXcml0ZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlV3JpdGVyKGNvbnRleHQp
KTsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemUoUGFzc093blB0cjxBc3luY0ZpbGVXcml0
ZXI+IHdyaXRlciwgbG9uZyBsb25nIGxlbmd0aCk7Ci0KICAgICBlbnVtIFJlYWR5U3RhdGUgewog
ICAgICAgICBJTklUID0gMCwKICAgICAgICAgV1JJVElORyA9IDEsCiAgICAgICAgIERPTkUgPSAy
CiAgICAgfTsKIAorICAgIC8vIEZpbGVXcml0ZXJCYXNlCiAgICAgdm9pZCB3cml0ZShCbG9iKiBk
YXRhLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgdm9pZCBzZWVrKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0
aCwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMp
OwogCisgICAgdm9pZCBhYm9ydChFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgUmVhZHlTdGF0ZSBy
ZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9CiAgICAgRmlsZUVycm9y
KiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0KLSAgICBsb25nIGxvbmcg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgbG9uZyBsb25nIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAvLyBBc3luY0ZpbGVXcml0
ZXJDbGllbnQKICAgICB2b2lkIGRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0
ZSk7CkBAIC04OCw4ICs3OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZpbGVXcml0ZXIqIHRv
RmlsZVdyaXRlcigpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVE
T01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgdXNpbmcgUmVmQ291
bnRlZDxGaWxlV3JpdGVyPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVdyaXRlcj46
OmRlcmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OjpyZWY7CisgICAg
dXNpbmcgUmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZT46OmRlcmVmOwogCiAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUih3cml0ZXN0YXJ0KTsKICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKQEAgLTEwMyw4ICs5NCw2IEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyKCk7CiAKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZD
b3VudGVkPEZpbGVXcml0ZXI+OwotCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZv
aWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZl
bnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KQEAgLTExNywxMCArMTA2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFJlZlB0cjxGaWxlRXJyb3I+IG1fZXJyb3I7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwotICAgIE93blB0cjxBc3luY0ZpbGVXcml0ZXI+IG1fd3JpdGVyOwogICAg
IFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIGxvbmcgbG9uZyBtX3Bvc2l0aW9uOwotICAg
IGxvbmcgbG9uZyBtX2xlbmd0aDsKICAgICBib29sIG1fc3RhcnRlZFdyaXRpbmc7CiAgICAgbG9u
ZyBsb25nIG1fYnl0ZXNXcml0dGVuOwogICAgIGxvbmcgbG9uZyBtX2J5dGVzVG9Xcml0ZTsKSW5k
ZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
ZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVk
ZSAiRmlsZVdyaXRlckJhc2UuaCIKKworI2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlci5oIgorI2lu
Y2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmls
ZUVycm9yLmgiCisjaW5jbHVkZSAiRmlsZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlByb2dyZXNz
RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWxlV3JpdGVyQmFzZTo6fkZpbGVX
cml0ZXJCYXNlKCkKK3sKK30KKwordm9pZCBGaWxlV3JpdGVyQmFzZTo6aW5pdGlhbGl6ZShQYXNz
T3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gd3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAg
IEFTU0VSVCghbV93cml0ZXIpOworICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CisgICAgbV93cml0
ZXIgPSB3cml0ZXI7CisgICAgbV9sZW5ndGggPSBsZW5ndGg7Cit9CisKK0ZpbGVXcml0ZXJCYXNl
OjpGaWxlV3JpdGVyQmFzZSgpCisgICAgOiBtX3Bvc2l0aW9uKDApCit7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdl
YkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyQmFzZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9maWxlYXBpL0Zp
bGVXcml0ZXJCYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxl
V3JpdGVyQmFzZV9oCisjZGVmaW5lIEZpbGVXcml0ZXJCYXNlX2gKKworI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlckNsaWVudC5oIgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNGaWxl
V3JpdGVyOworY2xhc3MgQmxvYjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgRmlsZVdyaXRlckJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZT4sIHB1
YmxpYyBBc3luY0ZpbGVXcml0ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkZpbGVX
cml0ZXJCYXNlKCk7CisgICAgdm9pZCBpbml0aWFsaXplKFBhc3NPd25QdHI8QXN5bmNGaWxlV3Jp
dGVyPiB3cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgdm9pZCB3cml0ZShCbG9iKiBk
YXRhLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdm9pZCBzZWVrKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0
aCwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgbG9uZyBsb25nIHBvc2l0aW9uKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uOworICAgIH0KKyAgICBsb25nIGxvbmcg
bGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICBGaWxlV3JpdGVyQmFzZSgpOworICAgIEFzeW5jRmlsZVdyaXRlciog
d3JpdGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyaXRlci5nZXQoKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFBvc2l0aW9uKGxvbmcgbG9uZyBwb3NpdGlvbikKKyAgICB7CisgICAgICAg
IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9CisgICAgdm9pZCBzZXRMZW5ndGgobG9uZyBs
b25nIGxlbmd0aCkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZT47
CisKKyAgICBPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiBtX3dyaXRlcjsKKyAgICBsb25nIGxvbmcg
bV9wb3NpdGlvbjsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNlbmRpZiAvLyBG
aWxlV3JpdGVyQmFzZV9oCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxi
YWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxs
YmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxlV3JpdGVyQmFz
ZUNhbGxiYWNrX2gKKyNkZWZpbmUgRmlsZVdyaXRlckJhc2VDYWxsYmFja19oCisKKyNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbGVXcml0ZXJCYXNlOworCitjbGFzcyBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4g
eworcHVibGljOgorICAgIHZpcnR1YWwgfkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2soKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqKSA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjZW5kaWYg
Ly8gRmlsZVdyaXRlckJhc2VDYWxsYmFja19oCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdy
aXRlclN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3lu
Yy5jcHAJKHJldmlzaW9uIDcyMjI2KQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNDcgKzM0LDExMyBAQAogCiAjaW5jbHVkZSAiRmls
ZVdyaXRlclN5bmMuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZpbGVXcml0ZXJT
eW5jOjp3cml0ZShCbG9iKiwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgotfQotCi12b2lkIEZpbGVXcml0
ZXJTeW5jOjpzZWVrKGxvbmcgbG9uZywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgotfQotCi12b2lkIEZp
bGVXcml0ZXJTeW5jOjp0cnVuY2F0ZShsb25nIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKQotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KLX0K
LQotYm9vbCBGaWxlV3JpdGVyU3luYzo6Y2FuU3VzcGVuZCgpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IEl0IGlzIG5vdCBjdXJyZW50bHkgcG9zc2libGUgdG8gc3VzcGVuZCBhIEZpbGVXcml0ZXJT
eW5jLCBzbyBwYWdlcyB3aXRoIEZpbGVXcml0ZXIgY2FuIG5vdCBnbyBpbnRvIHBhZ2UgY2FjaGUu
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZpbGVXcml0ZXJTeW5jOjpoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpOwotfQotCi12b2lkIEZpbGVXcml0ZXJTeW5jOjpzdG9wKCkKLXsKLX0KKyNp
bmNsdWRlICJBc3luY0ZpbGVXcml0ZXIuaCIKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAi
RmlsZUV4Y2VwdGlvbi5oIgogCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbGVXcml0ZXJTeW5j
OjpGaWxlV3JpdGVyU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCi0gICAgLCBtX3Bvc2l0aW9uKDApCi0gICAg
LCBtX2xlbmd0aCgwKQordm9pZCBGaWxlV3JpdGVyU3luYzo6d3JpdGUoQmxvYiogZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQVNTRVJUKHdyaXRlcigpKTsKKyAgICBlYyA9IDA7Cisg
ICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6VFlQRV9NSVNNQVRD
SF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcmVwYXJlRm9yV3JpdGUoKTsK
KyAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7CisgICAgd3JpdGVyKCktPndh
aXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCk7CisgICAgQVNTRVJUKG1fY29tcGxldGUpOworICAg
IGVjID0gRmlsZUV4Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKG1fZXJyb3IpOwor
ICAgIGlmICghZWMpIHsKKyAgICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb24oKSArIGRhdGEtPnNp
emUoKSk7CisgICAgICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCisgICAgICAgICAgICBz
ZXRMZW5ndGgocG9zaXRpb24oKSk7CisgICAgfQorfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjpz
ZWVrKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJU
KHdyaXRlcigpKTsKKyAgICBlYyA9IDA7CisgICAgaWYgKHBvc2l0aW9uID4gbGVuZ3RoKCkpCisg
ICAgICAgIHBvc2l0aW9uID0gbGVuZ3RoKCk7CisgICAgZWxzZSBpZiAocG9zaXRpb24gPCAwKQor
ICAgICAgICBwb3NpdGlvbiA9IGxlbmd0aCgpICsgcG9zaXRpb247CisgICAgaWYgKHBvc2l0aW9u
IDwgMCkKKyAgICAgICAgcG9zaXRpb24gPSAwOworICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKTsK
K30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6dHJ1bmNhdGUobG9uZyBsb25nIG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKHdyaXRlcigpKTsKKyAgICBlYyA9IDA7Cisg
ICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpJTlZBTElE
X1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwcmVwYXJlRm9yV3JpdGUo
KTsKKyAgICB3cml0ZXIoKS0+dHJ1bmNhdGUob2Zmc2V0KTsKKyAgICB3cml0ZXIoKS0+d2FpdEZv
ck9wZXJhdGlvblRvQ29tcGxldGUoKTsKKyAgICBBU1NFUlQobV9jb21wbGV0ZSk7CisgICAgZWMg
PSBGaWxlRXhjZXB0aW9uOjpFcnJvckNvZGVUb0V4Y2VwdGlvbkNvZGUobV9lcnJvcik7CisgICAg
aWYgKG1fZXJyb3IgPT0gRmlsZUVycm9yOjpPSykgeworICAgICAgICBpZiAob2Zmc2V0IDwgcG9z
aXRpb24oKSkKKyAgICAgICAgICAgIHNldFBvc2l0aW9uKG9mZnNldCk7CisgICAgICAgIHNldExl
bmd0aChvZmZzZXQpOworICAgIH0KK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6ZGlkV3JpdGUo
bG9uZyBsb25nIGJ5dGVzLCBib29sIGNvbXBsZXRlKQoreworICAgIEFTU0VSVChtX2Vycm9yID09
IEZpbGVFcnJvcjo6T0spOworICAgIEFTU0VSVCghbV9jb21wbGV0ZSk7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fY29tcGxldGUgPSBjb21wbGV0ZTsKKyNlbHNlCisgICAgQVNTRVJUX1VOVVNFRChj
b21wbGV0ZSwgY29tcGxldGUpOworI2VuZGlmCit9CisKK3ZvaWQgRmlsZVdyaXRlclN5bmM6OmRp
ZFRydW5jYXRlKCkKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJyb3I6Ok9LKTsKKyAg
ICBBU1NFUlQoIW1fY29tcGxldGUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbXBsZXRlID0g
dHJ1ZTsKKyNlbmRpZgorfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjpkaWRGYWlsKEZpbGVFcnJv
cjo6RXJyb3JDb2RlIGVycm9yKQoreworICAgIEFTU0VSVChtX2Vycm9yID09IEZpbGVFcnJvcjo6
T0spOworICAgIG1fZXJyb3IgPSBlcnJvcjsKKyAgICBBU1NFUlQoIW1fY29tcGxldGUpOworI2lm
bmRlZiBOREVCVUcKKyAgICBtX2NvbXBsZXRlID0gdHJ1ZTsKKyNlbmRpZgorfQorCitGaWxlV3Jp
dGVyU3luYzo6RmlsZVdyaXRlclN5bmMoKQorICAgIDogRmlsZVdyaXRlckJhc2UoKQorICAgICwg
bV9lcnJvcihGaWxlRXJyb3I6Ok9LKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fY29tcGxldGUo
dHJ1ZSkKKyNlbmRpZgoreworfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjpwcmVwYXJlRm9yV3Jp
dGUoKQoreworICAgIG1fZXJyb3IgPSBGaWxlRXJyb3I6Ok9LOworI2lmbmRlZiBOREVCVUcKKyAg
ICBtX2NvbXBsZXRlID0gZmFsc2U7CisjZW5kaWYKIH0KIAotCiBGaWxlV3JpdGVyU3luYzo6fkZp
bGVXcml0ZXJTeW5jKCkKIHsKIH0KSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3lu
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5oCShyZXZp
c2lvbiA3MjIyNikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw4ICszNCw5IEBACiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRmlsZUVycm9yLmgiCisjaW5jbHVk
ZSAiRmlsZVdyaXRlckJhc2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsMzcg
KzQ0LDMyIEBAIGNsYXNzIEJsb2I7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLS8v
IEZJWE1FOiBUaGlzIGlzIGFuIGVtcHR5IHNoZWxsIHdhaXRpbmcgZm9yIGltcGxlbWVudGF0aW9u
LgotY2xhc3MgRmlsZVdyaXRlclN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlV3JpdGVyU3lu
Yz4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgRmlsZVdyaXRlclN5bmMgOiBwdWJs
aWMgRmlsZVdyaXRlckJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVX
cml0ZXJTeW5jPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRmlsZVdyaXRlclN5bmMoY29udGV4dCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVXcml0ZXJTeW5jKCkpOwogICAgIH0KICAgICB2aXJ0dWFs
IH5GaWxlV3JpdGVyU3luYygpOwogCisgICAgLy8gRmlsZVdyaXRlckJhc2UKICAgICB2b2lkIHdy
aXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNlZWsobG9uZyBsb25n
IHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcg
bGVuZ3RoLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBsb25nIGxvbmcgcG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFs
IGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotCi0gICAgdXNpbmcgUmVm
Q291bnRlZDxGaWxlV3JpdGVyU3luYz46OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVX
cml0ZXJTeW5jPjo6ZGVyZWY7CisgICAgLy8gQXN5bmNGaWxlV3JpdGVyQ2xpZW50LCB2aWEgRmls
ZVdyaXRlckJhc2UKKyAgICB2b2lkIGRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21w
bGV0ZSk7CisgICAgdm9pZCBkaWRUcnVuY2F0ZSgpOworICAgIHZvaWQgZGlkRmFpbChGaWxlRXJy
b3I6OkVycm9yQ29kZSk7CiAKIHByaXZhdGU6Ci0gICAgRmlsZVdyaXRlclN5bmMoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOwotCi0gICAgZnJpZW5kIGNsYXNzIFJlZkNvdW50ZWQ8RmlsZVdyaXRl
clN5bmM+OworICAgIEZpbGVXcml0ZXJTeW5jKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yV3JpdGUo
KTsKIAotICAgIGxvbmcgbG9uZyBtX3Bvc2l0aW9uOwotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsK
KyAgICBGaWxlRXJyb3I6OkVycm9yQ29kZSBtX2Vycm9yOworI2lmbmRlZiBOREVCVUcKKyAgICBi
b29sIG1fY29tcGxldGU7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmlkbAkocmV2aXNpb24gNzIyMjYpCisrKyBXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw2IEBACiBtb2R1bGUgaHRtbCB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9u
YWw9RklMRV9TWVNURU0sCi0gICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQK
ICAgICBdIEZpbGVXcml0ZXJTeW5jIHsKICAgICAgICAgLy8gc3luY2hyb25vdXMgd3JpdGUvbW9k
aWZ5IG1ldGhvZHMKICAgICAgICAgdm9pZCB3cml0ZShpbiBCbG9iIGRhdGEpIHJhaXNlcyAoRmls
ZUV4Y2VwdGlvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74708</attachid>
            <date>2010-11-23 17:29:18 -0800</date>
            <delta_ts>2010-11-23 18:10:28 -0800</delta_ts>
            <desc>Merged out to resolve conflicts.  No functional changes.</desc>
            <filename>webcore_sync1.patch</filename>
            <type>text/plain</type>
            <size>44123</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjMgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgRmlsZVdyaXRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTM5CisKKyAgICAgICAgVGVzdHMgdG8gZm9sbG93IGluIGEgc2Vw
YXJhdGUgQ0wsIG9uY2UgdGhlIHRlc3QgZnJhbWV3b3JrIGluIDQ3NjgwIGdvZXMgaW4uCisKKyAg
ICAgICAgQnVpbGQgZmlsZSBjaGFuZ2VzIHRvIGFkZCBGaWxlV3JpdGVyQmFzZSBhbmQgRmlsZVdy
aXRlckJhc2VDYWxsYmFjay4KKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgdHVybiBvdXQgdG8gbmVlZCB0byBiZSBhbiBBY3RpdmVET01PYmplY3Qu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisKKyAgICAg
ICAgQWRkZWQgbmV3IEFzeW5jRmlsZVdyaXRlcjo6d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUg
dG8gZW5hYmxlCisgICAgICAgIHN5bmNocm9ub3VzIGNhbGxzLgorICAgICAgICAqIGZpbGVhcGkv
QXN5bmNGaWxlV3JpdGVyLmg6CisKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8gZ2V0IGEgRmlsZVN5
c3RlbVN5bmMuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6CisgICAg
ICAgICogZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVF
bnRyeVN5bmMuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuaWRsOgorCisgICAg
ICAgIEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yIE9LLCByYXRoZXIgdGhhbiBqdXN0IGhhdmluZyAw
IGV2ZXJ5d2hlcmUuCisgICAgICAgICogZmlsZWFwaS9GaWxlRXJyb3IuaDoKKworICAgICAgICBU
dXJuZWQgRmlsZVdyaXRlckNhbGxiYWNrIGludG8gRmlsZVdyaXRlckJhc2VDYWxsYmFjay4KKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAgICAgICAqIGZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorCisgICAgICAgIFJlZmFjdG9yZWQgb3V0IGEgY29t
bW9uIGJhc2UgY2xhc3MsIEZpbGVXcml0ZXJCYXNlLCBmb3IgRmlsZVdyaXRlciBhbmQKKyAgICAg
ICAgRmlsZVdyaXRlclN5bmMuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyLmNwcDoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0
ZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDogQWRkZWQu
CisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHA6CisgICAgICAgICogZmlsZWFw
aS9GaWxlV3JpdGVyU3luYy5oOgorCisgICAgICAgIFNtYWxsIHR3ZWFrcyB0byBkZWFsIHdpdGgg
dGhlIGJhc2UgY2xhc3MgcmVmYWN0b3JpbmcuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmg6CisKKyAgICAg
ICAgUmVtb3ZlZCAiQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsIGFzIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCBpdC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmlkbDoKKwogMjAxMC0xMS0yMyAgQ2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWls
bG9yeUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xNjk1LDYgKzE2OTUsNyBAQCBpZiAoRU5BQkxFX0ZJTEVfU1lTVEVN
KQogICAgICAgICBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwCiAgICAgICAgIGZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAorICAg
ICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0
ZXJTeW5jLmNwcAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKICAgICAgICAg
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3MjYyOCkK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsOSArMTQ2
OCwxMiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFk
LmNwcCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaCBcCiAJV2ViQ29yZS9maWxlYXBp
L0ZpbGVUaHJlYWRUYXNrLmggXAorCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxi
YWNrLmggXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQ2FsbGJhY2suaCBcCiAJV2ViQ29y
ZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3BwIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5o
IFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwIFwKKwlXZWJDb3JlL2ZpbGVh
cGkvRmlsZVdyaXRlckJhc2UuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmNw
cCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmggXAogCVdlYkNvcmUvZmlsZWFw
aS9GbGFncy5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM1LDYgKzE1MzUsOSBAQAogICAgICAgICAgICAgJ2Zp
bGVhcGkvRmlsZVRocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVy
LmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVyLmgnLAorICAgICAgICAgICAg
J2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwJywKKyAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVX
cml0ZXJCYXNlLmgnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxsYmFj
ay5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFjay5oJywKICAgICAg
ICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFw
aS9GaWxlV3JpdGVyU3luYy5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL1dl
YkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zMDY1LDYgKzMwNjUsOCBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfRklMRV9TWVNURU09MSkgCiAgICAgICAgIGZpbGVhcGkvRmlsZVN5c3Rl
bUNhbGxiYWNrLmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCBcCiAg
ICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlci5oIFwKKyAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVy
QmFzZS5oIFwKKyAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmggXAogICAg
ICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFjay5oIFwKICAgICAgICAgZmlsZWFwaS9GaWxl
V3JpdGVyQ2xpZW50LmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmggXApAQCAt
MzA5Nyw2ICszMDk5LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lTVEVNPTEp
IAogICAgICAgICBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwIFwKICAgICAgICAgZmlsZWFwaS9G
aWxlU3lzdGVtQ2FsbGJhY2tzLmNwcCBcCiAgICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlci5jcHAg
XAorICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcCBcCiAgICAgICAgIGZpbGVhcGkv
RmlsZVdyaXRlclN5bmMuY3BwIFwKICAgICAgICAgZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5MTQ3LDYgKzQ5
MTQ3LDE3IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckJhc2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxGaWxlV3JpdGVyQmFzZS5o
Ig0KKwkJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2suaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckNhbGxiYWNrLmgiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk3NSw2ICs5NzUsOSBAQAogCQk0NjcwMEVE
MDEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY3MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8q
IEZpbGVXcml0ZXJTeW5jLmNwcCAqLzsgfTsKIAkJNDY3MDBFRDExMjdCOTZDQjAwRjVENUQ2IC8q
IEZpbGVXcml0ZXJTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NjcwMEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLzsg
fTsKIAkJNDY4OUYxQUYxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY4OUYxQUUxMjY3QkFFMTAw
RThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oICovOyB9OworCQk0NkJDNzI0RTEyOUIxMDRDMDA3MUMw
N0UgLyogRmlsZVdyaXRlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDZCQzcyNEIxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNl
LmNwcCAqLzsgfTsKKwkJNDZCQzcyNEYxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkJDNzI0
QzEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCAqLzsgfTsKKwkJNDZCQzcyNTAx
MjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QkM3MjREMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmggKi87IH07CiAJCTQ2QkQxNkUzMEIyNzk0NzMw
MDFGMDgzOSAvKiBub25lQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDZCRDE2RTIwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVDdXJzb3Iu
cG5nICovOyB9OwogCQk0NkQ0RjI0OTBBRjk3RTgxMDAzNTM4NUEgLyogY2VsbEN1cnNvci5wbmcg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2RDRGMjQ2
MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyAqLzsgfTsKIAkJNDZENEYyNEEwQUY5
N0U4MTAwMzUzODVBIC8qIGNvbnRleHRNZW51Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZENEYyNDcwQUY5N0U4MTAwMzUzODVBIC8q
IGNvbnRleHRNZW51Q3Vyc29yLnBuZyAqLzsgfTsKQEAgLTcwNzksNiArNzA4Miw5IEBACiAJCTQ2
NzAwRUNFMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWxlV3JpdGVyU3luYy5jcHA7IHBhdGggPSBmaWxl
YXBpL0ZpbGVXcml0ZXJTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3
MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODlGMUFFMTI2N0JB
RTEwMEU4RDM4MCAvKiBGaWxlTWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRmlsZU1ldGFkYXRhLmg7IHBhdGggPSBwbGF0Zm9ybS9GaWxlTWV0YWRhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDZCQzcyNEIxMjlCMTA0QzAwNzFDMDdFIC8qIEZp
bGVXcml0ZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZp
bGVXcml0ZXJCYXNlLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NkJDNzI0QzEyOUIxMDRDMDA3MUMwN0UgLyogRmls
ZVdyaXRlckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVdyaXRl
ckJhc2UuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDZCQzcyNEQxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVdyaXRlckJh
c2VDYWxsYmFjay5oOyBwYXRoID0gZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2QkQxNkUyMEIyNzk0NzMwMDFGMDgzOSAvKiBu
b25lQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IG5vbmVDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NkQ0RjI0NjBBRjk3RTgxMDAzNTM4NUEgLyogY2VsbEN1cnNvci5wbmcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5w
bmc7IHBhdGggPSBjZWxsQ3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDZENEYyNDcwQUY5N0U4MTAwMzUzODVBIC8qIGNvbnRleHRNZW51Q3Vyc29yLnBuZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0
aCA9IGNvbnRleHRNZW51Q3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1MTU2LDYgKzE1MTYyLDkgQEAKIAkJCQk5NzZENkM3MDEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVRocmVhZFRhc2suaCAqLywKIAkJCQk5NzZENkM3MTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVdy
aXRlci5jcHAgKi8sCiAJCQkJOTc2RDZDNzIxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVXcml0ZXIu
aCAqLywKKwkJCQk0NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3Bw
ICovLAorCQkJCTQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oICov
LAorCQkJCTQ2QkM3MjREMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
LmggKi8sCiAJCQkJODkzQzQ3QTYxMjM4OTA4QjAwMkIzRDg2IC8qIEZpbGVXcml0ZXJDYWxsYmFj
ay5oICovLAogCQkJCTQ2NzAwRUNFMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5j
cHAgKi8sCiAJCQkJNDY3MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmgg
Ki8sCkBAIC0yMTM3Nyw2ICsyMTM4Niw4IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5
IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2
RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjkyRDRGMTI5
MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2QkM3
MjRGMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDZCQzcyNTAxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCUJDQTI1NzE1MTI5M0MwMTAwMDdBMjYzRCAvKiBWZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUUxRkE3MTI5MzlEQjcwMDRDQjAy
NiAvKiBTY3JvbGxBbmltYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBRDE0MUUxMjk1
RUE0RjAwQUNBOTg5IC8qIEpTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICov
LApAQCAtMjE0NTEsNyArMjE0NjIsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGli
aWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xp
c2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgK
IAkJCQlFbmdsaXNoLApAQCAtMjM5NjYsNiArMjM5NzYsNyBAQAogCQkJCTc1NDE1RDU1MTI5QUIy
RDIwMDNBRDY2OSAvKiBKU1NwZWVjaElucHV0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzU0MTVENTcxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzU0MTVENTkxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRS
ZXN1bHRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ2QkM3MjRFMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNzI2MjgpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTU4LDcgKzI1NTgsNiBAQCBzdWIgSXNBY3RpdmVEb21UeXBlCiAgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIklEQlJlcXVlc3QiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJGaWxl
UmVhZGVyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRlciI7Ci0gICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVXcml0ZXJTeW5jIjsKICAgICByZXR1cm4gMDsKIH0KIApJ
bmRleDogV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJD
b3JlL2ZpbGVhcGkvQXN5bmNGaWxlV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGUobG9uZyBsb25nIHBvc2l0aW9u
LCBCbG9iKiBkYXRhKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBs
ZW5ndGgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHdhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkgLy8gTmVlZGVkIGZvciBGaWxlV3JpdGVy
U3luYyBvbmx5LgorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiA3
MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZpbGVFbnRyeS5oIgogI2luY2x1ZGUgIkZp
bGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJGaWxlV3JpdGVyLmgiCisjaW5jbHVkZSAi
RmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkZpbGVXcml0ZXJDYWxsYmFjay5o
IgogI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCkBAIC03NSw2ICs3NiwyOSBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNvbnRl
eHREZXN0cm95ZWQoKQogICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOwog
fQogCituYW1lc3BhY2UgeworCitjbGFzcyBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2sgOiBw
dWJsaWMgRmlsZVdyaXRlckJhc2VDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxGaWxl
V3JpdGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2soY2FsbGJhY2spKTsKKyAgICB9CisKKyAg
ICBib29sIGhhbmRsZUV2ZW50KEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChzdGF0aWNfY2FzdDxGaWxl
V3JpdGVyKj4oZmlsZVdyaXRlckJhc2UpKTsKKyAgICB9Citwcml2YXRlOgorICAgIENvbnZlcnRU
b0ZpbGVXcml0ZXJDYWxsYmFjayhQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJh
Y2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgfQorICAgIFJl
ZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IG1fY2FsbGJhY2s7Cit9OworCit9CisKIHZvaWQgRE9N
RmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNz
UmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGZpbGVFbnRyeSk7CkBA
IC04Miw3ICsxMDYsOCBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRlcihjb25zdCBG
CiAgICAgU3RyaW5nIHBsYXRmb3JtUGF0aCA9IG1fYXN5bmNGaWxlU3lzdGVtLT52aXJ0dWFsVG9Q
bGF0Zm9ybVBhdGgoZmlsZUVudHJ5LT5mdWxsUGF0aCgpKTsKIAogICAgIFJlZlB0cjxGaWxlV3Jp
dGVyPiBmaWxlV3JpdGVyID0gRmlsZVdyaXRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7Ci0gICAgT3duUHRyPEZpbGVXcml0ZXJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZpbGVX
cml0ZXJDYWxsYmFja3M6OmNyZWF0ZShmaWxlV3JpdGVyLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spOworICAgIFJlZlB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiBjb252ZXJzaW9u
Q2FsbGJhY2sgPSBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2s6OmNyZWF0ZShzdWNjZXNzQ2Fs
bGJhY2spOworICAgIE93blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
RmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShmaWxlV3JpdGVyLCBjb252ZXJzaW9uQ2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2spOwogICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVXcml0
ZXIoZmlsZVdyaXRlci5nZXQoKSwgcGxhdGZvcm1QYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsK
IH0KIApJbmRleDogV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwCShyZXZpc2lvbiA3
MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDExICszNSwxOSBAQAogCiAjaW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKICNp
bmNsdWRlICJEaXJlY3RvcnlFbnRyeVN5bmMuaCIKKyNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVFbnRyeVN5bmMuaCIKKyNpbmNsdWRl
ICJGaWxlRXJyb3IuaCIKKyNpbmNsdWRlICJGaWxlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRmls
ZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCIK
KyNpbmNsdWRlICJGaWxlV3JpdGVyU3luYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEZpbGVXcml0ZXJCYXNlOworCiBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiBET01G
aWxlU3lzdGVtU3luYzo6Y3JlYXRlKERPTUZpbGVTeXN0ZW1CYXNlKiBmaWxlU3lzdGVtKQogewog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NRmlsZVN5c3RlbVN5bmMoZmlsZVN5c3RlbS0+bV9u
YW1lLCBmaWxlU3lzdGVtLT5tX2FzeW5jRmlsZVN5c3RlbS5yZWxlYXNlKCkpKTsKQEAgLTY2LDYg
Kzc0LDk0IEBAIFBhc3NSZWZQdHI8RmlsZT4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWEKICAgICBy
ZXR1cm4gRmlsZTo6Y3JlYXRlKHBsYXRmb3JtUGF0aCk7CiB9CiAKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVdyaXRlckJhc2VDYWxs
YmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVjZWl2ZUZpbGVXcml0ZXJD
YWxsYmFjaz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVj
ZWl2ZUZpbGVXcml0ZXJDYWxsYmFjaygpKTsKKyAgICB9CisKKyAgICBib29sIGhhbmRsZUV2ZW50
KEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSkKKyAgICB7CisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBtX2ZpbGVXcml0ZXJCYXNlID0gZmlsZVdyaXRlckJhc2U7CisjZWxzZQorICAgICAg
ICBBU1NFUlRfVU5VU0VEKGZpbGVXcml0ZXJCYXNlLCBmaWxlV3JpdGVyQmFzZSk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBGaWxlV3Jp
dGVyQmFzZSogZmlsZVdyaXRlckJhc2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmlsZVdy
aXRlckJhc2U7CisgICAgfQorI2VuZGlmCitwcml2YXRlOgorICAgIFJlY2VpdmVGaWxlV3JpdGVy
Q2FsbGJhY2soKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgOiBtX2ZpbGVXcml0ZXJCYXNlKDAp
CisjZW5kaWYKKyAgICB7CisgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBGaWxlV3JpdGVyQmFz
ZSogbV9maWxlV3JpdGVyQmFzZTsKKyNlbmRpZgorfTsKKworY2xhc3MgTG9jYWxFcnJvckNhbGxi
YWNrIDogcHVibGljIEVycm9yQ2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExvY2FsRXJyb3JDYWxsYmFjaz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTG9jYWxFcnJvckNhbGxiYWNrKCkpOworICAgIH0KKworICAgIGJvb2wgaGFu
ZGxlRXZlbnQoRmlsZUVycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIG1fZXJyb3IgPSBlcnJv
cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEZpbGVFcnJvciogZXJyb3IoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7CisgICAgfQorcHJpdmF0ZToKKyAg
ICBMb2NhbEVycm9yQ2FsbGJhY2soKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVFcnJv
cj4gbV9lcnJvcjsKK307CisKK30KKworUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRE9NRmls
ZVN5c3RlbVN5bmM6OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnks
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChmaWxlRW50cnkpOworICAgIGVjID0g
MDsKKworICAgIFN0cmluZyBwbGF0Zm9ybVBhdGggPSBtX2FzeW5jRmlsZVN5c3RlbS0+dmlydHVh
bFRvUGxhdGZvcm1QYXRoKGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSk7CisKKyAgICBSZWZQdHI8Rmls
ZVdyaXRlclN5bmM+IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVyU3luYzo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IFJlY2Vp
dmVGaWxlV3JpdGVyQ2FsbGJhY2s6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMb2NhbEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBMb2NhbEVycm9yQ2FsbGJhY2s6OmNyZWF0ZSgpOworCisg
ICAgT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JD
YWxsYmFjayk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVy
LmdldCgpLCBwbGF0Zm9ybVBhdGgsIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworICAgIGlmICghbV9h
c3luY0ZpbGVTeXN0ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKKyAgICAgICAg
ZWMgPSBGaWxlRXhjZXB0aW9uOjpBQk9SVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAoZXJyb3JDYWxsYmFjay0+ZXJyb3IoKSkgeworICAgICAgICBBU1NFUlQoIXN1Y2Nl
c3NDYWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSk7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlv
bjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKGVycm9yQ2FsbGJhY2stPmVycm9yKCktPmNvZGUo
KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBBU1NFUlQoc3VjY2Vzc0NhbGxiYWNr
LT5maWxlV3JpdGVyQmFzZSgpKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RmlsZVdyaXRlclN5
bmMqPihzdWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJCYXNlKCkpID09IGZpbGVXcml0ZXIuZ2V0
KCkpOworICAgIHJldHVybiBmaWxlV3JpdGVyOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
RklMRV9TWVNURU0pCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAkocmV2aXNp
b24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXJl
Y3RvcnlFbnRyeVN5bmM7CiBjbGFzcyBGaWxlOwogY2xhc3MgRmlsZUVudHJ5U3luYzsKK2NsYXNz
IEZpbGVXcml0ZXJTeW5jOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC01Nyw2
ICs1OCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5U3luYz4gcm9v
dCgpOwogCiAgICAgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5
bmMqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3Jl
YXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZh
dGU6CiAgICAgRE9NRmlsZVN5c3RlbVN5bmMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbT4pOwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcAkocmV2
aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAKICNp
bmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlclN5bmMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Nyw2ICs0OCwxMSBAQCBQYXNzUmVmUHRyPEZpbGU+IEZpbGVFbnRy
eVN5bmM6OmZpbGUoRXhjCiAgICAgcmV0dXJuIGZpbGVzeXN0ZW0oKS0+Y3JlYXRlRmlsZSh0aGlz
LCBlYyk7CiB9CiAKK1Bhc3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IEZpbGVFbnRyeVN5bmM6OmNy
ZWF0ZVdyaXRlcihFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZmlsZXN5c3RlbSgp
LT5jcmVhdGVXcml0ZXIodGhpcywgZWMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRklM
RV9TWVNURU0pCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmgJKHJldmlzaW9uIDcyNjI4KQor
KysgV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWxlOworY2xhc3MgRmls
ZVdyaXRlclN5bmM7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBGaWxl
RW50cnlTeW5jIDogcHVibGljIEVudHJ5U3luYyB7CiBwdWJsaWM6CkBAIC01Miw2ICs1NCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBjcmVhdGVXcml0ZXIoRXhjZXB0aW9uQ29kZSYpOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFbnRyeVN5bmM7CkluZGV4OiBXZWJDb3JlL2ZpbGVh
cGkvRmlsZUVudHJ5U3luYy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVF
bnRyeVN5bmMuaWRsCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50
cnlTeW5jLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzYsNSArMzYsNiBAQCBtb2R1bGUgc3RvcmFn
ZSB7CiAgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBGaWxlRW50cnlTeW5jIDogRW50cnlT
eW5jIHsKICAgICAgICAgRmlsZSBmaWxlKCkgcmFpc2VzIChGaWxlRXhjZXB0aW9uKTsKKyAgICAg
ICAgRmlsZVdyaXRlclN5bmMgY3JlYXRlV3JpdGVyKCkgcmFpc2VzIChGaWxlRXhjZXB0aW9uKTsK
ICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVFcnJvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlRXJyb3IuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJD
b3JlL2ZpbGVhcGkvRmlsZUVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsZUVycm9yIDogcHVibGljIFJlZkNvdW50ZWQ8
RmlsZUVycm9yPiB7CiBwdWJsaWM6CiAgICAgZW51bSBFcnJvckNvZGUgeworICAgICAgICBPSyA9
IDAsCiAgICAgICAgIE5PVF9GT1VORF9FUlIgPSAxLAogICAgICAgICBTRUNVUklUWV9FUlIgPSAy
LAogICAgICAgICBBQk9SVF9FUlIgPSAzLApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0
ZW1DYWxsYmFja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVt
Q2FsbGJhY2tzLmNwcAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVN5
c3RlbUNhbGxiYWNrcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNs
dWRlICJGaWxlRXJyb3IuaCIKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJGaWxlV3JpdGVyLmgiCi0jaW5jbHVkZSAi
RmlsZVdyaXRlckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckJhc2UuaCIKKyNpbmNs
dWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGEuaCIKICNp
bmNsdWRlICJNZXRhZGF0YUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgpAQCAtMjEyLDIxICsyMTIsMjEgQEAgdm9pZCBNZXRhZGF0YUNhbGxiYWNrczo6ZGlk
UmVhZE1ldGFkYXRhKAogICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7CiB9CiAKLS8vIEZp
bGVXcml0ZXJDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRmlsZVdyaXRlckJhc2VDYWxsYmFja3MgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QYXNz
T3duUHRyPEZpbGVXcml0ZXJDYWxsYmFja3M+IEZpbGVXcml0ZXJDYWxsYmFja3M6OmNyZWF0ZShQ
YXNzUmVmUHRyPEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaykKK1Bhc3NPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+IEZpbGVXcml0ZXJC
YXNlQ2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxGaWxlV3JpdGVyQmFzZT4gZmlsZVdyaXRl
ciwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEZpbGVXcml0ZXJDYWxsYmFja3MoZmlsZVdyaXRlciwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGaWxlV3JpdGVyQmFz
ZUNhbGxiYWNrcyhmaWxlV3JpdGVyLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsK
IH0KIAotRmlsZVdyaXRlckNhbGxiYWNrczo6RmlsZVdyaXRlckNhbGxiYWNrcyhQYXNzUmVmUHRy
PEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
K0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzOjpGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcyhQYXNzUmVm
UHRyPEZpbGVXcml0ZXJCYXNlPiBmaWxlV3JpdGVyLCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJv
ckNhbGxiYWNrKQogICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UoZXJyb3JDYWxsYmFjaykK
ICAgICAsIG1fZmlsZVdyaXRlcihmaWxlV3JpdGVyKQogICAgICwgbV9zdWNjZXNzQ2FsbGJhY2so
c3VjY2Vzc0NhbGxiYWNrKQogewogfQogCi12b2lkIEZpbGVXcml0ZXJDYWxsYmFja3M6OmRpZENy
ZWF0ZUZpbGVXcml0ZXIoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+IGFzeW5jRmlsZVdyaXRl
ciwgbG9uZyBsb25nIGxlbmd0aCkKK3ZvaWQgRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmRpZENy
ZWF0ZUZpbGVXcml0ZXIoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+IGFzeW5jRmlsZVdyaXRl
ciwgbG9uZyBsb25nIGxlbmd0aCkKIHsKICAgICBtX2ZpbGVXcml0ZXItPmluaXRpYWxpemUoYXN5
bmNGaWxlV3JpdGVyLCBsZW5ndGgpOwogICAgIGlmIChtX3N1Y2Nlc3NDYWxsYmFjaykKSW5kZXg6
IFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAkocmV2aXNpb24gNzI2MjgpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw4ICs0OSw4IEBAIGNsYXNzIEVudHJ5QXJyYXk7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogc3Ry
dWN0IEZpbGVNZXRhZGF0YTsKIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKLWNsYXNzIEZpbGVX
cml0ZXI7Ci1jbGFzcyBGaWxlV3JpdGVyQ2FsbGJhY2s7CitjbGFzcyBGaWxlV3JpdGVyQmFzZTsK
K2NsYXNzIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s7CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwog
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFZvaWRDYWxsYmFjazsKQEAgLTEz
MywxNSArMTMzLDE1IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+IG1f
c3VjY2Vzc0NhbGxiYWNrOwogfTsKIAotY2xhc3MgRmlsZVdyaXRlckNhbGxiYWNrcyA6IHB1Ymxp
YyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CitjbGFzcyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
cyA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8RmlsZVdyaXRlckNhbGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdy
aXRlcj4sIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+
IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZUZpbGVXcml0ZXIoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+LCBsb25n
IGxvbmcgbGVuZ3RoKTsKIAogcHJpdmF0ZToKLSAgICBGaWxlV3JpdGVyQ2FsbGJhY2tzKFBhc3NS
ZWZQdHI8RmlsZVdyaXRlcj4sIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgUmVmUHRyPEZpbGVXcml0ZXI+IG1fZmlsZVdyaXRl
cjsKLSAgICBSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKKyAg
ICBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcyhQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiwgUGFz
c1JlZlB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
Pik7CisgICAgUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiBtX2ZpbGVXcml0ZXI7CisgICAgUmVmUHRy
PEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwogfTsKIAogY2xhc3Mg
Vm9pZENhbGxiYWNrcyA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CkluZGV4OiBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxl
YXBpL0ZpbGVXcml0ZXIuY3BwCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9G
aWxlV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBGaWxlV3JpdGVyOjpGaWxlV3JpdGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICA6
IEZpbGVXcml0ZXJCYXNlKCkKKyAgICAsIEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQog
ICAgICwgbV9yZWFkeVN0YXRlKElOSVQpCi0gICAgLCBtX3Bvc2l0aW9uKDApCiAgICAgLCBtX3N0
YXJ0ZWRXcml0aW5nKGZhbHNlKQogICAgICwgbV9ieXRlc1dyaXR0ZW4oMCkKICAgICAsIG1fYnl0
ZXNUb1dyaXRlKDApCkBAIC01NCwxNCArNTQsNiBAQCBGaWxlV3JpdGVyOjpGaWxlV3JpdGVyKFNj
cmlwdEV4ZWN1dGlvbkNvCiB7CiB9CiAKLXZvaWQgRmlsZVdyaXRlcjo6aW5pdGlhbGl6ZShQYXNz
T3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gd3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQotewotICAg
IEFTU0VSVCghbV93cml0ZXIpOwotICAgIEFTU0VSVChsZW5ndGggPj0gMCk7Ci0gICAgbV93cml0
ZXIgPSB3cml0ZXI7Ci0gICAgbV9sZW5ndGggPSBsZW5ndGg7Ci19Ci0KIEZpbGVXcml0ZXI6On5G
aWxlV3JpdGVyKCkKIHsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpCkBAIC04MSwx
NSArNzMsMTUgQEAgYm9vbCBGaWxlV3JpdGVyOjpjYW5TdXNwZW5kKCkgY29uc3QKIAogdm9pZCBG
aWxlV3JpdGVyOjpzdG9wKCkKIHsKLSAgICBpZiAobV93cml0ZXIgJiYgbV9yZWFkeVN0YXRlID09
IFdSSVRJTkcpCi0gICAgICAgIG1fd3JpdGVyLT5hYm9ydCgpOworICAgIGlmICh3cml0ZXIoKSAm
JiBtX3JlYWR5U3RhdGUgPT0gV1JJVElORykKKyAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7CiAg
ICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsK
IH0KIAogdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKSB7CiAgICAgICAgIHNldEVycm9yKEZpbGVFcnJv
cjo6SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0LDEyICs5
NiwxMiBAQCB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwCiAgICAgbV9z
dGFydGVkV3JpdGluZyA9IGZhbHNlOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5
dGVzVG9Xcml0ZSA9IGRhdGEtPnNpemUoKTsKLSAgICBtX3dyaXRlci0+d3JpdGUobV9wb3NpdGlv
biwgZGF0YSk7CisgICAgd3JpdGVyKCktPndyaXRlKHBvc2l0aW9uKCksIGRhdGEpOwogfQogCiB2
b2lkIEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKSB7CiAgICAgICAgIHNldEVycm9yKEZpbGVFcnJv
cjo6SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3LDE4ICsx
MDksMTggQEAgdm9pZCBGaWxlV3JpdGVyOjpzZWVrKGxvbmcgbG9uZyBwb3NpdGlvbgogCiAgICAg
bV9ieXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gMDsKLSAgICBpZiAocG9z
aXRpb24gPiBtX2xlbmd0aCkKLSAgICAgICAgcG9zaXRpb24gPSBtX2xlbmd0aDsKKyAgICBpZiAo
cG9zaXRpb24gPiBsZW5ndGgoKSkKKyAgICAgICAgcG9zaXRpb24gPSBsZW5ndGgoKTsKICAgICBl
bHNlIGlmIChwb3NpdGlvbiA8IDApCi0gICAgICAgIHBvc2l0aW9uID0gbV9sZW5ndGggKyBwb3Np
dGlvbjsKKyAgICAgICAgcG9zaXRpb24gPSBsZW5ndGgoKSArIHBvc2l0aW9uOwogICAgIGlmIChw
b3NpdGlvbiA8IDApCiAgICAgICAgIHBvc2l0aW9uID0gMDsKLSAgICBtX3Bvc2l0aW9uID0gcG9z
aXRpb247CisgICAgc2V0UG9zaXRpb24ocG9zaXRpb24pOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6
OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
QVNTRVJUKG1fd3JpdGVyKTsKKyAgICBBU1NFUlQod3JpdGVyKCkpOwogICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gV1JJVElORyB8fCBwb3NpdGlvbiA8IDApIHsKICAgICAgICAgc2V0RXJyb3IoRmls
ZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0xMzcs
MTkgKzEyOSwxOSBAQCB2b2lkIEZpbGVXcml0ZXI6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpCiAg
ICAgbV9ieXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gMDsKICAgICBtX3Ry
dW5jYXRlTGVuZ3RoID0gcG9zaXRpb247Ci0gICAgbV93cml0ZXItPnRydW5jYXRlKHBvc2l0aW9u
KTsKKyAgICB3cml0ZXIoKS0+dHJ1bmNhdGUocG9zaXRpb24pOwogfQogCiB2b2lkIEZpbGVXcml0
ZXI6OmFib3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3dyaXRlcik7Cisg
ICAgQVNTRVJUKHdyaXRlcigpKTsKICAgICBpZiAobV9yZWFkeVN0YXRlICE9IFdSSVRJTkcpIHsK
ICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6Y3JlYXRlKEZp
bGVFcnJvcjo6QUJPUlRfRVJSKTsKLSAgICBtX3dyaXRlci0+YWJvcnQoKTsKKyAgICB3cml0ZXIo
KS0+YWJvcnQoKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpkaWRXcml0ZShsb25nIGxvbmcgYnl0
ZXMsIGJvb2wgY29tcGxldGUpCkBAIC0xNjIsOSArMTU0LDkgQEAgdm9pZCBGaWxlV3JpdGVyOjpk
aWRXcml0ZShsb25nIGxvbmcgYnl0ZQogICAgIH0KICAgICBtX2J5dGVzV3JpdHRlbiArPSBieXRl
czsKICAgICBBU1NFUlQoKG1fYnl0ZXNXcml0dGVuID09IG1fYnl0ZXNUb1dyaXRlKSB8fCAhY29t
cGxldGUpOwotICAgIG1fcG9zaXRpb24gKz0gYnl0ZXM7Ci0gICAgaWYgKG1fcG9zaXRpb24gPiBt
X2xlbmd0aCkKLSAgICAgICAgbV9sZW5ndGggPSBtX3Bvc2l0aW9uOworICAgIHNldFBvc2l0aW9u
KHBvc2l0aW9uKCkgKyBieXRlcyk7CisgICAgaWYgKHBvc2l0aW9uKCkgPiBsZW5ndGgoKSkKKyAg
ICAgICAgc2V0TGVuZ3RoKHBvc2l0aW9uKCkpOwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCku
cHJvZ3Jlc3NFdmVudCk7CiAgICAgaWYgKGNvbXBsZXRlKSB7CiAgICAgICAgIG1fYmxvYkJlaW5n
V3JpdHRlbi5jbGVhcigpOwpAQCAtMTc4LDkgKzE3MCw5IEBAIHZvaWQgRmlsZVdyaXRlcjo6ZGlk
VHJ1bmNhdGUoKQogewogICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID49IDApOwogICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKLSAgICBtX2xlbmd0aCA9IG1f
dHJ1bmNhdGVMZW5ndGg7Ci0gICAgaWYgKG1fcG9zaXRpb24gPiBtX2xlbmd0aCkKLSAgICAgICAg
bV9wb3NpdGlvbiA9IG1fbGVuZ3RoOworICAgIHNldExlbmd0aChtX3RydW5jYXRlTGVuZ3RoKTsK
KyAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0aCgpKQorICAgICAgICBzZXRQb3NpdGlvbihsZW5n
dGgoKSk7CiAgICAgbV90cnVuY2F0ZUxlbmd0aCA9IC0xOwogICAgIGZpcmVFdmVudChldmVudE5h
bWVzKCkud3JpdGVFdmVudCk7CiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9GaWxlV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Zp
bGVXcml0ZXIuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw0NSArMzQsMzYgQEAKICNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJBc3luY0Zp
bGVXcml0ZXJDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgIkZpbGVX
cml0ZXJCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBBc3luY0ZpbGVXcml0ZXI7Ci1jbGFzcyBCbG9iOwotY2xhc3MgRmlsZUVy
cm9yOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotY2xhc3MgRmlsZVdyaXRlciA6
IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVXcml0ZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBw
dWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBc3luY0ZpbGVXcml0ZXJDbGllbnQgeworY2xhc3Mg
RmlsZVdyaXRlciA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZSwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
aWxlV3JpdGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZVdyaXRlcihjb250ZXh0KSk7CiAgICAg
fQogCi0gICAgdm9pZCBpbml0aWFsaXplKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiB3cml0
ZXIsIGxvbmcgbG9uZyBsZW5ndGgpOwotCiAgICAgZW51bSBSZWFkeVN0YXRlIHsKICAgICAgICAg
SU5JVCA9IDAsCiAgICAgICAgIFdSSVRJTkcgPSAxLAogICAgICAgICBET05FID0gMgogICAgIH07
CiAKKyAgICAvLyBGaWxlV3JpdGVyQmFzZQogICAgIHZvaWQgd3JpdGUoQmxvYiogZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpOwogICAgIHZvaWQgc2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKICAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBsZW5ndGgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKLSAgICB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAorICAg
IHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQogICAgIEZpbGVFcnJvciogZXJyb3Io
KSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9Ci0gICAgbG9uZyBsb25nIHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCiAgICAgLy8gQXN5bmNGaWxlV3JpdGVyQ2xpZW50
CiAgICAgdm9pZCBkaWRXcml0ZShsb25nIGxvbmcgYnl0ZXMsIGJvb2wgY29tcGxldGUpOwpAQCAt
ODgsOCArNzksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGaWxlV3JpdGVyKiB0b0ZpbGVXcml0
ZXIoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAotICAgIHVzaW5nIFJlZkNvdW50ZWQ8Rmls
ZVdyaXRlcj46OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXI+OjpkZXJlZjsK
KyAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlPjo6cmVmOworICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OjpkZXJlZjsKIAogICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIod3JpdGVzdGFydCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihwcm9ncmVzcyk7CkBAIC0xMDMsOCArOTQsNiBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB+RmlsZVdyaXRlcigpOwogCi0gICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxG
aWxlV3JpdGVyPjsKLQogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgeyBkZXJlZigpOyB9CkBAIC0xMTcsMTAgKzEwNiw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQ
dHI8RmlsZUVycm9yPiBtX2Vycm9yOwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0
RGF0YTsKLSAgICBPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiBtX3dyaXRlcjsKICAgICBSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICBsb25nIGxvbmcgbV9wb3NpdGlvbjsKLSAgICBsb25nIGxv
bmcgbV9sZW5ndGg7CiAgICAgYm9vbCBtX3N0YXJ0ZWRXcml0aW5nOwogICAgIGxvbmcgbG9uZyBt
X2J5dGVzV3JpdHRlbjsKICAgICBsb25nIGxvbmcgbV9ieXRlc1RvV3JpdGU7CkluZGV4OiBXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ZpbGVhcGkv
RmlsZVdyaXRlckJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkZpbGVX
cml0ZXJCYXNlLmgiCisKKyNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXIuaCIKKyNpbmNsdWRlICJC
bG9iLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5o
IgorI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJQcm9ncmVzc0V2ZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsZVdyaXRlckJhc2U6On5GaWxlV3JpdGVyQmFz
ZSgpCit7Cit9CisKK3ZvaWQgRmlsZVdyaXRlckJhc2U6OmluaXRpYWxpemUoUGFzc093blB0cjxB
c3luY0ZpbGVXcml0ZXI+IHdyaXRlciwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
IW1fd3JpdGVyKTsKKyAgICBBU1NFUlQobGVuZ3RoID49IDApOworICAgIG1fd3JpdGVyID0gd3Jp
dGVyOworICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworfQorCitGaWxlV3JpdGVyQmFzZTo6RmlsZVdy
aXRlckJhc2UoKQorICAgIDogbV9wb3NpdGlvbigwKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4OiBXZWJDb3JlL2Zp
bGVhcGkvRmlsZVdyaXRlckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmls
ZVdyaXRlckJhc2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVy
QmFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVdyaXRlckJh
c2VfaAorI2RlZmluZSBGaWxlV3JpdGVyQmFzZV9oCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CisKKyNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFzeW5jRmlsZVdyaXRlcjsK
K2NsYXNzIEJsb2I7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIEZpbGVX
cml0ZXJCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+LCBwdWJsaWMgQXN5
bmNGaWxlV3JpdGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyQmFz
ZSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZShQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gd3Jp
dGVyLCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIHZvaWQgd3JpdGUoQmxvYiogZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgc2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKKyAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBsZW5ndGgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKKworICAgIGxvbmcgbG9uZyBwb3NpdGlvbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9wb3NpdGlvbjsKKyAgICB9CisgICAgbG9uZyBsb25nIGxlbmd0aCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgRmlsZVdyaXRlckJhc2UoKTsKKyAgICBBc3luY0ZpbGVXcml0ZXIqIHdyaXRlcigp
CisgICAgeworICAgICAgICByZXR1cm4gbV93cml0ZXIuZ2V0KCk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRQb3NpdGlvbihsb25nIGxvbmcgcG9zaXRpb24pCisgICAgeworICAgICAgICBtX3Bvc2l0
aW9uID0gcG9zaXRpb247CisgICAgfQorICAgIHZvaWQgc2V0TGVuZ3RoKGxvbmcgbG9uZyBsZW5n
dGgpCisgICAgeworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9Citwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OworCisgICAg
T3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gbV93cml0ZXI7CisgICAgbG9uZyBsb25nIG1fcG9zaXRp
b247CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjZW5kaWYgLy8gRmlsZVdyaXRl
ckJhc2VfaApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVdyaXRlckJhc2VDYWxsYmFj
a19oCisjZGVmaW5lIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tfaAorCisjaWYgRU5BQkxFKEZJTEVf
U1lTVEVNKQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWxlV3JpdGVyQmFzZTsKKworY2xhc3MgRmlsZVdyaXRlckJhc2VDYWxs
YmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyQmFzZUNhbGxiYWNrKCkgeyB9CisgICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KEZpbGVXcml0ZXJCYXNlKikgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2tfaApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwCShy
ZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDQ3ICszNCwxMTMgQEAKIAogI2luY2x1ZGUgIkZpbGVXcml0ZXJT
eW5jLmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGaWxlV3JpdGVyU3luYzo6d3Jp
dGUoQmxvYiosIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KLX0KLQotdm9pZCBGaWxlV3JpdGVyU3luYzo6
c2Vlayhsb25nIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KLX0KLQotdm9pZCBGaWxlV3JpdGVy
U3luYzo6dHJ1bmNhdGUobG9uZyBsb25nLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi19Ci0KLWJvb2wg
RmlsZVdyaXRlclN5bmM6OmNhblN1c3BlbmQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJdCBp
cyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIHN1c3BlbmQgYSBGaWxlV3JpdGVyU3luYywgc28g
cGFnZXMgd2l0aCBGaWxlV3JpdGVyIGNhbiBub3QgZ28gaW50byBwYWdlIGNhY2hlLgotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBGaWxlV3JpdGVyU3luYzo6aGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZp
dHkoKTsKLX0KLQotdm9pZCBGaWxlV3JpdGVyU3luYzo6c3RvcCgpCi17Ci19CisjaW5jbHVkZSAi
QXN5bmNGaWxlV3JpdGVyLmgiCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGVFeGNl
cHRpb24uaCIKIAorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWxlV3JpdGVyU3luYzo6RmlsZVdy
aXRlclN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IEFjdGl2ZURP
TU9iamVjdChjb250ZXh0LCB0aGlzKQotICAgICwgbV9wb3NpdGlvbigwKQotICAgICwgbV9sZW5n
dGgoMCkKK3ZvaWQgRmlsZVdyaXRlclN5bmM6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIEFTU0VSVCh3cml0ZXIoKSk7CisgICAgZWMgPSAwOworICAgIGlmICgh
ZGF0YSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlRZUEVfTUlTTUFUQ0hfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJlcGFyZUZvcldyaXRlKCk7CisgICAgd3Jp
dGVyKCktPndyaXRlKHBvc2l0aW9uKCksIGRhdGEpOworICAgIHdyaXRlcigpLT53YWl0Rm9yT3Bl
cmF0aW9uVG9Db21wbGV0ZSgpOworICAgIEFTU0VSVChtX2NvbXBsZXRlKTsKKyAgICBlYyA9IEZp
bGVFeGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShtX2Vycm9yKTsKKyAgICBpZiAo
IWVjKSB7CisgICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKCkgKyBkYXRhLT5zaXplKCkpOwor
ICAgICAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0aCgpKQorICAgICAgICAgICAgc2V0TGVuZ3Ro
KHBvc2l0aW9uKCkpOworICAgIH0KK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6c2Vlayhsb25n
IGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVCh3cml0ZXIo
KSk7CisgICAgZWMgPSAwOworICAgIGlmIChwb3NpdGlvbiA+IGxlbmd0aCgpKQorICAgICAgICBw
b3NpdGlvbiA9IGxlbmd0aCgpOworICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkKKyAgICAgICAg
cG9zaXRpb24gPSBsZW5ndGgoKSArIHBvc2l0aW9uOworICAgIGlmIChwb3NpdGlvbiA8IDApCisg
ICAgICAgIHBvc2l0aW9uID0gMDsKKyAgICBzZXRQb3NpdGlvbihwb3NpdGlvbik7Cit9CisKK3Zv
aWQgRmlsZVdyaXRlclN5bmM6OnRydW5jYXRlKGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIEFTU0VSVCh3cml0ZXIoKSk7CisgICAgZWMgPSAwOworICAgIGlmIChv
ZmZzZXQgPCAwKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHJlcGFyZUZvcldyaXRlKCk7CisgICAg
d3JpdGVyKCktPnRydW5jYXRlKG9mZnNldCk7CisgICAgd3JpdGVyKCktPndhaXRGb3JPcGVyYXRp
b25Ub0NvbXBsZXRlKCk7CisgICAgQVNTRVJUKG1fY29tcGxldGUpOworICAgIGVjID0gRmlsZUV4
Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKG1fZXJyb3IpOworICAgIGlmIChtX2Vy
cm9yID09IEZpbGVFcnJvcjo6T0spIHsKKyAgICAgICAgaWYgKG9mZnNldCA8IHBvc2l0aW9uKCkp
CisgICAgICAgICAgICBzZXRQb3NpdGlvbihvZmZzZXQpOworICAgICAgICBzZXRMZW5ndGgob2Zm
c2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsZVdyaXRlclN5bmM6OmRpZFdyaXRlKGxvbmcgbG9u
ZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJy
b3I6Ok9LKTsKKyAgICBBU1NFUlQoIW1fY29tcGxldGUpOworI2lmbmRlZiBOREVCVUcKKyAgICBt
X2NvbXBsZXRlID0gY29tcGxldGU7CisjZWxzZQorICAgIEFTU0VSVF9VTlVTRUQoY29tcGxldGUs
IGNvbXBsZXRlKTsKKyNlbmRpZgorfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjpkaWRUcnVuY2F0
ZSgpCit7CisgICAgQVNTRVJUKG1fZXJyb3IgPT0gRmlsZUVycm9yOjpPSyk7CisgICAgQVNTRVJU
KCFtX2NvbXBsZXRlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21wbGV0ZSA9IHRydWU7Cisj
ZW5kaWYKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6ZGlkRmFpbChGaWxlRXJyb3I6OkVycm9y
Q29kZSBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJyb3I6Ok9LKTsKKyAg
ICBtX2Vycm9yID0gZXJyb3I7CisgICAgQVNTRVJUKCFtX2NvbXBsZXRlKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgbV9jb21wbGV0ZSA9IHRydWU7CisjZW5kaWYKK30KKworRmlsZVdyaXRlclN5bmM6
OkZpbGVXcml0ZXJTeW5jKCkKKyAgICA6IEZpbGVXcml0ZXJCYXNlKCkKKyAgICAsIG1fZXJyb3Io
RmlsZUVycm9yOjpPSykKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2NvbXBsZXRlKHRydWUpCisj
ZW5kaWYKK3sKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6cHJlcGFyZUZvcldyaXRlKCkKK3sK
KyAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpPSzsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21w
bGV0ZSA9IGZhbHNlOworI2VuZGlmCiB9CiAKLQogRmlsZVdyaXRlclN5bmM6On5GaWxlV3JpdGVy
U3luYygpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaAkocmV2aXNpb24gNzI2
MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsOCArMzQsOSBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIkZpbGVX
cml0ZXJCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDM3ICs0NCwzMiBA
QCBjbGFzcyBCbG9iOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0vLyBGSVhNRTog
VGhpcyBpcyBhbiBlbXB0eSBzaGVsbCB3YWl0aW5nIGZvciBpbXBsZW1lbnRhdGlvbi4KLWNsYXNz
IEZpbGVXcml0ZXJTeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlclN5bmM+LCBwdWJs
aWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIEZpbGVXcml0ZXJTeW5jIDogcHVibGljIEZpbGVX
cml0ZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3lu
Yz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZpbGVXcml0ZXJTeW5jKGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGaWxlV3JpdGVyU3luYygpKTsKICAgICB9CiAgICAgdmlydHVhbCB+RmlsZVdy
aXRlclN5bmMoKTsKIAorICAgIC8vIEZpbGVXcml0ZXJCYXNlCiAgICAgdm9pZCB3cml0ZShCbG9i
KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZWVrKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0aCwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgbG9uZyBsb25nIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbjsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBib29sIGNh
blN1c3BlbmQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLQotICAgIHVzaW5nIFJlZkNvdW50ZWQ8
RmlsZVdyaXRlclN5bmM+OjpyZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxGaWxlV3JpdGVyU3lu
Yz46OmRlcmVmOworICAgIC8vIEFzeW5jRmlsZVdyaXRlckNsaWVudCwgdmlhIEZpbGVXcml0ZXJC
YXNlCisgICAgdm9pZCBkaWRXcml0ZShsb25nIGxvbmcgYnl0ZXMsIGJvb2wgY29tcGxldGUpOwor
ICAgIHZvaWQgZGlkVHJ1bmNhdGUoKTsKKyAgICB2b2lkIGRpZEZhaWwoRmlsZUVycm9yOjpFcnJv
ckNvZGUpOwogCiBwcml2YXRlOgotICAgIEZpbGVXcml0ZXJTeW5jKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKLQotICAgIGZyaWVuZCBjbGFzcyBSZWZDb3VudGVkPEZpbGVXcml0ZXJTeW5jPjsK
KyAgICBGaWxlV3JpdGVyU3luYygpOworICAgIHZvaWQgcHJlcGFyZUZvcldyaXRlKCk7CiAKLSAg
ICBsb25nIGxvbmcgbV9wb3NpdGlvbjsKLSAgICBsb25nIGxvbmcgbV9sZW5ndGg7CisgICAgRmls
ZUVycm9yOjpFcnJvckNvZGUgbV9lcnJvcjsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBtX2Nv
bXBsZXRlOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyU3luYy5pZGwJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxl
YXBpL0ZpbGVXcml0ZXJTeW5jLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
bW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPUZJTEVf
U1lTVEVNLAotICAgICAgICBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgXSBG
aWxlV3JpdGVyU3luYyB7CiAgICAgICAgIC8vIHN5bmNocm9ub3VzIHdyaXRlL21vZGlmeSBtZXRo
b2RzCiAgICAgICAgIHZvaWQgd3JpdGUoaW4gQmxvYiBkYXRhKSByYWlzZXMgKEZpbGVFeGNlcHRp
b24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74713</attachid>
            <date>2010-11-23 18:10:28 -0800</date>
            <delta_ts>2010-11-24 13:34:47 -0800</delta_ts>
            <desc>Merge out the .vcproj yet again.</desc>
            <filename>webcore_sync2.patch</filename>
            <type>text/plain</type>
            <size>44123</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjMgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgRmlsZVdyaXRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTM5CisKKyAgICAgICAgVGVzdHMgdG8gZm9sbG93IGluIGEgc2Vw
YXJhdGUgQ0wsIG9uY2UgdGhlIHRlc3QgZnJhbWV3b3JrIGluIDQ3NjgwIGdvZXMgaW4uCisKKyAg
ICAgICAgQnVpbGQgZmlsZSBjaGFuZ2VzIHRvIGFkZCBGaWxlV3JpdGVyQmFzZSBhbmQgRmlsZVdy
aXRlckJhc2VDYWxsYmFjay4KKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgdHVybiBvdXQgdG8gbmVlZCB0byBiZSBhbiBBY3RpdmVET01PYmplY3Qu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisKKyAgICAg
ICAgQWRkZWQgbmV3IEFzeW5jRmlsZVdyaXRlcjo6d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUg
dG8gZW5hYmxlCisgICAgICAgIHN5bmNocm9ub3VzIGNhbGxzLgorICAgICAgICAqIGZpbGVhcGkv
QXN5bmNGaWxlV3JpdGVyLmg6CisKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8gZ2V0IGEgRmlsZVN5
c3RlbVN5bmMuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6CisgICAg
ICAgICogZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVF
bnRyeVN5bmMuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuaWRsOgorCisgICAg
ICAgIEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yIE9LLCByYXRoZXIgdGhhbiBqdXN0IGhhdmluZyAw
IGV2ZXJ5d2hlcmUuCisgICAgICAgICogZmlsZWFwaS9GaWxlRXJyb3IuaDoKKworICAgICAgICBU
dXJuZWQgRmlsZVdyaXRlckNhbGxiYWNrIGludG8gRmlsZVdyaXRlckJhc2VDYWxsYmFjay4KKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAgICAgICAqIGZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorCisgICAgICAgIFJlZmFjdG9yZWQgb3V0IGEgY29t
bW9uIGJhc2UgY2xhc3MsIEZpbGVXcml0ZXJCYXNlLCBmb3IgRmlsZVdyaXRlciBhbmQKKyAgICAg
ICAgRmlsZVdyaXRlclN5bmMuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyLmNwcDoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0
ZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDogQWRkZWQu
CisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHA6CisgICAgICAgICogZmlsZWFw
aS9GaWxlV3JpdGVyU3luYy5oOgorCisgICAgICAgIFNtYWxsIHR3ZWFrcyB0byBkZWFsIHdpdGgg
dGhlIGJhc2UgY2xhc3MgcmVmYWN0b3JpbmcuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmg6CisKKyAgICAg
ICAgUmVtb3ZlZCAiQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsIGFzIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCBpdC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmlkbDoKKwogMjAxMC0xMS0yMyAgQ2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWls
bG9yeUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xNjk1LDYgKzE2OTUsNyBAQCBpZiAoRU5BQkxFX0ZJTEVfU1lTVEVN
KQogICAgICAgICBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwCiAgICAgICAgIGZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAorICAg
ICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0
ZXJTeW5jLmNwcAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKICAgICAgICAg
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3MjYyOCkK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsOSArMTQ2
OCwxMiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFk
LmNwcCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaCBcCiAJV2ViQ29yZS9maWxlYXBp
L0ZpbGVUaHJlYWRUYXNrLmggXAorCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxi
YWNrLmggXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQ2FsbGJhY2suaCBcCiAJV2ViQ29y
ZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3BwIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5o
IFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwIFwKKwlXZWJDb3JlL2ZpbGVh
cGkvRmlsZVdyaXRlckJhc2UuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmNw
cCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmggXAogCVdlYkNvcmUvZmlsZWFw
aS9GbGFncy5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM1LDYgKzE1MzUsOSBAQAogICAgICAgICAgICAgJ2Zp
bGVhcGkvRmlsZVRocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVy
LmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVyLmgnLAorICAgICAgICAgICAg
J2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwJywKKyAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVX
cml0ZXJCYXNlLmgnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxsYmFj
ay5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFjay5oJywKICAgICAg
ICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFw
aS9GaWxlV3JpdGVyU3luYy5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL1dl
YkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zMDY1LDYgKzMwNjUsOCBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfRklMRV9TWVNURU09MSkgCiAgICAgICAgIGZpbGVhcGkvRmlsZVN5c3Rl
bUNhbGxiYWNrLmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCBcCiAg
ICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlci5oIFwKKyAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVy
QmFzZS5oIFwKKyAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmggXAogICAg
ICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFjay5oIFwKICAgICAgICAgZmlsZWFwaS9GaWxl
V3JpdGVyQ2xpZW50LmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmggXApAQCAt
MzA5Nyw2ICszMDk5LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lTVEVNPTEp
IAogICAgICAgICBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwIFwKICAgICAgICAgZmlsZWFwaS9G
aWxlU3lzdGVtQ2FsbGJhY2tzLmNwcCBcCiAgICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlci5jcHAg
XAorICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcCBcCiAgICAgICAgIGZpbGVhcGkv
RmlsZVdyaXRlclN5bmMuY3BwIFwKICAgICAgICAgZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MjY0MykKKysrIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5MTQ3LDYgKzQ5
MTQ3LDE3IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckJhc2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxGaWxlV3JpdGVyQmFzZS5o
Ig0KKwkJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2suaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckNhbGxiYWNrLmgiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk3NSw2ICs5NzUsOSBAQAogCQk0NjcwMEVE
MDEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY3MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8q
IEZpbGVXcml0ZXJTeW5jLmNwcCAqLzsgfTsKIAkJNDY3MDBFRDExMjdCOTZDQjAwRjVENUQ2IC8q
IEZpbGVXcml0ZXJTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NjcwMEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLzsg
fTsKIAkJNDY4OUYxQUYxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY4OUYxQUUxMjY3QkFFMTAw
RThEMzgwIC8qIEZpbGVNZXRhZGF0YS5oICovOyB9OworCQk0NkJDNzI0RTEyOUIxMDRDMDA3MUMw
N0UgLyogRmlsZVdyaXRlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDZCQzcyNEIxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNl
LmNwcCAqLzsgfTsKKwkJNDZCQzcyNEYxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkJDNzI0
QzEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCAqLzsgfTsKKwkJNDZCQzcyNTAx
MjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QkM3MjREMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmggKi87IH07CiAJCTQ2QkQxNkUzMEIyNzk0NzMw
MDFGMDgzOSAvKiBub25lQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDZCRDE2RTIwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVDdXJzb3Iu
cG5nICovOyB9OwogCQk0NkQ0RjI0OTBBRjk3RTgxMDAzNTM4NUEgLyogY2VsbEN1cnNvci5wbmcg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2RDRGMjQ2
MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyAqLzsgfTsKIAkJNDZENEYyNEEwQUY5
N0U4MTAwMzUzODVBIC8qIGNvbnRleHRNZW51Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZENEYyNDcwQUY5N0U4MTAwMzUzODVBIC8q
IGNvbnRleHRNZW51Q3Vyc29yLnBuZyAqLzsgfTsKQEAgLTcwNzksNiArNzA4Miw5IEBACiAJCTQ2
NzAwRUNFMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWxlV3JpdGVyU3luYy5jcHA7IHBhdGggPSBmaWxl
YXBpL0ZpbGVXcml0ZXJTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3
MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODlGMUFFMTI2N0JB
RTEwMEU4RDM4MCAvKiBGaWxlTWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRmlsZU1ldGFkYXRhLmg7IHBhdGggPSBwbGF0Zm9ybS9GaWxlTWV0YWRhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDZCQzcyNEIxMjlCMTA0QzAwNzFDMDdFIC8qIEZp
bGVXcml0ZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZp
bGVXcml0ZXJCYXNlLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NkJDNzI0QzEyOUIxMDRDMDA3MUMwN0UgLyogRmls
ZVdyaXRlckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVdyaXRl
ckJhc2UuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDZCQzcyNEQxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVdyaXRlckJh
c2VDYWxsYmFjay5oOyBwYXRoID0gZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2QkQxNkUyMEIyNzk0NzMwMDFGMDgzOSAvKiBu
b25lQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IG5vbmVDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NkQ0RjI0NjBBRjk3RTgxMDAzNTM4NUEgLyogY2VsbEN1cnNvci5wbmcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5w
bmc7IHBhdGggPSBjZWxsQ3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDZENEYyNDcwQUY5N0U4MTAwMzUzODVBIC8qIGNvbnRleHRNZW51Q3Vyc29yLnBuZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0
aCA9IGNvbnRleHRNZW51Q3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1MTU2LDYgKzE1MTYyLDkgQEAKIAkJCQk5NzZENkM3MDEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVRocmVhZFRhc2suaCAqLywKIAkJCQk5NzZENkM3MTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVdy
aXRlci5jcHAgKi8sCiAJCQkJOTc2RDZDNzIxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVXcml0ZXIu
aCAqLywKKwkJCQk0NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3Bw
ICovLAorCQkJCTQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oICov
LAorCQkJCTQ2QkM3MjREMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
LmggKi8sCiAJCQkJODkzQzQ3QTYxMjM4OTA4QjAwMkIzRDg2IC8qIEZpbGVXcml0ZXJDYWxsYmFj
ay5oICovLAogCQkJCTQ2NzAwRUNFMTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5j
cHAgKi8sCiAJCQkJNDY3MDBFQ0YxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmgg
Ki8sCkBAIC0yMTM3Nyw2ICsyMTM4Niw4IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5
IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2
RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjkyRDRGMTI5
MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2QkM3
MjRGMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDZCQzcyNTAxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCUJDQTI1NzE1MTI5M0MwMTAwMDdBMjYzRCAvKiBWZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUUxRkE3MTI5MzlEQjcwMDRDQjAy
NiAvKiBTY3JvbGxBbmltYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBRDE0MUUxMjk1
RUE0RjAwQUNBOTg5IC8qIEpTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICov
LApAQCAtMjE0NTEsNyArMjE0NjIsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGli
aWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xp
c2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgK
IAkJCQlFbmdsaXNoLApAQCAtMjM5NjYsNiArMjM5NzYsNyBAQAogCQkJCTc1NDE1RDU1MTI5QUIy
RDIwMDNBRDY2OSAvKiBKU1NwZWVjaElucHV0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzU0MTVENTcxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzU0MTVENTkxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRS
ZXN1bHRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ2QkM3MjRFMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNzI2MjgpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTU4LDcgKzI1NTgsNiBAQCBzdWIgSXNBY3RpdmVEb21UeXBlCiAgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIklEQlJlcXVlc3QiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJGaWxl
UmVhZGVyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRlciI7Ci0gICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVXcml0ZXJTeW5jIjsKICAgICByZXR1cm4gMDsKIH0KIApJ
bmRleDogV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJD
b3JlL2ZpbGVhcGkvQXN5bmNGaWxlV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGUobG9uZyBsb25nIHBvc2l0aW9u
LCBCbG9iKiBkYXRhKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBs
ZW5ndGgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHdhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkgLy8gTmVlZGVkIGZvciBGaWxlV3JpdGVy
U3luYyBvbmx5LgorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiA3
MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZpbGVFbnRyeS5oIgogI2luY2x1ZGUgIkZp
bGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJGaWxlV3JpdGVyLmgiCisjaW5jbHVkZSAi
RmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkZpbGVXcml0ZXJDYWxsYmFjay5o
IgogI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCkBAIC03NSw2ICs3NiwyOSBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNvbnRl
eHREZXN0cm95ZWQoKQogICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOwog
fQogCituYW1lc3BhY2UgeworCitjbGFzcyBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2sgOiBw
dWJsaWMgRmlsZVdyaXRlckJhc2VDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxGaWxl
V3JpdGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2soY2FsbGJhY2spKTsKKyAgICB9CisKKyAg
ICBib29sIGhhbmRsZUV2ZW50KEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChzdGF0aWNfY2FzdDxGaWxl
V3JpdGVyKj4oZmlsZVdyaXRlckJhc2UpKTsKKyAgICB9Citwcml2YXRlOgorICAgIENvbnZlcnRU
b0ZpbGVXcml0ZXJDYWxsYmFjayhQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJh
Y2spCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgfQorICAgIFJl
ZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IG1fY2FsbGJhY2s7Cit9OworCit9CisKIHZvaWQgRE9N
RmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNz
UmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGZpbGVFbnRyeSk7CkBA
IC04Miw3ICsxMDYsOCBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRlcihjb25zdCBG
CiAgICAgU3RyaW5nIHBsYXRmb3JtUGF0aCA9IG1fYXN5bmNGaWxlU3lzdGVtLT52aXJ0dWFsVG9Q
bGF0Zm9ybVBhdGgoZmlsZUVudHJ5LT5mdWxsUGF0aCgpKTsKIAogICAgIFJlZlB0cjxGaWxlV3Jp
dGVyPiBmaWxlV3JpdGVyID0gRmlsZVdyaXRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7Ci0gICAgT3duUHRyPEZpbGVXcml0ZXJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZpbGVX
cml0ZXJDYWxsYmFja3M6OmNyZWF0ZShmaWxlV3JpdGVyLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spOworICAgIFJlZlB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiBjb252ZXJzaW9u
Q2FsbGJhY2sgPSBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2s6OmNyZWF0ZShzdWNjZXNzQ2Fs
bGJhY2spOworICAgIE93blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
RmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShmaWxlV3JpdGVyLCBjb252ZXJzaW9uQ2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2spOwogICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVXcml0
ZXIoZmlsZVdyaXRlci5nZXQoKSwgcGxhdGZvcm1QYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsK
IH0KIApJbmRleDogV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwCShyZXZpc2lvbiA3
MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDExICszNSwxOSBAQAogCiAjaW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKICNp
bmNsdWRlICJEaXJlY3RvcnlFbnRyeVN5bmMuaCIKKyNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVFbnRyeVN5bmMuaCIKKyNpbmNsdWRl
ICJGaWxlRXJyb3IuaCIKKyNpbmNsdWRlICJGaWxlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRmls
ZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCIK
KyNpbmNsdWRlICJGaWxlV3JpdGVyU3luYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEZpbGVXcml0ZXJCYXNlOworCiBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiBET01G
aWxlU3lzdGVtU3luYzo6Y3JlYXRlKERPTUZpbGVTeXN0ZW1CYXNlKiBmaWxlU3lzdGVtKQogewog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NRmlsZVN5c3RlbVN5bmMoZmlsZVN5c3RlbS0+bV9u
YW1lLCBmaWxlU3lzdGVtLT5tX2FzeW5jRmlsZVN5c3RlbS5yZWxlYXNlKCkpKTsKQEAgLTY2LDYg
Kzc0LDk0IEBAIFBhc3NSZWZQdHI8RmlsZT4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWEKICAgICBy
ZXR1cm4gRmlsZTo6Y3JlYXRlKHBsYXRmb3JtUGF0aCk7CiB9CiAKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVdyaXRlckJhc2VDYWxs
YmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVjZWl2ZUZpbGVXcml0ZXJD
YWxsYmFjaz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVj
ZWl2ZUZpbGVXcml0ZXJDYWxsYmFjaygpKTsKKyAgICB9CisKKyAgICBib29sIGhhbmRsZUV2ZW50
KEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSkKKyAgICB7CisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBtX2ZpbGVXcml0ZXJCYXNlID0gZmlsZVdyaXRlckJhc2U7CisjZWxzZQorICAgICAg
ICBBU1NFUlRfVU5VU0VEKGZpbGVXcml0ZXJCYXNlLCBmaWxlV3JpdGVyQmFzZSk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBGaWxlV3Jp
dGVyQmFzZSogZmlsZVdyaXRlckJhc2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmlsZVdy
aXRlckJhc2U7CisgICAgfQorI2VuZGlmCitwcml2YXRlOgorICAgIFJlY2VpdmVGaWxlV3JpdGVy
Q2FsbGJhY2soKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgOiBtX2ZpbGVXcml0ZXJCYXNlKDAp
CisjZW5kaWYKKyAgICB7CisgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBGaWxlV3JpdGVyQmFz
ZSogbV9maWxlV3JpdGVyQmFzZTsKKyNlbmRpZgorfTsKKworY2xhc3MgTG9jYWxFcnJvckNhbGxi
YWNrIDogcHVibGljIEVycm9yQ2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExvY2FsRXJyb3JDYWxsYmFjaz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTG9jYWxFcnJvckNhbGxiYWNrKCkpOworICAgIH0KKworICAgIGJvb2wgaGFu
ZGxlRXZlbnQoRmlsZUVycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIG1fZXJyb3IgPSBlcnJv
cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEZpbGVFcnJvciogZXJyb3IoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7CisgICAgfQorcHJpdmF0ZToKKyAg
ICBMb2NhbEVycm9yQ2FsbGJhY2soKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVFcnJv
cj4gbV9lcnJvcjsKK307CisKK30KKworUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRE9NRmls
ZVN5c3RlbVN5bmM6OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnks
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChmaWxlRW50cnkpOworICAgIGVjID0g
MDsKKworICAgIFN0cmluZyBwbGF0Zm9ybVBhdGggPSBtX2FzeW5jRmlsZVN5c3RlbS0+dmlydHVh
bFRvUGxhdGZvcm1QYXRoKGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSk7CisKKyAgICBSZWZQdHI8Rmls
ZVdyaXRlclN5bmM+IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVyU3luYzo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IFJlY2Vp
dmVGaWxlV3JpdGVyQ2FsbGJhY2s6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMb2NhbEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBMb2NhbEVycm9yQ2FsbGJhY2s6OmNyZWF0ZSgpOworCisg
ICAgT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JD
YWxsYmFjayk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVy
LmdldCgpLCBwbGF0Zm9ybVBhdGgsIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworICAgIGlmICghbV9h
c3luY0ZpbGVTeXN0ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKKyAgICAgICAg
ZWMgPSBGaWxlRXhjZXB0aW9uOjpBQk9SVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAoZXJyb3JDYWxsYmFjay0+ZXJyb3IoKSkgeworICAgICAgICBBU1NFUlQoIXN1Y2Nl
c3NDYWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSk7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlv
bjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKGVycm9yQ2FsbGJhY2stPmVycm9yKCktPmNvZGUo
KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBBU1NFUlQoc3VjY2Vzc0NhbGxiYWNr
LT5maWxlV3JpdGVyQmFzZSgpKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RmlsZVdyaXRlclN5
bmMqPihzdWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJCYXNlKCkpID09IGZpbGVXcml0ZXIuZ2V0
KCkpOworICAgIHJldHVybiBmaWxlV3JpdGVyOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
RklMRV9TWVNURU0pCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAkocmV2aXNp
b24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXJl
Y3RvcnlFbnRyeVN5bmM7CiBjbGFzcyBGaWxlOwogY2xhc3MgRmlsZUVudHJ5U3luYzsKK2NsYXNz
IEZpbGVXcml0ZXJTeW5jOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC01Nyw2
ICs1OCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5U3luYz4gcm9v
dCgpOwogCiAgICAgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5
bmMqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3Jl
YXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZh
dGU6CiAgICAgRE9NRmlsZVN5c3RlbVN5bmMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbT4pOwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcAkocmV2
aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAKICNp
bmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlclN5bmMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Nyw2ICs0OCwxMSBAQCBQYXNzUmVmUHRyPEZpbGU+IEZpbGVFbnRy
eVN5bmM6OmZpbGUoRXhjCiAgICAgcmV0dXJuIGZpbGVzeXN0ZW0oKS0+Y3JlYXRlRmlsZSh0aGlz
LCBlYyk7CiB9CiAKK1Bhc3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IEZpbGVFbnRyeVN5bmM6OmNy
ZWF0ZVdyaXRlcihFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZmlsZXN5c3RlbSgp
LT5jcmVhdGVXcml0ZXIodGhpcywgZWMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRklM
RV9TWVNURU0pCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmgJKHJldmlzaW9uIDcyNjI4KQor
KysgV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWxlOworY2xhc3MgRmls
ZVdyaXRlclN5bmM7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBGaWxl
RW50cnlTeW5jIDogcHVibGljIEVudHJ5U3luYyB7CiBwdWJsaWM6CkBAIC01Miw2ICs1NCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNz
UmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBjcmVhdGVXcml0ZXIoRXhjZXB0aW9uQ29kZSYpOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFbnRyeVN5bmM7CkluZGV4OiBXZWJDb3JlL2ZpbGVh
cGkvRmlsZUVudHJ5U3luYy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVF
bnRyeVN5bmMuaWRsCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlRW50
cnlTeW5jLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzYsNSArMzYsNiBAQCBtb2R1bGUgc3RvcmFn
ZSB7CiAgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBGaWxlRW50cnlTeW5jIDogRW50cnlT
eW5jIHsKICAgICAgICAgRmlsZSBmaWxlKCkgcmFpc2VzIChGaWxlRXhjZXB0aW9uKTsKKyAgICAg
ICAgRmlsZVdyaXRlclN5bmMgY3JlYXRlV3JpdGVyKCkgcmFpc2VzIChGaWxlRXhjZXB0aW9uKTsK
ICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVFcnJvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlRXJyb3IuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJD
b3JlL2ZpbGVhcGkvRmlsZUVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsZUVycm9yIDogcHVibGljIFJlZkNvdW50ZWQ8
RmlsZUVycm9yPiB7CiBwdWJsaWM6CiAgICAgZW51bSBFcnJvckNvZGUgeworICAgICAgICBPSyA9
IDAsCiAgICAgICAgIE5PVF9GT1VORF9FUlIgPSAxLAogICAgICAgICBTRUNVUklUWV9FUlIgPSAy
LAogICAgICAgICBBQk9SVF9FUlIgPSAzLApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0
ZW1DYWxsYmFja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVt
Q2FsbGJhY2tzLmNwcAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVN5
c3RlbUNhbGxiYWNrcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNs
dWRlICJGaWxlRXJyb3IuaCIKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJGaWxlV3JpdGVyLmgiCi0jaW5jbHVkZSAi
RmlsZVdyaXRlckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckJhc2UuaCIKKyNpbmNs
dWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGEuaCIKICNp
bmNsdWRlICJNZXRhZGF0YUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgpAQCAtMjEyLDIxICsyMTIsMjEgQEAgdm9pZCBNZXRhZGF0YUNhbGxiYWNrczo6ZGlk
UmVhZE1ldGFkYXRhKAogICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7CiB9CiAKLS8vIEZp
bGVXcml0ZXJDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRmlsZVdyaXRlckJhc2VDYWxsYmFja3MgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QYXNz
T3duUHRyPEZpbGVXcml0ZXJDYWxsYmFja3M+IEZpbGVXcml0ZXJDYWxsYmFja3M6OmNyZWF0ZShQ
YXNzUmVmUHRyPEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaykKK1Bhc3NPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+IEZpbGVXcml0ZXJC
YXNlQ2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxGaWxlV3JpdGVyQmFzZT4gZmlsZVdyaXRl
ciwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEZpbGVXcml0ZXJDYWxsYmFja3MoZmlsZVdyaXRlciwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGaWxlV3JpdGVyQmFz
ZUNhbGxiYWNrcyhmaWxlV3JpdGVyLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsK
IH0KIAotRmlsZVdyaXRlckNhbGxiYWNrczo6RmlsZVdyaXRlckNhbGxiYWNrcyhQYXNzUmVmUHRy
PEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
K0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzOjpGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcyhQYXNzUmVm
UHRyPEZpbGVXcml0ZXJCYXNlPiBmaWxlV3JpdGVyLCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJv
ckNhbGxiYWNrKQogICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UoZXJyb3JDYWxsYmFjaykK
ICAgICAsIG1fZmlsZVdyaXRlcihmaWxlV3JpdGVyKQogICAgICwgbV9zdWNjZXNzQ2FsbGJhY2so
c3VjY2Vzc0NhbGxiYWNrKQogewogfQogCi12b2lkIEZpbGVXcml0ZXJDYWxsYmFja3M6OmRpZENy
ZWF0ZUZpbGVXcml0ZXIoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+IGFzeW5jRmlsZVdyaXRl
ciwgbG9uZyBsb25nIGxlbmd0aCkKK3ZvaWQgRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmRpZENy
ZWF0ZUZpbGVXcml0ZXIoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+IGFzeW5jRmlsZVdyaXRl
ciwgbG9uZyBsb25nIGxlbmd0aCkKIHsKICAgICBtX2ZpbGVXcml0ZXItPmluaXRpYWxpemUoYXN5
bmNGaWxlV3JpdGVyLCBsZW5ndGgpOwogICAgIGlmIChtX3N1Y2Nlc3NDYWxsYmFjaykKSW5kZXg6
IFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAkocmV2aXNpb24gNzI2MjgpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw4ICs0OSw4IEBAIGNsYXNzIEVudHJ5QXJyYXk7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogc3Ry
dWN0IEZpbGVNZXRhZGF0YTsKIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKLWNsYXNzIEZpbGVX
cml0ZXI7Ci1jbGFzcyBGaWxlV3JpdGVyQ2FsbGJhY2s7CitjbGFzcyBGaWxlV3JpdGVyQmFzZTsK
K2NsYXNzIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s7CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwog
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFZvaWRDYWxsYmFjazsKQEAgLTEz
MywxNSArMTMzLDE1IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+IG1f
c3VjY2Vzc0NhbGxiYWNrOwogfTsKIAotY2xhc3MgRmlsZVdyaXRlckNhbGxiYWNrcyA6IHB1Ymxp
YyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CitjbGFzcyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
cyA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8RmlsZVdyaXRlckNhbGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdy
aXRlcj4sIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+
IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZUZpbGVXcml0ZXIoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+LCBsb25n
IGxvbmcgbGVuZ3RoKTsKIAogcHJpdmF0ZToKLSAgICBGaWxlV3JpdGVyQ2FsbGJhY2tzKFBhc3NS
ZWZQdHI8RmlsZVdyaXRlcj4sIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgUmVmUHRyPEZpbGVXcml0ZXI+IG1fZmlsZVdyaXRl
cjsKLSAgICBSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKKyAg
ICBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcyhQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiwgUGFz
c1JlZlB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
Pik7CisgICAgUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiBtX2ZpbGVXcml0ZXI7CisgICAgUmVmUHRy
PEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwogfTsKIAogY2xhc3Mg
Vm9pZENhbGxiYWNrcyA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CkluZGV4OiBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxl
YXBpL0ZpbGVXcml0ZXIuY3BwCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9G
aWxlV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBGaWxlV3JpdGVyOjpGaWxlV3JpdGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICA6
IEZpbGVXcml0ZXJCYXNlKCkKKyAgICAsIEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQog
ICAgICwgbV9yZWFkeVN0YXRlKElOSVQpCi0gICAgLCBtX3Bvc2l0aW9uKDApCiAgICAgLCBtX3N0
YXJ0ZWRXcml0aW5nKGZhbHNlKQogICAgICwgbV9ieXRlc1dyaXR0ZW4oMCkKICAgICAsIG1fYnl0
ZXNUb1dyaXRlKDApCkBAIC01NCwxNCArNTQsNiBAQCBGaWxlV3JpdGVyOjpGaWxlV3JpdGVyKFNj
cmlwdEV4ZWN1dGlvbkNvCiB7CiB9CiAKLXZvaWQgRmlsZVdyaXRlcjo6aW5pdGlhbGl6ZShQYXNz
T3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gd3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQotewotICAg
IEFTU0VSVCghbV93cml0ZXIpOwotICAgIEFTU0VSVChsZW5ndGggPj0gMCk7Ci0gICAgbV93cml0
ZXIgPSB3cml0ZXI7Ci0gICAgbV9sZW5ndGggPSBsZW5ndGg7Ci19Ci0KIEZpbGVXcml0ZXI6On5G
aWxlV3JpdGVyKCkKIHsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpCkBAIC04MSwx
NSArNzMsMTUgQEAgYm9vbCBGaWxlV3JpdGVyOjpjYW5TdXNwZW5kKCkgY29uc3QKIAogdm9pZCBG
aWxlV3JpdGVyOjpzdG9wKCkKIHsKLSAgICBpZiAobV93cml0ZXIgJiYgbV9yZWFkeVN0YXRlID09
IFdSSVRJTkcpCi0gICAgICAgIG1fd3JpdGVyLT5hYm9ydCgpOworICAgIGlmICh3cml0ZXIoKSAm
JiBtX3JlYWR5U3RhdGUgPT0gV1JJVElORykKKyAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7CiAg
ICAgbV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsK
IH0KIAogdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKSB7CiAgICAgICAgIHNldEVycm9yKEZpbGVFcnJv
cjo6SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0LDEyICs5
NiwxMiBAQCB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwCiAgICAgbV9z
dGFydGVkV3JpdGluZyA9IGZhbHNlOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5
dGVzVG9Xcml0ZSA9IGRhdGEtPnNpemUoKTsKLSAgICBtX3dyaXRlci0+d3JpdGUobV9wb3NpdGlv
biwgZGF0YSk7CisgICAgd3JpdGVyKCktPndyaXRlKHBvc2l0aW9uKCksIGRhdGEpOwogfQogCiB2
b2lkIEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKSB7CiAgICAgICAgIHNldEVycm9yKEZpbGVFcnJv
cjo6SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3LDE4ICsx
MDksMTggQEAgdm9pZCBGaWxlV3JpdGVyOjpzZWVrKGxvbmcgbG9uZyBwb3NpdGlvbgogCiAgICAg
bV9ieXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gMDsKLSAgICBpZiAocG9z
aXRpb24gPiBtX2xlbmd0aCkKLSAgICAgICAgcG9zaXRpb24gPSBtX2xlbmd0aDsKKyAgICBpZiAo
cG9zaXRpb24gPiBsZW5ndGgoKSkKKyAgICAgICAgcG9zaXRpb24gPSBsZW5ndGgoKTsKICAgICBl
bHNlIGlmIChwb3NpdGlvbiA8IDApCi0gICAgICAgIHBvc2l0aW9uID0gbV9sZW5ndGggKyBwb3Np
dGlvbjsKKyAgICAgICAgcG9zaXRpb24gPSBsZW5ndGgoKSArIHBvc2l0aW9uOwogICAgIGlmIChw
b3NpdGlvbiA8IDApCiAgICAgICAgIHBvc2l0aW9uID0gMDsKLSAgICBtX3Bvc2l0aW9uID0gcG9z
aXRpb247CisgICAgc2V0UG9zaXRpb24ocG9zaXRpb24pOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6
OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
QVNTRVJUKG1fd3JpdGVyKTsKKyAgICBBU1NFUlQod3JpdGVyKCkpOwogICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gV1JJVElORyB8fCBwb3NpdGlvbiA8IDApIHsKICAgICAgICAgc2V0RXJyb3IoRmls
ZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0xMzcs
MTkgKzEyOSwxOSBAQCB2b2lkIEZpbGVXcml0ZXI6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpCiAg
ICAgbV9ieXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gMDsKICAgICBtX3Ry
dW5jYXRlTGVuZ3RoID0gcG9zaXRpb247Ci0gICAgbV93cml0ZXItPnRydW5jYXRlKHBvc2l0aW9u
KTsKKyAgICB3cml0ZXIoKS0+dHJ1bmNhdGUocG9zaXRpb24pOwogfQogCiB2b2lkIEZpbGVXcml0
ZXI6OmFib3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX3dyaXRlcik7Cisg
ICAgQVNTRVJUKHdyaXRlcigpKTsKICAgICBpZiAobV9yZWFkeVN0YXRlICE9IFdSSVRJTkcpIHsK
ICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpJTlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6Y3JlYXRlKEZp
bGVFcnJvcjo6QUJPUlRfRVJSKTsKLSAgICBtX3dyaXRlci0+YWJvcnQoKTsKKyAgICB3cml0ZXIo
KS0+YWJvcnQoKTsKIH0KIAogdm9pZCBGaWxlV3JpdGVyOjpkaWRXcml0ZShsb25nIGxvbmcgYnl0
ZXMsIGJvb2wgY29tcGxldGUpCkBAIC0xNjIsOSArMTU0LDkgQEAgdm9pZCBGaWxlV3JpdGVyOjpk
aWRXcml0ZShsb25nIGxvbmcgYnl0ZQogICAgIH0KICAgICBtX2J5dGVzV3JpdHRlbiArPSBieXRl
czsKICAgICBBU1NFUlQoKG1fYnl0ZXNXcml0dGVuID09IG1fYnl0ZXNUb1dyaXRlKSB8fCAhY29t
cGxldGUpOwotICAgIG1fcG9zaXRpb24gKz0gYnl0ZXM7Ci0gICAgaWYgKG1fcG9zaXRpb24gPiBt
X2xlbmd0aCkKLSAgICAgICAgbV9sZW5ndGggPSBtX3Bvc2l0aW9uOworICAgIHNldFBvc2l0aW9u
KHBvc2l0aW9uKCkgKyBieXRlcyk7CisgICAgaWYgKHBvc2l0aW9uKCkgPiBsZW5ndGgoKSkKKyAg
ICAgICAgc2V0TGVuZ3RoKHBvc2l0aW9uKCkpOwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCku
cHJvZ3Jlc3NFdmVudCk7CiAgICAgaWYgKGNvbXBsZXRlKSB7CiAgICAgICAgIG1fYmxvYkJlaW5n
V3JpdHRlbi5jbGVhcigpOwpAQCAtMTc4LDkgKzE3MCw5IEBAIHZvaWQgRmlsZVdyaXRlcjo6ZGlk
VHJ1bmNhdGUoKQogewogICAgIEFTU0VSVChtX3RydW5jYXRlTGVuZ3RoID49IDApOwogICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkud3JpdGVzdGFydEV2ZW50KTsKLSAgICBtX2xlbmd0aCA9IG1f
dHJ1bmNhdGVMZW5ndGg7Ci0gICAgaWYgKG1fcG9zaXRpb24gPiBtX2xlbmd0aCkKLSAgICAgICAg
bV9wb3NpdGlvbiA9IG1fbGVuZ3RoOworICAgIHNldExlbmd0aChtX3RydW5jYXRlTGVuZ3RoKTsK
KyAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0aCgpKQorICAgICAgICBzZXRQb3NpdGlvbihsZW5n
dGgoKSk7CiAgICAgbV90cnVuY2F0ZUxlbmd0aCA9IC0xOwogICAgIGZpcmVFdmVudChldmVudE5h
bWVzKCkud3JpdGVFdmVudCk7CiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9GaWxlV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Zp
bGVXcml0ZXIuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw0NSArMzQsMzYgQEAKICNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJBc3luY0Zp
bGVXcml0ZXJDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgIkZpbGVX
cml0ZXJCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBBc3luY0ZpbGVXcml0ZXI7Ci1jbGFzcyBCbG9iOwotY2xhc3MgRmlsZUVy
cm9yOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotY2xhc3MgRmlsZVdyaXRlciA6
IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVXcml0ZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBw
dWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBc3luY0ZpbGVXcml0ZXJDbGllbnQgeworY2xhc3Mg
RmlsZVdyaXRlciA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZSwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
aWxlV3JpdGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZVdyaXRlcihjb250ZXh0KSk7CiAgICAg
fQogCi0gICAgdm9pZCBpbml0aWFsaXplKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiB3cml0
ZXIsIGxvbmcgbG9uZyBsZW5ndGgpOwotCiAgICAgZW51bSBSZWFkeVN0YXRlIHsKICAgICAgICAg
SU5JVCA9IDAsCiAgICAgICAgIFdSSVRJTkcgPSAxLAogICAgICAgICBET05FID0gMgogICAgIH07
CiAKKyAgICAvLyBGaWxlV3JpdGVyQmFzZQogICAgIHZvaWQgd3JpdGUoQmxvYiogZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpOwogICAgIHZvaWQgc2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKICAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBsZW5ndGgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKLSAgICB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAorICAg
IHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQogICAgIEZpbGVFcnJvciogZXJyb3Io
KSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9Ci0gICAgbG9uZyBsb25nIHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCiAgICAgLy8gQXN5bmNGaWxlV3JpdGVyQ2xpZW50
CiAgICAgdm9pZCBkaWRXcml0ZShsb25nIGxvbmcgYnl0ZXMsIGJvb2wgY29tcGxldGUpOwpAQCAt
ODgsOCArNzksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGaWxlV3JpdGVyKiB0b0ZpbGVXcml0
ZXIoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAotICAgIHVzaW5nIFJlZkNvdW50ZWQ8Rmls
ZVdyaXRlcj46OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXI+OjpkZXJlZjsK
KyAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlPjo6cmVmOworICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OjpkZXJlZjsKIAogICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIod3JpdGVzdGFydCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihwcm9ncmVzcyk7CkBAIC0xMDMsOCArOTQsNiBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB+RmlsZVdyaXRlcigpOwogCi0gICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxG
aWxlV3JpdGVyPjsKLQogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgeyBkZXJlZigpOyB9CkBAIC0xMTcsMTAgKzEwNiw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQ
dHI8RmlsZUVycm9yPiBtX2Vycm9yOwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0
RGF0YTsKLSAgICBPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiBtX3dyaXRlcjsKICAgICBSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICBsb25nIGxvbmcgbV9wb3NpdGlvbjsKLSAgICBsb25nIGxv
bmcgbV9sZW5ndGg7CiAgICAgYm9vbCBtX3N0YXJ0ZWRXcml0aW5nOwogICAgIGxvbmcgbG9uZyBt
X2J5dGVzV3JpdHRlbjsKICAgICBsb25nIGxvbmcgbV9ieXRlc1RvV3JpdGU7CkluZGV4OiBXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ZpbGVhcGkv
RmlsZVdyaXRlckJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkZpbGVX
cml0ZXJCYXNlLmgiCisKKyNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXIuaCIKKyNpbmNsdWRlICJC
bG9iLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5o
IgorI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJQcm9ncmVzc0V2ZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsZVdyaXRlckJhc2U6On5GaWxlV3JpdGVyQmFz
ZSgpCit7Cit9CisKK3ZvaWQgRmlsZVdyaXRlckJhc2U6OmluaXRpYWxpemUoUGFzc093blB0cjxB
c3luY0ZpbGVXcml0ZXI+IHdyaXRlciwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
IW1fd3JpdGVyKTsKKyAgICBBU1NFUlQobGVuZ3RoID49IDApOworICAgIG1fd3JpdGVyID0gd3Jp
dGVyOworICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworfQorCitGaWxlV3JpdGVyQmFzZTo6RmlsZVdy
aXRlckJhc2UoKQorICAgIDogbV9wb3NpdGlvbigwKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4OiBXZWJDb3JlL2Zp
bGVhcGkvRmlsZVdyaXRlckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmls
ZVdyaXRlckJhc2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVy
QmFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVdyaXRlckJh
c2VfaAorI2RlZmluZSBGaWxlV3JpdGVyQmFzZV9oCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CisKKyNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFzeW5jRmlsZVdyaXRlcjsK
K2NsYXNzIEJsb2I7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIEZpbGVX
cml0ZXJCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+LCBwdWJsaWMgQXN5
bmNGaWxlV3JpdGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyQmFz
ZSgpOworICAgIHZvaWQgaW5pdGlhbGl6ZShQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gd3Jp
dGVyLCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIHZvaWQgd3JpdGUoQmxvYiogZGF0YSwgRXhj
ZXB0aW9uQ29kZSYgZWMpOworICAgIHZvaWQgc2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKKyAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBsZW5ndGgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKKworICAgIGxvbmcgbG9uZyBwb3NpdGlvbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9wb3NpdGlvbjsKKyAgICB9CisgICAgbG9uZyBsb25nIGxlbmd0aCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgRmlsZVdyaXRlckJhc2UoKTsKKyAgICBBc3luY0ZpbGVXcml0ZXIqIHdyaXRlcigp
CisgICAgeworICAgICAgICByZXR1cm4gbV93cml0ZXIuZ2V0KCk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRQb3NpdGlvbihsb25nIGxvbmcgcG9zaXRpb24pCisgICAgeworICAgICAgICBtX3Bvc2l0
aW9uID0gcG9zaXRpb247CisgICAgfQorICAgIHZvaWQgc2V0TGVuZ3RoKGxvbmcgbG9uZyBsZW5n
dGgpCisgICAgeworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9Citwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OworCisgICAg
T3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gbV93cml0ZXI7CisgICAgbG9uZyBsb25nIG1fcG9zaXRp
b247CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjZW5kaWYgLy8gRmlsZVdyaXRl
ckJhc2VfaApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVdyaXRlckJhc2VDYWxsYmFj
a19oCisjZGVmaW5lIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tfaAorCisjaWYgRU5BQkxFKEZJTEVf
U1lTVEVNKQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWxlV3JpdGVyQmFzZTsKKworY2xhc3MgRmlsZVdyaXRlckJhc2VDYWxs
YmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyQmFzZUNhbGxiYWNrKCkgeyB9CisgICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KEZpbGVXcml0ZXJCYXNlKikgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2tfaApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwCShy
ZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDQ3ICszNCwxMTMgQEAKIAogI2luY2x1ZGUgIkZpbGVXcml0ZXJT
eW5jLmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGaWxlV3JpdGVyU3luYzo6d3Jp
dGUoQmxvYiosIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KLX0KLQotdm9pZCBGaWxlV3JpdGVyU3luYzo6
c2Vlayhsb25nIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KLX0KLQotdm9pZCBGaWxlV3JpdGVy
U3luYzo6dHJ1bmNhdGUobG9uZyBsb25nLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi19Ci0KLWJvb2wg
RmlsZVdyaXRlclN5bmM6OmNhblN1c3BlbmQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJdCBp
cyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIHN1c3BlbmQgYSBGaWxlV3JpdGVyU3luYywgc28g
cGFnZXMgd2l0aCBGaWxlV3JpdGVyIGNhbiBub3QgZ28gaW50byBwYWdlIGNhY2hlLgotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBGaWxlV3JpdGVyU3luYzo6aGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZp
dHkoKTsKLX0KLQotdm9pZCBGaWxlV3JpdGVyU3luYzo6c3RvcCgpCi17Ci19CisjaW5jbHVkZSAi
QXN5bmNGaWxlV3JpdGVyLmgiCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGVFeGNl
cHRpb24uaCIKIAorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWxlV3JpdGVyU3luYzo6RmlsZVdy
aXRlclN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IEFjdGl2ZURP
TU9iamVjdChjb250ZXh0LCB0aGlzKQotICAgICwgbV9wb3NpdGlvbigwKQotICAgICwgbV9sZW5n
dGgoMCkKK3ZvaWQgRmlsZVdyaXRlclN5bmM6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIEFTU0VSVCh3cml0ZXIoKSk7CisgICAgZWMgPSAwOworICAgIGlmICgh
ZGF0YSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OlRZUEVfTUlTTUFUQ0hfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJlcGFyZUZvcldyaXRlKCk7CisgICAgd3Jp
dGVyKCktPndyaXRlKHBvc2l0aW9uKCksIGRhdGEpOworICAgIHdyaXRlcigpLT53YWl0Rm9yT3Bl
cmF0aW9uVG9Db21wbGV0ZSgpOworICAgIEFTU0VSVChtX2NvbXBsZXRlKTsKKyAgICBlYyA9IEZp
bGVFeGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShtX2Vycm9yKTsKKyAgICBpZiAo
IWVjKSB7CisgICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKCkgKyBkYXRhLT5zaXplKCkpOwor
ICAgICAgICBpZiAocG9zaXRpb24oKSA+IGxlbmd0aCgpKQorICAgICAgICAgICAgc2V0TGVuZ3Ro
KHBvc2l0aW9uKCkpOworICAgIH0KK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6c2Vlayhsb25n
IGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVCh3cml0ZXIo
KSk7CisgICAgZWMgPSAwOworICAgIGlmIChwb3NpdGlvbiA+IGxlbmd0aCgpKQorICAgICAgICBw
b3NpdGlvbiA9IGxlbmd0aCgpOworICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkKKyAgICAgICAg
cG9zaXRpb24gPSBsZW5ndGgoKSArIHBvc2l0aW9uOworICAgIGlmIChwb3NpdGlvbiA8IDApCisg
ICAgICAgIHBvc2l0aW9uID0gMDsKKyAgICBzZXRQb3NpdGlvbihwb3NpdGlvbik7Cit9CisKK3Zv
aWQgRmlsZVdyaXRlclN5bmM6OnRydW5jYXRlKGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIEFTU0VSVCh3cml0ZXIoKSk7CisgICAgZWMgPSAwOworICAgIGlmIChv
ZmZzZXQgPCAwKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHJlcGFyZUZvcldyaXRlKCk7CisgICAg
d3JpdGVyKCktPnRydW5jYXRlKG9mZnNldCk7CisgICAgd3JpdGVyKCktPndhaXRGb3JPcGVyYXRp
b25Ub0NvbXBsZXRlKCk7CisgICAgQVNTRVJUKG1fY29tcGxldGUpOworICAgIGVjID0gRmlsZUV4
Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKG1fZXJyb3IpOworICAgIGlmIChtX2Vy
cm9yID09IEZpbGVFcnJvcjo6T0spIHsKKyAgICAgICAgaWYgKG9mZnNldCA8IHBvc2l0aW9uKCkp
CisgICAgICAgICAgICBzZXRQb3NpdGlvbihvZmZzZXQpOworICAgICAgICBzZXRMZW5ndGgob2Zm
c2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsZVdyaXRlclN5bmM6OmRpZFdyaXRlKGxvbmcgbG9u
ZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJy
b3I6Ok9LKTsKKyAgICBBU1NFUlQoIW1fY29tcGxldGUpOworI2lmbmRlZiBOREVCVUcKKyAgICBt
X2NvbXBsZXRlID0gY29tcGxldGU7CisjZWxzZQorICAgIEFTU0VSVF9VTlVTRUQoY29tcGxldGUs
IGNvbXBsZXRlKTsKKyNlbmRpZgorfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjpkaWRUcnVuY2F0
ZSgpCit7CisgICAgQVNTRVJUKG1fZXJyb3IgPT0gRmlsZUVycm9yOjpPSyk7CisgICAgQVNTRVJU
KCFtX2NvbXBsZXRlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21wbGV0ZSA9IHRydWU7Cisj
ZW5kaWYKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6ZGlkRmFpbChGaWxlRXJyb3I6OkVycm9y
Q29kZSBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJyb3I6Ok9LKTsKKyAg
ICBtX2Vycm9yID0gZXJyb3I7CisgICAgQVNTRVJUKCFtX2NvbXBsZXRlKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgbV9jb21wbGV0ZSA9IHRydWU7CisjZW5kaWYKK30KKworRmlsZVdyaXRlclN5bmM6
OkZpbGVXcml0ZXJTeW5jKCkKKyAgICA6IEZpbGVXcml0ZXJCYXNlKCkKKyAgICAsIG1fZXJyb3Io
RmlsZUVycm9yOjpPSykKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2NvbXBsZXRlKHRydWUpCisj
ZW5kaWYKK3sKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6cHJlcGFyZUZvcldyaXRlKCkKK3sK
KyAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpPSzsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21w
bGV0ZSA9IGZhbHNlOworI2VuZGlmCiB9CiAKLQogRmlsZVdyaXRlclN5bmM6On5GaWxlV3JpdGVy
U3luYygpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaAkocmV2aXNpb24gNzI2
MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsOCArMzQsOSBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIkZpbGVX
cml0ZXJCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDM3ICs0NCwzMiBA
QCBjbGFzcyBCbG9iOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0vLyBGSVhNRTog
VGhpcyBpcyBhbiBlbXB0eSBzaGVsbCB3YWl0aW5nIGZvciBpbXBsZW1lbnRhdGlvbi4KLWNsYXNz
IEZpbGVXcml0ZXJTeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlclN5bmM+LCBwdWJs
aWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIEZpbGVXcml0ZXJTeW5jIDogcHVibGljIEZpbGVX
cml0ZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3lu
Yz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZpbGVXcml0ZXJTeW5jKGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGaWxlV3JpdGVyU3luYygpKTsKICAgICB9CiAgICAgdmlydHVhbCB+RmlsZVdy
aXRlclN5bmMoKTsKIAorICAgIC8vIEZpbGVXcml0ZXJCYXNlCiAgICAgdm9pZCB3cml0ZShCbG9i
KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZWVrKGxvbmcgbG9uZyBwb3NpdGlv
biwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0aCwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgbG9uZyBsb25nIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbjsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgdmlydHVhbCBib29sIGNh
blN1c3BlbmQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLQotICAgIHVzaW5nIFJlZkNvdW50ZWQ8
RmlsZVdyaXRlclN5bmM+OjpyZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxGaWxlV3JpdGVyU3lu
Yz46OmRlcmVmOworICAgIC8vIEFzeW5jRmlsZVdyaXRlckNsaWVudCwgdmlhIEZpbGVXcml0ZXJC
YXNlCisgICAgdm9pZCBkaWRXcml0ZShsb25nIGxvbmcgYnl0ZXMsIGJvb2wgY29tcGxldGUpOwor
ICAgIHZvaWQgZGlkVHJ1bmNhdGUoKTsKKyAgICB2b2lkIGRpZEZhaWwoRmlsZUVycm9yOjpFcnJv
ckNvZGUpOwogCiBwcml2YXRlOgotICAgIEZpbGVXcml0ZXJTeW5jKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKLQotICAgIGZyaWVuZCBjbGFzcyBSZWZDb3VudGVkPEZpbGVXcml0ZXJTeW5jPjsK
KyAgICBGaWxlV3JpdGVyU3luYygpOworICAgIHZvaWQgcHJlcGFyZUZvcldyaXRlKCk7CiAKLSAg
ICBsb25nIGxvbmcgbV9wb3NpdGlvbjsKLSAgICBsb25nIGxvbmcgbV9sZW5ndGg7CisgICAgRmls
ZUVycm9yOjpFcnJvckNvZGUgbV9lcnJvcjsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBtX2Nv
bXBsZXRlOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyU3luYy5pZGwJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxl
YXBpL0ZpbGVXcml0ZXJTeW5jLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
bW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPUZJTEVf
U1lTVEVNLAotICAgICAgICBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgXSBG
aWxlV3JpdGVyU3luYyB7CiAgICAgICAgIC8vIHN5bmNocm9ub3VzIHdyaXRlL21vZGlmeSBtZXRo
b2RzCiAgICAgICAgIHZvaWQgd3JpdGUoaW4gQmxvYiBkYXRhKSByYWlzZXMgKEZpbGVFeGNlcHRp
b24pOwo=
</data>
<flag name="review"
          id="65384"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74789</attachid>
            <date>2010-11-24 13:34:47 -0800</date>
            <delta_ts>2010-11-24 15:01:02 -0800</delta_ts>
            <desc>Rolled in David&apos;s feedback.</desc>
            <filename>webcore_sync3.patch</filename>
            <type>text/plain</type>
            <size>43719</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjMgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgRmlsZVdyaXRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5OTM5CisKKyAgICAgICAgVGVzdHMgdG8gZm9sbG93IGluIGEgc2Vw
YXJhdGUgQ0wsIG9uY2UgdGhlIHRlc3QgZnJhbWV3b3JrIGluIDQ3NjgwIGdvZXMgaW4uCisKKyAg
ICAgICAgQnVpbGQgZmlsZSBjaGFuZ2VzIHRvIGFkZCBGaWxlV3JpdGVyQmFzZSBhbmQgRmlsZVdy
aXRlckJhc2VDYWxsYmFjay4KKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgdHVybiBvdXQgdG8gbmVlZCB0byBiZSBhbiBBY3RpdmVET01PYmplY3Qu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisKKyAgICAg
ICAgQWRkZWQgbmV3IEFzeW5jRmlsZVdyaXRlcjo6d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUg
dG8gZW5hYmxlCisgICAgICAgIHN5bmNocm9ub3VzIGNhbGxzLgorICAgICAgICAqIGZpbGVhcGkv
QXN5bmNGaWxlV3JpdGVyLmg6CisKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8gZ2V0IGEgRmlsZVN5
c3RlbVN5bmMuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6CisgICAg
ICAgICogZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVF
bnRyeVN5bmMuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuaWRsOgorCisgICAg
ICAgIEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yIE9LLCByYXRoZXIgdGhhbiBqdXN0IGhhdmluZyAw
IGV2ZXJ5d2hlcmUuCisgICAgICAgICogZmlsZWFwaS9GaWxlRXJyb3IuaDoKKworICAgICAgICBU
dXJuZWQgRmlsZVdyaXRlckNhbGxiYWNrIGludG8gRmlsZVdyaXRlckJhc2VDYWxsYmFjay4KKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAgICAgICAqIGZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorCisgICAgICAgIFJlZmFjdG9yZWQgb3V0IGEgY29t
bW9uIGJhc2UgY2xhc3MsIEZpbGVXcml0ZXJCYXNlLCBmb3IgRmlsZVdyaXRlciBhbmQKKyAgICAg
ICAgRmlsZVdyaXRlclN5bmMuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyLmNwcDoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0
ZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDogQWRkZWQu
CisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHA6CisgICAgICAgICogZmlsZWFw
aS9GaWxlV3JpdGVyU3luYy5oOgorCisgICAgICAgIFNtYWxsIHR3ZWFrcyB0byBkZWFsIHdpdGgg
dGhlIGJhc2UgY2xhc3MgcmVmYWN0b3JpbmcuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmg6CisKKyAgICAg
ICAgUmVtb3ZlZCAiQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsIGFzIEZpbGVXcml0
ZXJTeW5jIGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCBpdC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVX
cml0ZXJTeW5jLmlkbDoKKwogMjAxMC0xMS0yMyAgQ2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWls
bG9yeUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xNjk1LDYgKzE2OTUsNyBAQCBpZiAoRU5BQkxFX0ZJTEVfU1lTVEVN
KQogICAgICAgICBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwCiAgICAgICAgIGZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAorICAg
ICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0
ZXJTeW5jLmNwcAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKICAgICAgICAg
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3MjYyOCkK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsOSArMTQ2
OCwxMiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFk
LmNwcCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaCBcCiAJV2ViQ29yZS9maWxlYXBp
L0ZpbGVUaHJlYWRUYXNrLmggXAotCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQ2FsbGJhY2su
aCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3BwIFwKIAlXZWJDb3JlL2ZpbGVhcGkv
RmlsZVdyaXRlci5oIFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwIFwKKwlX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaCBcCisJV2ViQ29yZS9maWxlYXBpL0ZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2suaCBcCisJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFj
ay5oIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwIFwKIAlXZWJDb3JlL2Zp
bGVhcGkvRmlsZVdyaXRlclN5bmMuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZsYWdzLmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MzUsNiArMTUzNSw5IEBACiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlVGhyZWFk
VGFzay5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwJywKICAgICAgICAg
ICAgICdmaWxlYXBpL0ZpbGVXcml0ZXIuaCcsCisgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3Jp
dGVyQmFzZS5jcHAnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaCcsCisg
ICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgnLAogICAgICAgICAg
ICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2ZpbGVhcGkv
RmlsZVdyaXRlclN5bmMuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJTeW5j
LmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTMwNjUsNiArMzA2NSw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9G
SUxFX1NZU1RFTT0xKSAKICAgICAgICAgZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2suaCBcCiAg
ICAgICAgIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oIFwKICAgICAgICAgZmlsZWFwaS9G
aWxlV3JpdGVyLmggXAorICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmggXAorICAgICAg
ICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBcCiAgICAgICAgIGZpbGVhcGkvRmls
ZVdyaXRlckNhbGxiYWNrLmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJDbGllbnQuaCBc
CiAgICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaCBcCkBAIC0zMDk3LDYgKzMwOTksNyBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRklMRV9TWVNURU09MSkgCiAgICAgICAgIGZpbGVh
cGkvRmlsZUVudHJ5U3luYy5jcHAgXAogICAgICAgICBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFj
a3MuY3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcCBcCisgICAgICAgIGZpbGVh
cGkvRmlsZVdyaXRlckJhc2UuY3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5j
cHAgXAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDcyNjQzKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDkxNDcsNiArNDkxNDcsMTcgQEAKIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxG
aWxlV3JpdGVyQmFzZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEZpbGVXcml0ZXJCYXNlLmgiDQorCQkJCT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckJhc2VDYWxsYmFj
ay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZmlsZWFwaVxGaWxlV3JpdGVyQ2FsbGJhY2suaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NzI2MjgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtOTc1LDYgKzk3NSw5IEBACiAJCTQ2NzAwRUQwMTI3Qjk2Q0IwMEY1RDVE
NiAvKiBGaWxlV3JpdGVyU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMu
Y3BwICovOyB9OwogCQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNG
MTI3Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICovOyB9OwogCQk0Njg5RjFBRjEy
NjdCQUUxMDBFOEQzODAgLyogRmlsZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Njg5RjFBRTEyNjdCQUUxMDBFOEQzODAgLyogRmlsZU1l
dGFkYXRhLmggKi87IH07CisJCTQ2QkM3MjRFMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVy
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3BwICovOyB9OworCQk0
NkJDNzI0RjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZS5oICovOyB9OworCQk0NkJDNzI1MDEyOUIxMDRDMDA3MUMwN0Ug
LyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDZCQzcyNEQxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJC
YXNlQ2FsbGJhY2suaCAqLzsgfTsKIAkJNDZCRDE2RTMwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVD
dXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NkJEMTZFMjBCMjc5NDczMDAxRjA4MzkgLyogbm9uZUN1cnNvci5wbmcgKi87IH07CiAJCTQ2
RDRGMjQ5MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZENEYyNDYwQUY5N0U4MTAwMzUzODVB
IC8qIGNlbGxDdXJzb3IucG5nICovOyB9OwogCQk0NkQ0RjI0QTBBRjk3RTgxMDAzNTM4NUEgLyog
Y29udGV4dE1lbnVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NkQ0RjI0NzBBRjk3RTgxMDAzNTM4NUEgLyogY29udGV4dE1lbnVDdXJz
b3IucG5nICovOyB9OwpAQCAtNzA3OSw2ICs3MDgyLDkgQEAKIAkJNDY3MDBFQ0UxMjdCOTZDQjAw
RjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZpbGVXcml0ZXJTeW5jLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5
bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjcwMEVDRjEyN0I5NkNCMDBG
NUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRmlsZVdyaXRlclN5bmMuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY4OUYxQUUxMjY3QkFFMTAwRThEMzgwIC8qIEZp
bGVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlTWV0YWRh
dGEuaDsgcGF0aCA9IHBsYXRmb3JtL0ZpbGVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVdyaXRlckJhc2UuY3Bw
OyBwYXRoID0gZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZS5oOyBwYXRoID0g
ZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NkJDNzI0RDEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmg7IHBh
dGggPSBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDZCRDE2RTIwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVDdXJzb3IucG5nICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5n
OyBwYXRoID0gbm9uZUN1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2
RDRGMjQ2MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGNlbGxD
dXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkQ0RjI0NzBBRjk3RTgx
MDAzNTM4NUEgLyogY29udGV4dE1lbnVDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gY29udGV4dE1lbnVD
dXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxNTYsNiArMTUxNjIs
OSBAQAogCQkJCTk3NkQ2QzcwMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkVGFzay5oICov
LAogCQkJCTk3NkQ2QzcxMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlV3JpdGVyLmNwcCAqLywKIAkJ
CQk5NzZENkM3MjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVdyaXRlci5oICovLAorCQkJCTQ2QkM3
MjRCMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAgKi8sCisJCQkJNDZCQzcy
NEMxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmggKi8sCisJCQkJNDZCQzcyNEQx
MjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCAqLywKIAkJCQk4OTND
NDdBNjEyMzg5MDhCMDAyQjNEODYgLyogRmlsZVdyaXRlckNhbGxiYWNrLmggKi8sCiAJCQkJNDY3
MDBFQ0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLywKIAkJCQk0Njcw
MEVDRjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLywKQEAgLTIxMzc3LDYg
KzIxMzg2LDggQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVT
b3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNT
QXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOTJENEYxMjkzNTUwQjAwQzgzODdGIC8q
IEZvbnRCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDZCQzcyNEYxMjlCMTA0QzAwNzFD
MDdFIC8qIEZpbGVXcml0ZXJCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NkJDNzI1MDEyOUIx
MDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNBMjU3MTUxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNBRTFGQTcxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFuaW1h
dG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUFEMTQxRTEyOTVFQTRGMDBBQ0E5ODkgLyog
SlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzk2Niw2ICsy
Mzk3Nyw3IEBACiAJCQkJNzU0MTVENTUxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRF
dmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTQxNUQ1NzEyOUFCMkQyMDAzQUQ2NjkgLyog
SlNTcGVlY2hJbnB1dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTQxNUQ1OTEyOUFC
MkQyMDAzQUQ2NjkgLyogSlNTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDZCQzcyNEUxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI1NTgsNyArMjU1OCw2IEBAIHN1YiBJ
c0FjdGl2ZURvbVR5cGUKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCUmVxdWVzdCI7CiAg
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVSZWFkZXIiOwogICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJGaWxlV3JpdGVyIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRl
clN5bmMiOwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQXN5bmNG
aWxlV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRl
ci5oCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVXcml0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCB3cml0ZShsb25nIGxvbmcgcG9zaXRpb24sIEJsb2IqIGRhdGEpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBhYm9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxl
dGUoKSAvLyBOZWVkZWQgZm9yIEZpbGVXcml0ZXJTeW5jIG9ubHkuCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkv
RE9NRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0RP
TUZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiRmlsZUVudHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1
ZGUgIkZpbGVXcml0ZXIuaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiRmlsZVdyaXRlckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGFDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTc1LDYgKzc2LDI5
IEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgQWN0aXZlRE9N
T2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7CiB9CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIENv
bnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb252ZXJ0VG9GaWxlV3JpdGVyQ2Fs
bGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJhY2spCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxs
YmFjayhjYWxsYmFjaykpOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRl
ckJhc2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2st
PmhhbmRsZUV2ZW50KHN0YXRpY19jYXN0PEZpbGVXcml0ZXIqPihmaWxlV3JpdGVyQmFzZSkpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrKFBhc3NSZWZQ
dHI8RmlsZVdyaXRlckNhbGxiYWNrPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNh
bGxiYWNrKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gbV9j
YWxsYmFjazsKK307CisKK30KKwogdm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29u
c3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
IHsKICAgICBBU1NFUlQoZmlsZUVudHJ5KTsKQEAgLTgyLDcgKzEwNiw4IEBAIHZvaWQgRE9NRmls
ZVN5c3RlbTo6Y3JlYXRlV3JpdGVyKGNvbnN0IEYKICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0g
bV9hc3luY0ZpbGVTeXN0ZW0tPnZpcnR1YWxUb1BsYXRmb3JtUGF0aChmaWxlRW50cnktPmZ1bGxQ
YXRoKCkpOwogCiAgICAgUmVmUHRyPEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVy
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBPd25QdHI8RmlsZVdyaXRl
ckNhbGxiYWNrcz4gY2FsbGJhY2tzID0gRmlsZVdyaXRlckNhbGxiYWNrczo6Y3JlYXRlKGZpbGVX
cml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgUmVmUHRyPEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2s+IGNvbnZlcnNpb25DYWxsYmFjayA9IENvbnZlcnRUb0ZpbGVXcml0
ZXJDYWxsYmFjazo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgT3duUHRyPEZpbGVXcml0
ZXJCYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6Y3Jl
YXRlKGZpbGVXcml0ZXIsIGNvbnZlcnNpb25DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAg
bV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVyLmdldCgpLCBwbGF0Zm9y
bVBhdGgsIGNhbGxiYWNrcy5yZWxlYXNlKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkv
RE9NRmlsZVN5c3RlbVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9ET01G
aWxlU3lzdGVtU3luYy5jcHAJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0RP
TUZpbGVTeXN0ZW1TeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE5IEBACiAK
ICNpbmNsdWRlICJET01GaWxlUGF0aC5oIgogI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5U3luYy5o
IgorI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVk
ZSAiRmlsZUVudHJ5U3luYy5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIkZp
bGVFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVk
ZSAiRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJTeW5jLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRmlsZVdyaXRlckJhc2U7CisKIFBhc3NS
ZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGUoRE9NRmls
ZVN5c3RlbUJhc2UqIGZpbGVTeXN0ZW0pCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01G
aWxlU3lzdGVtU3luYyhmaWxlU3lzdGVtLT5tX25hbWUsIGZpbGVTeXN0ZW0tPm1fYXN5bmNGaWxl
U3lzdGVtLnJlbGVhc2UoKSkpOwpAQCAtNjYsNiArNzQsOTcgQEAgUGFzc1JlZlB0cjxGaWxlPiBE
T01GaWxlU3lzdGVtU3luYzo6Y3JlYQogICAgIHJldHVybiBGaWxlOjpjcmVhdGUocGxhdGZvcm1Q
YXRoKTsKIH0KIAorbmFtZXNwYWNlIHsKKworY2xhc3MgUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFj
ayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrKCkpOwor
ICAgIH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJC
YXNlKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fZmlsZVdyaXRlckJhc2UgPSBm
aWxlV3JpdGVyQmFzZTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9VTlVTRUQoZmlsZVdyaXRlckJh
c2UsIGZpbGVXcml0ZXJCYXNlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisjaWZuZGVmIE5ERUJVRworICAgIEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9maWxlV3JpdGVyQmFzZTsKKyAgICB9CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrKCkKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIDogbV9maWxlV3JpdGVyQmFzZSgwKQorI2VuZGlmCisgICAgeworICAgIH0KKyNp
Zm5kZWYgTkRFQlVHCisgICAgRmlsZVdyaXRlckJhc2UqIG1fZmlsZVdyaXRlckJhc2U7CisjZW5k
aWYKK307CisKK2NsYXNzIExvY2FsRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBFcnJvckNhbGxiYWNr
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbEVycm9yQ2FsbGJhY2s+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsRXJyb3JDYWxs
YmFjaygpKTsKKyAgICB9CisKKyAgICBib29sIGhhbmRsZUV2ZW50KEZpbGVFcnJvciogZXJyb3Ip
CisgICAgeworICAgICAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIEZpbGVFcnJvciogZXJyb3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZXJyb3IuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIExvY2FsRXJyb3JDYWxsYmFjaygp
CisgICAgeworICAgIH0KKyAgICBSZWZQdHI8RmlsZUVycm9yPiBtX2Vycm9yOworfTsKKworfQor
CitQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlV3Jp
dGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZpbGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgQVNTRVJUKGZpbGVFbnRyeSk7CisgICAgZWMgPSAwOworCisgICAgU3RyaW5nIHBsYXRm
b3JtUGF0aCA9IG1fYXN5bmNGaWxlU3lzdGVtLT52aXJ0dWFsVG9QbGF0Zm9ybVBhdGgoZmlsZUVu
dHJ5LT5mdWxsUGF0aCgpKTsKKworICAgIFJlZlB0cjxGaWxlV3JpdGVyU3luYz4gZmlsZVdyaXRl
ciA9IEZpbGVXcml0ZXJTeW5jOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UmVjZWl2ZUZpbGVXcml0
ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjazo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPExvY2FsRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9
IExvY2FsRXJyb3JDYWxsYmFjazo6Y3JlYXRlKCk7CisKKyAgICBPd25QdHI8RmlsZVdyaXRlckJh
c2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzOjpjcmVhdGUo
ZmlsZVdyaXRlciwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBtX2FzeW5j
RmlsZVN5c3RlbS0+Y3JlYXRlV3JpdGVyKGZpbGVXcml0ZXIuZ2V0KCksIHBsYXRmb3JtUGF0aCwg
Y2FsbGJhY2tzLnJlbGVhc2UoKSk7CisgICAgaWYgKCFtX2FzeW5jRmlsZVN5c3RlbS0+d2FpdEZv
ck9wZXJhdGlvblRvQ29tcGxldGUoKSkgeworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkFC
T1JUX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChlcnJvckNhbGxiYWNr
LT5lcnJvcigpKSB7CisgICAgICAgIEFTU0VSVCghc3VjY2Vzc0NhbGxiYWNrLT5maWxlV3JpdGVy
QmFzZSgpKTsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpFcnJvckNvZGVUb0V4Y2VwdGlv
bkNvZGUoZXJyb3JDYWxsYmFjay0+ZXJyb3IoKS0+Y29kZSgpKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIEFTU0VSVChzdWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJCYXNlKCkpOwor
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxGaWxlV3JpdGVyU3luYyo+KHN1Y2Nlc3NDYWxsYmFjay0+
ZmlsZVdyaXRlckJhc2UoKSkgPT0gZmlsZVdyaXRlci5nZXQoKSk7CisgICAgcmV0dXJuIGZpbGVX
cml0ZXI7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdl
YkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUv
ZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERpcmVjdG9yeUVudHJ5U3luYzsKIGNsYXNz
IEZpbGU7CiBjbGFzcyBGaWxlRW50cnlTeW5jOworY2xhc3MgRmlsZVdyaXRlclN5bmM7CiAKIHR5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8RGlyZWN0b3J5RW50cnlTeW5jPiByb290KCk7CiAKICAgICBQYXNzUmVmUHRy
PEZpbGU+IGNyZWF0ZUZpbGUoY29uc3QgRmlsZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVu
dHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKICAgICBET01GaWxlU3lzdGVt
U3luYyhjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7Cklu
ZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNv
cmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKIAogI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNs
dWRlICJGaWxlV3JpdGVyU3luYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDYg
KzQ4LDExIEBAIFBhc3NSZWZQdHI8RmlsZT4gRmlsZUVudHJ5U3luYzo6ZmlsZShFeGMKICAgICBy
ZXR1cm4gZmlsZXN5c3RlbSgpLT5jcmVhdGVGaWxlKHRoaXMsIGVjKTsKIH0KIAorUGFzc1JlZlB0
cjxGaWxlV3JpdGVyU3luYz4gRmlsZUVudHJ5U3luYzo6Y3JlYXRlV3JpdGVyKEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHJldHVybiBmaWxlc3lzdGVtKCktPmNyZWF0ZVdyaXRlcih0aGlzLCBl
Yyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBp
L0ZpbGVFbnRyeVN5bmMuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmls
ZUVudHJ5U3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZpbGU7CitjbGFzcyBGaWxlV3JpdGVyU3luYzsKIAogY2xhc3Mg
RmlsZUVudHJ5U3luYyA6IHB1YmxpYyBFbnRyeVN5bmMgewogcHVibGljOgpAQCAtNTIsNiArNTMs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIFBhc3NSZWZQdHI8RmlsZT4gZmlsZShFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3JlYXRlV3JpdGVyKEV4Y2VwdGlvbkNvZGUmKTsK
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRW50cnlTeW5jOwpJbmRleDogV2ViQ29yZS9m
aWxlYXBpL0ZpbGVFbnRyeVN5bmMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9G
aWxlRW50cnlTeW5jLmlkbAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmls
ZUVudHJ5U3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDUgKzM2LDYgQEAgbW9kdWxlIHN0
b3JhZ2UgewogICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gRmlsZUVudHJ5U3luYyA6IEVu
dHJ5U3luYyB7CiAgICAgICAgIEZpbGUgZmlsZSgpIHJhaXNlcyAoRmlsZUV4Y2VwdGlvbik7Cisg
ICAgICAgIEZpbGVXcml0ZXJTeW5jIGNyZWF0ZVdyaXRlcigpIHJhaXNlcyAoRmlsZUV4Y2VwdGlv
bik7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlRXJyb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVycm9yLmgJKHJldmlzaW9uIDcyNjI4KQorKysg
V2ViQ29yZS9maWxlYXBpL0ZpbGVFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbGVFcnJvciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEZpbGVFcnJvcj4gewogcHVibGljOgogICAgIGVudW0gRXJyb3JDb2RlIHsKKyAgICAgICAg
T0sgPSAwLAogICAgICAgICBOT1RfRk9VTkRfRVJSID0gMSwKICAgICAgICAgU0VDVVJJVFlfRVJS
ID0gMiwKICAgICAgICAgQUJPUlRfRVJSID0gMywKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxl
U3lzdGVtQ2FsbGJhY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVN5
c3RlbUNhbGxiYWNrcy5jcHAJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0Zp
bGVTeXN0ZW1DYWxsYmFja3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBACiAj
aW5jbHVkZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRmlsZVdyaXRlci5oIgotI2luY2x1
ZGUgIkZpbGVXcml0ZXJDYWxsYmFjay5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlLmgiCisj
aW5jbHVkZSAiRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIk1ldGFkYXRhLmgi
CiAjaW5jbHVkZSAiTWV0YWRhdGFDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKQEAgLTIxMiwyMSArMjEyLDIxIEBAIHZvaWQgTWV0YWRhdGFDYWxsYmFja3M6
OmRpZFJlYWRNZXRhZGF0YSgKICAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigpOwogfQogCi0v
LyBGaWxlV3JpdGVyQ2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
UGFzc093blB0cjxGaWxlV3JpdGVyQ2FsbGJhY2tzPiBGaWxlV3JpdGVyQ2FsbGJhY2tzOjpjcmVh
dGUoUGFzc1JlZlB0cjxGaWxlV3JpdGVyPiBmaWxlV3JpdGVyLCBQYXNzUmVmUHRyPEZpbGVXcml0
ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCitQYXNzT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBGaWxlV3Jp
dGVyQmFzZUNhbGxiYWNrczo6Y3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+IGZpbGVX
cml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBGaWxlV3JpdGVyQ2FsbGJhY2tzKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmlsZVdyaXRl
ckJhc2VDYWxsYmFja3MoZmlsZVdyaXRlciwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNr
KSk7CiB9CiAKLUZpbGVXcml0ZXJDYWxsYmFja3M6OkZpbGVXcml0ZXJDYWxsYmFja3MoUGFzc1Jl
ZlB0cjxGaWxlV3JpdGVyPiBmaWxlV3JpdGVyLCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2spCitGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6RmlsZVdyaXRlckJhc2VDYWxsYmFja3MoUGFz
c1JlZlB0cjxGaWxlV3JpdGVyQmFzZT4gZmlsZVdyaXRlciwgUGFzc1JlZlB0cjxGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaykKICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJh
Y2spCiAgICAgLCBtX2ZpbGVXcml0ZXIoZmlsZVdyaXRlcikKICAgICAsIG1fc3VjY2Vzc0NhbGxi
YWNrKHN1Y2Nlc3NDYWxsYmFjaykKIHsKIH0KIAotdm9pZCBGaWxlV3JpdGVyQ2FsbGJhY2tzOjpk
aWRDcmVhdGVGaWxlV3JpdGVyKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiBhc3luY0ZpbGVX
cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgpCit2b2lkIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzOjpk
aWRDcmVhdGVGaWxlV3JpdGVyKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiBhc3luY0ZpbGVX
cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgpCiB7CiAgICAgbV9maWxlV3JpdGVyLT5pbml0aWFsaXpl
KGFzeW5jRmlsZVdyaXRlciwgbGVuZ3RoKTsKICAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spCklu
ZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgJKHJldmlzaW9uIDcyNjI4KQor
KysgV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksOCArNDksOCBAQCBjbGFzcyBFbnRyeUFycmF5OwogY2xhc3MgRW50cnlDYWxsYmFjazsK
IHN0cnVjdCBGaWxlTWV0YWRhdGE7CiBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJhY2s7Ci1jbGFzcyBG
aWxlV3JpdGVyOwotY2xhc3MgRmlsZVdyaXRlckNhbGxiYWNrOworY2xhc3MgRmlsZVdyaXRlckJh
c2U7CitjbGFzcyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrOwogY2xhc3MgTWV0YWRhdGFDYWxsYmFj
azsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBWb2lkQ2FsbGJhY2s7CkBA
IC0xMzMsMTUgKzEzMywxNSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxNZXRhZGF0YUNhbGxiYWNr
PiBtX3N1Y2Nlc3NDYWxsYmFjazsKIH07CiAKLWNsYXNzIEZpbGVXcml0ZXJDYWxsYmFja3MgOiBw
dWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgeworY2xhc3MgRmlsZVdyaXRlckJhc2VDYWxs
YmFja3MgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPEZpbGVXcml0ZXJDYWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRyPEZp
bGVXcml0ZXI+LCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJy
b3JDYWxsYmFjaz4pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJh
Y2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxGaWxlV3JpdGVyQmFzZT4sIFBhc3NSZWZQdHI8RmlsZVdy
aXRlckJhc2VDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRDcmVhdGVGaWxlV3JpdGVyKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiwg
bG9uZyBsb25nIGxlbmd0aCk7CiAKIHByaXZhdGU6Ci0gICAgRmlsZVdyaXRlckNhbGxiYWNrcyhQ
YXNzUmVmUHRyPEZpbGVXcml0ZXI+LCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4sIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwotICAgIFJlZlB0cjxGaWxlV3JpdGVyPiBtX2ZpbGVX
cml0ZXI7Ci0gICAgUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7
CisgICAgRmlsZVdyaXRlckJhc2VDYWxsYmFja3MoUGFzc1JlZlB0cjxGaWxlV3JpdGVyQmFzZT4s
IFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4pOworICAgIFJlZlB0cjxGaWxlV3JpdGVyQmFzZT4gbV9maWxlV3JpdGVyOworICAgIFJl
ZlB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKIH07CiAKIGNs
YXNzIFZvaWRDYWxsYmFja3MgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewpJbmRl
eDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVh
cGkvRmlsZVdyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogRmlsZVdyaXRlcjo6RmlsZVdyaXRlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAg
LCBtX3JlYWR5U3RhdGUoSU5JVCkKLSAgICAsIG1fcG9zaXRpb24oMCkKICAgICAsIG1fc3RhcnRl
ZFdyaXRpbmcoZmFsc2UpCiAgICAgLCBtX2J5dGVzV3JpdHRlbigwKQogICAgICwgbV9ieXRlc1Rv
V3JpdGUoMCkKQEAgLTU0LDE0ICs1Myw2IEBAIEZpbGVXcml0ZXI6OkZpbGVXcml0ZXIoU2NyaXB0
RXhlY3V0aW9uQ28KIHsKIH0KIAotdm9pZCBGaWxlV3JpdGVyOjppbml0aWFsaXplKFBhc3NPd25Q
dHI8QXN5bmNGaWxlV3JpdGVyPiB3cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgpCi17Ci0gICAgQVNT
RVJUKCFtX3dyaXRlcik7Ci0gICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKLSAgICBtX3dyaXRlciA9
IHdyaXRlcjsKLSAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLX0KLQogRmlsZVdyaXRlcjo6fkZpbGVX
cml0ZXIoKQogewogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gV1JJVElORykKQEAgLTgxLDE1ICs3
MiwxNSBAQCBib29sIEZpbGVXcml0ZXI6OmNhblN1c3BlbmQoKSBjb25zdAogCiB2b2lkIEZpbGVX
cml0ZXI6OnN0b3AoKQogewotICAgIGlmIChtX3dyaXRlciAmJiBtX3JlYWR5U3RhdGUgPT0gV1JJ
VElORykKLSAgICAgICAgbV93cml0ZXItPmFib3J0KCk7CisgICAgaWYgKHdyaXRlcigpICYmIG1f
cmVhZHlTdGF0ZSA9PSBXUklUSU5HKQorICAgICAgICB3cml0ZXIoKS0+YWJvcnQoKTsKICAgICBt
X2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwogfQog
CiB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIEFTU0VSVChtX3dyaXRlcik7CisgICAgQVNTRVJUKHdyaXRlcigpKTsKICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpJ
TlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0xMDQsMTIgKzk1LDEy
IEBAIHZvaWQgRmlsZVdyaXRlcjo6d3JpdGUoQmxvYiogZGF0YSwgRXhjZXAKICAgICBtX3N0YXJ0
ZWRXcml0aW5nID0gZmFsc2U7CiAgICAgbV9ieXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNU
b1dyaXRlID0gZGF0YS0+c2l6ZSgpOwotICAgIG1fd3JpdGVyLT53cml0ZShtX3Bvc2l0aW9uLCBk
YXRhKTsKKyAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7CiB9CiAKIHZvaWQg
RmlsZVdyaXRlcjo6c2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIEFTU0VSVChtX3dyaXRlcik7CisgICAgQVNTRVJUKHdyaXRlcigpKTsKICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IFdSSVRJTkcpIHsKICAgICAgICAgc2V0RXJyb3IoRmlsZUVycm9yOjpJ
TlZBTElEX1NUQVRFX0VSUiwgZWMpOwogICAgICAgICByZXR1cm47CkBAIC0xMTcsMTggKzEwOCwx
MiBAQCB2b2lkIEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBvc2l0aW9uCiAKICAgICBtX2J5
dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAwOwotICAgIGlmIChwb3NpdGlv
biA+IG1fbGVuZ3RoKQotICAgICAgICBwb3NpdGlvbiA9IG1fbGVuZ3RoOwotICAgIGVsc2UgaWYg
KHBvc2l0aW9uIDwgMCkKLSAgICAgICAgcG9zaXRpb24gPSBtX2xlbmd0aCArIHBvc2l0aW9uOwot
ICAgIGlmIChwb3NpdGlvbiA8IDApCi0gICAgICAgIHBvc2l0aW9uID0gMDsKLSAgICBtX3Bvc2l0
aW9uID0gcG9zaXRpb247CisgICAgc2Vla0ludGVybmFsKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBG
aWxlV3JpdGVyOjp0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIEFTU0VSVChtX3dyaXRlcik7CisgICAgQVNTRVJUKHdyaXRlcigpKTsKICAgICBp
ZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcgfHwgcG9zaXRpb24gPCAwKSB7CiAgICAgICAgIHNl
dEVycm9yKEZpbGVFcnJvcjo6SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMTM3LDE5ICsxMjIsMTkgQEAgdm9pZCBGaWxlV3JpdGVyOjp0cnVuY2F0ZShsb25nIGxv
bmcgcG9zaQogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5dGVzVG9Xcml0ZSA9IDA7
CiAgICAgbV90cnVuY2F0ZUxlbmd0aCA9IHBvc2l0aW9uOwotICAgIG1fd3JpdGVyLT50cnVuY2F0
ZShwb3NpdGlvbik7CisgICAgd3JpdGVyKCktPnRydW5jYXRlKHBvc2l0aW9uKTsKIH0KIAogdm9p
ZCBGaWxlV3JpdGVyOjphYm9ydChFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBBU1NFUlQobV93
cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBX
UklUSU5HKSB7CiAgICAgICAgIHNldEVycm9yKEZpbGVFcnJvcjo6SU5WQUxJRF9TVEFURV9FUlIs
IGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fZXJyb3IgPSBGaWxlRXJyb3I6
OmNyZWF0ZShGaWxlRXJyb3I6OkFCT1JUX0VSUik7Ci0gICAgbV93cml0ZXItPmFib3J0KCk7Cisg
ICAgd3JpdGVyKCktPmFib3J0KCk7CiB9CiAKIHZvaWQgRmlsZVdyaXRlcjo6ZGlkV3JpdGUobG9u
ZyBsb25nIGJ5dGVzLCBib29sIGNvbXBsZXRlKQpAQCAtMTYyLDkgKzE0Nyw5IEBAIHZvaWQgRmls
ZVdyaXRlcjo6ZGlkV3JpdGUobG9uZyBsb25nIGJ5dGUKICAgICB9CiAgICAgbV9ieXRlc1dyaXR0
ZW4gKz0gYnl0ZXM7CiAgICAgQVNTRVJUKChtX2J5dGVzV3JpdHRlbiA9PSBtX2J5dGVzVG9Xcml0
ZSkgfHwgIWNvbXBsZXRlKTsKLSAgICBtX3Bvc2l0aW9uICs9IGJ5dGVzOwotICAgIGlmIChtX3Bv
c2l0aW9uID4gbV9sZW5ndGgpCi0gICAgICAgIG1fbGVuZ3RoID0gbV9wb3NpdGlvbjsKKyAgICBz
ZXRQb3NpdGlvbihwb3NpdGlvbigpICsgYnl0ZXMpOworICAgIGlmIChwb3NpdGlvbigpID4gbGVu
Z3RoKCkpCisgICAgICAgIHNldExlbmd0aChwb3NpdGlvbigpKTsKICAgICBmaXJlRXZlbnQoZXZl
bnROYW1lcygpLnByb2dyZXNzRXZlbnQpOwogICAgIGlmIChjb21wbGV0ZSkgewogICAgICAgICBt
X2Jsb2JCZWluZ1dyaXR0ZW4uY2xlYXIoKTsKQEAgLTE3OCw5ICsxNjMsOSBAQCB2b2lkIEZpbGVX
cml0ZXI6OmRpZFRydW5jYXRlKCkKIHsKICAgICBBU1NFUlQobV90cnVuY2F0ZUxlbmd0aCA+PSAw
KTsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLndyaXRlc3RhcnRFdmVudCk7Ci0gICAgbV9s
ZW5ndGggPSBtX3RydW5jYXRlTGVuZ3RoOwotICAgIGlmIChtX3Bvc2l0aW9uID4gbV9sZW5ndGgp
Ci0gICAgICAgIG1fcG9zaXRpb24gPSBtX2xlbmd0aDsKKyAgICBzZXRMZW5ndGgobV90cnVuY2F0
ZUxlbmd0aCk7CisgICAgaWYgKHBvc2l0aW9uKCkgPiBsZW5ndGgoKSkKKyAgICAgICAgc2V0UG9z
aXRpb24obGVuZ3RoKCkpOwogICAgIG1fdHJ1bmNhdGVMZW5ndGggPSAtMTsKICAgICBmaXJlRXZl
bnQoZXZlbnROYW1lcygpLndyaXRlRXZlbnQpOwogICAgIG1fcmVhZHlTdGF0ZSA9IERPTkU7Cklu
ZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZmlsZWFwaS9GaWxlV3JpdGVyLmgJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBp
L0ZpbGVXcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNDUgKzM0LDM2IEBACiAjaWYgRU5B
QkxFKEZJTEVfU1lTVEVNKQogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiQXN5bmNGaWxlV3JpdGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlICJGaWxlV3JpdGVyQmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXN5bmNGaWxlV3JpdGVyOwotY2xhc3MgQmxvYjsKLWNs
YXNzIEZpbGVFcnJvcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKLWNsYXNzIEZp
bGVXcml0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlV3JpdGVyPiwgcHVibGljIEFjdGl2ZURP
TU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQXN5bmNGaWxlV3JpdGVyQ2xpZW50
IHsKK2NsYXNzIEZpbGVXcml0ZXIgOiBwdWJsaWMgRmlsZVdyaXRlckJhc2UsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFzeW5jRmlsZVdyaXRlckNs
aWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVdyaXRlcj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZpbGVXcml0ZXIoY29udGV4dCkpOwogICAgIH0KIAotICAgIHZvaWQgaW5p
dGlhbGl6ZShQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gd3JpdGVyLCBsb25nIGxvbmcgbGVu
Z3RoKTsKLQogICAgIGVudW0gUmVhZHlTdGF0ZSB7CiAgICAgICAgIElOSVQgPSAwLAogICAgICAg
ICBXUklUSU5HID0gMSwKICAgICAgICAgRE9ORSA9IDIKICAgICB9OwogCisgICAgLy8gRmlsZVdy
aXRlckJhc2UKICAgICB2b2lkIHdyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKTsK
ICAgICB2b2lkIHNlZWsobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAg
ICAgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgbGVuZ3RoLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0g
ICAgdm9pZCBhYm9ydChFeGNlcHRpb25Db2RlJiBlYyk7CiAKKyAgICB2b2lkIGFib3J0KEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKICAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3JlYWR5U3RhdGU7IH0KICAgICBGaWxlRXJyb3IqIGVycm9yKCkgY29uc3QgeyByZXR1cm4g
bV9lcnJvci5nZXQoKTsgfQotICAgIGxvbmcgbG9uZyBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
ZW5ndGg7IH0KIAogICAgIC8vIEFzeW5jRmlsZVdyaXRlckNsaWVudAogICAgIHZvaWQgZGlkV3Jp
dGUobG9uZyBsb25nIGJ5dGVzLCBib29sIGNvbXBsZXRlKTsKQEAgLTg4LDggKzc5LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgRmlsZVdyaXRlciogdG9GaWxlV3JpdGVyKCkgeyByZXR1cm4gdGhp
czsgfQogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOyB9CiAKLSAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXI+OjpyZWY7Ci0g
ICAgdXNpbmcgUmVmQ291bnRlZDxGaWxlV3JpdGVyPjo6ZGVyZWY7CisgICAgdXNpbmcgUmVmQ291
bnRlZDxGaWxlV3JpdGVyQmFzZT46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0
ZXJCYXNlPjo6ZGVyZWY7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdy
aXRlc3RhcnQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocHJvZ3Jlc3Mp
OwpAQCAtMTAzLDggKzk0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgfkZpbGVXcml0ZXIo
KTsKIAotICAgIGZyaWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8RmlsZVdyaXRlcj47Ci0KICAg
ICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVm
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQpA
QCAtMTE3LDEwICsxMDYsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEZpbGVFcnJvcj4gbV9l
cnJvcjsKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7Ci0gICAgT3duUHRy
PEFzeW5jRmlsZVdyaXRlcj4gbV93cml0ZXI7CiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7
Ci0gICAgbG9uZyBsb25nIG1fcG9zaXRpb247Ci0gICAgbG9uZyBsb25nIG1fbGVuZ3RoOwogICAg
IGJvb2wgbV9zdGFydGVkV3JpdGluZzsKICAgICBsb25nIGxvbmcgbV9ieXRlc1dyaXR0ZW47CiAg
ICAgbG9uZyBsb25nIG1fYnl0ZXNUb1dyaXRlOwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVX
cml0ZXJCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJh
c2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZS5oIgorCisj
aW5jbHVkZSAiQXN5bmNGaWxlV3JpdGVyLmgiCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGaWxlRXJyb3IuaCIKKyNpbmNsdWRlICJGaWxl
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZpbGVXcml0ZXJCYXNlOjp+RmlsZVdyaXRlckJhc2UoKQoreworfQorCit2b2lk
IEZpbGVXcml0ZXJCYXNlOjppbml0aWFsaXplKFBhc3NPd25QdHI8QXN5bmNGaWxlV3JpdGVyPiB3
cml0ZXIsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgQVNTRVJUKCFtX3dyaXRlcik7CisgICAg
QVNTRVJUKGxlbmd0aCA+PSAwKTsKKyAgICBtX3dyaXRlciA9IHdyaXRlcjsKKyAgICBtX2xlbmd0
aCA9IGxlbmd0aDsKK30KKworRmlsZVdyaXRlckJhc2U6OkZpbGVXcml0ZXJCYXNlKCkKKyAgICA6
IG1fcG9zaXRpb24oMCkKK3sKK30KKwordm9pZCBGaWxlV3JpdGVyQmFzZTo6c2Vla0ludGVybmFs
KGxvbmcgbG9uZyBwb3NpdGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24gPiBtX2xlbmd0aCkKKyAg
ICAgICAgcG9zaXRpb24gPSBtX2xlbmd0aDsKKyAgICBlbHNlIGlmIChwb3NpdGlvbiA8IDApCisg
ICAgICAgIHBvc2l0aW9uID0gbV9sZW5ndGggKyBwb3NpdGlvbjsKKyAgICBpZiAocG9zaXRpb24g
PCAwKQorICAgICAgICBwb3NpdGlvbiA9IDA7CisgICAgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNU
RU0pCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRmlsZVdyaXRlckJhc2VfaAorI2RlZmluZSBGaWxlV3JpdGVyQmFzZV9oCisKKyNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXJDbGllbnQu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEFzeW5jRmlsZVdyaXRlcjsKK2NsYXNzIEJsb2I7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIEZpbGVXcml0ZXJCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdy
aXRlckJhc2U+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5GaWxlV3JpdGVyQmFzZSgpOworICAg
IHZvaWQgaW5pdGlhbGl6ZShQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4sIGxvbmcgbG9uZyBs
ZW5ndGgpOworCisgICAgbG9uZyBsb25nIHBvc2l0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3Bvc2l0aW9uOworICAgIH0KKyAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICBGaWxlV3JpdGVyQmFzZSgpOworICAgIEFzeW5jRmlsZVdyaXRlciogd3JpdGVyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3dyaXRlci5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFBv
c2l0aW9uKGxvbmcgbG9uZyBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIG1fcG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICB9CisgICAgdm9pZCBzZXRMZW5ndGgobG9uZyBsb25nIGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKyAgICB2b2lkIHNlZWtJbnRl
cm5hbChsb25nIGxvbmcgcG9zaXRpb24pOworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV1RG
OjpSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlPjsKKworICAgIE93blB0cjxBc3luY0ZpbGVXcml0
ZXI+IG1fd3JpdGVyOworICAgIGxvbmcgbG9uZyBtX3Bvc2l0aW9uOworICAgIGxvbmcgbG9uZyBt
X2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShGSUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIEZpbGVXcml0ZXJCYXNlX2gKSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tfaAorI2RlZmluZSBGaWxlV3Jp
dGVyQmFzZUNhbGxiYWNrX2gKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsZVdy
aXRlckJhc2U7CisKK2NsYXNzIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291
bnRlZDxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Rmls
ZVdyaXRlckJhc2VDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChG
aWxlV3JpdGVyQmFzZSopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBF
TkFCTEUoRklMRV9TWVNURU0pCisKKyNlbmRpZiAvLyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrX2gK
SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmNwcAkocmV2aXNpb24gNzI2MjgpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw0
NyArMzQsMTEwIEBACiAKICNpbmNsdWRlICJGaWxlV3JpdGVyU3luYy5oIgogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXZvaWQgRmlsZVdyaXRlclN5bmM6OndyaXRlKEJsb2IqLCBFeGNlcHRpb25D
b2RlJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IE5vdCBpbXBsZW1l
bnRlZCB5ZXQuCi19Ci0KLXZvaWQgRmlsZVdyaXRlclN5bmM6OnNlZWsobG9uZyBsb25nLCBFeGNl
cHRpb25Db2RlJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IE5vdCBp
bXBsZW1lbnRlZCB5ZXQuCi19Ci0KLXZvaWQgRmlsZVdyaXRlclN5bmM6OnRydW5jYXRlKGxvbmcg
bG9uZywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJ
WE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgotfQotCi1ib29sIEZpbGVXcml0ZXJTeW5jOjpjYW5T
dXNwZW5kKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSXQgaXMgbm90IGN1cnJlbnRseSBwb3Nz
aWJsZSB0byBzdXNwZW5kIGEgRmlsZVdyaXRlclN5bmMsIHNvIHBhZ2VzIHdpdGggRmlsZVdyaXRl
ciBjYW4gbm90IGdvIGludG8gcGFnZSBjYWNoZS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgRmlsZVdyaXRlclN5bmM6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7Ci19Ci0KLXZvaWQgRmls
ZVdyaXRlclN5bmM6OnN0b3AoKQotewotfQorI2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlci5oIgor
I2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlRXhjZXB0aW9uLmgiCiAKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRmlsZVdyaXRlclN5bmM6OkZpbGVXcml0ZXJTeW5jKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhp
cykKLSAgICAsIG1fcG9zaXRpb24oMCkKLSAgICAsIG1fbGVuZ3RoKDApCit2b2lkIEZpbGVXcml0
ZXJTeW5jOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBBU1NF
UlQod3JpdGVyKCkpOworICAgIEFTU0VSVChtX2NvbXBsZXRlKTsKKyAgICBlYyA9IDA7CisgICAg
aWYgKCFkYXRhKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6VFlQRV9NSVNNQVRDSF9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcmVwYXJlRm9yV3JpdGUoKTsKKyAg
ICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7CisgICAgd3JpdGVyKCktPndhaXRG
b3JPcGVyYXRpb25Ub0NvbXBsZXRlKCk7CisgICAgQVNTRVJUKG1fY29tcGxldGUpOworICAgIGVj
ID0gRmlsZUV4Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKG1fZXJyb3IpOworICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuOworICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKCkgKyBk
YXRhLT5zaXplKCkpOworICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCisgICAgICAgIHNl
dExlbmd0aChwb3NpdGlvbigpKTsKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6c2Vlayhsb25n
IGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVCh3cml0ZXIo
KSk7CisgICAgQVNTRVJUKG1fY29tcGxldGUpOworICAgIGVjID0gMDsKKyAgICBzZWVrSW50ZXJu
YWwocG9zaXRpb24pOworfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjp0cnVuY2F0ZShsb25nIGxv
bmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQod3JpdGVyKCkpOwor
ICAgIEFTU0VSVChtX2NvbXBsZXRlKTsKKyAgICBlYyA9IDA7CisgICAgaWYgKG9mZnNldCA8IDAp
IHsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBwcmVwYXJlRm9yV3JpdGUoKTsKKyAgICB3cml0ZXIoKS0+
dHJ1bmNhdGUob2Zmc2V0KTsKKyAgICB3cml0ZXIoKS0+d2FpdEZvck9wZXJhdGlvblRvQ29tcGxl
dGUoKTsKKyAgICBBU1NFUlQobV9jb21wbGV0ZSk7CisgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpF
cnJvckNvZGVUb0V4Y2VwdGlvbkNvZGUobV9lcnJvcik7CisgICAgaWYgKGVjKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG9mZnNldCA8IHBvc2l0aW9uKCkpCisgICAgICAgIHNldFBvc2l0aW9u
KG9mZnNldCk7CisgICAgc2V0TGVuZ3RoKG9mZnNldCk7Cit9CisKK3ZvaWQgRmlsZVdyaXRlclN5
bmM6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKK3sKKyAgICBBU1NF
UlQobV9lcnJvciA9PSBGaWxlRXJyb3I6Ok9LKTsKKyAgICBBU1NFUlQoIW1fY29tcGxldGUpOwor
I2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbXBsZXRlID0gY29tcGxldGU7CisjZWxzZQorICAgIEFT
U0VSVF9VTlVTRUQoY29tcGxldGUsIGNvbXBsZXRlKTsKKyNlbmRpZgorfQorCit2b2lkIEZpbGVX
cml0ZXJTeW5jOjpkaWRUcnVuY2F0ZSgpCit7CisgICAgQVNTRVJUKG1fZXJyb3IgPT0gRmlsZUVy
cm9yOjpPSyk7CisgICAgQVNTRVJUKCFtX2NvbXBsZXRlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bV9jb21wbGV0ZSA9IHRydWU7CisjZW5kaWYKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6ZGlk
RmFpbChGaWxlRXJyb3I6OkVycm9yQ29kZSBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9
PSBGaWxlRXJyb3I6Ok9LKTsKKyAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgQVNTRVJUKCFtX2Nv
bXBsZXRlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21wbGV0ZSA9IHRydWU7CisjZW5kaWYK
K30KKworRmlsZVdyaXRlclN5bmM6OkZpbGVXcml0ZXJTeW5jKCkKKyAgICA6IG1fZXJyb3IoRmls
ZUVycm9yOjpPSykKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2NvbXBsZXRlKHRydWUpCisjZW5k
aWYKK3sKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6cHJlcGFyZUZvcldyaXRlKCkKK3sKKyAg
ICBBU1NFUlQobV9jb21wbGV0ZSk7CisgICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6T0s7CisjaWZu
ZGVmIE5ERUJVRworICAgIG1fY29tcGxldGUgPSBmYWxzZTsKKyNlbmRpZgogfQogCi0KIEZpbGVX
cml0ZXJTeW5jOjp+RmlsZVdyaXRlclN5bmMoKQogewogfQpJbmRleDogV2ViQ29yZS9maWxlYXBp
L0ZpbGVXcml0ZXJTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0
ZXJTeW5jLmgJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJT
eW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDkgQEAKICNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJGaWxlRXJy
b3IuaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00MywzNyArNDQsMzIgQEAgY2xhc3MgQmxvYjsKIAogdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAotLy8gRklYTUU6IFRoaXMgaXMgYW4gZW1wdHkgc2hlbGwgd2FpdGluZyBmb3Ig
aW1wbGVtZW50YXRpb24uCi1jbGFzcyBGaWxlV3JpdGVyU3luYyA6IHB1YmxpYyBSZWZDb3VudGVk
PEZpbGVXcml0ZXJTeW5jPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitjbGFzcyBGaWxlV3Jp
dGVyU3luYyA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZSwgcHVibGljIEFzeW5jRmlsZVdyaXRlckNs
aWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZpbGVXcml0ZXJTeW5jPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGaWxlV3JpdGVyU3luYyhjb250ZXh0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRmlsZVdyaXRlclN5bmMoKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkZpbGVXcml0ZXJT
eW5jKCk7CiAKKyAgICAvLyBGaWxlV3JpdGVyQmFzZQogICAgIHZvaWQgd3JpdGUoQmxvYiogZGF0
YSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBsZW5ndGgsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAotICAgIGxvbmcgbG9uZyBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNw
ZW5kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7Ci0KLSAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVX
cml0ZXJTeW5jPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVdyaXRlclN5bmM+Ojpk
ZXJlZjsKKyAgICAvLyBBc3luY0ZpbGVXcml0ZXJDbGllbnQsIHZpYSBGaWxlV3JpdGVyQmFzZQor
ICAgIHZvaWQgZGlkV3JpdGUobG9uZyBsb25nIGJ5dGVzLCBib29sIGNvbXBsZXRlKTsKKyAgICB2
b2lkIGRpZFRydW5jYXRlKCk7CisgICAgdm9pZCBkaWRGYWlsKEZpbGVFcnJvcjo6RXJyb3JDb2Rl
KTsKIAogcHJpdmF0ZToKLSAgICBGaWxlV3JpdGVyU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kik7Ci0KLSAgICBmcmllbmQgY2xhc3MgUmVmQ291bnRlZDxGaWxlV3JpdGVyU3luYz47CisgICAg
RmlsZVdyaXRlclN5bmMoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JXcml0ZSgpOwogCi0gICAgbG9u
ZyBsb25nIG1fcG9zaXRpb247Ci0gICAgbG9uZyBsb25nIG1fbGVuZ3RoOworICAgIEZpbGVFcnJv
cjo6RXJyb3JDb2RlIG1fZXJyb3I7CisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgbV9jb21wbGV0
ZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9m
aWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkv
RmlsZVdyaXRlclN5bmMuaWRsCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9G
aWxlV3JpdGVyU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIG1vZHVs
ZSBodG1sIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1GSUxFX1NZU1RF
TSwKLSAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dAogICAgIF0gRmlsZVdy
aXRlclN5bmMgewogICAgICAgICAvLyBzeW5jaHJvbm91cyB3cml0ZS9tb2RpZnkgbWV0aG9kcwog
ICAgICAgICB2b2lkIHdyaXRlKGluIEJsb2IgZGF0YSkgcmFpc2VzIChGaWxlRXhjZXB0aW9uKTsK
</data>
<flag name="review"
          id="65474"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74799</attachid>
            <date>2010-11-24 15:01:02 -0800</date>
            <delta_ts>2010-11-24 18:44:23 -0800</delta_ts>
            <desc>Made the small tweaks David recommended.</desc>
            <filename>webcore_sync4.patch</filename>
            <type>text/plain</type>
            <size>43888</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjMgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KKworICAgICAgICBJbXBs
ZW1lbnQgRmlsZVdyaXRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5OTM5CisKKyAgICAgICAgVGVzdHMgdG8gZm9sbG93IGluIGEgc2VwYXJh
dGUgQ0wsIG9uY2UgdGhlIHRlc3QgZnJhbWV3b3JrIGluIDQ3NjgwIGdvZXMgaW4uCisKKyAgICAg
ICAgQnVpbGQgZmlsZSBjaGFuZ2VzIHRvIGFkZCBGaWxlV3JpdGVyQmFzZSBhbmQgRmlsZVdyaXRl
ckJhc2VDYWxsYmFjay4KKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEZpbGVXcml0ZXJT
eW5jIGRvZXNuJ3QgdHVybiBvdXQgdG8gbmVlZCB0byBiZSBhbiBBY3RpdmVET01PYmplY3QuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisKKyAgICAgICAg
QWRkZWQgbmV3IEFzeW5jRmlsZVdyaXRlcjo6d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUgdG8g
ZW5hYmxlCisgICAgICAgIHN5bmNocm9ub3VzIGNhbGxzLgorICAgICAgICAqIGZpbGVhcGkvQXN5
bmNGaWxlV3JpdGVyLmg6CisKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8gZ2V0IGEgRmlsZVN5c3Rl
bVN5bmMuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6CisgICAgICAg
ICogZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVFbnRy
eVN5bmMuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuaWRsOgorCisgICAgICAg
IEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yIE9LLCByYXRoZXIgdGhhbiBqdXN0IGhhdmluZyAwIGV2
ZXJ5d2hlcmUuCisgICAgICAgICogZmlsZWFwaS9GaWxlRXJyb3IuaDoKKworICAgICAgICBUdXJu
ZWQgRmlsZVdyaXRlckNhbGxiYWNrIGludG8gRmlsZVdyaXRlckJhc2VDYWxsYmFjay4KKyAgICAg
ICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAgICAgICAqIGZpbGVhcGkv
RmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorCisgICAgICAgIFJlZmFjdG9yZWQgb3V0IGEgY29tbW9u
IGJhc2UgY2xhc3MsIEZpbGVXcml0ZXJCYXNlLCBmb3IgRmlsZVdyaXRlciBhbmQKKyAgICAgICAg
RmlsZVdyaXRlclN5bmMuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyLmNwcDoKKyAgICAg
ICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXIuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXJC
YXNlLmNwcDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDogQWRkZWQuCisg
ICAgICAgICogZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHA6CisgICAgICAgICogZmlsZWFwaS9G
aWxlV3JpdGVyU3luYy5oOgorCisgICAgICAgIFNtYWxsIHR3ZWFrcyB0byBkZWFsIHdpdGggdGhl
IGJhc2UgY2xhc3MgcmVmYWN0b3JpbmcuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVt
LmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmg6CisKKyAgICAgICAg
UmVtb3ZlZCAiQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsIGFzIEZpbGVXcml0ZXJT
eW5jIGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCBpdC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVXcml0
ZXJTeW5jLmlkbDoKKwogMjAxMC0xMS0yMyAgQ2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWlsbG9y
eUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5k
ZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjk1LDYgKzE2OTUsNyBAQCBpZiAoRU5BQkxFX0ZJTEVfU1lTVEVNKQog
ICAgICAgICBmaWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwCiAgICAgICAgIGZpbGVhcGkvRmlsZVN5
c3RlbUNhbGxiYWNrcy5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAorICAgICAg
ICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmNwcAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJT
eW5jLmNwcAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKICAgICAgICAgcGxh
dGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3MjYyOCkKKysr
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NjgsOSArMTQ2OCwx
MiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmNw
cCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0Zp
bGVUaHJlYWRUYXNrLmggXAotCVdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQ2FsbGJhY2suaCBc
CiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuY3BwIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmls
ZVdyaXRlci5oIFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuY3BwIFwKKwlXZWJD
b3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaCBcCisJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0
ZXJCYXNlQ2FsbGJhY2suaCBcCisJV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJDYWxsYmFjay5o
IFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwIFwKIAlXZWJDb3JlL2ZpbGVh
cGkvRmlsZVdyaXRlclN5bmMuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZsYWdzLmggXApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTE1MzUsNiArMTUzNSw5IEBACiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlVGhyZWFkVGFz
ay5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwJywKICAgICAgICAgICAg
ICdmaWxlYXBpL0ZpbGVXcml0ZXIuaCcsCisgICAgICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVy
QmFzZS5jcHAnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaCcsCisgICAg
ICAgICAgICAnZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgnLAogICAgICAgICAgICAg
J2ZpbGVhcGkvRmlsZVdyaXRlckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmls
ZVdyaXRlclN5bmMuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmgn
LApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUucHJvCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcg
Y29weSkKQEAgLTMwNjUsNiArMzA2NSw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxF
X1NZU1RFTT0xKSAKICAgICAgICAgZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2suaCBcCiAgICAg
ICAgIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oIFwKICAgICAgICAgZmlsZWFwaS9GaWxl
V3JpdGVyLmggXAorICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmggXAorICAgICAgICBm
aWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBcCiAgICAgICAgIGZpbGVhcGkvRmlsZVdy
aXRlckNhbGxiYWNrLmggXAogICAgICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJDbGllbnQuaCBcCiAg
ICAgICAgIGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaCBcCkBAIC0zMDk3LDYgKzMwOTksNyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfRklMRV9TWVNURU09MSkgCiAgICAgICAgIGZpbGVhcGkv
RmlsZUVudHJ5U3luYy5jcHAgXAogICAgICAgICBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3Mu
Y3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyLmNwcCBcCisgICAgICAgIGZpbGVhcGkv
RmlsZVdyaXRlckJhc2UuY3BwIFwKICAgICAgICAgZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHAg
XAogICAgICAgICBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAgXAogICAgICAgICBwbGF0Zm9y
bS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDcyNjQzKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDkxNDcsNiArNDkxNDcsMTcgQEAKIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxGaWxl
V3JpdGVyQmFzZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxmaWxlYXBpXEZpbGVXcml0ZXJCYXNlLmgiDQorCQkJCT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVdyaXRlckJhc2VDYWxsYmFjay5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZmlsZWFwaVxGaWxlV3JpdGVyQ2FsbGJhY2suaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzI2
MjgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTc1LDYgKzk3NSw5IEBACiAJCTQ2NzAwRUQwMTI3Qjk2Q0IwMEY1RDVENiAv
KiBGaWxlV3JpdGVyU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NjcwMEVDRTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3Bw
ICovOyB9OwogCQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzAwRUNGMTI3
Qjk2Q0IwMEY1RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oICovOyB9OwogCQk0Njg5RjFBRjEyNjdC
QUUxMDBFOEQzODAgLyogRmlsZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0Njg5RjFBRTEyNjdCQUUxMDBFOEQzODAgLyogRmlsZU1ldGFk
YXRhLmggKi87IH07CisJCTQ2QkM3MjRFMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkJD
NzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3BwICovOyB9OworCQk0NkJD
NzI0RjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3RSAv
KiBGaWxlV3JpdGVyQmFzZS5oICovOyB9OworCQk0NkJDNzI1MDEyOUIxMDRDMDA3MUMwN0UgLyog
RmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDZCQzcyNEQxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2suaCAqLzsgfTsKIAkJNDZCRDE2RTMwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVDdXJz
b3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NkJEMTZFMjBCMjc5NDczMDAxRjA4MzkgLyogbm9uZUN1cnNvci5wbmcgKi87IH07CiAJCTQ2RDRG
MjQ5MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZENEYyNDYwQUY5N0U4MTAwMzUzODVBIC8q
IGNlbGxDdXJzb3IucG5nICovOyB9OwogCQk0NkQ0RjI0QTBBRjk3RTgxMDAzNTM4NUEgLyogY29u
dGV4dE1lbnVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NkQ0RjI0NzBBRjk3RTgxMDAzNTM4NUEgLyogY29udGV4dE1lbnVDdXJzb3Iu
cG5nICovOyB9OwpAQCAtNzA3OSw2ICs3MDgyLDkgQEAKIAkJNDY3MDBFQ0UxMjdCOTZDQjAwRjVE
NUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZpbGVXcml0ZXJTeW5jLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5bmMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjcwMEVDRjEyN0I5NkNCMDBGNUQ1
RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RmlsZVdyaXRlclN5bmMuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlclN5bmMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY4OUYxQUUxMjY3QkFFMTAwRThEMzgwIC8qIEZpbGVN
ZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlTWV0YWRhdGEu
aDsgcGF0aCA9IHBsYXRmb3JtL0ZpbGVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0NkJDNzI0QjEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVdyaXRlckJhc2UuY3BwOyBw
YXRoID0gZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ2QkM3MjRDMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZS5oOyBwYXRoID0gZmls
ZWFwaS9GaWxlV3JpdGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NkJD
NzI0RDEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmg7IHBhdGgg
PSBmaWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDZCRDE2RTIwQjI3OTQ3MzAwMUYwODM5IC8qIG5vbmVDdXJzb3IucG5nICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBw
YXRoID0gbm9uZUN1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2RDRG
MjQ2MEFGOTdFODEwMDM1Mzg1QSAvKiBjZWxsQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGNlbGxDdXJz
b3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkQ0RjI0NzBBRjk3RTgxMDAz
NTM4NUEgLyogY29udGV4dE1lbnVDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gY29udGV4dE1lbnVDdXJz
b3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxNTYsNiArMTUxNjIsOSBA
QAogCQkJCTk3NkQ2QzcwMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkVGFzay5oICovLAog
CQkJCTk3NkQ2QzcxMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlV3JpdGVyLmNwcCAqLywKIAkJCQk5
NzZENkM3MjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVdyaXRlci5oICovLAorCQkJCTQ2QkM3MjRC
MTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAgKi8sCisJCQkJNDZCQzcyNEMx
MjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmggKi8sCisJCQkJNDZCQzcyNEQxMjlC
MTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCAqLywKIAkJCQk4OTNDNDdB
NjEyMzg5MDhCMDAyQjNEODYgLyogRmlsZVdyaXRlckNhbGxiYWNrLmggKi8sCiAJCQkJNDY3MDBF
Q0UxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJTeW5jLmNwcCAqLywKIAkJCQk0NjcwMEVD
RjEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCAqLywKQEAgLTIxMzc3LDYgKzIx
Mzg2LDggQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVk
aXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOTJENEYxMjkzNTUwQjAwQzgzODdGIC8qIEZv
bnRCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDZCQzcyNEYxMjlCMTA0QzAwNzFDMDdF
IC8qIEZpbGVXcml0ZXJCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NkJDNzI1MDEyOUIxMDRD
MDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNBMjU3MTUxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNBRTFGQTcxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFuaW1hdG9y
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUFEMTQxRTEyOTVFQTRGMDBBQ0E5ODkgLyogSlNI
VE1MQXBwbGV0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzk2Niw2ICsyMzk3
Nyw3IEBACiAJCQkJNzU0MTVENTUxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTQxNUQ1NzEyOUFCMkQyMDAzQUQ2NjkgLyogSlNT
cGVlY2hJbnB1dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTQxNUQ1OTEyOUFCMkQy
MDAzQUQ2NjkgLyogSlNTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDZCQzcyNEUxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI1NTgsNyArMjU1OCw2IEBAIHN1YiBJc0Fj
dGl2ZURvbVR5cGUKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCUmVxdWVzdCI7CiAgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVSZWFkZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJGaWxlV3JpdGVyIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRlclN5
bmMiOwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxl
V3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRlci5o
CShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZShsb25nIGxvbmcgcG9zaXRpb24sIEJsb2IqIGRhdGEpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgdHJ1bmNhdGUobG9uZyBsb25nIGxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBh
Ym9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUo
KSAvLyBOZWVkZWQgZm9yIEZpbGVXcml0ZXJTeW5jIG9ubHkuCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZmls
ZWFwaS9ET01GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
RmlsZUVudHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUg
IkZpbGVXcml0ZXIuaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiRmlsZVdyaXRlckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGFDYWxsYmFjay5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTc1LDYgKzc2LDI5IEBA
IHZvaWQgRE9NRmlsZVN5c3RlbTo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgQWN0aXZlRE9NT2Jq
ZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7CiB9CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIENvbnZl
cnRUb0ZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJh
Y2s+IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJhY2spCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFj
ayhjYWxsYmFjaykpOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJh
c2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2stPmhh
bmRsZUV2ZW50KHN0YXRpY19jYXN0PEZpbGVXcml0ZXIqPihmaWxlV3JpdGVyQmFzZSkpOworICAg
IH0KK3ByaXZhdGU6CisgICAgQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrKFBhc3NSZWZQdHI8
RmlsZVdyaXRlckNhbGxiYWNrPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxi
YWNrKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gbV9jYWxs
YmFjazsKK307CisKK30KKwogdm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29uc3Qg
RmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsK
ICAgICBBU1NFUlQoZmlsZUVudHJ5KTsKQEAgLTgyLDcgKzEwNiw4IEBAIHZvaWQgRE9NRmlsZVN5
c3RlbTo6Y3JlYXRlV3JpdGVyKGNvbnN0IEYKICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0gbV9h
c3luY0ZpbGVTeXN0ZW0tPnZpcnR1YWxUb1BsYXRmb3JtUGF0aChmaWxlRW50cnktPmZ1bGxQYXRo
KCkpOwogCiAgICAgUmVmUHRyPEZpbGVXcml0ZXI+IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVyOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBPd25QdHI8RmlsZVdyaXRlckNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gRmlsZVdyaXRlckNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0
ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgUmVmUHRyPEZpbGVXcml0
ZXJCYXNlQ2FsbGJhY2s+IGNvbnZlcnNpb25DYWxsYmFjayA9IENvbnZlcnRUb0ZpbGVXcml0ZXJD
YWxsYmFjazo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgT3duUHRyPEZpbGVXcml0ZXJC
YXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6Y3JlYXRl
KGZpbGVXcml0ZXIsIGNvbnZlcnNpb25DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgbV9h
c3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVyLmdldCgpLCBwbGF0Zm9ybVBh
dGgsIGNhbGxiYWNrcy5yZWxlYXNlKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtU3luYy5jcHAJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW1TeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDE5IEBACiAKICNp
bmNsdWRlICJET01GaWxlUGF0aC5oIgogI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5U3luYy5oIgor
I2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAi
RmlsZUVudHJ5U3luYy5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIkZpbGVF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAi
RmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJTeW5jLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRmlsZVdyaXRlckJhc2U7CisKIFBhc3NSZWZQ
dHI8RE9NRmlsZVN5c3RlbVN5bmM+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGUoRE9NRmlsZVN5
c3RlbUJhc2UqIGZpbGVTeXN0ZW0pCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxl
U3lzdGVtU3luYyhmaWxlU3lzdGVtLT5tX25hbWUsIGZpbGVTeXN0ZW0tPm1fYXN5bmNGaWxlU3lz
dGVtLnJlbGVhc2UoKSkpOwpAQCAtNjYsNiArNzQsOTkgQEAgUGFzc1JlZlB0cjxGaWxlPiBET01G
aWxlU3lzdGVtU3luYzo6Y3JlYQogICAgIHJldHVybiBGaWxlOjpjcmVhdGUocGxhdGZvcm1QYXRo
KTsKIH0KIAorbmFtZXNwYWNlIHsKKworY2xhc3MgUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjayA6
IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrKCkpOworICAg
IH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJCYXNl
KQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fZmlsZVdyaXRlckJhc2UgPSBmaWxl
V3JpdGVyQmFzZTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9VTlVTRUQoZmlsZVdyaXRlckJhc2Us
IGZpbGVXcml0ZXJCYXNlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJCYXNlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2ZpbGVXcml0ZXJCYXNlOworICAgIH0KKyNlbmRpZgorCitw
cml2YXRlOgorICAgIFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2soKQorI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgOiBtX2ZpbGVXcml0ZXJCYXNlKDApCisjZW5kaWYKKyAgICB7CisgICAgfQorCisj
aWZuZGVmIE5ERUJVRworICAgIEZpbGVXcml0ZXJCYXNlKiBtX2ZpbGVXcml0ZXJCYXNlOworI2Vu
ZGlmCit9OworCitjbGFzcyBMb2NhbEVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgRXJyb3JDYWxsYmFj
ayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxFcnJvckNhbGxiYWNrPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbEVycm9yQ2Fs
bGJhY2soKSk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVFdmVudChGaWxlRXJyb3IqIGVycm9y
KQorICAgIHsKKyAgICAgICAgbV9lcnJvciA9IGVycm9yOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBGaWxlRXJyb3IqIGVycm9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Vycm9yLmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMb2NhbEVycm9yQ2FsbGJhY2so
KQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVFcnJvcj4gbV9lcnJvcjsKK307CisKK30K
KworUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0ZVdy
aXRlcihjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnksIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIEFTU0VSVChmaWxlRW50cnkpOworICAgIGVjID0gMDsKKworICAgIFN0cmluZyBwbGF0
Zm9ybVBhdGggPSBtX2FzeW5jRmlsZVN5c3RlbS0+dmlydHVhbFRvUGxhdGZvcm1QYXRoKGZpbGVF
bnRyeS0+ZnVsbFBhdGgoKSk7CisKKyAgICBSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGZpbGVXcml0
ZXIgPSBGaWxlV3JpdGVyU3luYzo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFJlY2VpdmVGaWxlV3Jp
dGVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2s6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMb2NhbEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sg
PSBMb2NhbEVycm9yQ2FsbGJhY2s6OmNyZWF0ZSgpOworCisgICAgT3duUHRyPEZpbGVXcml0ZXJC
YXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6Y3JlYXRl
KGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgbV9hc3lu
Y0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVyLmdldCgpLCBwbGF0Zm9ybVBhdGgs
IGNhbGxiYWNrcy5yZWxlYXNlKCkpOworICAgIGlmICghbV9hc3luY0ZpbGVTeXN0ZW0tPndhaXRG
b3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpB
Qk9SVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoZXJyb3JDYWxsYmFj
ay0+ZXJyb3IoKSkgeworICAgICAgICBBU1NFUlQoIXN1Y2Nlc3NDYWxsYmFjay0+ZmlsZVdyaXRl
ckJhc2UoKSk7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRp
b25Db2RlKGVycm9yQ2FsbGJhY2stPmVycm9yKCktPmNvZGUoKSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBBU1NFUlQoc3VjY2Vzc0NhbGxiYWNrLT5maWxlV3JpdGVyQmFzZSgpKTsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RmlsZVdyaXRlclN5bmMqPihzdWNjZXNzQ2FsbGJhY2st
PmZpbGVXcml0ZXJCYXNlKCkpID09IGZpbGVXcml0ZXIuZ2V0KCkpOworICAgIHJldHVybiBmaWxl
V3JpdGVyOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4OiBX
ZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3Jl
L2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXJlY3RvcnlFbnRyeVN5bmM7CiBjbGFz
cyBGaWxlOwogY2xhc3MgRmlsZUVudHJ5U3luYzsKK2NsYXNzIEZpbGVXcml0ZXJTeW5jOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC01Nyw2ICs1OCw3IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5U3luYz4gcm9vdCgpOwogCiAgICAgUGFzc1JlZlB0
cjxGaWxlPiBjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqLCBFeGNlcHRpb25Db2RlJik7
CisgICAgUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVF
bnRyeVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6CiAgICAgRE9NRmlsZVN5c3Rl
bVN5bmMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOwpJ
bmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVFbnRyeVN5bmMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZmlsZWFwaS9GaWxlRW50cnlTeW5jLmNwcAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJD
b3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAKICNpbmNsdWRlICJGaWxlLmgiCisjaW5j
bHVkZSAiRmlsZVdyaXRlclN5bmMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw2
ICs0OCwxMSBAQCBQYXNzUmVmUHRyPEZpbGU+IEZpbGVFbnRyeVN5bmM6OmZpbGUoRXhjCiAgICAg
cmV0dXJuIGZpbGVzeXN0ZW0oKS0+Y3JlYXRlRmlsZSh0aGlzLCBlYyk7CiB9CiAKK1Bhc3NSZWZQ
dHI8RmlsZVdyaXRlclN5bmM+IEZpbGVFbnRyeVN5bmM6OmNyZWF0ZVdyaXRlcihFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICByZXR1cm4gZmlsZXN5c3RlbSgpLT5jcmVhdGVXcml0ZXIodGhpcywg
ZWMpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4OiBXZWJD
b3JlL2ZpbGVhcGkvRmlsZUVudHJ5U3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFw
aS9GaWxlRW50cnlTeW5jLmgJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0Zp
bGVFbnRyeVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGaWxlOworY2xhc3MgRmlsZVdyaXRlclN5bmM7CiAKIGNsYXNz
IEZpbGVFbnRyeVN5bmMgOiBwdWJsaWMgRW50cnlTeW5jIHsKIHB1YmxpYzoKQEAgLTUyLDYgKzUz
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICBQYXNzUmVmUHRyPEZpbGU+IGZpbGUoRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGNyZWF0ZVdyaXRlcihFeGNlcHRpb25Db2RlJik7
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEVudHJ5U3luYzsKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9GaWxlRW50cnlTeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkv
RmlsZUVudHJ5U3luYy5pZGwJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxlYXBpL0Zp
bGVFbnRyeVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw1ICszNiw2IEBAIG1vZHVsZSBz
dG9yYWdlIHsKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEZpbGVFbnRyeVN5bmMgOiBF
bnRyeVN5bmMgewogICAgICAgICBGaWxlIGZpbGUoKSByYWlzZXMgKEZpbGVFeGNlcHRpb24pOwor
ICAgICAgICBGaWxlV3JpdGVyU3luYyBjcmVhdGVXcml0ZXIoKSByYWlzZXMgKEZpbGVFeGNlcHRp
b24pOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZUVycm9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVFcnJvci5oCShyZXZpc2lvbiA3MjYyOCkKKysr
IFdlYkNvcmUvZmlsZWFwaS9GaWxlRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWxlRXJyb3IgOiBwdWJsaWMgUmVmQ291
bnRlZDxGaWxlRXJyb3I+IHsKIHB1YmxpYzoKICAgICBlbnVtIEVycm9yQ29kZSB7CisgICAgICAg
IE9LID0gMCwKICAgICAgICAgTk9UX0ZPVU5EX0VSUiA9IDEsCiAgICAgICAgIFNFQ1VSSVRZX0VS
UiA9IDIsCiAgICAgICAgIEFCT1JUX0VSUiA9IDMsCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVT
eXN0ZW1DYWxsYmFja3MuY3BwCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFwaS9G
aWxlU3lzdGVtQ2FsbGJhY2tzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQAog
I2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgogI2luY2x1
ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgotI2luY2x1ZGUgIkZpbGVXcml0ZXIuaCIKLSNpbmNs
dWRlICJGaWxlV3JpdGVyQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZS5oIgor
I2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJNZXRhZGF0YS5o
IgogI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCkBAIC0yMTIsMjEgKzIxMiwyMSBAQCB2b2lkIE1ldGFkYXRhQ2FsbGJhY2tz
OjpkaWRSZWFkTWV0YWRhdGEoCiAgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKIH0KIAot
Ly8gRmlsZVdyaXRlckNhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LVBhc3NPd25QdHI8RmlsZVdyaXRlckNhbGxiYWNrcz4gRmlsZVdyaXRlckNhbGxiYWNrczo6Y3Jl
YXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgUGFzc1JlZlB0cjxGaWxlV3Jp
dGVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrKQorUGFzc093blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4gRmlsZVdy
aXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlPiBmaWxl
V3JpdGVyLCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQogewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRmlsZVdyaXRlckNhbGxiYWNrcyhmaWxlV3JpdGVyLCBzdWNjZXNzQ2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZpbGVXcml0
ZXJCYXNlQ2FsbGJhY2tzKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFj
aykpOwogfQogCi1GaWxlV3JpdGVyQ2FsbGJhY2tzOjpGaWxlV3JpdGVyQ2FsbGJhY2tzKFBhc3NS
ZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQorRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzKFBh
c3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+IGZpbGVXcml0ZXIsIFBhc3NSZWZQdHI8RmlsZVdyaXRl
ckJhc2VDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2spCiAgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJvckNhbGxi
YWNrKQogICAgICwgbV9maWxlV3JpdGVyKGZpbGVXcml0ZXIpCiAgICAgLCBtX3N1Y2Nlc3NDYWxs
YmFjayhzdWNjZXNzQ2FsbGJhY2spCiB7CiB9CiAKLXZvaWQgRmlsZVdyaXRlckNhbGxiYWNrczo6
ZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gYXN5bmNGaWxl
V3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQordm9pZCBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6
ZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4gYXN5bmNGaWxl
V3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQogewogICAgIG1fZmlsZVdyaXRlci0+aW5pdGlhbGl6
ZShhc3luY0ZpbGVXcml0ZXIsIGxlbmd0aCk7CiAgICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNrKQpJ
bmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCShyZXZpc2lvbiA3MjYyOCkK
KysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDggKzQ5LDggQEAgY2xhc3MgRW50cnlBcnJheTsKIGNsYXNzIEVudHJ5Q2FsbGJhY2s7
CiBzdHJ1Y3QgRmlsZU1ldGFkYXRhOwogY2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOwotY2xhc3Mg
RmlsZVdyaXRlcjsKLWNsYXNzIEZpbGVXcml0ZXJDYWxsYmFjazsKK2NsYXNzIEZpbGVXcml0ZXJC
YXNlOworY2xhc3MgRmlsZVdyaXRlckJhc2VDYWxsYmFjazsKIGNsYXNzIE1ldGFkYXRhQ2FsbGJh
Y2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgVm9pZENhbGxiYWNrOwpA
QCAtMTMzLDE1ICsxMzMsMTUgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TWV0YWRhdGFDYWxsYmFj
az4gbV9zdWNjZXNzQ2FsbGJhY2s7CiB9OwogCi1jbGFzcyBGaWxlV3JpdGVyQ2FsbGJhY2tzIDog
cHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKK2NsYXNzIEZpbGVXcml0ZXJCYXNlQ2Fs
bGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQ2FsbGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxG
aWxlV3JpdGVyPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxi
YWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+LCBQYXNzUmVmUHRyPEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ3JlYXRlRmlsZVdyaXRlcihQYXNzT3duUHRyPEFzeW5jRmlsZVdyaXRlcj4s
IGxvbmcgbG9uZyBsZW5ndGgpOwogCiBwcml2YXRlOgotICAgIEZpbGVXcml0ZXJDYWxsYmFja3Mo
UGFzc1JlZlB0cjxGaWxlV3JpdGVyPiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+LCBQ
YXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAgICBSZWZQdHI8RmlsZVdyaXRlcj4gbV9maWxl
V3JpdGVyOwotICAgIFJlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNr
OworICAgIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RmlsZVdyaXRlckJhc2U+
LCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+KTsKKyAgICBSZWZQdHI8RmlsZVdyaXRlckJhc2U+IG1fZmlsZVdyaXRlcjsKKyAgICBS
ZWZQdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CiB9OwogCiBj
bGFzcyBWb2lkQ2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKSW5k
ZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2ZpbGVhcGkvRmlsZVdyaXRlci5jcHAJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxl
YXBpL0ZpbGVXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIEZpbGVXcml0ZXI6OkZpbGVXcml0ZXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQogICAg
ICwgbV9yZWFkeVN0YXRlKElOSVQpCi0gICAgLCBtX3Bvc2l0aW9uKDApCiAgICAgLCBtX3N0YXJ0
ZWRXcml0aW5nKGZhbHNlKQogICAgICwgbV9ieXRlc1dyaXR0ZW4oMCkKICAgICAsIG1fYnl0ZXNU
b1dyaXRlKDApCkBAIC01NCwxNCArNTMsNiBAQCBGaWxlV3JpdGVyOjpGaWxlV3JpdGVyKFNjcmlw
dEV4ZWN1dGlvbkNvCiB7CiB9CiAKLXZvaWQgRmlsZVdyaXRlcjo6aW5pdGlhbGl6ZShQYXNzT3du
UHRyPEFzeW5jRmlsZVdyaXRlcj4gd3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQotewotICAgIEFT
U0VSVCghbV93cml0ZXIpOwotICAgIEFTU0VSVChsZW5ndGggPj0gMCk7Ci0gICAgbV93cml0ZXIg
PSB3cml0ZXI7Ci0gICAgbV9sZW5ndGggPSBsZW5ndGg7Ci19Ci0KIEZpbGVXcml0ZXI6On5GaWxl
V3JpdGVyKCkKIHsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IFdSSVRJTkcpCkBAIC04MSwxNSAr
NzIsMTUgQEAgYm9vbCBGaWxlV3JpdGVyOjpjYW5TdXNwZW5kKCkgY29uc3QKIAogdm9pZCBGaWxl
V3JpdGVyOjpzdG9wKCkKIHsKLSAgICBpZiAobV93cml0ZXIgJiYgbV9yZWFkeVN0YXRlID09IFdS
SVRJTkcpCi0gICAgICAgIG1fd3JpdGVyLT5hYm9ydCgpOworICAgIGlmICh3cml0ZXIoKSAmJiBt
X3JlYWR5U3RhdGUgPT0gV1JJVElORykKKyAgICAgICAgd3JpdGVyKCktPmFib3J0KCk7CiAgICAg
bV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CiAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKIH0K
IAogdm9pZCBGaWxlV3JpdGVyOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKSB7CiAgICAgICAgIHNldEVycm9yKEZpbGVFcnJvcjo6
SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0LDEyICs5NSwx
MiBAQCB2b2lkIEZpbGVXcml0ZXI6OndyaXRlKEJsb2IqIGRhdGEsIEV4Y2VwCiAgICAgbV9zdGFy
dGVkV3JpdGluZyA9IGZhbHNlOwogICAgIG1fYnl0ZXNXcml0dGVuID0gMDsKICAgICBtX2J5dGVz
VG9Xcml0ZSA9IGRhdGEtPnNpemUoKTsKLSAgICBtX3dyaXRlci0+d3JpdGUobV9wb3NpdGlvbiwg
ZGF0YSk7CisgICAgd3JpdGVyKCktPndyaXRlKHBvc2l0aW9uKCksIGRhdGEpOwogfQogCiB2b2lk
IEZpbGVXcml0ZXI6OnNlZWsobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HKSB7CiAgICAgICAgIHNldEVycm9yKEZpbGVFcnJvcjo6
SU5WQUxJRF9TVEFURV9FUlIsIGVjKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3LDE4ICsxMDgs
MTIgQEAgdm9pZCBGaWxlV3JpdGVyOjpzZWVrKGxvbmcgbG9uZyBwb3NpdGlvbgogCiAgICAgbV9i
eXRlc1dyaXR0ZW4gPSAwOwogICAgIG1fYnl0ZXNUb1dyaXRlID0gMDsKLSAgICBpZiAocG9zaXRp
b24gPiBtX2xlbmd0aCkKLSAgICAgICAgcG9zaXRpb24gPSBtX2xlbmd0aDsKLSAgICBlbHNlIGlm
IChwb3NpdGlvbiA8IDApCi0gICAgICAgIHBvc2l0aW9uID0gbV9sZW5ndGggKyBwb3NpdGlvbjsK
LSAgICBpZiAocG9zaXRpb24gPCAwKQotICAgICAgICBwb3NpdGlvbiA9IDA7Ci0gICAgbV9wb3Np
dGlvbiA9IHBvc2l0aW9uOworICAgIHNlZWtJbnRlcm5hbChwb3NpdGlvbik7CiB9CiAKIHZvaWQg
RmlsZVdyaXRlcjo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBBU1NFUlQobV93cml0ZXIpOworICAgIEFTU0VSVCh3cml0ZXIoKSk7CiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBXUklUSU5HIHx8IHBvc2l0aW9uIDwgMCkgewogICAgICAgICBz
ZXRFcnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJSLCBlYyk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTEzNywxOSArMTIyLDE5IEBAIHZvaWQgRmlsZVdyaXRlcjo6dHJ1bmNhdGUobG9uZyBs
b25nIHBvc2kKICAgICBtX2J5dGVzV3JpdHRlbiA9IDA7CiAgICAgbV9ieXRlc1RvV3JpdGUgPSAw
OwogICAgIG1fdHJ1bmNhdGVMZW5ndGggPSBwb3NpdGlvbjsKLSAgICBtX3dyaXRlci0+dHJ1bmNh
dGUocG9zaXRpb24pOworICAgIHdyaXRlcigpLT50cnVuY2F0ZShwb3NpdGlvbik7CiB9CiAKIHZv
aWQgRmlsZVdyaXRlcjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1f
d3JpdGVyKTsKKyAgICBBU1NFUlQod3JpdGVyKCkpOwogICAgIGlmIChtX3JlYWR5U3RhdGUgIT0g
V1JJVElORykgewogICAgICAgICBzZXRFcnJvcihGaWxlRXJyb3I6OklOVkFMSURfU1RBVEVfRVJS
LCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2Vycm9yID0gRmlsZUVycm9y
OjpjcmVhdGUoRmlsZUVycm9yOjpBQk9SVF9FUlIpOwotICAgIG1fd3JpdGVyLT5hYm9ydCgpOwor
ICAgIHdyaXRlcigpLT5hYm9ydCgpOwogfQogCiB2b2lkIEZpbGVXcml0ZXI6OmRpZFdyaXRlKGxv
bmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSkKQEAgLTE2Miw5ICsxNDcsOSBAQCB2b2lkIEZp
bGVXcml0ZXI6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlCiAgICAgfQogICAgIG1fYnl0ZXNXcml0
dGVuICs9IGJ5dGVzOwogICAgIEFTU0VSVCgobV9ieXRlc1dyaXR0ZW4gPT0gbV9ieXRlc1RvV3Jp
dGUpIHx8ICFjb21wbGV0ZSk7Ci0gICAgbV9wb3NpdGlvbiArPSBieXRlczsKLSAgICBpZiAobV9w
b3NpdGlvbiA+IG1fbGVuZ3RoKQotICAgICAgICBtX2xlbmd0aCA9IG1fcG9zaXRpb247CisgICAg
c2V0UG9zaXRpb24ocG9zaXRpb24oKSArIGJ5dGVzKTsKKyAgICBpZiAocG9zaXRpb24oKSA+IGxl
bmd0aCgpKQorICAgICAgICBzZXRMZW5ndGgocG9zaXRpb24oKSk7CiAgICAgZmlyZUV2ZW50KGV2
ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50KTsKICAgICBpZiAoY29tcGxldGUpIHsKICAgICAgICAg
bV9ibG9iQmVpbmdXcml0dGVuLmNsZWFyKCk7CkBAIC0xNzgsOSArMTYzLDkgQEAgdm9pZCBGaWxl
V3JpdGVyOjpkaWRUcnVuY2F0ZSgpCiB7CiAgICAgQVNTRVJUKG1fdHJ1bmNhdGVMZW5ndGggPj0g
MCk7CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS53cml0ZXN0YXJ0RXZlbnQpOwotICAgIG1f
bGVuZ3RoID0gbV90cnVuY2F0ZUxlbmd0aDsKLSAgICBpZiAobV9wb3NpdGlvbiA+IG1fbGVuZ3Ro
KQotICAgICAgICBtX3Bvc2l0aW9uID0gbV9sZW5ndGg7CisgICAgc2V0TGVuZ3RoKG1fdHJ1bmNh
dGVMZW5ndGgpOworICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3RoKCkpCisgICAgICAgIHNldFBv
c2l0aW9uKGxlbmd0aCgpKTsKICAgICBtX3RydW5jYXRlTGVuZ3RoID0gLTE7CiAgICAgZmlyZUV2
ZW50KGV2ZW50TmFtZXMoKS53cml0ZUV2ZW50KTsKICAgICBtX3JlYWR5U3RhdGUgPSBET05FOwpJ
bmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2ZpbGVhcGkvRmlsZVdyaXRlci5oCShyZXZpc2lvbiA3MjYyOCkKKysrIFdlYkNvcmUvZmlsZWFw
aS9GaWxlV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDQ1ICszNCwzNCBAQAogI2lmIEVO
QUJMRShGSUxFX1NZU1RFTSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkFzeW5jRmlsZVdyaXRlckNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0j
aW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSAiRmlsZVdyaXRlckJhc2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFzeW5jRmlsZVdyaXRlcjsKLWNsYXNzIEJsb2I7Ci1j
bGFzcyBGaWxlRXJyb3I7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi1jbGFzcyBG
aWxlV3JpdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVdyaXRlcj4sIHB1YmxpYyBBY3RpdmVE
T01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFzeW5jRmlsZVdyaXRlckNsaWVu
dCB7CitjbGFzcyBGaWxlV3JpdGVyIDogcHVibGljIEZpbGVXcml0ZXJCYXNlLCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBc3luY0ZpbGVXcml0ZXJD
bGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVXcml0ZXI+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGaWxlV3JpdGVyKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICB2b2lkIGlu
aXRpYWxpemUoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+IHdyaXRlciwgbG9uZyBsb25nIGxl
bmd0aCk7Ci0KICAgICBlbnVtIFJlYWR5U3RhdGUgewogICAgICAgICBJTklUID0gMCwKICAgICAg
ICAgV1JJVElORyA9IDEsCiAgICAgICAgIERPTkUgPSAyCiAgICAgfTsKIAotICAgIHZvaWQgd3Jp
dGUoQmxvYiogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgIHZvaWQgc2Vlayhsb25nIGxv
bmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICB2b2lkIHRydW5jYXRlKGxvbmcg
bG9uZyBsZW5ndGgsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICB2b2lkIGFib3J0KEV4Y2VwdGlv
bkNvZGUmIGVjKTsKLQorICAgIHZvaWQgd3JpdGUoQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHNlZWsobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCB0cnVuY2F0ZShsb25nIGxvbmcgbGVuZ3RoLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBh
Ym9ydChFeGNlcHRpb25Db2RlJik7CiAgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9CiAgICAgRmlsZUVycm9yKiBlcnJvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0KLSAgICBsb25nIGxvbmcgcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAvLyBBc3luY0ZpbGVXcml0ZXJDbGllbnQKICAgICB2b2lk
IGRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSk7CkBAIC04OCw4ICs3Nyw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZpbGVXcml0ZXIqIHRvRmlsZVdyaXRlcigpIHsgcmV0
dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgdXNpbmcgUmVmQ291bnRlZDxGaWxlV3JpdGVyPjo6
cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVdyaXRlcj46OmRlcmVmOworICAgIHVzaW5n
IFJlZkNvdW50ZWQ8RmlsZVdyaXRlckJhc2U+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxG
aWxlV3JpdGVyQmFzZT46OmRlcmVmOwogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUih3cml0ZXN0YXJ0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBy
b2dyZXNzKTsKQEAgLTEwMyw4ICs5Miw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIH5GaWxl
V3JpdGVyKCk7CiAKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPEZpbGVXcml0ZXI+
OwotCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQo
KSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVm
KCk7IH0KQEAgLTExNywxMCArMTA0LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxGaWxlRXJy
b3I+IG1fZXJyb3I7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwotICAg
IE93blB0cjxBc3luY0ZpbGVXcml0ZXI+IG1fd3JpdGVyOwogICAgIFJlYWR5U3RhdGUgbV9yZWFk
eVN0YXRlOwotICAgIGxvbmcgbG9uZyBtX3Bvc2l0aW9uOwotICAgIGxvbmcgbG9uZyBtX2xlbmd0
aDsKICAgICBib29sIG1fc3RhcnRlZFdyaXRpbmc7CiAgICAgbG9uZyBsb25nIG1fYnl0ZXNXcml0
dGVuOwogICAgIGxvbmcgbG9uZyBtX2J5dGVzVG9Xcml0ZTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFw
aS9GaWxlV3JpdGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVX
cml0ZXJCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVy
QmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiRmlsZVdyaXRlckJhc2Uu
aCIKKworI2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlci5oIgorI2luY2x1ZGUgIkJsb2IuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmlsZUVycm9yLmgiCisjaW5jbHVk
ZSAiRmlsZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaWxlV3JpdGVyQmFzZTo6fkZpbGVXcml0ZXJCYXNlKCkKK3sKK30K
Kwordm9pZCBGaWxlV3JpdGVyQmFzZTo6aW5pdGlhbGl6ZShQYXNzT3duUHRyPEFzeW5jRmlsZVdy
aXRlcj4gd3JpdGVyLCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIEFTU0VSVCghbV93cml0ZXIp
OworICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CisgICAgbV93cml0ZXIgPSB3cml0ZXI7CisgICAg
bV9sZW5ndGggPSBsZW5ndGg7Cit9CisKK0ZpbGVXcml0ZXJCYXNlOjpGaWxlV3JpdGVyQmFzZSgp
CisgICAgOiBtX3Bvc2l0aW9uKDApCit7Cit9CisKK3ZvaWQgRmlsZVdyaXRlckJhc2U6OnNlZWtJ
bnRlcm5hbChsb25nIGxvbmcgcG9zaXRpb24pCit7CisgICAgaWYgKHBvc2l0aW9uID4gbV9sZW5n
dGgpCisgICAgICAgIHBvc2l0aW9uID0gbV9sZW5ndGg7CisgICAgZWxzZSBpZiAocG9zaXRpb24g
PCAwKQorICAgICAgICBwb3NpdGlvbiA9IG1fbGVuZ3RoICsgcG9zaXRpb247CisgICAgaWYgKHBv
c2l0aW9uIDwgMCkKKyAgICAgICAgcG9zaXRpb24gPSAwOworICAgIG1fcG9zaXRpb24gPSBwb3Np
dGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJ
TEVfU1lTVEVNKQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlckJhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEZpbGVXcml0ZXJCYXNlX2gKKyNkZWZpbmUgRmlsZVdyaXRlckJhc2Vf
aAorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiQXN5bmNGaWxlV3JpdGVy
Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBBc3luY0ZpbGVXcml0ZXI7CitjbGFzcyBCbG9iOworCit0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOworCitjbGFzcyBGaWxlV3JpdGVyQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEZpbGVXcml0ZXJCYXNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmlsZVdyaXRlckJhc2Uo
KTsKKyAgICB2b2lkIGluaXRpYWxpemUoUGFzc093blB0cjxBc3luY0ZpbGVXcml0ZXI+LCBsb25n
IGxvbmcgbGVuZ3RoKTsKKworICAgIGxvbmcgbG9uZyBwb3NpdGlvbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9wb3NpdGlvbjsKKyAgICB9CisgICAgbG9uZyBsb25nIGxlbmd0aCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgRmlsZVdyaXRlckJhc2UoKTsKKworICAgIEFzeW5jRmlsZVdyaXRlciogd3JpdGVy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyaXRlci5nZXQoKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFBvc2l0aW9uKGxvbmcgbG9uZyBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIG1fcG9z
aXRpb24gPSBwb3NpdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aChsb25nIGxvbmcg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CisgICAgfQorCisgICAg
dm9pZCBzZWVrSW50ZXJuYWwobG9uZyBsb25nIHBvc2l0aW9uKTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPEZpbGVXcml0ZXJCYXNlPjsKKworICAgIE93blB0
cjxBc3luY0ZpbGVXcml0ZXI+IG1fd3JpdGVyOworICAgIGxvbmcgbG9uZyBtX3Bvc2l0aW9uOwor
ICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIEZpbGVXcml0ZXJCYXNl
X2gKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tfaAor
I2RlZmluZSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrX2gKKworI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRmlsZVdyaXRlckJhc2U7CisKK2NsYXNzIEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2sg
OiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+RmlsZVdyaXRlckJhc2VDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChGaWxlV3JpdGVyQmFzZSopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
CisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNlbmRpZiAvLyBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrX2gKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlV3JpdGVyU3luYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmNwcAkocmV2aXNp
b24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVdyaXRlclN5bmMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw0NyArMzQsMTEwIEBACiAKICNpbmNsdWRlICJGaWxlV3JpdGVyU3luYy5o
IgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRmlsZVdyaXRlclN5bmM6OndyaXRlKEJs
b2IqLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklY
TUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi19Ci0KLXZvaWQgRmlsZVdyaXRlclN5bmM6OnNlZWso
bG9uZyBsb25nLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi19Ci0KLXZvaWQgRmlsZVdyaXRlclN5bmM6
OnRydW5jYXRlKGxvbmcgbG9uZywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgotfQotCi1ib29sIEZpbGVX
cml0ZXJTeW5jOjpjYW5TdXNwZW5kKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSXQgaXMgbm90
IGN1cnJlbnRseSBwb3NzaWJsZSB0byBzdXNwZW5kIGEgRmlsZVdyaXRlclN5bmMsIHNvIHBhZ2Vz
IHdpdGggRmlsZVdyaXRlciBjYW4gbm90IGdvIGludG8gcGFnZSBjYWNoZS4KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgRmlsZVdyaXRlclN5bmM6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7
Ci19Ci0KLXZvaWQgRmlsZVdyaXRlclN5bmM6OnN0b3AoKQotewotfQorI2luY2x1ZGUgIkFzeW5j
RmlsZVdyaXRlci5oIgorI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJGaWxlRXhjZXB0aW9u
LmgiCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsZVdyaXRlclN5bmM6OkZpbGVXcml0ZXJT
eW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCwgdGhpcykKLSAgICAsIG1fcG9zaXRpb24oMCkKLSAgICAsIG1fbGVuZ3RoKDAp
Cit2b2lkIEZpbGVXcml0ZXJTeW5jOjp3cml0ZShCbG9iKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKKyAgICBBU1NFUlQod3JpdGVyKCkpOworICAgIEFTU0VSVChtX2NvbXBsZXRlKTsKKyAg
ICBlYyA9IDA7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6
VFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcmVwYXJl
Rm9yV3JpdGUoKTsKKyAgICB3cml0ZXIoKS0+d3JpdGUocG9zaXRpb24oKSwgZGF0YSk7CisgICAg
d3JpdGVyKCktPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCk7CisgICAgQVNTRVJUKG1fY29t
cGxldGUpOworICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2Rl
KG1fZXJyb3IpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworICAgIHNldFBvc2l0aW9u
KHBvc2l0aW9uKCkgKyBkYXRhLT5zaXplKCkpOworICAgIGlmIChwb3NpdGlvbigpID4gbGVuZ3Ro
KCkpCisgICAgICAgIHNldExlbmd0aChwb3NpdGlvbigpKTsKK30KKwordm9pZCBGaWxlV3JpdGVy
U3luYzo6c2Vlayhsb25nIGxvbmcgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IEFTU0VSVCh3cml0ZXIoKSk7CisgICAgQVNTRVJUKG1fY29tcGxldGUpOworICAgIGVjID0gMDsK
KyAgICBzZWVrSW50ZXJuYWwocG9zaXRpb24pOworfQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjp0
cnVuY2F0ZShsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NF
UlQod3JpdGVyKCkpOworICAgIEFTU0VSVChtX2NvbXBsZXRlKTsKKyAgICBlYyA9IDA7CisgICAg
aWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwcmVwYXJlRm9yV3JpdGUoKTsK
KyAgICB3cml0ZXIoKS0+dHJ1bmNhdGUob2Zmc2V0KTsKKyAgICB3cml0ZXIoKS0+d2FpdEZvck9w
ZXJhdGlvblRvQ29tcGxldGUoKTsKKyAgICBBU1NFUlQobV9jb21wbGV0ZSk7CisgICAgZWMgPSBG
aWxlRXhjZXB0aW9uOjpFcnJvckNvZGVUb0V4Y2VwdGlvbkNvZGUobV9lcnJvcik7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IHBvc2l0aW9uKCkpCisgICAg
ICAgIHNldFBvc2l0aW9uKG9mZnNldCk7CisgICAgc2V0TGVuZ3RoKG9mZnNldCk7Cit9CisKK3Zv
aWQgRmlsZVdyaXRlclN5bmM6OmRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0
ZSkKK3sKKyAgICBBU1NFUlQobV9lcnJvciA9PSBGaWxlRXJyb3I6Ok9LKTsKKyAgICBBU1NFUlQo
IW1fY29tcGxldGUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2NvbXBsZXRlID0gY29tcGxldGU7
CisjZWxzZQorICAgIEFTU0VSVF9VTlVTRUQoY29tcGxldGUsIGNvbXBsZXRlKTsKKyNlbmRpZgor
fQorCit2b2lkIEZpbGVXcml0ZXJTeW5jOjpkaWRUcnVuY2F0ZSgpCit7CisgICAgQVNTRVJUKG1f
ZXJyb3IgPT0gRmlsZUVycm9yOjpPSyk7CisgICAgQVNTRVJUKCFtX2NvbXBsZXRlKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9jb21wbGV0ZSA9IHRydWU7CisjZW5kaWYKK30KKwordm9pZCBGaWxl
V3JpdGVyU3luYzo6ZGlkRmFpbChGaWxlRXJyb3I6OkVycm9yQ29kZSBlcnJvcikKK3sKKyAgICBB
U1NFUlQobV9lcnJvciA9PSBGaWxlRXJyb3I6Ok9LKTsKKyAgICBtX2Vycm9yID0gZXJyb3I7Cisg
ICAgQVNTRVJUKCFtX2NvbXBsZXRlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9jb21wbGV0ZSA9
IHRydWU7CisjZW5kaWYKK30KKworRmlsZVdyaXRlclN5bmM6OkZpbGVXcml0ZXJTeW5jKCkKKyAg
ICA6IG1fZXJyb3IoRmlsZUVycm9yOjpPSykKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2NvbXBs
ZXRlKHRydWUpCisjZW5kaWYKK3sKK30KKwordm9pZCBGaWxlV3JpdGVyU3luYzo6cHJlcGFyZUZv
cldyaXRlKCkKK3sKKyAgICBBU1NFUlQobV9jb21wbGV0ZSk7CisgICAgbV9lcnJvciA9IEZpbGVF
cnJvcjo6T0s7CisjaWZuZGVmIE5ERUJVRworICAgIG1fY29tcGxldGUgPSBmYWxzZTsKKyNlbmRp
ZgogfQogCi0KIEZpbGVXcml0ZXJTeW5jOjp+RmlsZVdyaXRlclN5bmMoKQogewogfQpJbmRleDog
V2ViQ29yZS9maWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9m
aWxlYXBpL0ZpbGVXcml0ZXJTeW5jLmgJKHJldmlzaW9uIDcyNjI4KQorKysgV2ViQ29yZS9maWxl
YXBpL0ZpbGVXcml0ZXJTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDkgQEAKICNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJGaWxlRXJyb3IuaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZS5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MywzNyArNDQsMzIgQEAgY2xhc3MgQmxvYjsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotLy8gRklYTUU6IFRoaXMgaXMgYW4gZW1wdHkgc2hl
bGwgd2FpdGluZyBmb3IgaW1wbGVtZW50YXRpb24uCi1jbGFzcyBGaWxlV3JpdGVyU3luYyA6IHB1
YmxpYyBSZWZDb3VudGVkPEZpbGVXcml0ZXJTeW5jPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7
CitjbGFzcyBGaWxlV3JpdGVyU3luYyA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZSwgcHVibGljIEFz
eW5jRmlsZVdyaXRlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rmls
ZVdyaXRlclN5bmM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBjcmVhdGUoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlV3JpdGVyU3luYyhjb250ZXh0KSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRmlsZVdyaXRlclN5bmMoKSk7CiAgICAgfQogICAgIHZpcnR1
YWwgfkZpbGVXcml0ZXJTeW5jKCk7CiAKLSAgICB2b2lkIHdyaXRlKEJsb2IqIGRhdGEsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICAvLyBGaWxlV3JpdGVyQmFzZQorICAgIHZvaWQgd3JpdGUoQmxvYios
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNlZWsobG9uZyBsb25nIHBvc2l0aW9uLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgbGVuZ3RoLCBFeGNlcHRp
b25Db2RlJik7CiAKLSAgICBsb25nIGxvbmcgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uOyB9Ci0gICAgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVu
ZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotCi0gICAgdXNpbmcgUmVmQ291bnRlZDxGaWxlV3Jp
dGVyU3luYz46OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVkPEZpbGVXcml0ZXJTeW5jPjo6ZGVy
ZWY7CisgICAgLy8gQXN5bmNGaWxlV3JpdGVyQ2xpZW50LCB2aWEgRmlsZVdyaXRlckJhc2UKKyAg
ICB2b2lkIGRpZFdyaXRlKGxvbmcgbG9uZyBieXRlcywgYm9vbCBjb21wbGV0ZSk7CisgICAgdm9p
ZCBkaWRUcnVuY2F0ZSgpOworICAgIHZvaWQgZGlkRmFpbChGaWxlRXJyb3I6OkVycm9yQ29kZSk7
CiAKIHByaXZhdGU6Ci0gICAgRmlsZVdyaXRlclN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwotCi0gICAgZnJpZW5kIGNsYXNzIFJlZkNvdW50ZWQ8RmlsZVdyaXRlclN5bmM+OworICAgIEZp
bGVXcml0ZXJTeW5jKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yV3JpdGUoKTsKIAotICAgIGxvbmcg
bG9uZyBtX3Bvc2l0aW9uOwotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKKyAgICBGaWxlRXJyb3I6
OkVycm9yQ29kZSBtX2Vycm9yOworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fY29tcGxldGU7
CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZmls
ZWFwaS9GaWxlV3JpdGVyU3luYy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Zp
bGVXcml0ZXJTeW5jLmlkbAkocmV2aXNpb24gNzI2MjgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmls
ZVdyaXRlclN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiBtb2R1bGUg
aHRtbCB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9RklMRV9TWVNURU0s
Ci0gICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICBdIEZpbGVXcml0
ZXJTeW5jIHsKICAgICAgICAgLy8gc3luY2hyb25vdXMgd3JpdGUvbW9kaWZ5IG1ldGhvZHMKICAg
ICAgICAgdm9pZCB3cml0ZShpbiBCbG9iIGRhdGEpIHJhaXNlcyAoRmlsZUV4Y2VwdGlvbik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>