<?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>49824</bug_id>
          
          <creation_ts>2010-11-19 13:30:59 -0800</creation_ts>
          <short_desc>WebKit2: Support Windows 7 gestures</short_desc>
          <delta_ts>2011-04-07 11:15:46 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Brian Weinstein">bweinstein</assigned_to>
          <cc>benjamin</cc>
    
    <cc>kenneth</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>311660</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-19 13:30:59 -0800</bug_when>
    <thetext>We should support Windows 7 gesture support that we support in old WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380759</commentid>
    <comment_count>1</comment_count>
      <attachid>88498</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-06 13:12:40 -0700</bug_when>
    <thetext>Created attachment 88498
[PATCH] Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380816</commentid>
    <comment_count>2</comment_count>
      <attachid>88498</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-06 14:08:49 -0700</bug_when>
    <thetext>Comment on attachment 88498
[PATCH] Fix

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

Let&apos;s give this another once-over. Looks pretty good though!

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:676
&gt; +bool WebPageProxy::initializeGestureFromPoint(const IntPoint&amp; point)
&gt; +{
&gt; +    bool canBeginPanning;
&gt; +    process()-&gt;sendSync(Messages::WebPage::InitializeGestureFromPoint(point), Messages::WebPage::InitializeGestureFromPoint::Reply(canBeginPanning), m_pageID);
&gt; +    return canBeginPanning;
&gt; +}

Will this hang forever if the web process is hung? That wouldn&apos;t be good!

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:508
&gt; +    bool canSingleFingerPan = m_page-&gt;initializeGestureFromPoint(IntPoint(localPoint));

The variable name is so much more descriptive than the function name that it seems like a better function name is warranted.

Is there a distinction between single-finger panning and multi-finger panning? Other parts of your code just say &quot;canBeginPanning&quot;.

Is the explicit IntPoint constructor really needed?

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:518
&gt; +    return SetGestureConfigPtr()(m_window, 0, 1, &amp;gc, sizeof(GESTURECONFIG));

sizeof(gc) would be slightly more future-proof.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:526
&gt; +    if (!GetGestureInfoPtr() || !CloseGestureInfoHandlePtr()) {
&gt; +        handled = false;
&gt; +        return 0;
&gt; +    }

Should this have an assertion similar to the one in onGestureNotify?

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:532
&gt; +    if (!GetGestureInfoPtr()(gestureHandle, reinterpret_cast&lt;PGESTUREINFO&gt;(&amp;gi))) {

Is the reinterpret_cast really needed? gi is already a GESTUREINFO.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:555
&gt; +        int deltaX = currentX - m_lastPanX;
&gt; +        int deltaY = currentY - m_lastPanY;
&gt; +
&gt; +        m_lastPanX = currentX;
&gt; +        m_lastPanY = currentY;
&gt; +
&gt; +        m_page-&gt;scrollByPanGesture(IntSize(-deltaX, -deltaY));

You could reverse the deltaX/Y calculations instead of negating them in the only place you use them.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.messages.in:206
&gt; +    InitializeGestureFromPoint(WebCore::IntPoint point) -&gt; (bool canBeginPanning)
&gt; +    ScrollByPanGesture(WebCore::IntSize size)
&gt; +    GestureEnded()

I&apos;d suggest these names:

GestureWillBegin(point)
GestureDidScroll(size)
GestureDidEnd()

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:376
&gt; +        HitTestResult result(scollView-&gt;windowToContents(point));

Can you use assignment here instead of constructor syntax? Maybe that isn&apos;t allowed.

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:390
&gt; +    if (m_gestureTargetNode) {

This can be an early return.

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:407
&gt; +    m_gestureTargetNode-&gt;renderer()-&gt;enclosingLayer()-&gt;scrollByRecursively(size.width(), size.height());

Do we need to null-check enclosingLayer()?

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:412
&gt; +    m_gestureTargetNode = 0;

Please use nullptr instead of 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380866</commentid>
    <comment_count>3</comment_count>
      <attachid>88498</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-06 14:56:22 -0700</bug_when>
    <thetext>Comment on attachment 88498
[PATCH] Fix

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

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:676
&gt;&gt; +}
&gt; 
&gt; Will this hang forever if the web process is hung? That wouldn&apos;t be good!

No, the UI process remains responsive.

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:508
&gt;&gt; +    bool canSingleFingerPan = m_page-&gt;initializeGestureFromPoint(IntPoint(localPoint));
&gt; 
&gt; The variable name is so much more descriptive than the function name that it seems like a better function name is warranted.
&gt; 
&gt; Is there a distinction between single-finger panning and multi-finger panning? Other parts of your code just say &quot;canBeginPanning&quot;.
&gt; 
&gt; Is the explicit IntPoint constructor really needed?

When setting up the gestures, there is a distinction, but under the covers when determine whether or not we can pan, there isn&apos;t a distinction. The explicit constructor isn&apos;t needed.

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:518
&gt;&gt; +    return SetGestureConfigPtr()(m_window, 0, 1, &amp;gc, sizeof(GESTURECONFIG));
&gt; 
&gt; sizeof(gc) would be slightly more future-proof.

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:526
&gt;&gt; +    }
&gt; 
&gt; Should this have an assertion similar to the one in onGestureNotify?

It probably should have the assert. Added:

