<?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>61818</bug_id>
          
          <creation_ts>2011-05-31 16:19:15 -0700</creation_ts>
          <short_desc>Switch RenderLayer::convertToLayerCoords to use IntPoint</short_desc>
          <delta_ts>2011-06-01 23:41:38 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>logingx</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>412967</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-31 16:19:15 -0700</bug_when>
    <thetext>int x, int y to IntPoint conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412971</commentid>
    <comment_count>1</comment_count>
      <attachid>95505</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-05-31 16:23:11 -0700</bug_when>
    <thetext>Created attachment 95505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413126</commentid>
    <comment_count>2</comment_count>
      <attachid>95505</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-31 21:32:21 -0700</bug_when>
    <thetext>Comment on attachment 95505
Patch

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

This is a great change.  It really cleans up a lot of little annoying expressions.

Please consider the various comments before landing.

&gt; Source/WebCore/rendering/RenderLayer.cpp:920
&gt; +        transform.translate(delta.x(), delta.y());

It&apos;s too bad that translate doesn&apos;t understand IntPoint or IntSize...

&gt; Source/WebCore/rendering/RenderLayer.cpp:1118
&gt; +        location += IntSize((int)absPos.x(), (int)absPos.y());

I wonder if creating some kind of toSize adaptor would be clearer here?

&gt; Source/WebCore/rendering/RenderLayer.cpp:2565
&gt; +        transform.translateRight(delta.x(), delta.y());

Again, maybe transform.translateRight should have an IntPoint overload...

&gt; Source/WebCore/rendering/RenderLayer.cpp:2915
&gt; +        transformState-&gt;translate(offset.x(), offset.y(), HitTestingTransformState::AccumulateTransform);

Ditto translate functions and IntPoint.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:381
&gt; +        IntSize rendererOffset(parentClipRect.location().x() - delta.x(), parentClipRect.location().y() - delta.y());

Isn&apos;t the parentClipRect.location() returning an IntPoint as well?  Maybe this could be:

IntSize renderOffset = toSize(parentClipRect.location() - delta);

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413169</commentid>
    <comment_count>3</comment_count>
      <attachid>95505</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-31 23:32:57 -0700</bug_when>
    <thetext>Comment on attachment 95505
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:1118
&gt;&gt; +        location += IntSize((int)absPos.x(), (int)absPos.y());
&gt; 
&gt; I wonder if creating some kind of toSize adaptor would be clearer here?

c++ style casts please.  There is also a round down function iirc.

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:2565
&gt;&gt; +        transform.translateRight(delta.x(), delta.y());
&gt; 
&gt; Again, maybe transform.translateRight should have an IntPoint overload...

Nah.  translateRight takes a dx, dy, that&apos;s just how matrix math works. :)  It&apos;s possible we could give it a FloatSize overload, but that still might be iffy.

&gt;&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:381
&gt;&gt; +        IntSize rendererOffset(parentClipRect.location().x() - delta.x(), parentClipRect.location().y() - delta.y());
&gt; 
&gt; Isn&apos;t the parentClipRect.location() returning an IntPoint as well?  Maybe this could be:
&gt; 
&gt; IntSize renderOffset = toSize(parentClipRect.location() - delta);
&gt; 
&gt; ?

You don&apos;t even need toSize for that. :)  point - point = size.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:429
&gt; +        IntRect layerBounds = IntRect(delta, IntSize(borderBox.width(), borderBox.height()));

This should just be IntRect(delta, borderBox.size()), no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413566</commentid>
    <comment_count>4</comment_count>
      <attachid>95640</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-01 12:19:56 -0700</bug_when>
    <thetext>Created attachment 95640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413570</commentid>
    <comment_count>5</comment_count>
      <attachid>95640</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-01 12:25:08 -0700</bug_when>
    <thetext>Comment on attachment 95640
Patch

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

LGTM.  I think you should consider doing convertToLayerCoords(rect) in this patch or the next, as allt hese callsites will suddenly become simpler. :)

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1089
&gt; +                curLayer-&gt;convertToLayerCoords(layer, delta);
&gt;                  IntRect childRect(rect);
&gt; -                childRect.move(-x, -y);
&gt; +                childRect.move(-delta.x(), -delta.y());

I suspect we just need a rect version of convertToLayerCoords eventually. :)  Actually, given all the places you did the same dance in this patch, it might make sense to just add convertToLayerCoords(layer, rect) which does exactly this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413576</commentid>
    <comment_count>6</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-01 12:31:56 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I suspect we just need a rect version of convertToLayerCoords eventually. :)  Actually, given all the places you did the same dance in this patch, it might make sense to just add convertToLayerCoords(layer, rect) which does exactly this. :)

That&apos;s a good point, I&apos;ll see about making that change as a part of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413595</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-01 12:51:51 -0700</bug_when>
    <thetext>You are welcome to just land this and iterate further.  Completely your call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413616</commentid>
    <comment_count>8</comment_count>
      <attachid>95647</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-01 13:30:25 -0700</bug_when>
    <thetext>Created attachment 95647
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413769</commentid>
    <comment_count>9</comment_count>
      <attachid>95688</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-01 17:01:08 -0700</bug_when>
    <thetext>Created attachment 95688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413771</commentid>
    <comment_count>10</comment_count>
      <attachid>95688</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-01 17:02:04 -0700</bug_when>
    <thetext>Comment on attachment 95688
Patch

Doh, wrong bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413945</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-01 23:39:59 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 95647:

http/tests/websocket/tests/sub-protocol.html bug 61910 (author: abarth@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413946</commentid>
    <comment_count>12</comment_count>
      <attachid>95647</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-01 23:41:31 -0700</bug_when>
    <thetext>Comment on attachment 95647
Patch for landing

Clearing flags on attachment: 95647

Committed r87880: &lt;http://trac.webkit.org/changeset/87880&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413947</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-01 23:41:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95505</attachid>
            <date>2011-05-31 16:23:11 -0700</date>
            <delta_ts>2011-06-01 12:19:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61818-20110531162310.patch</filename>
            <type>text/plain</type>
            <size>24324</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3NzU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDUtMzEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29y
ZHMgdG8gdXNlIEludFBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTgxOAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnRyYW5zcGFyZW5jeUNsaXBCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmNvbnZlcnRUb0xheWVyQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludENoaWxkTGF5
ZXJJbnRvQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlTG9j
YWxUcmFuc2Zvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVz
dENoaWxkTGF5ZXJDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxj
dWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZVJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpib3VuZGluZ0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRzUmVwYWludEluUmVj
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVSZW1vdmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVjdXJzaXZlUmVwYWlu
dExheWVyUmVjdCk6CisKIDIwMTEtMDUtMzEgIEIuSi4gV2V2ZXIgIDxza3lsaW5lZEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gODc3NDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzUsMjkgKzI3NSwyNCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhV
CiAgICAgICAgICAgICBpZiAoIW1fcGFyZW50IHx8IG1fcGFyZW50LT5yZW5kZXJlcigpID09IHJl
bmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgIGNhY2hlZE9mZnNl
dC0+bW92ZShtX3RvcExlZnQueCgpLCBtX3RvcExlZnQueSgpKTsgLy8gRmFzdCBjYXNlCiAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICAg
ICAgaW50IHkgPSAwOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3Qo
KSwgeCwgeSk7Ci0gICAgICAgICAgICAgICAgKmNhY2hlZE9mZnNldCA9IEludFBvaW50KHgsIHkp
OworICAgICAgICAgICAgICAgIEludFBvaW50IG9mZnNldDsKKyAgICAgICAgICAgICAgICBjb252
ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgKmNhY2hl
ZE9mZnNldCA9IG9mZnNldDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAg
IGludCB4ID0gMDsKLSAgICBpbnQgeSA9IDA7CisgICAgSW50UG9pbnQgb2Zmc2V0OwogICAgIGlm
IChjYWNoZWRPZmZzZXQpIHsKLSAgICAgICAgeCArPSBjYWNoZWRPZmZzZXQtPngoKTsKLSAgICAg
ICAgeSArPSBjYWNoZWRPZmZzZXQtPnkoKTsKKyAgICAgICAgb2Zmc2V0ID0gKmNhY2hlZE9mZnNl
dDsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGludCBub25DYWNoZWRYID0gMDsKLSAgICAgICAg
aW50IG5vbkNhY2hlZFkgPSAwOwotICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCks
IG5vbkNhY2hlZFgsIG5vbkNhY2hlZFkpOwotICAgICAgICBBU1NFUlQoeCA9PSBub25DYWNoZWRY
KTsKLSAgICAgICAgQVNTRVJUKHkgPT0gbm9uQ2FjaGVkWSk7CisgICAgICAgIEludFBvaW50IG5v
bkNhY2hlZE9mZnNldDsKKyAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBub25D
YWNoZWRPZmZzZXQpOworICAgICAgICBBU1NFUlQob2Zmc2V0ID09IG5vbkNhY2hlZE9mZnNldCk7
CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgp
LCB4LCB5KTsKLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoSW50U2l6ZSh4LCB5KSk7Cisg
ICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3QoKSwgb2Zmc2V0KTsKKyAgICBwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHModG9TaXplKG9mZnNldCkpOwogCiAgICAgdXBkYXRlVmlzaWJpbGl0
eVN0YXR1cygpOwogCkBAIC05MDEsMTIgKzg5NiwxMSBAQCBzdGF0aWMgdm9pZCBleHBhbmRDbGlw
UmVjdEZvckRlc2NlbmRhbnRzCiAgICAgLy8gRklYTUU6IEFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
IHdpbGwgZXZlbnR1YWxseSB3YW50IHRvIGRvIHNvbWV0aGluZyBzbWFydCBoZXJlIHRvIGF2b2lk
IGluY29ycG9yYXRpbmcgdGhpcwogICAgIC8vIHNpemUgaW50byB0aGUgcGFyZW50IGxheWVyLgog
ICAgIGlmIChsLT5yZW5kZXJlcigpLT5oYXNSZWZsZWN0aW9uKCkpIHsKLSAgICAgICAgaW50IGRl
bHRhWCA9IDA7Ci0gICAgICAgIGludCBkZWx0YVkgPSAwOwotICAgICAgICBsLT5jb252ZXJ0VG9M
YXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhWCwgZGVsdGFZKTsKLSAgICAgICAgY2xpcFJlY3Qu
bW92ZSgtZGVsdGFYLCAtZGVsdGFZKTsKKyAgICAgICAgSW50UG9pbnQgZGVsdGE7CisgICAgICAg
IGwtPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOworICAgICAgICBjbGlw
UmVjdC5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwogICAgICAgICBjbGlwUmVjdC51bml0
ZShsLT5yZW5kZXJCb3goKS0+cmVmbGVjdGVkUmVjdChjbGlwUmVjdCkpOwotICAgICAgICBjbGlw
UmVjdC5tb3ZlKGRlbHRhWCwgZGVsdGFZKTsKKyAgICAgICAgY2xpcFJlY3QubW92ZShkZWx0YSk7
CiAgICAgfQogfQogCkBAIC05MTksMTIgKzkxMywxMSBAQCBzdGF0aWMgSW50UmVjdCB0cmFuc3Bh
cmVuY3lDbGlwQm94KGNvbnN0CiAgICAgaWYgKHJvb3RMYXllciAhPSBsICYmIGwtPnBhaW50c1dp
dGhUcmFuc2Zvcm0ocGFpbnRCZWhhdmlvcikpIHsKICAgICAgICAgLy8gVGhlIGJlc3Qgd2UgY2Fu
IGRvIGhlcmUgaXMgdG8gdXNlIGVuY2xvc2VkIGJvdW5kaW5nIGJveGVzIHRvIGVzdGFibGlzaCBh
ICJmdXp6eSIgZW5vdWdoIGNsaXAgdG8gZW5jb21wYXNzCiAgICAgICAgIC8vIHRoZSB0cmFuc2Zv
cm1lZCBsYXllciBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaW50IHggPSAwOwot
ICAgICAgICBpbnQgeSA9IDA7Ci0gICAgICAgIGwtPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RM
YXllciwgeCwgeSk7CisgICAgICAgIEludFBvaW50IGRlbHRhOworICAgICAgICBsLT5jb252ZXJ0
VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoeCwgeSk7Cisg
ICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGVsdGEueCgpLCBkZWx0YS55KCkpOwogICAgICAg
ICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiAqbC0+dHJhbnNmb3JtKCk7CiAKICAgICAgICAgSW50
UmVjdCBjbGlwUmVjdCA9IGwtPmJvdW5kaW5nQm94KGwpOwpAQCAtMTExMiw3ICsxMTA1LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6aW5zZXJ0T25seVRoaXNMYXllcigpCiB9CiAKIHZvaWQgCi1SZW5k
ZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
TGF5ZXIsIGludCYgeFBvcywgaW50JiB5UG9zKSBjb25zdAorUmVuZGVyTGF5ZXI6OmNvbnZlcnRU
b0xheWVyQ29vcmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBJbnRQb2ludCYg
bG9jYXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKGFuY2VzdG9yTGF5ZXIgPT0gdGhpcykKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTEyMiw4ICsxMTE1LDcgQEAgUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xh
eWVyQ29vcmRzKGNvbnN0IAogICAgICAgICAvLyBJZiB0aGUgZml4ZWQgbGF5ZXIncyBjb250YWlu
ZXIgaXMgdGhlIHJvb3QsIGp1c3QgYWRkIGluIHRoZSBvZmZzZXQgb2YgdGhlIHZpZXcuIFdlIGNh
biBvYnRhaW4gdGhpcyBieSBjYWxsaW5nCiAgICAgICAgIC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9u
IHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCkt
PmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIHRydWUpOwotICAgICAgICB4UG9zICs9IGFi
c1Bvcy54KCk7Ci0gICAgICAgIHlQb3MgKz0gYWJzUG9zLnkoKTsKKyAgICAgICAgbG9jYXRpb24g
Kz0gSW50U2l6ZSgoaW50KWFic1Bvcy54KCksIChpbnQpYWJzUG9zLnkoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgCkBAIC0xMTQ3LDE2ICsxMTM5LDEzIEBAIFJlbmRlckxheWVyOjpjb252
ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCAKICAgICAgICAgQVNTRVJUKGZpeGVkUG9zaXRpb25Db250
YWluZXJMYXllcik7IC8vIFdlIHNob3VsZCBoYXZlIGhpdCB0aGUgUmVuZGVyVmlldydzIGxheWVy
IGF0IGxlYXN0LgogCiAgICAgICAgIGlmIChmaXhlZFBvc2l0aW9uQ29udGFpbmVyTGF5ZXIgIT0g
YW5jZXN0b3JMYXllcikgewotICAgICAgICAgICAgaW50IGZpeGVkQ29udGFpbmVyWCA9IDA7Ci0g
ICAgICAgICAgICBpbnQgZml4ZWRDb250YWluZXJZID0gMDsKLSAgICAgICAgICAgIGNvbnZlcnRU
b0xheWVyQ29vcmRzKGZpeGVkUG9zaXRpb25Db250YWluZXJMYXllciwgZml4ZWRDb250YWluZXJY
LCBmaXhlZENvbnRhaW5lclkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgYW5jZXN0
b3JYID0gMDsKLSAgICAgICAgICAgIGludCBhbmNlc3RvclkgPSAwOwotICAgICAgICAgICAgYW5j
ZXN0b3JMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMoZml4ZWRQb3NpdGlvbkNvbnRhaW5lckxh
eWVyLCBhbmNlc3RvclgsIGFuY2VzdG9yWSk7Ci0gICAgICAgIAotICAgICAgICAgICAgeFBvcyAr
PSAoZml4ZWRDb250YWluZXJYIC0gYW5jZXN0b3JYKTsKLSAgICAgICAgICAgIHlQb3MgKz0gKGZp
eGVkQ29udGFpbmVyWSAtIGFuY2VzdG9yWSk7CisgICAgICAgICAgICBJbnRQb2ludCBmaXhlZENv
bnRhaW5lckNvb3JkczsKKyAgICAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGZpeGVkUG9z
aXRpb25Db250YWluZXJMYXllciwgZml4ZWRDb250YWluZXJDb29yZHMpOworCisgICAgICAgICAg
ICBJbnRQb2ludCBhbmNlc3RvckNvb3JkczsKKyAgICAgICAgICAgIGFuY2VzdG9yTGF5ZXItPmNv
bnZlcnRUb0xheWVyQ29vcmRzKGZpeGVkUG9zaXRpb25Db250YWluZXJMYXllciwgYW5jZXN0b3JD
b29yZHMpOworCisgICAgICAgICAgICBsb2NhdGlvbiArPSAoZml4ZWRDb250YWluZXJDb29yZHMg
LSBhbmNlc3RvckNvb3Jkcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMTgzLDE2ICsxMTcyLDEzIEBAIFJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jk
cyhjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3RvciBh
bmQgc3VidHJhY3QuCiAgICAgICAgICAgICBSZW5kZXJMYXllciogcG9zaXRpb25lZEFuY2VzdG9y
ID0gcGFyZW50TGF5ZXItPmVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3RvcigpOwogCi0gICAgICAg
ICAgICBpbnQgdGhpc1ggPSAwOwotICAgICAgICAgICAgaW50IHRoaXNZID0gMDsKLSAgICAgICAg
ICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHBvc2l0aW9uZWRBbmNlc3RvciwgdGhpc1gsIHRoaXNZ
KTsKKyAgICAgICAgICAgIEludFBvaW50IHRoaXNDb29yZHM7CisgICAgICAgICAgICBjb252ZXJ0
VG9MYXllckNvb3Jkcyhwb3NpdGlvbmVkQW5jZXN0b3IsIHRoaXNDb29yZHMpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpbnQgYW5jZXN0b3JYID0gMDsKLSAgICAgICAgICAgIGludCBhbmNl
c3RvclkgPSAwOwotICAgICAgICAgICAgYW5jZXN0b3JMYXllci0+Y29udmVydFRvTGF5ZXJDb29y
ZHMocG9zaXRpb25lZEFuY2VzdG9yLCBhbmNlc3RvclgsIGFuY2VzdG9yWSk7Ci0gICAgICAgIAot
ICAgICAgICAgICAgeFBvcyArPSAodGhpc1ggLSBhbmNlc3RvclgpOwotICAgICAgICAgICAgeVBv
cyArPSAodGhpc1kgLSBhbmNlc3RvclkpOworICAgICAgICAgICAgSW50UG9pbnQgYW5jZXN0b3JD
b29yZHM7CisgICAgICAgICAgICBhbmNlc3RvckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhw
b3NpdGlvbmVkQW5jZXN0b3IsIGFuY2VzdG9yQ29vcmRzKTsKKworICAgICAgICAgICAgbG9jYXRp
b24gKz0gKHRoaXNDb29yZHMgLSBhbmNlc3RvckNvb3Jkcyk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTEyMDAsMTEgKzExODYsMTAgQEAgUmVuZGVyTGF5
ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAogICAgIAogICAgIGlmICghcGFyZW50TGF5
ZXIpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwYXJlbnRMYXllci0+Y29udmVydFRvTGF5
ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgeFBvcywgeVBvcyk7CiAKLSAgICB4UG9zICs9IG1fdG9w
TGVmdC54KCk7Ci0gICAgeVBvcyArPSBtX3RvcExlZnQueSgpOworICAgIHBhcmVudExheWVyLT5j
b252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBsb2NhdGlvbik7CisKKyAgICBsb2Nh
dGlvbiArPSB0b1NpemUobV90b3BMZWZ0KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYWRqdXN0
ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpIHsKQEAgLTI1NzQsMTEgKzI1NTksMTAg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllcgogCiAgICAgICAgIC8v
IEFkanVzdCB0aGUgdHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVuZGVyZXIncyB1cHBlciBsZWZ0
IGNvcm5lciB3aWxsIHBhaW50IGF0ICgwLDApIGluIHVzZXIgc3BhY2UuCiAgICAgICAgIC8vIFRo
aXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgaW4g
b3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgaW50IHggPSAwOwotICAgICAg
ICBpbnQgeSA9IDA7Ci0gICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgeCwg
eSk7CisgICAgICAgIEludFBvaW50IGRlbHRhOworICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jk
cyhyb290TGF5ZXIsIGRlbHRhKTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNm
b3JtKGxheWVyVHJhbnNmb3JtKTsKLSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KHgs
IHkpOworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQoZGVsdGEueCgpLCBkZWx0YS55
KCkpOwogICAgICAgICAKICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybS4KICAgICAgICAg
ewpAQCAtMjc2OCw5ICsyNzUyLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExheWVy
SW50b0NvbAogICAgIGlmICghY29sdW1uQmxvY2sgfHwgIWNvbHVtbkJsb2NrLT5oYXNDb2x1bW5z
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbnQgbGF5ZXJYID0gMDsKLSAgICBpbnQg
bGF5ZXJZID0gMDsKLSAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29y
ZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CisgICAgSW50UG9pbnQgbGF5ZXJPZmZzZXQ7
CisgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXll
ciwgbGF5ZXJPZmZzZXQpOwogICAgIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gY29sdW1uQmxv
Y2stPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAKQEAgLTI3ODQsNyArMjc2
Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICAgICAg
aW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gKGlzSG9yaXpvbnRhbCA/IGNvbFJlY3QueCgpIDogY29s
UmVjdC55KCkpIC0gY29sdW1uQmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwog
ICAgICAgICBJbnRTaXplIG9mZnNldCA9IGlzSG9yaXpvbnRhbCA/IEludFNpemUobG9naWNhbExl
ZnRPZmZzZXQsIGN1cnJMb2dpY2FsVG9wT2Zmc2V0KSA6IEludFNpemUoY3VyckxvZ2ljYWxUb3BP
ZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKIAotICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJY
LCBsYXllclkpOworICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJPZmZzZXQpOwogCiAgICAgICAg
IEludFJlY3QgbG9jYWxEaXJ0eVJlY3QocGFpbnREaXJ0eVJlY3QpOwogICAgICAgICBsb2NhbERp
cnR5UmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CkBAIC0yODE0LDExICsyNzk3LDEwIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSB0cmFuc2Zvcm0gc3VjaCB0aGF0IHRoZSBy
ZW5kZXJlcidzIHVwcGVyIGxlZnQgY29ybmVyIHdpbGwgcGFpbnQgYXQgKDAsMCkgaW4gdXNlciBz
cGFjZS4KICAgICAgICAgICAgICAgICAvLyBUaGlzIGludm9sdmVzIHN1YnRyYWN0aW5nIG91dCB0
aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91ciBjdXJyZW50IGNvb3JkaW5hdGUgc3BhY2Uu
Ci0gICAgICAgICAgICAgICAgaW50IGNoaWxkWCA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IGNo
aWxkWSA9IDA7Ci0gICAgICAgICAgICAgICAgY29sdW1uTGF5ZXJzW2NvbEluZGV4IC0gMV0tPmNv
bnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgY2hpbGRYLCBjaGlsZFkpOworICAgICAgICAg
ICAgICAgIEludFBvaW50IGNoaWxkT2Zmc2V0OworICAgICAgICAgICAgICAgIGNvbHVtbkxheWVy
c1tjb2xJbmRleCAtIDFdLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGNoaWxkT2Zm
c2V0KTsKICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0g
ICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGNoaWxkWCArIG9mZnNldC53
aWR0aCgpLCBjaGlsZFkgKyBvZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHRyYW5z
Zm9ybS50cmFuc2xhdGVSaWdodChjaGlsZE9mZnNldC54KCkgKyBvZmZzZXQud2lkdGgoKSwgY2hp
bGRPZmZzZXQueSgpICsgb2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtLgogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKSk7CkBAIC0yOTEyLDI2
ICsyODk0LDI1IEBAIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBSZW4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIFJlZlB0
cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOwotICAgIGludCBvZmZz
ZXRYID0gMDsKLSAgICBpbnQgb2Zmc2V0WSA9IDA7CisgICAgSW50UG9pbnQgb2Zmc2V0OwogICAg
IGlmIChjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSkgewogICAgICAgICAvLyBJZiB3ZSdyZSBhbHJl
YWR5IGNvbXB1dGluZyB0cmFuc2Zvcm0gc3RhdGUsIHRoZW4gaXQncyByZWxhdGl2ZSB0byB0aGUg
Y29udGFpbmVyICh3aGljaCB3ZSBrbm93IGlzIG5vbi1udWxsKS4KICAgICAgICAgdHJhbnNmb3Jt
U3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZSgqY29udGFpbmVyVHJhbnNm
b3JtU3RhdGUpOwotICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb250YWluZXJMYXllciwg
b2Zmc2V0WCwgb2Zmc2V0WSk7CisgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnRhaW5l
ckxheWVyLCBvZmZzZXQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgd2UgbmVlZCB0byBtYWtlIHRyYW5zZm9ybSBzdGF0ZSwgdGhlbiBiYXNlIGl0
IG9mZiBvZiBoaXRUZXN0UG9pbnQsCiAgICAgICAgIC8vIHdoaWNoIGlzIHJlbGF0aXZlIHRvIHJv
b3RMYXllci4KICAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGU6OmNyZWF0ZShoaXRUZXN0UG9pbnQsIEZsb2F0UXVhZChoaXRUZXN0UmVjdCkpOwotICAgICAg
ICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldFgsIG9mZnNldFkpOworICAg
ICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldCk7CiAgICAgfQogICAg
IAogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXJMYXllciA/
IGNvbnRhaW5lckxheWVyLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAocmVuZGVyZXIoKS0+c2hv
dWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXJSZW5kZXJlcikpIHsKICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGFpbmVyVHJhbnNmb3JtOwotICAgICAgICByZW5k
ZXJlcigpLT5nZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lclJlbmRlcmVyLCBJbnRT
aXplKG9mZnNldFgsIG9mZnNldFkpLCBjb250YWluZXJUcmFuc2Zvcm0pOworICAgICAgICByZW5k
ZXJlcigpLT5nZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lclJlbmRlcmVyLCB0b1Np
emUob2Zmc2V0KSwgY29udGFpbmVyVHJhbnNmb3JtKTsKICAgICAgICAgdHJhbnNmb3JtU3RhdGUt
PmFwcGx5VHJhbnNmb3JtKGNvbnRhaW5lclRyYW5zZm9ybSwgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICB9IGVsc2UgewotICAgICAgICB0cmFuc2Zv
cm1TdGF0ZS0+dHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFksIEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLT50cmFu
c2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpB
Y2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYW5zZm9ybVN0
YXRlOwpAQCAtMzI0MCwxMCArMzIyMSw5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdENoaWxkTGEKICAgICBBU1NFUlQoY29sdW1uQmxvY2sgJiYgY29sdW1uQmxvY2stPmhhc0Nv
bHVtbnMoKSk7CiAgICAgaWYgKCFjb2x1bW5CbG9jayB8fCAhY29sdW1uQmxvY2stPmhhc0NvbHVt
bnMoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaW50IGxheWVyWCA9IDA7Ci0gICAg
aW50IGxheWVyWSA9IDA7Ci0gICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVy
Q29vcmRzKHJvb3RMYXllciwgbGF5ZXJYLCBsYXllclkpOworCisgICAgSW50UG9pbnQgbGF5ZXJP
ZmZzZXQ7CisgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJv
b3RMYXllciwgbGF5ZXJPZmZzZXQpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBj
b2x1bW5CbG9jay0+Y29sdW1uSW5mbygpOwogICAgIGludCBjb2xDb3VudCA9IGNvbHVtbkJsb2Nr
LT5jb2x1bW5Db3VudChjb2xJbmZvKTsKQEAgLTMyNzEsNyArMzI1MSw3IEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGEKICAgICAgICAgICAgIGN1cnJMb2dpY2FsVG9w
T2Zmc2V0IC09IGJsb2NrRGVsdGE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGN1cnJMb2dp
Y2FsVG9wT2Zmc2V0ICs9IGJsb2NrRGVsdGE7Ci0gICAgICAgIGNvbFJlY3QubW92ZShsYXllclgs
IGxheWVyWSk7CisgICAgICAgIGNvbFJlY3QubW92ZShsYXllck9mZnNldCk7CiAKICAgICAgICAg
SW50UmVjdCBsb2NhbENsaXBSZWN0KGhpdFRlc3RSZWN0KTsKICAgICAgICAgbG9jYWxDbGlwUmVj
dC5pbnRlcnNlY3QoY29sUmVjdCk7CkBAIC0zMzgwLDI0ICszMzYwLDIyIEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb24KICAgICAvLyBVcGRhdGUgdGhlIGNsaXAgcmVj
dHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBsYXllcnMuCiAgICAgaWYgKHJlbmRlcmVy
KCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPmhhc0NsaXAoKSkgewogICAgICAg
ICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtpbmQuCi0gICAgICAg
IGludCB4ID0gMDsKLSAgICAgICAgaW50IHkgPSAwOwotICAgICAgICBjb252ZXJ0VG9MYXllckNv
b3Jkcyhyb290TGF5ZXIsIHgsIHkpOworICAgICAgICBJbnRQb2ludCBvZmZzZXQ7CisgICAgICAg
IGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgb2Zmc2V0KTsKICAgICAgICAgUmVuZGVy
VmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICAgICAgQVNTRVJUKHZpZXcpOwog
ICAgICAgICBpZiAodmlldyAmJiBjbGlwUmVjdHMuZml4ZWQoKSAmJiByb290TGF5ZXItPnJlbmRl
cmVyKCkgPT0gdmlldykgewotICAgICAgICAgICAgeCAtPSB2aWV3LT5mcmFtZVZpZXcoKS0+c2Ny
b2xsWEZvckZpeGVkUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHkgLT0gdmlldy0+ZnJhbWVWaWV3
KCktPnNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBvZmZzZXQgLT0gdmll
dy0+ZnJhbWVWaWV3KCktPnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKSB7
Ci0gICAgICAgICAgICBJbnRSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLT5vdmVyZmxvd0NsaXBSZWN0KHgsIHksIHJlbGV2YW5jeSk7CisgICAgICAgICAgICBJ
bnRSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVyZmxv
d0NsaXBSZWN0KG9mZnNldC54KCksIG9mZnNldC55KCksIHJlbGV2YW5jeSk7CiAgICAgICAgICAg
ICBjbGlwUmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dD
bGlwLCBjbGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBpZiAocmVu
ZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkgfHwgcmVuZGVyZXIoKS0+aXNSZWxQb3NpdGlvbmVkKCkp
CiAgICAgICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihu
ZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc0NsaXAoKSkgewotICAgICAgICAgICAgSW50UmVjdCBu
ZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNsaXBSZWN0KHgsIHkpOworICAg
ICAgICAgICAgSW50UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNs
aXBSZWN0KG9mZnNldC54KCksIG9mZnNldC55KCkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNl
dFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJl
Y3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJz
ZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsKICAgICAg
ICAgICAgIGNsaXBSZWN0cy5zZXRGaXhlZENsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlw
LCBjbGlwUmVjdHMuZml4ZWRDbGlwUmVjdCgpKSk7CkBAIC0zNDQ3LDE5ICszNDI1LDE4IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFIKICAgICBmb3JlZ3JvdW5kUmVj
dCA9IGJhY2tncm91bmRSZWN0OwogICAgIG91dGxpbmVSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAg
ICAgCi0gICAgaW50IHggPSAwOwotICAgIGludCB5ID0gMDsKLSAgICBjb252ZXJ0VG9MYXllckNv
b3Jkcyhyb290TGF5ZXIsIHgsIHkpOwotICAgIGxheWVyQm91bmRzID0gSW50UmVjdChJbnRQb2lu
dCh4LCB5KSwgc2l6ZSgpKTsKKyAgICBJbnRQb2ludCBvZmZzZXQ7CisgICAgY29udmVydFRvTGF5
ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXQpOworICAgIGxheWVyQm91bmRzID0gSW50UmVjdChv
ZmZzZXQsIHNpemUoKSk7CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBjbGlwIHJlY3RzIHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gY2hpbGQgbGF5ZXJzLgogICAgIGlmIChyZW5kZXJlcigpLT5oYXNP
dmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLT5oYXNDbGlwKCkpIHsKICAgICAgICAgLy8gVGhp
cyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogICAgICAgICBpZiAocmVu
ZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5p
bnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3QoeCwgeSwg
cmVsZXZhbmN5KSk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QodG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LngoKSwgb2Zmc2V0Lnko
KSwgcmVsZXZhbmN5KSk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNDbGlwKCkpIHsKICAg
ICAgICAgICAgIC8vIENsaXAgYXBwbGllcyB0byAqdXMqIGFzIHdlbGwsIHNvIGdvIGFoZWFkIGFu
ZCB1cGRhdGUgdGhlIGRhbWFnZVJlY3QuCi0gICAgICAgICAgICBJbnRSZWN0IG5ld1Bvc0NsaXAg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3QoeCwgeSk7CisgICAgICAgICAgICBJ
bnRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3Qob2Zm
c2V0LngoKSwgb2Zmc2V0LnkoKSk7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QobmV3
UG9zQ2xpcCk7CiAgICAgICAgICAgICBvdXRsaW5lUmVjdC5pbnRlcnNlY3QobmV3UG9zQ2xpcCk7
CkBAIC0zNjEzLDkgKzM1OTAsOSBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpib3VuZGluZ0JveChj
b25zdCBSCiAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVzdWx0KTsK
ICAgICBlbHNlCiAgICAgICAgIHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9y
V3JpdGluZ01vZGUocmVzdWx0KTsKLSAgICBpbnQgZGVsdGFYID0gMCwgZGVsdGFZID0gMDsKLSAg
ICBjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBkZWx0YVgsIGRlbHRhWSk7Ci0g
ICAgcmVzdWx0Lm1vdmUoZGVsdGFYLCBkZWx0YVkpOworICAgIEludFBvaW50IGRlbHRhOworICAg
IGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGRlbHRhKTsKKyAgICByZXN1bHQu
bW92ZShkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzk1MCwxMCArMzkyNyw5
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNldEJhY2tpbmdOZWVkc1JlcGFpbnQKICAgICAgICAgLy8g
SWYgd2UncmUgdHJ5aW5nIHRvIHJlcGFpbnQgdGhlIHBsYWNlaG9sZGVyIGRvY3VtZW50IGxheWVy
LCBwcm9wYWdhdGUgdGhlCiAgICAgICAgIC8vIHJlcGFpbnQgdG8gdGhlIG5hdGl2ZSB2aWV3IHN5
c3RlbS4KICAgICAgICAgSW50UmVjdCBhYnNSZWN0KHIpOwotICAgICAgICBpbnQgeCA9IDA7Ci0g
ICAgICAgIGludCB5ID0gMDsKLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCB4
LCB5KTsKLSAgICAgICAgYWJzUmVjdC5tb3ZlKHgsIHkpOworICAgICAgICBJbnRQb2ludCBkZWx0
YTsKKyAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBkZWx0YSk7CisgICAgICAg
IGFic1JlY3QubW92ZShkZWx0YSk7CiAKICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRl
cmVyKCktPnZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gODc3NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBA
IHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogYW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCkgY29u
c3QgeyByZXR1cm4gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcihmYWxzZSk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0
b3JMYXllciwgaW50JiB4LCBpbnQmIHkpIGNvbnN0OworICAgIHZvaWQgY29udmVydFRvTGF5ZXJD
b29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIEludFBvaW50JiBsb2NhdGlv
bikgY29uc3Q7CiAKICAgICBib29sIGhhc0F1dG9aSW5kZXgoKSBjb25zdCB7IHJldHVybiByZW5k
ZXJlcigpLT5zdHlsZSgpLT5oYXNBdXRvWkluZGV4KCk7IH0KICAgICBpbnQgekluZGV4KCkgY29u
c3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+ekluZGV4KCk7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lv
biA4Nzc0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsMTAgKzIwMyw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVDb21wb3NpdGUKICAgICAgICAgaWYgKG1fb3duaW5nTGF5ZXIgIT0gcm9v
dExheWVyKQogICAgICAgICAgICAgY2xpcHBpbmdCb3VuZHMuaW50ZXJzZWN0KG1fb3duaW5nTGF5
ZXItPmJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHRydWUpKTsKIAotICAgICAgICBpbnQg
ZGVsdGFYID0gMDsKLSAgICAgICAgaW50IGRlbHRhWSA9IDA7Ci0gICAgICAgIG1fb3duaW5nTGF5
ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGFYLCBkZWx0YVkpOwotICAg
ICAgICBjbGlwcGluZ0JvdW5kcy5tb3ZlKC1kZWx0YVgsIC1kZWx0YVkpOworICAgICAgICBJbnRQ
b2ludCBkZWx0YTsKKyAgICAgICAgbV9vd25pbmdMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMo
cm9vdExheWVyLCBkZWx0YSk7CisgICAgICAgIGNsaXBwaW5nQm91bmRzLm1vdmUoLWRlbHRhLngo
KSwgLWRlbHRhLnkoKSk7CiAKICAgICAgICAgbGF5ZXJCb3VuZHMuaW50ZXJzZWN0KGNsaXBwaW5n
Qm91bmRzKTsKICAgICB9CkBAIC0zNTYsOSArMzU1LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgIEludFJlY3QgbG9jYWxDb21wb3NpdGluZ0JvdW5kcyA9
IGNvbXBvc2l0ZWRCb3VuZHMoKTsKIAogICAgIEludFJlY3QgcmVsYXRpdmVDb21wb3NpdGluZ0Jv
dW5kcyhsb2NhbENvbXBvc2l0aW5nQm91bmRzKTsKLSAgICBpbnQgZGVsdGFYID0gMCwgZGVsdGFZ
ID0gMDsKLSAgICBtX293bmluZ0xheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhjb21wQW5jZXN0
b3IsIGRlbHRhWCwgZGVsdGFZKTsKLSAgICByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLm1vdmUo
ZGVsdGFYLCBkZWx0YVkpOworICAgIEludFBvaW50IGRlbHRhOworICAgIG1fb3duaW5nTGF5ZXIt
PmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGEpOworICAgIHJlbGF0aXZl
Q29tcG9zaXRpbmdCb3VuZHMubW92ZShkZWx0YSk7CiAKICAgICBJbnRQb2ludCBncmFwaGljc0xh
eWVyUGFyZW50TG9jYXRpb247CiAgICAgaWYgKGNvbXBBbmNlc3RvciAmJiBjb21wQW5jZXN0b3It
PmJhY2tpbmcoKS0+aGFzQ2xpcHBpbmdMYXllcigpKSB7CkBAIC0zNzksNyArMzc4LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICBtX2FuY2VzdG9y
Q2xpcHBpbmdMYXllci0+c2V0U2l6ZShwYXJlbnRDbGlwUmVjdC5zaXplKCkpOwogCiAgICAgICAg
IC8vIGJhY2tncm91bmRSZWN0IGlzIHJlbGF0aXZlIHRvIGNvbXBBbmNlc3Rvciwgc28gc3VidHJh
Y3QgZGVsdGFYL2RlbHRhWSB0byBnZXQgYmFjayB0byBsb2NhbCBjb29yZHMuCi0gICAgICAgIElu
dFNpemUgcmVuZGVyZXJPZmZzZXQocGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKS54KCkgLSBkZWx0
YVgsIHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkueSgpIC0gZGVsdGFZKTsKKyAgICAgICAgSW50
U2l6ZSByZW5kZXJlck9mZnNldChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpLngoKSAtIGRlbHRh
LngoKSwgcGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKS55KCkgLSBkZWx0YS55KCkpOwogICAgICAg
ICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHJlbmRlcmVy
T2Zmc2V0KTsKIAogICAgICAgICAvLyBUaGUgcHJpbWFyeSBsYXllciBpcyB0aGVuIHBhcmVudGVk
IGluLCBhbmQgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGlzIGNsaXBwaW5nIGxheWVyLgpAQCAt
NDI3LDcgKzQyNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wK
ICAgICAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigp
KS0+Ym9yZGVyQm94UmVjdCgpOwogCiAgICAgICAgIC8vIEdldCBsYXlvdXQgYm91bmRzIGluIHRo
ZSBjb29yZHMgb2YgY29tcEFuY2VzdG9yIHRvIG1hdGNoIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3Vu
ZHMuCi0gICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGRlbHRhWCwgZGVsdGFZ
LCBib3JkZXJCb3gud2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVj
dCBsYXllckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIEludFNpemUoYm9yZGVyQm94LndpZHRoKCks
IGJvcmRlckJveC5oZWlnaHQoKSkpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRo
YXQgZGVwZW5kIG9uIGxheWVyIGRpbWVuc2lvbnMKICAgICAgICAgRmxvYXRQb2ludDNEIHRyYW5z
Zm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CShyZXZpc2lvbiA4Nzc0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDksOSArNDQ5LDkgQEAgSW50UmVj
dCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZQogICAgIEludFJlY3QgdW5pb25Cb3Vu
ZHMgPSBib3VuZGluZ0JveFJlY3Q7CiAgICAgCiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5o
YXNPdmVyZmxvd0NsaXAoKSB8fCBsYXllci0+cmVuZGVyZXIoKS0+aGFzTWFzaygpKSB7Ci0gICAg
ICAgIGludCBhbmNlc3RvclJlbFggPSAwLCBhbmNlc3RvclJlbFkgPSAwOwotICAgICAgICBsYXll
ci0+Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxYLCBhbmNl
c3RvclJlbFkpOwotICAgICAgICBib3VuZGluZ0JveFJlY3QubW92ZShhbmNlc3RvclJlbFgsIGFu
Y2VzdG9yUmVsWSk7CisgICAgICAgIEludFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OworICAgICAg
ICBsYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxP
ZmZzZXQpOworICAgICAgICBib3VuZGluZ0JveFJlY3QubW92ZShhbmNlc3RvclJlbE9mZnNldCk7
CiAgICAgICAgIHJldHVybiBib3VuZGluZ0JveFJlY3Q7CiAgICAgfQogCkBAIC01MDMsOSArNTAz
LDkgQEAgSW50UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZQogICAgICAgICB1
bmlvbkJvdW5kcyA9IGFmZmluZVRyYW5zLT5tYXBSZWN0KHVuaW9uQm91bmRzKTsKICAgICB9CiAK
LSAgICBpbnQgYW5jZXN0b3JSZWxYID0gMCwgYW5jZXN0b3JSZWxZID0gMDsKLSAgICBsYXllci0+
Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxYLCBhbmNlc3Rv
clJlbFkpOwotICAgIHVuaW9uQm91bmRzLm1vdmUoYW5jZXN0b3JSZWxYLCBhbmNlc3RvclJlbFkp
OworICAgIEludFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OworICAgIGxheWVyLT5jb252ZXJ0VG9M
YXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBhbmNlc3RvclJlbE9mZnNldCk7CisgICAgdW5pb25C
b3VuZHMubW92ZShhbmNlc3RvclJlbE9mZnNldCk7CiAKICAgICByZXR1cm4gdW5pb25Cb3VuZHM7
CiB9CkBAIC01MjcsOSArNTI3LDkgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVy
V2lsbEJlUgogICAgICAgICBBU1NFUlQoY29tcExheWVyLT5iYWNraW5nKCkpOwogICAgICAgICBJ
bnRSZWN0IGNvbXBCb3VuZHMgPSBjaGlsZC0+YmFja2luZygpLT5jb21wb3NpdGVkQm91bmRzKCk7
CiAKLSAgICAgICAgaW50IG9mZnNldFggPSAwLCBvZmZzZXRZID0gMDsKLSAgICAgICAgY2hpbGQt
PmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBMYXllciwgb2Zmc2V0WCwgb2Zmc2V0WSk7Ci0gICAg
ICAgIGNvbXBCb3VuZHMubW92ZShvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgSW50UG9pbnQg
b2Zmc2V0OworICAgICAgICBjaGlsZC0+Y29udmVydFRvTGF5ZXJDb29yZHMoY29tcExheWVyLCBv
ZmZzZXQpOworICAgICAgICBjb21wQm91bmRzLm1vdmUob2Zmc2V0KTsKIAogICAgICAgICBjb21w
TGF5ZXItPnNldEJhY2tpbmdOZWVkc1JlcGFpbnRJblJlY3QoY29tcEJvdW5kcyk7CiAKQEAgLTEw
NzEsMTEgKzEwNzEsMTAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlY3Vyc2l2ZVJl
cAogICAgICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVnWk9yZGVyTGlzdC0+c2l6ZSgpOwog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbmVnWk9yZGVyTGlzdC0+YXQoaSk7
Ci0gICAgICAgICAgICAgICAgaW50IHggPSAwOwotICAgICAgICAgICAgICAgIGludCB5ID0gMDsK
LSAgICAgICAgICAgICAgICBjdXJMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMobGF5ZXIsIHgs
IHkpOworICAgICAgICAgICAgICAgIEludFBvaW50IGRlbHRhOworICAgICAgICAgICAgICAgIGN1
ckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhsYXllciwgZGVsdGEpOwogICAgICAgICAgICAg
ICAgIEludFJlY3QgY2hpbGRSZWN0KHJlY3QpOwotICAgICAgICAgICAgICAgIGNoaWxkUmVjdC5t
b3ZlKC14LCAteSk7CisgICAgICAgICAgICAgICAgY2hpbGRSZWN0Lm1vdmUoLWRlbHRhLngoKSwg
LWRlbHRhLnkoKSk7CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlUmVwYWludExheWVyUmVjdChj
dXJMYXllciwgY2hpbGRSZWN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA4NCwx
MSArMTA4MywxMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVjdXJzaXZlUmVwCiAg
ICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKLSAg
ICAgICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IHkgPSAwOwotICAg
ICAgICAgICAgICAgIGN1ckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhsYXllciwgeCwgeSk7
CisgICAgICAgICAgICAgICAgSW50UG9pbnQgZGVsdGE7CisgICAgICAgICAgICAgICAgY3VyTGF5
ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGxheWVyLCBkZWx0YSk7CiAgICAgICAgICAgICAgICAg
SW50UmVjdCBjaGlsZFJlY3QocmVjdCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRSZWN0Lm1vdmUo
LXgsIC15KTsKKyAgICAgICAgICAgICAgICBjaGlsZFJlY3QubW92ZSgtZGVsdGEueCgpLCAtZGVs
dGEueSgpKTsKICAgICAgICAgICAgICAgICByZWN1cnNpdmVSZXBhaW50TGF5ZXJSZWN0KGN1ckxh
eWVyLCBjaGlsZFJlY3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDk3LDExICsx
MDk1LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWN1cnNpdmVSZXAKICAgICAg
ICAgc2l6ZV90IGxpc3RTaXplID0gbm9ybWFsRmxvd0xpc3QtPnNpemUoKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBSZW5kZXJM
YXllciogY3VyTGF5ZXIgPSBub3JtYWxGbG93TGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBpbnQg
eCA9IDA7Ci0gICAgICAgICAgICBpbnQgeSA9IDA7Ci0gICAgICAgICAgICBjdXJMYXllci0+Y29u
dmVydFRvTGF5ZXJDb29yZHMobGF5ZXIsIHgsIHkpOworICAgICAgICAgICAgSW50UG9pbnQgZGVs
dGE7CisgICAgICAgICAgICBjdXJMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMobGF5ZXIsIGRl
bHRhKTsKICAgICAgICAgICAgIEludFJlY3QgY2hpbGRSZWN0KHJlY3QpOwotICAgICAgICAgICAg
Y2hpbGRSZWN0Lm1vdmUoLXgsIC15KTsKKyAgICAgICAgICAgIGNoaWxkUmVjdC5tb3ZlKC1kZWx0
YS54KCksIC1kZWx0YS55KCkpOwogICAgICAgICAgICAgcmVjdXJzaXZlUmVwYWludExheWVyUmVj
dChjdXJMYXllciwgY2hpbGRSZWN0KTsKICAgICAgICAgfQogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95640</attachid>
            <date>2011-06-01 12:19:56 -0700</date>
            <delta_ts>2011-06-01 13:30:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61818-20110601121955.patch</filename>
            <type>text/plain</type>
            <size>25265</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3ODM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDYtMDEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29y
ZHMgdG8gdXNlIEludFBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTgxOAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpmbG9vcmVkSW50U2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRzQW5kUmVmbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc3BhcmVuY3lDbGlwQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnRDaGlsZExheWVySW50b0NvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Ym91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEJh
Y2tpbmdOZWVkc1JlcGFpbnRJblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXll
ckdlb21ldHJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29t
cG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmxheWVyV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlY3Vyc2l2ZVJlcGFpbnRMYXllclJlY3QpOgorCiAyMDExLTA2LTAxICBBbmRyYXMg
QmVjc2kgIDxhYmVjc2lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBP
c3p0cm9nb27DoWMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oCShyZXZpc2lvbiA4NzgyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKIGNsYXNzIEludFBvaW50OworY2xhc3MgSW50U2l6ZTsKIAogY2xhc3Mg
RmxvYXRQb2ludCB7CiBwdWJsaWM6CkBAIC0yMDcsNiArMjA4LDExIEBAIGlubGluZSBJbnRQb2lu
dCBmbG9vcmVkSW50UG9pbnQoY29uc3QgRmwKICAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nh
c3Q8aW50PihwLngoKSksIHN0YXRpY19jYXN0PGludD4ocC55KCkpKTsKIH0KIAoraW5saW5lIElu
dFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4g
SW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkp
OworfQorCiBmbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCYgYyk7CiAKIC8vIEZpbmQgcG9pbnQgd2hlcmUgbGluZXMgdGhyb3Vn
aCB0aGUgdHdvIHBhaXJzIG9mIHBvaW50cyBpbnRlcnNlY3QuIFJldHVybnMgZmFsc2UgaWYgdGhl
IGxpbmVzIGRvbid0IGludGVyc2VjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkocmV2aXNpb24gODc4MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsMjkgKzI3NSwyNCBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhVCiAgICAgICAgICAgICBpZiAo
IW1fcGFyZW50IHx8IG1fcGFyZW50LT5yZW5kZXJlcigpID09IHJlbmRlcmVyKCktPmNvbnRhaW5p
bmdCbG9jaygpKQogICAgICAgICAgICAgICAgIGNhY2hlZE9mZnNldC0+bW92ZShtX3RvcExlZnQu
eCgpLCBtX3RvcExlZnQueSgpKTsgLy8gRmFzdCBjYXNlCiAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IHkgPSAwOwotICAg
ICAgICAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3QoKSwgeCwgeSk7Ci0gICAgICAg
ICAgICAgICAgKmNhY2hlZE9mZnNldCA9IEludFBvaW50KHgsIHkpOworICAgICAgICAgICAgICAg
IEludFBvaW50IG9mZnNldDsKKyAgICAgICAgICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhy
b290KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgKmNhY2hlZE9mZnNldCA9IG9mZnNldDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGludCB4ID0gMDsKLSAgICBp
bnQgeSA9IDA7CisgICAgSW50UG9pbnQgb2Zmc2V0OwogICAgIGlmIChjYWNoZWRPZmZzZXQpIHsK
LSAgICAgICAgeCArPSBjYWNoZWRPZmZzZXQtPngoKTsKLSAgICAgICAgeSArPSBjYWNoZWRPZmZz
ZXQtPnkoKTsKKyAgICAgICAgb2Zmc2V0ID0gKmNhY2hlZE9mZnNldDsKICNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIGludCBub25DYWNoZWRYID0gMDsKLSAgICAgICAgaW50IG5vbkNhY2hlZFkgPSAw
OwotICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIG5vbkNhY2hlZFgsIG5vbkNh
Y2hlZFkpOwotICAgICAgICBBU1NFUlQoeCA9PSBub25DYWNoZWRYKTsKLSAgICAgICAgQVNTRVJU
KHkgPT0gbm9uQ2FjaGVkWSk7CisgICAgICAgIEludFBvaW50IG5vbkNhY2hlZE9mZnNldDsKKyAg
ICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBub25DYWNoZWRPZmZzZXQpOworICAg
ICAgICBBU1NFUlQob2Zmc2V0ID09IG5vbkNhY2hlZE9mZnNldCk7CiAjZW5kaWYKICAgICB9IGVs
c2UKLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCB4LCB5KTsKLSAgICBwb3Np
dGlvbk92ZXJmbG93Q29udHJvbHMoSW50U2l6ZSh4LCB5KSk7CisgICAgICAgIGNvbnZlcnRUb0xh
eWVyQ29vcmRzKHJvb3QoKSwgb2Zmc2V0KTsKKyAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMo
dG9TaXplKG9mZnNldCkpOwogCiAgICAgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOwogCkBAIC05
MDEsMTIgKzg5NiwxMSBAQCBzdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRz
CiAgICAgLy8gRklYTUU6IEFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHdpbGwgZXZlbnR1YWxseSB3
YW50IHRvIGRvIHNvbWV0aGluZyBzbWFydCBoZXJlIHRvIGF2b2lkIGluY29ycG9yYXRpbmcgdGhp
cwogICAgIC8vIHNpemUgaW50byB0aGUgcGFyZW50IGxheWVyLgogICAgIGlmIChsLT5yZW5kZXJl
cigpLT5oYXNSZWZsZWN0aW9uKCkpIHsKLSAgICAgICAgaW50IGRlbHRhWCA9IDA7Ci0gICAgICAg
IGludCBkZWx0YVkgPSAwOwotICAgICAgICBsLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5
ZXIsIGRlbHRhWCwgZGVsdGFZKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZSgtZGVsdGFYLCAtZGVs
dGFZKTsKKyAgICAgICAgSW50UG9pbnQgZGVsdGE7CisgICAgICAgIGwtPmNvbnZlcnRUb0xheWVy
Q29vcmRzKHJvb3RMYXllciwgZGVsdGEpOworICAgICAgICBjbGlwUmVjdC5tb3ZlKC1kZWx0YS54
KCksIC1kZWx0YS55KCkpOwogICAgICAgICBjbGlwUmVjdC51bml0ZShsLT5yZW5kZXJCb3goKS0+
cmVmbGVjdGVkUmVjdChjbGlwUmVjdCkpOwotICAgICAgICBjbGlwUmVjdC5tb3ZlKGRlbHRhWCwg
ZGVsdGFZKTsKKyAgICAgICAgY2xpcFJlY3QubW92ZShkZWx0YSk7CiAgICAgfQogfQogCkBAIC05
MTksMTIgKzkxMywxMSBAQCBzdGF0aWMgSW50UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94KGNvbnN0
CiAgICAgaWYgKHJvb3RMYXllciAhPSBsICYmIGwtPnBhaW50c1dpdGhUcmFuc2Zvcm0ocGFpbnRC
ZWhhdmlvcikpIHsKICAgICAgICAgLy8gVGhlIGJlc3Qgd2UgY2FuIGRvIGhlcmUgaXMgdG8gdXNl
IGVuY2xvc2VkIGJvdW5kaW5nIGJveGVzIHRvIGVzdGFibGlzaCBhICJmdXp6eSIgZW5vdWdoIGNs
aXAgdG8gZW5jb21wYXNzCiAgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm1lZCBsYXllciBhbmQgYWxs
IG9mIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaW50IHggPSAwOwotICAgICAgICBpbnQgeSA9IDA7
Ci0gICAgICAgIGwtPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgeCwgeSk7CisgICAg
ICAgIEludFBvaW50IGRlbHRhOworICAgICAgICBsLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290
TGF5ZXIsIGRlbHRhKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07
Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoeCwgeSk7CisgICAgICAgIHRyYW5zZm9ybS50
cmFuc2xhdGUoZGVsdGEueCgpLCBkZWx0YS55KCkpOwogICAgICAgICB0cmFuc2Zvcm0gPSB0cmFu
c2Zvcm0gKiAqbC0+dHJhbnNmb3JtKCk7CiAKICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IGwt
PmJvdW5kaW5nQm94KGwpOwpAQCAtMTExMiw3ICsxMTA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
aW5zZXJ0T25seVRoaXNMYXllcigpCiB9CiAKIHZvaWQgCi1SZW5kZXJMYXllcjo6Y29udmVydFRv
TGF5ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGludCYgeFBvcywg
aW50JiB5UG9zKSBjb25zdAorUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBJbnRQb2ludCYgbG9jYXRpb24pIGNvbnN0CiB7
CiAgICAgaWYgKGFuY2VzdG9yTGF5ZXIgPT0gdGhpcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTEy
Miw4ICsxMTE1LDcgQEAgUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAog
ICAgICAgICAvLyBJZiB0aGUgZml4ZWQgbGF5ZXIncyBjb250YWluZXIgaXMgdGhlIHJvb3QsIGp1
c3QgYWRkIGluIHRoZSBvZmZzZXQgb2YgdGhlIHZpZXcuIFdlIGNhbiBvYnRhaW4gdGhpcyBieSBj
YWxsaW5nCiAgICAgICAgIC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3Lgog
ICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KCksIHRydWUpOwotICAgICAgICB4UG9zICs9IGFic1Bvcy54KCk7Ci0gICAgICAg
IHlQb3MgKz0gYWJzUG9zLnkoKTsKKyAgICAgICAgbG9jYXRpb24gKz0gZmxvb3JlZEludFNpemUo
YWJzUG9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAKQEAgLTExNDcsMTYgKzExMzksMTMg
QEAgUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAogICAgICAgICBBU1NF
UlQoZml4ZWRQb3NpdGlvbkNvbnRhaW5lckxheWVyKTsgLy8gV2Ugc2hvdWxkIGhhdmUgaGl0IHRo
ZSBSZW5kZXJWaWV3J3MgbGF5ZXIgYXQgbGVhc3QuCiAKICAgICAgICAgaWYgKGZpeGVkUG9zaXRp
b25Db250YWluZXJMYXllciAhPSBhbmNlc3RvckxheWVyKSB7Ci0gICAgICAgICAgICBpbnQgZml4
ZWRDb250YWluZXJYID0gMDsKLSAgICAgICAgICAgIGludCBmaXhlZENvbnRhaW5lclkgPSAwOwot
ICAgICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMoZml4ZWRQb3NpdGlvbkNvbnRhaW5lckxh
eWVyLCBmaXhlZENvbnRhaW5lclgsIGZpeGVkQ29udGFpbmVyWSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGludCBhbmNlc3RvclggPSAwOwotICAgICAgICAgICAgaW50IGFuY2VzdG9yWSA9
IDA7Ci0gICAgICAgICAgICBhbmNlc3RvckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhmaXhl
ZFBvc2l0aW9uQ29udGFpbmVyTGF5ZXIsIGFuY2VzdG9yWCwgYW5jZXN0b3JZKTsKLSAgICAgICAg
Ci0gICAgICAgICAgICB4UG9zICs9IChmaXhlZENvbnRhaW5lclggLSBhbmNlc3RvclgpOwotICAg
ICAgICAgICAgeVBvcyArPSAoZml4ZWRDb250YWluZXJZIC0gYW5jZXN0b3JZKTsKKyAgICAgICAg
ICAgIEludFBvaW50IGZpeGVkQ29udGFpbmVyQ29vcmRzOworICAgICAgICAgICAgY29udmVydFRv
TGF5ZXJDb29yZHMoZml4ZWRQb3NpdGlvbkNvbnRhaW5lckxheWVyLCBmaXhlZENvbnRhaW5lckNv
b3Jkcyk7CisKKyAgICAgICAgICAgIEludFBvaW50IGFuY2VzdG9yQ29vcmRzOworICAgICAgICAg
ICAgYW5jZXN0b3JMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMoZml4ZWRQb3NpdGlvbkNvbnRh
aW5lckxheWVyLCBhbmNlc3RvckNvb3Jkcyk7CisKKyAgICAgICAgICAgIGxvY2F0aW9uICs9IChm
aXhlZENvbnRhaW5lckNvb3JkcyAtIGFuY2VzdG9yQ29vcmRzKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KQEAgLTExODMsMTYgKzExNzIsMTMgQEAgUmVuZGVyTGF5ZXI6
OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAogICAgICAgICAgICAgLy8gdG8gZW5jbG9zaW5n
UG9zaXRpb25lZEFuY2VzdG9yIGFuZCBzdWJ0cmFjdC4KICAgICAgICAgICAgIFJlbmRlckxheWVy
KiBwb3NpdGlvbmVkQW5jZXN0b3IgPSBwYXJlbnRMYXllci0+ZW5jbG9zaW5nUG9zaXRpb25lZEFu
Y2VzdG9yKCk7CiAKLSAgICAgICAgICAgIGludCB0aGlzWCA9IDA7Ci0gICAgICAgICAgICBpbnQg
dGhpc1kgPSAwOwotICAgICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocG9zaXRpb25lZEFu
Y2VzdG9yLCB0aGlzWCwgdGhpc1kpOworICAgICAgICAgICAgSW50UG9pbnQgdGhpc0Nvb3JkczsK
KyAgICAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHBvc2l0aW9uZWRBbmNlc3RvciwgdGhp
c0Nvb3Jkcyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBhbmNlc3RvclggPSAwOwot
ICAgICAgICAgICAgaW50IGFuY2VzdG9yWSA9IDA7Ci0gICAgICAgICAgICBhbmNlc3RvckxheWVy
LT5jb252ZXJ0VG9MYXllckNvb3Jkcyhwb3NpdGlvbmVkQW5jZXN0b3IsIGFuY2VzdG9yWCwgYW5j
ZXN0b3JZKTsKLSAgICAgICAgCi0gICAgICAgICAgICB4UG9zICs9ICh0aGlzWCAtIGFuY2VzdG9y
WCk7Ci0gICAgICAgICAgICB5UG9zICs9ICh0aGlzWSAtIGFuY2VzdG9yWSk7CisgICAgICAgICAg
ICBJbnRQb2ludCBhbmNlc3RvckNvb3JkczsKKyAgICAgICAgICAgIGFuY2VzdG9yTGF5ZXItPmNv
bnZlcnRUb0xheWVyQ29vcmRzKHBvc2l0aW9uZWRBbmNlc3RvciwgYW5jZXN0b3JDb29yZHMpOwor
CisgICAgICAgICAgICBsb2NhdGlvbiArPSAodGhpc0Nvb3JkcyAtIGFuY2VzdG9yQ29vcmRzKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtMTIwMCwxMSAr
MTE4NiwxMCBAQCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMoY29uc3QgCiAgICAg
CiAgICAgaWYgKCFwYXJlbnRMYXllcikKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHBhcmVu
dExheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCB4UG9zLCB5UG9zKTsK
IAotICAgIHhQb3MgKz0gbV90b3BMZWZ0LngoKTsKLSAgICB5UG9zICs9IG1fdG9wTGVmdC55KCk7
CisgICAgcGFyZW50TGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGxv
Y2F0aW9uKTsKKworICAgIGxvY2F0aW9uICs9IHRvU2l6ZShtX3RvcExlZnQpOwogfQogCiBzdGF0
aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkgewpA
QCAtMjU3NCwxMSArMjU1OSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRl
ckxheWVyCiAKICAgICAgICAgLy8gQWRqdXN0IHRoZSB0cmFuc2Zvcm0gc3VjaCB0aGF0IHRoZSBy
ZW5kZXJlcidzIHVwcGVyIGxlZnQgY29ybmVyIHdpbGwgcGFpbnQgYXQgKDAsMCkgaW4gdXNlciBz
cGFjZS4KICAgICAgICAgLy8gVGhpcyBpbnZvbHZlcyBzdWJ0cmFjdGluZyBvdXQgdGhlIHBvc2l0
aW9uIG9mIHRoZSBsYXllciBpbiBvdXIgY3VycmVudCBjb29yZGluYXRlIHNwYWNlLgotICAgICAg
ICBpbnQgeCA9IDA7Ci0gICAgICAgIGludCB5ID0gMDsKLSAgICAgICAgY29udmVydFRvTGF5ZXJD
b29yZHMocm9vdExheWVyLCB4LCB5KTsKKyAgICAgICAgSW50UG9pbnQgZGVsdGE7CisgICAgICAg
IGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOwogICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pOwotICAgICAgICB0cmFuc2Zv
cm0udHJhbnNsYXRlUmlnaHQoeCwgeSk7CisgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdo
dChkZWx0YS54KCksIGRlbHRhLnkoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBBcHBseSB0aGUg
dHJhbnNmb3JtLgogICAgICAgICB7CkBAIC0yNzY4LDkgKzI3NTIsOCBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludENoaWxkTGF5ZXJJbnRvQ29sCiAgICAgaWYgKCFjb2x1bW5CbG9jayB8fCAhY29s
dW1uQmxvY2stPmhhc0NvbHVtbnMoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGludCBs
YXllclggPSAwOwotICAgIGludCBsYXllclkgPSAwOwotICAgIGNvbHVtbkJsb2NrLT5sYXllcigp
LT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsKKyAgICBJ
bnRQb2ludCBsYXllck9mZnNldDsKKyAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRv
TGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllck9mZnNldCk7CiAgICAgCiAgICAgYm9vbCBpc0hv
cml6b250YWwgPSBjb2x1bW5CbG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KTsKIApAQCAtMjc4NCw3ICsyNzY3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExh
eWVySW50b0NvbAogICAgICAgICBpbnQgbG9naWNhbExlZnRPZmZzZXQgPSAoaXNIb3Jpem9udGFs
ID8gY29sUmVjdC54KCkgOiBjb2xSZWN0LnkoKSkgLSBjb2x1bW5CbG9jay0+bG9naWNhbExlZnRP
ZmZzZXRGb3JDb250ZW50KCk7CiAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gaXNIb3Jpem9udGFs
ID8gSW50U2l6ZShsb2dpY2FsTGVmdE9mZnNldCwgY3VyckxvZ2ljYWxUb3BPZmZzZXQpIDogSW50
U2l6ZShjdXJyTG9naWNhbFRvcE9mZnNldCwgbG9naWNhbExlZnRPZmZzZXQpOwogCi0gICAgICAg
IGNvbFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7CisgICAgICAgIGNvbFJlY3QubW92ZShsYXll
ck9mZnNldCk7CiAKICAgICAgICAgSW50UmVjdCBsb2NhbERpcnR5UmVjdChwYWludERpcnR5UmVj
dCk7CiAgICAgICAgIGxvY2FsRGlydHlSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTI4MTQs
MTEgKzI3OTcsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExheWVySW50b0NvbAog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIHRyYW5z
Zm9ybSBzdWNoIHRoYXQgdGhlIHJlbmRlcmVyJ3MgdXBwZXIgbGVmdCBjb3JuZXIgd2lsbCBwYWlu
dCBhdCAoMCwwKSBpbiB1c2VyIHNwYWNlLgogICAgICAgICAgICAgICAgIC8vIFRoaXMgaW52b2x2
ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgaW4gb3VyIGN1cnJl
bnQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgICAgICAgICBpbnQgY2hpbGRYID0gMDsKLSAg
ICAgICAgICAgICAgICBpbnQgY2hpbGRZID0gMDsKLSAgICAgICAgICAgICAgICBjb2x1bW5MYXll
cnNbY29sSW5kZXggLSAxXS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBjaGlsZFgs
IGNoaWxkWSk7CisgICAgICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgY29sdW1uTGF5ZXJzW2NvbEluZGV4IC0gMV0tPmNvbnZlcnRUb0xheWVyQ29vcmRz
KHJvb3RMYXllciwgY2hpbGRPZmZzZXQpOwogICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmln
aHQoY2hpbGRYICsgb2Zmc2V0LndpZHRoKCksIGNoaWxkWSArIG9mZnNldC5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGNoaWxkT2Zmc2V0LngoKSAr
IG9mZnNldC53aWR0aCgpLCBjaGlsZE9mZnNldC55KCkgKyBvZmZzZXQuaGVpZ2h0KCkpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0uCiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5z
Zm9ybSgpKTsKQEAgLTI5MTIsMjYgKzI4OTQsMjUgQEAgUGFzc1JlZlB0cjxIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU+IFJlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gdHJhbnNmb3Jt
U3RhdGU7Ci0gICAgaW50IG9mZnNldFggPSAwOwotICAgIGludCBvZmZzZXRZID0gMDsKKyAgICBJ
bnRQb2ludCBvZmZzZXQ7CiAgICAgaWYgKGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSB7CiAgICAg
ICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgY29tcHV0aW5nIHRyYW5zZm9ybSBzdGF0ZSwgdGhlbiBp
dCdzIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgKHdoaWNoIHdlIGtub3cgaXMgbm9uLW51bGwp
LgogICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3Jl
YXRlKCpjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSk7Ci0gICAgICAgIGNvbnZlcnRUb0xheWVyQ29v
cmRzKGNvbnRhaW5lckxheWVyLCBvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgY29udmVydFRv
TGF5ZXJDb29yZHMoY29udGFpbmVyTGF5ZXIsIG9mZnNldCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBuZWVkIHRvIG1ha2UgdHJhbnNmb3Jt
IHN0YXRlLCB0aGVuIGJhc2UgaXQgb2ZmIG9mIGhpdFRlc3RQb2ludCwKICAgICAgICAgLy8gd2hp
Y2ggaXMgcmVsYXRpdmUgdG8gcm9vdExheWVyLgogICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3JlYXRlKGhpdFRlc3RQb2ludCwgRmxvYXRRdWFkKGhp
dFRlc3RSZWN0KSk7Ci0gICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgb2Zm
c2V0WCwgb2Zmc2V0WSk7CisgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwg
b2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJl
ciA9IGNvbnRhaW5lckxheWVyID8gY29udGFpbmVyTGF5ZXItPnJlbmRlcmVyKCkgOiAwOwogICAg
IGlmIChyZW5kZXJlcigpLT5zaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5l
clJlbmRlcmVyKSkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250YWluZXJUcmFu
c2Zvcm07Ci0gICAgICAgIHJlbmRlcmVyKCktPmdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29u
dGFpbmVyUmVuZGVyZXIsIEludFNpemUob2Zmc2V0WCwgb2Zmc2V0WSksIGNvbnRhaW5lclRyYW5z
Zm9ybSk7CisgICAgICAgIHJlbmRlcmVyKCktPmdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29u
dGFpbmVyUmVuZGVyZXIsIHRvU2l6ZShvZmZzZXQpLCBjb250YWluZXJUcmFuc2Zvcm0pOwogICAg
ICAgICB0cmFuc2Zvcm1TdGF0ZS0+YXBwbHlUcmFuc2Zvcm0oY29udGFpbmVyVHJhbnNmb3JtLCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0pOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHRyYW5zZm9ybVN0YXRlLT50cmFuc2xhdGUob2Zmc2V0WCwgb2Zmc2V0WSwg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtKTsKKyAgICAgICAg
dHJhbnNmb3JtU3RhdGUtPnRyYW5zbGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpLCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0pOwogICAgIH0KICAgICAKICAg
ICByZXR1cm4gdHJhbnNmb3JtU3RhdGU7CkBAIC0zMjQwLDEwICszMjIxLDkgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYQogICAgIEFTU0VSVChjb2x1bW5CbG9jayAm
JiBjb2x1bW5CbG9jay0+aGFzQ29sdW1ucygpKTsKICAgICBpZiAoIWNvbHVtbkJsb2NrIHx8ICFj
b2x1bW5CbG9jay0+aGFzQ29sdW1ucygpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBp
bnQgbGF5ZXJYID0gMDsKLSAgICBpbnQgbGF5ZXJZID0gMDsKLSAgICBjb2x1bW5CbG9jay0+bGF5
ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CisK
KyAgICBJbnRQb2ludCBsYXllck9mZnNldDsKKyAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29u
dmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllck9mZnNldCk7CiAgICAgCiAgICAgQ29s
dW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7CiAgICAgaW50IGNv
bENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbEluZm8pOwpAQCAtMzI3MSw3ICsz
MjUxLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYQogICAgICAg
ICAgICAgY3VyckxvZ2ljYWxUb3BPZmZzZXQgLT0gYmxvY2tEZWx0YTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgY3VyckxvZ2ljYWxUb3BPZmZzZXQgKz0gYmxvY2tEZWx0YTsKLSAgICAgICAg
Y29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKKyAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVy
T2Zmc2V0KTsKIAogICAgICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3QoaGl0VGVzdFJlY3QpOwog
ICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTMzODAsMjQgKzMz
NjAsMjIgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbgogICAgIC8v
IFVwZGF0ZSB0aGUgY2xpcCByZWN0cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGNoaWxkIGxheWVy
cy4KICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS0+
aGFzQ2xpcCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbGF5ZXIgZXN0YWJsaXNoZXMgYSBjbGlwIG9m
IHNvbWUga2luZC4KLSAgICAgICAgaW50IHggPSAwOwotICAgICAgICBpbnQgeSA9IDA7Ci0gICAg
ICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgeCwgeSk7CisgICAgICAgIEludFBv
aW50IG9mZnNldDsKKyAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZz
ZXQpOwogICAgICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwogICAg
ICAgICBBU1NFUlQodmlldyk7CiAgICAgICAgIGlmICh2aWV3ICYmIGNsaXBSZWN0cy5maXhlZCgp
ICYmIHJvb3RMYXllci0+cmVuZGVyZXIoKSA9PSB2aWV3KSB7Ci0gICAgICAgICAgICB4IC09IHZp
ZXctPmZyYW1lVmlldygpLT5zY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpOwotICAgICAgICAgICAg
eSAtPSB2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIG9mZnNldCAtPSB2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQ
b3NpdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAocmVuZGVyZXIoKS0+
aGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgbmV3T3ZlcmZsb3dDbGlw
ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3QoeCwgeSwgcmVsZXZh
bmN5KTsKKyAgICAgICAgICAgIEludFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gdG9SZW5kZXJCb3go
cmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgcmVs
ZXZhbmN5KTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0KGludGVy
c2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsK
ICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJlcigp
LT5pc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xp
cFJlY3QoaW50ZXJzZWN0aW9uKG5ld092ZXJmbG93Q2xpcCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0
KCkpKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVuZGVyZXIoKS0+aGFzQ2xpcCgpKSB7Ci0g
ICAgICAgICAgICBJbnRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+
Y2xpcFJlY3QoeCwgeSk7CisgICAgICAgICAgICBJbnRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRl
ckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3Qob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CiAgICAg
ICAgICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld1Bvc0NsaXAs
IGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0T3Zl
cmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwgY2xpcFJlY3RzLm92ZXJmbG93
Q2xpcFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldEZpeGVkQ2xpcFJlY3QoaW50
ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5maXhlZENsaXBSZWN0KCkpKTsKQEAgLTM0
NDcsMTkgKzM0MjUsMTggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3Qg
UgogICAgIGZvcmVncm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAgICAgb3V0bGluZVJlY3Qg
PSBiYWNrZ3JvdW5kUmVjdDsKICAgICAKLSAgICBpbnQgeCA9IDA7Ci0gICAgaW50IHkgPSAwOwot
ICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgeCwgeSk7Ci0gICAgbGF5ZXJCb3Vu
ZHMgPSBJbnRSZWN0KEludFBvaW50KHgsIHkpLCBzaXplKCkpOworICAgIEludFBvaW50IG9mZnNl
dDsKKyAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldCk7CisgICAgbGF5
ZXJCb3VuZHMgPSBJbnRSZWN0KG9mZnNldCwgc2l6ZSgpKTsKICAgICAKICAgICAvLyBVcGRhdGUg
dGhlIGNsaXAgcmVjdHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBsYXllcnMuCiAgICAg
aWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPmhhc0NsaXAo
KSkgewogICAgICAgICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtp
bmQuCiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAg
ICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+b3Zl
cmZsb3dDbGlwUmVjdCh4LCB5LCByZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGZvcmVncm91bmRS
ZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+b3ZlcmZsb3dDbGlwUmVjdChv
ZmZzZXQueCgpLCBvZmZzZXQueSgpLCByZWxldmFuY3kpKTsKICAgICAgICAgaWYgKHJlbmRlcmVy
KCktPmhhc0NsaXAoKSkgewogICAgICAgICAgICAgLy8gQ2xpcCBhcHBsaWVzIHRvICp1cyogYXMg
d2VsbCwgc28gZ28gYWhlYWQgYW5kIHVwZGF0ZSB0aGUgZGFtYWdlUmVjdC4KLSAgICAgICAgICAg
IEludFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jbGlwUmVjdCh4
LCB5KTsKKyAgICAgICAgICAgIEludFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLT5jbGlwUmVjdChvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKICAgICAgICAgICAgIGJh
Y2tncm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIGZvcmVncm91
bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIG91dGxpbmVSZWN0Lmlu
dGVyc2VjdChuZXdQb3NDbGlwKTsKQEAgLTM2MTMsOSArMzU5MCw5IEBAIEludFJlY3QgUmVuZGVy
TGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFIKICAgICAgICAgcmVuZGVyQm94KCktPmZsaXBGb3JX
cml0aW5nTW9kZShyZXN1bHQpOwogICAgIGVsc2UKICAgICAgICAgcmVuZGVyZXIoKS0+Y29udGFp
bmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXN1bHQpOwotICAgIGludCBkZWx0YVgg
PSAwLCBkZWx0YVkgPSAwOwotICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIs
IGRlbHRhWCwgZGVsdGFZKTsKLSAgICByZXN1bHQubW92ZShkZWx0YVgsIGRlbHRhWSk7CisgICAg
SW50UG9pbnQgZGVsdGE7CisgICAgY29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwg
ZGVsdGEpOworICAgIHJlc3VsdC5tb3ZlKGRlbHRhKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0zOTUwLDEwICszOTI3LDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRz
UmVwYWludAogICAgICAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gcmVwYWludCB0aGUgcGxhY2Vo
b2xkZXIgZG9jdW1lbnQgbGF5ZXIsIHByb3BhZ2F0ZSB0aGUKICAgICAgICAgLy8gcmVwYWludCB0
byB0aGUgbmF0aXZlIHZpZXcgc3lzdGVtLgogICAgICAgICBJbnRSZWN0IGFic1JlY3Qocik7Ci0g
ICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgaW50IHkgPSAwOwotICAgICAgICBjb252ZXJ0VG9M
YXllckNvb3Jkcyhyb290KCksIHgsIHkpOwotICAgICAgICBhYnNSZWN0Lm1vdmUoeCwgeSk7Cisg
ICAgICAgIEludFBvaW50IGRlbHRhOworICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290
KCksIGRlbHRhKTsKKyAgICAgICAgYWJzUmVjdC5tb3ZlKGRlbHRhKTsKIAogICAgICAgICBSZW5k
ZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOwogICAgICAgICBpZiAodmlldykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA4NzgyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDcsNyArMzQ3LDcgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBhbmNlc3RvckNv
bXBvc2l0aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVy
KGZhbHNlKTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBpbnQmIHgsIGludCYgeSkgY29uc3Q7CisgICAg
dm9pZCBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
ciwgSW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdDsKIAogICAgIGJvb2wgaGFzQXV0b1pJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0F1dG9aSW5kZXgoKTsgfQog
ICAgIGludCB6SW5kZXgoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT56SW5k
ZXgoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAJKHJldmlzaW9uIDg3ODI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMywxMCArMjAzLDkg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZQogICAgICAgICBpZiAo
bV9vd25pbmdMYXllciAhPSByb290TGF5ZXIpCiAgICAgICAgICAgICBjbGlwcGluZ0JvdW5kcy5p
bnRlcnNlY3QobV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXllciwgdHJ1
ZSkpOwogCi0gICAgICAgIGludCBkZWx0YVggPSAwOwotICAgICAgICBpbnQgZGVsdGFZID0gMDsK
LSAgICAgICAgbV9vd25pbmdMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBk
ZWx0YVgsIGRlbHRhWSk7Ci0gICAgICAgIGNsaXBwaW5nQm91bmRzLm1vdmUoLWRlbHRhWCwgLWRl
bHRhWSk7CisgICAgICAgIEludFBvaW50IGRlbHRhOworICAgICAgICBtX293bmluZ0xheWVyLT5j
b252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKKyAgICAgICAgY2xpcHBpbmdC
b3VuZHMubW92ZSgtZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKIAogICAgICAgICBsYXllckJvdW5k
cy5pbnRlcnNlY3QoY2xpcHBpbmdCb3VuZHMpOwogICAgIH0KQEAgLTM1Niw5ICszNTUsOSBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgSW50UmVjdCBsb2Nh
bENvbXBvc2l0aW5nQm91bmRzID0gY29tcG9zaXRlZEJvdW5kcygpOwogCiAgICAgSW50UmVjdCBy
ZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOwotICAgIGlu
dCBkZWx0YVggPSAwLCBkZWx0YVkgPSAwOwotICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xh
eWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGFYLCBkZWx0YVkpOwotICAgIHJlbGF0aXZlQ29t
cG9zaXRpbmdCb3VuZHMubW92ZShkZWx0YVgsIGRlbHRhWSk7CisgICAgSW50UG9pbnQgZGVsdGE7
CisgICAgbV9vd25pbmdMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMoY29tcEFuY2VzdG9yLCBk
ZWx0YSk7CisgICAgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5tb3ZlKGRlbHRhKTsKIAogICAg
IEludFBvaW50IGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbjsKICAgICBpZiAoY29tcEFuY2Vz
dG9yICYmIGNvbXBBbmNlc3Rvci0+YmFja2luZygpLT5oYXNDbGlwcGluZ0xheWVyKCkpIHsKQEAg
LTM3OSw4ICszNzgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NM
CiAgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRTaXplKHBhcmVudENsaXBSZWN0
LnNpemUoKSk7CiAKICAgICAgICAgLy8gYmFja2dyb3VuZFJlY3QgaXMgcmVsYXRpdmUgdG8gY29t
cEFuY2VzdG9yLCBzbyBzdWJ0cmFjdCBkZWx0YVgvZGVsdGFZIHRvIGdldCBiYWNrIHRvIGxvY2Fs
IGNvb3Jkcy4KLSAgICAgICAgSW50U2l6ZSByZW5kZXJlck9mZnNldChwYXJlbnRDbGlwUmVjdC5s
b2NhdGlvbigpLngoKSAtIGRlbHRhWCwgcGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKS55KCkgLSBk
ZWx0YVkpOwotICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0T2Zmc2V0RnJvbVJl
bmRlcmVyKHJlbmRlcmVyT2Zmc2V0KTsKKyAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXIt
PnNldE9mZnNldEZyb21SZW5kZXJlcihwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZGVsdGEp
OwogCiAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGxheWVyIGlzIHRoZW4gcGFyZW50ZWQgaW4sIGFu
ZCBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvIHRoaXMgY2xpcHBpbmcgbGF5ZXIuCiAgICAgICAgIGdy
YXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbiA9IHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCk7CkBA
IC00MjcsNyArNDI1LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNz
TAogICAgICAgICBjb25zdCBJbnRSZWN0IGJvcmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVy
KCkpLT5ib3JkZXJCb3hSZWN0KCk7CiAKICAgICAgICAgLy8gR2V0IGxheW91dCBib3VuZHMgaW4g
dGhlIGNvb3JkcyBvZiBjb21wQW5jZXN0b3IgdG8gbWF0Y2ggcmVsYXRpdmVDb21wb3NpdGluZ0Jv
dW5kcy4KLSAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoZGVsdGFYLCBkZWx0
YVksIGJvcmRlckJveC53aWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkpOworICAgICAgICBJbnRS
ZWN0IGxheWVyQm91bmRzID0gSW50UmVjdChkZWx0YSwgYm9yZGVyQm94LnNpemUoKSk7CiAKICAg
ICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBkZXBlbmQgb24gbGF5ZXIgZGltZW5zaW9u
cwogICAgICAgICBGbG9hdFBvaW50M0QgdHJhbnNmb3JtT3JpZ2luID0gY29tcHV0ZVRyYW5zZm9y
bU9yaWdpbihib3JkZXJCb3gpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDg3ODI4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0OSw5ICs0NDksOSBAQCBJbnRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2Fs
Y3VsYXRlCiAgICAgSW50UmVjdCB1bmlvbkJvdW5kcyA9IGJvdW5kaW5nQm94UmVjdDsKICAgICAK
ICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IGxheWVyLT5y
ZW5kZXJlcigpLT5oYXNNYXNrKCkpIHsKLSAgICAgICAgaW50IGFuY2VzdG9yUmVsWCA9IDAsIGFu
Y2VzdG9yUmVsWSA9IDA7Ci0gICAgICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNl
c3RvckxheWVyLCBhbmNlc3RvclJlbFgsIGFuY2VzdG9yUmVsWSk7Ci0gICAgICAgIGJvdW5kaW5n
Qm94UmVjdC5tb3ZlKGFuY2VzdG9yUmVsWCwgYW5jZXN0b3JSZWxZKTsKKyAgICAgICAgSW50UG9p
bnQgYW5jZXN0b3JSZWxPZmZzZXQ7CisgICAgICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jk
cyhhbmNlc3RvckxheWVyLCBhbmNlc3RvclJlbE9mZnNldCk7CisgICAgICAgIGJvdW5kaW5nQm94
UmVjdC5tb3ZlKGFuY2VzdG9yUmVsT2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94
UmVjdDsKICAgICB9CiAKQEAgLTUwMyw5ICs1MDMsOSBAQCBJbnRSZWN0IFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y2FsY3VsYXRlCiAgICAgICAgIHVuaW9uQm91bmRzID0gYWZmaW5lVHJhbnMtPm1h
cFJlY3QodW5pb25Cb3VuZHMpOwogICAgIH0KIAotICAgIGludCBhbmNlc3RvclJlbFggPSAwLCBh
bmNlc3RvclJlbFkgPSAwOwotICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3Rv
ckxheWVyLCBhbmNlc3RvclJlbFgsIGFuY2VzdG9yUmVsWSk7Ci0gICAgdW5pb25Cb3VuZHMubW92
ZShhbmNlc3RvclJlbFgsIGFuY2VzdG9yUmVsWSk7CisgICAgSW50UG9pbnQgYW5jZXN0b3JSZWxP
ZmZzZXQ7CisgICAgbGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGFu
Y2VzdG9yUmVsT2Zmc2V0KTsKKyAgICB1bmlvbkJvdW5kcy5tb3ZlKGFuY2VzdG9yUmVsT2Zmc2V0
KTsKIAogICAgIHJldHVybiB1bmlvbkJvdW5kczsKIH0KQEAgLTUyNyw5ICs1MjcsOSBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVSCiAgICAgICAgIEFTU0VSVChjb21w
TGF5ZXItPmJhY2tpbmcoKSk7CiAgICAgICAgIEludFJlY3QgY29tcEJvdW5kcyA9IGNoaWxkLT5i
YWNraW5nKCktPmNvbXBvc2l0ZWRCb3VuZHMoKTsKIAotICAgICAgICBpbnQgb2Zmc2V0WCA9IDAs
IG9mZnNldFkgPSAwOwotICAgICAgICBjaGlsZC0+Y29udmVydFRvTGF5ZXJDb29yZHMoY29tcExh
eWVyLCBvZmZzZXRYLCBvZmZzZXRZKTsKLSAgICAgICAgY29tcEJvdW5kcy5tb3ZlKG9mZnNldFgs
IG9mZnNldFkpOworICAgICAgICBJbnRQb2ludCBvZmZzZXQ7CisgICAgICAgIGNoaWxkLT5jb252
ZXJ0VG9MYXllckNvb3Jkcyhjb21wTGF5ZXIsIG9mZnNldCk7CisgICAgICAgIGNvbXBCb3VuZHMu
bW92ZShvZmZzZXQpOwogCiAgICAgICAgIGNvbXBMYXllci0+c2V0QmFja2luZ05lZWRzUmVwYWlu
dEluUmVjdChjb21wQm91bmRzKTsKIApAQCAtMTA3MSwxMSArMTA3MSwxMCBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVjdXJzaXZlUmVwCiAgICAgICAgICAgICBzaXplX3QgbGlzdFNp
emUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogY3Vy
TGF5ZXIgPSBuZWdaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IDA7
Ci0gICAgICAgICAgICAgICAgaW50IHkgPSAwOwotICAgICAgICAgICAgICAgIGN1ckxheWVyLT5j
b252ZXJ0VG9MYXllckNvb3JkcyhsYXllciwgeCwgeSk7CisgICAgICAgICAgICAgICAgSW50UG9p
bnQgZGVsdGE7CisgICAgICAgICAgICAgICAgY3VyTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRz
KGxheWVyLCBkZWx0YSk7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBjaGlsZFJlY3QocmVjdCk7
Ci0gICAgICAgICAgICAgICAgY2hpbGRSZWN0Lm1vdmUoLXgsIC15KTsKKyAgICAgICAgICAgICAg
ICBjaGlsZFJlY3QubW92ZSgtZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKICAgICAgICAgICAgICAg
ICByZWN1cnNpdmVSZXBhaW50TGF5ZXJSZWN0KGN1ckxheWVyLCBjaGlsZFJlY3QpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xMDg0LDExICsxMDgzLDEwIEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZWN1cnNpdmVSZXAKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9
IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdFNpemU7ICsraSkgewogICAgICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXll
ciA9IHBvc1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAgIGludCB4ID0gMDsKLSAg
ICAgICAgICAgICAgICBpbnQgeSA9IDA7Ci0gICAgICAgICAgICAgICAgY3VyTGF5ZXItPmNvbnZl
cnRUb0xheWVyQ29vcmRzKGxheWVyLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBJbnRQb2ludCBk
ZWx0YTsKKyAgICAgICAgICAgICAgICBjdXJMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMobGF5
ZXIsIGRlbHRhKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGNoaWxkUmVjdChyZWN0KTsKLSAg
ICAgICAgICAgICAgICBjaGlsZFJlY3QubW92ZSgteCwgLXkpOworICAgICAgICAgICAgICAgIGNo
aWxkUmVjdC5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwogICAgICAgICAgICAgICAgIHJl
Y3Vyc2l2ZVJlcGFpbnRMYXllclJlY3QoY3VyTGF5ZXIsIGNoaWxkUmVjdCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTEwOTcsMTEgKzEwOTUsMTAgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlY3Vyc2l2ZVJlcAogICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBub3JtYWxG
bG93TGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXpl
OyArK2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5vcm1hbEZsb3dM
aXN0LT5hdChpKTsKLSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgIGludCB5ID0g
MDsKLSAgICAgICAgICAgIGN1ckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhsYXllciwgeCwg
eSk7CisgICAgICAgICAgICBJbnRQb2ludCBkZWx0YTsKKyAgICAgICAgICAgIGN1ckxheWVyLT5j
b252ZXJ0VG9MYXllckNvb3JkcyhsYXllciwgZGVsdGEpOwogICAgICAgICAgICAgSW50UmVjdCBj
aGlsZFJlY3QocmVjdCk7Ci0gICAgICAgICAgICBjaGlsZFJlY3QubW92ZSgteCwgLXkpOworICAg
ICAgICAgICAgY2hpbGRSZWN0Lm1vdmUoLWRlbHRhLngoKSwgLWRlbHRhLnkoKSk7CiAgICAgICAg
ICAgICByZWN1cnNpdmVSZXBhaW50TGF5ZXJSZWN0KGN1ckxheWVyLCBjaGlsZFJlY3QpOwogICAg
ICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95647</attachid>
            <date>2011-06-01 13:30:25 -0700</date>
            <delta_ts>2011-06-01 23:41:31 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-61818-20110601133024.patch</filename>
            <type>text/plain</type>
            <size>25310</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3ODM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDYtMDEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMg
dG8gdXNlIEludFBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MTgxOAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpmbG9vcmVkSW50U2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc3BhcmVuY3lDbGlwQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6cGFpbnRDaGlsZExheWVySW50b0NvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Ym91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEJhY2tp
bmdOZWVkc1JlcGFpbnRJblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdl
b21ldHJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9z
aXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Omxh
eWVyV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlY3Vyc2l2ZVJlcGFpbnRMYXllclJlY3QpOgorCiAyMDExLTA2LTAxICBBbmRyYXMgQmVj
c2kgIDxhYmVjc2lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0
cm9nb27DoWMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCShyZXZpc2lvbiA4NzgyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKIGNsYXNzIEludFBvaW50OworY2xhc3MgSW50U2l6ZTsKIAogY2xhc3MgRmxv
YXRQb2ludCB7CiBwdWJsaWM6CkBAIC0yMDcsNiArMjA4LDExIEBAIGlubGluZSBJbnRQb2ludCBm
bG9vcmVkSW50UG9pbnQoY29uc3QgRmwKICAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8
aW50PihwLngoKSksIHN0YXRpY19jYXN0PGludD4ocC55KCkpKTsKIH0KIAoraW5saW5lIEludFNp
emUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICByZXR1cm4gSW50
U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOwor
fQorCiBmbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCYgYyk7CiAKIC8vIEZpbmQgcG9pbnQgd2hlcmUgbGluZXMgdGhyb3VnaCB0
aGUgdHdvIHBhaXJzIG9mIHBvaW50cyBpbnRlcnNlY3QuIFJldHVybnMgZmFsc2UgaWYgdGhlIGxp
bmVzIGRvbid0IGludGVyc2VjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkocmV2aXNpb24gODc4MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsMjkgKzI3NSwyNCBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhVCiAgICAgICAgICAgICBpZiAoIW1f
cGFyZW50IHx8IG1fcGFyZW50LT5yZW5kZXJlcigpID09IHJlbmRlcmVyKCktPmNvbnRhaW5pbmdC
bG9jaygpKQogICAgICAgICAgICAgICAgIGNhY2hlZE9mZnNldC0+bW92ZShtX3RvcExlZnQueCgp
LCBtX3RvcExlZnQueSgpKTsgLy8gRmFzdCBjYXNlCiAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IHkgPSAwOwotICAgICAg
ICAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3QoKSwgeCwgeSk7Ci0gICAgICAgICAg
ICAgICAgKmNhY2hlZE9mZnNldCA9IEludFBvaW50KHgsIHkpOworICAgICAgICAgICAgICAgIElu
dFBvaW50IG9mZnNldDsKKyAgICAgICAgICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290
KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgKmNhY2hlZE9mZnNldCA9IG9mZnNldDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGludCB4ID0gMDsKLSAgICBpbnQg
eSA9IDA7CisgICAgSW50UG9pbnQgb2Zmc2V0OwogICAgIGlmIChjYWNoZWRPZmZzZXQpIHsKLSAg
ICAgICAgeCArPSBjYWNoZWRPZmZzZXQtPngoKTsKLSAgICAgICAgeSArPSBjYWNoZWRPZmZzZXQt
PnkoKTsKKyAgICAgICAgb2Zmc2V0ID0gKmNhY2hlZE9mZnNldDsKICNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgIGludCBub25DYWNoZWRYID0gMDsKLSAgICAgICAgaW50IG5vbkNhY2hlZFkgPSAwOwot
ICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIG5vbkNhY2hlZFgsIG5vbkNhY2hl
ZFkpOwotICAgICAgICBBU1NFUlQoeCA9PSBub25DYWNoZWRYKTsKLSAgICAgICAgQVNTRVJUKHkg
PT0gbm9uQ2FjaGVkWSk7CisgICAgICAgIEludFBvaW50IG5vbkNhY2hlZE9mZnNldDsKKyAgICAg
ICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBub25DYWNoZWRPZmZzZXQpOworICAgICAg
ICBBU1NFUlQob2Zmc2V0ID09IG5vbkNhY2hlZE9mZnNldCk7CiAjZW5kaWYKICAgICB9IGVsc2UK
LSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCB4LCB5KTsKLSAgICBwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHMoSW50U2l6ZSh4LCB5KSk7CisgICAgICAgIGNvbnZlcnRUb0xheWVy
Q29vcmRzKHJvb3QoKSwgb2Zmc2V0KTsKKyAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9T
aXplKG9mZnNldCkpOwogCiAgICAgdXBkYXRlVmlzaWJpbGl0eVN0YXR1cygpOwogCkBAIC05MDEs
MTIgKzg5NiwxMSBAQCBzdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRzCiAg
ICAgLy8gRklYTUU6IEFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHdpbGwgZXZlbnR1YWxseSB3YW50
IHRvIGRvIHNvbWV0aGluZyBzbWFydCBoZXJlIHRvIGF2b2lkIGluY29ycG9yYXRpbmcgdGhpcwog
ICAgIC8vIHNpemUgaW50byB0aGUgcGFyZW50IGxheWVyLgogICAgIGlmIChsLT5yZW5kZXJlcigp
LT5oYXNSZWZsZWN0aW9uKCkpIHsKLSAgICAgICAgaW50IGRlbHRhWCA9IDA7Ci0gICAgICAgIGlu
dCBkZWx0YVkgPSAwOwotICAgICAgICBsLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIs
IGRlbHRhWCwgZGVsdGFZKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZSgtZGVsdGFYLCAtZGVsdGFZ
KTsKKyAgICAgICAgSW50UG9pbnQgZGVsdGE7CisgICAgICAgIGwtPmNvbnZlcnRUb0xheWVyQ29v
cmRzKHJvb3RMYXllciwgZGVsdGEpOworICAgICAgICBjbGlwUmVjdC5tb3ZlKC1kZWx0YS54KCks
IC1kZWx0YS55KCkpOwogICAgICAgICBjbGlwUmVjdC51bml0ZShsLT5yZW5kZXJCb3goKS0+cmVm
bGVjdGVkUmVjdChjbGlwUmVjdCkpOwotICAgICAgICBjbGlwUmVjdC5tb3ZlKGRlbHRhWCwgZGVs
dGFZKTsKKyAgICAgICAgY2xpcFJlY3QubW92ZShkZWx0YSk7CiAgICAgfQogfQogCkBAIC05MTks
MTIgKzkxMywxMSBAQCBzdGF0aWMgSW50UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94KGNvbnN0CiAg
ICAgaWYgKHJvb3RMYXllciAhPSBsICYmIGwtPnBhaW50c1dpdGhUcmFuc2Zvcm0ocGFpbnRCZWhh
dmlvcikpIHsKICAgICAgICAgLy8gVGhlIGJlc3Qgd2UgY2FuIGRvIGhlcmUgaXMgdG8gdXNlIGVu
Y2xvc2VkIGJvdW5kaW5nIGJveGVzIHRvIGVzdGFibGlzaCBhICJmdXp6eSIgZW5vdWdoIGNsaXAg
dG8gZW5jb21wYXNzCiAgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm1lZCBsYXllciBhbmQgYWxsIG9m
IGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaW50IHggPSAwOwotICAgICAgICBpbnQgeSA9IDA7Ci0g
ICAgICAgIGwtPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgeCwgeSk7CisgICAgICAg
IEludFBvaW50IGRlbHRhOworICAgICAgICBsLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5
ZXIsIGRlbHRhKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0g
ICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoeCwgeSk7CisgICAgICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUoZGVsdGEueCgpLCBkZWx0YS55KCkpOwogICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zv
cm0gKiAqbC0+dHJhbnNmb3JtKCk7CiAKICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IGwtPmJv
dW5kaW5nQm94KGwpOwpAQCAtMTExMiw3ICsxMTA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6aW5z
ZXJ0T25seVRoaXNMYXllcigpCiB9CiAKIHZvaWQgCi1SZW5kZXJMYXllcjo6Y29udmVydFRvTGF5
ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGludCYgeFBvcywgaW50
JiB5UG9zKSBjb25zdAorUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IFJl
bmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBJbnRQb2ludCYgbG9jYXRpb24pIGNvbnN0CiB7CiAg
ICAgaWYgKGFuY2VzdG9yTGF5ZXIgPT0gdGhpcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTEyMiw4
ICsxMTE1LDcgQEAgUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAogICAg
ICAgICAvLyBJZiB0aGUgZml4ZWQgbGF5ZXIncyBjb250YWluZXIgaXMgdGhlIHJvb3QsIGp1c3Qg
YWRkIGluIHRoZSBvZmZzZXQgb2YgdGhlIHZpZXcuIFdlIGNhbiBvYnRhaW4gdGhpcyBieSBjYWxs
aW5nCiAgICAgICAgIC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3LgogICAg
ICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShGbG9h
dFBvaW50KCksIHRydWUpOwotICAgICAgICB4UG9zICs9IGFic1Bvcy54KCk7Ci0gICAgICAgIHlQ
b3MgKz0gYWJzUG9zLnkoKTsKKyAgICAgICAgbG9jYXRpb24gKz0gZmxvb3JlZEludFNpemUoYWJz
UG9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAKQEAgLTExNDcsMTYgKzExMzksMTMgQEAg
UmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAogICAgICAgICBBU1NFUlQo
Zml4ZWRQb3NpdGlvbkNvbnRhaW5lckxheWVyKTsgLy8gV2Ugc2hvdWxkIGhhdmUgaGl0IHRoZSBS
ZW5kZXJWaWV3J3MgbGF5ZXIgYXQgbGVhc3QuCiAKICAgICAgICAgaWYgKGZpeGVkUG9zaXRpb25D
b250YWluZXJMYXllciAhPSBhbmNlc3RvckxheWVyKSB7Ci0gICAgICAgICAgICBpbnQgZml4ZWRD
b250YWluZXJYID0gMDsKLSAgICAgICAgICAgIGludCBmaXhlZENvbnRhaW5lclkgPSAwOwotICAg
ICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMoZml4ZWRQb3NpdGlvbkNvbnRhaW5lckxheWVy
LCBmaXhlZENvbnRhaW5lclgsIGZpeGVkQ29udGFpbmVyWSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGludCBhbmNlc3RvclggPSAwOwotICAgICAgICAgICAgaW50IGFuY2VzdG9yWSA9IDA7
Ci0gICAgICAgICAgICBhbmNlc3RvckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhmaXhlZFBv
c2l0aW9uQ29udGFpbmVyTGF5ZXIsIGFuY2VzdG9yWCwgYW5jZXN0b3JZKTsKLSAgICAgICAgCi0g
ICAgICAgICAgICB4UG9zICs9IChmaXhlZENvbnRhaW5lclggLSBhbmNlc3RvclgpOwotICAgICAg
ICAgICAgeVBvcyArPSAoZml4ZWRDb250YWluZXJZIC0gYW5jZXN0b3JZKTsKKyAgICAgICAgICAg
IEludFBvaW50IGZpeGVkQ29udGFpbmVyQ29vcmRzOworICAgICAgICAgICAgY29udmVydFRvTGF5
ZXJDb29yZHMoZml4ZWRQb3NpdGlvbkNvbnRhaW5lckxheWVyLCBmaXhlZENvbnRhaW5lckNvb3Jk
cyk7CisKKyAgICAgICAgICAgIEludFBvaW50IGFuY2VzdG9yQ29vcmRzOworICAgICAgICAgICAg
YW5jZXN0b3JMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMoZml4ZWRQb3NpdGlvbkNvbnRhaW5l
ckxheWVyLCBhbmNlc3RvckNvb3Jkcyk7CisKKyAgICAgICAgICAgIGxvY2F0aW9uICs9IChmaXhl
ZENvbnRhaW5lckNvb3JkcyAtIGFuY2VzdG9yQ29vcmRzKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KQEAgLTExODMsMTYgKzExNzIsMTMgQEAgUmVuZGVyTGF5ZXI6OmNv
bnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IAogICAgICAgICAgICAgLy8gdG8gZW5jbG9zaW5nUG9z
aXRpb25lZEFuY2VzdG9yIGFuZCBzdWJ0cmFjdC4KICAgICAgICAgICAgIFJlbmRlckxheWVyKiBw
b3NpdGlvbmVkQW5jZXN0b3IgPSBwYXJlbnRMYXllci0+ZW5jbG9zaW5nUG9zaXRpb25lZEFuY2Vz
dG9yKCk7CiAKLSAgICAgICAgICAgIGludCB0aGlzWCA9IDA7Ci0gICAgICAgICAgICBpbnQgdGhp
c1kgPSAwOwotICAgICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocG9zaXRpb25lZEFuY2Vz
dG9yLCB0aGlzWCwgdGhpc1kpOworICAgICAgICAgICAgSW50UG9pbnQgdGhpc0Nvb3JkczsKKyAg
ICAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHBvc2l0aW9uZWRBbmNlc3RvciwgdGhpc0Nv
b3Jkcyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBhbmNlc3RvclggPSAwOwotICAg
ICAgICAgICAgaW50IGFuY2VzdG9yWSA9IDA7Ci0gICAgICAgICAgICBhbmNlc3RvckxheWVyLT5j
b252ZXJ0VG9MYXllckNvb3Jkcyhwb3NpdGlvbmVkQW5jZXN0b3IsIGFuY2VzdG9yWCwgYW5jZXN0
b3JZKTsKLSAgICAgICAgCi0gICAgICAgICAgICB4UG9zICs9ICh0aGlzWCAtIGFuY2VzdG9yWCk7
Ci0gICAgICAgICAgICB5UG9zICs9ICh0aGlzWSAtIGFuY2VzdG9yWSk7CisgICAgICAgICAgICBJ
bnRQb2ludCBhbmNlc3RvckNvb3JkczsKKyAgICAgICAgICAgIGFuY2VzdG9yTGF5ZXItPmNvbnZl
cnRUb0xheWVyQ29vcmRzKHBvc2l0aW9uZWRBbmNlc3RvciwgYW5jZXN0b3JDb29yZHMpOworCisg
ICAgICAgICAgICBsb2NhdGlvbiArPSAodGhpc0Nvb3JkcyAtIGFuY2VzdG9yQ29vcmRzKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtMTIwMCwxMSArMTE4
NiwxOCBAQCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMoY29uc3QgCiAgICAgCiAg
ICAgaWYgKCFwYXJlbnRMYXllcikKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHBhcmVudExh
eWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCB4UG9zLCB5UG9zKTsKIAot
ICAgIHhQb3MgKz0gbV90b3BMZWZ0LngoKTsKLSAgICB5UG9zICs9IG1fdG9wTGVmdC55KCk7Cisg
ICAgcGFyZW50TGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGxvY2F0
aW9uKTsKKworICAgIGxvY2F0aW9uICs9IHRvU2l6ZShtX3RvcExlZnQpOworfQorCit2b2lkCitS
ZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2Vz
dG9yTGF5ZXIsIEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgZGVsdGE7Cisg
ICAgY29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgZGVsdGEpOworICAgIHJlY3Qu
bW92ZSgtZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYWRq
dXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpIHsKQEAgLTI1NzQsMTEgKzI1Njcs
MTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllcgogCiAgICAgICAg
IC8vIEFkanVzdCB0aGUgdHJhbnNmb3JtIHN1Y2ggdGhhdCB0aGUgcmVuZGVyZXIncyB1cHBlciBs
ZWZ0IGNvcm5lciB3aWxsIHBhaW50IGF0ICgwLDApIGluIHVzZXIgc3BhY2UuCiAgICAgICAgIC8v
IFRoaXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIg
aW4gb3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgaW50IHggPSAwOwotICAg
ICAgICBpbnQgeSA9IDA7Ci0gICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwg
eCwgeSk7CisgICAgICAgIEludFBvaW50IGRlbHRhOworICAgICAgICBjb252ZXJ0VG9MYXllckNv
b3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtKGxheWVyVHJhbnNmb3JtKTsKLSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0
KHgsIHkpOworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQoZGVsdGEueCgpLCBkZWx0
YS55KCkpOwogICAgICAgICAKICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybS4KICAgICAg
ICAgewpAQCAtMjc2OCw5ICsyNzYwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExh
eWVySW50b0NvbAogICAgIGlmICghY29sdW1uQmxvY2sgfHwgIWNvbHVtbkJsb2NrLT5oYXNDb2x1
bW5zKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbnQgbGF5ZXJYID0gMDsKLSAgICBp
bnQgbGF5ZXJZID0gMDsKLSAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJD
b29yZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CisgICAgSW50UG9pbnQgbGF5ZXJPZmZz
ZXQ7CisgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RM
YXllciwgbGF5ZXJPZmZzZXQpOwogICAgIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gY29sdW1u
QmxvY2stPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAKQEAgLTI3ODQsNyAr
Mjc3NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICAg
ICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gKGlzSG9yaXpvbnRhbCA/IGNvbFJlY3QueCgpIDog
Y29sUmVjdC55KCkpIC0gY29sdW1uQmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
OwogICAgICAgICBJbnRTaXplIG9mZnNldCA9IGlzSG9yaXpvbnRhbCA/IEludFNpemUobG9naWNh
bExlZnRPZmZzZXQsIGN1cnJMb2dpY2FsVG9wT2Zmc2V0KSA6IEludFNpemUoY3VyckxvZ2ljYWxU
b3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKIAotICAgICAgICBjb2xSZWN0Lm1vdmUobGF5
ZXJYLCBsYXllclkpOworICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJPZmZzZXQpOwogCiAgICAg
ICAgIEludFJlY3QgbG9jYWxEaXJ0eVJlY3QocGFpbnREaXJ0eVJlY3QpOwogICAgICAgICBsb2Nh
bERpcnR5UmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CkBAIC0yODE0LDExICsyODA1LDEwIEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSB0cmFuc2Zvcm0gc3VjaCB0aGF0IHRo
ZSByZW5kZXJlcidzIHVwcGVyIGxlZnQgY29ybmVyIHdpbGwgcGFpbnQgYXQgKDAsMCkgaW4gdXNl
ciBzcGFjZS4KICAgICAgICAgICAgICAgICAvLyBUaGlzIGludm9sdmVzIHN1YnRyYWN0aW5nIG91
dCB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91ciBjdXJyZW50IGNvb3JkaW5hdGUgc3Bh
Y2UuCi0gICAgICAgICAgICAgICAgaW50IGNoaWxkWCA9IDA7Ci0gICAgICAgICAgICAgICAgaW50
IGNoaWxkWSA9IDA7Ci0gICAgICAgICAgICAgICAgY29sdW1uTGF5ZXJzW2NvbEluZGV4IC0gMV0t
PmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgY2hpbGRYLCBjaGlsZFkpOworICAgICAg
ICAgICAgICAgIEludFBvaW50IGNoaWxkT2Zmc2V0OworICAgICAgICAgICAgICAgIGNvbHVtbkxh
eWVyc1tjb2xJbmRleCAtIDFdLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGNoaWxk
T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07
Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGNoaWxkWCArIG9mZnNl
dC53aWR0aCgpLCBjaGlsZFkgKyBvZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHRy
YW5zZm9ybS50cmFuc2xhdGVSaWdodChjaGlsZE9mZnNldC54KCkgKyBvZmZzZXQud2lkdGgoKSwg
Y2hpbGRPZmZzZXQueSgpICsgb2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtLgogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKSk7CkBAIC0yOTEy
LDI2ICsyOTAyLDI1IEBAIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBSZW4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIFJl
ZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOwotICAgIGludCBv
ZmZzZXRYID0gMDsKLSAgICBpbnQgb2Zmc2V0WSA9IDA7CisgICAgSW50UG9pbnQgb2Zmc2V0Owog
ICAgIGlmIChjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSkgewogICAgICAgICAvLyBJZiB3ZSdyZSBh
bHJlYWR5IGNvbXB1dGluZyB0cmFuc2Zvcm0gc3RhdGUsIHRoZW4gaXQncyByZWxhdGl2ZSB0byB0
aGUgY29udGFpbmVyICh3aGljaCB3ZSBrbm93IGlzIG5vbi1udWxsKS4KICAgICAgICAgdHJhbnNm
b3JtU3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZSgqY29udGFpbmVyVHJh
bnNmb3JtU3RhdGUpOwotICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb250YWluZXJMYXll
ciwgb2Zmc2V0WCwgb2Zmc2V0WSk7CisgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnRh
aW5lckxheWVyLCBvZmZzZXQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHRoaXMgaXMg
dGhlIGZpcnN0IHRpbWUgd2UgbmVlZCB0byBtYWtlIHRyYW5zZm9ybSBzdGF0ZSwgdGhlbiBiYXNl
IGl0IG9mZiBvZiBoaXRUZXN0UG9pbnQsCiAgICAgICAgIC8vIHdoaWNoIGlzIHJlbGF0aXZlIHRv
IHJvb3RMYXllci4KICAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGU6OmNyZWF0ZShoaXRUZXN0UG9pbnQsIEZsb2F0UXVhZChoaXRUZXN0UmVjdCkpOwotICAg
ICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldFgsIG9mZnNldFkpOwor
ICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldCk7CiAgICAgfQog
ICAgIAogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXJMYXll
ciA/IGNvbnRhaW5lckxheWVyLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAocmVuZGVyZXIoKS0+
c2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXJSZW5kZXJlcikpIHsKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGFpbmVyVHJhbnNmb3JtOwotICAgICAgICBy
ZW5kZXJlcigpLT5nZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lclJlbmRlcmVyLCBJ
bnRTaXplKG9mZnNldFgsIG9mZnNldFkpLCBjb250YWluZXJUcmFuc2Zvcm0pOworICAgICAgICBy
ZW5kZXJlcigpLT5nZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lclJlbmRlcmVyLCB0
b1NpemUob2Zmc2V0KSwgY29udGFpbmVyVHJhbnNmb3JtKTsKICAgICAgICAgdHJhbnNmb3JtU3Rh
dGUtPmFwcGx5VHJhbnNmb3JtKGNvbnRhaW5lclRyYW5zZm9ybSwgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICB9IGVsc2UgewotICAgICAgICB0cmFu
c2Zvcm1TdGF0ZS0+dHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFksIEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLT50
cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
OjpBY2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYW5zZm9y
bVN0YXRlOwpAQCAtMzI0MCwxMCArMzIyOSw5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdENoaWxkTGEKICAgICBBU1NFUlQoY29sdW1uQmxvY2sgJiYgY29sdW1uQmxvY2stPmhh
c0NvbHVtbnMoKSk7CiAgICAgaWYgKCFjb2x1bW5CbG9jayB8fCAhY29sdW1uQmxvY2stPmhhc0Nv
bHVtbnMoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaW50IGxheWVyWCA9IDA7Ci0g
ICAgaW50IGxheWVyWSA9IDA7Ci0gICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xh
eWVyQ29vcmRzKHJvb3RMYXllciwgbGF5ZXJYLCBsYXllclkpOworCisgICAgSW50UG9pbnQgbGF5
ZXJPZmZzZXQ7CisgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRz
KHJvb3RMYXllciwgbGF5ZXJPZmZzZXQpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8g
PSBjb2x1bW5CbG9jay0+Y29sdW1uSW5mbygpOwogICAgIGludCBjb2xDb3VudCA9IGNvbHVtbkJs
b2NrLT5jb2x1bW5Db3VudChjb2xJbmZvKTsKQEAgLTMyNzEsNyArMzI1OSw3IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGEKICAgICAgICAgICAgIGN1cnJMb2dpY2Fs
VG9wT2Zmc2V0IC09IGJsb2NrRGVsdGE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGN1cnJM
b2dpY2FsVG9wT2Zmc2V0ICs9IGJsb2NrRGVsdGE7Ci0gICAgICAgIGNvbFJlY3QubW92ZShsYXll
clgsIGxheWVyWSk7CisgICAgICAgIGNvbFJlY3QubW92ZShsYXllck9mZnNldCk7CiAKICAgICAg
ICAgSW50UmVjdCBsb2NhbENsaXBSZWN0KGhpdFRlc3RSZWN0KTsKICAgICAgICAgbG9jYWxDbGlw
UmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CkBAIC0zMzgwLDI0ICszMzY4LDIyIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb24KICAgICAvLyBVcGRhdGUgdGhlIGNsaXAg
cmVjdHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBsYXllcnMuCiAgICAgaWYgKHJlbmRl
cmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPmhhc0NsaXAoKSkgewogICAg
ICAgICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtpbmQuCi0gICAg
ICAgIGludCB4ID0gMDsKLSAgICAgICAgaW50IHkgPSAwOwotICAgICAgICBjb252ZXJ0VG9MYXll
ckNvb3Jkcyhyb290TGF5ZXIsIHgsIHkpOworICAgICAgICBJbnRQb2ludCBvZmZzZXQ7CisgICAg
ICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgb2Zmc2V0KTsKICAgICAgICAgUmVu
ZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICAgICAgQVNTRVJUKHZpZXcp
OwogICAgICAgICBpZiAodmlldyAmJiBjbGlwUmVjdHMuZml4ZWQoKSAmJiByb290TGF5ZXItPnJl
bmRlcmVyKCkgPT0gdmlldykgewotICAgICAgICAgICAgeCAtPSB2aWV3LT5mcmFtZVZpZXcoKS0+
c2Nyb2xsWEZvckZpeGVkUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHkgLT0gdmlldy0+ZnJhbWVW
aWV3KCktPnNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBvZmZzZXQgLT0g
dmlldy0+ZnJhbWVWaWV3KCktPnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgp
KSB7Ci0gICAgICAgICAgICBJbnRSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJl
bmRlcmVyKCkpLT5vdmVyZmxvd0NsaXBSZWN0KHgsIHksIHJlbGV2YW5jeSk7CisgICAgICAgICAg
ICBJbnRSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVy
Zmxvd0NsaXBSZWN0KG9mZnNldC54KCksIG9mZnNldC55KCksIHJlbGV2YW5jeSk7CiAgICAgICAg
ICAgICBjbGlwUmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZs
b3dDbGlwLCBjbGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBpZiAo
cmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkgfHwgcmVuZGVyZXIoKS0+aXNSZWxQb3NpdGlvbmVk
KCkpCiAgICAgICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlv
bihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc0NsaXAoKSkgewotICAgICAgICAgICAgSW50UmVj
dCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNsaXBSZWN0KHgsIHkpOwor
ICAgICAgICAgICAgSW50UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkt
PmNsaXBSZWN0KG9mZnNldC54KCksIG9mZnNldC55KCkpOwogICAgICAgICAgICAgY2xpcFJlY3Rz
LnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMucG9zQ2xp
cFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50
ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsKICAg
ICAgICAgICAgIGNsaXBSZWN0cy5zZXRGaXhlZENsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3ND
bGlwLCBjbGlwUmVjdHMuZml4ZWRDbGlwUmVjdCgpKSk7CkBAIC0zNDQ3LDE5ICszNDMzLDE4IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFIKICAgICBmb3JlZ3JvdW5k
UmVjdCA9IGJhY2tncm91bmRSZWN0OwogICAgIG91dGxpbmVSZWN0ID0gYmFja2dyb3VuZFJlY3Q7
CiAgICAgCi0gICAgaW50IHggPSAwOwotICAgIGludCB5ID0gMDsKLSAgICBjb252ZXJ0VG9MYXll
ckNvb3Jkcyhyb290TGF5ZXIsIHgsIHkpOwotICAgIGxheWVyQm91bmRzID0gSW50UmVjdChJbnRQ
b2ludCh4LCB5KSwgc2l6ZSgpKTsKKyAgICBJbnRQb2ludCBvZmZzZXQ7CisgICAgY29udmVydFRv
TGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXQpOworICAgIGxheWVyQm91bmRzID0gSW50UmVj
dChvZmZzZXQsIHNpemUoKSk7CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBjbGlwIHJlY3RzIHRo
YXQgd2lsbCBiZSBwYXNzZWQgdG8gY2hpbGQgbGF5ZXJzLgogICAgIGlmIChyZW5kZXJlcigpLT5o
YXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLT5oYXNDbGlwKCkpIHsKICAgICAgICAgLy8g
VGhpcyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogICAgICAgICBpZiAo
cmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBmb3JlZ3JvdW5kUmVj
dC5pbnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3QoeCwg
eSwgcmVsZXZhbmN5KSk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QodG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LngoKSwgb2Zmc2V0
LnkoKSwgcmVsZXZhbmN5KSk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNDbGlwKCkpIHsK
ICAgICAgICAgICAgIC8vIENsaXAgYXBwbGllcyB0byAqdXMqIGFzIHdlbGwsIHNvIGdvIGFoZWFk
IGFuZCB1cGRhdGUgdGhlIGRhbWFnZVJlY3QuCi0gICAgICAgICAgICBJbnRSZWN0IG5ld1Bvc0Ns
aXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3QoeCwgeSk7CisgICAgICAgICAg
ICBJbnRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3Qo
b2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRl
cnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3Qo
bmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBvdXRsaW5lUmVjdC5pbnRlcnNlY3QobmV3UG9zQ2xp
cCk7CkBAIC0zNjEzLDkgKzM1OTgsOSBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpib3VuZGluZ0Jv
eChjb25zdCBSCiAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVzdWx0
KTsKICAgICBlbHNlCiAgICAgICAgIHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5mbGlw
Rm9yV3JpdGluZ01vZGUocmVzdWx0KTsKLSAgICBpbnQgZGVsdGFYID0gMCwgZGVsdGFZID0gMDsK
LSAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBkZWx0YVgsIGRlbHRhWSk7
Ci0gICAgcmVzdWx0Lm1vdmUoZGVsdGFYLCBkZWx0YVkpOworICAgIEludFBvaW50IGRlbHRhOwor
ICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGRlbHRhKTsKKyAgICByZXN1
bHQubW92ZShkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzk1MCwxMCArMzkz
NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNldEJhY2tpbmdOZWVkc1JlcGFpbnQKICAgICAgICAg
Ly8gSWYgd2UncmUgdHJ5aW5nIHRvIHJlcGFpbnQgdGhlIHBsYWNlaG9sZGVyIGRvY3VtZW50IGxh
eWVyLCBwcm9wYWdhdGUgdGhlCiAgICAgICAgIC8vIHJlcGFpbnQgdG8gdGhlIG5hdGl2ZSB2aWV3
IHN5c3RlbS4KICAgICAgICAgSW50UmVjdCBhYnNSZWN0KHIpOwotICAgICAgICBpbnQgeCA9IDA7
Ci0gICAgICAgIGludCB5ID0gMDsKLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgp
LCB4LCB5KTsKLSAgICAgICAgYWJzUmVjdC5tb3ZlKHgsIHkpOworICAgICAgICBJbnRQb2ludCBk
ZWx0YTsKKyAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCBkZWx0YSk7CisgICAg
ICAgIGFic1JlY3QubW92ZShkZWx0YSk7CiAKICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJl
bmRlcmVyKCktPnZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gODc4MjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw4
IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogYW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcihmYWxzZSk7IH0KICNlbmRp
ZgogCi0gICAgdm9pZCBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5j
ZXN0b3JMYXllciwgaW50JiB4LCBpbnQmIHkpIGNvbnN0OworICAgIHZvaWQgY29udmVydFRvTGF5
ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIEludFBvaW50JiBsb2Nh
dGlvbikgY29uc3Q7CisgICAgdm9pZCBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllciwgSW50UmVjdCYgcmVjdCkgY29uc3Q7CiAKICAgICBib29sIGhh
c0F1dG9aSW5kZXgoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBdXRv
WkluZGV4KCk7IH0KICAgICBpbnQgekluZGV4KCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+
c3R5bGUoKS0+ekluZGV4KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA4NzgyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDMsMTAgKzIwMyw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGUK
ICAgICAgICAgaWYgKG1fb3duaW5nTGF5ZXIgIT0gcm9vdExheWVyKQogICAgICAgICAgICAgY2xp
cHBpbmdCb3VuZHMuaW50ZXJzZWN0KG1fb3duaW5nTGF5ZXItPmJhY2tncm91bmRDbGlwUmVjdChy
b290TGF5ZXIsIHRydWUpKTsKIAotICAgICAgICBpbnQgZGVsdGFYID0gMDsKLSAgICAgICAgaW50
IGRlbHRhWSA9IDA7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRz
KHJvb3RMYXllciwgZGVsdGFYLCBkZWx0YVkpOwotICAgICAgICBjbGlwcGluZ0JvdW5kcy5tb3Zl
KC1kZWx0YVgsIC1kZWx0YVkpOworICAgICAgICBJbnRQb2ludCBkZWx0YTsKKyAgICAgICAgbV9v
d25pbmdMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBkZWx0YSk7CisgICAg
ICAgIGNsaXBwaW5nQm91bmRzLm1vdmUoLWRlbHRhLngoKSwgLWRlbHRhLnkoKSk7CiAKICAgICAg
ICAgbGF5ZXJCb3VuZHMuaW50ZXJzZWN0KGNsaXBwaW5nQm91bmRzKTsKICAgICB9CkBAIC0zNTYs
OSArMzU1LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAg
IEludFJlY3QgbG9jYWxDb21wb3NpdGluZ0JvdW5kcyA9IGNvbXBvc2l0ZWRCb3VuZHMoKTsKIAog
ICAgIEludFJlY3QgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcyhsb2NhbENvbXBvc2l0aW5nQm91
bmRzKTsKLSAgICBpbnQgZGVsdGFYID0gMCwgZGVsdGFZID0gMDsKLSAgICBtX293bmluZ0xheWVy
LT5jb252ZXJ0VG9MYXllckNvb3Jkcyhjb21wQW5jZXN0b3IsIGRlbHRhWCwgZGVsdGFZKTsKLSAg
ICByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLm1vdmUoZGVsdGFYLCBkZWx0YVkpOworICAgIElu
dFBvaW50IGRlbHRhOworICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGNv
bXBBbmNlc3RvciwgZGVsdGEpOworICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubW92ZShk
ZWx0YSk7CiAKICAgICBJbnRQb2ludCBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb247CiAgICAg
aWYgKGNvbXBBbmNlc3RvciAmJiBjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+aGFzQ2xpcHBpbmdM
YXllcigpKSB7CkBAIC0zNzksOCArMzc4LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUdyYXBoaWNzTAogICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0U2l6ZShw
YXJlbnRDbGlwUmVjdC5zaXplKCkpOwogCiAgICAgICAgIC8vIGJhY2tncm91bmRSZWN0IGlzIHJl
bGF0aXZlIHRvIGNvbXBBbmNlc3Rvciwgc28gc3VidHJhY3QgZGVsdGFYL2RlbHRhWSB0byBnZXQg
YmFjayB0byBsb2NhbCBjb29yZHMuCi0gICAgICAgIEludFNpemUgcmVuZGVyZXJPZmZzZXQocGFy
ZW50Q2xpcFJlY3QubG9jYXRpb24oKS54KCkgLSBkZWx0YVgsIHBhcmVudENsaXBSZWN0LmxvY2F0
aW9uKCkueSgpIC0gZGVsdGFZKTsKLSAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNl
dE9mZnNldEZyb21SZW5kZXJlcihyZW5kZXJlck9mZnNldCk7CisgICAgICAgIG1fYW5jZXN0b3JD
bGlwcGluZ0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIocGFyZW50Q2xpcFJlY3QubG9jYXRp
b24oKSAtIGRlbHRhKTsKIAogICAgICAgICAvLyBUaGUgcHJpbWFyeSBsYXllciBpcyB0aGVuIHBh
cmVudGVkIGluLCBhbmQgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGlzIGNsaXBwaW5nIGxheWVy
LgogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBwYXJlbnRDbGlwUmVjdC5s
b2NhdGlvbigpOwpAQCAtNDI3LDcgKzQyNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVHcmFwaGljc0wKICAgICAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRl
ckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpOwogCiAgICAgICAgIC8vIEdldCBsYXlv
dXQgYm91bmRzIGluIHRoZSBjb29yZHMgb2YgY29tcEFuY2VzdG9yIHRvIG1hdGNoIHJlbGF0aXZl
Q29tcG9zaXRpbmdCb3VuZHMuCi0gICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0
KGRlbHRhWCwgZGVsdGFZLCBib3JkZXJCb3gud2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsK
KyAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5z
aXplKCkpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgZGVwZW5kIG9uIGxh
eWVyIGRpbWVuc2lvbnMKICAgICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNv
bXB1dGVUcmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA4Nzgy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDksOSArNDQ5LDkgQEAgSW50UmVjdCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNhbGN1bGF0ZQogICAgIEludFJlY3QgdW5pb25Cb3VuZHMgPSBib3VuZGluZ0Jv
eFJlY3Q7CiAgICAgCiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAo
KSB8fCBsYXllci0+cmVuZGVyZXIoKS0+aGFzTWFzaygpKSB7Ci0gICAgICAgIGludCBhbmNlc3Rv
clJlbFggPSAwLCBhbmNlc3RvclJlbFkgPSAwOwotICAgICAgICBsYXllci0+Y29udmVydFRvTGF5
ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxYLCBhbmNlc3RvclJlbFkpOwotICAg
ICAgICBib3VuZGluZ0JveFJlY3QubW92ZShhbmNlc3RvclJlbFgsIGFuY2VzdG9yUmVsWSk7Cisg
ICAgICAgIEludFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OworICAgICAgICBsYXllci0+Y29udmVy
dFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQpOworICAgICAg
ICBib3VuZGluZ0JveFJlY3QubW92ZShhbmNlc3RvclJlbE9mZnNldCk7CiAgICAgICAgIHJldHVy
biBib3VuZGluZ0JveFJlY3Q7CiAgICAgfQogCkBAIC01MDMsOSArNTAzLDkgQEAgSW50UmVjdCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZQogICAgICAgICB1bmlvbkJvdW5kcyA9IGFm
ZmluZVRyYW5zLT5tYXBSZWN0KHVuaW9uQm91bmRzKTsKICAgICB9CiAKLSAgICBpbnQgYW5jZXN0
b3JSZWxYID0gMCwgYW5jZXN0b3JSZWxZID0gMDsKLSAgICBsYXllci0+Y29udmVydFRvTGF5ZXJD
b29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxYLCBhbmNlc3RvclJlbFkpOwotICAgIHVu
aW9uQm91bmRzLm1vdmUoYW5jZXN0b3JSZWxYLCBhbmNlc3RvclJlbFkpOworICAgIEludFBvaW50
IGFuY2VzdG9yUmVsT2Zmc2V0OworICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNl
c3RvckxheWVyLCBhbmNlc3RvclJlbE9mZnNldCk7CisgICAgdW5pb25Cb3VuZHMubW92ZShhbmNl
c3RvclJlbE9mZnNldCk7CiAKICAgICByZXR1cm4gdW5pb25Cb3VuZHM7CiB9CkBAIC01MjcsOSAr
NTI3LDkgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyV2lsbEJlUgogICAgICAg
ICBBU1NFUlQoY29tcExheWVyLT5iYWNraW5nKCkpOwogICAgICAgICBJbnRSZWN0IGNvbXBCb3Vu
ZHMgPSBjaGlsZC0+YmFja2luZygpLT5jb21wb3NpdGVkQm91bmRzKCk7CiAKLSAgICAgICAgaW50
IG9mZnNldFggPSAwLCBvZmZzZXRZID0gMDsKLSAgICAgICAgY2hpbGQtPmNvbnZlcnRUb0xheWVy
Q29vcmRzKGNvbXBMYXllciwgb2Zmc2V0WCwgb2Zmc2V0WSk7Ci0gICAgICAgIGNvbXBCb3VuZHMu
bW92ZShvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgSW50UG9pbnQgb2Zmc2V0OworICAgICAg
ICBjaGlsZC0+Y29udmVydFRvTGF5ZXJDb29yZHMoY29tcExheWVyLCBvZmZzZXQpOworICAgICAg
ICBjb21wQm91bmRzLm1vdmUob2Zmc2V0KTsKIAogICAgICAgICBjb21wTGF5ZXItPnNldEJhY2tp
bmdOZWVkc1JlcGFpbnRJblJlY3QoY29tcEJvdW5kcyk7CiAKQEAgLTEwNzEsMTEgKzEwNzEsOCBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVjdXJzaXZlUmVwCiAgICAgICAgICAgICBz
aXplX3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBSZW5k
ZXJMYXllciogY3VyTGF5ZXIgPSBuZWdaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgICAg
ICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IHkgPSAwOwotICAgICAgICAgICAgICAg
IGN1ckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhsYXllciwgeCwgeSk7CiAgICAgICAgICAg
ICAgICAgSW50UmVjdCBjaGlsZFJlY3QocmVjdCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRSZWN0
Lm1vdmUoLXgsIC15KTsKKyAgICAgICAgICAgICAgICBjdXJMYXllci0+Y29udmVydFRvTGF5ZXJD
b29yZHMobGF5ZXIsIGNoaWxkUmVjdCk7CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlUmVwYWlu
dExheWVyUmVjdChjdXJMYXllciwgY2hpbGRSZWN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTA4NCwxMSArMTA4MSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWN1
cnNpdmVSZXAKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNp
emUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkg
ewogICAgICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IHBvc1pPcmRlckxpc3Qt
PmF0KGkpOwotICAgICAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAgICAgICBpbnQg
eSA9IDA7Ci0gICAgICAgICAgICAgICAgY3VyTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGxh
eWVyLCB4LCB5KTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGNoaWxkUmVjdChyZWN0KTsKLSAg
ICAgICAgICAgICAgICBjaGlsZFJlY3QubW92ZSgteCwgLXkpOworICAgICAgICAgICAgICAgIGN1
ckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhsYXllciwgY2hpbGRSZWN0KTsKICAgICAgICAg
ICAgICAgICByZWN1cnNpdmVSZXBhaW50TGF5ZXJSZWN0KGN1ckxheWVyLCBjaGlsZFJlY3QpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDk3LDExICsxMDkxLDggQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlY3Vyc2l2ZVJlcAogICAgICAgICBzaXplX3QgbGlzdFNpemUg
PSBub3JtYWxGbG93TGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5v
cm1hbEZsb3dMaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgICAg
IGludCB5ID0gMDsKLSAgICAgICAgICAgIGN1ckxheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhs
YXllciwgeCwgeSk7CiAgICAgICAgICAgICBJbnRSZWN0IGNoaWxkUmVjdChyZWN0KTsKLSAgICAg
ICAgICAgIGNoaWxkUmVjdC5tb3ZlKC14LCAteSk7CisgICAgICAgICAgICBjdXJMYXllci0+Y29u
dmVydFRvTGF5ZXJDb29yZHMobGF5ZXIsIGNoaWxkUmVjdCk7CiAgICAgICAgICAgICByZWN1cnNp
dmVSZXBhaW50TGF5ZXJSZWN0KGN1ckxheWVyLCBjaGlsZFJlY3QpOwogICAgICAgICB9CiAgICAg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>95688</attachid>
            <date>2011-06-01 17:01:08 -0700</date>
            <delta_ts>2011-06-01 17:02:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61818-20110601170107.patch</filename>
            <type>text/plain</type>
            <size>4301</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3ODY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDYtMDEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29y
ZHMgdG8gdXNlIEludFBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTgxOAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisK
KyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFp
bmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWlu
ZXJOb2RlOjpnZXRSZWN0KToKKyAgICAgICAgQ2hhbmdlIHRvIHVzZSBtYXhYL21heFkgaW5zdGVh
ZCBvZiB4K3dpZHRoL3kraGVpZ2h0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50Ojptb3ZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UG9pbnQ6OmV4cGFuZGVkVG8pOgorICAgICAgICBBZGQgbW92ZSBhbmQg
ZXhwYW5kZWRUbyBtaXJyb3JpbmcgdGhlIEludFBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBz
YW1lLgorCiAyMDExLTA2LTAxICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDg3ODI4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzgsNyArODc4LDcgQEAgYm9vbCBD
b250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIoRgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9SZW5kZXJUZXh0KG8pLT5maXJzdFRleHRCb3goKS0+cm9vdCgpLT5saW5lVG9wKCkp
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChvLT5pc0JveCgpKSB7CiAgICAgICAgICAgICAgICAg
UmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChvKTsKLSAgICAgICAgICAgICAgICBwb2ludC5t
b3ZlKGJveC0+eCgpLCBib3gtPnkoKSk7CisgICAgICAgICAgICAgICAgcG9pbnQubW92ZShib3gt
PmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcG9pbnQgPSBvLT5jb250
YWluZXIoKS0+bG9jYWxUb0Fic29sdXRlKHBvaW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTkwNCw3ICs5MDQsNyBAQCBib29sIENvbnRhaW5lck5vZGU6Omdl
dExvd2VyUmlnaHRDb3JuZXIoCiAgICAgaWYgKCFvLT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFj
ZWQoKSkgewogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOwogICAgICAg
ICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsK
LSAgICAgICAgcG9pbnQubW92ZShib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgICAg
ICBwb2ludC5tb3ZlKGJveC0+c2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC05MzAsMTIgKzkzMCwxMiBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRD
b3JuZXIoCiAgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgICAgICBS
ZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KG8pOwogICAgICAgICAgICAgICAgIEludFJl
Y3QgbGluZXNCb3ggPSB0ZXh0LT5saW5lc0JvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFsaW5lc0JveC54KCkgJiYgIWxpbmVzQm94LndpZHRoKCkgJiYgIWxpbmVzQm94LnkoKSAm
JiAhbGluZXNCb3guaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgaWYgKCFsaW5lc0JveC5tYXhY
KCkgJiYgIWxpbmVzQm94Lm1heFkoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgcG9pbnQubW92ZShsaW5lc0JveC54KCkgKyBsaW5lc0JveC53aWR0aCgp
LCBsaW5lc0JveC55KCkgKyBsaW5lc0JveC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcG9p
bnQubW92ZShsaW5lc0JveC5tYXhYTWF4WUNvcm5lcigpKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChvKTsKLSAgICAg
ICAgICAgICAgICBwb2ludC5tb3ZlKGJveC0+eCgpICsgYm94LT53aWR0aCgpLCBib3gtPnkoKSAr
IGJveC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoYm94LT5mcmFtZVJl
Y3QoKS5tYXhYTWF4WUNvcm5lcigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBvaW50
ID0gby0+Y29udGFpbmVyKCktPmxvY2FsVG9BYnNvbHV0ZShwb2ludCwgZmFsc2UsIHRydWUpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05NTksMTAgKzk1OSw3IEBAIEludFJlY3QgQ29u
dGFpbmVyTm9kZTo6Z2V0UmVjdCgpIGNvbnN0CiAgICAgICAgICAgICB1cHBlckxlZnQgPSBsb3dl
clJpZ2h0OwogICAgIH0gCiAKLSAgICBsb3dlclJpZ2h0LnNldFgobWF4KHVwcGVyTGVmdC54KCks
IGxvd2VyUmlnaHQueCgpKSk7Ci0gICAgbG93ZXJSaWdodC5zZXRZKG1heCh1cHBlckxlZnQueSgp
LCBsb3dlclJpZ2h0LnkoKSkpOwotICAgIAotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdCh1cHBlckxlZnQsIGxvd2VyUmlnaHQgLSB1cHBlckxlZnQpKTsKKyAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodXBwZXJMZWZ0LCBsb3dlclJpZ2h0LmV4cGFuZGVk
VG8odXBwZXJMZWZ0KSAtIHVwcGVyTGVmdCkpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6OnNl
dEZvY3VzKGJvb2wgcmVjZWl2ZWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiA4NzgyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCAr
NjEsOSBAQCBzdHJ1Y3QgU2tQb2ludDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBJbnRQb2lu
dDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogY2xhc3Mg
RmxvYXRQb2ludCB7CiBwdWJsaWM6CkBAIC05MCw2ICs5MSwyMSBAQCBwdWJsaWM6CiAgICAgICAg
IG1feCArPSBkeDsKICAgICAgICAgbV95ICs9IGR5OwogICAgIH0KKyAgICB2b2lkIG1vdmUoY29u
c3QgSW50U2l6ZSYgYSkKKyAgICB7CisgICAgICAgIG1feCArPSBhLndpZHRoKCk7CisgICAgICAg
IG1feSArPSBhLmhlaWdodCgpOworICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3QgSW50UG9pbnQm
IGEpCisgICAgeworICAgICAgICBtX3ggKz0gYS54KCk7CisgICAgICAgIG1feSArPSBhLnkoKTsK
KyAgICB9CisgICAgRmxvYXRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEZsb2F0UG9pbnQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFBvaW50KG1feCA+IG90aGVyLm1feCA/
IG1feCA6IG90aGVyLm1feCwKKyAgICAgICAgICAgIG1feSA+IG90aGVyLm1feSA/IG1feSA6IG90
aGVyLm1feSk7CisgICAgfSAgIAogICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQog
ICAgIHsKICAgICAgICAgbV94ICo9IHN4Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>