<?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>87031</bug_id>
          
          <creation_ts>2012-05-21 11:01:46 -0700</creation_ts>
          <short_desc>DomStorage events handling needs TLC (3)</short_desc>
          <delta_ts>2012-05-23 15:04:12 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>85215</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>629273</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-21 11:01:46 -0700</bug_when>
    <thetext>Changes made in one renderer are propagated to all renderes associated with the profile of that originating renderer. That&apos;s overkill. Only those renderers containing pages that are using the domstorage area for the origin or are listening for storage events via window.onstorage need to receive these mutation events. As it stands right now, all processes &apos;light up&apos; a little on any domstorage mutation (which is pretty ugly if you have a lot of tabs open on unrelated sites).

See http://code.google.com/p/chromium/issues/detail?id=128482 for more info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629358</commentid>
    <comment_count>1</comment_count>
      <attachid>143073</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-21 12:09:16 -0700</bug_when>
    <thetext>Created attachment 143073
lessChatty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629363</commentid>
    <comment_count>2</comment_count>
      <attachid>143073</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-21 12:15:02 -0700</bug_when>
    <thetext>Comment on attachment 143073
lessChatty

Attachment 143073 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12731715</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629364</commentid>
    <comment_count>3</comment_count>
      <attachid>143073</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-21 12:15:59 -0700</bug_when>
    <thetext>Comment on attachment 143073
lessChatty

Attachment 143073 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12731716</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629365</commentid>
    <comment_count>4</comment_count>
      <attachid>143073</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-21 12:16:28 -0700</bug_when>
    <thetext>Comment on attachment 143073
lessChatty

Attachment 143073 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12738532</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629375</commentid>
    <comment_count>5</comment_count>
      <attachid>143073</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-21 12:19:59 -0700</bug_when>
    <thetext>Comment on attachment 143073
lessChatty

Attachment 143073 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12741353</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629384</commentid>
    <comment_count>6</comment_count>
      <attachid>143073</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-21 12:31:11 -0700</bug_when>
    <thetext>Comment on attachment 143073
lessChatty

Attachment 143073 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12744293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629386</commentid>
    <comment_count>7</comment_count>
      <attachid>143076</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-21 12:33:44 -0700</bug_when>
    <thetext>Created attachment 143076
lessChatty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629651</commentid>
    <comment_count>8</comment_count>
      <attachid>143122</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-21 15:55:07 -0700</bug_when>
    <thetext>Created attachment 143122
lessChatty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629776</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-21 17:47:24 -0700</bug_when>
    <thetext>cc&apos;ing adam too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629791</commentid>
    <comment_count>10</comment_count>
      <attachid>143122</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-21 17:57:54 -0700</bug_when>
    <thetext>Comment on attachment 143122
lessChatty

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

&gt; Source/WebCore/page/DOMWindow.cpp:1550
&gt; +#if PLATFORM(CHROMIUM)

We shouldn&apos;t be adding PLATFORM(CHROMIUM) ifdefs to DOMWindow.cpp.

&gt; Source/WebKit/chromium/src/StorageAreaProxy.cpp:128
&gt; +            Storage* storage = frame-&gt;domWindow()-&gt;optionalLocalStorage();

What is optionalLocalStorage ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629797</commentid>
    <comment_count>11</comment_count>
      <attachid>143122</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-21 18:02:14 -0700</bug_when>
    <thetext>Comment on attachment 143122
lessChatty

The general idea of this patch is fine.  The only wonky part is didAddStorageEventListener being conditional on PLATFORM(CHROMIUM).  It&apos;s also a pretty subtle change that&apos;s likely to be broken if we don&apos;t add a test upstream that checks that we continue to do this correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630641</commentid>
    <comment_count>12</comment_count>
      <attachid>143122</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-22 12:09:56 -0700</bug_when>
    <thetext>Comment on attachment 143122
lessChatty

Good question about a test. 5 of the existing test fail if the Storage instances are not created when a handler are attached, so a new test would add no value.
  storage/domstorage/events/basic-body-attribute.html -&gt; unexpected test timed out
  storage/domstorage/events/basic-setattribute.html -&gt; unexpected test timed out
  storage/domstorage/events/basic.html -&gt; unexpected text diff mismatch
  storage/domstorage/events/case-sensitive.html -&gt; unexpected text diff mismatch
  storage/domstorage/events/documentURI.html -&gt; unexpected test timed out

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

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:1550
&gt;&gt; +#if PLATFORM(CHROMIUM)
&gt; 
&gt; We shouldn&apos;t be adding PLATFORM(CHROMIUM) ifdefs to DOMWindow.cpp.

I&apos;m not super happy about that either. I&apos;m not sure any of the alternatives are better. I&apos;m pretty certain some of them are not. Some of the options as i see them...

0) Like it is, conditional on PLATFORM.
Pros: most minimal and simple and obvious and constrained change that can be made
Cons: risks gripes about PLATFORM conditionals

1) Do this unconditionally regardless of PLATFORM.
Pros: no gripes about conditional complication
Cons: doesn&apos;t really need to be there for other PLATFORMs (but it &quot;shouldn&apos;t&quot; hurt)

2) Hoist the inline conditional logic into either Storage.h or StorageArea.h as a static class method
on one of those two classes.
Pros:
* removes the conditional from the  monster DOMWindow.cpp file and puts it closer to the source of platform specific&apos;ness.
* expresses in the dom storage related .h file that something special happens at didAddStorageEventListener(window) time
Cons: Storage|StorageArea.h would have to #include DOMWindow.h (that inclusion could also be conditional)

3) Other more invasive forms of indirection involving new source files and/or new virtual methods on a &apos;client&apos; object somewhere in the webcore object graph.
Pros: none
Cons: obscurity, and unecessary runtime and congnitive complexity

I&apos;m open to suggestions. I put the patch up with #0 because it&apos;s the simplest possible to read/write/and review. #2 seems like a reasonable option to me.

&gt;&gt; Source/WebKit/chromium/src/StorageAreaProxy.cpp:128
&gt;&gt; +            Storage* storage = frame-&gt;domWindow()-&gt;optionalLocalStorage();
&gt; 
&gt; What is optionalLocalStorage ?

