<?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>126780</bug_id>
          
          <creation_ts>2014-01-10 13:48:17 -0800</creation_ts>
          <short_desc>Allow MediaSessionManager to restrict media playback</short_desc>
          <delta_ts>2014-01-14 08:08:16 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>966568</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-10 13:48:17 -0800</bug_when>
    <thetext>Some platforms do not allow more than one &lt;video&gt; element to play concurrently. Have MediaSessionManager handle this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966622</commentid>
    <comment_count>1</comment_count>
      <attachid>220896</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-10 15:26:41 -0800</bug_when>
    <thetext>Created attachment 220896
Patch for the bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966623</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-10 15:28:49 -0800</bug_when>
    <thetext>Attachment 220896 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/media/video-concurrent-playback-expected.txt&apos;, u&apos;LayoutTests/media/video-concurrent-playback.html&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/html/ElementMediaSession.cpp&apos;, u&apos;Source/WebCore/html/ElementMediaSession.h&apos;, u&apos;Source/WebCore/html/HTMLMediaElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLMediaElement.h&apos;, u&apos;Source/WebCore/html/HTMLVideoElement.cpp&apos;, u&apos;Source/WebCore/platform/audio/MediaSession.cpp&apos;, u&apos;Source/WebCore/platform/audio/MediaSession.h&apos;, u&apos;Source/WebCore/platform/audio/MediaSessionManager.cpp&apos;, u&apos;Source/WebCore/platform/audio/MediaSessionManager.h&apos;, u&apos;Source/WebCore/platform/audio/mac/AudioDestinationMac.h&apos;, u&apos;Source/WebCore/testing/Internals.cpp&apos;, u&apos;Source/WebCore/testing/Internals.h&apos;, u&apos;Source/WebCore/testing/Internals.idl&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/html/ElementMediaSession.cpp:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/testing/Internals.h:337:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966669</commentid>
    <comment_count>3</comment_count>
      <attachid>220902</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-10 16:26:36 -0800</bug_when>
    <thetext>Created attachment 220902
Updated patch

Now with fewer style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966686</commentid>
    <comment_count>4</comment_count>
      <attachid>220902</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-01-10 16:45:07 -0800</bug_when>
    <thetext>Comment on attachment 220902
Updated patch

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

I don&apos;t really like the name &quot;ElementMediaSession&quot;.  If we move WebAudio out of modules, most of it will end up in html/, not platform/, and conceivably we could want to add a html/-level MediaSession for something which is not an Element.

Aside from that, this looks good with a couple of nits:

&gt; Source/WebCore/html/ElementMediaSession.cpp:125
&gt; +void ElementMediaSession::clientWillBeginPlayback()
&gt; +{
&gt; +    MediaSessionManager::sharedManager().sessionWillBeginPlayback(*this);
&gt; +}

This doesn&apos;t appear to have any HTMLMediaElement specific knowledge.  Can we move this into MediaSession?

&gt; Source/WebCore/html/ElementMediaSession.cpp:130
&gt; +void ElementMediaSession::pauseSession()
&gt; +{
&gt; +    client().pausePlayback();
&gt; +}

This looks like it does exactly the same thing as MediaSession::pauseSession().  Can we get rid of this and make MediaSession::pauseSession() non-virtual?

&gt; Source/WebCore/platform/audio/MediaSessionManager.cpp:142
&gt; +    for (auto* oneSession : m_sessions) {
&gt; +        if (oneSession == &amp;session)
&gt; +            continue;
&gt; +        if (oneSession-&gt;mediaType() != sessionType)
&gt; +            continue;
&gt; +        if (restrictions &amp; ConcurrentPlaybackNotPermitted)
&gt; +            oneSession-&gt;pauseSession();
&gt; +    }

It&apos;s a tiny optimization, but to benefit those platforms which will never set the ConcurrentPlaybackNotPermitted restriction, the first check should be: &quot;if (!(restrictions &amp; ConcurrentPlaybackNotPermitted)) continue;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966698</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-10 17:14:39 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 220902 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220896&amp;action=review
&gt; 
&gt; I don&apos;t really like the name &quot;ElementMediaSession&quot;.  If we move WebAudio out of modules, most of it will end up in html/, not platform/, and conceivably we could want to add a html/-level MediaSession for something which is not an Element.
&gt; 

As discussed on irc, I will change it to HTMLMediaSession.

&gt; Aside from that, this looks good with a couple of nits:
&gt; 
&gt; &gt; Source/WebCore/html/ElementMediaSession.cpp:125
&gt; &gt; +void ElementMediaSession::clientWillBeginPlayback()
&gt; &gt; +{
&gt; &gt; +    MediaSessionManager::sharedManager().sessionWillBeginPlayback(*this);
&gt; &gt; +}
&gt; 
&gt; This doesn&apos;t appear to have any HTMLMediaElement specific knowledge.  Can we move this into MediaSession?
&gt; 

Done.

&gt; &gt; Source/WebCore/html/ElementMediaSession.cpp:130
&gt; &gt; +void ElementMediaSession::pauseSession()
&gt; &gt; +{
&gt; &gt; +    client().pausePlayback();
&gt; &gt; +}
&gt; 
&gt; This looks like it does exactly the same thing as MediaSession::pauseSession().  Can we get rid of this and make MediaSession::pauseSession() non-virtual?
&gt; 

Done.


&gt; &gt; Source/WebCore/platform/audio/MediaSessionManager.cpp:142
&gt; &gt; +    for (auto* oneSession : m_sessions) {
&gt; &gt; +        if (oneSession == &amp;session)
&gt; &gt; +            continue;
&gt; &gt; +        if (oneSession-&gt;mediaType() != sessionType)
&gt; &gt; +            continue;
&gt; &gt; +        if (restrictions &amp; ConcurrentPlaybackNotPermitted)
&gt; &gt; +            oneSession-&gt;pauseSession();
&gt; &gt; +    }
&gt; 
&gt; It&apos;s a tiny optimization, but to benefit those platforms which will never set the ConcurrentPlaybackNotPermitted restriction, the first check should be: &quot;if (!(restrictions &amp; ConcurrentPlaybackNotPermitted)) continue;&quot;

There is already an early return before entering the loop if the session has no restrictions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967430</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-13 11:39:05 -0800</bug_when>
    <thetext>https://trac.webkit.org/r161899</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967449</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-01-13 12:33:19 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; https://trac.webkit.org/r161899

It broke the Apple Windows build:
     1&gt;WebCoreTestSupport.lib(Internals.obj) : error LNK2019: unresolved external symbol &quot;public: void __thiscall WebCore::MediaSessionManager::addRestriction(enum WebCore::MediaSession::MediaType,unsigned int)&quot; (?addRestriction@MediaSessionManager@WebCore@@QAEXW4MediaType@MediaSession@2@I@Z) referenced in function &quot;public: void __thiscall WebCore::Internals::setMediaSessionRestrictions(class WTF::String const &amp;,class WTF::String const &amp;,int &amp;)&quot; (?setMediaSessionRestrictions@Internals@WebCore@@QAEXABVString@WTF@@0AAH@Z)
     1&gt;WebCoreTestSupport.lib(Internals.obj) : error LNK2019: unresolved external symbol &quot;public: void __thiscall WebCore::MediaSessionManager::removeRestriction(enum WebCore::MediaSession::MediaType,unsigned int)&quot; (?removeRestriction@MediaSessionManager@WebCore@@QAEXW4MediaType@MediaSession@2@I@Z) referenced in function &quot;public: void __thiscall WebCore::Internals::setMediaSessionRestrictions(class WTF::String const &amp;,class WTF::String const &amp;,int &amp;)&quot; (?setMediaSessionRestrictions@Internals@WebCore@@QAEXABVString@WTF@@0AAH@Z)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967455</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-13 12:50:59 -0800</bug_when>
    <thetext>Plus https://trac.webkit.org/r161902 to fix the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967653</commentid>
    <comment_count>9</comment_count>
      <attachid>220902</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-13 21:43:17 -0800</bug_when>
    <thetext>Comment on attachment 220902
Updated patch

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

&gt; Source/WebCore/platform/audio/MediaSessionManager.h:71
&gt; +    std::map&lt;MediaSession::MediaType, SessionRestrictions&gt; m_restrictions;

Why have not historically used std::map.  Is there a reason you are using this over a WTF data structure?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967838</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-01-14 08:08:16 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 220902 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220902&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/MediaSessionManager.h:71
&gt; &gt; +    std::map&lt;MediaSession::MediaType, SessionRestrictions&gt; m_restrictions;
&gt; 
&gt; Why have not historically used std::map.  Is there a reason you are using this over a WTF data structure?

Not a good reason anyway, I will fix it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220896</attachid>
            <date>2014-01-10 15:26:41 -0800</date>
            <delta_ts>2014-01-10 16:26:36 -0800</delta_ts>
            <desc>Patch for the bots</desc>
            <filename>concurrent_patch_2.txt</filename>
            <type>text/plain</type>
            <size>47440</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTY3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE0LTAxLTEwICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IE1lZGlhU2Vz
