<?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>56020</bug_id>
          
          <creation_ts>2011-03-09 08:47:21 -0800</creation_ts>
          <short_desc>WebKit2: Pressing Tab in Web Inspector&apos;s console does not cycle through completion options</short_desc>
          <delta_ts>2019-08-08 19:11:19 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200558</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Jeff Miller">jeffm</assigned_to>
          <cc>jeffm</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>364520</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-09 08:47:21 -0800</bug_when>
    <thetext>To reproduce:

1. Go to http://webkit.org/
2. Open the Inspector
3. In the Console, type &quot;location.&quot; without the quotes
4. When the completion suggestion appears, press Tab

A Tab is inserted, rather than the next completion suggestion appearing. This does not happen on Mac, or in WebKit1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364521</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-09 08:47:47 -0800</bug_when>
    <thetext>&lt;rdar://problem/9108368&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382357</commentid>
    <comment_count>2</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-08 10:32:05 -0700</bug_when>
    <thetext>This is a general problem with any WK2 web view that&apos;s not hosted inside a Safari window (e.g. the inspector).

Safari needs to call TranslateMessage() if the web view does not handle the key message. Unlike WK1, WK2 handles Windows messages asynchronously (since they need to be sent to the web process), and the WKPageUIClient has a didNotHandleKeyEvent callback that gets invoked when the web view doesn&apos;t handle the key message.

However, Safari only installs a WKPageUIClient on web views that are hosted inside a Safari window.  For web views like the inspector, it calls TranslateMessage() immediately, which in this case is causing a tab character to be generated.

I think we need a global didNotHandleKeyEvent callback into the client application for pages that don&apos;t have a WKPageUIClient installed so that Safari can defer calling TranslateMessage() until it knows whether the key message is handled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383438</commentid>
    <comment_count>3</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-11 13:33:25 -0700</bug_when>
    <thetext>*** Bug 58264 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383462</commentid>
    <comment_count>4</comment_count>
      <attachid>89074</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-11 13:46:13 -0700</bug_when>
    <thetext>Created attachment 89074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383477</commentid>
    <comment_count>5</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-11 13:54:30 -0700</bug_when>
    <thetext>After discussing this with Sam, we decided that it&apos;s fine for now if the WebPageProxy calls TranslateMessage() in this case, rather than coming up with a mechanism to communicate this back to the application outside of the PageUIClient.  The patch I attached does this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383478</commentid>
    <comment_count>6</comment_count>
      <attachid>89074</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-11 13:54:33 -0700</bug_when>
    <thetext>Comment on attachment 89074
Patch

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

Presumably we should modify MiniBrowser not to call TranslateMessage, too.

Is there a way to make a test for this? Maybe TestWebKitAPI could see if a WM_CHAR event gets put into the message queue.

&gt; Source/WebKit2/UIProcess/WebUIClient.h:67
&gt; +    bool canNotHandleKeyEvent() const;

Boy, this name is confusing! I&apos;d suggest hasDidNotHandleKeyEventCallback or similar. implementsDidNotHandleKeyEvent perhaps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383517</commentid>
    <comment_count>7</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-11 14:23:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 89074 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89074&amp;action=review
&gt; 
&gt; Presumably we should modify MiniBrowser not to call TranslateMessage, too.

Will do.

&gt; 
&gt; Is there a way to make a test for this? Maybe TestWebKitAPI could see if a WM_CHAR event gets put into the message queue.

On IRC, Adam elaborated:

&quot;I was imagining that you&apos;d set up a WKView with no UI client, post a WM_KEYDOWN event, and wait to see if a WM_CHAR event shows up in the message queue (without calling ::TranslateMessage yourself) in TestWebKitAPI. For bonus points you could repeat the test but with a UI client that implementes didNotHandleKeyEvent and ensure that no WM_CHAR appears.&quot;
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebUIClient.h:67
&gt; &gt; +    bool canNotHandleKeyEvent() const;
&gt; 
&gt; Boy, this name is confusing! I&apos;d suggest hasDidNotHandleKeyEventCallback or similar. implementsDidNotHandleKeyEvent perhaps?

I was trying to follow the idiom set by WebUIClient::canRunBeforeUnloadConfirmPanel() and WebUIClient::runBeforeUnloadConfirmPanel(), but it&apos;s tough with this function name.  I&apos;ll go with implementsDidNotHandleKeyEvent().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384158</commentid>
    <comment_count>8</comment_count>
      <attachid>89228</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-12 10:58:44 -0700</bug_when>
    <thetext>Created attachment 89228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384210</commentid>
    <comment_count>9</comment_count>
      <attachid>89235</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-12 11:51:02 -0700</bug_when>
    <thetext>Created attachment 89235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384220</commentid>
    <comment_count>10</comment_count>
      <attachid>89235</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-12 11:56:12 -0700</bug_when>
    <thetext>Comment on attachment 89235
Patch

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

&gt; Tools/ChangeLog:12
&gt; +        WebKit2: Pressing Tab in Web Inspector&apos;s console does not cycle through completion options
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=56020
&gt; +
&gt; +        Don&apos;t call TranslateMessage() in the MiniBrowser or TestWebKitAPI for key messages destined for a WebKit2 view,
&gt; +        since WebKit will do this for us.  If we didn&apos;t do this, TranslateMessage() would be called twice,
&gt; +        which would generate two characters for every keypress (for example).
&gt; +        
&gt; +        Add new WebKit2/TranslateMessageGeneratesWMChar test to test expected TranslateMessage() behavior.

I think it&apos;s worth adding a comment about why we didn&apos;t bother to modify WebKitTestRunner.

&gt; Tools/MiniBrowser/win/main.cpp:44
&gt; +static bool shouldTranslateMessage(MSG msg)

Can use a const MSG&amp;.