Can you make a more constructive comment? It&apos;s simply a getter that doesn&apos;t force the creation of
the underlying instance whereas the typically getter does. The name was patterned off of the
pre-existing optionalApplicationCache getter.
        Storage* optionalSessionStorage() const { return m_sessionStorage.get(); }
        Storage* optionalLocalStorage() const { return m_localStorage.get(); }
        DOMApplicationCache* optionalApplicationCache() const { return m_applicationCache.get(); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630649</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-22 12:14:55 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebKit/chromium/src/StorageAreaProxy.cpp:128
&gt; &gt;&gt; +            Storage* storage = frame-&gt;domWindow()-&gt;optionalLocalStorage();
&gt; &gt; 
&gt; &gt; What is optionalLocalStorage ?
&gt; 
&gt; Can you make a more constructive comment? It&apos;s simply a getter that doesn&apos;t force the creation of
&gt; the underlying instance whereas the typically getter does. The name was patterned off of the
&gt; pre-existing optionalApplicationCache getter.
&gt;         Storage* optionalSessionStorage() const { return m_sessionStorage.get(); }
&gt;         Storage* optionalLocalStorage() const { return m_localStorage.get(); }
&gt;         DOMApplicationCache* optionalApplicationCache() const { return m_applicationCache.get(); }

Ah, I see.  There&apos;s a similar function for getting DOMWindow from Frame called existingDOMWindow.  That might be a slightly clearer name, but we can worry about that later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630657</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-22 12:19:32 -0700</bug_when>
    <thetext>&gt; Good question about a test. 5 of the existing test fail if the Storage instances are not created when a handler are attached, so a new test would add no value.

Great.

&gt; &gt;&gt; Source/WebCore/page/DOMWindow.cpp:1550
&gt; &gt;&gt; +#if PLATFORM(CHROMIUM)
&gt; &gt; 
&gt; &gt; We shouldn&apos;t be adding PLATFORM(CHROMIUM) ifdefs to DOMWindow.cpp.
&gt; 
&gt; I&apos;m not super happy about that either. I&apos;m not sure any of the alternatives are better. I&apos;m pretty certain some of them are not. Some of the options as i see them...

Can you help me understand why creating these objects is helpful?  Is there some side effect of creating them that we might want to cause happen explicitly rather than implicitly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630664</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-22 12:31:59 -0700</bug_when>
    <thetext>
&gt; Can you help me understand why creating these objects is helpful?  Is there some side effect of creating them that we might want to cause happen explicitly rather than implicitly?

First, see http://code.google.com/p/chromium/issues/detail?id=128482. If that doesn&apos;t answer your &quot;why&quot; question, please come back with a more specific question.

I don&apos;t see any reason to add more webkit API and plumbing than we already have. Three small changes amount to a large reduction in IPC spam.
cr change 1) [commtted] https://chromiumcodereview.appspot.com/10413018
wk change 2) this one
cr change 3) a call to the HasAreaOpen() method introduced in #1

void DOMStorageMessageFilter::SendDomStorageEvent(
    const dom_storage::DomStorageArea* area,
    const GURL&amp; page_url,
    const NullableString16&amp; key,
    const NullableString16&amp; new_value,
    const NullableString16&amp; old_value) {
  DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO));
  // Only send mutation events to processes which have the area open.
  bool originated_in_process = connection_dispatching_message_for_ != 0;
  if (originated_in_process ||
      host_-&gt;HasAreaOpen(area-&gt;namespace_id(), area-&gt;origin())) {
    DOMStorageMsg_Event_Params params;
    params.origin = area-&gt;origin();
    params.page_url = page_url;
    params.connection_id = connection_dispatching_message_for_;
    params.key = key;
    params.new_value = new_value;
    params.old_value = old_value;
    params.namespace_id = area-&gt;namespace_id();
    Send(new DOMStorageMsg_Event(params));
  }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630786</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-22 14:45:03 -0700</bug_when>
    <thetext>&gt; First, see http://code.google.com/p/chromium/issues/detail?id=128482. If that doesn&apos;t answer your &quot;why&quot; question, please come back with a more specific question.

Based on reading that bug and grepping around a bit, the answer to my question is that instantiating the WebCore::Storage object causes WebKit to ask the embedder for a WebStorageArea, which calls the WebStorageImpl constructor in webstoragearea_impl.cc, which sends the DOMStorageHostMsg_OpenStorageArea to the host, which causes HasAreaOpen to return true.

It sounds like another approach would be to notify the embedder explicitly that someone is listening for storage events.  The embedder could then send DOMStorageHostMsg_OpenStorageArea (or a similar message) to the host.

The advantage of the second approach is that it&apos;s explicit rather than implicit and it avoiding having a wonky special case for PLATFORM(CHROMIUM) in DOMWindow.cpp.  The disadvantage is that there&apos;s more total machinery since the notification travels on a different pathway.

As a thought experiment, it might be worth considering how WebKit2 would approach this optimization if/when they support multiple WebProcesses.  I suspect that approach is also more consistent with what would work for WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630880</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-22 16:10:55 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; First, see http://code.google.com/p/chromium/issues/detail?id=128482. If that doesn&apos;t answer your &quot;why&quot; question, please come back with a more specific question.
&gt; 
&gt; Based on reading that bug and grepping around a bit, the answer to my question is that instantiating the WebCore::Storage object causes WebKit to ask the embedder for a WebStorageArea, which calls the WebStorageImpl constructor in webstoragearea_impl.cc, which sends the DOMStorageHostMsg_OpenStorageArea to the host, which causes HasAreaOpen to return true.
&gt; 
&gt; It sounds like another approach would be to notify the embedder explicitly that someone is listening for storage events.  The embedder could then send DOMStorageHostMsg_OpenStorageArea (or a similar message) to the host.

As mentioned earlier, I don&apos;t see any reason to add more webkit API and plumbing than we already have. The disadvantages outweigh the advantages, a parallel mechanism just makes more room for error. There would also the balancing &quot;no longer listening&quot; call plumb thru and get right.

&gt; The advantage of the second approach is that it&apos;s explicit rather than implicit and it avoiding having a wonky special case for PLATFORM(CHROMIUM) in DOMWindow.cpp.  The disadvantage is that there&apos;s more total machinery since the notification travels on a different pathway.

