<?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>62358</bug_id>
          
          <creation_ts>2011-06-08 23:37:49 -0700</creation_ts>
          <short_desc>Needs a unified way to handle a case when a shadow host is focused.</short_desc>
          <delta_ts>2011-06-29 02:40:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61409</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>morrita</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>417854</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-08 23:37:49 -0700</bug_when>
    <thetext>Let me summarize the current status here:

 * &lt;input type=text&gt; element, and &lt;textarea&gt; element
    - They use a shadow root internally. They have a focusable element, &lt;DIV&gt;, in their shadow root.
    - They do extra works in their focus() method. Due to their extra works, a FocusController should treat them specially.
    - Tab traversal also treats them specially. Tab traversal doesn&apos;t look for a focusable element in their shadow root.

 * &lt;kengen&gt; elements, as a representative of usual shadow host elements.
    - &lt;keygen&gt; elements has a focusable &apos;select&apos; element in the shadow root.
    - &lt;keygen&gt; element doesn&apos;t do any extra works in focus() method, so even if we call keygenelement.focus(), a internal &apos;select&apos; element cannot get focused. Which means we can not change the value by keyboard, &lt;Up&gt; or &lt;Down&gt;.
    - Tab traversal can find a internal &lt;select&gt; element and can focus it. Which means that once we focus it by &lt;Tab&gt; key, we can change the value by keyboard, &lt;UP&gt; or &lt;Down&gt;.

It is nice to get rid of this &apos;gap&apos;. Let me update this bugzilla entty once I have some ideas to handle this gap nicely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417967</commentid>
    <comment_count>1</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-09 06:13:54 -0700</bug_when>
    <thetext>How about the following simple rule?

  - If a shadow host is focused (either its focus() is called or it is traversed by tab key), we look for the fist focusable element in its shadow root further and focus that. If such an element is not found in a shadow root, focus the shadow host itself.
  - If a shadow host doesn&apos;t like this behavior, the shadow host should set tabindex of all focusable elements in the shadow root to &apos;-1&apos; beforehand so that the shadow host itself is focused.
    We should update &lt;input&gt; or &lt;textarea&gt; element to set tabindex of their focusable elements in their shadow root to &apos;-1&apos; when they are created.

I tried this approach and it seems to work well so far.
If you have any suggestions or opinions, that would be highly welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417999</commentid>
    <comment_count>2</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2011-06-09 07:20:02 -0700</bug_when>
    <thetext>I like the simplicity of that rule. I think it covers most of the use cases.

It is possible to create pathological cases where we want *both* the host and something in the shadow to be focused. For example:

&lt;button&gt;foo&lt;/button&gt;

var b = document.createElement(&apos;button&apos;);
b.textContent = bar;
document.querySelector(&apos;button&apos;).appendChild(b);

This makes a button-on-a-button and you can focus them individually. So if we want to implement button using shadow DOM, is it possible to support a case like this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418040</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-09 08:52:20 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; How about the following simple rule?
&gt; 
&gt;   - If a shadow host is focused (either its focus() is called or it is traversed by tab key), we look for the fist focusable element in its shadow root further and focus that. If such an element is not found in a shadow root, focus the shadow host itself.
&gt;   - If a shadow host doesn&apos;t like this behavior, the shadow host should set tabindex of all focusable elements in the shadow root to &apos;-1&apos; beforehand so that the shadow host itself is focused.
&gt;     We should update &lt;input&gt; or &lt;textarea&gt; element to set tabindex of their focusable elements in their shadow root to &apos;-1&apos; when they are created.
&gt; 
&gt; I tried this approach and it seems to work well so far.
&gt; If you have any suggestions or opinions, that would be highly welcome.

SGTM. We should write this done someplace.... Like a spec or something :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426800</commentid>
    <comment_count>4</comment_count>
      <attachid>98475</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-24 02:54:17 -0700</bug_when>
    <thetext>Created attachment 98475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426802</commentid>
    <comment_count>5</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-24 03:11:35 -0700</bug_when>
    <thetext>I posted a patch, which should be a first step to handle a focus event on a shadow-host.

There remains a lot to do as follows. These might be addressed separately in other patches:

- We should set tabindex=-1 to some elements in a shadow root of shadow host elements, such as &lt;input&gt; or &lt;video&gt;.  This patch simply ignores such shadow host elements so that this does not break existing layout tests.
- Elements in a shadow &lt;content&gt; is not considered in this patch. These elements won&apos;t be automatically focused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427782</commentid>
    <comment_count>6</comment_count>
      <attachid>98475</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-06-27 01:54:21 -0700</bug_when>
    <thetext>Comment on attachment 98475
Patch

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

&gt; LayoutTests/fast/dom/shadow/shadow-host-transfer-focus.html:16
&gt; +    return layoutTestController.ensureShadowRoot(shadowHost);

I guess dominicc moved this method to window.internals.

&gt; LayoutTests/fast/dom/shadow/shadow-host-transfer-focus.html:49
&gt; +

Illustrative comments for the tree shape is welcome ;-)

&gt; LayoutTests/fast/dom/shadow/shadow-host-transfer-focus.html:59
&gt; +    var element = window[id];

we prefer getElementById()

&gt; Source/WebCore/dom/Element.cpp:1590
&gt; +        if (Page* page = doc-&gt;page()) {

I think this logic should be owned by ShadowRoot, not Element.

&gt; Source/WebCore/page/FocusController.cpp:174
&gt; +            // skipping these elements is the safest way to keep an compatibility.

nit: an -&gt; a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427855</commentid>
    <comment_count>7</comment_count>
      <attachid>98704</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-27 05:06:34 -0700</bug_when>
    <thetext>Created attachment 98704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427856</commentid>
    <comment_count>8</comment_count>
      <attachid>98475</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-27 05:10:07 -0700</bug_when>
    <thetext>Comment on attachment 98475
Patch

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

&gt;&gt; LayoutTests/fast/dom/shadow/shadow-host-transfer-focus.html:16
&gt;&gt; +    return layoutTestController.ensureShadowRoot(shadowHost);
&gt; 
&gt; I guess dominicc moved this method to window.internals.

Done. Now it uses window.internals.ensureShadowRoot(...)

&gt;&gt; LayoutTests/fast/dom/shadow/shadow-host-transfer-focus.html:49
&gt;&gt; +
&gt; 
&gt; Illustrative comments for the tree shape is welcome ;-)

Done.

&gt;&gt; LayoutTests/fast/dom/shadow/shadow-host-transfer-focus.html:59
&gt;&gt; +    var element = window[id];
&gt; 
&gt; we prefer getElementById()

We can not use getElementById here because the element doesn&apos;t have &apos;id&apos; yet. :)
We set it in the following line.