c2lvbk1hbmFnZXIgdG8gcmVzdHJpY3QgbWVkaWEgcGxheWJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjc4MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL3ZpZGVvLWNvbmN1cnJl
bnQtcGxheWJhY2suaHRtbAorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCBmdW5j
dGlvbnMgbmVlZGVkIGJ5IEludGVybmFscy4KKworICAgICAgICBBZGQgRWxlbWVudE1lZGlhU2Vz
c2lvbi4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgQWRkIGEgbWVkaWEgc2Vzc2lvbiBv
YmplY3QgdG8gbWFuYWdlIEhUTUxNZWRpYUVsZW1lbnQgcmVzdHJpY3Rpb25zLgorICAgICAgICAq
IGh0bWwvRWxlbWVudE1lZGlhU2Vzc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwvRWxl
bWVudE1lZGlhU2Vzc2lvbi5oOiBBZGRlZC4KKworICAgICAgICBNb3ZlIG1lZGlhIHJlc3RyaWN0
aW9uIG1hbmFnZW1lbnQgdG8gYSBNZWRpYVNlc3Npb24uCisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxN
ZWRpYUVsZW1lbnQpOiBVc2UgdGhlIG1lZGlhIHNlc3Npb24gdG8gbWFuYWdlIHJlc3RyaWN0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG8p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkSW50
ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0
UmVhZHlTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
YXV0b3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBs
YXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlKTog
RGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlSW50ZXJuYWwp
OiBEaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c3VzcGVuZCk6IERp
dHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZXN1bWUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6IFRl
bGwgbWVkaWEgc2Vzc2lvbiBwbGF5YmFjayBpcyBhYm91dCB0byBzdGFydC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRlbGl2ZXJOb3RpZmljYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndlYmtpdFNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVk
aWFQbGF5ZXJJc0Z1bGxzY3JlZW5QZXJtaXR0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9yc1Jlc3RyaWN0aW9uc0FmdGVyRmlyc3RV
c2VyR2VzdHVyZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
cGF1c2VQbGF5YmFjayk6IE5ldywgYWxsb3dzIHRoZSBtZWRpYSBzZXNzaW9uIHRvIHBhdXNlIHBs
YXliYWNrLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICog
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQ6OndlYmtpdEVudGVyRnVsbHNjcmVlbik6IFVzZSB0aGUgbWVkaWEgc2Vzc2lvbiB0byBt
YW5hZ2UgcmVzdHJpY3Rpb25zLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNz
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6YmVnaW5JbnRlcnJ1cHRp
b24pOiBBZGQgbG9nZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6ZW5kSW50
ZXJydXB0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb246OnBhdXNl
U2Vzc2lvbik6IE5ldywgYWxsb3dzIHRoZSBzZXNzaW9uIG1hbmFnZXIgdG8gcGF1c2UgcGxheWJh
Y2suCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmg6CisKKyAgICAgICAg
QWRkIHBlci1tZWRpYSB0eXBlIHJlc3RyaWN0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lv
bk1hbmFnZXI6Ok1lZGlhU2Vzc2lvbk1hbmFnZXIpOiBJbml0aWFsaXplIHJlc3RyaWN0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFkZFJlc3RyaWN0aW9uKTog
TmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlUmVzdHJp
Y3Rpb24pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2VyOjpyZXN0
cmljdGlvbnMpOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2VyOjpz
ZXNzaW9uV2lsbEJlZ2luUGxheWJhY2spOiBOZXcuIElmIG9ubHkgb25lIHNlc3Npb24gaWYgdGhl
IHNhbWUKKyAgICAgICAgICAgIHR5cGUgaXMgYWxsb3dlZCB0byBwbGF5LCBwYXVzZSBhbGwgb3Ro
ZXJzLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaDoKKwor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmg6IEFkZCBw
YXVzZVBsYXliYWNrLgorCisgICAgICAgIEFsbG93IHRlc3RzIHRvIHNldCBtZWRpYSBzZXNzaW9u
IHJlc3RyaWN0aW9ucy4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6
CisKIDIwMTQtMDEtMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQ1NTIEJsZW5kaW5nXSBMb2cgYmxlbmRpbmcgYXMgYSBsYXllciBjcmVhdGlvbiBy
ZWFzb24gaW4gdGhlIFdJCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYxNTAz
KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEz
NjIsNiArMTM2Miw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0RhdGVJbnB1dFR5
cGUuY3BwCiAgICAgaHRtbC9EYXRlVGltZUlucHV0VHlwZS5jcHAKICAgICBodG1sL0RhdGVUaW1l
TG9jYWxJbnB1dFR5cGUuY3BwCisgICAgaHRtbC9FbGVtZW50TWVkaWFTZXNzaW9uLmNwcAogICAg
IGh0bWwvRW1haWxJbnB1dFR5cGUuY3BwCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5j
cHAKICAgICBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDE2MTUwMykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMzNTAsNiArMzM1MCw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9odG1sL0RPTVVSTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmgg
XAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvRWxlbWVudE1lZGlhU2Vzc2lvbi5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvRWxlbWVudE1lZGlhU2Vzc2lvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9o
dG1sL0VtYWlsSW5wdXRUeXBlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9FbWFpbElucHV0
VHlwZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNjE1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNzU2LDkgKzc1NiwxMiBAQCBfX1pON1dl
YkNvcmUxOUxheWVyRmx1c2hTY2hlZHVsZXJDMUVQTlNfCiBfX1pON1dlYkNvcmUxOUxheWVyRmx1
c2hTY2hlZHVsZXJDMkVQTlNfMjVMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50RQogX19aTjdXZWJD
b3JlMTlMYXllckZsdXNoU2NoZWR1bGVyRDFFdgogX19aTjdXZWJDb3JlMTlMYXllckZsdXNoU2No
ZWR1bGVyRDJFdgorX19aTjdXZWJDb3JlMTlNZWRpYVNlc3Npb25NYW5hZ2VyMTJyZXN0cmljdGlv
bnNFTlNfMTJNZWRpYVNlc3Npb245TWVkaWFUeXBlRQogX19aTjdXZWJDb3JlMTlNZWRpYVNlc3Np
b25NYW5hZ2VyMTNzaGFyZWRNYW5hZ2VyRXYKK19fWk43V2ViQ29yZTE5TWVkaWFTZXNzaW9uTWFu
YWdlcjE0YWRkUmVzdHJpY3Rpb25FTlNfMTJNZWRpYVNlc3Npb245TWVkaWFUeXBlRWoKIF9fWk43
V2ViQ29yZTE5TWVkaWFTZXNzaW9uTWFuYWdlcjE1ZW5kSW50ZXJydXB0aW9uRU5TXzEyTWVkaWFT
ZXNzaW9uMjBFbmRJbnRlcnJ1cHRpb25GbGFnc0UKIF9fWk43V2ViQ29yZTE5TWVkaWFTZXNzaW9u
TWFuYWdlcjE3YmVnaW5JbnRlcnJ1cHRpb25FdgorX19aTjdXZWJDb3JlMTlNZWRpYVNlc3Npb25N
YW5hZ2VyMTdyZW1vdmVSZXN0cmljdGlvbkVOU18xMk1lZGlhU2Vzc2lvbjlNZWRpYVR5cGVFagog
X19aTjdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTFzZXRIVFRQQm9keUVOM1dURjEwUGFz
c1JlZlB0cklOU184Rm9ybURhdGFFRUUKIF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFz
ZTEzc2V0SFRUUE1ldGhvZEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE5UmVzb3VyY2VS
ZXF1ZXN0QmFzZTE4c2V0SFRUUEhlYWRlckZpZWxkRVBLY1JLTjNXVEY2U3RyaW5nRQpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxNjE1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU1Niw2ICsxNDU1Niw3IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxodG1sXERPTVNldHRhYmxlVG9rZW5MaXN0LmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRE9NVG9rZW5MaXN0LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRE9NVVJMLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGh0bWxcRWxlbWVudE1lZGlhU2Vzc2lvbi5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxodG1sXEVtYWlsSW5wdXRUeXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxmaWxlYXBpXEZpbGVFeGNlcHRpb24uY3BwIiAvPgpAQCAtMjA0NjMsNiArMjA0NjQsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxET01TZXR0YWJsZVRva2VuTGlzdC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxET01Ub2tlbkxpc3QuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcRE9NVVJMLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxodG1sXEVsZW1lbnRNZWRpYVNlc3Npb24uaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcRW1haWxJbnB1dFR5cGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZmlsZWFwaVxGaWxlRXhjZXB0aW9uLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjE1MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTMzNCw2ICszMzQsOCBAQAogCQkwN0UxMTZCMTE0ODlDOUExMDBFQzVB
Q0UgLyogSlNUZXh0VHJhY2tDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDdFMTE2QjAxNDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNr
Q3VzdG9tLmNwcCAqLzsgfTsKIAkJMDdFMTE3MDcxNDg5RUJFQjAwRUM1QUNFIC8qIEpTVGV4dFRy
YWNrQ3VlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3RTExNzA2MTQ4OUVCRUIwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1ZUN1c3RvbS5j
cHAgKi87IH07CiAJCTA3Rjk0NDE2MTg2NEQwNDYwMDVEMzFDQiAvKiBNZWRpYVNlc3Npb25NYW5h
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFF
OEMwODE3NDZCOTU3MDA1MzJENzggLyogTWVkaWFTZXNzaW9uTWFuYWdlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTA3RkU5OURDMTg4MDdBN0Qw
MDI1NjY0OCAvKiBFbGVtZW50TWVkaWFTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkU5OURBMTg4MDdBN0QwMDI1NjY0OCAvKiBFbGVt
ZW50TWVkaWFTZXNzaW9uLmNwcCAqLzsgfTsKKwkJMDdGRTk5REQxODgwN0E3RDAwMjU2NjQ4IC8q
IEVsZW1lbnRNZWRpYVNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBFbGVtZW50TWVkaWFTZXNz
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDdGRkRFNjgxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkZERTY2MTgx
QUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi87IH07CiAJCTA3
RkZERTY5MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRkRFNjcxODFBRUQ0
MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi87IH07CiAJCTA4MDZFNTdB
MTI4OTMwNDUwMDdDRUQzMiAvKiBTVkdNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MDZFNTc5MTI4OTMwNDUwMDdDRUQzMiAvKiBTVkdNYXRy
aXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
Njk1Nyw2ICs2OTU5LDggQEAKIAkJMDdEQzVGRDMxN0QzRUVFOTAwOTlGODkwIC8qIEpTUlRDU3Rh
dHNSZXNwb25zZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwN0UxMTZCMDE0ODlDOUExMDBFQzVBQ0UgLyogSlNUZXh0VHJhY2tDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUZXh0VHJhY2tDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0UxMTcwNjE0ODlFQkVCMDBFQzVBQ0Ug
LyogSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwN0ZFOTlEQTE4ODA3QTdEMDAyNTY2NDggLyogRWxlbWVudE1lZGlhU2Vzc2lvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFbGVtZW50TWVkaWFTZXNz
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGRTk5REIxODgwN0E3RDAw
MjU2NjQ4IC8qIEVsZW1lbnRNZWRpYVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRWxlbWVudE1lZGlhU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwN0ZGREU2NjE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0ZGREU2NzE4MUFF
RDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgwNkU1NzkxMjg5MzA0NTAwN0NFRDMyIC8qIFNWR01hdHJpeC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdNYXRyaXguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Nzc1LDYgKzE2Nzc5LDggQEAKIAkJOTNFRUMxRUMwOUMy
ODc3NzAwQzUxNUQxIC8qIGh0bWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTA3RkU5OURBMTg4MDdBN0QwMDI1NjY0OCAvKiBFbGVtZW50TWVkaWFTZXNz
aW9uLmNwcCAqLywKKwkJCQkwN0ZFOTlEQjE4ODA3QTdEMDAyNTY2NDggLyogRWxlbWVudE1lZGlh
U2Vzc2lvbi5oICovLAogCQkJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAvKiBjYW52YXMgKi8s
CiAJCQkJMUE4OEE5MDExNzU1M0NENzAwMEM3NEY5IC8qIGZvcm1zICovLAogCQkJCTk3QzFGNTUx
MTIyODU1ODgwMEVERTYxNiAvKiBwYXJzZXIgKi8sCkBAIC0yNDc0Niw2ICsyNDc1Miw3IEBACiAJ
CQkJOTMxQ0JEMEQxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTMxQ0JEMEYxNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCODg5MEYxNjdEMzAxNjAwMTBD
REE1IC8qIFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDdG
RTk5REQxODgwN0E3RDAwMjU2NjQ4IC8qIEVsZW1lbnRNZWRpYVNlc3Npb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMUNCRDExMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjYyRjI2MTREQUZFQTEwMDQxNTU2QyAvKiBTY3JvbGxp
bmdUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUFEREE0MTREQjQwOUYwMEFGNjRCMyAv
KiBTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NTMyLDYgKzI4NTM5LDcgQEAK
IAkJCQk3N0ExN0E3NzEyRjI4NjQyMDA0RTAyRjYgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTY5MzhCNjEwNDVENjdFMDA4RUFCQjYgLyogRXZl
bnRIYW5kbGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGMjEwRTRDRUI2RTAwN0Q2
RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3RkU5
OURDMTg4MDdBN0QwMDI1NjY0OCAvKiBFbGVtZW50TWVkaWFTZXNzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3NkQ2QzdCMTIyQjhBM0QwMDFGRDFGNyAvKiBXZWJLaXRCbG9iQnVpbGRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTBCOTIzOTE1RjA4REM0MDBFMTA5ODYgLyogV2ViS2l0
Q1NTQXJyYXlGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyRThBRTMwMTZB
NDhFMUMwMDZCQjNBQSAvKiBXZWJLaXRDU1NGaWx0ZXJSdWxlLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9FbGVtZW50TWVkaWFTZXNzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0VsZW1lbnRNZWRpYVNlc3Npb24uY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9FbGVtZW50TWVkaWFTZXNzaW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJFbGVtZW50TWVkaWFTZXNzaW9uLmgiCisKKyNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlh
U2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxFbGVt
ZW50TWVkaWFTZXNzaW9uPiBFbGVtZW50TWVkaWFTZXNzaW9uOjpjcmVhdGUoTWVkaWFTZXNzaW9u
Q2xpZW50JiBjbGllbnQpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RWxlbWVudE1l
ZGlhU2Vzc2lvbj4oY2xpZW50KTsKK30KKworRWxlbWVudE1lZGlhU2Vzc2lvbjo6RWxlbWVudE1l
ZGlhU2Vzc2lvbihNZWRpYVNlc3Npb25DbGllbnQmIGNsaWVudCkKKyAgICA6IE1lZGlhU2Vzc2lv
bihjbGllbnQpCisgICAgLCBtX3Jlc3RyaWN0aW9ucyhOb1Jlc3RyaWN0aW9ucykKK3sKK30KKwor
dm9pZCBFbGVtZW50TWVkaWFTZXNzaW9uOjphZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9y
UmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKQoreworICAgIG1fcmVzdHJpY3Rpb25zIHw9IHJlc3Ry
aWN0aW9uOworfQorCit2b2lkIEVsZW1lbnRNZWRpYVNlc3Npb246OnJlbW92ZUJlaGF2aW9yUmVz
dHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rpb24pCit7CisgICAgbV9yZXN0
cmljdGlvbnMgJj0gfnJlc3RyaWN0aW9uOworfQorCitib29sIEVsZW1lbnRNZWRpYVNlc3Npb246
OnBsYXliYWNrUGVybWl0dGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdAoreworICAg
IGlmIChtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVyZUZvclJhdGVDaGFuZ2UgJiYg
IVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkVsZW1lbnRNZWRpYVNlc3Npb246OnBsYXliYWNrUGVybWl0dGVkIC0gcmV0dXJu
aW5nIEZBTFNFIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBFbGVtZW50TWVkaWFTZXNzaW9uOjpkYXRhTG9hZGluZ1Blcm1pdHRl
ZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3QKK3sKKyAgICBpZiAobV9yZXN0cmljdGlv
bnMgJiBSZXF1aXJlVXNlckdlc3R1cmVGb3JMb2FkICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSkgeworICAgICAgICBMT0coTWVkaWEsICJFbGVtZW50TWVkaWFT
ZXNzaW9uOjpkYXRhTG9hZGluZ1Blcm1pdHRlZCAtIHJldHVybmluZyBGQUxTRSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWxl
bWVudE1lZGlhU2Vzc2lvbjo6ZnVsbHNjcmVlblBlcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVt
ZW50JikgY29uc3QKK3sKKyAgICBpZiAobV9yZXN0cmljdGlvbnMgJiBSZXF1aXJlVXNlckdlc3R1
cmVGb3JGdWxsc2NyZWVuICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSkgeworICAgICAgICBMT0coTWVkaWEsICJFbGVtZW50TWVkaWFTZXNzaW9uOjpmdWxsc2Ny
ZWVuUGVybWl0dGVkIC0gcmV0dXJuaW5nIEZBTFNFIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFbGVtZW50TWVkaWFTZXNzaW9u
OjpwYWdlQWxsb3dzRGF0YUxvYWRpbmcoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkg
Y29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKTsKKyAg
ICBpZiAobV9yZXN0cmljdGlvbnMgJiBSZXF1aXJlUGFnZUNvbnNlbnRUb0xvYWRNZWRpYSAmJiBw
YWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRWxl
bWVudE1lZGlhU2Vzc2lvbjo6cGFnZUFsbG93c0RhdGFMb2FkaW5nIC0gcmV0dXJuaW5nIEZBTFNF
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgRWxlbWVudE1lZGlhU2Vzc2lvbjo6cGFnZUFsbG93c1BsYXliYWNrQWZ0ZXJS
ZXN1bWluZyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSBjb25zdAoreworICAgIFBh
Z2UqIHBhZ2UgPSBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpOworICAgIGlmIChtX3Jlc3RyaWN0
aW9ucyAmIFJlcXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEgJiYgcGFnZSAmJiAhcGFnZS0+
Y2FuU3RhcnRNZWRpYSgpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkVsZW1lbnRNZWRpYVNlc3Np
b246OnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcgLSByZXR1cm5pbmcgRkFMU0UiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKK2Jvb2wgRWxlbWVudE1lZGlhU2Vzc2lvbjo6c2hv
d2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVybWl0dGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQm
KSBjb25zdAoreworICAgIGlmIChtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVyZVRv
U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSkgeworICAgICAgICBMT0coTWVkaWEsICJFbGVtZW50TWVkaWFTZXNzaW9u
OjpzaG93aW5nUGxheWJhY2tUYXJnZXRQaWNrZXJQZXJtaXR0ZWQgLSByZXR1cm5pbmcgRkFMU0Ui
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKyNlbmRpZgorCit2b2lkIEVsZW1lbnRNZWRpYVNlc3Npb246OmNsaWVudFdpbGxCZWdpblBs
YXliYWNrKCkKK3sKKyAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuc2Vz
c2lvbldpbGxCZWdpblBsYXliYWNrKCp0aGlzKTsKK30KKwordm9pZCBFbGVtZW50TWVkaWFTZXNz
aW9uOjpwYXVzZVNlc3Npb24oKQoreworICAgIGNsaWVudCgpLnBhdXNlUGxheWJhY2soKTsKK30K
KyAKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRWxlbWVudE1lZGlhU2Vzc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRWxlbWVudE1lZGlhU2Vzc2lvbi5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9FbGVtZW50TWVkaWFTZXNzaW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRWxl
bWVudE1lZGlhU2Vzc2lvbl9oCisjZGVmaW5lIEVsZW1lbnRNZWRpYVNlc3Npb25faAorCisjaW5j
bHVkZSAiTWVkaWFTZXNzaW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxl
bWVudE1lZGlhU2Vzc2lvbkNsaWVudDsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CisKK2NsYXNz
IEVsZW1lbnRNZWRpYVNlc3Npb24gOiBwdWJsaWMgTWVkaWFTZXNzaW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEVsZW1lbnRNZWRpYVNlc3Npb24+IGNyZWF0ZShNZWRp
YVNlc3Npb25DbGllbnQmKTsKKworICAgIEVsZW1lbnRNZWRpYVNlc3Npb24oTWVkaWFTZXNzaW9u
Q2xpZW50Jik7CisgICAgdmlydHVhbCB+RWxlbWVudE1lZGlhU2Vzc2lvbigpIHsgfQorCisgICAg
dm9pZCBjbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOworCisgICAgdmlydHVhbCB2b2lkIHBhdXNl
U2Vzc2lvbigpIE9WRVJSSURFOworCisgICAgYm9vbCBwbGF5YmFja1Blcm1pdHRlZChjb25zdCBI
VE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBkYXRhTG9hZGluZ1Blcm1pdHRlZChj
b25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBmdWxsc2NyZWVuUGVybWl0
dGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKKyAgICBib29sIHBhZ2VBbGxvd3NE
YXRhTG9hZGluZyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBwYWdl
QWxsb3dzUGxheWJhY2tBZnRlclJlc3VtaW5nKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25z
dDsKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCisgICAgYm9vbCBzaG93aW5nUGxheWJhY2tUYXJn
ZXRQaWNrZXJQZXJtaXR0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OworI2VuZGlm
CisKKyAgICAvLyBSZXN0cmljdGlvbnMgdG8gbW9kaWZ5IGRlZmF1bHQgYmVoYXZpb3JzLgorICAg
IGVudW0gQmVoYXZpb3JSZXN0cmljdGlvbkZsYWdzIHsKKyAgICAgICAgTm9SZXN0cmljdGlvbnMg
PSAwLAorICAgICAgICBSZXF1aXJlVXNlckdlc3R1cmVGb3JMb2FkID0gMSA8PCAwLAorICAgICAg
ICBSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlID0gMSA8PCAxLAorICAgICAgICBSZXF1
aXJlVXNlckdlc3R1cmVGb3JGdWxsc2NyZWVuID0gMSA8PCAyLAorICAgICAgICBSZXF1aXJlUGFn
ZUNvbnNlbnRUb0xvYWRNZWRpYSA9IDEgPDwgMywKKyAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50
VG9SZXN1bWVNZWRpYSA9IDEgPDwgNCwKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCisgICAgICAg
IFJlcXVpcmVVc2VyR2VzdHVyZVRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyID0gMSA8PCA1LAor
I2VuZGlmCisgICAgfTsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIEJlaGF2aW9yUmVzdHJpY3Rpb25z
OworCisgICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25z
KTsKKyAgICB2b2lkIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlv
bnMpOworCitwcml2YXRlOgorICAgIEJlaGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25z
OworfTsKKworfQorCisjZW5kaWYgLy8gTWVkaWFTZXNzaW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTYxNTAzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgy
LDcgKzI4Miw2IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICNp
ZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAsIG1fcHJveHlXaWRnZXQoMCkK
ICNlbmRpZgotICAgICwgbV9yZXN0cmljdGlvbnMoUmVxdWlyZVVzZXJHZXN0dXJlRm9yRnVsbHNj
cmVlblJlc3RyaWN0aW9uIHwgUmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWFSZXN0cmljdGlv
bikKICAgICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6QXV0bykKICAgICAsIG1fZGlzcGxheU1v
ZGUoVW5rbm93bikKICAgICAsIG1fcHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soMCkKQEAg
LTMzNyw3ICszMzYsNyBAQCBIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAgICAsIG1fYXVkaW9Tb3VyY2VOb2RlKDApCiAjZW5k
aWYKLSAgICAsIG1fbWVkaWFTZXNzaW9uKE1lZGlhU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzKSkKKyAg
ICAsIG1fbWVkaWFTZXNzaW9uKEVsZW1lbnRNZWRpYVNlc3Npb246OmNyZWF0ZSgqdGhpcykpCiAg
ICAgLCBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0KDApCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICAsIG1fbWVkaWFTdHJlYW1TcmNPYmplY3QobnVsbHB0cikKQEAgLTM0Niw2ICszNDUs
OSBAQCBIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0CiAgICAgTE9HKE1l
ZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCIpOwogICAgIHNldEhhc0N1
c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpOwogCisgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJl
aGF2aW9yUmVzdHJpY3Rpb24oRWxlbWVudE1lZGlhU2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJl
Rm9yRnVsbHNjcmVlbik7CisgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rp
b24oRWxlbWVudE1lZGlhU2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOwor
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjbGVhbiB1cCBhbmQgbG9vayB0byBiZXR0ZXIgbWVy
Z2UgdGhlIGlPUyBhbmQgbm9uLWlPUyBjb2RlIGJlbG93LgogICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LnNldHRpbmdzKCk7CiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTM1NywxNSAr
MzU5LDE1IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICNlbmRp
ZgogCiAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5tZWRpYVBsYXliYWNrUmVxdWlyZXNV
c2VyR2VzdHVyZSgpKSB7Ci0gICAgICAgIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVVz
ZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZVJlc3RyaWN0aW9uKTsKLSAgICAgICAgYWRkQmVoYXZpb3JS
ZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVGb3JMb2FkUmVzdHJpY3Rpb24pOworICAgICAg
ICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihFbGVtZW50TWVkaWFTZXNz
aW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlKTsKKyAgICAgICAgbV9tZWRpYVNl
c3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oRWxlbWVudE1lZGlhU2Vzc2lvbjo6UmVxdWly
ZVVzZXJHZXN0dXJlRm9yTG9hZCk7CiAgICAgfQogI2Vsc2UKICAgICBtX3NlbmRQcm9ncmVzc0V2
ZW50cyA9IGZhbHNlOwogICAgIGlmICghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPm1lZGlhUGxheWJh
Y2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkpIHsKLSAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlv
bihSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlUmVzdHJpY3Rpb24pOworICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihFbGVtZW50TWVkaWFTZXNzaW9u
OjpSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlKTsKICNpZiBFTkFCTEUoSU9TX0FJUlBM
QVkpCi0gICAgICAgIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVVzZXJHZXN0dXJlVG9T
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVo
YXZpb3JSZXN0cmljdGlvbihFbGVtZW50TWVkaWFTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVU
b1Nob3dQbGF5YmFja1RhcmdldFBpY2tlcik7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKQEAgLTUxOSw3ICs1MjEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICAvLyBOb3RlLCB1bmxl
c3MgdGhlIHJlc3RyaWN0aW9uIG9uIHJlcXVpcmluZyB1c2VyIGFjdGlvbiBoYXMgYmVlbiByZW1v
dmVkLAogICAgICAgICAvLyBkbyBub3QgYmVnaW4gZG93bmxvYWRpbmcgZGF0YSBvbiBpT1MuCi0g
ICAgICAgIGlmICghdXNlckdlc3R1cmVSZXF1aXJlZEZvckxvYWQoKSAmJiAhdmFsdWUuaXNOdWxs
KCkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBtX21lZGlhU2Vzc2lvbi0+ZGF0
YUxvYWRpbmdQZXJtaXR0ZWQoKnRoaXMpKSB7CiAjZWxzZQogICAgICAgICAvLyBUcmlnZ2VyIGEg
cmVsb2FkLCBhcyBsb25nIGFzIHRoZSAnc3JjJyBhdHRyaWJ1dGUgaXMgcHJlc2VudC4KICAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewpAQCAtNjg2LDcgKzY4OCw3IEBAIE5vZGU6Okluc2Vy
dGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE0KICAgICAgICAgbV9pbkFjdGl2ZURvY3VtZW50
ID0gdHJ1ZTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgaWYgKCF1c2VyR2VzdHVyZVJl
cXVpcmVkRm9yTG9hZCgpICYmIG1fbmV0d29ya1N0YXRlID09IE5FVFdPUktfRU1QVFkgJiYgIWZh
c3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikuaXNFbXB0eSgpKQorICAgICAgICBpZiAobV9uZXR3b3Jr
U3RhdGUgPT0gTkVUV09SS19FTVBUWSAmJiAhZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKS5pc0Vt
cHR5KCkgJiYgbV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCp0aGlzKSkKICNl
bHNlCiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZICYmICFmYXN0
R2V0QXR0cmlidXRlKHNyY0F0dHIpLmlzRW1wdHkoKSkKICNlbmRpZgpAQCAtODkzLDcgKzg5NSw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZCgpCiAgICAgCiAgICAgTE9HKE1lZGlhLCAi
SFRNTE1lZGlhRWxlbWVudDo6bG9hZCgpIik7CiAgICAgCi0gICAgaWYgKHVzZXJHZXN0dXJlUmVx
dWlyZWRGb3JMb2FkKCkgJiYgIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpKQorICAgIGlmICghbV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCp0aGlz
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSkKICAgICAgICAgcmVtb3ZlQmVoYXZpb3JzUmVzdHJpY3Rpb25zQWZ0ZXJG
aXJzdFVzZXJHZXN0dXJlKCk7CkBAIC0xMDA1LDggKzEwMDcsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCiAgICAgQVNTRVJUKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKIAogICAgIC8vIElmIHdlIGNhbid0IHN0
YXJ0IGEgbG9hZCByaWdodCBhd2F5LCBzdGFydCBpdCBsYXRlci4KLSAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQoKS5wYWdlKCk7Ci0gICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JMb2FkKCkg
JiYgcGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7CisgICAgaWYgKCFtX21lZGlhU2Vz
c2lvbi0+cGFnZUFsbG93c0RhdGFMb2FkaW5nKCp0aGlzKSkgewogICAgICAgICBzZXRTaG91bGRE
ZWxheUxvYWRFdmVudChmYWxzZSk7CiAgICAgICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFD
YW5TdGFydCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwMTksOCArMTAyMCw4IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bG9hZEludGVybmFsKCkKIAogICAgIC8vIE9uY2UgdGhlIHBhZ2Ug
aGFzIGFsbG93ZWQgYW4gZWxlbWVudCB0byBsb2FkIG1lZGlhLCBpdCBpcyBmcmVlIHRvIGxvYWQg
YXQgd2lsbC4gVGhpcyBhbGxvd3MgYSAKICAgICAvLyBwbGF5bGlzdCB0aGF0IHN0YXJ0cyBpbiBh
IGZvcmVncm91bmQgdGFiIHRvIGNvbnRpbnVlIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHRhYiBpcyBz
dWJzZXF1ZW50bHkgCi0gICAgLy8gcHV0IGluIHRoZSB0aGUgYmFja2dyb3VuZC4KLSAgICByZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVQYWdlQ29uc2VudFRvTG9hZE1lZGlhUmVzdHJp
Y3Rpb24pOworICAgIC8vIHB1dCBpbnRvIHRoZSBiYWNrZ3JvdW5kLgorICAgIG1fbWVkaWFTZXNz
aW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRNZWRpYVNlc3Npb246OlJlcXVp
cmVQYWdlQ29uc2VudFRvTG9hZE1lZGlhKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKQpAQCAtMTE5Niw3ICsxMTk3LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICBpZiAoTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXAodXJsLnN0
cmluZygpKSkKLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdl
c3R1cmVGb3JSYXRlQ2hhbmdlUmVzdHJpY3Rpb24pOworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+
cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihFbGVtZW50TWVkaWFTZXNzaW9uOjpSZXF1aXJlVXNl
ckdlc3R1cmVGb3JSYXRlQ2hhbmdlKTsKICNlbmRpZgogCiAgICAgaWYgKG1fc2VuZFByb2dyZXNz
RXZlbnRzKSAKQEAgLTIwNDcsNyArMjA0OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0
UmVhZHlTdGF0ZShNZWQKICAgICAgICAgaWYgKGlzUG90ZW50aWFsbHlQbGF5aW5nICYmIG9sZFN0
YXRlIDw9IEhBVkVfQ1VSUkVOVF9EQVRBKQogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVu
dE5hbWVzKCkucGxheWluZ0V2ZW50KTsKIAotICAgICAgICBpZiAobV9hdXRvcGxheWluZyAmJiBt
X3BhdXNlZCAmJiBhdXRvcGxheSgpICYmICFkb2N1bWVudCgpLmlzU2FuZGJveGVkKFNhbmRib3hB
dXRvbWF0aWNGZWF0dXJlcykgJiYgIXVzZXJHZXN0dXJlUmVxdWlyZWRGb3JSYXRlQ2hhbmdlKCkp
IHsKKyAgICAgICAgaWYgKG1fYXV0b3BsYXlpbmcgJiYgbV9wYXVzZWQgJiYgYXV0b3BsYXkoKSAm
JiAhZG9jdW1lbnQoKS5pc1NhbmRib3hlZChTYW5kYm94QXV0b21hdGljRmVhdHVyZXMpICYmIG1f
bWVkaWFTZXNzaW9uLT5wbGF5YmFja1Blcm1pdHRlZCgqdGhpcykpIHsKICAgICAgICAgICAgIG1f
cGF1c2VkID0gZmFsc2U7CiAgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkVGltZSgpOwogICAg
ICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkucGxheUV2ZW50KTsKQEAgLTI1OTks
NyArMjYwMCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6YXV0b3BsYXkoKSBjb25zdAogICAg
IC8vIGxpZnRlZCB0aHJvdWdoIFNldHRpbmdzLCBvciBvbmNlIHRoZSB1c2VyIGV4cGxpY3RseSBj
YWxscyBsb2FkKCkgb3IgcGxheSgpCiAgICAgLy8gYmVjYXVzZSB0aGV5IGhhdmUgT0snZWQgdXMg
bG9hZGluZyBkYXRhLiBUaGlzIGFsbG93cyBwbGF5YmFjayB0byBjb250aW51ZSBpZgogICAgIC8v
IHRoZSBVUkwgaXMgY2hhbmdlZCB3aGlsZSB0aGUgbW92aWUgaXMgcGxheWluZy4KLSAgICBpZiAo
dXNlckdlc3R1cmVSZXF1aXJlZEZvclJhdGVDaGFuZ2UoKSB8fCB1c2VyR2VzdHVyZVJlcXVpcmVk
Rm9yTG9hZCgpKQorICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrUGVybWl0dGVkKCp0
aGlzKSB8fCAhbV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCp0aGlzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKQEAgLTI2MzQsNyArMjYzNSw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6cGxheSgpCiB7CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxl
bWVudDo6cGxheSgpIik7CiAKLSAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvclJhdGVDaGFu
Z2UoKSAmJiAhU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAg
aWYgKCFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tQZXJtaXR0ZWQoKnRoaXMpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
KQogICAgICAgICByZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1
cmUoKTsKQEAgLTI2ODMsNyArMjY4NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2Uo
KQogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkiKTsKIAotICAg
IGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yUmF0ZUNoYW5nZSgpICYmICFTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5w
bGF5YmFja1Blcm1pdHRlZCgqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX21l
ZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBNZWRpYVNlc3Npb246OkludGVycnVwdGVkKSB7CkBAIC0y
NzA0LDcgKzI3MDUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlSW50ZXJuYWwoKQog
I2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgLy8gVW5sZXNzIHRoZSByZXN0cmljdGlvbiBvbiBt
ZWRpYSByZXF1aXJpbmcgdXNlciBhY3Rpb24gaGFzIGJlZW4gbGlmdGVkCiAgICAgICAgIC8vIGRv
bid0IHRyaWdnZXIgbG9hZGluZyBpZiBhIHNjcmlwdCBjYWxscyBwYXVzZSgpLgotICAgICAgICBp
ZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvclJhdGVDaGFuZ2UoKSkKKyAgICAgICAgaWYgKCFtX21l
ZGlhU2Vzc2lvbi0+cGxheWJhY2tQZXJtaXR0ZWQoKnRoaXMpKQogICAgICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAgICAgICAgIHNjaGVkdWxlRGVsYXllZEFjdGlvbihMb2FkTWVkaWFSZXNvdXJj
ZSk7CkBAIC00MjU4LDYgKzQyNTksOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBs
YXlTdGF0ZSgpCiAgICAgICAgIHNldERpc3BsYXlNb2RlKFZpZGVvKTsKICAgICAgICAgaW52YWxp
ZGF0ZUNhY2hlZFRpbWUoKTsKIAorICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJl
Z2luUGxheWJhY2soKTsKKwogICAgICAgICBpZiAocGxheWVyUGF1c2VkKSB7CiAgICAgICAgICAg
ICBpZiAoIW1faXNGdWxsc2NyZWVuICYmIGlzVmlkZW8oKSAmJiBkb2N1bWVudCgpLnBhZ2UoKSAm
JiBkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkucmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9Q
bGF5YmFjaygpKQogICAgICAgICAgICAgICAgIGVudGVyRnVsbHNjcmVlbigpOwpAQCAtNDQ1MSw3
ICs0NDU0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdXNwZW5kKFJlYXNvbkZvcgogICAg
IHsKICAgICAgICAgY2FzZSBEb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZToKICAgICAgICAgICAg
IHN0b3AoKTsKLSAgICAgICAgICAgIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VD
b25zZW50VG9SZXN1bWVNZWRpYVJlc3RyaWN0aW9uKTsKKyAgICAgICAgICAgIG1fbWVkaWFTZXNz
aW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRNZWRpYVNlc3Npb246OlJlcXVpcmVQ
YWdlQ29uc2VudFRvUmVzdW1lTWVkaWEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRG9jdW1lbnRXaWxsQmVQYXVzZWQ6CiAgICAgICAgIGNhc2UgSmF2YVNjcmlwdERlYnVnZ2Vy
UGF1c2VkOgpAQCAtNDQ2OCwxMyArNDQ3MSwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJl
c3VtZSgpCiAKICAgICBtX2luQWN0aXZlRG9jdW1lbnQgPSB0cnVlOwogCi0gICAgUGFnZSogcGFn
ZSA9IGRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmIChwYWdlQ29uc2VudFJlcXVpcmVkRm9yUmVz
dW1lKCkgJiYgcGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKQorICAgIGlmICghbV9tZWRp
YVNlc3Npb24tPnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoKnRoaXMpKQogICAgICAg
ICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKICAgICBlbHNlCiAg
ICAgICAgIHNldFBhdXNlZEludGVybmFsKGZhbHNlKTsKIAotICAgIHJlbW92ZUJlaGF2aW9yUmVz
dHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYVJlc3RyaWN0aW9uKTsKKyAg
ICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihFbGVtZW50TWVkaWFT
ZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1lZGlhKTsKIAogICAgIGlmIChtX2Vy
cm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBNZWRpYUVycm9yOjpNRURJQV9FUlJfQUJPUlRFRCkg
ewogICAgICAgICAvLyBSZXN0YXJ0IHRoZSBsb2FkIGlmIGl0IHdhcyBhYm9ydGVkIGluIHRoZSBt
aWRkbGUgYnkgbW92aW5nIHRoZSBkb2N1bWVudCB0byB0aGUgcGFnZSBjYWNoZS4KQEAgLTQ3NDUs
NyArNDc0Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2Via2l0U2hvd1BsYXliYWMKICAg
ICBpZiAoIW1fcGxheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodXNlckdlc3R1cmVS
ZXF1aXJlZFRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkgJiYgIVNjcmlwdENvbnRyb2xsZXI6
OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnNob3dp
bmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZCgqdGhpcykpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCktPm1lZGlhUGxheWJhY2tBbGxvd3NBaXJQ
bGF5KCkpCkBAIC01NTEzLDcgKzU1MTUsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVySXNGdWxsCiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1bGxz
Y3JlZW5QZXJtaXR0ZWQoKSBjb25zdAogewotICAgIHJldHVybiAhdXNlckdlc3R1cmVSZXF1aXJl
ZEZvckZ1bGxzY3JlZW4oKSB8fCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKTsKKyAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmZ1bGxzY3JlZW5QZXJtaXR0ZWQoKnRo
aXMpOwogfQogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNWaWRlbygpIGNv
bnN0CkBAIC01NTk3LDExICs1NTk5LDExIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQ
bGF5ZXJTaG91bGQKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVCZWhhdmlvcnNSZXN0
cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUoKQogewotICAgIHJlbW92ZUJlaGF2aW9yUmVz
dHJpY3Rpb24oUmVxdWlyZVVzZXJHZXN0dXJlRm9yTG9hZFJlc3RyaWN0aW9uKTsKLSAgICByZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVyZUZvclJhdGVDaGFuZ2VSZXN0
cmljdGlvbik7Ci0gICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1
cmVGb3JGdWxsc2NyZWVuUmVzdHJpY3Rpb24pOworICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVC
ZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRNZWRpYVNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVy
ZUZvckxvYWQpOworICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9u
KEVsZW1lbnRNZWRpYVNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclJhdGVDaGFuZ2UpOwor
ICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRNZWRp
YVNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckZ1bGxzY3JlZW4pOwogI2lmIEVOQUJMRShJ
T1NfQUlSUExBWSkKLSAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2Vz
dHVyZVRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyUmVzdHJpY3Rpb24pOworICAgIG1fbWVkaWFT
ZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRNZWRpYVNlc3Npb246OlJl
cXVpcmVVc2VyR2VzdHVyZVRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKTsKICNlbmRpZgogfQog
CkBAIC01NzU0LDYgKzU3NTYsMTIgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbmRJbnRlcnJ1
cHRpb24oTQogICAgICAgICBwbGF5KCk7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VQbGF5YmFjaygpCit7CisgICAgaWYgKCFwYXVzZWQoKSkKKyAgICAgICAgcGF1c2UoKTsKK30K
KwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
CShyZXZpc2lvbiAxNjE1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAjaWYgRU5BQkxFKFZJREVP
KQogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiRWxlbWVudE1lZGlhU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkdlbmVyaWNFdmVu
dFF1ZXVlLmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCiAjaW5jbHVkZSAi
TWVkaWFDb250cm9sbGVySW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNp
bmNsdWRlICJNZWRpYVNlc3Npb24uaCIKIAogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgpAQCAtNDQyLDMyICs0NDIs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFFbGVtZW50KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgLy8gUmVzdHJpY3Rpb25zIHRv
IGNoYW5nZSBkZWZhdWx0IGJlaGF2aW9ycy4KLSAgICBlbnVtIEJlaGF2aW9yUmVzdHJpY3Rpb25G
bGFncyB7Ci0gICAgICAgIE5vUmVzdHJpY3Rpb25zID0gMCwKLSAgICAgICAgUmVxdWlyZVVzZXJH
ZXN0dXJlRm9yTG9hZFJlc3RyaWN0aW9uID0gMSA8PCAwLAotICAgICAgICBSZXF1aXJlVXNlckdl
c3R1cmVGb3JSYXRlQ2hhbmdlUmVzdHJpY3Rpb24gPSAxIDw8IDEsCi0gICAgICAgIFJlcXVpcmVV
c2VyR2VzdHVyZUZvckZ1bGxzY3JlZW5SZXN0cmljdGlvbiA9IDEgPDwgMiwKLSAgICAgICAgUmVx
dWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWFSZXN0cmljdGlvbiA9IDEgPDwgMywKLSAgICAgICAg
UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYVJlc3RyaWN0aW9uID0gMSA8PCA0LAotI2lm
IEVOQUJMRShJT1NfQUlSUExBWSkKLSAgICAgICAgUmVxdWlyZVVzZXJHZXN0dXJlVG9TaG93UGxh
eWJhY2tUYXJnZXRQaWNrZXIgPSAxIDw8IDUsCi0jZW5kaWYKLSAgICB9OwotICAgIHR5cGVkZWYg
dW5zaWduZWQgQmVoYXZpb3JSZXN0cmljdGlvbnM7Ci0gICAgCi0gICAgYm9vbCB1c2VyR2VzdHVy
ZVJlcXVpcmVkRm9yTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25zICYgUmVxdWly
ZVVzZXJHZXN0dXJlRm9yTG9hZFJlc3RyaWN0aW9uOyB9Ci0gICAgYm9vbCB1c2VyR2VzdHVyZVJl
cXVpcmVkRm9yUmF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25zICYgUmVx
dWlyZVVzZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZVJlc3RyaWN0aW9uOyB9Ci0gICAgYm9vbCB1c2Vy
R2VzdHVyZVJlcXVpcmVkRm9yRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3Rp
b25zICYgUmVxdWlyZVVzZXJHZXN0dXJlRm9yRnVsbHNjcmVlblJlc3RyaWN0aW9uOyB9Ci0gICAg
Ym9vbCBwYWdlQ29uc2VudFJlcXVpcmVkRm9yTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJp
Y3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWFSZXN0cmljdGlvbjsgfQotICAg
IGJvb2wgcGFnZUNvbnNlbnRSZXF1aXJlZEZvclJlc3VtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYVJlc3RyaWN0aW9uOyB9
Ci0jaWYgRU5BQkxFKElPU19BSVJQTEFZKQotICAgIGJvb2wgdXNlckdlc3R1cmVSZXF1aXJlZFRv
U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdGlvbnMg
JiBSZXF1aXJlVXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjsgfQotI2VuZGlm
Ci0gICAgCi0gICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rp
b25zIHJlc3RyaWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zIHw9IHJlc3RyaWN0aW9uOyB9Ci0gICAg
dm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3Ry
aWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zICY9IH5yZXN0cmljdGlvbjsgfQotCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogICAgIGJvb2wgaWdub3JlVHJhY2tEaXNwbGF5VXBkYXRlUmVxdWVzdHMo
KSBjb25zdCB7IHJldHVybiBtX2lnbm9yZVRyYWNrRGlzcGxheVVwZGF0ZSA+IDAgfHwgIW1fdGV4
dFRyYWNrcyB8fCAhbV9jdWVUcmVlLnNpemUoKTsgfQogICAgIHZvaWQgYmVnaW5JZ25vcmluZ1Ry
YWNrRGlzcGxheVVwZGF0ZVJlcXVlc3RzKCk7CkBAIC00NzYsNyArNDUwLDcgQEAgcHJvdGVjdGVk
OgogCiAgICAgdmlydHVhbCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJl
bmRlcmVyKFBhc3NSZWY8UmVuZGVyU3R5bGU+KSBPVkVSUklERTsKIAotICAgIE1lZGlhU2Vzc2lv
biYgbWVkaWFTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbWVkaWFTZXNzaW9uOyB9CisgICAg
RWxlbWVudE1lZGlhU2Vzc2lvbiYgbWVkaWFTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbWVk
aWFTZXNzaW9uOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVNZWRpYVBsYXllcigpOwpA
QCAtNjk3LDYgKzY3MSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5JbnRl
cnJ1cHRpb24oKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kSW50ZXJydXB0aW9uKE1l
ZGlhU2Vzc2lvbjo6RW5kSW50ZXJydXB0aW9uRmxhZ3MpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBwYXVzZVBsYXliYWNrKCkgT1ZFUlJJREU7CiAKICAgICBUaW1lcjxIVE1MTWVkaWFFbGVt
ZW50PiBtX2xvYWRUaW1lcjsKICAgICBUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiBtX3Byb2dyZXNz
RXZlbnRUaW1lcjsKQEAgLTczOCw4ICs3MTMsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXaWRn
ZXQ+IG1fcHJveHlXaWRnZXQ7CiAjZW5kaWYKIAotICAgIEJlaGF2aW9yUmVzdHJpY3Rpb25zIG1f
cmVzdHJpY3Rpb25zOwotICAgIAogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJlbG9hZDsK
IAogICAgIERpc3BsYXlNb2RlIG1fZGlzcGxheU1vZGU7CkBAIC04NTIsNyArODI1LDcgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tNZW51SW50ZXJmYWNlPiBtX3BsYXRm
b3JtTWVudTsKICNlbmRpZgogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhU2Vzc2lvbj4gbV9t
ZWRpYVNlc3Npb247CisgICAgc3RkOjp1bmlxdWVfcHRyPEVsZW1lbnRNZWRpYVNlc3Npb24+IG1f
bWVkaWFTZXNzaW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlQWN0aXZpdHlBc3NlcnRpb25U
b2tlbj4gbV9hY3Rpdml0eVRva2VuOwogICAgIHNpemVfdCBtX3JlcG9ydGVkRXh0cmFNZW1vcnlD
b3N0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MTUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIEhUTUxWaWRlb0VsZW1l
bnQ6OndlYmtpdEVudGVyRnVsbHNjCiAKICAgICAvLyBHZW5lcmF0ZSBhbiBleGNlcHRpb24gaWYg
dGhpcyBpc24ndCBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSB1c2VyIGdlc3R1cmUsIG9yIGlmIHRo
ZSAKICAgICAvLyBlbGVtZW50IGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbi4KLSAgICBpZiAo
KHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JGdWxsc2NyZWVuKCkgJiYgIVNjcmlwdENvbnRyb2xsZXI6
OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSB8fCAhc3VwcG9ydHNGdWxsc2NyZWVuKCkpIHsKKyAg
ICBpZiAoIW1lZGlhU2Vzc2lvbigpLmZ1bGxzY3JlZW5QZXJtaXR0ZWQoKnRoaXMpIHx8ICFzdXBw
b3J0c0Z1bGxzY3JlZW4oKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
TWVkaWFTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9NZWRpYVNlc3Npb24uY3BwCShyZXZpc2lvbiAxNjE1MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4
ICsyOSw2IEBACiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZWRpYVNlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01NSwxNCArNTMsMjIgQEAgTWVkaWFTZXNzaW9uOjp+TWVkaWFTZXNzaW9uKCkKIAogdm9p
ZCBNZWRpYVNlc3Npb246OmJlZ2luSW50ZXJydXB0aW9uKCkKIHsKKyAgICBMT0coTWVkaWEsICJN
ZWRpYVNlc3Npb246OmJlZ2luSW50ZXJydXB0aW9uIik7CiAgICAgbV9zdGF0ZSA9IEludGVycnVw
dGVkOwogICAgIG1fY2xpZW50LmJlZ2luSW50ZXJydXB0aW9uKCk7CiB9CiAKIHZvaWQgTWVkaWFT
ZXNzaW9uOjplbmRJbnRlcnJ1cHRpb24oRW5kSW50ZXJydXB0aW9uRmxhZ3MgZmxhZ3MpCiB7Cisg
ICAgTE9HKE1lZGlhLCAiTWVkaWFTZXNzaW9uOjplbmRJbnRlcnJ1cHRpb24iKTsKICAgICBtX3N0
YXRlID0gUnVubmluZzsKICAgICBtX2NsaWVudC5lbmRJbnRlcnJ1cHRpb24oZmxhZ3MpOwogfQog
Cit2b2lkIE1lZGlhU2Vzc2lvbjo6cGF1c2VTZXNzaW9uKCkKK3sKKyAgICBMT0coTWVkaWEsICJN
ZWRpYVNlc3Npb246OnBhdXNlU2Vzc2lvbiIpOworICAgIG1fY2xpZW50LnBhdXNlUGxheWJhY2so
KTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNz
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFT
ZXNzaW9uLmgJKHJldmlzaW9uIDE2MTUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL01lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTMgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFTZXNzaW9uQ2xpZW50OwotY2xhc3MgSFRN
TE1lZGlhRWxlbWVudDsKIAogY2xhc3MgTWVkaWFTZXNzaW9uIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPE1lZGlhU2Vzc2lvbj4gY3JlYXRlKE1lZGlhU2Vzc2lvbkNsaWVu
dCYpOwogCiAgICAgTWVkaWFTZXNzaW9uKE1lZGlhU2Vzc2lvbkNsaWVudCYpOwotICAgIH5NZWRp
YVNlc3Npb24oKTsKKyAgICB2aXJ0dWFsIH5NZWRpYVNlc3Npb24oKTsKIAogICAgIGVudW0gTWVk
aWFUeXBlIHsKICAgICAgICAgTm9uZSwKQEAgLTYzLDYgKzYyLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGJlZ2luSW50ZXJydXB0aW9uKCk7CiAgICAgdm9pZCBlbmRJbnRlcnJ1cHRpb24oRW5kSW50
ZXJydXB0aW9uRmxhZ3MpOwogCisgICAgdmlydHVhbCB2b2lkIHBhdXNlU2Vzc2lvbigpOworCitw
cm90ZWN0ZWQ6CisgICAgTWVkaWFTZXNzaW9uQ2xpZW50JiBjbGllbnQoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudDsgfQorCiBwcml2YXRlOgogICAgIE1lZGlhU2Vzc2lvbkNsaWVudCYgbV9jbGll
bnQ7CiAgICAgTWVkaWFUeXBlIG1fdHlwZTsKQEAgLTc4LDcgKzgyLDkgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkludGVycnVwdGlvbigpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBlbmRJbnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpFbmRJbnRlcnJ1cHRpb25GbGFncykg
eyB9Ci0gICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VQbGF5YmFjaygpID0gMDsKKwogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgfk1lZGlhU2Vzc2lvbkNsaWVudCgpIHsgfQogfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1h
bmFnZXIuY3BwCShyZXZpc2lvbiAxNjE1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTUgKzMw
LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShJT1MpCiBNZWRp
YVNlc3Npb25NYW5hZ2VyJiBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkKIHsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE1lZGlhU2Vzc2lvbk1hbmFnZXIsIG1hbmFnZXIsICgp
KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KKyNlbmRpZgogCiBNZWRpYVNlc3Npb25NYW5hZ2Vy
OjpNZWRpYVNlc3Npb25NYW5hZ2VyKCkKICAgICA6IG1faW50ZXJydXB0aW9ucygwKQogeworICAg
IG1fcmVzdHJpY3Rpb25zW01lZGlhU2Vzc2lvbjo6VmlkZW9dID0gTm9SZXN0cmljdGlvbnM7Cisg
ICAgbV9yZXN0cmljdGlvbnNbTWVkaWFTZXNzaW9uOjpBdWRpb10gPSBOb1Jlc3RyaWN0aW9uczsK
KyAgICBtX3Jlc3RyaWN0aW9uc1tNZWRpYVNlc3Npb246OldlYkF1ZGlvXSA9IE5vUmVzdHJpY3Rp
b25zOwogfQogCiBib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OmhhcyhNZWRpYVNlc3Npb246Ok1l
ZGlhVHlwZSB0eXBlKSBjb25zdApAQCAtMTAzLDYgKzEwOCw0MCBAQCB2b2lkIE1lZGlhU2Vzc2lv
bk1hbmFnZXI6OnJlbW92ZVNlc3Npb24oCiAgICAgdXBkYXRlU2Vzc2lvblN0YXRlKCk7CiB9CiAK
K3ZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6YWRkUmVzdHJpY3Rpb24oTWVkaWFTZXNzaW9uOjpN
ZWRpYVR5cGUgdHlwZSwgU2Vzc2lvblJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikKK3sKKyAgICBB
U1NFUlQodHlwZSA+IE1lZGlhU2Vzc2lvbjo6Tm9uZSAmJiB0eXBlIDw9IE1lZGlhU2Vzc2lvbjo6
V2ViQXVkaW8pOworICAgIG1fcmVzdHJpY3Rpb25zW3R5cGVdID0gbV9yZXN0cmljdGlvbnNbdHlw
ZV0gfCByZXN0cmljdGlvbjsKK30KKwordm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpyZW1vdmVS
ZXN0cmljdGlvbihNZWRpYVNlc3Npb246Ok1lZGlhVHlwZSB0eXBlLCBTZXNzaW9uUmVzdHJpY3Rp
b25zIHJlc3RyaWN0aW9uKQoreworICAgIEFTU0VSVCh0eXBlID4gTWVkaWFTZXNzaW9uOjpOb25l
ICYmIHR5cGUgPD0gTWVkaWFTZXNzaW9uOjpXZWJBdWRpbyk7CisgICAgbV9yZXN0cmljdGlvbnNb
dHlwZV0gPSBtX3Jlc3RyaWN0aW9uc1t0eXBlXSAmIH5yZXN0cmljdGlvbjsKK30KKworTWVkaWFT
ZXNzaW9uTWFuYWdlcjo6U2Vzc2lvblJlc3RyaWN0aW9ucyBNZWRpYVNlc3Npb25NYW5hZ2VyOjpy
ZXN0cmljdGlvbnMoTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgc2Vzc2lvblR5cGUpCit7CisgICAg
cmV0dXJuIG1fcmVzdHJpY3Rpb25zW3Nlc3Npb25UeXBlXTsKK30KKwordm9pZCBNZWRpYVNlc3Np
b25NYW5hZ2VyOjpzZXNzaW9uV2lsbEJlZ2luUGxheWJhY2soTWVkaWFTZXNzaW9uJiBzZXNzaW9u
KQoreworICAgIE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIHNlc3Npb25UeXBlID0gc2Vzc2lvbi5t
ZWRpYVR5cGUoKTsKKyAgICBTZXNzaW9uUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9ucyA9IG1fcmVz
dHJpY3Rpb25zW3Nlc3Npb25UeXBlXTsKKyAgICBpZiAocmVzdHJpY3Rpb25zID09IE5vUmVzdHJp
Y3Rpb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8qIG9uZVNlc3Npb24gOiBt
X3Nlc3Npb25zKSB7CisgICAgICAgIGlmIChvbmVTZXNzaW9uID09ICZzZXNzaW9uKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvbmVTZXNzaW9uLT5tZWRpYVR5cGUoKSAhPSBz
ZXNzaW9uVHlwZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocmVzdHJpY3Rp
b25zICYgQ29uY3VycmVudFBsYXliYWNrTm90UGVybWl0dGVkKQorICAgICAgICAgICAgb25lU2Vz
c2lvbi0+cGF1c2VTZXNzaW9uKCk7CisgICAgfQorfQorCiAjaWYgIVBMQVRGT1JNKE1BQykKIHZv
aWQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6dXBkYXRlU2Vzc2lvblN0YXRlKCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2Vy
LmgJKHJldmlzaW9uIDE2MTUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01l
ZGlhU2Vzc2lvbk1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiTWVkaWFTZXNzaW9uLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
IDxtYXA+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00NSw2ICs0NiwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBiZWdpbkludGVycnVwdGlvbigpOwog
ICAgIHZvaWQgZW5kSW50ZXJydXB0aW9uKE1lZGlhU2Vzc2lvbjo6RW5kSW50ZXJydXB0aW9uRmxh
Z3MpOwogCisgICAgZW51bSBTZXNzaW9uUmVzdHJpY3Rpb25GbGFncyB7CisgICAgICAgIE5vUmVz
dHJpY3Rpb25zID0gMCwKKyAgICAgICAgQ29uY3VycmVudFBsYXliYWNrTm90UGVybWl0dGVkID0g
MSA8PCAwLAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBTZXNzaW9uUmVzdHJpY3Rpb25z
OworICAgIAorICAgIHZvaWQgYWRkUmVzdHJpY3Rpb24oTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUs
IFNlc3Npb25SZXN0cmljdGlvbnMpOworICAgIHZvaWQgcmVtb3ZlUmVzdHJpY3Rpb24oTWVkaWFT
ZXNzaW9uOjpNZWRpYVR5cGUsIFNlc3Npb25SZXN0cmljdGlvbnMpOworICAgIFNlc3Npb25SZXN0
cmljdGlvbnMgcmVzdHJpY3Rpb25zKE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlKTsKKworICAgIHZv
aWQgc2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKE1lZGlhU2Vzc2lvbiYpOworCiBwcm90ZWN0ZWQ6
CiAgICAgZnJpZW5kIGNsYXNzIE1lZGlhU2Vzc2lvbjsKICAgICB2b2lkIGFkZFNlc3Npb24oTWVk
aWFTZXNzaW9uJik7CkBAIC01NSw2ICs2OCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0
ZVNlc3Npb25TdGF0ZSgpOwogCisgICAgc3RkOjptYXA8TWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUs
IFNlc3Npb25SZXN0cmljdGlvbnM+IG1fcmVzdHJpY3Rpb25zOworCiAgICAgVmVjdG9yPE1lZGlh
U2Vzc2lvbio+IG1fc2Vzc2lvbnM7CiAgICAgaW50IG1faW50ZXJydXB0aW9uczsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rl
c3RpbmF0aW9uTWFjLmgJKHJldmlzaW9uIDE2MTUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzUGxh
eWluZygpIE9WRVJSSURFIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisgICAgdmlydHVhbCB2b2lk
IHBhdXNlUGxheWJhY2soKSBPVkVSUklERSB7IHN0b3AoKTsgfQogCiAgICAgdmlydHVhbCBmbG9h
dCBzYW1wbGVSYXRlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE2MTUwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI4Nyw0ICsyMjg3LDI5IEBAIHZvaWQgSW50ZXJuYWxzOjplbmRNZWRpYVNlc3Npb25JbnRl
cnJ1cHQKICAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuZW5kSW50ZXJy
dXB0aW9uKGZsYWdzKTsKIH0KIAordm9pZCBJbnRlcm5hbHM6OnNldE1lZGlhU2Vzc2lvblJlc3Ry
aWN0aW9ucyhjb25zdCBTdHJpbmcmIG1lZGlhVHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiByZXN0
cmljdGlvbnNTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIE1lZGlhU2Vzc2lvbjo6
TWVkaWFUeXBlIG1lZGlhVHlwZSA9IE1lZGlhU2Vzc2lvbjo6Tm9uZTsKKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobWVkaWFUeXBlU3RyaW5nLCAiVmlkZW8iKSkKKyAgICAgICAgbWVkaWFUeXBl
ID0gTWVkaWFTZXNzaW9uOjpWaWRlbzsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSht
ZWRpYVR5cGVTdHJpbmcsICJBdWRpbyIpKQorICAgICAgICBtZWRpYVR5cGUgPSBNZWRpYVNlc3Np
b246OkF1ZGlvOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1lZGlhVHlwZVN0cmlu
ZywgIldlYkF1ZGlvIikpCisgICAgICAgIG1lZGlhVHlwZSA9IE1lZGlhU2Vzc2lvbjo6V2ViQXVk
aW87CisgICAgZWxzZSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgTWVkaWFTZXNzaW9uTWFuYWdlcjo6U2Vzc2lvblJlc3Ry
aWN0aW9ucyByZXN0cmljdGlvbnMgPSBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2Vy
KCkucmVzdHJpY3Rpb25zKG1lZGlhVHlwZSk7CisgICAgTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLnJlbW92ZVJlc3RyaWN0aW9uKG1lZGlhVHlwZSwgcmVzdHJpY3Rpb25zKTsK
KworICAgIHJlc3RyaWN0aW9ucyA9IE1lZGlhU2Vzc2lvbk1hbmFnZXI6Ok5vUmVzdHJpY3Rpb25z
OworICAgIAorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZXN0cmljdGlvbnNTdHJpbmcsICJD
b25jdXJyZW50UGxheWJhY2tOb3RQZXJtaXR0ZWQiKSkKKyAgICAgICAgcmVzdHJpY3Rpb25zID0g
TWVkaWFTZXNzaW9uTWFuYWdlcjo6Q29uY3VycmVudFBsYXliYWNrTm90UGVybWl0dGVkOworICAg
IAorICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRSZXN0cmljdGlv
bihtZWRpYVR5cGUsIHJlc3RyaWN0aW9ucyk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTYxNTAzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM0LDYgKzMzNCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYmVnaW5NZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oKTsKICAgICB2b2lkIGVu
ZE1lZGlhU2Vzc2lvbkludGVycnVwdGlvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldE1l
ZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgY29uc3QgU3Ry
aW5nJiByZXN0cmljdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBJbnRlcm5hbHMoRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwJKHJldmlzaW9uIDE2MTUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDQgKzI4MSw1IEBACiAKICAgICB2
b2lkIGJlZ2luTWVkaWFTZXNzaW9uSW50ZXJydXB0aW9uKCk7CiAgICAgdm9pZCBlbmRNZWRpYVNl
c3Npb25JbnRlcnJ1cHRpb24oRE9NU3RyaW5nIGZsYWdzKTsKKyAgICBbUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhET01TdHJpbmcgbWVkaWFUeXBlLCBE
T01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKIH07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjE2NzMpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxNC0wMS0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBbGxvdyBNZWRpYVNlc3Npb25NYW5hZ2VyIHRvIHJlc3RyaWN0IG1lZGlhIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3ODAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1lZGlh
L3ZpZGVvLWNvbmN1cnJlbnQtcGxheWJhY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBtZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXliYWNrLmh0bWw6IEFkZGVkLgorCiAyMDE0LTAx
LTEwICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBjbGlw
cGluZyBwYXRoIGZyb20gYmFzaWMtc2hhcGVzIHJlbGF0aXZlIHRvIDxib3g+IHZhbHVlCkluZGV4
OiBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXliYWNrLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXli
YWNrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3ZpZGVv
LWNvbmN1cnJlbnQtcGxheWJhY2stZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjEgQEAKKyAgCitUZXN0IHBsYXkoKSB3aGVuIGNvbmN1cnJlbnQgcGxheWJhY2sgbm90IGFs
bG93ZWQuCisKK1JVTihpbnRlcm5hbHMuc2V0TWVkaWFTZXNzaW9uUmVzdHJpY3Rpb25zKCd2aWRl
bycsICdDb25jdXJyZW50UGxheWJhY2tOb3RQZXJtaXR0ZWQnKSkKKworRVZFTlQoY2FucGxheXRo
cm91Z2gpCitFVkVOVChjYW5wbGF5dGhyb3VnaCkKKworKiogUGxheSBmaXJzdCB2aWRlby4uLgor
UlVOKHZpZGVvc1swXS5wbGF5KCkpCitFVkVOVChwbGF5aW5nKQorCisqKiBTdGFydGluZyB0aGUg
c2Vjb25kIHZpZGVvLCB0aGUgZmlyc3Qgb25lIHNob3VsZCBwYXVzZS4KK1JVTih2aWRlb3NbMV0u
cGxheSgpKQorRVZFTlQocGxheWluZykKKworRVhQRUNURUQgKHZpZGVvc1swXS5wYXVzZWQgPT0g
J3RydWUnKSBPSworRVhQRUNURUQgKHZpZGVvc1sxXS5wYXVzZWQgPT0gJ2ZhbHNlJykgT0sKKwor
RU5EIE9GIFRFU1QKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tY29uY3VycmVudC1w
bGF5YmFjay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWNvbmN1
cnJlbnQtcGxheWJhY2suaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3Zp
ZGVvLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcz
IEBACis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5q
cz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9dmlkZW8tdGVzdC5qcz48L3NjcmlwdD4K
KyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIHZhciBwbGF5Q291bnQgPSAwOworICAgICAg
ICAgICAgdmFyIHBsYXlUaHJvdWdoQ291bnQgPSAwOworICAgICAgICAgICAgdmFyIHZpZGVvcyA9
IFtdOworCisgICAgICAgICAgICBmdW5jdGlvbiBsb2dFdmVudChldnQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVCgiICsgZXZ0LnR5cGUgKyAiKSIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBwbGF5aW5nKGV2dCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2dFdmVudChldnQpOworICAgICAgICAgICAg
ICAgIGNvbnNvbGVXcml0ZSgiIik7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCsrcGxheUNv
dW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAg
ICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiKiogU3RhcnRpbmcgdGhlIHNlY29uZCB2aWRlbywg
dGhlIGZpcnN0IG9uZSBzaG91bGQgcGF1c2UuIik7CisgICAgICAgICAgICAgICAgICAgIHJ1bigi
dmlkZW9zWzFdLnBsYXkoKSIpOworICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGVuZFRl
c3QsIDEwMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlb3NbMF0ucGF1c2Vk
IiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW9zWzFdLnBh
dXNlZCIsIGZhbHNlKTsKKworICAgICAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOwor
ICAgICAgICAgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rp
b24gY2FucGxheXRocm91Z2goZXZ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxv
Z0V2ZW50KGV2dCk7CisKKyAgICAgICAgICAgICAgICBpZiAoKytwbGF5VGhyb3VnaENvdW50IDwg
MikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgY29uc29s
ZVdyaXRlKCI8YnI+KiogUGxheSBmaXJzdCB2aWRlby4uLiIpOworICAgICAgICAgICAgICAgIHJ1
bigidmlkZW9zWzBdLnBsYXkoKSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5j
dGlvbiBzdGFydCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cu
aW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGZhaWxUZXN0KCdUaGlzIHRlc3QgcmVx
dWlyZXMgd2luZG93LmludGVybmFscy4nKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZpZGVvcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdmlkZW9zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZpZGVv
ID0gdmlkZW9zW2ldOworICAgICAgICAgICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVy
KCJjYW5wbGF5dGhyb3VnaCIsIGNhbnBsYXl0aHJvdWdoKTsKKyAgICAgICAgICAgICAgICAgICAg
dmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHBsYXlpbmcpOworICAgICAgICAgICAg
ICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFGaWxlKCJ2aWRlbyIsICJjb250ZW50L3Rlc3Qi
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcnVuKCJpbnRlcm5hbHMuc2V0
TWVkaWFTZXNzaW9uUmVzdHJpY3Rpb25zKCd2aWRlbycsICdDb25jdXJyZW50UGxheWJhY2tOb3RQ
ZXJtaXR0ZWQnKSIpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKworICAgIDxib2R5IG9ubG9h
ZD0ic3RhcnQoKSI+CisgICAgICAgIDx2aWRlbyBjb250cm9scyBpZD0ib25lIj48L3ZpZGVvPgor
ICAgICAgICA8dmlkZW8gY29udHJvbHMgaWQ9InR3byI+PC92aWRlbz4KKyAgICAgICAgPHA+VGVz
dCBwbGF5KCkgd2hlbiBjb25jdXJyZW50IHBsYXliYWNrIG5vdCBhbGxvd2VkLjwvcD4KKyAgICA8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220902</attachid>
            <date>2014-01-10 16:26:36 -0800</date>
            <delta_ts>2014-01-13 21:43:17 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>concurrent_patch_3.txt</filename>
            <type>text/plain</type>
            <size>47462</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE0LTAxLTEwICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IE1lZGlhU2Vz