We can do something reasonable with the PLATFORM conditional to eliminate it.

&gt; As a thought experiment, it might be worth considering how WebKit2 would approach this optimization if/when they support multiple WebProcesses.  I suspect that approach is also more consistent with what would work for WebKit2.

webkit2... sorry... no data</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630907</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-22 16:34:39 -0700</bug_when>
    <thetext>Also something that is not apparent by looking at code currently in the codebase is that the need to send events is not purely a function of whether there are handlers attached. The mutation events are also utilized (or will be soon) to maintain consistency of the renderer side cache. You can see this here...
https://chromiumcodereview.appspot.com/10383123/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630910</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-22 16:37:54 -0700</bug_when>
    <thetext>Ok.  It sounds like we should try option (1):

&gt; 1) Do this unconditionally regardless of PLATFORM.
&gt; Pros: no gripes about conditional complication
&gt; Cons: doesn&apos;t really need to be there for other PLATFORMs (but it &quot;shouldn&apos;t&quot; hurt)

Would you also be willing to update the comment to explain why we&apos;re doing this with less Chromium-specific jargon?  Here&apos;s my hamfisted attempt:

    // Creating these WebCore::Storage objects informs the client that we&apos;d like to receive
    // notifications about storage events that might be triggered in other processes. Rather
    // than subscribe to these notifications explicitly, we subscribe to them implicitly to
    // simply the work done by the client. 

I&apos;m not 100% convinced that doing this implicitly is better, but I&apos;d rather not argue about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630971</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-22 17:29:48 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Ok.  It sounds like we should try option (1):

I&apos;ll run webkit/mac tests and let you know how it goes.

&gt;     // Creating these WebCore::Storage objects informs the client that we&apos;d like to receive
&gt;     // notifications about storage events that might be triggered in other processes. Rather
&gt;     // than subscribe to these notifications explicitly, we subscribe to them implicitly to
&gt;     // simply the work done by the client. 

Comment sgtm.

&gt; I&apos;m not 100% convinced that doing this implicitly is better, but I&apos;d rather not argue about it.

Thnx.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632020</commentid>
    <comment_count>21</comment_count>
      <attachid>143644</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-05-23 13:57:21 -0700</bug_when>
    <thetext>Created attachment 143644
lessChatty

New patch with option #1 (no longer PLATFORM conditional). Also updated the ChangeLog to describe the additional side effect of scheduling the area to be read from disk for non-chromium ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632097</commentid>
    <comment_count>22</comment_count>
      <attachid>143644</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-23 15:04:06 -0700</bug_when>
    <thetext>Comment on attachment 143644
lessChatty

Clearing flags on attachment: 143644

Committed r118254: &lt;http://trac.webkit.org/changeset/118254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632098</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-23 15:04:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143073</attachid>
            <date>2012-05-21 12:09:16 -0700</date>
            <delta_ts>2012-05-21 12:33:44 -0700</delta_ts>
            <desc>lessChatty</desc>
            <filename>lessChatty.txt</filename>
            <type>text/plain</type>
            <size>5972</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA1LTIxICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gRG9t
