<?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>49791</bug_id>
          
          <creation_ts>2010-11-19 02:50:20 -0800</creation_ts>
          <short_desc>[GTK] Implement SharedMemory for WebKit2</short_desc>
          <delta_ts>2011-04-07 15:11:22 -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>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52805</blocked>
    
    <blocked>57234</blocked>
    
    <blocked>58030</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Amruth Raj">amruthraj</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>joone</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>kimmo.t.kinnunen</cc>
    
    <cc>koivisto</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>sam</cc>
    
    <cc>s.mathur</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>311331</commentid>
    <comment_count>0</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-11-19 02:50:20 -0800</bug_when>
    <thetext>SharedMemory implementation for WebKit2 GTK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311339</commentid>
    <comment_count>1</comment_count>
      <attachid>74365</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-11-19 03:25:34 -0800</bug_when>
    <thetext>Created attachment 74365
Implements shared memory for GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330753</commentid>
    <comment_count>2</comment_count>
      <attachid>78229</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-07 07:13:26 -0800</bug_when>
    <thetext>Created attachment 78229
Shared Memory Implementation on latest revision</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330913</commentid>
    <comment_count>3</comment_count>
      <attachid>78229</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-07 12:16:10 -0800</bug_when>
    <thetext>Comment on attachment 78229
Shared Memory Implementation on latest revision

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

Very nice start!

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:81
&gt; +    : m_fileName()

No need to use an empty initializer here.

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:121
&gt; +    char fileName[] = &quot;/tmp/WK2SharedMemoryXXXXXX&quot;;
&gt; +    if (mkstemp(fileName) == -1) // create a unique name
&gt; +        return 0;

Please use GLib functions to do this.

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:126
&gt; +    RefPtr&lt;SharedMemory&gt; sharedMemory(adoptRef(new SharedMemory));
&gt; +    sharedMemory-&gt;m_size = size;
&gt; +    sharedMemory-&gt;m_data = createShareableMemory(fileName, size);
&gt; +    sharedMemory-&gt;m_fileName = String(fileName);

I would much prefer these to be arguments to the constructor, if possible. It&apos;s an error here to use cast a char* to a String. You should use filenameToString (from FileSystemGtk) or use a CString a m_fileName, if possible.

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:149
&gt; +    int mode = memoryProtection(protection);

You only use this once, so no need to cache it in &quot;mode&quot;

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:150
&gt; +    char* fileName = const_cast&lt;char*&gt;(handle.m_fileName.utf8().data());

You cannot assume UTF-8 here. See above.

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:155
&gt; +    RefPtr&lt;SharedMemory&gt; sharedMemory(adoptRef(new SharedMemory));
&gt; +    sharedMemory-&gt;m_size = size;
&gt; +    sharedMemory-&gt;m_data = obtainSharedMemory(fileName, size, mode);

Again, I think it&apos;s better to pass these as arguments to the constructor.

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:158
&gt; +    handle.m_fileName = String();

Why is this necessary? It should probably have a comment explaining it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332316</commentid>
    <comment_count>4</comment_count>
      <attachid>78527</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-11 07:18:24 -0800</bug_when>
    <thetext>Created attachment 78527
Addressed the review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332317</commentid>
    <comment_count>5</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-11 07:21:54 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 78229 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78229&amp;action=review
&gt; 
&gt; Very nice start!
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:81
&gt; &gt; +    : m_fileName()
&gt; 
&gt; No need to use an empty initializer here.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:121
&gt; &gt; +    char fileName[] = &quot;/tmp/WK2SharedMemoryXXXXXX&quot;;
&gt; &gt; +    if (mkstemp(fileName) == -1) // create a unique name
&gt; &gt; +        return 0;
&gt; 
&gt; Please use GLib functions to do this.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:126
&gt; &gt; +    RefPtr&lt;SharedMemory&gt; sharedMemory(adoptRef(new SharedMemory));
&gt; &gt; +    sharedMemory-&gt;m_size = size;
&gt; &gt; +    sharedMemory-&gt;m_data = createShareableMemory(fileName, size);
&gt; &gt; +    sharedMemory-&gt;m_fileName = String(fileName);
&gt; 
&gt; I would much prefer these to be arguments to the constructor, if possible. It&apos;s an error here to use cast a char* to a String. You should use filenameToString (from FileSystemGtk) or use a CString a m_fileName, if possible.
The port independent SharedMemory class doesn&apos;t define any constructor. Hence, I took this approach. Other ports implement the same way. 
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:149
&gt; &gt; +    int mode = memoryProtection(protection);
&gt; 
&gt; You only use this once, so no need to cache it in &quot;mode&quot;
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:150
&gt; &gt; +    char* fileName = const_cast&lt;char*&gt;(handle.m_fileName.utf8().data());
&gt; 
&gt; You cannot assume UTF-8 here. See above.
Done. I used fileSystemRepresentation over here.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:155
&gt; &gt; +    RefPtr&lt;SharedMemory&gt; sharedMemory(adoptRef(new SharedMemory));
&gt; &gt; +    sharedMemory-&gt;m_size = size;
&gt; &gt; +    sharedMemory-&gt;m_data = obtainSharedMemory(fileName, size, mode);
&gt; 
&gt; Again, I think it&apos;s better to pass these as arguments to the constructor.
Same as above.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:158
&gt; &gt; +    handle.m_fileName = String();
&gt; 
&gt; Why is this necessary? It should probably have a comment explaining it.
Removed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332407</commentid>
    <comment_count>6</comment_count>
      <attachid>78527</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-11 09:45:23 -0800</bug_when>
    <thetext>Comment on attachment 78527
Addressed the review comments

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

Looks good, but consider using GLib functions. If it&apos;s not possible, I&apos;ll re-review.

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:55
&gt; +    if ((lseek(fd, size - 1, SEEK_SET) == -1) || (write(fd, &quot;&quot;, 1) != 1)) {
&gt; +        close(fd);
&gt; +        return 0;
&gt; +    }

Is this just verifying that the file is writable?

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:61
&gt; +    void* mappedMemory = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
&gt; +    if (mappedMemory == MAP_FAILED) {
&gt; +        close(fd);
&gt; +        return 0;
&gt; +    }

Is it possible to use GMappedFile here? I think it makes sense to use GLib function wherever possible. This will make this function platform independent and also prevent the need for the above code.

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:77
&gt; +    void* mappedMemory = mmap(0, size, mode, MAP_SHARED, fd, 0);
&gt; +    if (mappedMemory == MAP_FAILED) {
&gt; +        close(fd);
&gt; +        return 0;
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333096</commentid>
    <comment_count>7</comment_count>
      <attachid>78694</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-12 08:22:15 -0800</bug_when>
    <thetext>Created attachment 78694
Used GLib API for mmap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333100</commentid>
    <comment_count>8</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-12 08:47:09 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 78527 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78527&amp;action=review
&gt; 
&gt; Looks good, but consider using GLib functions. If it&apos;s not possible, I&apos;ll re-review.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:55
&gt; &gt; +    if ((lseek(fd, size - 1, SEEK_SET) == -1) || (write(fd, &quot;&quot;, 1) != 1)) {
&gt; &gt; +        close(fd);
&gt; &gt; +        return 0;
&gt; &gt; +    }
&gt; 
&gt; Is this just verifying that the file is writable?
It sets the size of the file by moving size bytes and writing a character at the end.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:61
&gt; &gt; +    void* mappedMemory = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
&gt; &gt; +    if (mappedMemory == MAP_FAILED) {
&gt; &gt; +        close(fd);
&gt; &gt; +        return 0;
&gt; &gt; +    }
&gt; 
&gt; Is it possible to use GMappedFile here? I think it makes sense to use GLib function wherever possible. This will make this function platform independent and also prevent the need for the above code.
Done. Used GMappedFile with the new patch.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:77
&gt; &gt; +    void* mappedMemory = mmap(0, size, mode, MAP_SHARED, fd, 0);
&gt; &gt; +    if (mappedMemory == MAP_FAILED) {
&gt; &gt; +        close(fd);
&gt; &gt; +        return 0;
&gt; &gt; +    }
&gt; 
&gt; Ditto.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333619</commentid>
    <comment_count>9</comment_count>
      <attachid>78694</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-13 03:10:32 -0800</bug_when>
    <thetext>Comment on attachment 78694
Used GLib API for mmap

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

Unofficial review

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:48
&gt; +    GIOChannel* ioChannel = g_io_channel_new_file(fileName, &quot;w+&quot;, NULL);
&gt; +    if (!ioChannel) 
&gt; +        return 0;

Instead of using GIOChannel, it might be easier to use gio api and use g_seekable_truncate(). It might be something like:

GRefPtr&lt;GFile&gt; tmpFile = g_file_new_for_path(fileName);
GRefPtr&lt;GFileIOStream&gt; fileStream = g_file_open_readwrite(tmpFile.get(), 0, 0); // You might want to use a GError to handle errors here
g_seekable_truncate (G_SEEKABLE (fileStream.get()), size, 0, 0); // You might want to use a GError to handle errors here
g_io_stream_close(G_IO_STREAM(fileStream.get()), 0, 0); // You might want to use a GError to handle errors here

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:65
&gt; +    GMappedFile* mappedFile = g_mapped_file_new(fileName, TRUE, NULL);
&gt; +    if (!mappedFile)
&gt; +        return 0;

When g_mapped_file_new() fails it returns NULL, so you can simply return g_mapped_file_new(fileName, TRUE, 0);

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:74
&gt; +    GMappedFile* mappedFile = g_mapped_file_new(fileName, writable, NULL);
&gt; +    if (!mappedFile)
&gt; +        return 0;

The same here, I think we don&apos;t even need this method, we can just use g_mapped_file_new() directly

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:117


This is not portable, use g_get_tmp_dir()

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:118
&gt; +    if (g_mkstemp(fileName) == -1) // create a unique name

Note that g_mkstemp not only creates a unique name it also opens the file and returns the fd. The file should closed with close (fd).

&gt; WebKit2/Platform/gtk/SharedMemoryGtk.cpp:162
&gt; +    g_mapped_file_unref(m_mappedFile);

We should probably add support for GMappedFile file to GRefPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338124</commentid>
    <comment_count>10</comment_count>
      <attachid>79755</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-21 10:03:14 -0800</bug_when>
    <thetext>Created attachment 79755
Reverted back to mmap implementation

As discussed on IRC, modifications done to the GMappedFile buffer are private to the process which does the modifications. They can&apos;t be accessed by another process. So, I reverted back to the mmap implementation. Additionally, usage of g_get_tmp_dir() and closing the fd returned by g_mkstemp are addressed with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338179</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-21 11:18:19 -0800</bug_when>
    <thetext>Just a heads-up. Our new Qt implementation is in reality just a UNIX implementation and we will probably use the Win implementation on Windows and the Mac one on Mac OS X and turn the Qt one into a general UNIX one, which could be used by you as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338685</commentid>
    <comment_count>12</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-23 06:10:58 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Just a heads-up. Our new Qt implementation is in reality just a UNIX implementation and we will probably use the Win implementation on Windows and the Mac one on Mac OS X and turn the Qt one into a general UNIX one, which could be used by you as well.

You can find it here: https://bugs.webkit.org/show_bug.cgi?id=51984</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338709</commentid>
    <comment_count>13</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-23 11:08:52 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Just a heads-up. Our new Qt implementation is in reality just a UNIX implementation and we will probably use the Win implementation on Windows and the Mac one on Mac OS X and turn the Qt one into a general UNIX one, which could be used by you as well.
Kenneth,
As I see last patch of https://bugs.webkit.org/show_bug.cgi?id=51984, the patch which you approved r=me, the UNIX implementation was still present in SharedMemoryQt.cpp. Is there any patch or plan of moving that UNIX implementation outside? If yes, can you please share some more details?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338746</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-23 14:05:01 -0800</bug_when>
    <thetext>&gt; Kenneth,
&gt; As I see last patch of https://bugs.webkit.org/show_bug.cgi?id=51984, the patch which you approved r=me, the UNIX implementation was still present in SharedMemoryQt.cpp. Is there any patch or plan of moving that UNIX implementation outside? If yes, can you please share some more details?

Yes, I talked to Kimmo, and he said that it should be little work doing so. I cc&apos;ed him to this bug report, so he might comment on it tomorrow. We might land the patch as it is, and then to the renaming/moving as another step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338875</commentid>
    <comment_count>15</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-01-24 00:31:04 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; Just a heads-up. Our new Qt implementation is in reality just a UNIX implementation 

&gt; Is there any patch or plan of moving that UNIX implementation outside? If yes, can you please share some more details?


So the implementation in bug 51984 can be modified to be totally Linux -only by doing (for example) following:
 - Don&apos;t use QThread for the work queue mainloop, rather use pthreads instantiate the work queue thread
 - Use the ConnectionQt::readyReadHandler as the work queue mainloop
 - Use select to poll communication socket in the workqueue mainloop
 - Use additional fd to signal that mainloop should run scheduled work item instead of hanging in select
 - Use mutexes while appending tasks to work queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338898</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-24 01:50:31 -0800</bug_when>
    <thetext>
&gt; 
&gt; So the implementation in bug 51984 can be modified to be totally Linux -only by doing (for example) following:
&gt;  - Don&apos;t use QThread for the work queue mainloop, rather use pthreads instantiate the work queue thread

It might be possible to use the thread abstraction from WTF as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345697</commentid>
    <comment_count>17</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-04 12:37:14 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; Just a heads-up. Our new Qt implementation is in reality just a UNIX implementation 
&gt; 
&gt; &gt; Is there any patch or plan of moving that UNIX implementation outside? If yes, can you please share some more details?
&gt; 
&gt; 
&gt; So the implementation in bug 51984 can be modified to be totally Linux -only by doing (for example) following:
&gt;  - Don&apos;t use QThread for the work queue mainloop, rather use pthreads instantiate the work queue thread
&gt;  - Use the ConnectionQt::readyReadHandler as the work queue mainloop
&gt;  - Use select to poll communication socket in the workqueue mainloop
&gt;  - Use additional fd to signal that mainloop should run scheduled work item instead of hanging in select
&gt;  - Use mutexes while appending tasks to work queue

Are you working on this? I have Amruth shared memory patch working with gtk and I was wondering if it made sense to try to land it or wait for this, or help implementing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346066</commentid>
    <comment_count>18</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-02-04 23:05:30 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; So the implementation in bug 51984 can be modified to be totally Linux -only by doing (for example) following:
&gt; &gt;  - Don&apos;t use QThread for the work queue mainloop, rather use pthreads instantiate the work queue thread
&gt; &gt;  - Use the ConnectionQt::readyReadHandler as the work queue mainloop
&gt; &gt;  - Use select to poll communication socket in the workqueue mainloop
&gt; &gt;  - Use additional fd to signal that mainloop should run scheduled work item instead of hanging in select
&gt; &gt;  - Use mutexes while appending tasks to work queue
&gt; 
&gt; Are you working on this? I have Amruth shared memory patch working with gtk and I was wondering if it made sense to try to land it or wait for this, or help implementing it.

I&apos;m not sure who you&apos;re asking, I at least am not working on this at the moment..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346098</commentid>
    <comment_count>19</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-05 02:47:06 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt;
&gt; [...]
&gt;
&gt; &gt; Are you working on this? I have Amruth shared memory patch working with gtk and I was wondering if it made sense to try to land it or wait for this, or help implementing it.
&gt; 
&gt; I&apos;m not sure who you&apos;re asking, I at least am not working on this at the moment..

Yep, it was you and Amruth, thanks for commenting. Kphrane told me yesterday in the IRC that Amruth is working on it.

Last days I updated all the Minibrowser patches (bug 52805) to compile and work with current HEAD and with gtk2 and gtk3 (I used sharedmemory for gtk3 to avoid gdkpixmaps), so my plan would be to upload all of them with all these changes considering this one is solved (until we know how long it will take to finish the unix solution). With all these patches uploaded we could start working in the gtk webkit2 more easily without blocking, Does that sound good to everybody?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346134</commentid>
    <comment_count>20</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-02-05 05:54:25 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #17)
&gt; &gt;
&gt; &gt; [...]
&gt; &gt;
&gt; &gt; &gt; Are you working on this? I have Amruth shared memory patch working with gtk and I was wondering if it made sense to try to land it or wait for this, or help implementing it.
&gt; &gt; 
&gt; &gt; I&apos;m not sure who you&apos;re asking, I at least am not working on this at the moment..
&gt; 
&gt; Yep, it was you and Amruth, thanks for commenting. Kphrane told me yesterday in the IRC that Amruth is working on it.
&gt; 
&gt; Last days I updated all the Minibrowser patches (bug 52805) to compile and work with current HEAD and with gtk2 and gtk3 (I used sharedmemory for gtk3 to avoid gdkpixmaps), so my plan would be to upload all of them with all these changes considering this one is solved (until we know how long it will take to finish the unix solution). With all these patches uploaded we could start working in the gtk webkit2 more easily without blocking, Does that sound good to everybody?

This sounds great. The basic implementation that I&apos;ve put up here works, but we definitely need to address the drawbacks mentioned in bug 51984, like passing fd&apos;s instead of filenames etc. This needs a good amount of code change for files that are already checked-in as well(for eg. Connection class, ProcessLauncher class etc.). 
Now that you have a patch based on HEAD, it&apos;s better we go ahead with all these. Meanwhile I&apos;ll create a separate bug for making the patch at 51984 generic and get it accepted by reviewers from both QT and GTK.
I&apos;m glad that you&apos;ve retained the GdkPixmap based solution for GTK2 ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346490</commentid>
    <comment_count>21</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-06 23:45:52 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt;
&gt; [...]
&gt;
&gt; I&apos;m glad that you&apos;ve retained the GdkPixmap based solution for GTK2 ;)

I didn&apos;t I&apos;m sorry :), it added a lot of cruft to the code (with ifdef&apos;s) when we can have just one solution for both versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349877</commentid>
    <comment_count>22</comment_count>
      <attachid>82156</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-11 11:35:43 -0800</bug_when>
    <thetext>Created attachment 82156
Reference patch

Just for reference this is the patch I&apos;m using for testing the other patches, I did not review it, just little modifications. I upload it here so other people can test the other patches meanwhile Amruth finishes the unix solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363290</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-07 03:41:19 -0800</bug_when>
    <thetext>Amruth do you have any new version of this patch already?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363458</commentid>
    <comment_count>24</comment_count>
      <attachid>84965</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-03-07 11:52:53 -0800</bug_when>
    <thetext>Created attachment 84965
Shared Memory changes

Alexg,
I have a basic version of the patch which pulls in required changes from Qt. I verified these on r80210. There is still some cleanup pending and a few cases to be considered ie. to handle process termination, renaming the files and more testing. I wasn&apos;t able to do more cleanup as i am stuck with some other deliverables which are taking all my time.

By the way, I intentionally did not rename the files *Qt.cpp to *Unix.cpp so as to review the delta changes easily. Had I renamed them, it would have been difficult to review the changes since it would become a new file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364031</commentid>
    <comment_count>25</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-03-08 10:49:59 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Created an attachment (id=84965) [details]
&gt; Shared Memory changes
&gt; 
&gt; Alexg,
&gt; I have a basic version of the patch which pulls in required changes from Qt. I verified these on r80210. There is still some cleanup pending and a few cases to be considered ie. to handle process termination, renaming the files and more testing. I wasn&apos;t able to do more cleanup as i am stuck with some other deliverables which are taking all my time.
&gt; 
&gt; By the way, I intentionally did not rename the files *Qt.cpp to *Unix.cpp so as to review the delta changes easily. Had I renamed them, it would have been difficult to review the changes since it would become a new file.

Thanks for information Amruth :), I&apos;m going to test and check the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366417</commentid>
    <comment_count>26</comment_count>
      <attachid>85553</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-11 16:35:19 -0800</bug_when>
    <thetext>Created attachment 85553
Dusted up version of Amruth&apos;s patch with a ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366423</commentid>
    <comment_count>27</comment_count>
      <attachid>85555</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-11 16:49:13 -0800</bug_when>
    <thetext>Created attachment 85555
Previous patch with file movement intact

webkit-patch did not seem to record the file movement, so I&apos;ve attached a patch I created manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375286</commentid>
    <comment_count>28</comment_count>
      <attachid>85555</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-03-29 07:15:22 -0700</bug_when>
    <thetext>Comment on attachment 85555
Previous patch with file movement intact

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

I guess you should remove ConnectionGtk.cpp too.

&gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:105
&gt; +void Connection::platformInvalidate()
&gt; +{

You should call m_connectionQueue.unregisterEventSourceHandler(m_socketDescriptor); for GTK platform here before closing the socket</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375669</commentid>
    <comment_count>29</comment_count>
      <attachid>87395</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-29 12:34:51 -0700</bug_when>
    <thetext>Created attachment 87395
Patch with Carlos&apos; suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375670</commentid>
    <comment_count>30</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-29 12:36:11 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 85555 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85555&amp;action=review
&gt; 
&gt; I guess you should remove ConnectionGtk.cpp too.
&gt; 
&gt; &gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:105
&gt; &gt; +void Connection::platformInvalidate()
&gt; &gt; +{
&gt; 
&gt; You should call m_connectionQueue.unregisterEventSourceHandler(m_socketDescriptor); for GTK platform here before closing the socket

Thanks for the review Carlos. I&apos;ve uploaded a new patch fixing these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375741</commentid>
    <comment_count>31</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-29 14:09:41 -0700</bug_when>
    <thetext>Attachment 87395 did not build on qt:
Build output: http://queues.webkit.org/results/8282535</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376377</commentid>
    <comment_count>32</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-03-30 09:10:12 -0700</bug_when>
    <thetext>Good to see that you have been successfully merged the two implementation.
Please, fix the Qt build and go ahead with the patch! ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376751</commentid>
    <comment_count>33</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-03-30 15:55:33 -0700</bug_when>
    <thetext>After taking a look at #57506 (that looks like a duplicate) I realized that we should think over the terminology. Actually the API&apos;s we use are all POSIX so it can be a better naming convention then UNIX. I think file names should follow the style guideline so acronyms should be capitalized (FooPOSIX.cpp instead of FooPosix.cpp). This is how the JIT files are named for example. Maybe a new macro flag would be useful to replace the &quot;PLATFORM(QT) || PLATFORM(GTK)&quot; conditions with smg like USE(POSIX_IPC).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376756</commentid>
    <comment_count>34</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-03-30 15:58:15 -0700</bug_when>
    <thetext>*** Bug 57506 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376781</commentid>
    <comment_count>35</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-30 16:42:15 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; After taking a look at #57506 (that looks like a duplicate) I realized that we should think over the terminology. Actually the API&apos;s we use are all POSIX so it can be a better naming convention then UNIX. I think file names should follow the style guideline so acronyms should be capitalized (FooPOSIX.cpp instead of FooPosix.cpp). This is how the JIT files are named for example. Maybe a new macro flag would be useful to replace the &quot;PLATFORM(QT) || PLATFORM(GTK)&quot; conditions with smg like USE(POSIX_IPC).

I&apos;m not sure that POSIX is the appropriate terminology for all of these files. ConnectionUnix makes heavy use of ancillary data structures (cmsghdr) to pass file handles through sockets. As far as I know this is not defined in POSIX at all. Perhaps we could simply have a greater distinction:

AttachmentPOSIX.cpp
SharedMemoryPOSIX.cpp
ConnectionUnix.cpp

How does that sound?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376992</commentid>
    <comment_count>36</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-03-31 01:38:23 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #33)
&gt; &gt; After taking a look at #57506 (that looks like a duplicate) I realized that we should think over the terminology. Actually the API&apos;s we use are all POSIX so it can be a better naming convention then UNIX. I think file names should follow the style guideline so acronyms should be capitalized (FooPOSIX.cpp instead of FooPosix.cpp). This is how the JIT files are named for example. Maybe a new macro flag would be useful to replace the &quot;PLATFORM(QT) || PLATFORM(GTK)&quot; conditions with smg like USE(POSIX_IPC).
&gt; 
&gt; I&apos;m not sure that POSIX is the appropriate terminology for all of these files. ConnectionUnix makes heavy use of ancillary data structures (cmsghdr) to pass file handles through sockets. As far as I know this is not defined in POSIX at all. Perhaps we could simply have a greater distinction:
&gt; 
&gt; AttachmentPOSIX.cpp
&gt; SharedMemoryPOSIX.cpp
&gt; ConnectionUnix.cpp
&gt; 
&gt; How does that sound?

Correct, I was wrong about POSIX. This makes it more complicated. In this case I would better like to just use UNIX everywhere since POSIX is part of it. In that case only the capitalization should be changed in your patch. But your new proposal is also consistent so we can chose it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377018</commentid>
    <comment_count>37</comment_count>
      <attachid>87395</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-03-31 02:53:50 -0700</bug_when>
    <thetext>Comment on attachment 87395
Patch with Carlos&apos; suggestions

It seems you forgot to add the new files, and remove the Qt ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377192</commentid>
    <comment_count>38</comment_count>
      <attachid>87737</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-31 08:59:01 -0700</bug_when>
    <thetext>Created attachment 87737
Patch with all files

Ah, bitten again by that webkit_patch bug! I&apos;ve attached the correct patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377207</commentid>
    <comment_count>39</comment_count>
      <attachid>87737</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-03-31 09:07:12 -0700</bug_when>
    <thetext>Comment on attachment 87737
Patch with all files

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

&gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:122
&gt; +#if PLATFORM(GTK)
&gt; +    m_connectionQueue.unregisterEventSourceHandler(m_socketDescriptor);
&gt; +#endif

This should be called before closing the socket.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377220</commentid>
    <comment_count>40</comment_count>
      <attachid>87745</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-31 09:15:12 -0700</bug_when>
    <thetext>Created attachment 87745
Patch unregistering event source handler before setting the socket descriptor to -1

Nice catch Carlos! I&apos;ve updated the patch to unregister the event source *before* setting m_socketDescriptor to -1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379499</commentid>
    <comment_count>41</comment_count>
      <attachid>87745</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2011-04-05 06:21:32 -0700</bug_when>
    <thetext>Comment on attachment 87745
Patch unregistering event source handler before setting the socket descriptor to -1

looks ok to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380213</commentid>
    <comment_count>42</comment_count>
      <attachid>87745</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-04-06 01:49:58 -0700</bug_when>
    <thetext>Comment on attachment 87745
Patch unregistering event source handler before setting the socket descriptor to -1

This looks pretty good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380284</commentid>
    <comment_count>43</comment_count>
      <attachid>87745</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-04-06 05:43:36 -0700</bug_when>
    <thetext>Comment on attachment 87745
Patch unregistering event source handler before setting the socket descriptor to -1

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

&gt; Source/WebKit2/ChangeLog:20
&gt; +        * Platform/CoreIPC/unix/AttachmentUnix.cpp: Renamed from Source/WebKit2/Platform/CoreIPC/qt/AttachmentQt.cpp.

The Changelog is out of date. The file you add is AttachmentPOSIX.cpp.
Please fix this before landing.

&gt; Source/WebKit2/GNUmakefile.am:100
&gt; +	Source/WebKit2/Platform/CoreIPC/posix/AttachmentPOSIX.cpp \

I&apos;m not a fan of adding two new terminology with new dirs and file name patterns. (Just my personal opinion, should not block the patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380335</commentid>
    <comment_count>44</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-06 07:14:33 -0700</bug_when>
    <thetext>(In reply to comment #43)

&gt; &gt; Source/WebKit2/GNUmakefile.am:100
&gt; &gt; +	Source/WebKit2/Platform/CoreIPC/posix/AttachmentPOSIX.cpp \
&gt; 
&gt; I&apos;m not a fan of adding two new terminology with new dirs and file name patterns. (Just my personal opinion, should not block the patch).

I prefer using &quot;Unix&quot; everywhere as well. Kenneth, does your review still hold with that change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381242</commentid>
    <comment_count>45</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-04-07 05:14:31 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #43)
&gt; 
&gt; &gt; &gt; Source/WebKit2/GNUmakefile.am:100
&gt; &gt; &gt; +	Source/WebKit2/Platform/CoreIPC/posix/AttachmentPOSIX.cpp \
&gt; &gt; 
&gt; &gt; I&apos;m not a fan of adding two new terminology with new dirs and file name patterns. (Just my personal opinion, should not block the patch).
&gt; 
&gt; I prefer using &quot;Unix&quot; everywhere as well. Kenneth, does your review still hold with that change?

Yes! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381768</commentid>
    <comment_count>46</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-07 15:11:22 -0700</bug_when>
    <thetext>Committed r83215: &lt;http://trac.webkit.org/changeset/83215&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74365</attachid>
            <date>2010-11-19 03:25:34 -0800</date>
            <delta_ts>2011-01-07 07:13:26 -0800</delta_ts>
            <desc>Implements shared memory for GTK port</desc>
            <filename>SharedMemory.patch</filename>
            <type>text/plain</type>
            <size>6355</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
Nzk0ZDljNi4uNGM3NmRhMCAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMS0xOSAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFNoYXJlZE1lbW9yeSBmb3IgV2ViS2l0
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEK
KworICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgorICAgICAgICAqIFBsYXRmb3Jt
L2d0ay9TaGFyZWRNZW1vcnlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTaGFyZWFi
bGVNZW1vcnkpOiBBbGxvY2F0ZSByZXF1ZXN0ZWQgYW1vdW50IG9mIGJ5dGVzIG9mIHNoYXJlZCBt
ZW1vcnkKKyAgICAgICAgKFdlYktpdDo6b2J0YWluU2hhcmVkTWVtb3J5KTogT2J0YWluIGEgcG9p
bnRlciB0byBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkKKyAgICAgICAgKFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpIYW5kbGU6OkhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
SGFuZGxlOjp+SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6
OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6Om1lbW9yeVByb3RlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5T
aGFyZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUpOgorCiAy
MDEwLTExLTE3ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYktp
dDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggYi9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9y
eS5oCmluZGV4IDA1ZGMwZGQuLmM0NTM2MjEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0v
U2hhcmVkTWVtb3J5LmgKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaApAQCAt
MjksMTMgKzI5LDE1IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFF0R2xvYmFsPgogUVRfQkVH
SU5fTkFNRVNQQUNFCiBjbGFzcyBRU2hhcmVkTWVtb3J5OwogUVRfRU5EX05BTUVTUEFDRQotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBDb3JlSVBD
IHsKQEAgLTcwLDYgKzcyLDggQEAgcHVibGljOgogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hh
bmRsZTsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2tleTsK
KyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbXV0YWJsZSBTdHJpbmcgbV9maWxlTmFtZTsK
ICNlbmRpZgogICAgICAgICBzaXplX3QgbV9zaXplOwogICAgIH07CkBAIC05Nyw2ICsxMDEsOCBA
QCBwcml2YXRlOgogICAgIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAg
IFFTaGFyZWRNZW1vcnkqIG1faW1wbDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBTdHJpbmcg
bV9maWxlTmFtZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9n
dGsvU2hhcmVkTWVtb3J5R3RrLmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1lbW9y
eUd0ay5jcHAKaW5kZXggOTNmZGE5NS4uNGNiYmMxYiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvU2hhcmVkTWVtb3J5R3RrLmNwcAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL2d0ay9T
aGFyZWRNZW1vcnlHdGsuY3BwCkBAIC0yNiw1OSArMjYsMTU5IEBACiAKICNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJn
dW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAi
Q1N0cmluZy5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUg
PGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIHZv
aWQqIGNyZWF0ZVNoYXJlYWJsZU1lbW9yeShjaGFyKiBmaWxlTmFtZSwgc2l6ZV90IHNpemUpCit7
CisgICAgQVNTRVJUKGZpbGVOYW1lKTsKKyAgICBBU1NFUlQoc2l6ZSA+IDApOworCisgICAgaW50
IGZkID0gb3BlbihmaWxlTmFtZSwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIChtb2RlX3Qp
MDYwMCk7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgo
bHNlZWsoZmQsIHNpemUgLSAxLCBTRUVLX1NFVCkgPT0gLTEpIHx8ICh3cml0ZShmZCwgIiIsIDEp
ICE9IDEpKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gbW1hcCgwLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9U
X1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CisgICAgaWYgKG1hcHBlZE1lbW9yeSA9PSBNQVBf
RkFJTEVEKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiBtYXBwZWRNZW1vcnk7Cit9CisKK3N0YXRpYyB2
b2lkKiBvYnRhaW5TaGFyZWRNZW1vcnkoY2hhciogZmlsZU5hbWUsIHNpemVfdCBzaXplLCBpbnQg
bW9kZSkKK3sKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JEV1IpOworICAgIGlmIChm
ZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBt
bWFwKDAsIHNpemUsIG1vZGUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKyAgICBpZiAobWFwcGVkTWVt
b3J5ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIG1hcHBlZE1lbW9yeTsKK30K
KwogU2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRsZSgpCisgICAgOiBtX2ZpbGVOYW1lKCkKKyAg
ICAsIG1fc2l6ZSgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIFNoYXJlZE1lbW9y
eTo6SGFuZGxlOjp+SGFuZGxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lk
IFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBl
bmNvZGVyKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlVUludDY0KG1fc2l6ZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fZmlsZU5hbWUpOworCisg
ICAgbV9maWxlTmFtZSA9IFN0cmluZygpOyAvLyB0aGUgcmVjZWl2aW5nIHByb2Nlc3Mgd2lsbCBk
ZXN0cm95IHRoZSBtYXBwZWQgbWVtb3J5CiB9CiAKIGJvb2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6
OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhhbmRsZSYgaGFuZGxl
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VS
VF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1fZmlsZU5hbWUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlRf
QVJHKGhhbmRsZSwgIWhhbmRsZS5tX3NpemUpOworCisgICAgdWludDY0X3Qgc2l6ZTsKKyAgICBp
ZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgU3RyaW5nIGZpbGVOYW1lOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbGVOYW1l
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7Cisg
ICAgaGFuZGxlLm1fZmlsZU5hbWUgPSBmaWxlTmFtZTsKKworICAgIHJldHVybiB0cnVlOwogfQog
CiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNp
emUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBjaGFyIGZp
bGVOYW1lW10gPSAiL3RtcC9XSzJTaGFyZWRNZW1vcnlYWFhYWFgiOworICAgIGlmIChta3N0ZW1w
KGZpbGVOYW1lKSA9PSAtMSkgLy8gY3JlYXRlIGEgdW5pcXVlIG5hbWUKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3
IFNoYXJlZE1lbW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gc2l6ZTsKKyAgICBz
aGFyZWRNZW1vcnktPm1fZGF0YSA9IGNyZWF0ZVNoYXJlYWJsZU1lbW9yeShmaWxlTmFtZSwgc2l6
ZSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX2ZpbGVOYW1lID0gU3RyaW5nKGZpbGVOYW1lKTsKKwor
ICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQorCitzdGF0aWMgaW5saW5lIGlu
dCBtZW1vcnlQcm90ZWN0aW9uKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQor
eworICAgIHN3aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFk
T25seToKKyAgICAgICAgcmV0dXJuIFBST1RfUkVBRDsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6
UmVhZFdyaXRlOgorICAgICAgICByZXR1cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUFJPVF9OT05FOwogfQog
CiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3QgSGFu
ZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOyAgICAKKyAgICBBU1NFUlQoaGFuZGxlLm1fc2l6ZSk7CisgICAg
QVNTRVJUKCFoYW5kbGUubV9maWxlTmFtZS5pc0VtcHR5KCkpOworCisgICAgaW50IG1vZGUgPSBt
ZW1vcnlQcm90ZWN0aW9uKHByb3RlY3Rpb24pOworICAgIGNoYXIqIGZpbGVOYW1lID0gY29uc3Rf
Y2FzdDxjaGFyKj4oaGFuZGxlLm1fZmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgaW50IHNp
emUgPSBoYW5kbGUubV9zaXplOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVt
b3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6
ZSA9IHNpemU7CisgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBvYnRhaW5TaGFyZWRNZW1vcnko
ZmlsZU5hbWUsIHNpemUsIG1vZGUpOworCisgICAgc2hhcmVkTWVtb3J5LT5tX2ZpbGVOYW1lID0g
aGFuZGxlLm1fZmlsZU5hbWU7CisgICAgaGFuZGxlLm1fZmlsZU5hbWUgPSBTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCiBTaGFyZWRNZW1vcnk6On5T
aGFyZWRNZW1vcnkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbXVubWFwKG1fZGF0
YSwgbV9zaXplKTsKIH0KICAgICAKIGJvb2wgU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUoSGFu
ZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9maWxlTmFtZS5pc0VtcHR5KCkgfHwg
IW1fc2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fZmlsZU5hbWUg
PSBtX2ZpbGVOYW1lOworICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB7Ci0g
ICAgdW5zaWduZWQgcGFnZVNpemUgPSAwOwotCi0gICAgcmV0dXJuIHBhZ2VTaXplOworICAgIHJl
dHVybiBnZXRwYWdlc2l6ZSgpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78229</attachid>
            <date>2011-01-07 07:13:26 -0800</date>
            <delta_ts>2011-01-11 07:18:24 -0800</delta_ts>
            <desc>Shared Memory Implementation on latest revision</desc>
            <filename>49791.patch.complete</filename>
            <type>text/plain</type>
            <size>6298</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAkocmV2aXNpb24gNzUwNTQpCisrKyBXZWJLaXQy
L1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBA
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCiAj
aW5jbHVkZSA8UXRHbG9iYWw+CkBAIC03MCw2ICs3Myw4IEBACiAgICAgICAgIG11dGFibGUgSEFO
RExFIG1faGFuZGxlOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIG11dGFibGUgU3RyaW5n
IG1fa2V5OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2Zp
bGVOYW1lOwogI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsKQEAgLTk3LDYg
KzEwMiw4IEBACiAgICAgSEFORExFIG1faGFuZGxlOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAg
UVNoYXJlZE1lbW9yeSogbV9pbXBsOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIFN0cmluZyBt
X2ZpbGVOYW1lOwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL2d0ay9TaGFy
ZWRNZW1vcnlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJl
ZE1lbW9yeUd0ay5jcHAJKHJldmlzaW9uIDc1MDU0KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
U2hhcmVkTWVtb3J5R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTkgKzI2LDE1OSBAQAog
CiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rl
ci5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKK3N0YXRpYyB2b2lkKiBjcmVhdGVTaGFyZWFibGVNZW1vcnkoY2hhciogZmlsZU5hbWUs
IHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVChmaWxlTmFtZSk7CisgICAgQVNTRVJUKHNpemUg
PiAwKTsKKworICAgIGludCBmZCA9IG9wZW4oZmlsZU5hbWUsIE9fUkRXUiB8IE9fQ1JFQVQgfCBP
X1RSVU5DLCAobW9kZV90KTA2MDApOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoKGxzZWVrKGZkLCBzaXplIC0gMSwgU0VFS19TRVQpID09IC0xKSB8fCAo
d3JpdGUoZmQsICIiLCAxKSAhPSAxKSkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IG1tYXAoMCwgc2l6ZSwg
UFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworICAgIGlmIChtYXBw
ZWRNZW1vcnkgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gbWFwcGVkTWVtb3J5
OworfQorCitzdGF0aWMgdm9pZCogb2J0YWluU2hhcmVkTWVtb3J5KGNoYXIqIGZpbGVOYW1lLCBz
aXplX3Qgc2l6ZSwgaW50IG1vZGUpCit7CisgICAgaW50IGZkID0gb3BlbihmaWxlTmFtZSwgT19S
RFdSKTsKKyAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworCisgICAgdm9pZCog
bWFwcGVkTWVtb3J5ID0gbW1hcCgwLCBzaXplLCBtb2RlLCBNQVBfU0hBUkVELCBmZCwgMCk7Cisg
ICAgaWYgKG1hcHBlZE1lbW9yeSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKGZkKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiBt
YXBwZWRNZW1vcnk7Cit9CisKIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUoKQorICAgIDog
bV9maWxlTmFtZSgpCisgICAgLCBtX3NpemUoMCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCiBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogdm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFy
Z3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChtX3NpemUpOworICAgIGVuY29kZXItPmVuY29kZSht
X2ZpbGVOYW1lKTsKKworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoKTsgLy8gdGhlIHJlY2Vpdmlu
ZyBwcm9jZXNzIHdpbGwgZGVzdHJveSB0aGUgbWFwcGVkIG1lbW9yeQogfQogCiBib29sIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBm
YWxzZTsKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX2ZpbGVOYW1lLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFoYW5kbGUubV9zaXplKTsKKworICAgIHVpbnQ2
NF90IHNpemU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBmaWxlTmFtZTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShmaWxlTmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS5t
X3NpemUgPSBzaXplOworICAgIGhhbmRsZS5tX2ZpbGVOYW1lID0gZmlsZU5hbWU7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6
Y3JlYXRlKHNpemVfdCBzaXplKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7CisgICAgY2hhciBmaWxlTmFtZVtdID0gIi90bXAvV0syU2hhcmVkTWVtb3J5WFhYWFhYIjsK
KyAgICBpZiAobWtzdGVtcChmaWxlTmFtZSkgPT0gLTEpIC8vIGNyZWF0ZSBhIHVuaXF1ZSBuYW1l
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVt
b3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6
ZSA9IHNpemU7CisgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBjcmVhdGVTaGFyZWFibGVNZW1v
cnkoZmlsZU5hbWUsIHNpemUpOworICAgIHNoYXJlZE1lbW9yeS0+bV9maWxlTmFtZSA9IFN0cmlu
ZyhmaWxlTmFtZSk7CisKKyAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAor
c3RhdGljIGlubGluZSBpbnQgbWVtb3J5UHJvdGVjdGlvbihTaGFyZWRNZW1vcnk6OlByb3RlY3Rp
b24gcHJvdGVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByb3RlY3Rpb24pIHsKKyAgICBjYXNlIFNo
YXJlZE1lbW9yeTo6UmVhZE9ubHk6CisgICAgICAgIHJldHVybiBQUk9UX1JFQUQ7CisgICAgY2Fz
ZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFBST1RfTk9ORTsKK30KKwogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6
Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsgICAgCisgICAgQVNTRVJUKGhhbmRs
ZS5tX3NpemUpOworICAgIEFTU0VSVCghaGFuZGxlLm1fZmlsZU5hbWUuaXNFbXB0eSgpKTsKKwor
ICAgIGludCBtb2RlID0gbWVtb3J5UHJvdGVjdGlvbihwcm90ZWN0aW9uKTsKKyAgICBjaGFyKiBm
aWxlTmFtZSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KGhhbmRsZS5tX2ZpbGVOYW1lLnV0ZjgoKS5kYXRh
KCkpOworICAgIGludCBzaXplID0gaGFuZGxlLm1fc2l6ZTsKKworICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hh
cmVkTWVtb3J5LT5tX3NpemUgPSBzaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gb2J0
YWluU2hhcmVkTWVtb3J5KGZpbGVOYW1lLCBzaXplLCBtb2RlKTsKKworICAgIHNoYXJlZE1lbW9y
eS0+bV9maWxlTmFtZSA9IGhhbmRsZS5tX2ZpbGVOYW1lOworICAgIGhhbmRsZS5tX2ZpbGVOYW1l
ID0gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAog
U2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIG11bm1hcChtX2RhdGEsIG1fc2l6ZSk7CiB9CiAgICAgCiBib29sIFNoYXJlZE1lbW9yeTo6
Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZmlsZU5h
bWUuaXNFbXB0eSgpIHx8ICFtX3NpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhh
bmRsZS5tX2ZpbGVOYW1lID0gbV9maWxlTmFtZTsKKyAgICBoYW5kbGUubV9zaXplID0gbV9zaXpl
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHVuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVt
UGFnZVNpemUoKQogewotICAgIHVuc2lnbmVkIHBhZ2VTaXplID0gMDsKLQotICAgIHJldHVybiBw
YWdlU2l6ZTsKKyAgICByZXR1cm4gZ2V0cGFnZXNpemUoKTsKIH0KIAogfQpJbmRleDogV2ViS2l0
Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1
MjQwKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBA
QAorMjAxMS0wMS0wNyAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVt
ZW50IFNoYXJlZE1lbW9yeSBmb3IgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEKKworICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1l
bW9yeS5oOgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9TaGFyZWRNZW1vcnlHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVTaGFyZWFibGVNZW1vcnkpOiBBbGxvY2F0ZSByZXF1ZXN0ZWQg
YW1vdW50IG9mIGJ5dGVzIG9mIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgKFdlYktpdDo6b2J0YWlu
U2hhcmVkTWVtb3J5KTogT2J0YWluIGEgcG9pbnRlciB0byBhbHJlYWR5IGFsbG9jYXRlZCBtZW1v
cnkKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjp+SGFuZGxlKToKKyAgICAgICAgKFdl
YktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Om1lbW9yeVByb3RlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6c3lzdGVtUGFnZVNpemUpOgorCiAyMDExLTAxLTA2ICBBZGFtIFJvYmVuICA8YXJvYmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBbHdheXMgc2hvdyB0aGUgYXJyb3cgY3Vyc29yIHdoZW4g
dGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkCg==
</data>
<flag name="review"
          id="69512"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78527</attachid>
            <date>2011-01-11 07:18:24 -0800</date>
            <delta_ts>2011-01-12 08:22:15 -0800</delta_ts>
            <desc>Addressed the review comments</desc>
            <filename>49791.patch.review.complete</filename>
            <type>text/plain</type>
            <size>6283</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTM2NSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTEtMDEtMTEgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIEltcGxlbWVudCBTaGFyZWRNZW1vcnkgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NzkxCisKKyAgICAgICAgKiBQbGF0
Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvU2hhcmVkTWVtb3J5
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlU2hhcmVhYmxlTWVtb3J5KTogQWxsb2Nh
dGUgcmVxdWVzdGVkIGFtb3VudCBvZiBieXRlcyBvZiBzaGFyZWQgbWVtb3J5CisgICAgICAgIChX
ZWJLaXQ6Om9idGFpblNoYXJlZE1lbW9yeSk6IE9idGFpbiBhIHBvaW50ZXIgdG8gYWxyZWFkeSBh
bGxvY2F0ZWQgbWVtb3J5CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpI
YW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSk6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjptZW1vcnlQcm90ZWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KToKKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKToKKwogMjAxMS0wMS0wOSAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZy
YXNlci4KSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAkocmV2aXNpb24gNzUzNjUpCisrKyBX
ZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw5IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lmIFBMQVRGT1JNKEdUSykK
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNlbmRpZgogCiAjaWYgUExBVEZPUk0o
UVQpCiAjaW5jbHVkZSA8UXRHbG9iYWw+CkBAIC03MCw2ICs3Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgbXV0YWJsZSBIQU5ETEUgbV9oYW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICAgICAg
bXV0YWJsZSBTdHJpbmcgbV9rZXk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIG11dGFi
bGUgU3RyaW5nIG1fZmlsZU5hbWU7CiAjZW5kaWYKICAgICAgICAgc2l6ZV90IG1fc2l6ZTsKICAg
ICB9OwpAQCAtOTcsNiArMTAyLDggQEAgcHJpdmF0ZToKICAgICBIQU5ETEUgbV9oYW5kbGU7CiAj
ZWxpZiBQTEFURk9STShRVCkKICAgICBRU2hhcmVkTWVtb3J5KiBtX2ltcGw7CisjZWxpZiBQTEFU
Rk9STShHVEspCisgICAgU3RyaW5nIG1fZmlsZU5hbWU7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdl
YktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1lbW9yeUd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9QbGF0Zm9ybS9ndGsvU2hhcmVkTWVtb3J5R3RrLmNwcAkocmV2aXNpb24gNzUzNjUpCisr
KyBXZWJLaXQyL1BsYXRmb3JtL2d0ay9TaGFyZWRNZW1vcnlHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw1OSArMjYsMTU4IEBACiAKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKIAotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisj
aW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyB2b2lkKiBjcmVhdGVTaGFy
ZWFibGVNZW1vcnkoY2hhciogZmlsZU5hbWUsIHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVChm
aWxlTmFtZSk7CisgICAgQVNTRVJUKHNpemUgPiAwKTsKKworICAgIGludCBmZCA9IG9wZW4oZmls
ZU5hbWUsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAobW9kZV90KTA2MDApOworICAgIGlm
IChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoKGxzZWVrKGZkLCBzaXpl
IC0gMSwgU0VFS19TRVQpID09IC0xKSB8fCAod3JpdGUoZmQsICIiLCAxKSAhPSAxKSkgeworICAg
ICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQqIG1h
cHBlZE1lbW9yeSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NI
QVJFRCwgZmQsIDApOworICAgIGlmIChtYXBwZWRNZW1vcnkgPT0gTUFQX0ZBSUxFRCkgeworICAg
ICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNsb3NlKGZk
KTsKKyAgICByZXR1cm4gbWFwcGVkTWVtb3J5OworfQorCitzdGF0aWMgdm9pZCogb2J0YWluU2hh
cmVkTWVtb3J5KGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSwgaW50IG1vZGUpCit7
CisgICAgaW50IGZkID0gb3BlbihmaWxlTmFtZSwgT19SRFdSKTsKKyAgICBpZiAoZmQgPT0gLTEp
CisgICAgICAgIHJldHVybiAwOworCisgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gbW1hcCgwLCBz
aXplLCBtb2RlLCBNQVBfU0hBUkVELCBmZCwgMCk7CisgICAgaWYgKG1hcHBlZE1lbW9yeSA9PSBN
QVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiBtYXBwZWRNZW1vcnk7Cit9CisKIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUoKQorICAgIDogbV9zaXplKDApCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAogU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29k
ZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9zaXplKTsKKyAgICBlbmNv
ZGVyLT5lbmNvZGUobV9maWxlTmFtZSk7CisKKyAgICBtX2ZpbGVOYW1lID0gU3RyaW5nKCk7IC8v
IHRoZSByZWNlaXZpbmcgcHJvY2VzcyB3aWxsIGRlc3Ryb3kgdGhlIG1hcHBlZCBtZW1vcnkKIH0K
IAogYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFoYW5kbGUubV9maWxl
TmFtZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7
CisKKyAgICB1aW50NjRfdCBzaXplOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KHNp
emUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgZmlsZU5hbWU7CisgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUoZmlsZU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUubV9maWxlTmFtZSA9IGZpbGVO
YW1lOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBT
aGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOworICAgIGdjaGFyIGZpbGVOYW1lW10gPSAiL3RtcC9XSzJTaGFyZWRN
ZW1vcnlYWFhYWFgiOworICAgIGlmIChnX21rc3RlbXAoZmlsZU5hbWUpID09IC0xKSAvLyBjcmVh
dGUgYSB1bmlxdWUgbmFtZQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hh
cmVkTWVtb3J5LT5tX3NpemUgPSBzaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gY3Jl
YXRlU2hhcmVhYmxlTWVtb3J5KGZpbGVOYW1lLCBzaXplKTsKKyAgICBzaGFyZWRNZW1vcnktPm1f
ZmlsZU5hbWUgPSBmaWxlbmFtZVRvU3RyaW5nKGZpbGVOYW1lKTsKKworICAgIHJldHVybiBzaGFy
ZWRNZW1vcnkucmVsZWFzZSgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtZW1vcnlQcm90ZWN0
aW9uKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3aXRjaCAo
cHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAgICAgICAg
cmV0dXJuIFBST1RfUkVBRDsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgorICAg
ICAgICByZXR1cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUFJPVF9OT05FOwogfQogCiBQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFBy
b3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAwOyAgICAKKyAgICBBU1NFUlQoaGFuZGxlLm1fc2l6ZSk7CisgICAgQVNTRVJUKCFoYW5kbGUu
bV9maWxlTmFtZS5pc0VtcHR5KCkpOworCisgICAgQ1N0cmluZyBmaWxlTmFtZSA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihoYW5kbGUubV9maWxlTmFtZSk7CisgICAgaW50IHNpemUgPSBoYW5k
bGUubV9zaXplOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0
UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7
CisgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBvYnRhaW5TaGFyZWRNZW1vcnkoZmlsZU5hbWUu
ZGF0YSgpLCBzaXplLCBtZW1vcnlQcm90ZWN0aW9uKHByb3RlY3Rpb24pKTsKKyAgICBzaGFyZWRN
ZW1vcnktPm1fZmlsZU5hbWUgPSBoYW5kbGUubV9maWxlTmFtZTsKKworICAgIHJldHVybiBzaGFy
ZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCiBTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbXVubWFwKG1fZGF0YSwgbV9zaXplKTsKIH0K
ICAgICAKIGJvb2wgU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFBy
b3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9maWxlTmFtZS5pc0VtcHR5KCkgfHwgIW1fc2l6ZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fZmlsZU5hbWUgPSBtX2ZpbGVOYW1lOwor
ICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdW5z
aWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB7Ci0gICAgdW5zaWduZWQgcGFn
ZVNpemUgPSAwOwotCi0gICAgcmV0dXJuIHBhZ2VTaXplOworICAgIHJldHVybiBnZXRwYWdlc2l6
ZSgpOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="69859"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78694</attachid>
            <date>2011-01-12 08:22:15 -0800</date>
            <delta_ts>2011-01-21 10:03:14 -0800</delta_ts>
            <desc>Used GLib API for mmap</desc>
            <filename>49791.patch.review.complete</filename>
            <type>text/plain</type>
            <size>6720</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTM2NSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTEtMDEtMTIgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFA
bW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudCBTaGFyZWRNZW1vcnkgZm9yIFdlYktpdDIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NzkxCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvU2hhcmVk
TWVtb3J5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlU2hhcmVhYmxlTWVtb3J5KTog
QWxsb2NhdGUgcmVxdWVzdGVkIGFtb3VudCBvZiBieXRlcyBvZiBzaGFyZWQgbWVtb3J5LgorICAg
ICAgICAoV2ViS2l0OjpvYnRhaW5TaGFyZWRNZW1vcnkpOiBPYnRhaW4gYSBwb2ludGVyIHRvIGFs
cmVhZHkgYWxsb2NhdGVkIG1lbW9yeS4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpI
YW5kbGU6OkhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjp+
SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Om1lbW9y
eVByb3RlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1v
cnkpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUpOgorCiAyMDExLTAxLTA5
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gRnJhc2VyLgpJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCShyZXZpc2lvbiA3NTM2
NSkKKysrIFdlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDEwIEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lmIFBMQVRG
T1JNKEdUSykKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KK3R5cGVkZWYgc3RydWN0
IF9HTWFwcGVkRmlsZSBHTWFwcGVkRmlsZTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCiAj
aW5jbHVkZSA8UXRHbG9iYWw+CkBAIC03MCw2ICs3NCw4IEBAIHB1YmxpYzoKICAgICAgICAgbXV0
YWJsZSBIQU5ETEUgbV9oYW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICAgICAgbXV0YWJs
ZSBTdHJpbmcgbV9rZXk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIG11dGFibGUgU3Ry
aW5nIG1fZmlsZU5hbWU7CiAjZW5kaWYKICAgICAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB9OwpA
QCAtOTcsNiArMTAzLDkgQEAgcHJpdmF0ZToKICAgICBIQU5ETEUgbV9oYW5kbGU7CiAjZWxpZiBQ
TEFURk9STShRVCkKICAgICBRU2hhcmVkTWVtb3J5KiBtX2ltcGw7CisjZWxpZiBQTEFURk9STShH
VEspCisgICAgR01hcHBlZEZpbGUqIG1fbWFwcGVkRmlsZTsKKyAgICBTdHJpbmcgbV9maWxlTmFt
ZTsKICNlbmRpZgogfTsKIApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvU2hhcmVkTWVtb3J5
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL2d0ay9TaGFyZWRNZW1vcnlH
dGsuY3BwCShyZXZpc2lvbiA3NTM2NSkKKysrIFdlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1l
bW9yeUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDU5ICsyNiwxNTYgQEAKIAogI2luY2x1
ZGUgIlNoYXJlZE1lbW9yeS5oIgogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBHTWFw
cGVkRmlsZSogY3JlYXRlU2hhcmVhYmxlTWVtb3J5KGNoYXIqIGZpbGVOYW1lLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICBBU1NFUlQoZmlsZU5hbWUpOworICAgIEFTU0VSVChzaXplID4gMCk7CisKKyAg
ICAvLyBDcmVhdGUgYW4gZW1wdHkgZmlsZS4KKyAgICBHSU9DaGFubmVsKiBpb0NoYW5uZWwgPSBn
X2lvX2NoYW5uZWxfbmV3X2ZpbGUoZmlsZU5hbWUsICJ3KyIsIE5VTEwpOworICAgIGlmICghaW9D
aGFubmVsKSAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgLy8gU2V0IHRoZSBzaXplIG9m
IHRoZSBmaWxlLgorICAgIGlmIChnX2lvX2NoYW5uZWxfc2Vla19wb3NpdGlvbihpb0NoYW5uZWws
IHNpemUsIEdfU0VFS19TRVQsIE5VTEwpICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgeworICAgICAg
ICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIGdzaXplIGJ5dGVzV3JpdHRlbiA9IDA7CisgICAgaWYgKGdfaW9fY2hhbm5lbF93cml0
ZV9jaGFycyhpb0NoYW5uZWwsICIgIiwgLTEsICZieXRlc1dyaXR0ZW4sIE5VTEwpICE9IEdfSU9f
U1RBVFVTX05PUk1BTCkgeworICAgICAgICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5u
ZWwpOworCisgICAgLy8gTWFwIHRoZSBmaWxlIHRvIG1lbW9yeS4KKyAgICBHTWFwcGVkRmlsZSog
bWFwcGVkRmlsZSA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLCBUUlVFLCBOVUxMKTsKKyAg
ICBpZiAoIW1hcHBlZEZpbGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1hcHBl
ZEZpbGU7Cit9CisKK3N0YXRpYyBHTWFwcGVkRmlsZSogb2J0YWluU2hhcmVkTWVtb3J5KGNvbnN0
IGNoYXIqIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSwgZ2Jvb2xlYW4gd3JpdGFibGUpCit7CisgICAg
R01hcHBlZEZpbGUqIG1hcHBlZEZpbGUgPSBnX21hcHBlZF9maWxlX25ldyhmaWxlTmFtZSwgd3Jp
dGFibGUsIE5VTEwpOworICAgIGlmICghbWFwcGVkRmlsZSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gbWFwcGVkRmlsZTsKK30KKwogU2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRs
ZSgpCisgICAgOiBtX3NpemUoMCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBTaGFy
ZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAogdm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciogZW5jb2RlcikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29k
ZXItPmVuY29kZVVJbnQ2NChtX3NpemUpOworICAgIGVuY29kZXItPmVuY29kZShtX2ZpbGVOYW1l
KTsKKworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoKTsgLy8gdGhlIHJlY2VpdmluZyBwcm9jZXNz
IHdpbGwgZGVzdHJveSB0aGUgbWFwcGVkIG1lbW9yeQogfQogCiBib29sIFNoYXJlZE1lbW9yeTo6
SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUm
IGhhbmRsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX2ZpbGVOYW1lLmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUX0FSRyhoYW5kbGUsICFoYW5kbGUubV9zaXplKTsKKworICAgIHVpbnQ2NF90IHNpemU7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFN0cmluZyBmaWxlTmFtZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShm
aWxlTmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS5tX3NpemUgPSBz
aXplOworICAgIGhhbmRsZS5tX2ZpbGVOYW1lID0gZmlsZU5hbWU7CisKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNp
emVfdCBzaXplKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
Z2NoYXIgZmlsZU5hbWVbXSA9ICIvdG1wL1dLMlNoYXJlZE1lbW9yeVhYWFhYWCI7CisgICAgaWYg
KGdfbWtzdGVtcChmaWxlTmFtZSkgPT0gLTEpIC8vIGNyZWF0ZSBhIHVuaXF1ZSBuYW1lCisgICAg
ICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFk
b3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNp
emU7CisgICAgc2hhcmVkTWVtb3J5LT5tX21hcHBlZEZpbGUgPSBjcmVhdGVTaGFyZWFibGVNZW1v
cnkoZmlsZU5hbWUsIHNpemUpOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gZ19tYXBwZWRf
ZmlsZV9nZXRfY29udGVudHMoc2hhcmVkTWVtb3J5LT5tX21hcHBlZEZpbGUpOworICAgIHNoYXJl
ZE1lbW9yeS0+bV9maWxlTmFtZSA9IGZpbGVuYW1lVG9TdHJpbmcoZmlsZU5hbWUpOworCisgICAg
cmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2Jvb2xl
YW4gbWVtb3J5UHJvdGVjdGlvbihTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikK
K3sKKyAgICBzd2l0Y2ggKHByb3RlY3Rpb24pIHsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVh
ZE9ubHk6CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVh
ZFdyaXRlOgorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gUFJPVF9OT05FOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZE1l
bW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rp
b24gcHJvdGVjdGlvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOyAg
ICAKKyAgICBBU1NFUlQoaGFuZGxlLm1fc2l6ZSk7CisgICAgQVNTRVJUKCFoYW5kbGUubV9maWxl
TmFtZS5pc0VtcHR5KCkpOworCisgICAgQ1N0cmluZyBmaWxlTmFtZSA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihoYW5kbGUubV9maWxlTmFtZSk7CisgICAgaW50IHNpemUgPSBoYW5kbGUubV9z
aXplOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5l
dyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7CisgICAg
c2hhcmVkTWVtb3J5LT5tX21hcHBlZEZpbGUgPSBvYnRhaW5TaGFyZWRNZW1vcnkoZmlsZU5hbWUu
ZGF0YSgpLCBzaXplLCBtZW1vcnlQcm90ZWN0aW9uKHByb3RlY3Rpb24pKTsKKyAgICBzaGFyZWRN
ZW1vcnktPm1fZGF0YSA9IGdfbWFwcGVkX2ZpbGVfZ2V0X2NvbnRlbnRzKHNoYXJlZE1lbW9yeS0+
bV9tYXBwZWRGaWxlKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fZmlsZU5hbWUgPSBoYW5kbGUubV9m
aWxlTmFtZTsKKworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCiBTaGFy
ZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
Z19tYXBwZWRfZmlsZV91bnJlZihtX21hcHBlZEZpbGUpOwogfQogICAgIAogYm9vbCBTaGFyZWRN
ZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9u
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X2ZpbGVOYW1lLmlzRW1wdHkoKSB8fCAhbV9zaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBoYW5kbGUubV9maWxlTmFtZSA9IG1fZmlsZU5hbWU7CisgICAgaGFuZGxlLm1fc2l6ZSA9
IG1fc2l6ZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB1bnNpZ25lZCBTaGFyZWRNZW1vcnk6
OnN5c3RlbVBhZ2VTaXplKCkKIHsKLSAgICB1bnNpZ25lZCBwYWdlU2l6ZSA9IDA7Ci0KLSAgICBy
ZXR1cm4gcGFnZVNpemU7CisgICAgcmV0dXJuIGdldHBhZ2VzaXplKCk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79755</attachid>
            <date>2011-01-21 10:03:14 -0800</date>
            <delta_ts>2011-02-11 11:35:43 -0800</delta_ts>
            <desc>Reverted back to mmap implementation</desc>
            <filename>49791.patch.review</filename>
            <type>text/plain</type>
            <size>6487</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTM2NSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTEtMDEtMjEgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgPHJhdmkua2FzaWJoYXRsYUBt
b3Rvcm9sYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW0dUS10gSW1wbGVtZW50IFNoYXJlZE1lbW9yeSBmb3IgV2ViS2l0MgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEKKworICAgICAgICAq
IFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9TaGFyZWRN
ZW1vcnlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTaGFyZWFibGVNZW1vcnkpOiBB
bGxvY2F0ZSByZXF1ZXN0ZWQgYW1vdW50IG9mIGJ5dGVzIG9mIHNoYXJlZCBtZW1vcnkuCisgICAg
ICAgIChXZWJLaXQ6Om9idGFpblNoYXJlZE1lbW9yeSk6IE9idGFpbiBhIHBvaW50ZXIgdG8gYWxy
ZWFkeSBhbGxvY2F0ZWQgbWVtb3J5LgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6On5I
YW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6bWVtb3J5
UHJvdGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9y
eSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKToKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSk6CisKIDIwMTEtMDEtMDkg
IERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBT
aW1vbiBGcmFzZXIuCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHJldmlzaW9uIDc1MzY1
KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksOSBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpZiBQTEFURk9S
TShHVEspCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKFFUKQogI2luY2x1ZGUgPFF0R2xvYmFsPgpAQCAtNzAsNiArNzMsOCBAQCBwdWJsaWM6
CiAgICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwogI2VsaWYgUExBVEZPUk0oUVQpCiAg
ICAgICAgIG11dGFibGUgU3RyaW5nIG1fa2V5OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAg
ICBtdXRhYmxlIFN0cmluZyBtX2ZpbGVOYW1lOwogI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3Np
emU7CiAgICAgfTsKQEAgLTk3LDYgKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgSEFORExFIG1faGFu
ZGxlOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgUVNoYXJlZE1lbW9yeSogbV9pbXBsOworI2Vs
aWYgUExBVEZPUk0oR1RLKQorICAgIFN0cmluZyBtX2ZpbGVOYW1lOwogI2VuZGlmCiB9OwogCklu
ZGV4OiBXZWJLaXQyL1BsYXRmb3JtL2d0ay9TaGFyZWRNZW1vcnlHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1lbW9yeUd0ay5jcHAJKHJldmlzaW9uIDc1
MzY1KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvU2hhcmVkTWVtb3J5R3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNTkgKzI2LDE2MSBAQAogCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5Lmgi
CiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rl
ci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUg
PGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIHZvaWQqIGNyZWF0ZVNoYXJlYWJsZU1l
bW9yeShjaGFyKiBmaWxlTmFtZSwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKGZpbGVOYW1l
KTsKKyAgICBBU1NFUlQoc2l6ZSA+IDApOworCisgICAgaW50IGZkID0gb3BlbihmaWxlTmFtZSwg
T19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIChtb2RlX3QpMDYwMCk7CisgICAgaWYgKGZkID09
IC0xKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgobHNlZWsoZmQsIHNpemUgLSAxLCBT
RUVLX1NFVCkgPT0gLTEpIHx8ICh3cml0ZShmZCwgIiIsIDEpICE9IDEpKSB7CisgICAgICAgIGNs
b3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCogbWFwcGVkTWVt
b3J5ID0gbW1hcCgwLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBm
ZCwgMCk7CisgICAgaWYgKG1hcHBlZE1lbW9yeSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNs
b3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY2xvc2UoZmQpOworICAg
IHJldHVybiBtYXBwZWRNZW1vcnk7Cit9CisKK3N0YXRpYyB2b2lkKiBvYnRhaW5TaGFyZWRNZW1v
cnkoY29uc3QgY2hhciogZmlsZU5hbWUsIHNpemVfdCBzaXplLCBpbnQgbW9kZSkKK3sKKyAgICBp
bnQgZmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JEV1IpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBtbWFwKDAsIHNpemUsIG1v
ZGUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKyAgICBpZiAobWFwcGVkTWVtb3J5ID09IE1BUF9GQUlM
RUQpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBjbG9zZShmZCk7CisgICAgcmV0dXJuIG1hcHBlZE1lbW9yeTsKK30KKwogU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OkhhbmRsZSgpCisgICAgOiBtX3NpemUoMCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCiBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAogdm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChtX3NpemUpOworICAgIGVuY29kZXItPmVu
Y29kZShtX2ZpbGVOYW1lKTsKKworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoKTsgLy8gVGhlIHJl
Y2VpdmluZyBwcm9jZXNzIHdpbGwgZGVzdHJveSB0aGUgbWFwcGVkIG1lbW9yeS4KIH0KIAogYm9v
bCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciog
ZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFoYW5kbGUubV9maWxlTmFtZS5p
c0VtcHR5KCkpOworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7CisKKyAg
ICB1aW50NjRfdCBzaXplOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KHNpemUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgZmlsZU5hbWU7CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoZmlsZU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBo
YW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUubV9maWxlTmFtZSA9IGZpbGVOYW1lOwor
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRN
ZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOworICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVOYW1lKGdfYnVpbGRfZmlsZW5hbWUo
Z19nZXRfdG1wX2RpcigpLCAiV0syU2hhcmVkTWVtb3J5WFhYWFhYIiwgTlVMTCkpOworICAgIGdp
bnQgZmQgPSBnX21rc3RlbXAoZmlsZU5hbWUuZ2V0KCkpOyAvLyBDcmVhdGUgYSB1bmlxdWUgbmFt
ZS4KKyAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGNsb3NlKGZkKTsK
KworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hh
cmVkTWVtb3J5KSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBzaXplOworICAgIHNoYXJl
ZE1lbW9yeS0+bV9kYXRhID0gY3JlYXRlU2hhcmVhYmxlTWVtb3J5KGZpbGVOYW1lLmdldCgpLCBz
aXplKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fZmlsZU5hbWUgPSBmaWxlbmFtZVRvU3RyaW5nKGZp
bGVOYW1lLmdldCgpKTsKKworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQor
CitzdGF0aWMgaW5saW5lIGludCBtZW1vcnlQcm90ZWN0aW9uKFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2Ug
U2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0dXJuIFBST1RfUkVBRDsKKyAgICBj
YXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgorICAgICAgICByZXR1cm4gUFJPVF9SRUFEIHwg
UFJPVF9XUklURTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gUFJPVF9OT05FOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOyAgICAKKyAgICBBU1NFUlQoaGFu
ZGxlLm1fc2l6ZSk7CisgICAgQVNTRVJUKCFoYW5kbGUubV9maWxlTmFtZS5pc0VtcHR5KCkpOwor
CisgICAgQ1N0cmluZyBmaWxlTmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihoYW5kbGUu
bV9maWxlTmFtZSk7CisgICAgaW50IHNpemUgPSBoYW5kbGUubV9zaXplOworCisgICAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsK
KyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7CisgICAgc2hhcmVkTWVtb3J5LT5tX2Rh
dGEgPSBvYnRhaW5TaGFyZWRNZW1vcnkoZmlsZU5hbWUuZGF0YSgpLCBzaXplLCBtZW1vcnlQcm90
ZWN0aW9uKHByb3RlY3Rpb24pKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fZmlsZU5hbWUgPSBoYW5k
bGUubV9maWxlTmFtZTsKKworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQog
CiBTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbXVubWFwKG1fZGF0YSwgbV9zaXplKTsKIH0KICAgICAKIGJvb2wgU2hhcmVkTWVtb3J5
OjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9maWxl
TmFtZS5pc0VtcHR5KCkgfHwgIW1fc2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aGFuZGxlLm1fZmlsZU5hbWUgPSBtX2ZpbGVOYW1lOworICAgIGhhbmRsZS5tX3NpemUgPSBtX3Np
emU7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0
ZW1QYWdlU2l6ZSgpCiB7Ci0gICAgdW5zaWduZWQgcGFnZVNpemUgPSAwOwotCi0gICAgcmV0dXJu
IHBhZ2VTaXplOworICAgIHJldHVybiBnZXRwYWdlc2l6ZSgpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82156</attachid>
            <date>2011-02-11 11:35:43 -0800</date>
            <delta_ts>2011-03-11 16:34:58 -0800</delta_ts>
            <desc>Reference patch</desc>
            <filename>sharedmemory.patch</filename>
            <type>text/plain</type>
            <size>7694</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDQyMTgwZjM4MGYxMzE1MGZiZDczMWM4ZGQ0YzcxMDIwNjFkMWZhYmQKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgVHVlIEphbiAyNSAx
OTo1NDowNCAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCAgQW1ydXRoIFJhaiAgPGFtcnV0aHJh
akBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2Fz
aWJoYXRsYUBtb3Rvcm9sYS5jb20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCiAgICAKICAgICAgICAgICAgW0dUS10gSW1wbGVtZW50IFNoYXJlZE1lbW9yeSBm
b3IgV2ViS2l0MgogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDk3OTEKICAgIAogICAgICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgog
ICAgICAgICAgICAqIFBsYXRmb3JtL2d0ay9TaGFyZWRNZW1vcnlHdGsuY3BwOgogICAgICAgICAg
ICAoV2ViS2l0OjpjcmVhdGVTaGFyZWFibGVNZW1vcnkpOgogICAgICAgICAgICAoV2ViS2l0Ojpv
YnRhaW5TaGFyZWRNZW1vcnkpOgogICAgICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6SGFuZGxlKToKICAgICAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6
On5IYW5kbGUpOgogICAgICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNO
dWxsKToKICAgICAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6
CiAgICAgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgogICAg
ICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CiAgICAgICAgICAgIChXZWJL
aXQ6Om1lbW9yeVByb3RlY3Rpb24pOgogICAgICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
On5TaGFyZWRNZW1vcnkpOgogICAgICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0
ZUhhbmRsZSk6CiAgICAgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNp
emUpOgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCBhMzVjZDI1Li4wN2Q0YTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMTEtMDItMTAgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29t
PiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFAbW90b3Jv
bGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIEltcGxlbWVudCBTaGFyZWRNZW1vcnkgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NzkxCisKKyAgICAgICAgKiBQbGF0
Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvU2hhcmVkTWVtb3J5
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlU2hhcmVhYmxlTWVtb3J5KToKKyAgICAg
ICAgKFdlYktpdDo6b2J0YWluU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpIYW5kbGU6OkhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
SGFuZGxlOjp+SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6
OmlzTnVsbCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjptZW1v
cnlQcm90ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVt
b3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUpOgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKToKKwogMjAxMS0wMi0x
MSAgQ2hhbmRyYSBWYWxsYWxhICA8Y2hhbmRyYS52YWxsYWxhQG1vdG9yb2xhLmNvbT4gYW5kIEFs
ZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
U2hhcmVkTWVtb3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaApp
bmRleCBmZDFkNjBjLi44NWQyZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9TaGFyZWRNZW1vcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
ZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKQEAgLTcyLDYgKzc1
LDggQEAgcHVibGljOgogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFBM
QVRGT1JNKFFUKQogICAgICAgICBtdXRhYmxlIGludCBtX2ZpbGVEZXNjcmlwdG9yOworI2VsaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2ZpbGVOYW1lOwogI2VuZGlm
CiAgICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsKQEAgLTk5LDYgKzEwNCw4IEBAIHByaXZh
dGU6CiAgICAgSEFORExFIG1faGFuZGxlOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgaW50IG1f
ZmlsZURlc2NyaXB0b3I7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgU3RyaW5nIG1fZmlsZU5h
bWU7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0
ay9TaGFyZWRNZW1vcnlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJl
ZE1lbW9yeUd0ay5jcHAKaW5kZXggMzkwMGUyMC4uN2JkYTk0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1lbW9yeUd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1lbW9yeUd0ay5jcHAKQEAgLTI3LDU5ICsyNywxNjYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKIAotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisj
aW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8ZmNudGwu
aD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitzdGF0aWMgdm9pZCogY3JlYXRlU2hhcmVhYmxlTWVtb3J5KGNo
YXIqIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoZmlsZU5hbWUpOworICAg
IEFTU0VSVChzaXplID4gMCk7CisKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JEV1Ig
fCBPX0NSRUFUIHwgT19UUlVOQywgKG1vZGVfdCkwNjAwKTsKKyAgICBpZiAoZmQgPT0gLTEpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKChsc2VlayhmZCwgc2l6ZSAtIDEsIFNFRUtfU0VU
KSA9PSAtMSkgfHwgKHdyaXRlKGZkLCAiIiwgMSkgIT0gMSkpIHsKKyAgICAgICAgY2xvc2UoZmQp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBt
bWFwKDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsK
KyAgICBpZiAobWFwcGVkTWVtb3J5ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgY2xvc2UoZmQp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJu
IG1hcHBlZE1lbW9yeTsKK30KKworc3RhdGljIHZvaWQqIG9idGFpblNoYXJlZE1lbW9yeShjb25z
dCBjaGFyKiBmaWxlTmFtZSwgc2l6ZV90IHNpemUsIGludCBtb2RlKQoreworICAgIGludCBmZCA9
IG9wZW4oZmlsZU5hbWUsIE9fUkRXUik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IG1tYXAoMCwgc2l6ZSwgbW9kZSwgTUFQ
X1NIQVJFRCwgZmQsIDApOworICAgIGlmIChtYXBwZWRNZW1vcnkgPT0gTUFQX0ZBSUxFRCkgewor
ICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNsb3Nl
KGZkKTsKKyAgICByZXR1cm4gbWFwcGVkTWVtb3J5OworfQorCiBTaGFyZWRNZW1vcnk6OkhhbmRs
ZTo6SGFuZGxlKCkKKyAgICA6IG1fc2l6ZSgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjp+SGFuZGxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ZpbGVOYW1lLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChtX3Np
emUpOworICAgIGVuY29kZXItPmVuY29kZShtX2ZpbGVOYW1lKTsKKworICAgIG1fZmlsZU5hbWUg
PSBTdHJpbmcoKTsgLy8gVGhlIHJlY2VpdmluZyBwcm9jZXNzIHdpbGwgZGVzdHJveSB0aGUgbWFw
cGVkIG1lbW9yeS4KIH0KIAogYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUs
ICFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVsbCgp
KTsKKworICAgIHVpbnQ2NF90IHNpemU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQo
c2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBmaWxlTmFtZTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShmaWxlTmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGhhbmRsZS5tX3NpemUgPSBzaXplOworICAgIGhhbmRsZS5tX2ZpbGVOYW1lID0gZmls
ZU5hbWU7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+
IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7CisgICAgR093blB0cjxnY2hhcj4gZmlsZU5hbWUoZ19idWlsZF9m
aWxlbmFtZShnX2dldF90bXBfZGlyKCksICJXSzJTaGFyZWRNZW1vcnlYWFhYWFgiLCBOVUxMKSk7
CisgICAgZ2ludCBmZCA9IGdfbWtzdGVtcChmaWxlTmFtZS5nZXQoKSk7IC8vIENyZWF0ZSBhIHVu
aXF1ZSBuYW1lLgorICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2xv
c2UoZmQpOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVm
KG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7Cisg
ICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBjcmVhdGVTaGFyZWFibGVNZW1vcnkoZmlsZU5hbWUu
Z2V0KCksIHNpemUpOworICAgIHNoYXJlZE1lbW9yeS0+bV9maWxlTmFtZSA9IGZpbGVuYW1lVG9T
dHJpbmcoZmlsZU5hbWUuZ2V0KCkpOworCisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNl
KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1lbW9yeVByb3RlY3Rpb24oU2hhcmVkTWVtb3J5
OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7Cisg
ICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5OgorICAgICAgICByZXR1cm4gUFJPVF9SRUFE
OworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGU6CisgICAgICAgIHJldHVybiBQUk9U
X1JFQUQgfCBQUk9UX1dSSVRFOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBQUk9UX05PTkU7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0
aW9uKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7ICAgIAorICAgIEFT
U0VSVChoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlQoIWhhbmRsZS5tX2ZpbGVOYW1lLmlzRW1w
dHkoKSk7CisKKyAgICBDU3RyaW5nIGZpbGVOYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGhhbmRsZS5tX2ZpbGVOYW1lKTsKKyAgICBpbnQgc2l6ZSA9IGhhbmRsZS5tX3NpemU7CisKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gc2l6ZTsKKyAgICBzaGFyZWRNZW1v
cnktPm1fZGF0YSA9IG9idGFpblNoYXJlZE1lbW9yeShmaWxlTmFtZS5kYXRhKCksIHNpemUsIG1l
bW9yeVByb3RlY3Rpb24ocHJvdGVjdGlvbikpOworICAgIHNoYXJlZE1lbW9yeS0+bV9maWxlTmFt
ZSA9IGhhbmRsZS5tX2ZpbGVOYW1lOworCisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNl
KCk7CiB9CiAKIFNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBtdW5tYXAobV9kYXRhLCBtX3NpemUpOwogfQotICAgIAorCiBib29sIFNo
YXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3Rl
Y3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fZmlsZU5hbWUuaXNFbXB0eSgpIHx8ICFtX3NpemUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGhhbmRsZS5tX2ZpbGVOYW1lID0gbV9maWxlTmFtZTsKKyAgICBoYW5kbGUubV9z
aXplID0gbV9zaXplOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHVuc2lnbmVkIFNoYXJlZE1l
bW9yeTo6c3lzdGVtUGFnZVNpemUoKQogewotICAgIHVuc2lnbmVkIHBhZ2VTaXplID0gMDsKLQot
ICAgIHJldHVybiBwYWdlU2l6ZTsKKyAgICByZXR1cm4gZ2V0cGFnZXNpemUoKTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84965</attachid>
            <date>2011-03-07 11:52:53 -0800</date>
            <delta_ts>2011-03-11 16:35:04 -0800</delta_ts>
            <desc>Shared Memory changes</desc>
            <filename>49791-latest-patch</filename>
            <type>text/plain</type>
            <size>11225</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZjMyZjYyYi4uYzIyNzkxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0KQEAgLTkyLDEzICs5MiwxNCBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db3JlSVBDTWVzc2FnZUtpbmRzLmggXAogCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5oIFwKLQlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcCBcCisJU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvSGFuZGxlTWVzc2FnZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01v
ZHVsZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNw
cCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1lbW9yeUd0ay5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBcCiAJU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5n
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERl
Y29kZXIuY3BwCmluZGV4IDQ2NjQ4MDYuLmRjNTY2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKQEAgLTQ3LDcgKzQ3LDcg
QEAgQXJndW1lbnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKCkKIHsKICAgICBBU1NFUlQobV9i
dWZmZXIpOwogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSNpZiAhUExBVEZPUk0oUVQpCisjaWYg
IVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IGRpc3Bvc2Ugb2YgdGhlIG1hY2ggcG9ydHMgaW4gY2FzZXMgb2YgZmFpbHVyZS4KICNlbHNlCiAg
ICAgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yIGVuZCA9IG1fYXR0YWNobWVudHMuZW5kKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5j
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rl
ci5jcHAKaW5kZXggYWE3MWIwZi4uNmQzYzJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcApAQCAtNTAsNyArNTAsNyBAQCBB
cmd1bWVudEVuY29kZXI6On5Bcmd1bWVudEVuY29kZXIoKQogewogICAgIGlmIChtX2J1ZmZlcikK
ICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOwotI2lmICFQTEFURk9STShRVCkKKyNpZiAhUExB
VEZPUk0oUVQpICYmICFQTEFURk9STShHVEspCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlz
cG9zZSBvZiB0aGUgYXR0YWNobWVudHMgaW4gY2FzZXMgb2YgZmFpbHVyZS4KICNlbHNlCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX2F0dGFjaG1lbnRzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaAppbmRleCBjMDU3NzE0Li4wMmVk
MjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaApA
QCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBNYWNo
UG9ydFR5cGUsCiAgICAgICAgIE1hY2hPT0xNZW1vcnlUeXBlCi0jZWxpZiBQTEFURk9STShRVCkK
KyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgICAgIE1hcHBlZE1lbW9y
eQogI2VuZGlmCiAgICAgfTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBBdHRhY2htZW50KG1hY2hfcG9ydF9uYW1lX3QgcG9ydCwgbWFjaF9tc2dfdHlw
ZV9uYW1lX3QgZGlzcG9zaXRpb24pOwogICAgIEF0dGFjaG1lbnQodm9pZCogYWRkcmVzcywgbWFj
aF9tc2dfc2l6ZV90IHNpemUsIG1hY2hfbXNnX2NvcHlfb3B0aW9uc190IGNvcHlPcHRpb25zLCBi
b29sIGRlYWxsb2NhdGUpOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKQogICAgIEF0dGFjaG1lbnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXpl
X3QpOwogI2VuZGlmCiAKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIG1hY2hfbXNnX3Np
emVfdCBzaXplKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsg
cmV0dXJuIG1fb29sTWVtb3J5LnNpemU7IH0KICAgICBtYWNoX21zZ19jb3B5X29wdGlvbnNfdCBj
b3B5T3B0aW9ucygpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBNYWNoT09MTWVtb3J5VHlwZSk7
IHJldHVybiBtX29vbE1lbW9yeS5jb3B5T3B0aW9uczsgfQogICAgIGJvb2wgZGVhbGxvY2F0ZSgp
IGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBNYWNoT09MTWVtb3J5VHlwZSk7IHJldHVybiBtX29v
bE1lbW9yeS5kZWFsbG9jYXRlOyB9Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KIAogICAgIGludCByZWxlYXNlRmlsZURlc2NyaXB0b3IoKSB7IGludCB0ZW1wID0g
bV9maWxlRGVzY3JpcHRvcjsgbV9maWxlRGVzY3JpcHRvciA9IC0xOyByZXR1cm4gdGVtcDsgfQpA
QCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYm9vbCBkZWFsbG9jYXRlOwog
ICAgICAgICB9IG1fb29sTWVtb3J5OwogICAgIH07Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlm
IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3I7
CiAgICAgc2l6ZV90IG1fc2l6ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCBlYWEyYWI5Li44MGFkNzI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMzA4LDE0ICszMDgsMTEg
QEAgcHJpdmF0ZToKICAgICBRU29ja2V0Tm90aWZpZXIqIG1fc29ja2V0Tm90aWZpZXI7CiAgICAg
aW50IG1fc29ja2V0RGVzY3JpcHRvcjsKICNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHJl
YWRFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIHByb2Nlc3NDb21wbGV0ZWRNZXNzYWdlKCk7Ci0g
ICAgYm9vbCBtZXNzYWdlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpIHsgcmV0dXJuICFtX2N1cnJlbnRN
ZXNzYWdlU2l6ZTsgfQorICAgIHZvaWQgcmVhZHlSZWFkSGFuZGxlcigpOwogCi0gICAgaW50IG1f
c29ja2V0OworICAgIGludCBtX3NvY2tldERlc2NyaXB0b3I7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fcmVhZEJ1ZmZlcjsKICAgICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7Ci0gICAgc2l6
ZV90IG1fcGVuZGluZ0J5dGVzOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAKaW5kZXggNGMwZWJjMC4uYjkx
NWFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRh
Y2htZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0
YWNobWVudFF0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkF0dGFjaG1lbnQuaCIKIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8u
aD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9x
dC9Db25uZWN0aW9uUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9D
b25uZWN0aW9uUXQuY3BwCmluZGV4IDIyNWQ3ZGMuLmNhNTM1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKQEAgLTMyLDE0
ICszMiwxOSBAQAogI2luY2x1ZGUgIldvcmtJdGVtLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgotI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAj
aW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5o
PgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNs
dWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UVNvY2tldE5vdGlmaWVyPgorI2VsaWYgUExB
VEZPUk0oR1RLKQorI2luY2x1ZGUgPGdsaWIuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CkBAIC04OCw3ICs5Myw5IEBAIHByaXZhdGU6CiB2
b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIp
CiB7CiAgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRpZmllcjsKKyNpZiBQTEFURk9STShR
VCkKICAgICBtX3NvY2tldE5vdGlmaWVyID0gMDsKKyNlbmRpZgogICAgIG1fcmVhZEJ1ZmZlci5y
ZXNpemUobWVzc2FnZU1heFNpemUpOwogICAgIG1fY3VycmVudE1lc3NhZ2VTaXplID0gMDsKIH0K
QEAgLTEwMSwxMiArMTA4LDE1IEBAIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKICAgICBpZiAoIW1faXNDb25uZWN0ZWQpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFBMQVRG
T1JNKFFUKQogICAgIGRlbGV0ZSBtX3NvY2tldE5vdGlmaWVyOwogICAgIG1fc29ja2V0Tm90aWZp
ZXIgPSAwOworI2VuZGlmCiAgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gLTE7CiAgICAgbV9pc0Nv
bm5lY3RlZCA9IGZhbHNlOwogfQogCisjaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBTb2NrZXROb3Rp
ZmllclJlc291cmNlR3VhcmQgewogcHVibGljOgogICAgIFNvY2tldE5vdGlmaWVyUmVzb3VyY2VH
dWFyZChRU29ja2V0Tm90aWZpZXIqIHNvY2tldE5vdGlmaWVyKQpAQCAtMTIzLDYgKzEzMyw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUVNvY2tldE5vdGlmaWVyKiBjb25zdCBtX3NvY2tldE5v
dGlmaWVyOwogfTsKKyNlbmRpZgogCiB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBpdGVyYXRvcj4K
IGNsYXNzIEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkIHsKQEAgLTE0NCw3ICsxNTUsOSBAQCBwcml2
YXRlOgogdm9pZCBDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKCkKIHsKICAgICBEZXF1ZTxB
dHRhY2htZW50PiBhdHRhY2htZW50czsKKyNpZiBQTEFURk9STShRVCkKICAgICBTb2NrZXROb3Rp
ZmllclJlc291cmNlR3VhcmQgc29ja2V0Tm90aWZpZXJFbmFibGVyKG1fc29ja2V0Tm90aWZpZXIp
OworI2VuZGlmCiAgICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQ8RGVxdWU8QXR0YWNobWVudD4s
IERlcXVlPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNoZW1lbnREaXNwb3NlcihhdHRhY2ht
ZW50cyk7CiAKICAgICBjaGFyIGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyW0NNU0dfU1BBQ0Uo
c2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpXTsKQEAgLTI2Myw3ICsyNzYsMTIg
QEAgYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkKICAgICB9CiAKICAgICBtX2lzQ29ubmVjdGVkID0g
dHJ1ZTsKKyNpZiBQTEFURk9STShRVCkKICAgICBtX3NvY2tldE5vdGlmaWVyID0gbV9jb25uZWN0
aW9uUXVldWUucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yLCBR
U29ja2V0Tm90aWZpZXI6OlJlYWQsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246
OnJlYWR5UmVhZEhhbmRsZXIpKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBtX2Nvbm5lY3Rp
b25RdWV1ZS5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldERlc2NyaXB0b3IsIChH
X0lPX0hVUCB8IEdfSU9fRVJSKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6
Y29ubmVjdGlvbkRpZENsb3NlKSk7CisgICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJFdmVu
dFNvdXJjZUhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yLCBHX0lPX0lOLCBXb3JrSXRlbTo6Y3Jl
YXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7CisjZW5kaWYKIAogICAg
IC8vIFNjaGVkdWxlIGEgY2FsbCB0byByZWFkeVJlYWRIYW5kbGVyLiBEYXRhIG1heSBoYXZlIGFy
cml2ZWQgYmVmb3JlIGluc3RhbGxhdGlvbiBvZiB0aGUgc2lnbmFsCiAgICAgLy8gaGFuZGxlci4K
QEAgLTI3NCw3ICsyOTIsMTEgQEAgYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkKIAogYm9vbCBDb25u
ZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKIHsKKyNpZiBQ
TEFURk9STShRVCkKICAgICByZXR1cm4gbV9zb2NrZXROb3RpZmllcjsKKyNlbGlmIFBMQVRGT1JN
KEdUSykKKyAgICByZXR1cm4gbV9zb2NrZXREZXNjcmlwdG9yOworI2VuZGlmCiB9CiAKIGJvb2wg
Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNz
T3duUHRyPEFyZ3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQpAQCAtMzYxLDkgKzM4MywxMSBAQCBi
b29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwg
UGFzc093blB0cjxBcmd1bWVudEVuYwogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgUExBVEZP
Uk0oUVQpCiB2b2lkIENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vz
c1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQog
ewogICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29ya09uVGVybWluYXRpb24ocHJvY2Vz
cywgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3Nl
KSk7CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9TaGFyZWRNZW1vcnkuaAppbmRleCBhNGI5NWJmLi41NDM2MGRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotI2lmIFBMQVRG
T1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQXR0
YWNobWVudC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2VuZGlmCkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqLCBIYW5kbGUmKTsKIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgICAgIENvcmVJUEM6OkF0dGFjaG1lbnQgcmVs
ZWFzZVRvQXR0YWNobWVudCgpIGNvbnN0OwogICAgICAgICB2b2lkIGFkb3B0RnJvbUF0dGFjaG1l
bnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3QpOwogI2VuZGlmCkBAIC03MCw3ICs3MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgbXV0YWJsZSBtYWNoX3BvcnRfdCBtX3BvcnQ7CiAjZWxpZiBQTEFU
Rk9STShXSU4pCiAgICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwotI2VsaWYgUExBVEZP
Uk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICBtdXRh
YmxlIGludCBtX2ZpbGVEZXNjcmlwdG9yOwogI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7
CkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgbWFjaF9wb3J0X3QgbV9wb3J0OwogI2Vs
aWYgUExBVEZPUk0oV0lOKQogICAgIEhBTkRMRSBtX2hhbmRsZTsKLSNlbGlmIFBMQVRGT1JNKFFU
KQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbnQgbV9maWxlRGVz
Y3JpcHRvcjsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJl
ZE1lbW9yeVF0LmNwcAppbmRleCA5MWFmNTMzLi44MjQ5MTRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5j
bHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8UURpcj4KICNpbmNs
dWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBA
IC00Miw2ICs0MSwxMiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRRGlyPgor
I2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogU2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRs
ZSgpCkBAIC0xMDEsOSArMTA2LDE0IEBAIHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmFkb3B0
RnJvbUF0dGFjaG1lbnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3Qgc2l6ZSkKIAogUGFzc1Jl
ZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQogewor
I2lmIFBMQVRGT1JNKFFUKQogICAgIFFTdHJpbmcgdGVtcE5hbWUgPSBRRGlyOjp0ZW1wKCkuZmls
ZVBhdGgoInF3a3NobS5YWFhYWFgiKTsKICAgICBRQnl0ZUFycmF5IHRlbXBOYW1lQ1NUUiA9IHRl
bXBOYW1lLnRvTG9jYWw4Qml0KCk7CiAgICAgY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWVDU1RS
LmRhdGEoKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBHT3duUHRyPGdjaGFyPiB0ZW1wTmFt
ZShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIldLMlNoYXJlZE1lbW9yeVhYWFhY
WCIsIE5VTEwpKTsKKyAgICBnY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWUuZ2V0KCk7CisjZW5k
aWYKIAogICAgIGludCBmaWxlRGVzY3JpcHRvcjsKICAgICB3aGlsZSAoKGZpbGVEZXNjcmlwdG9y
ID0gbWtzdGVtcCh0ZW1wTmFtZUMpKSA9PSAtMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCmlu
ZGV4IDA0ZDhhMDMuLmE5YmExYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKQEAgLTQ5LDcg
KzQ5LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIHBpZF90
IHBpZCA9IDA7CiAKICAgICBpbnQgc29ja2V0c1syXTsKLSAgICBpZiAoc29ja2V0cGFpcihBRl9V
TklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKSB7CisgICAgaWYgKHNvY2tldHBhaXIo
QUZfVU5JWCwgU09DS19ER1JBTSwgMCwgc29ja2V0cykgPCAwKSB7CiAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZCB3aXRoIGVycm5vICVkLlxuIiwgZXJy
bm8pOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85553</attachid>
            <date>2011-03-11 16:35:19 -0800</date>
            <delta_ts>2011-03-11 16:49:13 -0800</delta_ts>
            <desc>Dusted up version of Amruth&apos;s patch with a ChangeLog</desc>
            <filename>bug-49791-20110311163508.patch</filename>
            <type>text/plain</type>
            <size>10299</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA4ODkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhYzEzYTA1MjM1N2M1MGU5
ODI3MjdmYWIyYmZmYjk2NzQ5YmRhMDhmLi41ZGM3NTllOTNlN2U0ZGNiZjRlOTNmYzRlMmM3MzUz
MjM1ZWRkZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDMtMTEgICBBbXJ1
dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBTaGFyZWRNZW1vcnkgZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NzkxCisKKyAg
ICAgICAgU2hhcmUgdGhlIFNoYXJlZE1lbW9yeSwgQXR0YWNobWVudCBhbmQgQ29ubmVjdGlvbiBp
bXBsZW1lbnRhdGlvbnMgd2l0aCB0aGUgUXQgcG9ydC4KKyAgICAgICAgQm90aCBpbXBsZW1lbnRh
dGlvbiBhcmUsIGluIGZhY3QsIGdlbmVyYWwgVW5peCBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgc3Rh
bmRhcmQgVW5peAorICAgICAgICBkb21haW4gc29ja2V0cyBhbmQgc2VuZG1zZyAvIHJlY3Ztc2cu
IFRoaXMgc2hvdWxkIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQgY29kZQorICAgICAg
ICBncmVhdGx5IGFuZCBsYXkgdGhlIGdyb3VuZHdvcmsgZm9yIEdUSysvUXQgaW1wbGVtZW50YXRp
b25zIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBSZXBsYWNlZCBHVEsrIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggdGhlIFVuaXggb25lcy4K
KyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHA6IEV4dGVuZGVk
IFF0ICNpZmRlZnMgdG8gaW5jbHVkZSBHVEsuCisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXI6On5Bcmd1bWVudERlY29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnRFbmNvZGVyLmNwcDogRGl0dG8uCisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXI6On5Bcmd1bWVudEVuY29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNo
bWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDog
Q29tYmluZWQgdGhlIEdUSysgYW5kIFF0IHNlY3Rpb25zLgorICAgICAgICAqIFBsYXRmb3JtL0Nv
cmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAuCisgICAgICAgICogUGxhdGZv
cm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcC4KKyAgICAgICAgKiBQ
bGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKTogVXNlIFNPQ0tfREdSQU0gaW5zdGVhZCBv
ZiBTT0NLX1NUUkVBTSB0byBtYXRjaCBRdC4KKyAgICAgICAgKiBXZWJLaXQyLnBybzogVXBkYXRl
ZCBzb3VyY2UgbGlzdCB0byByZWZsZWN0IGZpbGUgcmVuYW1pbmcuCisKIDIwMTEtMDMtMTEgIEpl
c3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIFJvYmVuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAwMmMwNmMzZGZhZmNhN2E4N2U2NTRk
ZjU3OGE1YmU2Y2YyM2M2Y2YyLi4xYzk0NWUxMmQxZTQyZjQwY2YxMGFjMTk4MDAyMDNiYzQzNTZl
ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtOTIsMTMgKzkyLDEzIEBAIGxpYldlYktpdDJf
bGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0NvcmVJUENN
ZXNzYWdlS2luZHMuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9EYXRhUmVm
ZXJlbmNlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9EYXRhUmVmZXJl
bmNlLmggXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25H
dGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0hhbmRsZU1lc3NhZ2Uu
aCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaCBcCiAJU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlU2VuZGVyLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAorCVNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Nb2R1bGVHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2d0ay9TaGFyZWRNZW1vcnlHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
V29ya1F1ZXVlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaCBcCkBAIC0xMDgsNiArMTA4LDcg
QEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1J1
bkxvb3AuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmggXAogCVNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Xb3JrSXRlbS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKaW5kZXggNDY2NDgw
NmIyMDFmNTYwOTMwYjdmNGUyN2U3NzI4NDU5YzM0NDYxYy4uZGM1NjY3NmQ0YWQzOTU0N2ZhYmFj
M2I4ZjkwYjVkNTAwODZlMDkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBBcmd1bWVudERl
Y29kZXI6On5Bcmd1bWVudERlY29kZXIoKQogewogICAgIEFTU0VSVChtX2J1ZmZlcik7CiAgICAg
ZmFzdEZyZWUobV9idWZmZXIpOwotI2lmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQp
ICYmICFQTEFURk9STShHVEspCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0
aGUgbWFjaCBwb3J0cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBEZXF1ZTxBdHRh
Y2htZW50Pjo6aXRlcmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAppbmRleCBh
YTcxYjBmMzM4YzE5MWNkYzA1MGFkM2I3MmNkNmQ3NTYyYjQ2ODI5Li42ZDNjMmJhNWQ0YjRhN2Zk
MDZmY2VmZjA5NThiNjAwY2JkODdhNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEFyZ3Vt
ZW50RW5jb2Rlcjo6fkFyZ3VtZW50RW5jb2RlcigpCiB7CiAgICAgaWYgKG1fYnVmZmVyKQogICAg
ICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0jaWYgIVBMQVRGT1JNKFFUKQorI2lmICFQTEFURk9S
TShRVCkgJiYgIVBMQVRGT1JNKEdUSykKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNwb3Nl
IG9mIHRoZSBhdHRhY2htZW50cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fYXR0YWNobWVudHMuc2l6ZSgpOyArK2kpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCmluZGV4IGMwNTc3MTQ0OTM2ZmNmNGZh
MGE0NWY1YWY2OWY3MTA4ZGQ4ZjA4YTIuLjAyZWQyMTk1M2Y3MzJlZmUwZGExNjg3OTJkZmIxYmRk
MWMzYmExODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0
YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVu
dC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IE1hY2hQb3J0VHlwZSwKICAgICAgICAgTWFjaE9PTE1lbW9yeVR5cGUKLSNlbGlmIFBMQVRGT1JN
KFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICAgICAgTWFwcGVk
TWVtb3J5CiAjZW5kaWYKICAgICB9OwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIEF0dGFjaG1lbnQobWFjaF9wb3J0X25hbWVfdCBwb3J0LCBtYWNoX21z
Z190eXBlX25hbWVfdCBkaXNwb3NpdGlvbik7CiAgICAgQXR0YWNobWVudCh2b2lkKiBhZGRyZXNz
LCBtYWNoX21zZ19zaXplX3Qgc2l6ZSwgbWFjaF9tc2dfY29weV9vcHRpb25zX3QgY29weU9wdGlv
bnMsIGJvb2wgZGVhbGxvY2F0ZSk7Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3Is
IHNpemVfdCk7CiAjZW5kaWYKIApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgbWFjaF9t
c2dfc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5
cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuc2l6ZTsgfQogICAgIG1hY2hfbXNnX2NvcHlfb3B0aW9u
c190IGNvcHlPcHRpb25zKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlU
eXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmNvcHlPcHRpb25zOyB9CiAgICAgYm9vbCBkZWFsbG9j
YXRlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJu
IG1fb29sTWVtb3J5LmRlYWxsb2NhdGU7IH0KLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogCiAgICAgaW50IHJlbGVhc2VGaWxlRGVzY3JpcHRvcigpIHsgaW50IHRl
bXAgPSBtX2ZpbGVEZXNjcmlwdG9yOyBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7IHJldHVybiB0ZW1w
OyB9CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBib29sIGRlYWxsb2Nh
dGU7CiAgICAgICAgIH0gbV9vb2xNZW1vcnk7CiAgICAgfTsKLSNlbGlmIFBMQVRGT1JNKFFUKQor
I2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbnQgbV9maWxlRGVzY3Jp
cHRvcjsKICAgICBzaXplX3QgbV9zaXplOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IGVhYTJhYjljZTY1YmIxMTRhODhlMTY5NDdi
ZDJiNTI3MDE1MmQyYmMuLjZiZWFkZDRlMWRjZTUyMDIyNDUzNWE3YTY3M2MxMDc5M2ZiMjE3MDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBAIC0y
OTksMjMgKzI5OSwxNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxBcmd1bWVudEVuY29kZXI+IG1f
cGVuZGluZ1dyaXRlQXJndW1lbnRzOwogICAgIE9WRVJMQVBQRUQgbV93cml0ZVN0YXRlOwogICAg
IEhBTkRMRSBtX2Nvbm5lY3Rpb25QaXBlOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFU
Rk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIC8vIENhbGxlZCBvbiB0aGUgY29ubmVjdGlv
biBxdWV1ZS4KICAgICB2b2lkIHJlYWR5UmVhZEhhbmRsZXIoKTsKIAogICAgIFZlY3Rvcjx1aW50
OF90PiBtX3JlYWRCdWZmZXI7CiAgICAgc2l6ZV90IG1fY3VycmVudE1lc3NhZ2VTaXplOwotICAg
IFFTb2NrZXROb3RpZmllciogbV9zb2NrZXROb3RpZmllcjsKICAgICBpbnQgbV9zb2NrZXREZXNj
cmlwdG9yOwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQgcmVhZEV2ZW50SGFuZGxlcigp
OwotICAgIHZvaWQgcHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsKLSAgICBib29sIG1lc3NhZ2VQ
cm9jZXNzaW5nQ29tcGxldGVkKCkgeyByZXR1cm4gIW1fY3VycmVudE1lc3NhZ2VTaXplOyB9CiAK
LSAgICBpbnQgbV9zb2NrZXQ7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsKLSAg
ICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7Ci0gICAgc2l6ZV90IG1fcGVuZGluZ0J5dGVz
OworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFTb2NrZXROb3RpZmllciogbV9zb2NrZXROb3RpZmll
cjsKKyNlbmRpZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9TaGFyZWRNZW1vcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9y
eS5oCmluZGV4IGE0Yjk1YmYyOTk5Y2VmMmM3Y2Q5ZTJhYjI4MjczYzI2MWVlZTMzZTcuLjU0MzYw
ZGY1ZDlmODk5NzcxZWNhZDE4Zjc0YmFmZTMxYWU5Zjg5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1NoYXJlZE1lbW9yeS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi0jaWYgUExBVEZPUk0oUVQp
CisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJBdHRhY2htZW50
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjZW5kaWYKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciosIEhhbmRsZSYpOwogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQp
IHx8IFBMQVRGT1JNKEdUSykKICAgICAgICAgQ29yZUlQQzo6QXR0YWNobWVudCByZWxlYXNlVG9B
dHRhY2htZW50KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgYWRvcHRGcm9tQXR0YWNobWVudChpbnQg
ZmlsZURlc2NyaXB0b3IsIHNpemVfdCk7CiAjZW5kaWYKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogICAgICAgICBtdXRhYmxlIG1hY2hfcG9ydF90IG1fcG9ydDsKICNlbGlmIFBMQVRGT1JNKFdJ
TikKICAgICAgICAgbXV0YWJsZSBIQU5ETEUgbV9oYW5kbGU7Ci0jZWxpZiBQTEFURk9STShRVCkK
KyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgICAgIG11dGFibGUgaW50
IG1fZmlsZURlc2NyaXB0b3I7CiAjZW5kaWYKICAgICAgICAgc2l6ZV90IG1fc2l6ZTsKQEAgLTk5
LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICBtYWNoX3BvcnRfdCBtX3BvcnQ7CiAjZWxpZiBQTEFU
Rk9STShXSU4pCiAgICAgSEFORExFIG1faGFuZGxlOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxp
ZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9y
OwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCmluZGV4IDA0ZDhhMDNiY2E1NGRm
YWNhYTE4YzhiYTcxMzU4MjdmOWZjMWUwNzAuLmE5YmExYzE5YzZlY2U3NGE4NzlhZTk1ODQ0ZDli
Yjg1NmZkYmUwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAg
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIHBpZF90IHBpZCA9IDA7
CiAKICAgICBpbnQgc29ja2V0c1syXTsKLSAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NL
X1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKSB7CisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwg
U09DS19ER1JBTSwgMCwgc29ja2V0cykgPCAwKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZCB3aXRoIGVycm5vICVkLlxuIiwgZXJybm8pOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpp
bmRleCAzZmMzOWJhOWI2ZjEyNjZjYWM3NjlhZDg5MjYzODhlZDdkY2M1NTc5Li42YWNlNjUyMTkx
MmM5NTBmNzVhYzcwOTc2ZGQ4ODk5MzRjMDNlNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAtMjg1LDE2
ICsyODUsMTYgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9CaW5hcnlTZW1h
cGhvcmUuY3BwIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwIFwKICAgICBQ
bGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuY3BwIFwKLSAgICBQbGF0Zm9ybS9Db3JlSVBD
L3F0L0F0dGFjaG1lbnRRdC5jcHAgXAotICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlv
blF0LmNwcCBcCisgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcCBc
CisgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCiAgICAgUGxh
dGZvcm0vTG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAogICAgIFBsYXRm
b3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKICAgICBQbGF0
Zm9ybS9xdC9Nb2R1bGVRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1J1bkxvb3BRdC5jcHAgXAot
ICAgIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvV29y
a1F1ZXVlUXQuY3BwIFwKKyAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwK
ICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgXAog
ICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5j
cHAgXAogICAgIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85555</attachid>
            <date>2011-03-11 16:49:13 -0800</date>
            <delta_ts>2011-03-29 12:34:36 -0700</delta_ts>
            <desc>Previous patch with file movement intact</desc>
            <filename>0001-GTK-Implement-SharedMemory-for-WebKit2.patch</filename>
            <type>text/plain</type>
            <size>57176</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSAzOTA1YjQxOGJjMTdhY2E0ZDFkZTMxZjZhMDA4YzFjMzdkZmI0YTAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDcgTWFyIDIwMTEgMTM6NDU6MTggLTA4MDAKU3ViamVjdDogW1BBVENIXSBb
R1RLXSBJbXBsZW1lbnQgU2hhcmVkTWVtb3J5IGZvciBXZWJLaXQyCiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKU2hhcmUgdGhlIFNoYXJlZE1lbW9yeSwgQXR0YWNobWVudCBhbmQgQ29ubmVjdGlvbiBpbXBs
ZW1lbnRhdGlvbnMgd2l0aCB0aGUgUXQgcG9ydC4KQm90aCBpbXBsZW1lbnRhdGlvbiBhcmUsIGlu
IGZhY3QsIGdlbmVyYWwgVW5peCBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgc3RhbmRhcmQgVW5peApk
b21haW4gc29ja2V0cyBhbmQgc2VuZG1zZyAvIHJlY3Ztc2cuIFRoaXMgc2hvdWxkIHJlZHVjZSB0
aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQgY29kZQpncmVhdGx5IGFuZCBsYXkgdGhlIGdyb3VuZHdv
cmsgZm9yIEdUSysvUXQgaW1wbGVtZW50YXRpb25zIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVt
cy4KCiogR05VbWFrZWZpbGUuYW06IFJlcGxhY2VkIEdUSysgdmVyc2lvbnMgb2YgZmlsZXMgd2l0
aCB0aGUgVW5peCBvbmVzLgoqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDog
RXh0ZW5kZWQgUXQgI2lmZGVmcyB0byBpbmNsdWRlIEdUSy4KKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2Rlcjo6fkFyZ3VtZW50RGVjb2Rlcik6CiogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29k
ZXIuY3BwOiBEaXR0by4KKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcjo6fkFyZ3VtZW50RW5jb2Rl
cik6CiogUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50Lmg6IERpdHRvLgoqIFBsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oOiBDb21iaW5lZCB0aGUgR1RLKyBhbmQgUXQgc2VjdGlvbnMuCiog
UGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVudFF0LmNwcC4KKiBQbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwLgoqIFBsYXRmb3Jt
L3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAuCiogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Q
cm9jZXNzTGF1bmNoZXJHdGsuY3BwOgooV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MpOiBVc2UgU09DS19ER1JBTSBpbnN0ZWFkIG9mIFNPQ0tfU1RSRUFNIHRvIG1hdGNoIFF0
LgoqIFdlYktpdDIucHJvOiBVcGRhdGVkIHNvdXJjZSBsaXN0IHRvIHJlZmxlY3QgZmlsZSByZW5h
bWluZy4KLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMjYgKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgNSArLQogLi4uL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwICAgfCAgICAyICstCiAuLi4vV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50RW5jb2Rlci5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQXR0YWNobWVudC5oICAgICAgIHwgICAgOCArLQogU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Db25uZWN0aW9uLmggICAgICAgfCAgIDE0ICstCiAuLi4vV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAgICB8ICAgNTMgLS0tCiAuLi4vV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAgICB8ICAzNjkgLS0tLS0tLS0t
LS0tLS0tLS0tCiAuLi4vUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcCAg
ICAgICB8ICAgNTAgKysrCiAuLi4vUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4
LmNwcCAgICAgICB8ICAzOTcgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL1NoYXJlZE1lbW9yeS5oICAgICAgICAgICAgIHwgICAgOCArLQogU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwICAgICAgfCAgMjI4IC0tLS0tLS0tLS0t
CiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwICB8ICAy
MzggKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNo
ZXJHdGsuY3BwICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgNiArLQogMTUgZmlsZXMgY2hhbmdlZCwgNzMyIGluc2VydGlv
bnMoKyksIDY3NiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0
YWNobWVudFVuaXguY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggYWMxM2EwNS4uNWRjNzU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5
IEBACisyMDExLTAzLTExICAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFu
ZCBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgU2hhcmVk
TWVtb3J5IGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTc5MQorCisgICAgICAgIFNoYXJlIHRoZSBTaGFyZWRNZW1vcnksIEF0dGFj
aG1lbnQgYW5kIENvbm5lY3Rpb24gaW1wbGVtZW50YXRpb25zIHdpdGggdGhlIFF0IHBvcnQuCisg
ICAgICAgIEJvdGggaW1wbGVtZW50YXRpb24gYXJlLCBpbiBmYWN0LCBnZW5lcmFsIFVuaXggaW1w
bGVtZW50YXRpb25zIHVzaW5nIHN0YW5kYXJkIFVuaXgKKyAgICAgICAgZG9tYWluIHNvY2tldHMg
YW5kIHNlbmRtc2cgLyByZWN2bXNnLiBUaGlzIHNob3VsZCByZWR1Y2UgdGhlIGFtb3VudCBvZiBk
dXBsaWNhdGVkIGNvZGUKKyAgICAgICAgZ3JlYXRseSBhbmQgbGF5IHRoZSBncm91bmR3b3JrIGZv
ciBHVEsrL1F0IGltcGxlbWVudGF0aW9ucyBmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVwbGFjZWQgR1RLKyB2ZXJzaW9ucyBvZiBmaWxl
cyB3aXRoIHRoZSBVbml4IG9uZXMuCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwOiBFeHRlbmRlZCBRdCAjaWZkZWZzIHRvIGluY2x1ZGUgR1RLLgorICAgICAg
ICAoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKToKKyAgICAgICAg
KiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHA6IERpdHRvLgorICAgICAgICAo
Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaDogRGl0dG8uCisgICAgICAgICogUGxhdGZvcm0v
Q29yZUlQQy9Db25uZWN0aW9uLmg6IENvbWJpbmVkIHRoZSBHVEsrIGFuZCBRdCBzZWN0aW9ucy4K
KyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRhY2htZW50UXQu
Y3BwLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rp
b25RdC5jcHAuCisgICAgICAgICogUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNw
cC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcyk6IFVz
ZSBTT0NLX0RHUkFNIGluc3RlYWQgb2YgU09DS19TVFJFQU0gdG8gbWF0Y2ggUXQuCisgICAgICAg
ICogV2ViS2l0Mi5wcm86IFVwZGF0ZWQgc291cmNlIGxpc3QgdG8gcmVmbGVjdCBmaWxlIHJlbmFt
aW5nLgorCiAyMDExLTAzLTExICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXgg
MDJjMDZjMy4uMWM5NDVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTkyLDEzICs5MiwxMyBA
QCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9Db3JlSVBDTWVzc2FnZUtpbmRzLmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvRGF0YVJlZmVyZW5jZS5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL2d0
ay9Db25uZWN0aW9uR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9I
YW5kbGVNZXNzYWdlLmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2Fn
ZUlELmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZVNlbmRlci5o
IFwKKwlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXgu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVu
aXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9ndGsvU2hhcmVkTWVtb3J5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0xvZ2dpbmcuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmggXApAQCAt
MTA4LDYgKzEwOCw3IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9SdW5Mb29wLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9v
cC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCisJU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcCBcCiAJU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya0l0ZW0uaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29y
a1F1ZXVlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3Bw
CmluZGV4IDQ2NjQ4MDYuLmRjNTY2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgQXJndW1l
bnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKCkKIHsKICAgICBBU1NFUlQobV9idWZmZXIpOwog
ICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSNpZiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRGT1JN
KFFUKSAmJiAhUExBVEZPUk0oR1RLKQogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRpc3Bvc2Ug
b2YgdGhlIG1hY2ggcG9ydHMgaW4gY2FzZXMgb2YgZmFpbHVyZS4KICNlbHNlCiAgICAgRGVxdWU8
QXR0YWNobWVudD46Oml0ZXJhdG9yIGVuZCA9IG1fYXR0YWNobWVudHMuZW5kKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAKaW5k
ZXggYWE3MWIwZi4uNmQzYzJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcApAQCAtNTAsNyArNTAsNyBAQCBBcmd1bWVudEVu
Y29kZXI6On5Bcmd1bWVudEVuY29kZXIoKQogewogICAgIGlmIChtX2J1ZmZlcikKICAgICAgICAg
ZmFzdEZyZWUobV9idWZmZXIpOwotI2lmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQp
ICYmICFQTEFURk9STShHVEspCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0
aGUgYXR0YWNobWVudHMgaW4gY2FzZXMgb2YgZmFpbHVyZS4KICNlbHNlCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX2F0dGFjaG1lbnRzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaAppbmRleCBjMDU3NzE0Li4wMmVkMjE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaApAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBNYWNoUG9ydFR5cGUs
CiAgICAgICAgIE1hY2hPT0xNZW1vcnlUeXBlCi0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBM
QVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgICAgIE1hcHBlZE1lbW9yeQogI2VuZGlm
CiAgICAgfTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBBdHRhY2htZW50KG1hY2hfcG9ydF9uYW1lX3QgcG9ydCwgbWFjaF9tc2dfdHlwZV9uYW1lX3Qg
ZGlzcG9zaXRpb24pOwogICAgIEF0dGFjaG1lbnQodm9pZCogYWRkcmVzcywgbWFjaF9tc2dfc2l6
ZV90IHNpemUsIG1hY2hfbXNnX2NvcHlfb3B0aW9uc190IGNvcHlPcHRpb25zLCBib29sIGRlYWxs
b2NhdGUpOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIEF0dGFjaG1lbnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3QpOwogI2Vu
ZGlmCiAKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIG1hY2hfbXNnX3NpemVfdCBzaXpl
KCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1f
b29sTWVtb3J5LnNpemU7IH0KICAgICBtYWNoX21zZ19jb3B5X29wdGlvbnNfdCBjb3B5T3B0aW9u
cygpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBNYWNoT09MTWVtb3J5VHlwZSk7IHJldHVybiBt
X29vbE1lbW9yeS5jb3B5T3B0aW9uczsgfQogICAgIGJvb2wgZGVhbGxvY2F0ZSgpIGNvbnN0IHsg
QVNTRVJUKG1fdHlwZSA9PSBNYWNoT09MTWVtb3J5VHlwZSk7IHJldHVybiBtX29vbE1lbW9yeS5k
ZWFsbG9jYXRlOyB9Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
IAogICAgIGludCByZWxlYXNlRmlsZURlc2NyaXB0b3IoKSB7IGludCB0ZW1wID0gbV9maWxlRGVz
Y3JpcHRvcjsgbV9maWxlRGVzY3JpcHRvciA9IC0xOyByZXR1cm4gdGVtcDsgfQpAQCAtOTQsNyAr
OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYm9vbCBkZWFsbG9jYXRlOwogICAgICAgICB9
IG1fb29sTWVtb3J5OwogICAgIH07Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3I7CiAgICAgc2l6
ZV90IG1fc2l6ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nv
bm5lY3Rpb24uaAppbmRleCBlYWEyYWI5Li42YmVhZGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMjk5LDIzICsyOTksMTcgQEAgcHJpdmF0
ZToKICAgICBPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBtX3BlbmRpbmdXcml0ZUFyZ3VtZW50czsK
ICAgICBPVkVSTEFQUEVEIG1fd3JpdGVTdGF0ZTsKICAgICBIQU5ETEUgbV9jb25uZWN0aW9uUGlw
ZTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdU
SykKICAgICAvLyBDYWxsZWQgb24gdGhlIGNvbm5lY3Rpb24gcXVldWUuCiAgICAgdm9pZCByZWFk
eVJlYWRIYW5kbGVyKCk7CiAKICAgICBWZWN0b3I8dWludDhfdD4gbV9yZWFkQnVmZmVyOwogICAg
IHNpemVfdCBtX2N1cnJlbnRNZXNzYWdlU2l6ZTsKLSAgICBRU29ja2V0Tm90aWZpZXIqIG1fc29j
a2V0Tm90aWZpZXI7CiAgICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKLSNlbGlmIFBMQVRGT1JN
KEdUSykKLSAgICB2b2lkIHJlYWRFdmVudEhhbmRsZXIoKTsKLSAgICB2b2lkIHByb2Nlc3NDb21w
bGV0ZWRNZXNzYWdlKCk7Ci0gICAgYm9vbCBtZXNzYWdlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpIHsg
cmV0dXJuICFtX2N1cnJlbnRNZXNzYWdlU2l6ZTsgfQogCi0gICAgaW50IG1fc29ja2V0OwotICAg
IFZlY3Rvcjx1aW50OF90PiBtX3JlYWRCdWZmZXI7Ci0gICAgc2l6ZV90IG1fY3VycmVudE1lc3Nh
Z2VTaXplOwotICAgIHNpemVfdCBtX3BlbmRpbmdCeXRlczsKKyNpZiBQTEFURk9STShRVCkKKyAg
ICBRU29ja2V0Tm90aWZpZXIqIG1fc29ja2V0Tm90aWZpZXI7CisjZW5kaWYKICNlbmRpZgogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRhY2ht
ZW50UXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRhY2htZW50
UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzBlYmMwLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVudFF0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXR0YWNobWVudC5oIgotCi0jaWYgUExBVEZP
Uk0oUVQpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNlbmRpZgot
Ci0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLQotQXR0YWNobWVudDo6QXR0YWNobWVudChpbnQgZmls
ZURlc2NyaXB0b3IsIHNpemVfdCBzaXplKQotICAgIDogbV90eXBlKE1hcHBlZE1lbW9yeSkKLSAg
ICAsIG1fZmlsZURlc2NyaXB0b3IoZmlsZURlc2NyaXB0b3IpCi0gICAgLCBtX3NpemUoc2l6ZSkK
LXsKLSAgICBBU1NFUlQobV9maWxlRGVzY3JpcHRvcik7Ci0gICAgQVNTRVJUKG1fc2l6ZSk7Ci19
Ci0KLXZvaWQgQXR0YWNobWVudDo6ZGlzcG9zZSgpCi17Ci0gICAgaWYgKG1fZmlsZURlc2NyaXB0
b3IgIT0gLTEpCi0gICAgICAgIHdoaWxlIChjbG9zZShtX2ZpbGVEZXNjcmlwdG9yKSA9PSAtMSAm
JiAoZXJybm8gPT0gRUlOVFIpKSB7IH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQu
Y3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjVkN2RjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLQotI2luY2x1ZGUgIkFyZ3Vt
ZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgotI2luY2x1ZGUgIldv
cmtJdGVtLmgiCi0jaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vz
c1Byb3h5LmgiCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFTb2NrZXROb3Rp
Zmllcj4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5j
bHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLQot
c3RhdGljIGNvbnN0IHNpemVfdCBtZXNzYWdlTWF4U2l6ZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3Qg
c2l6ZV90IGF0dGFjaG1lbnRNYXhBbW91bnQgPSAyNTU7Ci0KLWVudW0gewotICAgIE1lc3NhZ2VC
b2R5SXNPT0wgPSAxIDw8IDMxCi19OwotCi1jbGFzcyBNZXNzYWdlSW5mbyB7Ci1wdWJsaWM6Ci0g
ICAgTWVzc2FnZUluZm8oKSB7IH0KLQotICAgIE1lc3NhZ2VJbmZvKE1lc3NhZ2VJRCBtZXNzYWdl
SUQsIHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IGluaXRpYWxBdHRhY2htZW50Q291bnQpCi0gICAg
ICAgIDogbV9tZXNzYWdlSUQobWVzc2FnZUlELnRvSW50KCkpCi0gICAgICAgICwgbV9ib2R5U2l6
ZShib2R5U2l6ZSkKLSAgICAgICAgLCBtX2F0dGFjaG1lbnRDb3VudChpbml0aWFsQXR0YWNobWVu
dENvdW50KQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEobV9tZXNzYWdlSUQgJiBNZXNzYWdlQm9k
eUlzT09MKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNZXNzYWdlQm9keU9PTCgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoIWlzTWVzc2FnZUJvZHlPT0woKSk7Ci0KLSAgICAgICAgbV9tZXNzYWdl
SUQgfD0gTWVzc2FnZUJvZHlJc09PTDsKLSAgICAgICAgbV9hdHRhY2htZW50Q291bnQrKzsKLSAg
ICB9Ci0KLSAgICBib29sIGlzTWVzc2FnZUJvZHlPT0woKSBjb25zdCB7IHJldHVybiBtX21lc3Nh
Z2VJRCAmIE1lc3NhZ2VCb2R5SXNPT0w7IH0KLQotICAgIHNpemVfdCBib2R5U2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYm9keVNpemU7IH0KLQotICAgIE1lc3NhZ2VJRCBtZXNzYWdlSUQoKSBjb25z
dCB7IHJldHVybiBNZXNzYWdlSUQ6OmZyb21JbnQobV9tZXNzYWdlSUQgJiB+TWVzc2FnZUJvZHlJ
c09PTCk7IH0KLQotICAgIHNpemVfdCBhdHRhY2htZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2F0dGFjaG1lbnRDb3VudDsgfQotCi1wcml2YXRlOgotICAgIHVpbnQzMl90IG1fbWVzc2FnZUlE
OwotICAgIHNpemVfdCBtX2JvZHlTaXplOwotICAgIHNpemVfdCBtX2F0dGFjaG1lbnRDb3VudDsK
LX07Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIgaWRl
bnRpZmllcikKLXsKLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpZGVudGlmaWVyOwotICAgIG1f
c29ja2V0Tm90aWZpZXIgPSAwOwotICAgIG1fcmVhZEJ1ZmZlci5yZXNpemUobWVzc2FnZU1heFNp
emUpOwotICAgIG1fY3VycmVudE1lc3NhZ2VTaXplID0gMDsKLX0KLQotdm9pZCBDb25uZWN0aW9u
OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0g
LTEpCi0gICAgICAgIHdoaWxlIChjbG9zZShtX3NvY2tldERlc2NyaXB0b3IpID09IC0xICYmIGVy
cm5vID09IEVJTlRSKSB7IH0KLQotICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZGVsZXRlIG1fc29ja2V0Tm90aWZpZXI7Ci0gICAgbV9zb2NrZXROb3RpZmll
ciA9IDA7Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gLTE7Ci0gICAgbV9pc0Nvbm5lY3RlZCA9
IGZhbHNlOwotfQotCi1jbGFzcyBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQgewotcHVibGlj
OgotICAgIFNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZChRU29ja2V0Tm90aWZpZXIqIHNvY2tl
dE5vdGlmaWVyKQotICAgICAgICA6IG1fc29ja2V0Tm90aWZpZXIoc29ja2V0Tm90aWZpZXIpCi0g
ICAgewotICAgICAgICBtX3NvY2tldE5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9
Ci0KLSAgICB+U29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkKCkKLSAgICB7Ci0gICAgICAgIG1f
c29ja2V0Tm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFFTb2NrZXROb3RpZmllciogY29uc3QgbV9zb2NrZXROb3RpZmllcjsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIFQsIGNsYXNzIGl0ZXJhdG9yPgotY2xhc3MgQXR0YWNobWVudFJlc291cmNlR3VhcmQg
ewotcHVibGljOgotICAgIEF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkKFQmIGF0dGFjaG1lbnRzKQot
ICAgICAgICA6IG1fYXR0YWNobWVudHMoYXR0YWNobWVudHMpCi0gICAgewotICAgIH0KLSAgICB+
QXR0YWNobWVudFJlc291cmNlR3VhcmQoKQotICAgIHsKLSAgICAgICAgaXRlcmF0b3IgZW5kID0g
bV9hdHRhY2htZW50cy5lbmQoKTsKLSAgICAgICAgZm9yIChpdGVyYXRvciBpID0gbV9hdHRhY2ht
ZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAgICAgaS0+ZGlzcG9zZSgpOwot
ICAgIH0KLXByaXZhdGU6Ci0gICAgVCYgbV9hdHRhY2htZW50czsKLX07Ci0KLXZvaWQgQ29ubmVj
dGlvbjo6cmVhZHlSZWFkSGFuZGxlcigpCi17Ci0gICAgRGVxdWU8QXR0YWNobWVudD4gYXR0YWNo
bWVudHM7Ci0gICAgU29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkIHNvY2tldE5vdGlmaWVyRW5h
YmxlcihtX3NvY2tldE5vdGlmaWVyKTsKLSAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZDxEZXF1
ZTxBdHRhY2htZW50PiwgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVudERp
c3Bvc2VyKGF0dGFjaG1lbnRzKTsKLQotICAgIGNoYXIgYXR0YWNobWVudERlc2NyaXB0b3JCdWZm
ZXJbQ01TR19TUEFDRShzaXplb2YoaW50KSAqIChhdHRhY2htZW50TWF4QW1vdW50KSldOwotICAg
IHN0cnVjdCBtc2doZHIgbWVzc2FnZTsKLSAgICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZiht
ZXNzYWdlKSk7Ci0KLSAgICBzdHJ1Y3QgaW92ZWMgaW92WzFdOwotICAgIG1lbXNldCgmaW92LCAw
LCBzaXplb2YoaW92KSk7Ci0KLSAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVudERl
c2NyaXB0b3JCdWZmZXI7Ci0gICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IENNU0dfU1BBQ0Uo
c2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpOwotCi0gICAgaW92WzBdLmlvdl9i
YXNlID0gbV9yZWFkQnVmZmVyLmRhdGEoKTsKLSAgICBpb3ZbMF0uaW92X2xlbiA9IG1fcmVhZEJ1
ZmZlci5zaXplKCk7Ci0KLSAgICBtZXNzYWdlLm1zZ19pb3YgPSBpb3Y7Ci0gICAgbWVzc2FnZS5t
c2dfaW92bGVuID0gMTsKLQotCi0gICAgaW50IG1lc3NhZ2VMZW5ndGggPSAwOwotICAgIHdoaWxl
ICgobWVzc2FnZUxlbmd0aCA9IHJlY3Ztc2cobV9zb2NrZXREZXNjcmlwdG9yLCAmbWVzc2FnZSwg
MCkpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgY21zZ2hkciogY29udHJvbE1lc3NhZ2UgPSBDTVNH
X0ZJUlNUSERSKCZtZXNzYWdlKTsKLQotICAgIE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOwotICAg
IHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VEYXRhID0gbV9yZWFkQnVmZmVyLmRhdGEoKTsKLQotICAg
IG1lbWNweSgmbWVzc2FnZUluZm8sIG1lc3NhZ2VEYXRhLCBzaXplb2YobWVzc2FnZUluZm8pKTsK
LSAgICBBU1NFUlQobWVzc2FnZUxlbmd0aCA9PSBzaXplb2YobWVzc2FnZUluZm8pICsgbWVzc2Fn
ZUluZm8uYXR0YWNobWVudENvdW50KCkgKiBzaXplb2Yoc2l6ZV90KSArIChtZXNzYWdlSW5mby5p
c01lc3NhZ2VCb2R5T09MKCkgPyAwIDogbWVzc2FnZUluZm8uYm9keVNpemUoKSkpOwotCi0gICAg
bWVzc2FnZURhdGEgKz0gc2l6ZW9mKG1lc3NhZ2VJbmZvKTsKLQotICAgIFJlZlB0cjxXZWJLaXQ6
OlNoYXJlZE1lbW9yeT4gb29sTWVzc2FnZUJvZHk7Ci0KLSAgICBpZiAobWVzc2FnZUluZm8uYXR0
YWNobWVudENvdW50KCkpIHsKLSAgICAgICAgaWYgKGNvbnRyb2xNZXNzYWdlICYmIGNvbnRyb2xN
ZXNzYWdlLT5jbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJiYgY29udHJvbE1lc3NhZ2UtPmNtc2df
dHlwZSA9PSBTQ01fUklHSFRTKSB7Ci0gICAgICAgICAgICBzaXplX3QgYXR0YWNobWVudFNpemVz
W21lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpXTsKLSAgICAgICAgICAgIG1lbWNweShhdHRh
Y2htZW50U2l6ZXMsIG1lc3NhZ2VEYXRhLCBzaXplb2YoYXR0YWNobWVudFNpemVzKSk7Ci0KLSAg
ICAgICAgICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihhdHRhY2htZW50U2l6ZXMpOwotCi0gICAg
ICAgICAgICBpbnQgZmlsZURlc2NyaXB0b3JzW21lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgp
XTsKLSAgICAgICAgICAgIG1lbWNweShmaWxlRGVzY3JpcHRvcnMsIENNU0dfREFUQShjb250cm9s
TWVzc2FnZSksIHNpemVvZihmaWxlRGVzY3JpcHRvcnMpKTsKLQotICAgICAgICAgICAgaW50IGF0
dGFjaG1lbnRDb3VudCA9IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpOwotCi0gICAgICAg
ICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQotICAgICAgICAgICAgICAg
IGF0dGFjaG1lbnRDb3VudC0tOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0
dGFjaG1lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGZjbnRsKGZpbGVE
ZXNjcmlwdG9yc1tpXSwgRl9TRVRGTCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkKLSAg
ICAgICAgICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoQXR0YWNobWVudChmaWxlRGVzY3JpcHRv
cnNbaV0sIGF0dGFjaG1lbnRTaXplc1tpXSkpOwotCi0gICAgICAgICAgICBpZiAobWVzc2FnZUlu
Zm8uaXNNZXNzYWdlQm9keU9PTCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1lc3NhZ2VJ
bmZvLmJvZHlTaXplKCkpOwotCi0gICAgICAgICAgICAgICAgV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgICAgICAgICAgaGFuZGxlLmFkb3B0RnJvbUF0dGFjaG1l
bnQoZmlsZURlc2NyaXB0b3JzW2F0dGFjaG1lbnRDb3VudF0sIGF0dGFjaG1lbnRTaXplc1thdHRh
Y2htZW50Q291bnRdKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb29sTWVz
c2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICAgICAgICAgICAgICBpZiAoIW9vbE1lc3NhZ2VC
b2R5KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjb250cm9sTWVzc2FnZSA9IENNU0dfTlhUSERSKCZtZXNzYWdlLCBjb250
cm9sTWVzc2FnZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEFT
U0VSVChhdHRhY2htZW50cy5zaXplKCkgPT0gbWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgp
ID8gbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkgLSAxIDogbWVzc2FnZUluZm8uYXR0YWNo
bWVudENvdW50KCkpOwotCi0gICAgdW5zaWduZWQgY2hhciogbWVzc2FnZUJvZHkgPSBtZXNzYWdl
RGF0YTsKLQotICAgIGlmIChtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5T09MKCkpCi0gICAgICAg
IG1lc3NhZ2VCb2R5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob29sTWVzc2Fn
ZUJvZHktPmRhdGEoKSk7Ci0KLSAgICBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2RlcjsK
LSAgICBpZiAoYXR0YWNobWVudHMuaXNFbXB0eSgpKQotICAgICAgICBhcmd1bWVudERlY29kZXIg
PSBuZXcgQXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFyZ3VtZW50RGVjb2RlciA9IG5ldyBBcmd1bWVudERlY29k
ZXIobWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlTaXplKCksIGF0dGFjaG1lbnRzKTsKLQot
ICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UobWVzc2FnZUluZm8ubWVzc2FnZUlEKCksIGFkb3B0
UHRyKGFyZ3VtZW50RGVjb2RlcikpOwotCi0gICAgQVNTRVJUKCFjb250cm9sTWVzc2FnZSk7Ci19
Ci0KLWJvb2wgQ29ubmVjdGlvbjo6b3BlbigpCi17Ci0gICAgQVNTRVJUKCFtX3NvY2tldE5vdGlm
aWVyKTsKLSAgICBpbnQgZmxhZ3MgPSBmY250bChtX3NvY2tldERlc2NyaXB0b3IsIEZfR0VURkws
IDApOwotICAgIHdoaWxlIChmY250bChtX3NvY2tldERlc2NyaXB0b3IsIEZfU0VURkwsIGZsYWdz
IHwgT19OT05CTE9DSykgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwotICAgIG1f
c29ja2V0Tm90aWZpZXIgPSBtX2Nvbm5lY3Rpb25RdWV1ZS5yZWdpc3RlclNvY2tldEV2ZW50SGFu
ZGxlcihtX3NvY2tldERlc2NyaXB0b3IsIFFTb2NrZXROb3RpZmllcjo6UmVhZCwgV29ya0l0ZW06
OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOwotCi0gICAgLy8g
U2NoZWR1bGUgYSBjYWxsIHRvIHJlYWR5UmVhZEhhbmRsZXIuIERhdGEgbWF5IGhhdmUgYXJyaXZl
ZCBiZWZvcmUgaW5zdGFsbGF0aW9uIG9mIHRoZSBzaWduYWwKLSAgICAvLyBoYW5kbGVyLgotICAg
IG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZD
b25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zb2NrZXROb3RpZmllcjsKLX0KLQotYm9vbCBDb25uZWN0aW9uOjpz
ZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1l
bnRFbmNvZGVyPiBhcmd1bWVudHMpCi17Ci0gICAgQVNTRVJUKG1fc29ja2V0Tm90aWZpZXIpOwot
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlSW5mbykgKyBhdHRhY2htZW50TWF4QW1v
dW50ICogc2l6ZW9mKHNpemVfdCkgPD0gbWVzc2FnZU1heFNpemUsIEF0dGFjaG1lbnRzRml0VG9N
ZXNzYWdlSW5saW5lKTsKLQotICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRhY2htZW50cyA9IGFy
Z3VtZW50cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7Ci0gICAgQXR0YWNobWVudFJlc291cmNlR3Vh
cmQ8VmVjdG9yPEF0dGFjaG1lbnQ+LCBWZWN0b3I8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRh
Y2hlbWVudERpc3Bvc2VyKGF0dGFjaG1lbnRzKTsKLQotICAgIGlmIChhdHRhY2htZW50cy5zaXpl
KCkgPiAoYXR0YWNobWVudE1heEFtb3VudCAtIDEpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTWVzc2FnZUluZm8g
bWVzc2FnZUluZm8obWVzc2FnZUlELCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSwgYXR0YWNobWVu
dHMuc2l6ZSgpKTsKLSAgICBzaXplX3QgbWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA9IHNpemVv
ZihtZXNzYWdlSW5mbykgKyAoYXR0YWNobWVudHMuc2l6ZSgpICogc2l6ZW9mKHNpemVfdCkpICsg
YXJndW1lbnRzLT5idWZmZXJTaXplKCk7Ci0gICAgaWYgKG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxp
bmUgPiBtZXNzYWdlTWF4U2l6ZSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkgewotICAgICAg
ICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OmNyZWF0ZShhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIGlm
ICghb29sTWVzc2FnZUJvZHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGlmICghb29sTWVz
c2FnZUJvZHktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpSZWFk
T25seSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbWVzc2FnZUluZm8u
c2V0TWVzc2FnZUJvZHlPT0woKTsKLQotICAgICAgICBtZW1jcHkob29sTWVzc2FnZUJvZHktPmRh
dGEoKSwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOwotCi0g
ICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChoYW5kbGUucmVsZWFzZVRvQXR0YWNobWVudCgpKTsK
LSAgICB9Ci0KLSAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7Ci0gICAgbWVtc2V0KCZtZXNzYWdl
LCAwLCBzaXplb2YobWVzc2FnZSkpOwotCi0gICAgc3RydWN0IGlvdmVjIGlvdlszXTsKLSAgICBt
ZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOwotCi0gICAgbWVzc2FnZS5tc2dfaW92ID0gaW92
OwotICAgIGludCBpb3ZMZW5ndGggPSAxOwotCi0gICAgaW92WzBdLmlvdl9iYXNlID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oJm1lc3NhZ2VJbmZvKTsKLSAgICBpb3ZbMF0uaW92X2xlbiA9IHNp
emVvZihtZXNzYWdlSW5mbyk7Ci0KLSAgICBjaGFyIGF0dGFjaG1lbnRGREJ1ZmZlcltDTVNHX1NQ
QUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRzLnNpemUoKSkpXTsKLSAgICBzaXplX3QgYXR0
YWNobWVudFNpemVzW2F0dGFjaG1lbnRzLnNpemUoKV07Ci0KLSAgICBpZiAoIWF0dGFjaG1lbnRz
LmlzRW1wdHkoKSkgewotICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVudEZE
QnVmZmVyOwotICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGF0dGFjaG1l
bnRGREJ1ZmZlcik7Ci0KLSAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cgPSBDTVNHX0ZJUlNU
SERSKCZtZXNzYWdlKTsKLSAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7Ci0g
ICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7Ci0gICAgICAgIGNtc2ctPmNtc2df
bGVuID0gQ01TR19MRU4oc2l6ZW9mKGludCkgKiBhdHRhY2htZW50cy5zaXplKCkpOwotCi0gICAg
ICAgIGludCogZmRwdHIgPSByZWludGVycHJldF9jYXN0PGludCo+KENNU0dfREFUQShjbXNnKSk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVudHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGF0dGFjaG1lbnRTaXplc1tpXSA9IGF0dGFjaG1lbnRzW2ldLnNpemUoKTsK
LSAgICAgICAgICAgIGZkcHRyW2ldID0gYXR0YWNobWVudHNbaV0uZmlsZURlc2NyaXB0b3IoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBjbXNnLT5jbXNn
X2xlbjsKLQotICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IGF0dGFjaG1lbnRTaXpl
czsKLSAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IHNpemVvZihhdHRhY2htZW50U2l6
ZXMpOwotICAgICAgICArK2lvdkxlbmd0aDsKLSAgICB9Ci0KLSAgICBpZiAoIW1lc3NhZ2VJbmZv
LmlzTWVzc2FnZUJvZHlPT0woKSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkgewotICAgICAg
ICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFyZ3Vt
ZW50cy0+YnVmZmVyKCkpOwotICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfbGVuID0gYXJndW1l
bnRzLT5idWZmZXJTaXplKCk7Ci0gICAgICAgICsraW92TGVuZ3RoOwotICAgIH0KLQotICAgIG1l
c3NhZ2UubXNnX2lvdmxlbiA9IGlvdkxlbmd0aDsKLQotICAgIGludCBieXRlc1NlbnQgPSAwOwot
ICAgIHdoaWxlICgoYnl0ZXNTZW50ID0gc2VuZG1zZyhtX3NvY2tldERlc2NyaXB0b3IsICZtZXNz
YWdlLCAwKSkgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb25u
ZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJL
aXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcykKLXsKLSAgICBtX2Nvbm5lY3Rp
b25RdWV1ZS5zY2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKHByb2Nlc3MsIFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yZDg0MmRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcApAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF0dGFj
aG1lbnQuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK25h
bWVzcGFjZSBDb3JlSVBDIHsKKworQXR0YWNobWVudDo6QXR0YWNobWVudChpbnQgZmlsZURlc2Ny
aXB0b3IsIHNpemVfdCBzaXplKQorICAgIDogbV90eXBlKE1hcHBlZE1lbW9yeSkKKyAgICAsIG1f
ZmlsZURlc2NyaXB0b3IoZmlsZURlc2NyaXB0b3IpCisgICAgLCBtX3NpemUoc2l6ZSkKK3sKKyAg
ICBBU1NFUlQobV9maWxlRGVzY3JpcHRvcik7CisgICAgQVNTRVJUKG1fc2l6ZSk7Cit9CisKK3Zv
aWQgQXR0YWNobWVudDo6ZGlzcG9zZSgpCit7CisgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgIT0g
LTEpCisgICAgICAgIHdoaWxlIChjbG9zZShtX2ZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiAoZXJy
bm8gPT0gRUlOVFIpKSB7IH0KK30KKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliZDRjOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9u
VW5peC5jcHAKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiQXJn
dW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCisjaW5jbHVkZSAi
V29ya0l0ZW0uaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+
CisjaW5jbHVkZSA8UVNvY2tldE5vdGlmaWVyPgorI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1
ZGUgPGdsaWIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2Ug
Q29yZUlQQyB7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Owor
c3RhdGljIGNvbnN0IHNpemVfdCBhdHRhY2htZW50TWF4QW1vdW50ID0gMjU1OworCitlbnVtIHsK
KyAgICBNZXNzYWdlQm9keUlzT09MID0gMSA8PCAzMQorfTsKKworY2xhc3MgTWVzc2FnZUluZm8g
eworcHVibGljOgorICAgIE1lc3NhZ2VJbmZvKCkgeyB9CisKKyAgICBNZXNzYWdlSW5mbyhNZXNz
YWdlSUQgbWVzc2FnZUlELCBzaXplX3QgYm9keVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVu
dENvdW50KQorICAgICAgICA6IG1fbWVzc2FnZUlEKG1lc3NhZ2VJRC50b0ludCgpKQorICAgICAg
ICAsIG1fYm9keVNpemUoYm9keVNpemUpCisgICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5p
dGlhbEF0dGFjaG1lbnRDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG1fbWVzc2FnZUlE
ICYgTWVzc2FnZUJvZHlJc09PTCkpOworICAgIH0KKworICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlP
T0woKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc01lc3NhZ2VCb2R5T09MKCkpOworCisgICAg
ICAgIG1fbWVzc2FnZUlEIHw9IE1lc3NhZ2VCb2R5SXNPT0w7CisgICAgICAgIG1fYXR0YWNobWVu
dENvdW50Kys7CisgICAgfQorCisgICAgYm9vbCBpc01lc3NhZ2VCb2R5T09MKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXNzYWdlSUQgJiBNZXNzYWdlQm9keUlzT09MOyB9CisKKyAgICBzaXplX3QgYm9k
eVNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHlTaXplOyB9CisKKyAgICBNZXNzYWdlSUQgbWVz
c2FnZUlEKCkgY29uc3QgeyByZXR1cm4gTWVzc2FnZUlEOjpmcm9tSW50KG1fbWVzc2FnZUlEICYg
fk1lc3NhZ2VCb2R5SXNPT0wpOyB9CisKKyAgICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9hdHRhY2htZW50Q291bnQ7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJf
dCBtX21lc3NhZ2VJRDsKKyAgICBzaXplX3QgbV9ib2R5U2l6ZTsKKyAgICBzaXplX3QgbV9hdHRh
Y2htZW50Q291bnQ7Cit9OworCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRp
ZmllcjsKKyAgICBtX3JlYWRCdWZmZXIucmVzaXplKG1lc3NhZ2VNYXhTaXplKTsKKyAgICBtX2N1
cnJlbnRNZXNzYWdlU2l6ZSA9IDA7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBtX3NvY2tldE5v
dGlmaWVyID0gMDsKKyNlbmRpZgorfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCit7CisgICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSAtMSkKKyAgICAgICAgd2hp
bGUgKGNsb3NlKG1fc29ja2V0RGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsg
fQorCisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nv
Y2tldERlc2NyaXB0b3IgPSAtMTsKKyAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7CisKKyNpZiBQ
TEFURk9STShRVCkKKyAgICBkZWxldGUgbV9zb2NrZXROb3RpZmllcjsKKyAgICBtX3NvY2tldE5v
dGlmaWVyID0gMDsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oUVQpCitjbGFzcyBTb2NrZXRO
b3RpZmllclJlc291cmNlR3VhcmQgeworcHVibGljOgorICAgIFNvY2tldE5vdGlmaWVyUmVzb3Vy
Y2VHdWFyZChRU29ja2V0Tm90aWZpZXIqIHNvY2tldE5vdGlmaWVyKQorICAgICAgICA6IG1fc29j
a2V0Tm90aWZpZXIoc29ja2V0Tm90aWZpZXIpCisgICAgeworICAgICAgICBtX3NvY2tldE5vdGlm
aWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICB9CisKKyAgICB+U29ja2V0Tm90aWZpZXJSZXNv
dXJjZUd1YXJkKCkKKyAgICB7CisgICAgICAgIG1fc29ja2V0Tm90aWZpZXItPnNldEVuYWJsZWQo
dHJ1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFTb2NrZXROb3RpZmllciogY29uc3QgbV9z
b2NrZXROb3RpZmllcjsKK307CisjZW5kaWYKKwordGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgaXRl
cmF0b3I+CitjbGFzcyBBdHRhY2htZW50UmVzb3VyY2VHdWFyZCB7CitwdWJsaWM6CisgICAgQXR0
YWNobWVudFJlc291cmNlR3VhcmQoVCYgYXR0YWNobWVudHMpCisgICAgICAgIDogbV9hdHRhY2ht
ZW50cyhhdHRhY2htZW50cykKKyAgICB7CisgICAgfQorICAgIH5BdHRhY2htZW50UmVzb3VyY2VH
dWFyZCgpCisgICAgeworICAgICAgICBpdGVyYXRvciBlbmQgPSBtX2F0dGFjaG1lbnRzLmVuZCgp
OworICAgICAgICBmb3IgKGl0ZXJhdG9yIGkgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGkgIT0g
ZW5kOyArK2kpCisgICAgICAgICAgICBpLT5kaXNwb3NlKCk7CisgICAgfQorcHJpdmF0ZToKKyAg
ICBUJiBtX2F0dGFjaG1lbnRzOworfTsKKwordm9pZCBDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5k
bGVyKCkKK3sKKyAgICBEZXF1ZTxBdHRhY2htZW50PiBhdHRhY2htZW50czsKKyNpZiBQTEFURk9S
TShRVCkKKyAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQgc29ja2V0Tm90aWZpZXJFbmFi
bGVyKG1fc29ja2V0Tm90aWZpZXIpOworI2VuZGlmCisgICAgQXR0YWNobWVudFJlc291cmNlR3Vh
cmQ8RGVxdWU8QXR0YWNobWVudD4sIERlcXVlPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNo
ZW1lbnREaXNwb3NlcihhdHRhY2htZW50cyk7CisKKyAgICBjaGFyIGF0dGFjaG1lbnREZXNjcmlw
dG9yQnVmZmVyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkp
XTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBz
aXplb2YobWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlvdlsxXTsKKyAgICBtZW1zZXQo
JmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFj
aG1lbnREZXNjcmlwdG9yQnVmZmVyOworICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBDTVNH
X1NQQUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRNYXhBbW91bnQpKTsKKworICAgIGlvdlsw
XS5pb3ZfYmFzZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAgaW92WzBdLmlvdl9sZW4gPSBt
X3JlYWRCdWZmZXIuc2l6ZSgpOworCisgICAgbWVzc2FnZS5tc2dfaW92ID0gaW92OworICAgIG1l
c3NhZ2UubXNnX2lvdmxlbiA9IDE7CisKKworICAgIGludCBtZXNzYWdlTGVuZ3RoID0gMDsKKyAg
ICB3aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29ja2V0RGVzY3JpcHRvciwgJm1l
c3NhZ2UsIDApKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RydWN0IGNtc2doZHIqIGNvbnRyb2xNZXNzYWdl
ID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7CisKKyAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5m
bzsKKyAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7
CisKKyAgICBtZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKG1lc3NhZ2VJ
bmZvKSk7CisgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6ZW9mKG1lc3NhZ2VJbmZvKSAr
IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKHNpemVfdCkgKyAobWVzc2Fn
ZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkpKTsK
KworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAgICBSZWZQdHI8
V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5OworCisgICAgaWYgKG1lc3NhZ2VJ
bmZvLmF0dGFjaG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChjb250cm9sTWVzc2FnZSAmJiBj
b250cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNvbnRyb2xNZXNzYWdl
LT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgeworICAgICAgICAgICAgc2l6ZV90IGF0dGFjaG1l
bnRTaXplc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07CisgICAgICAgICAgICBtZW1j
cHkoYXR0YWNobWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKGF0dGFjaG1lbnRTaXplcykp
OworCisgICAgICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YoYXR0YWNobWVudFNpemVzKTsK
KworICAgICAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNzYWdlSW5mby5hdHRhY2htZW50
Q291bnQoKV07CisgICAgICAgICAgICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLCBDTVNHX0RBVEEo
Y29udHJvbE1lc3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3JzKSk7CisKKyAgICAgICAgICAg
IGludCBhdHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKTsKKwor
ICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKKyAgICAgICAg
ICAgICAgICBhdHRhY2htZW50Q291bnQtLTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChmY250
bChmaWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkwsIEZEX0NMT0VYRUMpID09IC0xKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyAr
K2kpCisgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKEF0dGFjaG1lbnQoZmlsZURl
c2NyaXB0b3JzW2ldLCBhdHRhY2htZW50U2l6ZXNbaV0pKTsKKworICAgICAgICAgICAgaWYgKG1l
c3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCht
ZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9wdEZyb21B
dHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291bnRdLCBhdHRhY2htZW50U2l6
ZXNbYXR0YWNobWVudENvdW50XSk7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFdl
YktpdDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgICAgICAgICAgICAgaWYgKCFvb2xN
ZXNzYWdlQm9keSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigmbWVzc2Fn
ZSwgY29udHJvbE1lc3NhZ2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBBU1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJv
ZHlPT0woKSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpIC0gMSA6IG1lc3NhZ2VJbmZv
LmF0dGFjaG1lbnRDb3VudCgpKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VCb2R5ID0g
bWVzc2FnZURhdGE7CisKKyAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQor
ICAgICAgICBtZXNzYWdlQm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG9v
bE1lc3NhZ2VCb2R5LT5kYXRhKCkpOworCisgICAgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudERl
Y29kZXI7CisgICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgYXJndW1lbnRE
ZWNvZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9k
eVNpemUoKSk7CisgICAgZWxzZQorICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJndW1l
bnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpLCBhdHRhY2htZW50
cyk7CisKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3NhZ2VJRCgp
LCBhZG9wdFB0cihhcmd1bWVudERlY29kZXIpKTsKKworICAgIEFTU0VSVCghY29udHJvbE1lc3Nh
Z2UpOworfQorCitib29sIENvbm5lY3Rpb246Om9wZW4oKQoreworI2lmIFBMQVRGT1JNKFFUKQor
ICAgIEFTU0VSVCghbV9zb2NrZXROb3RpZmllcik7CisjZW5kaWYKKworICAgIGludCBmbGFncyA9
IGZjbnRsKG1fc29ja2V0RGVzY3JpcHRvciwgRl9HRVRGTCwgMCk7CisgICAgd2hpbGUgKGZjbnRs
KG1fc29ja2V0RGVzY3JpcHRvciwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAtMSkg
eworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9pc0Nvbm5lY3RlZCA9IHRydWU7CisjaWYgUExBVEZPUk0oUVQpCisgICAgbV9zb2Nr
ZXROb3RpZmllciA9IG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KG1fc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpSZWFkLCBXb3JrSXRlbTo6Y3Jl
YXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7CisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIo
bV9zb2NrZXREZXNjcmlwdG9yLCAoR19JT19IVVAgfCBHX0lPX0VSUiksIFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSkpOworICAgIG1fY29ubmVj
dGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0RGVzY3JpcHRvciwg
R19JT19JTiwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFu
ZGxlcikpOworI2VuZGlmCisKKyAgICAvLyBTY2hlZHVsZSBhIGNhbGwgdG8gcmVhZHlSZWFkSGFu
ZGxlci4gRGF0YSBtYXkgaGF2ZSBhcnJpdmVkIGJlZm9yZSBpbnN0YWxsYXRpb24gb2YgdGhlIHNp
Z25hbAorICAgIC8vIGhhbmRsZXIuCisgICAgbV9jb25uZWN0aW9uUXVldWUuc2NoZWR1bGVXb3Jr
KFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2Vu
ZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzQ29ubmVjdGVkOwor
fQorCitib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3Nh
Z2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykKK3sKKyNpZiBQTEFU
Rk9STShRVCkKKyAgICBBU1NFUlQobV9zb2NrZXROb3RpZmllcik7CisjZW5kaWYKKworICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlSW5mbykgKyBhdHRhY2htZW50TWF4QW1vdW50ICog
c2l6ZW9mKHNpemVfdCkgPD0gbWVzc2FnZU1heFNpemUsIEF0dGFjaG1lbnRzRml0VG9NZXNzYWdl
SW5saW5lKTsKKworICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRhY2htZW50cyA9IGFyZ3VtZW50
cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQ8VmVj
dG9yPEF0dGFjaG1lbnQ+LCBWZWN0b3I8QXR0YWNobWVudD46Oml0ZXJhdG9yPiBhdHRhY2hlbWVu
dERpc3Bvc2VyKGF0dGFjaG1lbnRzKTsKKworICAgIGlmIChhdHRhY2htZW50cy5zaXplKCkgPiAo
YXR0YWNobWVudE1heEFtb3VudCAtIDEpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgTWVzc2FnZUluZm8gbWVzc2Fn
ZUluZm8obWVzc2FnZUlELCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSwgYXR0YWNobWVudHMuc2l6
ZSgpKTsKKyAgICBzaXplX3QgbWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA9IHNpemVvZihtZXNz
YWdlSW5mbykgKyAoYXR0YWNobWVudHMuc2l6ZSgpICogc2l6ZW9mKHNpemVfdCkpICsgYXJndW1l
bnRzLT5idWZmZXJTaXplKCk7CisgICAgaWYgKG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxpbmUgPiBt
ZXNzYWdlTWF4U2l6ZSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkgeworICAgICAgICBSZWZQ
dHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OmNyZWF0ZShhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7CisgICAgICAgIGlmICghb29s
TWVzc2FnZUJvZHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgIGlmICghb29sTWVzc2FnZUJv
ZHktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbWVzc2FnZUluZm8uc2V0TWVz
c2FnZUJvZHlPT0woKTsKKworICAgICAgICBtZW1jcHkob29sTWVzc2FnZUJvZHktPmRhdGEoKSwg
YXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOworCisgICAgICAg
IGF0dGFjaG1lbnRzLmFwcGVuZChoYW5kbGUucmVsZWFzZVRvQXR0YWNobWVudCgpKTsKKyAgICB9
CisKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBz
aXplb2YobWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlvdlszXTsKKyAgICBtZW1zZXQo
JmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5tc2dfaW92ID0gaW92OworICAg
IGludCBpb3ZMZW5ndGggPSAxOworCisgICAgaW92WzBdLmlvdl9iYXNlID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oJm1lc3NhZ2VJbmZvKTsKKyAgICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZiht
ZXNzYWdlSW5mbyk7CisKKyAgICBjaGFyIGF0dGFjaG1lbnRGREJ1ZmZlcltDTVNHX1NQQUNFKHNp
emVvZihpbnQpICogKGF0dGFjaG1lbnRzLnNpemUoKSkpXTsKKyAgICBzaXplX3QgYXR0YWNobWVu
dFNpemVzW2F0dGFjaG1lbnRzLnNpemUoKV07CisKKyAgICBpZiAoIWF0dGFjaG1lbnRzLmlzRW1w
dHkoKSkgeworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0gYXR0YWNobWVudEZEQnVmZmVy
OworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGF0dGFjaG1lbnRGREJ1
ZmZlcik7CisKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZt
ZXNzYWdlKTsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7CisgICAgICAg
IGNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CisgICAgICAgIGNtc2ctPmNtc2dfbGVuID0g
Q01TR19MRU4oc2l6ZW9mKGludCkgKiBhdHRhY2htZW50cy5zaXplKCkpOworCisgICAgICAgIGlu
dCogZmRwdHIgPSByZWludGVycHJldF9jYXN0PGludCo+KENNU0dfREFUQShjbXNnKSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0YWNobWVudHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGF0dGFjaG1lbnRTaXplc1tpXSA9IGF0dGFjaG1lbnRzW2ldLnNpemUoKTsKKyAg
ICAgICAgICAgIGZkcHRyW2ldID0gYXR0YWNobWVudHNbaV0uZmlsZURlc2NyaXB0b3IoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBjbXNnLT5jbXNnX2xl
bjsKKworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IGF0dGFjaG1lbnRTaXplczsK
KyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IHNpemVvZihhdHRhY2htZW50U2l6ZXMp
OworICAgICAgICArK2lvdkxlbmd0aDsKKyAgICB9CisKKyAgICBpZiAoIW1lc3NhZ2VJbmZvLmlz
TWVzc2FnZUJvZHlPT0woKSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkgeworICAgICAgICBp
b3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFyZ3VtZW50
cy0+YnVmZmVyKCkpOworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfbGVuID0gYXJndW1lbnRz
LT5idWZmZXJTaXplKCk7CisgICAgICAgICsraW92TGVuZ3RoOworICAgIH0KKworICAgIG1lc3Nh
Z2UubXNnX2lvdmxlbiA9IGlvdkxlbmd0aDsKKworICAgIGludCBieXRlc1NlbnQgPSAwOworICAg
IHdoaWxlICgoYnl0ZXNTZW50ID0gc2VuZG1zZyhtX3NvY2tldERlc2NyaXB0b3IsICZtZXNzYWdl
LCAwKSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFBMQVRGT1JN
KFFUKQordm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NU
ZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcykKK3sK
KyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKHByb2Nlc3Ms
IFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSkp
OworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggYTRiOTViZi4uNTQzNjBkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBQTEFURk9S
TShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIkF0dGFj
aG1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNlbmRpZgpAQCAtNjAs
NyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciopIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiwgSGFuZGxlJik7CiAKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9S
TShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICBDb3JlSVBDOjpBdHRhY2htZW50IHJlbGVh
c2VUb0F0dGFjaG1lbnQoKSBjb25zdDsKICAgICAgICAgdm9pZCBhZG9wdEZyb21BdHRhY2htZW50
KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90KTsKICNlbmRpZgpAQCAtNzAsNyArNzAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG11dGFibGUgbWFjaF9wb3J0X3QgbV9wb3J0OwogI2VsaWYgUExBVEZP
Uk0oV0lOKQogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRsZTsKLSNlbGlmIFBMQVRGT1JN
KFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICAgICAgbXV0YWJs
ZSBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogICAgICAgICBzaXplX3QgbV9zaXplOwpA
QCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIG1hY2hfcG9ydF90IG1fcG9ydDsKICNlbGlm
IFBMQVRGT1JNKFdJTikKICAgICBIQU5ETEUgbV9oYW5kbGU7Ci0jZWxpZiBQTEFURk9STShRVCkK
KyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgaW50IG1fZmlsZURlc2Ny
aXB0b3I7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9x
dC9TaGFyZWRNZW1vcnlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRN
ZW1vcnlRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYWY1MzMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50RGVj
b2Rlci5oIgotI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFFEaXI+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN5cy9tbWFu
Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNs
dWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotU2hhcmVkTWVtb3J5OjpI
YW5kbGU6OkhhbmRsZSgpCi0gICAgOiBtX2ZpbGVEZXNjcmlwdG9yKC0xKQotICAgICwgbV9zaXpl
KDApCi17Ci19Ci0KLVNoYXJlZE1lbW9yeTo6SGFuZGxlOjp+SGFuZGxlKCkKLXsKLSAgICBpZiAo
IWlzTnVsbCgpKQotICAgICAgICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRvcikgPT0gLTEg
JiYgZXJybm8gPT0gRUlOVFIpIHsgfQotfQotCi1ib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpp
c051bGwoKSBjb25zdAotewotICAgIHJldHVybiBtX2ZpbGVEZXNjcmlwdG9yID09IC0xOwotfQot
Ci12b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotCi0gICAgZW5j
b2Rlci0+ZW5jb2RlKHJlbGVhc2VUb0F0dGFjaG1lbnQoKSk7Ci19Ci0KLWJvb2wgU2hhcmVkTWVt
b3J5OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhh
bmRsZSYgaGFuZGxlKQotewotICAgIEFTU0VSVF9BUkcoaGFuZGxlLCAhaGFuZGxlLm1fc2l6ZSk7
Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051bGwoKSk7Ci0KLSAgICBDb3JlSVBD
OjpBdHRhY2htZW50IGF0dGFjaG1lbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYXR0YWNo
bWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGhhbmRsZS5hZG9wdEZyb21BdHRh
Y2htZW50KGF0dGFjaG1lbnQucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCksIGF0dGFjaG1lbnQuc2l6
ZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ29yZUlQQzo6QXR0YWNobWVudCBTaGFyZWRN
ZW1vcnk6OkhhbmRsZTo6cmVsZWFzZVRvQXR0YWNobWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFpc051bGwoKSk7Ci0KLSAgICBpbnQgdGVtcCA9IG1fZmlsZURlc2NyaXB0b3I7Ci0gICAgbV9m
aWxlRGVzY3JpcHRvciA9IC0xOwotICAgIHJldHVybiBDb3JlSVBDOjpBdHRhY2htZW50KHRlbXAs
IG1fc2l6ZSk7Ci19Ci0KLXZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmFkb3B0RnJvbUF0dGFj
aG1lbnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBBU1NFUlQoIW1f
c2l6ZSk7Ci0gICAgQVNTRVJUKGlzTnVsbCgpKTsKLQotICAgIG1fZmlsZURlc2NyaXB0b3IgPSBm
aWxlRGVzY3JpcHRvcjsKLSAgICBtX3NpemUgPSBzaXplOwotfQotCi1QYXNzUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgUVN0cmlu
ZyB0ZW1wTmFtZSA9IFFEaXI6OnRlbXAoKS5maWxlUGF0aCgicXdrc2htLlhYWFhYWCIpOwotICAg
IFFCeXRlQXJyYXkgdGVtcE5hbWVDU1RSID0gdGVtcE5hbWUudG9Mb2NhbDhCaXQoKTsKLSAgICBj
aGFyKiB0ZW1wTmFtZUMgPSB0ZW1wTmFtZUNTVFIuZGF0YSgpOwotCi0gICAgaW50IGZpbGVEZXNj
cmlwdG9yOwotICAgIHdoaWxlICgoZmlsZURlc2NyaXB0b3IgPSBta3N0ZW1wKHRlbXBOYW1lQykp
ID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICB3aGlsZSAoZmNudGwoZmlsZURlc2NyaXB0b3IsIEZfU0VURkQsIEZE
X0NMT0VYRUMpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewotICAgICAg
ICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5U
UikgeyB9Ci0gICAgICAgICAgICB1bmxpbmsodGVtcE5hbWVDKTsKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKGZ0cnVuY2F0ZShmaWxlRGVzY3Jp
cHRvciwgc2l6ZSkgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0gICAg
ICAgICAgICB3aGlsZSAoY2xvc2UoZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJ
TlRSKSB7IH0KLSAgICAgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkKiBkYXRhID0gbW1hcCgwLCBzaXpl
LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmaWxlRGVzY3JpcHRvciwgMCk7
Ci0gICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICB3aGlsZSAoY2xvc2UoZmls
ZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KLSAgICAgICAgdW5saW5r
KHRlbXBOYW1lQyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHVubGluayh0ZW1w
TmFtZUMpOwotCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5zdGFuY2UgPSBhZG9wdFJlZihu
ZXcgU2hhcmVkTWVtb3J5KCkpOwotICAgIGluc3RhbmNlLT5tX2RhdGEgPSBkYXRhOwotICAgIGlu
c3RhbmNlLT5tX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Ci0gICAgaW5zdGFuY2Ut
Pm1fc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIGluc3RhbmNlLnJlbGVhc2UoKTsKLX0KLQotc3Rh
dGljIGlubGluZSBpbnQgYWNjZXNzTW9kZU1NYXAoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHBy
b3RlY3Rpb24pCi17Ci0gICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7Ci0gICAgY2FzZSBTaGFyZWRN
ZW1vcnk6OlJlYWRPbmx5OgotICAgICAgICByZXR1cm4gUFJPVF9SRUFEOwotICAgIGNhc2UgU2hh
cmVkTWVtb3J5OjpSZWFkV3JpdGU6Ci0gICAgICAgIHJldHVybiBQUk9UX1JFQUQgfCBQUk9UX1dS
SVRFOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQUk9U
X1JFQUQgfCBQUk9UX1dSSVRFOwotfQotCi1QYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVk
TWVtb3J5OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlv
bikKLXsKLSAgICBBU1NFUlQoIWhhbmRsZS5pc051bGwoKSk7Ci0KLSAgICB2b2lkKiBkYXRhID0g
bW1hcCgwLCBoYW5kbGUubV9zaXplLCBhY2Nlc3NNb2RlTU1hcChwcm90ZWN0aW9uKSwgTUFQX1NI
QVJFRCwgaGFuZGxlLm1fZmlsZURlc2NyaXB0b3IsIDApOwotICAgIGlmIChkYXRhID09IE1BUF9G
QUlMRUQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gaW5z
dGFuY2UgPSBhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KCkpOwotICAgIGluc3RhbmNlLT5tX2Rh
dGEgPSBkYXRhOwotICAgIGluc3RhbmNlLT5tX2ZpbGVEZXNjcmlwdG9yID0gaGFuZGxlLm1fZmls
ZURlc2NyaXB0b3I7Ci0gICAgaW5zdGFuY2UtPm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7Ci0gICAg
aGFuZGxlLm1fZmlsZURlc2NyaXB0b3IgPSAtMTsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0K
LVNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSgpCi17Ci0gICAgbXVubWFwKG1fZGF0YSwgbV9z
aXplKTsKLSAgICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8g
PT0gRUlOVFIpIHsgfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBhY2Nlc3NNb2RlRmlsZShTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikKLXsKLSAgICBzd2l0Y2ggKHByb3RlY3Rp
b24pIHsKLSAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHk6Ci0gICAgICAgIHJldHVybiBP
X1JET05MWTsKLSAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgotICAgICAgICByZXR1
cm4gT19SRFdSOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBPX1JEV1I7Ci19Ci0KLWJvb2wgU2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBo
YW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKLXsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwg
IWhhbmRsZS5tX3NpemUpOwotICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkp
OwotCi0gICAgaW50IGR1cGxpY2F0ZWRIYW5kbGU7Ci0gICAgd2hpbGUgKChkdXBsaWNhdGVkSGFu
ZGxlID0gZHVwKG1fZmlsZURlc2NyaXB0b3IpKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKChmY250bChk
dXBsaWNhdGVkSGFuZGxlLCBGX1NFVEZELCBGRF9DTE9FWEVDIHwgYWNjZXNzTW9kZUZpbGUocHJv
dGVjdGlvbikpID09IC0xKSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGR1
cGxpY2F0ZWRIYW5kbGUpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBoYW5kbGUubV9maWxlRGVzY3Jp
cHRvciA9IGR1cGxpY2F0ZWRIYW5kbGU7Ci0gICAgaGFuZGxlLm1fc2l6ZSA9IG1fc2l6ZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6
ZSgpCi17Ci0gICAgc3RhdGljIHVuc2lnbmVkIHBhZ2VTaXplID0gMDsKLQotICAgIGlmICghcGFn
ZVNpemUpCi0gICAgICAgIHBhZ2VTaXplID0gZ2V0cGFnZXNpemUoKTsKLQotICAgIHJldHVybiBw
YWdlU2l6ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44MjQ5MTRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcApAQCAtMCwwICsxLDIzOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5o
IgorCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNv
ZGVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg
PHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
UURpcj4KKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlZE1lbW9yeTo6SGFuZGxl
OjpIYW5kbGUoKQorICAgIDogbV9maWxlRGVzY3JpcHRvcigtMSkKKyAgICAsIG1fc2l6ZSgwKQor
eworfQorCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCit7CisgICAgaWYgKCFpc051
bGwoKSkKKyAgICAgICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVy
cm5vID09IEVJTlRSKSB7IH0KK30KKworYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlRGVzY3JpcHRvciA9PSAtMTsKK30KKwordm9p
ZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGVuY29kZXIt
PmVuY29kZShyZWxlYXNlVG9BdHRhY2htZW50KCkpOworfQorCitib29sIFNoYXJlZE1lbW9yeTo6
SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUm
IGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX3NpemUpOworICAg
IEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkpOworCisgICAgQ29yZUlQQzo6QXR0
YWNobWVudCBhdHRhY2htZW50OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0dGFjaG1lbnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBoYW5kbGUuYWRvcHRGcm9tQXR0YWNobWVu
dChhdHRhY2htZW50LnJlbGVhc2VGaWxlRGVzY3JpcHRvcigpLCBhdHRhY2htZW50LnNpemUoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvcmVJUEM6OkF0dGFjaG1lbnQgU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OnJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNO
dWxsKCkpOworCisgICAgaW50IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOworICAgIG1fZmlsZURl
c2NyaXB0b3IgPSAtMTsKKyAgICByZXR1cm4gQ29yZUlQQzo6QXR0YWNobWVudCh0ZW1wLCBtX3Np
emUpOworfQorCit2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRhY2htZW50
KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKCFtX3NpemUp
OworICAgIEFTU0VSVChpc051bGwoKSk7CisKKyAgICBtX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURl
c2NyaXB0b3I7CisgICAgbV9zaXplID0gc2l6ZTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRNZW1v
cnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQoreworI2lmIFBMQVRGT1JNKFFU
KQorICAgIFFTdHJpbmcgdGVtcE5hbWUgPSBRRGlyOjp0ZW1wKCkuZmlsZVBhdGgoInF3a3NobS5Y
WFhYWFgiKTsKKyAgICBRQnl0ZUFycmF5IHRlbXBOYW1lQ1NUUiA9IHRlbXBOYW1lLnRvTG9jYWw4
Qml0KCk7CisgICAgY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWVDU1RSLmRhdGEoKTsKKyNlbGlm
IFBMQVRGT1JNKEdUSykKKyAgICBHT3duUHRyPGdjaGFyPiB0ZW1wTmFtZShnX2J1aWxkX2ZpbGVu
YW1lKGdfZ2V0X3RtcF9kaXIoKSwgIldLMlNoYXJlZE1lbW9yeVhYWFhYWCIsIE5VTEwpKTsKKyAg
ICBnY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWUuZ2V0KCk7CisjZW5kaWYKKworICAgIGludCBm
aWxlRGVzY3JpcHRvcjsKKyAgICB3aGlsZSAoKGZpbGVEZXNjcmlwdG9yID0gbWtzdGVtcCh0ZW1w
TmFtZUMpKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgd2hpbGUgKGZjbnRsKGZpbGVEZXNjcmlwdG9yLCBGX1NF
VEZELCBGRF9DTE9FWEVDKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsK
KyAgICAgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8g
PT0gRUlOVFIpIHsgfQorICAgICAgICAgICAgdW5saW5rKHRlbXBOYW1lQyk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChmdHJ1bmNhdGUoZmls
ZURlc2NyaXB0b3IsIHNpemUpID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikg
eworICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJu
byA9PSBFSU5UUikgeyB9CisgICAgICAgICAgICB1bmxpbmsodGVtcE5hbWVDKTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCogZGF0YSA9IG1tYXAo
MCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmlsZURlc2NyaXB0
b3IsIDApOworICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgd2hpbGUgKGNs
b3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9CisgICAgICAg
IHVubGluayh0ZW1wTmFtZUMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB1bmxp
bmsodGVtcE5hbWVDKTsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNlID0gYWRv
cHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKKyAgICBpbnN0YW5jZS0+bV9kYXRhID0gZGF0YTsK
KyAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIGlu
c3RhbmNlLT5tX3NpemUgPSBzaXplOworICAgIHJldHVybiBpbnN0YW5jZS5yZWxlYXNlKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVNTWFwKFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2Ug
U2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0dXJuIFBST1RfUkVBRDsKKyAgICBj
YXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgorICAgICAgICByZXR1cm4gUFJPVF9SRUFEIHwg
UFJPVF9XUklURTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+
IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHBy
b3RlY3Rpb24pCit7CisgICAgQVNTRVJUKCFoYW5kbGUuaXNOdWxsKCkpOworCisgICAgdm9pZCog
ZGF0YSA9IG1tYXAoMCwgaGFuZGxlLm1fc2l6ZSwgYWNjZXNzTW9kZU1NYXAocHJvdGVjdGlvbiks
IE1BUF9TSEFSRUQsIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yLCAwKTsKKyAgICBpZiAoZGF0YSA9
PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKKyAgICBpbnN0YW5j
ZS0+bV9kYXRhID0gZGF0YTsKKyAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGhhbmRs
ZS5tX2ZpbGVEZXNjcmlwdG9yOworICAgIGluc3RhbmNlLT5tX3NpemUgPSBoYW5kbGUubV9zaXpl
OworICAgIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yID0gLTE7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQorCitTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQoreworICAgIG11bm1hcChtX2Rh
dGEsIG1fc2l6ZSk7CisgICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYm
IGVycm5vID09IEVJTlRSKSB7IH0KK30KKworc3RhdGljIGlubGluZSBpbnQgYWNjZXNzTW9kZUZp
bGUoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgc3dpdGNoIChw
cm90ZWN0aW9uKSB7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5OgorICAgICAgICBy
ZXR1cm4gT19SRE9OTFk7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKKyAgICAg
ICAgcmV0dXJuIE9fUkRXUjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gT19SRFdSOworfQorCitib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhh
bmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgQVNTRVJUX0FSRyho
YW5kbGUsICFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlz
TnVsbCgpKTsKKworICAgIGludCBkdXBsaWNhdGVkSGFuZGxlOworICAgIHdoaWxlICgoZHVwbGlj
YXRlZEhhbmRsZSA9IGR1cChtX2ZpbGVEZXNjcmlwdG9yKSkgPT0gLTEpIHsKKyAgICAgICAgaWYg
KGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICgo
ZmNudGwoZHVwbGljYXRlZEhhbmRsZSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyB8IGFjY2Vzc01vZGVG
aWxlKHByb3RlY3Rpb24pKSA9PSAtMSkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHdoaWxlIChj
bG9zZShkdXBsaWNhdGVkSGFuZGxlKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaGFuZGxlLm1fZmls
ZURlc2NyaXB0b3IgPSBkdXBsaWNhdGVkSGFuZGxlOworICAgIGhhbmRsZS5tX3NpemUgPSBtX3Np
emU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVt
UGFnZVNpemUoKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBwYWdlU2l6ZSA9IDA7CisKKyAgICBp
ZiAoIXBhZ2VTaXplKQorICAgICAgICBwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7CisKKyAgICBy
ZXR1cm4gcGFnZVNpemU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNo
ZXJHdGsuY3BwCmluZGV4IDA0ZDhhMDMuLmE5YmExYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5j
cHAKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3Mo
KQogICAgIHBpZF90IHBpZCA9IDA7CiAKICAgICBpbnQgc29ja2V0c1syXTsKLSAgICBpZiAoc29j
a2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKSB7CisgICAgaWYg
KHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19ER1JBTSwgMCwgc29ja2V0cykgPCAwKSB7CiAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZCB3aXRoIGVycm5v
ICVkLlxuIiwgZXJybm8pOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCAzZmMzOWJhLi42YWNlNjUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
bwpAQCAtMjg1LDE2ICsyODUsMTYgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQ
Qy9CaW5hcnlTZW1hcGhvcmUuY3BwIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24u
Y3BwIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuY3BwIFwKLSAgICBQbGF0
Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAgXAotICAgIFBsYXRmb3JtL0NvcmVJUEMv
cXQvQ29ubmVjdGlvblF0LmNwcCBcCisgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1l
bnRVbml4LmNwcCBcCisgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNw
cCBcCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAg
XAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuY3Bw
IFwKICAgICBQbGF0Zm9ybS9xdC9Nb2R1bGVRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1J1bkxv
b3BRdC5jcHAgXAotICAgIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBcCiAgICAgUGxh
dGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwIFwKKyAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9y
eVVuaXguY3BwIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1v
ZHVsZS5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdp
bk1vZHVsZVgxMS5jcHAgXAogICAgIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwIFwKLS0gCjEu
Ny4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87395</attachid>
            <date>2011-03-29 12:34:51 -0700</date>
            <delta_ts>2011-03-31 08:59:01 -0700</delta_ts>
            <desc>Patch with Carlos&apos; suggestions</desc>
            <filename>bug-49791-20110329123440.patch</filename>
            <type>text/plain</type>
            <size>17476</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA5NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiNDE2YWU3ZTE0YTgxZjNh
ODIxZTUzYjkwODNkYmUwYTg0MjZlYzljLi4zNWE0MjhjN2MzM2EyOGZlZjVhZGZjNzMyOGNiNWVl
MmYxMzg3NWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDMtMTEgICBBbXJ1
dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBTaGFyZWRNZW1vcnkgZm9yIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NzkxCisKKyAg
ICAgICAgU2hhcmUgdGhlIFNoYXJlZE1lbW9yeSwgQXR0YWNobWVudCBhbmQgQ29ubmVjdGlvbiBp
bXBsZW1lbnRhdGlvbnMgd2l0aCB0aGUgUXQgcG9ydC4KKyAgICAgICAgQm90aCBpbXBsZW1lbnRh
dGlvbiBhcmUsIGluIGZhY3QsIGdlbmVyYWwgVW5peCBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgc3Rh
bmRhcmQgVW5peAorICAgICAgICBkb21haW4gc29ja2V0cyBhbmQgc2VuZG1zZyAvIHJlY3Ztc2cu
IFRoaXMgc2hvdWxkIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQgY29kZQorICAgICAg
ICBncmVhdGx5IGFuZCBsYXkgdGhlIGdyb3VuZHdvcmsgZm9yIEdUSysvUXQgaW1wbGVtZW50YXRp
b25zIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBSZXBsYWNlZCBHVEsrIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggdGhlIFVuaXggb25lcy4K
KyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHA6IEV4dGVuZGVk
IFF0ICNpZmRlZnMgdG8gaW5jbHVkZSBHVEsuCisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXI6On5Bcmd1bWVudERlY29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnRFbmNvZGVyLmNwcDogRGl0dG8uCisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXI6On5Bcmd1bWVudEVuY29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNo
bWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDog
Q29tYmluZWQgdGhlIEdUSysgYW5kIFF0IHNlY3Rpb25zLgorICAgICAgICAqIFBsYXRmb3JtL0Nv
cmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAuCisgICAgICAgICogUGxhdGZv
cm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcC4KKyAgICAgICAgKiBQ
bGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKTogVXNlIFNPQ0tfREdSQU0gaW5zdGVhZCBv
ZiBTT0NLX1NUUkVBTSB0byBtYXRjaCBRdC4KKyAgICAgICAgKiBXZWJLaXQyLnBybzogVXBkYXRl
ZCBzb3VyY2UgbGlzdCB0byByZWZsZWN0IGZpbGUgcmVuYW1pbmcuCisKIDIwMTEtMDMtMTEgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5k
ZXJzIENhcmxzc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAwMmMwNmMzZGZhZmNhN2E4N2U2
NTRkZjU3OGE1YmU2Y2YyM2M2Y2YyLi4xYzk0NWUxMmQxZTQyZjQwY2YxMGFjMTk4MDAyMDNiYzQz
NTZlZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtOTIsMTMgKzkyLDEzIEBAIGxpYldlYktp
dDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0NvcmVJ
UENNZXNzYWdlS2luZHMuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9EYXRh
UmVmZXJlbmNlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9EYXRhUmVm
ZXJlbmNlLmggXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rp
b25HdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0hhbmRsZU1lc3Nh
Z2UuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaCBcCiAJ
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlU2VuZGVyLmggXAorCVNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAorCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Nb2R1bGVHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL2d0ay9TaGFyZWRNZW1vcnlHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9n
dGsvV29ya1F1ZXVlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5j
cHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaCBcCkBAIC0xMDgsNiArMTA4
LDcgQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L1J1bkxvb3AuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmggXAogCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Xb3JrSXRlbS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKaW5kZXggNDY2
NDgwNmIyMDFmNTYwOTMwYjdmNGUyN2U3NzI4NDU5YzM0NDYxYy4uZGM1NjY3NmQ0YWQzOTU0N2Zh
YmFjM2I4ZjkwYjVkNTAwODZlMDkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBBcmd1bWVu
dERlY29kZXI6On5Bcmd1bWVudERlY29kZXIoKQogewogICAgIEFTU0VSVChtX2J1ZmZlcik7CiAg
ICAgZmFzdEZyZWUobV9idWZmZXIpOwotI2lmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0o
UVQpICYmICFQTEFURk9STShHVEspCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBv
ZiB0aGUgbWFjaCBwb3J0cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBEZXF1ZTxB
dHRhY2htZW50Pjo6aXRlcmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAppbmRl
eCBhYTcxYjBmMzM4YzE5MWNkYzA1MGFkM2I3MmNkNmQ3NTYyYjQ2ODI5Li42ZDNjMmJhNWQ0YjRh
N2ZkMDZmY2VmZjA5NThiNjAwY2JkODdhNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEFy
Z3VtZW50RW5jb2Rlcjo6fkFyZ3VtZW50RW5jb2RlcigpCiB7CiAgICAgaWYgKG1fYnVmZmVyKQog
ICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0jaWYgIVBMQVRGT1JNKFFUKQorI2lmICFQTEFU
Rk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNw
b3NlIG9mIHRoZSBhdHRhY2htZW50cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1fYXR0YWNobWVudHMuc2l6ZSgpOyArK2kpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCmluZGV4IGMwNTc3MTQ0OTM2ZmNm
NGZhMGE0NWY1YWY2OWY3MTA4ZGQ4ZjA4YTIuLjAyZWQyMTk1M2Y3MzJlZmUwZGExNjg3OTJkZmIx
YmRkMWMzYmExODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
QXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNo
bWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAg
ICAgIE1hY2hQb3J0VHlwZSwKICAgICAgICAgTWFjaE9PTE1lbW9yeVR5cGUKLSNlbGlmIFBMQVRG
T1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICAgICAgTWFw
cGVkTWVtb3J5CiAjZW5kaWYKICAgICB9OwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIEF0dGFjaG1lbnQobWFjaF9wb3J0X25hbWVfdCBwb3J0LCBtYWNo
X21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbik7CiAgICAgQXR0YWNobWVudCh2b2lkKiBhZGRy
ZXNzLCBtYWNoX21zZ19zaXplX3Qgc2l6ZSwgbWFjaF9tc2dfY29weV9vcHRpb25zX3QgY29weU9w
dGlvbnMsIGJvb2wgZGVhbGxvY2F0ZSk7Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgQXR0YWNobWVudChpbnQgZmlsZURlc2NyaXB0
b3IsIHNpemVfdCk7CiAjZW5kaWYKIApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgbWFj
aF9tc2dfc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gTWFjaE9PTE1lbW9y
eVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuc2l6ZTsgfQogICAgIG1hY2hfbXNnX2NvcHlfb3B0
aW9uc190IGNvcHlPcHRpb25zKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1v
cnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmNvcHlPcHRpb25zOyB9CiAgICAgYm9vbCBkZWFs
bG9jYXRlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0
dXJuIG1fb29sTWVtb3J5LmRlYWxsb2NhdGU7IH0KLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgaW50IHJlbGVhc2VGaWxlRGVzY3JpcHRvcigpIHsgaW50
IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOyBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7IHJldHVybiB0
ZW1wOyB9CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBib29sIGRlYWxs
b2NhdGU7CiAgICAgICAgIH0gbV9vb2xNZW1vcnk7CiAgICAgfTsKLSNlbGlmIFBMQVRGT1JNKFFU
KQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbnQgbV9maWxlRGVz
Y3JpcHRvcjsKICAgICBzaXplX3QgbV9zaXplOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IGVhYTJhYjljZTY1YmIxMTRhODhlMTY5
NDdiZDJiNTI3MDE1MmQyYmMuLjZiZWFkZDRlMWRjZTUyMDIyNDUzNWE3YTY3M2MxMDc5M2ZiMjE3
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBA
IC0yOTksMjMgKzI5OSwxNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxBcmd1bWVudEVuY29kZXI+
IG1fcGVuZGluZ1dyaXRlQXJndW1lbnRzOwogICAgIE9WRVJMQVBQRUQgbV93cml0ZVN0YXRlOwog
ICAgIEhBTkRMRSBtX2Nvbm5lY3Rpb25QaXBlOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQ
TEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIC8vIENhbGxlZCBvbiB0aGUgY29ubmVj
dGlvbiBxdWV1ZS4KICAgICB2b2lkIHJlYWR5UmVhZEhhbmRsZXIoKTsKIAogICAgIFZlY3Rvcjx1
aW50OF90PiBtX3JlYWRCdWZmZXI7CiAgICAgc2l6ZV90IG1fY3VycmVudE1lc3NhZ2VTaXplOwot
ICAgIFFTb2NrZXROb3RpZmllciogbV9zb2NrZXROb3RpZmllcjsKICAgICBpbnQgbV9zb2NrZXRE
ZXNjcmlwdG9yOwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQgcmVhZEV2ZW50SGFuZGxl
cigpOwotICAgIHZvaWQgcHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsKLSAgICBib29sIG1lc3Nh
Z2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgeyByZXR1cm4gIW1fY3VycmVudE1lc3NhZ2VTaXplOyB9
CiAKLSAgICBpbnQgbV9zb2NrZXQ7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsK
LSAgICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7Ci0gICAgc2l6ZV90IG1fcGVuZGluZ0J5
dGVzOworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFTb2NrZXROb3RpZmllciogbV9zb2NrZXROb3Rp
ZmllcjsKKyNlbmRpZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0YjE0MGVlNjk4YTk1MmEyMzU5NTFjOGIzMTJlY2UxOTAyODIyODNkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotCi0jaW5jbHVkZSAiQXJndW1l
bnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAiV29ya0l0ZW0uaCIKLSNpbmNsdWRlIDxlcnJuby5oPgot
I2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzeXMvZmNudGwuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKLQotbmFtZXNwYWNlIENvcmVJUEMgewotCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGlu
aXRpYWxNZXNzYWdlQnVmZmVyU2l6ZSA9IDQwOTY7Ci0KLXN0YXRpYyBpbnQgcmVhZEJ5dGVzRnJv
bVNvY2tldChpbnQgZmlsZURlc2NyaXB0b3IsIHVpbnQ4X3QqIHB0ciwgc2l6ZV90IGxlbmd0aCkK
LXsKLSAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IgPiAwKTsKLSAgICBBU1NFUlQocHRyKTsKLSAg
ICBBU1NFUlQobGVuZ3RoID4gMCk7Ci0KLSAgICBzc2l6ZV90IG51bWJlck9mQnl0ZXNSZWFkID0g
MDsKLSAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gbGVuZ3RoOwotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IHB0cjsKLQotICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1JlYWQgPiAwKSB7Ci0g
ICAgICAgIGlmICgobnVtYmVyT2ZCeXRlc1JlYWQgPSByZWFkKGZpbGVEZXNjcmlwdG9yLCBidWZm
ZXIsIHBlbmRpbmdCeXRlc1RvUmVhZCkpIDwgMCkgewotICAgICAgICAgICAgaWYgKGVycm5vID09
IEVJTlRSKQotICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNSZWFkID0gMDsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsgCi0gICAgICAgIH0gZWxzZSBpZiAoIW51bWJlck9mQnl0ZXNSZWFkKQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYnVmZmVyICs9IG51bWJlck9mQnl0ZXNSZWFkOwotICAg
ICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgLT0gbnVtYmVyT2ZCeXRlc1JlYWQ7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIChsZW5ndGggLSBwZW5kaW5nQnl0ZXNUb1JlYWQpOwotfQotCi1zdGF0aWMgYm9v
bCB3cml0ZUJ5dGVzVG9Tb2NrZXQoaW50IGZpbGVEZXNjcmlwdG9yLCB1aW50OF90KiBwdHIsIHNp
emVfdCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGZpbGVEZXNjcmlwdG9yID4gMCk7Ci0gICAgQVNT
RVJUKHB0cik7Ci0gICAgQVNTRVJUKGxlbmd0aCA+IDApOwotCi0gICAgc3NpemVfdCBudW1iZXJP
ZkJ5dGVzV3JpdHRlbiA9IDA7Ci0gICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvV3JpdGUgPSBsZW5n
dGg7Ci0gICAgdWludDhfdCogYnVmZmVyID0gcHRyOwotCi0gICAgLy8gS2VlcCB3cml0aW5nIHRv
IHRoZSBzb2NrZXQgdGlsbCB0aGUgY29tcGxldGUgbWVzc2FnZSBoYXMgYmVlbiB3cml0dGVuLgot
ICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1dyaXRlID4gMCkgewotICAgICAgICBpZiAoKG51bWJl
ck9mQnl0ZXNXcml0dGVuID0gd3JpdGUoZmlsZURlc2NyaXB0b3IsIGJ1ZmZlciwgcGVuZGluZ0J5
dGVzVG9Xcml0ZSkpIDwgMCkgewotICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQotICAg
ICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNXcml0dGVuID0gMDsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnVmZmVy
ICs9IG51bWJlck9mQnl0ZXNXcml0dGVuOwotICAgICAgICBwZW5kaW5nQnl0ZXNUb1dyaXRlIC09
IG51bWJlck9mQnl0ZXNXcml0dGVuOwotICAgIH0KLQotICAgIC8vIFdyaXRlIG9wZXJhdGlvbiBm
YWlsZWQgaWYgY29tcGxldGUgbWVzc2FnZSBpcyBub3Qgd3JpdHRlbi4KLSAgICByZXR1cm4gIXBl
bmRpbmdCeXRlc1RvV3JpdGU7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFs
aXplKElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9
IDA7Ci0gICAgbV9wZW5kaW5nQnl0ZXMgPSAwOwotICAgIG1fcmVhZEJ1ZmZlci5yZXNpemUoaW5p
dGlhbE1lc3NhZ2VCdWZmZXJTaXplKTsKLSAgICBtX3NvY2tldCA9IGlkZW50aWZpZXI7Ci19Ci0K
LXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAoIW1faXND
b25uZWN0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29ubmVjdGlvblF1ZXVlLnVucmVn
aXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQpOwotICAgIGlmIChtX3NvY2tldCA+IDAp
IHsKLSAgICAgICAgY2xvc2UobV9zb2NrZXQpOwotICAgICAgICBtX3NvY2tldCA9IC0xOwotICAg
IH0KLQotICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBDb25uZWN0aW9uOjpw
cm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpCi17Ci0gICAgc2l6ZV90IHJlYWxCdWZmZXJTaXplID0g
bV9jdXJyZW50TWVzc2FnZVNpemUgLSBzaXplb2YoTWVzc2FnZUlEKTsKLSAgICB1bnNpZ25lZCBt
ZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fcmVhZEJ1ZmZlci5kYXRh
KCkgKyByZWFsQnVmZmVyU2l6ZSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKE1lc3Nh
Z2VJRDo6ZnJvbUludChtZXNzYWdlSUQpLCBhZG9wdFB0cihuZXcgQXJndW1lbnREZWNvZGVyKG1f
cmVhZEJ1ZmZlci5kYXRhKCksIHJlYWxCdWZmZXJTaXplKSkpOwotCi0gICAgLy8gUHJlcGFyZSBm
b3IgdGhlIG5leHQgbWVzc2FnZS4KLSAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7Ci0gICAg
bV9wZW5kaW5nQnl0ZXMgPSAwOwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRs
ZXIoKQotewotICAgIGlmIChtX3NvY2tldCA8IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IEhhbmRsZSBhbnkgcHJldmlvdXNseSB1bnByb2Nlc3NlZCBtZXNzYWdlLgotICAgIGlmICghbWVz
c2FnZVByb2Nlc3NpbmdDb21wbGV0ZWQoKSkgewotICAgICAgICBpZiAoKG1fcGVuZGluZ0J5dGVz
IC09IHJlYWRCeXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIChtX3JlYWRCdWZmZXIuZGF0YSgpICsg
KG1fY3VycmVudE1lc3NhZ2VTaXplIC0gbV9wZW5kaW5nQnl0ZXMpKSwgbV9wZW5kaW5nQnl0ZXMp
KSA+IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTWVzc2FnZSByZWNlaXZl
ZCBjb21wbGV0ZWx5LiBQcm9jZXNzIHRoZSBtZXNzYWdlIG5vdy4KLSAgICAgICAgcHJvY2Vzc0Nv
bXBsZXRlZE1lc3NhZ2UoKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVwYXJlIHRvIHJlYWQgdGhlIG5l
eHQgbWVzc2FnZS4KLSAgICB1aW50OF90IHNpemVCdWZmZXJbc2l6ZW9mKHNpemVfdCldOwotICAg
IG1lbXNldChzaXplQnVmZmVyLCAwLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgCi0gICAgd2hpbGUg
KG1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkpIHsKLSAgICAgICAgaWYgKHJlYWRCeXRlc0Zy
b21Tb2NrZXQobV9zb2NrZXQsIHNpemVCdWZmZXIsIHNpemVvZihzaXplX3QpKSkKLSAgICAgICAg
ICAgIG1fY3VycmVudE1lc3NhZ2VTaXplID0gKnJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4oc2l6
ZUJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKCFtX2N1cnJlbnRNZXNzYWdlU2l6ZSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChtX3JlYWRCdWZmZXIuc2l6ZSgpIDwgbV9jdXJyZW50
TWVzc2FnZVNpemUpCi0gICAgICAgICAgICBtX3JlYWRCdWZmZXIuZ3JvdyhtX2N1cnJlbnRNZXNz
YWdlU2l6ZSk7Ci0KLSAgICAgICAgbV9wZW5kaW5nQnl0ZXMgPSBtX2N1cnJlbnRNZXNzYWdlU2l6
ZSAtIHJlYWRCeXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1f
Y3VycmVudE1lc3NhZ2VTaXplKTsKLSAgICAgICAgaWYgKG1fcGVuZGluZ0J5dGVzID4gMCkgLy8g
TWVzc2FnZSBwYXJ0aWFsbHkgcmVjZWl2ZWQuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAvLyBNZXNzYWdlIHJlY2VpdmVkIGNvbXBsZXRlbHkuIFByb2Nlc3MgdGhlIG1lc3NhZ2Ugbm93
LgotICAgICAgICBwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpOwotCi0gICAgICAgIG1lbXNldChz
aXplQnVmZmVyLCAwLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgfQotfQotCi1ib29sIENvbm5lY3Rp
b246Om9wZW4oKQotewotICAgIGludCBmbGFncyA9IGZjbnRsKG1fc29ja2V0LCBGX0dFVEZMLCAw
KTsKLSAgICBmY250bChtX3NvY2tldCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKTsKLQot
ICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwotCi0gICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZv
ciBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIGFuZCBpbnB1dCBkYXRhIG9uIHRoZSBXb3JrUXVldWUu
Ci0gICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2Nr
ZXQsIChHX0lPX0hVUCB8IEdfSU9fRVJSKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVj
dGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Ci0gICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0
ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQsIEdfSU9fSU4sIFdvcmtJdGVtOjpjcmVhdGUo
dGhpcywgJkNvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKG1fc29ja2V0ID4gMCk7Ci19Ci0KLWJvb2wgQ29ubmVjdGlv
bjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFy
Z3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQotewotICAgIGlmIChtX3NvY2tldCA8IDApCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHB1dCB0aGUgbWVzc2FnZSBJRCBsYXN0Lgot
ICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsKLQotICAgIHNp
emVfdCBidWZmZXJTaXplID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7Ci0KLSAgICAvLyBTZW5k
IHRoZSBtZXNzYWdlIHNpemUgZmlyc3QuCi0gICAgaWYgKCF3cml0ZUJ5dGVzVG9Tb2NrZXQobV9z
b2NrZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZidWZmZXJTaXplKSwgc2l6ZW9mKHNp
emVfdCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXdyaXRlQnl0ZXNUb1Nv
Y2tldChtX3NvY2tldCwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXpl
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
U2hhcmVkTWVtb3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaApp
bmRleCBhNGI5NWJmMjk5OWNlZjJjN2NkOWUyYWIyODI3M2MyNjFlZWUzM2U3Li41NDM2MGRmNWQ5
Zjg5OTc3MWVjYWQxOGY3NGJhZmUzMWFlOWY4OTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotI2lmIFBMQVRGT1JNKFFUKQorI2lm
IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQXR0YWNobWVudC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2VuZGlmCkBAIC02MCw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikg
Y29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqLCBIYW5kbGUmKTsKIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCiAgICAgICAgIENvcmVJUEM6OkF0dGFjaG1lbnQgcmVsZWFzZVRvQXR0YWNo
bWVudCgpIGNvbnN0OwogICAgICAgICB2b2lkIGFkb3B0RnJvbUF0dGFjaG1lbnQoaW50IGZpbGVE
ZXNjcmlwdG9yLCBzaXplX3QpOwogI2VuZGlmCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgbXV0YWJsZSBtYWNoX3BvcnRfdCBtX3BvcnQ7CiAjZWxpZiBQTEFURk9STShXSU4pCiAg
ICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxp
ZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICBtdXRhYmxlIGludCBtX2Zp
bGVEZXNjcmlwdG9yOwogI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7CkBAIC05OSw3ICs5
OSw3IEBAIHByaXZhdGU6CiAgICAgbWFjaF9wb3J0X3QgbV9wb3J0OwogI2VsaWYgUExBVEZPUk0o
V0lOKQogICAgIEhBTkRMRSBtX2hhbmRsZTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNl
bmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9n
dGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAppbmRleCAwNGQ4YTAzYmNhNTRkZmFjYWEx
OGM4YmE3MTM1ODI3ZjlmYzFlMDcwLi5hOWJhMWMxOWM2ZWNlNzRhODc5YWU5NTg0NGQ5YmI4NTZm
ZGJlMDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3Rr
L1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQg
UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAgICBwaWRfdCBwaWQgPSAwOwogCiAg
ICAgaW50IHNvY2tldHNbMl07Ci0gICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJF
QU0sIDAsIHNvY2tldHMpIDwgMCkgeworICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tf
REdSQU0sIDAsIHNvY2tldHMpIDwgMCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0
aW9uIG9mIHNvY2tldCBmYWlsZWQgd2l0aCBlcnJubyAlZC5cbiIsIGVycm5vKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5kZXgg
M2ZjMzliYTliNmYxMjY2Y2FjNzY5YWQ4OTI2Mzg4ZWQ3ZGNjNTU3OS4uNmFjZTY1MjE5MTJjOTUw
Zjc1YWM3MDk3NmRkODg5OTM0YzAzZTYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTI4NSwxNiArMjg1
LDE2IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQmluYXJ5U2VtYXBob3Jl
LmNwcCBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcCBcCiAgICAgUGxhdGZv
cm0vQ29yZUlQQy9EYXRhUmVmZXJlbmNlLmNwcCBcCi0gICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9B
dHRhY2htZW50UXQuY3BwIFwKLSAgICBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5j
cHAgXAorICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAgXAorICAg
IFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAogICAgIFBsYXRmb3Jt
L0xvZ2dpbmcuY3BwIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKICAgICBQbGF0Zm9ybS9S
dW5Mb29wLmNwcCBcCiAgICAgUGxhdGZvcm0vV29ya1F1ZXVlLmNwcCBcCiAgICAgUGxhdGZvcm0v
cXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKLSAgICBQ
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1dvcmtRdWV1
ZVF0LmNwcCBcCisgICAgUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcCBcCiAgICAg
U2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwIFwKICAgICBT
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwIFwK
ICAgICBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87737</attachid>
            <date>2011-03-31 08:59:01 -0700</date>
            <delta_ts>2011-03-31 09:15:12 -0700</delta_ts>
            <desc>Patch with all files</desc>
            <filename>0001-GTK-Implement-SharedMemory-for-WebKit2.patch</filename>
            <type>text/plain</type>
            <size>64553</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA0ZmVkMWY1OTUwMTUyM2U1Y2FiZjVkODUxMjkzNGQzNTU2OWQxY2RjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDcgTWFyIDIwMTEgMTM6NDU6MTggLTA4MDAKU3ViamVjdDogW1BBVENIXSBb
R1RLXSBJbXBsZW1lbnQgU2hhcmVkTWVtb3J5IGZvciBXZWJLaXQyCiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKU2hhcmUgdGhlIFNoYXJlZE1lbW9yeSwgQXR0YWNobWVudCBhbmQgQ29ubmVjdGlvbiBpbXBs
ZW1lbnRhdGlvbnMgd2l0aCB0aGUgUXQgcG9ydC4KQm90aCBpbXBsZW1lbnRhdGlvbiBhcmUsIGlu
IGZhY3QsIGdlbmVyYWwgVW5peCBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgc3RhbmRhcmQgVW5peApk
b21haW4gc29ja2V0cyBhbmQgc2VuZG1zZyAvIHJlY3Ztc2cuIFRoaXMgc2hvdWxkIHJlZHVjZSB0
aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQgY29kZQpncmVhdGx5IGFuZCBsYXkgdGhlIGdyb3VuZHdv
cmsgZm9yIEdUSysvUXQgaW1wbGVtZW50YXRpb25zIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVt
cy4KCiogR05VbWFrZWZpbGUuYW06IFJlcGxhY2VkIEdUSysgdmVyc2lvbnMgb2YgZmlsZXMgd2l0
aCB0aGUgVW5peCBvbmVzLgoqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDog
RXh0ZW5kZWQgUXQgI2lmZGVmcyB0byBpbmNsdWRlIEdUSy4KKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2Rlcjo6fkFyZ3VtZW50RGVjb2Rlcik6CiogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29k
ZXIuY3BwOiBEaXR0by4KKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcjo6fkFyZ3VtZW50RW5jb2Rl
cik6CiogUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50Lmg6IERpdHRvLgoqIFBsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oOiBDb21iaW5lZCB0aGUgR1RLKyBhbmQgUXQgc2VjdGlvbnMuCiog
UGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVudFF0LmNwcC4KKiBQbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwLgoqIFBsYXRmb3Jt
L3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAuCiogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Q
cm9jZXNzTGF1bmNoZXJHdGsuY3BwOgooV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MpOiBVc2UgU09DS19ER1JBTSBpbnN0ZWFkIG9mIFNPQ0tfU1RSRUFNIHRvIG1hdGNoIFF0
LgoqIFdlYktpdDIucHJvOiBVcGRhdGVkIHNvdXJjZSBsaXN0IHRvIHJlZmxlY3QgZmlsZSByZW5h
bWluZy4KLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMjYgKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgNSArLQogLi4uL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwICAgfCAgICAyICstCiAuLi4vV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50RW5jb2Rlci5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQXR0YWNobWVudC5oICAgICAgIHwgICAgOCArLQogU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Db25uZWN0aW9uLmggICAgICAgfCAgIDE0ICstCiAuLi4vV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcCB8ICAyMDcgLS0tLS0tLS0tLQogLi4u
L1BsYXRmb3JtL0NvcmVJUEMvcG9zaXgvQXR0YWNobWVudFBPU0lYLmNwcCAgICAgfCAgIDUwICsr
KwogLi4uL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRhY2htZW50UXQuY3BwICAgfCAg
IDUzIC0tLQogLi4uL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3Bw
ICAgfCAgMzY5IC0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9D
b25uZWN0aW9uVW5peC5jcHAgICAgICAgfCAgNDAxICsrKysrKysrKysrKysrKysrKysrCiBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCAgICAgICAgICAgICB8ICAgIDggKy0K
IC4uLi9XZWJLaXQyL1BsYXRmb3JtL3Bvc2l4L1NoYXJlZE1lbW9yeVBPU0lYLmNwcCAgIHwgIDIz
OCArKysrKysrKysrKysKIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0
LmNwcCAgICAgIHwgIDIyOCAtLS0tLS0tLS0tLQogLi4uL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsv
UHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIDE2IGZpbGVzIGNoYW5nZWQs
IDczNiBpbnNlcnRpb25zKCspLCA4ODMgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3Bvc2l4L0F0
dGFjaG1lbnRQT1NJWC5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcG9z
aXgvU2hhcmVkTWVtb3J5UE9TSVguY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDdjN2JjNGQu
Ljc5ZjMzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0wMy0xMSAgIEFtcnV0
aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFNoYXJlZE1lbW9yeSBmb3IgV2ViS2l0MgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEKKworICAg
ICAgICBTaGFyZSB0aGUgU2hhcmVkTWVtb3J5LCBBdHRhY2htZW50IGFuZCBDb25uZWN0aW9uIGlt
cGxlbWVudGF0aW9ucyB3aXRoIHRoZSBRdCBwb3J0LgorICAgICAgICBCb3RoIGltcGxlbWVudGF0
aW9uIGFyZSwgaW4gZmFjdCwgZ2VuZXJhbCBVbml4IGltcGxlbWVudGF0aW9ucyB1c2luZyBzdGFu
ZGFyZCBVbml4CisgICAgICAgIGRvbWFpbiBzb2NrZXRzIGFuZCBzZW5kbXNnIC8gcmVjdm1zZy4g
VGhpcyBzaG91bGQgcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBjb2RlCisgICAgICAg
IGdyZWF0bHkgYW5kIGxheSB0aGUgZ3JvdW5kd29yayBmb3IgR1RLKy9RdCBpbXBsZW1lbnRhdGlv
bnMgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IFJlcGxhY2VkIEdUSysgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCB0aGUgVW5peCBvbmVzLgor
ICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDogRXh0ZW5kZWQg
UXQgI2lmZGVmcyB0byBpbmNsdWRlIEdUSy4KKyAgICAgICAgKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2Rlcjo6fkFyZ3VtZW50RGVjb2Rlcik6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudEVuY29kZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
cjo6fkFyZ3VtZW50RW5jb2Rlcik6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2ht
ZW50Lmg6IERpdHRvLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBD
b21iaW5lZCB0aGUgR1RLKyBhbmQgUXQgc2VjdGlvbnMuCisgICAgICAgICogUGxhdGZvcm0vQ29y
ZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVudFF0LmNwcC4KKyAgICAgICAgKiBQbGF0Zm9y
bS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwLgorICAgICAgICAqIFBs
YXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAuCisgICAgICAgICogVUlQcm9jZXNz
L0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
cm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOiBVc2UgU09DS19ER1JBTSBpbnN0ZWFkIG9m
IFNPQ0tfU1RSRUFNIHRvIG1hdGNoIFF0LgorICAgICAgICAqIFdlYktpdDIucHJvOiBVcGRhdGVk
IHNvdXJjZSBsaXN0IHRvIHJlZmxlY3QgZmlsZSByZW5hbWluZy4KKwogMjAxMS0wMy0zMCAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGI0OGMyNDkuLmI0ODk1MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCkBAIC05MywxMyArOTMsMTMgQEAgbGliV2ViS2l0Ml9sYV9TT1VS
Q0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29yZUlQQ01lc3NhZ2VL
aW5kcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2Uu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuaCBc
Ci0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvSGFuZGxlTWVzc2FnZS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCisJU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCisJU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50UE9TSVguY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
U2hhcmVkTWVtb3J5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtR
dWV1ZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmggXApAQCAtMTA5LDYgKzEwOSw3IEBAIGxp
YldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29w
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCisJU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
cG9zaXgvU2hhcmVkTWVtb3J5UE9TSVguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9X
b3JrSXRlbS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKaW5kZXggNDRmOWE5Zi4u
YjgwYTliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudERlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnREZWNvZGVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBBcmd1bWVudERlY29kZXI6On5Bcmd1
bWVudERlY29kZXIoKQogewogICAgIEFTU0VSVChtX2J1ZmZlcik7CiAgICAgZmFzdEZyZWUobV9i
dWZmZXIpOwotI2lmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9S
TShHVEspCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgbWFjaCBwb3J0
cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBEZXF1ZTxBdHRhY2htZW50Pjo6aXRl
cmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAppbmRleCBmYjBiNjhiLi5kMjBk
YzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50
RW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dEVuY29kZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEFyZ3VtZW50RW5jb2Rlcjo6fkFyZ3VtZW50
RW5jb2RlcigpCiB7CiAgICAgaWYgKG1fYnVmZmVyKQogICAgICAgICBmYXN0RnJlZShtX2J1ZmZl
cik7Ci0jaWYgIVBMQVRGT1JNKFFUKQorI2lmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdU
SykKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNwb3NlIG9mIHRoZSBhdHRhY2htZW50cyBp
biBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYXR0
YWNobWVudHMuc2l6ZSgpOyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
QXR0YWNobWVudC5oCmluZGV4IGMwNTc3MTQuLjAyZWQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIE1hY2hQb3J0VHlwZSwKICAgICAgICAgTWFjaE9P
TE1lbW9yeVR5cGUKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKICAgICAgICAgTWFwcGVkTWVtb3J5CiAjZW5kaWYKICAgICB9OwpAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIEF0dGFjaG1lbnQobWFj
aF9wb3J0X25hbWVfdCBwb3J0LCBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbik7CiAg
ICAgQXR0YWNobWVudCh2b2lkKiBhZGRyZXNzLCBtYWNoX21zZ19zaXplX3Qgc2l6ZSwgbWFjaF9t
c2dfY29weV9vcHRpb25zX3QgY29weU9wdGlvbnMsIGJvb2wgZGVhbGxvY2F0ZSk7Ci0jZWxpZiBQ
TEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgQXR0
YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCk7CiAjZW5kaWYKIApAQCAtNjYsNyAr
NjYsNyBAQCBwdWJsaWM6CiAgICAgbWFjaF9tc2dfc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VS
VChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuc2l6ZTsg
fQogICAgIG1hY2hfbXNnX2NvcHlfb3B0aW9uc190IGNvcHlPcHRpb25zKCkgY29uc3QgeyBBU1NF
UlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmNvcHlP
cHRpb25zOyB9CiAgICAgYm9vbCBkZWFsbG9jYXRlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09
IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmRlYWxsb2NhdGU7IH0KLSNl
bGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgaW50IHJlbGVh
c2VGaWxlRGVzY3JpcHRvcigpIHsgaW50IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOyBtX2ZpbGVE
ZXNjcmlwdG9yID0gLTE7IHJldHVybiB0ZW1wOyB9CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBib29sIGRlYWxsb2NhdGU7CiAgICAgICAgIH0gbV9vb2xNZW1vcnk7CiAg
ICAgfTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKICAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICAgICBzaXplX3QgbV9zaXplOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4
IGI2YTI0MTUuLjgzYTI4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
Q29ubmVjdGlvbi5oCkBAIC0zMDUsMjMgKzMwNSwxNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxB
cmd1bWVudEVuY29kZXI+IG1fcGVuZGluZ1dyaXRlQXJndW1lbnRzOwogICAgIE9WRVJMQVBQRUQg
bV93cml0ZVN0YXRlOwogICAgIEhBTkRMRSBtX2Nvbm5lY3Rpb25QaXBlOwotI2VsaWYgUExBVEZP
Uk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIC8vIENhbGxl
ZCBvbiB0aGUgY29ubmVjdGlvbiBxdWV1ZS4KICAgICB2b2lkIHJlYWR5UmVhZEhhbmRsZXIoKTsK
IAogICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlYWRCdWZmZXI7CiAgICAgc2l6ZV90IG1fY3VycmVu
dE1lc3NhZ2VTaXplOwotICAgIFFTb2NrZXROb3RpZmllciogbV9zb2NrZXROb3RpZmllcjsKICAg
ICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQg
cmVhZEV2ZW50SGFuZGxlcigpOwotICAgIHZvaWQgcHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsK
LSAgICBib29sIG1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgeyByZXR1cm4gIW1fY3VycmVu
dE1lc3NhZ2VTaXplOyB9CiAKLSAgICBpbnQgbV9zb2NrZXQ7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fcmVhZEJ1ZmZlcjsKLSAgICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7Ci0gICAgc2l6
ZV90IG1fcGVuZGluZ0J5dGVzOworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFTb2NrZXROb3RpZmll
ciogbV9zb2NrZXROb3RpZmllcjsKKyNlbmRpZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjE0MGVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotCi0jaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAiV29ya0l0ZW0uaCIKLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzeXMvZmNudGwuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIENvcmVJUEMgewotCi1zdGF0aWMgY29uc3Qgc2l6
ZV90IGluaXRpYWxNZXNzYWdlQnVmZmVyU2l6ZSA9IDQwOTY7Ci0KLXN0YXRpYyBpbnQgcmVhZEJ5
dGVzRnJvbVNvY2tldChpbnQgZmlsZURlc2NyaXB0b3IsIHVpbnQ4X3QqIHB0ciwgc2l6ZV90IGxl
bmd0aCkKLXsKLSAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IgPiAwKTsKLSAgICBBU1NFUlQocHRy
KTsKLSAgICBBU1NFUlQobGVuZ3RoID4gMCk7Ci0KLSAgICBzc2l6ZV90IG51bWJlck9mQnl0ZXNS
ZWFkID0gMDsKLSAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gbGVuZ3RoOwotICAgIHVp
bnQ4X3QqIGJ1ZmZlciA9IHB0cjsKLQotICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1JlYWQgPiAw
KSB7Ci0gICAgICAgIGlmICgobnVtYmVyT2ZCeXRlc1JlYWQgPSByZWFkKGZpbGVEZXNjcmlwdG9y
LCBidWZmZXIsIHBlbmRpbmdCeXRlc1RvUmVhZCkpIDwgMCkgewotICAgICAgICAgICAgaWYgKGVy
cm5vID09IEVJTlRSKQotICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNSZWFkID0gMDsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9D
SykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsgCi0gICAgICAgIH0gZWxzZSBpZiAoIW51bWJlck9mQnl0ZXNSZWFkKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYnVmZmVyICs9IG51bWJlck9mQnl0ZXNSZWFk
OwotICAgICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgLT0gbnVtYmVyT2ZCeXRlc1JlYWQ7Ci0gICAg
fQotCi0gICAgcmV0dXJuIChsZW5ndGggLSBwZW5kaW5nQnl0ZXNUb1JlYWQpOwotfQotCi1zdGF0
aWMgYm9vbCB3cml0ZUJ5dGVzVG9Tb2NrZXQoaW50IGZpbGVEZXNjcmlwdG9yLCB1aW50OF90KiBw
dHIsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGZpbGVEZXNjcmlwdG9yID4gMCk7Ci0g
ICAgQVNTRVJUKHB0cik7Ci0gICAgQVNTRVJUKGxlbmd0aCA+IDApOwotCi0gICAgc3NpemVfdCBu
dW1iZXJPZkJ5dGVzV3JpdHRlbiA9IDA7Ci0gICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvV3JpdGUg
PSBsZW5ndGg7Ci0gICAgdWludDhfdCogYnVmZmVyID0gcHRyOwotCi0gICAgLy8gS2VlcCB3cml0
aW5nIHRvIHRoZSBzb2NrZXQgdGlsbCB0aGUgY29tcGxldGUgbWVzc2FnZSBoYXMgYmVlbiB3cml0
dGVuLgotICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1dyaXRlID4gMCkgewotICAgICAgICBpZiAo
KG51bWJlck9mQnl0ZXNXcml0dGVuID0gd3JpdGUoZmlsZURlc2NyaXB0b3IsIGJ1ZmZlciwgcGVu
ZGluZ0J5dGVzVG9Xcml0ZSkpIDwgMCkgewotICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRS
KQotICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNXcml0dGVuID0gMDsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnVmZmVyICs9IG51bWJlck9mQnl0ZXNXcml0dGVuOwotICAgICAgICBwZW5kaW5nQnl0ZXNUb1dy
aXRlIC09IG51bWJlck9mQnl0ZXNXcml0dGVuOwotICAgIH0KLQotICAgIC8vIFdyaXRlIG9wZXJh
dGlvbiBmYWlsZWQgaWYgY29tcGxldGUgbWVzc2FnZSBpcyBub3Qgd3JpdHRlbi4KLSAgICByZXR1
cm4gIXBlbmRpbmdCeXRlc1RvV3JpdGU7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1J
bml0aWFsaXplKElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBtX2N1cnJlbnRNZXNzYWdl
U2l6ZSA9IDA7Ci0gICAgbV9wZW5kaW5nQnl0ZXMgPSAwOwotICAgIG1fcmVhZEJ1ZmZlci5yZXNp
emUoaW5pdGlhbE1lc3NhZ2VCdWZmZXJTaXplKTsKLSAgICBtX3NvY2tldCA9IGlkZW50aWZpZXI7
Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAo
IW1faXNDb25uZWN0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29ubmVjdGlvblF1ZXVl
LnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQpOwotICAgIGlmIChtX3NvY2tl
dCA+IDApIHsKLSAgICAgICAgY2xvc2UobV9zb2NrZXQpOwotICAgICAgICBtX3NvY2tldCA9IC0x
OwotICAgIH0KLQotICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBDb25uZWN0
aW9uOjpwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpCi17Ci0gICAgc2l6ZV90IHJlYWxCdWZmZXJT
aXplID0gbV9jdXJyZW50TWVzc2FnZVNpemUgLSBzaXplb2YoTWVzc2FnZUlEKTsKLSAgICB1bnNp
Z25lZCBtZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fcmVhZEJ1ZmZl
ci5kYXRhKCkgKyByZWFsQnVmZmVyU2l6ZSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdl
KE1lc3NhZ2VJRDo6ZnJvbUludChtZXNzYWdlSUQpLCBhZG9wdFB0cihuZXcgQXJndW1lbnREZWNv
ZGVyKG1fcmVhZEJ1ZmZlci5kYXRhKCksIHJlYWxCdWZmZXJTaXplKSkpOwotCi0gICAgLy8gUHJl
cGFyZSBmb3IgdGhlIG5leHQgbWVzc2FnZS4KLSAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7
Ci0gICAgbV9wZW5kaW5nQnl0ZXMgPSAwOwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlYWRFdmVu
dEhhbmRsZXIoKQotewotICAgIGlmIChtX3NvY2tldCA8IDApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEhhbmRsZSBhbnkgcHJldmlvdXNseSB1bnByb2Nlc3NlZCBtZXNzYWdlLgotICAgIGlm
ICghbWVzc2FnZVByb2Nlc3NpbmdDb21wbGV0ZWQoKSkgewotICAgICAgICBpZiAoKG1fcGVuZGlu
Z0J5dGVzIC09IHJlYWRCeXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIChtX3JlYWRCdWZmZXIuZGF0
YSgpICsgKG1fY3VycmVudE1lc3NhZ2VTaXplIC0gbV9wZW5kaW5nQnl0ZXMpKSwgbV9wZW5kaW5n
Qnl0ZXMpKSA+IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTWVzc2FnZSBy
ZWNlaXZlZCBjb21wbGV0ZWx5LiBQcm9jZXNzIHRoZSBtZXNzYWdlIG5vdy4KLSAgICAgICAgcHJv
Y2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVwYXJlIHRvIHJlYWQg
dGhlIG5leHQgbWVzc2FnZS4KLSAgICB1aW50OF90IHNpemVCdWZmZXJbc2l6ZW9mKHNpemVfdCld
OwotICAgIG1lbXNldChzaXplQnVmZmVyLCAwLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgCi0gICAg
d2hpbGUgKG1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkpIHsKLSAgICAgICAgaWYgKHJlYWRC
eXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIHNpemVCdWZmZXIsIHNpemVvZihzaXplX3QpKSkKLSAg
ICAgICAgICAgIG1fY3VycmVudE1lc3NhZ2VTaXplID0gKnJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90
Kj4oc2l6ZUJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKCFtX2N1cnJlbnRNZXNzYWdlU2l6ZSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChtX3JlYWRCdWZmZXIuc2l6ZSgpIDwgbV9j
dXJyZW50TWVzc2FnZVNpemUpCi0gICAgICAgICAgICBtX3JlYWRCdWZmZXIuZ3JvdyhtX2N1cnJl
bnRNZXNzYWdlU2l6ZSk7Ci0KLSAgICAgICAgbV9wZW5kaW5nQnl0ZXMgPSBtX2N1cnJlbnRNZXNz
YWdlU2l6ZSAtIHJlYWRCeXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIG1fcmVhZEJ1ZmZlci5kYXRh
KCksIG1fY3VycmVudE1lc3NhZ2VTaXplKTsKLSAgICAgICAgaWYgKG1fcGVuZGluZ0J5dGVzID4g
MCkgLy8gTWVzc2FnZSBwYXJ0aWFsbHkgcmVjZWl2ZWQuCi0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAvLyBNZXNzYWdlIHJlY2VpdmVkIGNvbXBsZXRlbHkuIFByb2Nlc3MgdGhlIG1lc3Nh
Z2Ugbm93LgotICAgICAgICBwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpOwotCi0gICAgICAgIG1l
bXNldChzaXplQnVmZmVyLCAwLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgfQotfQotCi1ib29sIENv
bm5lY3Rpb246Om9wZW4oKQotewotICAgIGludCBmbGFncyA9IGZjbnRsKG1fc29ja2V0LCBGX0dF
VEZMLCAwKTsKLSAgICBmY250bChtX3NvY2tldCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NL
KTsKLQotICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwotCi0gICAgLy8gUmVnaXN0ZXIgY2FsbGJh
Y2tzIGZvciBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIGFuZCBpbnB1dCBkYXRhIG9uIHRoZSBXb3Jr
UXVldWUuCi0gICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIo
bV9zb2NrZXQsIChHX0lPX0hVUCB8IEdfSU9fRVJSKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAm
Q29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Ci0gICAgbV9jb25uZWN0aW9uUXVldWUu
cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQsIEdfSU9fSU4sIFdvcmtJdGVtOjpj
cmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3Nh
Z2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fc29ja2V0ID4gMCk7Ci19Ci0KLWJvb2wgQ29u
bmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3du
UHRyPEFyZ3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQotewotICAgIGlmIChtX3NvY2tldCA8IDAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHB1dCB0aGUgbWVzc2FnZSBJRCBs
YXN0LgotICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsKLQot
ICAgIHNpemVfdCBidWZmZXJTaXplID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7Ci0KLSAgICAv
LyBTZW5kIHRoZSBtZXNzYWdlIHNpemUgZmlyc3QuCi0gICAgaWYgKCF3cml0ZUJ5dGVzVG9Tb2Nr
ZXQobV9zb2NrZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZidWZmZXJTaXplKSwgc2l6
ZW9mKHNpemVfdCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXdyaXRlQnl0
ZXNUb1NvY2tldChtX3NvY2tldCwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZm
ZXJTaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50UE9TSVguY3BwIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50UE9TSVguY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODQyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3Bvc2l4L0F0dGFjaG1lbnRQT1NJWC5jcHAKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBdHRhY2htZW50LmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CisKK0F0dGFjaG1lbnQ6OkF0dGFjaG1l
bnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fdHlwZShNYXBwZWRN
ZW1vcnkpCisgICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZpbGVEZXNjcmlwdG9yKQorICAgICwgbV9z
aXplKHNpemUpCit7CisgICAgQVNTRVJUKG1fZmlsZURlc2NyaXB0b3IpOworICAgIEFTU0VSVCht
X3NpemUpOworfQorCit2b2lkIEF0dGFjaG1lbnQ6OmRpc3Bvc2UoKQoreworICAgIGlmIChtX2Zp
bGVEZXNjcmlwdG9yICE9IC0xKQorICAgICAgICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRv
cikgPT0gLTEgJiYgKGVycm5vID09IEVJTlRSKSkgeyB9Cit9CisKK30gLy8gbmFtZXNwYWNlIENv
cmVJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0
YWNobWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNo
bWVudFF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwZWJjMC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLQotI2lmIFBM
QVRGT1JNKFFUKQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5k
aWYKLQotCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci0KLUF0dGFjaG1lbnQ6OkF0dGFjaG1lbnQoaW50
IGZpbGVEZXNjcmlwdG9yLCBzaXplX3Qgc2l6ZSkKLSAgICA6IG1fdHlwZShNYXBwZWRNZW1vcnkp
Ci0gICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZpbGVEZXNjcmlwdG9yKQotICAgICwgbV9zaXplKHNp
emUpCi17Ci0gICAgQVNTRVJUKG1fZmlsZURlc2NyaXB0b3IpOwotICAgIEFTU0VSVChtX3NpemUp
OwotfQotCi12b2lkIEF0dGFjaG1lbnQ6OmRpc3Bvc2UoKQotewotICAgIGlmIChtX2ZpbGVEZXNj
cmlwdG9yICE9IC0xKQotICAgICAgICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRvcikgPT0g
LTEgJiYgKGVycm5vID09IEVJTlRSKSkgeyB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIENvcmVJUEMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlv
blF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI1ZDdkYy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0KLSNpbmNsdWRlICJB
cmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKLSNpbmNsdWRl
ICJXb3JrSXRlbS5oIgotI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRU29ja2V0
Tm90aWZpZXI+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgQ29yZUlQQyB7
Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Owotc3RhdGljIGNv
bnN0IHNpemVfdCBhdHRhY2htZW50TWF4QW1vdW50ID0gMjU1OwotCi1lbnVtIHsKLSAgICBNZXNz
YWdlQm9keUlzT09MID0gMSA8PCAzMQotfTsKLQotY2xhc3MgTWVzc2FnZUluZm8gewotcHVibGlj
OgotICAgIE1lc3NhZ2VJbmZvKCkgeyB9Ci0KLSAgICBNZXNzYWdlSW5mbyhNZXNzYWdlSUQgbWVz
c2FnZUlELCBzaXplX3QgYm9keVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVudENvdW50KQot
ICAgICAgICA6IG1fbWVzc2FnZUlEKG1lc3NhZ2VJRC50b0ludCgpKQotICAgICAgICAsIG1fYm9k
eVNpemUoYm9keVNpemUpCi0gICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5pdGlhbEF0dGFj
aG1lbnRDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKG1fbWVzc2FnZUlEICYgTWVzc2Fn
ZUJvZHlJc09PTCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlPT0woKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKCFpc01lc3NhZ2VCb2R5T09MKCkpOwotCi0gICAgICAgIG1fbWVz
c2FnZUlEIHw9IE1lc3NhZ2VCb2R5SXNPT0w7Ci0gICAgICAgIG1fYXR0YWNobWVudENvdW50Kys7
Ci0gICAgfQotCi0gICAgYm9vbCBpc01lc3NhZ2VCb2R5T09MKCkgY29uc3QgeyByZXR1cm4gbV9t
ZXNzYWdlSUQgJiBNZXNzYWdlQm9keUlzT09MOyB9Ci0KLSAgICBzaXplX3QgYm9keVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2JvZHlTaXplOyB9Ci0KLSAgICBNZXNzYWdlSUQgbWVzc2FnZUlEKCkg
Y29uc3QgeyByZXR1cm4gTWVzc2FnZUlEOjpmcm9tSW50KG1fbWVzc2FnZUlEICYgfk1lc3NhZ2VC
b2R5SXNPT0wpOyB9Ci0KLSAgICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9hdHRhY2htZW50Q291bnQ7IH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX21lc3Nh
Z2VJRDsKLSAgICBzaXplX3QgbV9ib2R5U2l6ZTsKLSAgICBzaXplX3QgbV9hdHRhY2htZW50Q291
bnQ7Ci19OwotCi12b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVy
IGlkZW50aWZpZXIpCi17Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRpZmllcjsKLSAg
ICBtX3NvY2tldE5vdGlmaWVyID0gMDsKLSAgICBtX3JlYWRCdWZmZXIucmVzaXplKG1lc3NhZ2VN
YXhTaXplKTsKLSAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7Ci19Ci0KLXZvaWQgQ29ubmVj
dGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9y
ICE9IC0xKQotICAgICAgICB3aGlsZSAoY2xvc2UobV9zb2NrZXREZXNjcmlwdG9yKSA9PSAtMSAm
JiBlcnJubyA9PSBFSU5UUikgeyB9Ci0KLSAgICBpZiAoIW1faXNDb25uZWN0ZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGRlbGV0ZSBtX3NvY2tldE5vdGlmaWVyOwotICAgIG1fc29ja2V0Tm90
aWZpZXIgPSAwOwotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IC0xOwotICAgIG1faXNDb25uZWN0
ZWQgPSBmYWxzZTsKLX0KLQotY2xhc3MgU29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkIHsKLXB1
YmxpYzoKLSAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQoUVNvY2tldE5vdGlmaWVyKiBz
b2NrZXROb3RpZmllcikKLSAgICAgICAgOiBtX3NvY2tldE5vdGlmaWVyKHNvY2tldE5vdGlmaWVy
KQotICAgIHsKLSAgICAgICAgbV9zb2NrZXROb3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7Ci0g
ICAgfQotCi0gICAgflNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCgpCi0gICAgewotICAgICAg
ICBtX3NvY2tldE5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBRU29ja2V0Tm90aWZpZXIqIGNvbnN0IG1fc29ja2V0Tm90aWZpZXI7Ci19OwotCi10ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBpdGVyYXRvcj4KLWNsYXNzIEF0dGFjaG1lbnRSZXNvdXJjZUd1
YXJkIHsKLXB1YmxpYzoKLSAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZChUJiBhdHRhY2htZW50
cykKLSAgICAgICAgOiBtX2F0dGFjaG1lbnRzKGF0dGFjaG1lbnRzKQotICAgIHsKLSAgICB9Ci0g
ICAgfkF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkKCkKLSAgICB7Ci0gICAgICAgIGl0ZXJhdG9yIGVu
ZCA9IG1fYXR0YWNobWVudHMuZW5kKCk7Ci0gICAgICAgIGZvciAoaXRlcmF0b3IgaSA9IG1fYXR0
YWNobWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgICAgIGktPmRpc3Bvc2Uo
KTsKLSAgICB9Ci1wcml2YXRlOgotICAgIFQmIG1fYXR0YWNobWVudHM7Ci19OwotCi12b2lkIENv
bm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKQotewotICAgIERlcXVlPEF0dGFjaG1lbnQ+IGF0
dGFjaG1lbnRzOwotICAgIFNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCBzb2NrZXROb3RpZmll
ckVuYWJsZXIobV9zb2NrZXROb3RpZmllcik7Ci0gICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQ8
RGVxdWU8QXR0YWNobWVudD4sIERlcXVlPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNoZW1l
bnREaXNwb3NlcihhdHRhY2htZW50cyk7Ci0KLSAgICBjaGFyIGF0dGFjaG1lbnREZXNjcmlwdG9y
QnVmZmVyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpXTsK
LSAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7Ci0gICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXpl
b2YobWVzc2FnZSkpOwotCi0gICAgc3RydWN0IGlvdmVjIGlvdlsxXTsKLSAgICBtZW1zZXQoJmlv
diwgMCwgc2l6ZW9mKGlvdikpOwotCi0gICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1l
bnREZXNjcmlwdG9yQnVmZmVyOwotICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQ
QUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRNYXhBbW91bnQpKTsKLQotICAgIGlvdlswXS5p
b3ZfYmFzZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7Ci0gICAgaW92WzBdLmlvdl9sZW4gPSBtX3Jl
YWRCdWZmZXIuc2l6ZSgpOwotCi0gICAgbWVzc2FnZS5tc2dfaW92ID0gaW92OwotICAgIG1lc3Nh
Z2UubXNnX2lvdmxlbiA9IDE7Ci0KLQotICAgIGludCBtZXNzYWdlTGVuZ3RoID0gMDsKLSAgICB3
aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29ja2V0RGVzY3JpcHRvciwgJm1lc3Nh
Z2UsIDApKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RydWN0IGNtc2doZHIqIGNvbnRyb2xNZXNzYWdlID0g
Q01TR19GSVJTVEhEUigmbWVzc2FnZSk7Ci0KLSAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsK
LSAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7Ci0K
LSAgICBtZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKG1lc3NhZ2VJbmZv
KSk7Ci0gICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6ZW9mKG1lc3NhZ2VJbmZvKSArIG1l
c3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKHNpemVfdCkgKyAobWVzc2FnZUlu
Zm8uaXNNZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkpKTsKLQot
ICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7Ci0KLSAgICBSZWZQdHI8V2Vi
S2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5OwotCi0gICAgaWYgKG1lc3NhZ2VJbmZv
LmF0dGFjaG1lbnRDb3VudCgpKSB7Ci0gICAgICAgIGlmIChjb250cm9sTWVzc2FnZSAmJiBjb250
cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNvbnRyb2xNZXNzYWdlLT5j
bXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgewotICAgICAgICAgICAgc2l6ZV90IGF0dGFjaG1lbnRT
aXplc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07Ci0gICAgICAgICAgICBtZW1jcHko
YXR0YWNobWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKGF0dGFjaG1lbnRTaXplcykpOwot
Ci0gICAgICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YoYXR0YWNobWVudFNpemVzKTsKLQot
ICAgICAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291
bnQoKV07Ci0gICAgICAgICAgICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLCBDTVNHX0RBVEEoY29u
dHJvbE1lc3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3JzKSk7Ci0KLSAgICAgICAgICAgIGlu
dCBhdHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKTsKLQotICAg
ICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKLSAgICAgICAgICAg
ICAgICBhdHRhY2htZW50Q291bnQtLTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhdHRhY2htZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIHdoaWxlIChmY250bChm
aWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkwsIEZEX0NMT0VYRUMpID09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyArK2kp
Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKEF0dGFjaG1lbnQoZmlsZURlc2Ny
aXB0b3JzW2ldLCBhdHRhY2htZW50U2l6ZXNbaV0pKTsKLQotICAgICAgICAgICAgaWYgKG1lc3Nh
Z2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtZXNz
YWdlSW5mby5ib2R5U2l6ZSgpKTsKLQotICAgICAgICAgICAgICAgIFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9wdEZyb21BdHRh
Y2htZW50KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291bnRdLCBhdHRhY2htZW50U2l6ZXNb
YXR0YWNobWVudENvdW50XSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkg
ewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG9v
bE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvb2xNZXNz
YWdlQm9keSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigmbWVzc2FnZSwg
Y29udHJvbE1lc3NhZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBBU1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlP
T0woKSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpIC0gMSA6IG1lc3NhZ2VJbmZvLmF0
dGFjaG1lbnRDb3VudCgpKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VCb2R5ID0gbWVz
c2FnZURhdGE7Ci0KLSAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQotICAg
ICAgICBtZXNzYWdlQm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG9vbE1l
c3NhZ2VCb2R5LT5kYXRhKCkpOwotCi0gICAgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudERlY29k
ZXI7Ci0gICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgYXJndW1lbnREZWNv
ZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNp
emUoKSk7Ci0gICAgZWxzZQotICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJndW1lbnRE
ZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpLCBhdHRhY2htZW50cyk7
Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3NhZ2VJRCgpLCBh
ZG9wdFB0cihhcmd1bWVudERlY29kZXIpKTsKLQotICAgIEFTU0VSVCghY29udHJvbE1lc3NhZ2Up
OwotfQotCi1ib29sIENvbm5lY3Rpb246Om9wZW4oKQotewotICAgIEFTU0VSVCghbV9zb2NrZXRO
b3RpZmllcik7Ci0gICAgaW50IGZsYWdzID0gZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX0dF
VEZMLCAwKTsKLSAgICB3aGlsZSAoZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX1NFVEZMLCBm
bGFncyB8IE9fTk9OQkxPQ0spID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikg
ewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKLSAg
ICBtX3NvY2tldE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJTb2NrZXRFdmVu
dEhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlJlYWQsIFdvcmtJ
dGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsKLQotICAg
IC8vIFNjaGVkdWxlIGEgY2FsbCB0byByZWFkeVJlYWRIYW5kbGVyLiBEYXRhIG1heSBoYXZlIGFy
cml2ZWQgYmVmb3JlIGluc3RhbGxhdGlvbiBvZiB0aGUgc2lnbmFsCi0gICAgLy8gaGFuZGxlci4K
LSAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlz
LCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc29ja2V0Tm90aWZpZXI7Ci19Ci0KLWJvb2wgQ29ubmVjdGlv
bjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFy
Z3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQotewotICAgIEFTU0VSVChtX3NvY2tldE5vdGlmaWVy
KTsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTWVzc2FnZUluZm8pICsgYXR0YWNobWVudE1h
eEFtb3VudCAqIHNpemVvZihzaXplX3QpIDw9IG1lc3NhZ2VNYXhTaXplLCBBdHRhY2htZW50c0Zp
dFRvTWVzc2FnZUlubGluZSk7Ci0KLSAgICBWZWN0b3I8QXR0YWNobWVudD4gYXR0YWNobWVudHMg
PSBhcmd1bWVudHMtPnJlbGVhc2VBdHRhY2htZW50cygpOwotICAgIEF0dGFjaG1lbnRSZXNvdXJj
ZUd1YXJkPFZlY3RvcjxBdHRhY2htZW50PiwgVmVjdG9yPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4g
YXR0YWNoZW1lbnREaXNwb3NlcihhdHRhY2htZW50cyk7Ci0KLSAgICBpZiAoYXR0YWNobWVudHMu
c2l6ZSgpID4gKGF0dGFjaG1lbnRNYXhBbW91bnQgLSAxKSkgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIE1lc3NhZ2VJ
bmZvIG1lc3NhZ2VJbmZvKG1lc3NhZ2VJRCwgYXJndW1lbnRzLT5idWZmZXJTaXplKCksIGF0dGFj
aG1lbnRzLnNpemUoKSk7Ci0gICAgc2l6ZV90IG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxpbmUgPSBz
aXplb2YobWVzc2FnZUluZm8pICsgKGF0dGFjaG1lbnRzLnNpemUoKSAqIHNpemVvZihzaXplX3Qp
KSArIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpOwotICAgIGlmIChtZXNzYWdlU2l6ZVdpdGhCb2R5
SW5saW5lID4gbWVzc2FnZU1heFNpemUgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKLSAg
ICAgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBvb2xNZXNzYWdlQm9keSA9IFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOwotICAgICAg
ICBpZiAoIW9vbE1lc3NhZ2VCb2R5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBpZiAoIW9v
bE1lc3NhZ2VCb2R5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
UmVhZE9ubHkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1lc3NhZ2VJ
bmZvLnNldE1lc3NhZ2VCb2R5T09MKCk7Ci0KLSAgICAgICAgbWVtY3B5KG9vbE1lc3NhZ2VCb2R5
LT5kYXRhKCksIGFyZ3VtZW50cy0+YnVmZmVyKCksIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsK
LQotICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoaGFuZGxlLnJlbGVhc2VUb0F0dGFjaG1lbnQo
KSk7Ci0gICAgfQotCi0gICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOwotICAgIG1lbXNldCgmbWVz
c2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKLQotICAgIHN0cnVjdCBpb3ZlYyBpb3ZbM107Ci0g
ICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKLQotICAgIG1lc3NhZ2UubXNnX2lvdiA9
IGlvdjsKLSAgICBpbnQgaW92TGVuZ3RoID0gMTsKLQotICAgIGlvdlswXS5pb3ZfYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZtZXNzYWdlSW5mbyk7Ci0gICAgaW92WzBdLmlvdl9sZW4g
PSBzaXplb2YobWVzc2FnZUluZm8pOwotCi0gICAgY2hhciBhdHRhY2htZW50RkRCdWZmZXJbQ01T
R19TUEFDRShzaXplb2YoaW50KSAqIChhdHRhY2htZW50cy5zaXplKCkpKV07Ci0gICAgc2l6ZV90
IGF0dGFjaG1lbnRTaXplc1thdHRhY2htZW50cy5zaXplKCldOwotCi0gICAgaWYgKCFhdHRhY2ht
ZW50cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1l
bnRGREJ1ZmZlcjsKLSAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihhdHRh
Y2htZW50RkRCdWZmZXIpOwotCi0gICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19G
SVJTVEhEUigmbWVzc2FnZSk7Ci0gICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VU
OwotICAgICAgICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwotICAgICAgICBjbXNnLT5j
bXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihpbnQpICogYXR0YWNobWVudHMuc2l6ZSgpKTsKLQot
ICAgICAgICBpbnQqIGZkcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihDTVNHX0RBVEEoY21z
ZykpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBhdHRhY2htZW50U2l6ZXNbaV0gPSBhdHRhY2htZW50c1tpXS5zaXpl
KCk7Ci0gICAgICAgICAgICBmZHB0cltpXSA9IGF0dGFjaG1lbnRzW2ldLmZpbGVEZXNjcmlwdG9y
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gY21zZy0+
Y21zZ19sZW47Ci0KLSAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSBhdHRhY2htZW50
U2l6ZXM7Ci0gICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBzaXplb2YoYXR0YWNobWVu
dFNpemVzKTsKLSAgICAgICAgKytpb3ZMZW5ndGg7Ci0gICAgfQotCi0gICAgaWYgKCFtZXNzYWdl
SW5mby5pc01lc3NhZ2VCb2R5T09MKCkgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKLSAg
ICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihh
cmd1bWVudHMtPmJ1ZmZlcigpKTsKLSAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IGFy
Z3VtZW50cy0+YnVmZmVyU2l6ZSgpOwotICAgICAgICArK2lvdkxlbmd0aDsKLSAgICB9Ci0KLSAg
ICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSBpb3ZMZW5ndGg7Ci0KLSAgICBpbnQgYnl0ZXNTZW50ID0g
MDsKLSAgICB3aGlsZSAoKGJ5dGVzU2VudCA9IHNlbmRtc2cobV9zb2NrZXREZXNjcmlwdG9yLCAm
bWVzc2FnZSwgMCkpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24o
V2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCi17Ci0gICAgbV9jb25u
ZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihwcm9jZXNzLCBXb3JrSXRlbTo6
Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMGZiNzIwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKQEAgLTAsMCArMSw0MDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAi
UHJvY2Vzc0xhdW5jaGVyLmgiCisjaW5jbHVkZSAiV29ya0l0ZW0uaCIKKyNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKyNpZiBQTEFURk9S
TShRVCkKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UVNvY2tldE5vdGlmaWVy
PgorI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdsaWIuaD4KKyNlbmRpZgorCit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgQ29yZUlQQyB7CisKK3N0YXRpYyBjb25zdCBz
aXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Oworc3RhdGljIGNvbnN0IHNpemVfdCBhdHRhY2ht
ZW50TWF4QW1vdW50ID0gMjU1OworCitlbnVtIHsKKyAgICBNZXNzYWdlQm9keUlzT09MID0gMSA8
PCAzMQorfTsKKworY2xhc3MgTWVzc2FnZUluZm8geworcHVibGljOgorICAgIE1lc3NhZ2VJbmZv
KCkgeyB9CisKKyAgICBNZXNzYWdlSW5mbyhNZXNzYWdlSUQgbWVzc2FnZUlELCBzaXplX3QgYm9k
eVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVudENvdW50KQorICAgICAgICA6IG1fbWVzc2Fn
ZUlEKG1lc3NhZ2VJRC50b0ludCgpKQorICAgICAgICAsIG1fYm9keVNpemUoYm9keVNpemUpCisg
ICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5pdGlhbEF0dGFjaG1lbnRDb3VudCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghKG1fbWVzc2FnZUlEICYgTWVzc2FnZUJvZHlJc09PTCkpOworICAg
IH0KKworICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlPT0woKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFpc01lc3NhZ2VCb2R5T09MKCkpOworCisgICAgICAgIG1fbWVzc2FnZUlEIHw9IE1lc3NhZ2VC
b2R5SXNPT0w7CisgICAgICAgIG1fYXR0YWNobWVudENvdW50Kys7CisgICAgfQorCisgICAgYm9v
bCBpc01lc3NhZ2VCb2R5T09MKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlSUQgJiBNZXNzYWdl
Qm9keUlzT09MOyB9CisKKyAgICBzaXplX3QgYm9keVNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jv
ZHlTaXplOyB9CisKKyAgICBNZXNzYWdlSUQgbWVzc2FnZUlEKCkgY29uc3QgeyByZXR1cm4gTWVz
c2FnZUlEOjpmcm9tSW50KG1fbWVzc2FnZUlEICYgfk1lc3NhZ2VCb2R5SXNPT0wpOyB9CisKKyAg
ICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50Q291
bnQ7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX21lc3NhZ2VJRDsKKyAgICBzaXplX3Qg
bV9ib2R5U2l6ZTsKKyAgICBzaXplX3QgbV9hdHRhY2htZW50Q291bnQ7Cit9OworCit2b2lkIENv
bm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7Cisg
ICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRpZmllcjsKKyAgICBtX3JlYWRCdWZmZXIucmVz
aXplKG1lc3NhZ2VNYXhTaXplKTsKKyAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7CisKKyNp
ZiBQTEFURk9STShRVCkKKyAgICBtX3NvY2tldE5vdGlmaWVyID0gMDsKKyNlbmRpZgorfQorCit2
b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKG1fc29ja2V0
RGVzY3JpcHRvciAhPSAtMSkKKyAgICAgICAgd2hpbGUgKGNsb3NlKG1fc29ja2V0RGVzY3JpcHRv
cikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQorCisgICAgaWYgKCFtX2lzQ29ubmVjdGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSAtMTsKKyAgICBt
X2lzQ29ubmVjdGVkID0gZmFsc2U7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBkZWxldGUgbV9z
b2NrZXROb3RpZmllcjsKKyAgICBtX3NvY2tldE5vdGlmaWVyID0gMDsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oR1RLKQorICAgIG1fY29ubmVjdGlvblF1ZXVlLnVucmVnaXN0ZXJFdmVudFNvdXJj
ZUhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yKTsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0o
UVQpCitjbGFzcyBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQgeworcHVibGljOgorICAgIFNv
Y2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZChRU29ja2V0Tm90aWZpZXIqIHNvY2tldE5vdGlmaWVy
KQorICAgICAgICA6IG1fc29ja2V0Tm90aWZpZXIoc29ja2V0Tm90aWZpZXIpCisgICAgeworICAg
ICAgICBtX3NvY2tldE5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICB9CisKKyAgICB+
U29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkKCkKKyAgICB7CisgICAgICAgIG1fc29ja2V0Tm90
aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFTb2NrZXRO
b3RpZmllciogY29uc3QgbV9zb2NrZXROb3RpZmllcjsKK307CisjZW5kaWYKKwordGVtcGxhdGU8
Y2xhc3MgVCwgY2xhc3MgaXRlcmF0b3I+CitjbGFzcyBBdHRhY2htZW50UmVzb3VyY2VHdWFyZCB7
CitwdWJsaWM6CisgICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQoVCYgYXR0YWNobWVudHMpCisg
ICAgICAgIDogbV9hdHRhY2htZW50cyhhdHRhY2htZW50cykKKyAgICB7CisgICAgfQorICAgIH5B
dHRhY2htZW50UmVzb3VyY2VHdWFyZCgpCisgICAgeworICAgICAgICBpdGVyYXRvciBlbmQgPSBt
X2F0dGFjaG1lbnRzLmVuZCgpOworICAgICAgICBmb3IgKGl0ZXJhdG9yIGkgPSBtX2F0dGFjaG1l
bnRzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgICAgICAgICBpLT5kaXNwb3NlKCk7Cisg
ICAgfQorcHJpdmF0ZToKKyAgICBUJiBtX2F0dGFjaG1lbnRzOworfTsKKwordm9pZCBDb25uZWN0
aW9uOjpyZWFkeVJlYWRIYW5kbGVyKCkKK3sKKyAgICBEZXF1ZTxBdHRhY2htZW50PiBhdHRhY2ht
ZW50czsKKyNpZiBQTEFURk9STShRVCkKKyAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQg
c29ja2V0Tm90aWZpZXJFbmFibGVyKG1fc29ja2V0Tm90aWZpZXIpOworI2VuZGlmCisgICAgQXR0
YWNobWVudFJlc291cmNlR3VhcmQ8RGVxdWU8QXR0YWNobWVudD4sIERlcXVlPEF0dGFjaG1lbnQ+
OjppdGVyYXRvcj4gYXR0YWNoZW1lbnREaXNwb3NlcihhdHRhY2htZW50cyk7CisKKyAgICBjaGFy
IGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0
YWNobWVudE1heEFtb3VudCkpXTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVt
c2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlv
dlsxXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5t
c2dfY29udHJvbCA9IGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyOworICAgIG1lc3NhZ2UubXNn
X2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRNYXhBbW91
bnQpKTsKKworICAgIGlvdlswXS5pb3ZfYmFzZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAg
aW92WzBdLmlvdl9sZW4gPSBtX3JlYWRCdWZmZXIuc2l6ZSgpOworCisgICAgbWVzc2FnZS5tc2df
aW92ID0gaW92OworICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7CisKKworICAgIGludCBtZXNz
YWdlTGVuZ3RoID0gMDsKKyAgICB3aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29j
a2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIDApKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RydWN0IGNtc2do
ZHIqIGNvbnRyb2xNZXNzYWdlID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7CisKKyAgICBNZXNz
YWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1f
cmVhZEJ1ZmZlci5kYXRhKCk7CisKKyAgICBtZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0
YSwgc2l6ZW9mKG1lc3NhZ2VJbmZvKSk7CisgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6
ZW9mKG1lc3NhZ2VJbmZvKSArIG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9m
KHNpemVfdCkgKyAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJ
bmZvLmJvZHlTaXplKCkpKTsKKworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5m
byk7CisKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5Owor
CisgICAgaWYgKG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChj
b250cm9sTWVzc2FnZSAmJiBjb250cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VU
ICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgeworICAgICAgICAg
ICAgc2l6ZV90IGF0dGFjaG1lbnRTaXplc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07
CisgICAgICAgICAgICBtZW1jcHkoYXR0YWNobWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9m
KGF0dGFjaG1lbnRTaXplcykpOworCisgICAgICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2Yo
YXR0YWNobWVudFNpemVzKTsKKworICAgICAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNz
YWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07CisgICAgICAgICAgICBtZW1jcHkoZmlsZURlc2Ny
aXB0b3JzLCBDTVNHX0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3Jz
KSk7CisKKyAgICAgICAgICAgIGludCBhdHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRh
Y2htZW50Q291bnQoKTsKKworICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJv
ZHlPT0woKSkKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50Q291bnQtLTsKKworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkgeworICAgICAgICAg
ICAgICAgIHdoaWxlIChmY250bChmaWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkwsIEZEX0NMT0VY
RUMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YXR0YWNobWVudENvdW50OyArK2kpCisgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5k
KEF0dGFjaG1lbnQoZmlsZURlc2NyaXB0b3JzW2ldLCBhdHRhY2htZW50U2l6ZXNbaV0pKTsKKwor
ICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKworICAgICAgICAgICAg
ICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgICAg
IGhhbmRsZS5hZG9wdEZyb21BdHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291
bnRdLCBhdHRhY2htZW50U2l6ZXNbYXR0YWNobWVudENvdW50XSk7CisgICAgICAgICAgICAgICAg
aWYgKGhhbmRsZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OmNyZWF0ZShoYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keSkgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBD
TVNHX05YVEhEUigmbWVzc2FnZSwgY29udHJvbE1lc3NhZ2UpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3Nh
Z2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgp
IC0gMSA6IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKTsKKworICAgIHVuc2lnbmVkIGNo
YXIqIG1lc3NhZ2VCb2R5ID0gbWVzc2FnZURhdGE7CisKKyAgICBpZiAobWVzc2FnZUluZm8uaXNN
ZXNzYWdlQm9keU9PTCgpKQorICAgICAgICBtZXNzYWdlQm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG9vbE1lc3NhZ2VCb2R5LT5kYXRhKCkpOworCisgICAgQXJndW1lbnRE
ZWNvZGVyKiBhcmd1bWVudERlY29kZXI7CisgICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1wdHkoKSkK
KyAgICAgICAgYXJndW1lbnREZWNvZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9k
eSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSk7CisgICAgZWxzZQorICAgICAgICBhcmd1bWVudERl
Y29kZXIgPSBuZXcgQXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5
U2l6ZSgpLCBhdHRhY2htZW50cyk7CisKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3Nh
Z2VJbmZvLm1lc3NhZ2VJRCgpLCBhZG9wdFB0cihhcmd1bWVudERlY29kZXIpKTsKKworICAgIEFT
U0VSVCghY29udHJvbE1lc3NhZ2UpOworfQorCitib29sIENvbm5lY3Rpb246Om9wZW4oKQorewor
I2lmIFBMQVRGT1JNKFFUKQorICAgIEFTU0VSVCghbV9zb2NrZXROb3RpZmllcik7CisjZW5kaWYK
KworICAgIGludCBmbGFncyA9IGZjbnRsKG1fc29ja2V0RGVzY3JpcHRvciwgRl9HRVRGTCwgMCk7
CisgICAgd2hpbGUgKGZjbnRsKG1fc29ja2V0RGVzY3JpcHRvciwgRl9TRVRGTCwgZmxhZ3MgfCBP
X05PTkJMT0NLKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgbV9pc0Nvbm5lY3RlZCA9IHRydWU7CisjaWYgUExBVEZP
Uk0oUVQpCisgICAgbV9zb2NrZXROb3RpZmllciA9IG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVy
U29ja2V0RXZlbnRIYW5kbGVyKG1fc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpS
ZWFkLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVy
KSk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJF
dmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yLCAoR19JT19IVVAgfCBHX0lPX0VS
UiksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9z
ZSkpOworICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1f
c29ja2V0RGVzY3JpcHRvciwgR19JT19JTiwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVj
dGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOworI2VuZGlmCisKKyAgICAvLyBTY2hlZHVsZSBhIGNh
bGwgdG8gcmVhZHlSZWFkSGFuZGxlci4gRGF0YSBtYXkgaGF2ZSBhcnJpdmVkIGJlZm9yZSBpbnN0
YWxsYXRpb24gb2YgdGhlIHNpZ25hbAorICAgIC8vIGhhbmRsZXIuCisgICAgbV9jb25uZWN0aW9u
UXVldWUuc2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJl
YWR5UmVhZEhhbmRsZXIpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rp
b246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAoreworICAgIHJldHVy
biBtX2lzQ29ubmVjdGVkOworfQorCitib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3Nh
Z2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+IGFyZ3Vt
ZW50cykKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBBU1NFUlQobV9zb2NrZXROb3RpZmllcik7
CisjZW5kaWYKKworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlSW5mbykgKyBhdHRh
Y2htZW50TWF4QW1vdW50ICogc2l6ZW9mKHNpemVfdCkgPD0gbWVzc2FnZU1heFNpemUsIEF0dGFj
aG1lbnRzRml0VG9NZXNzYWdlSW5saW5lKTsKKworICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRh
Y2htZW50cyA9IGFyZ3VtZW50cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgQXR0YWNobWVu
dFJlc291cmNlR3VhcmQ8VmVjdG9yPEF0dGFjaG1lbnQ+LCBWZWN0b3I8QXR0YWNobWVudD46Oml0
ZXJhdG9yPiBhdHRhY2hlbWVudERpc3Bvc2VyKGF0dGFjaG1lbnRzKTsKKworICAgIGlmIChhdHRh
Y2htZW50cy5zaXplKCkgPiAoYXR0YWNobWVudE1heEFtb3VudCAtIDEpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
TWVzc2FnZUluZm8gbWVzc2FnZUluZm8obWVzc2FnZUlELCBhcmd1bWVudHMtPmJ1ZmZlclNpemUo
KSwgYXR0YWNobWVudHMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbWVzc2FnZVNpemVXaXRoQm9keUlu
bGluZSA9IHNpemVvZihtZXNzYWdlSW5mbykgKyAoYXR0YWNobWVudHMuc2l6ZSgpICogc2l6ZW9m
KHNpemVfdCkpICsgYXJndW1lbnRzLT5idWZmZXJTaXplKCk7CisgICAgaWYgKG1lc3NhZ2VTaXpl
V2l0aEJvZHlJbmxpbmUgPiBtZXNzYWdlTWF4U2l6ZSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNpemUo
KSkgeworICAgICAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5
ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7
CisgICAgICAgIGlmICghb29sTWVzc2FnZUJvZHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAg
IGlmICghb29sTWVzc2FnZUJvZHktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpSZWFkT25seSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
bWVzc2FnZUluZm8uc2V0TWVzc2FnZUJvZHlPT0woKTsKKworICAgICAgICBtZW1jcHkob29sTWVz
c2FnZUJvZHktPmRhdGEoKSwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJT
aXplKCkpOworCisgICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChoYW5kbGUucmVsZWFzZVRvQXR0
YWNobWVudCgpKTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVt
c2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlv
dlszXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5t
c2dfaW92ID0gaW92OworICAgIGludCBpb3ZMZW5ndGggPSAxOworCisgICAgaW92WzBdLmlvdl9i
YXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1lc3NhZ2VJbmZvKTsKKyAgICBpb3ZbMF0u
aW92X2xlbiA9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAgICBjaGFyIGF0dGFjaG1lbnRGREJ1
ZmZlcltDTVNHX1NQQUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRzLnNpemUoKSkpXTsKKyAg
ICBzaXplX3QgYXR0YWNobWVudFNpemVzW2F0dGFjaG1lbnRzLnNpemUoKV07CisKKyAgICBpZiAo
IWF0dGFjaG1lbnRzLmlzRW1wdHkoKSkgeworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0g
YXR0YWNobWVudEZEQnVmZmVyOworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6
ZW9mKGF0dGFjaG1lbnRGREJ1ZmZlcik7CisKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cg
PSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IFNP
TF9TT0NLRVQ7CisgICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CisgICAgICAg
IGNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKGludCkgKiBhdHRhY2htZW50cy5zaXpl
KCkpOworCisgICAgICAgIGludCogZmRwdHIgPSByZWludGVycHJldF9jYXN0PGludCo+KENNU0df
REFUQShjbXNnKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0YWNobWVudHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF0dGFjaG1lbnRTaXplc1tpXSA9IGF0dGFjaG1l
bnRzW2ldLnNpemUoKTsKKyAgICAgICAgICAgIGZkcHRyW2ldID0gYXR0YWNobWVudHNbaV0uZmls
ZURlc2NyaXB0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xs
ZW4gPSBjbXNnLT5jbXNnX2xlbjsKKworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9
IGF0dGFjaG1lbnRTaXplczsKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IHNpemVv
ZihhdHRhY2htZW50U2l6ZXMpOworICAgICAgICArK2lvdkxlbmd0aDsKKyAgICB9CisKKyAgICBp
ZiAoIW1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNp
emUoKSkgeworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGFyZ3VtZW50cy0+YnVmZmVyKCkpOworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5p
b3ZfbGVuID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7CisgICAgICAgICsraW92TGVuZ3RoOwor
ICAgIH0KKworICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IGlvdkxlbmd0aDsKKworICAgIGludCBi
eXRlc1NlbnQgPSAwOworICAgIHdoaWxlICgoYnl0ZXNTZW50ID0gc2VuZG1zZyhtX3NvY2tldERl
c2NyaXB0b3IsICZtZXNzYWdlLCAwKSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJ
TlRSKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmIFBMQVRGT1JNKFFUKQordm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNv
bm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIgcHJvY2VzcykKK3sKKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmtPblRl
cm1pbmF0aW9uKHByb2Nlc3MsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNv
bm5lY3Rpb25EaWRDbG9zZSkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggYTRiOTViZi4uNTQzNjBk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RL
KQogI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KICNlbmRpZgpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZW5jb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgSGFuZGxlJik7CiAKLSNpZiBQTEFURk9S
TShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICBDb3JlSVBD
OjpBdHRhY2htZW50IHJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdDsKICAgICAgICAgdm9pZCBh
ZG9wdEZyb21BdHRhY2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90KTsKICNlbmRpZgpA
QCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG11dGFibGUgbWFjaF9wb3J0X3QgbV9w
b3J0OwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRs
ZTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdU
SykKICAgICAgICAgbXV0YWJsZSBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogICAgICAg
ICBzaXplX3QgbV9zaXplOwpAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIG1hY2hfcG9y
dF90IG1fcG9ydDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIQU5ETEUgbV9oYW5kbGU7Ci0j
ZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAg
ICAgaW50IG1fZmlsZURlc2NyaXB0b3I7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9wb3NpeC9TaGFyZWRNZW1vcnlQT1NJWC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9wb3NpeC9TaGFyZWRNZW1vcnlQT1NJWC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjZjEzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3Bvc2l4L1NoYXJlZE1lbW9yeVBPU0lYLmNwcApAQCAtMCwwICsxLDIz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZE1l
bW9yeS5oIgorCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1l
bnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu
Y2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5j
bHVkZSA8UURpcj4KKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlZE1lbW9yeTo6
SGFuZGxlOjpIYW5kbGUoKQorICAgIDogbV9maWxlRGVzY3JpcHRvcigtMSkKKyAgICAsIG1fc2l6
ZSgwKQoreworfQorCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCit7CisgICAgaWYg
KCFpc051bGwoKSkKKyAgICAgICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0x
ICYmIGVycm5vID09IEVJTlRSKSB7IH0KK30KKworYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6
aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlRGVzY3JpcHRvciA9PSAtMTsKK30K
Kwordm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGVu
Y29kZXItPmVuY29kZShyZWxlYXNlVG9BdHRhY2htZW50KCkpOworfQorCitib29sIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBI
YW5kbGUmIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX3NpemUp
OworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkpOworCisgICAgQ29yZUlQ
Qzo6QXR0YWNobWVudCBhdHRhY2htZW50OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0dGFj
aG1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBoYW5kbGUuYWRvcHRGcm9tQXR0
YWNobWVudChhdHRhY2htZW50LnJlbGVhc2VGaWxlRGVzY3JpcHRvcigpLCBhdHRhY2htZW50LnNp
emUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvcmVJUEM6OkF0dGFjaG1lbnQgU2hhcmVk
TWVtb3J5OjpIYW5kbGU6OnJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdAoreworICAgIEFTU0VS
VCghaXNOdWxsKCkpOworCisgICAgaW50IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOworICAgIG1f
ZmlsZURlc2NyaXB0b3IgPSAtMTsKKyAgICByZXR1cm4gQ29yZUlQQzo6QXR0YWNobWVudCh0ZW1w
LCBtX3NpemUpOworfQorCit2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRh
Y2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKCFt
X3NpemUpOworICAgIEFTU0VSVChpc051bGwoKSk7CisKKyAgICBtX2ZpbGVEZXNjcmlwdG9yID0g
ZmlsZURlc2NyaXB0b3I7CisgICAgbV9zaXplID0gc2l6ZTsKK30KKworUGFzc1JlZlB0cjxTaGFy
ZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQoreworI2lmIFBMQVRG
T1JNKFFUKQorICAgIFFTdHJpbmcgdGVtcE5hbWUgPSBRRGlyOjp0ZW1wKCkuZmlsZVBhdGgoUUxh
dGluMVN0cmluZygicXdrc2htLlhYWFhYWCIpKTsKKyAgICBRQnl0ZUFycmF5IHRlbXBOYW1lQ1NU
UiA9IHRlbXBOYW1lLnRvTG9jYWw4Qml0KCk7CisgICAgY2hhciogdGVtcE5hbWVDID0gdGVtcE5h
bWVDU1RSLmRhdGEoKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBHT3duUHRyPGdjaGFyPiB0
ZW1wTmFtZShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIldLMlNoYXJlZE1lbW9y
eVhYWFhYWCIsIE5VTEwpKTsKKyAgICBnY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWUuZ2V0KCk7
CisjZW5kaWYKKworICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICB3aGlsZSAoKGZpbGVEZXNj
cmlwdG9yID0gbWtzdGVtcCh0ZW1wTmFtZUMpKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgd2hpbGUgKGZjbnRs
KGZpbGVEZXNjcmlwdG9yLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA9PSAtMSkgeworICAgICAgICBp
ZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3Jp
cHRvcikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQorICAgICAgICAgICAgdW5saW5rKHRl
bXBOYW1lQyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHdoaWxlIChmdHJ1bmNhdGUoZmlsZURlc2NyaXB0b3IsIHNpemUpID09IC0xKSB7CisgICAgICAg
IGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNj
cmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9CisgICAgICAgICAgICB1bmxpbmso
dGVtcE5hbWVDKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQ
X1NIQVJFRCwgZmlsZURlc2NyaXB0b3IsIDApOworICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQp
IHsKKyAgICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9
PSBFSU5UUikgeyB9CisgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICB1bmxpbmsodGVtcE5hbWVDKTsKKworICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKKyAgICBpbnN0
YW5jZS0+bV9kYXRhID0gZGF0YTsKKyAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGZp
bGVEZXNjcmlwdG9yOworICAgIGluc3RhbmNlLT5tX3NpemUgPSBzaXplOworICAgIHJldHVybiBp
bnN0YW5jZS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVNTWFw
KFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJv
dGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0
dXJuIFBST1RfUkVBRDsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgorICAgICAg
ICByZXR1cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKK30KKworUGFz
c1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYg
aGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgQVNTRVJUKCFoYW5kbGUuaXNO
dWxsKCkpOworCisgICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgaGFuZGxlLm1fc2l6ZSwgYWNjZXNz
TW9kZU1NYXAocHJvdGVjdGlvbiksIE1BUF9TSEFSRUQsIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9y
LCAwKTsKKyAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSgpKTsKKyAgICBpbnN0YW5jZS0+bV9kYXRhID0gZGF0YTsKKyAgICBpbnN0YW5jZS0+bV9m
aWxlRGVzY3JpcHRvciA9IGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yOworICAgIGluc3RhbmNlLT5t
X3NpemUgPSBoYW5kbGUubV9zaXplOworICAgIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yID0gLTE7
CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnko
KQoreworICAgIG11bm1hcChtX2RhdGEsIG1fc2l6ZSk7CisgICAgd2hpbGUgKGNsb3NlKG1fZmls
ZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KK30KKworc3RhdGljIGlu
bGluZSBpbnQgYWNjZXNzTW9kZUZpbGUoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rp
b24pCit7CisgICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6
OlJlYWRPbmx5OgorICAgICAgICByZXR1cm4gT19SRE9OTFk7CisgICAgY2FzZSBTaGFyZWRNZW1v
cnk6OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIE9fUkRXUjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gT19SRFdSOworfQorCitib29sIFNoYXJlZE1l
bW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24p
Cit7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlRf
QVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVsbCgpKTsKKworICAgIGludCBkdXBsaWNhdGVkSGFuZGxl
OworICAgIHdoaWxlICgoZHVwbGljYXRlZEhhbmRsZSA9IGR1cChtX2ZpbGVEZXNjcmlwdG9yKSkg
PT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHdoaWxlICgoZmNudGwoZHVwbGljYXRlZEhhbmRsZSwgRl9TRVRGRCwgRkRf
Q0xPRVhFQyB8IGFjY2Vzc01vZGVGaWxlKHByb3RlY3Rpb24pKSA9PSAtMSkpIHsKKyAgICAgICAg
aWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHdoaWxlIChjbG9zZShkdXBsaWNhdGVkSGFuZGxlKSA9PSAtMSAmJiBlcnJu
byA9PSBFSU5UUikgeyB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaGFuZGxlLm1fZmlsZURlc2NyaXB0b3IgPSBkdXBsaWNhdGVkSGFuZGxlOworICAg
IGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVk
IFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBw
YWdlU2l6ZSA9IDA7CisKKyAgICBpZiAoIXBhZ2VTaXplKQorICAgICAgICBwYWdlU2l6ZSA9IGdl
dHBhZ2VzaXplKCk7CisKKyAgICByZXR1cm4gcGFnZVNpemU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVt
b3J5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDVkNzBmLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDIyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxMCBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKLSNp
bmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKLSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNu
dGwuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5k
bGUoKQotICAgIDogbV9maWxlRGVzY3JpcHRvcigtMSkKLSAgICAsIG1fc2l6ZSgwKQotewotfQot
Ci1TaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCi17Ci0gICAgaWYgKCFpc051bGwoKSkK
LSAgICAgICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09
IEVJTlRSKSB7IH0KLX0KLQotYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9maWxlRGVzY3JpcHRvciA9PSAtMTsKLX0KLQotdm9pZCBTaGFy
ZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLQotICAgIGVuY29kZXItPmVuY29k
ZShyZWxlYXNlVG9BdHRhY2htZW50KCkpOwotfQotCi1ib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxl
OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRs
ZSkKLXsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX3NpemUpOwotICAgIEFTU0VS
VF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkpOwotCi0gICAgQ29yZUlQQzo6QXR0YWNobWVu
dCBhdHRhY2htZW50OwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0dGFjaG1lbnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBoYW5kbGUuYWRvcHRGcm9tQXR0YWNobWVudChhdHRh
Y2htZW50LnJlbGVhc2VGaWxlRGVzY3JpcHRvcigpLCBhdHRhY2htZW50LnNpemUoKSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLUNvcmVJUEM6OkF0dGFjaG1lbnQgU2hhcmVkTWVtb3J5OjpIYW5k
bGU6OnJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkp
OwotCi0gICAgaW50IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOwotICAgIG1fZmlsZURlc2NyaXB0
b3IgPSAtMTsKLSAgICByZXR1cm4gQ29yZUlQQzo6QXR0YWNobWVudCh0ZW1wLCBtX3NpemUpOwot
fQotCi12b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRhY2htZW50KGludCBm
aWxlRGVzY3JpcHRvciwgc2l6ZV90IHNpemUpCi17Ci0gICAgQVNTRVJUKCFtX3NpemUpOwotICAg
IEFTU0VSVChpc051bGwoKSk7Ci0KLSAgICBtX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0
b3I7Ci0gICAgbV9zaXplID0gc2l6ZTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQotewotICAgIFFTdHJpbmcgdGVtcE5hbWUg
PSBRRGlyOjp0ZW1wKCkuZmlsZVBhdGgoUUxhdGluMVN0cmluZygicXdrc2htLlhYWFhYWCIpKTsK
LSAgICBRQnl0ZUFycmF5IHRlbXBOYW1lQ1NUUiA9IHRlbXBOYW1lLnRvTG9jYWw4Qml0KCk7Ci0g
ICAgY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWVDU1RSLmRhdGEoKTsKLQotICAgIGludCBmaWxl
RGVzY3JpcHRvcjsKLSAgICB3aGlsZSAoKGZpbGVEZXNjcmlwdG9yID0gbWtzdGVtcCh0ZW1wTmFt
ZUMpKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgd2hpbGUgKGZjbnRsKGZpbGVEZXNjcmlwdG9yLCBGX1NFVEZE
LCBGRF9DTE9FWEVDKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKLSAg
ICAgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8gPT0g
RUlOVFIpIHsgfQotICAgICAgICAgICAgdW5saW5rKHRlbXBOYW1lQyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChmdHJ1bmNhdGUoZmlsZURl
c2NyaXB0b3IsIHNpemUpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewot
ICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9
PSBFSU5UUikgeyB9Ci0gICAgICAgICAgICB1bmxpbmsodGVtcE5hbWVDKTsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwg
c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmlsZURlc2NyaXB0b3Is
IDApOwotICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgd2hpbGUgKGNsb3Nl
KGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9Ci0gICAgICAgIHVu
bGluayh0ZW1wTmFtZUMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB1bmxpbmso
dGVtcE5hbWVDKTsKLQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNlID0gYWRvcHRS
ZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKLSAgICBpbnN0YW5jZS0+bV9kYXRhID0gZGF0YTsKLSAg
ICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIGluc3Rh
bmNlLT5tX3NpemUgPSBzaXplOwotICAgIHJldHVybiBpbnN0YW5jZS5yZWxlYXNlKCk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVNTWFwKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlv
biBwcm90ZWN0aW9uKQotewotICAgIHN3aXRjaCAocHJvdGVjdGlvbikgewotICAgIGNhc2UgU2hh
cmVkTWVtb3J5OjpSZWFkT25seToKLSAgICAgICAgcmV0dXJuIFBST1RfUkVBRDsKLSAgICBjYXNl
IFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgotICAgICAgICByZXR1cm4gUFJPVF9SRUFEIHwgUFJP
VF9XUklURTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
UFJPVF9SRUFEIHwgUFJPVF9XUklURTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3Rl
Y3Rpb24pCi17Ci0gICAgQVNTRVJUKCFoYW5kbGUuaXNOdWxsKCkpOwotCi0gICAgdm9pZCogZGF0
YSA9IG1tYXAoMCwgaGFuZGxlLm1fc2l6ZSwgYWNjZXNzTW9kZU1NYXAocHJvdGVjdGlvbiksIE1B
UF9TSEFSRUQsIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yLCAwKTsKLSAgICBpZiAoZGF0YSA9PSBN
QVBfRkFJTEVEKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKLSAgICBpbnN0YW5jZS0+
bV9kYXRhID0gZGF0YTsKLSAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGhhbmRsZS5t
X2ZpbGVEZXNjcmlwdG9yOwotICAgIGluc3RhbmNlLT5tX3NpemUgPSBoYW5kbGUubV9zaXplOwot
ICAgIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yID0gLTE7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwot
fQotCi1TaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQotewotICAgIG11bm1hcChtX2RhdGEs
IG1fc2l6ZSk7Ci0gICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVy
cm5vID09IEVJTlRSKSB7IH0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWNjZXNzTW9kZUZpbGUo
U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCi17Ci0gICAgc3dpdGNoIChwcm90
ZWN0aW9uKSB7Ci0gICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5OgotICAgICAgICByZXR1
cm4gT19SRE9OTFk7Ci0gICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKLSAgICAgICAg
cmV0dXJuIE9fUkRXUjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gT19SRFdSOwotfQotCi1ib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRs
ZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5k
bGUsICFoYW5kbGUubV9zaXplKTsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVs
bCgpKTsKLQotICAgIGludCBkdXBsaWNhdGVkSGFuZGxlOwotICAgIHdoaWxlICgoZHVwbGljYXRl
ZEhhbmRsZSA9IGR1cChtX2ZpbGVEZXNjcmlwdG9yKSkgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVy
cm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlICgoZmNu
dGwoZHVwbGljYXRlZEhhbmRsZSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyB8IGFjY2Vzc01vZGVGaWxl
KHByb3RlY3Rpb24pKSA9PSAtMSkpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHdoaWxlIChjbG9z
ZShkdXBsaWNhdGVkSGFuZGxlKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaGFuZGxlLm1fZmlsZURl
c2NyaXB0b3IgPSBkdXBsaWNhdGVkSGFuZGxlOwotICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFn
ZVNpemUoKQotewotICAgIHN0YXRpYyB1bnNpZ25lZCBwYWdlU2l6ZSA9IDA7Ci0KLSAgICBpZiAo
IXBhZ2VTaXplKQotICAgICAgICBwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0KLSAgICByZXR1
cm4gcGFnZVNpemU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJH
dGsuY3BwCmluZGV4IDA0ZDhhMDMuLmE5YmExYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAK
QEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQog
ICAgIHBpZF90IHBpZCA9IDA7CiAKICAgICBpbnQgc29ja2V0c1syXTsKLSAgICBpZiAoc29ja2V0
cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKSB7CisgICAgaWYgKHNv
Y2tldHBhaXIoQUZfVU5JWCwgU09DS19ER1JBTSwgMCwgc29ja2V0cykgPCAwKSB7CiAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZCB3aXRoIGVycm5vICVk
LlxuIiwgZXJybm8pOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnBybwppbmRleCBkM2IwODE0Li4xYzU4ODhhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpA
QCAtMjk3LDE1ICsyOTcsMTUgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9C
aW5hcnlTZW1hcGhvcmUuY3BwIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3Bw
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuY3BwIFwKLSAgICBQbGF0Zm9y
bS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAgXAotICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQv
Q29ubmVjdGlvblF0LmNwcCBcCisgICAgUGxhdGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50
UE9TSVguY3BwIFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3Bw
IFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBc
CiAgICAgUGxhdGZvcm0vUnVuTG9vcC5jcHAgXAogICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAg
XAorICAgIFBsYXRmb3JtL3Bvc2l4L1NoYXJlZE1lbW9yeVBPU0lYLmNwcCBcCiAgICAgUGxhdGZv
cm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKLSAg
ICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1dvcmtR
dWV1ZVF0LmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5N
b2R1bGUuY3BwIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVn
aW5Nb2R1bGVYMTEuY3BwIFwKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87745</attachid>
            <date>2011-03-31 09:15:12 -0700</date>
            <delta_ts>2011-04-06 05:43:36 -0700</delta_ts>
            <desc>Patch unregistering event source handler before setting the socket descriptor to -1</desc>
            <filename>0001-GTK-Implement-SharedMemory-for-WebKit2.patch</filename>
            <type>text/plain</type>
            <size>64553</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBhYTM2ZmI5MmUwOWI3ZDA4ODM0Njc0ZTQ0NmUyN2M3OTU2N2UwMzliIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDcgTWFyIDIwMTEgMTM6NDU6MTggLTA4MDAKU3ViamVjdDogW1BBVENIXSBb
R1RLXSBJbXBsZW1lbnQgU2hhcmVkTWVtb3J5IGZvciBXZWJLaXQyCiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKU2hhcmUgdGhlIFNoYXJlZE1lbW9yeSwgQXR0YWNobWVudCBhbmQgQ29ubmVjdGlvbiBpbXBs
ZW1lbnRhdGlvbnMgd2l0aCB0aGUgUXQgcG9ydC4KQm90aCBpbXBsZW1lbnRhdGlvbiBhcmUsIGlu
IGZhY3QsIGdlbmVyYWwgVW5peCBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgc3RhbmRhcmQgVW5peApk
b21haW4gc29ja2V0cyBhbmQgc2VuZG1zZyAvIHJlY3Ztc2cuIFRoaXMgc2hvdWxkIHJlZHVjZSB0
aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQgY29kZQpncmVhdGx5IGFuZCBsYXkgdGhlIGdyb3VuZHdv
cmsgZm9yIEdUSysvUXQgaW1wbGVtZW50YXRpb25zIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVt
cy4KCiogR05VbWFrZWZpbGUuYW06IFJlcGxhY2VkIEdUSysgdmVyc2lvbnMgb2YgZmlsZXMgd2l0
aCB0aGUgVW5peCBvbmVzLgoqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDog
RXh0ZW5kZWQgUXQgI2lmZGVmcyB0byBpbmNsdWRlIEdUSy4KKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2Rlcjo6fkFyZ3VtZW50RGVjb2Rlcik6CiogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29k
ZXIuY3BwOiBEaXR0by4KKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcjo6fkFyZ3VtZW50RW5jb2Rl
cik6CiogUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50Lmg6IERpdHRvLgoqIFBsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oOiBDb21iaW5lZCB0aGUgR1RLKyBhbmQgUXQgc2VjdGlvbnMuCiog
UGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVudFF0LmNwcC4KKiBQbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwLgoqIFBsYXRmb3Jt
L3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAuCiogVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Q
cm9jZXNzTGF1bmNoZXJHdGsuY3BwOgooV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MpOiBVc2UgU09DS19ER1JBTSBpbnN0ZWFkIG9mIFNPQ0tfU1RSRUFNIHRvIG1hdGNoIFF0
LgoqIFdlYktpdDIucHJvOiBVcGRhdGVkIHNvdXJjZSBsaXN0IHRvIHJlZmxlY3QgZmlsZSByZW5h
bWluZy4KLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMjYgKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgNSArLQogLi4uL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwICAgfCAgICAyICstCiAuLi4vV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50RW5jb2Rlci5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQXR0YWNobWVudC5oICAgICAgIHwgICAgOCArLQogU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Db25uZWN0aW9uLmggICAgICAgfCAgIDE0ICstCiAuLi4vV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcCB8ICAyMDcgLS0tLS0tLS0tLQogLi4u
L1BsYXRmb3JtL0NvcmVJUEMvcG9zaXgvQXR0YWNobWVudFBPU0lYLmNwcCAgICAgfCAgIDUwICsr
KwogLi4uL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9BdHRhY2htZW50UXQuY3BwICAgfCAg
IDUzIC0tLQogLi4uL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3Bw
ICAgfCAgMzY5IC0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9D
b25uZWN0aW9uVW5peC5jcHAgICAgICAgfCAgNDAxICsrKysrKysrKysrKysrKysrKysrCiBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCAgICAgICAgICAgICB8ICAgIDggKy0K
IC4uLi9XZWJLaXQyL1BsYXRmb3JtL3Bvc2l4L1NoYXJlZE1lbW9yeVBPU0lYLmNwcCAgIHwgIDIz
OCArKysrKysrKysrKysKIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0
LmNwcCAgICAgIHwgIDIyOCAtLS0tLS0tLS0tLQogLi4uL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsv
UHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIDE2IGZpbGVzIGNoYW5nZWQs
IDczNiBpbnNlcnRpb25zKCspLCA4ODMgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3Bvc2l4L0F0
dGFjaG1lbnRQT1NJWC5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcG9z
aXgvU2hhcmVkTWVtb3J5UE9TSVguY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDdjN2JjNGQu
Ljc5ZjMzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0wMy0xMSAgIEFtcnV0
aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFNoYXJlZE1lbW9yeSBmb3IgV2ViS2l0MgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk3OTEKKworICAg
ICAgICBTaGFyZSB0aGUgU2hhcmVkTWVtb3J5LCBBdHRhY2htZW50IGFuZCBDb25uZWN0aW9uIGlt
cGxlbWVudGF0aW9ucyB3aXRoIHRoZSBRdCBwb3J0LgorICAgICAgICBCb3RoIGltcGxlbWVudGF0
aW9uIGFyZSwgaW4gZmFjdCwgZ2VuZXJhbCBVbml4IGltcGxlbWVudGF0aW9ucyB1c2luZyBzdGFu
ZGFyZCBVbml4CisgICAgICAgIGRvbWFpbiBzb2NrZXRzIGFuZCBzZW5kbXNnIC8gcmVjdm1zZy4g
VGhpcyBzaG91bGQgcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBjb2RlCisgICAgICAg
IGdyZWF0bHkgYW5kIGxheSB0aGUgZ3JvdW5kd29yayBmb3IgR1RLKy9RdCBpbXBsZW1lbnRhdGlv
bnMgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IFJlcGxhY2VkIEdUSysgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCB0aGUgVW5peCBvbmVzLgor
ICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDogRXh0ZW5kZWQg
UXQgI2lmZGVmcyB0byBpbmNsdWRlIEdUSy4KKyAgICAgICAgKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2Rlcjo6fkFyZ3VtZW50RGVjb2Rlcik6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudEVuY29kZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
cjo6fkFyZ3VtZW50RW5jb2Rlcik6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2ht
ZW50Lmg6IERpdHRvLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBD
b21iaW5lZCB0aGUgR1RLKyBhbmQgUXQgc2VjdGlvbnMuCisgICAgICAgICogUGxhdGZvcm0vQ29y
ZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVudFF0LmNwcC4KKyAgICAgICAgKiBQbGF0Zm9y
bS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwLgorICAgICAgICAqIFBs
YXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAuCisgICAgICAgICogVUlQcm9jZXNz
L0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
cm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOiBVc2UgU09DS19ER1JBTSBpbnN0ZWFkIG9m
IFNPQ0tfU1RSRUFNIHRvIG1hdGNoIFF0LgorICAgICAgICAqIFdlYktpdDIucHJvOiBVcGRhdGVk
IHNvdXJjZSBsaXN0IHRvIHJlZmxlY3QgZmlsZSByZW5hbWluZy4KKwogMjAxMS0wMy0zMCAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGI0OGMyNDkuLmI0ODk1MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCkBAIC05MywxMyArOTMsMTMgQEAgbGliV2ViS2l0Ml9sYV9TT1VS
Q0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29yZUlQQ01lc3NhZ2VL
aW5kcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2Uu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuaCBc
Ci0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvSGFuZGxlTWVzc2FnZS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCisJU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCisJU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50UE9TSVguY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
U2hhcmVkTWVtb3J5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtR
dWV1ZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmggXApAQCAtMTA5LDYgKzEwOSw3IEBAIGxp
YldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29w
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCisJU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
cG9zaXgvU2hhcmVkTWVtb3J5UE9TSVguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9X
b3JrSXRlbS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKaW5kZXggNDRmOWE5Zi4u
YjgwYTliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudERlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnREZWNvZGVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBBcmd1bWVudERlY29kZXI6On5Bcmd1
bWVudERlY29kZXIoKQogewogICAgIEFTU0VSVChtX2J1ZmZlcik7CiAgICAgZmFzdEZyZWUobV9i
dWZmZXIpOwotI2lmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9S
TShHVEspCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgbWFjaCBwb3J0
cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBEZXF1ZTxBdHRhY2htZW50Pjo6aXRl
cmF0b3IgZW5kID0gbV9hdHRhY2htZW50cy5lbmQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAppbmRleCBmYjBiNjhiLi5kMjBk
YzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50
RW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dEVuY29kZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEFyZ3VtZW50RW5jb2Rlcjo6fkFyZ3VtZW50
RW5jb2RlcigpCiB7CiAgICAgaWYgKG1fYnVmZmVyKQogICAgICAgICBmYXN0RnJlZShtX2J1ZmZl
cik7Ci0jaWYgIVBMQVRGT1JNKFFUKQorI2lmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdU
SykKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNwb3NlIG9mIHRoZSBhdHRhY2htZW50cyBp
biBjYXNlcyBvZiBmYWlsdXJlLgogI2Vsc2UKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYXR0
YWNobWVudHMuc2l6ZSgpOyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0F0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
QXR0YWNobWVudC5oCmluZGV4IGMwNTc3MTQuLjAyZWQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIE1hY2hQb3J0VHlwZSwKICAgICAgICAgTWFjaE9P
TE1lbW9yeVR5cGUKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKICAgICAgICAgTWFwcGVkTWVtb3J5CiAjZW5kaWYKICAgICB9OwpAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIEF0dGFjaG1lbnQobWFj
aF9wb3J0X25hbWVfdCBwb3J0LCBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbik7CiAg
ICAgQXR0YWNobWVudCh2b2lkKiBhZGRyZXNzLCBtYWNoX21zZ19zaXplX3Qgc2l6ZSwgbWFjaF9t
c2dfY29weV9vcHRpb25zX3QgY29weU9wdGlvbnMsIGJvb2wgZGVhbGxvY2F0ZSk7Ci0jZWxpZiBQ
TEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgQXR0
YWNobWVudChpbnQgZmlsZURlc2NyaXB0b3IsIHNpemVfdCk7CiAjZW5kaWYKIApAQCAtNjYsNyAr
NjYsNyBAQCBwdWJsaWM6CiAgICAgbWFjaF9tc2dfc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VS
VChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuc2l6ZTsg
fQogICAgIG1hY2hfbXNnX2NvcHlfb3B0aW9uc190IGNvcHlPcHRpb25zKCkgY29uc3QgeyBBU1NF
UlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmNvcHlP
cHRpb25zOyB9CiAgICAgYm9vbCBkZWFsbG9jYXRlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09
IE1hY2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmRlYWxsb2NhdGU7IH0KLSNl
bGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgaW50IHJlbGVh
c2VGaWxlRGVzY3JpcHRvcigpIHsgaW50IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOyBtX2ZpbGVE
ZXNjcmlwdG9yID0gLTE7IHJldHVybiB0ZW1wOyB9CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBib29sIGRlYWxsb2NhdGU7CiAgICAgICAgIH0gbV9vb2xNZW1vcnk7CiAg
ICAgfTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKICAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICAgICBzaXplX3QgbV9zaXplOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4
IGI2YTI0MTUuLjgzYTI4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
Q29ubmVjdGlvbi5oCkBAIC0zMDUsMjMgKzMwNSwxNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxB
cmd1bWVudEVuY29kZXI+IG1fcGVuZGluZ1dyaXRlQXJndW1lbnRzOwogICAgIE9WRVJMQVBQRUQg
bV93cml0ZVN0YXRlOwogICAgIEhBTkRMRSBtX2Nvbm5lY3Rpb25QaXBlOwotI2VsaWYgUExBVEZP
Uk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIC8vIENhbGxl
ZCBvbiB0aGUgY29ubmVjdGlvbiBxdWV1ZS4KICAgICB2b2lkIHJlYWR5UmVhZEhhbmRsZXIoKTsK
IAogICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlYWRCdWZmZXI7CiAgICAgc2l6ZV90IG1fY3VycmVu
dE1lc3NhZ2VTaXplOwotICAgIFFTb2NrZXROb3RpZmllciogbV9zb2NrZXROb3RpZmllcjsKICAg
ICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQg
cmVhZEV2ZW50SGFuZGxlcigpOwotICAgIHZvaWQgcHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsK
LSAgICBib29sIG1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgeyByZXR1cm4gIW1fY3VycmVu
dE1lc3NhZ2VTaXplOyB9CiAKLSAgICBpbnQgbV9zb2NrZXQ7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fcmVhZEJ1ZmZlcjsKLSAgICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7Ci0gICAgc2l6
ZV90IG1fcGVuZGluZ0J5dGVzOworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFTb2NrZXROb3RpZmll
ciogbV9zb2NrZXROb3RpZmllcjsKKyNlbmRpZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjE0MGVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotCi0jaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAiV29ya0l0ZW0uaCIKLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzeXMvZmNudGwuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIENvcmVJUEMgewotCi1zdGF0aWMgY29uc3Qgc2l6
ZV90IGluaXRpYWxNZXNzYWdlQnVmZmVyU2l6ZSA9IDQwOTY7Ci0KLXN0YXRpYyBpbnQgcmVhZEJ5
dGVzRnJvbVNvY2tldChpbnQgZmlsZURlc2NyaXB0b3IsIHVpbnQ4X3QqIHB0ciwgc2l6ZV90IGxl
bmd0aCkKLXsKLSAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IgPiAwKTsKLSAgICBBU1NFUlQocHRy
KTsKLSAgICBBU1NFUlQobGVuZ3RoID4gMCk7Ci0KLSAgICBzc2l6ZV90IG51bWJlck9mQnl0ZXNS
ZWFkID0gMDsKLSAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gbGVuZ3RoOwotICAgIHVp
bnQ4X3QqIGJ1ZmZlciA9IHB0cjsKLQotICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1JlYWQgPiAw
KSB7Ci0gICAgICAgIGlmICgobnVtYmVyT2ZCeXRlc1JlYWQgPSByZWFkKGZpbGVEZXNjcmlwdG9y
LCBidWZmZXIsIHBlbmRpbmdCeXRlc1RvUmVhZCkpIDwgMCkgewotICAgICAgICAgICAgaWYgKGVy
cm5vID09IEVJTlRSKQotICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNSZWFkID0gMDsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9D
SykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsgCi0gICAgICAgIH0gZWxzZSBpZiAoIW51bWJlck9mQnl0ZXNSZWFkKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYnVmZmVyICs9IG51bWJlck9mQnl0ZXNSZWFk
OwotICAgICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgLT0gbnVtYmVyT2ZCeXRlc1JlYWQ7Ci0gICAg
fQotCi0gICAgcmV0dXJuIChsZW5ndGggLSBwZW5kaW5nQnl0ZXNUb1JlYWQpOwotfQotCi1zdGF0
aWMgYm9vbCB3cml0ZUJ5dGVzVG9Tb2NrZXQoaW50IGZpbGVEZXNjcmlwdG9yLCB1aW50OF90KiBw
dHIsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGZpbGVEZXNjcmlwdG9yID4gMCk7Ci0g
ICAgQVNTRVJUKHB0cik7Ci0gICAgQVNTRVJUKGxlbmd0aCA+IDApOwotCi0gICAgc3NpemVfdCBu
dW1iZXJPZkJ5dGVzV3JpdHRlbiA9IDA7Ci0gICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvV3JpdGUg
PSBsZW5ndGg7Ci0gICAgdWludDhfdCogYnVmZmVyID0gcHRyOwotCi0gICAgLy8gS2VlcCB3cml0
aW5nIHRvIHRoZSBzb2NrZXQgdGlsbCB0aGUgY29tcGxldGUgbWVzc2FnZSBoYXMgYmVlbiB3cml0
dGVuLgotICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1dyaXRlID4gMCkgewotICAgICAgICBpZiAo
KG51bWJlck9mQnl0ZXNXcml0dGVuID0gd3JpdGUoZmlsZURlc2NyaXB0b3IsIGJ1ZmZlciwgcGVu
ZGluZ0J5dGVzVG9Xcml0ZSkpIDwgMCkgewotICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRS
KQotICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNXcml0dGVuID0gMDsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnVmZmVyICs9IG51bWJlck9mQnl0ZXNXcml0dGVuOwotICAgICAgICBwZW5kaW5nQnl0ZXNUb1dy
aXRlIC09IG51bWJlck9mQnl0ZXNXcml0dGVuOwotICAgIH0KLQotICAgIC8vIFdyaXRlIG9wZXJh
dGlvbiBmYWlsZWQgaWYgY29tcGxldGUgbWVzc2FnZSBpcyBub3Qgd3JpdHRlbi4KLSAgICByZXR1
cm4gIXBlbmRpbmdCeXRlc1RvV3JpdGU7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1J
bml0aWFsaXplKElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBtX2N1cnJlbnRNZXNzYWdl
U2l6ZSA9IDA7Ci0gICAgbV9wZW5kaW5nQnl0ZXMgPSAwOwotICAgIG1fcmVhZEJ1ZmZlci5yZXNp
emUoaW5pdGlhbE1lc3NhZ2VCdWZmZXJTaXplKTsKLSAgICBtX3NvY2tldCA9IGlkZW50aWZpZXI7
Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAo
IW1faXNDb25uZWN0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29ubmVjdGlvblF1ZXVl
LnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQpOwotICAgIGlmIChtX3NvY2tl
dCA+IDApIHsKLSAgICAgICAgY2xvc2UobV9zb2NrZXQpOwotICAgICAgICBtX3NvY2tldCA9IC0x
OwotICAgIH0KLQotICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBDb25uZWN0
aW9uOjpwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpCi17Ci0gICAgc2l6ZV90IHJlYWxCdWZmZXJT
aXplID0gbV9jdXJyZW50TWVzc2FnZVNpemUgLSBzaXplb2YoTWVzc2FnZUlEKTsKLSAgICB1bnNp
Z25lZCBtZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fcmVhZEJ1ZmZl
ci5kYXRhKCkgKyByZWFsQnVmZmVyU2l6ZSk7Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdl
KE1lc3NhZ2VJRDo6ZnJvbUludChtZXNzYWdlSUQpLCBhZG9wdFB0cihuZXcgQXJndW1lbnREZWNv
ZGVyKG1fcmVhZEJ1ZmZlci5kYXRhKCksIHJlYWxCdWZmZXJTaXplKSkpOwotCi0gICAgLy8gUHJl
cGFyZSBmb3IgdGhlIG5leHQgbWVzc2FnZS4KLSAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7
Ci0gICAgbV9wZW5kaW5nQnl0ZXMgPSAwOwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlYWRFdmVu
dEhhbmRsZXIoKQotewotICAgIGlmIChtX3NvY2tldCA8IDApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEhhbmRsZSBhbnkgcHJldmlvdXNseSB1bnByb2Nlc3NlZCBtZXNzYWdlLgotICAgIGlm
ICghbWVzc2FnZVByb2Nlc3NpbmdDb21wbGV0ZWQoKSkgewotICAgICAgICBpZiAoKG1fcGVuZGlu
Z0J5dGVzIC09IHJlYWRCeXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIChtX3JlYWRCdWZmZXIuZGF0
YSgpICsgKG1fY3VycmVudE1lc3NhZ2VTaXplIC0gbV9wZW5kaW5nQnl0ZXMpKSwgbV9wZW5kaW5n
Qnl0ZXMpKSA+IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTWVzc2FnZSBy
ZWNlaXZlZCBjb21wbGV0ZWx5LiBQcm9jZXNzIHRoZSBtZXNzYWdlIG5vdy4KLSAgICAgICAgcHJv
Y2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVwYXJlIHRvIHJlYWQg
dGhlIG5leHQgbWVzc2FnZS4KLSAgICB1aW50OF90IHNpemVCdWZmZXJbc2l6ZW9mKHNpemVfdCld
OwotICAgIG1lbXNldChzaXplQnVmZmVyLCAwLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgCi0gICAg
d2hpbGUgKG1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkpIHsKLSAgICAgICAgaWYgKHJlYWRC
eXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIHNpemVCdWZmZXIsIHNpemVvZihzaXplX3QpKSkKLSAg
ICAgICAgICAgIG1fY3VycmVudE1lc3NhZ2VTaXplID0gKnJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90
Kj4oc2l6ZUJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKCFtX2N1cnJlbnRNZXNzYWdlU2l6ZSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChtX3JlYWRCdWZmZXIuc2l6ZSgpIDwgbV9j
dXJyZW50TWVzc2FnZVNpemUpCi0gICAgICAgICAgICBtX3JlYWRCdWZmZXIuZ3JvdyhtX2N1cnJl
bnRNZXNzYWdlU2l6ZSk7Ci0KLSAgICAgICAgbV9wZW5kaW5nQnl0ZXMgPSBtX2N1cnJlbnRNZXNz
YWdlU2l6ZSAtIHJlYWRCeXRlc0Zyb21Tb2NrZXQobV9zb2NrZXQsIG1fcmVhZEJ1ZmZlci5kYXRh
KCksIG1fY3VycmVudE1lc3NhZ2VTaXplKTsKLSAgICAgICAgaWYgKG1fcGVuZGluZ0J5dGVzID4g
MCkgLy8gTWVzc2FnZSBwYXJ0aWFsbHkgcmVjZWl2ZWQuCi0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAvLyBNZXNzYWdlIHJlY2VpdmVkIGNvbXBsZXRlbHkuIFByb2Nlc3MgdGhlIG1lc3Nh
Z2Ugbm93LgotICAgICAgICBwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpOwotCi0gICAgICAgIG1l
bXNldChzaXplQnVmZmVyLCAwLCBzaXplb2Yoc2l6ZV90KSk7Ci0gICAgfQotfQotCi1ib29sIENv
bm5lY3Rpb246Om9wZW4oKQotewotICAgIGludCBmbGFncyA9IGZjbnRsKG1fc29ja2V0LCBGX0dF
VEZMLCAwKTsKLSAgICBmY250bChtX3NvY2tldCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NL
KTsKLQotICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwotCi0gICAgLy8gUmVnaXN0ZXIgY2FsbGJh
Y2tzIGZvciBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIGFuZCBpbnB1dCBkYXRhIG9uIHRoZSBXb3Jr
UXVldWUuCi0gICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIo
bV9zb2NrZXQsIChHX0lPX0hVUCB8IEdfSU9fRVJSKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAm
Q29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Ci0gICAgbV9jb25uZWN0aW9uUXVldWUu
cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQsIEdfSU9fSU4sIFdvcmtJdGVtOjpj
cmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3Nh
Z2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fc29ja2V0ID4gMCk7Ci19Ci0KLWJvb2wgQ29u
bmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3du
UHRyPEFyZ3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQotewotICAgIGlmIChtX3NvY2tldCA8IDAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHB1dCB0aGUgbWVzc2FnZSBJRCBs
YXN0LgotICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsKLQot
ICAgIHNpemVfdCBidWZmZXJTaXplID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7Ci0KLSAgICAv
LyBTZW5kIHRoZSBtZXNzYWdlIHNpemUgZmlyc3QuCi0gICAgaWYgKCF3cml0ZUJ5dGVzVG9Tb2Nr
ZXQobV9zb2NrZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZidWZmZXJTaXplKSwgc2l6
ZW9mKHNpemVfdCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXdyaXRlQnl0
ZXNUb1NvY2tldChtX3NvY2tldCwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZm
ZXJTaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50UE9TSVguY3BwIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50UE9TSVguY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODQyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3Bvc2l4L0F0dGFjaG1lbnRQT1NJWC5jcHAKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBdHRhY2htZW50LmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CisKK0F0dGFjaG1lbnQ6OkF0dGFjaG1l
bnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fdHlwZShNYXBwZWRN
ZW1vcnkpCisgICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZpbGVEZXNjcmlwdG9yKQorICAgICwgbV9z
aXplKHNpemUpCit7CisgICAgQVNTRVJUKG1fZmlsZURlc2NyaXB0b3IpOworICAgIEFTU0VSVCht
X3NpemUpOworfQorCit2b2lkIEF0dGFjaG1lbnQ6OmRpc3Bvc2UoKQoreworICAgIGlmIChtX2Zp
bGVEZXNjcmlwdG9yICE9IC0xKQorICAgICAgICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRv
cikgPT0gLTEgJiYgKGVycm5vID09IEVJTlRSKSkgeyB9Cit9CisKK30gLy8gbmFtZXNwYWNlIENv
cmVJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0
YWNobWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNo
bWVudFF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwZWJjMC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLQotI2lmIFBM
QVRGT1JNKFFUKQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5k
aWYKLQotCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci0KLUF0dGFjaG1lbnQ6OkF0dGFjaG1lbnQoaW50
IGZpbGVEZXNjcmlwdG9yLCBzaXplX3Qgc2l6ZSkKLSAgICA6IG1fdHlwZShNYXBwZWRNZW1vcnkp
Ci0gICAgLCBtX2ZpbGVEZXNjcmlwdG9yKGZpbGVEZXNjcmlwdG9yKQotICAgICwgbV9zaXplKHNp
emUpCi17Ci0gICAgQVNTRVJUKG1fZmlsZURlc2NyaXB0b3IpOwotICAgIEFTU0VSVChtX3NpemUp
OwotfQotCi12b2lkIEF0dGFjaG1lbnQ6OmRpc3Bvc2UoKQotewotICAgIGlmIChtX2ZpbGVEZXNj
cmlwdG9yICE9IC0xKQotICAgICAgICB3aGlsZSAoY2xvc2UobV9maWxlRGVzY3JpcHRvcikgPT0g
LTEgJiYgKGVycm5vID09IEVJTlRSKSkgeyB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIENvcmVJUEMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlv
blF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI1ZDdkYy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0KLSNpbmNsdWRlICJB
cmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKLSNpbmNsdWRl
ICJXb3JrSXRlbS5oIgotI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRU29ja2V0
Tm90aWZpZXI+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgQ29yZUlQQyB7
Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Owotc3RhdGljIGNv
bnN0IHNpemVfdCBhdHRhY2htZW50TWF4QW1vdW50ID0gMjU1OwotCi1lbnVtIHsKLSAgICBNZXNz
YWdlQm9keUlzT09MID0gMSA8PCAzMQotfTsKLQotY2xhc3MgTWVzc2FnZUluZm8gewotcHVibGlj
OgotICAgIE1lc3NhZ2VJbmZvKCkgeyB9Ci0KLSAgICBNZXNzYWdlSW5mbyhNZXNzYWdlSUQgbWVz
c2FnZUlELCBzaXplX3QgYm9keVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVudENvdW50KQot
ICAgICAgICA6IG1fbWVzc2FnZUlEKG1lc3NhZ2VJRC50b0ludCgpKQotICAgICAgICAsIG1fYm9k
eVNpemUoYm9keVNpemUpCi0gICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5pdGlhbEF0dGFj
aG1lbnRDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKG1fbWVzc2FnZUlEICYgTWVzc2Fn
ZUJvZHlJc09PTCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlPT0woKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKCFpc01lc3NhZ2VCb2R5T09MKCkpOwotCi0gICAgICAgIG1fbWVz
c2FnZUlEIHw9IE1lc3NhZ2VCb2R5SXNPT0w7Ci0gICAgICAgIG1fYXR0YWNobWVudENvdW50Kys7
Ci0gICAgfQotCi0gICAgYm9vbCBpc01lc3NhZ2VCb2R5T09MKCkgY29uc3QgeyByZXR1cm4gbV9t
ZXNzYWdlSUQgJiBNZXNzYWdlQm9keUlzT09MOyB9Ci0KLSAgICBzaXplX3QgYm9keVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2JvZHlTaXplOyB9Ci0KLSAgICBNZXNzYWdlSUQgbWVzc2FnZUlEKCkg
Y29uc3QgeyByZXR1cm4gTWVzc2FnZUlEOjpmcm9tSW50KG1fbWVzc2FnZUlEICYgfk1lc3NhZ2VC
b2R5SXNPT0wpOyB9Ci0KLSAgICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9hdHRhY2htZW50Q291bnQ7IH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX21lc3Nh
Z2VJRDsKLSAgICBzaXplX3QgbV9ib2R5U2l6ZTsKLSAgICBzaXplX3QgbV9hdHRhY2htZW50Q291
bnQ7Ci19OwotCi12b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVy
IGlkZW50aWZpZXIpCi17Ci0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRpZmllcjsKLSAg
ICBtX3NvY2tldE5vdGlmaWVyID0gMDsKLSAgICBtX3JlYWRCdWZmZXIucmVzaXplKG1lc3NhZ2VN
YXhTaXplKTsKLSAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7Ci19Ci0KLXZvaWQgQ29ubmVj
dGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9y
ICE9IC0xKQotICAgICAgICB3aGlsZSAoY2xvc2UobV9zb2NrZXREZXNjcmlwdG9yKSA9PSAtMSAm
JiBlcnJubyA9PSBFSU5UUikgeyB9Ci0KLSAgICBpZiAoIW1faXNDb25uZWN0ZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGRlbGV0ZSBtX3NvY2tldE5vdGlmaWVyOwotICAgIG1fc29ja2V0Tm90
aWZpZXIgPSAwOwotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IC0xOwotICAgIG1faXNDb25uZWN0
ZWQgPSBmYWxzZTsKLX0KLQotY2xhc3MgU29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkIHsKLXB1
YmxpYzoKLSAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQoUVNvY2tldE5vdGlmaWVyKiBz
b2NrZXROb3RpZmllcikKLSAgICAgICAgOiBtX3NvY2tldE5vdGlmaWVyKHNvY2tldE5vdGlmaWVy
KQotICAgIHsKLSAgICAgICAgbV9zb2NrZXROb3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7Ci0g
ICAgfQotCi0gICAgflNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCgpCi0gICAgewotICAgICAg
ICBtX3NvY2tldE5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBRU29ja2V0Tm90aWZpZXIqIGNvbnN0IG1fc29ja2V0Tm90aWZpZXI7Ci19OwotCi10ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBpdGVyYXRvcj4KLWNsYXNzIEF0dGFjaG1lbnRSZXNvdXJjZUd1
YXJkIHsKLXB1YmxpYzoKLSAgICBBdHRhY2htZW50UmVzb3VyY2VHdWFyZChUJiBhdHRhY2htZW50
cykKLSAgICAgICAgOiBtX2F0dGFjaG1lbnRzKGF0dGFjaG1lbnRzKQotICAgIHsKLSAgICB9Ci0g
ICAgfkF0dGFjaG1lbnRSZXNvdXJjZUd1YXJkKCkKLSAgICB7Ci0gICAgICAgIGl0ZXJhdG9yIGVu
ZCA9IG1fYXR0YWNobWVudHMuZW5kKCk7Ci0gICAgICAgIGZvciAoaXRlcmF0b3IgaSA9IG1fYXR0
YWNobWVudHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgICAgIGktPmRpc3Bvc2Uo
KTsKLSAgICB9Ci1wcml2YXRlOgotICAgIFQmIG1fYXR0YWNobWVudHM7Ci19OwotCi12b2lkIENv
bm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKQotewotICAgIERlcXVlPEF0dGFjaG1lbnQ+IGF0
dGFjaG1lbnRzOwotICAgIFNvY2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZCBzb2NrZXROb3RpZmll
ckVuYWJsZXIobV9zb2NrZXROb3RpZmllcik7Ci0gICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQ8
RGVxdWU8QXR0YWNobWVudD4sIERlcXVlPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4gYXR0YWNoZW1l
bnREaXNwb3NlcihhdHRhY2htZW50cyk7Ci0KLSAgICBjaGFyIGF0dGFjaG1lbnREZXNjcmlwdG9y
QnVmZmVyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0YWNobWVudE1heEFtb3VudCkpXTsK
LSAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7Ci0gICAgbWVtc2V0KCZtZXNzYWdlLCAwLCBzaXpl
b2YobWVzc2FnZSkpOwotCi0gICAgc3RydWN0IGlvdmVjIGlvdlsxXTsKLSAgICBtZW1zZXQoJmlv
diwgMCwgc2l6ZW9mKGlvdikpOwotCi0gICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1l
bnREZXNjcmlwdG9yQnVmZmVyOwotICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBDTVNHX1NQ
QUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRNYXhBbW91bnQpKTsKLQotICAgIGlvdlswXS5p
b3ZfYmFzZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7Ci0gICAgaW92WzBdLmlvdl9sZW4gPSBtX3Jl
YWRCdWZmZXIuc2l6ZSgpOwotCi0gICAgbWVzc2FnZS5tc2dfaW92ID0gaW92OwotICAgIG1lc3Nh
Z2UubXNnX2lvdmxlbiA9IDE7Ci0KLQotICAgIGludCBtZXNzYWdlTGVuZ3RoID0gMDsKLSAgICB3
aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29ja2V0RGVzY3JpcHRvciwgJm1lc3Nh
Z2UsIDApKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RydWN0IGNtc2doZHIqIGNvbnRyb2xNZXNzYWdlID0g
Q01TR19GSVJTVEhEUigmbWVzc2FnZSk7Ci0KLSAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsK
LSAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7Ci0K
LSAgICBtZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKG1lc3NhZ2VJbmZv
KSk7Ci0gICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6ZW9mKG1lc3NhZ2VJbmZvKSArIG1l
c3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKHNpemVfdCkgKyAobWVzc2FnZUlu
Zm8uaXNNZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkpKTsKLQot
ICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5mbyk7Ci0KLSAgICBSZWZQdHI8V2Vi
S2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5OwotCi0gICAgaWYgKG1lc3NhZ2VJbmZv
LmF0dGFjaG1lbnRDb3VudCgpKSB7Ci0gICAgICAgIGlmIChjb250cm9sTWVzc2FnZSAmJiBjb250
cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VUICYmIGNvbnRyb2xNZXNzYWdlLT5j
bXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgewotICAgICAgICAgICAgc2l6ZV90IGF0dGFjaG1lbnRT
aXplc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07Ci0gICAgICAgICAgICBtZW1jcHko
YXR0YWNobWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9mKGF0dGFjaG1lbnRTaXplcykpOwot
Ci0gICAgICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YoYXR0YWNobWVudFNpemVzKTsKLQot
ICAgICAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291
bnQoKV07Ci0gICAgICAgICAgICBtZW1jcHkoZmlsZURlc2NyaXB0b3JzLCBDTVNHX0RBVEEoY29u
dHJvbE1lc3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3JzKSk7Ci0KLSAgICAgICAgICAgIGlu
dCBhdHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKTsKLQotICAg
ICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkKLSAgICAgICAgICAg
ICAgICBhdHRhY2htZW50Q291bnQtLTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhdHRhY2htZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIHdoaWxlIChmY250bChm
aWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkwsIEZEX0NMT0VYRUMpID09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyArK2kp
Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKEF0dGFjaG1lbnQoZmlsZURlc2Ny
aXB0b3JzW2ldLCBhdHRhY2htZW50U2l6ZXNbaV0pKTsKLQotICAgICAgICAgICAgaWYgKG1lc3Nh
Z2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtZXNz
YWdlSW5mby5ib2R5U2l6ZSgpKTsKLQotICAgICAgICAgICAgICAgIFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICAgICAgICAgIGhhbmRsZS5hZG9wdEZyb21BdHRh
Y2htZW50KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291bnRdLCBhdHRhY2htZW50U2l6ZXNb
YXR0YWNobWVudENvdW50XSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkg
ewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG9v
bE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvb2xNZXNz
YWdlQm9keSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBDTVNHX05YVEhEUigmbWVzc2FnZSwg
Y29udHJvbE1lc3NhZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBBU1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlP
T0woKSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpIC0gMSA6IG1lc3NhZ2VJbmZvLmF0
dGFjaG1lbnRDb3VudCgpKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VCb2R5ID0gbWVz
c2FnZURhdGE7Ci0KLSAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpKQotICAg
ICAgICBtZXNzYWdlQm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG9vbE1l
c3NhZ2VCb2R5LT5kYXRhKCkpOwotCi0gICAgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudERlY29k
ZXI7Ci0gICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgYXJndW1lbnREZWNv
ZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9keSwgbWVzc2FnZUluZm8uYm9keVNp
emUoKSk7Ci0gICAgZWxzZQotICAgICAgICBhcmd1bWVudERlY29kZXIgPSBuZXcgQXJndW1lbnRE
ZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpLCBhdHRhY2htZW50cyk7
Ci0KLSAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJbmZvLm1lc3NhZ2VJRCgpLCBh
ZG9wdFB0cihhcmd1bWVudERlY29kZXIpKTsKLQotICAgIEFTU0VSVCghY29udHJvbE1lc3NhZ2Up
OwotfQotCi1ib29sIENvbm5lY3Rpb246Om9wZW4oKQotewotICAgIEFTU0VSVCghbV9zb2NrZXRO
b3RpZmllcik7Ci0gICAgaW50IGZsYWdzID0gZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX0dF
VEZMLCAwKTsKLSAgICB3aGlsZSAoZmNudGwobV9zb2NrZXREZXNjcmlwdG9yLCBGX1NFVEZMLCBm
bGFncyB8IE9fTk9OQkxPQ0spID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikg
ewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKLSAg
ICBtX3NvY2tldE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJTb2NrZXRFdmVu
dEhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlJlYWQsIFdvcmtJ
dGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsKLQotICAg
IC8vIFNjaGVkdWxlIGEgY2FsbCB0byByZWFkeVJlYWRIYW5kbGVyLiBEYXRhIG1heSBoYXZlIGFy
cml2ZWQgYmVmb3JlIGluc3RhbGxhdGlvbiBvZiB0aGUgc2lnbmFsCi0gICAgLy8gaGFuZGxlci4K
LSAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlz
LCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc29ja2V0Tm90aWZpZXI7Ci19Ci0KLWJvb2wgQ29ubmVjdGlv
bjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFy
Z3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQotewotICAgIEFTU0VSVChtX3NvY2tldE5vdGlmaWVy
KTsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTWVzc2FnZUluZm8pICsgYXR0YWNobWVudE1h
eEFtb3VudCAqIHNpemVvZihzaXplX3QpIDw9IG1lc3NhZ2VNYXhTaXplLCBBdHRhY2htZW50c0Zp
dFRvTWVzc2FnZUlubGluZSk7Ci0KLSAgICBWZWN0b3I8QXR0YWNobWVudD4gYXR0YWNobWVudHMg
PSBhcmd1bWVudHMtPnJlbGVhc2VBdHRhY2htZW50cygpOwotICAgIEF0dGFjaG1lbnRSZXNvdXJj
ZUd1YXJkPFZlY3RvcjxBdHRhY2htZW50PiwgVmVjdG9yPEF0dGFjaG1lbnQ+OjppdGVyYXRvcj4g
YXR0YWNoZW1lbnREaXNwb3NlcihhdHRhY2htZW50cyk7Ci0KLSAgICBpZiAoYXR0YWNobWVudHMu
c2l6ZSgpID4gKGF0dGFjaG1lbnRNYXhBbW91bnQgLSAxKSkgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIE1lc3NhZ2VJ
bmZvIG1lc3NhZ2VJbmZvKG1lc3NhZ2VJRCwgYXJndW1lbnRzLT5idWZmZXJTaXplKCksIGF0dGFj
aG1lbnRzLnNpemUoKSk7Ci0gICAgc2l6ZV90IG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxpbmUgPSBz
aXplb2YobWVzc2FnZUluZm8pICsgKGF0dGFjaG1lbnRzLnNpemUoKSAqIHNpemVvZihzaXplX3Qp
KSArIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpOwotICAgIGlmIChtZXNzYWdlU2l6ZVdpdGhCb2R5
SW5saW5lID4gbWVzc2FnZU1heFNpemUgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKLSAg
ICAgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBvb2xNZXNzYWdlQm9keSA9IFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOwotICAgICAg
ICBpZiAoIW9vbE1lc3NhZ2VCb2R5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBpZiAoIW9v
bE1lc3NhZ2VCb2R5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
UmVhZE9ubHkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1lc3NhZ2VJ
bmZvLnNldE1lc3NhZ2VCb2R5T09MKCk7Ci0KLSAgICAgICAgbWVtY3B5KG9vbE1lc3NhZ2VCb2R5
LT5kYXRhKCksIGFyZ3VtZW50cy0+YnVmZmVyKCksIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsK
LQotICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoaGFuZGxlLnJlbGVhc2VUb0F0dGFjaG1lbnQo
KSk7Ci0gICAgfQotCi0gICAgc3RydWN0IG1zZ2hkciBtZXNzYWdlOwotICAgIG1lbXNldCgmbWVz
c2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKLQotICAgIHN0cnVjdCBpb3ZlYyBpb3ZbM107Ci0g
ICAgbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKLQotICAgIG1lc3NhZ2UubXNnX2lvdiA9
IGlvdjsKLSAgICBpbnQgaW92TGVuZ3RoID0gMTsKLQotICAgIGlvdlswXS5pb3ZfYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZtZXNzYWdlSW5mbyk7Ci0gICAgaW92WzBdLmlvdl9sZW4g
PSBzaXplb2YobWVzc2FnZUluZm8pOwotCi0gICAgY2hhciBhdHRhY2htZW50RkRCdWZmZXJbQ01T
R19TUEFDRShzaXplb2YoaW50KSAqIChhdHRhY2htZW50cy5zaXplKCkpKV07Ci0gICAgc2l6ZV90
IGF0dGFjaG1lbnRTaXplc1thdHRhY2htZW50cy5zaXplKCldOwotCi0gICAgaWYgKCFhdHRhY2ht
ZW50cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbCA9IGF0dGFjaG1l
bnRGREJ1ZmZlcjsKLSAgICAgICAgbWVzc2FnZS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihhdHRh
Y2htZW50RkRCdWZmZXIpOwotCi0gICAgICAgIHN0cnVjdCBjbXNnaGRyKiBjbXNnID0gQ01TR19G
SVJTVEhEUigmbWVzc2FnZSk7Ci0gICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VU
OwotICAgICAgICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwotICAgICAgICBjbXNnLT5j
bXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihpbnQpICogYXR0YWNobWVudHMuc2l6ZSgpKTsKLQot
ICAgICAgICBpbnQqIGZkcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihDTVNHX0RBVEEoY21z
ZykpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBhdHRhY2htZW50U2l6ZXNbaV0gPSBhdHRhY2htZW50c1tpXS5zaXpl
KCk7Ci0gICAgICAgICAgICBmZHB0cltpXSA9IGF0dGFjaG1lbnRzW2ldLmZpbGVEZXNjcmlwdG9y
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gY21zZy0+
Y21zZ19sZW47Ci0KLSAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSBhdHRhY2htZW50
U2l6ZXM7Ci0gICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBzaXplb2YoYXR0YWNobWVu
dFNpemVzKTsKLSAgICAgICAgKytpb3ZMZW5ndGg7Ci0gICAgfQotCi0gICAgaWYgKCFtZXNzYWdl
SW5mby5pc01lc3NhZ2VCb2R5T09MKCkgJiYgYXJndW1lbnRzLT5idWZmZXJTaXplKCkpIHsKLSAg
ICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihh
cmd1bWVudHMtPmJ1ZmZlcigpKTsKLSAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IGFy
Z3VtZW50cy0+YnVmZmVyU2l6ZSgpOwotICAgICAgICArK2lvdkxlbmd0aDsKLSAgICB9Ci0KLSAg
ICBtZXNzYWdlLm1zZ19pb3ZsZW4gPSBpb3ZMZW5ndGg7Ci0KLSAgICBpbnQgYnl0ZXNTZW50ID0g
MDsKLSAgICB3aGlsZSAoKGJ5dGVzU2VudCA9IHNlbmRtc2cobV9zb2NrZXREZXNjcmlwdG9yLCAm
bWVzc2FnZSwgMCkpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24o
V2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MpCi17Ci0gICAgbV9jb25u
ZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihwcm9jZXNzLCBXb3JrSXRlbTo6
Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjQ4YzRhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKQEAgLTAsMCArMSw0MDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAi
UHJvY2Vzc0xhdW5jaGVyLmgiCisjaW5jbHVkZSAiV29ya0l0ZW0uaCIKKyNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKyNpZiBQTEFURk9S
TShRVCkKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UVNvY2tldE5vdGlmaWVy
PgorI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdsaWIuaD4KKyNlbmRpZgorCit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgQ29yZUlQQyB7CisKK3N0YXRpYyBjb25zdCBz
aXplX3QgbWVzc2FnZU1heFNpemUgPSA0MDk2Oworc3RhdGljIGNvbnN0IHNpemVfdCBhdHRhY2ht
ZW50TWF4QW1vdW50ID0gMjU1OworCitlbnVtIHsKKyAgICBNZXNzYWdlQm9keUlzT09MID0gMSA8
PCAzMQorfTsKKworY2xhc3MgTWVzc2FnZUluZm8geworcHVibGljOgorICAgIE1lc3NhZ2VJbmZv
KCkgeyB9CisKKyAgICBNZXNzYWdlSW5mbyhNZXNzYWdlSUQgbWVzc2FnZUlELCBzaXplX3QgYm9k
eVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVudENvdW50KQorICAgICAgICA6IG1fbWVzc2Fn
ZUlEKG1lc3NhZ2VJRC50b0ludCgpKQorICAgICAgICAsIG1fYm9keVNpemUoYm9keVNpemUpCisg
ICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5pdGlhbEF0dGFjaG1lbnRDb3VudCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghKG1fbWVzc2FnZUlEICYgTWVzc2FnZUJvZHlJc09PTCkpOworICAg
IH0KKworICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlPT0woKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFpc01lc3NhZ2VCb2R5T09MKCkpOworCisgICAgICAgIG1fbWVzc2FnZUlEIHw9IE1lc3NhZ2VC
b2R5SXNPT0w7CisgICAgICAgIG1fYXR0YWNobWVudENvdW50Kys7CisgICAgfQorCisgICAgYm9v
bCBpc01lc3NhZ2VCb2R5T09MKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlSUQgJiBNZXNzYWdl
Qm9keUlzT09MOyB9CisKKyAgICBzaXplX3QgYm9keVNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jv
ZHlTaXplOyB9CisKKyAgICBNZXNzYWdlSUQgbWVzc2FnZUlEKCkgY29uc3QgeyByZXR1cm4gTWVz
c2FnZUlEOjpmcm9tSW50KG1fbWVzc2FnZUlEICYgfk1lc3NhZ2VCb2R5SXNPT0wpOyB9CisKKyAg
ICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50Q291
bnQ7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX21lc3NhZ2VJRDsKKyAgICBzaXplX3Qg
bV9ib2R5U2l6ZTsKKyAgICBzaXplX3QgbV9hdHRhY2htZW50Q291bnQ7Cit9OworCit2b2lkIENv
bm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7Cisg
ICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaWRlbnRpZmllcjsKKyAgICBtX3JlYWRCdWZmZXIucmVz
aXplKG1lc3NhZ2VNYXhTaXplKTsKKyAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7CisKKyNp
ZiBQTEFURk9STShRVCkKKyAgICBtX3NvY2tldE5vdGlmaWVyID0gMDsKKyNlbmRpZgorfQorCit2
b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKG1fc29ja2V0
RGVzY3JpcHRvciAhPSAtMSkKKyAgICAgICAgd2hpbGUgKGNsb3NlKG1fc29ja2V0RGVzY3JpcHRv
cikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQorCisgICAgaWYgKCFtX2lzQ29ubmVjdGVk
KQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShHVEspCisgICAgbV9jb25uZWN0aW9u
UXVldWUudW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldERlc2NyaXB0b3IpOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICBkZWxldGUgbV9zb2NrZXROb3RpZmllcjsK
KyAgICBtX3NvY2tldE5vdGlmaWVyID0gMDsKKyNlbmRpZgorCisgICAgbV9zb2NrZXREZXNjcmlw
dG9yID0gLTE7CisgICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOworfQorCisjaWYgUExBVEZPUk0o
UVQpCitjbGFzcyBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQgeworcHVibGljOgorICAgIFNv
Y2tldE5vdGlmaWVyUmVzb3VyY2VHdWFyZChRU29ja2V0Tm90aWZpZXIqIHNvY2tldE5vdGlmaWVy
KQorICAgICAgICA6IG1fc29ja2V0Tm90aWZpZXIoc29ja2V0Tm90aWZpZXIpCisgICAgeworICAg
ICAgICBtX3NvY2tldE5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICB9CisKKyAgICB+
U29ja2V0Tm90aWZpZXJSZXNvdXJjZUd1YXJkKCkKKyAgICB7CisgICAgICAgIG1fc29ja2V0Tm90
aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFTb2NrZXRO
b3RpZmllciogY29uc3QgbV9zb2NrZXROb3RpZmllcjsKK307CisjZW5kaWYKKwordGVtcGxhdGU8
Y2xhc3MgVCwgY2xhc3MgaXRlcmF0b3I+CitjbGFzcyBBdHRhY2htZW50UmVzb3VyY2VHdWFyZCB7
CitwdWJsaWM6CisgICAgQXR0YWNobWVudFJlc291cmNlR3VhcmQoVCYgYXR0YWNobWVudHMpCisg
ICAgICAgIDogbV9hdHRhY2htZW50cyhhdHRhY2htZW50cykKKyAgICB7CisgICAgfQorICAgIH5B
dHRhY2htZW50UmVzb3VyY2VHdWFyZCgpCisgICAgeworICAgICAgICBpdGVyYXRvciBlbmQgPSBt
X2F0dGFjaG1lbnRzLmVuZCgpOworICAgICAgICBmb3IgKGl0ZXJhdG9yIGkgPSBtX2F0dGFjaG1l
bnRzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgICAgICAgICBpLT5kaXNwb3NlKCk7Cisg
ICAgfQorcHJpdmF0ZToKKyAgICBUJiBtX2F0dGFjaG1lbnRzOworfTsKKwordm9pZCBDb25uZWN0
aW9uOjpyZWFkeVJlYWRIYW5kbGVyKCkKK3sKKyAgICBEZXF1ZTxBdHRhY2htZW50PiBhdHRhY2ht
ZW50czsKKyNpZiBQTEFURk9STShRVCkKKyAgICBTb2NrZXROb3RpZmllclJlc291cmNlR3VhcmQg
c29ja2V0Tm90aWZpZXJFbmFibGVyKG1fc29ja2V0Tm90aWZpZXIpOworI2VuZGlmCisgICAgQXR0
YWNobWVudFJlc291cmNlR3VhcmQ8RGVxdWU8QXR0YWNobWVudD4sIERlcXVlPEF0dGFjaG1lbnQ+
OjppdGVyYXRvcj4gYXR0YWNoZW1lbnREaXNwb3NlcihhdHRhY2htZW50cyk7CisKKyAgICBjaGFy
IGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiAoYXR0
YWNobWVudE1heEFtb3VudCkpXTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVt
c2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlv
dlsxXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5t
c2dfY29udHJvbCA9IGF0dGFjaG1lbnREZXNjcmlwdG9yQnVmZmVyOworICAgIG1lc3NhZ2UubXNn
X2NvbnRyb2xsZW4gPSBDTVNHX1NQQUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRNYXhBbW91
bnQpKTsKKworICAgIGlvdlswXS5pb3ZfYmFzZSA9IG1fcmVhZEJ1ZmZlci5kYXRhKCk7CisgICAg
aW92WzBdLmlvdl9sZW4gPSBtX3JlYWRCdWZmZXIuc2l6ZSgpOworCisgICAgbWVzc2FnZS5tc2df
aW92ID0gaW92OworICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IDE7CisKKworICAgIGludCBtZXNz
YWdlTGVuZ3RoID0gMDsKKyAgICB3aGlsZSAoKG1lc3NhZ2VMZW5ndGggPSByZWN2bXNnKG1fc29j
a2V0RGVzY3JpcHRvciwgJm1lc3NhZ2UsIDApKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RydWN0IGNtc2do
ZHIqIGNvbnRyb2xNZXNzYWdlID0gQ01TR19GSVJTVEhEUigmbWVzc2FnZSk7CisKKyAgICBNZXNz
YWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyKiBtZXNzYWdlRGF0YSA9IG1f
cmVhZEJ1ZmZlci5kYXRhKCk7CisKKyAgICBtZW1jcHkoJm1lc3NhZ2VJbmZvLCBtZXNzYWdlRGF0
YSwgc2l6ZW9mKG1lc3NhZ2VJbmZvKSk7CisgICAgQVNTRVJUKG1lc3NhZ2VMZW5ndGggPT0gc2l6
ZW9mKG1lc3NhZ2VJbmZvKSArIG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9m
KHNpemVfdCkgKyAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keU9PTCgpID8gMCA6IG1lc3NhZ2VJ
bmZvLmJvZHlTaXplKCkpKTsKKworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihtZXNzYWdlSW5m
byk7CisKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5Owor
CisgICAgaWYgKG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChj
b250cm9sTWVzc2FnZSAmJiBjb250cm9sTWVzc2FnZS0+Y21zZ19sZXZlbCA9PSBTT0xfU09DS0VU
ICYmIGNvbnRyb2xNZXNzYWdlLT5jbXNnX3R5cGUgPT0gU0NNX1JJR0hUUykgeworICAgICAgICAg
ICAgc2l6ZV90IGF0dGFjaG1lbnRTaXplc1ttZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07
CisgICAgICAgICAgICBtZW1jcHkoYXR0YWNobWVudFNpemVzLCBtZXNzYWdlRGF0YSwgc2l6ZW9m
KGF0dGFjaG1lbnRTaXplcykpOworCisgICAgICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2Yo
YXR0YWNobWVudFNpemVzKTsKKworICAgICAgICAgICAgaW50IGZpbGVEZXNjcmlwdG9yc1ttZXNz
YWdlSW5mby5hdHRhY2htZW50Q291bnQoKV07CisgICAgICAgICAgICBtZW1jcHkoZmlsZURlc2Ny
aXB0b3JzLCBDTVNHX0RBVEEoY29udHJvbE1lc3NhZ2UpLCBzaXplb2YoZmlsZURlc2NyaXB0b3Jz
KSk7CisKKyAgICAgICAgICAgIGludCBhdHRhY2htZW50Q291bnQgPSBtZXNzYWdlSW5mby5hdHRh
Y2htZW50Q291bnQoKTsKKworICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJv
ZHlPT0woKSkKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50Q291bnQtLTsKKworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkgeworICAgICAgICAg
ICAgICAgIHdoaWxlIChmY250bChmaWxlRGVzY3JpcHRvcnNbaV0sIEZfU0VURkwsIEZEX0NMT0VY
RUMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YXR0YWNobWVudENvdW50OyArK2kpCisgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5k
KEF0dGFjaG1lbnQoZmlsZURlc2NyaXB0b3JzW2ldLCBhdHRhY2htZW50U2l6ZXNbaV0pKTsKKwor
ICAgICAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsKKworICAgICAgICAgICAg
ICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgICAg
IGhhbmRsZS5hZG9wdEZyb21BdHRhY2htZW50KGZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50Q291
bnRdLCBhdHRhY2htZW50U2l6ZXNbYXR0YWNobWVudENvdW50XSk7CisgICAgICAgICAgICAgICAg
aWYgKGhhbmRsZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OmNyZWF0ZShoYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keSkgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgPSBD
TVNHX05YVEhEUigmbWVzc2FnZSwgY29udHJvbE1lc3NhZ2UpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoYXR0YWNobWVudHMuc2l6ZSgpID09IG1lc3Nh
Z2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSA/IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgp
IC0gMSA6IG1lc3NhZ2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpKTsKKworICAgIHVuc2lnbmVkIGNo
YXIqIG1lc3NhZ2VCb2R5ID0gbWVzc2FnZURhdGE7CisKKyAgICBpZiAobWVzc2FnZUluZm8uaXNN
ZXNzYWdlQm9keU9PTCgpKQorICAgICAgICBtZXNzYWdlQm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG9vbE1lc3NhZ2VCb2R5LT5kYXRhKCkpOworCisgICAgQXJndW1lbnRE
ZWNvZGVyKiBhcmd1bWVudERlY29kZXI7CisgICAgaWYgKGF0dGFjaG1lbnRzLmlzRW1wdHkoKSkK
KyAgICAgICAgYXJndW1lbnREZWNvZGVyID0gbmV3IEFyZ3VtZW50RGVjb2RlcihtZXNzYWdlQm9k
eSwgbWVzc2FnZUluZm8uYm9keVNpemUoKSk7CisgICAgZWxzZQorICAgICAgICBhcmd1bWVudERl
Y29kZXIgPSBuZXcgQXJndW1lbnREZWNvZGVyKG1lc3NhZ2VCb2R5LCBtZXNzYWdlSW5mby5ib2R5
U2l6ZSgpLCBhdHRhY2htZW50cyk7CisKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKG1lc3Nh
Z2VJbmZvLm1lc3NhZ2VJRCgpLCBhZG9wdFB0cihhcmd1bWVudERlY29kZXIpKTsKKworICAgIEFT
U0VSVCghY29udHJvbE1lc3NhZ2UpOworfQorCitib29sIENvbm5lY3Rpb246Om9wZW4oKQorewor
I2lmIFBMQVRGT1JNKFFUKQorICAgIEFTU0VSVCghbV9zb2NrZXROb3RpZmllcik7CisjZW5kaWYK
KworICAgIGludCBmbGFncyA9IGZjbnRsKG1fc29ja2V0RGVzY3JpcHRvciwgRl9HRVRGTCwgMCk7
CisgICAgd2hpbGUgKGZjbnRsKG1fc29ja2V0RGVzY3JpcHRvciwgRl9TRVRGTCwgZmxhZ3MgfCBP
X05PTkJMT0NLKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgbV9pc0Nvbm5lY3RlZCA9IHRydWU7CisjaWYgUExBVEZP
Uk0oUVQpCisgICAgbV9zb2NrZXROb3RpZmllciA9IG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVy
U29ja2V0RXZlbnRIYW5kbGVyKG1fc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpS
ZWFkLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVy
KSk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJF
dmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXREZXNjcmlwdG9yLCAoR19JT19IVVAgfCBHX0lPX0VS
UiksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9z
ZSkpOworICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1f
c29ja2V0RGVzY3JpcHRvciwgR19JT19JTiwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVj
dGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOworI2VuZGlmCisKKyAgICAvLyBTY2hlZHVsZSBhIGNh
bGwgdG8gcmVhZHlSZWFkSGFuZGxlci4gRGF0YSBtYXkgaGF2ZSBhcnJpdmVkIGJlZm9yZSBpbnN0
YWxsYXRpb24gb2YgdGhlIHNpZ25hbAorICAgIC8vIGhhbmRsZXIuCisgICAgbV9jb25uZWN0aW9u
UXVldWUuc2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJl
YWR5UmVhZEhhbmRsZXIpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rp
b246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAoreworICAgIHJldHVy
biBtX2lzQ29ubmVjdGVkOworfQorCitib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3Nh
Z2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+IGFyZ3Vt
ZW50cykKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBBU1NFUlQobV9zb2NrZXROb3RpZmllcik7
CisjZW5kaWYKKworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihNZXNzYWdlSW5mbykgKyBhdHRh
Y2htZW50TWF4QW1vdW50ICogc2l6ZW9mKHNpemVfdCkgPD0gbWVzc2FnZU1heFNpemUsIEF0dGFj
aG1lbnRzRml0VG9NZXNzYWdlSW5saW5lKTsKKworICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRh
Y2htZW50cyA9IGFyZ3VtZW50cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgQXR0YWNobWVu
dFJlc291cmNlR3VhcmQ8VmVjdG9yPEF0dGFjaG1lbnQ+LCBWZWN0b3I8QXR0YWNobWVudD46Oml0
ZXJhdG9yPiBhdHRhY2hlbWVudERpc3Bvc2VyKGF0dGFjaG1lbnRzKTsKKworICAgIGlmIChhdHRh
Y2htZW50cy5zaXplKCkgPiAoYXR0YWNobWVudE1heEFtb3VudCAtIDEpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
TWVzc2FnZUluZm8gbWVzc2FnZUluZm8obWVzc2FnZUlELCBhcmd1bWVudHMtPmJ1ZmZlclNpemUo
KSwgYXR0YWNobWVudHMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbWVzc2FnZVNpemVXaXRoQm9keUlu
bGluZSA9IHNpemVvZihtZXNzYWdlSW5mbykgKyAoYXR0YWNobWVudHMuc2l6ZSgpICogc2l6ZW9m
KHNpemVfdCkpICsgYXJndW1lbnRzLT5idWZmZXJTaXplKCk7CisgICAgaWYgKG1lc3NhZ2VTaXpl
V2l0aEJvZHlJbmxpbmUgPiBtZXNzYWdlTWF4U2l6ZSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNpemUo
KSkgeworICAgICAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG9vbE1lc3NhZ2VCb2R5
ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7
CisgICAgICAgIGlmICghb29sTWVzc2FnZUJvZHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAg
IGlmICghb29sTWVzc2FnZUJvZHktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpSZWFkT25seSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
bWVzc2FnZUluZm8uc2V0TWVzc2FnZUJvZHlPT0woKTsKKworICAgICAgICBtZW1jcHkob29sTWVz
c2FnZUJvZHktPmRhdGEoKSwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJT
aXplKCkpOworCisgICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChoYW5kbGUucmVsZWFzZVRvQXR0
YWNobWVudCgpKTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2U7CisgICAgbWVt
c2V0KCZtZXNzYWdlLCAwLCBzaXplb2YobWVzc2FnZSkpOworCisgICAgc3RydWN0IGlvdmVjIGlv
dlszXTsKKyAgICBtZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisgICAgbWVzc2FnZS5t
c2dfaW92ID0gaW92OworICAgIGludCBpb3ZMZW5ndGggPSAxOworCisgICAgaW92WzBdLmlvdl9i
YXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1lc3NhZ2VJbmZvKTsKKyAgICBpb3ZbMF0u
aW92X2xlbiA9IHNpemVvZihtZXNzYWdlSW5mbyk7CisKKyAgICBjaGFyIGF0dGFjaG1lbnRGREJ1
ZmZlcltDTVNHX1NQQUNFKHNpemVvZihpbnQpICogKGF0dGFjaG1lbnRzLnNpemUoKSkpXTsKKyAg
ICBzaXplX3QgYXR0YWNobWVudFNpemVzW2F0dGFjaG1lbnRzLnNpemUoKV07CisKKyAgICBpZiAo
IWF0dGFjaG1lbnRzLmlzRW1wdHkoKSkgeworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sID0g
YXR0YWNobWVudEZEQnVmZmVyOworICAgICAgICBtZXNzYWdlLm1zZ19jb250cm9sbGVuID0gc2l6
ZW9mKGF0dGFjaG1lbnRGREJ1ZmZlcik7CisKKyAgICAgICAgc3RydWN0IGNtc2doZHIqIGNtc2cg
PSBDTVNHX0ZJUlNUSERSKCZtZXNzYWdlKTsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IFNP
TF9TT0NLRVQ7CisgICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CisgICAgICAg
IGNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKGludCkgKiBhdHRhY2htZW50cy5zaXpl
KCkpOworCisgICAgICAgIGludCogZmRwdHIgPSByZWludGVycHJldF9jYXN0PGludCo+KENNU0df
REFUQShjbXNnKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0YWNobWVudHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF0dGFjaG1lbnRTaXplc1tpXSA9IGF0dGFjaG1l
bnRzW2ldLnNpemUoKTsKKyAgICAgICAgICAgIGZkcHRyW2ldID0gYXR0YWNobWVudHNbaV0uZmls
ZURlc2NyaXB0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UubXNnX2NvbnRyb2xs
ZW4gPSBjbXNnLT5jbXNnX2xlbjsKKworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9
IGF0dGFjaG1lbnRTaXplczsKKyAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IHNpemVv
ZihhdHRhY2htZW50U2l6ZXMpOworICAgICAgICArK2lvdkxlbmd0aDsKKyAgICB9CisKKyAgICBp
ZiAoIW1lc3NhZ2VJbmZvLmlzTWVzc2FnZUJvZHlPT0woKSAmJiBhcmd1bWVudHMtPmJ1ZmZlclNp
emUoKSkgeworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGFyZ3VtZW50cy0+YnVmZmVyKCkpOworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5p
b3ZfbGVuID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7CisgICAgICAgICsraW92TGVuZ3RoOwor
ICAgIH0KKworICAgIG1lc3NhZ2UubXNnX2lvdmxlbiA9IGlvdkxlbmd0aDsKKworICAgIGludCBi
eXRlc1NlbnQgPSAwOworICAgIHdoaWxlICgoYnl0ZXNTZW50ID0gc2VuZG1zZyhtX3NvY2tldERl
c2NyaXB0b3IsICZtZXNzYWdlLCAwKSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJ
TlRSKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmIFBMQVRGT1JNKFFUKQordm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNv
bm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIgcHJvY2VzcykKK3sKKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmtPblRl
cm1pbmF0aW9uKHByb2Nlc3MsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNv
bm5lY3Rpb25EaWRDbG9zZSkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggYTRiOTViZi4uNTQzNjBk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RL
KQogI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KICNlbmRpZgpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZW5jb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgSGFuZGxlJik7CiAKLSNpZiBQTEFURk9S
TShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICBDb3JlSVBD
OjpBdHRhY2htZW50IHJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdDsKICAgICAgICAgdm9pZCBh
ZG9wdEZyb21BdHRhY2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90KTsKICNlbmRpZgpA
QCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG11dGFibGUgbWFjaF9wb3J0X3QgbV9w
b3J0OwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRs
ZTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdU
SykKICAgICAgICAgbXV0YWJsZSBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNlbmRpZgogICAgICAg
ICBzaXplX3QgbV9zaXplOwpAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIG1hY2hfcG9y
dF90IG1fcG9ydDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIQU5ETEUgbV9oYW5kbGU7Ci0j
ZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAg
ICAgaW50IG1fZmlsZURlc2NyaXB0b3I7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9wb3NpeC9TaGFyZWRNZW1vcnlQT1NJWC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9wb3NpeC9TaGFyZWRNZW1vcnlQT1NJWC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjZjEzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3Bvc2l4L1NoYXJlZE1lbW9yeVBPU0lYLmNwcApAQCAtMCwwICsxLDIz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZE1l
bW9yeS5oIgorCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1l
bnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu
Y2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5j
bHVkZSA8UURpcj4KKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlZE1lbW9yeTo6
SGFuZGxlOjpIYW5kbGUoKQorICAgIDogbV9maWxlRGVzY3JpcHRvcigtMSkKKyAgICAsIG1fc2l6
ZSgwKQoreworfQorCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCit7CisgICAgaWYg
KCFpc051bGwoKSkKKyAgICAgICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0x
ICYmIGVycm5vID09IEVJTlRSKSB7IH0KK30KKworYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6
aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlRGVzY3JpcHRvciA9PSAtMTsKK30K
Kwordm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGVu
Y29kZXItPmVuY29kZShyZWxlYXNlVG9BdHRhY2htZW50KCkpOworfQorCitib29sIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBI
YW5kbGUmIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX3NpemUp
OworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkpOworCisgICAgQ29yZUlQ
Qzo6QXR0YWNobWVudCBhdHRhY2htZW50OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0dGFj
aG1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBoYW5kbGUuYWRvcHRGcm9tQXR0
YWNobWVudChhdHRhY2htZW50LnJlbGVhc2VGaWxlRGVzY3JpcHRvcigpLCBhdHRhY2htZW50LnNp
emUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvcmVJUEM6OkF0dGFjaG1lbnQgU2hhcmVk
TWVtb3J5OjpIYW5kbGU6OnJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdAoreworICAgIEFTU0VS
VCghaXNOdWxsKCkpOworCisgICAgaW50IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOworICAgIG1f
ZmlsZURlc2NyaXB0b3IgPSAtMTsKKyAgICByZXR1cm4gQ29yZUlQQzo6QXR0YWNobWVudCh0ZW1w
LCBtX3NpemUpOworfQorCit2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRh
Y2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKCFt
X3NpemUpOworICAgIEFTU0VSVChpc051bGwoKSk7CisKKyAgICBtX2ZpbGVEZXNjcmlwdG9yID0g
ZmlsZURlc2NyaXB0b3I7CisgICAgbV9zaXplID0gc2l6ZTsKK30KKworUGFzc1JlZlB0cjxTaGFy
ZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQoreworI2lmIFBMQVRG
T1JNKFFUKQorICAgIFFTdHJpbmcgdGVtcE5hbWUgPSBRRGlyOjp0ZW1wKCkuZmlsZVBhdGgoUUxh
dGluMVN0cmluZygicXdrc2htLlhYWFhYWCIpKTsKKyAgICBRQnl0ZUFycmF5IHRlbXBOYW1lQ1NU
UiA9IHRlbXBOYW1lLnRvTG9jYWw4Qml0KCk7CisgICAgY2hhciogdGVtcE5hbWVDID0gdGVtcE5h
bWVDU1RSLmRhdGEoKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBHT3duUHRyPGdjaGFyPiB0
ZW1wTmFtZShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIldLMlNoYXJlZE1lbW9y
eVhYWFhYWCIsIE5VTEwpKTsKKyAgICBnY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWUuZ2V0KCk7
CisjZW5kaWYKKworICAgIGludCBmaWxlRGVzY3JpcHRvcjsKKyAgICB3aGlsZSAoKGZpbGVEZXNj
cmlwdG9yID0gbWtzdGVtcCh0ZW1wTmFtZUMpKSA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8g
IT0gRUlOVFIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgd2hpbGUgKGZjbnRs
KGZpbGVEZXNjcmlwdG9yLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA9PSAtMSkgeworICAgICAgICBp
ZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3Jp
cHRvcikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQorICAgICAgICAgICAgdW5saW5rKHRl
bXBOYW1lQyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHdoaWxlIChmdHJ1bmNhdGUoZmlsZURlc2NyaXB0b3IsIHNpemUpID09IC0xKSB7CisgICAgICAg
IGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNj
cmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9CisgICAgICAgICAgICB1bmxpbmso
dGVtcE5hbWVDKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQ
X1NIQVJFRCwgZmlsZURlc2NyaXB0b3IsIDApOworICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQp
IHsKKyAgICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9
PSBFSU5UUikgeyB9CisgICAgICAgIHVubGluayh0ZW1wTmFtZUMpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICB1bmxpbmsodGVtcE5hbWVDKTsKKworICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKKyAgICBpbnN0
YW5jZS0+bV9kYXRhID0gZGF0YTsKKyAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGZp
bGVEZXNjcmlwdG9yOworICAgIGluc3RhbmNlLT5tX3NpemUgPSBzaXplOworICAgIHJldHVybiBp
bnN0YW5jZS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVNTWFw
KFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJv
dGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0
dXJuIFBST1RfUkVBRDsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgorICAgICAg
ICByZXR1cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKK30KKworUGFz
c1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYg
aGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7CisgICAgQVNTRVJUKCFoYW5kbGUuaXNO
dWxsKCkpOworCisgICAgdm9pZCogZGF0YSA9IG1tYXAoMCwgaGFuZGxlLm1fc2l6ZSwgYWNjZXNz
TW9kZU1NYXAocHJvdGVjdGlvbiksIE1BUF9TSEFSRUQsIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9y
LCAwKTsKKyAgICBpZiAoZGF0YSA9PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSgpKTsKKyAgICBpbnN0YW5jZS0+bV9kYXRhID0gZGF0YTsKKyAgICBpbnN0YW5jZS0+bV9m
aWxlRGVzY3JpcHRvciA9IGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yOworICAgIGluc3RhbmNlLT5t
X3NpemUgPSBoYW5kbGUubV9zaXplOworICAgIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yID0gLTE7
CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnko
KQoreworICAgIG11bm1hcChtX2RhdGEsIG1fc2l6ZSk7CisgICAgd2hpbGUgKGNsb3NlKG1fZmls
ZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KK30KKworc3RhdGljIGlu
bGluZSBpbnQgYWNjZXNzTW9kZUZpbGUoU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rp
b24pCit7CisgICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6
OlJlYWRPbmx5OgorICAgICAgICByZXR1cm4gT19SRE9OTFk7CisgICAgY2FzZSBTaGFyZWRNZW1v
cnk6OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIE9fUkRXUjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gT19SRFdSOworfQorCitib29sIFNoYXJlZE1l
bW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24p
Cit7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlRf
QVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVsbCgpKTsKKworICAgIGludCBkdXBsaWNhdGVkSGFuZGxl
OworICAgIHdoaWxlICgoZHVwbGljYXRlZEhhbmRsZSA9IGR1cChtX2ZpbGVEZXNjcmlwdG9yKSkg
PT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHdoaWxlICgoZmNudGwoZHVwbGljYXRlZEhhbmRsZSwgRl9TRVRGRCwgRkRf
Q0xPRVhFQyB8IGFjY2Vzc01vZGVGaWxlKHByb3RlY3Rpb24pKSA9PSAtMSkpIHsKKyAgICAgICAg
aWYgKGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHdoaWxlIChjbG9zZShkdXBsaWNhdGVkSGFuZGxlKSA9PSAtMSAmJiBlcnJu
byA9PSBFSU5UUikgeyB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaGFuZGxlLm1fZmlsZURlc2NyaXB0b3IgPSBkdXBsaWNhdGVkSGFuZGxlOworICAg
IGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVk
IFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBw
YWdlU2l6ZSA9IDA7CisKKyAgICBpZiAoIXBhZ2VTaXplKQorICAgICAgICBwYWdlU2l6ZSA9IGdl
dHBhZ2VzaXplKCk7CisKKyAgICByZXR1cm4gcGFnZVNpemU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVt
b3J5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDVkNzBmLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDIyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxMCBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKLSNp
bmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKLSNpbmNsdWRlIDxRRGlyPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNu
dGwuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5k
bGUoKQotICAgIDogbV9maWxlRGVzY3JpcHRvcigtMSkKLSAgICAsIG1fc2l6ZSgwKQotewotfQot
Ci1TaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCi17Ci0gICAgaWYgKCFpc051bGwoKSkK
LSAgICAgICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVycm5vID09
IEVJTlRSKSB7IH0KLX0KLQotYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9maWxlRGVzY3JpcHRvciA9PSAtMTsKLX0KLQotdm9pZCBTaGFy
ZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLQotICAgIGVuY29kZXItPmVuY29k
ZShyZWxlYXNlVG9BdHRhY2htZW50KCkpOwotfQotCi1ib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxl
OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRs
ZSkKLXsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgIWhhbmRsZS5tX3NpemUpOwotICAgIEFTU0VS
VF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkpOwotCi0gICAgQ29yZUlQQzo6QXR0YWNobWVu
dCBhdHRhY2htZW50OwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0dGFjaG1lbnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBoYW5kbGUuYWRvcHRGcm9tQXR0YWNobWVudChhdHRh
Y2htZW50LnJlbGVhc2VGaWxlRGVzY3JpcHRvcigpLCBhdHRhY2htZW50LnNpemUoKSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLUNvcmVJUEM6OkF0dGFjaG1lbnQgU2hhcmVkTWVtb3J5OjpIYW5k
bGU6OnJlbGVhc2VUb0F0dGFjaG1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkp
OwotCi0gICAgaW50IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOwotICAgIG1fZmlsZURlc2NyaXB0
b3IgPSAtMTsKLSAgICByZXR1cm4gQ29yZUlQQzo6QXR0YWNobWVudCh0ZW1wLCBtX3NpemUpOwot
fQotCi12b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjphZG9wdEZyb21BdHRhY2htZW50KGludCBm
aWxlRGVzY3JpcHRvciwgc2l6ZV90IHNpemUpCi17Ci0gICAgQVNTRVJUKCFtX3NpemUpOwotICAg
IEFTU0VSVChpc051bGwoKSk7Ci0KLSAgICBtX2ZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0
b3I7Ci0gICAgbV9zaXplID0gc2l6ZTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQotewotICAgIFFTdHJpbmcgdGVtcE5hbWUg
PSBRRGlyOjp0ZW1wKCkuZmlsZVBhdGgoUUxhdGluMVN0cmluZygicXdrc2htLlhYWFhYWCIpKTsK
LSAgICBRQnl0ZUFycmF5IHRlbXBOYW1lQ1NUUiA9IHRlbXBOYW1lLnRvTG9jYWw4Qml0KCk7Ci0g
ICAgY2hhciogdGVtcE5hbWVDID0gdGVtcE5hbWVDU1RSLmRhdGEoKTsKLQotICAgIGludCBmaWxl
RGVzY3JpcHRvcjsKLSAgICB3aGlsZSAoKGZpbGVEZXNjcmlwdG9yID0gbWtzdGVtcCh0ZW1wTmFt
ZUMpKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgd2hpbGUgKGZjbnRsKGZpbGVEZXNjcmlwdG9yLCBGX1NFVEZE
LCBGRF9DTE9FWEVDKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKLSAg
ICAgICAgICAgIHdoaWxlIChjbG9zZShmaWxlRGVzY3JpcHRvcikgPT0gLTEgJiYgZXJybm8gPT0g
RUlOVFIpIHsgfQotICAgICAgICAgICAgdW5saW5rKHRlbXBOYW1lQyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChmdHJ1bmNhdGUoZmlsZURl
c2NyaXB0b3IsIHNpemUpID09IC0xKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewot
ICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9
PSBFSU5UUikgeyB9Ci0gICAgICAgICAgICB1bmxpbmsodGVtcE5hbWVDKTsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCogZGF0YSA9IG1tYXAoMCwg
c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmlsZURlc2NyaXB0b3Is
IDApOwotICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgd2hpbGUgKGNsb3Nl
KGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9Ci0gICAgICAgIHVu
bGluayh0ZW1wTmFtZUMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB1bmxpbmso
dGVtcE5hbWVDKTsKLQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGluc3RhbmNlID0gYWRvcHRS
ZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKLSAgICBpbnN0YW5jZS0+bV9kYXRhID0gZGF0YTsKLSAg
ICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIGluc3Rh
bmNlLT5tX3NpemUgPSBzaXplOwotICAgIHJldHVybiBpbnN0YW5jZS5yZWxlYXNlKCk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgaW50IGFjY2Vzc01vZGVNTWFwKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlv
biBwcm90ZWN0aW9uKQotewotICAgIHN3aXRjaCAocHJvdGVjdGlvbikgewotICAgIGNhc2UgU2hh
cmVkTWVtb3J5OjpSZWFkT25seToKLSAgICAgICAgcmV0dXJuIFBST1RfUkVBRDsKLSAgICBjYXNl
IFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlOgotICAgICAgICByZXR1cm4gUFJPVF9SRUFEIHwgUFJP
VF9XUklURTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
UFJPVF9SRUFEIHwgUFJPVF9XUklURTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3Rl
Y3Rpb24pCi17Ci0gICAgQVNTRVJUKCFoYW5kbGUuaXNOdWxsKCkpOwotCi0gICAgdm9pZCogZGF0
YSA9IG1tYXAoMCwgaGFuZGxlLm1fc2l6ZSwgYWNjZXNzTW9kZU1NYXAocHJvdGVjdGlvbiksIE1B
UF9TSEFSRUQsIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yLCAwKTsKLSAgICBpZiAoZGF0YSA9PSBN
QVBfRkFJTEVEKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSgpKTsKLSAgICBpbnN0YW5jZS0+
bV9kYXRhID0gZGF0YTsKLSAgICBpbnN0YW5jZS0+bV9maWxlRGVzY3JpcHRvciA9IGhhbmRsZS5t
X2ZpbGVEZXNjcmlwdG9yOwotICAgIGluc3RhbmNlLT5tX3NpemUgPSBoYW5kbGUubV9zaXplOwot
ICAgIGhhbmRsZS5tX2ZpbGVEZXNjcmlwdG9yID0gLTE7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwot
fQotCi1TaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQotewotICAgIG11bm1hcChtX2RhdGEs
IG1fc2l6ZSk7Ci0gICAgd2hpbGUgKGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpID09IC0xICYmIGVy
cm5vID09IEVJTlRSKSB7IH0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWNjZXNzTW9kZUZpbGUo
U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCi17Ci0gICAgc3dpdGNoIChwcm90
ZWN0aW9uKSB7Ci0gICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5OgotICAgICAgICByZXR1
cm4gT19SRE9OTFk7Ci0gICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKLSAgICAgICAg
cmV0dXJuIE9fUkRXUjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gT19SRFdSOwotfQotCi1ib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRs
ZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5k
bGUsICFoYW5kbGUubV9zaXplKTsKLSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVs
bCgpKTsKLQotICAgIGludCBkdXBsaWNhdGVkSGFuZGxlOwotICAgIHdoaWxlICgoZHVwbGljYXRl
ZEhhbmRsZSA9IGR1cChtX2ZpbGVEZXNjcmlwdG9yKSkgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVy
cm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlICgoZmNu
dGwoZHVwbGljYXRlZEhhbmRsZSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyB8IGFjY2Vzc01vZGVGaWxl
KHByb3RlY3Rpb24pKSA9PSAtMSkpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHdoaWxlIChjbG9z
ZShkdXBsaWNhdGVkSGFuZGxlKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikgeyB9Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaGFuZGxlLm1fZmlsZURl
c2NyaXB0b3IgPSBkdXBsaWNhdGVkSGFuZGxlOwotICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFn
ZVNpemUoKQotewotICAgIHN0YXRpYyB1bnNpZ25lZCBwYWdlU2l6ZSA9IDA7Ci0KLSAgICBpZiAo
IXBhZ2VTaXplKQotICAgICAgICBwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0KLSAgICByZXR1
cm4gcGFnZVNpemU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJH
dGsuY3BwCmluZGV4IDA0ZDhhMDMuLmE5YmExYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAK
QEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQog
ICAgIHBpZF90IHBpZCA9IDA7CiAKICAgICBpbnQgc29ja2V0c1syXTsKLSAgICBpZiAoc29ja2V0
cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0cykgPCAwKSB7CisgICAgaWYgKHNv
Y2tldHBhaXIoQUZfVU5JWCwgU09DS19ER1JBTSwgMCwgc29ja2V0cykgPCAwKSB7CiAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpb24gb2Ygc29ja2V0IGZhaWxlZCB3aXRoIGVycm5vICVk
LlxuIiwgZXJybm8pOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnBybwppbmRleCBkM2IwODE0Li4xYzU4ODhhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpA
QCAtMjk3LDE1ICsyOTcsMTUgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9C
aW5hcnlTZW1hcGhvcmUuY3BwIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3Bw
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuY3BwIFwKLSAgICBQbGF0Zm9y
bS9Db3JlSVBDL3F0L0F0dGFjaG1lbnRRdC5jcHAgXAotICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQv
Q29ubmVjdGlvblF0LmNwcCBcCisgICAgUGxhdGZvcm0vQ29yZUlQQy9wb3NpeC9BdHRhY2htZW50
UE9TSVguY3BwIFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3Bw
IFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBc
CiAgICAgUGxhdGZvcm0vUnVuTG9vcC5jcHAgXAogICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAg
XAorICAgIFBsYXRmb3JtL3Bvc2l4L1NoYXJlZE1lbW9yeVBPU0lYLmNwcCBcCiAgICAgUGxhdGZv
cm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKLSAg
ICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1dvcmtR
dWV1ZVF0LmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5N
b2R1bGUuY3BwIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVn
aW5Nb2R1bGVYMTEuY3BwIFwKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="80192"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>