<?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>113422</bug_id>
          
          <creation_ts>2013-03-27 10:40:34 -0700</creation_ts>
          <short_desc>Mem mapped resource data improvements</short_desc>
          <delta_ts>2013-03-27 13:36:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin+threading</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864668</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 10:40:34 -0700</bug_when>
    <thetext>Mem mapped resource data improvements.

These include:
-Using a notification API for a resource becoming file backed instead of using timers
-Using a much more explicit API to determine if the data for an object is mem mapped.

In radar as &lt;rdar://problem/13196481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864691</commentid>
    <comment_count>1</comment_count>
      <attachid>195353</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 10:56:50 -0700</bug_when>
    <thetext>Created attachment 195353
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864700</commentid>
    <comment_count>2</comment_count>
      <attachid>195353</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2013-03-27 11:00:47 -0700</bug_when>
    <thetext>Comment on attachment 195353
Patch v1

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

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:42
&gt; +    static void (*softResponseSetBecameFileBackedCallBackBlock)(CFCachedURLResponseRef, CFCachedURLResponseCallBackBlock, dispatch_queue_t) = (void (*)(CFCachedURLResponseRef, CFCachedURLResponseCallBackBlock, dispatch_queue_t)) dlsym(CFNetworkLibrary(), &quot;_CFCachedURLResponseSetBecameFileBackedCallBackBlock&quot;);

A typedef would make this a heck of a lot more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864705</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-27 11:03:40 -0700</bug_when>
    <thetext>Attachment 195353 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h:68:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
Total errors found: 1 in 6 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>864711</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 11:08:26 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Attachment 195353 [details] did not pass style-queue:
&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h:68:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
&gt; Total errors found: 1 in 6 files

Fixed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864724</commentid>
    <comment_count>5</comment_count>
      <attachid>195353</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-27 11:27:15 -0700</bug_when>
    <thetext>Comment on attachment 195353
Patch v1

Attachment 195353 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17338203</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864728</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 11:29:44 -0700</bug_when>
    <thetext>Wow, a build failure due to the lack of newline.  Yikes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864729</commentid>
    <comment_count>7</comment_count>
      <attachid>195353</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-27 11:30:29 -0700</bug_when>
    <thetext>Comment on attachment 195353
Patch v1

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

I think that I&apos;d like to see a version of this patch with threading cleaned up a bit more. I&apos;m not sure if I can fully understand it now.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:-211
&gt; -    ASSERT(!isMainThread());

Should the condition be just reverted instead of removing the check?

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h:30
&gt; +#include &quot;NetworkResourceLoader.h&quot;

Seems unneeded (and you already have a forward declaration in place).

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:36
&gt; +
&gt; +
&gt; +SOFT_LINK_FRAMEWORK(CFNetwork)

Seems like an abuse of the macro if you are only doing this to get a CFNetworkLibrary() function.

But then, you&apos;ll probably be deleting the dynamic loading code soon.

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:52
&gt; +static const double DiskCachingMonitorTimeout = 10;

I don;t think that starting constants with upper case is WebKit style.

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:56
&gt; +    static uint64_t currentID = 1;

Maybe ASSERT(isMainThread())?

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:64
&gt; +    DEFINE_STATIC_LOCAL(DiskCachingMonitorMap, map, ());

Maybe ASSERT(!diskCachingMonitorMapMutex().tryLock())?

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:81
&gt; +    OwnPtr&lt;DiskCachingMonitor&gt; request = adoptPtr(new DiskCachingMonitor(cachedResponse, loader));