U3RvcmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExDICgzKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcwMzEKKyAgICAgICAgaHR0cHM6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyODQ4MgorICAgICAgICBD
cmVhdGUgV2ViQ29yZTo6U3RvcmFnZSBpbnN0YW5jZXMgYXMgYSBzaWRlIGVmZmVjdCBvZiBhdHRh
Y2hpbmcgc3RvcmFnZSBldmVudCBoYW5kbGVycy4KKyAgICAgICAgVGhpcyBhbGxvd3Mgc3RvcmFn
ZSBldmVudHMgaW4gY2hyb21pdW0gdG8gYmUgcHJvcGFnYXRlZCB3aXRoIGxlc3MgSVBDIGNoYXR0
ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBFeGlzdGluZyB0ZXN0cyBjb3ZlciB0aGlzLgorCisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKwog
MjAxMi0wNS0yMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiByZWZhY3RvciByZXZpc2lvbiBoaXN0b3J5IHRvIG5vdCBpbmNs
dWRlIHJlc291cmNlIGl0c2VsZi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDExNzc5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU0NSw2ICsxNTQ1LDE1IEBAIHZvaWQgRE9NV2luZG93Ojp3ZWJraXRD
YW5jZWxBbmltYXRpb25GcmEKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBkaWRBZGRTdG9yYWdl
RXZlbnRMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyAgICBFeGNlcHRpb25Db2RlIHVudXNlZDsKKyAgICB3aW5kb3ctPmxvY2FsU3RvcmFnZSh1
bnVzZWQpOworICAgIHdpbmRvdy0+c2Vzc2lvblN0b3JhZ2UodW51c2VkKTsKKyNlbmRpZgorfQor
CiBib29sIERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0
dXJlKQogewogICAgIGlmICghRXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBl
LCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpCkBAIC0xNTU2LDYgKzE1NjUsOCBAQCBib29sIERPTVdp
bmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlk
QWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlz
VG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRBZGRU
b3VjaEV2ZW50SGFuZGxlcigpOworICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnRO
YW1lcygpLnN0b3JhZ2VFdmVudCkKKyAgICAgICAgICAgIGRpZEFkZFN0b3JhZ2VFdmVudExpc3Rl
bmVyKHRoaXMpCiAgICAgfQogCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5s
b2FkRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3ODAy
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMi0wNS0yMSAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29v
Z2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIERvbVN0b3JhZ2UgZXZlbnRzIGhhbmRsaW5n
IG5lZWRzIFRMQyAoMykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg3MDMxCisgICAgICAgIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0v
aXNzdWVzL2RldGFpbD9pZD0xMjg0ODIKKyAgICAgICAgT25seSBxdWV1ZSBzdG9yYWdlIGV2ZW50
cyBmb3IgRG9jdW1lbnRzIHdoaWNoIGhhdmUgc3RvcmFnZSBldmVudCBoYW5kbGVycyBhdHRhY2hl
ZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNy
Yy9TdG9yYWdlQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJv
eHk6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZUFyZWFQcm94eTo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhUHJveHk6OmlzRXZlbnRTb3VyY2UpOgorCiAyMDEyLTA1LTE4ICBNaWNo
YWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
RG9tU3RvcmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExDICgyKQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAJKHJldmlzaW9uIDEx
NzgwMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTMgKzEyNSw5IEBAIHZvaWQgU3RvcmFnZUFyZWFQcm94
eTo6ZGlzcGF0Y2hMb2NhbFN0b3IKICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBw
YWdlR3JvdXAtPnBhZ2VzKCk7CiAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBwYWdlcy5lbmQoKTsgKytpdCkgewogICAgICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pICYmICFp
c0V2ZW50U291cmNlKGZyYW1lLT5kb21XaW5kb3coKS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSwg
c291cmNlQXJlYUluc3RhbmNlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYXliZSBv
bmx5IHJhaXNlIGlmIHRoZSB3aW5kb3cgaGFzIGFuIG9uc3RvcmFnZSBsaXN0ZW5lciBhdHRhY2hl
ZCB0byBhdm9pZCBjcmVhdGluZyB0aGUgU3RvcmFnZSBpbnN0YW5jZS4KLSAgICAgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBTdG9yYWdlKiBzdG9yYWdl
ID0gZnJhbWUtPmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoZWMpOwotICAgICAgICAgICAgICAg
IGlmICghZWMpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5lbnF1ZXVl
V2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVu
dCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2UpKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBmcmFtZS0+ZG9tV2luZG93KCkt
Pm9wdGlvbmFsTG9jYWxTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSAmJiBmcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pICYm
ICFpc0V2ZW50U291cmNlKHN0b3JhZ2UsIHNvdXJjZUFyZWFJbnN0YW5jZSkpCisgICAgICAgICAg
ICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1
ZSwgcGFnZVVSTCwgc3RvcmFnZSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTU3LDIwICsx
NTMsMTUgQEAgdm9pZCBTdG9yYWdlQXJlYVByb3h5OjpkaXNwYXRjaFNlc3Npb25TdAogICAgICAg
ICByZXR1cm47CiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBp
ZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3Jp
Z2luKSAmJiAhaXNFdmVudFNvdXJjZShmcmFtZS0+ZG9tV2luZG93KCktPm9wdGlvbmFsU2Vzc2lv
blN0b3JhZ2UoKSwgc291cmNlQXJlYUluc3RhbmNlKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IG1heWJlIG9ubHkgcmFpc2UgaWYgdGhlIHdpbmRvdyBoYXMgYW4gb25zdG9yYWdlIGxpc3RlbmVy
IGF0dGFjaGVkIHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBTdG9yYWdlIGluc3RhbmNlLgotICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBTdG9yYWdlKiBzdG9yYWdl
ID0gZnJhbWUtPmRvbVdpbmRvdygpLT5zZXNzaW9uU3RvcmFnZShlYyk7Ci0gICAgICAgICAgICBp
ZiAoIWVjKQotICAgICAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93
RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2UpKTsKLSAgICAgICAgfQorICAg
ICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5vcHRpb25hbFNlc3Np
b25TdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlICYmIGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikgJiYgIWlzRXZlbnRTb3VyY2Uo
c3RvcmFnZSwgc291cmNlQXJlYUluc3RhbmNlKSkKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVu
dCgpLT5lbnF1ZXVlV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2Up
KTsKICAgICB9CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFQcm94eTo6aXNFdmVudFNvdXJjZShTdG9y
YWdlKiBzdG9yYWdlLCBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzb3VyY2VBcmVhSW5zdGFuY2Up
CiB7Ci0gICAgaWYgKCFzdG9yYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJU
KHN0b3JhZ2UpOwogICAgIFN0b3JhZ2VBcmVhUHJveHkqIGFyZWFQcm94eSA9IHN0YXRpY19jYXN0
PFN0b3JhZ2VBcmVhUHJveHkqPihzdG9yYWdlLT5hcmVhKCkpOwogICAgIHJldHVybiBhcmVhUHJv
eHktPm1fc3RvcmFnZUFyZWEgPT0gc291cmNlQXJlYUluc3RhbmNlOwogfQo=
</data>
<flag name="commit-queue"
          id="149553"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143076</attachid>
            <date>2012-05-21 12:33:44 -0700</date>
            <delta_ts>2012-05-21 15:55:07 -0700</delta_ts>
            <desc>lessChatty</desc>
            <filename>lessChatty.txt</filename>
            <type>text/plain</type>
            <size>6190</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA1LTIxICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gRG9t
