<?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>161276</bug_id>
          
          <creation_ts>2016-08-26 16:12:39 -0700</creation_ts>
          <short_desc>AX: Crash at AccessibilityRenderObject::computeAccessibilityIsIgnored const  + 552</short_desc>
          <delta_ts>2016-09-13 11:22:39 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>n_wang</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1223773</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-08-26 16:12:39 -0700</bug_when>
    <thetext>0   WebCore                       	0x0000000184b138b8 WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored() const + 552 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/rendering/RenderObject.h:970)
1   WebCore                       	0x0000000184b13878 WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored() const + 488 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/accessibility/AccessibilityRenderObject.cpp:1208)
2   WebCore                       	0x0000000184b0e0a0 WebCore::AccessibilityObject::accessibilityIsIgnored() const + 100 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/accessibility/AccessibilityObject.cpp:2748)
3   WebCore                       	0x0000000184b0db8c WebCore::AccessibilityObject::notifyIfIgnoredValueChanged() + 32 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/accessibility/AccessibilityObject.cpp:2643)
4   WebCore                       	0x00000001853ed240 WebCore::RenderBlock::removeChild(WebCore::RenderObject&amp;) + 580 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/rendering/RenderBlock.cpp:768)
5   WebCore                       	0x00000001849bf924 WebCore::RenderObject::willBeDestroyed() + 72 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/rendering/RenderObject.cpp:191)
6   WebCore                       	0x00000001849bf6ec WebCore::RenderObject::destroyAndCleanupAnonymousWrappers() + 276 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/rendering/RenderObject.cpp:2036)
7   WebCore                       	0x00000001855f8d24 WebCore::Style::detachChildren(WebCore::ContainerNode&amp;, WebCore::Style::DetachType) + 288 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:324)
8   WebCore                       	0x00000001855f751c WebCore::Style::detachRenderTree(WebCore::Element&amp;, WebCore::Style::DetachType) + 128 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:570)
9   WebCore                       	0x00000001855f8ce8 WebCore::Style::detachChildren(WebCore::ContainerNode&amp;, WebCore::Style::DetachType) + 228 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:543)
10  WebCore                       	0x00000001855f751c WebCore::Style::detachRenderTree(WebCore::Element&amp;, WebCore::Style::DetachType) + 128 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:570)
11  WebCore                       	0x00000001855f8ce8 WebCore::Style::detachChildren(WebCore::ContainerNode&amp;, WebCore::Style::DetachType) + 228 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:543)
12  WebCore                       	0x00000001855f751c WebCore::Style::detachRenderTree(WebCore::Element&amp;, WebCore::Style::DetachType) + 128 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:570)
13  WebCore                       	0x00000001855f8ce8 WebCore::Style::detachChildren(WebCore::ContainerNode&amp;, WebCore::Style::DetachType) + 228 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:543)
14  WebCore                       	0x00000001855f751c WebCore::Style::detachRenderTree(WebCore::Element&amp;, WebCore::Style::DetachType) + 128 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:570)
15  WebCore                       	0x00000001855f8ce8 WebCore::Style::detachChildren(WebCore::ContainerNode&amp;, WebCore::Style::DetachType) + 228 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:543)
16  WebCore                       	0x00000001855f751c WebCore::Style::detachRenderTree(WebCore::Element&amp;, WebCore::Style::DetachType) + 128 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:570)
17  WebCore                       	0x00000001855f8ce8 WebCore::Style::detachChildren(WebCore::ContainerNode&amp;, WebCore::Style::DetachType) + 228 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:543)
18  WebCore                       	0x00000001855f751c WebCore::Style::detachRenderTree(WebCore::Element&amp;, WebCore::Style::DetachType) + 128 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:570)
19  WebCore                       	0x00000001855f8ce8 WebCore::Style::detachChildren(WebCore::ContainerNode&amp;, WebCore::Style::DetachType) + 228 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:543)
20  WebCore                       	0x00000001855f751c WebCore::Style::detachRenderTree(WebCore::Element&amp;, WebCore::Style::DetachType) + 128 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/style/StyleResolveTree.cpp:570)
21  WebCore                       	0x0000000184bd3a74 WebCore::ContainerNode::removeBetween(WebCore::Node*, WebCore::Node*, WebCore::Node&amp;) + 108 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/dom/ContainerNode.cpp:104)
22  WebCore                       	0x0000000184aa44a4 WebCore::ContainerNode::removeChild(WebCore::Node*, int&amp;) + 336 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/dom/ContainerNode.cpp:572)
23  WebCore                       	0x0000000184aa434c WebCore::Node::removeChild(WebCore::Node*, int&amp;) + 40 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/dom/Node.cpp:465)
24  WebCore                       	0x0000000184aa42e8 WebCore::JSNode::removeChild(JSC::ExecState*) + 68 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WebCore/WebCore-7601.1.46.128/bindings/js/JSNodeCustom.cpp:140)