&gt;&gt; Source/WebCore/dom/Element.cpp:1590
&gt;&gt; +        if (Page* page = doc-&gt;page()) {
&gt; 
&gt; I think this logic should be owned by ShadowRoot, not Element.

That sounds nice. But it turned out that it wouldn&apos;t be so nice to have such a method in ShadowRoot because we should pass the shadow host to FocusController::deepFocusableElement as an argument, 
So I&apos;ve moved the code into FocusController as FocusController::transferFocusToElementInShadowRoot.

&gt;&gt; Source/WebCore/page/FocusController.cpp:174
&gt;&gt; +            // skipping these elements is the safest way to keep an compatibility.
&gt; 
&gt; nit: an -&gt; a

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428618</commentid>
    <comment_count>9</comment_count>
      <attachid>98704</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-06-27 21:42:48 -0700</bug_when>
    <thetext>Comment on attachment 98704
Patch

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

Thanks for the update!
I&apos;d like to have one more turn.

&gt; Source/WebCore/ChangeLog:14
&gt; +        That should be addressed in another patch.

Could you file a bug for this? It would block 59802.

&gt; Source/WebCore/ChangeLog:21
&gt; +        (WebCore::FocusController::deepFocusableNode):

Could you update the description?

&gt; Source/WebCore/page/FocusController.cpp:159
&gt; +bool FocusController::transferFocusToElementInShadowRoot(Element* shadowHost, bool restorePreviousSelection)

Could you define a two-value enum instead of bool? It&apos;s a recent WebCore trend.

&gt; Source/WebCore/page/FocusController.cpp:162
&gt; +    Node* node = deepFocusableNode(FocusDirectionForward, shadowHost, 0);

I&apos;d love to have more informative name.

&gt; Source/WebCore/page/FocusController.cpp:163
&gt; +    if (shadowHost != node) {

How about to exit  early? It&apos;s more preferable in general.

&gt; Source/WebCore/page/FocusController.cpp:186
&gt; +            if (node-&gt;hasTagName(inputTag) || node-&gt;hasTagName(textareaTag) || node-&gt;hasTagName(videoTag) || node-&gt;hasTagName(audioTag))

I might be better to extract this conditional to a function like hasCustomFocusLogic or something.
Then we can use it for an assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428779</commentid>
    <comment_count>10</comment_count>
      <attachid>98704</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-28 03:27:10 -0700</bug_when>
    <thetext>Comment on attachment 98704
Patch

Thank you for the review.

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

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        That should be addressed in another patch.
&gt; 
&gt; Could you file a bug for this? It would block 59802.

I&apos;ve filed it as bug 63522.

&gt;&gt; Source/WebCore/ChangeLog:21
&gt;&gt; +        (WebCore::FocusController::deepFocusableNode):
&gt; 
&gt; Could you update the description?

Ops. Sorry. 
I&apos;ve updated the description.

&gt;&gt; Source/WebCore/page/FocusController.cpp:159
&gt;&gt; +bool FocusController::transferFocusToElementInShadowRoot(Element* shadowHost, bool restorePreviousSelection)
&gt; 
&gt; Could you define a two-value enum instead of bool? It&apos;s a recent WebCore trend.

Sure. I&apos;ve defined enum IsFocusTransfered.

&gt;&gt; Source/WebCore/page/FocusController.cpp:162
&gt;&gt; +    Node* node = deepFocusableNode(FocusDirectionForward, shadowHost, 0);
&gt; 
&gt; I&apos;d love to have more informative name.

Okay. I&apos;ve renamed it to more descriptive one.

&gt;&gt; Source/WebCore/page/FocusController.cpp:163
&gt;&gt; +    if (shadowHost != node) {
&gt; 
&gt; How about to exit  early? It&apos;s more preferable in general.

Done.

&gt;&gt; Source/WebCore/page/FocusController.cpp:186
&gt;&gt; +            if (node-&gt;hasTagName(inputTag) || node-&gt;hasTagName(textareaTag) || node-&gt;hasTagName(videoTag) || node-&gt;hasTagName(audioTag))
&gt; 
&gt; I might be better to extract this conditional to a function like hasCustomFocusLogic or something.
&gt; Then we can use it for an assertion.

I&apos;ve extracted this to &apos;hasCustomFocusLogic&apos; as static inline function.
To keep consistency, I&apos;ve also replaced a token of &apos;inline static&apos; with a &apos;static inline&apos; in the same file because &apos;static inline&apos; seems to be more common on WebKit code base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428780</commentid>
    <comment_count>11</comment_count>
      <attachid>98893</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-28 03:28:51 -0700</bug_when>
    <thetext>Created attachment 98893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429475</commentid>
    <comment_count>12</comment_count>
      <attachid>99055</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-29 01:43:40 -0700</bug_when>
    <thetext>Created attachment 99055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429476</commentid>
    <comment_count>13</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-29 01:47:23 -0700</bug_when>
    <thetext>I&apos;ve updated a patch, as Morita-san told me that we should use enum for &apos;bool restorePreviousSelection&apos;, not for a return value.
Because it will be likely that we should touch a tons of files in order to change all &apos;bool restorePreviousSelection&apos; to enum, such a refactoring would be better to be done in another patch.

&gt;&gt; +bool FocusController::transferFocusToElementInShadowRoot(Element* shadowHost, bool restorePreviousSelection)

(In reply to comment #12)
&gt; Created an attachment (id=99055) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429492</commentid>
    <comment_count>14</comment_count>
      <attachid>99055</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 02:40:11 -0700</bug_when>
    <thetext>Comment on attachment 99055
Patch

Clearing flags on attachment: 99055

Committed r90004: &lt;http://trac.webkit.org/changeset/90004&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429493</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 02:40:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98475</attachid>
            <date>2011-06-24 02:54:17 -0700</date>
            <delta_ts>2011-06-27 05:10:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62358-20110624185416.patch</filename>
            <type>text/plain</type>
            <size>9377</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk2NTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmZGNhYTRlYjVkOTgzZWRiN2ZkMjc3
NDY4ODNjMTczNWUxZWY1MjM3Li45ZDJlYTE0Yzc4ZGY0NTllZTMzOTFiYzQwMmM4MmJlODI0OGI1
ZjQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMjQgIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1ha2UgYSBzaGFkb3cgaG9zdCB0cmFuc2ZlciBhIGZvY3VzIHRvIHRoZSBmaXJz
dCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3Qgd2hlbiBpdHMgZm9jdXMoKSBp
cyBjYWxsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjM1OC4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXNuJ3QgdGFrZSBhbiBlZmZlY3Qgb24g
dGhlIGZvbGxvd2luZyBlbGVtZW50cyB0byBrZWVwIGEgY29tcGF0aWJpbGl0eS4KKyAgICAgICAg
LSA8aW5wdXQ+LCA8dGV4dGFyZWE+LCA8dmlkZW8+IGFuZCA8YXVkaW8+IGVsZW1lbnRzCisgICAg
ICAgIFdlJ2xsIGFkZHJlc3MgdGhlc2UgZWxlbWVudHMgc2VwYXJhdGVseSBhZnRlciByZS10YXJn
ZXRpbmcgZm9jdXMgZXZlbnRzCisgICAgICAgIChidWcgNjE0MjEpIGlzIGltcGxlbWVudGVkLgor
CisgICAgICAgIEEgc2hhZG93IHJvb3QncyA8Y29udGVudD4gaXMgbm90IGNvbnNpZGVyZWQgaW4g
dGhpcyBwYXRjaC4KKyAgICAgICAgVGhhdCBzaG91bGQgYmUgYWRkcmVzc2VkIGluIGFub3RoZXIg
cGF0Y2guCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXIt
Zm9jdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbDogQWRkZWQuCisKIDIwMTEtMDYtMjMgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY2ODFiMDlhNWIyY2ExOTY2NTYxODIyMTJiZjc4MmE3YjdlZWI4NTYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNm
ZXItZm9jdXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1doZW4gYSBzaGFkb3cgaG9z
dCBpcyBmb2N1c2VkLCB0aGUgc2hhZG93IGhvc3Qgc2hvdWxkIHRyYW5zZmVyIGZvY3VzIHRvIHRo
ZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3QgaWYgdGhlcmUgaXMg
YW4gc3VjaCBhbiBlbGVtZW50LgorCitGb2N1c2luZzogc2hhZG93MAorUEFTUyBlbGVtZW50V2Fz
Rm9jdXNlZChpbnB1dDApIGlzIGZhbHNlCitQQVNTIGVsZW1lbnRXYXNGb2N1c2VkKGlucHV0MSkg
aXMgdHJ1ZQorUEFTUyBlbGVtZW50V2FzRm9jdXNlZChpbnB1dDIpIGlzIGZhbHNlCitQQVNTIGlu
cHV0MC52YWx1ZSBpcyAiIgorUEFTUyBpbnB1dDEudmFsdWUgaXMgIiIKK1BBU1MgaW5wdXQyLnZh
bHVlIGlzICIiCitQcmVzc2luZzogImEiCitQQVNTIGlucHV0MC52YWx1ZSBpcyAiIgorUEFTUyBp
bnB1dDEudmFsdWUgaXMgImEiCitQQVNTIGlucHV0Mi52YWx1ZSBpcyAiIgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGYyYWY3NTM4NDEzNzZjZTliNjExNzI5ZTNlYjdjMzBjNDVjNWUyZgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9z
dC10cmFuc2Zlci1mb2N1cy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD4KK1doZW4gYSBzaGFkb3cgaG9z
dCBpcyBmb2N1c2VkLCB0aGUgc2hhZG93IGhvc3Qgc2hvdWxkIHRyYW5zZmVyIGZvY3VzIHRvIHRo
ZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3QgaWYgdGhlcmUgaXMg
YW4gc3VjaCBhbiBlbGVtZW50LgorPC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICBmdW5jdGlvbiBzaGFkb3dSb290KHNoYWRvd0hv
c3QpIHsKKyAgICByZXR1cm4gbGF5b3V0VGVzdENvbnRyb2xsZXIuZW5zdXJlU2hhZG93Um9vdChz
aGFkb3dIb3N0KTsKKyAgfQorCisgIGZ1bmN0aW9uIGFwcGVuZENoaWxkVG9TaGFkb3coc2hhZG93
SG9zdCwgY2hpbGQpIHsKKyAgICByZXR1cm4gc2hhZG93Um9vdChzaGFkb3dIb3N0KS5hcHBlbmRD
aGlsZChjaGlsZCkKKyAgfQorCisgIGZ1bmN0aW9uIGFwcGVuZFNoYWRvd0hvc3QoZG9jLCBwYXJl
bnQpIHsKKyAgICB2YXIgc2hhZG93SG9zdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdwJyk7CisgICAg
c2hhZG93SG9zdC50YWJJbmRleCA9IDE7ICAvLyBNYWtlcyBzdXJlIHRoYXQgdGhlIHNoYWRvdyBo
b3N0IGlzIGZvY3VzYWJsZS4KKyAgICBwYXJlbnQgPSBwYXJlbnQgfHwgZG9jLmJvZHk7CisgICAg
cmV0dXJuIHBhcmVudC5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTsKKyAgfQorCisgIHZhciBmb2N1
c2VkRWxlbWVtZW50cyA9IFtdOworCisgIGZ1bmN0aW9uIGZvY3VzZWQoZWxlbSkgeworICAgIGZv
Y3VzZWRFbGVtZW50cy5wdXNoKGVsZW0pCisgIH0KKworICBmdW5jdGlvbiBkb0ZvY3VzKGVsZW0p
IHsKKyAgICBmb2N1c2VkRWxlbWVudHMgPSBbXQorICAgIGVsZW0uZm9jdXMoKQorICB9CisKKyAg
ZnVuY3Rpb24gZWxlbWVudFdhc0ZvY3VzZWQoZWxlbSkgeworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZm9jdXNlZEVsZW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICBpZiAoZm9jdXNlZEVsZW1l
bnRzW2ldID09IGVsZW0pIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHZhciBzaGFkb3cwID0gYXBwZW5kU2hhZG93SG9z
dChkb2N1bWVudCk7CisgIHZhciBpbnB1dDAgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvdzAs
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICBpbnB1dDAudGFiSW5kZXggPSAt
MQorICB2YXIgaW5wdXQxID0gYXBwZW5kQ2hpbGRUb1NoYWRvdyhzaGFkb3cwLCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgdmFyIGlucHV0MiA9IGFwcGVuZENoaWxkVG9TaGFk
b3coc2hhZG93MCwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7CisKKyAgdmFyIGVs
ZW1lbnRJZHMgPSBbJ3NoYWRvdzAnLCAnaW5wdXQwJywgJ2lucHV0MScsICdpbnB1dDInXQorICBm
b3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRJZHMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgaWQg
PSBlbGVtZW50SWRzW2ldOworICAgIHZhciBlbGVtZW50ID0gd2luZG93W2lkXTsKKyAgICBlbGVt
ZW50LmlkID0gaWQ7CisgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0
aW9uKCkge2ZvY3VzZWQodGhpcyk7fSwgZmFsc2UpOworICB9CisKKyAgZGVidWcoJ0ZvY3VzaW5n
OiBzaGFkb3cwJyk7CisgIGRvRm9jdXMoc2hhZG93MCk7CisgIC8vIENvbW1lbnRlZCBvdXQgZHVl
IHRvIGJ1ZyA2MTQyMS4KKyAgLy8gc2hvdWxkQmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChzaGFk
b3cwKScpOworICBzaG91bGRCZUZhbHNlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDApJyk7Cisg
IHNob3VsZEJlVHJ1ZSgnZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQxKScpOworICBzaG91bGRCZUZh
bHNlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDIpJyk7CisgIGlmICh3aW5kb3cuZXZlbnRTZW5k
ZXIpIHsKKyAgICBzaG91bGRCZSgnaW5wdXQwLnZhbHVlJywgJyIiJyk7CisgICAgc2hvdWxkQmUo
J2lucHV0MS52YWx1ZScsICciIicpOworICAgIHNob3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiIn
KTsKKyAgICBkZWJ1ZygnUHJlc3Npbmc6ICJhIicpCisgICAgZXZlbnRTZW5kZXIua2V5RG93bign
YScpOworICAgIHNob3VsZEJlKCdpbnB1dDAudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZSgn
aW5wdXQxLnZhbHVlJywgJyJhIicpOworICAgIHNob3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiIn
KTsKKyAgfQorCisgIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworfQorPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ0YTdiOTc4YzU1NTEzY2EyNzdh
ZjhlNWRmNWRiYjE0MzliZjBiZi4uZmE0MmM0YjVmYmI2MjUwODgzOGU4ZGJlNDI0NDM1NzUzZjg3
ZDU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA2LTI0ICBIYXlhdG8gSXRv
ICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNYWtlIGEgc2hhZG93IGhvc3QgdHJhbnNmZXIgYSBmb2N1cyB0byB0
aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290IHdoZW4gaXRzIGZv
Y3VzKCkgaXMgY2FsbGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjIzNTguCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2Vzbid0IHRha2UgYW4gZWZm
ZWN0IG9uIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMgdG8ga2VlcCBhIGNvbXBhdGliaWxpdHkuCisg
ICAgICAgIC0gPGlucHV0PiwgPHRleHRhcmVhPiwgPHZpZGVvPiBhbmQgPGF1ZGlvPiBlbGVtZW50
cworICAgICAgICBXZSdsbCBhZGRyZXNzIHRoZXNlIGVsZW1lbnRzIHNlcGFyYXRlbHkgYWZ0ZXIg
cmUtdGFyZ2V0aW5nIGZvY3VzIGV2ZW50cworICAgICAgICAoYnVnIDYxNDIxKSBpcyBpbXBsZW1l
bnRlZC4KKworICAgICAgICBBIHNoYWRvdyByb290J3MgPGNvbnRlbnQ+IGlzIG5vdCBjb25zaWRl
cmVkIGluIHRoaXMgcGF0Y2guCisgICAgICAgIFRoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZCBpbiBh
bm90aGVyIHBhdGNoLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9z
dC10cmFuc2Zlci1mb2N1cy5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpkZWVwRm9jdXNh
YmxlTm9kZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKwogMjAxMS0wNi0y
MyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGQxOTBlNTY3
MjYwYjcwODU2OTk5MjgwNDA0MmE5NzU2YTQwZDUxMzguLjZkMzkxNmI5NzgyMDY2ZDQzYjk4YTY1
OWVhMTJmMjRjMzRjYTNkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTE1ODYsNiArMTU4
NiwxNiBAQCB2b2lkIEVsZW1lbnQ6OmZvY3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9u
KQogICAgIGlmICghc3VwcG9ydHNGb2N1cygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAo
c2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jLT5wYWdlKCkpIHsK
KyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+ZGVlcEZv
Y3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb25Gb3J3YXJkLCB0aGlzLCAwKTsKKyAgICAgICAgICAg
IGlmICh0aGlzICE9IG5vZGUpIHsKKyAgICAgICAgICAgICAgICB0b0VsZW1lbnQobm9kZSktPmZv
Y3VzKHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgUmVmUHRyPE5vZGU+IHByb3Rl
Y3Q7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2MtPnBhZ2UoKSkgewogICAgICAgICAvLyBGb2N1
cyBhbmQgY2hhbmdlIGV2ZW50IGhhbmRsZXJzIGNhbiBjYXVzZSB1cyB0byBsb3NlIG91ciBsYXN0
IHJlZi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCAwNzQ0YWZi
YjQyMGI2ZGZmNGVjZjlmOTZlODQ2YWRkNDkzNzQzZDYxLi5jYTJhM2VlMjlmYmZhYWY0ZWVhNGYx
NWI3OWUxYjY4NWNhODI2ODA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwCkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRlZXBGb2N1
c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgSwogICAgICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gb3duZXItPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVu
dCgpOwogICAgICAgICAgICAgZm91bmROb2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9u
LCBkb2N1bWVudCwgMCwgZXZlbnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKHNoYWRvd1Jvb3Qobm9kZSkpOwotICAgICAgICAgICAgLy8gRklYTUU6IFNvbWUgZWxlbWVu
dHMgKGUuZy4gSFRNTElucHV0RWxlbWVudCBhbmQgSFRNTFRleHRBcmVhRWxlbWVudCkgZG8gZXh0
cmEgd29yayBpbiB0aGVpciBmb2N1cygpIG1ldGhvZHMuCi0gICAgICAgICAgICAvLyBTa2lwcGlu
ZyB0aGVzZSBlbGVtZW50cyBpcyB0aGUgc2FmZXN0IGZpeCB1bnRpbCB3ZSBmaW5kIGEgYmV0dGVy
IHdheS4KLSAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVbnRpbCBh
IGZvY3VzIHJlLXRhcmdldGluZyAoYnVnIDYxNDIxKSBpcyBpbXBsZW1lbnRlZCwKKyAgICAgICAg
ICAgIC8vIHNraXBwaW5nIHRoZXNlIGVsZW1lbnRzIGlzIHRoZSBzYWZlc3Qgd2F5IHRvIGtlZXAg
YW4gY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0
VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1l
KHZpZGVvVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIEFTU0VSVChzaGFkb3dSb290KG5vZGUpKTsKICAgICAgICAg
ICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgc2hhZG93Um9vdChu
b2RlKSwgMCwgZXZlbnQpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZm91bmROb2RlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKaW5kZXggNjYwMzg3MmY0OTViZjU2ZGRjNWVi
Njc5MDQ5MDRhNWI1ODVhZmE3Ni4uYzRhY2Q2MWQ5OWM1YjhkMDk3ZWMwODk0NTYyYTRjODU1YzJk
YWVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCkBAIC02MSwxMiArNjEs
MTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKTsKICAgICBib29sIGlzRm9j
dXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CiAKKyAgICBOb2RlKiBkZWVwRm9j
dXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiwgTm9kZSosIEtleWJvYXJkRXZlbnQqKTsKKwogcHJp
dmF0ZToKICAgICBib29sIGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJlY3Rpb24s
IEtleWJvYXJkRXZlbnQqKTsKICAgICBib29sIGFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihG
b2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCosIGJvb2wgaW5pdGlhbEZvY3VzKTsKIAogICAg
IE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlQWNyb3NzVHJlZVNjb3BlKEZvY3VzRGlyZWN0aW9uLCBU
cmVlU2NvcGUqIHN0YXJ0U2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7Ci0gICAg
Tm9kZSogZGVlcEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24sIE5vZGUqLCBLZXlib2FyZEV2
ZW50Kik7CiAgICAgTm9kZSogb3duZXJPZlRyZWVTY29wZShUcmVlU2NvcGUqKTsKIAogICAgIC8v
IFNlYXJjaGVzIHRocm91Z2ggdGhlIGdpdmVuIHRyZWUgc2NvcGUsIHN0YXJ0aW5nIGZyb20gc3Rh
cnQgbm9kZSwgZm9yIHRoZSBuZXh0L3ByZXZpb3VzIHNlbGVjdGFibGUgZWxlbWVudCB0aGF0IGNv
bWVzIGFmdGVyL2JlZm9yZSBzdGFydCBub2RlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98704</attachid>
            <date>2011-06-27 05:06:34 -0700</date>
            <delta_ts>2011-06-28 03:28:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62358-20110627210633.patch</filename>
            <type>text/plain</type>
            <size>10081</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk3ODYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYzg0MzM0NTc2ODY2ZGQ2OWZiZDc3
ZThhZDdkMjg0NWYwZWFkODUzLi5mMzZlNGQ4ODM1YTJmZjgyZmUwN2FlZTNjNGNjNjU3ZTE3MjZi
ZjgyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMjQgIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1ha2UgYSBzaGFkb3cgaG9zdCB0cmFuc2ZlciBhIGZvY3VzIHRvIHRoZSBmaXJz
dCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3Qgd2hlbiBpdHMgZm9jdXMoKSBp
cyBjYWxsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjM1OC4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXNuJ3QgdGFrZSBhbiBlZmZlY3Qgb24g
dGhlIGZvbGxvd2luZyBlbGVtZW50cyB0byBrZWVwIGEgY29tcGF0aWJpbGl0eS4KKyAgICAgICAg
LSA8aW5wdXQ+LCA8dGV4dGFyZWE+LCA8dmlkZW8+IGFuZCA8YXVkaW8+IGVsZW1lbnRzCisgICAg
ICAgIFdlJ2xsIGFkZHJlc3MgdGhlc2UgZWxlbWVudHMgc2VwYXJhdGVseSBhZnRlciByZS10YXJn
ZXRpbmcgZm9jdXMgZXZlbnRzCisgICAgICAgIChidWcgNjE0MjEpIGlzIGltcGxlbWVudGVkLgor
CisgICAgICAgIEEgc2hhZG93IHJvb3QncyA8Y29udGVudD4gaXMgbm90IGNvbnNpZGVyZWQgaW4g
dGhpcyBwYXRjaC4KKyAgICAgICAgVGhhdCBzaG91bGQgYmUgYWRkcmVzc2VkIGluIGFub3RoZXIg
cGF0Y2guCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXIt
Zm9jdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbDogQWRkZWQuCisKIDIwMTEtMDYtMjYgIERpcmsg
U2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFz
IFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNjgxYjA5YTViMmNhMTk2NjU2MTgyMjEyYmY3ODJhN2I3ZWViODU2Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVy
LWZvY3VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitXaGVuIGEgc2hhZG93IGhvc3Qg
aXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2ZlciBmb2N1cyB0byB0aGUg
Zmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290IGlmIHRoZXJlIGlzIGFu
IHN1Y2ggYW4gZWxlbWVudC4KKworRm9jdXNpbmc6IHNoYWRvdzAKK1BBU1MgZWxlbWVudFdhc0Zv
Y3VzZWQoaW5wdXQwKSBpcyBmYWxzZQorUEFTUyBlbGVtZW50V2FzRm9jdXNlZChpbnB1dDEpIGlz
IHRydWUKK1BBU1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQyKSBpcyBmYWxzZQorUEFTUyBpbnB1
dDAudmFsdWUgaXMgIiIKK1BBU1MgaW5wdXQxLnZhbHVlIGlzICIiCitQQVNTIGlucHV0Mi52YWx1
ZSBpcyAiIgorUHJlc3Npbmc6ICJhIgorUEFTUyBpbnB1dDAudmFsdWUgaXMgIiIKK1BBU1MgaW5w
dXQxLnZhbHVlIGlzICJhIgorUEFTUyBpbnB1dDIudmFsdWUgaXMgIiIKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjkwOTQ2YzMyZWUwNDYxMzU0MmE2MWU4ZjM5MzJjOTY1MGJiOTY4MzMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3Qt
dHJhbnNmZXItZm9jdXMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+CitXaGVuIGEgc2hhZG93IGhvc3Qg
aXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2ZlciBmb2N1cyB0byB0aGUg
Zmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290IGlmIHRoZXJlIGlzIGFu
IHN1Y2ggYW4gZWxlbWVudC4KKzwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dD4KK2lmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKworICBmdW5jdGlvbiBzaGFkb3dSb290KHNoYWRvd0hvc3QpIHsKKyAgICByZXR1
cm4gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hhZG93SG9zdCk7CisgIH0KKworICBmdW5j
dGlvbiBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvd0hvc3QsIGNoaWxkKSB7CisgICAgcmV0dXJu
IHNoYWRvd1Jvb3Qoc2hhZG93SG9zdCkuYXBwZW5kQ2hpbGQoY2hpbGQpCisgIH0KKworICBmdW5j
dGlvbiBhcHBlbmRTaGFkb3dIb3N0KGRvYywgcGFyZW50KSB7CisgICAgdmFyIHNoYWRvd0hvc3Qg
PSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOworICAgIHNoYWRvd0hvc3QudGFiSW5kZXggPSAxOyAg
Ly8gTWFrZXMgc3VyZSB0aGF0IHRoZSBzaGFkb3cgaG9zdCBpcyBmb2N1c2FibGUuCisgICAgcGFy
ZW50ID0gcGFyZW50IHx8IGRvYy5ib2R5OworICAgIHJldHVybiBwYXJlbnQuYXBwZW5kQ2hpbGQo
c2hhZG93SG9zdCk7CisgIH0KKworICB2YXIgZm9jdXNlZEVsZW1lbWVudHMgPSBbXTsKKworICBm
dW5jdGlvbiBmb2N1c2VkKGVsZW0pIHsKKyAgICBmb2N1c2VkRWxlbWVudHMucHVzaChlbGVtKQor
ICB9CisKKyAgZnVuY3Rpb24gZG9Gb2N1cyhlbGVtKSB7CisgICAgZm9jdXNlZEVsZW1lbnRzID0g
W10KKyAgICBlbGVtLmZvY3VzKCkKKyAgfQorCisgIGZ1bmN0aW9uIGVsZW1lbnRXYXNGb2N1c2Vk
KGVsZW0pIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvY3VzZWRFbGVtZW50cy5sZW5ndGg7
ICsraSkgeworICAgICAgaWYgKGZvY3VzZWRFbGVtZW50c1tpXSA9PSBlbGVtKSB7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwor
ICAvLyBGb3IgcmVhZGFiaWxpdHksIEkgbm90ZWQgdGhlIERPTSB0cmVlIHVuZGVyIHRoZSB0ZXN0
IGhlcmUuCisgIC8vCisgIC8vIC0gZG9jdW1lbnQKKyAgLy8gICAtIHNoYWRvdzAgKHRhYmluZGV4
PTEpCisgIC8vICAgICAtIGlucHV0MCAodGFiaW5kZXg9LTEpCisgIC8vICAgICAtIGlucHV0MQor
ICAvLyAgICAgLSBpbnB1dDIKKyAgdmFyIHNoYWRvdzAgPSBhcHBlbmRTaGFkb3dIb3N0KGRvY3Vt
ZW50KTsKKyAgdmFyIGlucHV0MCA9IGFwcGVuZENoaWxkVG9TaGFkb3coc2hhZG93MCwgZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7CisgIGlucHV0MC50YWJJbmRleCA9IC0xCisgIHZh
ciBpbnB1dDEgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvdzAsIGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2lucHV0JykpOworICB2YXIgaW5wdXQyID0gYXBwZW5kQ2hpbGRUb1NoYWRvdyhzaGFk
b3cwLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKworICB2YXIgZWxlbWVudElk
cyA9IFsnc2hhZG93MCcsICdpbnB1dDAnLCAnaW5wdXQxJywgJ2lucHV0MiddCisgIGZvciAodmFy
IGkgPSAwOyBpIDwgZWxlbWVudElkcy5sZW5ndGg7IGkrKykgeworICAgIHZhciBpZCA9IGVsZW1l
bnRJZHNbaV07CisgICAgdmFyIGVsZW1lbnQgPSB3aW5kb3dbaWRdOworICAgIGVsZW1lbnQuaWQg
PSBpZDsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVuY3Rpb24oKSB7
Zm9jdXNlZCh0aGlzKTt9LCBmYWxzZSk7CisgIH0KKworICBkZWJ1ZygnRm9jdXNpbmc6IHNoYWRv
dzAnKTsKKyAgZG9Gb2N1cyhzaGFkb3cwKTsKKyAgLy8gQ29tbWVudGVkIG91dCBkdWUgdG8gYnVn
IDYxNDIxLgorICAvLyBzaG91bGRCZVRydWUoJ2VsZW1lbnRXYXNGb2N1c2VkKHNoYWRvdzApJyk7
CisgIHNob3VsZEJlRmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MCknKTsKKyAgc2hvdWxk
QmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDEpJyk7CisgIHNob3VsZEJlRmFsc2UoJ2Vs
ZW1lbnRXYXNGb2N1c2VkKGlucHV0MiknKTsKKyAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgewor
ICAgIC8vIE1ha2VzIHN1cmUgdGhhdCB3ZSBjYW4gY2hhbmdlICdpbnB1dDEnIGVsZW1lbnQncyB2
YWx1ZSBieSBwcmVzc2luZyBhIGtleS4KKyAgICBzaG91bGRCZSgnaW5wdXQwLnZhbHVlJywgJyIi
Jyk7CisgICAgc2hvdWxkQmUoJ2lucHV0MS52YWx1ZScsICciIicpOworICAgIHNob3VsZEJlKCdp
bnB1dDIudmFsdWUnLCAnIiInKTsKKyAgICBkZWJ1ZygnUHJlc3Npbmc6ICJhIicpCisgICAgZXZl
bnRTZW5kZXIua2V5RG93bignYScpOworICAgIHNob3VsZEJlKCdpbnB1dDAudmFsdWUnLCAnIiIn
KTsKKyAgICBzaG91bGRCZSgnaW5wdXQxLnZhbHVlJywgJyJhIicpOworICAgIHNob3VsZEJlKCdp
bnB1dDIudmFsdWUnLCAnIiInKTsKKyAgfQorCisgIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE2
OTFiODE2MDIxNWMyZWUzZTgyMjQ2ZDQwMDIyZWNiZGEyYzVlMy4uZjVjMzdmMjE0YTExYTUwMTdk
OTM5OGViMTlhMTIzYTg2MDhhM2IyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEx
LTA2LTI0ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIGEgc2hhZG93IGhvc3QgdHJh
bnNmZXIgYSBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRv
dyByb290IHdoZW4gaXRzIGZvY3VzKCkgaXMgY2FsbGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNTguCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2Vzbid0IHRha2UgYW4gZWZmZWN0IG9uIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMgdG8ga2VlcCBh
IGNvbXBhdGliaWxpdHkuCisgICAgICAgIC0gPGlucHV0PiwgPHRleHRhcmVhPiwgPHZpZGVvPiBh
bmQgPGF1ZGlvPiBlbGVtZW50cworICAgICAgICBXZSdsbCBhZGRyZXNzIHRoZXNlIGVsZW1lbnRz
IHNlcGFyYXRlbHkgYWZ0ZXIgcmUtdGFyZ2V0aW5nIGZvY3VzIGV2ZW50cworICAgICAgICAoYnVn
IDYxNDIxKSBpcyBpbXBsZW1lbnRlZC4KKworICAgICAgICBBIHNoYWRvdyByb290J3MgPGNvbnRl
bnQ+IGlzIG5vdCBjb25zaWRlcmVkIGluIHRoaXMgcGF0Y2guCisgICAgICAgIFRoYXQgc2hvdWxk
IGJlIGFkZHJlc3NlZCBpbiBhbm90aGVyIHBhdGNoLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1sCisKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAg
ICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250
cm9sbGVyOjpkZWVwRm9jdXNhYmxlTm9kZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuaDoKKwogMjAxMS0wNi0yNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEJ1aWxkIGZpeCBmb3IgY2xhbmcuICBBcHBhcmVudGx5IGNsYW5nIGRvZXNuJ3Qgd2Fu
dCB1cyB0byB1c2UgdGhlIHN0ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGQxOTBlNTY3MjYw
YjcwODU2OTk5MjgwNDA0MmE5NzU2YTQwZDUxMzguLmQzZDBmOWNlMDI2OWUwMjRkNGMzNzgwYmQ3
N2M3MWU2NTNhMDE5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTE1OTIsNiArMTU5Miw4
IEBAIHZvaWQgRWxlbWVudDo6Zm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCiAg
ICAgICAgIC8vIElmIGEgZm9jdXMgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRoZSBmb2N1cyB0byBh
IGRpZmZlcmVudCBub2RlIGl0CiAgICAgICAgIC8vIGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY29u
dGludWUgYW5kIHVwZGF0ZSBhcHBlYXJlbmNlLgogICAgICAgICBwcm90ZWN0ID0gdGhpczsKKyAg
ICAgICAgaWYgKHNoYWRvd1Jvb3QoKSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+dHJhbnNm
ZXJGb2N1c1RvRWxlbWVudEluU2hhZG93Um9vdCh0aGlzLCByZXN0b3JlUHJldmlvdXNTZWxlY3Rp
b24pKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIXBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRGb2N1c2VkTm9kZSh0aGlzLCBkb2MtPmZyYW1lKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRl
eCAwNzQ0YWZiYjQyMGI2ZGZmNGVjZjlmOTZlODQ2YWRkNDkzNzQzZDYxLi4wZjY4MjQxYjFmODky
MmNhNDcyMzM1ZjhjYzAyMDUyZTRkYzE5ZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCkBAIC0xNTYsNiArMTU2LDE3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBpc1Ry
ZWVTY29wZU93bmVyKE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUtPmlzRnJh
bWVPd25lckVsZW1lbnQoKSB8fCBzaGFkb3dSb290KG5vZGUpKTsKIH0KIAorYm9vbCBGb2N1c0Nv
bnRyb2xsZXI6OnRyYW5zZmVyRm9jdXNUb0VsZW1lbnRJblNoYWRvd1Jvb3QoRWxlbWVudCogc2hh
ZG93SG9zdCwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCit7CisgICAgQVNTRVJUKHNo
YWRvd1Jvb3Qoc2hhZG93SG9zdCkpOworICAgIE5vZGUqIG5vZGUgPSBkZWVwRm9jdXNhYmxlTm9k
ZShGb2N1c0RpcmVjdGlvbkZvcndhcmQsIHNoYWRvd0hvc3QsIDApOworICAgIGlmIChzaGFkb3dI
b3N0ICE9IG5vZGUpIHsKKyAgICAgICAgdG9FbGVtZW50KG5vZGUpLT5mb2N1cyhyZXN0b3JlUHJl
dmlvdXNTZWxlY3Rpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRlZXBGb2N1c2FibGVOb2RlKEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiB7CiAgICAgLy8gVGhlIG5vZGUgd2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25lckVs
ZW1lbnQgb3IgYSBzaGFkb3cgaG9zdCwgc28gZGVzY2VuZCBkb3duIHRoZSB0cmVlIHVudGlsIHdl
IGZpbmQgZWl0aGVyOgpAQCAtMTcwLDExICsxODEsMTEgQEAgTm9kZSogRm9jdXNDb250cm9sbGVy
OjpkZWVwRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUs
IEsKICAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVyLT5jb250ZW50RnJhbWUo
KS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2FibGVOb2Rl
KGRpcmVjdGlvbiwgZG9jdW1lbnQsIDAsIGV2ZW50KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVChzaGFkb3dSb290KG5vZGUpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBT
b21lIGVsZW1lbnRzIChlLmcuIEhUTUxJbnB1dEVsZW1lbnQgYW5kIEhUTUxUZXh0QXJlYUVsZW1l
bnQpIGRvIGV4dHJhIHdvcmsgaW4gdGhlaXIgZm9jdXMoKSBtZXRob2RzLgotICAgICAgICAgICAg
Ly8gU2tpcHBpbmcgdGhlc2UgZWxlbWVudHMgaXMgdGhlIHNhZmVzdCBmaXggdW50aWwgd2UgZmlu
ZCBhIGJldHRlciB3YXkuCi0gICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRh
ZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpCisgICAgICAgICAgICAvLyBGSVhN
RTogVW50aWwgYSBmb2N1cyByZS10YXJnZXRpbmcgKGJ1ZyA2MTQyMSkgaXMgaW1wbGVtZW50ZWQs
CisgICAgICAgICAgICAvLyBza2lwcGluZyB0aGVzZSBlbGVtZW50cyBpcyB0aGUgc2FmZXN0IHdh
eSB0byBrZWVwIGEgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSB8fCBub2RlLT5o
YXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEFTU0VSVChzaGFkb3dSb290KG5vZGUpKTsK
ICAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgc2hh
ZG93Um9vdChub2RlKSwgMCwgZXZlbnQpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZm91bmRO
b2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKaW5kZXggNjYwMzg3MmY0OTVi
ZjU2ZGRjNWViNjc5MDQ5MDRhNWI1ODVhZmE3Ni4uZGI4ZTU2NDFjNmRiYWM1MTFmYTI3NmQzY2Y3
MzIwYjgzNDlkZDZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCkBAIC0z
NCw2ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBGb2N1c0NhbmRpZGF0
ZTsKK2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBL
ZXlib2FyZEV2ZW50OwpAQCAtNjEsNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGb2N1
c2VkKGJvb2wpOwogICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvY3Vz
ZWQ7IH0KIAorICAgIGJvb2wgdHJhbnNmZXJGb2N1c1RvRWxlbWVudEluU2hhZG93Um9vdChFbGVt
ZW50KiBzaGFkb3dIb3N0LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CisKIHByaXZh
dGU6CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KEZvY3VzRGlyZWN0aW9uLCBL
ZXlib2FyZEV2ZW50Kik7CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9j
dXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRpYWxGb2N1cyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98893</attachid>
            <date>2011-06-28 03:28:51 -0700</date>
            <delta_ts>2011-06-29 01:43:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62358-20110628192849.patch</filename>
            <type>text/plain</type>
            <size>13915</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk3ODYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYzg0MzM0NTc2ODY2ZGQ2OWZiZDc3
ZThhZDdkMjg0NWYwZWFkODUzLi42OWQwMzA0OTczM2ExNWYwYjFiMmY1ZThmYTIyOWQxMDA5ZGZl
NDlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMjggIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1ha2UgYSBzaGFkb3cgaG9zdCB0cmFuc2ZlciBhIGZvY3VzIHRvIHRoZSBmaXJz
dCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3Qgd2hlbiBpdHMgZm9jdXMoKSBp
cyBjYWxsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjM1OC4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXNuJ3QgdGFrZSBhbiBlZmZlY3Qgb24g
dGhlIGZvbGxvd2luZyBlbGVtZW50cyB0byBrZWVwIGEgY29tcGF0aWJpbGl0eS4KKyAgICAgICAg
LSA8aW5wdXQ+LCA8dGV4dGFyZWE+LCA8dmlkZW8+IGFuZCA8YXVkaW8+IGVsZW1lbnRzCisgICAg
ICAgIFdlJ2xsIGFkZHJlc3MgdGhlc2UgZWxlbWVudHMgc2VwYXJhdGVseSBhZnRlciByZS10YXJn
ZXRpbmcgZm9jdXMgZXZlbnRzCisgICAgICAgIChidWcgNjE0MjEpIGlzIGltcGxlbWVudGVkLgor
CisgICAgICAgIEEgc2hhZG93IHJvb3QncyA8Y29udGVudD4gaXMgbm90IGNvbnNpZGVyZWQgaW4g
dGhpcyBwYXRjaC4KKyAgICAgICAgVGhhdCBzaG91bGQgYmUgYWRkcmVzc2VkIGluIGFub3RoZXIg
cGF0Y2guIFNlZSBidWcgNjM1MjIuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93
LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbDogQWRkZWQuCisKIDIw
MTEtMDYtMjYgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mNjgxYjA5YTViMmNhMTk2NjU2MTgyMjEyYmY3ODJhN2I3ZWVi
ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRv
dy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitXaGVu
IGEgc2hhZG93IGhvc3QgaXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2Zl
ciBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290
IGlmIHRoZXJlIGlzIGFuIHN1Y2ggYW4gZWxlbWVudC4KKworRm9jdXNpbmc6IHNoYWRvdzAKK1BB
U1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQwKSBpcyBmYWxzZQorUEFTUyBlbGVtZW50V2FzRm9j
dXNlZChpbnB1dDEpIGlzIHRydWUKK1BBU1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQyKSBpcyBm
YWxzZQorUEFTUyBpbnB1dDAudmFsdWUgaXMgIiIKK1BBU1MgaW5wdXQxLnZhbHVlIGlzICIiCitQ
QVNTIGlucHV0Mi52YWx1ZSBpcyAiIgorUHJlc3Npbmc6ICJhIgorUEFTUyBpbnB1dDAudmFsdWUg
aXMgIiIKK1BBU1MgaW5wdXQxLnZhbHVlIGlzICJhIgorUEFTUyBpbnB1dDIudmFsdWUgaXMgIiIK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXIt
Zm9jdXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFu
c2Zlci1mb2N1cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwOTQ2YzMyZWUwNDYxMzU0MmE2MWU4ZjM5MzJj
OTY1MGJiOTY4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+CitXaGVu
IGEgc2hhZG93IGhvc3QgaXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2Zl
ciBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290
IGlmIHRoZXJlIGlzIGFuIHN1Y2ggYW4gZWxlbWVudC4KKzwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdD4KK2lmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICBmdW5jdGlvbiBzaGFkb3dSb290KHNoYWRvd0hv
c3QpIHsKKyAgICByZXR1cm4gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hhZG93SG9zdCk7
CisgIH0KKworICBmdW5jdGlvbiBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvd0hvc3QsIGNoaWxk
KSB7CisgICAgcmV0dXJuIHNoYWRvd1Jvb3Qoc2hhZG93SG9zdCkuYXBwZW5kQ2hpbGQoY2hpbGQp
CisgIH0KKworICBmdW5jdGlvbiBhcHBlbmRTaGFkb3dIb3N0KGRvYywgcGFyZW50KSB7CisgICAg
dmFyIHNoYWRvd0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOworICAgIHNoYWRvd0hvc3Qu
dGFiSW5kZXggPSAxOyAgLy8gTWFrZXMgc3VyZSB0aGF0IHRoZSBzaGFkb3cgaG9zdCBpcyBmb2N1
c2FibGUuCisgICAgcGFyZW50ID0gcGFyZW50IHx8IGRvYy5ib2R5OworICAgIHJldHVybiBwYXJl
bnQuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7CisgIH0KKworICB2YXIgZm9jdXNlZEVsZW1lbWVu
dHMgPSBbXTsKKworICBmdW5jdGlvbiBmb2N1c2VkKGVsZW0pIHsKKyAgICBmb2N1c2VkRWxlbWVu
dHMucHVzaChlbGVtKQorICB9CisKKyAgZnVuY3Rpb24gZG9Gb2N1cyhlbGVtKSB7CisgICAgZm9j
dXNlZEVsZW1lbnRzID0gW10KKyAgICBlbGVtLmZvY3VzKCkKKyAgfQorCisgIGZ1bmN0aW9uIGVs
ZW1lbnRXYXNGb2N1c2VkKGVsZW0pIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvY3VzZWRF
bGVtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgaWYgKGZvY3VzZWRFbGVtZW50c1tpXSA9PSBl
bGVtKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisgIH0KKworICAvLyBGb3IgcmVhZGFiaWxpdHksIEkgbm90ZWQgdGhlIERPTSB0cmVl
IHVuZGVyIHRoZSB0ZXN0IGhlcmUuCisgIC8vCisgIC8vIC0gZG9jdW1lbnQKKyAgLy8gICAtIHNo
YWRvdzAgKHRhYmluZGV4PTEpCisgIC8vICAgICAtIGlucHV0MCAodGFiaW5kZXg9LTEpCisgIC8v
ICAgICAtIGlucHV0MQorICAvLyAgICAgLSBpbnB1dDIKKyAgdmFyIHNoYWRvdzAgPSBhcHBlbmRT
aGFkb3dIb3N0KGRvY3VtZW50KTsKKyAgdmFyIGlucHV0MCA9IGFwcGVuZENoaWxkVG9TaGFkb3co
c2hhZG93MCwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7CisgIGlucHV0MC50YWJJ
bmRleCA9IC0xCisgIHZhciBpbnB1dDEgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvdzAsIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICB2YXIgaW5wdXQyID0gYXBwZW5kQ2hp
bGRUb1NoYWRvdyhzaGFkb3cwLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKwor
ICB2YXIgZWxlbWVudElkcyA9IFsnc2hhZG93MCcsICdpbnB1dDAnLCAnaW5wdXQxJywgJ2lucHV0
MiddCisgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudElkcy5sZW5ndGg7IGkrKykgeworICAg
IHZhciBpZCA9IGVsZW1lbnRJZHNbaV07CisgICAgdmFyIGVsZW1lbnQgPSB3aW5kb3dbaWRdOwor
ICAgIGVsZW1lbnQuaWQgPSBpZDsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vz
JywgZnVuY3Rpb24oKSB7Zm9jdXNlZCh0aGlzKTt9LCBmYWxzZSk7CisgIH0KKworICBkZWJ1Zygn
Rm9jdXNpbmc6IHNoYWRvdzAnKTsKKyAgZG9Gb2N1cyhzaGFkb3cwKTsKKyAgLy8gQ29tbWVudGVk
IG91dCBkdWUgdG8gYnVnIDYxNDIxLgorICAvLyBzaG91bGRCZVRydWUoJ2VsZW1lbnRXYXNGb2N1
c2VkKHNoYWRvdzApJyk7CisgIHNob3VsZEJlRmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0
MCknKTsKKyAgc2hvdWxkQmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDEpJyk7CisgIHNo
b3VsZEJlRmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MiknKTsKKyAgaWYgKHdpbmRvdy5l
dmVudFNlbmRlcikgeworICAgIC8vIE1ha2VzIHN1cmUgdGhhdCB3ZSBjYW4gY2hhbmdlICdpbnB1
dDEnIGVsZW1lbnQncyB2YWx1ZSBieSBwcmVzc2luZyBhIGtleS4KKyAgICBzaG91bGRCZSgnaW5w
dXQwLnZhbHVlJywgJyIiJyk7CisgICAgc2hvdWxkQmUoJ2lucHV0MS52YWx1ZScsICciIicpOwor
ICAgIHNob3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKKyAgICBkZWJ1ZygnUHJlc3Npbmc6
ICJhIicpCisgICAgZXZlbnRTZW5kZXIua2V5RG93bignYScpOworICAgIHNob3VsZEJlKCdpbnB1
dDAudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZSgnaW5wdXQxLnZhbHVlJywgJyJhIicpOwor
ICAgIHNob3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKKyAgfQorCisgIHZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZWE2OTFiODE2MDIxNWMyZWUzZTgyMjQ2ZDQwMDIyZWNiZGEyYzVlMy4uZDc5
YzMzNTkzODI0MWJjZTNhZjc1YWQ2Njk5ODJhM2JkMTg1ZjJjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDMzIEBACisyMDExLTA2LTI4ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIGEg
c2hhZG93IGhvc3QgdHJhbnNmZXIgYSBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1l
bnQgaW4gdGhlIHNoYWRvdyByb290IHdoZW4gaXRzIGZvY3VzKCkgaXMgY2FsbGVkLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNTguCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2Vzbid0IHRha2UgYW4gZWZmZWN0IG9uIHRoZSBmb2xsb3dpbmcgZWxl
bWVudHMgdG8ga2VlcCBhIGNvbXBhdGliaWxpdHkuCisgICAgICAgIC0gPGlucHV0PiwgPHRleHRh
cmVhPiwgPHZpZGVvPiBhbmQgPGF1ZGlvPiBlbGVtZW50cworICAgICAgICBXZSdsbCBhZGRyZXNz
IHRoZXNlIGVsZW1lbnRzIHNlcGFyYXRlbHkgYWZ0ZXIgcmUtdGFyZ2V0aW5nIGZvY3VzIGV2ZW50
cworICAgICAgICAoYnVnIDYxNDIxKSBpcyBpbXBsZW1lbnRlZC4KKworICAgICAgICBBIHNoYWRv
dyByb290J3MgPGNvbnRlbnQ+IGlzIG5vdCBjb25zaWRlcmVkIGluIHRoaXMgcGF0Y2guCisgICAg
ICAgIFRoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZCBpbiBhbm90aGVyIHBhdGNoLiBTZWUgYnVnIDYz
NTIyLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zl
ci1mb2N1cy5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjppc1Ry
ZWVTY29wZU93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6dHJhbnNm
ZXJGb2N1c1RvRWxlbWVudEluU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNDdXN0
b21Gb2N1c0xvZ2ljKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZv
Y3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50
T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6b3duZXJPZlRyZWVTY29wZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlQWNyb3NzVHJlZVNjb3Bl
KToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgorCiAyMDExLTA2LTI2ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBjbGFu
Zy4gIEFwcGFyZW50bHkgY2xhbmcgZG9lc24ndCB3YW50IHVzIHRvIHVzZSB0aGUgc3RkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKaW5kZXggZDE5MGU1NjcyNjBiNzA4NTY5OTkyODA0MDQyYTk3NTZhNDBk
NTEzOC4uMTM1ZjJlOTIzOWVlMDM0NDUyOTAyZjMxNTAyODAwY2NkYjYyNGU3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcApAQCAtMTU5Miw2ICsxNTkyLDggQEAgdm9pZCBFbGVtZW50Ojpmb2N1cyhi
b29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKICAgICAgICAgLy8gSWYgYSBmb2N1cyBldmVu
dCBoYW5kbGVyIGNoYW5nZXMgdGhlIGZvY3VzIHRvIGEgZGlmZmVyZW50IG5vZGUgaXQKICAgICAg
ICAgLy8gZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjb250aW51ZSBhbmQgdXBkYXRlIGFwcGVhcmVu
Y2UuCiAgICAgICAgIHByb3RlY3QgPSB0aGlzOworICAgICAgICBpZiAoc2hhZG93Um9vdCgpICYm
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT50cmFuc2ZlckZvY3VzVG9FbGVtZW50SW5TaGFkb3dS
b290KHRoaXMsIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikgPT0gRm9jdXNDb250cm9sbGVyOjpG
b2N1c0lzVHJhbnNmZXJlZCkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgpKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHAKaW5kZXggMDc0NGFmYmI0MjBiNmRmZjRlY2Y5Zjk2ZTg0NmFkZDQ5Mzc0M2Q2MS4u
MzBlMGIwNzk5ZTQ3YWNiMzU5NTdmZGEwYmM3OGM3YWZlYmRkMzE2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMTQ2LDE3ICsxNDYsMzIgQEAgdm9pZCBGb2N1
c0NvbnRyb2xsZXI6OnNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKQogICAgIH0KIH0KIAotaW5saW5l
IHN0YXRpYyBTaGFkb3dSb290KiBzaGFkb3dSb290KE5vZGUqIG5vZGUpCitzdGF0aWMgaW5saW5l
IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QoTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZS0+
aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpLT5zaGFkb3dSb290KCkgOiAwOwogfQog
Ci1pbmxpbmUgc3RhdGljIGJvb2wgaXNUcmVlU2NvcGVPd25lcihOb2RlKiBub2RlKQorc3RhdGlj
IGlubGluZSBib29sIGlzVHJlZVNjb3BlT3duZXIoTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4g
bm9kZSAmJiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IHNoYWRvd1Jvb3Qobm9kZSkp
OwogfQogCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRlZXBGb2N1c2FibGVOb2RlKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCitGb2N1
c0NvbnRyb2xsZXI6OklzRm9jdXNUcmFuc2ZlcmVkIEZvY3VzQ29udHJvbGxlcjo6dHJhbnNmZXJG
b2N1c1RvRWxlbWVudEluU2hhZG93Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBib29sIHJlc3Rv
cmVQcmV2aW91c1NlbGVjdGlvbikKK3sKKyAgICBBU1NFUlQoc2hhZG93Um9vdChzaGFkb3dIb3N0
KSk7CisgICAgTm9kZSogbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9G
cmFtZURvY3VtZW50T3JTaGFkb3dSb290KEZvY3VzRGlyZWN0aW9uRm9yd2FyZCwgc2hhZG93SG9z
dCwgMCk7CisgICAgaWYgKHNoYWRvd0hvc3QgPT0gbm9kZSkKKyAgICAgICAgcmV0dXJuIEZvY3Vz
SXNOb3RUcmFuc2ZlcmVkOworICAgIHRvRWxlbWVudChub2RlKS0+Zm9jdXMocmVzdG9yZVByZXZp
b3VzU2VsZWN0aW9uKTsKKyAgICByZXR1cm4gRm9jdXNJc1RyYW5zZmVyZWQ7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBoYXNDdXN0b21Gb2N1c0xvZ2ljKE5vZGUqIG5vZGUpCit7CisgICAgcmV0
dXJuIG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGV4dGFy
ZWFUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
YXVkaW9UYWcpOworfQorCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2Rl
RGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFkb3dSb290KEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgLy8g
VGhlIG5vZGUgd2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25lckVsZW1lbnQgb3IgYSBz
aGFkb3cgaG9zdCwgc28gZGVzY2VuZCBkb3duIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgZWl0aGVy
OgogICAgIC8vIDEpIGEgZm9jdXNhYmxlIG5vZGUsIG9yCkBAIC0xNzAsMTEgKzE4NSwxMSBAQCBO
b2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRlZXBGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uIGRp
cmVjdGlvbiwgTm9kZSogbm9kZSwgSwogICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
b3duZXItPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgZm91bmROb2Rl
ID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBkb2N1bWVudCwgMCwgZXZlbnQpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHNoYWRvd1Jvb3Qobm9kZSkpOwotICAg
ICAgICAgICAgLy8gRklYTUU6IFNvbWUgZWxlbWVudHMgKGUuZy4gSFRNTElucHV0RWxlbWVudCBh
bmQgSFRNTFRleHRBcmVhRWxlbWVudCkgZG8gZXh0cmEgd29yayBpbiB0aGVpciBmb2N1cygpIG1l
dGhvZHMuCi0gICAgICAgICAgICAvLyBTa2lwcGluZyB0aGVzZSBlbGVtZW50cyBpcyB0aGUgc2Fm
ZXN0IGZpeCB1bnRpbCB3ZSBmaW5kIGEgYmV0dGVyIHdheS4KLSAgICAgICAgICAgIGlmIChub2Rl
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBVbnRpbCBhIGZvY3VzIHJlLXRhcmdldGluZyAoYnVnIDYx
NDIxKSBpcyBpbXBsZW1lbnRlZCwKKyAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZXNlIGVsZW1l
bnRzIGlzIHRoZSBzYWZlc3Qgd2F5IHRvIGtlZXAgYSBjb21wYXRpYmlsaXR5LgorICAgICAgICAg
ICAgaWYgKGhhc0N1c3RvbUZvY3VzTG9naWMobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdChub2RlKSk7CiAgICAgICAgICAgICBmb3Vu
ZE5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIHNoYWRvd1Jvb3Qobm9kZSksIDAs
IGV2ZW50KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWZvdW5kTm9kZSkKQEAgLTI0NCw3ICsy
NTksNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVy
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogCiAgICAgICAgIC8vIENocm9tZSBkb2Vz
bid0IHdhbnQgZm9jdXMsIHNvIHdlIHNob3VsZCB3cmFwIGZvY3VzLgogICAgICAgICBub2RlID0g
ZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVu
dCgpLCAwLCBldmVudCk7Ci0gICAgICAgIG5vZGUgPSBkZWVwRm9jdXNhYmxlTm9kZShkaXJlY3Rp
b24sIG5vZGUsIGV2ZW50KTsKKyAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlRGVjZW5k
aW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFkb3dSb290KGRpcmVjdGlvbiwgbm9kZSwgZXZl
bnQpOwogCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTI5Niw2ICszMTEsMTYgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9j
dW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWIKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorc3RhdGljIGlubGluZSBOb2RlKiBvd25lck9mVHJlZVNjb3BlKFRyZWVTY29wZSog
c2NvcGUpCit7CisgICAgQVNTRVJUKHNjb3BlKTsKKyAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9v
dCgpKQorICAgICAgICByZXR1cm4gc2NvcGUtPnNoYWRvd0hvc3QoKTsKKyAgICBpZiAoc2NvcGUt
PmRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIHJldHVybiBzY29wZS0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+b3duZXJFbGVtZW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisKIE5vZGUqIEZvY3Vz
Q29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUoRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBjdXJyZW50Tm9kZSwgS2V5Ym9h
cmRFdmVudCogZXZlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRp
cmVjdGlvbiwgc2NvcGUsIGN1cnJlbnROb2RlLCBldmVudCk7CkBAIC0zMDcsNyArMzMyLDcgQEAg
Tm9kZSogRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShG
b2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24KICAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVOb2Rl
KGRpcmVjdGlvbiwgb3duZXItPnRyZWVTY29wZSgpLCBvd25lciwgZXZlbnQpOwogICAgICAgICBz
Y29wZSA9IG93bmVyLT50cmVlU2NvcGUoKTsKICAgICB9Ci0gICAgbm9kZSA9IGRlZXBGb2N1c2Fi
bGVOb2RlKGRpcmVjdGlvbiwgbm9kZSwgZXZlbnQpOworICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxl
Tm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudE9yU2hhZG93Um9vdChkaXJlY3Rpb24s
IG5vZGUsIGV2ZW50KTsKICAgICByZXR1cm4gbm9kZTsKIH0KIApAQCAtNDMxLDE2ICs0NTYsNiBA
QCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2NvcGUq
IHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5YgogICAgIHJldHVybiBwcmV2aW91c05vZGVXaXRoTG93
ZXJUYWJJbmRleChsYXN0LCBzdGFydGluZ1RhYkluZGV4LCBldmVudCk7CiB9CiAKLU5vZGUqIEZv
Y3VzQ29udHJvbGxlcjo6b3duZXJPZlRyZWVTY29wZShUcmVlU2NvcGUqIHNjb3BlKQotewotICAg
IEFTU0VSVChzY29wZSk7Ci0gICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAg
cmV0dXJuIHNjb3BlLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKHNjb3BlLT5kb2N1bWVudCgpLT5m
cmFtZSgpKQotICAgICAgICByZXR1cm4gc2NvcGUtPmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVy
RWxlbWVudCgpOwotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNF
ZGl0aW5nRm9jdXMoTm9kZSAqbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAppbmRleCA2NjAzODcyZjQ5NWJmNTZkZGM1ZWI2NzkwNDkw
NGE1YjU4NWFmYTc2Li43YjFhNmY4ZTdkMjI4OTRiM2I3N2Y4MDdmYjJlZmFkMjg5ODgzOTkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKQEAgLTM0LDYgKzM0LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZvY3VzQ2FuZGlkYXRlOworY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CkBA
IC02MSwxMyArNjIsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKTsKICAg
ICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CiAKKyAgICBl
bnVtIElzRm9jdXNUcmFuc2ZlcmVkIHsKKyAgICAgICAgRm9jdXNJc1RyYW5zZmVyZWQsCisgICAg
ICAgIEZvY3VzSXNOb3RUcmFuc2ZlcmVkCisgICAgfTsKKyAgICBJc0ZvY3VzVHJhbnNmZXJlZCB0
cmFuc2ZlckZvY3VzVG9FbGVtZW50SW5TaGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIGJv
b2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKKwogcHJpdmF0ZToKICAgICBib29sIGFkdmFu
Y2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKICAg
ICBib29sIGFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiwgS2V5Ym9h
cmRFdmVudCosIGJvb2wgaW5pdGlhbEZvY3VzKTsKIAogICAgIE5vZGUqIGZpbmRGb2N1c2FibGVO
b2RlQWNyb3NzVHJlZVNjb3BlKEZvY3VzRGlyZWN0aW9uLCBUcmVlU2NvcGUqIHN0YXJ0U2NvcGUs
IE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgTm9kZSogZGVlcEZvY3VzYWJsZU5v
ZGUoRm9jdXNEaXJlY3Rpb24sIE5vZGUqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgTm9kZSogb3du
ZXJPZlRyZWVTY29wZShUcmVlU2NvcGUqKTsKKyAgICBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZURl
Y2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudE9yU2hhZG93Um9vdChGb2N1c0RpcmVjdGlvbiwg
Tm9kZSosIEtleWJvYXJkRXZlbnQqKTsKIAogICAgIC8vIFNlYXJjaGVzIHRocm91Z2ggdGhlIGdp
dmVuIHRyZWUgc2NvcGUsIHN0YXJ0aW5nIGZyb20gc3RhcnQgbm9kZSwgZm9yIHRoZSBuZXh0L3By
ZXZpb3VzIHNlbGVjdGFibGUgZWxlbWVudCB0aGF0IGNvbWVzIGFmdGVyL2JlZm9yZSBzdGFydCBu
b2RlLgogICAgIC8vIFRoZSBvcmRlciBmb2xsb3dlZCBpcyBhcyBzcGVjaWZpZWQgaW4gc2VjdGlv
biAxNy4xMS4xIG9mIHRoZSBIVE1MNCBzcGVjLCB3aGljaCBpcyBlbGVtZW50cyB3aXRoIHRhYiBp
bmRleGVzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99055</attachid>
            <date>2011-06-29 01:43:40 -0700</date>
            <delta_ts>2011-06-29 02:40:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62358-20110629174339.patch</filename>
            <type>text/plain</type>
            <size>13710</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk3ODYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYzg0MzM0NTc2ODY2ZGQ2OWZiZDc3
ZThhZDdkMjg0NWYwZWFkODUzLi42OWQwMzA0OTczM2ExNWYwYjFiMmY1ZThmYTIyOWQxMDA5ZGZl
NDlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMjggIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1ha2UgYSBzaGFkb3cgaG9zdCB0cmFuc2ZlciBhIGZvY3VzIHRvIHRoZSBmaXJz
dCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3Qgd2hlbiBpdHMgZm9jdXMoKSBp
cyBjYWxsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjM1OC4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXNuJ3QgdGFrZSBhbiBlZmZlY3Qgb24g
dGhlIGZvbGxvd2luZyBlbGVtZW50cyB0byBrZWVwIGEgY29tcGF0aWJpbGl0eS4KKyAgICAgICAg
LSA8aW5wdXQ+LCA8dGV4dGFyZWE+LCA8dmlkZW8+IGFuZCA8YXVkaW8+IGVsZW1lbnRzCisgICAg
ICAgIFdlJ2xsIGFkZHJlc3MgdGhlc2UgZWxlbWVudHMgc2VwYXJhdGVseSBhZnRlciByZS10YXJn
ZXRpbmcgZm9jdXMgZXZlbnRzCisgICAgICAgIChidWcgNjE0MjEpIGlzIGltcGxlbWVudGVkLgor
CisgICAgICAgIEEgc2hhZG93IHJvb3QncyA8Y29udGVudD4gaXMgbm90IGNvbnNpZGVyZWQgaW4g
dGhpcyBwYXRjaC4KKyAgICAgICAgVGhhdCBzaG91bGQgYmUgYWRkcmVzc2VkIGluIGFub3RoZXIg
cGF0Y2guIFNlZSBidWcgNjM1MjIuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93
LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbDogQWRkZWQuCisKIDIw
MTEtMDYtMjYgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mNjgxYjA5YTViMmNhMTk2NjU2MTgyMjEyYmY3ODJhN2I3ZWVi
ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRv
dy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitXaGVu
IGEgc2hhZG93IGhvc3QgaXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2Zl
ciBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290
IGlmIHRoZXJlIGlzIGFuIHN1Y2ggYW4gZWxlbWVudC4KKworRm9jdXNpbmc6IHNoYWRvdzAKK1BB
U1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQwKSBpcyBmYWxzZQorUEFTUyBlbGVtZW50V2FzRm9j
dXNlZChpbnB1dDEpIGlzIHRydWUKK1BBU1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQyKSBpcyBm
YWxzZQorUEFTUyBpbnB1dDAudmFsdWUgaXMgIiIKK1BBU1MgaW5wdXQxLnZhbHVlIGlzICIiCitQ
QVNTIGlucHV0Mi52YWx1ZSBpcyAiIgorUHJlc3Npbmc6ICJhIgorUEFTUyBpbnB1dDAudmFsdWUg
aXMgIiIKK1BBU1MgaW5wdXQxLnZhbHVlIGlzICJhIgorUEFTUyBpbnB1dDIudmFsdWUgaXMgIiIK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXIt
Zm9jdXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFu
c2Zlci1mb2N1cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwOTQ2YzMyZWUwNDYxMzU0MmE2MWU4ZjM5MzJj
OTY1MGJiOTY4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+CitXaGVu
IGEgc2hhZG93IGhvc3QgaXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2Zl
ciBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290
IGlmIHRoZXJlIGlzIGFuIHN1Y2ggYW4gZWxlbWVudC4KKzwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdD4KK2lmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICBmdW5jdGlvbiBzaGFkb3dSb290KHNoYWRvd0hv
c3QpIHsKKyAgICByZXR1cm4gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hhZG93SG9zdCk7
CisgIH0KKworICBmdW5jdGlvbiBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvd0hvc3QsIGNoaWxk
KSB7CisgICAgcmV0dXJuIHNoYWRvd1Jvb3Qoc2hhZG93SG9zdCkuYXBwZW5kQ2hpbGQoY2hpbGQp
CisgIH0KKworICBmdW5jdGlvbiBhcHBlbmRTaGFkb3dIb3N0KGRvYywgcGFyZW50KSB7CisgICAg
dmFyIHNoYWRvd0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOworICAgIHNoYWRvd0hvc3Qu
dGFiSW5kZXggPSAxOyAgLy8gTWFrZXMgc3VyZSB0aGF0IHRoZSBzaGFkb3cgaG9zdCBpcyBmb2N1
c2FibGUuCisgICAgcGFyZW50ID0gcGFyZW50IHx8IGRvYy5ib2R5OworICAgIHJldHVybiBwYXJl
bnQuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7CisgIH0KKworICB2YXIgZm9jdXNlZEVsZW1lbWVu
dHMgPSBbXTsKKworICBmdW5jdGlvbiBmb2N1c2VkKGVsZW0pIHsKKyAgICBmb2N1c2VkRWxlbWVu
dHMucHVzaChlbGVtKQorICB9CisKKyAgZnVuY3Rpb24gZG9Gb2N1cyhlbGVtKSB7CisgICAgZm9j
dXNlZEVsZW1lbnRzID0gW10KKyAgICBlbGVtLmZvY3VzKCkKKyAgfQorCisgIGZ1bmN0aW9uIGVs
ZW1lbnRXYXNGb2N1c2VkKGVsZW0pIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvY3VzZWRF
bGVtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgaWYgKGZvY3VzZWRFbGVtZW50c1tpXSA9PSBl
bGVtKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisgIH0KKworICAvLyBGb3IgcmVhZGFiaWxpdHksIEkgbm90ZWQgdGhlIERPTSB0cmVl
IHVuZGVyIHRoZSB0ZXN0IGhlcmUuCisgIC8vCisgIC8vIC0gZG9jdW1lbnQKKyAgLy8gICAtIHNo
YWRvdzAgKHRhYmluZGV4PTEpCisgIC8vICAgICAtIGlucHV0MCAodGFiaW5kZXg9LTEpCisgIC8v
ICAgICAtIGlucHV0MQorICAvLyAgICAgLSBpbnB1dDIKKyAgdmFyIHNoYWRvdzAgPSBhcHBlbmRT
aGFkb3dIb3N0KGRvY3VtZW50KTsKKyAgdmFyIGlucHV0MCA9IGFwcGVuZENoaWxkVG9TaGFkb3co
c2hhZG93MCwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7CisgIGlucHV0MC50YWJJ
bmRleCA9IC0xCisgIHZhciBpbnB1dDEgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvdzAsIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOworICB2YXIgaW5wdXQyID0gYXBwZW5kQ2hp
bGRUb1NoYWRvdyhzaGFkb3cwLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKwor
ICB2YXIgZWxlbWVudElkcyA9IFsnc2hhZG93MCcsICdpbnB1dDAnLCAnaW5wdXQxJywgJ2lucHV0
MiddCisgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudElkcy5sZW5ndGg7IGkrKykgeworICAg
IHZhciBpZCA9IGVsZW1lbnRJZHNbaV07CisgICAgdmFyIGVsZW1lbnQgPSB3aW5kb3dbaWRdOwor
ICAgIGVsZW1lbnQuaWQgPSBpZDsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vz
JywgZnVuY3Rpb24oKSB7Zm9jdXNlZCh0aGlzKTt9LCBmYWxzZSk7CisgIH0KKworICBkZWJ1Zygn
Rm9jdXNpbmc6IHNoYWRvdzAnKTsKKyAgZG9Gb2N1cyhzaGFkb3cwKTsKKyAgLy8gQ29tbWVudGVk
IG91dCBkdWUgdG8gYnVnIDYxNDIxLgorICAvLyBzaG91bGRCZVRydWUoJ2VsZW1lbnRXYXNGb2N1
c2VkKHNoYWRvdzApJyk7CisgIHNob3VsZEJlRmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0
MCknKTsKKyAgc2hvdWxkQmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDEpJyk7CisgIHNo
b3VsZEJlRmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MiknKTsKKyAgaWYgKHdpbmRvdy5l
dmVudFNlbmRlcikgeworICAgIC8vIE1ha2VzIHN1cmUgdGhhdCB3ZSBjYW4gY2hhbmdlICdpbnB1
dDEnIGVsZW1lbnQncyB2YWx1ZSBieSBwcmVzc2luZyBhIGtleS4KKyAgICBzaG91bGRCZSgnaW5w
dXQwLnZhbHVlJywgJyIiJyk7CisgICAgc2hvdWxkQmUoJ2lucHV0MS52YWx1ZScsICciIicpOwor
ICAgIHNob3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKKyAgICBkZWJ1ZygnUHJlc3Npbmc6
ICJhIicpCisgICAgZXZlbnRTZW5kZXIua2V5RG93bignYScpOworICAgIHNob3VsZEJlKCdpbnB1
dDAudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZSgnaW5wdXQxLnZhbHVlJywgJyJhIicpOwor
ICAgIHNob3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKKyAgfQorCisgIHZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZWE2OTFiODE2MDIxNWMyZWUzZTgyMjQ2ZDQwMDIyZWNiZGEyYzVlMy4uZDc5
YzMzNTkzODI0MWJjZTNhZjc1YWQ2Njk5ODJhM2JkMTg1ZjJjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDMzIEBACisyMDExLTA2LTI4ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIGEg
c2hhZG93IGhvc3QgdHJhbnNmZXIgYSBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1l
bnQgaW4gdGhlIHNoYWRvdyByb290IHdoZW4gaXRzIGZvY3VzKCkgaXMgY2FsbGVkLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNTguCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2Vzbid0IHRha2UgYW4gZWZmZWN0IG9uIHRoZSBmb2xsb3dpbmcgZWxl
bWVudHMgdG8ga2VlcCBhIGNvbXBhdGliaWxpdHkuCisgICAgICAgIC0gPGlucHV0PiwgPHRleHRh
cmVhPiwgPHZpZGVvPiBhbmQgPGF1ZGlvPiBlbGVtZW50cworICAgICAgICBXZSdsbCBhZGRyZXNz
IHRoZXNlIGVsZW1lbnRzIHNlcGFyYXRlbHkgYWZ0ZXIgcmUtdGFyZ2V0aW5nIGZvY3VzIGV2ZW50
cworICAgICAgICAoYnVnIDYxNDIxKSBpcyBpbXBsZW1lbnRlZC4KKworICAgICAgICBBIHNoYWRv
dyByb290J3MgPGNvbnRlbnQ+IGlzIG5vdCBjb25zaWRlcmVkIGluIHRoaXMgcGF0Y2guCisgICAg
ICAgIFRoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZCBpbiBhbm90aGVyIHBhdGNoLiBTZWUgYnVnIDYz
NTIyLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zl
ci1mb2N1cy5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjppc1Ry
ZWVTY29wZU93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6dHJhbnNm
ZXJGb2N1c1RvRWxlbWVudEluU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNDdXN0
b21Gb2N1c0xvZ2ljKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZv
Y3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50
T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6b3duZXJPZlRyZWVTY29wZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlQWNyb3NzVHJlZVNjb3Bl
KToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgorCiAyMDExLTA2LTI2ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBjbGFu
Zy4gIEFwcGFyZW50bHkgY2xhbmcgZG9lc24ndCB3YW50IHVzIHRvIHVzZSB0aGUgc3RkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKaW5kZXggZDE5MGU1NjcyNjBiNzA4NTY5OTkyODA0MDQyYTk3NTZhNDBk
NTEzOC4uZDNkMGY5Y2UwMjY5ZTAyNGQ0YzM3ODBiZDc3YzcxZTY1M2EwMTlhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcApAQCAtMTU5Miw2ICsxNTkyLDggQEAgdm9pZCBFbGVtZW50Ojpmb2N1cyhi
b29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKICAgICAgICAgLy8gSWYgYSBmb2N1cyBldmVu
dCBoYW5kbGVyIGNoYW5nZXMgdGhlIGZvY3VzIHRvIGEgZGlmZmVyZW50IG5vZGUgaXQKICAgICAg
ICAgLy8gZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjb250aW51ZSBhbmQgdXBkYXRlIGFwcGVhcmVu
Y2UuCiAgICAgICAgIHByb3RlY3QgPSB0aGlzOworICAgICAgICBpZiAoc2hhZG93Um9vdCgpICYm
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT50cmFuc2ZlckZvY3VzVG9FbGVtZW50SW5TaGFkb3dS
b290KHRoaXMsIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikpCisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmICghcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKHRo
aXMsIGRvYy0+ZnJhbWUoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDA3NDRhZmJiNDIwYjZkZmY0ZWNmOWY5
NmU4NDZhZGQ0OTM3NDNkNjEuLjM1NzU0ODEyMTg2NTc3ZjE4NWNhMDgzNzQ1NzA1MTE2YmU5Yzk5
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTE0NiwxNyAr
MTQ2LDMyIEBAIHZvaWQgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkKGJvb2wgZm9jdXNlZCkK
ICAgICB9CiB9CiAKLWlubGluZSBzdGF0aWMgU2hhZG93Um9vdCogc2hhZG93Um9vdChOb2RlKiBu
b2RlKQorc3RhdGljIGlubGluZSBTaGFkb3dSb290KiBzaGFkb3dSb290KE5vZGUqIG5vZGUpCiB7
CiAgICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChub2RlKS0+c2hh
ZG93Um9vdCgpIDogMDsKIH0KIAotaW5saW5lIHN0YXRpYyBib29sIGlzVHJlZVNjb3BlT3duZXIo
Tm9kZSogbm9kZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1RyZWVTY29wZU93bmVyKE5vZGUqIG5v
ZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8
fCBzaGFkb3dSb290KG5vZGUpKTsKIH0KIAotTm9kZSogRm9jdXNDb250cm9sbGVyOjpkZWVwRm9j
dXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUsIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQorYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnRyYW5zZmVyRm9jdXNUb0VsZW1l
bnRJblNoYWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgYm9vbCByZXN0b3JlUHJldmlvdXNT
ZWxlY3Rpb24pCit7CisgICAgQVNTRVJUKHNoYWRvd1Jvb3Qoc2hhZG93SG9zdCkpOworICAgIE5v
ZGUqIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVu
dE9yU2hhZG93Um9vdChGb2N1c0RpcmVjdGlvbkZvcndhcmQsIHNoYWRvd0hvc3QsIDApOworICAg
IGlmIChzaGFkb3dIb3N0ID09IG5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0b0Vs
ZW1lbnQobm9kZSktPmZvY3VzKHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNDdXN0b21Gb2N1c0xvZ2ljKE5vZGUq
IG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcpOworfQorCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6
OmZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFkb3dS
b290KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCiB7CiAgICAgLy8gVGhlIG5vZGUgd2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVP
d25lckVsZW1lbnQgb3IgYSBzaGFkb3cgaG9zdCwgc28gZGVzY2VuZCBkb3duIHRoZSB0cmVlIHVu
dGlsIHdlIGZpbmQgZWl0aGVyOgogICAgIC8vIDEpIGEgZm9jdXNhYmxlIG5vZGUsIG9yCkBAIC0x
NzAsMTEgKzE4NSwxMSBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRlZXBGb2N1c2FibGVOb2Rl
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgSwogICAgICAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gb3duZXItPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVudCgpOwogICAg
ICAgICAgICAgZm91bmROb2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBkb2N1bWVu
dCwgMCwgZXZlbnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHNoYWRv
d1Jvb3Qobm9kZSkpOwotICAgICAgICAgICAgLy8gRklYTUU6IFNvbWUgZWxlbWVudHMgKGUuZy4g
SFRNTElucHV0RWxlbWVudCBhbmQgSFRNTFRleHRBcmVhRWxlbWVudCkgZG8gZXh0cmEgd29yayBp
biB0aGVpciBmb2N1cygpIG1ldGhvZHMuCi0gICAgICAgICAgICAvLyBTa2lwcGluZyB0aGVzZSBl
bGVtZW50cyBpcyB0aGUgc2FmZXN0IGZpeCB1bnRpbCB3ZSBmaW5kIGEgYmV0dGVyIHdheS4KLSAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBub2RlLT5oYXNUYWdO
YW1lKHRleHRhcmVhVGFnKSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVbnRpbCBhIGZvY3VzIHJl
LXRhcmdldGluZyAoYnVnIDYxNDIxKSBpcyBpbXBsZW1lbnRlZCwKKyAgICAgICAgICAgIC8vIHNr
aXBwaW5nIHRoZXNlIGVsZW1lbnRzIGlzIHRoZSBzYWZlc3Qgd2F5IHRvIGtlZXAgYSBjb21wYXRp
YmlsaXR5LgorICAgICAgICAgICAgaWYgKGhhc0N1c3RvbUZvY3VzTG9naWMobm9kZSkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdChub2RlKSk7
CiAgICAgICAgICAgICBmb3VuZE5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIHNo
YWRvd1Jvb3Qobm9kZSksIDAsIGV2ZW50KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWZvdW5k
Tm9kZSkKQEAgLTI0NCw3ICsyNTksNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZv
Y3VzSW5Eb2N1bWVudE9yZGVyKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogCiAgICAg
ICAgIC8vIENocm9tZSBkb2Vzbid0IHdhbnQgZm9jdXMsIHNvIHdlIHNob3VsZCB3cmFwIGZvY3Vz
LgogICAgICAgICBub2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT5kb2N1bWVudCgpLCAwLCBldmVudCk7Ci0gICAgICAgIG5vZGUgPSBkZWVwRm9j
dXNhYmxlTm9kZShkaXJlY3Rpb24sIG5vZGUsIGV2ZW50KTsKKyAgICAgICAgbm9kZSA9IGZpbmRG
b2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFkb3dSb290KGRp
cmVjdGlvbiwgbm9kZSwgZXZlbnQpOwogCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTI5Niw2ICszMTEsMTYgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtl
eWIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGlubGluZSBOb2RlKiBvd25lck9mVHJl
ZVNjb3BlKFRyZWVTY29wZSogc2NvcGUpCit7CisgICAgQVNTRVJUKHNjb3BlKTsKKyAgICBpZiAo
c2NvcGUtPmlzU2hhZG93Um9vdCgpKQorICAgICAgICByZXR1cm4gc2NvcGUtPnNoYWRvd0hvc3Qo
KTsKKyAgICBpZiAoc2NvcGUtPmRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIHJldHVybiBz
Y29wZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+b3duZXJFbGVtZW50KCk7CisgICAgcmV0dXJuIDA7
Cit9CisKIE5vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NUcmVl
U2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBj
dXJyZW50Tm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGZp
bmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgc2NvcGUsIGN1cnJlbnROb2RlLCBldmVudCk7CkBA
IC0zMDcsNyArMzMyLDcgQEAgTm9kZSogRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlTm9k
ZUFjcm9zc1RyZWVTY29wZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24KICAgICAgICAgbm9kZSA9
IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgb3duZXItPnRyZWVTY29wZSgpLCBvd25lciwg
ZXZlbnQpOwogICAgICAgICBzY29wZSA9IG93bmVyLT50cmVlU2NvcGUoKTsKICAgICB9Ci0gICAg
bm9kZSA9IGRlZXBGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgbm9kZSwgZXZlbnQpOworICAgIG5v
ZGUgPSBmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudE9yU2hh
ZG93Um9vdChkaXJlY3Rpb24sIG5vZGUsIGV2ZW50KTsKICAgICByZXR1cm4gbm9kZTsKIH0KIApA
QCAtNDMxLDE2ICs0NTYsNiBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNh
YmxlTm9kZShUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5YgogICAgIHJldHVybiBw
cmV2aW91c05vZGVXaXRoTG93ZXJUYWJJbmRleChsYXN0LCBzdGFydGluZ1RhYkluZGV4LCBldmVu
dCk7CiB9CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6b3duZXJPZlRyZWVTY29wZShUcmVlU2Nv
cGUqIHNjb3BlKQotewotICAgIEFTU0VSVChzY29wZSk7Ci0gICAgaWYgKHNjb3BlLT5pc1NoYWRv
d1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIHNjb3BlLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKHNj
b3BlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gc2NvcGUtPmRvY3VtZW50
KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOwotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMg
Ym9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9kZSAqbm9kZSkKIHsKICAgICBBU1NFUlQo
bm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAppbmRleCA2NjAzODcyZjQ5
NWJmNTZkZGM1ZWI2NzkwNDkwNGE1YjU4NWFmYTc2Li5kZDQwOTRkZTdjYmY1ZjI1ODI4YWY1M2Rh
MWQ4YzdiYTExNGYwM2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKQEAg
LTM0LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZvY3VzQ2FuZGlk
YXRlOworY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSW50UmVjdDsKIGNsYXNz
IEtleWJvYXJkRXZlbnQ7CkBAIC02MSwxMyArNjIsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Rm9jdXNlZChib29sKTsKICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNG
b2N1c2VkOyB9CiAKKyAgICBib29sIHRyYW5zZmVyRm9jdXNUb0VsZW1lbnRJblNoYWRvd1Jvb3Qo
RWxlbWVudCogc2hhZG93SG9zdCwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOworCiBw
cml2YXRlOgogICAgIGJvb2wgYWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlv
biwgS2V5Ym9hcmRFdmVudCopOwogICAgIGJvb2wgYWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVy
KEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgYm9vbCBpbml0aWFsRm9jdXMpOwogCiAg
ICAgTm9kZSogZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUoRm9jdXNEaXJlY3Rpb24s
IFRyZWVTY29wZSogc3RhcnRTY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKLSAg
ICBOb2RlKiBkZWVwRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiwgTm9kZSosIEtleWJvYXJk
RXZlbnQqKTsKLSAgICBOb2RlKiBvd25lck9mVHJlZVNjb3BlKFRyZWVTY29wZSopOworICAgIE5v
ZGUqIGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFk
b3dSb290KEZvY3VzRGlyZWN0aW9uLCBOb2RlKiwgS2V5Ym9hcmRFdmVudCopOwogCiAgICAgLy8g
U2VhcmNoZXMgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJlZSBzY29wZSwgc3RhcnRpbmcgZnJvbSBzdGFy
dCBub2RlLCBmb3IgdGhlIG5leHQvcHJldmlvdXMgc2VsZWN0YWJsZSBlbGVtZW50IHRoYXQgY29t
ZXMgYWZ0ZXIvYmVmb3JlIHN0YXJ0IG5vZGUuCiAgICAgLy8gVGhlIG9yZGVyIGZvbGxvd2VkIGlz
IGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDE3LjExLjEgb2YgdGhlIEhUTUw0IHNwZWMsIHdoaWNo
IGlzIGVsZW1lbnRzIHdpdGggdGFiIGluZGV4ZXMK
</data>

          </attachment>
      

    </bug>

</bugzilla>