U3RvcmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExDICgzKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcwMzEKKyAgICAgICAgaHR0cHM6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyODQ4MgorICAgICAgICBD
cmVhdGUgV2ViQ29yZTo6U3RvcmFnZSBpbnN0YW5jZXMgYXMgYSBzaWRlIGVmZmVjdCBvZiBhdHRh
Y2hpbmcgc3RvcmFnZSBldmVudCBoYW5kbGVycy4KKyAgICAgICAgVGhpcyBhbGxvd3Mgc3RvcmFn
ZSBldmVudHMgaW4gY2hyb21pdW0gdG8gYmUgcHJvcGFnYXRlZCB3aXRoIGxlc3MgSVBDIGNoYXR0
ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBFeGlzdGluZyB0ZXN0cyBjb3ZlciB0aGlzLgorCisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKwog
MjAxMi0wNS0yMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiByZWZhY3RvciByZXZpc2lvbiBoaXN0b3J5IHRvIG5vdCBpbmNs
dWRlIHJlc291cmNlIGl0c2VsZi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDExNzc5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU0NSw2ICsxNTQ1LDE5IEBAIHZvaWQgRE9NV2luZG93Ojp3ZWJraXRD
YW5jZWxBbmltYXRpb25GcmEKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBkaWRBZGRTdG9yYWdl
RXZlbnRMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyAgICAvLyBDcmVhdGUgV2ViQ29yZTo6U3RvcmFnZSBpbnN0YW5jZXMgYXMgYSBzaWRlIGVm
ZmVjdCBvZiBhdHRhY2hpbmcgc3RvcmFnZSBldmVudCBoYW5kbGVycy4KKyAgICAvLyBUaGlzIGFs
bG93cyBzdG9yYWdlIGV2ZW50cyBpbiBjaHJvbWl1bSB0byBiZSBwcm9wYWdhdGVkIHdpdGggbGVz
cyBJUEMgY2hhdHRlci4KKyAgICBFeGNlcHRpb25Db2RlIHVudXNlZDsKKyAgICB3aW5kb3ctPmxv
Y2FsU3RvcmFnZSh1bnVzZWQpOworICAgIHdpbmRvdy0+c2Vzc2lvblN0b3JhZ2UodW51c2VkKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdpbmRvdyk7CisjZW5kaWYKK30KKwogYm9vbCBET01X
aW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAg
ICBpZiAoIUV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIs
IHVzZUNhcHR1cmUpKQpAQCAtMTU1Niw2ICsxNTY5LDggQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2
ZW50TGlzdGVuZXIoY29uc3QgQQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZl
bnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRU
eXBlKGV2ZW50VHlwZSkpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zdG9y
YWdlRXZlbnQpCisgICAgICAgICAgICBkaWRBZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsK
ICAgICB9CiAKICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTc4MDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDEyLTA1LTIxICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgor
CisgICAgICAgIFtjaHJvbWl1bV0gRG9tU3RvcmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExD
ICgzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcw
MzEKKyAgICAgICAgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0
YWlsP2lkPTEyODQ4MgorICAgICAgICBPbmx5IHF1ZXVlIHN0b3JhZ2UgZXZlbnRzIGZvciBEb2N1
bWVudHMgd2hpY2ggaGF2ZSBzdG9yYWdlIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1N0b3JhZ2VB
cmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6ZGlzcGF0
Y2hMb2NhbFN0b3JhZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5
OjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZUFyZWFQcm94eTo6aXNFdmVudFNvdXJjZSk6CisKIDIwMTItMDUtMTggIE1pY2hhZWwgTm9yZG1h
biAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBEb21TdG9yYWdl
IGV2ZW50cyBoYW5kbGluZyBuZWVkcyBUTEMgKDIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcAkocmV2aXNpb24gMTE3ODAzKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSwxMyArMTI1LDkgQEAgdm9pZCBTdG9yYWdlQXJlYVByb3h5OjpkaXNwYXRj
aExvY2FsU3RvcgogICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2VHcm91cC0+
cGFnZXMoKTsKICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBh
Z2VzLmJlZ2luKCk7IGl0ICE9IHBhZ2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikgJiYgIWlzRXZlbnRTb3Vy
Y2UoZnJhbWUtPmRvbVdpbmRvdygpLT5vcHRpb25hbExvY2FsU3RvcmFnZSgpLCBzb3VyY2VBcmVh
SW5zdGFuY2UpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IG1heWJlIG9ubHkgcmFpc2Ug
aWYgdGhlIHdpbmRvdyBoYXMgYW4gb25zdG9yYWdlIGxpc3RlbmVyIGF0dGFjaGVkIHRvIGF2b2lk
IGNyZWF0aW5nIHRoZSBTdG9yYWdlIGluc3RhbmNlLgotICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBmcmFtZS0+
ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZShlYyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlYykK
LSAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVu
dChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSwgcGFnZVVSTCwgc3RvcmFnZSkpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgU3RvcmFnZSogc3RvcmFnZSA9IGZyYW1lLT5kb21XaW5kb3coKS0+b3B0aW9uYWxM
b2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlICYmIGZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikgJiYgIWlzRXZlbnRT
b3VyY2Uoc3RvcmFnZSwgc291cmNlQXJlYUluc3RhbmNlKSkKKyAgICAgICAgICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+ZW5xdWV1ZVdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBwYWdlVVJM
LCBzdG9yYWdlKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTcsMjAgKzE1MywxNSBAQCB2
b2lkIFN0b3JhZ2VBcmVhUHJveHk6OmRpc3BhdGNoU2Vzc2lvblN0CiAgICAgICAgIHJldHVybjsK
IAogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pICYmICFp
c0V2ZW50U291cmNlKGZyYW1lLT5kb21XaW5kb3coKS0+b3B0aW9uYWxTZXNzaW9uU3RvcmFnZSgp
LCBzb3VyY2VBcmVhSW5zdGFuY2UpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogbWF5YmUgb25s
eSByYWlzZSBpZiB0aGUgd2luZG93IGhhcyBhbiBvbnN0b3JhZ2UgbGlzdGVuZXIgYXR0YWNoZWQg
dG8gYXZvaWQgY3JlYXRpbmcgdGhlIFN0b3JhZ2UgaW5zdGFuY2UuCi0gICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBmcmFtZS0+
ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKGVjKTsKLSAgICAgICAgICAgIGlmICghZWMpCi0g
ICAgICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChTdG9y
YWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSwgcGFnZVVSTCwgc3RvcmFnZSkpOwotICAgICAgICB9CisgICAgICAgIFN0b3Jh
Z2UqIHN0b3JhZ2UgPSBmcmFtZS0+ZG9tV2luZG93KCktPm9wdGlvbmFsU2Vzc2lvblN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKHN0b3JhZ2UgJiYgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKSAmJiAhaXNFdmVudFNvdXJjZShzdG9yYWdlLCBz
b3VyY2VBcmVhSW5zdGFuY2UpKQorICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmVucXVl
dWVXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2
ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgcGFnZVVSTCwgc3RvcmFnZSkpOwogICAgIH0K
IH0KIAogYm9vbCBTdG9yYWdlQXJlYVByb3h5Ojppc0V2ZW50U291cmNlKFN0b3JhZ2UqIHN0b3Jh
Z2UsIFdlYktpdDo6V2ViU3RvcmFnZUFyZWEqIHNvdXJjZUFyZWFJbnN0YW5jZSkKIHsKLSAgICBp
ZiAoIXN0b3JhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoc3RvcmFnZSk7
CiAgICAgU3RvcmFnZUFyZWFQcm94eSogYXJlYVByb3h5ID0gc3RhdGljX2Nhc3Q8U3RvcmFnZUFy
ZWFQcm94eSo+KHN0b3JhZ2UtPmFyZWEoKSk7CiAgICAgcmV0dXJuIGFyZWFQcm94eS0+bV9zdG9y
YWdlQXJlYSA9PSBzb3VyY2VBcmVhSW5zdGFuY2U7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143122</attachid>
            <date>2012-05-21 15:55:07 -0700</date>
            <delta_ts>2012-05-23 13:57:21 -0700</delta_ts>
            <desc>lessChatty</desc>
            <filename>lessChatty2.txt</filename>
            <type>text/plain</type>
            <size>6308</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA1LTIxICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gRG9t