&lt;rdar://problem/22131009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223774</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-08-26 16:13:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/28039070&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223778</commentid>
    <comment_count>2</comment_count>
      <attachid>287168</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-08-26 16:21:27 -0700</bug_when>
    <thetext>Created attachment 287168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223793</commentid>
    <comment_count>3</comment_count>
      <attachid>287168</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-08-26 16:44:19 -0700</bug_when>
    <thetext>Comment on attachment 287168
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1158
&gt; +    RenderObject* protectedRenderer(m_renderer);

does this hold onto the object? or just make a copy of the pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223799</commentid>
    <comment_count>4</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-08-26 17:04:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 287168 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=287168&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1158
&gt; &gt; +    RenderObject* protectedRenderer(m_renderer);
&gt; 
&gt; does this hold onto the object? or just make a copy of the pointer?

 Good point, I&apos;ll double check. The RenderObject is not ref counted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224649</commentid>
    <comment_count>5</comment_count>
      <attachid>287168</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-08-30 11:48:41 -0700</bug_when>
    <thetext>Comment on attachment 287168
Patch

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

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1158
&gt;&gt;&gt; +    RenderObject* protectedRenderer(m_renderer);
&gt;&gt; 
&gt;&gt; does this hold onto the object? or just make a copy of the pointer?
&gt; 
&gt; Good point, I&apos;ll double check. The RenderObject is not ref counted.

Since m_renderer is just a raw pointer, we have no way to know anything about the ownership and hold onto it easily (I did a lot of searches on smart pointers but I don&apos;t think we want to declare sole ownership within this function). A copy of the RenderObject might work but I suspect it will affect the performance quite a lot. The easiest way I can think of (since we are not sure what is causing the m_renderer being null) is to null check at all the place within this function when we are accessing m_renderer, but that seems to be very ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224655</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-08-30 12:03:32 -0700</bug_when>
    <thetext>Maybe we can just do

RenderObject protect(mrenderer)

Then access it everywhere with

protect.isBR() and likewise with dot operator