ASSERT(GetGestureInfoPtr())
ASSERT(CloseGestureInfoHandlePtr())

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:532
&gt;&gt; +    if (!GetGestureInfoPtr()(gestureHandle, reinterpret_cast&lt;PGESTUREINFO&gt;(&amp;gi))) {
&gt; 
&gt; Is the reinterpret_cast really needed? gi is already a GESTUREINFO.

No, it isn&apos;t necessary.

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:555
&gt;&gt; +        m_page-&gt;scrollByPanGesture(IntSize(-deltaX, -deltaY));
&gt; 
&gt; You could reverse the deltaX/Y calculations instead of negating them in the only place you use them.

I thought it would be easier to do it here, but I can reverse the calculations and add a comment.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.messages.in:206
&gt;&gt; +    GestureEnded()
&gt; 
&gt; I&apos;d suggest these names:
&gt; 
&gt; GestureWillBegin(point)
&gt; GestureDidScroll(size)
&gt; GestureDidEnd()

Fixed.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:376
&gt;&gt; +        HitTestResult result(scollView-&gt;windowToContents(point));
&gt; 
&gt; Can you use assignment here instead of constructor syntax? Maybe that isn&apos;t allowed.

Sure. Fixed.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:390
&gt;&gt; +    if (m_gestureTargetNode) {
&gt; 
&gt; This can be an early return.

Fixed.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:407
&gt;&gt; +    m_gestureTargetNode-&gt;renderer()-&gt;enclosingLayer()-&gt;scrollByRecursively(size.width(), size.height());
&gt; 
&gt; Do we need to null-check enclosingLayer()?

I haven&apos;t seen a case where it was needed, but added it to be safe.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:412
&gt;&gt; +    m_gestureTargetNode = 0;
&gt; 
&gt; Please use nullptr instead of 0.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380903</commentid>
    <comment_count>4</comment_count>
      <attachid>88529</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-06 15:24:43 -0700</bug_when>
    <thetext>Created attachment 88529
[PATCH] Fix v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381506</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-07 11:15:46 -0700</bug_when>
    <thetext>Landed panning in r83113.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88498</attachid>
            <date>2011-04-06 13:12:40 -0700</date>
            <delta_ts>2011-04-06 15:24:43 -0700</delta_ts>
            <desc>[PATCH] Fix</desc>
            <filename>gestures_wk2_win.patch</filename>
            <type>text/plain</type>
            <size>23581</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDQtMDYgIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFN1cHBvcnQgV2luZG93cyA3IEdlc3R1
cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTgy
NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODY4OTcyOD4KKyAgICAgICAgCisgICAgICAgIE1v
dmUgV2luZG93VG91Y2guaCBmcm9tIFdlYktpdC93aW4sIHNvIGl0IGNhbiBiZSB1c2VkIGluIGJv
dGggV2ViS2l0IGFuZCBXZWJLaXQyLgorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5oOiBDb3BpZWQg
ZnJvbSBXZWJLaXQvd2luL1dpbmRvd3NUb3VjaC5oLgorCiAyMDExLTA0LTA2ICBMZWFuZHJvIEdy
YWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTdGV2ZSBCbG9jay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4Mjk1NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjU2OCw2ICsyNjU2
OCwxMCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxXaW5kb3dNZXNzYWdl
TGlzdGVuZXIuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxXaW5kb3dzVG91Y2guaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KIAkJCTwvRmlsdGVyPgogCQkJPEZpbHRlcgogCQkJCU5hbWU9ImNmIgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vV2luZG93c1RvdWNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV2luZG93c1RvdWNoLmgJKHJldmlzaW9uIDgyOTU1KQkoZnJvbSBXZWJLaXQvd2lu
L1dpbmRvd3NUb3VjaC5oOjgyOTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c1Rv
dWNoLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDgwKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAK
KzIwMTEtMDQtMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFN1
cHBvcnQgV2luZG93cyA3IEdlc3R1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00OTgyNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODY4OTcyOD4K
KyAgICAgICAgCisgICAgICAgIFBvcnQgY29kZSBmcm9tIFdlYktpdDEgLT4gV2ViS2l0MiB0byBo
YW5kbGUgV2luZG93cyA3IGdlc3R1cmVzLgorICAgICAgICAKKyAgICAgICAgVGhlIFVJUHJvY2Vz
cyBnZXRzIGEgV01fR0VTVFVSRU5PVElGWSBtZXNzYWdlLCBpdCBzZW5kcyBhIHN5bmMgbWVzc2Fn
ZSB0byB0aGUgV2ViUHJvY2VzcyB0byBhc2sKKyAgICAgICAgaWYgd2Ugc2hvdWxkIGFsbG93IHBh
bm5pbmcuIFRoZSBXZWJQcm9jZXNzIGNoZWNrcyBpZiB3ZSdyZSBpbiBhIHNjcm9sbGFibGUgYXJl
YSwgYW5kIHRoZSBtb3VzZQorICAgICAgICBpc24ndCBvdmVyIGEgc2Nyb2xsYmFyLgorCisgICAg
ICAgIFRoZSBVSVByb2Nlc3MgdGhlbiBnZXRzIGEgV01fR0VTVFVSRSBtZXNzYWdlLCBhbmQgaWYg
aXQgaXMgYSBwYW4gZ2VzdHVyZSwgaXQgc2VuZHMgYSBtZXNzYWdlIHRvCisgICAgICAgIHRoZSBX
ZWJQcm9jZXNzIHRvIHNjcm9sbCBieSB0aGUgYW1vdW50IGZpbmdlcnMgaGF2ZSBtb3ZlZCBzaW5j
ZSB0aGUgbGFzdCBXTV9HRVNUVVJFIG1lc3NlYWdlLiBUaGUKKyAgICAgICAgWCBhbmQgWSBhcmUg
cmV2ZXJzZWQgYmVjYXVzZSBwYW5uaW5nIHVwIC0+IG1vdmluZyB0aGUgcGFnZSBkb3duLCBhbmQg
dmljZSB2ZXJzYS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmluaXRpYWxpemVHZXN0dXJlRnJvbVBvaW50KTog
U2VuZCBhIHN5bmMgbWVzc2FnZSB0byB0aGUgV2ViUHJvY2VzcworICAgICAgICAgICAgdG8gaW5p
dGlhbGl6ZSB0aGUgZ2VzdHVyZS4gVGhlIFdlYlByb2Nlc3MgcmV0dXJucyB3aGV0aGVyIG9yIG5v
dCB3ZSBjYW4gc3RhcnQgYSBwYW4KKyAgICAgICAgICAgIGdlc3R1cmUgZnJvbSB3aGVyZSB3ZSBh
cmUuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2Nyb2xsQnlQYW5HZXN0dXJlKTog
U2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFdlYlByb2Nlc3MgdG8gc2Nyb2xsIGJ5CisgICAgICAgICAg
ICBwYW4gZ2VzdHVyZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXN0dXJlRW5k
ZWQpOiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgV2ViUHJvY2VzcyB0aGF0IHRoZSBnZXN0dXJlIGhh
cyBlbmRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d25k
UHJvYyk6IEFkZCBXTV9HRVNUVVJFIGFuZCBXTV9HRVNUVVJFTk9USUZZIGhhbmRsZXJzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KTogSW5pdGlhbGl6ZSB0d28gbmV3IHZhcmlh
Ymxlcy4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25HZXN0dXJlTm90aWZ5KTogRmlndXJl
IG91dCB3aGljaCBnZXN0dXJlcyB3ZSBzaG91bGQgc3VwcG9ydCBiYXNlZCBvbiB3aGVyZQorICAg
ICAgICAgICAgdGhlIGdlc3R1cmUgaXMgYmVnaW5uaW5nLgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojpvbkdlc3R1cmUpOiBTdXBwb3J0IHN0YXJ0aW5nIGEgZ2VzdHVyZSwgZW5kaW5nIGEgZ2Vz
dHVyZSwgYW5kIHBhbm5pbmcuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjogQWRkIG1lc3NhZ2VzIG5lZWRlZCBmb3Ig
Z2VzdHVyZXMuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5pdGlhbGl6ZUdlc3R1cmVGcm9tUG9pbnQp
OiBTZXQgdGhlIG5vZGUgdGhhdCB0aGUgZ2VzdHVyZSBzdGFydGVkIG9uIChzbyB3ZSAKKyAgICAg
ICAgICAgIGtub3cgd2hpY2ggbGF5ZXIgdG8gc2Nyb2xsIGlmIHRoZSB1c2VyIHBhbnMpLCBhbmQg
ZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhbGxvdworICAgICAgICAgICAgcGFu
bmluZy4gSWYgdGhlIHBhZ2UgY2FuJ3Qgc2Nyb2xsLCBvciB0aGUgdXNlciBpcyBvbiBhIHNjcm9s
bGJhciwgZGlzYWxsb3cgcGFubmluZy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2Nyb2xs
QnlQYW5HZXN0dXJlKTogU2Nyb2xsIHRoZSBlbmNsb3NpbmcgbGF5ZXIgb2YgdGhlIGVsZW1lbnQg
dGhlIGdlc3R1cmUKKyAgICAgICAgICAgIHN0YXJ0ZWQgb24uCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6Omdlc3R1cmVFbmRlZCk6IENsZWFyIHRoZSBub2RlIHRoZSBnZXN0dXJlIHN0YXJ0ZWQg
b24uCisKIDIwMTEtMDQtMDYgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA4Mjk1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDIz
IEBAIFN0cmluZyBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkVGV4dCgpCiAgICAgcHJvY2Vzcygp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0ZWRUZXh0KCksIE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHZXRTZWxlY3RlZFRleHQ6OlJlcGx5KHRleHQpLCBtX3BhZ2VJRCk7CiAgICAg
cmV0dXJuIHRleHQ7CiB9CisKK2Jvb2wgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplR2VzdHVyZUZy
b21Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgYm9vbCBjYW5CZWdpblBhbm5p
bmc7CisgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6SW5pdGlhbGl6
ZUdlc3R1cmVGcm9tUG9pbnQocG9pbnQpLCBNZXNzYWdlczo6V2ViUGFnZTo6SW5pdGlhbGl6ZUdl
c3R1cmVGcm9tUG9pbnQ6OlJlcGx5KGNhbkJlZ2luUGFubmluZyksIG1fcGFnZUlEKTsKKyAgICBy
ZXR1cm4gY2FuQmVnaW5QYW5uaW5nOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2Nyb2xsQnlQ
YW5HZXN0dXJlKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTY3JvbGxCeVBhbkdlc3R1cmUoc2l6ZSksIG1fcGFnZUlEKTsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6Omdlc3R1cmVFbmRlZCgpCit7CisgICAgcHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXN0dXJlRW5kZWQoKSwgbV9wYWdlSUQpOworfQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDgyOTU1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNiAr
MjcyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYs
IFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mLCBpbnQpOwogICAgIFdlYkNv
cmU6OkludFJlY3QgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVySW5TZWxlY3RlZFJhbmdlKGludCk7CiAg
ICAgU3RyaW5nIGdldFNlbGVjdGVkVGV4dCgpOworCisgICAgYm9vbCBpbml0aWFsaXplR2VzdHVy
ZUZyb21Qb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgc2Nyb2xsQnlQ
YW5HZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIGdlc3R1cmVFbmRl
ZCgpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdm9pZCBz
ZXRBY3R1YWxWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9u
IDgyOTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU29mdExpbmtp
bmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9XaW5kb3dzVG91Y2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEltZSB7CkBAIC02Nyw2ICs2OCwxMiBAQCBTT0ZUX0xJTksoSU1NMzIsIEltbU5vdGlm
eUlNRSwgQk9PTCwgV0lOCiBTT0ZUX0xJTksoSU1NMzIsIEltbUFzc29jaWF0ZUNvbnRleHRFeCwg
Qk9PTCwgV0lOQVBJLCAoSFdORCBoV25kLCBISU1DIGhJTUMsIERXT1JEIGR3RmxhZ3MpLCAoaFdu
ZCwgaElNQywgZHdGbGFncykpCiB9OwogCisvLyBTb2Z0IGxpbmsgZnVuY3Rpb25zIGZvciBnZXN0
dXJlcyBhbmQgcGFubmluZy4KK1NPRlRfTElOS19MSUJSQVJZKFVTRVIzMik7CitTT0ZUX0xJTktf
T1BUSU9OQUwoVVNFUjMyLCBHZXRHZXN0dXJlSW5mbywgQk9PTCwgV0lOQVBJLCAoSEdFU1RVUkVJ
TkZPLCBQR0VTVFVSRUlORk8pKTsKK1NPRlRfTElOS19PUFRJT05BTChVU0VSMzIsIFNldEdlc3R1
cmVDb25maWcsIEJPT0wsIFdJTkFQSSwgKEhXTkQsIERXT1JELCBVSU5ULCBQR0VTVFVSRUNPTkZJ
RywgVUlOVCkpOworU09GVF9MSU5LX09QVElPTkFMKFVTRVIzMiwgQ2xvc2VHZXN0dXJlSW5mb0hh
bmRsZSwgQk9PTCwgV0lOQVBJLCAoSEdFU1RVUkVJTkZPKSk7CisKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE1Nyw2ICsxNjQsMTIgQEAgTFJFU1VM
VCBXZWJWaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVAogICAgIGNhc2UgV01fVlNDUk9MTDoK
ICAgICAgICAgbFJlc3VsdCA9IG9uVmVydGljYWxTY3JvbGwoaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0sIGhhbmRsZWQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0dFU1RVUkVO
T1RJRlk6CisgICAgICAgIGxSZXN1bHQgPSBvbkdlc3R1cmVOb3RpZnkoaFduZCwgbWVzc2FnZSwg
d1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0dF
U1RVUkU6CisgICAgICAgIGxSZXN1bHQgPSBvbkdlc3R1cmUoaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFdNX1NZU0tFWURP
V046CiAgICAgY2FzZSBXTV9LRVlET1dOOgogICAgIGNhc2UgV01fU1lTQ0hBUjoKQEAgLTI1NCw2
ICsyNjcsOCBAQCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgV2ViQ29udGV4dCogCiAgICAg
LCBtX2luSU1FQ29tcG9zaXRpb24oMCkKICAgICAsIG1fZmluZEluZGljYXRvckNhbGxiYWNrKDAp
CiAgICAgLCBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFja0NvbnRleHQoMCkKKyAgICAsIG1fbGFzdFBh
blgoMCkKKyAgICAsIG1fbGFzdFBhblkoMCkKIHsKICAgICByZWdpc3RlcldlYlZpZXdXaW5kb3dD
bGFzcygpOwogCkBAIC00ODAsNiArNDk1LDg3IEBAIExSRVNVTFQgV2ViVmlldzo6b25WZXJ0aWNh
bFNjcm9sbChIV05EIGgKICAgICByZXR1cm4gMDsKIH0KIAorTFJFU1VMVCBXZWJWaWV3Ojpvbkdl
c3R1cmVOb3RpZnkoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCit7CisgICAgLy8gV2Ugc2hvdWxkbid0IGJlIGdldHRp
bmcgYW55IGdlc3R1cmUgbWVzc2FnZXMgd2l0aG91dCBTZXRHZXN0dXJlQ29uZmlnIHNvZnQtbGlu
a2luZyBjb3JyZWN0bHkuCisgICAgQVNTRVJUKFNldEdlc3R1cmVDb25maWdQdHIoKSk7CisKKyAg
ICBHRVNUVVJFTk9USUZZU1RSVUNUKiBnbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0VTVFVSRU5PVElG
WVNUUlVDVCo+KGxQYXJhbSk7CisKKyAgICBQT0lOVCBsb2NhbFBvaW50ID0geyBnbi0+cHRzTG9j
YXRpb24ueCwgZ24tPnB0c0xvY2F0aW9uLnkgfTsKKyAgICA6OlNjcmVlblRvQ2xpZW50KG1fd2lu
ZG93LCAmbG9jYWxQb2ludCk7CisKKyAgICBib29sIGNhblNpbmdsZUZpbmdlclBhbiA9IG1fcGFn
ZS0+aW5pdGlhbGl6ZUdlc3R1cmVGcm9tUG9pbnQoSW50UG9pbnQobG9jYWxQb2ludCkpOworCisg
ICAgRFdPUkQgZHdQYW5XYW50ID0gR0NfUEFOIHwgR0NfUEFOX1dJVEhfSU5FUlRJQSB8IEdDX1BB
Tl9XSVRIX0dVVFRFUjsKKyAgICBEV09SRCBkd1BhbkJsb2NrID0gR0NfUEFOX1dJVEhfU0lOR0xF
X0ZJTkdFUl9IT1JJWk9OVEFMTFk7CisgICAgaWYgKGNhblNpbmdsZUZpbmdlclBhbikKKyAgICAg
ICAgZHdQYW5XYW50IHw9IEdDX1BBTl9XSVRIX1NJTkdMRV9GSU5HRVJfVkVSVElDQUxMWTsKKyAg
ICBlbHNlCisgICAgICAgIGR3UGFuQmxvY2sgfD0gR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9W
RVJUSUNBTExZOworCisgICAgR0VTVFVSRUNPTkZJRyBnYyA9IHsgR0lEX1BBTiwgZHdQYW5XYW50
LCBkd1BhbkJsb2NrIH07CisgICAgcmV0dXJuIFNldEdlc3R1cmVDb25maWdQdHIoKShtX3dpbmRv
dywgMCwgMSwgJmdjLCBzaXplb2YoR0VTVFVSRUNPTkZJRykpOworfQorCitMUkVTVUxUIFdlYlZp
ZXc6Om9uR2VzdHVyZShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBpZiAoIUdldEdlc3R1cmVJbmZvUHRy
KCkgfHwgIUNsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKSkgeworICAgICAgICBoYW5kbGVkID0g
ZmFsc2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEhHRVNUVVJFSU5GTyBnZXN0
dXJlSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIR0VTVFVSRUlORk8+KGxQYXJhbSk7CisgICAg
R0VTVFVSRUlORk8gZ2kgPSB7MH07CisgICAgZ2kuY2JTaXplID0gc2l6ZW9mKEdFU1RVUkVJTkZP
KTsKKworICAgIGlmICghR2V0R2VzdHVyZUluZm9QdHIoKShnZXN0dXJlSGFuZGxlLCByZWludGVy
cHJldF9jYXN0PFBHRVNUVVJFSU5GTz4oJmdpKSkpIHsKKyAgICAgICAgaGFuZGxlZCA9IGZhbHNl
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGdpLmR3SUQpIHsKKyAg
ICBjYXNlIEdJRF9CRUdJTjoKKyAgICAgICAgbV9sYXN0UGFuWCA9IGdpLnB0c0xvY2F0aW9uLng7
CisgICAgICAgIG1fbGFzdFBhblkgPSBnaS5wdHNMb2NhdGlvbi55OworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdJRF9FTkQ6CisgICAgICAgIG1fcGFnZS0+Z2VzdHVyZUVuZGVkKCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR0lEX1BBTjogeworICAgICAgICBpbnQgY3VycmVudFggPSBn
aS5wdHNMb2NhdGlvbi54OworICAgICAgICBpbnQgY3VycmVudFkgPSBnaS5wdHNMb2NhdGlvbi55
OworCisgICAgICAgIGludCBkZWx0YVggPSBjdXJyZW50WCAtIG1fbGFzdFBhblg7CisgICAgICAg
IGludCBkZWx0YVkgPSBjdXJyZW50WSAtIG1fbGFzdFBhblk7CisKKyAgICAgICAgbV9sYXN0UGFu
WCA9IGN1cnJlbnRYOworICAgICAgICBtX2xhc3RQYW5ZID0gY3VycmVudFk7CisKKyAgICAgICAg
bV9wYWdlLT5zY3JvbGxCeVBhbkdlc3R1cmUoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisK
KyAgICAgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzkyNDQzNjc+OiBTdXBwb3J0IHdpbmRv
dyBib3VuY2UgKGJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwpLCAKKyAgICAgICAgLy8gaWYg
dGhlIHVlc3IgaGFzIHNjcm9sbGVkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuIHNjb2xs
QnlQYW5HZXN0dXJlIHdvdWxkIG5lZWQgdG8gCisgICAgICAgIC8vIGJlIGEgc3luYyBtZXNzYWdl
IHRvIHN1cHBvcnQgdGhpcywgYmVjYXVzZSB3ZSB3b3VsZCBuZWVkIHRvIGtub3cgaG93IGZhciB3
ZSBzY3JvbGxlZCAKKyAgICAgICAgLy8gcGFzdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KKwor
ICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7CisKKyAg
ICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBw
b2ludCwgdGhlIGdlc3R1cmUgaGFzIG5vdCBiZWVuIGhhbmRsZWQuIFdlIGZvcndhcmQKKyAgICAv
LyB0aGUgY2FsbCB0byBEZWZXaW5kb3dQcm9jIGJ5IHJldHVybmluZyBmYWxzZSwgYW5kIHdlIGRv
bid0IG5lZWQgdG8gCisgICAgLy8gdG8gY2FsbCBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlLiAKKyAg
ICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQzNTMyMjgoVlMu
ODUpLmFzcHgKKyAgICBoYW5kbGVkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKIExSRVNV
TFQgV2ViVmlldzo6b25LZXlFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKIHsKICAgICBtX3BhZ2UtPmhhbmRs
ZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChoV25kLCBtZXNzYWdlLCB3UGFy
YW0sIGxQYXJhbSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJ
KHJldmlzaW9uIDgyOTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICBMUkVTVUxU
IG9uV2hlZWxFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJv
b2wmIGhhbmRsZWQpOwogICAgIExSRVNVTFQgb25Ib3Jpem9udGFsU2Nyb2xsKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CiAgICAgTFJFU1VM
VCBvblZlcnRpY2FsU2Nyb2xsKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJB
TSwgYm9vbCYgaGFuZGxlZCk7CisgICAgTFJFU1VMVCBvbkdlc3R1cmVOb3RpZnkoSFdORCBoV25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVT
VUxUIG9uR2VzdHVyZShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJv
b2wmIGhhbmRsZWQpOwogICAgIExSRVNVTFQgb25LZXlFdmVudChIV05EIGhXbmQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOwogICAgIExSRVNVTFQgb25QYWlu
dEV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFu
ZGxlZCk7CiAgICAgTFJFU1VMVCBvblByaW50Q2xpZW50RXZlbnQoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKQEAgLTIxOSw2ICsyMjEsOSBA
QCBwcml2YXRlOgogICAgIC8vIFRodXMsIG9uIHJldHVybiBmcm9tIERvRHJhZ0Ryb3Agd2UgaGF2
ZSB0aGUgY29ycmVjdCBwZHdFZmZlY3QgZm9yIHRoZSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbi4K
ICAgICAvLyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI2
NCkKICAgICBEV09SRCBtX2xhc3REcm9wRWZmZWN0OworCisgICAgaW50IG1fbGFzdFBhblg7Cisg
ICAgaW50IG1fbGFzdFBhblk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gODI5
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29tcG9z
aXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBjb25zdCBXVEY6OlZl
Y3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIHVpbnQ2NF90
IGN1cnNvclBvc2l0aW9uKTsKICAgICB2b2lkIGZpcnN0UmVjdEZvckNoYXJhY3RlckluU2VsZWN0
ZWRSYW5nZShjb25zdCB1aW50NjRfdCBjaGFyYWN0ZXJQb3NpdGlvbiwgV2ViQ29yZTo6SW50UmVj
dCYgcmVzdWx0UmVjdCk7CiAgICAgdm9pZCBnZXRTZWxlY3RlZFRleHQoV1RGOjpTdHJpbmcmKTsK
KyAgICB2b2lkIGluaXRpYWxpemVHZXN0dXJlRnJvbVBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwb2ludCwgYm9vbCYgY2FuQmVnaW5QYW5uaW5nKTsKKyAgICB2b2lkIHNjcm9sbEJ5UGFu
R2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKTsKKyAgICB2b2lkIGdlc3R1cmVF
bmRlZCgpOwogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogVGhpcyBhIGR1bW15IG1lc3NhZ2UsIHRv
IGF2b2lkIGJyZWFraW5nIHRoZSBidWlsZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWly
ZQpAQCAtNTcxLDYgKzU3NCw4IEBAIHByaXZhdGU6CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAg
Ly8gT3VyIHZpZXcncyB3aW5kb3cgKGluIHRoZSBVSSBwcm9jZXNzKS4KICAgICBIV05EIG1fbmF0
aXZlV2luZG93OworCisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fZ2VzdHVyZVRhcmdldE5v
ZGU7CiAjZW5kaWYKICAgICAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRWRpdENv
bW1hbmQ+ID4gbV9lZGl0Q29tbWFuZE1hcDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiA4Mjk1
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNiArMjAxLDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFn
ZSB7CiAgICAgU2V0Q29tcG9zaXRpb24oV1RGOjpTdHJpbmcgY29tcG9zaXRpb25TdHJpbmcsIFdU
Rjo6VmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50
NjRfdCBjdXJzb3JQb3NpdGlvbikKICAgICBGaXJzdFJlY3RGb3JDaGFyYWN0ZXJJblNlbGVjdGVk
UmFuZ2UodWludDY0X3QgY2hhcmFjdGVyUG9zaXRpb24pIC0+IChXZWJDb3JlOjpJbnRSZWN0IHJl
c3VsdFJlY3QpCiAgICAgR2V0U2VsZWN0ZWRUZXh0KCkgLT4gKFdURjo6U3RyaW5nIHRleHQpCisg
ICAgSW5pdGlhbGl6ZUdlc3R1cmVGcm9tUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+
IChib29sIGNhbkJlZ2luUGFubmluZykKKyAgICBTY3JvbGxCeVBhbkdlc3R1cmUoV2ViQ29yZTo6
SW50U2l6ZSBzaXplKQorICAgIEdlc3R1cmVFbmRlZCgpCiAjZW5kaWYKICNpZiBQTEFURk9STShR
VCkKICAgICBGaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93aW4v
V2ViUGFnZVdpbi5jcHAJKHJldmlzaW9uIDgyOTU1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSAr
MzMsMTMgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRSZW5kZXJpbmdNb2RlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVz
dFJlc3VsdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaWYgUExBVEZPUk0oQ0cpCkBAIC0zNTEsNCArMzU1
LDYxIEBAIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRUZXh0KFN0cmluZyYgdGUKICAgICB0ZXh0
ID0gc2VsZWN0ZWRSYW5nZS0+dGV4dCgpOwogfQogCit2b2lkIFdlYlBhZ2U6OmluaXRpYWxpemVH
ZXN0dXJlRnJvbVBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vbCYgY2Fu
QmVnaW5QYW5uaW5nKQoreworICAgIGJvb2wgaGl0U2Nyb2xsYmFyID0gZmFsc2U7CisKKyAgICBI
aXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7CisgICAgZm9y
IChGcmFtZSogY2hpbGRGcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGNoaWxkRnJhbWU7IGNo
aWxkRnJhbWUgPSBFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShtX2dlc3R1cmVU
YXJnZXROb2RlLmdldCgpKSkgeworICAgICAgICBTY3JvbGxWaWV3KiBzY29sbFZpZXcgPSBjaGls
ZEZyYW1lLT52aWV3KCk7CisgICAgICAgIGlmICghc2NvbGxWaWV3KQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gY2hpbGRGcmFt
ZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpOworICAgICAgICBpZiAoIXJlbmRlclZpZXcpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJW
aWV3LT5sYXllcigpOworICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoc2NvbGxWaWV3LT53aW5kb3dUb0NvbnRlbnRz
KHBvaW50KSk7CisgICAgICAgIGxheWVyLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CisgICAg
ICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisKKyAgICAgICAg
aWYgKCFoaXRTY3JvbGxiYXIpCisgICAgICAgICAgICBoaXRTY3JvbGxiYXIgPSByZXN1bHQuc2Ny
b2xsYmFyKCk7CisgICAgfQorCisgICAgaWYgKGhpdFNjcm9sbGJhcikgeworICAgICAgICBjYW5C
ZWdpblBhbm5pbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wg
Y2FuQmVTY3JvbGxlZCA9IGZhbHNlOworICAgIGlmIChtX2dlc3R1cmVUYXJnZXROb2RlKSB7Cisg
ICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fZ2VzdHVyZVRhcmdldE5vZGUt
PnJlbmRlcmVyKCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKSkgewor
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpICYmIHRvUmVuZGVyQm94KHJlbmRlcmVy
KS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYW5CZVNjcm9sbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbkJlZ2luUGFubmluZyA9IGNhbkJlU2Ny
b2xsZWQ7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2Nyb2xsQnlQYW5HZXN0dXJlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8ICFt
X2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxC
eVJlY3Vyc2l2ZWx5KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZTo6Z2VzdHVyZUVuZGVkKCkKK3sKKyAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gMDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA4
MzA4MCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE4IEBACisyMDExLTA0LTA2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZWJLaXQyOiBTdXBwb3J0IFdpbmRvd3MgNyBHZXN0dXJlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk4MjQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzg2ODk3Mjg+CisgICAgICAgIAorICAgICAgICBNb3ZlIFdpbmRvd3NUb3VjaC5oIGZyb20g
V2ViS2l0L3dpbiB0byBXZWJDb3JlL3BsYXRmb3JtL3dpbiwgc28gaXQgY2FuIGJlCisgICAgICAg
IHVzZWQgaW4gYm90aCBXZWJLaXQgYW5kIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJLaXQudmNw
cm9qL1dlYktpdC52Y3Byb2o6IFJlbW92ZSBXaW5kb3dzVG91Y2guaC4KKyAgICAgICAgKiBXZWJW
aWV3LmNwcDogSW5jbHVkZSBXaW5kb3dzVG91Y2guaCBmcm9tIFdlYkNvcmUgaW5zdGVhZCBvZiBX
ZWJLaXQuCisgICAgICAgICogV2luZG93c1RvdWNoLmg6IFJlbW92ZWQuCisKIDIwMTEtMDQtMDUg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDgy
OTU1KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDYgQEAKICNpbmNsdWRlICJXZWJQbHVnaW5IYWx0ZXJDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJQcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIldlYlNjcmlwdFdvcmxkLmgiCi0jaW5j
bHVkZSAiV2luZG93c1RvdWNoLmgiCiAjaW5jbHVkZSAicmVzb3VyY2UuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlh
bGl6ZVRocmVhZGluZy5oPgpAQCAtMTMxLDYgKzEzMCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9T
eXN0ZW1JbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UeXBpbmdDb21tYW5kLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1dpbmRvd3NUb3VjaC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIEVOQUJM
RShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XaW5k
b3dzVG91Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XaW5kb3dzVG91Y2gu
aAkocmV2aXNpb24gODI5NTUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XaW5kb3dzVG91Y2guaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdpbmRv
d3NUb3VjaF9oCi0jZGVmaW5lIFdpbmRvd3NUb3VjaF9oCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5n
IGNvbnN0YW50cyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgbXVsdGl0b3VjaCBhbmQgZ2VzdHVyZSBi
ZWhhdmlvcgotICogZm9yIFdpbmRvd3MgNy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZToKLSAq
IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDU2MjE5NyhWUy44NSku
YXNweAotICovCi0KLS8vIFZhbHVlIHVzZWQgaW4gV2ViVmlld1duZFByb2MgZm9yIEdlc3R1cmVz
Ci0jZGVmaW5lIFdNX0dFU1RVUkUgMHgwMTE5Ci0jZGVmaW5lIFdNX0dFU1RVUkVOT1RJRlkgMHgw
MTFBCi0KLS8vIEdlc3R1cmUgSW5mb3JtYXRpb24gRmxhZ3MKLSNkZWZpbmUgR0ZfQkVHSU4gMHgw
MDAwMDAwMQotI2RlZmluZSBHRl9JTkVSVElBIDB4MDAwMDAwMDIKLSNkZWZpbmUgR0ZfRU5EIDB4
MDAwMDAwMDQKLQotLy8gR2VzdHVyZSBJRHMKLSNkZWZpbmUgR0lEX0JFR0lOIDEKLSNkZWZpbmUg
R0lEX0VORCAyCi0jZGVmaW5lIEdJRF9aT09NIDMKLSNkZWZpbmUgR0lEX1BBTiA0Ci0jZGVmaW5l
IEdJRF9ST1RBVEUgNQotI2RlZmluZSBHSURfVFdPRklOR0VSVEFQIDYKLSNkZWZpbmUgR0lEX1BS
RVNTQU5EVEFQIDcKLSNkZWZpbmUgR0lEX1JPTExPVkVSIEdJRF9QUkVTU0FORFRBUAotCi0vLyBa
b29tIEdlc3R1cmUgQ29uZmlyYXRpb24gRmxhZ3MKLSNkZWZpbmUgR0NfWk9PTSAweDAwMDAwMDAx
Ci0KLS8vIFBhbiBHZXN0dXJlIENvbmZpZ3VyYXRpb24gRmxhZ3MKLSNkZWZpbmUgR0NfUEFOIDB4
MDAwMDAwMDEKLSNkZWZpbmUgR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9WRVJUSUNBTExZIDB4
MDAwMDAwMDIKLSNkZWZpbmUgR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9IT1JJWk9OVEFMTFkg
MHgwMDAwMDAwNAotI2RlZmluZSBHQ19QQU5fV0lUSF9HVVRURVIgMHgwMDAwMDAwOAotI2RlZmlu
ZSBHQ19QQU5fV0lUSF9JTkVSVElBIDB4MDAwMDAwMTAKLQotLy8gUm90YXRlIEdlc3R1cmUgQ29u
ZmlndXJhdGlvbiBGbGFncwotI2RlZmluZSBHQ19ST1RBVEUgMHgwMDAwMDAwMQotCi0vLyBUd28g
ZmluZ2VyIHRhcCBjb25maWd1cmF0aW9uIGZsYWdzCi0jZGVmaW5lIEdDX1RXT0ZJTkdFUlRBUCAw
eDAwMDAwMDAxCi0KLS8vIFByZXNzIGFuZCB0YXAgQ29uZmlndXJhdGlvbiBGbGFncwotI2RlZmlu
ZSBHQ19QUkVTU0FORFRBUCAweDAwMDAwMDAxCi0jZGVmaW5lIEdDX1JPTExPVkVSIEdDX1BSRVNT
QU5EVEFQCi0KLS8vIEdFU1RVUkVJTkZPIHN0cnVjdCBkZWZpbml0aW9uCi10eXBlZGVmIHN0cnVj
dCB0YWdHRVNUVVJFSU5GTyB7Ci0gICAgVUlOVCBjYlNpemU7ICAgICAgICAgICAgICAgICAgICAv
LyBzaXplLCBpbiBieXRlcywgb2YgdGhpcyBzdHJ1Y3R1cmUgKGluY2x1ZGluZyB2YXJpYWJsZSBs
ZW5ndGggQXJncyBmaWVsZCkKLSAgICBEV09SRCBkd0ZsYWdzOyAgICAgICAgICAgICAgICAgIC8v
IHNlZSBHRl8qIGZsYWdzCi0gICAgRFdPUkQgZHdJRDsgICAgICAgICAgICAgICAgICAgICAvLyBn
ZXN0dXJlIElELCBzZWUgR0lEXyogZGVmaW5lcwotICAgIEhXTkQgaHduZFRhcmdldDsgICAgICAg
ICAgICAgICAgLy8gaGFuZGxlIHRvIHdpbmRvdyB0YXJnZXRlZCBieSB0aGlzIGdlc3R1cmUKLSAg
ICBQT0lOVFMgcHRzTG9jYXRpb247ICAgICAgICAgICAgIC8vIGN1cnJlbnQgbG9jYXRpb24gb2Yg
dGhpcyBnZXN0dXJlCi0gICAgRFdPUkQgZHdJbnN0YW5jZUlEOyAgICAgICAgICAgICAvLyBpbnRl
cm5hbGx5IHVzZWQKLSAgICBEV09SRCBkd1NlcXVlbmNlSUQ7ICAgICAgICAgICAgIC8vIGludGVy
bmFsbHkgdXNlZAotICAgIFVMT05HTE9ORyB1bGxBcmd1bWVudHM7ICAgICAgICAgLy8gYXJndW1l
bnRzIGZvciBnZXN0dXJlcyB3aG9zZSBhcmd1bWVudHMgZml0IGluIDggQllURVMKLSAgICBVSU5U
IGNiRXh0cmFBcmdzOyAgICAgICAgICAgICAgIC8vIHNpemUsIGluIGJ5dGVzLCBvZiBleHRyYSBh
cmd1bWVudHMsIGlmIGFueSwgdGhhdCBhY2NvbXBhbnkgdGhpcyBnZXN0dXJlCi19IEdFU1RVUkVJ
TkZPLCAqUEdFU1RVUkVJTkZPOwotdHlwZWRlZiBHRVNUVVJFSU5GTyBjb25zdCAqIFBDR0VTVFVS
RUlORk87Ci0KLS8vIEdFU1RVUkVDT05GSUcgc3RydWN0IGRlZmludGlvbgotdHlwZWRlZiBzdHJ1
Y3QgdGFnR0VTVFVSRUNPTkZJRyB7Ci0gICAgRFdPUkQgZHdJRDsgICAgICAgICAgICAgICAgICAg
ICAvLyBnZXN0dXJlIElECi0gICAgRFdPUkQgZHdXYW50OyAgICAgICAgICAgICAgICAgICAvLyBz
ZXR0aW5ncyByZWxhdGVkIHRvIGdlc3R1cmUgSUQgdGhhdCBhcmUgdG8gYmUgdHVybmVkIG9uCi0g
ICAgRFdPUkQgZHdCbG9jazsgICAgICAgICAgICAgICAgICAvLyBzZXR0aW5ncyByZWxhdGVkIHRv
IGdlc3R1cmUgSUQgdGhhdCBhcmUgdG8gYmUgdHVybmVkIG9mZgotfSBHRVNUVVJFQ09ORklHLCAq
UEdFU1RVUkVDT05GSUc7Ci0KLS8qCi0gKiBHZXN0dXJlIG5vdGlmaWNhdGlvbiBzdHJ1Y3R1cmUK
LSAqICAgLSBUaGUgV01fR0VTVFVSRU5PVElGWSBtZXNzYWdlIGxQYXJhbSBjb250YWlucyBhIHBv
aW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuCi0gKiAgIC0gVGhlIFdNX0dFU1RVUkVOT1RJRlkgbWVz
c2FnZSBub3RpZmllcyBhIHdpbmRvdyB0aGF0IGdlc3R1cmUgcmVjb2duaXRpb24gaXMKLSAqICAg
ICBpbiBwcm9ncmVzcyBhbmQgYSBnZXN0dXJlIHdpbGwgYmUgZ2VuZXJhdGVkIGlmIG9uZSBpcyBy
ZWNvZ25pemVkIHVuZGVyIHRoZQotICogICAgIGN1cnJlbnQgZ2VzdHVyZSBzZXR0aW5ncy4KLSAq
LwotdHlwZWRlZiBzdHJ1Y3QgdGFnR0VTVFVSRU5PVElGWVNUUlVDVCB7Ci0gICAgVUlOVCBjYlNp
emU7ICAgICAgICAgICAgICAgICAgICAvLyBzaXplLCBpbiBieXRlcywgb2YgdGhpcyBzdHJ1Y3R1
cmUKLSAgICBEV09SRCBkd0ZsYWdzOyAgICAgICAgICAgICAgICAgIC8vIHVudXNlZAotICAgIEhX
TkQgaHduZFRhcmdldDsgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRvIHdpbmRvdyB0YXJnZXRl
ZCBieSB0aGUgZ2VzdHVyZQotICAgIFBPSU5UUyBwdHNMb2NhdGlvbjsgICAgICAgICAgICAgLy8g
c3RhcnRpbmcgbG9jYXRpb24KLSAgICBEV09SRCBkd0luc3RhbmNlSUQ7ICAgICAgICAgICAgIC8v
IGludGVybmFsbHkgdXNlZAotfSBHRVNUVVJFTk9USUZZU1RSVUNULCAqUEdFU1RVUkVOT1RJRllT
VFJVQ1Q7Ci0KLURFQ0xBUkVfSEFORExFKEhHRVNUVVJFSU5GTyk7Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvagkocmV2aXNp
b24gODI5NTUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTY5OSwxMCArNjk5LDYgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFdlYldvcmtlcnNQcml2YXRlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXFdpbmRvd3NUb3VjaC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KIAkJ
PC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9IkNsYXNzZXMiCg==
</data>
<flag name="review"
          id="81017"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88529</attachid>
            <date>2011-04-06 15:24:43 -0700</date>
            <delta_ts>2011-04-06 15:31:13 -0700</delta_ts>
            <desc>[PATCH] Fix v2</desc>
            <filename>gestures_wk2_win.patch</filename>
            <type>text/plain</type>
            <size>23655</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDQtMDYgIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFN1cHBvcnQgV2luZG93cyA3IEdlc3R1
cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTgy
NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODY4OTcyOD4KKyAgICAgICAgCisgICAgICAgIE1v
dmUgV2luZG93VG91Y2guaCBmcm9tIFdlYktpdC93aW4sIHNvIGl0IGNhbiBiZSB1c2VkIGluIGJv
dGggV2ViS2l0IGFuZCBXZWJLaXQyLgorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5oOiBDb3BpZWQg
ZnJvbSBXZWJLaXQvd2luL1dpbmRvd3NUb3VjaC5oLgorCiAyMDExLTA0LTA2ICBMZWFuZHJvIEdy
YWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTdGV2ZSBCbG9jay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4Mjk1NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjU2OCw2ICsyNjU2
OCwxMCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxXaW5kb3dNZXNzYWdl
TGlzdGVuZXIuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxXaW5kb3dzVG91Y2guaCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KIAkJCTwvRmlsdGVyPgogCQkJPEZpbHRlcgogCQkJCU5hbWU9ImNmIgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vV2luZG93c1RvdWNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV2luZG93c1RvdWNoLmgJKHJldmlzaW9uIDgyOTU1KQkoZnJvbSBXZWJLaXQvd2lu
L1dpbmRvd3NUb3VjaC5oOjgyOTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c1Rv
dWNoLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDgwKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAK
KzIwMTEtMDQtMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFN1
cHBvcnQgV2luZG93cyA3IEdlc3R1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00OTgyNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODY4OTcyOD4K
KyAgICAgICAgCisgICAgICAgIFBvcnQgY29kZSBmcm9tIFdlYktpdDEgLT4gV2ViS2l0MiB0byBo
YW5kbGUgV2luZG93cyA3IGdlc3R1cmVzLgorICAgICAgICAKKyAgICAgICAgVGhlIFVJUHJvY2Vz
cyBnZXRzIGEgV01fR0VTVFVSRU5PVElGWSBtZXNzYWdlLCBpdCBzZW5kcyBhIHN5bmMgbWVzc2Fn
ZSB0byB0aGUgV2ViUHJvY2VzcyB0byBhc2sKKyAgICAgICAgaWYgd2Ugc2hvdWxkIGFsbG93IHBh
bm5pbmcuIFRoZSBXZWJQcm9jZXNzIGNoZWNrcyBpZiB3ZSdyZSBpbiBhIHNjcm9sbGFibGUgYXJl
YSwgYW5kIHRoZSBtb3VzZQorICAgICAgICBpc24ndCBvdmVyIGEgc2Nyb2xsYmFyLgorCisgICAg
ICAgIFRoZSBVSVByb2Nlc3MgdGhlbiBnZXRzIGEgV01fR0VTVFVSRSBtZXNzYWdlLCBhbmQgaWYg
aXQgaXMgYSBwYW4gZ2VzdHVyZSwgaXQgc2VuZHMgYSBtZXNzYWdlIHRvCisgICAgICAgIHRoZSBX
ZWJQcm9jZXNzIHRvIHNjcm9sbCBieSB0aGUgYW1vdW50IGZpbmdlcnMgaGF2ZSBtb3ZlZCBzaW5j
ZSB0aGUgbGFzdCBXTV9HRVNUVVJFIG1lc3NlYWdlLiBUaGUKKyAgICAgICAgWCBhbmQgWSBhcmUg
cmV2ZXJzZWQgYmVjYXVzZSBwYW5uaW5nIHVwIC0+IG1vdmluZyB0aGUgcGFnZSBkb3duLCBhbmQg
dmljZSB2ZXJzYS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdlc3R1cmVXaWxsQmVnaW4pOiBTZW5kIGEgc3lu
YyBtZXNzYWdlIHRvIHRoZSBXZWJQcm9jZXNzCisgICAgICAgICAgICB0byBpbml0aWFsaXplIHRo
ZSBnZXN0dXJlLiBUaGUgV2ViUHJvY2VzcyByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBz
dGFydCBhIHBhbgorICAgICAgICAgICAgZ2VzdHVyZSBmcm9tIHdoZXJlIHdlIGFyZS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXN0dXJlRGlkU2Nyb2xsKTogU2VuZCBhIG1lc3Nh
Z2UgdG8gdGhlIFdlYlByb2Nlc3MgdG8gc2Nyb2xsIGJ5CisgICAgICAgICAgICBwYW4gZ2VzdHVy
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXN0dXJlRGlkRW5kKTogU2VuZCBh
IG1lc3NhZ2UgdG8gdGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUgZ2VzdHVyZSBoYXMgZW5kZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93
aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnduZFByb2MpOiBBZGQg
V01fR0VTVFVSRSBhbmQgV01fR0VTVFVSRU5PVElGWSBoYW5kbGVycy4KKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6V2ViVmlldyk6IEluaXRpYWxpemUgdHdvIG5ldyB2YXJpYWJsZXMuCisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uR2VzdHVyZU5vdGlmeSk6IEZpZ3VyZSBvdXQgd2hpY2gg
Z2VzdHVyZXMgd2Ugc2hvdWxkIHN1cHBvcnQgYmFzZWQgb24gd2hlcmUKKyAgICAgICAgICAgIHRo
ZSBnZXN0dXJlIGlzIGJlZ2lubmluZy4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25HZXN0
dXJlKTogU3VwcG9ydCBzdGFydGluZyBhIGdlc3R1cmUsIGVuZGluZyBhIGdlc3R1cmUsIGFuZCBw
YW5uaW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW46IEFkZCBtZXNzYWdlcyBuZWVkZWQgZm9yIGdlc3R1cmVzLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6Omdlc3R1cmVXaWxsQmVnaW4pOiBTZXQgdGhlIG5vZGUgdGhhdCB0
aGUgZ2VzdHVyZSBzdGFydGVkIG9uIChzbyB3ZSAKKyAgICAgICAgICAgIGtub3cgd2hpY2ggbGF5
ZXIgdG8gc2Nyb2xsIGlmIHRoZSB1c2VyIHBhbnMpLCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IHdlIHNob3VsZCBhbGxvdworICAgICAgICAgICAgcGFubmluZy4gSWYgdGhlIHBhZ2UgY2Fu
J3Qgc2Nyb2xsLCBvciB0aGUgdXNlciBpcyBvbiBhIHNjcm9sbGJhciwgZGlzYWxsb3cgcGFubmlu
Zy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2VzdHVyZURpZFNjcm9sbCk6IFNjcm9sbCB0
aGUgZW5jbG9zaW5nIGxheWVyIG9mIHRoZSBlbGVtZW50IHRoZSBnZXN0dXJlCisgICAgICAgICAg
ICBzdGFydGVkIG9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXN0dXJlRGlkRW5kKTog
Q2xlYXIgdGhlIG5vZGUgdGhlIGdlc3R1cmUgc3RhcnRlZCBvbi4KKwogMjAxMS0wNC0wNiAgQ2hh
bmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJl
dmlzaW9uIDgyOTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Nyw2ICs2NjcsMjMgQEAgU3RyaW5nIFdlYlBhZ2VQcm94
eTo6Z2V0U2VsZWN0ZWRUZXh0KCkKICAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpHZXRTZWxlY3RlZFRleHQoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVk
VGV4dDo6UmVwbHkodGV4dCksIG1fcGFnZUlEKTsKICAgICByZXR1cm4gdGV4dDsKIH0KKworYm9v
bCBXZWJQYWdlUHJveHk6Omdlc3R1cmVXaWxsQmVnaW4oY29uc3QgSW50UG9pbnQmIHBvaW50KQor
eworICAgIGJvb2wgY2FuQmVnaW5QYW5uaW5nOworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2U6Okdlc3R1cmVXaWxsQmVnaW4ocG9pbnQpLCBNZXNzYWdlczo6V2ViUGFn
ZTo6R2VzdHVyZVdpbGxCZWdpbjo6UmVwbHkoY2FuQmVnaW5QYW5uaW5nKSwgbV9wYWdlSUQpOwor
ICAgIHJldHVybiBjYW5CZWdpblBhbm5pbmc7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXN0
dXJlRGlkU2Nyb2xsKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXN0dXJlRGlkU2Nyb2xsKHNpemUpLCBtX3BhZ2VJRCk7Cit9
CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJlRGlkRW5kKCkKK3sKKyAgICBwcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdlc3R1cmVEaWRFbmQoKSwgbV9wYWdlSUQpOworfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDgyOTU1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIs
NiArMjcyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mLCBpbnQpOwogICAgIFdl
YkNvcmU6OkludFJlY3QgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVySW5TZWxlY3RlZFJhbmdlKGludCk7
CiAgICAgU3RyaW5nIGdldFNlbGVjdGVkVGV4dCgpOworCisgICAgYm9vbCBnZXN0dXJlV2lsbEJl
Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBnZXN0dXJlRGlkU2Nyb2xs
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIGdlc3R1cmVEaWRFbmQoKTsKICNl
bmRpZgogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIHZvaWQgc2V0QWN0dWFs
VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA4Mjk1NSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93
c1RvdWNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bWUgewpAQCAtNjcsNiArNjgsMTIgQEAgU09GVF9MSU5LKElNTTMyLCBJbW1Ob3RpZnlJTUUsIEJP
T0wsIFdJTgogU09GVF9MSU5LKElNTTMyLCBJbW1Bc3NvY2lhdGVDb250ZXh0RXgsIEJPT0wsIFdJ
TkFQSSwgKEhXTkQgaFduZCwgSElNQyBoSU1DLCBEV09SRCBkd0ZsYWdzKSwgKGhXbmQsIGhJTUMs
IGR3RmxhZ3MpKQogfTsKIAorLy8gU29mdCBsaW5rIGZ1bmN0aW9ucyBmb3IgZ2VzdHVyZXMgYW5k
IHBhbm5pbmcuCitTT0ZUX0xJTktfTElCUkFSWShVU0VSMzIpOworU09GVF9MSU5LX09QVElPTkFM
KFVTRVIzMiwgR2V0R2VzdHVyZUluZm8sIEJPT0wsIFdJTkFQSSwgKEhHRVNUVVJFSU5GTywgUEdF
U1RVUkVJTkZPKSk7CitTT0ZUX0xJTktfT1BUSU9OQUwoVVNFUjMyLCBTZXRHZXN0dXJlQ29uZmln
LCBCT09MLCBXSU5BUEksIChIV05ELCBEV09SRCwgVUlOVCwgUEdFU1RVUkVDT05GSUcsIFVJTlQp
KTsKK1NPRlRfTElOS19PUFRJT05BTChVU0VSMzIsIENsb3NlR2VzdHVyZUluZm9IYW5kbGUsIEJP
T0wsIFdJTkFQSSwgKEhHRVNUVVJFSU5GTykpOworCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xNTcsNiArMTY0LDEyIEBAIExSRVNVTFQgV2ViVmll
dzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQKICAgICBjYXNlIFdNX1ZTQ1JPTEw6CiAgICAgICAg
IGxSZXN1bHQgPSBvblZlcnRpY2FsU2Nyb2xsKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
LCBoYW5kbGVkKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9HRVNUVVJFTk9USUZZOgor
ICAgICAgICBsUmVzdWx0ID0gb25HZXN0dXJlTm90aWZ5KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwg
bFBhcmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9HRVNUVVJFOgor
ICAgICAgICBsUmVzdWx0ID0gb25HZXN0dXJlKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
LCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXTV9TWVNLRVlET1dOOgogICAg
IGNhc2UgV01fS0VZRE9XTjoKICAgICBjYXNlIFdNX1NZU0NIQVI6CkBAIC0yNTQsNiArMjY3LDgg
QEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIFdlYkNvbnRleHQqIAogICAgICwgbV9pbklN
RUNvbXBvc2l0aW9uKDApCiAgICAgLCBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFjaygwKQogICAgICwg
bV9maW5kSW5kaWNhdG9yQ2FsbGJhY2tDb250ZXh0KDApCisgICAgLCBtX2xhc3RQYW5YKDApCisg
ICAgLCBtX2xhc3RQYW5ZKDApCiB7CiAgICAgcmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MoKTsK
IApAQCAtNDgwLDYgKzQ5NSw5MiBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uVmVydGljYWxTY3JvbGwo
SFdORCBoCiAgICAgcmV0dXJuIDA7CiB9CiAKK0xSRVNVTFQgV2ViVmlldzo6b25HZXN0dXJlTm90
aWZ5KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
LCBib29sJiBoYW5kbGVkKQoreworICAgIC8vIFdlIHNob3VsZG4ndCBiZSBnZXR0aW5nIGFueSBn
ZXN0dXJlIG1lc3NhZ2VzIHdpdGhvdXQgU2V0R2VzdHVyZUNvbmZpZyBzb2Z0LWxpbmtpbmcgY29y
cmVjdGx5LgorICAgIEFTU0VSVChTZXRHZXN0dXJlQ29uZmlnUHRyKCkpOworCisgICAgR0VTVFVS
RU5PVElGWVNUUlVDVCogZ24gPSByZWludGVycHJldF9jYXN0PEdFU1RVUkVOT1RJRllTVFJVQ1Qq
PihsUGFyYW0pOworCisgICAgUE9JTlQgbG9jYWxQb2ludCA9IHsgZ24tPnB0c0xvY2F0aW9uLngs
IGduLT5wdHNMb2NhdGlvbi55IH07CisgICAgOjpTY3JlZW5Ub0NsaWVudChtX3dpbmRvdywgJmxv
Y2FsUG9pbnQpOworCisgICAgYm9vbCBjYW5QYW4gPSBtX3BhZ2UtPmdlc3R1cmVXaWxsQmVnaW4o
bG9jYWxQb2ludCk7CisKKyAgICBEV09SRCBkd1BhbldhbnQgPSBHQ19QQU4gfCBHQ19QQU5fV0lU
SF9JTkVSVElBIHwgR0NfUEFOX1dJVEhfR1VUVEVSOworICAgIERXT1JEIGR3UGFuQmxvY2sgPSBH
Q19QQU5fV0lUSF9TSU5HTEVfRklOR0VSX0hPUklaT05UQUxMWTsKKyAgICBpZiAoY2FuUGFuKQor
ICAgICAgICBkd1BhbldhbnQgfD0gR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9WRVJUSUNBTExZ
OworICAgIGVsc2UKKyAgICAgICAgZHdQYW5CbG9jayB8PSBHQ19QQU5fV0lUSF9TSU5HTEVfRklO
R0VSX1ZFUlRJQ0FMTFk7CisKKyAgICBHRVNUVVJFQ09ORklHIGdjID0geyBHSURfUEFOLCBkd1Bh
bldhbnQsIGR3UGFuQmxvY2sgfTsKKyAgICByZXR1cm4gU2V0R2VzdHVyZUNvbmZpZ1B0cigpKG1f
d2luZG93LCAwLCAxLCAmZ2MsIHNpemVvZihnYykpOworfQorCitMUkVTVUxUIFdlYlZpZXc6Om9u
R2VzdHVyZShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBBU1NFUlQoR2V0R2VzdHVyZUluZm9QdHIoKSk7
CisgICAgQVNTRVJUKENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKSk7CisKKyAgICBpZiAoIUdl
dEdlc3R1cmVJbmZvUHRyKCkgfHwgIUNsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKSkgeworICAg
ICAgICBoYW5kbGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEhH
RVNUVVJFSU5GTyBnZXN0dXJlSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIR0VTVFVSRUlORk8+
KGxQYXJhbSk7CisgICAgR0VTVFVSRUlORk8gZ2kgPSB7MH07CisgICAgZ2kuY2JTaXplID0gc2l6
ZW9mKEdFU1RVUkVJTkZPKTsKKworICAgIGlmICghR2V0R2VzdHVyZUluZm9QdHIoKShnZXN0dXJl
SGFuZGxlLCAmZ2kpKSB7CisgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgc3dpdGNoIChnaS5kd0lEKSB7CisgICAgY2FzZSBHSURfQkVHSU46
CisgICAgICAgIG1fbGFzdFBhblggPSBnaS5wdHNMb2NhdGlvbi54OworICAgICAgICBtX2xhc3RQ
YW5ZID0gZ2kucHRzTG9jYXRpb24ueTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHSURfRU5E
OgorICAgICAgICBtX3BhZ2UtPmdlc3R1cmVEaWRFbmQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHSURfUEFOOiB7CisgICAgICAgIGludCBjdXJyZW50WCA9IGdpLnB0c0xvY2F0aW9uLng7
CisgICAgICAgIGludCBjdXJyZW50WSA9IGdpLnB0c0xvY2F0aW9uLnk7CisKKyAgICAgICAgLy8g
UmV2ZXJzZSB0aGUgY2FsY3VsYXRpb25zIGJlY2F1c2UgbW92aW5nIHlvdXIgZmluZ2VycyB1cCBz
aG91bGQgbW92ZSB0aGUgc2NyZWVuIGRvd24sIGFuZAorICAgICAgICAvLyB2aWNlLXZlcnNhLgor
ICAgICAgICBpbnQgZGVsdGFYID0gbV9sYXN0UGFuWCAtIGN1cnJlbnRYOworICAgICAgICBpbnQg
ZGVsdGFZID0gbV9sYXN0UGFuWSAtIGN1cnJlbnRZOworCisgICAgICAgIG1fbGFzdFBhblggPSBj
dXJyZW50WDsKKyAgICAgICAgbV9sYXN0UGFuWSA9IGN1cnJlbnRZOworCisgICAgICAgIG1fcGFn
ZS0+Z2VzdHVyZURpZFNjcm9sbChJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CisKKyAgICAgICAg
Ly8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzkyNDQzNjc+OiBTdXBwb3J0IHdpbmRvdyBib3VuY2Ug
KGJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwpLCAKKyAgICAgICAgLy8gaWYgdGhlIHVlc3Ig
aGFzIHNjcm9sbGVkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuIHNjb2xsQnlQYW5HZXN0
dXJlIHdvdWxkIG5lZWQgdG8gCisgICAgICAgIC8vIGJlIGEgc3luYyBtZXNzYWdlIHRvIHN1cHBv
cnQgdGhpcywgYmVjYXVzZSB3ZSB3b3VsZCBuZWVkIHRvIGtub3cgaG93IGZhciB3ZSBzY3JvbGxl
ZCAKKyAgICAgICAgLy8gcGFzdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KKworICAgICAgICBD
bG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7CisKKyAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBwb2ludCwgdGhl
IGdlc3R1cmUgaGFzIG5vdCBiZWVuIGhhbmRsZWQuIFdlIGZvcndhcmQKKyAgICAvLyB0aGUgY2Fs
bCB0byBEZWZXaW5kb3dQcm9jIGJ5IHJldHVybmluZyBmYWxzZSwgYW5kIHdlIGRvbid0IG5lZWQg
dG8gCisgICAgLy8gdG8gY2FsbCBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlLiAKKyAgICAvLyBodHRw
Oi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQzNTMyMjgoVlMuODUpLmFzcHgK
KyAgICBoYW5kbGVkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKIExSRVNVTFQgV2ViVmll
dzo6b25LZXlFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKIHsKICAgICBtX3BhZ2UtPmhhbmRsZUtleWJvYXJk
RXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHJldmlzaW9u
IDgyOTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICBMUkVTVUxUIG9uV2hlZWxF
dmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRs
ZWQpOwogICAgIExSRVNVTFQgb25Ib3Jpem9udGFsU2Nyb2xsKEhXTkQgaFduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CiAgICAgTFJFU1VMVCBvblZlcnRp
Y2FsU2Nyb2xsKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYg
aGFuZGxlZCk7CisgICAgTFJFU1VMVCBvbkdlc3R1cmVOb3RpZnkoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uR2Vz
dHVyZShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRs
ZWQpOwogICAgIExSRVNVTFQgb25LZXlFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOwogICAgIExSRVNVTFQgb25QYWludEV2ZW50KEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CiAg
ICAgTFJFU1VMVCBvblByaW50Q2xpZW50RXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKQEAgLTIxOSw2ICsyMjEsOSBAQCBwcml2YXRl
OgogICAgIC8vIFRodXMsIG9uIHJldHVybiBmcm9tIERvRHJhZ0Ryb3Agd2UgaGF2ZSB0aGUgY29y
cmVjdCBwZHdFZmZlY3QgZm9yIHRoZSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbi4KICAgICAvLyAo
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI2NCkKICAgICBE
V09SRCBtX2xhc3REcm9wRWZmZWN0OworCisgICAgaW50IG1fbGFzdFBhblg7CisgICAgaW50IG1f
bGFzdFBhblk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gODI5NTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjQsNiArMzI0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V2Vi
Q29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1aW50NjRfdCBjdXJzb3JQ
b3NpdGlvbik7CiAgICAgdm9pZCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJJblNlbGVjdGVkUmFuZ2Uo
Y29uc3QgdWludDY0X3QgY2hhcmFjdGVyUG9zaXRpb24sIFdlYkNvcmU6OkludFJlY3QmIHJlc3Vs
dFJlY3QpOwogICAgIHZvaWQgZ2V0U2VsZWN0ZWRUZXh0KFdURjo6U3RyaW5nJik7CisKKyAgICB2
b2lkIGdlc3R1cmVXaWxsQmVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBib29s
JiBjYW5CZWdpblBhbm5pbmcpOworICAgIHZvaWQgZ2VzdHVyZURpZFNjcm9sbChjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplKTsKKyAgICB2b2lkIGdlc3R1cmVEaWRFbmQoKTsKICNlbmRpZgog
CiAgICAgLy8gRklYTUU6IFRoaXMgYSBkdW1teSBtZXNzYWdlLCB0byBhdm9pZCBicmVha2luZyB0
aGUgYnVpbGQgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHJlcXVpcmUKQEAgLTU3MSw2ICs1NzUs
OCBAQCBwcml2YXRlOgogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIE91ciB2aWV3J3Mgd2lu
ZG93IChpbiB0aGUgVUkgcHJvY2VzcykuCiAgICAgSFdORCBtX25hdGl2ZVdpbmRvdzsKKworICAg
IFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2dlc3R1cmVUYXJnZXROb2RlOwogI2VuZGlmCiAgICAg
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkVkaXRDb21tYW5kPiA+IG1fZWRpdENv
bW1hbmRNYXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gODI5NTUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMjAxLDYgKzIwMSwxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBTZXRDb21w
b3NpdGlvbihXVEY6OlN0cmluZyBjb21wb3NpdGlvblN0cmluZywgV1RGOjpWZWN0b3I8V2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IGN1cnNvclBvc2l0
aW9uKQogICAgIEZpcnN0UmVjdEZvckNoYXJhY3RlckluU2VsZWN0ZWRSYW5nZSh1aW50NjRfdCBj
aGFyYWN0ZXJQb3NpdGlvbikgLT4gKFdlYkNvcmU6OkludFJlY3QgcmVzdWx0UmVjdCkKICAgICBH
ZXRTZWxlY3RlZFRleHQoKSAtPiAoV1RGOjpTdHJpbmcgdGV4dCkKKworICAgIEdlc3R1cmVXaWxs
QmVnaW4oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+IChib29sIGNhbkJlZ2luUGFubmluZykK
KyAgICBHZXN0dXJlRGlkU2Nyb2xsKFdlYkNvcmU6OkludFNpemUgc2l6ZSkKKyAgICBHZXN0dXJl
RGlkRW5kKCkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgIEZpbmRab29tYWJsZUFyZWFG
b3JQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAkocmV2aXNpb24g
ODI5NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxMyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvRm9udFJlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hpdFRlc3RSZXF1
ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
ICNpZiBQTEFURk9STShDRykKQEAgLTM1MSw0ICszNTUsNjMgQEAgdm9pZCBXZWJQYWdlOjpnZXRT
ZWxlY3RlZFRleHQoU3RyaW5nJiB0ZQogICAgIHRleHQgPSBzZWxlY3RlZFJhbmdlLT50ZXh0KCk7
CiB9CiAKK3ZvaWQgV2ViUGFnZTo6Z2VzdHVyZVdpbGxCZWdpbihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgcG9pbnQsIGJvb2wmIGNhbkJlZ2luUGFubmluZykKK3sKKyAgICBib29sIGhpdFNjcm9s
bGJhciA9IGZhbHNlOworCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVz
dDo6UmVhZE9ubHkpOworICAgIGZvciAoRnJhbWUqIGNoaWxkRnJhbWUgPSBtX3BhZ2UtPm1haW5G
cmFtZSgpOyBjaGlsZEZyYW1lOyBjaGlsZEZyYW1lID0gRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZv
clRhcmdldE5vZGUobV9nZXN0dXJlVGFyZ2V0Tm9kZS5nZXQoKSkpIHsKKyAgICAgICAgU2Nyb2xs
Vmlldyogc2NvbGxWaWV3ID0gY2hpbGRGcmFtZS0+dmlldygpOworICAgICAgICBpZiAoIXNjb2xs
VmlldykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgUmVuZGVyVmlldyog
cmVuZGVyVmlldyA9IGNoaWxkRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKTsKKyAgICAg
ICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gcmVuZGVyVmlldy0+bGF5ZXIoKTsKKyAgICAgICAgaWYgKCFsYXllcikK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gc2Nv
bGxWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKKyAgICAgICAgbGF5ZXItPmhpdFRlc3Qo
cmVxdWVzdCwgcmVzdWx0KTsKKyAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IHJlc3VsdC5p
bm5lck5vZGUoKTsKKworICAgICAgICBpZiAoIWhpdFNjcm9sbGJhcikKKyAgICAgICAgICAgIGhp
dFNjcm9sbGJhciA9IHJlc3VsdC5zY3JvbGxiYXIoKTsKKyAgICB9CisKKyAgICBpZiAoaGl0U2Ny
b2xsYmFyKSB7CisgICAgICAgIGNhbkJlZ2luUGFubmluZyA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlKSB7CisgICAgICAgIGNh
bkJlZ2luUGFubmluZyA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9y
IChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIo
KTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlm
IChyZW5kZXJlci0+aXNCb3goKSAmJiB0b1JlbmRlckJveChyZW5kZXJlciktPmNhbkJlU2Nyb2xs
ZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBjYW5CZWdpblBhbm5pbmcg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgY2Fu
QmVnaW5QYW5uaW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Z2VzdHVyZURpZFNjcm9s
bChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIGlmICghbV9nZXN0dXJlVGFy
Z2V0Tm9kZSB8fCAhbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSB8fCAhbV9nZXN0dXJl
VGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIo
KS0+c2Nyb2xsQnlSZWN1cnNpdmVseShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQor
Cit2b2lkIFdlYlBhZ2U6Omdlc3R1cmVEaWRFbmQoKQoreworICAgIG1fZ2VzdHVyZVRhcmdldE5v
ZGUgPSBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDgzMDgwKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMDYgIEJyaWFuIFdlaW5zdGVp
biAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFN1cHBvcnQgV2luZG93cyA3IEdlc3R1cmVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTgyNAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vODY4OTcyOD4KKyAgICAgICAgCisgICAgICAgIE1vdmUgV2lu
ZG93c1RvdWNoLmggZnJvbSBXZWJLaXQvd2luIHRvIFdlYkNvcmUvcGxhdGZvcm0vd2luLCBzbyBp
dCBjYW4gYmUKKyAgICAgICAgdXNlZCBpbiBib3RoIFdlYktpdCBhbmQgV2ViS2l0Mi4KKworICAg
ICAgICAqIFdlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvajogUmVtb3ZlIFdpbmRvd3NUb3VjaC5o
LgorICAgICAgICAqIFdlYlZpZXcuY3BwOiBJbmNsdWRlIFdpbmRvd3NUb3VjaC5oIGZyb20gV2Vi
Q29yZSBpbnN0ZWFkIG9mIFdlYktpdC4KKyAgICAgICAgKiBXaW5kb3dzVG91Y2guaDogUmVtb3Zl
ZC4KKwogMjAxMS0wNC0wNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3
LmNwcAkocmV2aXNpb24gODI5NTUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgIldlYlBsdWdpbkhhbHRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiV2ViU2Ny
aXB0V29ybGQuaCIKLSNpbmNsdWRlICJXaW5kb3dzVG91Y2guaCIKICNpbmNsdWRlICJyZXNvdXJj
ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CkBAIC0xMzEsNiArMTMwLDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1N5c3RlbUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1R5cGluZ0Nv
bW1hbmQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c1RvdWNoLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCiAjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvd2luL1dpbmRvd3NUb3VjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dpbmRvd3NUb3VjaC5oCShyZXZpc2lvbiA4Mjk1NSkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dpbmRvd3NUb3VjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgV2luZG93c1RvdWNoX2gKLSNkZWZpbmUgV2luZG93c1RvdWNoX2gKLQotLyoK
LSAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBtdWx0aXRv
dWNoIGFuZCBnZXN0dXJlIGJlaGF2aW9yCi0gKiBmb3IgV2luZG93cyA3LiBGb3IgbW9yZSBpbmZv
cm1hdGlvbiwgc2VlOgotICogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
L2RkNTYyMTk3KFZTLjg1KS5hc3B4Ci0gKi8KLQotLy8gVmFsdWUgdXNlZCBpbiBXZWJWaWV3V25k
UHJvYyBmb3IgR2VzdHVyZXMKLSNkZWZpbmUgV01fR0VTVFVSRSAweDAxMTkKLSNkZWZpbmUgV01f
R0VTVFVSRU5PVElGWSAweDAxMUEKLQotLy8gR2VzdHVyZSBJbmZvcm1hdGlvbiBGbGFncwotI2Rl
ZmluZSBHRl9CRUdJTiAweDAwMDAwMDAxCi0jZGVmaW5lIEdGX0lORVJUSUEgMHgwMDAwMDAwMgot
I2RlZmluZSBHRl9FTkQgMHgwMDAwMDAwNAotCi0vLyBHZXN0dXJlIElEcwotI2RlZmluZSBHSURf
QkVHSU4gMQotI2RlZmluZSBHSURfRU5EIDIKLSNkZWZpbmUgR0lEX1pPT00gMwotI2RlZmluZSBH
SURfUEFOIDQKLSNkZWZpbmUgR0lEX1JPVEFURSA1Ci0jZGVmaW5lIEdJRF9UV09GSU5HRVJUQVAg
NgotI2RlZmluZSBHSURfUFJFU1NBTkRUQVAgNwotI2RlZmluZSBHSURfUk9MTE9WRVIgR0lEX1BS
RVNTQU5EVEFQCi0KLS8vIFpvb20gR2VzdHVyZSBDb25maXJhdGlvbiBGbGFncwotI2RlZmluZSBH
Q19aT09NIDB4MDAwMDAwMDEKLQotLy8gUGFuIEdlc3R1cmUgQ29uZmlndXJhdGlvbiBGbGFncwot
I2RlZmluZSBHQ19QQU4gMHgwMDAwMDAwMQotI2RlZmluZSBHQ19QQU5fV0lUSF9TSU5HTEVfRklO
R0VSX1ZFUlRJQ0FMTFkgMHgwMDAwMDAwMgotI2RlZmluZSBHQ19QQU5fV0lUSF9TSU5HTEVfRklO
R0VSX0hPUklaT05UQUxMWSAweDAwMDAwMDA0Ci0jZGVmaW5lIEdDX1BBTl9XSVRIX0dVVFRFUiAw
eDAwMDAwMDA4Ci0jZGVmaW5lIEdDX1BBTl9XSVRIX0lORVJUSUEgMHgwMDAwMDAxMAotCi0vLyBS
b3RhdGUgR2VzdHVyZSBDb25maWd1cmF0aW9uIEZsYWdzCi0jZGVmaW5lIEdDX1JPVEFURSAweDAw
MDAwMDAxCi0KLS8vIFR3byBmaW5nZXIgdGFwIGNvbmZpZ3VyYXRpb24gZmxhZ3MKLSNkZWZpbmUg
R0NfVFdPRklOR0VSVEFQIDB4MDAwMDAwMDEKLQotLy8gUHJlc3MgYW5kIHRhcCBDb25maWd1cmF0
aW9uIEZsYWdzCi0jZGVmaW5lIEdDX1BSRVNTQU5EVEFQIDB4MDAwMDAwMDEKLSNkZWZpbmUgR0Nf
Uk9MTE9WRVIgR0NfUFJFU1NBTkRUQVAKLQotLy8gR0VTVFVSRUlORk8gc3RydWN0IGRlZmluaXRp
b24KLXR5cGVkZWYgc3RydWN0IHRhZ0dFU1RVUkVJTkZPIHsKLSAgICBVSU5UIGNiU2l6ZTsgICAg
ICAgICAgICAgICAgICAgIC8vIHNpemUsIGluIGJ5dGVzLCBvZiB0aGlzIHN0cnVjdHVyZSAoaW5j
bHVkaW5nIHZhcmlhYmxlIGxlbmd0aCBBcmdzIGZpZWxkKQotICAgIERXT1JEIGR3RmxhZ3M7ICAg
ICAgICAgICAgICAgICAgLy8gc2VlIEdGXyogZmxhZ3MKLSAgICBEV09SRCBkd0lEOyAgICAgICAg
ICAgICAgICAgICAgIC8vIGdlc3R1cmUgSUQsIHNlZSBHSURfKiBkZWZpbmVzCi0gICAgSFdORCBo
d25kVGFyZ2V0OyAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdG8gd2luZG93IHRhcmdldGVkIGJ5
IHRoaXMgZ2VzdHVyZQotICAgIFBPSU5UUyBwdHNMb2NhdGlvbjsgICAgICAgICAgICAgLy8gY3Vy
cmVudCBsb2NhdGlvbiBvZiB0aGlzIGdlc3R1cmUKLSAgICBEV09SRCBkd0luc3RhbmNlSUQ7ICAg
ICAgICAgICAgIC8vIGludGVybmFsbHkgdXNlZAotICAgIERXT1JEIGR3U2VxdWVuY2VJRDsgICAg
ICAgICAgICAgLy8gaW50ZXJuYWxseSB1c2VkCi0gICAgVUxPTkdMT05HIHVsbEFyZ3VtZW50czsg
ICAgICAgICAvLyBhcmd1bWVudHMgZm9yIGdlc3R1cmVzIHdob3NlIGFyZ3VtZW50cyBmaXQgaW4g
OCBCWVRFUwotICAgIFVJTlQgY2JFeHRyYUFyZ3M7ICAgICAgICAgICAgICAgLy8gc2l6ZSwgaW4g
Ynl0ZXMsIG9mIGV4dHJhIGFyZ3VtZW50cywgaWYgYW55LCB0aGF0IGFjY29tcGFueSB0aGlzIGdl
c3R1cmUKLX0gR0VTVFVSRUlORk8sICpQR0VTVFVSRUlORk87Ci10eXBlZGVmIEdFU1RVUkVJTkZP
IGNvbnN0ICogUENHRVNUVVJFSU5GTzsKLQotLy8gR0VTVFVSRUNPTkZJRyBzdHJ1Y3QgZGVmaW50
aW9uCi10eXBlZGVmIHN0cnVjdCB0YWdHRVNUVVJFQ09ORklHIHsKLSAgICBEV09SRCBkd0lEOyAg
ICAgICAgICAgICAgICAgICAgIC8vIGdlc3R1cmUgSUQKLSAgICBEV09SRCBkd1dhbnQ7ICAgICAg
ICAgICAgICAgICAgIC8vIHNldHRpbmdzIHJlbGF0ZWQgdG8gZ2VzdHVyZSBJRCB0aGF0IGFyZSB0
byBiZSB0dXJuZWQgb24KLSAgICBEV09SRCBkd0Jsb2NrOyAgICAgICAgICAgICAgICAgIC8vIHNl
dHRpbmdzIHJlbGF0ZWQgdG8gZ2VzdHVyZSBJRCB0aGF0IGFyZSB0byBiZSB0dXJuZWQgb2ZmCi19
IEdFU1RVUkVDT05GSUcsICpQR0VTVFVSRUNPTkZJRzsKLQotLyoKLSAqIEdlc3R1cmUgbm90aWZp
Y2F0aW9uIHN0cnVjdHVyZQotICogICAtIFRoZSBXTV9HRVNUVVJFTk9USUZZIG1lc3NhZ2UgbFBh
cmFtIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4KLSAqICAgLSBUaGUgV01f
R0VTVFVSRU5PVElGWSBtZXNzYWdlIG5vdGlmaWVzIGEgd2luZG93IHRoYXQgZ2VzdHVyZSByZWNv
Z25pdGlvbiBpcwotICogICAgIGluIHByb2dyZXNzIGFuZCBhIGdlc3R1cmUgd2lsbCBiZSBnZW5l
cmF0ZWQgaWYgb25lIGlzIHJlY29nbml6ZWQgdW5kZXIgdGhlCi0gKiAgICAgY3VycmVudCBnZXN0
dXJlIHNldHRpbmdzLgotICovCi10eXBlZGVmIHN0cnVjdCB0YWdHRVNUVVJFTk9USUZZU1RSVUNU
IHsKLSAgICBVSU5UIGNiU2l6ZTsgICAgICAgICAgICAgICAgICAgIC8vIHNpemUsIGluIGJ5dGVz
LCBvZiB0aGlzIHN0cnVjdHVyZQotICAgIERXT1JEIGR3RmxhZ3M7ICAgICAgICAgICAgICAgICAg
Ly8gdW51c2VkCi0gICAgSFdORCBod25kVGFyZ2V0OyAgICAgICAgICAgICAgICAvLyBoYW5kbGUg
dG8gd2luZG93IHRhcmdldGVkIGJ5IHRoZSBnZXN0dXJlCi0gICAgUE9JTlRTIHB0c0xvY2F0aW9u
OyAgICAgICAgICAgICAvLyBzdGFydGluZyBsb2NhdGlvbgotICAgIERXT1JEIGR3SW5zdGFuY2VJ
RDsgICAgICAgICAgICAgLy8gaW50ZXJuYWxseSB1c2VkCi19IEdFU1RVUkVOT1RJRllTVFJVQ1Qs
ICpQR0VTVFVSRU5PVElGWVNUUlVDVDsKLQotREVDTEFSRV9IQU5ETEUoSEdFU1RVUkVJTkZPKTsK
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJL
aXQudmNwcm9qCShyZXZpc2lvbiA4Mjk1NSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52
Y3Byb2ovV2ViS2l0LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNjk5LDEwICs2OTksNiBAQAog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViV29ya2Vyc1ByaXZhdGUuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2luZG93c1RvdWNoLmgiCi0JCQkJ
PgotCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJTmFtZT0iQ2xhc3NlcyIK
</data>
<flag name="review"
          id="81055"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>