U3RvcmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExDICgzKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcwMzEKKyAgICAgICAgaHR0cHM6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyODQ4MgorICAgICAgICBD
cmVhdGUgV2ViQ29yZTo6U3RvcmFnZSBpbnN0YW5jZXMgYXMgYSBzaWRlIGVmZmVjdCBvZiBhdHRh
Y2hpbmcgc3RvcmFnZSBldmVudCBoYW5kbGVycy4KKyAgICAgICAgVGhpcyBhbGxvd3Mgc3RvcmFn
ZSBldmVudHMgaW4gY2hyb21pdW0gdG8gYmUgcHJvcGFnYXRlZCB3aXRoIGxlc3MgSVBDIGNoYXR0
ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBFeGlzdGluZyB0ZXN0cyBjb3ZlciB0aGlzLgorCisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKwog
MjAxMi0wNS0yMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiByZWZhY3RvciByZXZpc2lvbiBoaXN0b3J5IHRvIG5vdCBpbmNs
dWRlIHJlc291cmNlIGl0c2VsZi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDExNzc5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU0NSw2ICsxNTQ1LDE5IEBAIHZvaWQgRE9NV2luZG93Ojp3ZWJraXRD
YW5jZWxBbmltYXRpb25GcmEKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBkaWRBZGRTdG9yYWdl
RXZlbnRMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyAgICAvLyBDcmVhdGUgV2ViQ29yZTo6U3RvcmFnZSBpbnN0YW5jZXMgYXMgYSBzaWRlIGVm
ZmVjdCBvZiBhdHRhY2hpbmcgc3RvcmFnZSBldmVudCBoYW5kbGVycy4KKyAgICAvLyBUaGlzIGFs
bG93cyBzdG9yYWdlIGV2ZW50cyBpbiBjaHJvbWl1bSB0byBiZSBwcm9wYWdhdGVkIHdpdGggbGVz
cyBJUEMgY2hhdHRlci4KKyAgICBFeGNlcHRpb25Db2RlIHVudXNlZDsKKyAgICB3aW5kb3ctPmxv
Y2FsU3RvcmFnZSh1bnVzZWQpOworICAgIHdpbmRvdy0+c2Vzc2lvblN0b3JhZ2UodW51c2VkKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdpbmRvdyk7CisjZW5kaWYKK30KKwogYm9vbCBET01X
aW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAg
ICBpZiAoIUV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIs
IHVzZUNhcHR1cmUpKQpAQCAtMTU1Niw2ICsxNTY5LDggQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2
ZW50TGlzdGVuZXIoY29uc3QgQQogICAgICAgICAgICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZl
bnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRU
eXBlKGV2ZW50VHlwZSkpCiAgICAgICAgICAgICBkb2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zdG9y
YWdlRXZlbnQpCisgICAgICAgICAgICBkaWRBZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsK
ICAgICB9CiAKICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTc4MDIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDEyLTA1LTIxICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgor
CisgICAgICAgIFtjaHJvbWl1bV0gRG9tU3RvcmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExD
ICgzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcw
MzEKKyAgICAgICAgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0
YWlsP2lkPTEyODQ4MgorICAgICAgICBPbmx5IHF1ZXVlIHN0b3JhZ2UgZXZlbnRzIGZvciBEb2N1
bWVudHMgd2hpY2ggaGF2ZSBhbGxvY2F0ZWQKKyAgICAgICAgYSBXZWJDb3JlOjpTdG9yYWdlIGlu
c3RhbmNlIHNpbmNlIHBhZ2VzIHRoYXQgaGF2ZSBhdHRhY2hlZCBvbnN0b3JhZ2UKKyAgICAgICAg
ZXZlbnQgaGFuZGxlcnMgbXVzdCBoYXZlIGEgbm9uLW51bGwgU3RvcmFnZSBpbnN0YW5jZS4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9TdG9y
YWdlQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OmRp
c3BhdGNoTG9jYWxTdG9yYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQ
cm94eTo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhUHJveHk6OmlzRXZlbnRTb3VyY2UpOgorCiAyMDEyLTA1LTE4ICBNaWNoYWVsIE5v
cmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRG9tU3Rv
cmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExDICgyKQpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAJKHJldmlzaW9uIDExNzgwMykK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsMTMgKzEyNSw5IEBAIHZvaWQgU3RvcmFnZUFyZWFQcm94eTo6ZGlz
cGF0Y2hMb2NhbFN0b3IKICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlR3Jv
dXAtPnBhZ2VzKCk7CiAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBwYWdlcy5iZWdpbigpOyBpdCAhPSBwYWdlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pICYmICFpc0V2ZW50
U291cmNlKGZyYW1lLT5kb21XaW5kb3coKS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSwgc291cmNl
QXJlYUluc3RhbmNlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYXliZSBvbmx5IHJh
aXNlIGlmIHRoZSB3aW5kb3cgaGFzIGFuIG9uc3RvcmFnZSBsaXN0ZW5lciBhdHRhY2hlZCB0byBh
dm9pZCBjcmVhdGluZyB0aGUgU3RvcmFnZSBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZnJh
bWUtPmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoZWMpOwotICAgICAgICAgICAgICAgIGlmICgh
ZWMpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93
RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2UpKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBmcmFtZS0+ZG9tV2luZG93KCktPm9wdGlv
bmFsTG9jYWxTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSAmJiBmcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pICYmICFpc0V2
ZW50U291cmNlKHN0b3JhZ2UsIHNvdXJjZUFyZWFJbnN0YW5jZSkpCisgICAgICAgICAgICAgICAg
ZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgcGFn
ZVVSTCwgc3RvcmFnZSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTU3LDIwICsxNTMsMTUg
QEAgdm9pZCBTdG9yYWdlQXJlYVByb3h5OjpkaXNwYXRjaFNlc3Npb25TdAogICAgICAgICByZXR1
cm47CiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKSAm
JiAhaXNFdmVudFNvdXJjZShmcmFtZS0+ZG9tV2luZG93KCktPm9wdGlvbmFsU2Vzc2lvblN0b3Jh
Z2UoKSwgc291cmNlQXJlYUluc3RhbmNlKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IG1heWJl
IG9ubHkgcmFpc2UgaWYgdGhlIHdpbmRvdyBoYXMgYW4gb25zdG9yYWdlIGxpc3RlbmVyIGF0dGFj
aGVkIHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBTdG9yYWdlIGluc3RhbmNlLgotICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZnJh
bWUtPmRvbVdpbmRvdygpLT5zZXNzaW9uU3RvcmFnZShlYyk7Ci0gICAgICAgICAgICBpZiAoIWVj
KQotICAgICAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93RXZlbnQo
U3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRW
YWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2UpKTsKLSAgICAgICAgfQorICAgICAgICBT
dG9yYWdlKiBzdG9yYWdlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5vcHRpb25hbFNlc3Npb25TdG9y
YWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlICYmIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikgJiYgIWlzRXZlbnRTb3VyY2Uoc3RvcmFn
ZSwgc291cmNlQXJlYUluc3RhbmNlKSkKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5l
bnF1ZXVlV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3Jh
Z2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2UpKTsKICAg
ICB9CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFQcm94eTo6aXNFdmVudFNvdXJjZShTdG9yYWdlKiBz
dG9yYWdlLCBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzb3VyY2VBcmVhSW5zdGFuY2UpCiB7Ci0g
ICAgaWYgKCFzdG9yYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHN0b3Jh
Z2UpOwogICAgIFN0b3JhZ2VBcmVhUHJveHkqIGFyZWFQcm94eSA9IHN0YXRpY19jYXN0PFN0b3Jh
Z2VBcmVhUHJveHkqPihzdG9yYWdlLT5hcmVhKCkpOwogICAgIHJldHVybiBhcmVhUHJveHktPm1f
c3RvcmFnZUFyZWEgPT0gc291cmNlQXJlYUluc3RhbmNlOwogfQo=
</data>
<flag name="review"
          id="149613"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143644</attachid>
            <date>2012-05-23 13:57:21 -0700</date>
            <delta_ts>2012-05-23 15:04:06 -0700</delta_ts>
            <desc>lessChatty</desc>
            <filename>lessChatty3.txt</filename>
            <type>text/plain</type>
            <size>6659</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODIyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA1LTIxICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gRG9t