(In reply to comment #5)
&gt; Comment on attachment 287168 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=287168&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1158
&gt; &gt;&gt;&gt; +    RenderObject* protectedRenderer(m_renderer);
&gt; &gt;&gt; 
&gt; &gt;&gt; does this hold onto the object? or just make a copy of the pointer?
&gt; &gt; 
&gt; &gt; Good point, I&apos;ll double check. The RenderObject is not ref counted.
&gt; 
&gt; Since m_renderer is just a raw pointer, we have no way to know anything
&gt; about the ownership and hold onto it easily (I did a lot of searches on
&gt; smart pointers but I don&apos;t think we want to declare sole ownership within
&gt; this function). A copy of the RenderObject might work but I suspect it will
&gt; affect the performance quite a lot. The easiest way I can think of (since we
&gt; are not sure what is causing the m_renderer being null) is to null check at
&gt; all the place within this function when we are accessing m_renderer, but
&gt; that seems to be very ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224684</commentid>
    <comment_count>7</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-08-30 13:53:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Maybe we can just do
&gt; 
&gt; RenderObject protect(mrenderer)
&gt; 
&gt; Then access it everywhere with
&gt; 
&gt; protect.isBR() and likewise with dot operator
&gt; 

Why would this work? A reference is just an alia of the object and the object can still be nulled during this function, right? And C++ has undefined behavior on null reference, it will also cause crash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224898</commentid>
    <comment_count>8</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-08-30 23:42:32 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Maybe we can just do
&gt; &gt; 
&gt; &gt; RenderObject protect(mrenderer)
&gt; &gt; 
&gt; &gt; Then access it everywhere with
&gt; &gt; 
&gt; &gt; protect.isBR() and likewise with dot operator
&gt; &gt; 
&gt; 
&gt; Why would this work? A reference is just an alia of the object and the
&gt; object can still be nulled during this function, right? And C++ has
&gt; undefined behavior on null reference, it will also cause crash?

I see a number of examples like this

   Ref&lt;Element&gt; protect(*element);

    bool successfullyFocused = newDocument-&gt;setFocusedElement(element, direction);

It seems however, if we do 
RenderObject protect(m_renderer)
and then access protect, as an object that would solve our problem. Our problem is now that the pointer inside m_renderer is bad, but rather what m_renderer points to. If we copy what m_renderer pointed to and use that for the duration of the method, it seems like that would work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224901</commentid>
    <comment_count>9</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-08-31 00:06:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; Maybe we can just do
&gt; &gt; &gt; 
&gt; &gt; &gt; RenderObject protect(mrenderer)
&gt; &gt; &gt; 
&gt; &gt; &gt; Then access it everywhere with
&gt; &gt; &gt; 
&gt; &gt; &gt; protect.isBR() and likewise with dot operator
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Why would this work? A reference is just an alia of the object and the
&gt; &gt; object can still be nulled during this function, right? And C++ has
&gt; &gt; undefined behavior on null reference, it will also cause crash?
&gt; 
&gt; I see a number of examples like this
&gt; 
&gt;    Ref&lt;Element&gt; protect(*element);
&gt; 
&gt;     bool successfullyFocused = newDocument-&gt;setFocusedElement(element,
&gt; direction);
&gt; 
&gt; It seems however, if we do 
&gt; RenderObject protect(m_renderer)
&gt; and then access protect, as an object that would solve our problem. Our
&gt; problem is now that the pointer inside m_renderer is bad, but rather what
&gt; m_renderer points to. If we copy what m_renderer pointed to and use that for
&gt; the duration of the method, it seems like that would work

I think for the other example, the class is ref counted so we can use Ref&lt;T&gt; to hold onto the object. 
Copying the object itself seems fine but would it affect the performance since we are calling this function everywhere? Also when I try to copy the object there&apos;s an compiler error saying RenderObject is an abstract class. Maybe we have to copy the derived class object? But that makes this problem more complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224909</commentid>
    <comment_count>10</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-08-31 00:15:49 -0700</bug_when>
    <thetext>So our current protect does nothing then?

Can we not just copy the pointer which would take care of the nil pointer access

The other option is to put in more nil checks in some systemic way 

(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; Maybe we can just do
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; RenderObject protect(mrenderer)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Then access it everywhere with
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; protect.isBR() and likewise with dot operator
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Why would this work? A reference is just an alia of the object and the
&gt; &gt; &gt; object can still be nulled during this function, right? And C++ has
&gt; &gt; &gt; undefined behavior on null reference, it will also cause crash?
&gt; &gt; 
&gt; &gt; I see a number of examples like this
&gt; &gt; 
&gt; &gt;    Ref&lt;Element&gt; protect(*element);
&gt; &gt; 
&gt; &gt;     bool successfullyFocused = newDocument-&gt;setFocusedElement(element,
&gt; &gt; direction);
&gt; &gt; 
&gt; &gt; It seems however, if we do 
&gt; &gt; RenderObject protect(m_renderer)
&gt; &gt; and then access protect, as an object that would solve our problem. Our
&gt; &gt; problem is now that the pointer inside m_renderer is bad, but rather what
&gt; &gt; m_renderer points to. If we copy what m_renderer pointed to and use that for
&gt; &gt; the duration of the method, it seems like that would work
&gt; 
&gt; I think for the other example, the class is ref counted so we can use Ref&lt;T&gt;
&gt; to hold onto the object. 
&gt; Copying the object itself seems fine but would it affect the performance
&gt; since we are calling this function everywhere? Also when I try to copy the
&gt; object there&apos;s an compiler error saying RenderObject is an abstract class.
&gt; Maybe we have to copy the derived class object? But that makes this problem
&gt; more complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224910</commentid>
    <comment_count>11</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-08-31 00:22:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; So our current protect does nothing then?
&gt; 
&gt; Can we not just copy the pointer which would take care of the nil pointer
&gt; access
&gt; 
&gt; The other option is to put in more nil checks in some systemic way 
&gt; 

Yes in my understanding, the current protect is just copying the raw pointer and won&apos;t hold onto the object for longer duration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229014</commentid>
    <comment_count>12</comment_count>
      <attachid>288647</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-12 17:45:37 -0700</bug_when>
    <thetext>Created attachment 288647
patch

Added more nil checks.
Since we&apos;ve only seen crashes at/before this line. Early return should fix most cases. That&apos;s why I didn&apos;t put nil checks for every m_renderer in the latter part of the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229201</commentid>
    <comment_count>13</comment_count>
      <attachid>288647</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-09-13 10:47:40 -0700</bug_when>
    <thetext>Comment on attachment 288647
patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        Despite my best efforts, I couldn&apos;t make a layout test that destroy the renderer within

that destroys the

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1193
&gt; +    // &lt;rdar://problem/22131009&gt; Getting the controlObject might cause the m_renderer to be nullptr.

can you put webkit bug number here

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1215
&gt; +        // Walking up the parents chain might reset the m_renderer

Walking up the parent chain

period at end of sentence</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229208</commentid>
    <comment_count>14</comment_count>
      <attachid>288700</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-13 10:59:58 -0700</bug_when>
    <thetext>Created attachment 288700
patch

update from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229222</commentid>
    <comment_count>15</comment_count>
      <attachid>288700</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-13 11:22:34 -0700</bug_when>
    <thetext>Comment on attachment 288700
patch

Clearing flags on attachment: 288700

Committed r205865: &lt;http://trac.webkit.org/changeset/205865&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229223</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-13 11:22:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287168</attachid>
            <date>2016-08-26 16:21:27 -0700</date>
            <delta_ts>2016-09-12 17:45:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>6769</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTI2ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IENyYXNoIGF0IEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGNvbnN0ICArIDU1
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMjc2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZXRp
bWVzIHdoZW4gY2FsbGluZyBKYXZhU2NyaXB0IHJlbW92ZUNoaWxkIG9yIHNldEF0dHJpYnV0ZSBv
biBhIG5vZGUsIGl0IHNlZW1zIGxpa2UKKyAgICAgICAgdGhlIHJlbmRlcmVyIGlzIGRlYWxsb2Nh
dGVkIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZC4g
SXQncyAKKyAgICAgICAgY2F1c2luZyBhIGNyYXNoIHdoZW4gd2UgYXJlIGFjY2Vzc2luZyB0aGUg
cmVuZGVyZXIgYWZ0ZXIgdGhhdC4gRml4ZWQgaXQgYnkgcHJvdGVjdGluZyB0aGUKKyAgICAgICAg
cmVuZGVyZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLgorCisgICAgICAgIERl
c3BpdGUgbXkgYmVzdCBlZmZvcnRzLCBJIGNvdWxkbid0IG1ha2UgYSBsYXlvdXQgdGVzdCB0aGF0
IGRlc3Ryb3kgdGhlIHJlbmRlcmVyIHdpdGhpbgorICAgICAgICB0aGUgY29tcHV0ZUFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQpOgorCiAyMDE2LTA4
LTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNT
SU9OIChyMjA0OTg3KTogZmFzdC9jYW52YXMtY29tcG9zaXRlLSogdGVzdHMgYXJlIG5vdyBmbGFr
eSBhc3NlcnRpb24gZmFpbHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
MjA1MDU0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1Myw2ICsxMTUzLDEwIEBAIGJvb2wg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUEKICAgICBpZiAoIW1fcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAorICAgIC8vIFNvbWV0aW1lcyB0aGlzIGZ1bmN0
aW9uIHdpbGwgY2F1c2UgdGhlIG1fcmVuZGVyZXIgdG8gYmUgZGVhbGxvY2F0ZWQsIGFuZCB0aGVu
CisgICAgLy8gbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlLiBXZSBuZWVkIHRvIHByb3RlY3QgdGhp
cyBvYmplY3QgbG9uZyBlbm91Z2ggZm9yIGR1cmF0aW9uLgorICAgIFJlbmRlck9iamVjdCogcHJv
dGVjdGVkUmVuZGVyZXIobV9yZW5kZXJlcik7CisgICAgCiAgICAgLy8gQ2hlY2sgZmlyc3QgaWYg
YW55IG9mIHRoZSBjb21tb24gcmVhc29ucyBjYXVzZSB0aGlzIGVsZW1lbnQgdG8gYmUgaWdub3Jl
ZC4KICAgICAvLyBUaGVuIHByb2Nlc3Mgb3RoZXIgdXNlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBh
cHBsaWVkIHRvIGFsbCB0aGUgdmFyaW91cyByb2xlcwogICAgIC8vIHRoYXQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdHMgdGFrZSBvbi4KQEAgLTExODEsNyArMTE4NSw3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUEKICAgICAgICAgcmV0dXJuIGFjY2Vzc2liaWxp
dHlJZ25vcmVBdHRhY2htZW50KCk7CiAgICAgCiAgICAgLy8gaWdub3JlIHBvcHVwIG1lbnUgaXRl
bXMgYmVjYXVzZSBBcHBLaXQgZG9lcwotICAgIGlmIChtX3JlbmRlcmVyICYmIGFuY2VzdG9yc09m
VHlwZTxSZW5kZXJNZW51TGlzdD4oKm1fcmVuZGVyZXIpLmZpcnN0KCkpCisgICAgaWYgKHByb3Rl
Y3RlZFJlbmRlcmVyICYmIGFuY2VzdG9yc09mVHlwZTxSZW5kZXJNZW51TGlzdD4oKnByb3RlY3Rl
ZFJlbmRlcmVyKS5maXJzdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIGZpbmQg
b3V0IGlmIHRoaXMgZWxlbWVudCBpcyBpbnNpZGUgb2YgYSBsYWJlbCBlbGVtZW50LgpAQCAtMTE5
MCwxNSArMTE5NCwxNSBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVB
CiAgICAgaWYgKGNvbnRyb2xPYmplY3QgJiYgIWNvbnRyb2xPYmplY3QtPmV4cG9zZXNUaXRsZVVJ
RWxlbWVudCgpICYmIGNvbnRyb2xPYmplY3QtPmlzQ2hlY2tib3hPclJhZGlvKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzQlIoKSkKKyAgICBpZiAocHJv
dGVjdGVkUmVuZGVyZXItPmlzQlIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
aXM8UmVuZGVyVGV4dD4oKm1fcmVuZGVyZXIpKSB7CisgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpw
cm90ZWN0ZWRSZW5kZXJlcikpIHsKICAgICAgICAgLy8gc3RhdGljIHRleHQgYmVuZWF0aCBNZW51
SXRlbXMgYW5kIE1lbnVCdXR0b25zIGFyZSBqdXN0IHJlcG9ydGVkIGFsb25nIHdpdGggdGhlIG1l
bnUgaXRlbSwgc28gaXQncyBpZ25vcmVkIG9uIGFuIGluZGl2aWR1YWwgbGV2ZWwKICAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CiAg
ICAgICAgIGlmIChwYXJlbnQgJiYgKHBhcmVudC0+aXNNZW51SXRlbSgpIHx8IHBhcmVudC0+YXJp
YVJvbGVBdHRyaWJ1dGUoKSA9PSBNZW51QnV0dG9uUm9sZSkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpt
X3JlbmRlcmVyKTsKKyAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRl
eHQ+KCpwcm90ZWN0ZWRSZW5kZXJlcik7CiAgICAgICAgIGlmICghcmVuZGVyVGV4dC5oYXNSZW5k
ZXJlZFRleHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMjU1LDcgKzEyNTks
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICAvLyBkb24ndCBpZ25vcmUgbGFiZWxzLCBiZWNhdXNlIHRo
ZXkgc2VydmUgYXMgVGl0bGVVSUVsZW1lbnRzCi0gICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXIt
Pm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcHJvdGVjdGVkUmVuZGVyZXItPm5vZGUoKTsKICAg
ICBpZiAoaXM8SFRNTExhYmVsRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKQEAgLTEyNzksOCArMTI4Myw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Y29tcHV0ZUEKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgCi0gICAgaWYg
KGlzPFJlbmRlckJsb2NrRmxvdz4oKm1fcmVuZGVyZXIpICYmIG1fcmVuZGVyZXItPmNoaWxkcmVu
SW5saW5lKCkgJiYgIWNhblNldEZvY3VzQXR0cmlidXRlKCkpCi0gICAgICAgIHJldHVybiAhZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqbV9yZW5kZXJlcikuaGFzTGluZXMoKSAmJiAhbW91c2VC
dXR0b25MaXN0ZW5lcigpOworICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpwcm90ZWN0ZWRS
ZW5kZXJlcikgJiYgcHJvdGVjdGVkUmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkgJiYgIWNhblNl
dEZvY3VzQXR0cmlidXRlKCkpCisgICAgICAgIHJldHVybiAhZG93bmNhc3Q8UmVuZGVyQmxvY2tG
bG93PigqcHJvdGVjdGVkUmVuZGVyZXIpLmhhc0xpbmVzKCkgJiYgIW1vdXNlQnV0dG9uTGlzdGVu
ZXIoKTsKICAgICAKICAgICAvLyBpZ25vcmUgaW1hZ2VzIHNlZW1pbmdseSB1c2VkIGFzIHNwYWNl
cnMKICAgICBpZiAoaXNJbWFnZSgpKSB7CkBAIC0xMjkyLDkgKzEyOTYsOSBAQCBib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBCiAgICAgICAgIC8vIEZpcnN0IGNoZWNrIHRo
ZSBSZW5kZXJJbWFnZSdzIGFsdFRleHQgKHdoaWNoIGNhbiBiZSBzZXQgdGhyb3VnaCBhIHN0eWxl
IHNoZWV0LCBvciBjb21lIGZyb20gdGhlIEVsZW1lbnQpLgogICAgICAgICAvLyBIb3dldmVyLCBp
ZiB0aGlzIGlzIG5vdCBhIG5hdGl2ZSBpbWFnZSwgZmFsbGJhY2sgdG8gdGhlIGF0dHJpYnV0ZSBv
biB0aGUgRWxlbWVudC4KICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBhbHRU
ZXh0SW5jbHVzaW9uID0gRGVmYXVsdEJlaGF2aW9yOwotICAgICAgICBib29sIGlzUmVuZGVySW1h
Z2UgPSBpczxSZW5kZXJJbWFnZT4obV9yZW5kZXJlcik7CisgICAgICAgIGJvb2wgaXNSZW5kZXJJ
bWFnZSA9IGlzPFJlbmRlckltYWdlPihwcm90ZWN0ZWRSZW5kZXJlcik7CiAgICAgICAgIGlmIChp
c1JlbmRlckltYWdlKQotICAgICAgICAgICAgYWx0VGV4dEluY2x1c2lvbiA9IG9iamVjdEluY2x1
c2lvbkZyb21BbHRUZXh0KGRvd25jYXN0PFJlbmRlckltYWdlPigqbV9yZW5kZXJlcikuYWx0VGV4
dCgpKTsKKyAgICAgICAgICAgIGFsdFRleHRJbmNsdXNpb24gPSBvYmplY3RJbmNsdXNpb25Gcm9t
QWx0VGV4dChkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnByb3RlY3RlZFJlbmRlcmVyKS5hbHRUZXh0
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhbHRUZXh0SW5jbHVzaW9uID0gb2JqZWN0
SW5jbHVzaW9uRnJvbUFsdFRleHQoZ2V0QXR0cmlidXRlKGFsdEF0dHIpLnN0cmluZygpKTsKIApA
QCAtMTMwOSw3ICsxMzEzLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21w
dXRlQQogICAgIAogICAgICAgICBpZiAoaXNSZW5kZXJJbWFnZSkgewogICAgICAgICAgICAgLy8g
Y2hlY2sgZm9yIG9uZS1kaW1lbnNpb25hbCBpbWFnZQotICAgICAgICAgICAgUmVuZGVySW1hZ2Um
IGltYWdlID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCptX3JlbmRlcmVyKTsKKyAgICAgICAgICAg
IFJlbmRlckltYWdlJiBpbWFnZSA9IGRvd25jYXN0PFJlbmRlckltYWdlPigqcHJvdGVjdGVkUmVu
ZGVyZXIpOwogICAgICAgICAgICAgaWYgKGltYWdlLmhlaWdodCgpIDw9IDEgfHwgaW1hZ2Uud2lk
dGgoKSA8PSAxKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCkBA
IC0xMzI2LDE1ICsxMzMwLDE1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29t
cHV0ZUEKICAgICAgICAgaWYgKGNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCptX3JlbmRlcmVy
KSkgewotICAgICAgICAgICAgYXV0byYgY2FudmFzQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pigq
bV9yZW5kZXJlcik7CisgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpwcm90ZWN0ZWRSZW5kZXJl
cikpIHsKKyAgICAgICAgICAgIGF1dG8mIGNhbnZhc0JveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KnByb3RlY3RlZFJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmIChjYW52YXNCb3guaGVpZ2h0KCkg
PD0gMSB8fCBjYW52YXNCb3gud2lkdGgoKSA8PSAxKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIC8vIE90aGVyd2lzZSBmYWxsIHRocm91Z2g7IHVzZSBw
cmVzZW5jZSBvZiBoZWxwIHRleHQsIHRpdGxlLCBvciBkZXNjcmlwdGlvbiB0byBkZWNpZGUuCiAg
ICAgfQogCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKSB7CisgICAgaWYgKHBy
b3RlY3RlZFJlbmRlcmVyLT5pc0xpc3RNYXJrZXIoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKICAgICAgICAgcmV0dXJu
IHBhcmVudCAmJiAhcGFyZW50LT5pc0xpc3RJdGVtKCk7CiAgICAgfQpAQCAtMTM3OCw3ICsxMzgy
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcnVieSBjb250YWluZXJz
IGFyZSBub3QgaWdub3JlZC4KLSAgICBpZiAobV9yZW5kZXJlci0+aXNSdWJ5UnVuKCkgfHwgbV9y
ZW5kZXJlci0+aXNSdWJ5QmxvY2soKSB8fCBtX3JlbmRlcmVyLT5pc1J1YnlJbmxpbmUoKSkKKyAg
ICBpZiAocHJvdGVjdGVkUmVuZGVyZXItPmlzUnVieVJ1bigpIHx8IHByb3RlY3RlZFJlbmRlcmVy
LT5pc1J1YnlCbG9jaygpIHx8IHByb3RlY3RlZFJlbmRlcmVyLT5pc1J1YnlJbmxpbmUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQnkgZGVmYXVsdCwgb2JqZWN0cyBzaG91bGQg
YmUgaWdub3JlZCBzbyB0aGF0IHRoZSBBWCBoaWVyYXJjaHkgaXMgbm90Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288647</attachid>
            <date>2016-09-12 17:45:37 -0700</date>
            <delta_ts>2016-09-13 10:59:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>2600</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA5LTEyICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IENyYXNoIGF0IEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGNvbnN0ICArIDU1
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMjc2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZXRp
bWVzIHdoZW4gY2FsbGluZyBKYXZhU2NyaXB0IHJlbW92ZUNoaWxkIG9yIHNldEF0dHJpYnV0ZSBv
biBhIG5vZGUsIGl0IHNlZW1zIGxpa2UKKyAgICAgICAgdGhlIHJlbmRlcmVyIGlzIGRlYWxsb2Nh
dGVkIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZC4g
SXQncyAKKyAgICAgICAgY2F1c2luZyBhIGNyYXNoIHdoZW4gd2UgYXJlIGFjY2Vzc2luZyB0aGUg
cmVuZGVyZXIgYWZ0ZXIgdGhhdC4gU2luY2UgUmVuZGVyT2JqZWN0IGlzIG5vdCByZWYKKyAgICAg
ICAgY291bnRlZCBhbmQgd2UgY2Fubm90IGhvbGQgb250byBpdCBmb3IgdGhlIGR1cmF0aW9uIG9m
IHRoZSBmdW5jdGlvbiwgZml4ZWQgaXQgYnkgYWRkaW5nCisgICAgICAgIG1vcmUgbmlsIGNoZWNr
cy4KKworICAgICAgICBEZXNwaXRlIG15IGJlc3QgZWZmb3J0cywgSSBjb3VsZG4ndCBtYWtlIGEg
bGF5b3V0IHRlc3QgdGhhdCBkZXN0cm95IHRoZSByZW5kZXJlciB3aXRoaW4KKyAgICAgICAgdGhl
IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGZ1bmN0aW9uLiAKKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCk6CisKIDIwMTYtMDktMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8g
YSBzZXBhcmF0ZSBjbGFzcyBuYW1lZCBJbWFnZUJhY2tpbmdTdG9yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDU4NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5
LDYgKzExODksMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQQog
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvbnRyb2xPYmplY3QgPSBjb3JyZXNwb25kaW5nQ29u
dHJvbEZvckxhYmVsRWxlbWVudCgpOwogICAgIGlmIChjb250cm9sT2JqZWN0ICYmICFjb250cm9s
T2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSAmJiBjb250cm9sT2JqZWN0LT5pc0NoZWNr
Ym94T3JSYWRpbygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyA8cmRhcjov
L3Byb2JsZW0vMjIxMzEwMDk+IEdldHRpbmcgdGhlIGNvbnRyb2xPYmplY3QgbWlnaHQgY2F1c2Ug
dGhlIG1fcmVuZGVyZXIgdG8gYmUgbnVsbHB0ci4KKyAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG1fcmVuZGVyZXItPmlzQlIoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMjA4LDYgKzEyMTIsMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpjb21wdXRlQQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIAorICAgICAgICAvLyBXYWxraW5nIHVwIHRoZSBwYXJlbnRzIGNoYWluIG1p
Z2h0IHJlc2V0IHRoZSBtX3JlbmRlcmVyCisgICAgICAgIGlmICghbV9yZW5kZXJlcikKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKICAgICAgICAgLy8gVGhlIGFsdCBhdHRyaWJ1
dGUgbWF5IGJlIHNldCBvbiBhIHRleHQgZnJhZ21lbnQgdGhyb3VnaCBDU1MsIHdoaWNoIHNob3Vs
ZCBiZSBob25vcmVkLgogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dEZyYWdtZW50PihyZW5kZXJU
ZXh0KSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBhbHRUZXh0
SW5jbHVzaW9uID0gb2JqZWN0SW5jbHVzaW9uRnJvbUFsdFRleHQoZG93bmNhc3Q8UmVuZGVyVGV4
dEZyYWdtZW50PihyZW5kZXJUZXh0KS5hbHRUZXh0KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288700</attachid>
            <date>2016-09-13 10:59:58 -0700</date>
            <delta_ts>2016-09-13 11:22:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>2595</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA5LTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IENyYXNoIGF0IEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGNvbnN0ICArIDU1
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMjc2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZXRp
bWVzIHdoZW4gY2FsbGluZyBKYXZhU2NyaXB0IHJlbW92ZUNoaWxkIG9yIHNldEF0dHJpYnV0ZSBv
biBhIG5vZGUsIGl0IHNlZW1zIGxpa2UKKyAgICAgICAgdGhlIHJlbmRlcmVyIGlzIGRlYWxsb2Nh
dGVkIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZC4g
SXQncyAKKyAgICAgICAgY2F1c2luZyBhIGNyYXNoIHdoZW4gd2UgYXJlIGFjY2Vzc2luZyB0aGUg
cmVuZGVyZXIgYWZ0ZXIgdGhhdC4gU2luY2UgUmVuZGVyT2JqZWN0IGlzIG5vdCByZWYKKyAgICAg
ICAgY291bnRlZCBhbmQgd2UgY2Fubm90IGhvbGQgb250byBpdCBmb3IgdGhlIGR1cmF0aW9uIG9m
IHRoZSBmdW5jdGlvbiwgZml4ZWQgaXQgYnkgYWRkaW5nCisgICAgICAgIG1vcmUgbmlsIGNoZWNr
cy4KKworICAgICAgICBEZXNwaXRlIG15IGJlc3QgZWZmb3J0cywgSSBjb3VsZG4ndCBtYWtlIGEg
bGF5b3V0IHRlc3QgdGhhdCBkZXN0cm95cyB0aGUgcmVuZGVyZXIgd2l0aGluCisgICAgICAgIHRo
ZSBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCBmdW5jdGlvbi4gCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQpOgorCiAyMDE2LTA5LTEyICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgog
CiAgICAgICAgIE1lZGlhLXNvdXJjZSBiYWNrZWQgZWxlbWVudHMgYmxvY2sgbG9hZCBldmVudDsg
Y2F1c2Ugd2ViLXBsYXRmb3JtLXRlc3QgZmxha2luZXNzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDIwNTg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksNiArMTE4
OSwxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBCiAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29udHJvbE9iamVjdCA9IGNvcnJlc3BvbmRpbmdDb250cm9sRm9y
TGFiZWxFbGVtZW50KCk7CiAgICAgaWYgKGNvbnRyb2xPYmplY3QgJiYgIWNvbnRyb2xPYmplY3Qt
PmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpICYmIGNvbnRyb2xPYmplY3QtPmlzQ2hlY2tib3hPclJh
ZGlvKCkpCiAgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE2MTI3NiBHZXR0aW5nIHRoZSBjb250cm9sT2JqZWN0IG1pZ2h0IGNhdXNlIHRoZSBt
X3JlbmRlcmVyIHRvIGJlIG51bGxwdHIuCisgICAgaWYgKCFtX3JlbmRlcmVyKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChtX3JlbmRlcmVyLT5pc0JSKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTIwOCw2ICsxMjEyLDEwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6Y29tcHV0ZUEKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICAKKyAgICAgICAgLy8gV2Fsa2luZyB1cCB0aGUgcGFyZW50IGNoYWluIG1pZ2h0IHJl
c2V0IHRoZSBtX3JlbmRlcmVyLgorICAgICAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCiAgICAgICAgIC8vIFRoZSBhbHQgYXR0cmlidXRlIG1h
eSBiZSBzZXQgb24gYSB0ZXh0IGZyYWdtZW50IHRocm91Z2ggQ1NTLCB3aGljaCBzaG91bGQgYmUg
aG9ub3JlZC4KICAgICAgICAgaWYgKGlzPFJlbmRlclRleHRGcmFnbWVudD4ocmVuZGVyVGV4dCkp
IHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gYWx0VGV4dEluY2x1
c2lvbiA9IG9iamVjdEluY2x1c2lvbkZyb21BbHRUZXh0KGRvd25jYXN0PFJlbmRlclRleHRGcmFn
bWVudD4ocmVuZGVyVGV4dCkuYWx0VGV4dCgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>