<?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>148361</bug_id>
          
          <creation_ts>2015-08-22 14:48:28 -0700</creation_ts>
          <short_desc>Factor out and add logging to swipe-start hysteresis code</short_desc>
          <delta_ts>2015-08-22 21:16: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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1120131</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-22 14:48:28 -0700</bug_when>
    <thetext>Factor out and add logging to swipe-start hysteresis code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120132</commentid>
    <comment_count>1</comment_count>
      <attachid>259725</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-22 14:49:05 -0700</bug_when>
    <thetext>Created attachment 259725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120148</commentid>
    <comment_count>2</comment_count>
      <attachid>259725</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-08-22 19:34:28 -0700</bug_when>
    <thetext>Comment on attachment 259725
Patch

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

&gt; Source/WebKit2/UIProcess/mac/ViewGestureController.h:106
&gt;      void setDidMoveSwipeSnapshotCallback(void(^)(CGRect));

Seems strange that we use a block here instead of a std::function.

&gt; Source/WebKit2/UIProcess/mac/ViewGestureController.h:207
&gt; +        PendingSwipeTracker(WebPageProxy&amp; webPageProxy, std::function&lt;void(NSEvent *, SwipeDirection)&gt; trackSwipeCallback)
&gt; +            : m_trackSwipeCallback(WTF::move(trackSwipeCallback))
&gt; +            , m_webPageProxy(webPageProxy)
&gt; +        {
&gt; +        }

Not sure it’s better to have this defined in the header. It can still be inlined even if you put it in the .cpp file.

&gt; Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:277
&gt; -bool ViewGestureController::scrollEventCanBecomeSwipe(NSEvent *event, ViewGestureController::SwipeDirection&amp; potentialSwipeDirection)
&gt; +static bool scrollEventCanInfluenceSwipe(NSEvent *event)
&gt;  {
&gt; -    if (event.phase != NSEventPhaseBegan)
&gt; -        return false;
&gt; -
&gt;      if (!event.hasPreciseScrollingDeltas)
&gt;          return false;
&gt;  
&gt;      if (![NSEvent isSwipeTrackingFromScrollEventsEnabled])
&gt;          return false;
&gt;  
&gt; -    if (fabs(event.scrollingDeltaX) &lt;= fabs(event.scrollingDeltaY))
&gt; +    return true;
&gt; +}

Now that you have simplified this, I think it reads better as a one liner:

    return event.hasPreciseScrollingDeltas &amp;&amp; ![NSEvent isSwipeTrackingFromScrollEventsEnabled];

&gt; Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:281
&gt; +    return fabs(y) &gt;= fabs(x) * minimumScrollEventRatioForSwipe;

In new code I think we should use std::abs instead of fabs, fabsf, abs, etc.

&gt; Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:370
&gt; +    if (fabs(m_cumulativeDelta.width()) &gt;= minimumHorizontalSwipeDistance)

Same comment about std::abs.

&gt; Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:740
&gt; +    if (m_didMoveSwipeSnapshotCallback)
&gt; +        Block_release(m_didMoveSwipeSnapshotCallback);
&gt; +    m_didMoveSwipeSnapshotCallback = Block_copy(callback);

Is there a way to do this with a smart pointer instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120155</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-22 21:15:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/188833</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120156</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-08-22 21:16:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 259725 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=259725&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/ViewGestureController.h:106
&gt; &gt;      void setDidMoveSwipeSnapshotCallback(void(^)(CGRect));
&gt; 
&gt; Seems strange that we use a block here instead of a std::function.
&gt;
&gt; &gt; Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:740
&gt; &gt; +    if (m_didMoveSwipeSnapshotCallback)
&gt; &gt; +        Block_release(m_didMoveSwipeSnapshotCallback);
&gt; &gt; +    m_didMoveSwipeSnapshotCallback = Block_copy(callback);
&gt; 
&gt; Is there a way to do this with a smart pointer instead?

Agreed, the didMoveSwipeSnapshot callback needs a revisit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259725</attachid>
            <date>2015-08-22 14:49:05 -0700</date>
            <delta_ts>2015-08-22 19:34:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148361-20150822144859.patch</filename>
            <type>text/plain</type>
            <size>15523</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDU2ZTMwMzkwNTBkYTgw
