<?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>40872</bug_id>
          
          <creation_ts>2010-06-18 20:08:39 -0700</creation_ts>
          <short_desc>experimental directory upload</short_desc>
          <delta_ts>2010-07-15 13:37:37 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Gregg">johnnyg</reporter>
          <assigned_to name="John Gregg">johnnyg</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>jianli</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>240246</commentid>
    <comment_count>0</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-18 20:08:39 -0700</bug_when>
    <thetext>experimental directory upload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240259</commentid>
    <comment_count>1</comment_count>
      <attachid>59176</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-18 20:41:32 -0700</bug_when>
    <thetext>Created attachment 59176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240752</commentid>
    <comment_count>2</comment_count>
      <attachid>59176</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-06-21 09:43:24 -0700</bug_when>
    <thetext>Comment on attachment 59176
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 61461)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,42 @@
&gt; +2010-06-18  John Gregg  &lt;johnnyg@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Experimental feature of directory attribute on &lt;input type=&quot;file&quot;&gt; which
&gt; +        enables the OS to present a folder picker instead of a file picker dialog.
&gt; +
&gt; +        * html/Blob.cpp:
&gt; +        (WebCore::Blob::Blob):
&gt; +        * html/Blob.h:
&gt; +        * html/File.cpp:
&gt; +        (WebCore::File::File):
&gt; +        (WebCore::File::Init):
&gt; +        (WebCore::File::path):
&gt; +        * html/File.h:
&gt; +        (WebCore::File::create):
&gt; +        * html/File.idl:
&gt; +        * html/HTMLAttributeNames.in:
&gt; +        * html/HTMLInputElement.cpp:
&gt; +        (WebCore::HTMLInputElement::setFileListFromRenderer):
&gt; +        (WebCore::HTMLInputElement::directory):
&gt; +        (WebCore::HTMLInputElement::setDirectory):
&gt; +        * html/HTMLInputElement.h:
&gt; +        * html/HTMLInputElement.idl:
&gt; +        * platform/BlobItem.cpp:
&gt; +        (WebCore::RelativePathFileBlobItem::create):
&gt; +        (WebCore::RelativePathFileBlobItem::RelativePathFileBlobItem):
&gt; +        * platform/BlobItem.h:
&gt; +        (WebCore::FileBlobItem::hasRelativePath):
&gt; +        (WebCore::RelativePathFileBlobItem::hasRelativePath):
&gt; +        (WebCore::RelativePathFileBlobItem::relativePath):
&gt; +        * platform/FileChooser.h:
&gt; +        (WebCore::FileChooser::allowsDirectoryUpload):
&gt; +        * platform/network/FormData.cpp:
&gt; +        (WebCore::FormData::appendKeyValuePairItems):
&gt; +        * rendering/RenderFileUploadControl.cpp:
&gt; +        (WebCore::RenderFileUploadControl::allowsDirectoryUpload):
&gt; +        * rendering/RenderFileUploadControl.h:
&gt; +
&gt;  2010-06-18  Anders Carlsson  &lt;andersca@apple.com&gt;
&gt;  
&gt;          Reviewed by Oliver Hunt.
&gt; Index: WebCore/html/Blob.cpp
&gt; ===================================================================
&gt; --- WebCore/html/Blob.cpp	(revision 61458)
&gt; +++ WebCore/html/Blob.cpp	(working copy)
&gt; @@ -43,6 +43,11 @@ Blob::Blob(const String&amp; type, const Blo
&gt;          m_items.append(items[i]);
&gt;  }
&gt;  
&gt; +Blob::Blob(const RefPtr&lt;BlobItem&gt;&amp; item)
&gt; +{
&gt; +    m_items.append(item);
&gt; +}
&gt; +
&gt;  Blob::Blob(const String&amp; path)
&gt;  {
&gt;      // Note: this doesn&apos;t initialize the type unlike File(path).
&gt; Index: WebCore/html/Blob.h
&gt; ===================================================================
&gt; --- WebCore/html/Blob.h	(revision 61458)
&gt; +++ WebCore/html/Blob.h	(working copy)
&gt; @@ -71,6 +71,7 @@ public:
&gt;  
&gt;  protected:
&gt;      Blob(const String&amp; type, const BlobItemList&amp;);
&gt; +    Blob(const RefPtr&lt;BlobItem&gt;&amp;);
&gt;  
&gt;      // FIXME: Deprecated constructor.  See also the comment for Blob::create(path).
&gt;      Blob(const String&amp; path);
&gt; Index: WebCore/html/File.cpp
&gt; ===================================================================
&gt; --- WebCore/html/File.cpp	(revision 61458)
&gt; +++ WebCore/html/File.cpp	(working copy)
&gt; @@ -34,6 +34,11 @@ namespace WebCore {
&gt;  File::File(const String&amp; path)
&gt;      : Blob(path)
&gt;  {
&gt; +    Init();
&gt; +}
&gt; +
&gt; +void File::Init()
&gt; +{
&gt;      // We don&apos;t use MIMETypeRegistry::getMIMETypeForPath() because it returns &quot;application/octet-stream&quot; upon failure.
&gt;      const String&amp; fileName = name();
&gt;      int index = fileName.reverseFind(&apos;.&apos;);
&gt; @@ -41,9 +46,27 @@ File::File(const String&amp; path)
&gt;          m_type = MIMETypeRegistry::getMIMETypeForExtension(fileName.substring(index + 1));
&gt;  }
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +File::File(const String&amp; relativePath, const String&amp; filePath)
&gt; +    : Blob(RelativePathFileBlobItem::create(filePath, relativePath))
&gt; +{
&gt; +    Init();
&gt; +}
&gt; +#endif
&gt; +
&gt;  const String&amp; File::name() const
&gt;  {
&gt;      return items().at(0)-&gt;toFileBlobItem()-&gt;name();
&gt;  }
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +const String&amp; File::path() const
&gt; +{
&gt; +    const FileBlobItem* item = items().at(0)-&gt;toFileBlobItem();
&gt; +    if (item-&gt;hasRelativePath())
&gt; +        return static_cast&lt;const RelativePathFileBlobItem*&gt;(item)-&gt;relativePath();
&gt; +    return name();
&gt; +}
&gt; +#endif
&gt; +
&gt;  } // namespace WebCore
&gt; Index: WebCore/html/File.h
&gt; ===================================================================
&gt; --- WebCore/html/File.h	(revision 61458)
&gt; +++ WebCore/html/File.h	(working copy)
&gt; @@ -39,9 +39,19 @@ public:
&gt;          return adoptRef(new File(path));
&gt;      }
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    static PassRefPtr&lt;File&gt; create(const String&amp; relativePath, const String&amp; file)
&gt; +    {
&gt; +        return adoptRef(new File(relativePath, file));
&gt; +    }
&gt; +#endif
&gt; +
&gt;      virtual bool isFile() const { return true; }
&gt;  
&gt;      const String&amp; name() const;
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    const String&amp; path() const;
&gt; +#endif
&gt;  
&gt;      // FIXME: obsolete attributes. To be removed.
&gt;      const String&amp; fileName() const { return name(); }
&gt; @@ -49,6 +59,11 @@ public:
&gt;  
&gt;  private:
&gt;      File(const String&amp; path);
&gt; +    void Init();
&gt; +
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    File(const String&amp; relativePath, const String&amp; path);
&gt; +#endif
&gt;  };
&gt;  
&gt;  } // namespace WebCore
&gt; Index: WebCore/html/File.idl
&gt; ===================================================================
&gt; --- WebCore/html/File.idl	(revision 61458)
&gt; +++ WebCore/html/File.idl	(working copy)
&gt; @@ -30,6 +30,9 @@ module html {
&gt;          GenerateToJS
&gt;      ] File : Blob {
&gt;          readonly attribute DOMString name;
&gt; +#if defined(ENABLE_DIRECTORY_UPLOAD) &amp;&amp; ENABLE_DIRECTORY_UPLOAD
&gt; +        readonly attribute DOMString path;
&gt; +#endif
&gt;  
&gt;          // FIXME: obsolete attributes. To be removed.
&gt;          readonly attribute DOMString fileName;
&gt; Index: WebCore/html/HTMLAttributeNames.in
&gt; ===================================================================
&gt; --- WebCore/html/HTMLAttributeNames.in	(revision 61458)
&gt; +++ WebCore/html/HTMLAttributeNames.in	(working copy)
&gt; @@ -84,6 +84,7 @@ declare
&gt;  defer
&gt;  dir
&gt;  direction
&gt; +directory
&gt;  disabled
&gt;  draggable
&gt;  enctype
&gt; Index: WebCore/html/HTMLInputElement.cpp
&gt; ===================================================================
&gt; --- WebCore/html/HTMLInputElement.cpp	(revision 61458)
&gt; +++ WebCore/html/HTMLInputElement.cpp	(working copy)
&gt; @@ -1966,8 +1966,28 @@ void HTMLInputElement::setFileListFromRe
&gt;  {
&gt;      m_fileList-&gt;clear();
&gt;      int size = paths.size();
&gt; +
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    if (directory() &amp;&amp; size &gt; 0) {
&gt; +        String rootPath = directoryName(paths[0]);
&gt; +        // Find the common root path.
&gt; +        for (int i = 0; i &lt; size; i++) {
&gt; +            if (!paths[i].startsWith(rootPath)) {
&gt; +                rootPath = directoryName(rootPath);
&gt; +                i = 0;
&gt; +            }
&gt; +        }
&gt; +        rootPath = directoryName(rootPath);
&gt; +        for (int i = 0; i &lt; size; i++)
&gt; +            m_fileList-&gt;append(File::create(paths[i].substring(1 + rootPath.length()), paths[i]));
&gt; +    } else {
&gt; +        for (int i = 0; i &lt; size; i++)
&gt; +            m_fileList-&gt;append(File::create(paths[i]));
&gt; +    }
&gt; +#else
&gt;      for (int i = 0; i &lt; size; i++)
&gt;          m_fileList-&gt;append(File::create(paths[i]));
&gt; +#endif
&gt;  
&gt;      setFormControlValueMatchesRenderer(true);
&gt;      InputElement::notifyFormStateChanged(this);
&gt; @@ -2486,7 +2506,19 @@ void HTMLInputElement::setMultiple(bool 
&gt;  {
&gt;      setAttribute(multipleAttr, multiple ? &quot;&quot; : 0);
&gt;  }
&gt; -    
&gt; +
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +bool HTMLInputElement::directory() const
&gt; +{
&gt; +    return !getAttribute(directoryAttr).isNull();
&gt; +}
&gt; +
&gt; +void HTMLInputElement::setDirectory(bool directory)
&gt; +{
&gt; +    setAttribute(directoryAttr, directory ? &quot;&quot; : 0);
&gt; +}
&gt; +#endif
&gt; +
&gt;  void HTMLInputElement::setSize(unsigned size)
&gt;  {
&gt;      setAttribute(sizeAttr, String::number(size));
&gt; Index: WebCore/html/HTMLInputElement.h
&gt; ===================================================================
&gt; --- WebCore/html/HTMLInputElement.h	(revision 61458)
&gt; +++ WebCore/html/HTMLInputElement.h	(working copy)
&gt; @@ -186,6 +186,11 @@ public:
&gt;      bool multiple() const;
&gt;      void setMultiple(bool);
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    bool directory() const;
&gt; +    void setDirectory(bool);
&gt; +#endif
&gt; +
&gt;      String useMap() const;
&gt;      void setUseMap(const String&amp;);
&gt;  
&gt; Index: WebCore/html/HTMLInputElement.idl
&gt; ===================================================================
&gt; --- WebCore/html/HTMLInputElement.idl	(revision 61458)
&gt; +++ WebCore/html/HTMLInputElement.idl	(working copy)
&gt; @@ -40,6 +40,9 @@ module html {
&gt;          attribute long maxLength setter raises(DOMException);
&gt;          attribute [Reflect] DOMString min;
&gt;          attribute [Reflect] boolean multiple;
&gt; +#if defined(ENABLE_DIRECTORY_UPLOAD) &amp;&amp; ENABLE_DIRECTORY_UPLOAD
&gt; +        attribute [Reflect] boolean directory;
&gt; +#endif
&gt;          attribute [Reflect] DOMString name;
&gt;          attribute [Reflect] DOMString pattern;
&gt;          attribute [Reflect] DOMString placeholder;
&gt; Index: WebCore/platform/BlobItem.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/BlobItem.cpp	(revision 61458)
&gt; +++ WebCore/platform/BlobItem.cpp	(working copy)
&gt; @@ -102,6 +102,22 @@ PassRefPtr&lt;BlobItem&gt; FileBlobItem::slice
&gt;  }
&gt;  #endif // ENABLE(BLOB_SLICE)
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +// RelativePathFileBlobItem --------------------------------------------------------
&gt; +
&gt; +PassRefPtr&lt;BlobItem&gt; RelativePathFileBlobItem::create(const String&amp; path, const String&amp; relativePath)
&gt; +{
&gt; +    return adoptRef(static_cast&lt;BlobItem*&gt;(new RelativePathFileBlobItem(path, relativePath)));
&gt; +}
&gt; +
&gt; +RelativePathFileBlobItem::RelativePathFileBlobItem(const String&amp; path, const String&amp; relativePath)
&gt; +    : FileBlobItem(path)
&gt; +    , m_relativePath(relativePath)
&gt; +{
&gt; +}
&gt; +
&gt; +#endif
&gt; +
&gt;  // StringBlobItem --------------------------------------------------------------
&gt;  
&gt;  PassRefPtr&lt;BlobItem&gt; StringBlobItem::create(const String&amp; text, LineEnding ending, TextEncoding encoding)
&gt; Index: WebCore/platform/BlobItem.h
&gt; ===================================================================
&gt; --- WebCore/platform/BlobItem.h	(revision 61458)
&gt; +++ WebCore/platform/BlobItem.h	(working copy)
&gt; @@ -111,6 +111,10 @@ public:
&gt;      virtual const String&amp; name() const { return m_fileName; }
&gt;      virtual const String&amp; path() const { return m_path; }
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    virtual bool hasRelativePath() const { return false; }
&gt; +#endif
&gt; +
&gt;      // BlobItem methods.
&gt;      virtual unsigned long long size() const;
&gt;      virtual const FileBlobItem* toFileBlobItem() const { return this; }
&gt; @@ -124,6 +128,20 @@ protected:
&gt;      String m_fileName;
&gt;  };
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +class RelativePathFileBlobItem : public FileBlobItem {
&gt; +public:
&gt; +    static PassRefPtr&lt;BlobItem&gt; create(const String&amp; path, const String&amp; relativePath);
&gt; +    virtual bool hasRelativePath() const { return true; }
&gt; +
&gt; +    const String&amp; relativePath() const { return m_relativePath; }
&gt; +
&gt; +protected:
&gt; +    RelativePathFileBlobItem(const String&amp; path, const String&amp; relativePath);
&gt; +    String m_relativePath;
&gt; +};
&gt; +#endif
&gt; +
&gt;  class StringBlobItem : public DataBlobItem {
&gt;  public:
&gt;      static PassRefPtr&lt;BlobItem&gt; create(const String&amp;, LineEnding, TextEncoding);
&gt; Index: WebCore/platform/FileChooser.h
&gt; ===================================================================
&gt; --- WebCore/platform/FileChooser.h	(revision 61458)
&gt; +++ WebCore/platform/FileChooser.h	(working copy)
&gt; @@ -44,6 +44,9 @@ public:
&gt;      virtual void valueChanged() = 0;
&gt;      virtual void repaint() = 0;
&gt;      virtual bool allowsMultipleFiles() = 0;
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    virtual bool allowsDirectoryUpload() = 0;
&gt; +#endif
&gt;      virtual String acceptTypes() = 0;
&gt;      virtual void chooseIconForFiles(FileChooser*, const Vector&lt;String&gt;&amp;) = 0;
&gt;      virtual ~FileChooserClient();
&gt; @@ -70,6 +73,9 @@ public:
&gt;      void iconLoaded(PassRefPtr&lt;Icon&gt;);
&gt;  
&gt;      bool allowsMultipleFiles() const { return m_client ? m_client-&gt;allowsMultipleFiles() : false; }
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    bool allowsDirectoryUpload() const { return m_client ? m_client-&gt;allowsDirectoryUpload() : false; }
&gt; +#endif
&gt;      // Acceptable MIME types.  It&apos;s an &apos;accept&apos; attribute value of the corresponding INPUT element.
&gt;      String acceptTypes() const { return m_client ? m_client-&gt;acceptTypes() : String(); }
&gt;  
&gt; Index: WebCore/platform/network/FormData.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/network/FormData.cpp	(revision 61458)
&gt; +++ WebCore/platform/network/FormData.cpp	(working copy)
&gt; @@ -225,7 +225,14 @@ void FormData::appendKeyValuePairItems(c
&gt;              const FileBlobItem* fileItem = value-&gt;toFileBlobItem();
&gt;              if (fileItem) {
&gt;                  const String&amp; path = fileItem-&gt;path();
&gt; +
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +                String fileName = fileItem-&gt;hasRelativePath() ?
&gt; +                    static_cast&lt;const RelativePathFileBlobItem*&gt;(fileItem)-&gt;relativePath() :
&gt; +                    fileItem-&gt;name();
&gt; +#else
&gt;                  String fileName = fileItem-&gt;name();
&gt; +#endif
&gt;  
&gt;                  // Let the application specify a filename if it&apos;s going to generate a replacement file for the upload.
&gt;                  if (!path.isEmpty()) {
&gt; Index: WebCore/rendering/RenderFileUploadControl.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderFileUploadControl.cpp	(revision 61458)
&gt; +++ WebCore/rendering/RenderFileUploadControl.cpp	(working copy)
&gt; @@ -98,6 +98,14 @@ bool RenderFileUploadControl::allowsMult
&gt;      return !input-&gt;getAttribute(multipleAttr).isNull();
&gt;  }
&gt;  
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +bool RenderFileUploadControl::allowsDirectoryUpload()
&gt; +{
&gt; +    HTMLInputElement* input = static_cast&lt;HTMLInputElement*&gt;(node());
&gt; +    return !input-&gt;getAttribute(directoryAttr).isNull();
&gt; +}
&gt; +#endif
&gt; +
&gt;  String RenderFileUploadControl::acceptTypes()
&gt;  {
&gt;      return static_cast&lt;HTMLInputElement*&gt;(node())-&gt;accept();
&gt; Index: WebCore/rendering/RenderFileUploadControl.h
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderFileUploadControl.h	(revision 61458)
&gt; +++ WebCore/rendering/RenderFileUploadControl.h	(working copy)
&gt; @@ -62,6 +62,9 @@ private:
&gt;      void valueChanged();
&gt;      void repaint() { RenderBlock::repaint(); }
&gt;      bool allowsMultipleFiles();
&gt; +#if ENABLE(DIRECTORY_UPLOAD)
&gt; +    bool allowsDirectoryUpload();
&gt; +#endif
&gt;      String acceptTypes();
&gt;      void chooseIconForFiles(FileChooser*, const Vector&lt;String&gt;&amp;);
&gt;  

WebCore/html/Blob.cpp:48
 +      m_items.append(item);
Quick drive-by comment: I think it&apos;s more efficient to pass in a PassRefPtr instead, as you can avoid an extra ref/deref in the case where the caller doesn&apos;t want to hold on to a reference (in fact, I think in your File constructor you are passing in a PassRefPtr anyway, which means the caller has to instantiate an extra temporary RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240796</commentid>
    <comment_count>3</comment_count>
      <attachid>59269</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-21 11:55:26 -0700</bug_when>
    <thetext>Created attachment 59269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240800</commentid>
    <comment_count>4</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-21 12:04:05 -0700</bug_when>
    <thetext>(In reply to comment #2)

&gt; WebCore/html/Blob.cpp:48
&gt;  +      m_items.append(item);
&gt; Quick drive-by comment: I think it&apos;s more efficient to pass in a PassRefPtr
&gt; instead, as you can avoid an extra ref/deref in the case where the caller 
&gt; doesn&apos;t want to hold on to a reference (in fact, I think in your File 
&gt; constructor you are passing in a PassRefPtr anyway, which means the caller
&gt; has to instantiate an extra temporary RefPtr.

Fixed in updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241702</commentid>
    <comment_count>5</comment_count>
      <attachid>59269</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-06-23 00:04:50 -0700</bug_when>
    <thetext>Comment on attachment 59269
Patch


We need more preparation to introduce new feature flag.
https://bugs.webkit.org/show_bug.cgi?id=40878 is a good example.

WebCore/html/HTMLInputElement.cpp:1975
 +              if (!paths[i].startsWith(rootPath)) {
Do we accept multiple directories?
If so and &apos;paths&apos; contains the followings, full path names are exposed, right?
  - C:/data/1.jpg
  - C:/data/2.jpg
  - E:/data/1.jpg


WebCore/html/HTMLInputElement.cpp:1977
 +                  i = 0;
Why go back to 0?


WebCore/html/HTMLInputElement.h:190
 +      bool directory() const;
Do you need directory() and setDirectory()?  If you don&apos;t use them in C++ code, we can remove them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242091</commentid>
    <comment_count>6</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-23 14:40:17 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 59269 [details])
&gt; 
&gt; We need more preparation to introduce new feature flag.
&gt; https://bugs.webkit.org/show_bug.cgi?id=40878 is a good example.
&gt; 

Yes, I am intentionally doing that separately to avoid the noise in this review.  I&apos;ve now posted it to https://bugs.webkit.org/show_bug.cgi?id=41100

&gt; WebCore/html/HTMLInputElement.cpp:1975
&gt;  +              if (!paths[i].startsWith(rootPath)) {
&gt; Do we accept multiple directories?
&gt; If so and &apos;paths&apos; contains the followings, full path names are exposed, right?
&gt;   - C:/data/1.jpg
&gt;   - C:/data/2.jpg
&gt;   - E:/data/1.jpg

The UI will only allow one directory to be chosen, so this shouldn&apos;t happen.  Do you think I should add more protection for that?

&gt; 
&gt; WebCore/html/HTMLInputElement.cpp:1977
&gt;  +                  i = 0;
&gt; Why go back to 0?

It&apos;s necessary for cases like
root/a/b/c.txt
root/d/e/f.txt

If I don&apos;t go back to the start, I will miss the fact that the root is 3 levels up.  Alternatively I could change if (!paths[i].startsWith(rootPath)) to be while (...).

&gt; 
&gt; 
&gt; WebCore/html/HTMLInputElement.h:190
&gt;  +      bool directory() const;
&gt; Do you need directory() and setDirectory()?  If you don&apos;t use them in C++ code, we can remove them.

I do use directory() in code, but not setDirectory.  I can take that out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242795</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-06-24 20:27:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Do we accept multiple directories?

&gt; The UI will only allow one directory to be chosen, so this shouldn&apos;t happen.  Do you think I should add more protection for that?

I see.  I think we need a comment and ASSERT(rootPath.length())

&gt; &gt; WebCore/html/HTMLInputElement.cpp:1977
&gt; &gt;  +                  i = 0;
&gt; &gt; Why go back to 0?
&gt; 
&gt; It&apos;s necessary for cases like
&gt; root/a/b/c.txt
&gt; root/d/e/f.txt
&gt; 
&gt; If I don&apos;t go back to the start, I will miss the fact that the root is 3 levels up.  Alternatively I could change if (!paths[i].startsWith(rootPath)) to be while (...).

Understand.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244449</commentid>
    <comment_count>8</comment_count>
      <attachid>60044</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-29 13:14:35 -0700</bug_when>
    <thetext>Created attachment 60044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244464</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 13:49:36 -0700</bug_when>
    <thetext>Attachment 60044 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3383003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244498</commentid>
    <comment_count>10</comment_count>
      <attachid>60059</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-29 14:48:49 -0700</bug_when>
    <thetext>Created attachment 60059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244589</commentid>
    <comment_count>11</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-06-29 18:36:38 -0700</bug_when>
    <thetext>HTMLInputElement and FileChooser parts look ok.
Jian,  would you take a look at Blob part please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245051</commentid>
    <comment_count>12</comment_count>
      <attachid>60059</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-30 18:41:02 -0700</bug_when>
    <thetext>Comment on attachment 60059
Patch

FYI, I am in refactoring File and Blob in order to better support all kinds of blob scenarios. The BlobItem will probably go away while we will introduce BlobDataItem that is managed by centralized BlobRegistry. Not sure how we can get things resolved and merged.

WebCore/html/File.idl:33
 +  #if defined(ENABLE_DIRECTORY_UPLOAD) &amp;&amp; ENABLE_DIRECTORY_UPLOAD
We should use &quot;Conditional&quot; here, like 
  readonly attribute [Conditional=DIRECTORY_UPLOAD] DOMString path; 

WebCore/platform/BlobItem.h:115
 +      virtual bool hasRelativePath() const { return false; }
Why not just having &quot;const String&amp; relativePath()&quot; in FileBlobItem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245054</commentid>
    <comment_count>13</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-06-30 18:49:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 60059 [details])
&gt; FYI, I am in refactoring File and Blob in order to better support all kinds of blob scenarios. The BlobItem will probably go away while we will introduce BlobDataItem that is managed by centralized BlobRegistry. Not sure how we can get things resolved and merged.

:(  I&apos;ve already rewritten this code once to deal with the last File/Blob refactor.  What is your timeframe for that?

&gt; 
&gt; WebCore/html/File.idl:33
&gt;  +  #if defined(ENABLE_DIRECTORY_UPLOAD) &amp;&amp; ENABLE_DIRECTORY_UPLOAD
&gt; We should use &quot;Conditional&quot; here, like 
&gt;   readonly attribute [Conditional=DIRECTORY_UPLOAD] DOMString path; 

Seems okay, but the other style is far more prevalent in webkit IDL

&gt; WebCore/platform/BlobItem.h:115
&gt;  +      virtual bool hasRelativePath() const { return false; }
&gt; Why not just having &quot;const String&amp; relativePath()&quot; in FileBlobItem?

I think the relative path should only be included in the form-data if it&apos;s a directory upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245688</commentid>
    <comment_count>14</comment_count>
      <attachid>60322</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-01 17:52:39 -0700</bug_when>
    <thetext>Created attachment 60322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245689</commentid>
    <comment_count>15</comment_count>
      <attachid>60323</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-01 17:57:41 -0700</bug_when>
    <thetext>Created attachment 60323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245848</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 03:03:39 -0700</bug_when>
    <thetext>Attachment 60323 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3391078</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245856</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 03:17:13 -0700</bug_when>
    <thetext>Attachment 60323 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3350339</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245945</commentid>
    <comment_count>18</comment_count>
      <attachid>60374</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-02 10:00:47 -0700</bug_when>
    <thetext>Created attachment 60374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245958</commentid>
    <comment_count>19</comment_count>
      <attachid>60374</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-02 10:29:32 -0700</bug_when>
    <thetext>Comment on attachment 60374
Patch

WebCore/ChangeLog:5
 +          Experimental feature of directory attribute on &lt;input type=&quot;file&quot;&gt; which
Please first have the title, like the bug title and then follow by the bug link. After that, you can give the full description. Like:
  Experimental directory upload.
  https://bugs.webkit.org/show_bug.cgi?id=40872

  Experimental feature of directory attribute on ...

Do you have the test to cover this new feature?

WebCore/html/File.cpp:50
 +  File::File(const String&amp; relativePath, const String&amp; filePath)
Please move this constructor above File::Init().

WebCore/html/File.h:53
 +      const String&amp; path() const;
Do we need to expose this? I am not seeing any reference to it.
If you do want to expose this, please add the comment to document this path is relative path and also change Blob::path() to Blob::fullPath() to avoid the confusion.

WebCore/html/File.idl:34
 +          readonly attribute DOMString path;
Better to use Conditional attribute instead of &quot;#if defined&quot;. Please also comment that we only expose relative path.

WebCore/html/HTMLInputElement.idl:44
 +          attribute [Reflect] boolean webkitdirectory;
Better to use Conditional attribute.

WebCore/html/HTMLInputElement.cpp:1973
 +      // and the paths provided here share a single root directory.
The comment &quot;the paths provided here share a single root directory&quot; seems not to reflect what is coded here.

WebCore/html/HTMLInputElement.cpp:1977
 +          for (int i = 0; i &lt; size; i++) {
We can start from 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245962</commentid>
    <comment_count>20</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-02 10:31:32 -0700</bug_when>
    <thetext>&gt; WebCore/html/File.h:53
&gt;  +      const String&amp; path() const;
&gt; Do we need to expose this? I am not seeing any reference to it.
&gt; If you do want to expose this, please add the comment to document this path is relative path and also change Blob::path() to Blob::fullPath() to avoid the confusion.
&gt;

Sorry, I just realized that it is exposed in File.idl. Please address my 2nd comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245983</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 11:17:10 -0700</bug_when>
    <thetext>Attachment 60374 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3380148</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247810</commentid>
    <comment_count>22</comment_count>
      <attachid>60791</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-07 15:42:42 -0700</bug_when>
    <thetext>Created attachment 60791
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247904</commentid>
    <comment_count>23</comment_count>
      <attachid>60791</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-07 17:55:11 -0700</bug_when>
    <thetext>Comment on attachment 60791
Patch

Where is WebCore/ChangeLog?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247909</commentid>
    <comment_count>24</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-07 17:59:39 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 60791 [details])
&gt; Where is WebCore/ChangeLog?

It was in SVN conflict state so it didn&apos;t get uploaded.  Uploading again now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247925</commentid>
    <comment_count>25</comment_count>
      <attachid>60820</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-07 18:27:36 -0700</bug_when>
    <thetext>Created attachment 60820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249324</commentid>
    <comment_count>26</comment_count>
      <attachid>60820</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-09 15:35:53 -0700</bug_when>
    <thetext>Comment on attachment 60820
Patch

WebCore/html/File.h:53
 +      const String&amp; path() const;
Please comment that we&apos;re returning a relative path here. Please also change Blob::path() to Blob::absolutePath() to avoid the confusion.

LayoutTests/fast/forms/input-file-directory-upload.html:9
 +      {&apos;path&apos;: &apos;resources/dirupload/path1/file1&apos;,                   &apos;relpath&apos;: &apos;dirupload/path1/file1&apos;},
Do we really need both &apos;path&apos; and &apos;relpath&quot;? Can we just keep relpath in the list and have the map function inserts &apos;resource/&apos; at the beginning? 

Can we add some test cases to try to cover as many scenarios as possible, like:
  1) dirupload/path1/file1, dirupload/path1/file2
  2) dirupload/path1/file1, dirupload/path1/path2/file1
  ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249951</commentid>
    <comment_count>27</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-12 12:11:37 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 60820 [details])
&gt; WebCore/html/File.h:53
&gt;  +      const String&amp; path() const;
&gt; Please comment that we&apos;re returning a relative path here. Please also change Blob::path() to Blob::absolutePath() to avoid the confusion.

To avoid the confusion completely, I have renamed File::path() to File::webkitRelativePath(), which is a better interface name for this experimental feature, and left Blob unchanged.  I also added the comment.

&gt; 
&gt; LayoutTests/fast/forms/input-file-directory-upload.html:9
&gt;  +      {&apos;path&apos;: &apos;resources/dirupload/path1/file1&apos;,                   &apos;relpath&apos;: &apos;dirupload/path1/file1&apos;},
&gt; Do we really need both &apos;path&apos; and &apos;relpath&quot;? Can we just keep relpath in the list and have the map function inserts &apos;resource/&apos; at the beginning? 

I changed this to be more clear.  &apos;relpath&apos; is storing the expected relative path to result from &apos;path&apos;.  If we derive one from the other it somewhat defeats the point of the test (and makes other test cases harder), so I renamed &apos;relpath&apos; to &apos;expected-relpath&apos;.

&gt; 
&gt; Can we add some test cases to try to cover as many scenarios as possible, like:
&gt;   1) dirupload/path1/file1, dirupload/path1/file2
&gt;   2) dirupload/path1/file1, dirupload/path1/path2/file1
&gt;   ...

I added several more test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249953</commentid>
    <comment_count>28</comment_count>
      <attachid>61254</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-12 12:13:34 -0700</bug_when>
    <thetext>Created attachment 61254
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250890</commentid>
    <comment_count>29</comment_count>
      <attachid>61254</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-13 18:23:12 -0700</bug_when>
    <thetext>Comment on attachment 61254
Patch

I only see the file &quot;mac/Skipped&quot;, not other Skipped files. By the way, have you also tested it on the chromium platform?

LayoutTests/ChangeLog:5
 +          Unit test for experimental directory upload feature.  Only enabled on chromium since that&apos;s where the feature is compiled in.
Please remove &quot;Unit&quot; since this is not called unit test in WebKit.

LayoutTests/fast/forms/input-file-directory-upload.html:8
 +  var currentFileList_;
Please do not add the trailing &quot;_&quot; for the variable.

LayoutTests/fast/forms/input-file-directory-upload.html:9
 +  var lastTest_ = false;
ditto.

LayoutTests/fast/forms/input-file-directory-upload.html:60
 +      currentFileList_ = fileList;
Is it possible to avoid using global variables?
Also, is there any possibility we have some sort of indeterminism here? What I mean is that: do we always execute the JS code in the following order:
  doTest(testFileList1)
  onInputFileChange
  doTest(testFileList2)
  onInputFileChange
  ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250991</commentid>
    <comment_count>30</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-13 23:31:41 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 61254 [details])
&gt; I only see the file &quot;mac/Skipped&quot;, not other Skipped files. By the way, have you also tested it on the chromium platform?
&gt; 

More merge conflicts.   Fixed now.  After this I think it&apos;s time to change webkit-patch not to upload when there are conflicts.

&gt; LayoutTests/ChangeLog:5
&gt;  +          Unit test for experimental directory upload feature.  Only enabled on chromium since that&apos;s where the feature is compiled in.
&gt; Please remove &quot;Unit&quot; since this is not called unit test in WebKit.
&gt; 

Done.  &quot;Layout test&quot;

&gt; LayoutTests/fast/forms/input-file-directory-upload.html:8
&gt;  +  var currentFileList_;
&gt; Please do not add the trailing &quot;_&quot; for the variable.
&gt; 

Done.

&gt; LayoutTests/fast/forms/input-file-directory-upload.html:9
&gt;  +  var lastTest_ = false;
&gt; ditto.
&gt; 

Done.

&gt; LayoutTests/fast/forms/input-file-directory-upload.html:60
&gt;  +      currentFileList_ = fileList;
&gt; Is it possible to avoid using global variables?

Okay, I rearranged things to not use the globals.

&gt; Also, is there any possibility we have some sort of indeterminism here? What I mean is that: do we always execute the JS code in the following order:
&gt;   doTest(testFileList1)
&gt;   onInputFileChange
&gt;   doTest(testFileList2)
&gt;   onInputFileChange
&gt;   ...

This certainly seems to be the case, that the drag events are queued up in order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250993</commentid>
    <comment_count>31</comment_count>
      <attachid>61474</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-13 23:37:23 -0700</bug_when>
    <thetext>Created attachment 61474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251568</commentid>
    <comment_count>32</comment_count>
      <attachid>61474</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-07-14 18:26:36 -0700</bug_when>
    <thetext>Comment on attachment 61474
Patch

r=me

Minor comment. Please address it before landing your patch.

WebCore/html/File.h:43
 +      static PassRefPtr&lt;File&gt; create(const String&amp; relativePath, const String&amp; file)
Please change the argument name from &apos;file&apos; to &apos;path&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252065</commentid>
    <comment_count>33</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2010-07-15 13:37:37 -0700</bug_when>
    <thetext>Committed r63454: &lt;http://trac.webkit.org/changeset/63454&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59176</attachid>
            <date>2010-06-18 20:41:32 -0700</date>
            <delta_ts>2010-06-21 11:55:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100618204131.patch</filename>
            <type>text/plain</type>
            <size>14074</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTQ2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDYtMTggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGZlYXR1cmUgb2YgZGlyZWN0b3J5IGF0dHJpYnV0ZSBvbiA8aW5wdXQgdHlwZT0i
ZmlsZSI+IHdoaWNoCisgICAgICAgIGVuYWJsZXMgdGhlIE9TIHRvIHByZXNlbnQgYSBmb2xkZXIg
cGlja2VyIGluc3RlYWQgb2YgYSBmaWxlIHBpY2tlciBkaWFsb2cuCisKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6SW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpwYXRoKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9GaWxlLmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RG
cm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlyZWN0
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldERpcmVjdG9yeSk6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9iSXRlbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW06OlJlbGF0aXZlUGF0aEZpbGVCbG9i
SXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVCbG9iSXRlbTo6aGFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0
aXZlUGF0aEZpbGVCbG9iSXRlbTo6aGFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbTo6cmVsYXRpdmVQYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9GaWxlQ2hvb3Nlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmFsbG93
c0RpcmVjdG9yeVVwbG9hZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzRGlyZWN0b3J5VXBs
b2FkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaDoKKwog
MjAxMC0wNi0xOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9CbG9iLmNwcAkocmV2aXNpb24gNjE0NTgpCisr
KyBXZWJDb3JlL2h0bWwvQmxvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDExIEBA
IEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG8KICAgICAgICAgbV9pdGVt
cy5hcHBlbmQoaXRlbXNbaV0pOwogfQogCitCbG9iOjpCbG9iKGNvbnN0IFJlZlB0cjxCbG9iSXRl
bT4mIGl0ZW0pCit7CisgICAgbV9pdGVtcy5hcHBlbmQoaXRlbSk7Cit9CisKIEJsb2I6OkJsb2Io
Y29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFs
aXplIHRoZSB0eXBlIHVubGlrZSBGaWxlKHBhdGgpLgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQmxvYi5oCShyZXZpc2lvbiA2MTQ1OCkKKysr
IFdlYkNvcmUvaHRtbC9CbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHVi
bGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgQmxvYihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJs
b2JJdGVtTGlzdCYpOworICAgIEJsb2IoY29uc3QgUmVmUHRyPEJsb2JJdGVtPiYpOwogCiAgICAg
Ly8gRklYTUU6IERlcHJlY2F0ZWQgY29uc3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBm
b3IgQmxvYjo6Y3JlYXRlKHBhdGgpLgogICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmls
ZS5jcHAJKHJldmlzaW9uIDYxNDU4KQorKysgV2ViQ29yZS9odG1sL0ZpbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBGaWxlOjpGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IEJsb2IocGF0aCkKIHsKKyAgICBJbml0KCk7Cit9
CisKK3ZvaWQgRmlsZTo6SW5pdCgpCit7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBlUmVn
aXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtIiB1cG9uIGZhaWx1cmUuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSA9IG5hbWUoKTsKICAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOwpA
QCAtNDEsOSArNDYsMjcgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgICAg
IG1fdHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVO
YW1lLnN1YnN0cmluZyhpbmRleCArIDEpKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBM
T0FEKQorRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCkKKyAgICA6IEJsb2IoUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtOjpjcmVhdGUo
ZmlsZVBhdGgsIHJlbGF0aXZlUGF0aCkpCit7CisgICAgSW5pdCgpOworfQorI2VuZGlmCisKIGNv
bnN0IFN0cmluZyYgRmlsZTo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGl0ZW1zKCkuYXQo
MCktPnRvRmlsZUJsb2JJdGVtKCktPm5hbWUoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorY29uc3QgU3RyaW5nJiBGaWxlOjpwYXRoKCkgY29uc3QKK3sKKyAgICBjb25zdCBG
aWxlQmxvYkl0ZW0qIGl0ZW0gPSBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpOworICAg
IGlmIChpdGVtLT5oYXNSZWxhdGl2ZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbSo+KGl0ZW0pLT5yZWxhdGl2ZVBhdGgoKTsK
KyAgICByZXR1cm4gbmFtZSgpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Zp
bGUuaAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw5ICszOSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRmlsZShwYXRoKSk7CiAgICAgfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQ
YXRoLCBjb25zdCBTdHJpbmcmIGZpbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZpbGUocmVsYXRpdmVQYXRoLCBmaWxlKSk7CisgICAgfQorI2VuZGlmCisKICAgICB2aXJ0
dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3Q7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgY29u
c3QgU3RyaW5nJiBwYXRoKCkgY29uc3Q7CisjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBvYnNvbGV0
ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVkLgogICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUo
KSBjb25zdCB7IHJldHVybiBuYW1lKCk7IH0KQEAgLTQ5LDYgKzU5LDExIEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBJbml0KCk7
CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBGaWxlKGNvbnN0IFN0cmluZyYg
cmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOworI2VuZGlmCiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0ZpbGUuaWRsCShyZXZpc2lvbiA2MTQ1OCkKKysrIFdlYkNvcmUvaHRt
bC9GaWxlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gRmlsZSA6IEJsb2IgewogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CisjaWYgZGVmaW5lZChFTkFCTEVfRElSRUNU
T1JZX1VQTE9BRCkgJiYgRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBwYXRoOworI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUU6IG9i
c29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJlIHJlbW92ZWQuCiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgZmlsZU5hbWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0
ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMu
aW4JKHJldmlzaW9uIDYxNDU4KQorKysgV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBkZWNsYXJlCiBkZWZlcgogZGlyCiBk
aXJlY3Rpb24KK2RpcmVjdG9yeQogZGlzYWJsZWQKIGRyYWdnYWJsZQogZW5jdHlwZQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjYsOCArMTk2Niwy
OCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlCiB7CiAgICAgbV9m
aWxlTGlzdC0+Y2xlYXIoKTsKICAgICBpbnQgc2l6ZSA9IHBhdGhzLnNpemUoKTsKKworI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGlmIChkaXJlY3RvcnkoKSAmJiBzaXplID4gMCkg
eworICAgICAgICBTdHJpbmcgcm9vdFBhdGggPSBkaXJlY3RvcnlOYW1lKHBhdGhzWzBdKTsKKyAg
ICAgICAgLy8gRmluZCB0aGUgY29tbW9uIHJvb3QgcGF0aC4KKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghcGF0aHNbaV0uc3RhcnRzV2l0
aChyb290UGF0aCkpIHsKKyAgICAgICAgICAgICAgICByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUo
cm9vdFBhdGgpOworICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgbV9maWxlTGlzdC0+
YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXS5zdWJzdHJpbmcoMSArIHJvb3RQYXRoLmxlbmd0
aCgpKSwgcGF0aHNbaV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVh
dGUocGF0aHNbaV0pKTsKKyAgICB9CisjZWxzZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKQogICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ld
KSk7CisjZW5kaWYKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1
ZSk7CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwpAQCAt
MjQ4Niw3ICsyNTA2LDE5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0TXVsdGlwbGUoYm9v
bCAKIHsKICAgICBzZXRBdHRyaWJ1dGUobXVsdGlwbGVBdHRyLCBtdWx0aXBsZSA/ICIiIDogMCk7
CiB9Ci0gICAgCisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jvb2wgSFRNTElucHV0
RWxlbWVudDo6ZGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShk
aXJlY3RvcnlBdHRyKS5pc051bGwoKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRE
aXJlY3RvcnkoYm9vbCBkaXJlY3RvcnkpCit7CisgICAgc2V0QXR0cmlidXRlKGRpcmVjdG9yeUF0
dHIsIGRpcmVjdG9yeSA/ICIiIDogMCk7Cit9CisjZW5kaWYKKwogdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRTaXplKHVuc2lnbmVkIHNpemUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHNpemVBdHRy
LCBTdHJpbmc6Om51bWJlcihzaXplKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJl
dmlzaW9uIDYxNDU4KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg2LDYgKzE4NiwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBtdWx0aXBsZSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0TXVsdGlwbGUoYm9vbCk7CiAKKyNpZiBFTkFCTEUoRElSRUNU
T1JZX1VQTE9BRCkKKyAgICBib29sIGRpcmVjdG9yeSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGly
ZWN0b3J5KGJvb2wpOworI2VuZGlmCisKICAgICBTdHJpbmcgdXNlTWFwKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRVc2VNYXAoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5pZGwJKHJldmlzaW9uIDYxNDU4KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw5IEBAIG1vZHVsZSBodG1sIHsKICAg
ICAgICAgYXR0cmlidXRlIGxvbmcgbWF4TGVuZ3RoIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbWluOwogICAgICAgICBh
dHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gbXVsdGlwbGU7CisjaWYgZGVmaW5lZChFTkFCTEVf
RElSRUNUT1JZX1VQTE9BRCkgJiYgRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAgICAgYXR0
cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIGRpcmVjdG9yeTsKKyNlbmRpZgogICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBuYW1lOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxl
Y3RdIERPTVN0cmluZyBwYXR0ZXJuOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0
cmluZyBwbGFjZWhvbGRlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCShyZXZpc2lvbiA2MTQ1
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsNiArMTAyLDIyIEBAIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVCbG9iSXRlbTo6c2xpY2UK
IH0KICNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKIAorI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorLy8gUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRp
Y19jYXN0PEJsb2JJdGVtKj4obmV3IFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbShwYXRoLCByZWxh
dGl2ZVBhdGgpKSk7Cit9CisKK1JlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbTo6UmVsYXRpdmVQYXRo
RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBh
dGgpCisgICAgOiBGaWxlQmxvYkl0ZW0ocGF0aCkKKyAgICAsIG1fcmVsYXRpdmVQYXRoKHJlbGF0
aXZlUGF0aCkKK3sKK30KKworI2VuZGlmCisKIC8vIFN0cmluZ0Jsb2JJdGVtIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0
ZXh0LCBMaW5lRW5kaW5nIGVuZGluZywgVGV4dEVuY29kaW5nIGVuY29kaW5nKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
QmxvYkl0ZW0uaAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQogICAg
IHZpcnR1YWwgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAK
KyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRp
dmVQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCiAgICAgLy8gQmxvYkl0
ZW0gbWV0aG9kcy4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3Qg
eyByZXR1cm4gdGhpczsgfQpAQCAtMTI0LDYgKzEyOCwyMCBAQCBwcm90ZWN0ZWQ6CiAgICAgU3Ry
aW5nIG1fZmlsZU5hbWU7CiB9OwogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCitjbGFz
cyBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW0gOiBwdWJsaWMgRmlsZUJsb2JJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpOworICAgIHZpcnR1YWwgYm9vbCBoYXNS
ZWxhdGl2ZVBhdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBjb25zdCBTdHJpbmcm
IHJlbGF0aXZlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVQYXRoOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7CisgICAgU3RyaW5nIG1fcmVsYXRpdmVQYXRoOwor
fTsKKyNlbmRpZgorCiBjbGFzcyBTdHJpbmdCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0g
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiwgTGluZUVuZGluZywgVGV4dEVuY29kaW5nKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vRmlsZUNob29zZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9v
c2VyLmgJKHJldmlzaW9uIDYxNDU4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgdmFsdWVDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KCkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCkgPSAwOworI2lmIEVOQUJMRShE
SVJFQ1RPUllfVVBMT0FEKQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQo
KSA9IDA7CisjZW5kaWYKICAgICB2aXJ0dWFsIFN0cmluZyBhY2NlcHRUeXBlcygpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mKSA9IDA7CiAgICAgdmlydHVhbCB+RmlsZUNob29zZXJDbGllbnQoKTsKQEAg
LTcwLDYgKzczLDkgQEAgcHVibGljOgogICAgIHZvaWQgaWNvbkxvYWRlZChQYXNzUmVmUHRyPElj
b24+KTsKIAogICAgIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50ID8gbV9jbGllbnQtPmFsbG93c011bHRpcGxlRmlsZXMoKSA6IGZhbHNlOyB9CisjaWYg
RU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQo
KSBjb25zdCB7IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5hbGxvd3NEaXJlY3RvcnlVcGxv
YWQoKSA6IGZhbHNlOyB9CisjZW5kaWYKICAgICAvLyBBY2NlcHRhYmxlIE1JTUUgdHlwZXMuICBJ
dCdzIGFuICdhY2NlcHQnIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBJTlBV
VCBlbGVtZW50LgogICAgIFN0cmluZyBhY2NlcHRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
ZW50ID8gbV9jbGllbnQtPmFjY2VwdFR5cGVzKCkgOiBTdHJpbmcoKTsgfQogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDYxNDU4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcg
KzIyNSwxNCBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjCiAgICAg
ICAgICAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdmFsdWUtPnRvRmlsZUJsb2JJ
dGVtKCk7CiAgICAgICAgICAgICBpZiAoZmlsZUl0ZW0pIHsKICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHBhdGggPSBmaWxlSXRlbS0+cGF0aCgpOworCisjaWYgRU5BQkxFKERJUkVDVE9S
WV9VUExPQUQpCisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZUl0ZW0tPmhh
c1JlbGF0aXZlUGF0aCgpID8KKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtKj4oZmlsZUl0ZW0pLT5yZWxhdGl2ZVBhdGgoKSA6Cisg
ICAgICAgICAgICAgICAgICAgIGZpbGVJdGVtLT5uYW1lKCk7CisjZWxzZQogICAgICAgICAgICAg
ICAgIFN0cmluZyBmaWxlTmFtZSA9IGZpbGVJdGVtLT5uYW1lKCk7CisjZW5kaWYKIAogICAgICAg
ICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0
J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgog
ICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDYxNDU4KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw2ICs5OCwxNCBAQCBib29sIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjph
bGxvd3NNdWx0CiAgICAgcmV0dXJuICFpbnB1dC0+Z2V0QXR0cmlidXRlKG11bHRpcGxlQXR0ciku
aXNOdWxsKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jvb2wgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpCit7CisgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICByZXR1cm4gIWlucHV0LT5nZXRBdHRyaWJ1dGUoZGlyZWN0b3J5QXR0cikuaXNOdWxs
KCk7Cit9CisjZW5kaWYKKwogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphY2NlcHRU
eXBlcygpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2Rl
KCkpLT5hY2NlcHQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wuaAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB2YWx1ZUNoYW5nZWQoKTsKICAgICB2b2lkIHJlcGFpbnQoKSB7IFJlbmRl
ckJsb2NrOjpyZXBhaW50KCk7IH0KICAgICBib29sIGFsbG93c011bHRpcGxlRmlsZXMoKTsKKyNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9h
ZCgpOworI2VuZGlmCiAgICAgU3RyaW5nIGFjY2VwdFR5cGVzKCk7CiAgICAgdm9pZCBjaG9vc2VJ
Y29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59269</attachid>
            <date>2010-06-21 11:55:26 -0700</date>
            <delta_ts>2010-06-29 13:14:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100621115524.patch</filename>
            <type>text/plain</type>
            <size>14082</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTQ2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDYtMTggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGZlYXR1cmUgb2YgZGlyZWN0b3J5IGF0dHJpYnV0ZSBvbiA8aW5wdXQgdHlwZT0i
ZmlsZSI+IHdoaWNoCisgICAgICAgIGVuYWJsZXMgdGhlIE9TIHRvIHByZXNlbnQgYSBmb2xkZXIg
cGlja2VyIGluc3RlYWQgb2YgYSBmaWxlIHBpY2tlciBkaWFsb2cuCisKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6SW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpwYXRoKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9GaWxlLmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RG
cm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlyZWN0
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldERpcmVjdG9yeSk6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9iSXRlbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW06OlJlbGF0aXZlUGF0aEZpbGVCbG9i
SXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVCbG9iSXRlbTo6aGFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0
aXZlUGF0aEZpbGVCbG9iSXRlbTo6aGFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbTo6cmVsYXRpdmVQYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9GaWxlQ2hvb3Nlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmFsbG93
c0RpcmVjdG9yeVVwbG9hZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzRGlyZWN0b3J5VXBs
b2FkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaDoKKwog
MjAxMC0wNi0xOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9CbG9iLmNwcAkocmV2aXNpb24gNjE0NTgpCisr
KyBXZWJDb3JlL2h0bWwvQmxvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDExIEBA
IEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG8KICAgICAgICAgbV9pdGVt
cy5hcHBlbmQoaXRlbXNbaV0pOwogfQogCitCbG9iOjpCbG9iKGNvbnN0IFBhc3NSZWZQdHI8Qmxv
Ykl0ZW0+JiBpdGVtKQoreworICAgIG1faXRlbXMuYXBwZW5kKGl0ZW0pOworfQorCiBCbG9iOjpC
bG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5p
dGlhbGl6ZSB0aGUgdHlwZSB1bmxpa2UgRmlsZShwYXRoKS4KSW5kZXg6IFdlYkNvcmUvaHRtbC9C
bG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jsb2IuaAkocmV2aXNpb24gNjE0NTgp
CisrKyBXZWJDb3JlL2h0bWwvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBA
IHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEJsb2IoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBCbG9iSXRlbUxpc3QmKTsKKyAgICBCbG9iKGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+Jik7
CiAKICAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBjb25zdHJ1Y3Rvci4gIFNlZSBhbHNvIHRoZSBj
b21tZW50IGZvciBCbG9iOjpjcmVhdGUocGF0aCkuCiAgICAgQmxvYihjb25zdCBTdHJpbmcmIHBh
dGgpOwpJbmRleDogV2ViQ29yZS9odG1sL0ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9GaWxlLmNwcAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEZp
bGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogQmxvYihwYXRoKQogeworICAgIElu
aXQoKTsKK30KKwordm9pZCBGaWxlOjpJbml0KCkKK3sKICAgICAvLyBXZSBkb24ndCB1c2UgTUlN
RVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKCkgYmVjYXVzZSBpdCByZXR1cm5zICJh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIHVwb24gZmFpbHVyZS4KICAgICBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lID0gbmFtZSgpOwogICAgIGludCBpbmRleCA9IGZpbGVOYW1lLnJldmVyc2VGaW5k
KCcuJyk7CkBAIC00MSw5ICs0NiwyNyBAQCBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
ICAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNp
b24oZmlsZU5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSkpOwogfQogCisjaWYgRU5BQkxFKERJUkVD
VE9SWV9VUExPQUQpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKQorICAgIDogQmxvYihSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW06
OmNyZWF0ZShmaWxlUGF0aCwgcmVsYXRpdmVQYXRoKSkKK3sKKyAgICBJbml0KCk7Cit9CisjZW5k
aWYKKwogY29uc3QgU3RyaW5nJiBGaWxlOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gaXRl
bXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+bmFtZSgpOwogfQogCisjaWYgRU5BQkxFKERJ
UkVDVE9SWV9VUExPQUQpCitjb25zdCBTdHJpbmcmIEZpbGU6OnBhdGgoKSBjb25zdAoreworICAg
IGNvbnN0IEZpbGVCbG9iSXRlbSogaXRlbSA9IGl0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVt
KCk7CisgICAgaWYgKGl0ZW0tPmhhc1JlbGF0aXZlUGF0aCgpKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtKj4oaXRlbSktPnJlbGF0aXZl
UGF0aCgpOworICAgIHJldHVybiBuYW1lKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvRmlsZS5oCShyZXZpc2lvbiA2MTQ1OCkKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGaWxlKHBhdGgpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQ
TE9BRCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBy
ZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRmlsZShyZWxhdGl2ZVBhdGgsIGZpbGUpKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdDsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkK
KyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgLy8gRklYTUU6
IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJlIHJlbW92ZWQuCiAgICAgY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUoKTsgfQpAQCAtNDksNiArNTksMTEgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lk
IEluaXQoKTsKKworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIEZpbGUoY29uc3Qg
U3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisjZW5kaWYKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5pZGwJKHJldmlzaW9uIDYxNDU4KQorKysgV2Vi
Q29yZS9odG1sL0ZpbGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBAIG1vZHVs
ZSBodG1sIHsKICAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBGaWxlIDogQmxvYiB7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyNpZiBkZWZpbmVkKEVOQUJM
RV9ESVJFQ1RPUllfVVBMT0FEKSAmJiBFTkFCTEVfRElSRUNUT1JZX1VQTE9BRAorICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBhdGg7CisjZW5kaWYKIAogICAgICAgICAvLyBG
SVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUgcmVtb3ZlZC4KICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBmaWxlTmFtZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
QXR0cmlidXRlTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1
dGVOYW1lcy5pbgkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0
ZU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGRlY2xhcmUKIGRlZmVy
CiBkaXIKIGRpcmVjdGlvbgorZGlyZWN0b3J5CiBkaXNhYmxlZAogZHJhZ2dhYmxlCiBlbmN0eXBl
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ1OCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2Niw4
ICsxOTY2LDI4IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmUKIHsK
ICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwogICAgIGludCBzaXplID0gcGF0aHMuc2l6ZSgpOwor
CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgaWYgKGRpcmVjdG9yeSgpICYmIHNp
emUgPiAwKSB7CisgICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNb
MF0pOworICAgICAgICAvLyBGaW5kIHRoZSBjb21tb24gcm9vdCBwYXRoLgorICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKCFwYXRoc1tpXS5z
dGFydHNXaXRoKHJvb3RQYXRoKSkgeworICAgICAgICAgICAgICAgIHJvb3RQYXRoID0gZGlyZWN0
b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcm9vdFBhdGggPSBkaXJlY3RvcnlOYW1lKHJvb3RQYXRoKTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICBtX2Zp
bGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBh
dGgubGVuZ3RoKCkpLCBwYXRoc1tpXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZp
bGU6OmNyZWF0ZShwYXRoc1tpXSkpOworICAgIH0KKyNlbHNlCiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyBpKyspCiAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUo
cGF0aHNbaV0pKTsKKyNlbmRpZgogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcih0cnVlKTsKICAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhp
cyk7CkBAIC0yNDg2LDcgKzI1MDYsMTkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRNdWx0
aXBsZShib29sIAogewogICAgIHNldEF0dHJpYnV0ZShtdWx0aXBsZUF0dHIsIG11bHRpcGxlID8g
IiIgOiAwKTsKIH0KLSAgICAKKworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorYm9vbCBI
VE1MSW5wdXRFbGVtZW50OjpkaXJlY3RvcnkoKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0QXR0
cmlidXRlKGRpcmVjdG9yeUF0dHIpLmlzTnVsbCgpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldERpcmVjdG9yeShib29sIGRpcmVjdG9yeSkKK3sKKyAgICBzZXRBdHRyaWJ1dGUoZGly
ZWN0b3J5QXR0ciwgZGlyZWN0b3J5ID8gIiIgOiAwKTsKK30KKyNlbmRpZgorCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldFNpemUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUo
c2l6ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHNpemUpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2LDExIEBAIHB1YmxpYzoKICAgICBib29sIG11
bHRpcGxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRNdWx0aXBsZShib29sKTsKIAorI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQorICAgIGJvb2wgZGlyZWN0b3J5KCkgY29uc3Q7CisgICAgdm9p
ZCBzZXREaXJlY3RvcnkoYm9vbCk7CisjZW5kaWYKKwogICAgIFN0cmluZyB1c2VNYXAoKSBjb25z
dDsKICAgICB2b2lkIHNldFVzZU1hcChjb25zdCBTdHJpbmcmKTsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmlkbAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDkgQEAgbW9kdWxlIGh0
bWwgewogICAgICAgICBhdHRyaWJ1dGUgbG9uZyBtYXhMZW5ndGggc2V0dGVyIHJhaXNlcyhET01F
eGNlcHRpb24pOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBtaW47CiAg
ICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBtdWx0aXBsZTsKKyNpZiBkZWZpbmVk
KEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAmJiBFTkFCTEVfRElSRUNUT1JZX1VQTE9BRAorICAg
ICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gZGlyZWN0b3J5OworI2VuZGlmCiAgICAg
ICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIG5hbWU7CiAgICAgICAgIGF0dHJpYnV0
ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHBhdHRlcm47CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVj
dF0gRE9NU3RyaW5nIHBsYWNlaG9sZGVyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRl
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAJKHJldmlz
aW9uIDYxNDU4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw2ICsxMDIsMjIgQEAgUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVt
OjpzbGljZQogfQogI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQogCisjaWYgRU5BQkxFKERJ
UkVDVE9SWV9VUExPQUQpCisvLyBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0
cjxCbG9iSXRlbT4gUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtKHBh
dGgsIHJlbGF0aXZlUGF0aCkpKTsKK30KKworUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtOjpSZWxh
dGl2ZVBhdGhGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJl
bGF0aXZlUGF0aCkKKyAgICA6IEZpbGVCbG9iSXRlbShwYXRoKQorICAgICwgbV9yZWxhdGl2ZVBh
dGgocmVsYXRpdmVQYXRoKQoreworfQorCisjZW5kaWYKKwogLy8gU3RyaW5nQmxvYkl0ZW0gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBT
dHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9CbG9iSXRlbS5oCShyZXZpc2lvbiA2MTQ1OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
QmxvYkl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1l
OyB9CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGg7IH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIHZpcnR1YWwgYm9vbCBo
YXNSZWxhdGl2ZVBhdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKICAgICAv
LyBCbG9iSXRlbSBtZXRob2RzLgogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0o
KSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkBAIC0xMjQsNiArMTI4LDIwIEBAIHByb3RlY3RlZDoK
ICAgICBTdHJpbmcgbV9maWxlTmFtZTsKIH07CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKK2NsYXNzIFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBGaWxlQmxvYkl0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7CisgICAgdmlydHVhbCBi
b29sIGhhc1JlbGF0aXZlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGNvbnN0
IFN0cmluZyYgcmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0K
KworcHJvdGVjdGVkOgorICAgIFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKKyAgICBTdHJpbmcgbV9yZWxhdGl2
ZVBhdGg7Cit9OworI2VuZGlmCisKIGNsYXNzIFN0cmluZ0Jsb2JJdGVtIDogcHVibGljIERhdGFC
bG9iSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0
ZShjb25zdCBTdHJpbmcmLCBMaW5lRW5kaW5nLCBUZXh0RW5jb2RpbmcpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
RmlsZUNob29zZXIuaAkocmV2aXNpb24gNjE0NTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVD
aG9vc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQo
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFsbG93c011bHRpcGxlRmlsZXMoKSA9IDA7CisjaWYg
RU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgdmlydHVhbCBib29sIGFsbG93c0RpcmVjdG9y
eVVwbG9hZCgpID0gMDsKKyNlbmRpZgogICAgIHZpcnR1YWwgU3RyaW5nIGFjY2VwdFR5cGVzKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYpID0gMDsKICAgICB2aXJ0dWFsIH5GaWxlQ2hvb3NlckNsaWVu
dCgpOwpAQCAtNzAsNiArNzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpY29uTG9hZGVkKFBhc3NS
ZWZQdHI8SWNvbj4pOwogCiAgICAgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+YWxsb3dzTXVsdGlwbGVGaWxlcygpIDogZmFsc2U7
IH0KKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBib29sIGFsbG93c0RpcmVjdG9y
eVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPmFsbG93c0RpcmVj
dG9yeVVwbG9hZCgpIDogZmFsc2U7IH0KKyNlbmRpZgogICAgIC8vIEFjY2VwdGFibGUgTUlNRSB0
eXBlcy4gIEl0J3MgYW4gJ2FjY2VwdCcgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25k
aW5nIElOUFVUIGVsZW1lbnQuCiAgICAgU3RyaW5nIGFjY2VwdFR5cGVzKCkgY29uc3QgeyByZXR1
cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+YWNjZXB0VHlwZXMoKSA6IFN0cmluZygpOyB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNpb24gNjE0NTgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjUsNyArMjI1LDE0IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1z
KGMKICAgICAgICAgICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSB2YWx1ZS0+dG9G
aWxlQmxvYkl0ZW0oKTsKICAgICAgICAgICAgIGlmIChmaWxlSXRlbSkgewogICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGVJdGVtLT5wYXRoKCk7CisKKyNpZiBFTkFCTEUo
RElSRUNUT1JZX1VQTE9BRCkKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxl
SXRlbS0+aGFzUmVsYXRpdmVQYXRoKCkgPworICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW0qPihmaWxlSXRlbSktPnJlbGF0aXZlUGF0
aCgpIDoKKyAgICAgICAgICAgICAgICAgICAgZmlsZUl0ZW0tPm5hbWUoKTsKKyNlbHNlCiAgICAg
ICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZUl0ZW0tPm5hbWUoKTsKKyNlbmRpZgog
CiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5h
bWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1
cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24g
NjE0NTgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDE0IEBAIGJvb2wgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OmFsbG93c011bHQKICAgICByZXR1cm4gIWlucHV0LT5nZXRBdHRyaWJ1dGUobXVsdGlw
bGVBdHRyKS5pc051bGwoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorYm9v
bCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKCkKK3sKKyAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
Pihub2RlKCkpOworICAgIHJldHVybiAhaW5wdXQtPmdldEF0dHJpYnV0ZShkaXJlY3RvcnlBdHRy
KS5pc051bGwoKTsKK30KKyNlbmRpZgorCiBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OmFjY2VwdFR5cGVzKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KG5vZGUoKSktPmFjY2VwdCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiA2MTQ1OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHZhbHVlQ2hhbmdlZCgpOwogICAgIHZvaWQgcmVwYWludCgp
IHsgUmVuZGVyQmxvY2s6OnJlcGFpbnQoKTsgfQogICAgIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxl
cygpOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGJvb2wgYWxsb3dzRGlyZWN0
b3J5VXBsb2FkKCk7CisjZW5kaWYKICAgICBTdHJpbmcgYWNjZXB0VHlwZXMoKTsKICAgICB2b2lk
IGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hvb3NlciosIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60044</attachid>
            <date>2010-06-29 13:14:35 -0700</date>
            <delta_ts>2010-06-29 14:48:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100629131434.patch</filename>
            <type>text/plain</type>
            <size>13888</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMTggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGZlYXR1cmUgb2YgZGlyZWN0b3J5IGF0dHJpYnV0ZSBvbiA8aW5wdXQgdHlwZT0i
ZmlsZSI+IHdoaWNoCisgICAgICAgIGVuYWJsZXMgdGhlIE9TIHRvIHByZXNlbnQgYSBmb2xkZXIg
cGlja2VyIGluc3RlYWQgb2YgYSBmaWxlIHBpY2tlciBkaWFsb2cuCisKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6SW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpwYXRoKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9GaWxlLmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjogYWRkICd3ZWJraXQtZGlyZWN0b3J5JyBhdHRyaWJ1
dGUKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlyZWN0b3J5KToKKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsOgor
ICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0
aXZlUGF0aEZpbGVCbG9iSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0aXZl
UGF0aEZpbGVCbG9iSXRlbTo6UmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9CbG9iSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJdGVtOjpoYXNS
ZWxhdGl2ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVt
OjpoYXNSZWxhdGl2ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVsYXRpdmVQYXRoRmlsZUJs
b2JJdGVtOjpyZWxhdGl2ZVBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjphbGxvd3NEaXJlY3RvcnlVcGxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oOgorCiAyMDEwLTA2LTI5ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvQmxvYi5jcHAJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgQmxvCiAgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zW2ldKTsKIH0KIAor
QmxvYjo6QmxvYihjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYgaXRlbSkKK3sKKyAgICBtX2l0
ZW1zLmFwcGVuZChpdGVtKTsKK30KKwogQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCiB7
CiAgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhlIHR5cGUgdW5saWtlIEZp
bGUocGF0aCkuCkluZGV4OiBXZWJDb3JlL2h0bWwvQmxvYi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9CbG9iLmgJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICBCbG9iKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0Jik7CisgICAgQmxv
Yihjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYpOwogCiAgICAgLy8gRklYTUU6IERlcHJlY2F0
ZWQgY29uc3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBh
dGgpLgogICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9G
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5jcHAJKHJldmlzaW9uIDYy
MTM1KQorKysgV2ViQ29yZS9odG1sL0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICA6IEJsb2IocGF0aCkKIHsKKyAgICBJbml0KCk7Cit9CisKK3ZvaWQgRmlsZTo6SW5p
dCgpCit7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yUGF0aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiB1
cG9uIGZhaWx1cmUuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSA9IG5hbWUoKTsKICAgICBp
bnQgaW5kZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOwpAQCAtNDEsOSArNDYsMjcgQEAg
RmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgICAgIG1fdHlwZSA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVOYW1lLnN1YnN0cmluZyhpbmRl
eCArIDEpKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorRmlsZTo6RmlsZShj
b25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICA6
IEJsb2IoUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZVBhdGgsIHJlbGF0aXZl
UGF0aCkpCit7CisgICAgSW5pdCgpOworfQorI2VuZGlmCisKIGNvbnN0IFN0cmluZyYgRmlsZTo6
bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVt
KCktPm5hbWUoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorY29uc3QgU3Ry
aW5nJiBGaWxlOjpwYXRoKCkgY29uc3QKK3sKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGl0ZW0g
PSBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmIChpdGVtLT5oYXNSZWxh
dGl2ZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbGF0aXZlUGF0
aEZpbGVCbG9iSXRlbSo+KGl0ZW0pLT5yZWxhdGl2ZVBhdGgoKTsKKyAgICByZXR1cm4gbmFtZSgp
OworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9GaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuaAkocmV2aXNpb24gNjIx
MzUpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSwx
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShwYXRoKSk7CiAg
ICAgfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcm
IGZpbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocmVsYXRpdmVQ
YXRoLCBmaWxlKSk7CisgICAgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Q7
CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkg
Y29uc3Q7CisjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBi
ZSByZW1vdmVkLgogICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBu
YW1lKCk7IH0KQEAgLTQ5LDYgKzU5LDExIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBJbml0KCk7CisKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKKyAgICBGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIHBhdGgpOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2h0bWwvRmlsZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Zp
bGUuaWRsCShyZXZpc2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIEdlbmVyYXRl
VG9KUwogICAgIF0gRmlsZSA6IEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIG5hbWU7CisjaWYgZGVmaW5lZChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJiYgRU5B
QkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBwYXRoOworI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMu
IFRvIGJlIHJlbW92ZWQuCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZmls
ZU5hbWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHJldmlzaW9uIDYyMTM1
KQorKysgV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtMjgxLDUgKzI4MSw2IEBAIHZlcnNpb24KIHZpZXdzb3VyY2UKIHZsaW5rCiB2c3BhY2UKK3dl
YmtpdC1kaXJlY3RvcnkKIHdpZHRoCiB3cmFwCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk2Nyw4ICsxOTY3LDI2IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6c2V0RmlsZUxpc3RGcm9tUmUKIHsKICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwogICAg
IGludCBzaXplID0gcGF0aHMuc2l6ZSgpOworCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CisgICAgaWYgKGRpcmVjdG9yeSgpICYmIHNpemUgPiAwKSB7CisgICAgICAgIFN0cmluZyByb290
UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNbMF0pOworICAgICAgICAvLyBGaW5kIHRoZSBjb21t
b24gcm9vdCBwYXRoLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewor
ICAgICAgICAgICAgd2hpbGUgKCFwYXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKKyAgICAg
ICAgICAgICAgICByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICB9
CisgICAgICAgIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXS5zdWJzdHJpbmcoMSArIHJvb3RQYXRoLmxlbmd0aCgp
KSwgcGF0aHNbaV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7IGkrKykKKyAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUo
cGF0aHNbaV0pKTsKKyAgICB9CisjZWxzZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKQogICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7
CisjZW5kaWYKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7
CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwpAQCAtMjQ0
OCw2ICsyNDY2LDEzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bXVsdGlwbGUoKSBjb25zdAog
ICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG11bHRpcGxlQXR0cikuaXNOdWxsKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6ZGlyZWN0
b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWdldEF0dHJpYnV0ZSh3ZWJraXRfZGlyZWN0b3J5
QXR0cikuaXNOdWxsKCk7Cit9CisjZW5kaWYKKwogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRT
aXplKHVuc2lnbmVkIHNpemUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCBTdHJpbmc6
Om51bWJlcihzaXplKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDYy
MTM1KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTc3LDYgKzE3NywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIG11bHRpcGxlKCkgY29uc3Q7
CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBib29sIGRpcmVjdG9yeSgpIGNv
bnN0OworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNBdXRvZmlsbGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdXRvZmlsbGVkOyB9CiAgICAgdm9pZCBzZXRBdXRvZmlsbGVkKGJvb2wgdmFsdWUg
PSB0cnVlKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAkocmV2aXNpb24gNjIx
MzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDkgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBhdHRyaWJ1dGUgbG9uZyBt
YXhMZW5ndGggc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBhdHRyaWJ1dGUg
W1JlZmxlY3RdIERPTVN0cmluZyBtaW47CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9v
bGVhbiBtdWx0aXBsZTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAmJiBF
TkFCTEVfRElSRUNUT1JZX1VQTE9BRAorICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xl
YW4gZGlyZWN0b3J5OworI2VuZGlmCiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3Ry
aW5nIG5hbWU7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHBhdHRlcm47
CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHBsYWNlaG9sZGVyOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9CbG9iSXRlbS5jcHAJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9CbG9iSXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsMjIgQEAgUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpzbGljZQogfQogI2VuZGlmIC8vIEVOQUJMRShC
TE9CX1NMSUNFKQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisvLyBSZWxhdGl2ZVBh
dGhGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gUmVsYXRpdmVQYXRoRmlsZUJs
b2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZl
UGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcg
UmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtKHBhdGgsIHJlbGF0aXZlUGF0aCkpKTsKK30KKworUmVs
YXRpdmVQYXRoRmlsZUJsb2JJdGVtOjpSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW0oY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCkKKyAgICA6IEZpbGVCbG9iSXRl
bShwYXRoKQorICAgICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoKQoreworfQorCisjZW5k
aWYKKwogLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3Ry
aW5nQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5n
LCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCShyZXZpc2lvbiA2
MjEzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDYgKzExMSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcm
IHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVBhdGgoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorI2VuZGlmCisKICAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgogICAgIHZpcnR1
YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEZp
bGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CkBAIC0x
MjQsNiArMTI4LDIwIEBAIHByb3RlY3RlZDoKICAgICBTdHJpbmcgbV9maWxlTmFtZTsKIH07CiAK
KyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2NsYXNzIFJlbGF0aXZlUGF0aEZpbGVCbG9i
SXRlbSA6IHB1YmxpYyBGaWxlQmxvYkl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJl
bGF0aXZlUGF0aCk7CisgICAgdmlydHVhbCBib29sIGhhc1JlbGF0aXZlUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0KKworcHJvdGVjdGVkOgorICAgIFJlbGF0aXZlUGF0
aEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQ
YXRoKTsKKyAgICBTdHJpbmcgbV9yZWxhdGl2ZVBhdGg7Cit9OworI2VuZGlmCisKIGNsYXNzIFN0
cmluZ0Jsb2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmLCBMaW5lRW5kaW5nLCBU
ZXh0RW5jb2RpbmcpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAkocmV2aXNpb24gNjIxMzUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFsbG93
c011bHRpcGxlRmlsZXMoKSA9IDA7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAg
dmlydHVhbCBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpID0gMDsKKyNlbmRpZgogICAgIHZp
cnR1YWwgU3RyaW5nIGFjY2VwdFR5cGVzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJ
Y29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpID0gMDsKICAg
ICB2aXJ0dWFsIH5GaWxlQ2hvb3NlckNsaWVudCgpOwpAQCAtNzAsNiArNzMsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBpY29uTG9hZGVkKFBhc3NSZWZQdHI8SWNvbj4pOwogCiAgICAgYm9vbCBhbGxv
d3NNdWx0aXBsZUZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+YWxs
b3dzTXVsdGlwbGVGaWxlcygpIDogZmFsc2U7IH0KKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKKyAgICBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
ZW50ID8gbV9jbGllbnQtPmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIDogZmFsc2U7IH0KKyNlbmRp
ZgogICAgIC8vIEFjY2VwdGFibGUgTUlNRSB0eXBlcy4gIEl0J3MgYW4gJ2FjY2VwdCcgYXR0cmli
dXRlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIElOUFVUIGVsZW1lbnQuCiAgICAgU3RyaW5n
IGFjY2VwdFR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+YWNjZXB0
VHlwZXMoKSA6IFN0cmluZygpOyB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcAkocmV2aXNpb24gNjIxMzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDE0IEBAIHZvaWQgRm9ybURh
dGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGMKICAgICAgICAgICAgIGNvbnN0IEZpbGVCbG9i
SXRlbSogZmlsZUl0ZW0gPSB2YWx1ZS0+dG9GaWxlQmxvYkl0ZW0oKTsKICAgICAgICAgICAgIGlm
IChmaWxlSXRlbSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGVJ
dGVtLT5wYXRoKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICAgICAgICAg
ICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+aGFzUmVsYXRpdmVQYXRoKCkgPworICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0
ZW0qPihmaWxlSXRlbSktPnJlbGF0aXZlUGF0aCgpIDoKKyAgICAgICAgICAgICAgICAgICAgZmls
ZUl0ZW0tPm5hbWUoKTsKKyNlbHNlCiAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0g
ZmlsZUl0ZW0tPm5hbWUoKTsKKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBh
cHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBh
IHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFw
YXRoLmlzRW1wdHkoKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gNjIxMzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDE0
IEBAIGJvb2wgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c011bHQKICAgICByZXR1cm4g
IWlucHV0LT5nZXRBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKS5pc051bGwoKTsKIH0KIAorI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQorYm9vbCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxs
b3dzRGlyZWN0b3J5VXBsb2FkKCkKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiAhaW5wdXQt
PmdldEF0dHJpYnV0ZSh3ZWJraXRfZGlyZWN0b3J5QXR0cikuaXNOdWxsKCk7Cit9CisjZW5kaWYK
KwogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphY2NlcHRUeXBlcygpCiB7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5hY2NlcHQoKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkocmV2
aXNpb24gNjIxMzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2
YWx1ZUNoYW5nZWQoKTsKICAgICB2b2lkIHJlcGFpbnQoKSB7IFJlbmRlckJsb2NrOjpyZXBhaW50
KCk7IH0KICAgICBib29sIGFsbG93c011bHRpcGxlRmlsZXMoKTsKKyNpZiBFTkFCTEUoRElSRUNU
T1JZX1VQTE9BRCkKKyAgICBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpOworI2VuZGlmCiAg
ICAgU3RyaW5nIGFjY2VwdFR5cGVzKCk7CiAgICAgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoRmls
ZUNob29zZXIqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60059</attachid>
            <date>2010-06-29 14:48:49 -0700</date>
            <delta_ts>2010-07-01 17:52:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100629144847.patch</filename>
            <type>text/plain</type>
            <size>14093</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMTggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGZlYXR1cmUgb2YgZGlyZWN0b3J5IGF0dHJpYnV0ZSBvbiA8aW5wdXQgdHlwZT0i
ZmlsZSI+IHdoaWNoCisgICAgICAgIGVuYWJsZXMgdGhlIE9TIHRvIHByZXNlbnQgYSBmb2xkZXIg
cGlja2VyIGluc3RlYWQgb2YgYSBmaWxlIHBpY2tlciBkaWFsb2cuCisKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6SW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpwYXRoKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9GaWxlLmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjogYWRkICd3ZWJraXQtZGlyZWN0b3J5JyBhdHRyaWJ1
dGUKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlyZWN0b3J5KToKKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsOgor
ICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0
aXZlUGF0aEZpbGVCbG9iSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0aXZl
UGF0aEZpbGVCbG9iSXRlbTo6UmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9CbG9iSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJdGVtOjpoYXNS
ZWxhdGl2ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVt
OjpoYXNSZWxhdGl2ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVsYXRpdmVQYXRoRmlsZUJs
b2JJdGVtOjpyZWxhdGl2ZVBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjphbGxvd3NEaXJlY3RvcnlVcGxvYWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oOgorCiAyMDEwLTA2LTI5ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvQmxvYi5jcHAJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgQmxvCiAgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zW2ldKTsKIH0KIAor
QmxvYjo6QmxvYihjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYgaXRlbSkKK3sKKyAgICBtX2l0
ZW1zLmFwcGVuZChpdGVtKTsKK30KKwogQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCiB7
CiAgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhlIHR5cGUgdW5saWtlIEZp
bGUocGF0aCkuCkluZGV4OiBXZWJDb3JlL2h0bWwvQmxvYi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9CbG9iLmgJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICBCbG9iKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0Jik7CisgICAgQmxv
Yihjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYpOwogCiAgICAgLy8gRklYTUU6IERlcHJlY2F0
ZWQgY29uc3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBh
dGgpLgogICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9G
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5jcHAJKHJldmlzaW9uIDYy
MTM1KQorKysgV2ViQ29yZS9odG1sL0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICA6IEJsb2IocGF0aCkKIHsKKyAgICBJbml0KCk7Cit9CisKK3ZvaWQgRmlsZTo6SW5p
dCgpCit7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yUGF0aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiB1
cG9uIGZhaWx1cmUuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSA9IG5hbWUoKTsKICAgICBp
bnQgaW5kZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOwpAQCAtNDEsOSArNDYsMjcgQEAg
RmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgICAgIG1fdHlwZSA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVOYW1lLnN1YnN0cmluZyhpbmRl
eCArIDEpKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorRmlsZTo6RmlsZShj
b25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICA6
IEJsb2IoUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZVBhdGgsIHJlbGF0aXZl
UGF0aCkpCit7CisgICAgSW5pdCgpOworfQorI2VuZGlmCisKIGNvbnN0IFN0cmluZyYgRmlsZTo6
bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVt
KCktPm5hbWUoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorY29uc3QgU3Ry
aW5nJiBGaWxlOjpwYXRoKCkgY29uc3QKK3sKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGl0ZW0g
PSBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmIChpdGVtLT5oYXNSZWxh
dGl2ZVBhdGgoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbGF0aXZlUGF0
aEZpbGVCbG9iSXRlbSo+KGl0ZW0pLT5yZWxhdGl2ZVBhdGgoKTsKKyAgICByZXR1cm4gbmFtZSgp
OworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9GaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuaAkocmV2aXNpb24gNjIx
MzUpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSwx
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShwYXRoKSk7CiAg
ICAgfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcm
IGZpbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocmVsYXRpdmVQ
YXRoLCBmaWxlKSk7CisgICAgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Q7
CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkg
Y29uc3Q7CisjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBi
ZSByZW1vdmVkLgogICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBu
YW1lKCk7IH0KQEAgLTQ5LDYgKzU5LDExIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBJbml0KCk7CisKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKKyAgICBGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIHBhdGgpOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2h0bWwvRmlsZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Zp
bGUuaWRsCShyZXZpc2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIEdlbmVyYXRl
VG9KUwogICAgIF0gRmlsZSA6IEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIG5hbWU7CisjaWYgZGVmaW5lZChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJiYgRU5B
QkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBwYXRoOworI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMu
IFRvIGJlIHJlbW92ZWQuCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZmls
ZU5hbWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHJldmlzaW9uIDYyMTM1
KQorKysgV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtMjgxLDUgKzI4MSw2IEBAIHZlcnNpb24KIHZpZXdzb3VyY2UKIHZsaW5rCiB2c3BhY2UKK3dl
YmtpdGRpcmVjdG9yeQogd2lkdGgKIHdyYXAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTY3LDggKzE5NjcsMjkgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRGaWxlTGlzdEZyb21SZQogewogICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CiAgICAg
aW50IHNpemUgPSBwYXRocy5zaXplKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkK
KyAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwgdGhlIFVJIGFsbG93cyBh
IGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KKyAgICAvLyBhbmQgdGhlIHBhdGhzIHByb3ZpZGVkIGhl
cmUgc2hhcmUgYSBzaW5nbGUgcm9vdCBkaXJlY3RvcnkuCisgICAgaWYgKHdlYmtpdGRpcmVjdG9y
eSgpICYmIHNpemUgPiAwKSB7CisgICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5h
bWUocGF0aHNbMF0pOworICAgICAgICAvLyBGaW5kIHRoZSBjb21tb24gcm9vdCBwYXRoLgorICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgd2hpbGUg
KCFwYXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKKyAgICAgICAgICAgICAgICByb290UGF0
aCA9IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICB9CisgICAgICAgIHJvb3RQYXRo
ID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIEFTU0VSVChyb290UGF0aC5sZW5n
dGgoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAg
ICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXS5zdWJzdHJpbmcoMSAr
IHJvb3RQYXRoLmxlbmd0aCgpKSwgcGF0aHNbaV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFw
cGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKKyAgICB9CisjZWxzZQogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6
Y3JlYXRlKHBhdGhzW2ldKSk7CisjZW5kaWYKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIodHJ1ZSk7CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFu
Z2VkKHRoaXMpOwpAQCAtMjQ0OCw2ICsyNDY5LDEzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6
bXVsdGlwbGUoKSBjb25zdAogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG11bHRpcGxlQXR0ciku
aXNOdWxsKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jvb2wgSFRNTElu
cHV0RWxlbWVudDo6d2Via2l0ZGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWdldEF0
dHJpYnV0ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRpZgorCiB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNpemUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBzZXRBdHRy
aWJ1dGUoc2l6ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHNpemUpKTsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaAkocmV2aXNpb24gNjIxMzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDEwIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgbXVsdGlwbGUoKSBjb25zdDsKIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQor
ICAgIGJvb2wgd2Via2l0ZGlyZWN0b3J5KCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHZpcnR1YWwg
Ym9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9maWxsZWQ7IH0KICAgICB2
b2lkIHNldEF1dG9maWxsZWQoYm9vbCB2YWx1ZSA9IHRydWUpOwogCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaWRsCShyZXZpc2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCBtb2R1bGUgaHRt
bCB7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIG1heExlbmd0aCBzZXR0ZXIgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIG1pbjsKICAg
ICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIG11bHRpcGxlOworI2lmIGRlZmluZWQo
RU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICYmIEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FECisgICAg
ICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiB3ZWJraXRkaXJlY3Rvcnk7CisjZW5kaWYK
ICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbmFtZTsKICAgICAgICAgYXR0
cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgcGF0dGVybjsKICAgICAgICAgYXR0cmlidXRlIFtS
ZWZsZWN0XSBET01TdHJpbmcgcGxhY2Vob2xkZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Js
b2JJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcAko
cmV2aXNpb24gNjIxMzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwyMiBAQCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxv
Ykl0ZW06OnNsaWNlCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCiAKKyNpZiBFTkFC
TEUoRElSRUNUT1JZX1VQTE9BRCkKKy8vIFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNz
UmVmUHRyPEJsb2JJdGVtPiBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0
ZW0ocGF0aCwgcmVsYXRpdmVQYXRoKSkpOworfQorCitSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW06
OlJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmVQYXRoKQorICAgIDogRmlsZUJsb2JJdGVtKHBhdGgpCisgICAgLCBtX3JlbGF0
aXZlUGF0aChyZWxhdGl2ZVBhdGgpCit7Cit9CisKKyNlbmRpZgorCiAvLyBTdHJpbmdCbG9iSXRl
bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgdGV4dCwgTGluZUVuZGluZyBlbmRpbmcsIFRleHRFbmNvZGluZyBlbmNvZGlu
ZykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9CbG9iSXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgdmlydHVhbCBi
b29sIGhhc1JlbGF0aXZlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKwog
ICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcg
c2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9i
SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KQEAgLTEyNCw2ICsxMjgsMjAgQEAgcHJvdGVj
dGVkOgogICAgIFN0cmluZyBtX2ZpbGVOYW1lOwogfTsKIAorI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorY2xhc3MgUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtIDogcHVibGljIEZpbGVCbG9i
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzUmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
Y29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlUGF0
aDsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVsYXRpdmVQYXRoRmlsZUJsb2JJdGVtKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpOworICAgIFN0cmluZyBtX3Jl
bGF0aXZlUGF0aDsKK307CisjZW5kaWYKKwogY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMg
RGF0YUJsb2JJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYsIExpbmVFbmRpbmcsIFRleHRFbmNvZGluZyk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9GaWxlQ2hvb3Nlci5oCShyZXZpc2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
RmlsZUNob29zZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVw
YWludCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpID0gMDsK
KyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzRGly
ZWN0b3J5VXBsb2FkKCkgPSAwOworI2VuZGlmCiAgICAgdmlydHVhbCBTdHJpbmcgYWNjZXB0VHlw
ZXMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hvb3Nl
ciosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgPSAwOwogICAgIHZpcnR1YWwgfkZpbGVDaG9vc2Vy
Q2xpZW50KCk7CkBAIC03MCw2ICs3Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGljb25Mb2FkZWQo
UGFzc1JlZlB0cjxJY29uPik7CiAKICAgICBib29sIGFsbG93c011bHRpcGxlRmlsZXMoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5hbGxvd3NNdWx0aXBsZUZpbGVzKCkgOiBm
YWxzZTsgfQorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGJvb2wgYWxsb3dzRGly
ZWN0b3J5VXBsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+YWxsb3dz
RGlyZWN0b3J5VXBsb2FkKCkgOiBmYWxzZTsgfQorI2VuZGlmCiAgICAgLy8gQWNjZXB0YWJsZSBN
SU1FIHR5cGVzLiAgSXQncyBhbiAnYWNjZXB0JyBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGNvcnJl
c3BvbmRpbmcgSU5QVVQgZWxlbWVudC4KICAgICBTdHJpbmcgYWNjZXB0VHlwZXMoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5hY2NlcHRUeXBlcygpIDogU3RyaW5nKCk7IH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCShyZXZpc2lvbiA2MjEz
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNCw3ICsyMjQsMTQgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWly
SXRlbXMoYwogICAgICAgICAgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IHZhbHVl
LT50b0ZpbGVCbG9iSXRlbSgpOwogICAgICAgICAgICAgaWYgKGZpbGVJdGVtKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZUl0ZW0tPnBhdGgoKTsKKworI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9
IGZpbGVJdGVtLT5oYXNSZWxhdGl2ZVBhdGgoKSA/CisgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGNvbnN0IFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbSo+KGZpbGVJdGVtKS0+cmVsYXRp
dmVQYXRoKCkgOgorICAgICAgICAgICAgICAgICAgICBmaWxlSXRlbS0+bmFtZSgpOworI2Vsc2UK
ICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+bmFtZSgpOworI2Vu
ZGlmCiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBm
aWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3Ig
dGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZp
c2lvbiA2MjEzNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsMTQgQEAgYm9vbCBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6YWxsb3dzTXVsdAogICAgIHJldHVybiAhaW5wdXQtPmdldEF0dHJpYnV0ZSht
dWx0aXBsZUF0dHIpLmlzTnVsbCgpOwogfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
Citib29sIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphbGxvd3NEaXJlY3RvcnlVcGxvYWQoKQor
eworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KG5vZGUoKSk7CisgICAgcmV0dXJuICFpbnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtpdGRp
cmVjdG9yeUF0dHIpLmlzTnVsbCgpOworfQorI2VuZGlmCisKIFN0cmluZyBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6YWNjZXB0VHlwZXMoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+YWNjZXB0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHJldmlzaW9uIDYyMTM1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNiArNjIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdmFsdWVDaGFuZ2VkKCk7CiAgICAgdm9p
ZCByZXBhaW50KCkgeyBSZW5kZXJCbG9jazo6cmVwYWludCgpOyB9CiAgICAgYm9vbCBhbGxvd3NN
dWx0aXBsZUZpbGVzKCk7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgYm9vbCBh
bGxvd3NEaXJlY3RvcnlVcGxvYWQoKTsKKyNlbmRpZgogICAgIFN0cmluZyBhY2NlcHRUeXBlcygp
OwogICAgIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60322</attachid>
            <date>2010-07-01 17:52:39 -0700</date>
            <delta_ts>2010-07-01 17:57:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100701175237.patch</filename>
            <type>text/plain</type>
            <size>13143</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDYtMTggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGZlYXR1cmUgb2YgZGlyZWN0b3J5IGF0dHJpYnV0ZSBvbiA8aW5wdXQgdHlwZT0i
ZmlsZSI+IHdoaWNoCisgICAgICAgIGVuYWJsZXMgdGhlIE9TIHRvIHByZXNlbnQgYSBmb2xkZXIg
cGlja2VyIGluc3RlYWQgb2YgYSBmaWxlIHBpY2tlciBkaWFsb2cuCisKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6SW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpwYXRoKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9GaWxlLmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjogYWRkICd3ZWJraXRkaXJlY3RvcnknIGF0dHJpYnV0
ZQorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkaXJlY3RvcnkpOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5pZGw6Cisg
ICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJ
dGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQmxvYkl0ZW06OnJlbGF0aXZlUGF0aCk6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVD
aG9vc2VyOjphbGxvd3NEaXJlY3RvcnlVcGxvYWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZh
bHVlUGFpckl0ZW1zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93
c0RpcmVjdG9yeVVwbG9hZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmg6CisKIDIwMTAtMDctMDEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2MjMyMS4KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQmxv
Yi5jcHAJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgQmxvCiAgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zW2ldKTsKIH0KIAorQmxvYjo6
QmxvYihjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYgaXRlbSkKK3sKKyAgICBtX2l0ZW1zLmFw
cGVuZChpdGVtKTsKK30KKwogQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAg
Ly8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhlIHR5cGUgdW5saWtlIEZpbGUocGF0
aCkuCkluZGV4OiBXZWJDb3JlL2h0bWwvQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9CbG9iLmgJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBCbG9i
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0Jik7CisgICAgQmxvYihjb25z
dCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYpOwogCiAgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgY29u
c3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBhdGgpLgog
ICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5jcHAJKHJldmlzaW9uIDYyMzM5KQor
KysgV2ViQ29yZS9odG1sL0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAg
ICA6IEJsb2IocGF0aCkKIHsKKyAgICBJbml0KCk7Cit9CisKK3ZvaWQgRmlsZTo6SW5pdCgpCit7
CiAgICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0
aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiB1cG9uIGZh
aWx1cmUuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSA9IG5hbWUoKTsKICAgICBpbnQgaW5k
ZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOwpAQCAtNDEsOSArNDYsMjcgQEAgRmlsZTo6
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgICAgIG1fdHlwZSA9IE1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVOYW1lLnN1YnN0cmluZyhpbmRleCArIDEp
KTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorRmlsZTo6RmlsZShjb25zdCBT
dHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICA6IEJsb2Io
RmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZVBhdGgsIHJlbGF0aXZlUGF0aCkpCit7CisgICAgSW5p
dCgpOworfQorI2VuZGlmCisKIGNvbnN0IFN0cmluZyYgRmlsZTo6bmFtZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCktPm5hbWUoKTsKIH0KIAor
I2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorY29uc3QgU3RyaW5nJiBGaWxlOjpwYXRoKCkg
Y29uc3QKK3sKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGl0ZW0gPSBpdGVtcygpLmF0KDApLT50
b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmIChpdGVtLT5oYXNSZWxhdGl2ZVBhdGgoKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbGF0aXZlUGF0aEZpbGVCbG9iSXRlbSo+KGl0
ZW0pLT5yZWxhdGl2ZVBhdGgoKTsKKyAgICByZXR1cm4gbmFtZSgpOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuaAkocmV2aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL2h0
bWwvRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSwxOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShwYXRoKSk7CiAgICAgfQogCisjaWYgRU5BQkxF
KERJUkVDVE9SWV9VUExPQUQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIGZpbGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocmVsYXRpdmVQYXRoLCBmaWxlKSk7CisgICAg
fQorI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Q7CisjaWYgRU5BQkxFKERJUkVD
VE9SWV9VUExPQUQpCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Q7CisjZW5kaWYKIAog
ICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVkLgogICAgIGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lKCk7IH0KQEAgLTQ5LDYg
KzU5LDExIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCk7CisgICAgdm9pZCBJbml0KCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAg
ICBGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwv
RmlsZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuaWRsCShyZXZpc2lvbiA2
MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gRmlsZSA6
IEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9RElSRUNUT1JZX1VQTE9BRF0gRE9N
U3RyaW5nIHBhdGg7CiAKICAgICAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRv
IGJlIHJlbW92ZWQuCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZmlsZU5h
bWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHJldmlzaW9uIDYyMzM5KQor
KysgV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MjgxLDUgKzI4MSw2IEBAIHZlcnNpb24KIHZpZXdzb3VyY2UKIHZsaW5rCiB2c3BhY2UKK3dlYmtp
dGRpcmVjdG9yeQogd2lkdGgKIHdyYXAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTY3LDggKzE5NjcsMjkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRGaWxlTGlzdEZyb21SZQogewogICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CiAgICAgaW50
IHNpemUgPSBwYXRocy5zaXplKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAg
ICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwgdGhlIFVJIGFsbG93cyBhIGRp
cmVjdG9yeSB0byBiZSBjaG9zZW4KKyAgICAvLyBhbmQgdGhlIHBhdGhzIHByb3ZpZGVkIGhlcmUg
c2hhcmUgYSBzaW5nbGUgcm9vdCBkaXJlY3RvcnkuCisgICAgaWYgKHdlYmtpdGRpcmVjdG9yeSgp
ICYmIHNpemUgPiAwKSB7CisgICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUo
cGF0aHNbMF0pOworICAgICAgICAvLyBGaW5kIHRoZSBjb21tb24gcm9vdCBwYXRoLgorICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgd2hpbGUgKCFw
YXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKKyAgICAgICAgICAgICAgICByb290UGF0aCA9
IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICB9CisgICAgICAgIHJvb3RQYXRoID0g
ZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIEFTU0VSVChyb290UGF0aC5sZW5ndGgo
KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAg
bV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXS5zdWJzdHJpbmcoMSArIHJv
b3RQYXRoLmxlbmd0aCgpKSwgcGF0aHNbaV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVu
ZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKKyAgICB9CisjZWxzZQogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3Jl
YXRlKHBhdGhzW2ldKSk7CisjZW5kaWYKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVz
UmVuZGVyZXIodHJ1ZSk7CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2Vk
KHRoaXMpOwpAQCAtMjQ0OCw2ICsyNDY5LDEzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bXVs
dGlwbGUoKSBjb25zdAogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG11bHRpcGxlQXR0cikuaXNO
dWxsKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jvb2wgSFRNTElucHV0
RWxlbWVudDo6d2Via2l0ZGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWdldEF0dHJp
YnV0ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldFNpemUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBzZXRBdHRyaWJ1
dGUoc2l6ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHNpemUpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaAkocmV2aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDEwIEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgbXVsdGlwbGUoKSBjb25zdDsKIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAg
IGJvb2wgd2Via2l0ZGlyZWN0b3J5KCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9v
bCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9maWxsZWQ7IH0KICAgICB2b2lk
IHNldEF1dG9maWxsZWQoYm9vbCB2YWx1ZSA9IHRydWUpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaWRsCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIG1heExlbmd0aCBzZXR0ZXIgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIG1pbjsKICAgICAg
ICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIG11bHRpcGxlOworICAgICAgICBhdHRyaWJ1
dGUgW1JlZmxlY3QsIENvbmRpdGlvbmFsPURJUkVDVE9SWV9VUExPQURdIGJvb2xlYW4gd2Via2l0
ZGlyZWN0b3J5OwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBuYW1lOwog
ICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBwYXR0ZXJuOwogICAgICAgICBh
dHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBwbGFjZWhvbGRlcjsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vQmxvYkl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxNSBAQCBGaWxlQmxvYkl0ZW06OkZpbGVC
bG9iSXRlbShjb25zdCBTdHJpbmcmCiB7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiByZWxhdGl2ZVBhdGgpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5h
bWUocGF0aEdldEZpbGVOYW1lKG1fcGF0aCkpCisgICAgLCBtX3JlbGF0aXZlUGF0aChyZWxhdGl2
ZVBhdGgpCit7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6
c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0Jsb2JJdGVtLmgJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9C
bG9iSXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE0IEBAIHB1YmxpYzoKIGNs
YXNzIEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7Cisj
ZW5kaWYKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZU5hbWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0KKyNl
bmRpZgogCiAgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgbG9uZyBzaXplKCkgY29uc3Q7CkBAIC0xMjAsOCArMTI2LDE0IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKKyNlbmRpZgogICAgIFN0cmluZyBtX3BhdGg7
CiAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisg
ICAgU3RydGluZyBtX3JlbGF0aXZlUGF0aDsKKyNlbmRpZgogfTsKIAogY2xhc3MgU3RyaW5nQmxv
Ykl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRmls
ZUNob29zZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJ
KHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KCkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCkgPSAwOworI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA9IDA7
CisjZW5kaWYKICAgICB2aXJ0dWFsIFN0cmluZyBhY2NlcHRUeXBlcygpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mKSA9IDA7CiAgICAgdmlydHVhbCB+RmlsZUNob29zZXJDbGllbnQoKTsKQEAgLTcwLDYg
KzczLDkgQEAgcHVibGljOgogICAgIHZvaWQgaWNvbkxvYWRlZChQYXNzUmVmUHRyPEljb24+KTsK
IAogICAgIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50
ID8gbV9jbGllbnQtPmFsbG93c011bHRpcGxlRmlsZXMoKSA6IGZhbHNlOyB9CisjaWYgRU5BQkxF
KERJUkVDVE9SWV9VUExPQUQpCisgICAgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5hbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA6
IGZhbHNlOyB9CisjZW5kaWYKICAgICAvLyBBY2NlcHRhYmxlIE1JTUUgdHlwZXMuICBJdCdzIGFu
ICdhY2NlcHQnIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBJTlBVVCBlbGVt
ZW50LgogICAgIFN0cmluZyBhY2NlcHRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8g
bV9jbGllbnQtPmFjY2VwdFR5cGVzKCkgOiBTdHJpbmcoKTsgfQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwx
MiBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjCiAgICAgICAgICAg
ICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdmFsdWUtPnRvRmlsZUJsb2JJdGVtKCk7
CiAgICAgICAgICAgICBpZiAoZmlsZUl0ZW0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHBhdGggPSBmaWxlSXRlbS0+cGF0aCgpOworCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExP
QUQpCisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gIWZpbGVJdGVtLT5oYXNSZWxh
dGl2ZVBhdGgoKS5pc0VtcHR5KCkgPyBmaWxlSXRlbSktPnJlbGF0aXZlUGF0aCgpIDogZmlsZUl0
ZW0tPm5hbWUoKTsKKyNlbHNlCiAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmls
ZUl0ZW0tPm5hbWUoKTsKKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBs
aWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJl
cGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRo
LmlzRW1wdHkoKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAkocmV2aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDE0IEBA
IGJvb2wgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c011bHQKICAgICByZXR1cm4gIWlu
cHV0LT5nZXRBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKS5pc051bGwoKTsKIH0KIAorI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQorYm9vbCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dz
RGlyZWN0b3J5VXBsb2FkKCkKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiAhaW5wdXQtPmdl
dEF0dHJpYnV0ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRpZgorCiBT
dHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFjY2VwdFR5cGVzKCkKIHsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPmFjY2VwdCgpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lv
biA2MjMzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZhbHVl
Q2hhbmdlZCgpOwogICAgIHZvaWQgcmVwYWludCgpIHsgUmVuZGVyQmxvY2s6OnJlcGFpbnQoKTsg
fQogICAgIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpOworI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorICAgIGJvb2wgYWxsb3dzRGlyZWN0b3J5VXBsb2FkKCk7CisjZW5kaWYKICAgICBT
dHJpbmcgYWNjZXB0VHlwZXMoKTsKICAgICB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hv
b3NlciosIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60323</attachid>
            <date>2010-07-01 17:57:41 -0700</date>
            <delta_ts>2010-07-02 10:00:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100701175740.patch</filename>
            <type>text/plain</type>
            <size>13193</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDYtMTggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGZlYXR1cmUgb2YgZGlyZWN0b3J5IGF0dHJpYnV0ZSBvbiA8aW5wdXQgdHlwZT0i
ZmlsZSI+IHdoaWNoCisgICAgICAgIGVuYWJsZXMgdGhlIE9TIHRvIHByZXNlbnQgYSBmb2xkZXIg
cGlja2VyIGluc3RlYWQgb2YgYSBmaWxlIHBpY2tlciBkaWFsb2cuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDg3MgorCisgICAgICAgICogaHRtbC9C
bG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0bWwv
QmxvYi5oOgorICAgICAgICAqIGh0bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
OjpGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZTo6cGF0aCk6CisgICAgICAgICogaHRtbC9GaWxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvRmlsZS5pZGw6CisgICAgICAgICogaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW46IGFkZCAnd2Via2l0ZGlyZWN0b3J5JyBhdHRyaWJ1dGUK
KyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlyZWN0b3J5KToKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9iSXRl
bS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJdGVtOjpyZWxhdGl2ZVBhdGgpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hv
b3Nlcjo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1
ZVBhaXJJdGVtcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphbGxvd3NE
aXJlY3RvcnlVcGxvYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5oOgorCiAyMDEwLTA3LTAxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjIzMjEuCkluZGV4
OiBXZWJDb3JlL2h0bWwvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jsb2Iu
Y3BwCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNiArNDMsMTEgQEAgQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IEJsbwogICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtc1tpXSk7CiB9CiAKK0Jsb2I6OkJs
b2IoY29uc3QgUGFzc1JlZlB0cjxCbG9iSXRlbT4mIGl0ZW0pCit7CisgICAgbV9pdGVtcy5hcHBl
bmQoaXRlbSk7Cit9CisKIEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIC8v
IE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlrZSBGaWxlKHBhdGgp
LgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
QmxvYi5oCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgQmxvYihj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYpOworICAgIEJsb2IoY29uc3Qg
UGFzc1JlZlB0cjxCbG9iSXRlbT4mKTsKIAogICAgIC8vIEZJWE1FOiBEZXByZWNhdGVkIGNvbnN0
cnVjdG9yLiAgU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9yIEJsb2I6OmNyZWF0ZShwYXRoKS4KICAg
ICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuY3BwCShyZXZpc2lvbiA2MjMzOSkKKysr
IFdlYkNvcmUvaHRtbC9GaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
OiBCbG9iKHBhdGgpCiB7CisgICAgSW5pdCgpOworfQorCit2b2lkIEZpbGU6OkluaXQoKQorewog
ICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgo
KSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWls
dXJlLgogICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUgPSBuYW1lKCk7CiAgICAgaW50IGluZGV4
ID0gZmlsZU5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKQEAgLTQxLDkgKzQ2LDI3IEBAIEZpbGU6OkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgICAgICBtX3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5
OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihmaWxlTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7
CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK0ZpbGU6OkZpbGUoY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgOiBCbG9iKEZp
bGVCbG9iSXRlbTo6Y3JlYXRlKGZpbGVQYXRoLCByZWxhdGl2ZVBhdGgpKQoreworICAgIEluaXQo
KTsKK30KKyNlbmRpZgorCiBjb25zdCBTdHJpbmcmIEZpbGU6Om5hbWUoKSBjb25zdAogewogICAg
IHJldHVybiBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpLT5uYW1lKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2NvbnN0IFN0cmluZyYgRmlsZTo6cGF0aCgpIGNv
bnN0Cit7CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBpdGVtID0gaXRlbXMoKS5hdCgwKS0+dG9G
aWxlQmxvYkl0ZW0oKTsKKyAgICBpZiAoaXRlbS0+aGFzUmVsYXRpdmVQYXRoKCkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZWxhdGl2ZVBhdGhGaWxlQmxvYkl0ZW0qPihpdGVt
KS0+cmVsYXRpdmVQYXRoKCk7CisgICAgcmV0dXJuIG5hbWUoKTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9GaWxlLmgJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9odG1s
L0ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksMTkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCkpOwogICAgIH0KIAorI2lmIEVOQUJMRShE
SVJFQ1RPUllfVVBMT0FEKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHJlbGF0aXZlUGF0aCwgZmlsZSkpOworICAgIH0K
KyNlbmRpZgorCiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0OworI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQorICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0OworI2VuZGlmCiAKICAg
ICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUgcmVtb3ZlZC4KICAgICBjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZSgpOyB9CkBAIC00OSw2ICs1
OSwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
OworICAgIHZvaWQgSW5pdCgpOworCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAg
RmlsZShjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0Zp
bGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9GaWxlLmlkbAkocmV2aXNpb24gNjIz
MzkpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBHZW5lcmF0ZVRvSlMKICAgICBdIEZpbGUgOiBC
bG9iIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPURJUkVDVE9SWV9VUExPQURdIERPTVN0
cmluZyBwYXRoOwogCiAgICAgICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBi
ZSByZW1vdmVkLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZpbGVOYW1l
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiA2MjMzOSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI4
MSw1ICsyODEsNiBAQCB2ZXJzaW9uCiB2aWV3c291cmNlCiB2bGluawogdnNwYWNlCit3ZWJraXRk
aXJlY3RvcnkKIHdpZHRoCiB3cmFwCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk2Nyw4ICsxOTY3LDI5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0RmlsZUxpc3RGcm9tUmUKIHsKICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOwogICAgIGludCBz
aXplID0gcGF0aHMuc2l6ZSgpOworCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAg
Ly8gSWYgYSBkaXJlY3RvcnkgaXMgYmVpbmcgc2VsZWN0ZWQsIHRoZSBVSSBhbGxvd3MgYSBkaXJl
Y3RvcnkgdG8gYmUgY2hvc2VuCisgICAgLy8gYW5kIHRoZSBwYXRocyBwcm92aWRlZCBoZXJlIHNo
YXJlIGEgc2luZ2xlIHJvb3QgZGlyZWN0b3J5LgorICAgIGlmICh3ZWJraXRkaXJlY3RvcnkoKSAm
JiBzaXplID4gMCkgeworICAgICAgICBTdHJpbmcgcm9vdFBhdGggPSBkaXJlY3RvcnlOYW1lKHBh
dGhzWzBdKTsKKyAgICAgICAgLy8gRmluZCB0aGUgY29tbW9uIHJvb3QgcGF0aC4KKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIHdoaWxlICghcGF0
aHNbaV0uc3RhcnRzV2l0aChyb290UGF0aCkpCisgICAgICAgICAgICAgICAgcm9vdFBhdGggPSBk
aXJlY3RvcnlOYW1lKHJvb3RQYXRoKTsKKyAgICAgICAgfQorICAgICAgICByb290UGF0aCA9IGRp
cmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICBBU1NFUlQocm9vdFBhdGgubGVuZ3RoKCkp
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIG1f
ZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0uc3Vic3RyaW5nKDEgKyByb290
UGF0aC5sZW5ndGgoKSksIHBhdGhzW2ldKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQo
RmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7CisgICAgfQorI2Vsc2UKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7IGkrKykKICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0
ZShwYXRoc1tpXSkpOworI2VuZGlmCiAKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKHRydWUpOwogICAgIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0
aGlzKTsKQEAgLTI0NDgsNiArMjQ2OSwxMyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6Om11bHRp
cGxlKCkgY29uc3QKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShtdWx0aXBsZUF0dHIpLmlzTnVs
bCgpOwogfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCitib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OndlYmtpdGRpcmVjdG9yeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFnZXRBdHRyaWJ1
dGUod2Via2l0ZGlyZWN0b3J5QXR0cikuaXNOdWxsKCk7Cit9CisjZW5kaWYKKwogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRTaXplKHVuc2lnbmVkIHNpemUpCiB7CiAgICAgc2V0QXR0cmlidXRl
KHNpemVBdHRyLCBTdHJpbmc6Om51bWJlcihzaXplKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3NywxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IG11bHRpcGxlKCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBi
b29sIHdlYmtpdGRpcmVjdG9yeSgpIGNvbnN0OworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wg
aXNBdXRvZmlsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9hdXRvZmlsbGVkOyB9CiAgICAgdm9pZCBz
ZXRBdXRvZmlsbGVkKGJvb2wgdmFsdWUgPSB0cnVlKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmlkbAkocmV2aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgbW9kdWxlIGh0bWwgewog
ICAgICAgICBhdHRyaWJ1dGUgbG9uZyBtYXhMZW5ndGggc2V0dGVyIHJhaXNlcyhET01FeGNlcHRp
b24pOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBtaW47CiAgICAgICAg
IGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBtdWx0aXBsZTsKKyAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0LCBDb25kaXRpb25hbD1ESVJFQ1RPUllfVVBMT0FEXSBib29sZWFuIHdlYmtpdGRp
cmVjdG9yeTsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbmFtZTsKICAg
ICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgcGF0dGVybjsKICAgICAgICAgYXR0
cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgcGxhY2Vob2xkZXI7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL0Jsb2JJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJ
dGVtLmNwcAkocmV2aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTUgQEAgRmlsZUJsb2JJdGVtOjpGaWxlQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJgogewogfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CitGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmVQYXRoKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX2ZpbGVOYW1l
KHBhdGhHZXRGaWxlTmFtZShtX3BhdGgpKQorICAgICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRpdmVQ
YXRoKQoreworfQorI2VuZGlmCisKIHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNp
emUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9CbG9iSXRlbS5oCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxv
Ykl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCwxNCBAQCBwdWJsaWM6CiBjbGFz
cyBGaWxlQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNpZiBFTkFC
TEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpOworI2Vu
ZGlmCiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Zp
bGVOYW1lOyB9CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBjb25zdCBTdHJp
bmcmIHJlbGF0aXZlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVQYXRoOyB9CisjZW5k
aWYKIAogICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGxvbmcgc2l6ZSgpIGNvbnN0OwpAQCAtMTIwLDggKzEyNiwxNCBAQCBwdWJsaWM6CiAKIHByb3Rl
Y3RlZDoKICAgICBGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNpZiBFTkFCTEUo
RElSRUNUT1JZX1VQTE9BRCkKKyAgICBGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7CisjZW5kaWYKICAgICBTdHJpbmcgbV9wYXRoOwog
ICAgIFN0cmluZyBtX2ZpbGVOYW1lOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAg
IFN0cmluZyBtX3JlbGF0aXZlUGF0aDsKKyNlbmRpZgogfTsKIAogY2xhc3MgU3RyaW5nQmxvYkl0
ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHJl
dmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVD
aGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KCkgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCkgPSAwOworI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA9IDA7Cisj
ZW5kaWYKICAgICB2aXJ0dWFsIFN0cmluZyBhY2NlcHRUeXBlcygpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKSA9IDA7CiAgICAgdmlydHVhbCB+RmlsZUNob29zZXJDbGllbnQoKTsKQEAgLTcwLDYgKzcz
LDkgQEAgcHVibGljOgogICAgIHZvaWQgaWNvbkxvYWRlZChQYXNzUmVmUHRyPEljb24+KTsKIAog
ICAgIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8g
bV9jbGllbnQtPmFsbG93c011bHRpcGxlRmlsZXMoKSA6IGZhbHNlOyB9CisjaWYgRU5BQkxFKERJ
UkVDVE9SWV9VUExPQUQpCisgICAgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5hbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA6IGZh
bHNlOyB9CisjZW5kaWYKICAgICAvLyBBY2NlcHRhYmxlIE1JTUUgdHlwZXMuICBJdCdzIGFuICdh
Y2NlcHQnIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBJTlBVVCBlbGVtZW50
LgogICAgIFN0cmluZyBhY2NlcHRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9j
bGllbnQtPmFjY2VwdFR5cGVzKCkgOiBTdHJpbmcoKTsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwxMiBA
QCB2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjCiAgICAgICAgICAgICBj
b25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdmFsdWUtPnRvRmlsZUJsb2JJdGVtKCk7CiAg
ICAgICAgICAgICBpZiAoZmlsZUl0ZW0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHBhdGggPSBmaWxlSXRlbS0+cGF0aCgpOworCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gIWZpbGVJdGVtLT5yZWxhdGl2ZVBh
dGgoKS5pc0VtcHR5KCkgPyBmaWxlSXRlbS0+cmVsYXRpdmVQYXRoKCkgOiBmaWxlSXRlbS0+bmFt
ZSgpOworI2Vsc2UKICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+
bmFtZSgpOworI2VuZGlmCiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9u
IHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1l
bnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsMTQgQEAgYm9vbCBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzTXVsdAogICAgIHJldHVybiAhaW5wdXQtPmdl
dEF0dHJpYnV0ZShtdWx0aXBsZUF0dHIpLmlzTnVsbCgpOwogfQogCisjaWYgRU5BQkxFKERJUkVD
VE9SWV9VUExPQUQpCitib29sIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphbGxvd3NEaXJlY3Rv
cnlVcGxvYWQoKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgcmV0dXJuICFpbnB1dC0+Z2V0QXR0cmli
dXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpLmlzTnVsbCgpOworfQorI2VuZGlmCisKIFN0cmluZyBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWNjZXB0VHlwZXMoKQogewogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+YWNjZXB0KCk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHJldmlzaW9uIDYyMzM5
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdmFsdWVDaGFuZ2Vk
KCk7CiAgICAgdm9pZCByZXBhaW50KCkgeyBSZW5kZXJCbG9jazo6cmVwYWludCgpOyB9CiAgICAg
Ym9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCk7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CisgICAgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKTsKKyNlbmRpZgogICAgIFN0cmluZyBh
Y2NlcHRUeXBlcygpOwogICAgIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60374</attachid>
            <date>2010-07-02 10:00:47 -0700</date>
            <delta_ts>2010-07-07 15:42:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100702100046.patch</filename>
            <type>text/plain</type>
            <size>13136</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDYtMTggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGZlYXR1cmUgb2YgZGlyZWN0b3J5IGF0dHJpYnV0ZSBvbiA8aW5wdXQgdHlwZT0i
ZmlsZSI+IHdoaWNoCisgICAgICAgIGVuYWJsZXMgdGhlIE9TIHRvIHByZXNlbnQgYSBmb2xkZXIg
cGlja2VyIGluc3RlYWQgb2YgYSBmaWxlIHBpY2tlciBkaWFsb2cuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDg3MgorCisgICAgICAgICogaHRtbC9C
bG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0bWwv
QmxvYi5oOgorICAgICAgICAqIGh0bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
OjpGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZTo6cGF0aCk6CisgICAgICAgICogaHRtbC9GaWxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvRmlsZS5pZGw6CisgICAgICAgICogaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW46IGFkZCAnd2Via2l0ZGlyZWN0b3J5JyBhdHRyaWJ1dGUK
KyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlyZWN0b3J5KToKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9iSXRl
bS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJdGVtOjpyZWxhdGl2ZVBhdGgpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hv
b3Nlcjo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1
ZVBhaXJJdGVtcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphbGxvd3NE
aXJlY3RvcnlVcGxvYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5oOgorCiAyMDEwLTA3LTAxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjIzMjEuCkluZGV4
OiBXZWJDb3JlL2h0bWwvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Jsb2Iu
Y3BwCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNiArNDMsMTEgQEAgQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IEJsbwogICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtc1tpXSk7CiB9CiAKK0Jsb2I6OkJs
b2IoY29uc3QgUGFzc1JlZlB0cjxCbG9iSXRlbT4mIGl0ZW0pCit7CisgICAgbV9pdGVtcy5hcHBl
bmQoaXRlbSk7Cit9CisKIEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIC8v
IE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlrZSBGaWxlKHBhdGgp
LgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
QmxvYi5oCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgQmxvYihj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYpOworICAgIEJsb2IoY29uc3Qg
UGFzc1JlZlB0cjxCbG9iSXRlbT4mKTsKIAogICAgIC8vIEZJWE1FOiBEZXByZWNhdGVkIGNvbnN0
cnVjdG9yLiAgU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9yIEJsb2I6OmNyZWF0ZShwYXRoKS4KICAg
ICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuY3BwCShyZXZpc2lvbiA2MjMzOSkKKysr
IFdlYkNvcmUvaHRtbC9GaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
OiBCbG9iKHBhdGgpCiB7CisgICAgSW5pdCgpOworfQorCit2b2lkIEZpbGU6OkluaXQoKQorewog
ICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgo
KSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWls
dXJlLgogICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUgPSBuYW1lKCk7CiAgICAgaW50IGluZGV4
ID0gZmlsZU5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKQEAgLTQxLDkgKzQ2LDI0IEBAIEZpbGU6OkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgICAgICBtX3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5
OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihmaWxlTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7
CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK0ZpbGU6OkZpbGUoY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgOiBCbG9iKEZp
bGVCbG9iSXRlbTo6Y3JlYXRlKGZpbGVQYXRoLCByZWxhdGl2ZVBhdGgpKQoreworICAgIEluaXQo
KTsKK30KKyNlbmRpZgorCiBjb25zdCBTdHJpbmcmIEZpbGU6Om5hbWUoKSBjb25zdAogewogICAg
IHJldHVybiBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpLT5uYW1lKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2NvbnN0IFN0cmluZyYgRmlsZTo6cGF0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCktPnJlbGF0
aXZlUGF0aCgpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvaHRtbC9GaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuaAkocmV2
aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw5ICszOSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShw
YXRoKSk7CiAgICAgfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIGZpbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUo
cmVsYXRpdmVQYXRoLCBmaWxlKSk7CisgICAgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wg
aXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBuYW1l
KCkgY29uc3Q7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgY29uc3QgU3RyaW5n
JiBwYXRoKCkgY29uc3Q7CisjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1
dGVzLiBUbyBiZSByZW1vdmVkLgogICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7
IHJldHVybiBuYW1lKCk7IH0KQEAgLTQ5LDYgKzU5LDExIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBJbml0KCk7CisKKyNpZiBF
TkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQ
YXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRmlsZS5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0ZpbGUuaWRsCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAg
IEdlbmVyYXRlVG9KUwogICAgIF0gRmlsZSA6IEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIG5hbWU7CisjaWYgZGVmaW5lZChFTkFCTEVfRElSRUNUT1JZX1VQTE9B
RCkgJiYgRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBwYXRoOworI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0
dHJpYnV0ZXMuIFRvIGJlIHJlbW92ZWQuCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgZmlsZU5hbWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHJldmlz
aW9uIDYyMzM5KQorKysgV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjgxLDUgKzI4MSw2IEBAIHZlcnNpb24KIHZpZXdzb3VyY2UKIHZsaW5rCiB2
c3BhY2UKK3dlYmtpdGRpcmVjdG9yeQogd2lkdGgKIHdyYXAKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY3LDggKzE5NjcsMjkgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZQogewogICAgIG1fZmlsZUxpc3QtPmNsZWFy
KCk7CiAgICAgaW50IHNpemUgPSBwYXRocy5zaXplKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZ
X1VQTE9BRCkKKyAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwgdGhlIFVJ
IGFsbG93cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KKyAgICAvLyBhbmQgdGhlIHBhdGhzIHBy
b3ZpZGVkIGhlcmUgc2hhcmUgYSBzaW5nbGUgcm9vdCBkaXJlY3RvcnkuCisgICAgaWYgKHdlYmtp
dGRpcmVjdG9yeSgpICYmIHNpemUgPiAwKSB7CisgICAgICAgIFN0cmluZyByb290UGF0aCA9IGRp
cmVjdG9yeU5hbWUocGF0aHNbMF0pOworICAgICAgICAvLyBGaW5kIHRoZSBjb21tb24gcm9vdCBw
YXRoLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAg
ICAgd2hpbGUgKCFwYXRoc1tpXS5zdGFydHNXaXRoKHJvb3RQYXRoKSkKKyAgICAgICAgICAgICAg
ICByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocm9vdFBhdGgpOworICAgICAgICB9CisgICAgICAg
IHJvb3RQYXRoID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIEFTU0VSVChyb290
UGF0aC5sZW5ndGgoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQor
ICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXS5zdWJz
dHJpbmcoMSArIHJvb3RQYXRoLmxlbmd0aCgpKSwgcGF0aHNbaV0pKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIG1fZmls
ZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKKyAgICB9CisjZWxzZQogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICBtX2ZpbGVMaXN0LT5hcHBl
bmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7CisjZW5kaWYKIAogICAgIHNldEZvcm1Db250cm9s
VmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3Jt
U3RhdGVDaGFuZ2VkKHRoaXMpOwpAQCAtMjQ0OCw2ICsyNDY5LDEzIEBAIGJvb2wgSFRNTElucHV0
RWxlbWVudDo6bXVsdGlwbGUoKSBjb25zdAogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG11bHRp
cGxlQXR0cikuaXNOdWxsKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jv
b2wgSFRNTElucHV0RWxlbWVudDo6d2Via2l0ZGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIWdldEF0dHJpYnV0ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRp
ZgorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNpemUodW5zaWduZWQgc2l6ZSkKIHsKICAg
ICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHNpemUpKTsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDEwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdDsKIAorI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorICAgIGJvb2wgd2Via2l0ZGlyZWN0b3J5KCkgY29uc3Q7CisjZW5kaWYKKwogICAg
IHZpcnR1YWwgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9maWxsZWQ7
IH0KICAgICB2b2lkIHNldEF1dG9maWxsZWQoYm9vbCB2YWx1ZSA9IHRydWUpOwogCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIG1heExlbmd0aCBzZXR0ZXIgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5n
IG1pbjsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIG11bHRpcGxlOworI2lm
IGRlZmluZWQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICYmIEVOQUJMRV9ESVJFQ1RPUllfVVBM
T0FECisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiB3ZWJraXRkaXJlY3Rvcnk7
CisjZW5kaWYKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbmFtZTsKICAg
ICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgcGF0dGVybjsKICAgICAgICAgYXR0
cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgcGxhY2Vob2xkZXI7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL0Jsb2JJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJ
dGVtLmNwcAkocmV2aXNpb24gNjIzMzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTUgQEAgRmlsZUJsb2JJdGVtOjpGaWxlQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJgogewogfQogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CitGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmVQYXRoKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX2ZpbGVOYW1l
KHBhdGhHZXRGaWxlTmFtZShtX3BhdGgpKQorICAgICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRpdmVQ
YXRoKQoreworfQorI2VuZGlmCisKIHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNp
emUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9CbG9iSXRlbS5oCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxv
Ykl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCwxNCBAQCBwdWJsaWM6CiBjbGFz
cyBGaWxlQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNpZiBFTkFC
TEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpOworI2Vu
ZGlmCiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Zp
bGVOYW1lOyB9CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBjb25zdCBTdHJp
bmcmIHJlbGF0aXZlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVQYXRoOyB9CisjZW5k
aWYKIAogICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGxvbmcgc2l6ZSgpIGNvbnN0OwpAQCAtMTIwLDggKzEyNiwxNCBAQCBwdWJsaWM6CiAKIHByb3Rl
Y3RlZDoKICAgICBGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNpZiBFTkFCTEUo
RElSRUNUT1JZX1VQTE9BRCkKKyAgICBGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7CisjZW5kaWYKICAgICBTdHJpbmcgbV9wYXRoOwog
ICAgIFN0cmluZyBtX2ZpbGVOYW1lOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAg
IFN0cmluZyBtX3JlbGF0aXZlUGF0aDsKKyNlbmRpZgogfTsKIAogY2xhc3MgU3RyaW5nQmxvYkl0
ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHJl
dmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVD
aGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KCkgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCkgPSAwOworI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA9IDA7Cisj
ZW5kaWYKICAgICB2aXJ0dWFsIFN0cmluZyBhY2NlcHRUeXBlcygpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKSA9IDA7CiAgICAgdmlydHVhbCB+RmlsZUNob29zZXJDbGllbnQoKTsKQEAgLTcwLDYgKzcz
LDkgQEAgcHVibGljOgogICAgIHZvaWQgaWNvbkxvYWRlZChQYXNzUmVmUHRyPEljb24+KTsKIAog
ICAgIGJvb2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8g
bV9jbGllbnQtPmFsbG93c011bHRpcGxlRmlsZXMoKSA6IGZhbHNlOyB9CisjaWYgRU5BQkxFKERJ
UkVDVE9SWV9VUExPQUQpCisgICAgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5hbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA6IGZh
bHNlOyB9CisjZW5kaWYKICAgICAvLyBBY2NlcHRhYmxlIE1JTUUgdHlwZXMuICBJdCdzIGFuICdh
Y2NlcHQnIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBJTlBVVCBlbGVtZW50
LgogICAgIFN0cmluZyBhY2NlcHRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9j
bGllbnQtPmFjY2VwdFR5cGVzKCkgOiBTdHJpbmcoKTsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDYyMzM5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwxMiBA
QCB2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjCiAgICAgICAgICAgICBj
b25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdmFsdWUtPnRvRmlsZUJsb2JJdGVtKCk7CiAg
ICAgICAgICAgICBpZiAoZmlsZUl0ZW0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHBhdGggPSBmaWxlSXRlbS0+cGF0aCgpOworCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gIWZpbGVJdGVtLT5yZWxhdGl2ZVBh
dGgoKS5pc0VtcHR5KCkgPyBmaWxlSXRlbS0+cmVsYXRpdmVQYXRoKCkgOiBmaWxlSXRlbS0+bmFt
ZSgpOworI2Vsc2UKICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+
bmFtZSgpOworI2VuZGlmCiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9u
IHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1l
bnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCShyZXZpc2lvbiA2MjMzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsMTQgQEAgYm9vbCBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzTXVsdAogICAgIHJldHVybiAhaW5wdXQtPmdl
dEF0dHJpYnV0ZShtdWx0aXBsZUF0dHIpLmlzTnVsbCgpOwogfQogCisjaWYgRU5BQkxFKERJUkVD
VE9SWV9VUExPQUQpCitib29sIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphbGxvd3NEaXJlY3Rv
cnlVcGxvYWQoKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgcmV0dXJuICFpbnB1dC0+Z2V0QXR0cmli
dXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpLmlzTnVsbCgpOworfQorI2VuZGlmCisKIFN0cmluZyBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWNjZXB0VHlwZXMoKQogewogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+YWNjZXB0KCk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHJldmlzaW9uIDYyMzM5
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdmFsdWVDaGFuZ2Vk
KCk7CiAgICAgdm9pZCByZXBhaW50KCkgeyBSZW5kZXJCbG9jazo6cmVwYWludCgpOyB9CiAgICAg
Ym9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCk7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CisgICAgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKTsKKyNlbmRpZgogICAgIFN0cmluZyBh
Y2NlcHRUeXBlcygpOwogICAgIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKEZpbGVDaG9vc2VyKiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60791</attachid>
            <date>2010-07-07 15:42:42 -0700</date>
            <delta_ts>2010-07-07 18:27:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100707154241.patch</filename>
            <type>text/plain</type>
            <size>17901</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
QmxvYi5jcHAJKHJldmlzaW9uIDYyNjg0KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgQmxvCiAgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zW2ldKTsKIH0KIAorQmxv
Yjo6QmxvYihjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYgaXRlbSkKK3sKKyAgICBtX2l0ZW1z
LmFwcGVuZChpdGVtKTsKK30KKwogQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAg
ICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhlIHR5cGUgdW5saWtlIEZpbGUo
cGF0aCkuCkluZGV4OiBXZWJDb3JlL2h0bWwvQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9CbG9iLmgJKHJldmlzaW9uIDYyNjg0KQorKysgV2ViQ29yZS9odG1sL0Jsb2IuaAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBC
bG9iKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0Jik7CisgICAgQmxvYihj
b25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYpOwogCiAgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQg
Y29uc3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBhdGgp
LgogICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9GaWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5jcHAJKHJldmlzaW9uIDYyNjg0
KQorKysgV2ViQ29yZS9odG1sL0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
ICAgICA6IEJsb2IocGF0aCkKIHsKKyAgICBJbml0KCk7Cit9CisKKyNpZiBFTkFCTEUoRElSRUNU
T1JZX1VQTE9BRCkKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0
IFN0cmluZyYgZmlsZVBhdGgpCisgICAgOiBCbG9iKEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGZpbGVQ
YXRoLCByZWxhdGl2ZVBhdGgpKQoreworICAgIEluaXQoKTsKK30KKyNlbmRpZgorCit2b2lkIEZp
bGU6OkluaXQoKQorewogICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRN
SU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIgdXBvbiBmYWlsdXJlLgogICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUgPSBuYW1lKCk7
CiAgICAgaW50IGluZGV4ID0gZmlsZU5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKQEAgLTQ2LDQgKzU5
LDExIEBAIGNvbnN0IFN0cmluZyYgRmlsZTo6bmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIGl0ZW1z
KCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCktPm5hbWUoKTsKIH0KIAorI2lmIEVOQUJMRShESVJF
Q1RPUllfVVBMT0FEKQorY29uc3QgU3RyaW5nJiBGaWxlOjpwYXRoKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+cmVsYXRpdmVQYXRoKCk7Cit9
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0Zp
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5oCShyZXZpc2lvbiA2MjY4NCkK
KysrIFdlYkNvcmUvaHRtbC9GaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDE5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHBhdGgpKTsKICAgICB9
CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
aWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgZmls
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShyZWxhdGl2ZVBhdGgs
IGZpbGUpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdDsKKyNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25z
dDsKKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJlIHJl
bW92ZWQuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUo
KTsgfQpAQCAtNDksNiArNTksMTEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIEluaXQoKTsKKworI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQorICAgIEZpbGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0
cmluZyYgcGF0aCk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9GaWxlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5p
ZGwJKHJldmlzaW9uIDYyNjg0KQorKysgV2ViQ29yZS9odG1sL0ZpbGUuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw5IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgR2VuZXJhdGVUb0pT
CiAgICAgXSBGaWxlIDogQmxvYiB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgbmFtZTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAmJiBFTkFCTEVf
RElSRUNUT1JZX1VQTE9BRAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBh
dGg7CisjZW5kaWYKIAogICAgICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8g
YmUgcmVtb3ZlZC4KICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBmaWxlTmFt
ZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2aXNpb24gNjI2ODQpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODEsNSArMjgxLDYgQEAgdmVyc2lvbgogdmlld3NvdXJjZQogdmxpbmsKIHZzcGFjZQord2Via2l0
ZGlyZWN0b3J5CiB3aWR0aAogd3JhcApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
cmV2aXNpb24gNjI2ODQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvcm1E
YXRhTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0xOTY3LDggKzE5NjgsMzAgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZQogewogICAgIG1fZmlsZUxpc3Qt
PmNsZWFyKCk7CiAgICAgaW50IHNpemUgPSBwYXRocy5zaXplKCk7CisKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKKyAgICAvLyBJZiBhIGRpcmVjdG9yeSBpcyBiZWluZyBzZWxlY3RlZCwg
dGhlIFVJIGFsbG93cyBhIGRpcmVjdG9yeSB0byBiZSBjaG9zZW4KKyAgICAvLyBhbmQgdGhlIHBh
dGhzIHByb3ZpZGVkIGhlcmUgc2hhcmUgYSByb290IGRpcmVjdG9yeSBzb21ld2hlcmUgdXAgdGhl
IHRyZWU7CisgICAgLy8gd2Ugd2FudCB0byBzdG9yZSBvbmx5IHRoZSByZWxhdGl2ZSBwYXRocyBm
cm9tIHRoYXQgcG9pbnQuCisgICAgaWYgKHdlYmtpdGRpcmVjdG9yeSgpICYmIHNpemUgPiAwKSB7
CisgICAgICAgIFN0cmluZyByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUocGF0aHNbMF0pOworICAg
ICAgICAvLyBGaW5kIHRoZSBjb21tb24gcm9vdCBwYXRoLgorICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgd2hpbGUgKCFwYXRoc1tpXS5zdGFydHNX
aXRoKHJvb3RQYXRoKSkKKyAgICAgICAgICAgICAgICByb290UGF0aCA9IGRpcmVjdG9yeU5hbWUo
cm9vdFBhdGgpOworICAgICAgICB9CisgICAgICAgIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFtZShy
b290UGF0aCk7CisgICAgICAgIEFTU0VSVChyb290UGF0aC5sZW5ndGgoKSk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXS5zdWJzdHJpbmcoMSArIHJvb3RQYXRoLmxlbmd0aCgp
KSwgcGF0aHNbaV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7IGkrKykKKyAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUo
cGF0aHNbaV0pKTsKKyAgICB9CisjZWxzZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKQogICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7
CisjZW5kaWYKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7
CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwpAQCAtMjQ0
OCw2ICsyNDcxLDEzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bXVsdGlwbGUoKSBjb25zdAog
ICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG11bHRpcGxlQXR0cikuaXNOdWxsKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6d2Via2l0
ZGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWdldEF0dHJpYnV0ZSh3ZWJraXRkaXJl
Y3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnNldFNpemUodW5zaWduZWQgc2l6ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIFN0
cmluZzo6bnVtYmVyKHNpemUpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNp
b24gNjI2ODQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzcsNiArMTc3LDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbXVsdGlwbGUoKSBj
b25zdDsKIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGJvb2wgd2Via2l0ZGly
ZWN0b3J5KCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9maWxsZWQo
KSBjb25zdCB7IHJldHVybiBtX2F1dG9maWxsZWQ7IH0KICAgICB2b2lkIHNldEF1dG9maWxsZWQo
Ym9vbCB2YWx1ZSA9IHRydWUpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCShy
ZXZpc2lvbiA2MjY4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJp
YnV0ZSBsb25nIG1heExlbmd0aCBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAg
IGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIG1pbjsKICAgICAgICAgYXR0cmlidXRlIFtS
ZWZsZWN0XSBib29sZWFuIG11bHRpcGxlOworI2lmIGRlZmluZWQoRU5BQkxFX0RJUkVDVE9SWV9V
UExPQUQpICYmIEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FECisgICAgICAgIGF0dHJpYnV0ZSBbUmVm
bGVjdF0gYm9vbGVhbiB3ZWJraXRkaXJlY3Rvcnk7CisjZW5kaWYKICAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0XSBET01TdHJpbmcgbmFtZTsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBE
T01TdHJpbmcgcGF0dGVybjsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcg
cGxhY2Vob2xkZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcAkocmV2aXNpb24gNjI2ODQpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiAr
NzgsMjAgQEAgRmlsZUJsb2JJdGVtOjpGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJgogewogfQog
CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxl
QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRp
dmVQYXRoKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5l
dyBGaWxlQmxvYkl0ZW0ocGF0aCwgcmVsYXRpdmVQYXRoKSkpOworfQorCitGaWxlQmxvYkl0ZW06
OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQ
YXRoKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX2ZpbGVOYW1lKHBhdGhHZXRGaWxlTmFt
ZShtX3BhdGgpKQorICAgICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoKQoreworfQorI2Vu
ZGlmCisKIHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNpemUoKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL0Jsb2JJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5o
CShyZXZpc2lvbiA2MjY4NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDggKzEwOCwxNCBAQCBwdWJsaWM6CiBjbGFzcyBGaWxlQmxvYkl0ZW0g
OiBwdWJsaWMgQmxvYkl0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJ
dGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQ
TE9BRCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpOworI2VuZGlmCiAgICAgdmlydHVh
bCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CiAgICAg
dmlydHVhbCBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVQYXRoOyB9CisjZW5kaWYKIAogICAgIC8vIEJs
b2JJdGVtIG1ldGhvZHMuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0OwpAQCAtMTIwLDggKzEyNiwxNCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBGaWxl
QmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKKyAgICBGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJl
bGF0aXZlUGF0aCk7CisjZW5kaWYKICAgICBTdHJpbmcgbV9wYXRoOwogICAgIFN0cmluZyBtX2Zp
bGVOYW1lOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIFN0cmluZyBtX3JlbGF0
aXZlUGF0aDsKKyNlbmRpZgogfTsKIAogY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMgRGF0
YUJsb2JJdGVtIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHJldmlzaW9uIDYyNjg0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NN
dWx0aXBsZUZpbGVzKCkgPSAwOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIHZp
cnR1YWwgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA9IDA7CisjZW5kaWYKICAgICB2aXJ0
dWFsIFN0cmluZyBhY2NlcHRUeXBlcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNv
bkZvckZpbGVzKEZpbGVDaG9vc2VyKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSA9IDA7CiAgICAg
dmlydHVhbCB+RmlsZUNob29zZXJDbGllbnQoKTsKQEAgLTcwLDYgKzczLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgaWNvbkxvYWRlZChQYXNzUmVmUHRyPEljb24+KTsKIAogICAgIGJvb2wgYWxsb3dz
TXVsdGlwbGVGaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPmFsbG93
c011bHRpcGxlRmlsZXMoKSA6IGZhbHNlOyB9CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CisgICAgYm9vbCBhbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVu
dCA/IG1fY2xpZW50LT5hbGxvd3NEaXJlY3RvcnlVcGxvYWQoKSA6IGZhbHNlOyB9CisjZW5kaWYK
ICAgICAvLyBBY2NlcHRhYmxlIE1JTUUgdHlwZXMuICBJdCdzIGFuICdhY2NlcHQnIGF0dHJpYnV0
ZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBJTlBVVCBlbGVtZW50LgogICAgIFN0cmluZyBh
Y2NlcHRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPmFjY2VwdFR5
cGVzKCkgOiBTdHJpbmcoKTsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAJKHJldmlzaW9uIDYyNjg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwxMiBAQCB2b2lkIEZvcm1EYXRh
OjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjCiAgICAgICAgICAgICBjb25zdCBGaWxlQmxvYkl0
ZW0qIGZpbGVJdGVtID0gdmFsdWUtPnRvRmlsZUJsb2JJdGVtKCk7CiAgICAgICAgICAgICBpZiAo
ZmlsZUl0ZW0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlSXRl
bS0+cGF0aCgpOworCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgICAgICAgICAg
ICAgU3RyaW5nIGZpbGVOYW1lID0gIWZpbGVJdGVtLT5yZWxhdGl2ZVBhdGgoKS5pc0VtcHR5KCkg
PyBmaWxlSXRlbS0+cmVsYXRpdmVQYXRoKCkgOiBmaWxlSXRlbS0+bmFtZSgpOworI2Vsc2UKICAg
ICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+bmFtZSgpOworI2VuZGlm
CiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxl
bmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhl
IHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lv
biA2MjY4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTAgKzk0LDIzIEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnZhbHVlQ2hhbmcKIAogYm9vbCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxs
b3dzTXVsdGlwbGVGaWxlcygpCiB7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAg
aWYgKGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpKQorICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYK
KwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KG5vZGUoKSk7CiAgICAgcmV0dXJuICFpbnB1dC0+Z2V0QXR0cmlidXRlKG11bHRpcGxl
QXR0cikuaXNOdWxsKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK2Jvb2wg
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpCit7CisgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
bm9kZSgpKTsKKyAgICByZXR1cm4gIWlucHV0LT5nZXRBdHRyaWJ1dGUod2Via2l0ZGlyZWN0b3J5
QXR0cikuaXNOdWxsKCk7Cit9CisjZW5kaWYKKwogU3RyaW5nIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjphY2NlcHRUeXBlcygpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihub2RlKCkpLT5hY2NlcHQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpbGVVcGxvYWRDb250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkocmV2aXNpb24gNjI2ODQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2
Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2YWx1ZUNoYW5nZWQoKTsKICAgICB2b2lkIHJlcGFp
bnQoKSB7IFJlbmRlckJsb2NrOjpyZXBhaW50KCk7IH0KICAgICBib29sIGFsbG93c011bHRpcGxl
RmlsZXMoKTsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBib29sIGFsbG93c0Rp
cmVjdG9yeVVwbG9hZCgpOworI2VuZGlmCiAgICAgU3RyaW5nIGFjY2VwdFR5cGVzKCk7CiAgICAg
dm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjcxMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA3LTA3ICBKb2huIEdyZWdn
ICA8am9obm55Z0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVuaXQgdGVzdCBmb3IgZXhwZXJpbWVudGFsIGRpcmVjdG9yeSB1cGxv
YWQgZmVhdHVyZS4gIE9ubHkgZW5hYmxlZCBvbiBjaHJvbWl1bSBzaW5jZSB0aGF0J3Mgd2hlcmUg
dGhlIGZlYXR1cmUgaXMgY29tcGlsZWQgaW4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MDg3MgorCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1dC1m
aWxlLWRpcmVjdG9yeS11cGxvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9T
a2lwcGVkOgorCiAyMDEwLTA3LTA3ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuICBDaHJvbWl1bSB0ZXN0IGV4cGVjdGF0aW9uIHVw
ZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3Rvcnkt
dXBsb2FkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKworUEFTUzogbmFtZSBpcyBm
aWxlMTsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDEvZmlsZTEKK1BBU1M6IG5hbWUgaXMgZmlsZTI7
IHBhdGggaXMgZGlydXBsb2FkL3BhdGgxL2ZpbGUyCitQQVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRo
IGlzIGRpcnVwbG9hZC9wYXRoMS9zdWJwYXRoMS9maWxlMQorUEFTUzogbmFtZSBpcyBmaWxlMTsg
cGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDIvZmlsZTEKK1BBU1M6IG5hbWUgaXMgZmlsZTE7IHBhdGgg
aXMgZGlydXBsb2FkL3BhdGgyL3N1YnBhdGgxL3N1YnBhdGgyL2ZpbGUxCitQQVNTOiBuYW1lIGlz
IGZpbGUyOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMi9maWxlMgorUEFTUzogbmFtZSBpcyBmaWxl
MTsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDMvZmlsZTEKK1BBU1M6IG5hbWUgaXMgZmlsZTE7IHBh
dGggaXMgZGlydXBsb2FkL2ZpbGUxCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5w
dXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8Ym9keT4KKzxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlcyIgaWQ9ImZpbGVzIiBvbmNo
YW5nZT0ib25JbnB1dEZpbGVDaGFuZ2UoKSIgd2Via2l0ZGlyZWN0b3J5PgorPHByZSBpZD0nb3V0
cHV0Jz48L3ByZT4KKworPHNjcmlwdD4KK3ZhciB0ZXN0RmlsZUxpc3QgPSBbCisgICAgeydwYXRo
JzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvcGF0aDEvZmlsZTEnLCAgICAgICAgICAgICAgICAgICAn
cmVscGF0aCc6ICdkaXJ1cGxvYWQvcGF0aDEvZmlsZTEnfSwKKyAgICB7J3BhdGgnOiAncmVzb3Vy
Y2VzL2RpcnVwbG9hZC9wYXRoMS9maWxlMicsICAgICAgICAgICAgICAgICAgICdyZWxwYXRoJzog
J2RpcnVwbG9hZC9wYXRoMS9maWxlMicgfSwKKyAgICB7J3BhdGgnOiAncmVzb3VyY2VzL2RpcnVw
bG9hZC9wYXRoMS9zdWJwYXRoMS9maWxlMScsICAgICAgICAgICdyZWxwYXRoJzogJ2RpcnVwbG9h
ZC9wYXRoMS9zdWJwYXRoMS9maWxlMSd9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBs
b2FkL3BhdGgyL2ZpbGUxJywgICAgICAgICAgICAgICAgICAgJ3JlbHBhdGgnOiAnZGlydXBsb2Fk
L3BhdGgyL2ZpbGUxJ30sCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvcGF0aDIv
c3VicGF0aDEvc3VicGF0aDIvZmlsZTEnLCAncmVscGF0aCc6ICdkaXJ1cGxvYWQvcGF0aDIvc3Vi
cGF0aDEvc3VicGF0aDIvZmlsZTEnfSwKKyAgICB7J3BhdGgnOiAncmVzb3VyY2VzL2RpcnVwbG9h
ZC9wYXRoMi9maWxlMicsICAgICAgICAgICAgICAgICAgICdyZWxwYXRoJzogJ2RpcnVwbG9hZC9w
YXRoMi9maWxlMid9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgzL2Zp
bGUxJywgICAgICAgICAgICAgICAgICAgJ3JlbHBhdGgnOiAnZGlydXBsb2FkL3BhdGgzL2ZpbGUx
J30sCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvZmlsZTEnLCAgICAgICAgICAg
ICAgICAgICAgICAgICAncmVscGF0aCc6ICdkaXJ1cGxvYWQvZmlsZTEnfSwKK107CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRwdXQn
KS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlICsgIlxuIikpOwor
fQorCitmdW5jdGlvbiBvbklucHV0RmlsZUNoYW5nZSgpCit7CisgICAgdmFyIGZpbGVzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGVzIikuZmlsZXM7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoZmlsZXNbaV0ucGF0aCAhPSB0
ZXN0RmlsZUxpc3RbaV0ucmVscGF0aCkKKyAgICAgICAgICAgIGxvZygiRkFJTDogbmFtZSBpcyAi
ICsgZmlsZXNbaV0ubmFtZSArICI7IHBhdGggaXMgIiArIGZpbGVzW2ldLnBhdGggKyAiIGJ1dCBz
aG91bGQgYmUgIiArIHRlc3RGaWxlTGlzdFtpXS5yZWxwYXRoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbG9nKCJQQVNTOiBuYW1lIGlzICIgKyBmaWxlc1tpXS5uYW1lICsgIjsgcGF0aCBp
cyAiICsgZmlsZXNbaV0ucGF0aCk7CisgICAgfQorCisgICAgaWYgKGxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lm
IChsYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisK
K2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICB2YXIgcGF0aHNPbmx5ID0gdGVzdEZpbGVM
aXN0Lm1hcChmdW5jdGlvbihpdGVtKSB7IHJldHVybiBpdGVtWydwYXRoJ107IH0pOworICAgIGV2
ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhwYXRoc09ubHkpOworICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKDEwLCAxMCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAko
cmV2aXNpb24gNjI2ODQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29y
a2luZyBjb3B5KQpAQCAtNTgzMiwzICs1ODMyLDYgQEAgZWRpdGluZy9wYXN0ZWJvYXJkLzU3NjE1
MzAtMS5odG1sCiBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2UtbnVtYmVyYW5kc3BlZWNoLmh0
bWwKIGZhc3QvZm9ybXMvaW5wdXQtYXBwZWFyYW5jZS1zZWFyY2hhbmRzcGVlY2guaHRtbAogZmFz
dC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLXNwZWVjaGJ1dHRvbi5odG1sCisKKyMgRGlyZWN0b3J5
IHVwbG9hZCBpcyBub3QgZW5hYmxlZC4KK2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3Rvcnkt
dXBsb2FkLmh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiA2MjY4
NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDMsMyArMzAzLDUgQEAgZmFzdC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLXNwZWVjaGJ1dHRv
bgogIyBOZWVkcyB0byBiZSBmaXhlZCBhdCBpbWFnZSBkZWNvZGVyIGxheWVyIGZvciBTYWZhcmku
CiBmYXN0L2ltYWdlcy9sYXJnZS1zaXplLWltYWdlLWNyYXNoLmh0bWwKIAorIyBEaXJlY3Rvcnkg
dXBsb2FkIGlzIG5vdCBlbmFibGVkLgorZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11
cGxvYWQuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCShyZXZpc2lvbiA2MjY4NCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTU0
NTAsMyArNTQ1MCw2IEBAIGZhc3QvdGV4dC9iaWRpLWV4cGxpY2l0LWVtYmVkZGluZy1wYXN0LWUK
IGZhc3QvZm9ybXMvaW5wdXQtYXBwZWFyYW5jZS1udW1iZXJhbmRzcGVlY2guaHRtbAogZmFzdC9m
b3Jtcy9pbnB1dC1hcHBlYXJhbmNlLXNlYXJjaGFuZHNwZWVjaC5odG1sCiBmYXN0L2Zvcm1zL2lu
cHV0LWFwcGVhcmFuY2Utc3BlZWNoYnV0dG9uLmh0bWwKKworIyBEaXJlY3RvcnkgdXBsb2FkIGlz
IG5vdCBlbmFibGVkLgorZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQuaHRt
bApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDYyNjg0KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTk0NCwzICs5
NDQsNiBAQCBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Utc3BlZWNoYnV0dG9uCiAjIE5lZWRz
IHRvIGJlIGZpeGVkIGF0IGltYWdlIGRlY29kZXIgbGF5ZXIgZm9yIFNhZmFyaS4KIGZhc3QvaW1h
Z2VzL2xhcmdlLXNpemUtaW1hZ2UtY3Jhc2guaHRtbAogCisjIERpcmVjdG9yeSB1cGxvYWQgaXMg
bm90IGVuYWJsZWQuCitmYXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC5odG1s
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60820</attachid>
            <date>2010-07-07 18:27:36 -0700</date>
            <delta_ts>2010-07-12 12:13:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100707182735.patch</filename>
            <type>text/plain</type>
            <size>20186</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjcxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDctMDcgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGRpcmVjdG9yeSB1cGxvYWQgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwODcyCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IEhUTUwgYXR0cmlidXRlIHdlYmtpdGRpcmVjdG9yeSB3aGljaCBhcHBsaWVzIHRv
IAorICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSI+IHRhZ3MgYW5kIGFsbG93cyB0aGUgdXNlciB0
byBzcGVjaWZ5IGEgZm9sZGVyCisgICAgICAgIHdoaWNoIGlzIHJlY3Vyc2l2ZWx5IGVudW1lcmF0
ZWQgc28gdGhhdCBhbGwgdGhlIGZpbGVzIGluIHRoYXQgZm9sZGVyCisgICAgICAgIGFyZSBhZGRl
ZCB0byB0aGUgZmlsZSBsaXN0LgorCisgICAgICAgIFRoZSBmaWxlcyBjaG9zZW4gaW4gdGhhdCB3
YXkgaGF2ZSBhIC5wYXRoIGF0dHJpYnV0ZSB3aGljaCBjb250YWlucworICAgICAgICB0aGUgcmVs
YXRpdmUgcGF0aCBzdGFydGluZyBmcm9tIHRoZSBjaG9zZW4gZm9sZGVyLiAgVGhlIHJlbGF0aXZl
IHBhdGggaXMKKyAgICAgICAgYWxzbyBhcHBlbmRlZCB0byBlYWNoIGl0ZW0gaW4gdGhlIEZvcm1E
YXRhIHdoZW4gdXBsb2FkZWQuCisKKyAgICAgICAgQWxsIHRoZSBjb2RlIGlzIGJlaGluZCBhbiBF
TkFCTEVfRElSRUNUT1JZX1VQTE9BRCBmbGFnLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZm9ybXMv
aW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0bWwKKworICAgICAgICAqIGh0bWwvQmxvYi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKiBodG1sL0Jsb2Iu
aDoKKyAgICAgICAgKiBodG1sL0ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Rmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGU6OnBhdGgpOgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaWRsOgorICAgICAgICAqIGh0bWwvSFRN
TEF0dHJpYnV0ZU5hbWVzLmluOiBhZGQgd2Via2l0ZGlyZWN0b3J5IGF0dHJpYnV0ZQorICAgICAg
ICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50Ojp3ZWJraXRkaXJlY3RvcnkpOgorICAgICAgICAqIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5pZGw6CisgICAg
ICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJ
dGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJdGVtOjpGaWxlQmxvYkl0
ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlQmxvYkl0ZW06OnJlbGF0aXZlUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vRmlsZUNob29z
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjphbGxvd3NEaXJlY3RvcnlVcGxv
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c011bHRpcGxlRmlsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c0RpcmVjdG9yeVVwbG9hZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmg6CisKIDIwMTAt
MDctMDcgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGJ1
aWxkLgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9CbG9iLmNwcAkocmV2aXNpb24gNjI2ODQpCisrKyBXZWJDb3JlL2h0bWwvQmxvYi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDExIEBAIEJsb2I6OkJsb2IoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBCbG8KICAgICAgICAgbV9pdGVtcy5hcHBlbmQoaXRlbXNbaV0pOwogfQog
CitCbG9iOjpCbG9iKGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+JiBpdGVtKQoreworICAgIG1f
aXRlbXMuYXBwZW5kKGl0ZW0pOworfQorCiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkK
IHsKICAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0aGUgdHlwZSB1bmxpa2Ug
RmlsZShwYXRoKS4KSW5kZXg6IFdlYkNvcmUvaHRtbC9CbG9iLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0Jsb2IuaAkocmV2aXNpb24gNjI2ODQpCisrKyBXZWJDb3JlL2h0bWwvQmxvYi5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgog
ICAgIEJsb2IoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG9iSXRlbUxpc3QmKTsKKyAgICBC
bG9iKGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+Jik7CiAKICAgICAvLyBGSVhNRTogRGVwcmVj
YXRlZCBjb25zdHJ1Y3Rvci4gIFNlZSBhbHNvIHRoZSBjb21tZW50IGZvciBCbG9iOjpjcmVhdGUo
cGF0aCkuCiAgICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOwpJbmRleDogV2ViQ29yZS9odG1s
L0ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9GaWxlLmNwcAkocmV2aXNpb24g
NjI2ODQpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIDogQmxvYihwYXRoKQogeworICAgIEluaXQoKTsKK30KKworI2lmIEVOQUJMRShE
SVJFQ1RPUllfVVBMT0FEKQorRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwg
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICA6IEJsb2IoRmlsZUJsb2JJdGVtOjpjcmVhdGUo
ZmlsZVBhdGgsIHJlbGF0aXZlUGF0aCkpCit7CisgICAgSW5pdCgpOworfQorI2VuZGlmCisKK3Zv
aWQgRmlsZTo6SW5pdCgpCit7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yUGF0aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtIiB1cG9uIGZhaWx1cmUuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSA9IG5h
bWUoKTsKICAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOwpAQCAtNDYs
NCArNTksMTEgQEAgY29uc3QgU3RyaW5nJiBGaWxlOjpuYW1lKCkgY29uc3QKICAgICByZXR1cm4g
aXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+bmFtZSgpOwogfQogCisjaWYgRU5BQkxF
KERJUkVDVE9SWV9VUExPQUQpCitjb25zdCBTdHJpbmcmIEZpbGU6OnBhdGgoKSBjb25zdAorewor
ICAgIHJldHVybiBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpLT5yZWxhdGl2ZVBhdGgo
KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0
bWwvRmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9GaWxlLmgJKHJldmlzaW9uIDYy
Njg0KQorKysgV2ViQ29yZS9odG1sL0ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzks
MTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCkpOwog
ICAgIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5n
JiBmaWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHJlbGF0aXZl
UGF0aCwgZmlsZSkpOworICAgIH0KKyNlbmRpZgorCiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
OworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGNvbnN0IFN0cmluZyYgcGF0aCgp
IGNvbnN0OworI2VuZGlmCiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8g
YmUgcmVtb3ZlZC4KICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4g
bmFtZSgpOyB9CkBAIC00OSw2ICs1OSwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQgSW5pdCgpOworCisjaWYgRU5BQkxFKERJ
UkVDVE9SWV9VUExPQUQpCisgICAgRmlsZShjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29u
c3QgU3RyaW5nJiBwYXRoKTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9odG1sL0ZpbGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9G
aWxlLmlkbAkocmV2aXNpb24gNjI2ODQpCisrKyBXZWJDb3JlL2h0bWwvRmlsZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDkgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBHZW5lcmF0
ZVRvSlMKICAgICBdIEZpbGUgOiBCbG9iIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBuYW1lOworI2lmIGRlZmluZWQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICYmIEVO
QUJMRV9ESVJFQ1RPUllfVVBMT0FECisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgcGF0aDsKKyNlbmRpZgogCiAgICAgICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVz
LiBUbyBiZSByZW1vdmVkLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZp
bGVOYW1lOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiA2MjY4
NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTI4MSw1ICsyODEsNiBAQCB2ZXJzaW9uCiB2aWV3c291cmNlCiB2bGluawogdnNwYWNlCit3
ZWJraXRkaXJlY3RvcnkKIHdpZHRoCiB3cmFwCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2MjY4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Rm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTE5NjcsOCArMTk2OCwzMCBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlCiB7CiAgICAgbV9maWxl
TGlzdC0+Y2xlYXIoKTsKICAgICBpbnQgc2l6ZSA9IHBhdGhzLnNpemUoKTsKKworI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQorICAgIC8vIElmIGEgZGlyZWN0b3J5IGlzIGJlaW5nIHNlbGVj
dGVkLCB0aGUgVUkgYWxsb3dzIGEgZGlyZWN0b3J5IHRvIGJlIGNob3NlbgorICAgIC8vIGFuZCB0
aGUgcGF0aHMgcHJvdmlkZWQgaGVyZSBzaGFyZSBhIHJvb3QgZGlyZWN0b3J5IHNvbWV3aGVyZSB1
cCB0aGUgdHJlZTsKKyAgICAvLyB3ZSB3YW50IHRvIHN0b3JlIG9ubHkgdGhlIHJlbGF0aXZlIHBh
dGhzIGZyb20gdGhhdCBwb2ludC4KKyAgICBpZiAod2Via2l0ZGlyZWN0b3J5KCkgJiYgc2l6ZSA+
IDApIHsKKyAgICAgICAgU3RyaW5nIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFtZShwYXRoc1swXSk7
CisgICAgICAgIC8vIEZpbmQgdGhlIGNvbW1vbiByb290IHBhdGguCisgICAgICAgIGZvciAoaW50
IGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICB3aGlsZSAoIXBhdGhzW2ldLnN0
YXJ0c1dpdGgocm9vdFBhdGgpKQorICAgICAgICAgICAgICAgIHJvb3RQYXRoID0gZGlyZWN0b3J5
TmFtZShyb290UGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgcm9vdFBhdGggPSBkaXJlY3RvcnlO
YW1lKHJvb3RQYXRoKTsKKyAgICAgICAgQVNTRVJUKHJvb3RQYXRoLmxlbmd0aCgpKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICBtX2ZpbGVMaXN0
LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVu
Z3RoKCkpLCBwYXRoc1tpXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNy
ZWF0ZShwYXRoc1tpXSkpOworICAgIH0KKyNlbHNlCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
aXplOyBpKyspCiAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNb
aV0pKTsKKyNlbmRpZgogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0
cnVlKTsKICAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CkBA
IC0yNDQ4LDYgKzI0NzEsMTMgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjptdWx0aXBsZSgpIGNv
bnN0CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKS5pc051bGwoKTsKIH0K
IAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojp3
ZWJraXRkaXJlY3RvcnkoKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKHdlYmtp
dGRpcmVjdG9yeUF0dHIpLmlzTnVsbCgpOworfQorI2VuZGlmCisKIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6c2V0U2l6ZSh1bnNpZ25lZCBzaXplKQogewogICAgIHNldEF0dHJpYnV0ZShzaXplQXR0
ciwgU3RyaW5nOjpudW1iZXIoc2l6ZSkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShy
ZXZpc2lvbiA2MjY4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBtdWx0aXBs
ZSgpIGNvbnN0OwogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgYm9vbCB3ZWJr
aXRkaXJlY3RvcnkoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCBib29sIGlzQXV0b2Zp
bGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2ZpbGxlZDsgfQogICAgIHZvaWQgc2V0QXV0b2Zp
bGxlZChib29sIHZhbHVlID0gdHJ1ZSk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5p
ZGwJKHJldmlzaW9uIDYyNjg0KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw5IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
YXR0cmlidXRlIGxvbmcgbWF4TGVuZ3RoIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAg
ICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbWluOwogICAgICAgICBhdHRyaWJ1
dGUgW1JlZmxlY3RdIGJvb2xlYW4gbXVsdGlwbGU7CisjaWYgZGVmaW5lZChFTkFCTEVfRElSRUNU
T1JZX1VQTE9BRCkgJiYgRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0XSBib29sZWFuIHdlYmtpdGRpcmVjdG9yeTsKKyNlbmRpZgogICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBuYW1lOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxl
Y3RdIERPTVN0cmluZyBwYXR0ZXJuOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0
cmluZyBwbGFjZWhvbGRlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCShyZXZpc2lvbiA2MjY4
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw2ICs3OCwyMCBAQCBGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmCiB7
CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+
IEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBy
ZWxhdGl2ZVBhdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVt
Kj4obmV3IEZpbGVCbG9iSXRlbShwYXRoLCByZWxhdGl2ZVBhdGgpKSk7Cit9CisKK0ZpbGVCbG9i
SXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiByZWxh
dGl2ZVBhdGgpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5hbWUocGF0aEdldEZp
bGVOYW1lKG1fcGF0aCkpCisgICAgLCBtX3JlbGF0aXZlUGF0aChyZWxhdGl2ZVBhdGgpCit7Cit9
CisjZW5kaWYKKwogdW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6c2l6ZSgpIGNvbnN0
CiB7CiAgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vQmxvYkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJ
dGVtLmgJKHJldmlzaW9uIDYyNjg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE0IEBAIHB1YmxpYzoKIGNsYXNzIEZpbGVCbG9i
SXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7CisjZW5kaWYKICAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0K
ICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGNvbnN0IFN0cmluZyYgcmVsYXRp
dmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0KKyNlbmRpZgogCiAgICAg
Ly8gQmxvYkl0ZW0gbWV0aG9kcy4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
KCkgY29uc3Q7CkBAIC0xMjAsOCArMTI2LDE0IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAg
IEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVOQUJMRShESVJFQ1RPUllf
VVBMT0FEKQorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmVQYXRoKTsKKyNlbmRpZgogICAgIFN0cmluZyBtX3BhdGg7CiAgICAgU3RyaW5n
IG1fZmlsZU5hbWU7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisgICAgU3RyaW5nIG1f
cmVsYXRpdmVQYXRoOworI2VuZGlmCiB9OwogCiBjbGFzcyBTdHJpbmdCbG9iSXRlbSA6IHB1Ymxp
YyBEYXRhQmxvYkl0ZW0gewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAkocmV2aXNpb24gNjI2
ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFs
bG93c011bHRpcGxlRmlsZXMoKSA9IDA7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisg
ICAgdmlydHVhbCBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpID0gMDsKKyNlbmRpZgogICAg
IHZpcnR1YWwgU3RyaW5nIGFjY2VwdFR5cGVzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjaG9v
c2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpID0gMDsK
ICAgICB2aXJ0dWFsIH5GaWxlQ2hvb3NlckNsaWVudCgpOwpAQCAtNzAsNiArNzMsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBpY29uTG9hZGVkKFBhc3NSZWZQdHI8SWNvbj4pOwogCiAgICAgYm9vbCBh
bGxvd3NNdWx0aXBsZUZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+
YWxsb3dzTXVsdGlwbGVGaWxlcygpIDogZmFsc2U7IH0KKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQ
TE9BRCkKKyAgICBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50ID8gbV9jbGllbnQtPmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIDogZmFsc2U7IH0KKyNl
bmRpZgogICAgIC8vIEFjY2VwdGFibGUgTUlNRSB0eXBlcy4gIEl0J3MgYW4gJ2FjY2VwdCcgYXR0
cmlidXRlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIElOUFVUIGVsZW1lbnQuCiAgICAgU3Ry
aW5nIGFjY2VwdFR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+YWNj
ZXB0VHlwZXMoKSA6IFN0cmluZygpOyB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcAkocmV2aXNpb24gNjI2ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDEyIEBAIHZvaWQgRm9y
bURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGMKICAgICAgICAgICAgIGNvbnN0IEZpbGVC
bG9iSXRlbSogZmlsZUl0ZW0gPSB2YWx1ZS0+dG9GaWxlQmxvYkl0ZW0oKTsKICAgICAgICAgICAg
IGlmIChmaWxlSXRlbSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IGZp
bGVJdGVtLT5wYXRoKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSAhZmlsZUl0ZW0tPnJlbGF0aXZlUGF0aCgpLmlzRW1w
dHkoKSA/IGZpbGVJdGVtLT5yZWxhdGl2ZVBhdGgoKSA6IGZpbGVJdGVtLT5uYW1lKCk7CisjZWxz
ZQogICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGZpbGVJdGVtLT5uYW1lKCk7Cisj
ZW5kaWYKIAogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBh
IGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZv
ciB0aGUgdXBsb2FkLgogICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJl
dmlzaW9uIDYyNjg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMjMgQEAgdm9pZCBSZW5kZXJGaWxl
VXBsb2FkQ29udHJvbDo6dmFsdWVDaGFuZwogCiBib29sIFJlbmRlckZpbGVVcGxvYWRDb250cm9s
OjphbGxvd3NNdWx0aXBsZUZpbGVzKCkKIHsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkK
KyAgICBpZiAoYWxsb3dzRGlyZWN0b3J5VXBsb2FkKCkpCisgICAgICByZXR1cm4gdHJ1ZTsKKyNl
bmRpZgorCiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4obm9kZSgpKTsKICAgICByZXR1cm4gIWlucHV0LT5nZXRBdHRyaWJ1dGUobXVs
dGlwbGVBdHRyKS5pc051bGwoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQor
Ym9vbCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKCkKK3sK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihub2RlKCkpOworICAgIHJldHVybiAhaW5wdXQtPmdldEF0dHJpYnV0ZSh3ZWJraXRkaXJl
Y3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRpZgorCiBTdHJpbmcgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OmFjY2VwdFR5cGVzKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KG5vZGUoKSktPmFjY2VwdCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiA2MjY4NCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDYgKzYyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZhbHVlQ2hhbmdlZCgpOwogICAgIHZvaWQg
cmVwYWludCgpIHsgUmVuZGVyQmxvY2s6OnJlcGFpbnQoKTsgfQogICAgIGJvb2wgYWxsb3dzTXVs
dGlwbGVGaWxlcygpOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGJvb2wgYWxs
b3dzRGlyZWN0b3J5VXBsb2FkKCk7CisjZW5kaWYKICAgICBTdHJpbmcgYWNjZXB0VHlwZXMoKTsK
ICAgICB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hvb3NlciosIGNvbnN0IFZlY3RvcjxT
dHJpbmc+Jik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNzExKQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDctMDcgIEpvaG4g
R3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVW5pdCB0ZXN0IGZvciBleHBlcmltZW50YWwgZGlyZWN0b3J5
IHVwbG9hZCBmZWF0dXJlLiAgT25seSBlbmFibGVkIG9uIGNocm9taXVtIHNpbmNlIHRoYXQncyB3
aGVyZSB0aGUgZmVhdHVyZSBpcyBjb21waWxlZCBpbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwODcyCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2lu
cHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lw
cGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0v
d2luL1NraXBwZWQ6CisKIDIwMTAtMDctMDcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gIENocm9taXVtIHRlc3QgZXhwZWN0YXRp
b24gdXBkYXRlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVj
dG9yeS11cGxvYWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2Fk
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorCitQQVNTOiBuYW1l
IGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMS9maWxlMQorUEFTUzogbmFtZSBpcyBm
aWxlMjsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDEvZmlsZTIKK1BBU1M6IG5hbWUgaXMgZmlsZTE7
IHBhdGggaXMgZGlydXBsb2FkL3BhdGgxL3N1YnBhdGgxL2ZpbGUxCitQQVNTOiBuYW1lIGlzIGZp
bGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMi9maWxlMQorUEFTUzogbmFtZSBpcyBmaWxlMTsg
cGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDIvc3VicGF0aDEvc3VicGF0aDIvZmlsZTEKK1BBU1M6IG5h
bWUgaXMgZmlsZTI7IHBhdGggaXMgZGlydXBsb2FkL3BhdGgyL2ZpbGUyCitQQVNTOiBuYW1lIGlz
IGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMy9maWxlMQorUEFTUzogbmFtZSBpcyBmaWxl
MTsgcGF0aCBpcyBkaXJ1cGxvYWQvZmlsZTEKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxv
YWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxib2R5PgorPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGVzIiBpZD0iZmlsZXMi
IG9uY2hhbmdlPSJvbklucHV0RmlsZUNoYW5nZSgpIiB3ZWJraXRkaXJlY3Rvcnk+Cis8cHJlIGlk
PSdvdXRwdXQnPjwvcHJlPgorCis8c2NyaXB0PgordmFyIHRlc3RGaWxlTGlzdCA9IFsKKyAgICB7
J3BhdGgnOiAncmVzb3VyY2VzL2RpcnVwbG9hZC9wYXRoMS9maWxlMScsICAgICAgICAgICAgICAg
ICAgICdyZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMS9maWxlMSd9LAorICAgIHsncGF0aCc6ICdy
ZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgxL2ZpbGUyJywgICAgICAgICAgICAgICAgICAgJ3JlbHBh
dGgnOiAnZGlydXBsb2FkL3BhdGgxL2ZpbGUyJyB9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMv
ZGlydXBsb2FkL3BhdGgxL3N1YnBhdGgxL2ZpbGUxJywgICAgICAgICAgJ3JlbHBhdGgnOiAnZGly
dXBsb2FkL3BhdGgxL3N1YnBhdGgxL2ZpbGUxJ30sCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9k
aXJ1cGxvYWQvcGF0aDIvZmlsZTEnLCAgICAgICAgICAgICAgICAgICAncmVscGF0aCc6ICdkaXJ1
cGxvYWQvcGF0aDIvZmlsZTEnfSwKKyAgICB7J3BhdGgnOiAncmVzb3VyY2VzL2RpcnVwbG9hZC9w
YXRoMi9zdWJwYXRoMS9zdWJwYXRoMi9maWxlMScsICdyZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRo
Mi9zdWJwYXRoMS9zdWJwYXRoMi9maWxlMSd9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGly
dXBsb2FkL3BhdGgyL2ZpbGUyJywgICAgICAgICAgICAgICAgICAgJ3JlbHBhdGgnOiAnZGlydXBs
b2FkL3BhdGgyL2ZpbGUyJ30sCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvcGF0
aDMvZmlsZTEnLCAgICAgICAgICAgICAgICAgICAncmVscGF0aCc6ICdkaXJ1cGxvYWQvcGF0aDMv
ZmlsZTEnfSwKKyAgICB7J3BhdGgnOiAncmVzb3VyY2VzL2RpcnVwbG9hZC9maWxlMScsICAgICAg
ICAgICAgICAgICAgICAgICAgICdyZWxwYXRoJzogJ2RpcnVwbG9hZC9maWxlMSd9LAorXTsKKwor
ZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ291
dHB1dCcpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAiXG4i
KSk7Cit9CisKK2Z1bmN0aW9uIG9uSW5wdXRGaWxlQ2hhbmdlKCkKK3sKKyAgICB2YXIgZmlsZXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZXMiKS5maWxlczsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChmaWxlc1tpXS5wYXRo
ICE9IHRlc3RGaWxlTGlzdFtpXS5yZWxwYXRoKQorICAgICAgICAgICAgbG9nKCJGQUlMOiBuYW1l
IGlzICIgKyBmaWxlc1tpXS5uYW1lICsgIjsgcGF0aCBpcyAiICsgZmlsZXNbaV0ucGF0aCArICIg
YnV0IHNob3VsZCBiZSAiICsgdGVzdEZpbGVMaXN0W2ldLnJlbHBhdGgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBsb2coIlBBU1M6IG5hbWUgaXMgIiArIGZpbGVzW2ldLm5hbWUgKyAiOyBw
YXRoIGlzICIgKyBmaWxlc1tpXS5wYXRoKTsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30K
KworaWYgKGxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
K30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHZhciBwYXRoc09ubHkgPSB0ZXN0
RmlsZUxpc3QubWFwKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIGl0ZW1bJ3BhdGgnXTsgfSk7Cisg
ICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKHBhdGhzT25seSk7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VNb3ZlVG8oMTAsIDEwKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCShyZXZpc2lvbiA2MjY4NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CSh3b3JraW5nIGNvcHkpCkBAIC01ODMyLDMgKzU4MzIsNiBAQCBlZGl0aW5nL3Bhc3RlYm9hcmQv
NTc2MTUzMC0xLmh0bWwKIGZhc3QvZm9ybXMvaW5wdXQtYXBwZWFyYW5jZS1udW1iZXJhbmRzcGVl
Y2guaHRtbAogZmFzdC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLXNlYXJjaGFuZHNwZWVjaC5odG1s
CiBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Utc3BlZWNoYnV0dG9uLmh0bWwKKworIyBEaXJl
Y3RvcnkgdXBsb2FkIGlzIG5vdCBlbmFibGVkLgorZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVj
dG9yeS11cGxvYWQuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlzaW9u
IDYyNjg0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcgY29w
eSkKQEAgLTMwMywzICszMDMsNSBAQCBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Utc3BlZWNo
YnV0dG9uCiAjIE5lZWRzIHRvIGJlIGZpeGVkIGF0IGltYWdlIGRlY29kZXIgbGF5ZXIgZm9yIFNh
ZmFyaS4KIGZhc3QvaW1hZ2VzL2xhcmdlLXNpemUtaW1hZ2UtY3Jhc2guaHRtbAogCisjIERpcmVj
dG9yeSB1cGxvYWQgaXMgbm90IGVuYWJsZWQuCitmYXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0
b3J5LXVwbG9hZC5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDYy
Njg0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpA
QCAtNTQ1MCwzICs1NDUwLDYgQEAgZmFzdC90ZXh0L2JpZGktZXhwbGljaXQtZW1iZWRkaW5nLXBh
c3QtZQogZmFzdC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLW51bWJlcmFuZHNwZWVjaC5odG1sCiBm
YXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Utc2VhcmNoYW5kc3BlZWNoLmh0bWwKIGZhc3QvZm9y
bXMvaW5wdXQtYXBwZWFyYW5jZS1zcGVlY2hidXR0b24uaHRtbAorCisjIERpcmVjdG9yeSB1cGxv
YWQgaXMgbm90IGVuYWJsZWQuCitmYXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9h
ZC5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkocmV2aXNpb24gNjI2ODQpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtOTQ0
LDMgKzk0NCw2IEBAIGZhc3QvZm9ybXMvaW5wdXQtYXBwZWFyYW5jZS1zcGVlY2hidXR0b24KICMg
TmVlZHMgdG8gYmUgZml4ZWQgYXQgaW1hZ2UgZGVjb2RlciBsYXllciBmb3IgU2FmYXJpLgogZmFz
dC9pbWFnZXMvbGFyZ2Utc2l6ZS1pbWFnZS1jcmFzaC5odG1sCiAKKyMgRGlyZWN0b3J5IHVwbG9h
ZCBpcyBub3QgZW5hYmxlZC4KK2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2Fk
Lmh0bWwKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61254</attachid>
            <date>2010-07-12 12:13:34 -0700</date>
            <delta_ts>2010-07-13 23:37:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100712121333.patch</filename>
            <type>text/plain</type>
            <size>20360</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDctMDcgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGRpcmVjdG9yeSB1cGxvYWQgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwODcyCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IEhUTUwgYXR0cmlidXRlIHdlYmtpdGRpcmVjdG9yeSB3aGljaCBhcHBsaWVzIHRv
IAorICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSI+IHRhZ3MgYW5kIGFsbG93cyB0aGUgdXNlciB0
byBzcGVjaWZ5IGEgZm9sZGVyCisgICAgICAgIHdoaWNoIGlzIHJlY3Vyc2l2ZWx5IGVudW1lcmF0
ZWQgc28gdGhhdCBhbGwgdGhlIGZpbGVzIGluIHRoYXQgZm9sZGVyCisgICAgICAgIGFyZSBhZGRl
ZCB0byB0aGUgZmlsZSBsaXN0LgorCisgICAgICAgIFRoZSBmaWxlcyBjaG9zZW4gaW4gdGhhdCB3
YXkgaGF2ZSBhIC53ZWJraXRSZWxhdGl2ZVBhdGggYXR0cmlidXRlIHdoaWNoIGNvbnRhaW5zCisg
ICAgICAgIHRoZSByZWxhdGl2ZSBwYXRoIHN0YXJ0aW5nIGZyb20gdGhlIGNob3NlbiBmb2xkZXIu
ICBUaGUgcmVsYXRpdmUgcGF0aCBpcworICAgICAgICBhbHNvIGFwcGVuZGVkIHRvIGVhY2ggaXRl
bSBpbiB0aGUgRm9ybURhdGEgd2hlbiB1cGxvYWRlZC4KKworICAgICAgICBBbGwgdGhlIGNvZGUg
aXMgYmVoaW5kIGFuIEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEIGZsYWcuCisKKyAgICAgICAgVGVz
dDogZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAorCisgICAgICAg
ICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAg
ICAqIGh0bWwvQmxvYi5oOgorICAgICAgICAqIGh0bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZTo6d2Via2l0UmVsYXRpdmVQYXRoKToKKyAgICAgICAgKiBodG1sL0Zp
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9G
aWxlLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjogYWRkIHdlYmtp
dGRpcmVjdG9yeSBhdHRyaWJ1dGUKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVu
ZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6d2Via2l0ZGlyZWN0
b3J5KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9i
SXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJdGVtOjpyZWxhdGl2ZVBhdGgpOgor
ICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
Q2hvb3Nlcjo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlW
YWx1ZVBhaXJJdGVtcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphbGxv
d3NNdWx0aXBsZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjphbGxvd3NEaXJlY3RvcnlVcGxvYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oOgorCiAyMDEwLTA3LTEyICBBbmRyZWFzIEtsaW5nICA8YW5kcmVh
cy5rbGluZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4u
CkluZGV4OiBXZWJDb3JlL2h0bWwvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0Jsb2IuY3BwCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTEgQEAgQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IEJsbwogICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtc1tpXSk7CiB9CiAKK0Js
b2I6OkJsb2IoY29uc3QgUGFzc1JlZlB0cjxCbG9iSXRlbT4mIGl0ZW0pCit7CisgICAgbV9pdGVt
cy5hcHBlbmQoaXRlbSk7Cit9CisKIEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlrZSBGaWxl
KHBhdGgpLgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvQmxvYi5oCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAg
QmxvYihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYpOworICAgIEJsb2Io
Y29uc3QgUGFzc1JlZlB0cjxCbG9iSXRlbT4mKTsKIAogICAgIC8vIEZJWE1FOiBEZXByZWNhdGVk
IGNvbnN0cnVjdG9yLiAgU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9yIEJsb2I6OmNyZWF0ZShwYXRo
KS4KICAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvRmls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuY3BwCShyZXZpc2lvbiA2MzA5
MikKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
MTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgOiBCbG9iKHBhdGgpCiB7CisgICAgSW5pdCgpOworfQorCisjaWYgRU5BQkxFKERJUkVD
VE9SWV9VUExPQUQpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKQorICAgIDogQmxvYihGaWxlQmxvYkl0ZW06OmNyZWF0ZShmaWxl
UGF0aCwgcmVsYXRpdmVQYXRoKSkKK3sKKyAgICBJbml0KCk7Cit9CisjZW5kaWYKKwordm9pZCBG
aWxlOjpJbml0KCkKK3sKICAgICAvLyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
TUlNRVR5cGVGb3JQYXRoKCkgYmVjYXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0iIHVwb24gZmFpbHVyZS4KICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lID0gbmFtZSgp
OwogICAgIGludCBpbmRleCA9IGZpbGVOYW1lLnJldmVyc2VGaW5kKCcuJyk7CkBAIC00Niw0ICs1
OSwxMSBAQCBjb25zdCBTdHJpbmcmIEZpbGU6Om5hbWUoKSBjb25zdAogICAgIHJldHVybiBpdGVt
cygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpLT5uYW1lKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKK2NvbnN0IFN0cmluZyYgRmlsZTo6d2Via2l0UmVsYXRpdmVQYXRoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+cmVs
YXRpdmVQYXRoKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9odG1sL0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5oCShy
ZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDkgKzM5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxl
KHBhdGgpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNv
bnN0IFN0cmluZyYgZmlsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmls
ZShyZWxhdGl2ZVBhdGgsIGZpbGUpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9v
bCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdDsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICAvLyBSZXR1cm5z
IHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoaXMgZmlsZSBpbiB0aGUgY29udGV4dCBvZiBhIGRpcmVj
dG9yeSBzZWxlY3Rpb24uCisgICAgY29uc3QgU3RyaW5nJiB3ZWJraXRSZWxhdGl2ZVBhdGgoKSBj
b25zdDsKKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJl
IHJlbW92ZWQuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5h
bWUoKTsgfQpAQCAtNDksNiArNjAsMTEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIEluaXQoKTsKKworI2lmIEVOQUJMRShESVJF
Q1RPUllfVVBMT0FEKQorICAgIEZpbGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0
IFN0cmluZyYgcGF0aCk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmls
ZS5pZGwJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9odG1sL0ZpbGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw5IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgR2VuZXJhdGVU
b0pTCiAgICAgXSBGaWxlIDogQmxvYiB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgbmFtZTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAmJiBFTkFC
TEVfRElSRUNUT1JZX1VQTE9BRAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IHdlYmtpdFJlbGF0aXZlUGF0aDsKKyNlbmRpZgogCiAgICAgICAgIC8vIEZJWE1FOiBvYnNvbGV0
ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVkLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGZpbGVOYW1lOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1l
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShy
ZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTI4MSw1ICsyODEsNiBAQCB2ZXJzaW9uCiB2aWV3c291cmNlCiB2bGlu
awogdnNwYWNlCit3ZWJraXRkaXJlY3RvcnkKIHdpZHRoCiB3cmFwCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3Qu
aCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTE5Njcs
OCArMTk2OCwzMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlCiB7
CiAgICAgbV9maWxlTGlzdC0+Y2xlYXIoKTsKICAgICBpbnQgc2l6ZSA9IHBhdGhzLnNpemUoKTsK
KworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIC8vIElmIGEgZGlyZWN0b3J5IGlz
IGJlaW5nIHNlbGVjdGVkLCB0aGUgVUkgYWxsb3dzIGEgZGlyZWN0b3J5IHRvIGJlIGNob3Nlbgor
ICAgIC8vIGFuZCB0aGUgcGF0aHMgcHJvdmlkZWQgaGVyZSBzaGFyZSBhIHJvb3QgZGlyZWN0b3J5
IHNvbWV3aGVyZSB1cCB0aGUgdHJlZTsKKyAgICAvLyB3ZSB3YW50IHRvIHN0b3JlIG9ubHkgdGhl
IHJlbGF0aXZlIHBhdGhzIGZyb20gdGhhdCBwb2ludC4KKyAgICBpZiAod2Via2l0ZGlyZWN0b3J5
KCkgJiYgc2l6ZSA+IDApIHsKKyAgICAgICAgU3RyaW5nIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFt
ZShwYXRoc1swXSk7CisgICAgICAgIC8vIEZpbmQgdGhlIGNvbW1vbiByb290IHBhdGguCisgICAg
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICB3aGlsZSAo
IXBhdGhzW2ldLnN0YXJ0c1dpdGgocm9vdFBhdGgpKQorICAgICAgICAgICAgICAgIHJvb3RQYXRo
ID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgcm9vdFBhdGgg
PSBkaXJlY3RvcnlOYW1lKHJvb3RQYXRoKTsKKyAgICAgICAgQVNTRVJUKHJvb3RQYXRoLmxlbmd0
aCgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAg
ICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldLnN1YnN0cmluZygxICsg
cm9vdFBhdGgubGVuZ3RoKCkpLCBwYXRoc1tpXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXSkpOworICAgIH0KKyNlbHNlCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyBpKyspCiAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpj
cmVhdGUocGF0aHNbaV0pKTsKKyNlbmRpZgogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcih0cnVlKTsKICAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5n
ZWQodGhpcyk7CkBAIC0yNDQ4LDYgKzI0NzEsMTMgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpt
dWx0aXBsZSgpIGNvbnN0CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKS5p
c051bGwoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojp3ZWJraXRkaXJlY3RvcnkoKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0QXR0
cmlidXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpLmlzTnVsbCgpOworfQorI2VuZGlmCisKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0U2l6ZSh1bnNpZ25lZCBzaXplKQogewogICAgIHNldEF0dHJp
YnV0ZShzaXplQXR0ciwgU3RyaW5nOjpudW1iZXIoc2l6ZSkpOwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTAgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBtdWx0aXBsZSgpIGNvbnN0OwogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisg
ICAgYm9vbCB3ZWJraXRkaXJlY3RvcnkoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCBi
b29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2ZpbGxlZDsgfQogICAgIHZv
aWQgc2V0QXV0b2ZpbGxlZChib29sIHZhbHVlID0gdHJ1ZSk7CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5pZGwJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw5IEBAIG1vZHVsZSBodG1s
IHsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgbWF4TGVuZ3RoIHNldHRlciByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbWluOwogICAg
ICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gbXVsdGlwbGU7CisjaWYgZGVmaW5lZChF
TkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJiYgRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAg
ICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIHdlYmtpdGRpcmVjdG9yeTsKKyNlbmRpZgog
ICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBuYW1lOwogICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBwYXR0ZXJuOwogICAgICAgICBhdHRyaWJ1dGUgW1Jl
ZmxlY3RdIERPTVN0cmluZyBwbGFjZWhvbGRlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCShy
ZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw2ICs3OCwyMCBAQCBGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25z
dCBTdHJpbmcmCiB7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK1Bhc3NSZWZQ
dHI8QmxvYkl0ZW0+IEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19j
YXN0PEJsb2JJdGVtKj4obmV3IEZpbGVCbG9iSXRlbShwYXRoLCByZWxhdGl2ZVBhdGgpKSk7Cit9
CisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiByZWxhdGl2ZVBhdGgpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5h
bWUocGF0aEdldEZpbGVOYW1lKG1fcGF0aCkpCisgICAgLCBtX3JlbGF0aXZlUGF0aChyZWxhdGl2
ZVBhdGgpCit7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6
c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0Jsb2JJdGVtLmgJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9C
bG9iSXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE0IEBAIHB1YmxpYzoKIGNs
YXNzIEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7Cisj
ZW5kaWYKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZU5hbWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0KKyNl
bmRpZgogCiAgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgbG9uZyBzaXplKCkgY29uc3Q7CkBAIC0xMjAsOCArMTI2LDE0IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKKyNlbmRpZgogICAgIFN0cmluZyBtX3BhdGg7
CiAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisg
ICAgU3RyaW5nIG1fcmVsYXRpdmVQYXRoOworI2VuZGlmCiB9OwogCiBjbGFzcyBTdHJpbmdCbG9i
SXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0gewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAko
cmV2aXNpb24gNjMwOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIGFsbG93c011bHRpcGxlRmlsZXMoKSA9IDA7CisjaWYgRU5BQkxFKERJUkVDVE9S
WV9VUExPQUQpCisgICAgdmlydHVhbCBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpID0gMDsK
KyNlbmRpZgogICAgIHZpcnR1YWwgU3RyaW5nIGFjY2VwdFR5cGVzKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYpID0gMDsKICAgICB2aXJ0dWFsIH5GaWxlQ2hvb3NlckNsaWVudCgpOwpAQCAtNzAsNiAr
NzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpY29uTG9hZGVkKFBhc3NSZWZQdHI8SWNvbj4pOwog
CiAgICAgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQg
PyBtX2NsaWVudC0+YWxsb3dzTXVsdGlwbGVGaWxlcygpIDogZmFsc2U7IH0KKyNpZiBFTkFCTEUo
RElSRUNUT1JZX1VQTE9BRCkKKyAgICBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIDog
ZmFsc2U7IH0KKyNlbmRpZgogICAgIC8vIEFjY2VwdGFibGUgTUlNRSB0eXBlcy4gIEl0J3MgYW4g
J2FjY2VwdCcgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIElOUFVUIGVsZW1l
bnQuCiAgICAgU3RyaW5nIGFjY2VwdFR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+YWNjZXB0VHlwZXMoKSA6IFN0cmluZygpOyB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNpb24gNjMwOTIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDEy
IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGMKICAgICAgICAgICAg
IGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSB2YWx1ZS0+dG9GaWxlQmxvYkl0ZW0oKTsK
ICAgICAgICAgICAgIGlmIChmaWxlSXRlbSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgcGF0aCA9IGZpbGVJdGVtLT5wYXRoKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSAhZmlsZUl0ZW0tPnJlbGF0aXZl
UGF0aCgpLmlzRW1wdHkoKSA/IGZpbGVJdGVtLT5yZWxhdGl2ZVBhdGgoKSA6IGZpbGVJdGVtLT5u
YW1lKCk7CisjZWxzZQogICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGZpbGVJdGVt
LT5uYW1lKCk7CisjZW5kaWYKIAogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRp
b24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNl
bWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgogICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0Vt
cHR5KCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMjMgQEAgdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dmFsdWVDaGFuZwogCiBib29sIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjphbGxvd3NNdWx0aXBsZUZpbGVzKCkKIHsKKyNpZiBFTkFCTEUoRElSRUNU
T1JZX1VQTE9BRCkKKyAgICBpZiAoYWxsb3dzRGlyZWN0b3J5VXBsb2FkKCkpCisgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgorCiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKICAgICByZXR1cm4gIWlucHV0LT5nZXRB
dHRyaWJ1dGUobXVsdGlwbGVBdHRyKS5pc051bGwoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQorYm9vbCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzRGlyZWN0b3J5
VXBsb2FkKCkKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiAhaW5wdXQtPmdldEF0dHJpYnV0
ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRpZgorCiBTdHJpbmcgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFjY2VwdFR5cGVzKCkKIHsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPmFjY2VwdCgpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiA2MzA5MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZhbHVlQ2hhbmdlZCgp
OwogICAgIHZvaWQgcmVwYWludCgpIHsgUmVuZGVyQmxvY2s6OnJlcGFpbnQoKTsgfQogICAgIGJv
b2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQor
ICAgIGJvb2wgYWxsb3dzRGlyZWN0b3J5VXBsb2FkKCk7CisjZW5kaWYKICAgICBTdHJpbmcgYWNj
ZXB0VHlwZXMoKTsKICAgICB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hvb3NlciosIGNv
bnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMDkyKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAt
MDctMDcgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pdCB0ZXN0IGZvciBleHBlcmltZW50
YWwgZGlyZWN0b3J5IHVwbG9hZCBmZWF0dXJlLiAgT25seSBlbmFibGVkIG9uIGNocm9taXVtIHNp
bmNlIHRoYXQncyB3aGVyZSB0aGUgZmVhdHVyZSBpcyBjb21waWxlZCBpbi4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwODcyCisKKyAgICAgICAgKiBm
YXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIwMTAtMDctMTIgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkOiBjaHJvbWl1bSB0
ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGVkLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9p
bnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1k
aXJlY3RvcnktdXBsb2FkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBA
QAorCitQQVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMS9maWxlMQor
UEFTUzogbmFtZSBpcyBmaWxlMjsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDEvZmlsZTIKK1BBU1M6
IG5hbWUgaXMgZmlsZTE7IHBhdGggaXMgZGlydXBsb2FkL3BhdGgxL3N1YnBhdGgxL2ZpbGUxCitQ
QVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMi9maWxlMQorUEFTUzog
bmFtZSBpcyBmaWxlMTsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDIvc3VicGF0aDEvc3VicGF0aDIv
ZmlsZTEKK1BBU1M6IG5hbWUgaXMgZmlsZTI7IHBhdGggaXMgZGlydXBsb2FkL3BhdGgyL2ZpbGUy
CitQQVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMy9maWxlMQorUEFT
UzogbmFtZSBpcyBmaWxlMTsgcGF0aCBpcyBkaXJ1cGxvYWQvZmlsZTEKKworUEFTUzogbmFtZSBp
cyBmaWxlMTsgcGF0aCBpcyBwYXRoMS9maWxlMQorUEFTUzogbmFtZSBpcyBmaWxlMjsgcGF0aCBp
cyBwYXRoMS9maWxlMgorCitQQVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9w
YXRoMS9maWxlMQorUEFTUzogbmFtZSBpcyBmaWxlMTsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDIv
ZmlsZTEKKworUEFTUzogbmFtZSBpcyBmaWxlMTsgcGF0aCBpcyBwYXRoMS9maWxlMQorUEFTUzog
bmFtZSBpcyBmaWxlMTsgcGF0aCBpcyBwYXRoMS9zdWJwYXRoMS9maWxlMQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBs
b2FkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWZp
bGUtZGlyZWN0b3J5LXVwbG9hZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0i
ZmlsZXMiIGlkPSJmaWxlcyIgb25jaGFuZ2U9Im9uSW5wdXRGaWxlQ2hhbmdlKCkiIHdlYmtpdGRp
cmVjdG9yeT4KKzxwcmUgaWQ9J291dHB1dCc+PC9wcmU+CisKKzxzY3JpcHQ+Cit2YXIgY3VycmVu
dEZpbGVMaXN0XzsKK3ZhciBsYXN0VGVzdF8gPSBmYWxzZTsKKwordmFyIHRlc3RGaWxlTGlzdDEg
PSBbCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvcGF0aDEvZmlsZTEnLCAgICAg
ICAgICAgICAgICAgICAnZXhwZWN0LXJlbHBhdGgnOiAnZGlydXBsb2FkL3BhdGgxL2ZpbGUxJ30s
CisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvcGF0aDEvZmlsZTInLCAgICAgICAg
ICAgICAgICAgICAnZXhwZWN0LXJlbHBhdGgnOiAnZGlydXBsb2FkL3BhdGgxL2ZpbGUyJyB9LAor
ICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgxL3N1YnBhdGgxL2ZpbGUxJywg
ICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMS9zdWJwYXRoMS9maWxl
MSd9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgyL2ZpbGUxJywgICAg
ICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMi9maWxlMSd9
LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgyL3N1YnBhdGgxL3N1YnBh
dGgyL2ZpbGUxJywgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMi9zdWJwYXRoMS9z
dWJwYXRoMi9maWxlMSd9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgy
L2ZpbGUyJywgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9w
YXRoMi9maWxlMid9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgzL2Zp
bGUxJywgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRo
My9maWxlMSd9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL2ZpbGUxJywgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9maWxlMSd9
LAorXTsKKwordmFyIHRlc3RGaWxlTGlzdDIgPSBbCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9k
aXJ1cGxvYWQvcGF0aDEvZmlsZTEnLCAgICAgICAgICAgICAgICAgICAnZXhwZWN0LXJlbHBhdGgn
OiAncGF0aDEvZmlsZTEnfSwKKyAgICB7J3BhdGgnOiAncmVzb3VyY2VzL2RpcnVwbG9hZC9wYXRo
MS9maWxlMicsICAgICAgICAgICAgICAgICAgICdleHBlY3QtcmVscGF0aCc6ICdwYXRoMS9maWxl
MicgfSwKK107CisKK3ZhciB0ZXN0RmlsZUxpc3QzID0gWworICAgIHsncGF0aCc6ICdyZXNvdXJj
ZXMvZGlydXBsb2FkL3BhdGgxL2ZpbGUxJywgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxw
YXRoJzogJ2RpcnVwbG9hZC9wYXRoMS9maWxlMSd9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMv
ZGlydXBsb2FkL3BhdGgyL2ZpbGUxJywgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRo
JzogJ2RpcnVwbG9hZC9wYXRoMi9maWxlMScgfSwKK107CisKK3ZhciB0ZXN0RmlsZUxpc3Q0ID0g
WworICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgxL2ZpbGUxJywgICAgICAg
ICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ3BhdGgxL2ZpbGUxJ30sCisgICAgeydwYXRo
JzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvcGF0aDEvc3VicGF0aDEvZmlsZTEnLCAgICAgICAgICAn
ZXhwZWN0LXJlbHBhdGgnOiAncGF0aDEvc3VicGF0aDEvZmlsZTEnIH0sCitdOworCitmdW5jdGlv
biBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0Jyku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICJcbiIpKTsKK30K
KworZnVuY3Rpb24gb25JbnB1dEZpbGVDaGFuZ2UoKQoreworICAgIHZhciBmaWxlcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlcyIpLmZpbGVzOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGZpbGVzW2ldLndlYmtpdFJlbGF0
aXZlUGF0aCAhPSBjdXJyZW50RmlsZUxpc3RfW2ldWydleHBlY3QtcmVscGF0aCddKQorICAgICAg
ICAgICAgbG9nKCJGQUlMOiBuYW1lIGlzICIgKyBmaWxlc1tpXS5uYW1lICsgIjsgcGF0aCBpcyAi
ICsgZmlsZXNbaV0ud2Via2l0UmVsYXRpdmVQYXRoICsgIiBidXQgc2hvdWxkIGJlICIgKyBjdXJy
ZW50RmlsZUxpc3RfW2ldWydleHBlY3QtcmVscGF0aCddKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbG9nKCJQQVNTOiBuYW1lIGlzICIgKyBmaWxlc1tpXS5uYW1lICsgIjsgcGF0aCBpcyAi
ICsgZmlsZXNbaV0ud2Via2l0UmVsYXRpdmVQYXRoKTsKKyAgICB9CisKKyAgIGlmIChsYXN0VGVz
dF8gJiYgbGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgIGVsc2UKKyAgICAgICAgbG9nKCIiKTsKK30KKworZnVuY3Rpb24g
ZG9UZXN0KGZpbGVMaXN0LCBsYXN0KQoreworICAgIGN1cnJlbnRGaWxlTGlzdF8gPSBmaWxlTGlz
dDsKKyAgICBpZiAobGFzdCkgbGFzdFRlc3RfID0gdHJ1ZTsKKyAgICB2YXIgcGF0aHNPbmx5ID0g
ZmlsZUxpc3QubWFwKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIGl0ZW1bJ3BhdGgnXTsgfSk7Cisg
ICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKHBhdGhzT25seSk7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VNb3ZlVG8oMTAsIDEwKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9
CisKK2lmIChsYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBkb1Rlc3QodGVzdEZpbGVMaXN0
MSk7CisgICAgZG9UZXN0KHRlc3RGaWxlTGlzdDIpOworICAgIGRvVGVzdCh0ZXN0RmlsZUxpc3Qz
KTsKKyAgICBkb1Rlc3QodGVzdEZpbGVMaXN0NCwgdHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiA2MzA5
MikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTgsMyArMjk4LDUgQEAgZmFzdC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLXNwZWVjaGJ1dHRv
bgogIyBOZWVkcyB0byBiZSBmaXhlZCBhdCBpbWFnZSBkZWNvZGVyIGxheWVyIGZvciBTYWZhcmku
CiBmYXN0L2ltYWdlcy9sYXJnZS1zaXplLWltYWdlLWNyYXNoLmh0bWwKIAorIyBEaXJlY3Rvcnkg
dXBsb2FkIGlzIG5vdCBlbmFibGVkLgorZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11
cGxvYWQuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61474</attachid>
            <date>2010-07-13 23:37:23 -0700</date>
            <delta_ts>2010-07-14 18:26:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40872-20100713233722.patch</filename>
            <type>text/plain</type>
            <size>21878</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDctMDcgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhw
ZXJpbWVudGFsIGRpcmVjdG9yeSB1cGxvYWQgZmVhdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwODcyCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IEhUTUwgYXR0cmlidXRlIHdlYmtpdGRpcmVjdG9yeSB3aGljaCBhcHBsaWVzIHRv
IAorICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSI+IHRhZ3MgYW5kIGFsbG93cyB0aGUgdXNlciB0
byBzcGVjaWZ5IGEgZm9sZGVyCisgICAgICAgIHdoaWNoIGlzIHJlY3Vyc2l2ZWx5IGVudW1lcmF0
ZWQgc28gdGhhdCBhbGwgdGhlIGZpbGVzIGluIHRoYXQgZm9sZGVyCisgICAgICAgIGFyZSBhZGRl
ZCB0byB0aGUgZmlsZSBsaXN0LgorCisgICAgICAgIFRoZSBmaWxlcyBjaG9zZW4gaW4gdGhhdCB3
YXkgaGF2ZSBhIC53ZWJraXRSZWxhdGl2ZVBhdGggYXR0cmlidXRlIHdoaWNoIGNvbnRhaW5zCisg
ICAgICAgIHRoZSByZWxhdGl2ZSBwYXRoIHN0YXJ0aW5nIGZyb20gdGhlIGNob3NlbiBmb2xkZXIu
ICBUaGUgcmVsYXRpdmUgcGF0aCBpcworICAgICAgICBhbHNvIGFwcGVuZGVkIHRvIGVhY2ggaXRl
bSBpbiB0aGUgRm9ybURhdGEgd2hlbiB1cGxvYWRlZC4KKworICAgICAgICBBbGwgdGhlIGNvZGUg
aXMgYmVoaW5kIGFuIEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEIGZsYWcuCisKKyAgICAgICAgVGVz
dDogZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAorCisgICAgICAg
ICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAg
ICAqIGh0bWwvQmxvYi5oOgorICAgICAgICAqIGh0bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZTo6d2Via2l0UmVsYXRpdmVQYXRoKToKKyAgICAgICAgKiBodG1sL0Zp
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9G
aWxlLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjogYWRkIHdlYmtp
dGRpcmVjdG9yeSBhdHRyaWJ1dGUKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVu
ZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6d2Via2l0ZGlyZWN0
b3J5KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9i
SXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2JJdGVtOjpyZWxhdGl2ZVBhdGgpOgor
ICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
Q2hvb3Nlcjo6YWxsb3dzRGlyZWN0b3J5VXBsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlW
YWx1ZVBhaXJJdGVtcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjphbGxv
d3NNdWx0aXBsZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjphbGxvd3NEaXJlY3RvcnlVcGxvYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oOgorCiAyMDEwLTA3LTEyICBBbmRyZWFzIEtsaW5nICA8YW5kcmVh
cy5rbGluZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4u
CkluZGV4OiBXZWJDb3JlL2h0bWwvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0Jsb2IuY3BwCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTEgQEAgQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IEJsbwogICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtc1tpXSk7CiB9CiAKK0Js
b2I6OkJsb2IoY29uc3QgUGFzc1JlZlB0cjxCbG9iSXRlbT4mIGl0ZW0pCit7CisgICAgbV9pdGVt
cy5hcHBlbmQoaXRlbSk7Cit9CisKIEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlrZSBGaWxl
KHBhdGgpLgpJbmRleDogV2ViQ29yZS9odG1sL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvQmxvYi5oCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9CbG9iLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAg
QmxvYihjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYpOworICAgIEJsb2Io
Y29uc3QgUGFzc1JlZlB0cjxCbG9iSXRlbT4mKTsKIAogICAgIC8vIEZJWE1FOiBEZXByZWNhdGVk
IGNvbnN0cnVjdG9yLiAgU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9yIEJsb2I6OmNyZWF0ZShwYXRo
KS4KICAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvRmls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0ZpbGUuY3BwCShyZXZpc2lvbiA2MzA5
MikKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
MTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgOiBCbG9iKHBhdGgpCiB7CisgICAgSW5pdCgpOworfQorCisjaWYgRU5BQkxFKERJUkVD
VE9SWV9VUExPQUQpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKQorICAgIDogQmxvYihGaWxlQmxvYkl0ZW06OmNyZWF0ZShmaWxl
UGF0aCwgcmVsYXRpdmVQYXRoKSkKK3sKKyAgICBJbml0KCk7Cit9CisjZW5kaWYKKwordm9pZCBG
aWxlOjpJbml0KCkKK3sKICAgICAvLyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
TUlNRVR5cGVGb3JQYXRoKCkgYmVjYXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0iIHVwb24gZmFpbHVyZS4KICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lID0gbmFtZSgp
OwogICAgIGludCBpbmRleCA9IGZpbGVOYW1lLnJldmVyc2VGaW5kKCcuJyk7CkBAIC00Niw0ICs1
OSwxMSBAQCBjb25zdCBTdHJpbmcmIEZpbGU6Om5hbWUoKSBjb25zdAogICAgIHJldHVybiBpdGVt
cygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpLT5uYW1lKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElS
RUNUT1JZX1VQTE9BRCkKK2NvbnN0IFN0cmluZyYgRmlsZTo6d2Via2l0UmVsYXRpdmVQYXRoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+cmVs
YXRpdmVQYXRoKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9odG1sL0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmlsZS5oCShy
ZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9GaWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDkgKzM5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxl
KHBhdGgpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNv
bnN0IFN0cmluZyYgZmlsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmls
ZShyZWxhdGl2ZVBhdGgsIGZpbGUpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9v
bCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdDsKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKKyAgICAvLyBSZXR1cm5z
IHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoaXMgZmlsZSBpbiB0aGUgY29udGV4dCBvZiBhIGRpcmVj
dG9yeSBzZWxlY3Rpb24uCisgICAgY29uc3QgU3RyaW5nJiB3ZWJraXRSZWxhdGl2ZVBhdGgoKSBj
b25zdDsKKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJl
IHJlbW92ZWQuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5h
bWUoKTsgfQpAQCAtNDksNiArNjAsMTEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIEluaXQoKTsKKworI2lmIEVOQUJMRShESVJF
Q1RPUllfVVBMT0FEKQorICAgIEZpbGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0
IFN0cmluZyYgcGF0aCk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRmls
ZS5pZGwJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9odG1sL0ZpbGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw5IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgR2VuZXJhdGVU
b0pTCiAgICAgXSBGaWxlIDogQmxvYiB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgbmFtZTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAmJiBFTkFC
TEVfRElSRUNUT1JZX1VQTE9BRAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IHdlYmtpdFJlbGF0aXZlUGF0aDsKKyNlbmRpZgogCiAgICAgICAgIC8vIEZJWE1FOiBvYnNvbGV0
ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVkLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGZpbGVOYW1lOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1l
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShy
ZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTI4MSw1ICsyODEsNiBAQCB2ZXJzaW9uCiB2aWV3c291cmNlCiB2bGlu
awogdnNwYWNlCit3ZWJraXRkaXJlY3RvcnkKIHdpZHRoCiB3cmFwCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3Qu
aCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTE5Njcs
OCArMTk2OCwzMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlCiB7
CiAgICAgbV9maWxlTGlzdC0+Y2xlYXIoKTsKICAgICBpbnQgc2l6ZSA9IHBhdGhzLnNpemUoKTsK
KworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIC8vIElmIGEgZGlyZWN0b3J5IGlz
IGJlaW5nIHNlbGVjdGVkLCB0aGUgVUkgYWxsb3dzIGEgZGlyZWN0b3J5IHRvIGJlIGNob3Nlbgor
ICAgIC8vIGFuZCB0aGUgcGF0aHMgcHJvdmlkZWQgaGVyZSBzaGFyZSBhIHJvb3QgZGlyZWN0b3J5
IHNvbWV3aGVyZSB1cCB0aGUgdHJlZTsKKyAgICAvLyB3ZSB3YW50IHRvIHN0b3JlIG9ubHkgdGhl
IHJlbGF0aXZlIHBhdGhzIGZyb20gdGhhdCBwb2ludC4KKyAgICBpZiAod2Via2l0ZGlyZWN0b3J5
KCkgJiYgc2l6ZSA+IDApIHsKKyAgICAgICAgU3RyaW5nIHJvb3RQYXRoID0gZGlyZWN0b3J5TmFt
ZShwYXRoc1swXSk7CisgICAgICAgIC8vIEZpbmQgdGhlIGNvbW1vbiByb290IHBhdGguCisgICAg
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICB3aGlsZSAo
IXBhdGhzW2ldLnN0YXJ0c1dpdGgocm9vdFBhdGgpKQorICAgICAgICAgICAgICAgIHJvb3RQYXRo
ID0gZGlyZWN0b3J5TmFtZShyb290UGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgcm9vdFBhdGgg
PSBkaXJlY3RvcnlOYW1lKHJvb3RQYXRoKTsKKyAgICAgICAgQVNTRVJUKHJvb3RQYXRoLmxlbmd0
aCgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAg
ICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldLnN1YnN0cmluZygxICsg
cm9vdFBhdGgubGVuZ3RoKCkpLCBwYXRoc1tpXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXSkpOworICAgIH0KKyNlbHNlCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyBpKyspCiAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpj
cmVhdGUocGF0aHNbaV0pKTsKKyNlbmRpZgogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcih0cnVlKTsKICAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5n
ZWQodGhpcyk7CkBAIC0yNDQ4LDYgKzI0NzEsMTMgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpt
dWx0aXBsZSgpIGNvbnN0CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKS5p
c051bGwoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojp3ZWJraXRkaXJlY3RvcnkoKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0QXR0
cmlidXRlKHdlYmtpdGRpcmVjdG9yeUF0dHIpLmlzTnVsbCgpOworfQorI2VuZGlmCisKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0U2l6ZSh1bnNpZ25lZCBzaXplKQogewogICAgIHNldEF0dHJp
YnV0ZShzaXplQXR0ciwgU3RyaW5nOjpudW1iZXIoc2l6ZSkpOwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCShyZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTAgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBtdWx0aXBsZSgpIGNvbnN0OwogCisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisg
ICAgYm9vbCB3ZWJraXRkaXJlY3RvcnkoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCBi
b29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2ZpbGxlZDsgfQogICAgIHZv
aWQgc2V0QXV0b2ZpbGxlZChib29sIHZhbHVlID0gdHJ1ZSk7CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5pZGwJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw5IEBAIG1vZHVsZSBodG1s
IHsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgbWF4TGVuZ3RoIHNldHRlciByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbWluOwogICAg
ICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gbXVsdGlwbGU7CisjaWYgZGVmaW5lZChF
TkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJiYgRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQKKyAgICAg
ICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIHdlYmtpdGRpcmVjdG9yeTsKKyNlbmRpZgog
ICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBuYW1lOwogICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBwYXR0ZXJuOwogICAgICAgICBhdHRyaWJ1dGUgW1Jl
ZmxlY3RdIERPTVN0cmluZyBwbGFjZWhvbGRlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCShy
ZXZpc2lvbiA2MzA5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw2ICs3OCwyMCBAQCBGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25z
dCBTdHJpbmcmCiB7CiB9CiAKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKK1Bhc3NSZWZQ
dHI8QmxvYkl0ZW0+IEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19j
YXN0PEJsb2JJdGVtKj4obmV3IEZpbGVCbG9iSXRlbShwYXRoLCByZWxhdGl2ZVBhdGgpKSk7Cit9
CisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiByZWxhdGl2ZVBhdGgpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5h
bWUocGF0aEdldEZpbGVOYW1lKG1fcGF0aCkpCisgICAgLCBtX3JlbGF0aXZlUGF0aChyZWxhdGl2
ZVBhdGgpCit7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6
c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0Jsb2JJdGVtLmgJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9C
bG9iSXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE0IEBAIHB1YmxpYzoKIGNs
YXNzIEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVO
QUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCk7Cisj
ZW5kaWYKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZU5hbWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQorI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQorICAgIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2ZVBhdGg7IH0KKyNl
bmRpZgogCiAgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgbG9uZyBzaXplKCkgY29uc3Q7CkBAIC0xMjAsOCArMTI2LDE0IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpOworI2lmIEVOQUJM
RShESVJFQ1RPUllfVVBMT0FEKQorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKKyNlbmRpZgogICAgIFN0cmluZyBtX3BhdGg7
CiAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCisg
ICAgU3RyaW5nIG1fcmVsYXRpdmVQYXRoOworI2VuZGlmCiB9OwogCiBjbGFzcyBTdHJpbmdCbG9i
SXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0gewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAko
cmV2aXNpb24gNjMwOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIGFsbG93c011bHRpcGxlRmlsZXMoKSA9IDA7CisjaWYgRU5BQkxFKERJUkVDVE9S
WV9VUExPQUQpCisgICAgdmlydHVhbCBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpID0gMDsK
KyNlbmRpZgogICAgIHZpcnR1YWwgU3RyaW5nIGFjY2VwdFR5cGVzKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoRmlsZUNob29zZXIqLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYpID0gMDsKICAgICB2aXJ0dWFsIH5GaWxlQ2hvb3NlckNsaWVudCgpOwpAQCAtNzAsNiAr
NzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpY29uTG9hZGVkKFBhc3NSZWZQdHI8SWNvbj4pOwog
CiAgICAgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQg
PyBtX2NsaWVudC0+YWxsb3dzTXVsdGlwbGVGaWxlcygpIDogZmFsc2U7IH0KKyNpZiBFTkFCTEUo
RElSRUNUT1JZX1VQTE9BRCkKKyAgICBib29sIGFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPmFsbG93c0RpcmVjdG9yeVVwbG9hZCgpIDog
ZmFsc2U7IH0KKyNlbmRpZgogICAgIC8vIEFjY2VwdGFibGUgTUlNRSB0eXBlcy4gIEl0J3MgYW4g
J2FjY2VwdCcgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIElOUFVUIGVsZW1l
bnQuCiAgICAgU3RyaW5nIGFjY2VwdFR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+YWNjZXB0VHlwZXMoKSA6IFN0cmluZygpOyB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNpb24gNjMwOTIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDEy
IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGMKICAgICAgICAgICAg
IGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSB2YWx1ZS0+dG9GaWxlQmxvYkl0ZW0oKTsK
ICAgICAgICAgICAgIGlmIChmaWxlSXRlbSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgcGF0aCA9IGZpbGVJdGVtLT5wYXRoKCk7CisKKyNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9B
RCkKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSAhZmlsZUl0ZW0tPnJlbGF0aXZl
UGF0aCgpLmlzRW1wdHkoKSA/IGZpbGVJdGVtLT5yZWxhdGl2ZVBhdGgoKSA6IGZpbGVJdGVtLT5u
YW1lKCk7CisjZWxzZQogICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGZpbGVJdGVt
LT5uYW1lKCk7CisjZW5kaWYKIAogICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRp
b24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNl
bWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgogICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0Vt
cHR5KCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAJKHJldmlzaW9uIDYzMDkyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMjMgQEAgdm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dmFsdWVDaGFuZwogCiBib29sIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjphbGxvd3NNdWx0aXBsZUZpbGVzKCkKIHsKKyNpZiBFTkFCTEUoRElSRUNU
T1JZX1VQTE9BRCkKKyAgICBpZiAoYWxsb3dzRGlyZWN0b3J5VXBsb2FkKCkpCisgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgorCiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKICAgICByZXR1cm4gIWlucHV0LT5nZXRB
dHRyaWJ1dGUobXVsdGlwbGVBdHRyKS5pc051bGwoKTsKIH0KIAorI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQorYm9vbCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6YWxsb3dzRGlyZWN0b3J5
VXBsb2FkKCkKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiAhaW5wdXQtPmdldEF0dHJpYnV0
ZSh3ZWJraXRkaXJlY3RvcnlBdHRyKS5pc051bGwoKTsKK30KKyNlbmRpZgorCiBTdHJpbmcgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFjY2VwdFR5cGVzKCkKIHsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPmFjY2VwdCgpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiA2MzA5MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZhbHVlQ2hhbmdlZCgp
OwogICAgIHZvaWQgcmVwYWludCgpIHsgUmVuZGVyQmxvY2s6OnJlcGFpbnQoKTsgfQogICAgIGJv
b2wgYWxsb3dzTXVsdGlwbGVGaWxlcygpOworI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQor
ICAgIGJvb2wgYWxsb3dzRGlyZWN0b3J5VXBsb2FkKCk7CisjZW5kaWYKICAgICBTdHJpbmcgYWNj
ZXB0VHlwZXMoKTsKICAgICB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhGaWxlQ2hvb3NlciosIGNv
bnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMDkyKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAt
MDctMDcgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5b3V0IHRlc3QgZm9yIGV4cGVyaW1l
bnRhbCBkaXJlY3RvcnkgdXBsb2FkIGZlYXR1cmUuICBPbmx5IGVuYWJsZWQgb24gY2hyb21pdW0g
c2luY2UgdGhhdCdzIHdoZXJlIHRoZSBmZWF0dXJlIGlzIGNvbXBpbGVkIGluLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA4NzIKKworICAgICAgICAq
IGZhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMC0wNy0xMiAgUGF2ZWwgRmVsZG1hbiAg
PHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IGNocm9taXVt
IHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1maWxl
LWRpcmVjdG9yeS11cGxvYWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
IEBACisKK1BBU1M6IG5hbWUgaXMgZmlsZTE7IHBhdGggaXMgZGlydXBsb2FkL3BhdGgxL2ZpbGUx
CitQQVNTOiBuYW1lIGlzIGZpbGUyOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMS9maWxlMgorUEFT
UzogbmFtZSBpcyBmaWxlMTsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDEvc3VicGF0aDEvZmlsZTEK
K1BBU1M6IG5hbWUgaXMgZmlsZTE7IHBhdGggaXMgZGlydXBsb2FkL3BhdGgyL2ZpbGUxCitQQVNT
OiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRoMi9zdWJwYXRoMS9zdWJwYXRo
Mi9maWxlMQorUEFTUzogbmFtZSBpcyBmaWxlMjsgcGF0aCBpcyBkaXJ1cGxvYWQvcGF0aDIvZmls
ZTIKK1BBU1M6IG5hbWUgaXMgZmlsZTE7IHBhdGggaXMgZGlydXBsb2FkL3BhdGgzL2ZpbGUxCitQ
QVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9maWxlMQorCitQQVNTOiBuYW1l
IGlzIGZpbGUxOyBwYXRoIGlzIHBhdGgxL2ZpbGUxCitQQVNTOiBuYW1lIGlzIGZpbGUyOyBwYXRo
IGlzIHBhdGgxL2ZpbGUyCisKK1BBU1M6IG5hbWUgaXMgZmlsZTE7IHBhdGggaXMgZGlydXBsb2Fk
L3BhdGgxL2ZpbGUxCitQQVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIGRpcnVwbG9hZC9wYXRo
Mi9maWxlMQorCitQQVNTOiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIHBhdGgxL2ZpbGUxCitQQVNT
OiBuYW1lIGlzIGZpbGUxOyBwYXRoIGlzIHBhdGgxL3N1YnBhdGgxL2ZpbGUxCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11
cGxvYWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQt
ZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxpbnB1dCB0eXBlPSJmaWxlIiBuYW1l
PSJmaWxlcyIgaWQ9ImZpbGVzIiB3ZWJraXRkaXJlY3Rvcnk+Cis8cHJlIGlkPSdvdXRwdXQnPjwv
cHJlPgorCis8c2NyaXB0PgordmFyIHRlc3RGaWxlTGlzdDEgPSBbCisgICAgeydwYXRoJzogJ3Jl
c291cmNlcy9kaXJ1cGxvYWQvcGF0aDEvZmlsZTEnLCAgICAgICAgICAgICAgICAgICAnZXhwZWN0
LXJlbHBhdGgnOiAnZGlydXBsb2FkL3BhdGgxL2ZpbGUxJ30sCisgICAgeydwYXRoJzogJ3Jlc291
cmNlcy9kaXJ1cGxvYWQvcGF0aDEvZmlsZTInLCAgICAgICAgICAgICAgICAgICAnZXhwZWN0LXJl
bHBhdGgnOiAnZGlydXBsb2FkL3BhdGgxL2ZpbGUyJyB9LAorICAgIHsncGF0aCc6ICdyZXNvdXJj
ZXMvZGlydXBsb2FkL3BhdGgxL3N1YnBhdGgxL2ZpbGUxJywgICAgICAgICAgJ2V4cGVjdC1yZWxw
YXRoJzogJ2RpcnVwbG9hZC9wYXRoMS9zdWJwYXRoMS9maWxlMSd9LAorICAgIHsncGF0aCc6ICdy
ZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgyL2ZpbGUxJywgICAgICAgICAgICAgICAgICAgJ2V4cGVj
dC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMi9maWxlMSd9LAorICAgIHsncGF0aCc6ICdyZXNv
dXJjZXMvZGlydXBsb2FkL3BhdGgyL3N1YnBhdGgxL3N1YnBhdGgyL2ZpbGUxJywgJ2V4cGVjdC1y
ZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMi9zdWJwYXRoMS9zdWJwYXRoMi9maWxlMSd9LAorICAg
IHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgyL2ZpbGUyJywgICAgICAgICAgICAg
ICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMi9maWxlMid9LAorICAgIHsn
cGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgzL2ZpbGUxJywgICAgICAgICAgICAgICAg
ICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMy9maWxlMSd9LAorICAgIHsncGF0
aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL2ZpbGUxJywgICAgICAgICAgICAgICAgICAgICAgICAg
J2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9maWxlMSd9LAorXTsKKwordmFyIHRlc3RGaWxl
TGlzdDIgPSBbCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9kaXJ1cGxvYWQvcGF0aDEvZmlsZTEn
LCAgICAgICAgICAgICAgICAgICAnZXhwZWN0LXJlbHBhdGgnOiAncGF0aDEvZmlsZTEnfSwKKyAg
ICB7J3BhdGgnOiAncmVzb3VyY2VzL2RpcnVwbG9hZC9wYXRoMS9maWxlMicsICAgICAgICAgICAg
ICAgICAgICdleHBlY3QtcmVscGF0aCc6ICdwYXRoMS9maWxlMicgfSwKK107CisKK3ZhciB0ZXN0
RmlsZUxpc3QzID0gWworICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgxL2Zp
bGUxJywgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRo
MS9maWxlMSd9LAorICAgIHsncGF0aCc6ICdyZXNvdXJjZXMvZGlydXBsb2FkL3BhdGgyL2ZpbGUx
JywgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1yZWxwYXRoJzogJ2RpcnVwbG9hZC9wYXRoMi9m
aWxlMScgfSwKK107CisKK3ZhciB0ZXN0RmlsZUxpc3Q0ID0gWworICAgIHsncGF0aCc6ICdyZXNv
dXJjZXMvZGlydXBsb2FkL3BhdGgxL2ZpbGUxJywgICAgICAgICAgICAgICAgICAgJ2V4cGVjdC1y
ZWxwYXRoJzogJ3BhdGgxL2ZpbGUxJ30sCisgICAgeydwYXRoJzogJ3Jlc291cmNlcy9kaXJ1cGxv
YWQvcGF0aDEvc3VicGF0aDEvZmlsZTEnLCAgICAgICAgICAnZXhwZWN0LXJlbHBhdGgnOiAncGF0
aDEvc3VicGF0aDEvZmlsZTEnIH0sCitdOworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICJcbiIpKTsKK30KKworZnVuY3Rpb24gb25JbnB1dEZp
bGVDaGFuZ2UoY3VycmVudEZpbGVMaXN0LCBsYXN0VGVzdCkKK3sKKyAgICB2YXIgZmlsZXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZXMiKS5maWxlczsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChmaWxlc1tpXS53ZWJraXRS
ZWxhdGl2ZVBhdGggIT0gY3VycmVudEZpbGVMaXN0W2ldWydleHBlY3QtcmVscGF0aCddKQorICAg
ICAgICAgICAgbG9nKCJGQUlMOiBuYW1lIGlzICIgKyBmaWxlc1tpXS5uYW1lICsgIjsgcGF0aCBp
cyAiICsgZmlsZXNbaV0ud2Via2l0UmVsYXRpdmVQYXRoICsgIiBidXQgc2hvdWxkIGJlICIgKyBj
dXJyZW50RmlsZUxpc3RbaV1bJ2V4cGVjdC1yZWxwYXRoJ10pOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBsb2coIlBBU1M6IG5hbWUgaXMgIiArIGZpbGVzW2ldLm5hbWUgKyAiOyBwYXRoIGlz
ICIgKyBmaWxlc1tpXS53ZWJraXRSZWxhdGl2ZVBhdGgpOworICAgIH0KKworICAgaWYgKGxhc3RU
ZXN0ICYmIGxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CisgICBlbHNlCisgICAgICAgIGxvZygiIik7Cit9CisKK2Z1bmN0aW9u
IGRvVGVzdChmaWxlTGlzdCwgbGFzdCkKK3sKKyAgICB2YXIgcGF0aHNPbmx5ID0gZmlsZUxpc3Qu
bWFwKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIGl0ZW1bJ3BhdGgnXTt9KTsKKyAgICB2YXIgZiA9
IGZ1bmN0aW9uKCkgeyBvbklucHV0RmlsZUNoYW5nZShmaWxlTGlzdCwgbGFzdCk7IH07CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbGVzIikub25jaGFuZ2UgPSBmOworICAgIGV2ZW50
U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhwYXRoc09ubHkpOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlTW92ZVRvKDEwLCAxMCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorCitpZiAo
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitp
ZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgZG9UZXN0KHRlc3RGaWxlTGlzdDEpOworICAg
IGRvVGVzdCh0ZXN0RmlsZUxpc3QyKTsKKyAgICBkb1Rlc3QodGVzdEZpbGVMaXN0Myk7CisgICAg
ZG9UZXN0KHRlc3RGaWxlTGlzdDQsIHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNjMwOTIpCisrKyBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTg0NSwz
ICs1ODQ1LDYgQEAgZWRpdGluZy9leGVjQ29tbWFuZC9yZW1vdmUtbGlzdC1pdGVtcy5odAogZWRp
dGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLmh0bWwKIGVkaXRpbmcvZXhlY0NvbW1h
bmQvdW5saW5rLmh0bWwKIGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1mb3J3YXJkLWFmdGVyLXNl
dC1iYXNlLWFuZC1leHRlbnQuaHRtbAorCisjIERpcmVjdG9yeSB1cGxvYWQgaXMgbm90IGVuYWJs
ZWQuCitmYXN0L2Zvcm1zL2lucHV0LWZpbGUtZGlyZWN0b3J5LXVwbG9hZC5odG1sCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkocmV2aXNpb24gNjMwOTIpCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDMgKzI5OCw1IEBAIGZh
c3QvZm9ybXMvaW5wdXQtYXBwZWFyYW5jZS1zcGVlY2hidXR0b24KICMgTmVlZHMgdG8gYmUgZml4
ZWQgYXQgaW1hZ2UgZGVjb2RlciBsYXllciBmb3IgU2FmYXJpLgogZmFzdC9pbWFnZXMvbGFyZ2Ut
c2l6ZS1pbWFnZS1jcmFzaC5odG1sCiAKKyMgRGlyZWN0b3J5IHVwbG9hZCBpcyBub3QgZW5hYmxl
ZC4KK2Zhc3QvZm9ybXMvaW5wdXQtZmlsZS1kaXJlY3RvcnktdXBsb2FkLmh0bWwKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNjMwOTIpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01NDU4LDMgKzU0NTgsNiBAQCBmYXN0
L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Utc3BlZWNoYnV0dG9uCiAjIFtRdF0gZmFzdC9kb20vYmVm
b3JlbG9hZC9zY3JpcHQtYmVmb3JlLWxvYWQtZHluYW1pYy5odG1sIGlzIGNyYXNoeS1mbGFrZXkK
ICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDUyCiBmYXN0L2Rv
bS9iZWZvcmVsb2FkL3JlbW92ZS12aWRlby1pbi1iZWZvcmVsb2FkLWxpc3RlbmVyLmh0bWwKKwor
IyBEaXJlY3RvcnkgdXBsb2FkIGlzIG5vdCBlbmFibGVkLgorZmFzdC9mb3Jtcy9pbnB1dC1maWxl
LWRpcmVjdG9yeS11cGxvYWQuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Nr
aXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJl
dmlzaW9uIDYzMDkyKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHdvcmtp
bmcgY29weSkKQEAgLTk1NSwzICs5NTUsNiBAQCB1c2Vyc2NyaXB0cy91c2VyLXN0eWxlLWFsbC1m
cmFtZXMuaHRtbAogdXNlcnNjcmlwdHMvdXNlci1zdHlsZS10b3AtZnJhbWUtb25seS5odG1sCiB1
c2Vyc2NyaXB0cy9mcmFtZXNldC1hbGwtZnJhbWVzLmh0bWwKIHVzZXJzY3JpcHRzL2ZyYW1lc2V0
LXRvcC1mcmFtZS1vbmx5Lmh0bWwKKworIyBEaXJlY3RvcnkgdXBsb2FkIGlzIG5vdCBlbmFibGVk
LgorZmFzdC9mb3Jtcy9pbnB1dC1maWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAo=
</data>
<flag name="review"
          id="49513"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>