c2lvbk1hbmFnZXIgdG8gcmVzdHJpY3QgbWVkaWEgcGxheWJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjc4MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL3ZpZGVvLWNvbmN1cnJl
bnQtcGxheWJhY2suaHRtbAorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCBmdW5j
dGlvbnMgbmVlZGVkIGJ5IEludGVybmFscy4KKworICAgICAgICBBZGQgRWxlbWVudE1lZGlhU2Vz
c2lvbi4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgQWRkIGEgbWVkaWEgc2Vzc2lvbiBv
YmplY3QgdG8gbWFuYWdlIEhUTUxNZWRpYUVsZW1lbnQgcmVzdHJpY3Rpb25zLgorICAgICAgICAq
IGh0bWwvRWxlbWVudE1lZGlhU2Vzc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwvRWxl
bWVudE1lZGlhU2Vzc2lvbi5oOiBBZGRlZC4KKworICAgICAgICBNb3ZlIG1lZGlhIHJlc3RyaWN0
aW9uIG1hbmFnZW1lbnQgdG8gYSBNZWRpYVNlc3Npb24uCisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxN
ZWRpYUVsZW1lbnQpOiBVc2UgdGhlIG1lZGlhIHNlc3Npb24gdG8gbWFuYWdlIHJlc3RyaWN0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG8p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkSW50
ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0
UmVhZHlTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
YXV0b3BsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBs
YXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlKTog
RGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlSW50ZXJuYWwp
OiBEaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c3VzcGVuZCk6IERp
dHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZXN1bWUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6IFRl
bGwgbWVkaWEgc2Vzc2lvbiBwbGF5YmFjayBpcyBhYm91dCB0byBzdGFydC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRlbGl2ZXJOb3RpZmljYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndlYmtpdFNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVk
aWFQbGF5ZXJJc0Z1bGxzY3JlZW5QZXJtaXR0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9yc1Jlc3RyaWN0aW9uc0FmdGVyRmlyc3RV
c2VyR2VzdHVyZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
cGF1c2VQbGF5YmFjayk6IE5ldywgYWxsb3dzIHRoZSBtZWRpYSBzZXNzaW9uIHRvIHBhdXNlIHBs
YXliYWNrLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICog
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQ6OndlYmtpdEVudGVyRnVsbHNjcmVlbik6IFVzZSB0aGUgbWVkaWEgc2Vzc2lvbiB0byBt
YW5hZ2UgcmVzdHJpY3Rpb25zLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNz
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6YmVnaW5JbnRlcnJ1cHRp
b24pOiBBZGQgbG9nZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6ZW5kSW50
ZXJydXB0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb246OnBhdXNl
U2Vzc2lvbik6IE5ldywgYWxsb3dzIHRoZSBzZXNzaW9uIG1hbmFnZXIgdG8gcGF1c2UgcGxheWJh
Y2suCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmg6CisKKyAgICAgICAg
QWRkIHBlci1tZWRpYSB0eXBlIHJlc3RyaWN0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lv
bk1hbmFnZXI6Ok1lZGlhU2Vzc2lvbk1hbmFnZXIpOiBJbml0aWFsaXplIHJlc3RyaWN0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFkZFJlc3RyaWN0aW9uKTog
TmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlUmVzdHJp
Y3Rpb24pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2VyOjpyZXN0
cmljdGlvbnMpOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2VyOjpz
ZXNzaW9uV2lsbEJlZ2luUGxheWJhY2spOiBOZXcuIElmIG9ubHkgb25lIHNlc3Npb24gaWYgdGhl
IHNhbWUKKyAgICAgICAgICAgIHR5cGUgaXMgYWxsb3dlZCB0byBwbGF5LCBwYXVzZSBhbGwgb3Ro
ZXJzLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaDoKKwor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmg6IEFkZCBw
YXVzZVBsYXliYWNrLgorCisgICAgICAgIEFsbG93IHRlc3RzIHRvIHNldCBtZWRpYSBzZXNzaW9u
IHJlc3RyaWN0aW9ucy4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6
CisKIDIwMTQtMDEtMDkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgdW51c2VkIEZyYW1lTG9hZGVyIG1lbWJlciBmdW5jdGlvbnMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNjE2MjApCisrKyBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTM2MSw2ICsxMzYxLDcgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIGh0bWwvRGF0ZUlucHV0VHlwZS5jcHAKICAgICBodG1sL0RhdGVU
aW1lSW5wdXRUeXBlLmNwcAogICAgIGh0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAKKyAg
ICBodG1sL0VsZW1lbnRNZWRpYVNlc3Npb24uY3BwCiAgICAgaHRtbC9FbWFpbElucHV0VHlwZS5j
cHAKICAgICBodG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAogICAgIGh0bWwvRmlsZUlucHV0
VHlwZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTYx
NjIwKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5
KQpAQCAtMzM0NCw2ICszMzQ0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9odG1sL0RPTUZvcm1EYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVVJMLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9ET01VUkwuaCBcCisJU291cmNlL1dlYkNvcmUvaHRt
bC9FbGVtZW50TWVkaWFTZXNzaW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9FbGVtZW50
TWVkaWFTZXNzaW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmggXAogCVNvdXJjZS9XZWJD
b3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJl
dmlzaW9uIDE2MTYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC03NTYsOSArNzU2LDEyIEBAIF9fWk43V2ViQ29yZTE5TGF5ZXJGbHVzaFNjaGVk
dWxlckMxRVBOU18KIF9fWk43V2ViQ29yZTE5TGF5ZXJGbHVzaFNjaGVkdWxlckMyRVBOU18yNUxh
eWVyRmx1c2hTY2hlZHVsZXJDbGllbnRFCiBfX1pON1dlYkNvcmUxOUxheWVyRmx1c2hTY2hlZHVs
ZXJEMUV2CiBfX1pON1dlYkNvcmUxOUxheWVyRmx1c2hTY2hlZHVsZXJEMkV2CitfX1pON1dlYkNv
cmUxOU1lZGlhU2Vzc2lvbk1hbmFnZXIxMnJlc3RyaWN0aW9uc0VOU18xMk1lZGlhU2Vzc2lvbjlN
ZWRpYVR5cGVFCiBfX1pON1dlYkNvcmUxOU1lZGlhU2Vzc2lvbk1hbmFnZXIxM3NoYXJlZE1hbmFn
ZXJFdgorX19aTjdXZWJDb3JlMTlNZWRpYVNlc3Npb25NYW5hZ2VyMTRhZGRSZXN0cmljdGlvbkVO
U18xMk1lZGlhU2Vzc2lvbjlNZWRpYVR5cGVFagogX19aTjdXZWJDb3JlMTlNZWRpYVNlc3Npb25N
YW5hZ2VyMTVlbmRJbnRlcnJ1cHRpb25FTlNfMTJNZWRpYVNlc3Npb24yMEVuZEludGVycnVwdGlv
bkZsYWdzRQogX19aTjdXZWJDb3JlMTlNZWRpYVNlc3Npb25NYW5hZ2VyMTdiZWdpbkludGVycnVw
dGlvbkV2CitfX1pON1dlYkNvcmUxOU1lZGlhU2Vzc2lvbk1hbmFnZXIxN3JlbW92ZVJlc3RyaWN0
aW9uRU5TXzEyTWVkaWFTZXNzaW9uOU1lZGlhVHlwZUVqCiBfX1pON1dlYkNvcmUxOVJlc291cmNl
UmVxdWVzdEJhc2UxMXNldEhUVFBCb2R5RU4zV1RGMTBQYXNzUmVmUHRySU5TXzhGb3JtRGF0YUVF
RQogX19aTjdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTNzZXRIVFRQTWV0aG9kRVJLTjNX
VEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMThzZXRIVFRQSGVh
ZGVyRmllbGRFUEtjUktOM1dURjZTdHJpbmdFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE0NTQyLDYgKzE0NTQyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxc
RE9NU2V0dGFibGVUb2tlbkxpc3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aHRtbFxET01Ub2tlbkxpc3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRt
bFxET01VUkwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxFbGVtZW50
TWVkaWFTZXNzaW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRW1h
aWxJbnB1dFR5cGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxG
aWxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZUV4Y2Vw
dGlvbi5jcHAiIC8+CkBAIC0yMDQwMSw2ICsyMDQwMiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxodG1sXERPTVNldHRhYmxlVG9rZW5MaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxodG1sXERPTVRva2VuTGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFxET01VUkwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxc
RWxlbWVudE1lZGlhU2Vzc2lvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxFbWFpbElucHV0VHlwZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZmlsZWFw
aVxGaWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVFeGNl
cHRpb24uaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYg
KzMzOCw4IEBACiAJCTA3RUQzNUEyMTZENkRDQzkwMDIyNDhGMyAvKiBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDczNTdDNzcxNkQyREYwRDAwRUQ5OUU3IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZJT1MubW0gKi87IH07CiAJCTA3RUQzNUEzMTZENkRDRTIwMDIyNDhGMyAvKiBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzM1N0M3NjE2RDJERjBEMDBFRDk5RTcgLyogSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRklPUy5oICovOyB9OwogCQkwN0Y5NDQxNjE4NjREMDQ2MDA1RDMxQ0IgLyogTWVkaWFT
ZXNzaW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RBRThDMDgxNzQ2Qjk1NzAwNTMyRDc4IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwN0ZFOTlE
QzE4ODA3QTdEMDAyNTY2NDggLyogRWxlbWVudE1lZGlhU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0ZFOTlEQTE4ODA3QTdEMDAyNTY2
NDggLyogRWxlbWVudE1lZGlhU2Vzc2lvbi5jcHAgKi87IH07CisJCTA3RkU5OUREMTg4MDdBN0Qw
MDI1NjY0OCAvKiBFbGVtZW50TWVkaWFTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0ZFOTlEQjE4ODA3QTdEMDAyNTY2NDggLyogRWxlbWVu
dE1lZGlhU2Vzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA3RkZERTY4MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0ZGREU2NjE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwICov
OyB9OwogCQkwN0ZGREU2OTE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkZE
RTY3MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oICovOyB9Owog
CQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODA2RTU3OTEyODkzMDQ1MDA3Q0VEMzIg
LyogU1ZHTWF0cml4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTcwNTYsNiArNzA1OCw4IEBACiAJCTA3REM1RkQzMTdEM0VFRTkwMDk5Rjg5MCAv
KiBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNSVENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDdFMTE2QjAxNDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGV4dFRyYWNr
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdFMTE3MDYxNDg5RUJF
QjAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDdGRTk5REExODgwN0E3RDAwMjU2NjQ4IC8qIEVsZW1lbnRNZWRp
YVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWxlbWVu
dE1lZGlhU2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3RkU5OURC
MTg4MDdBN0QwMDI1NjY0OCAvKiBFbGVtZW50TWVkaWFTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRNZWRpYVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdG
RkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MDZFNTc5MTI4OTMwNDUwMDdDRUQzMiAvKiBT
VkdNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWF0cml4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzAxMiw2ICsxNzAxNiw4IEBACiAJCTkz
RUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwN0ZFOTlEQTE4ODA3QTdEMDAyNTY2NDggLyogRWxlbWVu
dE1lZGlhU2Vzc2lvbi5jcHAgKi8sCisJCQkJMDdGRTk5REIxODgwN0E3RDAwMjU2NjQ4IC8qIEVs
ZW1lbnRNZWRpYVNlc3Npb24uaCAqLywKIAkJCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyog
Y2FudmFzICovLAogCQkJCTFBODhBOTAxMTc1NTNDRDcwMDBDNzRGOSAvKiBmb3JtcyAqLywKIAkJ
CQk5N0MxRjU1MTEyMjg1NTg4MDBFREU2MTYgLyogcGFyc2VyICovLApAQCAtMjUxMTMsNiArMjUx
MTksNyBAQAogCQkJCTkzMUNCRDBEMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUNCRDBGMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjg4OTBGMTY3
RDMwMTYwMDEwQ0RBNSAvKiBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTA3RkU5OUREMTg4MDdBN0QwMDI1NjY0OCAvKiBFbGVtZW50TWVkaWFTZXNzaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzFDQkQxMTE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5n
U3RhdGVUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUY2MkYyNjE0REFGRUExMDA0MTU1NkMg
LyogU2Nyb2xsaW5nVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFBRERBNDE0REI0MDlG
MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODk1Niw2ICsy
ODk2Myw3IEBACiAJCQkJNzdBMTdBNzcxMkYyODY0MjAwNEUwMkY2IC8qIFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU2OTM4QjYxMDQ1RDY3RTAwOEVB
QkI2IC8qIEV2ZW50SGFuZGxlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxQzBGRjIxMEU0
Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwN0ZFOTlEQzE4ODA3QTdEMDAyNTY2NDggLyogRWxlbWVudE1lZGlhU2Vzc2lvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM3QjEyMkI4QTNEMDAxRkQxRjcgLyogV2ViS2l0Qmxv
YkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTUwQjkyMzkxNUYwOERDNDAwRTEwOTg2
IC8qIFdlYktpdENTU0FycmF5RnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
MkU4QUUzMDE2QTQ4RTFDMDA2QkIzQUEgLyogV2ViS2l0Q1NTRmlsdGVyUnVsZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRWxlbWVudE1lZGlhU2Vzc2lvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9FbGVtZW50TWVkaWFTZXNzaW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRWxlbWVudE1lZGlhU2Vz
c2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWxlbWVudE1lZGlhU2Vzc2lvbi5oIgorCisj
aW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJNZWRpYVNlc3Npb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1
ZV9wdHI8RWxlbWVudE1lZGlhU2Vzc2lvbj4gRWxlbWVudE1lZGlhU2Vzc2lvbjo6Y3JlYXRlKE1l
ZGlhU2Vzc2lvbkNsaWVudCYgY2xpZW50KQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PEVsZW1lbnRNZWRpYVNlc3Npb24+KGNsaWVudCk7Cit9CisKK0VsZW1lbnRNZWRpYVNlc3Npb246
OkVsZW1lbnRNZWRpYVNlc3Npb24oTWVkaWFTZXNzaW9uQ2xpZW50JiBjbGllbnQpCisgICAgOiBN
ZWRpYVNlc3Npb24oY2xpZW50KQorICAgICwgbV9yZXN0cmljdGlvbnMoTm9SZXN0cmljdGlvbnMp
Cit7Cit9CisKK3ZvaWQgRWxlbWVudE1lZGlhU2Vzc2lvbjo6YWRkQmVoYXZpb3JSZXN0cmljdGlv
bihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikKK3sKKyAgICBtX3Jlc3RyaWN0aW9u
cyB8PSByZXN0cmljdGlvbjsKK30KKwordm9pZCBFbGVtZW50TWVkaWFTZXNzaW9uOjpyZW1vdmVC
ZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKQorewor
ICAgIG1fcmVzdHJpY3Rpb25zICY9IH5yZXN0cmljdGlvbjsKK30KKworYm9vbCBFbGVtZW50TWVk
aWFTZXNzaW9uOjpwbGF5YmFja1Blcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29u
c3QKK3sKKyAgICBpZiAobV9yZXN0cmljdGlvbnMgJiBSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRl
Q2hhbmdlICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgewor
ICAgICAgICBMT0coTWVkaWEsICJFbGVtZW50TWVkaWFTZXNzaW9uOjpwbGF5YmFja1Blcm1pdHRl
ZCAtIHJldHVybmluZyBGQUxTRSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVsZW1lbnRNZWRpYVNlc3Npb246OmRhdGFM
b2FkaW5nUGVybWl0dGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdAoreworICAgIGlm
IChtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVyZUZvckxvYWQgJiYgIVNjcmlwdENv
bnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIExPRyhNZWRpYSwg
IkVsZW1lbnRNZWRpYVNlc3Npb246OmRhdGFMb2FkaW5nUGVybWl0dGVkIC0gcmV0dXJuaW5nIEZB
TFNFIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgRWxlbWVudE1lZGlhU2Vzc2lvbjo6ZnVsbHNjcmVlblBlcm1pdHRlZChj
b25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3QKK3sKKyAgICBpZiAobV9yZXN0cmljdGlvbnMg
JiBSZXF1aXJlVXNlckdlc3R1cmVGb3JGdWxsc2NyZWVuICYmICFTY3JpcHRDb250cm9sbGVyOjpw
cm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgeworICAgICAgICBMT0coTWVkaWEsICJFbGVtZW50TWVk
aWFTZXNzaW9uOjpmdWxsc2NyZWVuUGVybWl0dGVkIC0gcmV0dXJuaW5nIEZBTFNFIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRWxlbWVudE1lZGlhU2Vzc2lvbjo6cGFnZUFsbG93c0RhdGFMb2FkaW5nKGNvbnN0IEhUTUxN
ZWRpYUVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgUGFnZSogcGFnZSA9IGVsZW1lbnQu
ZG9jdW1lbnQoKS5wYWdlKCk7CisgICAgaWYgKG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VD
b25zZW50VG9Mb2FkTWVkaWEgJiYgcGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Cisg
ICAgICAgIExPRyhNZWRpYSwgIkVsZW1lbnRNZWRpYVNlc3Npb246OnBhZ2VBbGxvd3NEYXRhTG9h
ZGluZyAtIHJldHVybmluZyBGQUxTRSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVsZW1lbnRNZWRpYVNlc3Npb246OnBh
Z2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxl
bWVudCkgY29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gZWxlbWVudC5kb2N1bWVudCgpLnBhZ2Uo
KTsKKyAgICBpZiAobV9yZXN0cmljdGlvbnMgJiBSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1l
ZGlhICYmIHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgeworICAgICAgICBMT0coTWVk
aWEsICJFbGVtZW50TWVkaWFTZXNzaW9uOjpwYWdlQWxsb3dzUGxheWJhY2tBZnRlclJlc3VtaW5n
IC0gcmV0dXJuaW5nIEZBTFNFIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCitib29sIEVs
ZW1lbnRNZWRpYVNlc3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZChj
b25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3QKK3sKKyAgICBpZiAobV9yZXN0cmljdGlvbnMg
JiBSZXF1aXJlVXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1RhcmdldFBpY2tlciAmJiAhU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKKyAgICAgICAgTE9HKE1lZGlh
LCAiRWxlbWVudE1lZGlhU2Vzc2lvbjo6c2hvd2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVybWl0
dGVkIC0gcmV0dXJuaW5nIEZBTFNFIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBFbGVtZW50TWVkaWFTZXNz
aW9uOjpjbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpCit7CisgICAgTWVkaWFTZXNzaW9uTWFuYWdl
cjo6c2hhcmVkTWFuYWdlcigpLnNlc3Npb25XaWxsQmVnaW5QbGF5YmFjaygqdGhpcyk7Cit9CisK
K3ZvaWQgRWxlbWVudE1lZGlhU2Vzc2lvbjo6cGF1c2VTZXNzaW9uKCkKK3sKKyAgICBjbGllbnQo
KS5wYXVzZVBsYXliYWNrKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRWxl
bWVudE1lZGlhU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRWxl
bWVudE1lZGlhU2Vzc2lvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9F
bGVtZW50TWVkaWFTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRWxlbWVudE1lZGlhU2Vzc2lvbl9oCisjZGVmaW5lIEVsZW1lbnRN
ZWRpYVNlc3Npb25faAorCisjaW5jbHVkZSAiTWVkaWFTZXNzaW9uLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudE1lZGlhU2Vzc2lvbkNsaWVudDsKK2NsYXNzIEhUTUxN
ZWRpYUVsZW1lbnQ7CisKK2NsYXNzIEVsZW1lbnRNZWRpYVNlc3Npb24gOiBwdWJsaWMgTWVkaWFT
ZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEVsZW1lbnRNZWRp
YVNlc3Npb24+IGNyZWF0ZShNZWRpYVNlc3Npb25DbGllbnQmKTsKKworICAgIEVsZW1lbnRNZWRp
YVNlc3Npb24oTWVkaWFTZXNzaW9uQ2xpZW50Jik7CisgICAgdmlydHVhbCB+RWxlbWVudE1lZGlh
U2Vzc2lvbigpIHsgfQorCisgICAgdm9pZCBjbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOworCisg
ICAgdmlydHVhbCB2b2lkIHBhdXNlU2Vzc2lvbigpIE9WRVJSSURFOworCisgICAgYm9vbCBwbGF5
YmFja1Blcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBk
YXRhTG9hZGluZ1Blcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CisgICAg
Ym9vbCBmdWxsc2NyZWVuUGVybWl0dGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsK
KyAgICBib29sIHBhZ2VBbGxvd3NEYXRhTG9hZGluZyhjb25zdCBIVE1MTWVkaWFFbGVtZW50Jikg
Y29uc3Q7CisgICAgYm9vbCBwYWdlQWxsb3dzUGxheWJhY2tBZnRlclJlc3VtaW5nKGNvbnN0IEhU
TUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKKyNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCisgICAgYm9v
bCBzaG93aW5nUGxheWJhY2tUYXJnZXRQaWNrZXJQZXJtaXR0ZWQoY29uc3QgSFRNTE1lZGlhRWxl
bWVudCYpIGNvbnN0OworI2VuZGlmCisKKyAgICAvLyBSZXN0cmljdGlvbnMgdG8gbW9kaWZ5IGRl
ZmF1bHQgYmVoYXZpb3JzLgorICAgIGVudW0gQmVoYXZpb3JSZXN0cmljdGlvbkZsYWdzIHsKKyAg
ICAgICAgTm9SZXN0cmljdGlvbnMgPSAwLAorICAgICAgICBSZXF1aXJlVXNlckdlc3R1cmVGb3JM
b2FkID0gMSA8PCAwLAorICAgICAgICBSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlID0g
MSA8PCAxLAorICAgICAgICBSZXF1aXJlVXNlckdlc3R1cmVGb3JGdWxsc2NyZWVuID0gMSA8PCAy
LAorICAgICAgICBSZXF1aXJlUGFnZUNvbnNlbnRUb0xvYWRNZWRpYSA9IDEgPDwgMywKKyAgICAg
ICAgUmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYSA9IDEgPDwgNCwKKyNpZiBFTkFCTEUo
SU9TX0FJUlBMQVkpCisgICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZVRvU2hvd1BsYXliYWNrVGFy
Z2V0UGlja2VyID0gMSA8PCA1LAorI2VuZGlmCisgICAgfTsKKyAgICB0eXBlZGVmIHVuc2lnbmVk
IEJlaGF2aW9yUmVzdHJpY3Rpb25zOworCisgICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9u
KEJlaGF2aW9yUmVzdHJpY3Rpb25zKTsKKyAgICB2b2lkIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rp
b24oQmVoYXZpb3JSZXN0cmljdGlvbnMpOworCitwcml2YXRlOgorICAgIEJlaGF2aW9yUmVzdHJp
Y3Rpb25zIG1fcmVzdHJpY3Rpb25zOworfTsKKworfQorCisjZW5kaWYgLy8gTWVkaWFTZXNzaW9u
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNp
b24gMTYxNjIwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw2IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxN
ZWRpYUVsZW1lbnQoY29uc3QKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAg
ICAsIG1fcHJveHlXaWRnZXQoMCkKICNlbmRpZgotICAgICwgbV9yZXN0cmljdGlvbnMoUmVxdWly
ZVVzZXJHZXN0dXJlRm9yRnVsbHNjcmVlblJlc3RyaWN0aW9uIHwgUmVxdWlyZVBhZ2VDb25zZW50
VG9Mb2FkTWVkaWFSZXN0cmljdGlvbikKICAgICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6QXV0
bykKICAgICAsIG1fZGlzcGxheU1vZGUoVW5rbm93bikKICAgICAsIG1fcHJvY2Vzc2luZ01lZGlh
UGxheWVyQ2FsbGJhY2soMCkKQEAgLTMzNyw3ICszMzYsNyBAQCBIVE1MTWVkaWFFbGVtZW50OjpI
VE1MTWVkaWFFbGVtZW50KGNvbnN0CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAgICAsIG1fYXVk
aW9Tb3VyY2VOb2RlKDApCiAjZW5kaWYKLSAgICAsIG1fbWVkaWFTZXNzaW9uKE1lZGlhU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fbWVkaWFTZXNzaW9uKEVsZW1lbnRNZWRpYVNlc3Np
b246OmNyZWF0ZSgqdGhpcykpCiAgICAgLCBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0KDApCiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAsIG1fbWVkaWFTdHJlYW1TcmNPYmplY3QobnVs
bHB0cikKQEAgLTM0Niw2ICszNDUsOSBAQCBIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVt
ZW50KGNvbnN0CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxl
bWVudCIpOwogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpOwogCisgICAg
bV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oRWxlbWVudE1lZGlhU2Vzc2lv
bjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yRnVsbHNjcmVlbik7CisgICAgbV9tZWRpYVNlc3Npb24t
PmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oRWxlbWVudE1lZGlhU2Vzc2lvbjo6UmVxdWlyZVBhZ2VD
b25zZW50VG9Mb2FkTWVkaWEpOworCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjbGVhbiB1cCBh
bmQgbG9vayB0byBiZXR0ZXIgbWVyZ2UgdGhlIGlPUyBhbmQgbm9uLWlPUyBjb2RlIGJlbG93Lgog
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LnNldHRpbmdzKCk7CiAjaWYgIVBMQVRG
T1JNKElPUykKQEAgLTM1NywxNSArMzU5LDE1IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRp
YUVsZW1lbnQoY29uc3QKICNlbmRpZgogCiAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5t
ZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgpKSB7Ci0gICAgICAgIGFkZEJlaGF2aW9y
UmVzdHJpY3Rpb24oUmVxdWlyZVVzZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZVJlc3RyaWN0aW9uKTsK
LSAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVGb3JMb2Fk
UmVzdHJpY3Rpb24pOworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmlj
dGlvbihFbGVtZW50TWVkaWFTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdl
KTsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oRWxlbWVu
dE1lZGlhU2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yTG9hZCk7CiAgICAgfQogI2Vsc2UK
ICAgICBtX3NlbmRQcm9ncmVzc0V2ZW50cyA9IGZhbHNlOwogICAgIGlmICghc2V0dGluZ3MgfHwg
c2V0dGluZ3MtPm1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkpIHsKLSAgICAgICAg
YWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlUmVz
dHJpY3Rpb24pOworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlv
bihFbGVtZW50TWVkaWFTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlKTsK
ICNpZiBFTkFCTEUoSU9TX0FJUlBMQVkpCi0gICAgICAgIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24o
UmVxdWlyZVVzZXJHZXN0dXJlVG9TaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOworICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihFbGVtZW50TWVkaWFTZXNzaW9u
OjpSZXF1aXJlVXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1RhcmdldFBpY2tlcik7CiAjZW5kaWYK
ICAgICB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKQEAgLTUxOSw3ICs1MjEsNyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICAgICAvLyBOb3RlLCB1bmxlc3MgdGhlIHJlc3RyaWN0aW9uIG9uIHJlcXVpcmluZyB1c2Vy
IGFjdGlvbiBoYXMgYmVlbiByZW1vdmVkLAogICAgICAgICAvLyBkbyBub3QgYmVnaW4gZG93bmxv
YWRpbmcgZGF0YSBvbiBpT1MuCi0gICAgICAgIGlmICghdXNlckdlc3R1cmVSZXF1aXJlZEZvckxv
YWQoKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAm
JiBtX21lZGlhU2Vzc2lvbi0+ZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKnRoaXMpKSB7CiAjZWxzZQog
ICAgICAgICAvLyBUcmlnZ2VyIGEgcmVsb2FkLCBhcyBsb25nIGFzIHRoZSAnc3JjJyBhdHRyaWJ1
dGUgaXMgcHJlc2VudC4KICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgewpAQCAtNjg2LDcg
KzY4OCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE0KICAgICAg
ICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gdHJ1ZTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAg
ICAgaWYgKCF1c2VyR2VzdHVyZVJlcXVpcmVkRm9yTG9hZCgpICYmIG1fbmV0d29ya1N0YXRlID09
IE5FVFdPUktfRU1QVFkgJiYgIWZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikuaXNFbXB0eSgpKQor
ICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSAmJiAhZmFzdEdldEF0
dHJpYnV0ZShzcmNBdHRyKS5pc0VtcHR5KCkgJiYgbV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5n
UGVybWl0dGVkKCp0aGlzKSkKICNlbHNlCiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA9PSBO
RVRXT1JLX0VNUFRZICYmICFmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLmlzRW1wdHkoKSkKICNl
bmRpZgpAQCAtODkzLDcgKzg5NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZCgpCiAg
ICAgCiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6bG9hZCgpIik7CiAgICAgCi0g
ICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JMb2FkKCkgJiYgIVNjcmlwdENvbnRyb2xsZXI6
OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgIGlmICghbV9tZWRpYVNlc3Npb24tPmRhdGFM
b2FkaW5nUGVybWl0dGVkKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChTY3JpcHRD
b250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKICAgICAgICAgcmVtb3ZlQmVoYXZp
b3JzUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKCk7CkBAIC0xMDA1LDggKzEwMDcs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCiAgICAgQVNTRVJUKCFO
b0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKIAog
ICAgIC8vIElmIHdlIGNhbid0IHN0YXJ0IGEgbG9hZCByaWdodCBhd2F5LCBzdGFydCBpdCBsYXRl
ci4KLSAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7Ci0gICAgaWYgKHBhZ2VDb25z
ZW50UmVxdWlyZWRGb3JMb2FkKCkgJiYgcGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7
CisgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93c0RhdGFMb2FkaW5nKCp0aGlzKSkg
ewogICAgICAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxzZSk7CiAgICAgICAgIGlmICht
X2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEw
MTksOCArMTAyMCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZEludGVybmFsKCkKIAog
ICAgIC8vIE9uY2UgdGhlIHBhZ2UgaGFzIGFsbG93ZWQgYW4gZWxlbWVudCB0byBsb2FkIG1lZGlh
LCBpdCBpcyBmcmVlIHRvIGxvYWQgYXQgd2lsbC4gVGhpcyBhbGxvd3MgYSAKICAgICAvLyBwbGF5
bGlzdCB0aGF0IHN0YXJ0cyBpbiBhIGZvcmVncm91bmQgdGFiIHRvIGNvbnRpbnVlIGF1dG9tYXRp
Y2FsbHkgaWYgdGhlIHRhYiBpcyBzdWJzZXF1ZW50bHkgCi0gICAgLy8gcHV0IGluIHRoZSB0aGUg
YmFja2dyb3VuZC4KLSAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVQYWdlQ29u
c2VudFRvTG9hZE1lZGlhUmVzdHJpY3Rpb24pOworICAgIC8vIHB1dCBpbnRvIHRoZSBiYWNrZ3Jv
dW5kLgorICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1l
bnRNZWRpYVNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvTG9hZE1lZGlhKTsKIAogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQpAQCAtMTE5Niw3
ICsxMTk3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogCiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVn
aXN0cnkoKS5sb29rdXAodXJsLnN0cmluZygpKSkKLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0
cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlUmVzdHJpY3Rpb24pOworICAg
ICAgICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihFbGVtZW50TWVk
aWFTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlKTsKICNlbmRpZgogCiAg
ICAgaWYgKG1fc2VuZFByb2dyZXNzRXZlbnRzKSAKQEAgLTIwNDcsNyArMjA0OCw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWQKICAgICAgICAgaWYgKGlzUG90ZW50
aWFsbHlQbGF5aW5nICYmIG9sZFN0YXRlIDw9IEhBVkVfQ1VSUkVOVF9EQVRBKQogICAgICAgICAg
ICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkucGxheWluZ0V2ZW50KTsKIAotICAgICAgICBp
ZiAobV9hdXRvcGxheWluZyAmJiBtX3BhdXNlZCAmJiBhdXRvcGxheSgpICYmICFkb2N1bWVudCgp
LmlzU2FuZGJveGVkKFNhbmRib3hBdXRvbWF0aWNGZWF0dXJlcykgJiYgIXVzZXJHZXN0dXJlUmVx
dWlyZWRGb3JSYXRlQ2hhbmdlKCkpIHsKKyAgICAgICAgaWYgKG1fYXV0b3BsYXlpbmcgJiYgbV9w
YXVzZWQgJiYgYXV0b3BsYXkoKSAmJiAhZG9jdW1lbnQoKS5pc1NhbmRib3hlZChTYW5kYm94QXV0
b21hdGljRmVhdHVyZXMpICYmIG1fbWVkaWFTZXNzaW9uLT5wbGF5YmFja1Blcm1pdHRlZCgqdGhp
cykpIHsKICAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CiAgICAgICAgICAgICBpbnZhbGlk
YXRlQ2FjaGVkVGltZSgpOwogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCku
cGxheUV2ZW50KTsKQEAgLTI1OTksNyArMjYwMCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6
YXV0b3BsYXkoKSBjb25zdAogICAgIC8vIGxpZnRlZCB0aHJvdWdoIFNldHRpbmdzLCBvciBvbmNl
IHRoZSB1c2VyIGV4cGxpY3RseSBjYWxscyBsb2FkKCkgb3IgcGxheSgpCiAgICAgLy8gYmVjYXVz
ZSB0aGV5IGhhdmUgT0snZWQgdXMgbG9hZGluZyBkYXRhLiBUaGlzIGFsbG93cyBwbGF5YmFjayB0
byBjb250aW51ZSBpZgogICAgIC8vIHRoZSBVUkwgaXMgY2hhbmdlZCB3aGlsZSB0aGUgbW92aWUg
aXMgcGxheWluZy4KLSAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvclJhdGVDaGFuZ2UoKSB8
fCB1c2VyR2VzdHVyZVJlcXVpcmVkRm9yTG9hZCgpKQorICAgIGlmICghbV9tZWRpYVNlc3Npb24t
PnBsYXliYWNrUGVybWl0dGVkKCp0aGlzKSB8fCAhbV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5n
UGVybWl0dGVkKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKQEAgLTI2
MzQsNyArMjYzNSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheSgpCiB7CiAgICAgTE9H
KE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6cGxheSgpIik7CiAKLSAgICBpZiAodXNlckdlc3R1
cmVSZXF1aXJlZEZvclJhdGVDaGFuZ2UoKSAmJiAhU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkpCisgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tQZXJtaXR0
ZWQoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQogICAgICAgICByZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlv
bnNBZnRlckZpcnN0VXNlckdlc3R1cmUoKTsKQEAgLTI2ODMsNyArMjY4NCw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6cGF1c2UoKQogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1l
bnQ6OnBhdXNlKCkiKTsKIAotICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yUmF0ZUNoYW5n
ZSgpICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICBp
ZiAoIW1fbWVkaWFTZXNzaW9uLT5wbGF5YmFja1Blcm1pdHRlZCgqdGhpcykpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChtX21lZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBNZWRpYVNlc3Npb246
OkludGVycnVwdGVkKSB7CkBAIC0yNzA0LDcgKzI3MDUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnBhdXNlSW50ZXJuYWwoKQogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgLy8gVW5sZXNz
IHRoZSByZXN0cmljdGlvbiBvbiBtZWRpYSByZXF1aXJpbmcgdXNlciBhY3Rpb24gaGFzIGJlZW4g
bGlmdGVkCiAgICAgICAgIC8vIGRvbid0IHRyaWdnZXIgbG9hZGluZyBpZiBhIHNjcmlwdCBjYWxs
cyBwYXVzZSgpLgotICAgICAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvclJhdGVDaGFuZ2Uo
KSkKKyAgICAgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tQZXJtaXR0ZWQoKnRoaXMp
KQogICAgICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgICAgIHNjaGVkdWxlRGVsYXllZEFj
dGlvbihMb2FkTWVkaWFSZXNvdXJjZSk7CkBAIC00MjU4LDYgKzQyNTksOCBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgIHNldERpc3BsYXlNb2RlKFZp
ZGVvKTsKICAgICAgICAgaW52YWxpZGF0ZUNhY2hlZFRpbWUoKTsKIAorICAgICAgICBtX21lZGlh
U2Vzc2lvbi0+Y2xpZW50V2lsbEJlZ2luUGxheWJhY2soKTsKKwogICAgICAgICBpZiAocGxheWVy
UGF1c2VkKSB7CiAgICAgICAgICAgICBpZiAoIW1faXNGdWxsc2NyZWVuICYmIGlzVmlkZW8oKSAm
JiBkb2N1bWVudCgpLnBhZ2UoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkucmVxdWly
ZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpKQogICAgICAgICAgICAgICAgIGVudGVyRnVs
bHNjcmVlbigpOwpAQCAtNDQ1MSw3ICs0NDU0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
dXNwZW5kKFJlYXNvbkZvcgogICAgIHsKICAgICAgICAgY2FzZSBEb2N1bWVudFdpbGxCZWNvbWVJ
bmFjdGl2ZToKICAgICAgICAgICAgIHN0b3AoKTsKLSAgICAgICAgICAgIGFkZEJlaGF2aW9yUmVz
dHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYVJlc3RyaWN0aW9uKTsKKyAg
ICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRN
ZWRpYVNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG9jdW1lbnRXaWxsQmVQYXVzZWQ6CiAgICAgICAgIGNh
c2UgSmF2YVNjcmlwdERlYnVnZ2VyUGF1c2VkOgpAQCAtNDQ2OCwxMyArNDQ3MSwxMiBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnJlc3VtZSgpCiAKICAgICBtX2luQWN0aXZlRG9jdW1lbnQgPSB0
cnVlOwogCi0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmIChwYWdl
Q29uc2VudFJlcXVpcmVkRm9yUmVzdW1lKCkgJiYgcGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRp
YSgpKQorICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVz
dW1pbmcoKnRoaXMpKQogICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
cih0aGlzKTsKICAgICBlbHNlCiAgICAgICAgIHNldFBhdXNlZEludGVybmFsKGZhbHNlKTsKIAot
ICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVN
ZWRpYVJlc3RyaWN0aW9uKTsKKyAgICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0
cmljdGlvbihFbGVtZW50TWVkaWFTZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1l
ZGlhKTsKIAogICAgIGlmIChtX2Vycm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBNZWRpYUVycm9y
OjpNRURJQV9FUlJfQUJPUlRFRCkgewogICAgICAgICAvLyBSZXN0YXJ0IHRoZSBsb2FkIGlmIGl0
IHdhcyBhYm9ydGVkIGluIHRoZSBtaWRkbGUgYnkgbW92aW5nIHRoZSBkb2N1bWVudCB0byB0aGUg
cGFnZSBjYWNoZS4KQEAgLTQ3NDUsNyArNDc0Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
d2Via2l0U2hvd1BsYXliYWMKICAgICBpZiAoIW1fcGxheWVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZFRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkg
JiYgIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgIGlmICgh
bV9tZWRpYVNlc3Npb24tPnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZCgqdGhp
cykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCktPm1l
ZGlhUGxheWJhY2tBbGxvd3NBaXJQbGF5KCkpCkBAIC01NTEzLDcgKzU1MTUsNyBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNGdWxsCiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW5QZXJtaXR0ZWQoKSBjb25zdAogewotICAgIHJldHVy
biAhdXNlckdlc3R1cmVSZXF1aXJlZEZvckZ1bGxzY3JlZW4oKSB8fCBTY3JpcHRDb250cm9sbGVy
Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmZ1
bGxzY3JlZW5QZXJtaXR0ZWQoKnRoaXMpOwogfQogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1l
ZGlhUGxheWVySXNWaWRlbygpIGNvbnN0CkBAIC01NTk3LDExICs1NTk5LDExIEBAIGJvb2wgSFRN
TE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJTaG91bGQKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpyZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUoKQogewot
ICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVVzZXJHZXN0dXJlRm9yTG9hZFJl
c3RyaWN0aW9uKTsKLSAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFJlcXVpcmVVc2VyR2Vz
dHVyZUZvclJhdGVDaGFuZ2VSZXN0cmljdGlvbik7Ci0gICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmlj
dGlvbihSZXF1aXJlVXNlckdlc3R1cmVGb3JGdWxsc2NyZWVuUmVzdHJpY3Rpb24pOworICAgIG1f
bWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRNZWRpYVNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckxvYWQpOworICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKEVsZW1lbnRNZWRpYVNlc3Npb246OlJlcXVpcmVVc2VyR2Vz
dHVyZUZvclJhdGVDaGFuZ2UpOworICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJl
c3RyaWN0aW9uKEVsZW1lbnRNZWRpYVNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckZ1bGxz
Y3JlZW4pOwogI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKLSAgICByZW1vdmVCZWhhdmlvclJlc3Ry
aWN0aW9uKFJlcXVpcmVVc2VyR2VzdHVyZVRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyUmVzdHJp
Y3Rpb24pOworICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEVs
ZW1lbnRNZWRpYVNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvU2hvd1BsYXliYWNrVGFyZ2V0
UGlja2VyKTsKICNlbmRpZgogfQogCkBAIC01NzU0LDYgKzU3NTYsMTIgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjplbmRJbnRlcnJ1cHRpb24oTQogICAgICAgICBwbGF5KCk7CiB9CiAKK3ZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VQbGF5YmFjaygpCit7CisgICAgaWYgKCFwYXVzZWQoKSkK
KyAgICAgICAgcGF1c2UoKTsKK30KKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxNjE2MjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEx
IEBACiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudE1lZGlhU2Vzc2lvbi5oIgog
I2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sbGVySW50ZXJmYWNlLmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVNlc3Npb24uaCIKIAogI2lmIEVOQUJM
RShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgpAQCAtNDQyLDMyICs0NDIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzTWVkaWFFbGVtZW50KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgLy8gUmVzdHJpY3Rpb25zIHRvIGNoYW5nZSBkZWZhdWx0IGJlaGF2aW9ycy4KLSAgICBlbnVt
IEJlaGF2aW9yUmVzdHJpY3Rpb25GbGFncyB7Ci0gICAgICAgIE5vUmVzdHJpY3Rpb25zID0gMCwK
LSAgICAgICAgUmVxdWlyZVVzZXJHZXN0dXJlRm9yTG9hZFJlc3RyaWN0aW9uID0gMSA8PCAwLAot
ICAgICAgICBSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlUmVzdHJpY3Rpb24gPSAxIDw8
IDEsCi0gICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZUZvckZ1bGxzY3JlZW5SZXN0cmljdGlvbiA9
IDEgPDwgMiwKLSAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWFSZXN0cmljdGlv
biA9IDEgPDwgMywKLSAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYVJlc3Ry
aWN0aW9uID0gMSA8PCA0LAotI2lmIEVOQUJMRShJT1NfQUlSUExBWSkKLSAgICAgICAgUmVxdWly
ZVVzZXJHZXN0dXJlVG9TaG93UGxheWJhY2tUYXJnZXRQaWNrZXIgPSAxIDw8IDUsCi0jZW5kaWYK
LSAgICB9OwotICAgIHR5cGVkZWYgdW5zaWduZWQgQmVoYXZpb3JSZXN0cmljdGlvbnM7Ci0gICAg
Ci0gICAgYm9vbCB1c2VyR2VzdHVyZVJlcXVpcmVkRm9yTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzdHJpY3Rpb25zICYgUmVxdWlyZVVzZXJHZXN0dXJlRm9yTG9hZFJlc3RyaWN0aW9uOyB9Ci0g
ICAgYm9vbCB1c2VyR2VzdHVyZVJlcXVpcmVkRm9yUmF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVVzZXJHZXN0dXJlRm9yUmF0ZUNoYW5nZVJlc3RyaWN0
aW9uOyB9Ci0gICAgYm9vbCB1c2VyR2VzdHVyZVJlcXVpcmVkRm9yRnVsbHNjcmVlbigpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVVzZXJHZXN0dXJlRm9yRnVsbHNjcmVl
blJlc3RyaWN0aW9uOyB9Ci0gICAgYm9vbCBwYWdlQ29uc2VudFJlcXVpcmVkRm9yTG9hZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVk
aWFSZXN0cmljdGlvbjsgfQotICAgIGJvb2wgcGFnZUNvbnNlbnRSZXF1aXJlZEZvclJlc3VtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1
bWVNZWRpYVJlc3RyaWN0aW9uOyB9Ci0jaWYgRU5BQkxFKElPU19BSVJQTEFZKQotICAgIGJvb2wg
dXNlckdlc3R1cmVSZXF1aXJlZFRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXN0cmljdGlvbnMgJiBSZXF1aXJlVXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1Rh
cmdldFBpY2tlcjsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0
aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zIHw9
IHJlc3RyaWN0aW9uOyB9Ci0gICAgdm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2
aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVzdHJpY3Rpb25zICY9IH5yZXN0cmlj
dGlvbjsgfQotCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGJvb2wgaWdub3JlVHJhY2tE
aXNwbGF5VXBkYXRlUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZVRyYWNrRGlzcGxh
eVVwZGF0ZSA+IDAgfHwgIW1fdGV4dFRyYWNrcyB8fCAhbV9jdWVUcmVlLnNpemUoKTsgfQogICAg
IHZvaWQgYmVnaW5JZ25vcmluZ1RyYWNrRGlzcGxheVVwZGF0ZVJlcXVlc3RzKCk7CkBAIC00NzYs
NyArNDUwLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBSZW5kZXJQdHI8UmVuZGVyRWxl
bWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFBhc3NSZWY8UmVuZGVyU3R5bGU+KSBPVkVSUklE
RTsKIAotICAgIE1lZGlhU2Vzc2lvbiYgbWVkaWFTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gKm1f
bWVkaWFTZXNzaW9uOyB9CisgICAgRWxlbWVudE1lZGlhU2Vzc2lvbiYgbWVkaWFTZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gKm1fbWVkaWFTZXNzaW9uOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBj
cmVhdGVNZWRpYVBsYXllcigpOwpAQCAtNjk3LDYgKzY3MSw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5JbnRlcnJ1cHRpb24oKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgZW5kSW50ZXJydXB0aW9uKE1lZGlhU2Vzc2lvbjo6RW5kSW50ZXJydXB0aW9uRmxhZ3MpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZVBsYXliYWNrKCkgT1ZFUlJJREU7CiAKICAg
ICBUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiBtX2xvYWRUaW1lcjsKICAgICBUaW1lcjxIVE1MTWVk
aWFFbGVtZW50PiBtX3Byb2dyZXNzRXZlbnRUaW1lcjsKQEAgLTczOCw4ICs3MTMsNiBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxXaWRnZXQ+IG1fcHJveHlXaWRnZXQ7CiAjZW5kaWYKIAotICAgIEJl
aGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zOwotICAgIAogICAgIE1lZGlhUGxheWVy
OjpQcmVsb2FkIG1fcHJlbG9hZDsKIAogICAgIERpc3BsYXlNb2RlIG1fZGlzcGxheU1vZGU7CkBA
IC04NTIsNyArODI1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2tN
ZW51SW50ZXJmYWNlPiBtX3BsYXRmb3JtTWVudTsKICNlbmRpZgogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPE1lZGlhU2Vzc2lvbj4gbV9tZWRpYVNlc3Npb247CisgICAgc3RkOjp1bmlxdWVfcHRyPEVs
ZW1lbnRNZWRpYVNlc3Npb24+IG1fbWVkaWFTZXNzaW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
YWdlQWN0aXZpdHlBc3NlcnRpb25Ub2tlbj4gbV9hY3Rpdml0eVRva2VuOwogICAgIHNpemVfdCBt
X3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBA
QCB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OndlYmtpdEVudGVyRnVsbHNjCiAKICAgICAvLyBHZW5l
cmF0ZSBhbiBleGNlcHRpb24gaWYgdGhpcyBpc24ndCBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSB1
c2VyIGdlc3R1cmUsIG9yIGlmIHRoZSAKICAgICAvLyBlbGVtZW50IGRvZXMgbm90IHN1cHBvcnQg
ZnVsbHNjcmVlbi4KLSAgICBpZiAoKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JGdWxsc2NyZWVuKCkg
JiYgIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSB8fCAhc3VwcG9y
dHNGdWxsc2NyZWVuKCkpIHsKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmZ1bGxzY3JlZW5QZXJt
aXR0ZWQoKnRoaXMpIHx8ICFzdXBwb3J0c0Z1bGxzY3JlZW4oKSkgewogICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uY3BwCShyZXZpc2lvbiAxNjE2
MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVNlc3Npb25NYW5hZ2Vy
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSwxNCArNTMsMjIgQEAgTWVkaWFTZXNzaW9uOjp+
TWVkaWFTZXNzaW9uKCkKIAogdm9pZCBNZWRpYVNlc3Npb246OmJlZ2luSW50ZXJydXB0aW9uKCkK
IHsKKyAgICBMT0coTWVkaWEsICJNZWRpYVNlc3Npb246OmJlZ2luSW50ZXJydXB0aW9uIik7CiAg
ICAgbV9zdGF0ZSA9IEludGVycnVwdGVkOwogICAgIG1fY2xpZW50LmJlZ2luSW50ZXJydXB0aW9u
KCk7CiB9CiAKIHZvaWQgTWVkaWFTZXNzaW9uOjplbmRJbnRlcnJ1cHRpb24oRW5kSW50ZXJydXB0
aW9uRmxhZ3MgZmxhZ3MpCiB7CisgICAgTE9HKE1lZGlhLCAiTWVkaWFTZXNzaW9uOjplbmRJbnRl
cnJ1cHRpb24iKTsKICAgICBtX3N0YXRlID0gUnVubmluZzsKICAgICBtX2NsaWVudC5lbmRJbnRl
cnJ1cHRpb24oZmxhZ3MpOwogfQogCit2b2lkIE1lZGlhU2Vzc2lvbjo6cGF1c2VTZXNzaW9uKCkK
K3sKKyAgICBMT0coTWVkaWEsICJNZWRpYVNlc3Npb246OnBhdXNlU2Vzc2lvbiIpOworICAgIG1f
Y2xpZW50LnBhdXNlUGxheWJhY2soKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxNCArMzEsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFTZXNz
aW9uQ2xpZW50OwotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIAogY2xhc3MgTWVkaWFTZXNzaW9u
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE1lZGlhU2Vzc2lvbj4gY3Jl
YXRlKE1lZGlhU2Vzc2lvbkNsaWVudCYpOwogCiAgICAgTWVkaWFTZXNzaW9uKE1lZGlhU2Vzc2lv
bkNsaWVudCYpOwotICAgIH5NZWRpYVNlc3Npb24oKTsKKyAgICB2aXJ0dWFsIH5NZWRpYVNlc3Np
b24oKTsKIAogICAgIGVudW0gTWVkaWFUeXBlIHsKICAgICAgICAgTm9uZSwKQEAgLTYzLDYgKzYy
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luSW50ZXJydXB0aW9uKCk7CiAgICAgdm9pZCBl
bmRJbnRlcnJ1cHRpb24oRW5kSW50ZXJydXB0aW9uRmxhZ3MpOwogCisgICAgdmlydHVhbCB2b2lk
IHBhdXNlU2Vzc2lvbigpOworCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFTZXNzaW9uQ2xpZW50JiBj
bGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCiBwcml2YXRlOgogICAgIE1lZGlh
U2Vzc2lvbkNsaWVudCYgbV9jbGllbnQ7CiAgICAgTWVkaWFUeXBlIG1fdHlwZTsKQEAgLTc4LDcg
KzgyLDkgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkludGVycnVwdGlv
bigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBlbmRJbnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpF
bmRJbnRlcnJ1cHRpb25GbGFncykgeyB9Ci0gICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VQ
bGF5YmFjaygpID0gMDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk1lZGlhU2Vzc2lvbkNs
aWVudCgpIHsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlh
U2Vzc2lvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjE2MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTUgKzMwLDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
ICFQTEFURk9STShJT1MpCiBNZWRpYVNlc3Npb25NYW5hZ2VyJiBNZWRpYVNlc3Npb25NYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE1lZGlhU2Vzc2lv
bk1hbmFnZXIsIG1hbmFnZXIsICgpKTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KKyNlbmRpZgog
CiBNZWRpYVNlc3Npb25NYW5hZ2VyOjpNZWRpYVNlc3Npb25NYW5hZ2VyKCkKICAgICA6IG1faW50
ZXJydXB0aW9ucygwKQogeworICAgIG1fcmVzdHJpY3Rpb25zW01lZGlhU2Vzc2lvbjo6VmlkZW9d
ID0gTm9SZXN0cmljdGlvbnM7CisgICAgbV9yZXN0cmljdGlvbnNbTWVkaWFTZXNzaW9uOjpBdWRp
b10gPSBOb1Jlc3RyaWN0aW9uczsKKyAgICBtX3Jlc3RyaWN0aW9uc1tNZWRpYVNlc3Npb246Oldl
YkF1ZGlvXSA9IE5vUmVzdHJpY3Rpb25zOwogfQogCiBib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6
OmhhcyhNZWRpYVNlc3Npb246Ok1lZGlhVHlwZSB0eXBlKSBjb25zdApAQCAtMTAzLDYgKzEwOCw0
MCBAQCB2b2lkIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZVNlc3Npb24oCiAgICAgdXBkYXRl
U2Vzc2lvblN0YXRlKCk7CiB9CiAKK3ZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6YWRkUmVzdHJp
Y3Rpb24oTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgdHlwZSwgU2Vzc2lvblJlc3RyaWN0aW9ucyBy
ZXN0cmljdGlvbikKK3sKKyAgICBBU1NFUlQodHlwZSA+IE1lZGlhU2Vzc2lvbjo6Tm9uZSAmJiB0
eXBlIDw9IE1lZGlhU2Vzc2lvbjo6V2ViQXVkaW8pOworICAgIG1fcmVzdHJpY3Rpb25zW3R5cGVd
ID0gbV9yZXN0cmljdGlvbnNbdHlwZV0gfCByZXN0cmljdGlvbjsKK30KKwordm9pZCBNZWRpYVNl
c3Npb25NYW5hZ2VyOjpyZW1vdmVSZXN0cmljdGlvbihNZWRpYVNlc3Npb246Ok1lZGlhVHlwZSB0
eXBlLCBTZXNzaW9uUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKQoreworICAgIEFTU0VSVCh0eXBl
ID4gTWVkaWFTZXNzaW9uOjpOb25lICYmIHR5cGUgPD0gTWVkaWFTZXNzaW9uOjpXZWJBdWRpbyk7
CisgICAgbV9yZXN0cmljdGlvbnNbdHlwZV0gPSBtX3Jlc3RyaWN0aW9uc1t0eXBlXSAmIH5yZXN0
cmljdGlvbjsKK30KKworTWVkaWFTZXNzaW9uTWFuYWdlcjo6U2Vzc2lvblJlc3RyaWN0aW9ucyBN
ZWRpYVNlc3Npb25NYW5hZ2VyOjpyZXN0cmljdGlvbnMoTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUg
c2Vzc2lvblR5cGUpCit7CisgICAgcmV0dXJuIG1fcmVzdHJpY3Rpb25zW3Nlc3Npb25UeXBlXTsK
K30KKwordm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXNzaW9uV2lsbEJlZ2luUGxheWJhY2so
TWVkaWFTZXNzaW9uJiBzZXNzaW9uKQoreworICAgIE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIHNl
c3Npb25UeXBlID0gc2Vzc2lvbi5tZWRpYVR5cGUoKTsKKyAgICBTZXNzaW9uUmVzdHJpY3Rpb25z
IHJlc3RyaWN0aW9ucyA9IG1fcmVzdHJpY3Rpb25zW3Nlc3Npb25UeXBlXTsKKyAgICBpZiAocmVz
dHJpY3Rpb25zID09IE5vUmVzdHJpY3Rpb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KGF1dG8qIG9uZVNlc3Npb24gOiBtX3Nlc3Npb25zKSB7CisgICAgICAgIGlmIChvbmVTZXNzaW9u
ID09ICZzZXNzaW9uKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvbmVTZXNz
aW9uLT5tZWRpYVR5cGUoKSAhPSBzZXNzaW9uVHlwZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAocmVzdHJpY3Rpb25zICYgQ29uY3VycmVudFBsYXliYWNrTm90UGVybWl0dGVk
KQorICAgICAgICAgICAgb25lU2Vzc2lvbi0+cGF1c2VTZXNzaW9uKCk7CisgICAgfQorfQorCiAj
aWYgIVBMQVRGT1JNKE1BQykKIHZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6dXBkYXRlU2Vzc2lv
blN0YXRlKCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vz
c2lvbk1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9NZWRpYVNlc3Npb25NYW5hZ2VyLmgJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiTWVkaWFTZXNzaW9uLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw2ICs0NiwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBi
ZWdpbkludGVycnVwdGlvbigpOwogICAgIHZvaWQgZW5kSW50ZXJydXB0aW9uKE1lZGlhU2Vzc2lv
bjo6RW5kSW50ZXJydXB0aW9uRmxhZ3MpOwogCisgICAgZW51bSBTZXNzaW9uUmVzdHJpY3Rpb25G
bGFncyB7CisgICAgICAgIE5vUmVzdHJpY3Rpb25zID0gMCwKKyAgICAgICAgQ29uY3VycmVudFBs
YXliYWNrTm90UGVybWl0dGVkID0gMSA8PCAwLAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25l
ZCBTZXNzaW9uUmVzdHJpY3Rpb25zOworICAgIAorICAgIHZvaWQgYWRkUmVzdHJpY3Rpb24oTWVk
aWFTZXNzaW9uOjpNZWRpYVR5cGUsIFNlc3Npb25SZXN0cmljdGlvbnMpOworICAgIHZvaWQgcmVt
b3ZlUmVzdHJpY3Rpb24oTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUsIFNlc3Npb25SZXN0cmljdGlv
bnMpOworICAgIFNlc3Npb25SZXN0cmljdGlvbnMgcmVzdHJpY3Rpb25zKE1lZGlhU2Vzc2lvbjo6
TWVkaWFUeXBlKTsKKworICAgIHZvaWQgc2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKE1lZGlhU2Vz
c2lvbiYpOworCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIE1lZGlhU2Vzc2lvbjsKICAg
ICB2b2lkIGFkZFNlc3Npb24oTWVkaWFTZXNzaW9uJik7CkBAIC01NSw2ICs2OCw4IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHVwZGF0ZVNlc3Npb25TdGF0ZSgpOwogCisgICAgc3RkOjptYXA8TWVk
aWFTZXNzaW9uOjpNZWRpYVR5cGUsIFNlc3Npb25SZXN0cmljdGlvbnM+IG1fcmVzdHJpY3Rpb25z
OworCiAgICAgVmVjdG9yPE1lZGlhU2Vzc2lvbio+IG1fc2Vzc2lvbnM7CiAgICAgaW50IG1faW50
ZXJydXB0aW9uczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9EZXN0aW5hdGlvbk1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgJKHJldmlzaW9uIDE2MTYyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzdGFydCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIGlzUGxheWluZygpIE9WRVJSSURFIHsgcmV0dXJuIG1faXNQbGF5aW5n
OyB9CisgICAgdmlydHVhbCB2b2lkIHBhdXNlUGxheWJhY2soKSBPVkVSUklERSB7IHN0b3AoKTsg
fQogCiAgICAgdmlydHVhbCBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9zYW1wbGVSYXRlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4Nyw0ICsyMjg3LDI5IEBAIHZvaWQgSW50ZXJuYWxz
OjplbmRNZWRpYVNlc3Npb25JbnRlcnJ1cHQKICAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFy
ZWRNYW5hZ2VyKCkuZW5kSW50ZXJydXB0aW9uKGZsYWdzKTsKIH0KIAordm9pZCBJbnRlcm5hbHM6
OnNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhjb25zdCBTdHJpbmcmIG1lZGlhVHlwZVN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnNTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSA9IE1lZGlhU2Vzc2lvbjo6
Tm9uZTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWVkaWFUeXBlU3RyaW5nLCAiVmlkZW8i
KSkKKyAgICAgICAgbWVkaWFUeXBlID0gTWVkaWFTZXNzaW9uOjpWaWRlbzsKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShtZWRpYVR5cGVTdHJpbmcsICJBdWRpbyIpKQorICAgICAgICBt
ZWRpYVR5cGUgPSBNZWRpYVNlc3Npb246OkF1ZGlvOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG1lZGlhVHlwZVN0cmluZywgIldlYkF1ZGlvIikpCisgICAgICAgIG1lZGlhVHlwZSA9
IE1lZGlhU2Vzc2lvbjo6V2ViQXVkaW87CisgICAgZWxzZSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWVkaWFTZXNzaW9u
TWFuYWdlcjo6U2Vzc2lvblJlc3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBNZWRpYVNlc3Npb25N
YW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVzdHJpY3Rpb25zKG1lZGlhVHlwZSk7CisgICAgTWVk
aWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZVJlc3RyaWN0aW9uKG1lZGlh
VHlwZSwgcmVzdHJpY3Rpb25zKTsKKworICAgIHJlc3RyaWN0aW9ucyA9IE1lZGlhU2Vzc2lvbk1h
bmFnZXI6Ok5vUmVzdHJpY3Rpb25zOworICAgIAorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShy
ZXN0cmljdGlvbnNTdHJpbmcsICJDb25jdXJyZW50UGxheWJhY2tOb3RQZXJtaXR0ZWQiKSkKKyAg
ICAgICAgcmVzdHJpY3Rpb25zID0gTWVkaWFTZXNzaW9uTWFuYWdlcjo6Q29uY3VycmVudFBsYXli
YWNrTm90UGVybWl0dGVkOworICAgIAorICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1h
bmFnZXIoKS5hZGRSZXN0cmljdGlvbihtZWRpYVR5cGUsIHJlc3RyaWN0aW9ucyk7Cit9CisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTYxNjIwKQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM0
LDYgKzMzNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYmVnaW5NZWRpYVNlc3Npb25JbnRlcnJ1
cHRpb24oKTsKICAgICB2b2lkIGVuZE1lZGlhU2Vzc2lvbkludGVycnVwdGlvbihjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhjb25zdCBTdHJpbmcm
IG1lZGlhVHlwZSwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnRlcm5hbHMoRG9jdW1lbnQqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDE2MTYyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDQg
KzI4MSw1IEBACiAKICAgICB2b2lkIGJlZ2luTWVkaWFTZXNzaW9uSW50ZXJydXB0aW9uKCk7CiAg
ICAgdm9pZCBlbmRNZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oRE9NU3RyaW5nIGZsYWdzKTsKKyAg
ICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhET01T
dHJpbmcgbWVkaWFUeXBlLCBET01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKIH07CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNjE2MjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29u
QGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBNZWRpYVNlc3Npb25NYW5hZ2VyIHRvIHJlc3Ry
aWN0IG1lZGlhIHBsYXliYWNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjY3ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIG1lZGlhL3ZpZGVvLWNvbmN1cnJlbnQtcGxheWJhY2stZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXliYWNrLmh0bWw6
IEFkZGVkLgorCiAyMDE0LTAxLTA5ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgdGV4dC1kZWNvcmF0aW9uLXNraXA6IGluayBkb2VzIG5vdCB3b3Jr
IHdpdGggbGluZSB3cmFwcwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tY29uY3VycmVu
dC1wbGF5YmFjay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
dmlkZW8tY29uY3VycmVudC1wbGF5YmFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9tZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXliYWNrLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACisgIAorVGVzdCBwbGF5KCkgd2hlbiBjb25j
dXJyZW50IHBsYXliYWNrIG5vdCBhbGxvd2VkLgorCitSVU4oaW50ZXJuYWxzLnNldE1lZGlhU2Vz
c2lvblJlc3RyaWN0aW9ucygndmlkZW8nLCAnQ29uY3VycmVudFBsYXliYWNrTm90UGVybWl0dGVk
JykpCisKK0VWRU5UKGNhbnBsYXl0aHJvdWdoKQorRVZFTlQoY2FucGxheXRocm91Z2gpCisKKyoq
IFBsYXkgZmlyc3QgdmlkZW8uLi4KK1JVTih2aWRlb3NbMF0ucGxheSgpKQorRVZFTlQocGxheWlu
ZykKKworKiogU3RhcnRpbmcgdGhlIHNlY29uZCB2aWRlbywgdGhlIGZpcnN0IG9uZSBzaG91bGQg
cGF1c2UuCitSVU4odmlkZW9zWzFdLnBsYXkoKSkKK0VWRU5UKHBsYXlpbmcpCisKK0VYUEVDVEVE
ICh2aWRlb3NbMF0ucGF1c2VkID09ICd0cnVlJykgT0sKK0VYUEVDVEVEICh2aWRlb3NbMV0ucGF1
c2VkID09ICdmYWxzZScpIE9LCisKK0VORCBPRiBURVNUCisKSW5kZXg6IExheW91dFRlc3RzL21l
ZGlhL3ZpZGVvLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9tZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXliYWNrLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXliYWNrLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxz
Y3JpcHQgc3JjPW1lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPXZp
ZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICB2YXIg
cGxheUNvdW50ID0gMDsKKyAgICAgICAgICAgIHZhciBwbGF5VGhyb3VnaENvdW50ID0gMDsKKyAg
ICAgICAgICAgIHZhciB2aWRlb3MgPSBbXTsKKworICAgICAgICAgICAgZnVuY3Rpb24gbG9nRXZl
bnQoZXZ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiRVZF
TlQoIiArIGV2dC50eXBlICsgIikiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVu
Y3Rpb24gcGxheWluZyhldnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9nRXZl
bnQoZXZ0KTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworCisgICAgICAgICAg
ICAgICAgc3dpdGNoICgrK3BsYXlDb3VudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIioqIFN0YXJ0
aW5nIHRoZSBzZWNvbmQgdmlkZW8sIHRoZSBmaXJzdCBvbmUgc2hvdWxkIHBhdXNlLiIpOworICAg
ICAgICAgICAgICAgICAgICBydW4oInZpZGVvc1sxXS5wbGF5KCkiKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0VGltZW91dChlbmRUZXN0LCAxMDApOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgidmlkZW9zWzBdLnBhdXNlZCIsIHRydWUpOworICAgICAgICAgICAgICAgICAgICB0ZXN0
RXhwZWN0ZWQoInZpZGVvc1sxXS5wYXVzZWQiLCBmYWxzZSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kVGVzdCgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNhbnBsYXl0aHJvdWdoKGV2dCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBsb2dFdmVudChldnQpOworCisgICAgICAgICAgICAgICAgaWYg
KCsrcGxheVRocm91Z2hDb3VudCA8IDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGJyPioqIFBsYXkgZmlyc3QgdmlkZW8uLi4i
KTsKKyAgICAgICAgICAgICAgICBydW4oInZpZGVvc1swXS5wbGF5KCkiKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnQoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICghd2luZG93LmludGVybmFscykgeworICAgICAgICAgICAgICAgICAgICBm
YWlsVGVzdCgnVGhpcyB0ZXN0IHJlcXVpcmVzIHdpbmRvdy5pbnRlcm5hbHMuJyk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB2aWRlb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndmlkZW8nKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvcy5sZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICB2aWRlbyA9IHZpZGVvc1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
dmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigiY2FucGxheXRocm91Z2giLCBjYW5wbGF5dGhyb3VnaCk7
CisgICAgICAgICAgICAgICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBw
bGF5aW5nKTsKKyAgICAgICAgICAgICAgICAgICAgdmlkZW8uc3JjID0gZmluZE1lZGlhRmlsZSgi
dmlkZW8iLCAiY29udGVudC90ZXN0Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJ1bigiaW50ZXJuYWxzLnNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucygndmlkZW8nLCAn
Q29uY3VycmVudFBsYXliYWNrTm90UGVybWl0dGVkJykiKTsKKyAgICAgICAgICAgICAgICBjb25z
b2xlV3JpdGUoIiIpOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hl
YWQ+CisKKyAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0KCkiPgorICAgICAgICA8dmlkZW8gY29udHJv
bHMgaWQ9Im9uZSI+PC92aWRlbz4KKyAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGlkPSJ0d28iPjwv
dmlkZW8+CisgICAgICAgIDxwPlRlc3QgcGxheSgpIHdoZW4gY29uY3VycmVudCBwbGF5YmFjayBu
b3QgYWxsb3dlZC48L3A+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>