We usually hide the constructor and expose a create function for this.

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:93
&gt; +    // Step 1: Set up this request&apos;s data members on the main thread.
&gt; +    dispatch_async(dispatch_get_main_queue(), ^{

If it&apos;s dispatch_async, then it&apos;s not step 1, it&apos;s step &quot;some time&quot;.

Also, I don&apos;t understand whether this constructor is only called on main thread anyway. Calling generateUniqueDiskCachingMonitorID() seems to require that, and all client code is main thread now.

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:98
&gt; +    // Step2: Set up the disk caching callback so this request can be destroyed upon successfull disk caching.

No space in &quot;Step2&quot;.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:83
&gt; +    DEFINE_STATIC_LOCAL(RetainPtr&lt;CFURLCacheRef&gt;, cache, (AdoptCF, CFURLCacheCopySharedURLCache()));
&gt; +    if (!cache)
&gt; +        return;

Don&apos;t we change the cache when enabling private browsing? I&apos;m also unsure how this will work with cache partitioning.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:99
&gt; +void NetworkResourceLoader::willCacheResponseAsync(WebCore::ResourceHandle*, NSCachedURLResponse* nsResponse)

Please no WebCore:: prefix. This also has a misplaced star.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864730</commentid>
    <comment_count>8</comment_count>
      <attachid>195365</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 11:30:46 -0700</bug_when>
    <thetext>Created attachment 195365
Patch v2 - Fix build failure by adding a newline (!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864741</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-27 11:44:05 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=195353&amp;action=review

r- because I think the dispatch_async initialization may be a bug. Please consider the other stuff, too.

&gt; Source/WebKit2/ChangeLog:17
&gt; +        It both listens for a callback on the cached response indicating it has been cached
&gt; +        or sets a timer so we don&apos;t keep objects alive waiting forever.

Logic: &quot;or&quot; should be &quot;and&quot;.

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h:41
&gt; +class DiskCachingMonitor : public CoreIPC::MessageSender&lt;DiskCachingMonitor&gt; {

We usually use nouns and not gerunds as class names. How about &quot;DiskCacheMonitor&quot;, since this object monitors the disk cache? It&apos;s awkward to say &quot;This cache monitors the disk caching&quot;.

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h:64
&gt; +void monitorCachedResponse(CFCachedURLResponseRef, NetworkResourceLoader*);

This function name is a bit vague because it doesn&apos;t say what we&apos;re monitoring for. How about &quot;monitorFileBackingStoreCreation&quot;?

&gt;&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:42
&gt;&gt; +    static void (*softResponseSetBecameFileBackedCallBackBlock)(CFCachedURLResponseRef, CFCachedURLResponseCallBackBlock, dispatch_queue_t) = (void (*)(CFCachedURLResponseRef, CFCachedURLResponseCallBackBlock, dispatch_queue_t)) dlsym(CFNetworkLibrary(), &quot;_CFCachedURLResponseSetBecameFileBackedCallBackBlock&quot;);
&gt; 
&gt; A typedef would make this a heck of a lot more readable.

+1

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:52
&gt; +// The maximum number of seconds we&apos;ll try to wait for a resource to be disk cached before we forget the request.
&gt; +static const double DiskCachingMonitorTimeout = 10;

This seems really low. Since the CFNetwork initial delay is 7s, this means that we&apos;ll ignore any resource that gets postponed. How about 60s?

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:96
&gt; +    dispatch_async(dispatch_get_main_queue(), ^{
&gt; +        m_connectionToWebProcess = loader-&gt;connectionToWebProcess();
&gt; +        m_resourceRequest = loader-&gt;request();
&gt; +    });

How do we know it&apos;s valid to set up our data members asynchronously? What happens if we get a callback before our data members are set up?

&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:106
&gt; +    // Step2: Set up the disk caching callback so this request can be destroyed upon successfull disk caching.
&gt; +    uint64_t identifier = m_requestID;
&gt; +    CFCachedURLResponseCallBackBlock block = ^(CFCachedURLResponseRef cachedResponse)
&gt; +    {
&gt; +        DiskCachingMonitor* rawRequest = 0;
&gt; +        {
&gt; +            MutexLocker locker(diskCachingMonitorMapMutex());
&gt; +            rawRequest = diskCachingMonitorMap().take(identifier);
&gt; +        }

Let&apos;s call the object &quot;monitor&quot; and not &quot;request&quot;, since request sounds like you&apos;re talking about the resource request.

You can eliminate the need for all that map, UUID, and timer complexity like so:

__block DiskCachingMonitor* rawMonitor = this;

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * DiskCachingMonitorTimeout), dispatch_get_main_queue(), ^( adoptPtr(rawMonitor); rawMonitor = 0; });

CFCachedURLResponseCallBackBlock block = ^(CFCachedURLResponseRef cachedResponse)
{
    if (!rawMonitor)
        return;
    ....
    OwnPtr&lt;DiskCachingMonitor&gt; monitor = adoptPtr(rawMonitor);
    rawMonitor = 0;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864752</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 11:52:40 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195353&amp;action=review
&gt; 
&gt; r- because I think the dispatch_async initialization may be a bug. Please consider the other stuff, too.

I disagree it&apos;s a bug, you&apos;ll have to convince me.  (Further discussion below)

&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h:41
&gt; &gt; +class DiskCachingMonitor : public CoreIPC::MessageSender&lt;DiskCachingMonitor&gt; {
&gt; 
&gt; We usually use nouns and not gerunds as class names. How about &quot;DiskCacheMonitor&quot;, since this object monitors the disk cache? It&apos;s awkward to say &quot;This cache monitors the disk caching&quot;.

Okay.

&gt; &gt;&gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:42
&gt; &gt;&gt; +    static void (*softResponseSetBecameFileBackedCallBackBlock)(CFCachedURLResponseRef, CFCachedURLResponseCallBackBlock, dispatch_queue_t) = (void (*)(CFCachedURLResponseRef, CFCachedURLResponseCallBackBlock, dispatch_queue_t)) dlsym(CFNetworkLibrary(), &quot;_CFCachedURLResponseSetBecameFileBackedCallBackBlock&quot;);
&gt; &gt; 
&gt; &gt; A typedef would make this a heck of a lot more readable.
&gt; 
&gt; +1

Okay.

&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:52
&gt; &gt; +// The maximum number of seconds we&apos;ll try to wait for a resource to be disk cached before we forget the request.
&gt; &gt; +static const double DiskCachingMonitorTimeout = 10;
&gt; 
&gt; This seems really low. Since the CFNetwork initial delay is 7s, this means that we&apos;ll ignore any resource that gets postponed. How about 60s?
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:96
&gt; &gt; +    dispatch_async(dispatch_get_main_queue(), ^{
&gt; &gt; +        m_connectionToWebProcess = loader-&gt;connectionToWebProcess();
&gt; &gt; +        m_resourceRequest = loader-&gt;request();
&gt; &gt; +    });
&gt; 
&gt; How do we know it&apos;s valid to set up our data members asynchronously? What happens if we get a callback before our data members are set up?

Since the dispatch_async to setup the members goes out before we even setup the callback, and since a &quot;dispatch queue&quot; is by definition a queue, are we not guaranteed this async dispatch is handled before any possible callback comes in?  Perhaps you&apos;re familiar with some exception to the &quot;queue&quot; part if dispatch_queue that I&apos;m not familiar with.

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:106
&gt; &gt; +    // Step2: Set up the disk caching callback so this request can be destroyed upon successfull disk caching.
&gt; &gt; +    uint64_t identifier = m_requestID;
&gt; &gt; +    CFCachedURLResponseCallBackBlock block = ^(CFCachedURLResponseRef cachedResponse)
&gt; &gt; +    {
&gt; &gt; +        DiskCachingMonitor* rawRequest = 0;
&gt; &gt; +        {
&gt; &gt; +            MutexLocker locker(diskCachingMonitorMapMutex());
&gt; &gt; +            rawRequest = diskCachingMonitorMap().take(identifier);
&gt; &gt; +        }
&gt; 
&gt; Let&apos;s call the object &quot;monitor&quot; and not &quot;request&quot;, since request sounds like you&apos;re talking about the resource request.

Originally the class was called &quot;DiskCachingRequest&quot;, and I missed this in my rename.  Will fix.

&gt; You can eliminate the need for all that map, UUID, and timer complexity like so:
&gt; 
&gt; __block DiskCachingMonitor* rawMonitor = this;
&gt; 
&gt; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * DiskCachingMonitorTimeout), dispatch_get_main_queue(), ^( adoptPtr(rawMonitor); rawMonitor = 0; });
&gt; 
&gt; CFCachedURLResponseCallBackBlock block = ^(CFCachedURLResponseRef cachedResponse)
&gt; {
&gt;     if (!rawMonitor)
&gt;         return;
&gt;     ....
&gt;     OwnPtr&lt;DiskCachingMonitor&gt; monitor = adoptPtr(rawMonitor);
&gt;     rawMonitor = 0;
&gt; }

That is clever.  Now You&apos;re Thinking With Closures ™</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864753</commentid>
    <comment_count>11</comment_count>
      <attachid>195365</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-27 11:52:55 -0700</bug_when>
    <thetext>Comment on attachment 195365
Patch v2 - Fix build failure by adding a newline (!)

Attachment 195365 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17314414</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864756</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-27 11:55:50 -0700</bug_when>
    <thetext>&gt; &gt; How do we know it&apos;s valid to set up our data members asynchronously? What happens if we get a callback before our data members are set up?

&gt; Since the dispatch_async to setup the members goes out before we even setup the callback, and since a &quot;dispatch queue&quot; is by definition a queue, are we not guaranteed this async dispatch is handled before any possible callback comes in?  Perhaps you&apos;re familiar with some exception to the &quot;queue&quot; part if dispatch_queue that I&apos;m not familiar with.

No, you&apos;re totally right. I missed the fact that all of these blocks are scheduled on the main queue.

Side note: This logic applies to the main queue because the main queue is a serial queue. It would not apply to a parallel queue, such as dispatch_get_global_queue(...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864771</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 12:26:37 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 195353 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195353&amp;action=review
&gt; 
&gt; I think that I&apos;d like to see a version of this patch with threading cleaned up a bit more. I&apos;m not sure if I can fully understand it now.

Much simpler with Geoff&apos;s block improvement idea.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:-211
&gt; &gt; -    ASSERT(!isMainThread());
&gt; 
&gt; Should the condition be just reverted instead of removing the check?

Fixed

&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.h:30
&gt; &gt; +#include &quot;NetworkResourceLoader.h&quot;
&gt; 
&gt; Seems unneeded (and you already have a forward declaration in place)

Yup.

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:36
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +SOFT_LINK_FRAMEWORK(CFNetwork)
&gt; 
&gt; Seems like an abuse of the macro if you are only doing this to get a CFNetworkLibrary() function.
&gt; 
&gt; But then, you&apos;ll probably be deleting the dynamic loading code soon.

It is abuse, and yes it&apos;ll be deleting soonish.

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:52
&gt; &gt; +static const double DiskCachingMonitorTimeout = 10;
&gt; 
&gt; I don;t think that starting constants with upper case is WebKit style.

It&apos;s not!  Style bot fail!

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:56
&gt; &gt; +    static uint64_t currentID = 1;
&gt; 
&gt; Maybe ASSERT(isMainThread())?
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:64
&gt; &gt; +    DEFINE_STATIC_LOCAL(DiskCachingMonitorMap, map, ());
&gt; 
&gt; Maybe ASSERT(!diskCachingMonitorMapMutex().tryLock())?

These are both now gone.

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:81
&gt; &gt; +    OwnPtr&lt;DiskCachingMonitor&gt; request = adoptPtr(new DiskCachingMonitor(cachedResponse, loader));
&gt; 
&gt; We usually hide the constructor and expose a create function for this.

Because of the somewhat atypical role and use of the DiskCacheMonitor object, I&apos;m not sure we have an applicable pattern to build on.

&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:93
&gt; &gt; +    // Step 1: Set up this request&apos;s data members on the main thread.
&gt; &gt; +    dispatch_async(dispatch_get_main_queue(), ^{
&gt; 
&gt; If it&apos;s dispatch_async, then it&apos;s not step 1, it&apos;s step &quot;some time&quot;.

It&apos;s &quot;some time,&quot; but in a series of asynchronous queued steps, it&apos;s still step 1.  The comment pattern will hold more true in the new version of the patch.

&gt; &gt; Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:98
&gt; &gt; +    // Step2: Set up the disk caching callback so this request can be destroyed upon successfull disk caching.
&gt; 
&gt; No space in &quot;Step2&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:83
&gt; &gt; +    DEFINE_STATIC_LOCAL(RetainPtr&lt;CFURLCacheRef&gt;, cache, (AdoptCF, CFURLCacheCopySharedURLCache()));
&gt; &gt; +    if (!cache)
&gt; &gt; +        return;
&gt; 
&gt; Don&apos;t we change the cache when enabling private browsing? I&apos;m also unsure how this will work with cache partitioning.

I can&apos;t find anyplace where we ever set a new shared cache, and that is the only context we ever have at this site.

Cache partitioning is done with a partition string as an argument to the shared cache object, which is we have to preserve the original resource request which contains this string.

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:99
&gt; &gt; +void NetworkResourceLoader::willCacheResponseAsync(WebCore::ResourceHandle*, NSCachedURLResponse* nsResponse)
&gt; 
&gt; Please no WebCore:: prefix. This also has a misplaced star.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864783</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-27 12:34:05 -0700</bug_when>
    <thetext>&gt; I can&apos;t find anyplace where we ever set a new shared cache, and that is the only context we ever have at this site.

It would be done indirectly, via switching to a new storage session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864792</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-27 12:56:38 -0700</bug_when>
    <thetext>/Volumes/Data/EWS/WebKit/Source/WebKit2/NetworkProcess/mac/DiskCachingMonitor.mm:115:32: error: no member named &apos;tryGetShareableHandleFromCFURLCachedResponse&apos; in &apos;WebKit::NetworkResourceLoader&apos;
        NetworkResourceLoader::tryGetShareableHandleFromCFURLCachedResponse(handle, cachedResponse);
        ~~~~~~~~~~~~~~~~~~~~~~~^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864806</commentid>
    <comment_count>16</comment_count>
      <attachid>195384</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 13:14:07 -0700</bug_when>
    <thetext>Created attachment 195384
Patch v3 - Much better, I think!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864814</commentid>
    <comment_count>17</comment_count>
      <attachid>195384</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-27 13:25:20 -0700</bug_when>
    <thetext>Comment on attachment 195384
Patch v3 - Much better, I think!

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

&gt; Source/WebKit2/NetworkProcess/mac/DiskCacheMonitor.h:30
&gt; +#include &quot;NetworkResourceLoader.h&quot;

Still here?

&gt; Source/WebKit2/NetworkProcess/mac/DiskCacheMonitor.h:47
&gt; +    NetworkConnectionToWebProcess* connectionToWebProcess() const { return m_connectionToWebProcess.get(); }

I don&apos;t see this used.

&gt; Source/WebKit2/NetworkProcess/mac/DiskCacheMonitor.h:59
&gt; +void monitorFileBackingStoreCreation(CFCachedURLResponseRef, NetworkResourceLoader*);

Why not make this a static function in the class, to avoid friending it?

&gt; Source/WebKit2/NetworkProcess/mac/DiskCacheMonitor.h:61
&gt; +} // namspace WebKit

namespace, if you insist on adding a comment.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:53
&gt; +@interface NSCachedURLResponse (NSCachedURLResponseInternals)

We now say Details, not Internals.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:81
&gt; +    RetainPtr&lt;CFURLCacheRef&gt; cache(AdoptCF, CFURLCacheCopySharedURLCache()); 

I think our preferred pattern is &quot;= adoptCF(...)&quot; these days.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:99
&gt; +void NetworkResourceLoader::willCacheResponseAsync(ResourceHandle*, NSCachedURLResponse *nsResponse)

I&apos;d ASSERT(handle == m_handle).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864817</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 13:30:10 -0700</bug_when>
    <thetext>I&apos;ll meet Geoff partway on the delay and bump it to 20s before landing (this patch had it at 0.2 still from some debugging - yikes!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864819</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 13:31:51 -0700</bug_when>
    <thetext>And addressed Alexey&apos;s new feedback, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864822</commentid>
    <comment_count>20</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-27 13:36:52 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/147006</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195353</attachid>
            <date>2013-03-27 10:56:50 -0700</date>
            <delta_ts>2013-03-27 11:30:46 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26688</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlYmYyMTZhLi5hODgxZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTMtMDMtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbSBtYXBwZWQgcmVzb3VyY2UgZGF0YSBpbXByb3ZlbWVudHMuCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMzE5NjQ4MT4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmUgdGltZXItYmFzZWQgYXBwcm9hY2ggc3VwcG9ydCBjb2RlOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydEluUHJvZ3Jlc3NMb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoK
KworICAgICAgICBBZGQgYW4gb2JqZWN0IHRvIGVuY2Fwc3VsYXRlIG1vbml0b3JpbmcgYSByZXNv
dXJjZSBnb2luZyBpbiB0byB0aGUgZGlzayBjYWNoZS4KKyAgICAgICAgSXQgYm90aCBsaXN0ZW5z
IGZvciBhIGNhbGxiYWNrIG9uIHRoZSBjYWNoZWQgcmVzcG9uc2UgaW5kaWNhdGluZyBpdCBoYXMg
YmVlbiBjYWNoZWQKKyAgICAgICAgb3Igc2V0cyBhIHRpbWVyIHNvIHdlIGRvbid0IGtlZXAgb2Jq
ZWN0cyBhbGl2ZSB3YWl0aW5nIGZvcmV2ZXIuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFj
L0Rpc2tDYWNoaW5nTW9uaXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hp
bmdNb25pdG9yOjpkZXN0aW5hdGlvbklEKToKKyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hpbmdN
b25pdG9yOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6RGlza0Nh
Y2hpbmdNb25pdG9yOjpyZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L21hYy9EaXNrQ2FjaGluZ01vbml0b3IubW06IEFkZGVkLgorICAgICAgICAoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVNldEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFja0Jsb2NrKToKKyAgICAgICAgKFdlYktp
dDo6Z2VuZXJhdGVVbmlxdWVEaXNrQ2FjaGluZ01vbml0b3JJRCk6CisgICAgICAgIChXZWJLaXQ6
OmRpc2tDYWNoaW5nTW9uaXRvck1hcCk6CisgICAgICAgIChXZWJLaXQ6OmRpc2tDYWNoaW5nTW9u
aXRvck1hcE11dGV4KToKKyAgICAgICAgKFdlYktpdDo6bW9uaXRvckNhY2hlZFJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hpbmdNb25pdG9yOjpEaXNrQ2FjaGluZ01vbml0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpEaXNrQ2FjaGluZ01vbml0b3I6OmNhbmNlbE1vbml0b3JUaW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hpbmdNb25pdG9yOjpjb25uZWN0aW9u
KToKKworICAgICAgICBSZWZhY3RvcmluZyBhbmQgbW9uaXRvciBjZXJ0YWluIGNhY2hlZCByZXNw
b25zZXM6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRl
ck1hYy5tbToKKyAgICAgICAgKENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRNZW1NYXBwZWREYXRhKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVI
YW5kbGVGcm9tQ0ZVUkxDYWNoZWRSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMp
OiBJZiB0aGUgcmVzb3VyY2UgaXMgb3ZlciB0aGUgbWluaW11bQorICAgICAgICAgIHNpemUgdGhl
biBzZXQgdXAgYSBkaXNrIGNhY2hpbmcgbW9uaXRvci4KKworICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0wMy0yNiAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBhIHByaW1hcnkgcGx1Z2luIGlzIHJlc3RhcnRl
ZCwgYWxzbyBzdGFydCBzaW1pbGFyIHBsdWdpbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGNhOGNhYzMu
LmMyOWFhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApAQCAtNTQsOSArNTQsNiBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycywgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCiAgICAgOiBTY2hlZHVsYWJsZUxvYWRl
cihsb2FkUGFyYW1ldGVycywgY29ubmVjdGlvbikKICAgICAsIG1fYnl0ZXNSZWNlaXZlZCgwKQot
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAotICAgICwgbV9kaXNr
Q2FjaGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmRpc2tDYWNoZVRpbWVyRmlyZWQpCi0jZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDkwCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KQEAgLTE3
NCwyMSArMTcxLDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NEaWRDbG9zZSgpCiAgICAgY2xlYW51cCgpOwogfQogCi0jaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlza0NhY2hlVGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBhZG9wdGVkUmVmID0gYWRvcHRSZWYodGhp
cyk7IC8vIEJhbGFuY2Ugb3V0IHRoZSByZWYoKSB3aGVuIHNldHRpbmcgdGhlIHRpbWVyLgotCi0g
ICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBoYW5kbGU7Ci0gICAgdHJ5R2V0U2hhcmVhYmxl
SGFuZGxlRm9yUmVzb3VyY2UoaGFuZGxlKTsKLSAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b246OkRpZENhY2hlUmVzb3VyY2UocmVxdWVzdCgpLCBoYW5kbGUpKTsKLX0KLSNlbmRpZiAvLyAj
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0KIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZW5kQWJvcnRpbmdPbkZhaWx1
cmUoY29uc3QgVSYgbWVzc2FnZSkKIHsKICAgICBib29sIHJlc3VsdCA9IHNlbmQobWVzc2FnZSk7
CkBAIC0yMDgsOCArMTkwLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNlbmRTeW5jQWJvcnRpbmdPbkZhaWx1cmUoY29uc3QKIHZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjphYm9ydEluUHJvZ3Jlc3NMb2FkKCkKIHsKICAgICBBU1NFUlQobV9o
YW5kbGUpOwotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotIAogICAgIG1faGFuZGxlLT5j
YW5jZWwoKTsKIAogICAgIHNjaGVkdWxlQ2xlYW51cE9uTWFpblRocmVhZCgpOwpAQCAtMjU0LDE2
ICsyMzQsNiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lKQogICAgIC8vIFN1Y2ggYm9va2tlZXBp
bmcgd2lsbCBuZWVkIHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxiYWNrIGlzIGhhcHBl
bmluZyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5z
aW9ucygpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hS
ZXNvdXJjZUxvYWQoZmluaXNoVGltZSkpOwotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDkwCi0gICAgLy8gSWYgdGhpcyByZXNvdXJjZSB3YXMgbGFyZ2UgZW5vdWdo
IHRoYXQgaXQgc2hvdWxkIGJlIGNhY2hlZCB0byBkaXNrIGFzIGEgc2VwYXJhdGUgZmlsZSwKLSAg
ICAvLyB0aGVuIHdlIHNob3VsZCB0cnkgdG8gcmUtZGVsaXZlciB0aGUgcmVzb3VyY2UgdG8gdGhl
IFdlYlByb2Nlc3Mgb25jZSBpdCAqaXMqIHNhdmVkIGFzIGEgc2VwYXJhdGUgZmlsZS4gICAgCi0g
ICAgaWYgKG1fYnl0ZXNSZWNlaXZlZCA+PSBmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBPbmNlIGEgbm90aWZpY2F0aW9uIEFQSSBleGlzdHMgdGhh
dCBvYmxpdmlhdGVzIHRoaXMgdGltZXIsIHVzZSB0aGF0IGluc3RlYWQuCi0gICAgICAgIHJlZigp
OyAvLyBCYWxhbmNlZCBieSBhbiBhZG9wdFJlZigpIGluIGRpc2tDYWNoZVRpbWVyRmlyZWQoKS4K
LSAgICAgICAgbV9kaXNrQ2FjaGVUaW1lci5zdGFydE9uZVNob3QoMTApOwotICAgIH0KLSNlbmRp
ZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICAKICAgICBz
Y2hlZHVsZUNsZWFudXBPbk1haW5UaHJlYWQoKTsKIH0KQEAgLTM3MywxMiArMzQzLDYgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoUmVzb3VyY2VIYW5k
bGUqLCBDRkFycmF5UmVmKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCi12b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7
Ci19Ci0KIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50KQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCmluZGV4IDg2NGJkM2QuLmU4MjM3MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zNSw2
ICszNSw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2Fj
aGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFJlc291cmNlQnVmZmVyOwogY2xhc3MgUmVzb3VyY2VIYW5kbGU7CkBAIC05
NSw2ICs5NywxMCBAQCBwdWJsaWM6CiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lk
IGRpZFJlY2VpdmVOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogCisjaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgc3RhdGljIHZvaWQgdHJ5R2V0U2hhcmVhYmxlSGFu
ZGxlRnJvbUNGVVJMQ2FjaGVkUmVzcG9uc2UoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYsIENG
Q2FjaGVkVVJMUmVzcG9uc2VSZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Jl
c291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKIApAQCAtMTEzLDggKzExOSw2IEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBzZW5kU3luY0Fib3J0aW5nT25GYWlsdXJl
KGNvbnN0IFUmIG1lc3NhZ2UsIGNvbnN0IHR5cGVuYW1lIFU6OlJlcGx5JiByZXBseSk7CiAgICAg
dm9pZCBhYm9ydEluUHJvZ3Jlc3NMb2FkKCk7CiAKLSAgICB2b2lkIHRyeUdldFNoYXJlYWJsZUhh
bmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmKTsKLQogICAgIFJlZlB0
cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKICAgICBSZWZQ
dHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOwogCkBAIC0xMjQsOCArMTI4LDcg
QEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2J5dGVzUmVjZWl2ZWQ7CiAKICNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLSAgICB2b2lkIGRpc2tDYWNoZVRpbWVy
RmlyZWQoKTsKLSAgICBXZWJDb3JlOjpSdW5Mb29wOjpUaW1lcjxOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI+IG1fZGlza0NhY2hlVGltZXI7CisgICAgdm9pZCB0cnlHZXRTaGFyZWFibGVIYW5kbGVGb3JS
ZXNvdXJjZShTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJik7CiAjZW5kaWYKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGluZ01vbml0
b3IuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGluZ01vbml0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzZhY2IxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL0Rpc2tDYWNoaW5n
TW9uaXRvci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpc2tDYWNo
aW5nTW9uaXRvcl9oCisjZGVmaW5lIERpc2tDYWNoaW5nTW9uaXRvcl9oCisKKyNpbmNsdWRlICJN
ZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxv
b3AuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWY7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKK2NsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKKwor
Y2xhc3MgRGlza0NhY2hpbmdNb25pdG9yIDogcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXI8
RGlza0NhY2hpbmdNb25pdG9yPiB7CitwdWJsaWM6CisgICAgLy8gVXNlZCBieSBNZXNzYWdlU2Vu
ZGVyLgorICAgIENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdDsKKyAgICB1
aW50NjRfdCBkZXN0aW5hdGlvbklEKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIAorICAgIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOyB9CisgICAgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSBjb25zdCB7IHJldHVy
biBtX3Jlc291cmNlUmVxdWVzdDsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2b2lkIG1vbml0
b3JDYWNoZWRSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmLCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXIqKTsKKworICAgIERpc2tDYWNoaW5nTW9uaXRvcihDRkNhY2hlZFVSTFJlc3BvbnNlUmVm
LCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKKworICAgIHZvaWQgY2FuY2VsTW9uaXRvclRpbWVy
RmlyZWQoKTsKKyAgICAKKyAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
IG1fY29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
bV9yZXNvdXJjZVJlcXVlc3Q7CisgICAgdWludDY0X3QgbV9yZXF1ZXN0SUQ7CisKKyAgICBXZWJD
b3JlOjpSdW5Mb29wOjpUaW1lcjxEaXNrQ2FjaGluZ01vbml0b3I+IG1fY2FuY2VsTW9uaXRvclRp
bWVyOworfTsKKwordm9pZCBtb25pdG9yQ2FjaGVkUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25z
ZVJlZiwgTmV0d29ya1Jlc291cmNlTG9hZGVyKik7CisKK30gLy8gbmFtc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBEaXNrQ2FjaGluZ01vbml0b3JfaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2Fj
aGluZ01vbml0b3IubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvRGlza0Nh
Y2hpbmdNb25pdG9yLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDNi
MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMv
RGlza0NhY2hpbmdNb25pdG9yLm1tCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEaXNrQ2FjaGluZ01vbml0b3IuaCIKKworI2ltcG9y
dCAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCisjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2ltcG9ydCA8V2ViQ29yZS9T
b2Z0TGlua2luZy5oPgorCisKK1NPRlRfTElOS19GUkFNRVdPUksoQ0ZOZXR3b3JrKQorCit0eXBl
ZGVmIHZvaWQgKF5DRkNhY2hlZFVSTFJlc3BvbnNlQ2FsbEJhY2tCbG9jaykoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZik7CisKK3N0YXRpYyB2b2lkIENGQ2FjaGVkVVJMUmVzcG9uc2VTZXRCZWNhbWVG
aWxlQmFja2VkQ2FsbEJhY2tCbG9jayhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBD
RkNhY2hlZFVSTFJlc3BvbnNlQ2FsbEJhY2tCbG9jayBjYWxsYmFjaywgZGlzcGF0Y2hfcXVldWVf
dCBxdWV1ZSkKK3sKKyAgICBzdGF0aWMgdm9pZCAoKnNvZnRSZXNwb25zZVNldEJlY2FtZUZpbGVC
YWNrZWRDYWxsQmFja0Jsb2NrKShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmLCBDRkNhY2hlZFVSTFJl
c3BvbnNlQ2FsbEJhY2tCbG9jaywgZGlzcGF0Y2hfcXVldWVfdCkgPSAodm9pZCAoKikoQ0ZDYWNo
ZWRVUkxSZXNwb25zZVJlZiwgQ0ZDYWNoZWRVUkxSZXNwb25zZUNhbGxCYWNrQmxvY2ssIGRpc3Bh
dGNoX3F1ZXVlX3QpKSBkbHN5bShDRk5ldHdvcmtMaWJyYXJ5KCksICJfQ0ZDYWNoZWRVUkxSZXNw
b25zZVNldEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFja0Jsb2NrIik7CisgICAgaWYgKHNvZnRSZXNw
b25zZVNldEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFja0Jsb2NrKQorICAgICAgICByZXR1cm4gc29m
dFJlc3BvbnNlU2V0QmVjYW1lRmlsZUJhY2tlZENhbGxCYWNrQmxvY2socmVzcG9uc2UsIGNhbGxi
YWNrLCBxdWV1ZSk7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgd2UnbGwgdHJ5IHRv
IHdhaXQgZm9yIGEgcmVzb3VyY2UgdG8gYmUgZGlzayBjYWNoZWQgYmVmb3JlIHdlIGZvcmdldCB0
aGUgcmVxdWVzdC4KK3N0YXRpYyBjb25zdCBkb3VibGUgRGlza0NhY2hpbmdNb25pdG9yVGltZW91
dCA9IDEwOworCitzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVEaXNrQ2FjaGluZ01vbml0
b3JJRCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRJRCA9IDE7CisgICAgcmV0dXJu
IGN1cnJlbnRJRCsrOworfQorCit0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIERpc2tDYWNoaW5n
TW9uaXRvcio+IERpc2tDYWNoaW5nTW9uaXRvck1hcDsKKworc3RhdGljIERpc2tDYWNoaW5nTW9u
aXRvck1hcCYgZGlza0NhY2hpbmdNb25pdG9yTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKERpc2tDYWNoaW5nTW9uaXRvck1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsKK30K
Kworc3RhdGljIE11dGV4JiBkaXNrQ2FjaGluZ01vbml0b3JNYXBNdXRleCgpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAgICByZXR1cm4gbXV0ZXg7Cit9
CisKK3ZvaWQgbW9uaXRvckNhY2hlZFJlc3BvbnNlKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2Fj
aGVkUmVzcG9uc2UsIE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyKQoreworICAgIGlmICgh
Y2FjaGVkUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChsb2FkZXIpOwor
CisgICAgT3duUHRyPERpc2tDYWNoaW5nTW9uaXRvcj4gcmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBE
aXNrQ2FjaGluZ01vbml0b3IoY2FjaGVkUmVzcG9uc2UsIGxvYWRlcikpOworICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGRpc2tDYWNoaW5nTW9uaXRvck1hcE11dGV4KCkpOworICAg
ICAgICBkaXNrQ2FjaGluZ01vbml0b3JNYXAoKS5zZXQocmVxdWVzdC0+bV9yZXF1ZXN0SUQsIHJl
cXVlc3QubGVha1B0cigpKTsgIC8vIEJhbGFuY2VkIGJ5IGFkb3B0UHRyIGluIHRoZSBDRkNhY2hl
ZFVSTFJlc3BvbnNlQ2FsbEJhY2tCbG9jayBvciBpbiA6OmNhbmNlbFJlcXVlc3RUaW1lckZpcmVk
KCkKKyAgICB9Cit9CisKK0Rpc2tDYWNoaW5nTW9uaXRvcjo6RGlza0NhY2hpbmdNb25pdG9yKENG
Q2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UsIE5ldHdvcmtSZXNvdXJjZUxvYWRl
ciogbG9hZGVyKQorICAgIDogbV9yZXF1ZXN0SUQoZ2VuZXJhdGVVbmlxdWVEaXNrQ2FjaGluZ01v
bml0b3JJRCgpKQorICAgICwgbV9jYW5jZWxNb25pdG9yVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmRGlza0NhY2hpbmdNb25pdG9yOjpjYW5jZWxNb25pdG9yVGltZXJGaXJlZCkKK3sKKyAg
ICAvLyBTdGVwIDE6IFNldCB1cCB0aGlzIHJlcXVlc3QncyBkYXRhIG1lbWJlcnMgb24gdGhlIG1h
aW4gdGhyZWFkLgorICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF57CisgICAgICAgIG1fY29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IGxvYWRlci0+Y29ubmVjdGlv
blRvV2ViUHJvY2VzcygpOworICAgICAgICBtX3Jlc291cmNlUmVxdWVzdCA9IGxvYWRlci0+cmVx
dWVzdCgpOworICAgIH0pOworCisgICAgLy8gU3RlcDI6IFNldCB1cCB0aGUgZGlzayBjYWNoaW5n
IGNhbGxiYWNrIHNvIHRoaXMgcmVxdWVzdCBjYW4gYmUgZGVzdHJveWVkIHVwb24gc3VjY2Vzc2Z1
bGwgZGlzayBjYWNoaW5nLgorICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBtX3JlcXVlc3RJRDsK
KyAgICBDRkNhY2hlZFVSTFJlc3BvbnNlQ2FsbEJhY2tCbG9jayBibG9jayA9IF4oQ0ZDYWNoZWRV
UkxSZXNwb25zZVJlZiBjYWNoZWRSZXNwb25zZSkKKyAgICB7CisgICAgICAgIERpc2tDYWNoaW5n
TW9uaXRvciogcmF3UmVxdWVzdCA9IDA7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihkaXNrQ2FjaGluZ01vbml0b3JNYXBNdXRleCgpKTsKKyAgICAgICAgICAgIHJh
d1JlcXVlc3QgPSBkaXNrQ2FjaGluZ01vbml0b3JNYXAoKS50YWtlKGlkZW50aWZpZXIpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpc24ndCB0aGVyZSB0
aGVuIGl0IHRpbWVkIG91dCBiZWZvcmUgd2Ugd2VyZSBhYmxlIHRvIGNhY2hlIHRoaXMgcmVzb3Vy
Y2UgdG8gZGlzay4KKyAgICAgICAgaWYgKCFyYXdSZXF1ZXN0KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgT3duUHRyPERpc2tDYWNoaW5nTW9uaXRvcj4gcmVxdWVzdCA9
IGFkb3B0UHRyKHJhd1JlcXVlc3QpOyAvLyBCYWxhbmNlZCBieSBsZWFrUHRyKCkgaW4gbW9uaXRv
ckNhY2hlZFJlc3BvbnNlLgorICAgICAgICAKKyAgICAgICAgU2hhcmVhYmxlUmVzb3VyY2U6Okhh
bmRsZSBoYW5kbGU7CisgICAgICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVh
YmxlSGFuZGxlRnJvbUNGVVJMQ2FjaGVkUmVzcG9uc2UoaGFuZGxlLCBjYWNoZWRSZXNwb25zZSk7
CisgICAgICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgcmVxdWVzdC0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpE
aWRDYWNoZVJlc291cmNlKHJlcXVlc3QtPnJlc291cmNlUmVxdWVzdCgpLCBoYW5kbGUpKTsKKyAg
ICB9OworCisgICAgQ0ZDYWNoZWRVUkxSZXNwb25zZVNldEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFj
a0Jsb2NrKGNhY2hlZFJlc3BvbnNlLCBibG9jaywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7
CisgICAgCisgICAgLy8gU3RlcCAzOiBTdGFydCBhIHRpbWVyIHRvIGNhbmNlbCB0aGlzIHJlcXVl
c3QgaWYgZGlzayBjYWNoaW5nIGhhc24ndCBvY2N1cmVkIHF1aWNrbHkgZW5vdWdoLgorICAgIG1f
Y2FuY2VsTW9uaXRvclRpbWVyLnN0YXJ0T25lU2hvdChEaXNrQ2FjaGluZ01vbml0b3JUaW1lb3V0
KTsKK30KKwordm9pZCBEaXNrQ2FjaGluZ01vbml0b3I6OmNhbmNlbE1vbml0b3JUaW1lckZpcmVk
KCkKK3sKKyAgICBPd25QdHI8RGlza0NhY2hpbmdNb25pdG9yPiByZXF1ZXN0ID0gYWRvcHRQdHIo
dGhpcyk7IC8vIEJhbGFuY2VkIGJ5IGxlYWtQdHIoKSBpbiBtb25pdG9yQ2FjaGVkUmVzcG9uc2Uu
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZGlza0NhY2hpbmdNb25pdG9yTWFw
TXV0ZXgoKSk7CisgICAgICAgIEFTU0VSVChkaXNrQ2FjaGluZ01vbml0b3JNYXAoKS5nZXQobV9y
ZXF1ZXN0SUQpID09IHRoaXMpOworICAgICAgICBkaXNrQ2FjaGluZ01vbml0b3JNYXAoKS5yZW1v
dmUobV9yZXF1ZXN0SUQpOworICAgIH0KK30KKworQ29yZUlQQzo6Q29ubmVjdGlvbiogRGlza0Nh
Y2hpbmdNb25pdG9yOjpjb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25uZWN0
aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtS
ZXNvdXJjZUxvYWRlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KaW5kZXggZDE1NGVlYS4uOTc2MjFmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxv
YWRlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29y
a1Jlc291cmNlTG9hZGVyTWFjLm1tCkBAIC0yNiw4MSArMjYsODMgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCiAKLSNpbmNsdWRlICJTaGFy
ZWFibGVSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldl
YlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1NvZnRMaW5raW5n
Lmg+CisjaW1wb3J0ICJEaXNrQ2FjaGluZ01vbml0b3IuaCIKKyNpbXBvcnQgIlNoYXJlYWJsZVJl
c291cmNlLmgiCisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi10eXBlZGVmIHN0cnVjdCBf
Q0ZVUkxDYWNoZSogQ0ZVUkxDYWNoZVJlZjsKLXR5cGVkZWYgc3RydWN0IF9DRkNhY2hlZFVSTFJl
c3BvbnNlKiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NG
VVJMQ2FjaGUqIENGVVJMQ2FjaGVSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZDYWNoZWRV
UkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKIGV4dGVybiAiQyIgQ0ZVUkxDYWNo
ZVJlZiBDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCk7CiBleHRlcm4gIkMiIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYgQ0ZVUkxDYWNoZUNvcHlSZXNwb25zZUZvclJlcXVlc3QoQ0ZVUkxDYWNo
ZVJlZiwgQ0ZVUkxSZXF1ZXN0UmVmKTsKLWV4dGVybiAiQyIgQ0ZBcnJheVJlZiBDRkNhY2hlZFVS
TFJlc3BvbnNlQ29weVJlY2VpdmVyRGF0YUFycmF5KENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOwog
CiBTT0ZUX0xJTktfRlJBTUVXT1JLKENGTmV0d29yaykKLXN0YXRpYyBib29sIENGVVJMQ2FjaGVJ
c01lbU1hcHBlZERhdGEoQ0ZVUkxDYWNoZVJlZiBjYWNoZSwgQ0ZEYXRhUmVmIGRhdGEpCitzdGF0
aWMgQ0ZEYXRhUmVmIENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRNZW1NYXBwZWREYXRhKENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgc3RhdGljIENGQm9vbGVhblJlZiAoKnNv
ZnRMaW5rSXNDYWNoZU1NQVBlZERhdGEpKENGVVJMQ2FjaGVSZWYgY2FjaGUsIENGRGF0YVJlZiBk
YXRhKSA9IChDRkJvb2xlYW5SZWYgKCopKENGVVJMQ2FjaGVSZWYgY2FjaGUsIENGRGF0YVJlZiBk
YXRhKSkgZGxzeW0oQ0ZOZXR3b3JrTGlicmFyeSgpLCAiX0NGVVJMQ2FjaGVJc1Jlc3BvbnNlRGF0
YU1lbU1hcHBlZCIpOworICAgIHN0YXRpYyBDRkRhdGFSZWYgKCpzb2Z0R2V0TWVtTWFwcGVkRGF0
YSkoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgPSAoQ0ZEYXRhUmVmICgqKShDRkNhY2hlZFVSTFJl
c3BvbnNlUmVmKSkgZGxzeW0oQ0ZOZXR3b3JrTGlicmFyeSgpLCAiX0NGQ2FjaGVkVVJMUmVzcG9u
c2VHZXRNZW1NYXBwZWREYXRhIik7CiAgICAgCi0gICAgaWYgKHNvZnRMaW5rSXNDYWNoZU1NQVBl
ZERhdGEpCi0gICAgICAgIHJldHVybiBzb2Z0TGlua0lzQ2FjaGVNTUFQZWREYXRhKGNhY2hlLCBk
YXRhKSA9PSBrQ0ZCb29sZWFuVHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNvZnRH
ZXRNZW1NYXBwZWREYXRhKQorICAgICAgICByZXR1cm4gc29mdEdldE1lbU1hcHBlZERhdGEocmVz
cG9uc2UpOworICAgIHJldHVybiBOVUxMOwogfQogI2VuZGlmCiAKK0BpbnRlcmZhY2UgTlNDYWNo
ZWRVUkxSZXNwb25zZSAoTlNDYWNoZWRVUkxSZXNwb25zZUludGVybmFscykKKy0oQ0ZDYWNoZWRV
UkxSZXNwb25zZVJlZilfQ0ZDYWNoZWRVUkxSZXNwb25zZTsKK0BlbmQKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVIYW5k
bGVGb3JSZXNvdXJjZShTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBoYW5kbGUpCisjaWYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCit2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbUNGVVJMQ2FjaGVkUmVzcG9uc2UoU2hh
cmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZGxlLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNh
Y2hlZFJlc3BvbnNlKQogewotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAx
MDkwCi0gICAgcmV0dXJuOwotI2Vsc2UKKyAgICBDRkRhdGFSZWYgZGF0YSA9IENGQ2FjaGVkVVJM
UmVzcG9uc2VHZXRNZW1NYXBwZWREYXRhKGNhY2hlZFJlc3BvbnNlKTsKIAotICAgIC8vIENoZWNr
IHRoZSBjYWNoZSB0byBzZWUgaWYgd2UgY2FuIHZtX2NvcHkgYSBmaWxlc3lzdGVtLWJhY2tlZCBy
ZXNvdXJjZSBidWZmZXIuICAgCi0gICAgUmV0YWluUHRyPENGVVJMQ2FjaGVSZWY+IGNhY2hlID0g
YWRvcHRDRihDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCkpOwotICAgIGlmICghY2FjaGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QgPSByZXF1
ZXN0KCkuY2ZVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpOwotICAgIFJldGFpblB0cjxD
RkNhY2hlZFVSTFJlc3BvbnNlUmVmPiBjYWNoZWRSZXNwb25zZSA9IGFkb3B0Q0YoQ0ZVUkxDYWNo
ZUNvcHlSZXNwb25zZUZvclJlcXVlc3QoY2FjaGUuZ2V0KCksIGNmUmVxdWVzdCkpOwotICAgIGlm
ICghY2FjaGVkUmVzcG9uc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxDRkFy
cmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZDYWNoZWRVUkxSZXNwb25zZUNvcHlSZWNlaXZlckRh
dGFBcnJheShjYWNoZWRSZXNwb25zZS5nZXQoKSkpOwotICAgIGlmICghYXJyYXkgfHwgQ0ZBcnJh
eUdldENvdW50KGFycmF5LmdldCgpKSAhPSAxKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
Q0ZUeXBlUmVmIHZhbHVlID0gQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhcnJheS5nZXQoKSwgMCk7
Ci0gICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRkRhdGFHZXRUeXBlSUQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIENGRGF0YVJlZiBkYXRhID0gc3RhdGljX2Nhc3Q8Q0ZEYXRhUmVmPih2
YWx1ZSk7Ci0KLSAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHZtX2NvcHkgb3B0aW1pemF0
aW9uIGZvciByZXNvdXJjZXMgdGhhdCBzaG91bGQgYmUgZmlsZSBiYWNrZWQuCi0gICAgLy8gRklY
TUU6IElmIHRoZXJlIHdlcmUgYW4gQVBJIGF2YWlsYWJsZSB0byBndWFyYW50ZWUgdGhhdCBhIGJ1
ZmZlciB3YXMgZmlsZSBiYWNrZWQsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KLSAgICBpZiAoQ0ZE
YXRhR2V0TGVuZ3RoKGRhdGEpIDwgKENGSW5kZXgpZmlsZUJhY2tlZFJlc291cmNlTWluaW11bVNp
emUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghQ0ZVUkxDYWNoZUlzTWVtTWFw
cGVkRGF0YShjYWNoZS5nZXQoKSwgZGF0YSkpCisgICAgaWYgKCFkYXRhIHx8IENGRGF0YUdldExl
bmd0aChkYXRhKSA8IChDRkluZGV4KU5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZmlsZUJhY2tlZFJl
c291cmNlTWluaW11bVNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGVGcm9tVk1CdWZmZXIo
KHZvaWQqKUNGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSk7CiAg
ICAgaWYgKCFzaGFyZWRNZW1vcnkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIFZNQ29waWVkIHNoYXJlZCBtZW1vcnkgZm9yIGNhY2hlZCByZXNvdXJjZS4iKTsKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFZNIHNoYXJlZCBtZW1vcnkgZm9yIGNhY2hl
ZCByZXNvdXJjZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHNpemVfdCBzaXpl
ID0gc2hhcmVkTWVtb3J5LT5zaXplKCk7CiAgICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBy
ZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoc2hhcmVkTWVtb3J5LnJlbGVhc2Uo
KSwgMCwgc2l6ZSk7CiAgICAgcmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotI2VuZGlm
IC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCiB9CiAKK3ZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVIYW5kbGVGb3JSZXNvdXJjZShTaGFy
ZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgLy8gQ2hlY2sgdGhlIGNhY2hl
IHRvIHNlZSBpZiB3ZSBjYW4gdm1fY29weSBhIGZpbGVzeXN0ZW0tYmFja2VkIHJlc291cmNlIGJ1
ZmZlci4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTENhY2hlUmVmPiwg
Y2FjaGUsIChBZG9wdENGLCBDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCkpKTsKKyAgICBp
ZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1
ZXN0ID0gcmVxdWVzdCgpLmNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KTsKKyAgICBS
ZXRhaW5QdHI8Q0ZDYWNoZWRVUkxSZXNwb25zZVJlZj4gY2FjaGVkUmVzcG9uc2UgPSBhZG9wdENG
KENGVVJMQ2FjaGVDb3B5UmVzcG9uc2VGb3JSZXF1ZXN0KGNhY2hlLmdldCgpLCBjZlJlcXVlc3Qp
KTsKKyAgICBpZiAoIWNhY2hlZFJlc3BvbnNlKQorICAgICAgICByZXR1cm47CisKKyAgICB0cnlH
ZXRTaGFyZWFibGVIYW5kbGVGcm9tQ0ZVUkxDYWNoZWRSZXNwb25zZShoYW5kbGUsIGNhY2hlZFJl
c3BvbnNlLmdldCgpKTsKK30KKyNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKKwogc2l6ZV90IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZmlsZUJhY2tlZFJl
c291cmNlTWluaW11bVNpemUoKQogewogICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OnN5c3RlbVBh
Z2VTaXplKCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNw
b25zZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSog
bnNSZXNwb25zZSkKK3sKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKKyAgICBpZiAobV9ieXRlc1JlY2VpdmVkID49IGZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1T
aXplKCkpCisgICAgICAgIG1vbml0b3JDYWNoZWRSZXNwb25zZShbbnNSZXNwb25zZSBfQ0ZDYWNo
ZWRVUkxSZXNwb25zZV0sIHRoaXMpOworI2VuZGlmCisgICAgbV9oYW5kbGUtPmNvbnRpbnVlV2ls
bENhY2hlUmVzcG9uc2UobnNSZXNwb25zZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDU2ZjYxYTEuLjc5MjFmNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2Nyw2ICs0NjcsOCBAQAogCQk1MTYzMTk5MjE2
Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxOTkxMTYyODk4MEEwMEUyMkYw
MCAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tICovOyB9OwogCQk1MTYzMTk5NDE2Mjg5QTYw
MDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0M5MzQxNjI4MDY0ODAwMzQy
NTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTE2MzE5
OTUxNjI4OUE2MzAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNDOTM1MTYyODA2NDgwMDM0
MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggKi87IH07CisJCTUxNjdFRTlDMTcwMzY3
NkQwMDc2ODFDQSAvKiBEaXNrQ2FjaGluZ01vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjdFRTlBMTcwMzY3NkQwMDc2ODFDQSAvKiBEaXNr
Q2FjaGluZ01vbml0b3IuaCAqLzsgfTsKKwkJNTE2N0VFOUQxNzAzNjc2RDAwNzY4MUNBIC8qIERp
c2tDYWNoaW5nTW9uaXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjdFRTlCMTcwMzY3NkQwMDc2ODFDQSAvKiBEaXNrQ2FjaGluZ01vbml0b3Iu
bW0gKi87IH07CiAJCTUxNkE0QTVEMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QTRBNUIxMjBBMkND
RDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi87IH07CiAJCTUxNzk1NTY3MTYyODc2Q0IwMEZBNDNC
NiAvKiBOZXR3b3JrUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQThBNjE1MTYyN0YzRjkwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vz
c01hYy5tbSAqLzsgfTsKIAkJNTE3OTU1NjgxNjI4NzZDRjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9j
ZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MENDN0RGMTYxMzhFMjkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzcy5jcHAgKi87IH07CkBAIC0x
ODcyLDYgKzE4NzQsOCBAQAogCQk1MTU3OEI4MjEyMDlFQ0VGMDBBMzdDNEEgLyogV2ViRGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2dpbmcubWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYzMTk5MTE2Mjg5ODBBMDBFMjJG
MDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW07IHBhdGggPSBtYWMvTmV0
d29ya1Byb2Nlc3NQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2
N0VFOUExNzAzNjc2RDAwNzY4MUNBIC8qIERpc2tDYWNoaW5nTW9uaXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNrQ2FjaGluZ01vbml0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTE2N0VFOUIxNzAzNjc2RDAwNzY4MUNBIC8qIERpc2tDYWNoaW5n
TW9uaXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc2tD
YWNoaW5nTW9uaXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QTRBNUIx
MjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0EzM0Iz
MTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdBMzNCNDEzMEIzMDhDMDBGODBD
QjUgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zNTE4LDYgKzM1MjIsOCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlFMTdBRTJDMTE2QjlDMTM5MDAxQzQyRjEgLyogY29tLmFwcGxlLldl
YktpdC5OZXR3b3JrUHJvY2Vzcy5zYi5pbiAqLywKKwkJCQk1MTY3RUU5QTE3MDM2NzZEMDA3Njgx
Q0EgLyogRGlza0NhY2hpbmdNb25pdG9yLmggKi8sCisJCQkJNTE2N0VFOUIxNzAzNjc2RDAwNzY4
MUNBIC8qIERpc2tDYWNoaW5nTW9uaXRvci5tbSAqLywKIAkJCQk1MUE4QTYxNTE2MjdGM0Y5MDAw
RDkwRTkgLyogTmV0d29ya1Byb2Nlc3NNYWMubW0gKi8sCiAJCQkJNTEyQzA2OEYxNjM5MEU2OTAw
QUJCOTExIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0gKi8sCiAJCQkJNTFF
M0I2N0UxNkYyNjZCMzAwOTk2OERDIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbSAqLywK
QEAgLTUzNjEsNiArNTM2Nyw3IEBACiAJCQkJMzNBQTEwNjcxMzFGMDYwMDAwRDRBNTc1IC8qIFdl
YkNvb2tpZU1hbmFnZXJQcm94eUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzMwOTM0NEEx
MzE1QjkyMjAwOTdBN0JDIC8qIFdlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzFERDdCMjExNERDMzk2MDA1QURBRjMgLyogV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY3RUU5QzE3MDM2NzZEMDA3NjgxQ0EgLyog
RGlza0NhY2hpbmdNb25pdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNTg5QjEyQTg4Mzg4
MDA2Mjk1MzAgLyogV2ViQ3JlZGVudGlhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1NzhCODMx
MjA5RUNFRjAwQTM3QzRBIC8qIFdlYkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2QTI1RkRE
MTJBREM2Q0MwMERDNDBDQyAvKiBXZWJEYXRhYmFzZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNjczNSw2ICs2NzQyLDcgQEAKIAkJCQlCQzY0NkMxQTExREQzOTlGMDA2NDU1QjAgLyogV0tC
YWNrRm9yd2FyZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDZDMUMxMUREMzk5RjAw
NjQ1NUIwIC8qIFdLQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0JBQUM3MjE0NEU2MTk5MDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJNTE2N0VFOUQxNzAzNjc2RDAwNzY4MUNBIC8qIERpc2tDYWNo
aW5nTW9uaXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQkFBQ0Y1MTQ1MjMyNEYwMDUzRjgy
RiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMDRF
RUUxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
NUVFQjlFMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4g
U291cmNlcyAqLywK
</data>
<flag name="review"
          id="217226"
          type_id="1"
          status="-"
          setter="ap"
    />
    <flag name="commit-queue"
          id="217239"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195365</attachid>
            <date>2013-03-27 11:30:46 -0700</date>
            <delta_ts>2013-03-27 13:14:07 -0700</delta_ts>
            <desc>Patch v2 - Fix build failure by adding a newline (!)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26660</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlYmYyMTZhLi5hODgxZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTMtMDMtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbSBtYXBwZWQgcmVzb3VyY2UgZGF0YSBpbXByb3ZlbWVudHMuCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMzE5NjQ4MT4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmUgdGltZXItYmFzZWQgYXBwcm9hY2ggc3VwcG9ydCBjb2RlOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydEluUHJvZ3Jlc3NMb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoK
KworICAgICAgICBBZGQgYW4gb2JqZWN0IHRvIGVuY2Fwc3VsYXRlIG1vbml0b3JpbmcgYSByZXNv
dXJjZSBnb2luZyBpbiB0byB0aGUgZGlzayBjYWNoZS4KKyAgICAgICAgSXQgYm90aCBsaXN0ZW5z
IGZvciBhIGNhbGxiYWNrIG9uIHRoZSBjYWNoZWQgcmVzcG9uc2UgaW5kaWNhdGluZyBpdCBoYXMg
YmVlbiBjYWNoZWQKKyAgICAgICAgb3Igc2V0cyBhIHRpbWVyIHNvIHdlIGRvbid0IGtlZXAgb2Jq
ZWN0cyBhbGl2ZSB3YWl0aW5nIGZvcmV2ZXIuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFj
L0Rpc2tDYWNoaW5nTW9uaXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hp
bmdNb25pdG9yOjpkZXN0aW5hdGlvbklEKToKKyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hpbmdN
b25pdG9yOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6RGlza0Nh
Y2hpbmdNb25pdG9yOjpyZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L21hYy9EaXNrQ2FjaGluZ01vbml0b3IubW06IEFkZGVkLgorICAgICAgICAoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVNldEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFja0Jsb2NrKToKKyAgICAgICAgKFdlYktp
dDo6Z2VuZXJhdGVVbmlxdWVEaXNrQ2FjaGluZ01vbml0b3JJRCk6CisgICAgICAgIChXZWJLaXQ6
OmRpc2tDYWNoaW5nTW9uaXRvck1hcCk6CisgICAgICAgIChXZWJLaXQ6OmRpc2tDYWNoaW5nTW9u
aXRvck1hcE11dGV4KToKKyAgICAgICAgKFdlYktpdDo6bW9uaXRvckNhY2hlZFJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hpbmdNb25pdG9yOjpEaXNrQ2FjaGluZ01vbml0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpEaXNrQ2FjaGluZ01vbml0b3I6OmNhbmNlbE1vbml0b3JUaW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6RGlza0NhY2hpbmdNb25pdG9yOjpjb25uZWN0aW9u
KToKKworICAgICAgICBSZWZhY3RvcmluZyBhbmQgbW9uaXRvciBjZXJ0YWluIGNhY2hlZCByZXNw
b25zZXM6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRl
ck1hYy5tbToKKyAgICAgICAgKENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRNZW1NYXBwZWREYXRhKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVI
YW5kbGVGcm9tQ0ZVUkxDYWNoZWRSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMp
OiBJZiB0aGUgcmVzb3VyY2UgaXMgb3ZlciB0aGUgbWluaW11bQorICAgICAgICAgIHNpemUgdGhl
biBzZXQgdXAgYSBkaXNrIGNhY2hpbmcgbW9uaXRvci4KKworICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0wMy0yNiAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBhIHByaW1hcnkgcGx1Z2luIGlzIHJlc3RhcnRl
ZCwgYWxzbyBzdGFydCBzaW1pbGFyIHBsdWdpbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGNhOGNhYzMu
LmMyOWFhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApAQCAtNTQsOSArNTQsNiBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycywgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCiAgICAgOiBTY2hlZHVsYWJsZUxvYWRl
cihsb2FkUGFyYW1ldGVycywgY29ubmVjdGlvbikKICAgICAsIG1fYnl0ZXNSZWNlaXZlZCgwKQot
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAotICAgICwgbV9kaXNr
Q2FjaGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmRpc2tDYWNoZVRpbWVyRmlyZWQpCi0jZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDkwCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KQEAgLTE3
NCwyMSArMTcxLDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NEaWRDbG9zZSgpCiAgICAgY2xlYW51cCgpOwogfQogCi0jaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlza0NhY2hlVGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBhZG9wdGVkUmVmID0gYWRvcHRSZWYodGhp
cyk7IC8vIEJhbGFuY2Ugb3V0IHRoZSByZWYoKSB3aGVuIHNldHRpbmcgdGhlIHRpbWVyLgotCi0g
ICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBoYW5kbGU7Ci0gICAgdHJ5R2V0U2hhcmVhYmxl
SGFuZGxlRm9yUmVzb3VyY2UoaGFuZGxlKTsKLSAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b246OkRpZENhY2hlUmVzb3VyY2UocmVxdWVzdCgpLCBoYW5kbGUpKTsKLX0KLSNlbmRpZiAvLyAj
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0KIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZW5kQWJvcnRpbmdPbkZhaWx1
cmUoY29uc3QgVSYgbWVzc2FnZSkKIHsKICAgICBib29sIHJlc3VsdCA9IHNlbmQobWVzc2FnZSk7
CkBAIC0yMDgsOCArMTkwLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNlbmRTeW5jQWJvcnRpbmdPbkZhaWx1cmUoY29uc3QKIHZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjphYm9ydEluUHJvZ3Jlc3NMb2FkKCkKIHsKICAgICBBU1NFUlQobV9o
YW5kbGUpOwotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotIAogICAgIG1faGFuZGxlLT5j
YW5jZWwoKTsKIAogICAgIHNjaGVkdWxlQ2xlYW51cE9uTWFpblRocmVhZCgpOwpAQCAtMjU0LDE2
ICsyMzQsNiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lKQogICAgIC8vIFN1Y2ggYm9va2tlZXBp
bmcgd2lsbCBuZWVkIHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxiYWNrIGlzIGhhcHBl
bmluZyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5z
aW9ucygpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hS
ZXNvdXJjZUxvYWQoZmluaXNoVGltZSkpOwotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDkwCi0gICAgLy8gSWYgdGhpcyByZXNvdXJjZSB3YXMgbGFyZ2UgZW5vdWdo
IHRoYXQgaXQgc2hvdWxkIGJlIGNhY2hlZCB0byBkaXNrIGFzIGEgc2VwYXJhdGUgZmlsZSwKLSAg
ICAvLyB0aGVuIHdlIHNob3VsZCB0cnkgdG8gcmUtZGVsaXZlciB0aGUgcmVzb3VyY2UgdG8gdGhl
IFdlYlByb2Nlc3Mgb25jZSBpdCAqaXMqIHNhdmVkIGFzIGEgc2VwYXJhdGUgZmlsZS4gICAgCi0g
ICAgaWYgKG1fYnl0ZXNSZWNlaXZlZCA+PSBmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBPbmNlIGEgbm90aWZpY2F0aW9uIEFQSSBleGlzdHMgdGhh
dCBvYmxpdmlhdGVzIHRoaXMgdGltZXIsIHVzZSB0aGF0IGluc3RlYWQuCi0gICAgICAgIHJlZigp
OyAvLyBCYWxhbmNlZCBieSBhbiBhZG9wdFJlZigpIGluIGRpc2tDYWNoZVRpbWVyRmlyZWQoKS4K
LSAgICAgICAgbV9kaXNrQ2FjaGVUaW1lci5zdGFydE9uZVNob3QoMTApOwotICAgIH0KLSNlbmRp
ZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICAKICAgICBz
Y2hlZHVsZUNsZWFudXBPbk1haW5UaHJlYWQoKTsKIH0KQEAgLTM3MywxMiArMzQzLDYgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoUmVzb3VyY2VIYW5k
bGUqLCBDRkFycmF5UmVmKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCi12b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIGhhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7
Ci19Ci0KIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50KQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCmluZGV4IDg2NGJkM2QuLmU4MjM3MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zNSw2
ICszNSw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2Fj
aGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFJlc291cmNlQnVmZmVyOwogY2xhc3MgUmVzb3VyY2VIYW5kbGU7CkBAIC05
NSw2ICs5NywxMCBAQCBwdWJsaWM6CiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lk
IGRpZFJlY2VpdmVOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogCisjaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgc3RhdGljIHZvaWQgdHJ5R2V0U2hhcmVhYmxlSGFu
ZGxlRnJvbUNGVVJMQ2FjaGVkUmVzcG9uc2UoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYsIENG
Q2FjaGVkVVJMUmVzcG9uc2VSZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Jl
c291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKIApAQCAtMTEzLDggKzExOSw2IEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBzZW5kU3luY0Fib3J0aW5nT25GYWlsdXJl
KGNvbnN0IFUmIG1lc3NhZ2UsIGNvbnN0IHR5cGVuYW1lIFU6OlJlcGx5JiByZXBseSk7CiAgICAg
dm9pZCBhYm9ydEluUHJvZ3Jlc3NMb2FkKCk7CiAKLSAgICB2b2lkIHRyeUdldFNoYXJlYWJsZUhh
bmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmKTsKLQogICAgIFJlZlB0
cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKICAgICBSZWZQ
dHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOwogCkBAIC0xMjQsOCArMTI4LDcg
QEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2J5dGVzUmVjZWl2ZWQ7CiAKICNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLSAgICB2b2lkIGRpc2tDYWNoZVRpbWVy
RmlyZWQoKTsKLSAgICBXZWJDb3JlOjpSdW5Mb29wOjpUaW1lcjxOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI+IG1fZGlza0NhY2hlVGltZXI7CisgICAgdm9pZCB0cnlHZXRTaGFyZWFibGVIYW5kbGVGb3JS
ZXNvdXJjZShTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJik7CiAjZW5kaWYKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGluZ01vbml0
b3IuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGluZ01vbml0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmVmOGI3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL0Rpc2tDYWNoaW5n
TW9uaXRvci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpc2tDYWNo
aW5nTW9uaXRvcl9oCisjZGVmaW5lIERpc2tDYWNoaW5nTW9uaXRvcl9oCisKKyNpbmNsdWRlICJN
ZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxv
b3AuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWY7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKK2NsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKKwor
Y2xhc3MgRGlza0NhY2hpbmdNb25pdG9yIDogcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXI8
RGlza0NhY2hpbmdNb25pdG9yPiB7CitwdWJsaWM6CisgICAgLy8gVXNlZCBieSBNZXNzYWdlU2Vu
ZGVyLgorICAgIENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdDsKKyAgICB1
aW50NjRfdCBkZXN0aW5hdGlvbklEKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIAorICAgIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOyB9CisgICAgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSBjb25zdCB7IHJldHVy
biBtX3Jlc291cmNlUmVxdWVzdDsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2b2lkIG1vbml0
b3JDYWNoZWRSZXNwb25zZShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmLCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXIqKTsKKworICAgIERpc2tDYWNoaW5nTW9uaXRvcihDRkNhY2hlZFVSTFJlc3BvbnNlUmVm
LCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKKworICAgIHZvaWQgY2FuY2VsTW9uaXRvclRpbWVy
RmlyZWQoKTsKKyAgICAKKyAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
IG1fY29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
bV9yZXNvdXJjZVJlcXVlc3Q7CisgICAgdWludDY0X3QgbV9yZXF1ZXN0SUQ7CisKKyAgICBXZWJD
b3JlOjpSdW5Mb29wOjpUaW1lcjxEaXNrQ2FjaGluZ01vbml0b3I+IG1fY2FuY2VsTW9uaXRvclRp
bWVyOworfTsKKwordm9pZCBtb25pdG9yQ2FjaGVkUmVzcG9uc2UoQ0ZDYWNoZWRVUkxSZXNwb25z
ZVJlZiwgTmV0d29ya1Jlc291cmNlTG9hZGVyKik7CisKK30gLy8gbmFtc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBEaXNrQ2FjaGluZ01vbml0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvbWFjL0Rpc2tDYWNoaW5nTW9uaXRvci5tbSBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGluZ01vbml0b3IubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwM2IwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGluZ01vbml0b3IubW0KQEAgLTAs
MCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRp
c2tDYWNoaW5nTW9uaXRvci5oIgorCisjaW1wb3J0ICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKKyNp
bXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCisjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisKKworU09GVF9MSU5L
X0ZSQU1FV09SSyhDRk5ldHdvcmspCisKK3R5cGVkZWYgdm9pZCAoXkNGQ2FjaGVkVVJMUmVzcG9u
c2VDYWxsQmFja0Jsb2NrKShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKTsKKworc3RhdGljIHZvaWQg
Q0ZDYWNoZWRVUkxSZXNwb25zZVNldEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFja0Jsb2NrKENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIENGQ2FjaGVkVVJMUmVzcG9uc2VDYWxsQmFja0Js
b2NrIGNhbGxiYWNrLCBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlKQoreworICAgIHN0YXRpYyB2b2lk
ICgqc29mdFJlc3BvbnNlU2V0QmVjYW1lRmlsZUJhY2tlZENhbGxCYWNrQmxvY2spKENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYsIENGQ2FjaGVkVVJMUmVzcG9uc2VDYWxsQmFja0Jsb2NrLCBkaXNwYXRj
aF9xdWV1ZV90KSA9ICh2b2lkICgqKShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmLCBDRkNhY2hlZFVS
TFJlc3BvbnNlQ2FsbEJhY2tCbG9jaywgZGlzcGF0Y2hfcXVldWVfdCkpIGRsc3ltKENGTmV0d29y
a0xpYnJhcnkoKSwgIl9DRkNhY2hlZFVSTFJlc3BvbnNlU2V0QmVjYW1lRmlsZUJhY2tlZENhbGxC
YWNrQmxvY2siKTsKKyAgICBpZiAoc29mdFJlc3BvbnNlU2V0QmVjYW1lRmlsZUJhY2tlZENhbGxC
YWNrQmxvY2spCisgICAgICAgIHJldHVybiBzb2Z0UmVzcG9uc2VTZXRCZWNhbWVGaWxlQmFja2Vk
Q2FsbEJhY2tCbG9jayhyZXNwb25zZSwgY2FsbGJhY2ssIHF1ZXVlKTsKK30KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGUgbWF4aW11bSBu
dW1iZXIgb2Ygc2Vjb25kcyB3ZSdsbCB0cnkgdG8gd2FpdCBmb3IgYSByZXNvdXJjZSB0byBiZSBk
aXNrIGNhY2hlZCBiZWZvcmUgd2UgZm9yZ2V0IHRoZSByZXF1ZXN0Lgorc3RhdGljIGNvbnN0IGRv
dWJsZSBEaXNrQ2FjaGluZ01vbml0b3JUaW1lb3V0ID0gMTA7CisKK3N0YXRpYyB1aW50NjRfdCBn
ZW5lcmF0ZVVuaXF1ZURpc2tDYWNoaW5nTW9uaXRvcklEKCkKK3sKKyAgICBzdGF0aWMgdWludDY0
X3QgY3VycmVudElEID0gMTsKKyAgICByZXR1cm4gY3VycmVudElEKys7Cit9CisKK3R5cGVkZWYg
SGFzaE1hcDx1aW50NjRfdCwgRGlza0NhY2hpbmdNb25pdG9yKj4gRGlza0NhY2hpbmdNb25pdG9y
TWFwOworCitzdGF0aWMgRGlza0NhY2hpbmdNb25pdG9yTWFwJiBkaXNrQ2FjaGluZ01vbml0b3JN
YXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlza0NhY2hpbmdNb25pdG9yTWFwLCBt
YXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgTXV0ZXgmIGRpc2tDYWNoaW5n
TW9uaXRvck1hcE11dGV4KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRl
eCwgKCkpOworICAgIHJldHVybiBtdXRleDsKK30KKwordm9pZCBtb25pdG9yQ2FjaGVkUmVzcG9u
c2UoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjYWNoZWRSZXNwb25zZSwgTmV0d29ya1Jlc291cmNl
TG9hZGVyKiBsb2FkZXIpCit7CisgICAgaWYgKCFjYWNoZWRSZXNwb25zZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKGxvYWRlcik7CisKKyAgICBPd25QdHI8RGlza0NhY2hpbmdNb25p
dG9yPiByZXF1ZXN0ID0gYWRvcHRQdHIobmV3IERpc2tDYWNoaW5nTW9uaXRvcihjYWNoZWRSZXNw
b25zZSwgbG9hZGVyKSk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZGlza0Nh
Y2hpbmdNb25pdG9yTWFwTXV0ZXgoKSk7CisgICAgICAgIGRpc2tDYWNoaW5nTW9uaXRvck1hcCgp
LnNldChyZXF1ZXN0LT5tX3JlcXVlc3RJRCwgcmVxdWVzdC5sZWFrUHRyKCkpOyAgLy8gQmFsYW5j
ZWQgYnkgYWRvcHRQdHIgaW4gdGhlIENGQ2FjaGVkVVJMUmVzcG9uc2VDYWxsQmFja0Jsb2NrIG9y
IGluIDo6Y2FuY2VsUmVxdWVzdFRpbWVyRmlyZWQoKQorICAgIH0KK30KKworRGlza0NhY2hpbmdN
b25pdG9yOjpEaXNrQ2FjaGluZ01vbml0b3IoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjYWNoZWRS
ZXNwb25zZSwgTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIpCisgICAgOiBtX3JlcXVlc3RJ
RChnZW5lcmF0ZVVuaXF1ZURpc2tDYWNoaW5nTW9uaXRvcklEKCkpCisgICAgLCBtX2NhbmNlbE1v
bml0b3JUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZEaXNrQ2FjaGluZ01vbml0b3I6OmNh
bmNlbE1vbml0b3JUaW1lckZpcmVkKQoreworICAgIC8vIFN0ZXAgMTogU2V0IHVwIHRoaXMgcmVx
dWVzdCdzIGRhdGEgbWVtYmVycyBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgbV9jb25uZWN0aW9uVG9X
ZWJQcm9jZXNzID0gbG9hZGVyLT5jb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CisgICAgICAgIG1f
cmVzb3VyY2VSZXF1ZXN0ID0gbG9hZGVyLT5yZXF1ZXN0KCk7CisgICAgfSk7CisKKyAgICAvLyBT
dGVwMjogU2V0IHVwIHRoZSBkaXNrIGNhY2hpbmcgY2FsbGJhY2sgc28gdGhpcyByZXF1ZXN0IGNh
biBiZSBkZXN0cm95ZWQgdXBvbiBzdWNjZXNzZnVsbCBkaXNrIGNhY2hpbmcuCisgICAgdWludDY0
X3QgaWRlbnRpZmllciA9IG1fcmVxdWVzdElEOworICAgIENGQ2FjaGVkVVJMUmVzcG9uc2VDYWxs
QmFja0Jsb2NrIGJsb2NrID0gXihDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNhY2hlZFJlc3BvbnNl
KQorICAgIHsKKyAgICAgICAgRGlza0NhY2hpbmdNb25pdG9yKiByYXdSZXF1ZXN0ID0gMDsKKyAg
ICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGRpc2tDYWNoaW5nTW9uaXRv
ck1hcE11dGV4KCkpOworICAgICAgICAgICAgcmF3UmVxdWVzdCA9IGRpc2tDYWNoaW5nTW9uaXRv
ck1hcCgpLnRha2UoaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IElmIHRoZSByZXF1ZXN0IGlzbid0IHRoZXJlIHRoZW4gaXQgdGltZWQgb3V0IGJlZm9yZSB3ZSB3
ZXJlIGFibGUgdG8gY2FjaGUgdGhpcyByZXNvdXJjZSB0byBkaXNrLgorICAgICAgICBpZiAoIXJh
d1JlcXVlc3QpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBPd25QdHI8
RGlza0NhY2hpbmdNb25pdG9yPiByZXF1ZXN0ID0gYWRvcHRQdHIocmF3UmVxdWVzdCk7IC8vIEJh
bGFuY2VkIGJ5IGxlYWtQdHIoKSBpbiBtb25pdG9yQ2FjaGVkUmVzcG9uc2UuCisgICAgICAgIAor
ICAgICAgICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVIYW5kbGVGcm9tQ0ZVUkxDYWNoZWRSZXNw
b25zZShoYW5kbGUsIGNhY2hlZFJlc3BvbnNlKTsKKyAgICAgICAgaWYgKGhhbmRsZS5pc051bGwo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZXF1ZXN0LT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRpZENhY2hlUmVzb3VyY2UocmVxdWVzdC0+cmVz
b3VyY2VSZXF1ZXN0KCksIGhhbmRsZSkpOworICAgIH07CisKKyAgICBDRkNhY2hlZFVSTFJlc3Bv
bnNlU2V0QmVjYW1lRmlsZUJhY2tlZENhbGxCYWNrQmxvY2soY2FjaGVkUmVzcG9uc2UsIGJsb2Nr
LCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKKyAgICAKKyAgICAvLyBTdGVwIDM6IFN0YXJ0
IGEgdGltZXIgdG8gY2FuY2VsIHRoaXMgcmVxdWVzdCBpZiBkaXNrIGNhY2hpbmcgaGFzbid0IG9j
Y3VyZWQgcXVpY2tseSBlbm91Z2guCisgICAgbV9jYW5jZWxNb25pdG9yVGltZXIuc3RhcnRPbmVT
aG90KERpc2tDYWNoaW5nTW9uaXRvclRpbWVvdXQpOworfQorCit2b2lkIERpc2tDYWNoaW5nTW9u
aXRvcjo6Y2FuY2VsTW9uaXRvclRpbWVyRmlyZWQoKQoreworICAgIE93blB0cjxEaXNrQ2FjaGlu
Z01vbml0b3I+IHJlcXVlc3QgPSBhZG9wdFB0cih0aGlzKTsgLy8gQmFsYW5jZWQgYnkgbGVha1B0
cigpIGluIG1vbml0b3JDYWNoZWRSZXNwb25zZS4KKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihkaXNrQ2FjaGluZ01vbml0b3JNYXBNdXRleCgpKTsKKyAgICAgICAgQVNTRVJUKGRp
c2tDYWNoaW5nTW9uaXRvck1hcCgpLmdldChtX3JlcXVlc3RJRCkgPT0gdGhpcyk7CisgICAgICAg
IGRpc2tDYWNoaW5nTW9uaXRvck1hcCgpLnJlbW92ZShtX3JlcXVlc3RJRCk7CisgICAgfQorfQor
CitDb3JlSVBDOjpDb25uZWN0aW9uKiBEaXNrQ2FjaGluZ01vbml0b3I6OmNvbm5lY3Rpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQpp
bmRleCBkMTU0ZWVhLi45NzYyMWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KQEAgLTI2
LDgxICsyNiw4MyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuaCIKIAotI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCi0jaW5jbHVkZSAi
U2hhcmVkTWVtb3J5LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgIkRpc2tDYWNoaW5nTW9u
aXRvci5oIgorI2ltcG9ydCAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VIYW5kbGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKLXR5cGVkZWYgc3RydWN0IF9DRlVSTENhY2hlKiBDRlVSTENhY2hlUmVmOwot
dHlwZWRlZiBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VS
ZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZVUkxDYWNoZSogQ0ZVUkxDYWNoZVJlZjsKK3R5
cGVkZWYgY29uc3Qgc3RydWN0IF9DRkNhY2hlZFVSTFJlc3BvbnNlKiBDRkNhY2hlZFVSTFJlc3Bv
bnNlUmVmOwogZXh0ZXJuICJDIiBDRlVSTENhY2hlUmVmIENGVVJMQ2FjaGVDb3B5U2hhcmVkVVJM
Q2FjaGUoKTsKIGV4dGVybiAiQyIgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBDRlVSTENhY2hlQ29w
eVJlc3BvbnNlRm9yUmVxdWVzdChDRlVSTENhY2hlUmVmLCBDRlVSTFJlcXVlc3RSZWYpOwotZXh0
ZXJuICJDIiBDRkFycmF5UmVmIENGQ2FjaGVkVVJMUmVzcG9uc2VDb3B5UmVjZWl2ZXJEYXRhQXJy
YXkoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZik7CiAKIFNPRlRfTElOS19GUkFNRVdPUksoQ0ZOZXR3
b3JrKQotc3RhdGljIGJvb2wgQ0ZVUkxDYWNoZUlzTWVtTWFwcGVkRGF0YShDRlVSTENhY2hlUmVm
IGNhY2hlLCBDRkRhdGFSZWYgZGF0YSkKK3N0YXRpYyBDRkRhdGFSZWYgQ0ZDYWNoZWRVUkxSZXNw
b25zZUdldE1lbU1hcHBlZERhdGEoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsK
LSAgICBzdGF0aWMgQ0ZCb29sZWFuUmVmICgqc29mdExpbmtJc0NhY2hlTU1BUGVkRGF0YSkoQ0ZV
UkxDYWNoZVJlZiBjYWNoZSwgQ0ZEYXRhUmVmIGRhdGEpID0gKENGQm9vbGVhblJlZiAoKikoQ0ZV
UkxDYWNoZVJlZiBjYWNoZSwgQ0ZEYXRhUmVmIGRhdGEpKSBkbHN5bShDRk5ldHdvcmtMaWJyYXJ5
KCksICJfQ0ZVUkxDYWNoZUlzUmVzcG9uc2VEYXRhTWVtTWFwcGVkIik7CisgICAgc3RhdGljIENG
RGF0YVJlZiAoKnNvZnRHZXRNZW1NYXBwZWREYXRhKShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSA9
IChDRkRhdGFSZWYgKCopKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpKSBkbHN5bShDRk5ldHdvcmtM
aWJyYXJ5KCksICJfQ0ZDYWNoZWRVUkxSZXNwb25zZUdldE1lbU1hcHBlZERhdGEiKTsKICAgICAK
LSAgICBpZiAoc29mdExpbmtJc0NhY2hlTU1BUGVkRGF0YSkKLSAgICAgICAgcmV0dXJuIHNvZnRM
aW5rSXNDYWNoZU1NQVBlZERhdGEoY2FjaGUsIGRhdGEpID09IGtDRkJvb2xlYW5UcnVlOwotICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoc29mdEdldE1lbU1hcHBlZERhdGEpCisgICAgICAgIHJl
dHVybiBzb2Z0R2V0TWVtTWFwcGVkRGF0YShyZXNwb25zZSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAjZW5kaWYKIAorQGludGVyZmFjZSBOU0NhY2hlZFVSTFJlc3BvbnNlIChOU0NhY2hlZFVSTFJl
c3BvbnNlSW50ZXJuYWxzKQorLShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKV9DRkNhY2hlZFVSTFJl
c3BvbnNlOworQGVuZAorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnRyeUdldFNoYXJlYWJsZUhhbmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291
cmNlOjpIYW5kbGUmIGhhbmRsZSkKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVIYW5k
bGVGcm9tQ0ZVUkxDYWNoZWRSZXNwb25zZShTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBoYW5k
bGUsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UpCiB7Ci0jaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwOTAKLSAgICByZXR1cm47Ci0jZWxzZQorICAg
IENGRGF0YVJlZiBkYXRhID0gQ0ZDYWNoZWRVUkxSZXNwb25zZUdldE1lbU1hcHBlZERhdGEoY2Fj
aGVkUmVzcG9uc2UpOwogCi0gICAgLy8gQ2hlY2sgdGhlIGNhY2hlIHRvIHNlZSBpZiB3ZSBjYW4g
dm1fY29weSBhIGZpbGVzeXN0ZW0tYmFja2VkIHJlc291cmNlIGJ1ZmZlci4gICAKLSAgICBSZXRh
aW5QdHI8Q0ZVUkxDYWNoZVJlZj4gY2FjaGUgPSBhZG9wdENGKENGVVJMQ2FjaGVDb3B5U2hhcmVk
VVJMQ2FjaGUoKSk7Ci0gICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0ZV
UkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCA9IHJlcXVlc3QoKS5jZlVSTFJlcXVlc3QoRG9Ob3RVcGRh
dGVIVFRQQm9keSk7Ci0gICAgUmV0YWluUHRyPENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY+IGNhY2hl
ZFJlc3BvbnNlID0gYWRvcHRDRihDRlVSTENhY2hlQ29weVJlc3BvbnNlRm9yUmVxdWVzdChjYWNo
ZS5nZXQoKSwgY2ZSZXF1ZXN0KSk7Ci0gICAgaWYgKCFjYWNoZWRSZXNwb25zZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkNh
Y2hlZFVSTFJlc3BvbnNlQ29weVJlY2VpdmVyRGF0YUFycmF5KGNhY2hlZFJlc3BvbnNlLmdldCgp
KSk7Ci0gICAgaWYgKCFhcnJheSB8fCBDRkFycmF5R2V0Q291bnQoYXJyYXkuZ2V0KCkpICE9IDEp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDRlR5cGVSZWYgdmFsdWUgPSBDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGFycmF5LmdldCgpLCAwKTsKLSAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWUp
ICE9IENGRGF0YUdldFR5cGVJRCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0ZEYXRhUmVmIGRh
dGEgPSBzdGF0aWNfY2FzdDxDRkRhdGFSZWY+KHZhbHVlKTsKLQotICAgIC8vIFdlIG9ubHkgY2Fy
ZSBhYm91dCB0aGUgdm1fY29weSBvcHRpbWl6YXRpb24gZm9yIHJlc291cmNlcyB0aGF0IHNob3Vs
ZCBiZSBmaWxlIGJhY2tlZC4KLSAgICAvLyBGSVhNRTogSWYgdGhlcmUgd2VyZSBhbiBBUEkgYXZh
aWxhYmxlIHRvIGd1YXJhbnRlZSB0aGF0IGEgYnVmZmVyIHdhcyBmaWxlIGJhY2tlZCwgd2Ugc2hv
dWxkIHVzZSBpdCBoZXJlLgotICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoZGF0YSkgPCAoQ0ZJbmRl
eClmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKCFDRlVSTENhY2hlSXNNZW1NYXBwZWREYXRhKGNhY2hlLmdldCgpLCBkYXRhKSkK
KyAgICBpZiAoIWRhdGEgfHwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpIDwgKENGSW5kZXgpTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZUZyb21WTUJ1ZmZlcigodm9pZCopQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRh
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKTsKICAgICBpZiAoIXNoYXJlZE1lbW9yeSkgewotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgVk1Db3BpZWQgc2hhcmVkIG1lbW9yeSBm
b3IgY2FjaGVkIHJlc291cmNlLiIpOworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgVk0gc2hhcmVkIG1lbW9yeSBmb3IgY2FjaGVkIHJlc291cmNlLiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgc2l6ZV90IHNpemUgPSBzaGFyZWRNZW1vcnktPnNpemUoKTsKICAg
ICBSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IHJlc291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6
OmNyZWF0ZShzaGFyZWRNZW1vcnkucmVsZWFzZSgpLCAwLCBzaXplKTsKICAgICByZXNvdXJjZS0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSk7Ci0jZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA8IDEwOTAKIH0KIAordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeUdldFNo
YXJlYWJsZUhhbmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgY2FjaGUgdG8gc2VlIGlmIHdlIGNhbiB2bV9jb3B5IGEg
ZmlsZXN5c3RlbS1iYWNrZWQgcmVzb3VyY2UgYnVmZmVyLgorICAgIERFRklORV9TVEFUSUNfTE9D
QUwoUmV0YWluUHRyPENGVVJMQ2FjaGVSZWY+LCBjYWNoZSwgKEFkb3B0Q0YsIENGVVJMQ2FjaGVD
b3B5U2hhcmVkVVJMQ2FjaGUoKSkpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybjsK
KworICAgIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QgPSByZXF1ZXN0KCkuY2ZVUkxSZXF1ZXN0
KERvTm90VXBkYXRlSFRUUEJvZHkpOworICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJlc3BvbnNl
UmVmPiBjYWNoZWRSZXNwb25zZSA9IGFkb3B0Q0YoQ0ZVUkxDYWNoZUNvcHlSZXNwb25zZUZvclJl
cXVlc3QoY2FjaGUuZ2V0KCksIGNmUmVxdWVzdCkpOworICAgIGlmICghY2FjaGVkUmVzcG9uc2Up
CisgICAgICAgIHJldHVybjsKKworICAgIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZyb21DRlVSTENh
Y2hlZFJlc3BvbnNlKGhhbmRsZSwgY2FjaGVkUmVzcG9uc2UuZ2V0KCkpOworfQorI2VuZGlmIC8v
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorCiBzaXplX3QgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpCiB7CiAgICAg
cmV0dXJuIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKTsKIH0KIAordm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiBuc1Jlc3BvbnNlKQoreworI2lmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIGlmIChtX2J5dGVzUmVjZWl2ZWQg
Pj0gZmlsZUJhY2tlZFJlc291cmNlTWluaW11bVNpemUoKSkKKyAgICAgICAgbW9uaXRvckNhY2hl
ZFJlc3BvbnNlKFtuc1Jlc3BvbnNlIF9DRkNhY2hlZFVSTFJlc3BvbnNlXSwgdGhpcyk7CisjZW5k
aWYKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShuc1Jlc3BvbnNlKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTZmNjFhMS4uNzkyMWY1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NDY3LDYgKzQ2Nyw4IEBACiAJCTUxNjMxOTkyMTYyODk4MEEwMEUyMkYwMCAvKiBOZXR3b3JrUHJv
Y2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2MzE5OTExNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNYWMu
bW0gKi87IH07CiAJCTUxNjMxOTk0MTYyODlBNjAwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc01l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUFDQzkzNDE2MjgwNjQ4MDAzNDI1NTAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTYzMTk5NTE2Mjg5QTYzMDBFMjJGMDAgLyogTmV0d29y
a1Byb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFBQ0M5MzUxNjI4MDY0ODAwMzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2Fn
ZXMuaCAqLzsgfTsKKwkJNTE2N0VFOUMxNzAzNjc2RDAwNzY4MUNBIC8qIERpc2tDYWNoaW5nTW9u
aXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
N0VFOUExNzAzNjc2RDAwNzY4MUNBIC8qIERpc2tDYWNoaW5nTW9uaXRvci5oICovOyB9OworCQk1
MTY3RUU5RDE3MDM2NzZEMDA3NjgxQ0EgLyogRGlza0NhY2hpbmdNb25pdG9yLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2N0VFOUIxNzAzNjc2RDAw
NzY4MUNBIC8qIERpc2tDYWNoaW5nTW9uaXRvci5tbSAqLzsgfTsKIAkJNTE2QTRBNUQxMjBBMkND
RDAwQzA1QjdGIC8qIFdlYkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLzsg
fTsKIAkJNTE3OTU1NjcxNjI4NzZDQjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEE2MTUxNjI3
RjNGOTAwMEQ5MEU5IC8qIE5ldHdvcmtQcm9jZXNzTWFjLm1tICovOyB9OwogCQk1MTc5NTU2ODE2
Mjg3NkNGMDBGQTQzQjYgLyogTmV0d29ya1Byb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQ0M3REYxNjEzOEUyOTAwRDAzRUQzIC8qIE5l
dHdvcmtQcm9jZXNzLmNwcCAqLzsgfTsKQEAgLTE4NzIsNiArMTg3NCw4IEBACiAJCTUxNTc4Qjgy
MTIwOUVDRUYwMEEzN0M0QSAvKiBXZWJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MEJGRTAx
MzM4MURGOTAwOTE4OTk5IC8qIExvZ2dpbmcubWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gTG9nZ2luZy5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNjMxOTkxMTYyODk4MEEwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nl
c3NQcm94eU1hYy5tbTsgcGF0aCA9IG1hYy9OZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY3RUU5QTE3MDM2NzZEMDA3NjgxQ0EgLyogRGlz
a0NhY2hpbmdNb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc2tD
YWNoaW5nTW9uaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY3RUU5QjE3
MDM2NzZEMDA3NjgxQ0EgLyogRGlza0NhY2hpbmdNb25pdG9yLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGlza0NhY2hpbmdNb25pdG9yLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXJyb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3QTMzQjMxMzBCMzA4QzAwRjgwQ0I1IC8qIFdLQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MTgsNiArMzUyMiw4
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUUxN0FFMkMxMTZC
OUMxMzkwMDFDNDJGMSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNiLmluICov
LAorCQkJCTUxNjdFRTlBMTcwMzY3NkQwMDc2ODFDQSAvKiBEaXNrQ2FjaGluZ01vbml0b3IuaCAq
LywKKwkJCQk1MTY3RUU5QjE3MDM2NzZEMDA3NjgxQ0EgLyogRGlza0NhY2hpbmdNb25pdG9yLm1t
ICovLAogCQkJCTUxQThBNjE1MTYyN0YzRjkwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzc01hYy5t
bSAqLywKIAkJCQk1MTJDMDY4RjE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlck1hYy5tbSAqLywKIAkJCQk1MUUzQjY3RTE2RjI2NkIzMDA5OTY4REMgLyogTmV0
d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tICovLApAQCAtNTM2MSw2ICs1MzY3LDcgQEAKIAkJCQkz
M0FBMTA2NzEzMUYwNjAwMDBENEE1NzUgLyogV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMzA5MzQ0QTEzMTVCOTIyMDA5N0E3QkMgLyogV2ViQ29va2ll
TWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUREN0IyMTE0REMz
OTYwMDVBREFGMyAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxNjdFRTlDMTcwMzY3NkQwMDc2ODFDQSAvKiBEaXNrQ2FjaGluZ01vbml0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMkY1ODlCMTJBODgzODgwMDYyOTUzMCAvKiBXZWJDcmVkZW50aWFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTU3OEI4MzEyMDlFQ0VGMDBBMzdDNEEgLyogV2ViRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjZBMjVGREQxMkFEQzZDQzAwREM0MENDIC8qIFdlYkRhdGFi
YXNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzM1LDYgKzY3NDIsNyBAQAogCQkJCUJD
NjQ2QzFBMTFERDM5OUYwMDY0NTVCMCAvKiBXS0JhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzY0NkMxQzExREQzOTlGMDA2NDU1QjAgLyogV0tCYWNrRm9yd2FyZExpc3RJ
dGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQkFBQzcyMTQ0RTYxOTkwMDUzRjgyRiAvKiBX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTY3RUU5
RDE3MDM2NzZEMDA3NjgxQ0EgLyogRGlza0NhY2hpbmdNb25pdG9yLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNCQUFDRjUxNDUyMzI0RjAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzIwNEVFRTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVCOUUxMjc3NjFBQzAwMzMyMkI4IC8qIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="commit-queue"
          id="217249"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195384</attachid>
            <date>2013-03-27 13:14:07 -0700</date>
            <delta_ts>2013-03-27 13:25:20 -0700</delta_ts>
            <desc>Patch v3 - Much better, I think!</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25186</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlYmYyMTZhLi4zNzg4MTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTMtMDMtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1lbSBtYXBwZWQgcmVzb3VyY2UgZGF0YSBpbXByb3ZlbWVudHMuCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMzE5NjQ4MT4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmUgdGltZXItYmFzZWQgYXBwcm9hY2ggc3VwcG9ydCBjb2RlOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydEluUHJvZ3Jlc3NMb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoK
KworICAgICAgICBBZGQgYW4gb2JqZWN0IHRvIGVuY2Fwc3VsYXRlIG1vbml0b3JpbmcgYSByZXNv
dXJjZSBnb2luZyBpbiB0byB0aGUgZGlzayBjYWNoZS4KKyAgICAgICAgSXQgbGlzdGVucyBmb3Ig
YSBjYWxsYmFjayBvbiB0aGUgY2FjaGVkIHJlc3BvbnNlIGluZGljYXRpbmcgaXQgaXMgZGlzayBi
YWNrZWQKKyAgICAgICAgYW5kIGFsc28gc2V0cyBhIHRpbWVvdXQgc28gd2UgZG9uJ3Qga2VlcCB0
aGUgbW9uaXRvciBhbGl2ZSBhbmQgd2FpdGluZyBmb3JldmVyLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL21hYy9EaXNrQ2FjaGVNb25pdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpE
aXNrQ2FjaGVNb25pdG9yOjpkZXN0aW5hdGlvbklEKToKKyAgICAgICAgKFdlYktpdDo6RGlza0Nh
Y2hlTW9uaXRvcjo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OkRp
c2tDYWNoZU1vbml0b3I6OnJlc291cmNlUmVxdWVzdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvbWFjL0Rpc2tDYWNoZU1vbml0b3IubW06IEFkZGVkLgorICAgICAgICAoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVNldEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFja0Jsb2NrKToKKyAgICAgICAgKFdlYktp
dDo6bW9uaXRvckZpbGVCYWNraW5nU3RvcmVDcmVhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkRp
c2tDYWNoZU1vbml0b3I6OkRpc2tDYWNoaW5nTW9uaXRvcik6CisgICAgICAgIChXZWJLaXQ6OkRp
c2tDYWNoZU1vbml0b3I6OmNvbm5lY3Rpb24pOgorCisgICAgICAgIFJlZmFjdG9yaW5nIGFuZCBt
b25pdG9yIGNlcnRhaW4gY2FjaGVkIHJlc3BvbnNlczoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tOgorICAgICAgICAoQ0ZDYWNoZWRVUkxS
ZXNwb25zZUdldE1lbU1hcHBlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnRyeUdldFNoYXJlYWJsZUhhbmRsZUZyb21DRlVSTENhY2hlZFJlc3BvbnNlKTog
VXNlIENGQ2FjaGVkVVJMUmVzcG9uc2VHZXRNZW1NYXBwZWREYXRhCisgICAgICAgICAgdG8gZXhw
bGljaXRseSBnZXQgYW4gbWVtLW1hcHBlZCBkYXRhIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVIYW5kbGVGb3JSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9u
c2VBc3luYyk6IElmIHRoZSByZXNvdXJjZSBpcyBvdmVyIHRoZSBtaW5pbXVtCisgICAgICAgICAg
c2l6ZSB0aGVuIHNldCB1cCBhIGRpc2sgY2FjaGluZyBtb25pdG9yLgorCisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTAzLTI2ICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBXaGVuIGEgcHJpbWFyeSBwbHVnaW4gaXMg
cmVzdGFydGVkLCBhbHNvIHN0YXJ0IHNpbWlsYXIgcGx1Z2lucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXgg
Y2E4Y2FjMy4uODIxYjdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC01NCw5ICs1NCw2IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIGxvYWRQYXJhbWV0ZXJzLCBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKICAgICA6IFNjaGVkdWxh
YmxlTG9hZGVyKGxvYWRQYXJhbWV0ZXJzLCBjb25uZWN0aW9uKQogICAgICwgbV9ieXRlc1JlY2Vp
dmVkKDApCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0gICAg
LCBtX2Rpc2tDYWNoZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlza0NhY2hlVGltZXJGaXJlZCkKLSNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwOTAKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
fQpAQCAtMTc0LDIxICsxNzEsNiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29ubmVj
dGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKCkKICAgICBjbGVhbnVwKCk7CiB9CiAKLSNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLXZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaXNrQ2FjaGVUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGFkb3B0ZWRSZWYgPSBhZG9w
dFJlZih0aGlzKTsgLy8gQmFsYW5jZSBvdXQgdGhlIHJlZigpIHdoZW4gc2V0dGluZyB0aGUgdGlt
ZXIuCi0KLSAgICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIGhhbmRsZTsKLSAgICB0cnlHZXRT
aGFyZWFibGVIYW5kbGVGb3JSZXNvdXJjZShoYW5kbGUpOwotICAgIGlmIChoYW5kbGUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGlkQ2FjaGVSZXNvdXJjZShyZXF1ZXN0KCksIGhhbmRsZSkpOwotfQotI2Vu
ZGlmIC8vICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLQogdGVt
cGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGlu
Z09uRmFpbHVyZShjb25zdCBVJiBtZXNzYWdlKQogewogICAgIGJvb2wgcmVzdWx0ID0gc2VuZCht
ZXNzYWdlKTsKQEAgLTIwOCw4ICsxOTAsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZFN5bmNBYm9ydGluZ09uRmFpbHVyZShjb25zdAogdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0SW5Qcm9ncmVzc0xvYWQoKQogewogICAgIEFT
U0VSVChtX2hhbmRsZSk7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gCisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKIAogICAgIHNj
aGVkdWxlQ2xlYW51cE9uTWFpblRocmVhZCgpOwpAQCAtMjU0LDE2ICsyMzYsNiBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRv
dWJsZSBmaW5pc2hUaW1lKQogICAgIC8vIFN1Y2ggYm9va2tlZXBpbmcgd2lsbCBuZWVkIHRvIGJl
IHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxiYWNrIGlzIGhhcHBlbmluZyBvbiBhIGJhY2tncm91
bmQgdGhyZWFkLgogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNvdXJjZUxvYWQoZmluaXNo
VGltZSkpOwotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0g
ICAgLy8gSWYgdGhpcyByZXNvdXJjZSB3YXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgc2hvdWxkIGJl
IGNhY2hlZCB0byBkaXNrIGFzIGEgc2VwYXJhdGUgZmlsZSwKLSAgICAvLyB0aGVuIHdlIHNob3Vs
ZCB0cnkgdG8gcmUtZGVsaXZlciB0aGUgcmVzb3VyY2UgdG8gdGhlIFdlYlByb2Nlc3Mgb25jZSBp
dCAqaXMqIHNhdmVkIGFzIGEgc2VwYXJhdGUgZmlsZS4gICAgCi0gICAgaWYgKG1fYnl0ZXNSZWNl
aXZlZCA+PSBmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBPbmNlIGEgbm90aWZpY2F0aW9uIEFQSSBleGlzdHMgdGhhdCBvYmxpdmlhdGVzIHRoaXMg
dGltZXIsIHVzZSB0aGF0IGluc3RlYWQuCi0gICAgICAgIHJlZigpOyAvLyBCYWxhbmNlZCBieSBh
biBhZG9wdFJlZigpIGluIGRpc2tDYWNoZVRpbWVyRmlyZWQoKS4KLSAgICAgICAgbV9kaXNrQ2Fj
aGVUaW1lci5zdGFydE9uZVNob3QoMTApOwotICAgIH0KLSNlbmRpZiAvLyBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICAKICAgICBzY2hlZHVsZUNsZWFudXBPbk1h
aW5UaHJlYWQoKTsKIH0KQEAgLTM3MywxMiArMzQ1LDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoUmVzb3VyY2VIYW5kbGUqLCBDRkFycmF5UmVmKQog
I2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBOU0NhY2hlZFVS
TFJlc3BvbnNlKiByZXNwb25zZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGhhbmRs
ZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShyZXNwb25zZSk7Ci19Ci0KIHZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjp3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBjaGFyKiwgaW50KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCmluZGV4
IDg2NGJkM2QuLmU4MjM3MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1
bkxvb3AuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENG
Q2FjaGVkVVJMUmVzcG9uc2VSZWY7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJlc291
cmNlQnVmZmVyOwogY2xhc3MgUmVzb3VyY2VIYW5kbGU7CkBAIC05NSw2ICs5NywxMCBAQCBwdWJs
aWM6CiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3Jr
UmVzb3VyY2VMb2FkZXJNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlRGVjb2RlciYpOwogCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDkwCisgICAgc3RhdGljIHZvaWQgdHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbUNGVVJMQ2FjaGVk
UmVzcG9uc2UoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYsIENGQ2FjaGVkVVJMUmVzcG9uc2VS
ZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MqKTsKIApAQCAtMTEzLDggKzExOSw2IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gYm9vbCBzZW5kU3luY0Fib3J0aW5nT25GYWlsdXJlKGNvbnN0IFUmIG1lc3NhZ2Us
IGNvbnN0IHR5cGVuYW1lIFU6OlJlcGx5JiByZXBseSk7CiAgICAgdm9pZCBhYm9ydEluUHJvZ3Jl
c3NMb2FkKCk7CiAKLSAgICB2b2lkIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZvclJlc291cmNlKFNo
YXJlYWJsZVJlc291cmNlOjpIYW5kbGUmKTsKLQogICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5n
Q29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU+IG1faGFuZGxlOwogCkBAIC0xMjQsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICB1
aW50NjRfdCBtX2J5dGVzUmVjZWl2ZWQ7CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKLSAgICB2b2lkIGRpc2tDYWNoZVRpbWVyRmlyZWQoKTsKLSAgICBXZWJD
b3JlOjpSdW5Mb29wOjpUaW1lcjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IG1fZGlza0NhY2hlVGlt
ZXI7CisgICAgdm9pZCB0cnlHZXRTaGFyZWFibGVIYW5kbGVGb3JSZXNvdXJjZShTaGFyZWFibGVS
ZXNvdXJjZTo6SGFuZGxlJik7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGVNb25pdG9yLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvRGlza0NhY2hlTW9uaXRvci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjUzNmZjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvRGlza0NhY2hlTW9uaXRvci5oCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpc2tDYWNoZU1vbml0b3JfaAorI2RlZmluZSBEaXNr
Q2FjaGVNb25pdG9yX2gKKworI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVj
dCBfQ0ZDYWNoZWRVUkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworY2xh
c3MgTmV0d29ya1Jlc291cmNlTG9hZGVyOworCitjbGFzcyBEaXNrQ2FjaGVNb25pdG9yIDogcHVi
bGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXI8RGlza0NhY2hlTW9uaXRvcj4geworcHVibGljOgor
ICAgIC8vIFVzZWQgYnkgTWVzc2FnZVNlbmRlci4KKyAgICBDb3JlSVBDOjpDb25uZWN0aW9uKiBj
b25uZWN0aW9uKCkgY29uc3Q7CisgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICAKKyAgICBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29u
bmVjdGlvblRvV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgdm9pZCBtb25pdG9yRmlsZUJhY2tpbmdTdG9yZUNyZWF0aW9uKENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYsIE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOworCisgICAgRGlza0Nh
Y2hlTW9uaXRvcihDRkNhY2hlZFVSTFJlc3BvbnNlUmVmLCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIq
KTsKKyAgICAKKyAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29u
bmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXNv
dXJjZVJlcXVlc3Q7Cit9OworCit2b2lkIG1vbml0b3JGaWxlQmFja2luZ1N0b3JlQ3JlYXRpb24o
Q0ZDYWNoZWRVUkxSZXNwb25zZVJlZiwgTmV0d29ya1Jlc291cmNlTG9hZGVyKik7CisKK30gLy8g
bmFtc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBEaXNrQ2FjaGVNb25pdG9yX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGVNb25pdG9yLm1t
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL0Rpc2tDYWNoZU1vbml0b3IubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmMDdkNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9EaXNrQ2FjaGVNb25pdG9y
Lm1tCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJEaXNrQ2FjaGVNb25pdG9yLmgiCisKKyNpbXBvcnQgIk5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdl
cy5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0IDxXZWJDb3Jl
L1NvZnRMaW5raW5nLmg+CisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwOTAKKworU09GVF9MSU5LX0ZSQU1FV09SSyhDRk5ldHdvcmspCisKK3R5cGVkZWYgdm9pZCAo
XkNGQ2FjaGVkVVJMUmVzcG9uc2VDYWxsQmFja0Jsb2NrKShDRkNhY2hlZFVSTFJlc3BvbnNlUmVm
KTsKK3N0YXRpYyB2b2lkIENGQ2FjaGVkVVJMUmVzcG9uc2VTZXRCZWNhbWVGaWxlQmFja2VkQ2Fs
bEJhY2tCbG9jayhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBDRkNhY2hlZFVSTFJl
c3BvbnNlQ2FsbEJhY2tCbG9jayBjYWxsYmFjaywgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZSkKK3sK
KyAgICB0eXBlZGVmIHZvaWQgKCpTZXRDYWxsYmFja0Z1bmN0aW9uVHlwZSkoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZiwgQ0ZDYWNoZWRVUkxSZXNwb25zZUNhbGxCYWNrQmxvY2ssIGRpc3BhdGNoX3F1
ZXVlX3QpOworICAgIHN0YXRpYyBTZXRDYWxsYmFja0Z1bmN0aW9uVHlwZSBzb2Z0UmVzcG9uc2VT
ZXRCZWNhbWVGaWxlQmFja2VkQ2FsbEJhY2tCbG9jayA9IChTZXRDYWxsYmFja0Z1bmN0aW9uVHlw
ZSkgZGxzeW0oQ0ZOZXR3b3JrTGlicmFyeSgpLCAiX0NGQ2FjaGVkVVJMUmVzcG9uc2VTZXRCZWNh
bWVGaWxlQmFja2VkQ2FsbEJhY2tCbG9jayIpOworICAgIGlmIChzb2Z0UmVzcG9uc2VTZXRCZWNh
bWVGaWxlQmFja2VkQ2FsbEJhY2tCbG9jaykKKyAgICAgICAgcmV0dXJuIHNvZnRSZXNwb25zZVNl
dEJlY2FtZUZpbGVCYWNrZWRDYWxsQmFja0Jsb2NrKHJlc3BvbnNlLCBjYWxsYmFjaywgcXVldWUp
OworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
Ky8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHdlJ2xsIHRyeSB0byB3YWl0IGZvciBh
IHJlc291cmNlIHRvIGJlIGRpc2sgY2FjaGVkIGJlZm9yZSB3ZSBmb3JnZXQgdGhlIHJlcXVlc3Qu
CitzdGF0aWMgY29uc3QgZG91YmxlIGRpc2tDYWNoZU1vbml0b3JUaW1lb3V0ID0gMC4yOworCit2
b2lkIG1vbml0b3JGaWxlQmFja2luZ1N0b3JlQ3JlYXRpb24oQ0ZDYWNoZWRVUkxSZXNwb25zZVJl
ZiBjYWNoZWRSZXNwb25zZSwgTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIpCit7CisgICAg
aWYgKCFjYWNoZWRSZXNwb25zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxvYWRl
cik7CisKKyAgICBuZXcgRGlza0NhY2hlTW9uaXRvcihjYWNoZWRSZXNwb25zZSwgbG9hZGVyKTsg
Ly8gQmFsYW5jZWQgYnkgYWRvcHRQdHIgaW4gdGhlIGJsb2NrcyBzZXR1cCBpbiB0aGUgY29uc3Ry
dWN0b3IsIG9uZSBvZiB3aGljaCBpcyBndWFyYW50ZWVkIHRvIHJ1bi4KK30KKworRGlza0NhY2hl
TW9uaXRvcjo6RGlza0NhY2hlTW9uaXRvcihDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNhY2hlZFJl
c3BvbnNlLCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKKyAgICA6IG1fY29ubmVjdGlv
blRvV2ViUHJvY2Vzcyhsb2FkZXItPmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSkKKyAgICAsIG1f
cmVzb3VyY2VSZXF1ZXN0KGxvYWRlci0+cmVxdWVzdCgpKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICAvLyBTZXQgdXAgYSBkZWxheWVkIGNhbGxiYWNrIHRvIGNhbmNlbCB0
aGlzIG1vbml0b3IgaWYgdGhlIHJlc291cmNlIGhhc24ndCBiZWVuIGNhY2hlZCB5ZXQuCisgICAg
X19ibG9jayBEaXNrQ2FjaGVNb25pdG9yKiByYXdNb25pdG9yID0gdGhpczsKKworICAgIGRpc3Bh
dGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIE5TRUNfUEVSX1NFQyAq
IGRpc2tDYWNoZU1vbml0b3JUaW1lb3V0KSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsK
KyAgICAgICAgYWRvcHRQdHIocmF3TW9uaXRvcik7IC8vIEJhbGFuY2VkIGJ5IGBuZXcgRGlza0Nh
Y2hlTW9uaXRvcmAgaW4gbW9uaXRvckZpbGVCYWNraW5nU3RvcmVDcmVhdGlvbi4KKyAgICAgICAg
cmF3TW9uaXRvciA9IDA7CisgICAgfSk7CisKKyAgICAvLyBTZXQgdXAgdGhlIGRpc2sgY2FjaGlu
ZyBjYWxsYmFjayB0byBjcmVhdGUgdGhlIFNoYXJlYWJsZVJlc291cmNlIGFuZCBzZW5kIGl0IHRv
IHRoZSBXZWJQcm9jZXNzLgorICAgIENGQ2FjaGVkVVJMUmVzcG9uc2VDYWxsQmFja0Jsb2NrIGJs
b2NrID0gXihDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNhY2hlZFJlc3BvbnNlKQorICAgIHsKKyAg
ICAgICAgLy8gSWYgdGhlIG1vbml0b3IgaXNuJ3QgdGhlcmUgdGhlbiBpdCB0aW1lZCBvdXQgYmVm
b3JlIHRoaXMgcmVzb3VyY2Ugd2FzIGNhY2hlZCB0byBkaXNrLgorICAgICAgICBpZiAoIXJhd01v
bml0b3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgT3duUHRyPERpc2tDYWNoZU1v
bml0b3I+IG1vbml0b3IgPSBhZG9wdFB0cihyYXdNb25pdG9yKTsgLy8gQmFsYW5jZWQgYnkgYG5l
dyBEaXNrQ2FjaGVNb25pdG9yYCBpbiBtb25pdG9yRmlsZUJhY2tpbmdTdG9yZUNyZWF0aW9uLgor
ICAgICAgICByYXdNb25pdG9yID0gMDsKKyAgICAgICAgCisgICAgICAgIFNoYXJlYWJsZVJlc291
cmNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeUdl
dFNoYXJlYWJsZUhhbmRsZUZyb21DRlVSTENhY2hlZFJlc3BvbnNlKGhhbmRsZSwgY2FjaGVkUmVz
cG9uc2UpOworICAgICAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1vbml0b3ItPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbjo6RGlkQ2FjaGVSZXNvdXJjZShtb25pdG9yLT5yZXNvdXJjZVJlcXVlc3QoKSwgaGFuZGxl
KSk7CisgICAgfTsKKworICAgIENGQ2FjaGVkVVJMUmVzcG9uc2VTZXRCZWNhbWVGaWxlQmFja2Vk
Q2FsbEJhY2tCbG9jayhjYWNoZWRSZXNwb25zZSwgYmxvY2ssIGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCkpOworfQorCitDb3JlSVBDOjpDb25uZWN0aW9uKiBEaXNrQ2FjaGVNb25pdG9yOjpjb25u
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5j
b25uZWN0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXJNYWMubW0KaW5kZXggZDE1NGVlYS4uOGZmOGRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFj
Lm1tCkBAIC0yNiw4MSArMjYsODMgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTmV0
d29ya1Jlc291cmNlTG9hZGVyLmgiCiAKLSNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgot
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyTWVz
c2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0ICJEaXNr
Q2FjaGVNb25pdG9yLmgiCisjaW1wb3J0ICJTaGFyZWFibGVSZXNvdXJjZS5oIgorI2ltcG9ydCA8
V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAotdHlwZWRlZiBzdHJ1Y3QgX0NGVVJMQ2FjaGUqIENGVVJMQ2Fj
aGVSZWY7Ci10eXBlZGVmIHN0cnVjdCBfQ0ZDYWNoZWRVUkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9DRlVSTENhY2hlKiBDRlVSTENhY2hl
UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWY7CiBleHRlcm4gIkMiIENGVVJMQ2FjaGVSZWYgQ0ZVUkxDYWNoZUNvcHlT
aGFyZWRVUkxDYWNoZSgpOwogZXh0ZXJuICJDIiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIENGVVJM
Q2FjaGVDb3B5UmVzcG9uc2VGb3JSZXF1ZXN0KENGVVJMQ2FjaGVSZWYsIENGVVJMUmVxdWVzdFJl
Zik7Ci1leHRlcm4gIkMiIENGQXJyYXlSZWYgQ0ZDYWNoZWRVUkxSZXNwb25zZUNvcHlSZWNlaXZl
ckRhdGFBcnJheShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKTsKIAogU09GVF9MSU5LX0ZSQU1FV09S
SyhDRk5ldHdvcmspCi1zdGF0aWMgYm9vbCBDRlVSTENhY2hlSXNNZW1NYXBwZWREYXRhKENGVVJM
Q2FjaGVSZWYgY2FjaGUsIENGRGF0YVJlZiBkYXRhKQorc3RhdGljIENGRGF0YVJlZiBDRkNhY2hl
ZFVSTFJlc3BvbnNlR2V0TWVtTWFwcGVkRGF0YShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHJlc3Bv
bnNlKQogewotICAgIHN0YXRpYyBDRkJvb2xlYW5SZWYgKCpzb2Z0TGlua0lzQ2FjaGVNTUFQZWRE
YXRhKShDRlVSTENhY2hlUmVmIGNhY2hlLCBDRkRhdGFSZWYgZGF0YSkgPSAoQ0ZCb29sZWFuUmVm
ICgqKShDRlVSTENhY2hlUmVmIGNhY2hlLCBDRkRhdGFSZWYgZGF0YSkpIGRsc3ltKENGTmV0d29y
a0xpYnJhcnkoKSwgIl9DRlVSTENhY2hlSXNSZXNwb25zZURhdGFNZW1NYXBwZWQiKTsKKyAgICBz
dGF0aWMgQ0ZEYXRhUmVmICgqc29mdEdldE1lbU1hcHBlZERhdGEpKENGQ2FjaGVkVVJMUmVzcG9u
c2VSZWYpID0gKENGRGF0YVJlZiAoKikoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikpIGRsc3ltKENG
TmV0d29ya0xpYnJhcnkoKSwgIl9DRkNhY2hlZFVSTFJlc3BvbnNlR2V0TWVtTWFwcGVkRGF0YSIp
OwogICAgIAotICAgIGlmIChzb2Z0TGlua0lzQ2FjaGVNTUFQZWREYXRhKQotICAgICAgICByZXR1
cm4gc29mdExpbmtJc0NhY2hlTU1BUGVkRGF0YShjYWNoZSwgZGF0YSkgPT0ga0NGQm9vbGVhblRy
dWU7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzb2Z0R2V0TWVtTWFwcGVkRGF0YSkKKyAg
ICAgICAgcmV0dXJuIHNvZnRHZXRNZW1NYXBwZWREYXRhKHJlc3BvbnNlKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KICNlbmRpZgogCitAaW50ZXJmYWNlIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKE5TQ2Fj
aGVkVVJMUmVzcG9uc2VJbnRlcm5hbHMpCistKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpX0NGQ2Fj
aGVkVVJMUmVzcG9uc2U7CitAZW5kCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UoU2hhcmVh
YmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZGxlKQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA5MAordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeUdldFNoYXJl
YWJsZUhhbmRsZUZyb21DRlVSTENhY2hlZFJlc3BvbnNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5k
bGUmIGhhbmRsZSwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjYWNoZWRSZXNwb25zZSkKIHsKLSNp
ZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAotICAgIHJldHVybjsKLSNl
bHNlCisgICAgQ0ZEYXRhUmVmIGRhdGEgPSBDRkNhY2hlZFVSTFJlc3BvbnNlR2V0TWVtTWFwcGVk
RGF0YShjYWNoZWRSZXNwb25zZSk7CiAKLSAgICAvLyBDaGVjayB0aGUgY2FjaGUgdG8gc2VlIGlm
IHdlIGNhbiB2bV9jb3B5IGEgZmlsZXN5c3RlbS1iYWNrZWQgcmVzb3VyY2UgYnVmZmVyLiAgIAot
ICAgIFJldGFpblB0cjxDRlVSTENhY2hlUmVmPiBjYWNoZSA9IGFkb3B0Q0YoQ0ZVUkxDYWNoZUNv
cHlTaGFyZWRVUkxDYWNoZSgpKTsKLSAgICBpZiAoIWNhY2hlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0ID0gcmVxdWVzdCgpLmNmVVJMUmVxdWVzdChE
b05vdFVwZGF0ZUhUVFBCb2R5KTsKLSAgICBSZXRhaW5QdHI8Q0ZDYWNoZWRVUkxSZXNwb25zZVJl
Zj4gY2FjaGVkUmVzcG9uc2UgPSBhZG9wdENGKENGVVJMQ2FjaGVDb3B5UmVzcG9uc2VGb3JSZXF1
ZXN0KGNhY2hlLmdldCgpLCBjZlJlcXVlc3QpKTsKLSAgICBpZiAoIWNhY2hlZFJlc3BvbnNlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBhZG9w
dENGKENGQ2FjaGVkVVJMUmVzcG9uc2VDb3B5UmVjZWl2ZXJEYXRhQXJyYXkoY2FjaGVkUmVzcG9u
c2UuZ2V0KCkpKTsKLSAgICBpZiAoIWFycmF5IHx8IENGQXJyYXlHZXRDb3VudChhcnJheS5nZXQo
KSkgIT0gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENGVHlwZVJlZiB2YWx1ZSA9IENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXJyYXkuZ2V0KCksIDApOwotICAgIGlmIChDRkdldFR5cGVJ
RCh2YWx1ZSkgIT0gQ0ZEYXRhR2V0VHlwZUlEKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDRkRh
dGFSZWYgZGF0YSA9IHN0YXRpY19jYXN0PENGRGF0YVJlZj4odmFsdWUpOwotCi0gICAgLy8gV2Ug
b25seSBjYXJlIGFib3V0IHRoZSB2bV9jb3B5IG9wdGltaXphdGlvbiBmb3IgcmVzb3VyY2VzIHRo
YXQgc2hvdWxkIGJlIGZpbGUgYmFja2VkLgotICAgIC8vIEZJWE1FOiBJZiB0aGVyZSB3ZXJlIGFu
IEFQSSBhdmFpbGFibGUgdG8gZ3VhcmFudGVlIHRoYXQgYSBidWZmZXIgd2FzIGZpbGUgYmFja2Vk
LCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAgaWYgKENGRGF0YUdldExlbmd0aChkYXRhKSA8
IChDRkluZGV4KWZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBpZiAoIUNGVVJMQ2FjaGVJc01lbU1hcHBlZERhdGEoY2FjaGUuZ2V0KCks
IGRhdGEpKQorICAgIGlmICghZGF0YSB8fCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkgPCAoQ0ZJbmRl
eClOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9y
eSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlRnJvbVZNQnVmZmVyKCh2b2lkKilDRkRhdGFHZXRCeXRl
UHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpOwogICAgIGlmICghc2hhcmVkTWVtb3J5
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBWTUNvcGllZCBzaGFyZWQg
bWVtb3J5IGZvciBjYWNoZWQgcmVzb3VyY2UuIik7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGNyZWF0ZSBWTSBzaGFyZWQgbWVtb3J5IGZvciBjYWNoZWQgcmVzb3VyY2UuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSA9IHNoYXJlZE1lbW9yeS0+c2l6
ZSgpOwogICAgIFJlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBTaGFyZWFibGVS
ZXNvdXJjZTo6Y3JlYXRlKHNoYXJlZE1lbW9yeS5yZWxlYXNlKCksIDAsIHNpemUpOwogICAgIHJl
c291cmNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKLSNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgMTA5MAogfQogCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRs
ZSYgaGFuZGxlKQoreworICAgIC8vIENoZWNrIHRoZSBjYWNoZSB0byBzZWUgaWYgd2UgY2FuIHZt
X2NvcHkgYSBmaWxlc3lzdGVtLWJhY2tlZCByZXNvdXJjZSBidWZmZXIuCisgICAgUmV0YWluUHRy
PENGVVJMQ2FjaGVSZWY+IGNhY2hlKEFkb3B0Q0YsIENGVVJMQ2FjaGVDb3B5U2hhcmVkVVJMQ2Fj
aGUoKSk7IAorICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIENGVVJMUmVx
dWVzdFJlZiBjZlJlcXVlc3QgPSByZXF1ZXN0KCkuY2ZVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRU
UEJvZHkpOworICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJlc3BvbnNlUmVmPiBjYWNoZWRSZXNw
b25zZSA9IGFkb3B0Q0YoQ0ZVUkxDYWNoZUNvcHlSZXNwb25zZUZvclJlcXVlc3QoY2FjaGUuZ2V0
KCksIGNmUmVxdWVzdCkpOworICAgIGlmICghY2FjaGVkUmVzcG9uc2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZyb21DRlVSTENhY2hlZFJlc3BvbnNlKGhh
bmRsZSwgY2FjaGVkUmVzcG9uc2UuZ2V0KCkpOworfQorI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorCiBzaXplX3QgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpCiB7CiAgICAgcmV0dXJuIFNoYXJlZE1l
bW9yeTo6c3lzdGVtUGFnZVNpemUoKTsKIH0KIAordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3Bv
bnNlICpuc1Jlc3BvbnNlKQoreworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAorICAgIGlmIChtX2J5dGVzUmVjZWl2ZWQgPj0gZmlsZUJhY2tlZFJlc291cmNlTWlu
aW11bVNpemUoKSkKKyAgICAgICAgbW9uaXRvckZpbGVCYWNraW5nU3RvcmVDcmVhdGlvbihbbnNS
ZXNwb25zZSBfQ0ZDYWNoZWRVUkxSZXNwb25zZV0sIHRoaXMpOworI2VuZGlmCisgICAgbV9oYW5k
bGUtPmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UobnNSZXNwb25zZSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDU2ZjYxYTEuLmI2YWE4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2Nyw2ICs0NjcsOCBA
QAogCQk1MTYzMTk5MjE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxOTkx
MTYyODk4MEEwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tICovOyB9OwogCQk1
MTYzMTk5NDE2Mjg5QTYwMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0M5
MzQxNjI4MDY0ODAwMzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJNTE2MzE5OTUxNjI4OUE2MzAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUND
OTM1MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggKi87IH07CisJ
CTUxNjdFRUEwMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY3RUU5RTE3MDM3N0JGMDA3
NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5oICovOyB9OworCQk1MTY3RUVBMTE3MDM3N0JGMDA3
NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjdFRTlGMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVN
b25pdG9yLm1tICovOyB9OwogCQk1MTZBNEE1RDEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkE0QTVC
MTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovOyB9OwogCQk1MTc5NTU2NzE2Mjg3NkNC
MDBGQTQzQjYgLyogTmV0d29ya1Byb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE4QTYxNTE2MjdGM0Y5MDAwRDkwRTkgLyogTmV0d29y
a1Byb2Nlc3NNYWMubW0gKi87IH07CiAJCTUxNzk1NTY4MTYyODc2Q0YwMEZBNDNCNiAvKiBOZXR3
b3JrUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTBDQzdERjE2MTM4RTI5MDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuY3BwICovOyB9
OwpAQCAtMTg3Miw2ICsxODc0LDggQEAKIAkJNTE1NzhCODIxMjA5RUNFRjAwQTM3QzRBIC8qIFdl
YkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwQkZFMDEzMzgxREY5MDA5MTg5OTkgLyogTG9n
Z2luZy5tYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2dn
aW5nLm1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MzE5OTExNjI4OTgw
QTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tOyBwYXRoID0g
bWFjL05ldHdvcmtQcm9jZXNzUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxNjdFRTlFMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc2tDYWNoZU1vbml0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2N0VFOUYxNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNo
ZU1vbml0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEaXNr
Q2FjaGVNb25pdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZBNEE1QjEy
MEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3QTMzQjMx
MzBCMzA4QzAwRjgwQ0I1IC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0EzM0I0MTMwQjMwOEMwMEY4MENC
NSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTM1MTgsNiArMzUyMiw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUUxN0FFMkMxMTZCOUMxMzkwMDFDNDJGMSAvKiBjb20uYXBwbGUuV2Vi
S2l0Lk5ldHdvcmtQcm9jZXNzLnNiLmluICovLAorCQkJCTUxNjdFRTlFMTcwMzc3QkYwMDc2ODFD
QSAvKiBEaXNrQ2FjaGVNb25pdG9yLmggKi8sCisJCQkJNTE2N0VFOUYxNzAzNzdCRjAwNzY4MUNB
IC8qIERpc2tDYWNoZU1vbml0b3IubW0gKi8sCiAJCQkJNTFBOEE2MTUxNjI3RjNGOTAwMEQ5MEU5
IC8qIE5ldHdvcmtQcm9jZXNzTWFjLm1tICovLAogCQkJCTUxMkMwNjhGMTYzOTBFNjkwMEFCQjkx
MSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tICovLAogCQkJCTUxRTNCNjdF
MTZGMjY2QjMwMDk5NjhEQyAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8sCkBAIC01
NDkwLDYgKzU0OTYsNyBAQAogCQkJCTUxMkY1OEY2MTJBODhBNTQwMDYyOTUzMCAvKiBXS0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNThGODEyQTg4QTU0
MDA2Mjk1MzAgLyogV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNjQ2QzFCMTFERDM5OUYwMDY0NTVCMCAvKiBXS0JhY2tGb3J3YXJkTGlzdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTE2N0VFQTAxNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNo
ZU1vbml0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjQ2QzFEMTFERDM5OUYwMDY0NTVCMCAv
KiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRERCMzE3MTI0
RUJEMTMwMDQ4RDEzQyAvKiBXS0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkFBQzczMTQ0
RTYxOUUwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjgxMCw2ICs2ODE3LDcgQEAKIAkJCQlFMTM0RjAxQTEyRUE1RDk5MDA0RUM1OEQg
LyogV0tQcmludGluZ1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0JBQUNFQzE0NTIyNUUz
MDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThG
QjEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQcm90ZWN0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNTE2N0VFQTExNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0gaW4g
U291cmNlcyAqLywKIAkJCQkzNzk0ODQwODE1MEM0Qjk3MDBFNTJDRTkgLyogV0tSZW5kZXJMYXll
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzYwODgyMjE1MDQxNEY3MDBGQzgyQzcgLyogV0tS
ZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMzNjc2M0ExMzBDOTlEQzAwNkM5
REUyIC8qIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="217263"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>