&gt; Tools/MiniBrowser/win/main.cpp:48
&gt; +    if ((msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN || msg.message == WM_KEYUP || msg.message == WM_SYSKEYUP)) {

Making this an early return would be better.

&gt; Tools/MiniBrowser/win/main.cpp:55
&gt; +        TCHAR className[256];
&gt; +        if (!::GetClassName(msg.hwnd, className, ARRAYSIZE(className)))
&gt; +            return true;
&gt; +
&gt; +        // Don&apos;t call TranslateMessage() on key events destined for a WebKit2 view, WebKit will do this if it doesn&apos;t handle the message.
&gt; +        // It would be nice to use some API here instead of hard-coding the window class name.
&gt; +        return _tcscmp(className, _T(&quot;WebKit2WebViewWindowClass&quot;));

In new code we&apos;ve been avoiding TCHAR and using wchar_t directly. I think that would be good to do here, too.

&gt; Tools/TestWebKitAPI/PlatformUtilities.h:41
&gt; +bool shouldTranslateMessage(MSG);

Could pass a const MSG&amp;.

&gt; Tools/TestWebKitAPI/win/PlatformUtilitiesWin.cpp:36
&gt; +#include &lt;tchar.h&gt;

In

&gt; Tools/TestWebKitAPI/win/PlatformUtilitiesWin.cpp:76
&gt; +bool shouldTranslateMessage(MSG msg)
&gt; +{
&gt; +    // Only these four messages are actually translated by ::TranslateMessage or ::TranslateAccelerator.
&gt; +    // It&apos;s useless (though harmless) to call those functions for other messages, so we always allow other messages to be translated.
&gt; +    if ((msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN || msg.message == WM_KEYUP || msg.message == WM_SYSKEYUP)) {
&gt; +        TCHAR className[256];
&gt; +        if (!::GetClassName(msg.hwnd, className, ARRAYSIZE(className)))
&gt; +            return true;
&gt; +
&gt; +        // Don&apos;t call TranslateMessage() on key events destined for a WebKit2 view, WebKit will do this if it doesn&apos;t handle the message.
&gt; +        // It would be nice to use some API here instead of hard-coding the window class name.
&gt; +        return _tcscmp(className, _T(&quot;WebKit2WebViewWindowClass&quot;));
&gt; +    }
&gt; +    
&gt; +    return true;
&gt; +}

Same comments here as for MiniBrowser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384324</commentid>
    <comment_count>11</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-12 13:44:22 -0700</bug_when>
    <thetext>Committed r83633: &lt;http://trac.webkit.org/changeset/83633&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89074</attachid>
            <date>2011-04-11 13:46:13 -0700</date>
            <delta_ts>2011-04-11 14:24:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56020-20110411134611.patch</filename>
            <type>text/plain</type>
            <size>3496</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDg2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDQtMTEgIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYktpdDI6IFByZXNzaW5nIFRhYiBpbiBXZWIgSW5zcGVjdG9yJ3Mg
Y29uc29sZSBkb2VzIG5vdCBjeWNsZSB0aHJvdWdoIGNvbXBsZXRpb24gb3B0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYwMjAKKyAgICAgICAg
CisgICAgICAgIFNhZmFyaSB3YXMgYWx3YXlzIGNhbGxpbmcgVHJhbnNsYXRlTWVzc2FnZSgpIG9u
IGtleSBldmVudHMgc2luY2UgaXQgaGFzIG5vIHdheSB0byBrbm93IHdoZXRoZXIKKyAgICAgICAg
V2ViS2l0IGhhbmRsZWQgdGhlIGV2ZW50IHdpdGhvdXQgYSBQYWdlVUlDbGllbnQgKHdoaWNoIFNh
ZmFyaSBvbmx5IGluc3RhbGxzIG9uIHBhZ2VzIGluc2lkZQorICAgICAgICBhIFNhZmFyaSB3aW5k
b3cpLCB3aGljaCB3YXMgZ2VuZXJhdGluZyBhIFdNX0NIQVIgbWVzc2FnZSBjb250YWluaW5nIHRo
ZSB0YWIgaW4gdGhpcyBjYXNlLiAgVGhlIGZpeAorICAgICAgICBpcyBmb3IgU2FmYXJpIHRvIG5l
dmVyIGNhbGwgVHJhbnNsYXRlTWVzc2FnZSgpIG9uIGtleSBldmVudHMgb3V0c2lkZSBvZiBhIFNh
ZmFyaSB3aW5kb3csIGJ1dCB0aGlzCisgICAgICAgIG1lYW5zIHRoZSBXZWJQYWdlUHJveHkgbmVl
ZHMgdG8gZG8gdGhpcyBmb3IgdW5oYW5kbGVkIGtleSBldmVudHMgaWYgdGhlcmUgaXMgbm8gZGlk
Tm90SGFuZGxlS2V5RXZlbnQKKyAgICAgICAgY2FsbGJhY2sgaW4gdGhlIFBhZ2VVSUNsaWVudC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCk6IENhbGwgVHJhbnNsYXRlTWVzc2FnZSgp
IG9uIFdpbmRvd3MgZm9yIHVuaGFuZGxlZCBrZXkgZXZlbnRzIHRoYXQgY2FuJ3QgYmUgaGFuZGxl
ZCBieSB0aGUgUGFnZVVJQ2xpZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVJQ2xpZW50OjpjYW5Ob3RIYW5kbGVLZXlFdmVudCk6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5oOiBBZGRlZCBjYW5Ob3RI
YW5kbGVLZXlFdmVudCgpLgorCiAyMDExLTA0LTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA4MzQ0MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTQ5LDcgKzI1NDksMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVF
dmVudCh1aW50MwogICAgICAgICBpZiAoaGFuZGxlZCkKICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgIG1fdWlDbGllbnQuZGlkTm90SGFuZGxlS2V5RXZlbnQodGhpcywgZXZlbnQpOworICAg
ICAgICBpZiAobV91aUNsaWVudC5jYW5Ob3RIYW5kbGVLZXlFdmVudCgpKQorICAgICAgICAgICAg
bV91aUNsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVudCh0aGlzLCBldmVudCk7CisjaWYgUExBVEZP
Uk0oV0lOKQorICAgICAgICBlbHNlCisgICAgICAgICAgICA6OlRyYW5zbGF0ZU1lc3NhZ2UoZXZl
bnQubmF0aXZlRXZlbnQoKSk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAkocmV2aXNpb24g
ODM0NDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDExIEBAIHZvaWQgV2ViVUlDbGllbnQ6Om1pc3NpbmdQ
bHVnaW5CdXR0b25DbGkKICAgICBtX2NsaWVudC5taXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZCh0
b0FQSShwYWdlKSwgdG9BUEkobWltZVR5cGUuaW1wbCgpKSwgdG9BUEkodXJsLmltcGwoKSksIHRv
QVBJKHBsdWdpbnNQYWdlVVJMLmltcGwoKSksIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCiti
b29sIFdlYlVJQ2xpZW50OjpjYW5Ob3RIYW5kbGVLZXlFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY2xpZW50LmRpZE5vdEhhbmRsZUtleUV2ZW50OworfQorCiB2b2lkIFdlYlVJQ2xpZW50
OjpkaWROb3RIYW5kbGVLZXlFdmVudChXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghbV9jbGllbnQuZGlkTm90SGFuZGxl
S2V5RXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuaAkocmV2
aXNpb24gODM0NDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0
dXNUZXh0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgbW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiwgV2ViRXZlbnQ6Ok1vZGlmaWVycywgQVBJT2Jq
ZWN0Kik7CiAgICAgdm9pZCBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJQYWdlUHJveHkq
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBwbHVnaW5zUGFnZVVSTCk7CisgICAgCisgICAgYm9vbCBjYW5Ob3RIYW5kbGVLZXlFdmVudCgp
IGNvbnN0OwogICAgIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoV2ViUGFnZVByb3h5KiwgY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOwogCiAgICAgYm9vbCB0b29sYmFyc0FyZVZpc2li
bGUoV2ViUGFnZVByb3h5Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89228</attachid>
            <date>2011-04-12 10:58:44 -0700</date>
            <delta_ts>2011-04-12 11:35:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56020-20110412105842.patch</filename>
            <type>text/plain</type>
            <size>12670</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNjA5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDQtMTIgIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYktpdDI6IFByZXNzaW5nIFRhYiBpbiBXZWIgSW5zcGVjdG9yJ3Mg
Y29uc29sZSBkb2VzIG5vdCBjeWNsZSB0aHJvdWdoIGNvbXBsZXRpb24gb3B0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYwMjAKKworICAgICAg
ICBTYWZhcmkgd2FzIGFsd2F5cyBjYWxsaW5nIFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiBrZXkgZXZl
bnRzIHNpbmNlIGl0IGhhcyBubyB3YXkgdG8ga25vdyB3aGV0aGVyCisgICAgICAgIFdlYktpdCBo
YW5kbGVkIHRoZSBldmVudCB3aXRob3V0IGEgUGFnZVVJQ2xpZW50ICh3aGljaCBTYWZhcmkgb25s
eSBpbnN0YWxscyBvbiBwYWdlcyBpbnNpZGUKKyAgICAgICAgYSBTYWZhcmkgd2luZG93KSwgd2hp
Y2ggd2FzIGdlbmVyYXRpbmcgYSBXTV9DSEFSIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgdGFiIGlu
IHRoaXMgY2FzZS4gIFRoZSBmaXgKKyAgICAgICAgaXMgZm9yIFNhZmFyaSB0byBuZXZlciBjYWxs
IFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiBrZXkgZXZlbnRzIG91dHNpZGUgb2YgYSBTYWZhcmkgd2lu
ZG93LCBidXQgdGhpcworICAgICAgICBtZWFucyB0aGUgV2ViUGFnZVByb3h5IG5lZWRzIHRvIGRv
IHRoaXMgZm9yIHVuaGFuZGxlZCBrZXkgZXZlbnRzIGlmIHRoZXJlIGlzIG5vIGRpZE5vdEhhbmRs
ZUtleUV2ZW50CisgICAgICAgIGNhbGxiYWNrIGluIHRoZSBQYWdlVUlDbGllbnQuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQpOiBDYWxsIFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiBXaW5k
b3dzIGZvciB1bmhhbmRsZWQga2V5IGV2ZW50cyB0aGF0IGNhbid0IGJlIGhhbmRsZWQgYnkgdGhl
IFBhZ2VVSUNsaWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6Y2FuTm90SGFuZGxlS2V5RXZlbnQpOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaDogQWRkZWQgY2FuTm90SGFuZGxlS2V5
RXZlbnQoKS4KKwogMjAxMS0wNC0xMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlh
LmNvbT4KIAogICAgICAgICBGaXhlZCBHVEsgY29tcGlsYXRpb24gYWZ0ZXIgcjgzNDU0LgpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDgz
NTg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NzMsNyArMjU3MywxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVj
ZWl2ZUV2ZW50KHVpbnQzCiAgICAgICAgIGlmIChoYW5kbGVkKQogICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgbV91aUNsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVudCh0aGlzLCBldmVudCk7
CisgICAgICAgIGlmIChtX3VpQ2xpZW50LmltcGxlbWVudHNEaWROb3RIYW5kbGVLZXlFdmVudCgp
KQorICAgICAgICAgICAgbV91aUNsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVudCh0aGlzLCBldmVu
dCk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICBlbHNlCisgICAgICAgICAgICA6OlRyYW5z
bGF0ZU1lc3NhZ2UoZXZlbnQubmF0aXZlRXZlbnQoKSk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50
LmNwcAkocmV2aXNpb24gODM1ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlD
bGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDExIEBAIHZvaWQgV2ViVUlD
bGllbnQ6Om1pc3NpbmdQbHVnaW5CdXR0b25DbGkKICAgICBtX2NsaWVudC5taXNzaW5nUGx1Z2lu
QnV0dG9uQ2xpY2tlZCh0b0FQSShwYWdlKSwgdG9BUEkobWltZVR5cGUuaW1wbCgpKSwgdG9BUEko
dXJsLmltcGwoKSksIHRvQVBJKHBsdWdpbnNQYWdlVVJMLmltcGwoKSksIG1fY2xpZW50LmNsaWVu
dEluZm8pOwogfQogCitib29sIFdlYlVJQ2xpZW50OjppbXBsZW1lbnRzRGlkTm90SGFuZGxlS2V5
RXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVu
dDsKK30KKwogdm9pZCBXZWJVSUNsaWVudDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQoV2ViUGFnZVBy
b3h5KiBwYWdlLCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBp
ZiAoIW1fY2xpZW50LmRpZE5vdEhhbmRsZUtleUV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDgzNTg3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U3RhdHVzVGV4dChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYlBhZ2VQcm94eSosIFdl
YkV2ZW50OjpNb2RpZmllcnMsIEFQSU9iamVjdCopOwogICAgIHZvaWQgbWlzc2luZ1BsdWdpbkJ1
dHRvbkNsaWNrZWQoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcGx1Z2luc1BhZ2VVUkwpOworICAgIAorICAgIGJv
b2wgaW1wbGVtZW50c0RpZE5vdEhhbmRsZUtleUV2ZW50KCkgY29uc3Q7CiAgICAgdm9pZCBkaWRO
b3RIYW5kbGVLZXlFdmVudChXZWJQYWdlUHJveHkqLCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50Jik7CiAKICAgICBib29sIHRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkqKTsKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDgzNjA5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjggQEAKKzIwMTEtMDQtMTIgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFByZXNz
aW5nIFRhYiBpbiBXZWIgSW5zcGVjdG9yJ3MgY29uc29sZSBkb2VzIG5vdCBjeWNsZSB0aHJvdWdo
IGNvbXBsZXRpb24gb3B0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTYwMjAKKyAgICAgICAgCisgICAgICAgIERvbid0IGNhbGwgVHJhbnNsYXRl
TWVzc2FnZSgpIGluIHRoZSBNaW5pQnJvd3NlciBmb3Iga2V5IG1lc3NhZ2VzIGRlc3RpbmVkIGZv
ciBhIFdlYktpdDIgdmlldywKKyAgICAgICAgc2luY2UgV2ViS2l0IHdpbGwgZG8gdGhpcyBmb3Ig
dXMuICBJZiB3ZSBkaWRuJ3QgZG8gdGhpcywgVHJhbnNsYXRlTWVzc2FnZSgpIHdvdWxkIGJlIGNh
bGxlZCB0d2ljZSwKKyAgICAgICAgd2hpY2ggd291bGQgZ2VuZXJhdGUgdHdvIGNoYXJhY3RlcnMg
Zm9yIGV2ZXJ5IGtleXByZXNzIChmb3IgZXhhbXBsZSkuCisgICAgICAgIAorICAgICAgICBBZGQg
bmV3IFdlYktpdDIvVHJhbnNsYXRlTWVzc2FnZUdlbmVyYXRlc1dNQ2hhciB0ZXN0IHRvIHRlc3Qg
ZXhwZWN0ZWQgVHJhbnNsYXRlTWVzc2FnZSgpIGJlaGF2aW9yLgorCisgICAgICAgICogTWluaUJy
b3dzZXIvd2luL21haW4uY3BwOgorICAgICAgICAoc2hvdWxkVHJhbnNsYXRlTWVzc2FnZSk6IEFk
ZGVkLgorICAgICAgICAoX3RXaW5NYWluKTogRG9uJ3QgY2FsbCBUcmFuc2xhdGVNZXNzYWdlKCkg
dW5sZXNzIHNob3VsZFRyYW5zbGF0ZU1lc3NhZ2UoKSBzYXlzIHRvLgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3Lmg6IEFkZGVkIHNpbXVsYXRlQUtleURvd24oKS4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvd2luL1RyYW5zbGF0ZU1lc3NhZ2VH
ZW5lcmF0ZXNXTUNoYXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRpZE5v
dEhhbmRsZUtleUV2ZW50Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnJ1bkFuZFdhdGNoRm9yV01DaGFyKTogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKTogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1XZWJWaWV3
V2luLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxh
dGVBS2V5RG93bik6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJL
aXRBUEkudmNwcm9qOiBBZGRlZCBUcmFuc2xhdGVNZXNzYWdlR2VuZXJhdGVzV01DaGFyLmNwcC4K
KwogMjAxMS0wNC0xMiAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAg
UnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci93
aW4vbWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvd2luL21haW4uY3Bw
CShyZXZpc2lvbiA4MzU4NykKKysrIFRvb2xzL01pbmlCcm93c2VyL3dpbi9tYWluLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMjMgQEAKIAogI3ByYWdtYSBjb21tZW50KGxpbmtlciwg
Ii9tYW5pZmVzdGRlcGVuZGVuY3k6XCJ0eXBlPSd3aW4zMicgbmFtZT0nTWljcm9zb2Z0LldpbmRv
d3MuQ29tbW9uLUNvbnRyb2xzJyB2ZXJzaW9uPSc2LjAuMC4wJyBwcm9jZXNzb3JBcmNoaXRlY3R1
cmU9JyIgUFJPQ0VTU09SQVJDSElURUNUVVJFICInIHB1YmxpY0tleVRva2VuPSc2NTk1YjY0MTQ0
Y2NmMWRmJyBsYW5ndWFnZT0nKidcIiIpCiAKK3N0YXRpYyBib29sIHNob3VsZFRyYW5zbGF0ZU1l
c3NhZ2UoTVNHIG1zZykKK3sKKyAgICAvLyBPbmx5IHRoZXNlIGZvdXIgbWVzc2FnZXMgYXJlIGFj
dHVhbGx5IHRyYW5zbGF0ZWQgYnkgOjpUcmFuc2xhdGVNZXNzYWdlIG9yIDo6VHJhbnNsYXRlQWNj
ZWxlcmF0b3IuCisgICAgLy8gSXQncyB1c2VsZXNzICh0aG91Z2ggaGFybWxlc3MpIHRvIGNhbGwg
dGhvc2UgZnVuY3Rpb25zIGZvciBvdGhlciBtZXNzYWdlcywgc28gd2UgYWx3YXlzIGFsbG93IG90
aGVyIG1lc3NhZ2VzIHRvIGJlIHRyYW5zbGF0ZWQuCisgICAgaWYgKChtc2cubWVzc2FnZSA9PSBX
TV9LRVlET1dOIHx8IG1zZy5tZXNzYWdlID09IFdNX1NZU0tFWURPV04gfHwgbXNnLm1lc3NhZ2Ug
PT0gV01fS0VZVVAgfHwgbXNnLm1lc3NhZ2UgPT0gV01fU1lTS0VZVVApKSB7CisgICAgICAgIFRD
SEFSIGNsYXNzTmFtZVsyNTZdOworICAgICAgICBpZiAoITo6R2V0Q2xhc3NOYW1lKG1zZy5od25k
LCBjbGFzc05hbWUsIEFSUkFZU0laRShjbGFzc05hbWUpKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIC8vIERvbid0IGNhbGwgVHJhbnNsYXRlTWVzc2FnZSgpIG9uIGtleSBl
dmVudHMgZGVzdGluZWQgZm9yIGEgV2ViS2l0MiB2aWV3LCBXZWJLaXQgd2lsbCBkbyB0aGlzIGlm
IGl0IGRvZXNuJ3QgaGFuZGxlIHRoZSBtZXNzYWdlLgorICAgICAgICAvLyBJdCB3b3VsZCBiZSBu
aWNlIHRvIHVzZSBzb21lIEFQSSBoZXJlIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcgdGhlIHdpbmRv
dyBjbGFzcyBuYW1lLgorICAgICAgICByZXR1cm4gX3Rjc2NtcChjbGFzc05hbWUsIF9UKCJXZWJL
aXQyV2ViVmlld1dpbmRvd0NsYXNzIikpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogaW50IFdJTkFQSSBfdFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNF
IGhQcmV2SW5zdGFuY2UsIExQVFNUUiBscHN0ckNtZExpbmUsIGludCBuQ21kU2hvdykKIHsKICAg
ICBNaW5pQnJvd3Nlcjo6c2hhcmVkKCkuaW5pdGlhbGl6ZShoSW5zdGFuY2UpOwpAQCAtNTIsNyAr
NjksOSBAQCBpbnQgV0lOQVBJIF90V2luTWFpbihISU5TVEFOQ0UgaEluc3RhbmNlCiAgICAgd2hp
bGUgKEJPT0wgcmVzdWx0ID0gOjpHZXRNZXNzYWdlKCZtZXNzYWdlLCAwLCAwLCAwKSkgewogICAg
ICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIDo6VHJh
bnNsYXRlTWVzc2FnZSgmbWVzc2FnZSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkVHJh
bnNsYXRlTWVzc2FnZShtZXNzYWdlKSkKKyAgICAgICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgm
bWVzc2FnZSk7CiAKICAgICAgICAgaWYgKCFNaW5pQnJvd3Nlcjo6c2hhcmVkKCkuaGFuZGxlTWVz
c2FnZSgmbWVzc2FnZSkpCiAgICAgICAgICAgICA6OkRpc3BhdGNoTWVzc2FnZSgmbWVzc2FnZSk7
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlzaW9uIDgzNTg3
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaW11bGF0ZVJpZ2h0Q2xpY2so
dW5zaWduZWQgeCwgdW5zaWduZWQgeSk7CiAKICNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBz
aW11bGF0ZUFLZXlEb3duKCk7CiAgICAgdm9pZCBzZXRQYXJlbnRXaW5kb3dNZXNzYWdlT2JzZXJ2
ZXIoV2luZG93TWVzc2FnZU9ic2VydmVyKiBvYnNlcnZlcikgeyBtX3BhcmVudFdpbmRvd01lc3Nh
Z2VPYnNlcnZlciA9IG9ic2VydmVyOyB9CiAjZW5kaWYKIApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL3dpbi9UcmFuc2xhdGVNZXNzYWdlR2VuZXJhdGVzV01DaGFyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvd2luL1Ry
YW5zbGF0ZU1lc3NhZ2VHZW5lcmF0ZXNXTUNoYXIuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL3dpbi9UcmFuc2xhdGVNZXNzYWdlR2VuZXJhdGVz
V01DaGFyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJUZXN0LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgorI2luY2x1ZGUgIldpbmRvd01lc3NhZ2VPYnNlcnZlci5o
IgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgeworCitzdGF0aWMgYm9vbCBkaWRTZWVXTUNoYXI7CitzdGF0aWMgYm9vbCBkaWROb3RI
YW5kbGVLZXlFdmVudENhbGxlZDsKKworc3RhdGljIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnRD
YWxsYmFjayhXS1BhZ2VSZWYsIFdLTmF0aXZlRXZlbnRQdHIgZXZlbnQsIGNvbnN0IHZvaWQqKQor
eworICAgIGlmIChldmVudC0+bWVzc2FnZSAhPSBXTV9LRVlET1dOKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gRG9uJ3QgY2FsbCBUcmFuc2xhdGVNZXNzYWdlKCkgaGVyZSBzbyBhIFdN
X0NIQVIgaXNuJ3QgZ2VuZXJhdGVkLgorICAgIGRpZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGVkID0g
dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgcnVuQW5kV2F0Y2hGb3JXTUNoYXIoYm9vbCogZG9uZSkK
K3sKKyAgICB3aGlsZSAoISpkb25lKSB7CisgICAgICAgIE1TRyBtc2c7CisgICAgICAgIEJPT0wg
cmVzdWx0ID0gOjpHZXRNZXNzYWdlVygmbXNnLCAwLCAwLCAwKTsKKyAgICAgICAgaWYgKCFyZXN1
bHQgfHwgcmVzdWx0ID09IC0xKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAg
ICBpZiAobXNnLm1lc3NhZ2UgPT0gV01fQ0hBUikKKyAgICAgICAgICAgIGRpZFNlZVdNQ2hhciA9
IHRydWU7CisgICAgICAgIAorICAgICAgICA6OlRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisgICAg
ICAgIDo6RGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworICAgIH0KK30KKworVEVTVChXZWJLaXQyLCBU
cmFuc2xhdGVNZXNzYWdlR2VuZXJhdGVzV01DaGFyKQoreworICAgIFdLUmV0YWluUHRyPFdLQ29u
dGV4dFJlZj4gY29udGV4dChBZG9wdFdLLCBXS0NvbnRleHRDcmVhdGUoKSk7CisgICAgUGxhdGZv
cm1XZWJWaWV3IHdlYlZpZXcoY29udGV4dC5nZXQoKSk7CisKKyAgICB3ZWJWaWV3LnNpbXVsYXRl
QUtleURvd24oKTsKKworICAgIC8vIFdlYktpdCBzaG91bGQgY2FsbCBUcmFuc2xhdGVNZXNzYWdl
KCkgb24gdGhlIFdNX0tFWURPV04gbWVzc2FnZSB0byBnZW5lcmF0ZSB0aGUgV01fQ0hBUiBtZXNz
YWdlLgorICAgIHJ1bkFuZFdhdGNoRm9yV01DaGFyKCZkaWRTZWVXTUNoYXIpOworICAgIAorICAg
IGRpZFNlZVdNQ2hhciA9IGZhbHNlOworCisgICAgV0tQYWdlVUlDbGllbnQgdWlDbGllbnQ7Cisg
ICAgbWVtc2V0KCZ1aUNsaWVudCwgMCwgc2l6ZW9mKHVpQ2xpZW50KSk7CisKKyAgICB1aUNsaWVu
dC5kaWROb3RIYW5kbGVLZXlFdmVudCA9IGRpZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGJhY2s7Cisg
ICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHdlYlZpZXcucGFnZSgpLCAmdWlDbGllbnQpOworCisg
ICAgd2ViVmlldy5zaW11bGF0ZUFLZXlEb3duKCk7CisKKyAgICBydW5BbmRXYXRjaEZvcldNQ2hh
cigmZGlkTm90SGFuZGxlS2V5RXZlbnRDYWxsZWQpOworCisgICAgLy8gV2ViS2l0IHNob3VsZCBu
b3QgaGF2ZSBjYWxsZWQgVHJhbnNsYXRlTWVzc2FnZSgpIG9uIHRoZSBXTV9LRVlET1dOIG1lc3Nh
Z2Ugc2luY2Ugd2UgaW5zdGFsbGVkIGEgZGlkTm90SGFuZGxlS2V5RXZlbnQgY2FsbGJhY2suCisg
ICAgVEVTVF9BU1NFUlQoIWRpZFNlZVdNQ2hhcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi93aW4vVHJhbnNsYXRlTWVzc2FnZUdlbmVyYXRlc1dNQ2hhci5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkocmV2aXNpb24gODM1ODcpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw2ICs5MiwxNCBAQCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVT
cGFjZWJhcktlCiAgICAgOjpTZW5kTWVzc2FnZVcod2luZG93LCBXTV9LRVlVUCwgVktfU1BBQ0Us
ICgxIDw8IHJlcGVhdENvdW50Qml0T2Zmc2V0KSB8ICgzOSA8PCBzY2FuQ29kZUJpdE9mZnNldCkg
fCAoMSA8PCBwcmV2aW91c1N0YXRlQml0T2Zmc2V0KSB8ICgxIDw8IHRyYW5zaXRpb25TdGF0ZUJp
dE9mZnNldCkpOwogfQogCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVBS2V5RG93bigp
Cit7CisgICAgSFdORCB3aW5kb3cgPSBXS1ZpZXdHZXRXaW5kb3cobV92aWV3KTsKKyAgICAKKyAg
ICAvLyBUaGVzZSB2YWx1ZXMgbWF0Y2ggd2hhdCBoYXBwZW5zIHdoZW4geW91IHByZXNzIHRoZSAn
QScga2V5IGluIE5vdGVwYWQsIGFzIG9ic2VydmVkIGJ5IFNweSsrLgorICAgIDo6U2VuZE1lc3Nh
Z2VXKHdpbmRvdywgV01fS0VZRE9XTiwgJ0EnLCAoMSA8PCByZXBlYXRDb3VudEJpdE9mZnNldCkg
fCAoMzAgPDwgc2NhbkNvZGVCaXRPZmZzZXQpKTsKK30KKwogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6
OnNpbXVsYXRlQWx0S2V5UHJlc3MoKQogewogICAgIEhXTkQgd2luZG93ID0gV0tWaWV3R2V0V2lu
ZG93KG1fdmlldyk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9UZXN0V2ViS2l0QVBJ
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9UZXN0V2ViS2l0
QVBJLnZjcHJvagkocmV2aXNpb24gODM1ODcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9U
ZXN0V2ViS2l0QVBJLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTU5LDYgKzU1OSwxMCBAQAog
CQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFRlc3RzXFdlYktpdDJcd2luXFRyYW5zbGF0ZU1lc3NhZ2VHZW5lcmF0ZXNXTUNoYXIuY3BwIgor
CQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFRlc3RzXFdlYktpdDJcd2luXFdNQ2xvc2VDYWxsc1VJQ2xpZW50Q2xvc2UuY3BwIgogCQkJCQkJ
PgogCQkJCQk8L0ZpbGU+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89235</attachid>
            <date>2011-04-12 11:51:02 -0700</date>
            <delta_ts>2011-04-12 11:56:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56020-20110412115059.patch</filename>
            <type>text/plain</type>
            <size>15413</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNjA5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDQtMTIgIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYktpdDI6IFByZXNzaW5nIFRhYiBpbiBXZWIgSW5zcGVjdG9yJ3Mg
Y29uc29sZSBkb2VzIG5vdCBjeWNsZSB0aHJvdWdoIGNvbXBsZXRpb24gb3B0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYwMjAKKworICAgICAg
ICBTYWZhcmkgd2FzIGFsd2F5cyBjYWxsaW5nIFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiBrZXkgZXZl
bnRzIHNpbmNlIGl0IGhhcyBubyB3YXkgdG8ga25vdyB3aGV0aGVyCisgICAgICAgIFdlYktpdCBo
YW5kbGVkIHRoZSBldmVudCB3aXRob3V0IGEgUGFnZVVJQ2xpZW50ICh3aGljaCBTYWZhcmkgb25s
eSBpbnN0YWxscyBvbiBwYWdlcyBpbnNpZGUKKyAgICAgICAgYSBTYWZhcmkgd2luZG93KSwgd2hp
Y2ggd2FzIGdlbmVyYXRpbmcgYSBXTV9DSEFSIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgdGFiIGlu
IHRoaXMgY2FzZS4gIFRoZSBmaXgKKyAgICAgICAgaXMgZm9yIFNhZmFyaSB0byBuZXZlciBjYWxs
IFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiBrZXkgZXZlbnRzIG91dHNpZGUgb2YgYSBTYWZhcmkgd2lu
ZG93LCBidXQgdGhpcworICAgICAgICBtZWFucyB0aGUgV2ViUGFnZVByb3h5IG5lZWRzIHRvIGRv
IHRoaXMgZm9yIHVuaGFuZGxlZCBrZXkgZXZlbnRzIGlmIHRoZXJlIGlzIG5vIGRpZE5vdEhhbmRs
ZUtleUV2ZW50CisgICAgICAgIGNhbGxiYWNrIGluIHRoZSBQYWdlVUlDbGllbnQuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQpOiBDYWxsIFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiBXaW5k
b3dzIGZvciB1bmhhbmRsZWQga2V5IGV2ZW50cyB0aGF0IGNhbid0IGJlIGhhbmRsZWQgYnkgdGhl
IFBhZ2VVSUNsaWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6Y2FuTm90SGFuZGxlS2V5RXZlbnQpOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaDogQWRkZWQgY2FuTm90SGFuZGxlS2V5
RXZlbnQoKS4KKwogMjAxMS0wNC0xMiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlh
LmNvbT4KIAogICAgICAgICBGaXhlZCBHVEsgY29tcGlsYXRpb24gYWZ0ZXIgcjgzNDU0LgpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDgz
NTg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NzMsNyArMjU3MywxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVj
ZWl2ZUV2ZW50KHVpbnQzCiAgICAgICAgIGlmIChoYW5kbGVkKQogICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgbV91aUNsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVudCh0aGlzLCBldmVudCk7
CisgICAgICAgIGlmIChtX3VpQ2xpZW50LmltcGxlbWVudHNEaWROb3RIYW5kbGVLZXlFdmVudCgp
KQorICAgICAgICAgICAgbV91aUNsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVudCh0aGlzLCBldmVu
dCk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICBlbHNlCisgICAgICAgICAgICA6OlRyYW5z
bGF0ZU1lc3NhZ2UoZXZlbnQubmF0aXZlRXZlbnQoKSk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50
LmNwcAkocmV2aXNpb24gODM1ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlD
bGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDExIEBAIHZvaWQgV2ViVUlD
bGllbnQ6Om1pc3NpbmdQbHVnaW5CdXR0b25DbGkKICAgICBtX2NsaWVudC5taXNzaW5nUGx1Z2lu
QnV0dG9uQ2xpY2tlZCh0b0FQSShwYWdlKSwgdG9BUEkobWltZVR5cGUuaW1wbCgpKSwgdG9BUEko
dXJsLmltcGwoKSksIHRvQVBJKHBsdWdpbnNQYWdlVVJMLmltcGwoKSksIG1fY2xpZW50LmNsaWVu
dEluZm8pOwogfQogCitib29sIFdlYlVJQ2xpZW50OjppbXBsZW1lbnRzRGlkTm90SGFuZGxlS2V5
RXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NsaWVudC5kaWROb3RIYW5kbGVLZXlFdmVu
dDsKK30KKwogdm9pZCBXZWJVSUNsaWVudDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQoV2ViUGFnZVBy
b3h5KiBwYWdlLCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBp
ZiAoIW1fY2xpZW50LmRpZE5vdEhhbmRsZUtleUV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDgzNTg3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U3RhdHVzVGV4dChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYlBhZ2VQcm94eSosIFdl
YkV2ZW50OjpNb2RpZmllcnMsIEFQSU9iamVjdCopOwogICAgIHZvaWQgbWlzc2luZ1BsdWdpbkJ1
dHRvbkNsaWNrZWQoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcGx1Z2luc1BhZ2VVUkwpOworICAgIAorICAgIGJv
b2wgaW1wbGVtZW50c0RpZE5vdEhhbmRsZUtleUV2ZW50KCkgY29uc3Q7CiAgICAgdm9pZCBkaWRO
b3RIYW5kbGVLZXlFdmVudChXZWJQYWdlUHJveHkqLCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50Jik7CiAKICAgICBib29sIHRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkqKTsKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDgzNjE2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzIgQEAKKzIwMTEtMDQtMTIgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFByZXNz
aW5nIFRhYiBpbiBXZWIgSW5zcGVjdG9yJ3MgY29uc29sZSBkb2VzIG5vdCBjeWNsZSB0aHJvdWdo
IGNvbXBsZXRpb24gb3B0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTYwMjAKKworICAgICAgICBEb24ndCBjYWxsIFRyYW5zbGF0ZU1lc3NhZ2Uo
KSBpbiB0aGUgTWluaUJyb3dzZXIgb3IgVGVzdFdlYktpdEFQSSBmb3Iga2V5IG1lc3NhZ2VzIGRl
c3RpbmVkIGZvciBhIFdlYktpdDIgdmlldywKKyAgICAgICAgc2luY2UgV2ViS2l0IHdpbGwgZG8g
dGhpcyBmb3IgdXMuICBJZiB3ZSBkaWRuJ3QgZG8gdGhpcywgVHJhbnNsYXRlTWVzc2FnZSgpIHdv
dWxkIGJlIGNhbGxlZCB0d2ljZSwKKyAgICAgICAgd2hpY2ggd291bGQgZ2VuZXJhdGUgdHdvIGNo
YXJhY3RlcnMgZm9yIGV2ZXJ5IGtleXByZXNzIChmb3IgZXhhbXBsZSkuCisgICAgICAgIAorICAg
ICAgICBBZGQgbmV3IFdlYktpdDIvVHJhbnNsYXRlTWVzc2FnZUdlbmVyYXRlc1dNQ2hhciB0ZXN0
IHRvIHRlc3QgZXhwZWN0ZWQgVHJhbnNsYXRlTWVzc2FnZSgpIGJlaGF2aW9yLgorCisgICAgICAg
ICogTWluaUJyb3dzZXIvd2luL21haW4uY3BwOgorICAgICAgICAoc2hvdWxkVHJhbnNsYXRlTWVz
c2FnZSk6IEFkZGVkLgorICAgICAgICAoX3RXaW5NYWluKTogRG9uJ3QgY2FsbCBUcmFuc2xhdGVN
ZXNzYWdlKCkgdW5sZXNzIHNob3VsZFRyYW5zbGF0ZU1lc3NhZ2UoKSBzYXlzIHRvLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1VdGlsaXRpZXMuaDogQWRkZWQgc2hvdWxkVHJhbnNs
YXRlTWVzc2FnZSgpIG9uIFdpbmRvd3MuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bVdlYlZpZXcuaDogQWRkZWQgc2ltdWxhdGVBS2V5RG93bigpLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi93aW4vVHJhbnNsYXRlTWVzc2FnZUdlbmVyYXRlc1dNQ2hhci5j
cHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGlkTm90SGFuZGxlS2V5RXZlbnRD
YWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuQW5kV2F0Y2hGb3JX
TUNoYXIpOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBBZGRlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4pOiBEb24ndCBjYWxsIFRyYW5zbGF0ZU1lc3Nh
Z2UoKSB1bmxlc3Mgc2hvdWxkVHJhbnNsYXRlTWVzc2FnZSgpIHNheXMgdG8uCisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpzaG91bGRUcmFuc2xhdGVNZXNzYWdlKTogQWRkZWQuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVBS2V5RG93bik6IEFkZGVk
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qOiBBZGRl
ZCBUcmFuc2xhdGVNZXNzYWdlR2VuZXJhdGVzV01DaGFyLmNwcC4KKwogMjAxMS0wNC0xMiAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL3dpbi9tYWluLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9NaW5pQnJvd3Nlci93aW4vbWFpbi5jcHAJKHJldmlzaW9uIDgzNTg3KQorKysgVG9v
bHMvTWluaUJyb3dzZXIvd2luL21haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwy
MyBAQAogCiAjcHJhZ21hIGNvbW1lbnQobGlua2VyLCAiL21hbmlmZXN0ZGVwZW5kZW5jeTpcInR5
cGU9J3dpbjMyJyBuYW1lPSdNaWNyb3NvZnQuV2luZG93cy5Db21tb24tQ29udHJvbHMnIHZlcnNp
b249JzYuMC4wLjAnIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0nIiBQUk9DRVNTT1JBUkNISVRFQ1RV
UkUgIicgcHVibGljS2V5VG9rZW49JzY1OTViNjQxNDRjY2YxZGYnIGxhbmd1YWdlPScqJ1wiIikK
IAorc3RhdGljIGJvb2wgc2hvdWxkVHJhbnNsYXRlTWVzc2FnZShNU0cgbXNnKQoreworICAgIC8v
IE9ubHkgdGhlc2UgZm91ciBtZXNzYWdlcyBhcmUgYWN0dWFsbHkgdHJhbnNsYXRlZCBieSA6OlRy
YW5zbGF0ZU1lc3NhZ2Ugb3IgOjpUcmFuc2xhdGVBY2NlbGVyYXRvci4KKyAgICAvLyBJdCdzIHVz
ZWxlc3MgKHRob3VnaCBoYXJtbGVzcykgdG8gY2FsbCB0aG9zZSBmdW5jdGlvbnMgZm9yIG90aGVy
IG1lc3NhZ2VzLCBzbyB3ZSBhbHdheXMgYWxsb3cgb3RoZXIgbWVzc2FnZXMgdG8gYmUgdHJhbnNs
YXRlZC4KKyAgICBpZiAoKG1zZy5tZXNzYWdlID09IFdNX0tFWURPV04gfHwgbXNnLm1lc3NhZ2Ug
PT0gV01fU1lTS0VZRE9XTiB8fCBtc2cubWVzc2FnZSA9PSBXTV9LRVlVUCB8fCBtc2cubWVzc2Fn
ZSA9PSBXTV9TWVNLRVlVUCkpIHsKKyAgICAgICAgVENIQVIgY2xhc3NOYW1lWzI1Nl07CisgICAg
ICAgIGlmICghOjpHZXRDbGFzc05hbWUobXNnLmh3bmQsIGNsYXNzTmFtZSwgQVJSQVlTSVpFKGNs
YXNzTmFtZSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gRG9uJ3Qg
Y2FsbCBUcmFuc2xhdGVNZXNzYWdlKCkgb24ga2V5IGV2ZW50cyBkZXN0aW5lZCBmb3IgYSBXZWJL
aXQyIHZpZXcsIFdlYktpdCB3aWxsIGRvIHRoaXMgaWYgaXQgZG9lc24ndCBoYW5kbGUgdGhlIG1l
c3NhZ2UuCisgICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWUgQVBJIGhlcmUg
aW5zdGVhZCBvZiBoYXJkLWNvZGluZyB0aGUgd2luZG93IGNsYXNzIG5hbWUuCisgICAgICAgIHJl
dHVybiBfdGNzY21wKGNsYXNzTmFtZSwgX1QoIldlYktpdDJXZWJWaWV3V2luZG93Q2xhc3MiKSk7
CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCiBpbnQgV0lOQVBJIF90V2luTWFp
bihISU5TVEFOQ0UgaEluc3RhbmNlLCBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwgTFBUU1RSIGxw
c3RyQ21kTGluZSwgaW50IG5DbWRTaG93KQogewogICAgIE1pbmlCcm93c2VyOjpzaGFyZWQoKS5p
bml0aWFsaXplKGhJbnN0YW5jZSk7CkBAIC01Miw3ICs2OSw5IEBAIGludCBXSU5BUEkgX3RXaW5N
YWluKEhJTlNUQU5DRSBoSW5zdGFuY2UKICAgICB3aGlsZSAoQk9PTCByZXN1bHQgPSA6OkdldE1l
c3NhZ2UoJm1lc3NhZ2UsIDAsIDAsIDApKSB7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgOjpUcmFuc2xhdGVNZXNzYWdlKCZtZXNzYWdlKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRUcmFuc2xhdGVNZXNzYWdlKG1lc3NhZ2UpKQor
ICAgICAgICAgICAgOjpUcmFuc2xhdGVNZXNzYWdlKCZtZXNzYWdlKTsKIAogICAgICAgICBpZiAo
IU1pbmlCcm93c2VyOjpzaGFyZWQoKS5oYW5kbGVNZXNzYWdlKCZtZXNzYWdlKSkKICAgICAgICAg
ICAgIDo6RGlzcGF0Y2hNZXNzYWdlKCZtZXNzYWdlKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtVXRpbGl0aWVzLmgJKHJldmlzaW9uIDgzNTg3KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybVV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgog
CiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CkBAIC0zNiw2ICszNywxMCBAQCBuYW1lc3BhY2Ug
VXRpbCB7CiAvLyBSdW5zIGEgcGxhdGZvcm0gcnVubG9vcCB1bnRpbCB0aGUgJ2RvbmUnIGlzIHRy
dWUuIAogdm9pZCBydW4oYm9vbCogZG9uZSk7CiAKKyNpZiBQTEFURk9STShXSU4pCitib29sIHNo
b3VsZFRyYW5zbGF0ZU1lc3NhZ2UoTVNHKTsKKyNlbmRpZgorCiB2b2lkIHNsZWVwKGRvdWJsZSBz
ZWNvbmRzKTsKIAogV0tDb250ZXh0UmVmIGNyZWF0ZUNvbnRleHRGb3JJbmplY3RlZEJ1bmRsZVRl
c3QoY29uc3Qgc3RkOjpzdHJpbmcmLCBXS1R5cGVSZWYgdXNlckRhdGEgPSAwKTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAkocmV2aXNpb24gODM1ODcpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2
ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNpbXVsYXRlUmlnaHRDbGljayh1bnNpZ25lZCB4
LCB1bnNpZ25lZCB5KTsKIAogI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkIHNpbXVsYXRlQUtl
eURvd24oKTsKICAgICB2b2lkIHNldFBhcmVudFdpbmRvd01lc3NhZ2VPYnNlcnZlcihXaW5kb3dN
ZXNzYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKSB7IG1fcGFyZW50V2luZG93TWVzc2FnZU9ic2VydmVy
ID0gb2JzZXJ2ZXI7IH0KICNlbmRpZgogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvd2luL1RyYW5zbGF0ZU1lc3NhZ2VHZW5lcmF0ZXNXTUNoYXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi93aW4vVHJhbnNsYXRlTWVz
c2FnZUdlbmVyYXRlc1dNQ2hhci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDIvd2luL1RyYW5zbGF0ZU1lc3NhZ2VHZW5lcmF0ZXNXTUNoYXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlRl
c3QuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1XZWJWaWV3LmgiCisjaW5jbHVkZSAiV2luZG93TWVzc2FnZU9ic2VydmVyLmgiCisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K3N0YXRpYyBib29sIGRpZFNlZVdNQ2hhcjsKK3N0YXRpYyBib29sIGRpZE5vdEhhbmRsZUtleUV2
ZW50Q2FsbGVkOworCitzdGF0aWMgdm9pZCBkaWROb3RIYW5kbGVLZXlFdmVudENhbGxiYWNrKFdL
UGFnZVJlZiwgV0tOYXRpdmVFdmVudFB0ciBldmVudCwgY29uc3Qgdm9pZCopCit7CisgICAgaWYg
KGV2ZW50LT5tZXNzYWdlICE9IFdNX0tFWURPV04pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICAvLyBEb24ndCBjYWxsIFRyYW5zbGF0ZU1lc3NhZ2UoKSBoZXJlIHNvIGEgV01fQ0hBUiBpc24n
dCBnZW5lcmF0ZWQuCisgICAgZGlkTm90SGFuZGxlS2V5RXZlbnRDYWxsZWQgPSB0cnVlOworfQor
CitzdGF0aWMgdm9pZCBydW5BbmRXYXRjaEZvcldNQ2hhcihib29sKiBkb25lKQoreworICAgIHdo
aWxlICghKmRvbmUpIHsKKyAgICAgICAgTVNHIG1zZzsKKyAgICAgICAgQk9PTCByZXN1bHQgPSA6
OkdldE1lc3NhZ2VXKCZtc2csIDAsIDAsIDApOworICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1
bHQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGlmIChtc2cu
bWVzc2FnZSA9PSBXTV9DSEFSKQorICAgICAgICAgICAgZGlkU2VlV01DaGFyID0gdHJ1ZTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChVdGlsOjpzaG91bGRUcmFuc2xhdGVNZXNzYWdlKG1zZykpCisg
ICAgICAgICAgICA6OlRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisgICAgICAgIAorICAgICAgICA6
OkRpc3BhdGNoTWVzc2FnZSgmbXNnKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViS2l0MiwgVHJhbnNs
YXRlTWVzc2FnZUdlbmVyYXRlc1dNQ2hhcikKK3sKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRS
ZWY+IGNvbnRleHQoQWRvcHRXSywgV0tDb250ZXh0Q3JlYXRlKCkpOworICAgIFBsYXRmb3JtV2Vi
VmlldyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOworCisgICAgd2ViVmlldy5zaW11bGF0ZUFLZXlE
b3duKCk7CisKKyAgICAvLyBXZWJLaXQgc2hvdWxkIGNhbGwgVHJhbnNsYXRlTWVzc2FnZSgpIG9u
IHRoZSBXTV9LRVlET1dOIG1lc3NhZ2UgdG8gZ2VuZXJhdGUgdGhlIFdNX0NIQVIgbWVzc2FnZS4K
KyAgICBydW5BbmRXYXRjaEZvcldNQ2hhcigmZGlkU2VlV01DaGFyKTsKKyAgICAKKyAgICBkaWRT
ZWVXTUNoYXIgPSBmYWxzZTsKKworICAgIFdLUGFnZVVJQ2xpZW50IHVpQ2xpZW50OworICAgIG1l
bXNldCgmdWlDbGllbnQsIDAsIHNpemVvZih1aUNsaWVudCkpOworCisgICAgdWlDbGllbnQuZGlk
Tm90SGFuZGxlS2V5RXZlbnQgPSBkaWROb3RIYW5kbGVLZXlFdmVudENhbGxiYWNrOworICAgIFdL
UGFnZVNldFBhZ2VVSUNsaWVudCh3ZWJWaWV3LnBhZ2UoKSwgJnVpQ2xpZW50KTsKKworICAgIHdl
YlZpZXcuc2ltdWxhdGVBS2V5RG93bigpOworCisgICAgcnVuQW5kV2F0Y2hGb3JXTUNoYXIoJmRp
ZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGVkKTsKKworICAgIC8vIFdlYktpdCBzaG91bGQgbm90IGhh
dmUgY2FsbGVkIFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiB0aGUgV01fS0VZRE9XTiBtZXNzYWdlIHNp
bmNlIHdlIGluc3RhbGxlZCBhIGRpZE5vdEhhbmRsZUtleUV2ZW50IGNhbGxiYWNrLgorICAgIFRF
U1RfQVNTRVJUKCFkaWRTZWVXTUNoYXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvd2luL1RyYW5zbGF0ZU1lc3NhZ2VHZW5lcmF0ZXNXTUNoYXIuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L3dpbi9QbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS93aW4vUGxhdGZvcm1VdGlsaXRpZXNXaW4uY3BwCShyZXZpc2lvbiA4MzU4NykKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtVXRpbGl0aWVzV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tVUkxSZXNwb25z
ZUNGLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgPHRjaGFyLmg+CisKIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKIG5hbWVzcGFjZSBVdGlsIHsKIApAQCAtNDksMTEgKzUxLDMwIEBAIHZvaWQgcnVu
KGJvb2wqIGRvbmUpCiAgICAgICAgIEJPT0wgcmVzdWx0ID0gOjpHZXRNZXNzYWdlVygmbXNnLCAw
LCAwLCAwKTsKICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0ID09IC0xKQogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzaG91bGRUcmFuc2xhdGVNZXNzYWdlKG1zZykpCisgICAgICAgICAgICA6OlRy
YW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CiAgICAgICAgIDo6RGlzcGF0Y2hNZXNzYWdlKCZtc2cpOwog
ICAgIH0KIH0KIAorYm9vbCBzaG91bGRUcmFuc2xhdGVNZXNzYWdlKE1TRyBtc2cpCit7CisgICAg
Ly8gT25seSB0aGVzZSBmb3VyIG1lc3NhZ2VzIGFyZSBhY3R1YWxseSB0cmFuc2xhdGVkIGJ5IDo6
VHJhbnNsYXRlTWVzc2FnZSBvciA6OlRyYW5zbGF0ZUFjY2VsZXJhdG9yLgorICAgIC8vIEl0J3Mg
dXNlbGVzcyAodGhvdWdoIGhhcm1sZXNzKSB0byBjYWxsIHRob3NlIGZ1bmN0aW9ucyBmb3Igb3Ro
ZXIgbWVzc2FnZXMsIHNvIHdlIGFsd2F5cyBhbGxvdyBvdGhlciBtZXNzYWdlcyB0byBiZSB0cmFu
c2xhdGVkLgorICAgIGlmICgobXNnLm1lc3NhZ2UgPT0gV01fS0VZRE9XTiB8fCBtc2cubWVzc2Fn
ZSA9PSBXTV9TWVNLRVlET1dOIHx8IG1zZy5tZXNzYWdlID09IFdNX0tFWVVQIHx8IG1zZy5tZXNz
YWdlID09IFdNX1NZU0tFWVVQKSkgeworICAgICAgICBUQ0hBUiBjbGFzc05hbWVbMjU2XTsKKyAg
ICAgICAgaWYgKCE6OkdldENsYXNzTmFtZShtc2cuaHduZCwgY2xhc3NOYW1lLCBBUlJBWVNJWkUo
Y2xhc3NOYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBEb24n
dCBjYWxsIFRyYW5zbGF0ZU1lc3NhZ2UoKSBvbiBrZXkgZXZlbnRzIGRlc3RpbmVkIGZvciBhIFdl
YktpdDIgdmlldywgV2ViS2l0IHdpbGwgZG8gdGhpcyBpZiBpdCBkb2Vzbid0IGhhbmRsZSB0aGUg
bWVzc2FnZS4KKyAgICAgICAgLy8gSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZSBBUEkgaGVy
ZSBpbnN0ZWFkIG9mIGhhcmQtY29kaW5nIHRoZSB3aW5kb3cgY2xhc3MgbmFtZS4KKyAgICAgICAg
cmV0dXJuIF90Y3NjbXAoY2xhc3NOYW1lLCBfVCgiV2ViS2l0MldlYlZpZXdXaW5kb3dDbGFzcyIp
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgc2xlZXAoZG91Ymxl
IHNlY29uZHMpCiB7CiAgICAgOjpTbGVlcChzZWNvbmRzICogMTAwMCk7CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHJldmlzaW9uIDgz
NTg3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNp
bXVsYXRlU3BhY2ViYXJLZQogICAgIDo6U2VuZE1lc3NhZ2VXKHdpbmRvdywgV01fS0VZVVAsIFZL
X1NQQUNFLCAoMSA8PCByZXBlYXRDb3VudEJpdE9mZnNldCkgfCAoMzkgPDwgc2NhbkNvZGVCaXRP
ZmZzZXQpIHwgKDEgPDwgcHJldmlvdXNTdGF0ZUJpdE9mZnNldCkgfCAoMSA8PCB0cmFuc2l0aW9u
U3RhdGVCaXRPZmZzZXQpKTsKIH0KIAordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlQUtl
eURvd24oKQoreworICAgIEhXTkQgd2luZG93ID0gV0tWaWV3R2V0V2luZG93KG1fdmlldyk7Cisg
ICAgCisgICAgLy8gVGhlc2UgdmFsdWVzIG1hdGNoIHdoYXQgaGFwcGVucyB3aGVuIHlvdSBwcmVz
cyB0aGUgJ0EnIGtleSBpbiBOb3RlcGFkLCBhcyBvYnNlcnZlZCBieSBTcHkrKy4KKyAgICA6OlNl
bmRNZXNzYWdlVyh3aW5kb3csIFdNX0tFWURPV04sICdBJywgKDEgPDwgcmVwZWF0Q291bnRCaXRP
ZmZzZXQpIHwgKDMwIDw8IHNjYW5Db2RlQml0T2Zmc2V0KSk7Cit9CisKIHZvaWQgUGxhdGZvcm1X
ZWJWaWV3OjpzaW11bGF0ZUFsdEtleVByZXNzKCkKIHsKICAgICBIV05EIHdpbmRvdyA9IFdLVmll
d0dldFdpbmRvdyhtX3ZpZXcpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vVGVzdFdl
YktpdEFQSS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vVGVz
dFdlYktpdEFQSS52Y3Byb2oJKHJldmlzaW9uIDgzNTg3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS93aW4vVGVzdFdlYktpdEFQSS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1OSw2ICs1NTks
MTAgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxUZXN0c1xXZWJLaXQyXHdpblxUcmFuc2xhdGVNZXNzYWdlR2VuZXJhdGVzV01DaGFy
LmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxUZXN0c1xXZWJLaXQyXHdpblxXTUNsb3NlQ2FsbHNVSUNsaWVudENsb3NlLmNwcCIK
IAkJCQkJCT4KIAkJCQkJPC9GaWxlPgo=
</data>
<flag name="review"
          id="81886"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>