NzAwNDkzZTcyMDQwYWJlOGMxMzRiNjg0YS4uN2NhOWZmMWQxMmRlYjZmY2M0NjIxZjc2ZmE2YjRh
M2IzOGJjMjUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE1LTA4LTIyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEZhY3RvciBvdXQg
YW5kIGFkZCBsb2dnaW5nIHRvIHN3aXBlLXN0YXJ0IGh5c3RlcmVzaXMgY29kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MzYxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvVmlld0dl
c3R1cmVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmll
d0dlc3R1cmVDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnNob3VsZElnbm9yZVBpbm5lZFN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpzZXRTaG91bGRJZ25vcmVQaW5uZWRT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3
aXBlVHJhY2tlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6c2hvdWxkSWdub3JlUGlubmVk
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdT
d2lwZVRyYWNrZXI6OnNldFNob3VsZElnbm9yZVBpbm5lZFN0YXRlKToKKyAgICAgICAgTW92ZSBw
ZW5kaW5nLXN3aXBlIG1lbWJlcnMgaW50byBQZW5kaW5nU3dpcGVUcmFja2VyLgorCisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OnNjcm9sbEV2ZW50Q2FuSW5mbHVlbmNlU3dpcGUpOgorICAgICAgICAoV2ViS2l0Ojpk
ZWx0YVNob3VsZENhbmNlbFN3aXBlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250
cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpzY3JvbGxFdmVudENhbkJlY29tZVN3aXBlKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVTY3JvbGxXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5n
U3dpcGVUcmFja2VyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6UGVuZGluZ1N3aXBlVHJhY2tlcjo6ZXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJD
b3JlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpQZW5kaW5nU3dp
cGVUcmFja2VyOjp0cnlUb1N0YXJ0U3dpcGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNrZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktp
dDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjp0cmFja1N3aXBlR2VzdHVyZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxs
YmFjayk6CisgICAgICAgIE1vdmUgcGVuZGluZy1zd2lwZSBtZXRob2RzIGludG8gUGVuZGluZ1N3
aXBlVHJhY2tlci4KKyAgICAgICAgQ2xlYW4gdXAgdGhlIGxvZ2ljIGEgYml0LgorICAgICAgICBB
ZGQgc29tZSBsb2dnaW5nLgorCiAyMDE1LTA4LTIyICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRh
bnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhdHRlbXB0IHRvIGZpeCBH
VEsgYnVpbGQgYWZ0ZXIgcjE4ODcxOApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Vmlld0dlc3R1cmVDb250cm9sbGVyLmNwcAppbmRleCBhOTZmYjNhYTczMWYyZTIyOTE0NjZiN2E1
NTZhYzQxOGNhMTBjZjRiLi4yZWEyZGQ3MTlhODM0OTFjMGFkMDA5MmIxZjkwNmM4MjgwODc0OWU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9s
bGVyLmNwcApAQCAtNTIsMTAgKzUyLDEyIEBAIHN0YXRpYyBIYXNoTWFwPHVpbnQ2NF90LCBWaWV3
R2VzdHVyZUNvbnRyb2xsZXIqPiYgdmlld0dlc3R1cmVDb250cm9sbGVyc0ZvckFsbFBhCiAgICAg
cmV0dXJuIHZpZXdHZXN0dXJlQ29udHJvbGxlcnMuZ2V0KCk7CiB9CiAKLQogVmlld0dlc3R1cmVD
b250cm9sbGVyOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJv
eHkpCiAgICAgOiBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCiAgICAgLCBtX3N3aXBlQWN0
aXZlTG9hZE1vbml0b3JpbmdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmNoZWNrRm9yQWN0aXZlTG9hZHMpCisjaWYgUExBVEZPUk0oTUFDKQorICAg
ICwgbV9wZW5kaW5nU3dpcGVUcmFja2VyKHdlYlBhZ2VQcm94eSwgc3RkOjpiaW5kKCZWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OnRyYWNrU3dpcGVHZXN0dXJlLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVy
czo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMikpCisjZW5kaWYKIHsKICAgICBtX3dlYlBhZ2VQ
cm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCks
ICp0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3
R2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dl
c3R1cmVDb250cm9sbGVyLmgKaW5kZXggY2RmMWYxYmIzMzY5MzQxMWVkY2E0ZGRjNzZkM2M1MjBk
YmQwZGI0NS4uMTJkOTRlNTI0NTg4Y2VmOTdlZDE4MmJjNDJkYTEyNDY1YTdiZjg5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ci5oCkBAIC04OSwxMiArODksNiBAQCBwdWJsaWM6CiAgICAgICAgIEZvcndhcmQKICAgICB9Owog
Ci0gICAgZW51bSBjbGFzcyBQZW5kaW5nU3dpcGVSZWFzb24gewotICAgICAgICBOb25lLAotICAg
ICAgICBXZWJDb3JlTWF5U2Nyb2xsLAotICAgICAgICBJbnN1ZmZpY2llbnRNYWduaXR1ZGUKLSAg
ICB9OwotICAgIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBkb3VibGUgbWFnbmlmaWNhdGlvbigp
IGNvbnN0OwogCkBAIC0xMDQsMTUgKzk4LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVNt
YXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pOwogCiAg
ICAgYm9vbCBoYW5kbGVTY3JvbGxXaGVlbEV2ZW50KE5TRXZlbnQgKik7Ci0gICAgdm9pZCB3aGVl
bEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShOU0V2ZW50ICopOworICAgIHZvaWQgd2hlZWxF
dmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoTlNFdmVudCAqZXZlbnQpIHsgbV9wZW5kaW5nU3dp
cGVUcmFja2VyLmV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShldmVudCk7IH0KIAogICAgIHZv
aWQgc2V0Q3VzdG9tU3dpcGVWaWV3cyhWZWN0b3I8UmV0YWluUHRyPE5TVmlldz4+IHZpZXdzKSB7
IG1fY3VzdG9tU3dpcGVWaWV3cyA9IFdURjo6bW92ZSh2aWV3cyk7IH0KICAgICB2b2lkIHNldEN1
c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQoZmxvYXQgdG9wQ29udGVudEluc2V0KSB7IG1f
Y3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldCA9IHRvcENvbnRlbnRJbnNldDsgfQogICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWxhdGl2ZUJvdW5kc0ZvckN1c3RvbVN3aXBlVmll
d3MoKSBjb25zdDsKICAgICB2b2lkIHNldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2sodm9p
ZCheKShDR1JlY3QpKTsKIAotICAgIGJvb2wgc2hvdWxkSWdub3JlUGlubmVkU3RhdGUoKSB7IHJl
dHVybiBtX3Nob3VsZElnbm9yZVBpbm5lZFN0YXRlOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRJZ25v
cmVQaW5uZWRTdGF0ZShib29sIGlnbm9yZSkgeyBtX3Nob3VsZElnbm9yZVBpbm5lZFN0YXRlID0g
aWdub3JlOyB9CisgICAgYm9vbCBzaG91bGRJZ25vcmVQaW5uZWRTdGF0ZSgpIHsgcmV0dXJuIG1f
cGVuZGluZ1N3aXBlVHJhY2tlci5zaG91bGRJZ25vcmVQaW5uZWRTdGF0ZSgpOyB9CisgICAgdm9p
ZCBzZXRTaG91bGRJZ25vcmVQaW5uZWRTdGF0ZShib29sIGlnbm9yZSkgeyBtX3BlbmRpbmdTd2lw
ZVRyYWNrZXIuc2V0U2hvdWxkSWdub3JlUGlubmVkU3RhdGUoaWdub3JlKTsgfQogI2Vsc2UKICAg
ICB2b2lkIGluc3RhbGxTd2lwZUhhbmRsZXIoVUlWaWV3ICpnZXN0dXJlUmVjb2duaXplclZpZXcs
IFVJVmlldyAqc3dpcGluZ1ZpZXcpOwogICAgIHZvaWQgc2V0QWx0ZXJuYXRlQmFja0ZvcndhcmRM
aXN0U291cmNlVmlldyhXS1dlYlZpZXcgKik7CkBAIC0xOTUsOCArMTg5LDYgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGhhbmRsZVN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJn
ZXRJdGVtLCBkb3VibGUgcHJvZ3Jlc3MsIFN3aXBlRGlyZWN0aW9uKTsKICAgICB2b2lkIHdpbGxF
bmRTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgdGFyZ2V0SXRlbSwgYm9vbCBj
YW5jZWxsZWQpOwogICAgIHZvaWQgZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0qIHRhcmdldEl0ZW0sIGJvb2wgY2FuY2VsbGVkKTsKLSAgICBib29sIGRlbHRhSXNTdWZmaWNp
ZW50VG9CZWdpblN3aXBlKE5TRXZlbnQgKik7Ci0gICAgYm9vbCBzY3JvbGxFdmVudENhbkJlY29t
ZVN3aXBlKE5TRXZlbnQgKiwgU3dpcGVEaXJlY3Rpb24mKTsKICAgICBib29sIHNob3VsZFVzZVNu
YXBzaG90Rm9yU2l6ZShWaWV3U25hcHNob3QmLCBXZWJDb3JlOjpGbG9hdFNpemUgc3dpcGVMYXll
clNpemUsIGZsb2F0IHRvcENvbnRlbnRJbnNldCk7CiAKICAgICBDQUxheWVyICpkZXRlcm1pbmVT
bmFwc2hvdExheWVyUGFyZW50KCkgY29uc3Q7CkBAIC0yMDUsNiArMTk3LDQyIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkaWRNb3ZlU3dpcGVTbmFwc2hvdExheWVyKCk7CiAKICAgICB2b2lkIGZvcmNl
UmVwYWludElmTmVlZGVkKCk7CisKKyAgICBjbGFzcyBQZW5kaW5nU3dpcGVUcmFja2VyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBlbmRpbmdTd2lwZVRyYWNrZXIoV2ViUGFnZVByb3h5JiB3ZWJQ
YWdlUHJveHksIHN0ZDo6ZnVuY3Rpb248dm9pZChOU0V2ZW50ICosIFN3aXBlRGlyZWN0aW9uKT4g
dHJhY2tTd2lwZUNhbGxiYWNrKQorICAgICAgICAgICAgOiBtX3RyYWNrU3dpcGVDYWxsYmFjayhX
VEY6Om1vdmUodHJhY2tTd2lwZUNhbGxiYWNrKSkKKyAgICAgICAgICAgICwgbV93ZWJQYWdlUHJv
eHkod2ViUGFnZVByb3h5KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGhh
bmRsZUV2ZW50KE5TRXZlbnQgKik7CisgICAgICAgIHZvaWQgZXZlbnRXYXNOb3RIYW5kbGVkQnlX
ZWJDb3JlKE5TRXZlbnQgKik7CisKKyAgICAgICAgdm9pZCByZXNldChjb25zdCBjaGFyKiByZXNl
dFJlYXNvbkZvckxvZ2dpbmcpOworCisgICAgICAgIGJvb2wgc2hvdWxkSWdub3JlUGlubmVkU3Rh
dGUoKSB7IHJldHVybiBtX3Nob3VsZElnbm9yZVBpbm5lZFN0YXRlOyB9CisgICAgICAgIHZvaWQg
c2V0U2hvdWxkSWdub3JlUGlubmVkU3RhdGUoYm9vbCBpZ25vcmUpIHsgbV9zaG91bGRJZ25vcmVQ
aW5uZWRTdGF0ZSA9IGlnbm9yZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCB0cnlU
b1N0YXJ0U3dpcGUoTlNFdmVudCAqKTsKKyAgICAgICAgYm9vbCBzY3JvbGxFdmVudENhbkJlY29t
ZVN3aXBlKE5TRXZlbnQgKiwgU3dpcGVEaXJlY3Rpb24mKTsKKworICAgICAgICBlbnVtIGNsYXNz
IFN0YXRlIHsKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBXYWl0aW5nRm9yV2ViQ29y
ZSwKKyAgICAgICAgICAgIEluc3VmZmljaWVudE1hZ25pdHVkZQorICAgICAgICB9OworCisgICAg
ICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6Tm9uZSB9OworICAgICAgICBTd2lwZURpcmVjdGlv
biBtX2RpcmVjdGlvbjsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY3VtdWxhdGl2ZURl
bHRhOworCisgICAgICAgIGJvb2wgbV9zaG91bGRJZ25vcmVQaW5uZWRTdGF0ZSB7IGZhbHNlIH07
CisKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKE5TRXZlbnQgKiwgU3dpcGVEaXJlY3Rpb24p
PiBtX3RyYWNrU3dpcGVDYWxsYmFjazsKKyAgICAgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBhZ2VQ
cm94eTsKKyAgICB9OwogI2VuZGlmCiAKICAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5
OwpAQCAtMjQwLDE2ICsyNjgsMTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2N1c3RvbVN3aXBl
Vmlld3NUb3BDb250ZW50SW5zZXQgeyAwIH07CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fY3Vy
cmVudFN3aXBlQ3VzdG9tVmlld0JvdW5kczsKIAotICAgIC8vIElmIHdlIG5lZWQgdG8gd2FpdCBm
b3IgY29udGVudCB0byBkZWNpZGUgaWYgaXQgaXMgZ29pbmcgdG8gY29uc3VtZQotICAgIC8vIHRo
ZSBzY3JvbGwgZXZlbnQgdGhhdCB3b3VsZCBoYXZlIHN0YXJ0ZWQgYSBzd2lwZSwgd2UnbGwgZmls
bCB0aGVzZSBpbi4KLSAgICBQZW5kaW5nU3dpcGVSZWFzb24gbV9wZW5kaW5nU3dpcGVSZWFzb24g
eyBQZW5kaW5nU3dpcGVSZWFzb246Ok5vbmUgfTsKLSAgICBTd2lwZURpcmVjdGlvbiBtX3BlbmRp
bmdTd2lwZURpcmVjdGlvbjsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jdW11bGF0aXZlRGVs
dGFGb3JQZW5kaW5nU3dpcGU7CisgICAgUGVuZGluZ1N3aXBlVHJhY2tlciBtX3BlbmRpbmdTd2lw
ZVRyYWNrZXI7CiAKICAgICB2b2lkIChebV9kaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKShD
R1JlY3QpIHsgbnVsbHB0ciB9OwogCi0gICAgYm9vbCBtX3Nob3VsZElnbm9yZVBpbm5lZFN0YXRl
IHsgZmFsc2UgfTsKLQogICAgIGJvb2wgbV9oYXNPdXRzdGFuZGluZ1JlcGFpbnRSZXF1ZXN0IHsg
ZmFsc2UgfTsKICNlbHNlICAgIAogICAgIFVJVmlldyAqbV9saXZlU3dpcGVWaWV3IHsgbnVsbHB0
ciB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0
dXJlQ29udHJvbGxlck1hYy5tbQppbmRleCAwMzM4NmFhODRhYTFiMTFmZTM0NjY4MjBmMjZlMDIw
OWZjMTk3ZjRiLi4zNzFiMGFmOWE3MjUxZmM2NWE2YWRhN2MxZmNjMzExNmY1M2U3ODI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlck1hYy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKIAogI2lt
cG9ydCAiRnJhbWVMb2FkU3RhdGUuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5h
dGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3Nh
Z2VzLmgiCiAjaW1wb3J0ICJWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yTWVzc2FnZXMuaCIK
QEAgLTI2NCwxOCArMjY1LDMxIEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRDb2xs
ZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKEZsb2F0CiAgICAgbV9sYXN0
TWFnbmlmaWNhdGlvbkdlc3R1cmVXYXNTbWFydE1hZ25pZmljYXRpb24gPSB0cnVlOwogfQogCi1i
b29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2Nyb2xsRXZlbnRDYW5CZWNvbWVTd2lwZShOU0V2
ZW50ICpldmVudCwgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbiYgcG90ZW50
aWFsU3dpcGVEaXJlY3Rpb24pCitzdGF0aWMgYm9vbCBzY3JvbGxFdmVudENhbkluZmx1ZW5jZVN3
aXBlKE5TRXZlbnQgKmV2ZW50KQogewotICAgIGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhh
c2VCZWdhbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFldmVudC5oYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIVtO
U0V2ZW50IGlzU3dpcGVUcmFja2luZ0Zyb21TY3JvbGxFdmVudHNFbmFibGVkXSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGZhYnMoZXZlbnQuc2Nyb2xsaW5nRGVsdGFYKSA8PSBm
YWJzKGV2ZW50LnNjcm9sbGluZ0RlbHRhWSkpCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBib29sIGRlbHRhU2hvdWxkQ2FuY2VsU3dpcGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBy
ZXR1cm4gZmFicyh5KSA+PSBmYWJzKHgpICogbWluaW11bVNjcm9sbEV2ZW50UmF0aW9Gb3JTd2lw
ZTsKK30KKworYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRyYWNrZXI6
OnNjcm9sbEV2ZW50Q2FuQmVjb21lU3dpcGUoTlNFdmVudCAqZXZlbnQsIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6U3dpcGVEaXJlY3Rpb24mIHBvdGVudGlhbFN3aXBlRGlyZWN0aW9uKQoreworICAg
IGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VCZWdhbikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFzY3JvbGxFdmVudENhbkluZmx1ZW5jZVN3aXBlKGV2ZW50KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGRlbHRhU2hvdWxkQ2FuY2VsU3dpcGUoZXZl
bnQuc2Nyb2xsaW5nRGVsdGFYLCBldmVudC5zY3JvbGxpbmdEZWx0YVkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBib29sIGlzUGlubmVkVG9MZWZ0ID0gbV9zaG91bGRJZ25vcmVQaW5u
ZWRTdGF0ZSB8fCBtX3dlYlBhZ2VQcm94eS5pc1Bpbm5lZFRvTGVmdFNpZGUoKTsKQEAgLTI5MSw5
NCArMzA1LDkwIEBAIGJvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpzY3JvbGxFdmVudENhbkJl
Y29tZVN3aXBlKE5TRXZlbnQgKmV2ZW50LCBWaWV3R2VzdHVyCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkZWx0YUlzU3VmZmljaWVudFRvQmVnaW5T
d2lwZShOU0V2ZW50ICpldmVudCkKK2Jvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVT
Y3JvbGxXaGVlbEV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewotICAgIGlmIChtX3BlbmRpbmdTd2lw
ZVJlYXNvbiAhPSBQZW5kaW5nU3dpcGVSZWFzb246Okluc3VmZmljaWVudE1hZ25pdHVkZSkKKyAg
ICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wZW5kaW5nU3dpcGVUcmFja2VyLmhhbmRs
ZUV2ZW50KGV2ZW50KTsKK30KIAotICAgIG1fY3VtdWxhdGl2ZURlbHRhRm9yUGVuZGluZ1N3aXBl
ICs9IEZsb2F0U2l6ZShldmVudC5zY3JvbGxpbmdEZWx0YVgsIGV2ZW50LnNjcm9sbGluZ0RlbHRh
WSk7Ci0KLSAgICAvLyBJZiB0aGUgY3VtdWxhdGl2ZSBkZWx0YSBpcyBldmVyICJ0b28gdmVydGlj
YWwiLCB3ZSB3aWxsIHN0b3AgdHJhY2tpbmcgdGhpcwotICAgIC8vIGFzIGEgcG90ZW50aWFsIHN3
aXBlIHVudGlsIHdlIGdldCBhbm90aGVyICJiZWdpbiIgZXZlbnQuCi0gICAgaWYgKGZhYnMobV9j
dW11bGF0aXZlRGVsdGFGb3JQZW5kaW5nU3dpcGUuaGVpZ2h0KCkpID49IGZhYnMobV9jdW11bGF0
aXZlRGVsdGFGb3JQZW5kaW5nU3dpcGUud2lkdGgoKSkgKiBtaW5pbXVtU2Nyb2xsRXZlbnRSYXRp
b0ZvclN3aXBlKSB7Ci0gICAgICAgIG1fcGVuZGluZ1N3aXBlUmVhc29uID0gUGVuZGluZ1N3aXBl
UmVhc29uOjpOb25lOworYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBlbmRpbmdTd2lwZVRy
YWNrZXI6OmhhbmRsZUV2ZW50KE5TRXZlbnQgKmV2ZW50KQoreworICAgIGlmIChldmVudC5waGFz
ZSA9PSBOU0V2ZW50UGhhc2VFbmRlZCkgeworICAgICAgICByZXNldCgiZ2VzdHVyZSBlbmRlZCIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGZhYnMobV9jdW11bGF0
aXZlRGVsdGFGb3JQZW5kaW5nU3dpcGUud2lkdGgoKSkgPCBtaW5pbXVtSG9yaXpvbnRhbFN3aXBl
RGlzdGFuY2UpCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok5vbmUpIHsKKyAgICAgICAgaWYg
KCFzY3JvbGxFdmVudENhbkJlY29tZVN3aXBlKGV2ZW50LCBtX2RpcmVjdGlvbikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFtX3Nob3VsZElnbm9yZVBpbm5lZFN0
YXRlICYmIG1fd2ViUGFnZVByb3h5LndpbGxIYW5kbGVIb3Jpem9udGFsU2Nyb2xsRXZlbnRzKCkp
IHsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGluZ0ZvcldlYkNvcmU7CisgICAg
ICAgICAgICBMT0coVmlld0dlc3R1cmVzLCAiU3dpcGUgU3RhcnQgSHlzdGVyZXNpcyAtIHdhaXRp
bmcgZm9yIFdlYkNvcmUgdG8gaGFuZGxlIGV2ZW50Iik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6V2FpdGluZ0ZvcldlYkNvcmUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cnlUb1N0YXJ0U3dpcGUo
ZXZlbnQpOwogfQogCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0RGlkTW92ZVN3aXBl
U25hcHNob3RDYWxsYmFjayh2b2lkKF5jYWxsYmFjaykoQ0dSZWN0KSkKK3ZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjpldmVudFdhc05vdEhhbmRsZWRCeVdl
YkNvcmUoTlNFdmVudCAqZXZlbnQpCiB7Ci0gICAgaWYgKG1fZGlkTW92ZVN3aXBlU25hcHNob3RD
YWxsYmFjaykKLSAgICAgICAgQmxvY2tfcmVsZWFzZShtX2RpZE1vdmVTd2lwZVNuYXBzaG90Q2Fs
bGJhY2spOwotICAgIG1fZGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayA9IEJsb2NrX2NvcHko
Y2FsbGJhY2spOworICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpXYWl0aW5nRm9yV2ViQ29yZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKFZpZXdHZXN0dXJlcywgIlN3aXBlIFN0YXJ0IEh5
c3RlcmVzaXMgLSBXZWJDb3JlIGRpZG4ndCBoYW5kbGUgZXZlbnQiKTsKKyAgICBtX3N0YXRlID0g
U3RhdGU6Ok5vbmU7CisgICAgbV9jdW11bGF0aXZlRGVsdGEgPSBGbG9hdFNpemUoKTsKKyAgICB0
cnlUb1N0YXJ0U3dpcGUoZXZlbnQpOwogfQogCi1ib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
aGFuZGxlU2Nyb2xsV2hlZWxFdmVudChOU0V2ZW50ICpldmVudCkKK2Jvb2wgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpQZW5kaW5nU3dpcGVUcmFja2VyOjp0cnlUb1N0YXJ0U3dpcGUoTlNFdmVudCAq
ZXZlbnQpCiB7Ci0gICAgaWYgKGV2ZW50LnBoYXNlID09IE5TRXZlbnRQaGFzZUVuZGVkKSB7Ci0g
ICAgICAgIG1fY3VtdWxhdGl2ZURlbHRhRm9yUGVuZGluZ1N3aXBlID0gRmxvYXRTaXplKCk7Ci0g
ICAgICAgIG1fcGVuZGluZ1N3aXBlUmVhc29uID0gUGVuZGluZ1N3aXBlUmVhc29uOjpOb25lOwot
ICAgIH0KKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6V2FpdGluZ0ZvcldlYkNvcmUpOwog
Ci0gICAgaWYgKG1fcGVuZGluZ1N3aXBlUmVhc29uID09IFBlbmRpbmdTd2lwZVJlYXNvbjo6SW5z
dWZmaWNpZW50TWFnbml0dWRlKSB7Ci0gICAgICAgIGlmIChkZWx0YUlzU3VmZmljaWVudFRvQmVn
aW5Td2lwZShldmVudCkpIHsKLSAgICAgICAgICAgIHRyYWNrU3dpcGVHZXN0dXJlKGV2ZW50LCBt
X3BlbmRpbmdTd2lwZURpcmVjdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQorICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpOb25lKSB7CisgICAgICAgIFN3aXBlRGly
ZWN0aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgaWYgKCFzY3JvbGxFdmVudENhbkJlY29tZVN3aXBl
KGV2ZW50LCBkaXJlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6Tm9uZSkKKyAg
ICBpZiAoIXNjcm9sbEV2ZW50Q2FuSW5mbHVlbmNlU3dpcGUoZXZlbnQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgaWYgKCFzY3Jv
bGxFdmVudENhbkJlY29tZVN3aXBlKGV2ZW50LCBkaXJlY3Rpb24pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgbV9jdW11bGF0aXZlRGVsdGEgKz0gRmxvYXRTaXplKGV2ZW50LnNjcm9sbGlu
Z0RlbHRhWCwgZXZlbnQuc2Nyb2xsaW5nRGVsdGFZKTsKKyAgICBMT0coVmlld0dlc3R1cmVzLCAi
U3dpcGUgU3RhcnQgSHlzdGVyZXNpcyAtIGNvbnN1bWVkIGV2ZW50LCBjdW11bGF0aXZlIGRlbHRh
ICglMC4yZiwgJTAuMmYpIiwgbV9jdW11bGF0aXZlRGVsdGEud2lkdGgoKSwgbV9jdW11bGF0aXZl
RGVsdGEuaGVpZ2h0KCkpOwogCi0gICAgaWYgKCFtX3Nob3VsZElnbm9yZVBpbm5lZFN0YXRlICYm
IG1fd2ViUGFnZVByb3h5LndpbGxIYW5kbGVIb3Jpem9udGFsU2Nyb2xsRXZlbnRzKCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nU3dpcGVSZWFzb24gPSBQZW5kaW5nU3dpcGVSZWFzb246OldlYkNvcmVN
YXlTY3JvbGw7Ci0gICAgICAgIG1fcGVuZGluZ1N3aXBlRGlyZWN0aW9uID0gZGlyZWN0aW9uOwor
ICAgIGlmIChkZWx0YVNob3VsZENhbmNlbFN3aXBlKG1fY3VtdWxhdGl2ZURlbHRhLndpZHRoKCks
IG1fY3VtdWxhdGl2ZURlbHRhLmhlaWdodCgpKSkgeworICAgICAgICByZXNldCgiY3VtdWxhdGl2
ZSBkZWx0YSBiZWNhbWUgdG9vIHZlcnRpY2FsIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpZiAoIWRlbHRhSXNTdWZmaWNpZW50VG9CZWdpblN3aXBlKGV2ZW50KSkgewot
ICAgICAgICBtX3BlbmRpbmdTd2lwZVJlYXNvbiA9IFBlbmRpbmdTd2lwZVJlYXNvbjo6SW5zdWZm
aWNpZW50TWFnbml0dWRlOwotICAgICAgICBtX3BlbmRpbmdTd2lwZURpcmVjdGlvbiA9IGRpcmVj
dGlvbjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdHJhY2tTd2lwZUdlc3R1
cmUoZXZlbnQsIGRpcmVjdGlvbik7CisgICAgaWYgKGZhYnMobV9jdW11bGF0aXZlRGVsdGEud2lk
dGgoKSkgPj0gbWluaW11bUhvcml6b250YWxTd2lwZURpc3RhbmNlKQorICAgICAgICBtX3RyYWNr
U3dpcGVDYWxsYmFjayhldmVudCwgbV9kaXJlY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpJbnN1ZmZpY2llbnRNYWduaXR1ZGU7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVk
QnlXZWJDb3JlKE5TRXZlbnQgKmV2ZW50KQordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlBl
bmRpbmdTd2lwZVRyYWNrZXI6OnJlc2V0KGNvbnN0IGNoYXIqIHJlc2V0UmVhc29uRm9yTG9nZ2lu
ZykKIHsKLSAgICBpZiAobV9wZW5kaW5nU3dpcGVSZWFzb24gIT0gUGVuZGluZ1N3aXBlUmVhc29u
OjpXZWJDb3JlTWF5U2Nyb2xsKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc3RhdGUgIT0g
U3RhdGU6Ok5vbmUpCisgICAgICAgIExPRyhWaWV3R2VzdHVyZXMsICJTd2lwZSBTdGFydCBIeXN0
ZXJlc2lzIC0gcmVzZXQ7ICVzIiwgcmVzZXRSZWFzb25Gb3JMb2dnaW5nKTsKIAotICAgIG1fcGVu
ZGluZ1N3aXBlUmVhc29uID0gUGVuZGluZ1N3aXBlUmVhc29uOjpOb25lOwotCi0gICAgU3dpcGVE
aXJlY3Rpb24gZGlyZWN0aW9uOwotICAgIGlmICghc2Nyb2xsRXZlbnRDYW5CZWNvbWVTd2lwZShl
dmVudCwgZGlyZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFkZWx0YUlzU3Vm
ZmljaWVudFRvQmVnaW5Td2lwZShldmVudCkpIHsKLSAgICAgICAgbV9wZW5kaW5nU3dpcGVSZWFz
b24gPSBQZW5kaW5nU3dpcGVSZWFzb246Okluc3VmZmljaWVudE1hZ25pdHVkZTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHRyYWNrU3dpcGVHZXN0dXJlKGV2ZW50LCBtX3BlbmRpbmdT
d2lwZURpcmVjdGlvbik7CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpOb25lOworICAgIG1fY3VtdWxh
dGl2ZURlbHRhID0gRmxvYXRTaXplKCk7CiB9CiAKIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVy
Ojp0cmFja1N3aXBlR2VzdHVyZShOU0V2ZW50ICpldmVudCwgU3dpcGVEaXJlY3Rpb24gZGlyZWN0
aW9uKQogewogICAgIEFTU0VSVChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlw
ZTo6Tm9uZSk7Ci0gICAgbV9wZW5kaW5nU3dpcGVSZWFzb24gPSBQZW5kaW5nU3dpcGVSZWFzb246
Ok5vbmU7CisKKyAgICBtX3BlbmRpbmdTd2lwZVRyYWNrZXIucmVzZXQoInN0YXJ0aW5nIHRvIHRy
YWNrIHN3aXBlIik7CiAKICAgICBtX3dlYlBhZ2VQcm94eS5yZWNvcmROYXZpZ2F0aW9uU25hcHNo
b3QoKTsKIApAQCAtNzIzLDYgKzczMywxMyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
aGFuZGxlU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZQogICAg
IH0KIH0KIAordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnNldERpZE1vdmVTd2lwZVNuYXBz
aG90Q2FsbGJhY2sodm9pZCheY2FsbGJhY2spKENHUmVjdCkpCit7CisgICAgaWYgKG1fZGlkTW92
ZVN3aXBlU25hcHNob3RDYWxsYmFjaykKKyAgICAgICAgQmxvY2tfcmVsZWFzZShtX2RpZE1vdmVT
d2lwZVNuYXBzaG90Q2FsbGJhY2spOworICAgIG1fZGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFj
ayA9IEJsb2NrX2NvcHkoY2FsbGJhY2spOworfQorCiB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6ZGlkTW92ZVN3aXBlU25hcHNob3RMYXllcigpCiB7CiAgICAgaWYgKCFtX2RpZE1vdmVTd2lw
ZVNuYXBzaG90Q2FsbGJhY2spCg==
</data>
<flag name="review"
          id="284918"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>