<?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>104202</bug_id>
          
          <creation_ts>2012-12-05 18:15:26 -0800</creation_ts>
          <short_desc>Create only NodeRareDataBase when setting TreeScope</short_desc>
          <delta_ts>2012-12-17 13:02:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
          <dependson>104293</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Elliott Sprehn">esprehn</reporter>
          <assigned_to name="Elliott Sprehn">esprehn</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>784420</commentid>
    <comment_count>0</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-05 18:15:26 -0800</bug_when>
    <thetext>Share ElementRareData instances in shadows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784427</commentid>
    <comment_count>1</comment_count>
      <attachid>177900</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-05 18:20:48 -0800</bug_when>
    <thetext>Created attachment 177900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784432</commentid>
    <comment_count>2</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-05 18:24:31 -0800</bug_when>
    <thetext>Unfortunately this patch isn&apos;t really much of a win unless we expect lots of things inside a ShadowRoot to be display: none because as soon as you set a renderer we need to create a unique rare data instance since that&apos;s where I put the renderer when I got rid of the rare data map in r133372.. doh!

I posted the patch just for reference of how this might work, or in case someone has a great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784437</commentid>
    <comment_count>3</comment_count>
      <attachid>177900</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-05 18:28:28 -0800</bug_when>
    <thetext>Comment on attachment 177900
Patch

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

&gt; Source/WebCore/dom/Node.cpp:489
&gt; +    m_data.m_rareData = const_cast&lt;NodeRareData*&gt;(data);

There should be a m_data.m_rareData-&gt;ref() here.

&gt; Source/WebCore/dom/Node.cpp:508
&gt; +        newRareData-&gt;setTreeScope(rareData()-&gt;treeScope());

There should be a rareData()-&gt;deref() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784998</commentid>
    <comment_count>4</comment_count>
      <attachid>178022</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 10:01:14 -0800</bug_when>
    <thetext>Created attachment 178022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784999</commentid>
    <comment_count>5</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 10:03:08 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=178022) [details]
&gt; Patch

This approach seems much more promising. By only allocating NodeRareDataBase I&apos;ve reduced the overhead per element from 136 bytes to 32 bytes for a 76% savings, and on other nodes from 64 bytes to 32 bytes for a 50% savings!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785021</commentid>
    <comment_count>6</comment_count>
      <attachid>178022</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-06 10:33:42 -0800</bug_when>
    <thetext>Comment on attachment 178022
Patch

This is good, though it seems the naming could be tuned: &quot;Base&quot; vs. &quot;Basic&quot;, and communicating the notion that the NodeRareDataBase is now actually a self-sufficient less rare flavor of NodeRareData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785029</commentid>
    <comment_count>7</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 10:39:59 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 178022 [details])
&gt; This is good, though it seems the naming could be tuned: &quot;Base&quot; vs. &quot;Basic&quot;, and communicating the notion that the NodeRareDataBase is now actually a self-sufficient less rare flavor of NodeRareData.

Sure, Have a recommendation for a better name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785059</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-06 11:05:09 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 178022 [details] [details])
&gt; &gt; This is good, though it seems the naming could be tuned: &quot;Base&quot; vs. &quot;Basic&quot;, and communicating the notion that the NodeRareDataBase is now actually a self-sufficient less rare flavor of NodeRareData.
&gt; 
&gt; Sure, Have a recommendation for a better name?

NotSoRareNodeData? MediumWellNodeData? I dunno. Eric is good at this stuff, and so&apos;s Sam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785065</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-06 11:09:35 -0800</bug_when>
    <thetext>UncommonNodeData?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785075</commentid>
    <comment_count>10</comment_count>
      <attachid>178022</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-06 11:25:31 -0800</bug_when>
    <thetext>Comment on attachment 178022
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        When putting nodes into ShadowRoot or any descdendant we must associate

typo: descdendant</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785085</commentid>
    <comment_count>11</comment_count>
      <attachid>178044</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 11:31:36 -0800</bug_when>
    <thetext>Created attachment 178044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785124</commentid>
    <comment_count>12</comment_count>
      <attachid>178044</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-06 12:04:02 -0800</bug_when>
    <thetext>Comment on attachment 178044
Patch

I&apos;m confused how this works. How do you graduate from uncommon to rare data? Do we thrash when setting certain properties? I assume its now two mallocs to end up with rare data in some cases?  The rare data replaces the uncommon data when needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785140</commentid>
    <comment_count>13</comment_count>
      <attachid>178044</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-06 12:17:17 -0800</bug_when>
    <thetext>Comment on attachment 178044
Patch

Clearing flags on attachment: 178044

Committed r136871: &lt;http://trac.webkit.org/changeset/136871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785141</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-06 12:17:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785157</commentid>
    <comment_count>15</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 12:42:29 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 178044 [details])
&gt; I&apos;m confused how this works. How do you graduate from uncommon to rare data? Do we thrash when setting certain properties? I assume its now two mallocs to end up with rare data in some cases?  The rare data replaces the uncommon data when needed?

We graduate it whenever you would have asked for a real rare data previously, so calling ensureElementRareData() or ensureRareData() will force an allocation and a free of the UncommonNodeData if it&apos;s present. This is because hasRareData() will return false if you only have an UncommonRareData.

It would thrash if you did setTreeScope() and then called ensureRareData() right after it.

An example of causing this thrashing:

div = shadowRoot.appendChild(document.createElement(&apos;div&apos;));
div.childNodes // causes promotion to ElementRareData from UncommonNodeData.

It would also seem that anything that sets the style bits could cause this kind of thrashing (ex. m_childrenAffectedByFirstChildRules so if there&apos;s div:first-child then we&apos;d also thrash here).

We can move the style bit methods to UncommonNodeData and make the promotion process copy them to the NodeRareData instance when it&apos;s created which solves this... if you think it&apos;s necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785197</commentid>
    <comment_count>16</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-12-06 13:34:29 -0800</bug_when>
    <thetext>This change caused quite a few tests to trigger an assertion, 

STDERR: ASSERTION FAILED: hasRareData()
STDERR: third_party/WebKit/Source/WebCore/dom/Node.cpp(484) : WebCore::NodeRareData* WebCore::Node::rareData() const

accessibility/aria-checkbox-checked.html
accessibility/aria-labelledby-on-input.html
accessibility/aria-roles.html
accessibility/canvas-accessibilitynodeobject.html
accessibility/canvas-fallback-content-2.html
accessibility/canvas-fallback-content.html
accessibility/container-node-delete-causes-crash.html
accessibility/disabled-controls-not-focusable.html
accessibility/file-upload-button-with-axpress.html
accessibility/input-file-causes-crash.html
accessibility/input-image-alt.html
accessibility/media-controls.html
accessibility/nochildren-elements.html
accessibility/radio-button-title-label.html
accessibility/secure-textfield-title-ui.html
accessibility/textbox-role-on-contenteditable-crash.html
accessibility/th-as-title-ui.html
compositing/geometry/clipped-video-controller.html
compositing/overflow/theme-affects-visual-overflow.html
compositing/video/video-controls-layer-creation.html
css1/box_properties/acid_test.html
css2.1/t09-c5526c-display-00-e.html
css3/flexbox/flexitem-stretch-range.html
css3/flexbox/flexitem.html
css3/selectors3/html/css3-modsel-25.html
css3/selectors3/html/css3-modsel-70.html
css3/selectors3/xhtml/css3-modsel-25.xml
css3/selectors3/xhtml/css3-modsel-70.xml
css3/selectors3/xml/css3-modsel-25.xml
css3/selectors3/xml/css3-modsel-70.xml
dom/html/level2/html/HTMLBodyElement07.html
dom/html/level2/html/HTMLBodyElement08.html
dom/html/level2/html/HTMLBodyElement09.html
dom/html/level2/html/HTMLBodyElement10.html
dom/html/level2/html/HTMLBodyElement11.html
dom/html/level2/html/HTMLBodyElement12.html
dom/html/level2/html/HTMLDocument01.html
dom/html/level2/html/HTMLDocument02.html
dom/html/level2/html/HTMLDocument03.html
dom/html/level2/html/HTMLDocument04.html
dom/html/level2/html/HTMLDocument05.html
dom/html/level2/html/HTMLDocument07.html
dom/html/level2/html/HTMLDocument08.html
dom/html/level2/html/HTMLDocument09.html
dom/xhtml/level2/html/HTMLBodyElement07.xhtml
dom/xhtml/level2/html/HTMLBodyElement08.xhtml
dom/xhtml/level2/html/HTMLBodyElement09.xhtml
dom/xhtml/level2/html/HTMLBodyElement10.xhtml
dom/xhtml/level2/html/HTMLBodyElement11.xhtml
dom/xhtml/level2/html/HTMLBodyElement12.xhtml
editing/deleting/5290534.html
editing/input/div-first-child-rule-input.html
editing/input/div-first-child-rule-textarea.html
editing/input/ime-composition-clearpreedit.html
editing/input/password-echo-passnode.html
editing/input/password-echo-passnode2.html
editing/input/password-echo-passnode3.html
editing/input/paste-linebreak-into-initially-hidden-textarea.html
editing/input/paste-text-ending-with-interchange-newline.html
http/tests/appcache/destroyed-frame.html
http/tests/appcache/video.html
http/tests/cache/post-redirect-get.php
http/tests/cache/post-with-cached-subresources.php
http/tests/cache/subresource-failover-to-network.html
http/tests/history/back-to-post.php
http/tests/loading/307-after-303-after-post.html
http/tests/loading/redirect-methods.html
http/tests/local/blob/send-hybrid-blob.html
http/tests/local/fileapi/file-last-modified-after-delete.html
http/tests/local/fileapi/file-last-modified.html
http/tests/local/fileapi/send-dragged-file.html
http/tests/local/fileapi/send-sliced-dragged-file.html
http/tests/local/formdata/form-data-with-unknown-file-extension.html
http/tests/local/formdata/send-form-data-constructed-from-form.html
http/tests/local/formdata/send-form-data-with-sliced-file.html
http/tests/local/formdata/send-form-data.html
http/tests/local/formdata/upload-events.html
http/tests/media/media-document.html
http/tests/media/reload-after-dialog.html
http/tests/navigation/anchor-basic.html
http/tests/navigation/anchor-goback.html
http/tests/navigation/anchor-subframeload.html
http/tests/navigation/dynamic-iframe-dynamic-form-back-entry.html
http/tests/navigation/history-back-across-form-submission-to-fragment.html
http/tests/navigation/javascriptlink-basic.html
http/tests/navigation/javascriptlink-frames.html
http/tests/navigation/javascriptlink-goback.html
http/tests/navigation/javascriptlink-subframeload.html
http/tests/navigation/metaredirect-basic.html
http/tests/navigation/metaredirect-frames.html
http/tests/navigation/metaredirect-goback.html
http/tests/navigation/metaredirect-subframeload.html
http/tests/navigation/new-window-redirect-history.html
http/tests/navigation/parsed-iframe-dynamic-form-back-entry.html
http/tests/navigation/post-302-response.html
http/tests/navigation/post-basic.html
http/tests/navigation/post-frames.html
http/tests/navigation/post-goback-same-url.html
http/tests/navigation/post-goback1.html
http/tests/navigation/post-goback2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785205</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-06 13:38:41 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 104293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785215</commentid>
    <comment_count>18</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 13:45:21 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Re-opened since this is blocked by bug 104293