U3RvcmFnZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExDICgzKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcwMzEKKyAgICAgICAgaHR0cHM6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyODQ4MgorICAgICAgICBD
cmVhdGUgV2ViQ29yZTo6U3RvcmFnZSBpbnN0YW5jZXMgYXMgYSBzaWRlIGVmZmVjdCBvZiBhdHRh
Y2hpbmcgc3RvcmFnZSBldmVudCBoYW5kbGVycy4KKyAgICAgICAgVGhpcyBhbGxvd3Mgc3RvcmFn
ZSBldmVudHMgaW4gY2hyb21pdW0gdG8gYmUgcHJvcGFnYXRlZCB3aXRoIGxlc3MgSVBDIGNoYXR0
ZXIuCisKKyAgICAgICAgV29ydGggbm90aW5nIHRoYXQgaW4gbm9uLWNocm9taXVtIHBvcnRzLCBj
cmVhdGlvbiBvZiB0aGUgbG9jYWxTdG9yYWdlIGluc3RhbmNlIGNhbiBoYXZlCisgICAgICAgIGFu
IGFkZGl0aW9uYWwgc2lkZSBlZmZlY3Qgb2Ygc2NoZWR1bGluZyBhIGJhY2tncm91bmQgdGFzayB0
byByZWFkIHRoZSBhcmVhJ3MgdmFsdWVzCisgICAgICAgIGZyb20gZGlzaywgd2hpY2ggZ2l2ZW4g
dGhlIGludGVyZXN0IGluIGV2ZW50cyBpcyBwcm9iYWJseSBhIGJlbmVmaWNpYWwgc2lkZSBlZmZl
Y3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBFeGlzdGluZyB0ZXN0cyBjb3ZlciB0aGlzLgorCisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKwog
MjAxMi0wNS0yMyAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW1wbGVtZW50IERPTTQgRE9NRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAJKHJldmlzaW9uIDExODIyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0Niw2ICsxNTQ2LDE3IEBAIHZvaWQgRE9NV2luZG93Ojp3
ZWJraXRDYW5jZWxBbmltYXRpb25GcmEKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBkaWRBZGRT
dG9yYWdlRXZlbnRMaXN0ZW5lcihET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICAvLyBDcmVhdGlu
ZyB0aGVzZSBXZWJDb3JlOjpTdG9yYWdlIG9iamVjdHMgaW5mb3JtcyB0aGUgc3lzdGVtIHRoYXQg
d2UnZCBsaWtlIHRvIHJlY2VpdmUKKyAgICAvLyBub3RpZmljYXRpb25zIGFib3V0IHN0b3JhZ2Ug
ZXZlbnRzIHRoYXQgbWlnaHQgYmUgdHJpZ2dlcmVkIGluIG90aGVyIHByb2Nlc3Nlcy4gUmF0aGVy
CisgICAgLy8gdGhhbiBzdWJzY3JpYmUgdG8gdGhlc2Ugbm90aWZpY2F0aW9ucyBleHBsaWNpdGx5
LCB3ZSBzdWJzY3JpYmUgdG8gdGhlbSBpbXBsaWNpdGx5IHRvCisgICAgLy8gc2ltcGxpZnkgdGhl
IHdvcmsgZG9uZSBieSB0aGUgc3lzdGVtLiAKKyAgICBFeGNlcHRpb25Db2RlIHVudXNlZDsKKyAg
ICB3aW5kb3ctPmxvY2FsU3RvcmFnZSh1bnVzZWQpOworICAgIHdpbmRvdy0+c2Vzc2lvblN0b3Jh
Z2UodW51c2VkKTsKK30KKwogYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBpZiAoIUV2ZW50VGFyZ2V0OjphZGRFdmVudExp
c3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQpAQCAtMTU1Nyw2ICsxNTY4
LDggQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQQogICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIGVsc2UgaWYg
KGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpCiAgICAgICAgICAgICBk
b2N1bWVudC0+ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQpCisgICAgICAgICAgICBkaWRBZGRT
dG9yYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgICB9CiAKICAgICBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMTgyMjkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA1LTIxICBNaWNoYWVsIE5vcmRt
YW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gRG9tU3RvcmFn
ZSBldmVudHMgaGFuZGxpbmcgbmVlZHMgVExDICgzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcwMzEKKyAgICAgICAgaHR0cHM6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEyODQ4MgorICAgICAgICBPbmx5IHF1
ZXVlIHN0b3JhZ2UgZXZlbnRzIGZvciBEb2N1bWVudHMgd2hpY2ggaGF2ZSBhbGxvY2F0ZWQKKyAg
ICAgICAgYSBXZWJDb3JlOjpTdG9yYWdlIGluc3RhbmNlIHNpbmNlIHBhZ2VzIHRoYXQgaGF2ZSBh
dHRhY2hlZCBvbnN0b3JhZ2UKKyAgICAgICAgZXZlbnQgaGFuZGxlcnMgbXVzdCBoYXZlIGEgbm9u
LW51bGwgU3RvcmFnZSBpbnN0YW5jZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHNyYy9TdG9yYWdlQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OmlzRXZlbnRTb3VyY2Up
OgorCiAyMDEyLTA1LTIzICBSYXltZXMgS2hvdXJ5ICA8cmF5bWVzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBDaGFuZ2UgYWNjZXB0TUlNRVR5cGVzIG1lbWJlciB0byBhY2NlcHRUeXBlcyBub3cg
dGhhdCBmaWxlIGV4dGVuc2lvbnMgYXJlIGxlZ2FsIGFjY2VwdCB0eXBlcwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAJKHJldmlzaW9u
IDExODIyOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTMgKzEyNSw5IEBAIHZvaWQgU3RvcmFnZUFyZWFQ
cm94eTo6ZGlzcGF0Y2hMb2NhbFN0b3IKICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMg
PSBwYWdlR3JvdXAtPnBhZ2VzKCk7CiAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBwYWdlcy5lbmQoKTsgKytpdCkgewogICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pICYm
ICFpc0V2ZW50U291cmNlKGZyYW1lLT5kb21XaW5kb3coKS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2Uo
KSwgc291cmNlQXJlYUluc3RhbmNlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYXli
ZSBvbmx5IHJhaXNlIGlmIHRoZSB3aW5kb3cgaGFzIGFuIG9uc3RvcmFnZSBsaXN0ZW5lciBhdHRh
Y2hlZCB0byBhdm9pZCBjcmVhdGluZyB0aGUgU3RvcmFnZSBpbnN0YW5jZS4KLSAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBTdG9yYWdlKiBzdG9y
YWdlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5sb2NhbFN0b3JhZ2UoZWMpOwotICAgICAgICAgICAg
ICAgIGlmICghZWMpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5lbnF1
ZXVlV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VF
dmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2UpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBmcmFtZS0+ZG9tV2luZG93
KCktPm9wdGlvbmFsTG9jYWxTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSAmJiBm
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4p
ICYmICFpc0V2ZW50U291cmNlKHN0b3JhZ2UsIHNvdXJjZUFyZWFJbnN0YW5jZSkpCisgICAgICAg
ICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChTdG9yYWdlRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSwgcGFnZVVSTCwgc3RvcmFnZSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTU3LDIw
ICsxNTMsMTUgQEAgdm9pZCBTdG9yYWdlQXJlYVByb3h5OjpkaXNwYXRjaFNlc3Npb25TdAogICAg
ICAgICByZXR1cm47CiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5
T3JpZ2luKSAmJiAhaXNFdmVudFNvdXJjZShmcmFtZS0+ZG9tV2luZG93KCktPm9wdGlvbmFsU2Vz
c2lvblN0b3JhZ2UoKSwgc291cmNlQXJlYUluc3RhbmNlKSkgewotICAgICAgICAgICAgLy8gRklY
TUU6IG1heWJlIG9ubHkgcmFpc2UgaWYgdGhlIHdpbmRvdyBoYXMgYW4gb25zdG9yYWdlIGxpc3Rl
bmVyIGF0dGFjaGVkIHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBTdG9yYWdlIGluc3RhbmNlLgotICAg
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBTdG9yYWdlKiBzdG9y
YWdlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5zZXNzaW9uU3RvcmFnZShlYyk7Ci0gICAgICAgICAg
ICBpZiAoIWVjKQotICAgICAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5lbnF1ZXVlV2lu
ZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3JhZ2UpKTsKLSAgICAgICAgfQor
ICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5vcHRpb25hbFNl
c3Npb25TdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlICYmIGZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikgJiYgIWlzRXZlbnRTb3Vy
Y2Uoc3RvcmFnZSwgc291cmNlQXJlYUluc3RhbmNlKSkKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1
bWVudCgpLT5lbnF1ZXVlV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2VVUkwsIHN0b3Jh
Z2UpKTsKICAgICB9CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFQcm94eTo6aXNFdmVudFNvdXJjZShT
dG9yYWdlKiBzdG9yYWdlLCBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzb3VyY2VBcmVhSW5zdGFu
Y2UpCiB7Ci0gICAgaWYgKCFzdG9yYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNT
RVJUKHN0b3JhZ2UpOwogICAgIFN0b3JhZ2VBcmVhUHJveHkqIGFyZWFQcm94eSA9IHN0YXRpY19j
YXN0PFN0b3JhZ2VBcmVhUHJveHkqPihzdG9yYWdlLT5hcmVhKCkpOwogICAgIHJldHVybiBhcmVh
UHJveHktPm1fc3RvcmFnZUFyZWEgPT0gc291cmNlQXJlYUluc3RhbmNlOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>