(In reply to comment #17)
&gt; Re-opened since this is blocked by bug 104293

Woops, code worked fine because if hasUncommonNodeData() is true then rareData()-&gt;setTreeScope will work since UncommonNodeData is a superclass of NodeRareData, but triggers the assert since we don&apos;t really have rare data.

Fix is just to call m_data.m_rareData-&gt;setTreeScope instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785218</commentid>
    <comment_count>19</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-12-06 13:50:39 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Woops, code worked fine because if hasUncommonNodeData() is true then rareData()-&gt;setTreeScope will work since UncommonNodeData is a superclass of NodeRareData, but triggers the assert since we don&apos;t really have rare data.
&gt; 
&gt; Fix is just to call m_data.m_rareData-&gt;setTreeScope instead.

Seems like it should do the trick but you should have the original reviewer take another look once you&apos;ve uploaded a new patch. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785219</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 13:51:51 -0800</bug_when>
    <thetext>I don’t think this whole business about introducing yet another object is a good idea. If NodeRareData is not rare, then we need to fix that.

The whole tree-scope-being-too-common thing seems dubious to me. If we made a bad design decision in the past, then we need to revise that design decision instead of working around it by introducing more crafts.

The fact that UncommonNodeData is created for every element in the shadow tree (due to it having a tree scope) means that it’s not uncommon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785249</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 14:09:39 -0800</bug_when>
    <thetext>To clarify, I object to this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785265</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 14:19:06 -0800</bug_when>
    <thetext>Here&apos;s an alternative suggestion I have:
1. Move ChildNodeList back into NodeListsNodeData
2. Move m_mutationObserverRegistry &amp; m_transientMutationObserverRegistry into a separate object owned by NodeRareData
3. Move m_itemProp, m_itemRef, m_itemType &amp; into a separate object owned by NodeRareData

That&apos;ll make NodeRareData substantially smaller. In fact, sizeof(NodeRareData) will be sizeof(UncommonNodeData) + sizeof(void*) once this is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785276</commentid>
    <comment_count>23</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 14:30:19 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Here&apos;s an alternative suggestion I have:
&gt; 1. Move ChildNodeList back into NodeListsNodeData
&gt; 2. Move m_mutationObserverRegistry &amp; m_transientMutationObserverRegistry into a separate object owned by NodeRareData
&gt; 3. Move m_itemProp, m_itemRef, m_itemType &amp; into a separate object owned by NodeRareData
&gt; 
&gt; That&apos;ll make NodeRareData substantially smaller. In fact, sizeof(NodeRareData) will be sizeof(UncommonNodeData) + sizeof(void*) once this is done.

This is the wrong comparison because ElementRareData is massive. It doesn&apos;t matter that NodeRareData is small, we still get an ElementRareData when setting the tree scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785281</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 14:31:58 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Here&apos;s an alternative suggestion I have:
&gt; &gt; 1. Move ChildNodeList back into NodeListsNodeData
&gt; &gt; 2. Move m_mutationObserverRegistry &amp; m_transientMutationObserverRegistry into a separate object owned by NodeRareData
&gt; &gt; 3. Move m_itemProp, m_itemRef, m_itemType &amp; into a separate object owned by NodeRareData
&gt; &gt; 
&gt; &gt; That&apos;ll make NodeRareData substantially smaller. In fact, sizeof(NodeRareData) will be sizeof(UncommonNodeData) + sizeof(void*) once this is done.
&gt; 
&gt; This is the wrong comparison because ElementRareData is massive. It doesn&apos;t matter that NodeRareData is small, we still get an ElementRareData when setting the tree scope.

Then keep NodeRareData &amp; ElementRareData dynamically swappable. That&apos;s still significantly better design than introducing yet another base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785300</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 14:48:05 -0800</bug_when>
    <thetext>The approach taken in https://bugs.webkit.org/show_bug.cgi?id=59816 is much saner.

Also see https://bugs.webkit.org/show_bug.cgi?id=87034 and https://bugs.webkit.org/show_bug.cgi?id=89635.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785302</commentid>
    <comment_count>26</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 14:48:30 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; Here&apos;s an alternative suggestion I have:
&gt; &gt; &gt; 1. Move ChildNodeList back into NodeListsNodeData
&gt; &gt; &gt; 2. Move m_mutationObserverRegistry &amp; m_transientMutationObserverRegistry into a separate object owned by NodeRareData
&gt; &gt; &gt; 3. Move m_itemProp, m_itemRef, m_itemType &amp; into a separate object owned by NodeRareData
&gt; &gt; &gt; 
&gt; &gt; &gt; That&apos;ll make NodeRareData substantially smaller. In fact, sizeof(NodeRareData) will be sizeof(UncommonNodeData) + sizeof(void*) once this is done.
&gt; &gt; 
&gt; &gt; This is the wrong comparison because ElementRareData is massive. It doesn&apos;t matter that NodeRareData is small, we still get an ElementRareData when setting the tree scope.
&gt; 
&gt; Then keep NodeRareData &amp; ElementRareData dynamically swappable. That&apos;s still significantly better design than introducing yet another base class.

I don&apos;t understand how that&apos;s better, it still requires swapping logic except it&apos;s much more complex since we need to copy all the bits between the two things. It also means any patch that adds things to NodeRareData will be a memory regression on Shadow DOM using pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785320</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 15:00:09 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; I don&apos;t understand how that&apos;s better, it still requires swapping logic except it&apos;s much more complex since we need to copy all the bits between the two things. It also means any patch that adds things to NodeRareData will be a memory regression on Shadow DOM using pages.

Yet, shadow DOM is still rare on the Web today. I don&apos;t think we should be optimizing WebKit for content that doesn&apos;t exist yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785336</commentid>
    <comment_count>28</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-06 15:32:51 -0800</bug_when>
    <thetext>This is a fascinating discussion. It looks like Ryosuke provided some ideas, though none seem able to bear any fruit.

In the larger context, I am interested in your thoughts on a reasonable path to success. When we should start optimizing Shadow DOM performance/memory use? If we do it after it starts being used in the wild, we&apos;re too late. If we do it before then, it appears that we&apos;re too early.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785344</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 15:44:11 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; This is a fascinating discussion. It looks like Ryosuke provided some ideas, though none seem able to bear any fruit.
&gt; 
&gt; In the larger context, I am interested in your thoughts on a reasonable path to success. When we should start optimizing Shadow DOM performance/memory use? If we do it after it starts being used in the wild, we&apos;re too late.

Why is that too late? How do we figure out what kind of function calls &amp; objects are common if nobody had started using them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785609</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-12-06 21:24:54 -0800</bug_when>
    <thetext>So are we then going to have NodeRareDataBase2 next time? I am worried that this is not scalable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792944</commentid>
    <comment_count>31</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-17 13:02:28 -0800</bug_when>
    <thetext>Closing this since there doesn&apos;t seem to be support for this approach.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177900</attachid>
            <date>2012-12-05 18:20:48 -0800</date>
            <delta_ts>2012-12-06 10:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104202-20121205181812.patch</filename>
            <type>text/plain</type>
            <size>25041</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI1NDlkODMzYmZkOTRj
MTRjOGZhYjgzYzEwYTJkNWJkN2IyZGVhOS4uOWIyMTY4ODM2ZjM3MzQxYjVhMWE0ZjU4ZTFiYmI5
MDMzZWU0ODFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTEyLTA1ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFNoYXJlIEVsZW1lbnRS
YXJlRGF0YSBpbnN0YW5jZXMgaW4gc2hhZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBsZXRzIGFsbCBub2RlcyBpbiBhIFRyZWVTY29wZSBz
aGFyZSBhIHJhcmUgZGF0YSBpbnN0YW5jZSByZWR1Y2luZworICAgICAgICB0aGUgbnVtYmVyIG9m
IHJhcmUgZGF0YSBpbnN0YW5jZXMgd2hlbiBhcHBlbmRpbmcgbm9kZXMgdG8gYSBzaGFkb3cuCisK
KyAgICAgICAgTk9URTogVW5mb3J0dW5hdGVseSB0aGlzIHBhdGNoIGRvZXNuJ3QgcmVhbGx5IHdv
cmsgd2VsbCBiZWNhdXNlIHdlIGVuZAorICAgICAgICB1cCBjcmVhdGluZyB0aGUgcmFyZSBkYXRh
IGluc3RhbmNlcyBhcyBzb29uIGFzIHdlIGdldCBhIHJlbmRlcmVyIGJlY2F1c2UKKyAgICAgICAg
b2YgdGhlIERhdGFVbmlvbiBJIGludHJvZHVjZWQgaW4gcjEzMzM3Mi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6On5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmVsZW1lbnRSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVSYXJl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlY2Fs
Y1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjplbnN1cmVTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6bWluaW11bVNpemVGb3JSZXNpemluZyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpj
YW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
dXBkYXRlUHNldWRvRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAg
KEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEVsZW1lbnRSYXJlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OmNvbnRhaW5zRnVsbFNjcmVl
bkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFy
ZURhdGEpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnNldFJhcmVEYXRhUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpzZXRJbW11dGFibGVSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpyYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVSYXJlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpjcmVhdGVSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpjbGVhclJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRh
dGVOb2RlTGlzdENhY2hlc0luQW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om5v
ZGVMaXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW1vdmVDYWNoZWRDaGlsZE5vZGVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cnkpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRS
ZW5kZXJlcik6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6
CisgICAgICAgIChOb2RlUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRh
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjp+Tm9kZVJhcmVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aXRlbVByb3ApOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjppdGVtUmVmKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVS
YXJlRGF0YTo6aXRlbVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjppc011
dGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpoYXNNdXRhYmxlUmFy
ZURhdGEpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjpzaGFyZWRSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRyZWVTY29w
ZSk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKwogMjAxMi0xMi0wNSAg
SnVzdGluIE5vdm9zYWQgIDxqdW5vdkBnb29nbGUuY29tPgogCiAgICAgICAgIFtza2lhXSBJbXBy
b3ZlIHBlcmZvcm1hbmNlIG9mIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
ciBieSB1c2luZyBTa0RldmljZTpjcmVhdGVDb21wYXRpYmxlRGV2aWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKaW5kZXggMWY3NzUyM2YyODAwNzljN2NhN2U2YmJlOWEyYjZhY2JiYmY5YmEyYy4uMTJj
ZDQzY2E5NzIxODk3NDU4MjNmYzMyMWQ2YWQyNGM4Mjk1ZTBmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcApAQCAtMTg5LDI1ICsxODksMjUgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQogICAgIH0KICNl
bmRpZgogCi0gICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsKLSAgICAgICAgRWxlbWVudFJhcmVEYXRh
KiBkYXRhID0gZWxlbWVudFJhcmVEYXRhKCk7CisgICAgaWYgKGhhc011dGFibGVSYXJlRGF0YSgp
KSB7CisgICAgICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IGVuc3VyZUVsZW1lbnRSYXJlRGF0
YSgpOwogICAgICAgICBkYXRhLT5zZXRQc2V1ZG9FbGVtZW50KEJFRk9SRSwgMCk7CiAgICAgICAg
IGRhdGEtPnNldFBzZXVkb0VsZW1lbnQoQUZURVIsIDApOwogICAgIH0KIAogICAgIGlmIChFbGVt
ZW50U2hhZG93KiBlbGVtZW50U2hhZG93ID0gc2hhZG93KCkpIHsKICAgICAgICAgZWxlbWVudFNo
YWRvdy0+cmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKLSAgICAgICAgZWxlbWVudFJhcmVEYXRhKCkt
PnNldFNoYWRvdyhudWxscHRyKTsKKyAgICAgICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCktPnNl
dFNoYWRvdyhudWxscHRyKTsKICAgICB9CiAKICAgICBpZiAoaGFzU3ludGhldGljQXR0ckNoaWxk
Tm9kZXMoKSkKICAgICAgICAgZGV0YWNoQWxsQXR0ck5vZGVzRnJvbUVsZW1lbnQoKTsKIH0KIAot
aW5saW5lIEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6ZWxlbWVudFJhcmVEYXRhKCkgY29uc3QK
K2lubGluZSBjb25zdCBFbGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OmVsZW1lbnRSYXJlRGF0YSgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxFbGVtZW50UmFyZURhdGEqPihyYXJlRGF0YSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgRWxlbWVudFJhcmVEYXRhKj4ocmFyZURhdGEoKSk7CiB9CiAKIGlubGluZSBFbGVt
ZW50UmFyZURhdGEqIEVsZW1lbnQ6OmVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpCkBAIC0yMTUsOSAr
MjE1LDkgQEAgaW5saW5lIEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6ZW5zdXJlRWxlbWVudFJh
cmVEYXRhKCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudFJhcmVEYXRhKj4oZW5zdXJl
UmFyZURhdGEoKSk7CiB9CiAKLVBhc3NPd25QdHI8Tm9kZVJhcmVEYXRhPiBFbGVtZW50OjpjcmVh
dGVSYXJlRGF0YSgpCitQYXNzUmVmUHRyPE5vZGVSYXJlRGF0YT4gRWxlbWVudDo6Y3JlYXRlUmFy
ZURhdGEoKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRWxlbWVudFJhcmVEYXRhKGRvY3Vt
ZW50SW50ZXJuYWwoKSkpOworICAgIHJldHVybiBFbGVtZW50UmFyZURhdGE6OmNyZWF0ZShkb2N1
bWVudEludGVybmFsKCkpOwogfQogCiBERUZJTkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoRWxlbWVudCwgYmx1cik7CkBAIC0xMTY4LDggKzExNjgsOCBAQCB2b2lkIEVsZW1lbnQ6
OmF0dGFjaCgpCiAKICAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKIAotICAgIGlmIChoYXNS
YXJlRGF0YSgpKSB7ICAgCi0gICAgICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IGVsZW1lbnRS
YXJlRGF0YSgpOworICAgIGlmIChoYXNNdXRhYmxlUmFyZURhdGEoKSkgeyAgIAorICAgICAgICBF
bGVtZW50UmFyZURhdGEqIGRhdGEgPSBlbnN1cmVFbGVtZW50UmFyZURhdGEoKTsKICAgICAgICAg
aWYgKGRhdGEtPm5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKCkpIHsK
ICAgICAgICAgICAgIGlmIChpc0ZvY3VzYWJsZSgpICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCkgPT0gdGhpcykKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVGb2N1c0FwcGVh
cmFuY2VTb29uKGZhbHNlIC8qIGRvbid0IHJlc3RvcmUgc2VsZWN0aW9uICovKTsKQEAgLTExODks
OCArMTE4OSw4IEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoKCkKICAgICBXaWRnZXRIaWVyYXJjaHlV
cGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRhdGVzOwogICAg
IHVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZSgpOwogICAgIGNhbmNlbEZvY3VzQXBwZWFy
YW5jZVVwZGF0ZSgpOwotICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7Ci0gICAgICAgIEVsZW1lbnRS
YXJlRGF0YSogZGF0YSA9IGVsZW1lbnRSYXJlRGF0YSgpOworICAgIGlmIChoYXNNdXRhYmxlUmFy
ZURhdGEoKSkgeworICAgICAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBlbnN1cmVFbGVtZW50
UmFyZURhdGEoKTsKICAgICAgICAgZGF0YS0+c2V0UHNldWRvRWxlbWVudChCRUZPUkUsIDApOwog
ICAgICAgICBkYXRhLT5zZXRQc2V1ZG9FbGVtZW50KEFGVEVSLCAwKTsKICAgICAgICAgZGF0YS0+
c2V0SXNJbkNhbnZhc1N1YnRyZWUoZmFsc2UpOwpAQCAtMTI2Nyw4ICsxMjY3LDggQEAgdm9pZCBF
bGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgYm9vbCBoYXNJbmRp
cmVjdEFkamFjZW50UnVsZXMgPSBjaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7CiAKICAgICBpZiAoKGNoYW5nZSA+IE5vQ2hhbmdlIHx8IG5lZWRzU3R5bGVSZWNhbGMo
KSkpIHsKLSAgICAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBlbGVtZW50UmFy
ZURhdGEoKS0+cmVzZXRDb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGlmIChoYXNNdXRhYmxlUmFy
ZURhdGEoKSkKKyAgICAgICAgICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLT5yZXNldENvbXB1
dGVkU3R5bGUoKTsKICAgICB9CiAgICAgaWYgKGhhc1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0g
SW5oZXJpdCB8fCBuZWVkc1N0eWxlUmVjYWxjKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKCk7CkBAIC0xMzUzLDcgKzEzNTMsNyBA
QCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKIAogRWxlbWVu
dFNoYWRvdyogRWxlbWVudDo6c2hhZG93KCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc1JhcmVEYXRh
KCkpCisgICAgaWYgKCFoYXNNdXRhYmxlUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gZWxlbWVudFJhcmVEYXRhKCktPnNoYWRvdygpOwpAQCAtMTM2MSwxMCArMTM2
MSwxMSBAQCBFbGVtZW50U2hhZG93KiBFbGVtZW50OjpzaGFkb3coKSBjb25zdAogCiBFbGVtZW50
U2hhZG93KiBFbGVtZW50OjplbnN1cmVTaGFkb3coKQogewotICAgIGlmIChFbGVtZW50U2hhZG93
KiBzaGFkb3cgPSBlbnN1cmVFbGVtZW50UmFyZURhdGEoKS0+c2hhZG93KCkpCisgICAgRWxlbWVu
dFJhcmVEYXRhKiBkYXRhID0gZW5zdXJlRWxlbWVudFJhcmVEYXRhKCk7CisKKyAgICBpZiAoRWxl
bWVudFNoYWRvdyogc2hhZG93ID0gZGF0YS0+c2hhZG93KCkpCiAgICAgICAgIHJldHVybiBzaGFk
b3c7CiAKLSAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBlbGVtZW50UmFyZURhdGEoKTsKICAg
ICBkYXRhLT5zZXRTaGFkb3coYWRvcHRQdHIobmV3IEVsZW1lbnRTaGFkb3coKSkpOwogICAgIHJl
dHVybiBkYXRhLT5zaGFkb3coKTsKIH0KQEAgLTE4NTksNyArMTg2MCw3IEBAIHZvaWQgRWxlbWVu
dDo6c2V0UHNldWRvKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiAKIExheW91dFNpemUgRWxl
bWVudDo6bWluaW11bVNpemVGb3JSZXNpemluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1Jh
cmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+bWluaW11bVNpemVGb3JSZXNpemluZygpIDog
ZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKTsKKyAgICByZXR1cm4gaGFzTXV0YWJsZVJh
cmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+bWluaW11bVNpemVGb3JSZXNpemluZygpIDog
ZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRN
aW5pbXVtU2l6ZUZvclJlc2l6aW5nKGNvbnN0IExheW91dFNpemUmIHNpemUpCkBAIC0yMDUxLDgg
KzIwNTIsOCBAQCBMb2NhbGUmIEVsZW1lbnQ6OmxvY2FsZSgpIGNvbnN0CiAKIHZvaWQgRWxlbWVu
dDo6Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKIHsKLSAgICBpZiAoaGFzUmFyZURhdGEo
KSkKLSAgICAgICAgZWxlbWVudFJhcmVEYXRhKCktPnNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBk
YXRlU29vbkFmdGVyQXR0YWNoKGZhbHNlKTsKKyAgICBpZiAoaGFzTXV0YWJsZVJhcmVEYXRhKCkp
CisgICAgICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLT5zZXROZWVkc0ZvY3VzQXBwZWFyYW5j
ZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSk7CiAgICAgaWYgKGRvY3VtZW50KCktPmZvY3Vz
ZWROb2RlKCkgPT0gdGhpcykKICAgICAgICAgZG9jdW1lbnQoKS0+Y2FuY2VsRm9jdXNBcHBlYXJh
bmNlVXBkYXRlKCk7CiB9CkBAIC0yMDc5LDcgKzIwODAsNyBAQCB2b2lkIEVsZW1lbnQ6OnVwZGF0
ZVBzZXVkb0VsZW1lbnQoUHNldWRvSWQgcHNldWRvSWQsIFN0eWxlQ2hhbmdlIGNoYW5nZSkKICAg
ICAgICAgLy8gd2hlbiBSZW5kZXJPYmplY3Q6OmlzQ2hpbGRBbGxvd2VkIG9uIG91ciBwYXJlbnQg
cmV0dXJucyBmYWxzZSBmb3IgdGhlCiAgICAgICAgIC8vIFBzZXVkb0VsZW1lbnQncyByZW5kZXJl
ciBmb3IgZWFjaCBzdHlsZSByZWNhbGMuCiAgICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcHNl
dWRvRWxlbWVudFJlbmRlcmVySXNOZWVkZWQocmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5
bGUocHNldWRvSWQpKSkKLSAgICAgICAgICAgIGVsZW1lbnRSYXJlRGF0YSgpLT5zZXRQc2V1ZG9F
bGVtZW50KHBzZXVkb0lkLCAwKTsKKyAgICAgICAgICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgp
LT5zZXRQc2V1ZG9FbGVtZW50KHBzZXVkb0lkLCAwKTsKICAgICB9IGVsc2UgaWYgKFJlZlB0cjxQ
c2V1ZG9FbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlUHNldWRvRWxlbWVudElmTmVlZGVkKHBzZXVk
b0lkKSkgewogICAgICAgICBlbGVtZW50LT5hdHRhY2goKTsKICAgICAgICAgZW5zdXJlRWxlbWVu
dFJhcmVEYXRhKCktPnNldFBzZXVkb0VsZW1lbnQocHNldWRvSWQsIGVsZW1lbnQucmVsZWFzZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCmluZGV4IDAyMThjYmM4YjAyYTgwNmE4NmQxNWU2MWNlZmYwNGVi
ZDAwZDBlYjEuLjJmYTdlNWEwNWI2MGQwNTI2ZTkwODk2NjNjMTQ5MWIwMGM1ZjhkNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaApAQCAtNTQ3LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRy
ZW4oKTsKIAogICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwotICAgIHZpcnR1YWwgUGFzc093
blB0cjxOb2RlUmFyZURhdGE+IGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPE5vZGVSYXJlRGF0YT4gY3JlYXRlUmFyZURhdGEoKTsKICAgICBib29sIHJhcmVEYXRhU3R5
bGVBZmZlY3RlZEJ5RW1wdHkoKSBjb25zdDsKICAgICBib29sIHJhcmVEYXRhQ2hpbGRyZW5BZmZl
Y3RlZEJ5SG92ZXIoKSBjb25zdDsKICAgICBib29sIHJhcmVEYXRhQ2hpbGRyZW5BZmZlY3RlZEJ5
QWN0aXZlKCkgY29uc3Q7CkBAIC01NzAsNyArNTcwLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
c2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1dGVDaGFuZ2VkKEVsZW1lbnRT
aGFkb3cqLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAg
ICBFbGVtZW50UmFyZURhdGEqIGVsZW1lbnRSYXJlRGF0YSgpIGNvbnN0OworICAgIGNvbnN0IEVs
ZW1lbnRSYXJlRGF0YSogZWxlbWVudFJhcmVEYXRhKCkgY29uc3Q7CiAgICAgRWxlbWVudFJhcmVE
YXRhKiBlbnN1cmVFbGVtZW50UmFyZURhdGEoKTsKIAogICAgIHZvaWQgZGV0YWNoQWxsQXR0ck5v
ZGVzRnJvbUVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
UmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAppbmRleCA3
OTA1Y2I1NDhlNWZmYzQ5ZjIwNGEzOWRlYzUwMWM0MDllZDJmYTE1Li42ZWE3NTdmMDY4ODUzOWMy
OThmMmEyNmY5YjgzYzg0OWE2YTBmM2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudFJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0
YS5oCkBAIC0zNSw3ICszNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1l
bnRSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgewogcHVibGljOgotICAgIEVsZW1lbnRS
YXJlRGF0YShEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnRSYXJlRGF0
YT4gY3JlYXRlKFRyZWVTY29wZSogc2NvcGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEVsZW1lbnRSYXJlRGF0YShzY29wZSkpOworICAgIH0KKwogICAgIHZpcnR1YWwgfkVs
ZW1lbnRSYXJlRGF0YSgpOwogCiAgICAgdm9pZCBzZXRQc2V1ZG9FbGVtZW50KFBzZXVkb0lkLCBQ
YXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+KTsKQEAgLTU0LDcgKzU4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0SXNJbkNhbnZhc1N1YnRyZWUoYm9vbCB2YWx1ZSkgeyBtX2lzSW5DYW52YXNTdWJ0
cmVlID0gdmFsdWU7IH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBib29sIGNv
bnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKSB7IHJldHVybiBtX2NvbnRhaW5zRnVsbFNjcmVlbkVs
ZW1lbnQ7IH0KKyAgICBib29sIGNvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQ7IH0KICAgICB2b2lkIHNldENvbnRhaW5z
RnVsbFNjcmVlbkVsZW1lbnQoYm9vbCB2YWx1ZSkgeyBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1l
bnQgPSB2YWx1ZTsgfQogI2VuZGlmCiAKQEAgLTEwNyw2ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRTYXZlZExheWVyU2Nyb2xsT2Zmc2V0KEludFNpemUgc2l6ZSkgeyBtX3NhdmVkTGF5
ZXJTY3JvbGxPZmZzZXQgPSBzaXplOyB9CiAKIHByaXZhdGU6CisgICAgRWxlbWVudFJhcmVEYXRh
KFRyZWVTY29wZSopOworCiAgICAgLy8gTWFueSBmaWVsZHMgYXJlIGluIE5vZGVSYXJlRGF0YSBm
b3IgYmV0dGVyIHBhY2tpbmcuCiAgICAgTGF5b3V0U2l6ZSBtX21pbmltdW1TaXplRm9yUmVzaXpp
bmc7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX2NvbXB1dGVkU3R5bGU7CkBAIC0xMzAsOCAr
MTM2LDggQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQog
ICAgIHJldHVybiBJbnRTaXplKExheW91dFVuaXQ6Om1heCgpLCBMYXlvdXRVbml0OjptYXgoKSk7
CiB9CiAKLWlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YShEb2N1bWVudCog
ZG9jdW1lbnQpCi0gICAgOiBOb2RlUmFyZURhdGEoZG9jdW1lbnQpCitpbmxpbmUgRWxlbWVudFJh
cmVEYXRhOjpFbGVtZW50UmFyZURhdGEoVHJlZVNjb3BlKiBzY29wZSkKKyAgICA6IE5vZGVSYXJl
RGF0YShzY29wZSkKICAgICAsIG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11
bVNpemVGb3JSZXNpemluZygpKQogICAgICwgbV9nZW5lcmF0ZWRCZWZvcmUoMCkKICAgICAsIG1f
Z2VuZXJhdGVkQWZ0ZXIoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA1ODRkYmU5ZmUyNGQ1Yzk3YWM4
OTg1NWEyNjhlNTQ5MDQ3MzAzZGI4Li5jYmQ1NjQzZjkwZTM3NGQzY2U1MmM2OThlYmU4MTMyMTZi
OTY4OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC00NzUsNyArNDc1LDIxIEBAIE5vZGUqIE5vZGU6
OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSBjb25zdAogICAgIHJldHVybiBuZXh0U2libGluZygp
OwogfQogCi1Ob2RlUmFyZURhdGEqIE5vZGU6OnJhcmVEYXRhKCkgY29uc3QKK3ZvaWQgTm9kZTo6
c2V0UmFyZURhdGFSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIEFTU0VS
VChoYXNSYXJlRGF0YSgpKTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRSZW5kZXJlcihyZW5k
ZXJlcik7Cit9CisKK3ZvaWQgTm9kZTo6c2V0SW1tdXRhYmxlUmFyZURhdGEoY29uc3QgTm9kZVJh
cmVEYXRhKiBkYXRhKQoreworICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7CisgICAgQVNTRVJU
KCFyZW5kZXJlcigpKTsKKyAgICBBU1NFUlQoIWRhdGEtPmlzTXV0YWJsZSgpKTsKKyAgICBtX2Rh
dGEubV9yYXJlRGF0YSA9IGNvbnN0X2Nhc3Q8Tm9kZVJhcmVEYXRhKj4oZGF0YSk7Cit9CisKK2Nv
bnN0IE5vZGVSYXJlRGF0YSogTm9kZTo6cmFyZURhdGEoKSBjb25zdAogewogICAgIEFTU0VSVCho
YXNSYXJlRGF0YSgpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZVJhcmVEYXRhKj4obV9k
YXRhLm1fcmFyZURhdGEpOwpAQCAtNDgzLDIwICs0OTcsMjQgQEAgTm9kZVJhcmVEYXRhKiBOb2Rl
OjpyYXJlRGF0YSgpIGNvbnN0CiAKIE5vZGVSYXJlRGF0YSogTm9kZTo6ZW5zdXJlUmFyZURhdGEo
KQogewotICAgIGlmIChoYXNSYXJlRGF0YSgpKQotICAgICAgICByZXR1cm4gcmFyZURhdGEoKTsK
KyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpIHsKKyAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0g
Y3JlYXRlUmFyZURhdGEoKS5sZWFrUmVmKCk7CisgICAgICAgIEFTU0VSVChkYXRhKTsKKyAgICAg
ICAgZGF0YS0+c2V0UmVuZGVyZXIobV9kYXRhLm1fcmVuZGVyZXIpOworICAgICAgICBtX2RhdGEu
bV9yYXJlRGF0YSA9IGRhdGE7CisgICAgICAgIHNldEZsYWcoSGFzUmFyZURhdGFGbGFnKTsKKyAg
ICB9IGVsc2UgaWYgKHJhcmVEYXRhKCktPmlzTXV0YWJsZSgpKSB7CisgICAgICAgIE5vZGVSYXJl
RGF0YSogbmV3UmFyZURhdGEgPSBjcmVhdGVSYXJlRGF0YSgpLmxlYWtSZWYoKTsKKyAgICAgICAg
bmV3UmFyZURhdGEtPnNldFRyZWVTY29wZShyYXJlRGF0YSgpLT50cmVlU2NvcGUoKSk7CisgICAg
ICAgIG1fZGF0YS5tX3JhcmVEYXRhID0gbmV3UmFyZURhdGE7CisgICAgfQogCi0gICAgTm9kZVJh
cmVEYXRhKiBkYXRhID0gY3JlYXRlUmFyZURhdGEoKS5sZWFrUHRyKCk7Ci0gICAgQVNTRVJUKGRh
dGEpOwotICAgIGRhdGEtPnNldFJlbmRlcmVyKG1fZGF0YS5tX3JlbmRlcmVyKTsKLSAgICBtX2Rh
dGEubV9yYXJlRGF0YSA9IGRhdGE7Ci0gICAgc2V0RmxhZyhIYXNSYXJlRGF0YUZsYWcpOwotICAg
IHJldHVybiBkYXRhOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOb2RlUmFyZURhdGEqPihtX2Rh
dGEubV9yYXJlRGF0YSk7CiB9CiAKLVBhc3NPd25QdHI8Tm9kZVJhcmVEYXRhPiBOb2RlOjpjcmVh
dGVSYXJlRGF0YSgpCitQYXNzUmVmUHRyPE5vZGVSYXJlRGF0YT4gTm9kZTo6Y3JlYXRlUmFyZURh
dGEoKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm9kZVJhcmVEYXRhKGRvY3VtZW50SW50
ZXJuYWwoKSkpOworICAgIHJldHVybiBOb2RlUmFyZURhdGE6OmNyZWF0ZShkb2N1bWVudEludGVy
bmFsKCkpOwogfQogCiB2b2lkIE5vZGU6OmNsZWFyUmFyZURhdGEoKQpAQCAtNTA4LDcgKzUyNiw4
IEBAIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiAjZW5kaWYKIAogICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBtX2RhdGEubV9yYXJlRGF0YS0+cmVuZGVyZXIoKTsKLSAgICBkZWxldGUg
bV9kYXRhLm1fcmFyZURhdGE7CisgICAgLy8gUmFyZURhdGEgaXMgc3RvcmVkIGluIGEgdW5pb24g
c28gd2UgaGF2ZSB0byBtYW51YWxseSBoYW5kbGUgdGhlIHJlZiBjb3VudC4KKyAgICBtX2RhdGEu
bV9yYXJlRGF0YS0+ZGVyZWYoKTsKICAgICBtX2RhdGEubV9yZW5kZXJlciA9IHJlbmRlcmVyOwog
ICAgIGNsZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcpOwogfQpAQCAtMTAxOCw3ICsxMDM3LDcgQEAg
dm9pZCBEb2N1bWVudDo6aW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzKGNvbnN0IFF1YWxpZmllZE5h
bWUqIGF0dHJOYW1lKQogdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RDYWNoZXNJbkFuY2Vz
dG9ycyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSwgRWxlbWVudCogYXR0cmlidXRlT3du
ZXJFbGVtZW50KQogewogICAgIGlmIChoYXNSYXJlRGF0YSgpICYmICghYXR0ck5hbWUgfHwgaXNB
dHRyaWJ1dGVOb2RlKCkpKQotICAgICAgICByYXJlRGF0YSgpLT5jbGVhckNoaWxkTm9kZUxpc3RD
YWNoZSgpOworICAgICAgICBlbnN1cmVSYXJlRGF0YSgpLT5jbGVhckNoaWxkTm9kZUxpc3RDYWNo
ZSgpOwogCiAgICAgLy8gTW9kaWZpY2F0aW9ucyB0byBhdHRyaWJ1dGVzIHRoYXQgYXJlIG5vdCBh
c3NvY2lhdGVkIHdpdGggYW4gRWxlbWVudCBjYW4ndCBpbnZhbGlkYXRlIE5vZGVMaXN0IGNhY2hl
cy4KICAgICBpZiAoYXR0ck5hbWUgJiYgIWF0dHJpYnV0ZU93bmVyRWxlbWVudCkKQEAgLTEwMzIs
NyArMTA1MSw3IEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzSW5BbmNlc3Rv
cnMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUsIEVsCiAgICAgZm9yIChOb2RlKiBub2Rl
ID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAo
IW5vZGUtPmhhc1JhcmVEYXRhKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9k
ZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKKyAgICAgICAgTm9kZVJhcmVEYXRh
KiBkYXRhID0gbm9kZS0+ZW5zdXJlUmFyZURhdGEoKTsKICAgICAgICAgaWYgKGRhdGEtPm5vZGVM
aXN0cygpKQogICAgICAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMo
YXR0ck5hbWUpOwogICAgIH0KQEAgLTEwNDAsMTMgKzEwNTksMTMgQEAgdm9pZCBOb2RlOjppbnZh
bGlkYXRlTm9kZUxpc3RDYWNoZXNJbkFuY2VzdG9ycyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRy
TmFtZSwgRWwKIAogTm9kZUxpc3RzTm9kZURhdGEqIE5vZGU6Om5vZGVMaXN0cygpCiB7Ci0gICAg
cmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSA6IDA7CisgICAg
cmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBlbnN1cmVSYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSA6IDA7
CiB9CiAKIHZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkQ2hpbGROb2RlTGlzdCgpCiB7CiAgICAgQVNT
RVJUKHJhcmVEYXRhKCkpOwotICAgIHJhcmVEYXRhKCktPnNldENoaWxkTm9kZUxpc3QoMCk7Cisg
ICAgZW5zdXJlUmFyZURhdGEoKS0+c2V0Q2hpbGROb2RlTGlzdCgwKTsKIH0KIAogTm9kZSogTm9k
ZTo6dHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKCkgY29uc3QKQEAgLTIzNTMsMTIgKzIzNzIs
MTIgQEAgdm9pZCBOb2RlOjpjbGVhckV2ZW50VGFyZ2V0RGF0YSgpCiAjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bj4gPiogTm9kZTo6bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkKIHsKLSAgICByZXR1cm4gaGFz
UmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIDogMDsK
KyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVuc3VyZVJhcmVEYXRhKCktPm11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyeSgpIDogMDsKIH0KIAogSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uKj4qIE5vZGU6OnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCiB7Ci0g
ICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT50cmFuc2llbnRNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cnkoKSA6IDA7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBlbnN1cmVS
YXJlRGF0YSgpLT50cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSA6IDA7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFJlZ2lzdHJ5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggN2E0NzBlZWMwNjli
YTYyNzNiMTY1NTYwZDZlNzY5Yzg4NDZiMzBmOC4uZGEwYWJmMjgyYzc0MGU3MjFkMDg3MTRjZjUw
N2U0ZTI3OWZkYTRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0xMTAsNyArMTEwLDcgQEAgZW51bSBTdHls
ZUNoYW5nZVR5cGUgewogICAgIFN5bnRoZXRpY1N0eWxlQ2hhbmdlID0gMyA8PCBub2RlU3R5bGVD
aGFuZ2VTaGlmdAogfTsKIAotY2xhc3MgTm9kZVJhcmVEYXRhQmFzZSB7CitjbGFzcyBOb2RlUmFy
ZURhdGFCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZVJhcmVEYXRhQmFzZT4gewogcHVibGlj
OgogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVy
OyB9CiAgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1fcmVu
ZGVyZXIgPSByZW5kZXJlcjsgfQpAQCAtNTI3LDExICs1MjcsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICB7CiAgICAgICAgIGlm
IChoYXNSYXJlRGF0YSgpKQotICAgICAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPnNldFJlbmRl
cmVyKHJlbmRlcmVyKTsKKyAgICAgICAgICAgIHNldFJhcmVEYXRhUmVuZGVyZXIocmVuZGVyZXIp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJlciA9IHJlbmRlcmVy
OworICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyZXIgPSByZW5kZXJlcjsgICAgCiAgICAgfQog
CisgICAgdm9pZCBzZXRSYXJlRGF0YVJlbmRlcmVyKFJlbmRlck9iamVjdCopOworCiAgICAgLy8g
VXNlIHRoZXNlIHR3byBtZXRob2RzIHdpdGggY2F1dGlvbi4KICAgICBSZW5kZXJCb3gqIHJlbmRl
ckJveCgpIGNvbnN0OwogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9i
amVjdCgpIGNvbnN0OwpAQCAtNzc0LDEwICs3NzYsMTEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBj
b25zdCB7IH0KICAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCk7CiAgICAgdm9p
ZCBjbGVhclRhYkluZGV4RXhwbGljaXRseSgpOwotICAgIAorCiAgICAgYm9vbCBoYXNSYXJlRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSGFzUmFyZURhdGFGbGFnKTsgfQorICAgIGJvb2wg
aGFzTXV0YWJsZVJhcmVEYXRhKCkgY29uc3Q7CiAKLSAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRh
KCkgY29uc3Q7CisgICAgY29uc3QgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OwogICAg
IE5vZGVSYXJlRGF0YSogZW5zdXJlUmFyZURhdGEoKTsKICAgICB2b2lkIGNsZWFyUmFyZURhdGEo
KTsKIApAQCAtODA4LDcgKzgxMSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKTsKIAotICAg
IHZpcnR1YWwgUGFzc093blB0cjxOb2RlUmFyZURhdGE+IGNyZWF0ZVJhcmVEYXRhKCk7CisgICAg
dm9pZCBzZXRJbW11dGFibGVSYXJlRGF0YShjb25zdCBOb2RlUmFyZURhdGEqKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Tm9kZVJhcmVEYXRhPiBjcmVhdGVSYXJlRGF0YSgpOwogICAgIGJvb2wg
cmFyZURhdGFGb2N1c2VkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBub25S
ZW5kZXJlclN0eWxlKCkgY29uc3QgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5oCmluZGV4IDI0ZWYyMzM0YmRkMGMxNWU3Y2UwNDQyMGQ0YzBlMGZkODBmNDc4NTcuLmRlMWJl
YzIwNDI2NjU2NGY2MWMyMjg4NWUwYWEzNGRmYWUwNDgwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgKQEAgLTE5OCwzNyArMTk4LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIE5vZGVSYXJl
RGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGFCYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzogICAgCi0g
ICAgTm9kZVJhcmVEYXRhKERvY3VtZW50KiBkb2N1bWVudCkKLSAgICAgICAgOiBOb2RlUmFyZURh
dGFCYXNlKGRvY3VtZW50KQotICAgICAgICAsIG1fY2hpbGROb2RlTGlzdCgwKQotICAgICAgICAs
IG1fdGFiSW5kZXgoMCkKLSAgICAgICAgLCBtX2NoaWxkSW5kZXgoMCkKLSAgICAgICAgLCBtX3Rh
YkluZGV4V2FzU2V0RXhwbGljaXRseShmYWxzZSkKLSAgICAgICAgLCBtX2lzRm9jdXNlZChmYWxz
ZSkKLSAgICAgICAgLCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNo
KGZhbHNlKQotICAgICAgICAsIG1fc3R5bGVBZmZlY3RlZEJ5RW1wdHkoZmFsc2UpCi0gICAgICAg
ICwgbV9pc0luQ2FudmFzU3VidHJlZShmYWxzZSkKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
Ci0gICAgICAgICwgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KGZhbHNlKQotI2VuZGlmCi0j
aWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQotICAgICAgICAsIG1faXNJblRvcExheWVyKGZhbHNl
KQotI2VuZGlmCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlIb3ZlcihmYWxzZSkKLSAg
ICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZShmYWxzZSkKLSAgICAgICAgLCBtX2No
aWxkcmVuQWZmZWN0ZWRCeURyYWcoZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXMoZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlM
YXN0Q2hpbGRSdWxlcyhmYWxzZSkKLSAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURpcmVj
dEFkamFjZW50UnVsZXMoZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlGb3J3
YXJkUG9zaXRpb25hbFJ1bGVzKGZhbHNlKQotICAgICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoZmFsc2UpCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Tm9kZVJhcmVEYXRhPiBjcmVhdGUoVHJlZVNjb3BlKiBzY29wZSkKICAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZVJhcmVEYXRhKHNjb3BlKSk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB+Tm9kZVJhcmVEYXRhKCkKLSAgICB7Ci0gICAgfQorICAgIHZpcnR1YWwgfk5v
ZGVSYXJlRGF0YSgpIHsgfQogCiAgICAgdm9pZCBjbGVhck5vZGVMaXN0cygpIHsgbV9ub2RlTGlz
dHMuY2xlYXIoKTsgfQogICAgIHZvaWQgc2V0Tm9kZUxpc3RzKFBhc3NPd25QdHI8Tm9kZUxpc3Rz
Tm9kZURhdGE+IGxpc3RzKSB7IG1fbm9kZUxpc3RzID0gbGlzdHM7IH0KQEAgLTI3Miw3ICsyNDgs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAgRE9NU2V0
dGFibGVUb2tlbkxpc3QqIGl0ZW1Qcm9wKCkgY29uc3QKKyAgICBET01TZXR0YWJsZVRva2VuTGlz
dCogaXRlbVByb3AoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2l0ZW1Qcm9wKQogICAgICAgICAg
ICAgbV9pdGVtUHJvcCA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKQEAgLTI4OCw3
ICsyNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faXRlbVByb3AtPnNldFZhbHVlKHZhbHVlKTsK
ICAgICB9CiAKLSAgICBET01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVJlZigpIGNvbnN0CisgICAg
RE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1SZWYoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2l0
ZW1SZWYpCiAgICAgICAgICAgICBtX2l0ZW1SZWYgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3Jl
YXRlKCk7CkBAIC0zMDQsNyArMjgwLDcgQEAgcHVibGljOgogICAgICAgICBtX2l0ZW1SZWYtPnNl
dFZhbHVlKHZhbHVlKTsKICAgICB9CiAKLSAgICBET01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVR5
cGUoKSBjb25zdAorICAgIERPTVNldHRhYmxlVG9rZW5MaXN0KiBpdGVtVHlwZSgpCiAgICAgewog
ICAgICAgICBpZiAoIW1faXRlbVR5cGUpCiAgICAgICAgICAgICBtX2l0ZW1UeXBlID0gRE9NU2V0
dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwpAQCAtMzI0LDkgKzMwMCw0MCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9jdXNlZDsgfQogICAgIHZv
aWQgc2V0Rm9jdXNlZChib29sIGZvY3VzZWQpIHsgbV9pc0ZvY3VzZWQgPSBmb2N1c2VkOyB9CiAK
KyAgICBib29sIGlzTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9CisKICAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0
OwogCiBwcm90ZWN0ZWQ6CisgICAgTm9kZVJhcmVEYXRhKFRyZWVTY29wZSogc2NvcGUpCisgICAg
ICAgIDogTm9kZVJhcmVEYXRhQmFzZShzY29wZSkKKyAgICAgICAgLCBtX2NoaWxkTm9kZUxpc3Qo
MCkKKyAgICAgICAgLCBtX3RhYkluZGV4KDApCisgICAgICAgICwgbV9jaGlsZEluZGV4KDApCisg
ICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkoZmFsc2UpCisgICAgICAgICwgbV9p
c0ZvY3VzZWQoZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNv
b25BZnRlckF0dGFjaChmYWxzZSkKKyAgICAgICAgLCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5KGZh
bHNlKQorICAgICAgICAsIG1faXNJbkNhbnZhc1N1YnRyZWUoZmFsc2UpCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgICAgICAsIG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChmYWxz
ZSkKKyNlbmRpZgorI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKKyAgICAgICAgLCBtX2lzSW5U
b3BMYXllcihmYWxzZSkKKyNlbmRpZgorICAgICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5SG92
ZXIoZmFsc2UpCisgICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUoZmFsc2UpCisg
ICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKGZhbHNlKQorICAgICAgICAsIG1fY2hp
bGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKGZhbHNlKQorICAgICAgICAsIG1fY2hpbGRy
ZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoZmFsc2UpCisgICAgICAgICwgbV9jaGlsZHJlbkFm
ZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKGZhbHNlKQorICAgICAgICAsIG1fY2hpbGRyZW5B
ZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyhmYWxzZSkKKyAgICAgICAgLCBtX2NoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKGZhbHNlKQorICAgICAgICAvLyBP
bmx5IG11dGFibGUgaWYgc2NvcGUgaXMgYSBEb2N1bWVudC4KKyAgICAgICAgLCBtX2lzTXV0YWJs
ZShzY29wZS0+cm9vdE5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICB7CisgICAgfQorCiAg
ICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKICAgICBDaGlsZE5vZGVM
aXN0KiBtX2NoaWxkTm9kZUxpc3Q7CiAgICAgc2hvcnQgbV90YWJJbmRleDsKQEAgLTM1Myw2ICsz
NjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFk
amFjZW50UnVsZXMgOiAxOwogICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9z
aXRpb25hbFJ1bGVzIDogMTsKICAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQ
b3NpdGlvbmFsUnVsZXMgOiAxOworICAgIGJvb2wgbV9pc011dGFibGUgOiAxOwogCiAjaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBPd25QdHI8VmVjdG9yPE93blB0cjxNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+ID4gbV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnk7CkBA
IC0zNjYsNiArMzc0LDEyIEBAIHByb3RlY3RlZDoKICNlbmRpZgogfTsKIAorLy8gSGVyZSBzbyBp
dCBjYW4gYmUgaW5saW5lLgoraW5saW5lIGJvb2wgTm9kZTo6aGFzTXV0YWJsZVJhcmVEYXRhKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT5pc011dGFi
bGUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTm9kZVJhcmVE
YXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5kZXggNmIyZmIzMGQ5MTRiNjQ4ZjJlOTI2
Y2E1ZjI1NmY5YmE5OGVjNTc5Yi4uZDE1NTIzYjQxNjRlM2VlNWRiNGE2NjBjZmU2YjU5NWFmYTRi
MTI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJFbGVtZW50UmFyZURhdGEuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50
LmgiCkBAIC01NCw3ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFNhbWVT
aXplQXNUcmVlU2NvcGUgewogICAgIHZpcnR1YWwgflNhbWVTaXplQXNUcmVlU2NvcGUoKTsKLSAg
ICB2b2lkKiBwb2ludGVyc1s3XTsKKyAgICB2b2lkKiBwb2ludGVyc1s4XTsKIH07CiAKIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihUcmVlU2NvcGUpID09IHNpemVvZihTYW1lU2l6ZUFzVHJlZVNjb3Bl
KSwgdHJlZXNjb3BlX3Nob3VsZF9zdGF5X3NtYWxsKTsKQEAgLTc3LDYgKzc4LDE0IEBAIFRyZWVT
Y29wZTo6flRyZWVTY29wZSgpCiAgICAgfQogfQogCitjb25zdCBFbGVtZW50UmFyZURhdGEqIFRy
ZWVTY29wZTo6c2hhcmVkUmFyZURhdGEoKQoreworICAgIGlmICghbV9zaGFyZWRSYXJlRGF0YSkK
KyAgICAgICAgbV9zaGFyZWRSYXJlRGF0YSA9IEVsZW1lbnRSYXJlRGF0YTo6Y3JlYXRlKHRoaXMp
OworCisgICAgcmV0dXJuIG1fc2hhcmVkUmFyZURhdGEuZ2V0KCk7Cit9CisKIHZvaWQgVHJlZVNj
b3BlOjpkZXN0cm95VHJlZVNjb3BlRGF0YSgpCiB7CiAgICAgbV9lbGVtZW50c0J5SWQuY2xlYXIo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAppbmRleCBjYjY2OTBkYzZmNTE0YmE0MTg3MTViNGNhNjRh
NGI5YjI1NmYyNjAwLi4xYThlMzIyM2NiMjY2ZGM4ZGFhMGM4ZmVlOGYxODg3NjZkNzM3MDAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5oCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFzcyBET01TZWxlY3Rpb247CiBjbGFzcyBFbGVt
ZW50OworY2xhc3MgRWxlbWVudFJhcmVEYXRhOwogY2xhc3MgSFRNTExhYmVsRWxlbWVudDsKIGNs
YXNzIEhUTUxNYXBFbGVtZW50OwogY2xhc3MgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OwpAQCAt
OTEsNiArOTIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisgICAgY29uc3QgRWxlbWVudFJhcmVEYXRh
KiBzaGFyZWRSYXJlRGF0YSgpOworCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgVHJlZVNjb3Bl
KENvbnRhaW5lck5vZGUqKTsKICAgICB2aXJ0dWFsIH5UcmVlU2NvcGUoKTsKQEAgLTEwMCw2ICsx
MDMsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIENvbnRhaW5lck5vZGUqIG1fcm9vdE5v
ZGU7CiAgICAgVHJlZVNjb3BlKiBtX3BhcmVudFRyZWVTY29wZTsKKyAgICBSZWZQdHI8RWxlbWVu
dFJhcmVEYXRhPiBtX3NoYXJlZFJhcmVEYXRhOwogCiAgICAgT3duUHRyPERvY3VtZW50T3JkZXJl
ZE1hcD4gbV9lbGVtZW50c0J5SWQ7CiAgICAgT3duUHRyPERvY3VtZW50T3JkZXJlZE1hcD4gbV9p
bWFnZU1hcHNCeU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
QWRvcHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKaW5k
ZXggOGNkNjI0OWJkNzYwOWUzZjA2OTYxZTMwODU5ZWUyZGFkYmZjMTU5MC4uNzU3Y2IyYzgyZmFj
ZDE1ZjFmNzBhYzI4YjNhNzQzNmZlNDhkOGEyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2Nv
cGVBZG9wdGVyLmNwcApAQCAtNDgsMTMgKzQ4LDE2IEBAIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6
bW92ZVRyZWVUb05ld1Njb3BlKE5vZGUqIHJvb3QpIGNvbnN0CiAgICAgaWYgKG9sZERvY3VtZW50
ICYmIHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKICAgICAgICAgb2xkRG9jdW1lbnQtPmluY0RPTVRy
ZWVWZXJzaW9uKCk7CiAKKyAgICBjb25zdCBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBtX25ld1Nj
b3BlLT5zaGFyZWRSYXJlRGF0YSgpOworCiAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKLSAgICAgICAgbm9kZS0+
c2V0VHJlZVNjb3BlKG1fbmV3U2NvcGUpOwogICAgICAgICBpZiAobm9kZS0+aGFzUmFyZURhdGEo
KSkgewotICAgICAgICAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5vZGUtPnJhcmVEYXRh
KCk7CisgICAgICAgICAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhID0gbm9kZS0+ZW5zdXJlUmFy
ZURhdGEoKTsKKyAgICAgICAgICAgIHJhcmVEYXRhLT5zZXRUcmVlU2NvcGUobV9uZXdTY29wZSk7
CiAgICAgICAgICAgICBpZiAocmFyZURhdGEtPm5vZGVMaXN0cygpKQogICAgICAgICAgICAgICAg
IHJhcmVEYXRhLT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUob2xkRG9jdW1lbnQsIG5ld0Rv
Y3VtZW50KTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5vZGUtPnNl
dEltbXV0YWJsZVJhcmVEYXRhKGRhdGEpOwogCiAgICAgICAgIGlmICh3aWxsTW92ZVRvTmV3RG9j
dW1lbnQpCiAgICAgICAgICAgICBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQobm9kZSwgb2xkRG9jdW1l
bnQsIG5ld0RvY3VtZW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178022</attachid>
            <date>2012-12-06 10:01:14 -0800</date>
            <delta_ts>2012-12-06 11:31:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104202-20121206095839.patch</filename>
            <type>text/plain</type>
            <size>14019</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU3MjZmYWU1MzY5OGEx
ODg4MWE3ZDRjOGM3NTg1NDI0ZWQ2MzNkYi4uZWYxY2UxMzhlOTg4MmFhODAyNGExZGUxMzAyOWNj
YTgwMzhkNDVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTEyLTA2ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIENyZWF0ZSBvbmx5IE5v
ZGVSYXJlRGF0YUJhc2Ugd2hlbiBzZXR0aW5nIFRyZWVTY29wZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MjAyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBwdXR0aW5nIG5vZGVzIGludG8gU2hh
ZG93Um9vdCBvciBhbnkgZGVzY2RlbmRhbnQgd2UgbXVzdCBhc3NvY2lhdGUKKyAgICAgICAgdGhl
IG5vZGUgd2l0aCBhIHRyZWUgc2NvcGUgd2hpY2ggYWRkcyByYXJlIGRhdGEgdG8gdGhlIG5vZGUg
bWFraW5nCisgICAgICAgIE5vZGVSYXJlRGF0YSBhbmQgRWxlbWVudFJhcmVEYXRhIG5vdCB2ZXJ5
IHJhcmUuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgdGhl
IGVudGlyZSByYXJlIGRhdGEgb2JqZWN0IHdlCisgICAgICAgIG9ubHkgYWxsb2NhdGUgdGhlIE5v
ZGVSYXJlRGF0YUJhc2Ugb2JqZWN0IHdoaWNoIGFscmVhZHkgY29udGFpbnMgdGhlCisgICAgICAg
IFRyZWVTY29wZSBhbmQgaXMgYSBmcmFjdGlvbiBvZiB0aGUgc2l6ZSBvZiBOb2RlUmFyZURhdGEg
b3IgRWxlbWVudFJhcmVEYXRhLgorCisgICAgICAgIE9uIDY0Yml0LCB0aGlzIHJlZHVjZXMgdGhl
IG92ZXJoZWFkIHBlciBlbGVtZW50IGZyb20gMTM2IGJ5dGVzIHRvCisgICAgICAgIDMyIGJ5dGVz
IGZvciBhIDc2JSBzYXZpbmdzLCBhbmQgb24gb3RoZXIgbm9kZXMgZnJvbSA2NCBieXRlcyB0byAz
MiBieXRlcworICAgICAgICBmb3IgYSA1MCUgc2F2aW5ncy4KKworICAgICAgICBJIGFsc28gcGFj
a2VkIHRoZSBOb2RlUmFyZURhdGFCYXNlIGJ5IG1vdmluZyBtb3N0IG9mIHRoZSBmaWVsZHMgZnJv
bQorICAgICAgICBOb2RlUmFyZURhdGEgaW50byB0aGUgYmFzZSBvYmplY3QuIEJ5IGRvaW5nIHNv
IE5vZGVSYXJlRGF0YSBhbmQKKyAgICAgICAgRWxlbWVudFJhcmVEYXRhIGRpZCBub3QgZ3JvdyBp
biBzaXplIHdoZW4gYWRkaW5nIHRoZSBtX2lzQmFzaWNSYXJlRGF0YQorICAgICAgICBmaWVsZC4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dHJlZVNjb3BlKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpj
cmVhdGVSYXJlRGF0YSk6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAg
ICAoRWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6
RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpzZXRUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZW5zdXJl
UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y3JlYXRlUmFyZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6CisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YUJhc2U6OmNyZWF0ZSk6CisgICAgICAg
IChOb2RlUmFyZURhdGFCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YUJhc2U6
OmlzQmFzaWNSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGFCYXNlOjpO
b2RlUmFyZURhdGFCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFJlbmRlcmVyKToKKyAgICAgICAgKE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFzUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6aGFzQmFzaWNSYXJlRGF0YSk6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgorICAgICAgICAoTm9k
ZVJhcmVEYXRhKToKKwogMjAxMi0xMi0wNiAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBTcGVlY2ggUmVjb2duaXRpb24gQVBJOiBDaGFuZ2UgdGhlIGVy
cm9yIGNvZGUgdG8gYSBzdHJpbmcgb24gU3BlZWNoUmVjb2duaXRpb25FcnJvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAppbmRleCA3MTNkOWU1Y2RkYzBjNjM4N2Q3NjI0YjE4NWZhY2EzMDIzMDAzNWRlLi41
MmU3NGNlZjdmMjUwNzc0MWVmNjgwYjNmMjdiZTJmM2FjYjY3NjRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaApAQCAtMTU1NCw3ICsxNTU0LDcgQEAgaW5saW5lIGJvb2wgTm9kZTo6aXNEb2N1bWVudE5v
ZGUoKSBjb25zdAogCiBpbmxpbmUgVHJlZVNjb3BlKiBOb2RlOjp0cmVlU2NvcGUoKSBjb25zdAog
ewotICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gbV9kYXRhLm1fcmFyZURhdGEtPnRyZWVTY29w
ZSgpIDogZG9jdW1lbnRJbnRlcm5hbCgpOworICAgIHJldHVybiBoYXNCYXNpY1JhcmVEYXRhKCkg
PyBtX2RhdGEubV9yYXJlRGF0YS0+dHJlZVNjb3BlKCkgOiBkb2N1bWVudEludGVybmFsKCk7CiB9
CiAKIGlubGluZSBOb2RlOjpOb2RlKERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlw
ZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGFiMTk5ZjAxOGQ1MjlmNDUzOTVkMTBl
MmMyZDg1YTM5OWQ2N2NjNTQuLjkzMGRiZWVhYTM5MTNiY2VhMTZlYzU2MDZlMjVjNDQ4ZjI5ZGY4
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTIxNyw3ICsyMTcsNyBAQCBpbmxpbmUgRWxl
bWVudFJhcmVEYXRhKiBFbGVtZW50OjplbnN1cmVFbGVtZW50UmFyZURhdGEoKQogCiBQYXNzT3du
UHRyPE5vZGVSYXJlRGF0YT4gRWxlbWVudDo6Y3JlYXRlUmFyZURhdGEoKQogewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRWxlbWVudFJhcmVEYXRhKGRvY3VtZW50SW50ZXJuYWwoKSkpOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRWxlbWVudFJhcmVEYXRhKCkpOwogfQogCiBERUZJTkVfVklS
VFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoRWxlbWVudCwgYmx1cik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudFJhcmVEYXRhLmgKaW5kZXggNzkwNWNiNTQ4ZTVmZmM0OWYyMDRhMzlkZWM1MDFj
NDA5ZWQyZmExNS4uODhmMjZiZDE2NGFjNzUzYWZkZGUzOGZkZjI4ZDQxM2RjZjAxYjEyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1lbnRSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURh
dGEgewogcHVibGljOgotICAgIEVsZW1lbnRSYXJlRGF0YShEb2N1bWVudCopOworICAgIEVsZW1l
bnRSYXJlRGF0YSgpOwogICAgIHZpcnR1YWwgfkVsZW1lbnRSYXJlRGF0YSgpOwogCiAgICAgdm9p
ZCBzZXRQc2V1ZG9FbGVtZW50KFBzZXVkb0lkLCBQYXNzUmVmUHRyPFBzZXVkb0VsZW1lbnQ+KTsK
QEAgLTEzMCw5ICsxMzAsOCBAQCBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JS
ZXNpemluZygpCiAgICAgcmV0dXJuIEludFNpemUoTGF5b3V0VW5pdDo6bWF4KCksIExheW91dFVu
aXQ6Om1heCgpKTsKIH0KIAotaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRh
KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IE5vZGVSYXJlRGF0YShkb2N1bWVudCkKLSAgICAs
IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygp
KQoraW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKCkKKyAgICA6IG1fbWlu
aW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpKQogICAg
ICwgbV9nZW5lcmF0ZWRCZWZvcmUoMCkKICAgICAsIG1fZ2VuZXJhdGVkQWZ0ZXIoMCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAppbmRleCA1ODRkYmU5ZmUyNGQ1Yzk3YWM4OTg1NWEyNjhlNTQ5MDQ3MzAzZGI4
Li43ODAyYjQ1ZWNhYjJjM2YzNWUyMGY5ZWQ1ZTdlNDQ2ODA2ZDZiM2Y5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC00NDEsMTAgKzQ0MSwxNCBAQCB2b2lkIE5vZGU6OnNldERvY3VtZW50KERvY3VtZW50
KiBkb2N1bWVudCkKIAogdm9pZCBOb2RlOjpzZXRUcmVlU2NvcGUoVHJlZVNjb3BlKiBzY29wZSkK
IHsKLSAgICBpZiAoIWhhc1JhcmVEYXRhKCkgJiYgc2NvcGUtPnJvb3ROb2RlKCktPmlzRG9jdW1l
bnROb2RlKCkpCisgICAgaWYgKCFoYXNCYXNpY1JhcmVEYXRhKCkgJiYgc2NvcGUtPnJvb3ROb2Rl
KCktPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVuc3VyZVJhcmVE
YXRhKCktPnNldFRyZWVTY29wZShzY29wZSk7CisgICAgaWYgKCFoYXNCYXNpY1JhcmVEYXRhKCkp
IHsKKyAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEgPSBOb2RlUmFyZURhdGFCYXNlOjpjcmVhdGUo
c2NvcGUsIG1fZGF0YS5tX3JlbmRlcmVyKTsKKyAgICAgICAgc2V0RmxhZyhIYXNCYXNpY1JhcmVE
YXRhRmxhZyk7CisgICAgfSBlbHNlCisgICAgICAgIHJhcmVEYXRhKCktPnNldFRyZWVTY29wZShz
Y29wZSk7CiB9CiAKIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCkgY29u
c3QKQEAgLTQ4OCwxNSArNDkyLDIxIEBAIE5vZGVSYXJlRGF0YSogTm9kZTo6ZW5zdXJlUmFyZURh
dGEoKQogCiAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gY3JlYXRlUmFyZURhdGEoKS5sZWFrUHRy
KCk7CiAgICAgQVNTRVJUKGRhdGEpOwotICAgIGRhdGEtPnNldFJlbmRlcmVyKG1fZGF0YS5tX3Jl
bmRlcmVyKTsKKyAgICBkYXRhLT5zZXRSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICBkYXRhLT5z
ZXRUcmVlU2NvcGUodHJlZVNjb3BlKCkpOworCisgICAgaWYgKGhhc0Jhc2ljUmFyZURhdGEoKSkK
KyAgICAgICAgZGVsZXRlIG1fZGF0YS5tX3JhcmVEYXRhOworCiAgICAgbV9kYXRhLm1fcmFyZURh
dGEgPSBkYXRhOwotICAgIHNldEZsYWcoSGFzUmFyZURhdGFGbGFnKTsKKyAgICBzZXRGbGFnKEhh
c0Jhc2ljUmFyZURhdGFGbGFnKTsKKwogICAgIHJldHVybiBkYXRhOwogfQogCiBQYXNzT3duUHRy
PE5vZGVSYXJlRGF0YT4gTm9kZTo6Y3JlYXRlUmFyZURhdGEoKQogewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTm9kZVJhcmVEYXRhKGRvY3VtZW50SW50ZXJuYWwoKSkpOworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgTm9kZVJhcmVEYXRhKCkpOwogfQogCiB2b2lkIE5vZGU6OmNsZWFyUmFyZURh
dGEoKQpAQCAtNTEwLDcgKzUyMCw3IEBAIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fZGF0YS5tX3JhcmVEYXRhLT5yZW5kZXJlcigpOwog
ICAgIGRlbGV0ZSBtX2RhdGEubV9yYXJlRGF0YTsKICAgICBtX2RhdGEubV9yZW5kZXJlciA9IHJl
bmRlcmVyOwotICAgIGNsZWFyRmxhZyhIYXNSYXJlRGF0YUZsYWcpOworICAgIGNsZWFyRmxhZyhI
YXNCYXNpY1JhcmVEYXRhRmxhZyk7CiB9CiAKIE5vZGUqIE5vZGU6OnRvTm9kZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAppbmRleCA3YTQ3MGVlYzA2OWJhNjI3M2IxNjU1NjBkNmU3NjljODg0NmIzMGY4Li45ZWZlZTli
MDM3YTIzMTVkYWQ4NDg3YTUwN2QwNzMwMGUyY2FhNmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTExMiw2
ICsxMTIsMTEgQEAgZW51bSBTdHlsZUNoYW5nZVR5cGUgewogCiBjbGFzcyBOb2RlUmFyZURhdGFC
YXNlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTm9kZVJhcmVEYXRhQmFzZSogY3JlYXRlKFRyZWVT
Y29wZSogc2NvcGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IE5vZGVSYXJlRGF0YUJhc2Uoc2NvcGUsIHJlbmRlcmVyKTsKKyAgICB9CisKICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogICAg
IHZvaWQgc2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0g
cmVuZGVyZXI7IH0KIApAQCAtMTE5LDE0ICsxMjQsNzEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VHJlZVNjb3BlKFRyZWVTY29wZSogc2NvcGUpIHsgbV90cmVlU2NvcGUgPSBzY29wZTsgfQogCiAg
ICAgdmlydHVhbCB+Tm9kZVJhcmVEYXRhQmFzZSgpIHsgfQorCisgICAgYm9vbCBpc0Jhc2ljUmFy
ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2lzQmFzaWNSYXJlRGF0YTsgfQorCiBwcm90ZWN0ZWQ6
Ci0gICAgTm9kZVJhcmVEYXRhQmFzZShUcmVlU2NvcGUqIHNjb3BlKQotICAgICAgICA6IG1fdHJl
ZVNjb3BlKHNjb3BlKQorICAgIE5vZGVSYXJlRGF0YUJhc2UoKQorICAgICAgICA6IG1fdGFiSW5k
ZXgoMCkKKyAgICAgICAgLCBtX2NoaWxkSW5kZXgoMCkKKyAgICAgICAgLCBtX2lzQmFzaWNSYXJl
RGF0YShmYWxzZSkKKyAgICAgICAgLCBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseShmYWxzZSkK
KyAgICAgICAgLCBtX2lzRm9jdXNlZChmYWxzZSkKKyAgICAgICAgLCBtX25lZWRzRm9jdXNBcHBl
YXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGZhbHNlKQorICAgICAgICAsIG1fc3R5bGVBZmZl
Y3RlZEJ5RW1wdHkoZmFsc2UpCisgICAgICAgICwgbV9pc0luQ2FudmFzU3VidHJlZShmYWxzZSkK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgICwgbV9jb250YWluc0Z1bGxTY3Jl
ZW5FbGVtZW50KGZhbHNlKQorI2VuZGlmCisjaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQorICAg
ICAgICAsIG1faXNJblRvcExheWVyKGZhbHNlKQorI2VuZGlmCisgICAgICAgICwgbV9jaGlsZHJl
bkFmZmVjdGVkQnlIb3ZlcihmYWxzZSkKKyAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUFj
dGl2ZShmYWxzZSkKKyAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURyYWcoZmFsc2UpCisg
ICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoZmFsc2UpCisgICAg
ICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyhmYWxzZSkKKyAgICAgICAg
LCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoZmFsc2UpCisgICAgICAg
ICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKGZhbHNlKQorICAg
ICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoZmFsc2Up
CiAgICAgewogICAgIH0KIHByaXZhdGU6CisgICAgTm9kZVJhcmVEYXRhQmFzZShUcmVlU2NvcGUq
IHNjb3BlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorICAgICAgICA6IG1fcmVuZGVyZXIocmVu
ZGVyZXIpCisgICAgICAgICwgbV90cmVlU2NvcGUoc2NvcGUpCisgICAgICAgICwgbV9pc0Jhc2lj
UmFyZURhdGEodHJ1ZSkKKyAgICB7CisgICAgfQorCiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRl
cmVyOwogICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7Citwcm90ZWN0ZWQ6CisgICAgc2hvcnQg
bV90YWJJbmRleDsKKyAgICB1bnNpZ25lZCBzaG9ydCBtX2NoaWxkSW5kZXg7CisgICAgYm9vbCBt
X2lzQmFzaWNSYXJlRGF0YSA6IDE7CisgICAgYm9vbCBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRs
eSA6IDE7CisgICAgYm9vbCBtX2lzRm9jdXNlZCA6IDE7CisgICAgYm9vbCBtX25lZWRzRm9jdXNB
cHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoIDogMTsKKyAgICBib29sIG1fc3R5bGVBZmZl
Y3RlZEJ5RW1wdHkgOiAxOworICAgIGJvb2wgbV9pc0luQ2FudmFzU3VidHJlZSA6IDE7CisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGJvb2wgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVt
ZW50IDogMTsKKyNlbmRpZgorI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKKyAgICBib29sIG1f
aXNJblRvcExheWVyIDogMTsKKyNlbmRpZgorICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVjdGVkQnlI
b3ZlciA6IDE7CisgICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZSA6IDE7CisgICAg
Ym9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURyYWcgOiAxOworICAgIC8vIEJpdHMgZm9yIGR5bmFt
aWMgY2hpbGQgbWF0Y2hpbmcuCisgICAgLy8gV2Ugb3B0aW1pemUgZm9yIDpmaXJzdC1jaGlsZCBh
bmQgOmxhc3QtY2hpbGQuIFRoZSBvdGhlciBwb3NpdGlvbmFsIGNoaWxkIHNlbGVjdG9ycyBsaWtl
IG50aC1jaGlsZCBvcgorICAgIC8vICotY2hpbGQtb2YtdHlwZSwgd2Ugd2lsbCBqdXN0IGdpdmUg
dXAgYW5kIHJlLWV2YWx1YXRlIHdoZW5ldmVyIGNoaWxkcmVuIGNoYW5nZSBhdCBhbGwuCisgICAg
Ym9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyA6IDE7CisgICAgYm9vbCBt
X2NoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzIDogMTsKKyAgICBib29sIG1fY2hpbGRy
ZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcyA6IDE7CisgICAgYm9vbCBtX2NoaWxkcmVu
QWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMgOiAxOworICAgIGJvb2wgbV9jaGlsZHJl
bkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyA6IDE7CiB9OwogCiBjbGFzcyBOb2Rl
IDogcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgVHJl
ZVNoYXJlZDxOb2RlLCBDb250YWluZXJOb2RlPiB7CkBAIC01MjMsMTAgKzU4NSwxMCBAQCBwdWJs
aWM6CiAgICAgLy8gSW50ZWdyYXRpb24gd2l0aCByZW5kZXJpbmcgdHJlZQogCiAgICAgLy8gQXMg
cmVuZGVyZXIoKSBpbmNsdWRlcyBhIGJyYW5jaCB5b3Ugc2hvdWxkIGF2b2lkIGNhbGxpbmcgaXQg
cmVwZWF0ZWRseSBpbiBob3QgY29kZSBwYXRocy4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZURhdGEoKSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5yZW5k
ZXJlcigpIDogbV9kYXRhLm1fcmVuZGVyZXI7IH07CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
cigpIGNvbnN0IHsgcmV0dXJuIGhhc0Jhc2ljUmFyZURhdGEoKSA/IG1fZGF0YS5tX3JhcmVEYXRh
LT5yZW5kZXJlcigpIDogbV9kYXRhLm1fcmVuZGVyZXI7IH07CiAgICAgdm9pZCBzZXRSZW5kZXJl
cihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHsKLSAgICAgICAgaWYgKGhhc1JhcmVEYXRh
KCkpCisgICAgICAgIGlmIChoYXNCYXNpY1JhcmVEYXRhKCkpCiAgICAgICAgICAgICBtX2RhdGEu
bV9yYXJlRGF0YS0+c2V0UmVuZGVyZXIocmVuZGVyZXIpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX2RhdGEubV9yZW5kZXJlciA9IHJlbmRlcmVyOwpAQCAtNzEwLDcgKzc3Miw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIElzQWN0aXZlRmxhZyA9IDEgPDwgMTAsCiAgICAgICAgIElzSG92ZXJl
ZEZsYWcgPSAxIDw8IDExLAogICAgICAgICBJbkFjdGl2ZUNoYWluRmxhZyA9IDEgPDwgMTIsCi0g
ICAgICAgIEhhc1JhcmVEYXRhRmxhZyA9IDEgPDwgMTMsCisgICAgICAgIEhhc0Jhc2ljUmFyZURh
dGFGbGFnID0gMSA8PCAxMywKICAgICAgICAgSXNEb2N1bWVudEZyYWdtZW50RmxhZyA9IDEgPDwg
MTQsCiAKICAgICAgICAgLy8gVGhlc2UgYml0cyBhcmUgdXNlZCBieSBkZXJpdmVkIGNsYXNzZXMs
IHB1bGxlZCB1cCBoZXJlIHNvIHRoZXkgY2FuCkBAIC03NzQsOCArODM2LDggQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mKSBjb25zdCB7IH0KICAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9y
dCk7CiAgICAgdm9pZCBjbGVhclRhYkluZGV4RXhwbGljaXRseSgpOwotICAgIAotICAgIGJvb2wg
aGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhhc1JhcmVEYXRhRmxhZyk7IH0K
KworICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBoYXNCYXNpY1JhcmVEYXRh
KCkgJiYgIW1fZGF0YS5tX3JhcmVEYXRhLT5pc0Jhc2ljUmFyZURhdGEoKTsgfQogCiAgICAgTm9k
ZVJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OwogICAgIE5vZGVSYXJlRGF0YSogZW5zdXJlUmFy
ZURhdGEoKTsKQEAgLTgwOCw2ICs4NzAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCk7CiAK
KyAgICBib29sIGhhc0Jhc2ljUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhhc0Jh
c2ljUmFyZURhdGFGbGFnKTsgfQogICAgIHZpcnR1YWwgUGFzc093blB0cjxOb2RlUmFyZURhdGE+
IGNyZWF0ZVJhcmVEYXRhKCk7CiAgICAgYm9vbCByYXJlRGF0YUZvY3VzZWQoKSBjb25zdDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCmluZGV4IDI0ZWYyMzM0YmRkMGMxNWU3Y2UwNDQyMGQ0
YzBlMGZkODBmNDc4NTcuLjRjMTAxMzkxNjI3OTcxNjVlMGEyNzAxYTdiNjlkMDNkOWRkY2QxZDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTE5OSwzMCArMTk5LDggQEAgcHJpdmF0
ZToKIGNsYXNzIE5vZGVSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGFCYXNlIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzogICAgCi0gICAgTm9kZVJhcmVEYXRhKERvY3VtZW50KiBkb2N1bWVudCkKLSAg
ICAgICAgOiBOb2RlUmFyZURhdGFCYXNlKGRvY3VtZW50KQotICAgICAgICAsIG1fY2hpbGROb2Rl
TGlzdCgwKQotICAgICAgICAsIG1fdGFiSW5kZXgoMCkKLSAgICAgICAgLCBtX2NoaWxkSW5kZXgo
MCkKLSAgICAgICAgLCBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseShmYWxzZSkKLSAgICAgICAg
LCBtX2lzRm9jdXNlZChmYWxzZSkKLSAgICAgICAgLCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBk
YXRlU29vbkFmdGVyQXR0YWNoKGZhbHNlKQotICAgICAgICAsIG1fc3R5bGVBZmZlY3RlZEJ5RW1w
dHkoZmFsc2UpCi0gICAgICAgICwgbV9pc0luQ2FudmFzU3VidHJlZShmYWxzZSkKLSNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgICAgICwgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50
KGZhbHNlKQotI2VuZGlmCi0jaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQotICAgICAgICAsIG1f
aXNJblRvcExheWVyKGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVk
QnlIb3ZlcihmYWxzZSkKLSAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZShmYWxz
ZSkKLSAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURyYWcoZmFsc2UpCi0gICAgICAgICwg
bV9jaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoZmFsc2UpCi0gICAgICAgICwgbV9j
aGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyhmYWxzZSkKLSAgICAgICAgLCBtX2NoaWxk
cmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoZmFsc2UpCi0gICAgICAgICwgbV9jaGls
ZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKGZhbHNlKQotICAgICAgICAsIG1f
Y2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoZmFsc2UpCisgICAgTm9k
ZVJhcmVEYXRhKCkKKyAgICAgICAgOiBtX2NoaWxkTm9kZUxpc3QoMCkKICAgICB7CiAgICAgfQog
CkBAIC0zMjYsMzMgKzMwNCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRN
ZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKLXByb3RlY3RlZDoKK3ByaXZh
dGU6CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKICAgICBDaGls
ZE5vZGVMaXN0KiBtX2NoaWxkTm9kZUxpc3Q7Ci0gICAgc2hvcnQgbV90YWJJbmRleDsKLSAgICB1
bnNpZ25lZCBzaG9ydCBtX2NoaWxkSW5kZXg7Ci0gICAgYm9vbCBtX3RhYkluZGV4V2FzU2V0RXhw
bGljaXRseSA6IDE7Ci0gICAgYm9vbCBtX2lzRm9jdXNlZCA6IDE7Ci0gICAgYm9vbCBtX25lZWRz
Rm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoIDogMTsKLSAgICBib29sIG1fc3R5
bGVBZmZlY3RlZEJ5RW1wdHkgOiAxOwotICAgIGJvb2wgbV9pc0luQ2FudmFzU3VidHJlZSA6IDE7
Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGJvb2wgbV9jb250YWluc0Z1bGxTY3Jl
ZW5FbGVtZW50IDogMTsKLSNlbmRpZgotI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKLSAgICBi
b29sIG1faXNJblRvcExheWVyIDogMTsKLSNlbmRpZgotICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVj
dGVkQnlIb3ZlciA6IDE7Ci0gICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZSA6IDE7
Ci0gICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURyYWcgOiAxOwotICAgIC8vIEJpdHMgZm9y
IGR5bmFtaWMgY2hpbGQgbWF0Y2hpbmcuCi0gICAgLy8gV2Ugb3B0aW1pemUgZm9yIDpmaXJzdC1j
aGlsZCBhbmQgOmxhc3QtY2hpbGQuIFRoZSBvdGhlciBwb3NpdGlvbmFsIGNoaWxkIHNlbGVjdG9y
cyBsaWtlIG50aC1jaGlsZCBvcgotICAgIC8vICotY2hpbGQtb2YtdHlwZSwgd2Ugd2lsbCBqdXN0
IGdpdmUgdXAgYW5kIHJlLWV2YWx1YXRlIHdoZW5ldmVyIGNoaWxkcmVuIGNoYW5nZSBhdCBhbGwu
Ci0gICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyA6IDE7Ci0gICAg
Ym9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzIDogMTsKLSAgICBib29sIG1f
Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcyA6IDE7Ci0gICAgYm9vbCBtX2No
aWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMgOiAxOwotICAgIGJvb2wgbV9j
aGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyA6IDE7CiAKICNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIE93blB0cjxWZWN0b3I8T3duUHRyPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4gPiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178044</attachid>
            <date>2012-12-06 11:31:36 -0800</date>
            <delta_ts>2012-12-06 12:17:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104202-20121206112900.patch</filename>
            <type>text/plain</type>
            <size>14614</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU3MjZmYWU1MzY5OGEx
ODg4MWE3ZDRjOGM3NTg1NDI0ZWQ2MzNkYi4uM2Q0ZjlhMGVkNWU0MjFiMTFmMDQ1M2RjNWI3Njhk
MDU2OTMzNTVmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTEyLTA2ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIENyZWF0ZSBvbmx5IE5v
ZGVSYXJlRGF0YUJhc2Ugd2hlbiBzZXR0aW5nIFRyZWVTY29wZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MjAyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBtYW55IGZpZWxkcyBmcm9tIE5vZGVS
YXJlRGF0YSBpbnRvIE5vZGVSYXJlRGF0YUJhc2UgYW5kIHJlbmFtZSBpdAorICAgICAgICBVbmNv
bW1vbk5vZGVEYXRhIGFuZCBhZGQgYSBmbGFnIHRvIGRldGVybWluZSBpZiBhIFVuY29tbW9uTm9k
ZURhdGEgaXMKKyAgICAgICAgYWN0dWFsbHkgYSBmdWxsIE5vZGVSYXJlRGF0YSBpbnN0YW5jZS4g
QnkgbW92aW5nIGZpZWxkcyB1cCBmcm9tIE5vZGVSYXJlRGF0YQorICAgICAgICB3ZSBlbnN1cmUg
dGhhdCB0aGlzIG5ldyBmbGFnIGluIHRoZSBiYXNlIGNsYXNzIGRvZXNuJ3QgbWFrZSBOb2RlUmFy
ZURhdGEKKyAgICAgICAgZ3JvdyBpbiBzaXplLgorCisgICAgICAgIFdlIHRoZW4gbWFrZSBzZXR0
aW5nIHRoZSB0cmVlIHNjb3BlIG9ubHkgYWxsb2NhdGUgdGhlIFVuY29tbW9uTm9kZURhdGEKKyAg
ICAgICAgaW5zdGVhZCBvZiBjcmVhdGluZyB0aGUgZnVsbCBOb2RlUmFyZURhdGEgb3IgRWxlbWVu
dFJhcmVEYXRhLiBUaGlzIGlzCisgICAgICAgIGltcG9ydGFudCBiZWNhdXNlIHdoZW4gcHV0dGlu
ZyBub2RlcyBpbnRvIFNoYWRvd1Jvb3Qgb3IgYW55IGRlc2NlbmRhbnQKKyAgICAgICAgd2UgbXVz
dCBhc3NvY2lhdGUgdGhlIG5vZGUgd2l0aCBhIHRyZWUgc2NvcGUgd2hpY2ggYWRkcyByYXJlIGRh
dGEgdG8gdGhlCisgICAgICAgIG5vZGUgbWFraW5nIE5vZGVSYXJlRGF0YSBhbmQgRWxlbWVudFJh
cmVEYXRhIG5vdCB2ZXJ5IHJhcmUuCisKKyAgICAgICAgT24gNjRiaXQsIHRoaXMgcmVkdWNlcyB0
aGUgb3ZlcmhlYWQgcGVyIGVsZW1lbnQgZnJvbSAxMzYgYnl0ZXMgdG8KKyAgICAgICAgMzIgYnl0
ZXMgZm9yIGEgNzYlIHNhdmluZ3MsIGFuZCBvbiBvdGhlciBub2RlcyBmcm9tIDY0IGJ5dGVzIHRv
IDMyIGJ5dGVzCisgICAgICAgIGZvciBhIDUwJSBzYXZpbmdzLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp0cmVlU2NvcGUpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNyZWF0ZVJhcmVEYXRhKToKKyAg
ICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6CisgICAgICAgIChFbGVtZW50UmFyZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRyZWVT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVSYXJlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpjcmVhdGVSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpjbGVhclJhcmVEYXRhKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6VW5jb21tb25Ob2RlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFVuY29tbW9uTm9kZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6VW5jb21tb25Ob2RlRGF0YTo6flVuY29tbW9uTm9kZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6VW5jb21tb25Ob2RlRGF0YTo6aXNOb2RlUmFyZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VW5jb21tb25Ob2RlRGF0YTo6VW5jb21tb25Ob2RlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpzZXRSZW5kZXJlcik6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
Omhhc1JhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc1VuY29tbW9uTm9kZURh
dGEpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6CisKIDIw
MTItMTItMDYgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAg
ICAgU3BlZWNoIFJlY29nbml0aW9uIEFQSTogQ2hhbmdlIHRoZSBlcnJvciBjb2RlIHRvIGEgc3Ry
aW5nIG9uIFNwZWVjaFJlY29nbml0aW9uRXJyb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNzEz
ZDllNWNkZGMwYzYzODdkNzYyNGIxODVmYWNhMzAyMzAwMzVkZS4uMWFjZDgxYTZiY2M3OGJlMmIy
ODk4MTVhOWQ1OGNmNzZlNTUxOTFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTE1NTQsNyAr
MTU1NCw3IEBAIGlubGluZSBib29sIE5vZGU6OmlzRG9jdW1lbnROb2RlKCkgY29uc3QKIAogaW5s
aW5lIFRyZWVTY29wZSogTm9kZTo6dHJlZVNjb3BlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFz
UmFyZURhdGEoKSA/IG1fZGF0YS5tX3JhcmVEYXRhLT50cmVlU2NvcGUoKSA6IGRvY3VtZW50SW50
ZXJuYWwoKTsKKyAgICByZXR1cm4gaGFzVW5jb21tb25Ob2RlRGF0YSgpID8gbV9kYXRhLm1fcmFy
ZURhdGEtPnRyZWVTY29wZSgpIDogZG9jdW1lbnRJbnRlcm5hbCgpOwogfQogCiBpbmxpbmUgTm9k
ZTo6Tm9kZShEb2N1bWVudCogZG9jdW1lbnQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAppbmRleCBhYjE5OWYwMThkNTI5ZjQ1Mzk1ZDEwZTJjMmQ4NWEzOTlkNjdj
YzU0Li45MzBkYmVlYWEzOTEzYmNlYTE2ZWM1NjA2ZTI1YzQ0OGYyOWRmOGU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCkBAIC0yMTcsNyArMjE3LDcgQEAgaW5saW5lIEVsZW1lbnRSYXJlRGF0YSog
RWxlbWVudDo6ZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkKIAogUGFzc093blB0cjxOb2RlUmFyZURh
dGE+IEVsZW1lbnQ6OmNyZWF0ZVJhcmVEYXRhKCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEVsZW1lbnRSYXJlRGF0YShkb2N1bWVudEludGVybmFsKCkpKTsKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEVsZW1lbnRSYXJlRGF0YSgpKTsKIH0KIAogREVGSU5FX1ZJUlRVQUxfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGJsdXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJl
RGF0YS5oCmluZGV4IDc5MDVjYjU0OGU1ZmZjNDlmMjA0YTM5ZGVjNTAxYzQwOWVkMmZhMTUuLjg4
ZjI2YmQxNjRhYzc1M2FmZGRlMzhmZGYyOGQ0MTNkY2YwMWIxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudFJhcmVEYXRhLmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBFbGVtZW50UmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVEYXRhIHsKIHB1YmxpYzoK
LSAgICBFbGVtZW50UmFyZURhdGEoRG9jdW1lbnQqKTsKKyAgICBFbGVtZW50UmFyZURhdGEoKTsK
ICAgICB2aXJ0dWFsIH5FbGVtZW50UmFyZURhdGEoKTsKIAogICAgIHZvaWQgc2V0UHNldWRvRWxl
bWVudChQc2V1ZG9JZCwgUGFzc1JlZlB0cjxQc2V1ZG9FbGVtZW50Pik7CkBAIC0xMzAsOSArMTMw
LDggQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQogICAg
IHJldHVybiBJbnRTaXplKExheW91dFVuaXQ6Om1heCgpLCBMYXlvdXRVbml0OjptYXgoKSk7CiB9
CiAKLWlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YShEb2N1bWVudCogZG9j
dW1lbnQpCi0gICAgOiBOb2RlUmFyZURhdGEoZG9jdW1lbnQpCi0gICAgLCBtX21pbmltdW1TaXpl
Rm9yUmVzaXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKK2lubGluZSBFbGVt
ZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSgpCisgICAgOiBtX21pbmltdW1TaXplRm9yUmVz
aXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKICAgICAsIG1fZ2VuZXJhdGVk
QmVmb3JlKDApCiAgICAgLCBtX2dlbmVyYXRlZEFmdGVyKDApCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5k
ZXggNTg0ZGJlOWZlMjRkNWM5N2FjODk4NTVhMjY4ZTU0OTA0NzMwM2RiOC4uODgzMzdmZGViMGQx
MGJhZDc3YzY4ODhkNWEwZDFlZmMzZGZiN2I2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtNDQxLDEw
ICs0NDEsMTQgQEAgdm9pZCBOb2RlOjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAK
IHZvaWQgTm9kZTo6c2V0VHJlZVNjb3BlKFRyZWVTY29wZSogc2NvcGUpCiB7Ci0gICAgaWYgKCFo
YXNSYXJlRGF0YSgpICYmIHNjb3BlLT5yb290Tm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgpKQorICAg
IGlmICghaGFzVW5jb21tb25Ob2RlRGF0YSgpICYmIHNjb3BlLT5yb290Tm9kZSgpLT5pc0RvY3Vt
ZW50Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRU
cmVlU2NvcGUoc2NvcGUpOworICAgIGlmICghaGFzVW5jb21tb25Ob2RlRGF0YSgpKSB7CisgICAg
ICAgIG1fZGF0YS5tX3JhcmVEYXRhID0gVW5jb21tb25Ob2RlRGF0YTo6Y3JlYXRlKHNjb3BlLCBt
X2RhdGEubV9yZW5kZXJlcik7CisgICAgICAgIHNldEZsYWcoSGFzVW5jb21tb25Ob2RlRGF0YSk7
CisgICAgfSBlbHNlCisgICAgICAgIHJhcmVEYXRhKCktPnNldFRyZWVTY29wZShzY29wZSk7CiB9
CiAKIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCkgY29uc3QKQEAgLTQ4
OCwxNSArNDkyLDIxIEBAIE5vZGVSYXJlRGF0YSogTm9kZTo6ZW5zdXJlUmFyZURhdGEoKQogCiAg
ICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gY3JlYXRlUmFyZURhdGEoKS5sZWFrUHRyKCk7CiAgICAg
QVNTRVJUKGRhdGEpOwotICAgIGRhdGEtPnNldFJlbmRlcmVyKG1fZGF0YS5tX3JlbmRlcmVyKTsK
KyAgICBkYXRhLT5zZXRSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICBkYXRhLT5zZXRUcmVlU2Nv
cGUodHJlZVNjb3BlKCkpOworCisgICAgaWYgKGhhc1VuY29tbW9uTm9kZURhdGEoKSkKKyAgICAg
ICAgZGVsZXRlIG1fZGF0YS5tX3JhcmVEYXRhOworCiAgICAgbV9kYXRhLm1fcmFyZURhdGEgPSBk
YXRhOwotICAgIHNldEZsYWcoSGFzUmFyZURhdGFGbGFnKTsKKyAgICBzZXRGbGFnKEhhc1VuY29t
bW9uTm9kZURhdGEpOworCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKIFBhc3NPd25QdHI8Tm9kZVJh
cmVEYXRhPiBOb2RlOjpjcmVhdGVSYXJlRGF0YSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBOb2RlUmFyZURhdGEoZG9jdW1lbnRJbnRlcm5hbCgpKSk7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBOb2RlUmFyZURhdGEoKSk7CiB9CiAKIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCkBA
IC01MTAsNyArNTIwLDcgQEAgdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbV9kYXRhLm1fcmFyZURhdGEtPnJlbmRlcmVyKCk7CiAgICAgZGVs
ZXRlIG1fZGF0YS5tX3JhcmVEYXRhOwogICAgIG1fZGF0YS5tX3JlbmRlcmVyID0gcmVuZGVyZXI7
Ci0gICAgY2xlYXJGbGFnKEhhc1JhcmVEYXRhRmxhZyk7CisgICAgY2xlYXJGbGFnKEhhc1VuY29t
bW9uTm9kZURhdGEpOwogfQogCiBOb2RlKiBOb2RlOjp0b05vZGUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXgg
N2E0NzBlZWMwNjliYTYyNzNiMTY1NTYwZDZlNzY5Yzg4NDZiMzBmOC4uNmJkNDgzZjY4ZDAwOWZl
ZDYzMWIwMTI2NjMyMTg3YmI1ZDkwZjgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0xMTAsMjMgKzExMCw4
NSBAQCBlbnVtIFN0eWxlQ2hhbmdlVHlwZSB7CiAgICAgU3ludGhldGljU3R5bGVDaGFuZ2UgPSAz
IDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0CiB9OwogCi1jbGFzcyBOb2RlUmFyZURhdGFCYXNlIHsK
K2NsYXNzIFVuY29tbW9uTm9kZURhdGEgewogcHVibGljOgorICAgIHN0YXRpYyBVbmNvbW1vbk5v
ZGVEYXRhKiBjcmVhdGUoVHJlZVNjb3BlKiBzY29wZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVW5jb21tb25Ob2RlRGF0YShzY29wZSwgcmVuZGVy
ZXIpOworICAgIH0KKwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmVyOyB9CiAgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKSB7IG1fcmVuZGVyZXIgPSByZW5kZXJlcjsgfQogCiAgICAgVHJlZVNjb3BlKiB0cmVlU2Nv
cGUoKSBjb25zdCB7IHJldHVybiBtX3RyZWVTY29wZTsgfQogICAgIHZvaWQgc2V0VHJlZVNjb3Bl
KFRyZWVTY29wZSogc2NvcGUpIHsgbV90cmVlU2NvcGUgPSBzY29wZTsgfQogCi0gICAgdmlydHVh
bCB+Tm9kZVJhcmVEYXRhQmFzZSgpIHsgfQorICAgIHZpcnR1YWwgflVuY29tbW9uTm9kZURhdGEo
KSB7IH0KKworICAgIGJvb2wgaXNOb2RlUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2lzTm9k
ZVJhcmVEYXRhOyB9CisKIHByb3RlY3RlZDoKLSAgICBOb2RlUmFyZURhdGFCYXNlKFRyZWVTY29w
ZSogc2NvcGUpCi0gICAgICAgIDogbV90cmVlU2NvcGUoc2NvcGUpCisgICAgVW5jb21tb25Ob2Rl
RGF0YSgpCisgICAgICAgIDogbV90YWJJbmRleCgwKQorICAgICAgICAsIG1fY2hpbGRJbmRleCgw
KQorICAgICAgICAsIG1faXNOb2RlUmFyZURhdGEodHJ1ZSkKKyAgICAgICAgLCBtX3RhYkluZGV4
V2FzU2V0RXhwbGljaXRseShmYWxzZSkKKyAgICAgICAgLCBtX2lzRm9jdXNlZChmYWxzZSkKKyAg
ICAgICAgLCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGZhbHNl
KQorICAgICAgICAsIG1fc3R5bGVBZmZlY3RlZEJ5RW1wdHkoZmFsc2UpCisgICAgICAgICwgbV9p
c0luQ2FudmFzU3VidHJlZShmYWxzZSkKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAg
ICAgICwgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KGZhbHNlKQorI2VuZGlmCisjaWYgRU5B
QkxFKERJQUxPR19FTEVNRU5UKQorICAgICAgICAsIG1faXNJblRvcExheWVyKGZhbHNlKQorI2Vu
ZGlmCisgICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlIb3ZlcihmYWxzZSkKKyAgICAgICAg
LCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZShmYWxzZSkKKyAgICAgICAgLCBtX2NoaWxkcmVu
QWZmZWN0ZWRCeURyYWcoZmFsc2UpCisgICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlGaXJz
dENoaWxkUnVsZXMoZmFsc2UpCisgICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hp
bGRSdWxlcyhmYWxzZSkKKyAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFj
ZW50UnVsZXMoZmFsc2UpCisgICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9z
aXRpb25hbFJ1bGVzKGZhbHNlKQorICAgICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dh
cmRQb3NpdGlvbmFsUnVsZXMoZmFsc2UpCiAgICAgewogICAgIH0KIHByaXZhdGU6CisgICAgVW5j
b21tb25Ob2RlRGF0YShUcmVlU2NvcGUqIHNjb3BlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQor
ICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisgICAgICAgICwgbV90cmVlU2NvcGUoc2Nv
cGUpCisgICAgICAgICwgbV9pc05vZGVSYXJlRGF0YShmYWxzZSkKKyAgICB7CisgICAgfQorCiAg
ICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwogICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7
Citwcm90ZWN0ZWQ6CisgICAgc2hvcnQgbV90YWJJbmRleDsKKyAgICB1bnNpZ25lZCBzaG9ydCBt
X2NoaWxkSW5kZXg7CisgICAgYm9vbCBtX2lzTm9kZVJhcmVEYXRhIDogMTsKKyAgICBib29sIG1f
dGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5IDogMTsKKyAgICBib29sIG1faXNGb2N1c2VkIDogMTsK
KyAgICBib29sIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggOiAx
OworICAgIGJvb2wgbV9zdHlsZUFmZmVjdGVkQnlFbXB0eSA6IDE7CisgICAgYm9vbCBtX2lzSW5D
YW52YXNTdWJ0cmVlIDogMTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgYm9vbCBt
X2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQgOiAxOworI2VuZGlmCisjaWYgRU5BQkxFKERJQUxP
R19FTEVNRU5UKQorICAgIGJvb2wgbV9pc0luVG9wTGF5ZXIgOiAxOworI2VuZGlmCisgICAgYm9v
bCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUhvdmVyIDogMTsKKyAgICBib29sIG1fY2hpbGRyZW5BZmZl
Y3RlZEJ5QWN0aXZlIDogMTsKKyAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5RHJhZyA6IDE7
CisgICAgLy8gQml0cyBmb3IgZHluYW1pYyBjaGlsZCBtYXRjaGluZy4KKyAgICAvLyBXZSBvcHRp
bWl6ZSBmb3IgOmZpcnN0LWNoaWxkIGFuZCA6bGFzdC1jaGlsZC4gVGhlIG90aGVyIHBvc2l0aW9u
YWwgY2hpbGQgc2VsZWN0b3JzIGxpa2UgbnRoLWNoaWxkIG9yCisgICAgLy8gKi1jaGlsZC1vZi10
eXBlLCB3ZSB3aWxsIGp1c3QgZ2l2ZSB1cCBhbmQgcmUtZXZhbHVhdGUgd2hlbmV2ZXIgY2hpbGRy
ZW4gY2hhbmdlIGF0IGFsbC4KKyAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGls
ZFJ1bGVzIDogMTsKKyAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMg
OiAxOworICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzIDog
MTsKKyAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyA6
IDE7CisgICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVz
IDogMTsKIH07CiAKIGNsYXNzIE5vZGUgOiBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBTY3Jp
cHRXcmFwcGFibGUsIHB1YmxpYyBUcmVlU2hhcmVkPE5vZGUsIENvbnRhaW5lck5vZGU+IHsKQEAg
LTUyMywxMCArNTg1LDEwIEBAIHB1YmxpYzoKICAgICAvLyBJbnRlZ3JhdGlvbiB3aXRoIHJlbmRl
cmluZyB0cmVlCiAKICAgICAvLyBBcyByZW5kZXJlcigpIGluY2x1ZGVzIGEgYnJhbmNoIHlvdSBz
aG91bGQgYXZvaWQgY2FsbGluZyBpdCByZXBlYXRlZGx5IGluIGhvdCBjb2RlIHBhdGhzLgotICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBoYXNSYXJlRGF0YSgpID8g
bV9kYXRhLm1fcmFyZURhdGEtPnJlbmRlcmVyKCkgOiBtX2RhdGEubV9yZW5kZXJlcjsgfTsKKyAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gaGFzVW5jb21tb25Ob2Rl
RGF0YSgpID8gbV9kYXRhLm1fcmFyZURhdGEtPnJlbmRlcmVyKCkgOiBtX2RhdGEubV9yZW5kZXJl
cjsgfTsKICAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAg
ewotICAgICAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgaWYgKGhhc1VuY29tbW9uTm9k
ZURhdGEoKSkKICAgICAgICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5zZXRSZW5kZXJlcihyZW5k
ZXJlcik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZGF0YS5tX3JlbmRlcmVyID0gcmVu
ZGVyZXI7CkBAIC03MTAsNyArNzcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgSXNBY3RpdmVGbGFn
ID0gMSA8PCAxMCwKICAgICAgICAgSXNIb3ZlcmVkRmxhZyA9IDEgPDwgMTEsCiAgICAgICAgIElu
QWN0aXZlQ2hhaW5GbGFnID0gMSA8PCAxMiwKLSAgICAgICAgSGFzUmFyZURhdGFGbGFnID0gMSA8
PCAxMywKKyAgICAgICAgSGFzVW5jb21tb25Ob2RlRGF0YSA9IDEgPDwgMTMsCiAgICAgICAgIElz
RG9jdW1lbnRGcmFnbWVudEZsYWcgPSAxIDw8IDE0LAogCiAgICAgICAgIC8vIFRoZXNlIGJpdHMg
YXJlIHVzZWQgYnkgZGVyaXZlZCBjbGFzc2VzLCBwdWxsZWQgdXAgaGVyZSBzbyB0aGV5IGNhbgpA
QCAtNzc0LDggKzgzNiw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVz
b3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3QgeyB9CiAgICAgdm9p
ZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQpOwogICAgIHZvaWQgY2xlYXJUYWJJbmRleEV4
cGxpY2l0bHkoKTsKLSAgICAKLSAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4g
Z2V0RmxhZyhIYXNSYXJlRGF0YUZsYWcpOyB9CisKKyAgICBib29sIGhhc1JhcmVEYXRhKCkgY29u
c3QgeyByZXR1cm4gaGFzVW5jb21tb25Ob2RlRGF0YSgpICYmIG1fZGF0YS5tX3JhcmVEYXRhLT5p
c05vZGVSYXJlRGF0YSgpOyB9CiAKICAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7
CiAgICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOwpAQCAtODA4LDYgKzg3MCw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCk7CiAgICAgdmlydHVh
bCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKTsKIAorICAgIGJvb2wgaGFzVW5jb21tb25Ob2RlRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSGFzVW5jb21tb25Ob2RlRGF0YSk7IH0KICAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8Tm9kZVJhcmVEYXRhPiBjcmVhdGVSYXJlRGF0YSgpOwogICAgIGJv
b2wgcmFyZURhdGFGb2N1c2VkKCkgY29uc3Q7CiAKQEAgLTg0NCw3ICs5MDcsNyBAQCBwcml2YXRl
OgogICAgIHVuaW9uIERhdGFVbmlvbiB7CiAgICAgICAgIERhdGFVbmlvbigpIDogbV9yZW5kZXJl
cigwKSB7IH0KICAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwotICAgICAgICBOb2Rl
UmFyZURhdGFCYXNlKiBtX3JhcmVEYXRhOworICAgICAgICBVbmNvbW1vbk5vZGVEYXRhKiBtX3Jh
cmVEYXRhOwogICAgIH0gbV9kYXRhOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgKaW5kZXggMjRlZjIzMzRiZGQwYzE1ZTdjZTA0NDIwZDRjMGUwZmQ4MGY0Nzg1Ny4uYzkw
NDlhYzljZWE3ZjgzZDVmODliNjk4NjdhNzU4ZGNjM2UyOGJkNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
UmFyZURhdGEuaApAQCAtMTk2LDMzICsxOTYsMTEgQEAgcHJpdmF0ZToKICAgICBUYWdOb2RlTGlz
dENhY2hlTlMgbV90YWdOb2RlTGlzdENhY2hlTlM7CiB9OwogCi1jbGFzcyBOb2RlUmFyZURhdGEg
OiBwdWJsaWMgTm9kZVJhcmVEYXRhQmFzZSB7CitjbGFzcyBOb2RlUmFyZURhdGEgOiBwdWJsaWMg
VW5jb21tb25Ob2RlRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZVJhcmVEYXRh
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6ICAgIAotICAgIE5vZGVSYXJlRGF0
YShEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgICAgIDogTm9kZVJhcmVEYXRhQmFzZShkb2N1bWVu
dCkKLSAgICAgICAgLCBtX2NoaWxkTm9kZUxpc3QoMCkKLSAgICAgICAgLCBtX3RhYkluZGV4KDAp
Ci0gICAgICAgICwgbV9jaGlsZEluZGV4KDApCi0gICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4
cGxpY2l0bHkoZmFsc2UpCi0gICAgICAgICwgbV9pc0ZvY3VzZWQoZmFsc2UpCi0gICAgICAgICwg
bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkKLSAgICAg
ICAgLCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5KGZhbHNlKQotICAgICAgICAsIG1faXNJbkNhbnZh
c1N1YnRyZWUoZmFsc2UpCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAgICAsIG1f
Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChmYWxzZSkKLSNlbmRpZgotI2lmIEVOQUJMRShESUFM
T0dfRUxFTUVOVCkKLSAgICAgICAgLCBtX2lzSW5Ub3BMYXllcihmYWxzZSkKLSNlbmRpZgotICAg
ICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoZmFsc2UpCi0gICAgICAgICwgbV9jaGls
ZHJlbkFmZmVjdGVkQnlBY3RpdmUoZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVk
QnlEcmFnKGZhbHNlKQotICAgICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1
bGVzKGZhbHNlKQotICAgICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMo
ZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVz
KGZhbHNlKQotICAgICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxS
dWxlcyhmYWxzZSkKLSAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKGZhbHNlKQorICAgIE5vZGVSYXJlRGF0YSgpCisgICAgICAgIDogbV9jaGlsZE5v
ZGVMaXN0KDApCiAgICAgewogICAgIH0KIApAQCAtMzI2LDMzICszMDQsOSBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNv
bnN0OwogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0
YT4gbV9ub2RlTGlzdHM7CiAgICAgQ2hpbGROb2RlTGlzdCogbV9jaGlsZE5vZGVMaXN0OwotICAg
IHNob3J0IG1fdGFiSW5kZXg7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9jaGlsZEluZGV4OwotICAg
IGJvb2wgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgOiAxOwotICAgIGJvb2wgbV9pc0ZvY3Vz
ZWQgOiAxOwotICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0
dGFjaCA6IDE7Ci0gICAgYm9vbCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5IDogMTsKLSAgICBib29s
IG1faXNJbkNhbnZhc1N1YnRyZWUgOiAxOwotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAg
ICBib29sIG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCA6IDE7Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoRElBTE9HX0VMRU1FTlQpCi0gICAgYm9vbCBtX2lzSW5Ub3BMYXllciA6IDE7Ci0jZW5kaWYK
LSAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIgOiAxOwotICAgIGJvb2wgbV9jaGls
ZHJlbkFmZmVjdGVkQnlBY3RpdmUgOiAxOwotICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVjdGVkQnlE
cmFnIDogMTsKLSAgICAvLyBCaXRzIGZvciBkeW5hbWljIGNoaWxkIG1hdGNoaW5nLgotICAgIC8v
IFdlIG9wdGltaXplIGZvciA6Zmlyc3QtY2hpbGQgYW5kIDpsYXN0LWNoaWxkLiBUaGUgb3RoZXIg
cG9zaXRpb25hbCBjaGlsZCBzZWxlY3RvcnMgbGlrZSBudGgtY2hpbGQgb3IKLSAgICAvLyAqLWNo
aWxkLW9mLXR5cGUsIHdlIHdpbGwganVzdCBnaXZlIHVwIGFuZCByZS1ldmFsdWF0ZSB3aGVuZXZl
ciBjaGlsZHJlbiBjaGFuZ2UgYXQgYWxsLgotICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVjdGVkQnlG
aXJzdENoaWxkUnVsZXMgOiAxOwotICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hp
bGRSdWxlcyA6IDE7Ci0gICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50
UnVsZXMgOiAxOwotICAgIGJvb2wgbV9jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25h
bFJ1bGVzIDogMTsKLSAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlv
bmFsUnVsZXMgOiAxOwogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBPd25Q
dHI8VmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+ID4gbV9tdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>