<?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>82609</bug_id>
          
          <creation_ts>2012-03-29 06:50:14 -0700</creation_ts>
          <short_desc>[Qt] Find zoomable area using area-based hit-testing</short_desc>
          <delta_ts>2012-03-30 08:47:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>dinu.jacob</cc>
    
    <cc>efidler</cc>
    
    <cc>gmak</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>manyoso</cc>
    
    <cc>menard</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591134</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-29 06:50:14 -0700</bug_when>
    <thetext>The current implementation of tap-to-zoom uses a normal hit-testing and simply walks the DOM-tree to find a suitable zoomable area.

This fails to catch almost all cases of CSS layout that doesn&apos;t follow flow. A better solution is to use the areas returned by a rect-based hit-testing and returning the best zoomable area from the result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591145</commentid>
    <comment_count>1</comment_count>
      <attachid>134570</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-29 06:57:28 -0700</bug_when>
    <thetext>Created attachment 134570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591170</commentid>
    <comment_count>2</comment_count>
      <attachid>134570</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-29 07:28:55 -0700</bug_when>
    <thetext>Comment on attachment 134570
Patch

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

lets look this over together tomorrow

&gt; Source/WebCore/page/TouchAdjustment.cpp:101
&gt; +    ASSERT(node-&gt;renderer());
&gt; +    return node-&gt;renderer()-&gt;isBox();
&gt; +}

What happens if it has a rotation transform? bounding box ?

&gt; Source/WebCore/page/TouchAdjustment.cpp:120
&gt; +    RenderBox* renderer = static_cast&lt;RenderBox*&gt;(node-&gt;renderer());

I believe there is a toRenderBox method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591979</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-30 02:33:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 134570 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134570&amp;action=review
&gt; 
&gt; lets look this over together tomorrow
&gt; 
&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:101
&gt; &gt; +    ASSERT(node-&gt;renderer());
&gt; &gt; +    return node-&gt;renderer()-&gt;isBox();
&gt; &gt; +}
&gt; 
&gt; What happens if it has a rotation transform? bounding box ?
&gt; 
Yes. This is similar to the current code. Also in this case bounding box is not an approximation. The bounding box is truly what we want to zoom to. I don&apos;t think UI&apos;s are ready for zoom and rotate :D

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:120
&gt; &gt; +    RenderBox* renderer = static_cast&lt;RenderBox*&gt;(node-&gt;renderer());
&gt; 
&gt; I believe there is a toRenderBox method
Right!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592081</commentid>
    <comment_count>4</comment_count>
      <attachid>134789</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-30 05:21:30 -0700</bug_when>
    <thetext>Created attachment 134789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592091</commentid>
    <comment_count>5</comment_count>
      <attachid>134789</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-30 05:34:12 -0700</bug_when>
    <thetext>Comment on attachment 134789
Patch

Nice improvement with layout tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592189</commentid>
    <comment_count>6</comment_count>
      <attachid>134789</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-30 08:47:19 -0700</bug_when>
    <thetext>Comment on attachment 134789
Patch

Clearing flags on attachment: 134789

Committed r112669: &lt;http://trac.webkit.org/changeset/112669&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592190</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-30 08:47:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134570</attachid>
            <date>2012-03-29 06:57:28 -0700</date>
            <delta_ts>2012-03-30 05:21:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82609-20120329155735.patch</filename>
            <type>text/plain</type>
            <size>17206</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDEyZGZlYjRhMDc0ZTdl
MmMzYmZiNjVjNDQ2YjIyZTRhZmNkNzg3OS4uNzk1OWNlYjg2NTNkNDA0NWE5OGQ4Y2NjNjZjYWZl
ZTNiMjU5ZDcxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAzLTI5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFtR
dF0gRmluZCB6b29tYWJsZSBhcmVhIHVzaW5nIGFyZWEtYmFzZWQgaGl0LXRlc3RpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjA5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEFQSSBm
b3IgY2FsY3VsYXRpbmcgdGhlIGJlc3Qgem9vbWFibGUgYXJlYSBmb3IgYQorICAgICAgICB0YXAt
dG8tem9vbSBnZXN0dXJlLgorICAgICAgICBJdCBwaWNrcyB0aGUgYXJlYSB3aXRoIHRoZSBsYXJn
ZXN0IGludGVyc2VjdGlvbiB3aXRoIHRoZSB0b3VjaC4gSW4gbW9zdAorICAgICAgICBjYXNlcyB0
aGlzIHdpbGwgYmUgYWxsIGFyZWFzIGZ1bGx5IGNvbnRhaW5pbmcgdGhlIGFyZWEsIGFuZCByZXR1
cm5zIHRoZQorICAgICAgICBzbWFsbGVzdCBpbm5lci1tb3N0IG9mIHRoZXNlLgorCisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpiZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQb2ludCk6CisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVJc1pvb21UYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VG91Y2hBZGp1c3RtZW50OjphcHBlbmRab29tYWJsZVN1YnRhcmdldHMpOgorICAgICAg
ICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50Ojpjb21waWxlWm9vbWFibGVTdWJ0YXJnZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6YXJlYU9mSW50ZXJzZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6ZmluZEFyZWFXaXRoTGFyZ2VzdElu
dGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmVzdFpvb21hYmxlQXJlYSk6Cisg
ICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbnRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjphcmVhKToKKwogMjAx
Mi0wMy0yOSAgVmluZWV0IENoYXVkaGFyeSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIGN1c3RvbSBiaW5kaW5ncyBmb3JtIEludGVybmFscy5pZGwgb2YgYXR0cmlidXRl
IHR5cGUgQXJyYXkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzI2ODIxZDA5NzQ1ZmI4MzkwN2JiMTU0MGI2ZDlj
OTY5MTQ2ODMwMS4uYTlkMTgyMDlhOGI4YTM1MzYxYjNhNGI3ZTZiZGY0YjE5ZmU1YzZmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTI5ICBBbGxhbiBTYW5kZmVsZCBKZW5z
ZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFtRdF0gRmluZCB6b29tYWJs
ZSBhcmVhIHVzaW5nIGFyZWEtYmFzZWQgaGl0LXRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFyZWEgdG8gZmluZFpvb21hYmxlQXJlYUZv
clBvaW50IGFuZCB1c2UgbmV3IFRPVUNIX0FESlVTVE1FTlQKKyAgICAgICAgY29kZS1wYXRoIHRv
IGZpbmQgdGhlIGJlc3Qgem9vbWFibGUgYXJlYS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAoV2ViUGFnZVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZl
bnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRG91
YmxlVGFwRXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgKFdlYlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorCiAyMDEyLTAzLTI4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IGEgY3Jhc2ggYW5kIGFuIGFzc2VydGlvbiB3aGVuIHJl
Y292ZXJpbmcgZnJvbSBhIHdlYiBwcm9jZXNzIGNyYXNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKaW5kZXggYTcxZTg1MTU0NmZjMjBhYjg3Y2E3NzIwNTU2MTc0ZmM2NjYyZWU3Yy4u
ZDVkZTlmMTRiMGEwN2FkZDNiN2JiMjVlZDA1Njc4Y2Y3ZTdmMmM4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjQ3NSw2ICsyNDc1LDE2IEBAIHZvaWQgRXZlbnRIYW5k
bGVyOjpiZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNo
Q2VudGVyLCBjCiAgICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCk7CiAgICAgfQogfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6YmVzdFpvb21hYmxlQXJlYUZvclRv
dWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3Vj
aFJhZGl1cywgSW50UmVjdCYgdGFyZ2V0QXJlYSwgTm9kZSomIHRhcmdldE5vZGUpCit7CisgICAg
SGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVl
c3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKKyAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KHRvdWNoQ2VudGVyLCAvKmFsbG93U2hhZG93
Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gZmFsc2UsIERvbnRIaXRUZXN0U2Ny
b2xsYmFycywgaGl0VHlwZSwgdG91Y2hSYWRpdXMpOworCisgICAgSW50UmVjdCB0b3VjaFJlY3Qg
PSByZXN1bHQucmVjdEZvclBvaW50KHRvdWNoQ2VudGVyKTsKKyAgICBSZWZQdHI8U3RhdGljSGFz
aFNldE5vZGVMaXN0PiBub2RlTGlzdCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdDo6YWRvcHQocmVz
dWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSk7CisgICAgZmluZEJlc3Rab29tYWJsZUFyZWEodGFy
Z2V0Tm9kZSwgdGFyZ2V0QXJlYSwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgKm5vZGVMaXN0Lmdl
dCgpKTsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAppbmRleCA3MDFmYTJiZjk0NTU1NDk3NGJkOWRmNDZhNDc2MTkzNzk3
MzA1MzViLi5lNWExYTQxMWM0NzI4ZmYzMzU2MTIwYzU3ZjI0ZjliOGU2OWJmMzc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE2OSw2ICsxNjksNyBAQCBwdWJsaWM6CiAKICNp
ZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKICAgICB2b2lkIGJlc3RDbGlja2FibGVOb2RlRm9y
VG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRv
dWNoUmFkaXVzLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKTsKKyAg
ICB2b2lkIGJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3Vj
aENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFJlY3QmIHRhcmdldEFyZWEs
IE5vZGUqJiB0YXJnZXROb2RlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKaW5kZXggZGQwNTQ2MThkMGY4
MGE4MDI2MjY4NWQ4YjBmNGE5OTdiYjEzYjUzOC4uMWNlYjU3OTIyYTcxZGRhNmFlMzE1YWM3NGFi
MzQ5OWI5Njc2ZDQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVz
dG1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApA
QCAtOTEsNiArOTEsMTUgQEAgYm9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9k
ZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgbm9kZUlzWm9vbVRhcmdldChOb2RlKiBu
b2RlKQoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+aXNTaGFkb3dSb290
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigp
KTsKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNCb3goKTsKK30KKwogc3RhdGljIGlu
bGluZSB2b2lkIGFwcGVuZFN1YnRhcmdldHNGb3JOb2RlVG9MaXN0KE5vZGUqIG5vZGUsIFN1YnRh
cmdldEdlb21ldHJ5TGlzdCYgc3VidGFyZ2V0cykKIHsKICAgICAvLyBTaW5jZSB0aGUgbm9kZSBp
cyBhIHJlc3VsdCBvZiBhIGhpdCB0ZXN0LCB3ZSBhcmUgYWxyZWFkeSBlbnN1cmVkIGl0IGhhcyBh
IHJlbmRlcmVyLgpAQCAtMTA1LDYgKzExNCwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5k
U3VidGFyZ2V0c0Zvck5vZGVUb0xpc3QoTm9kZSogbm9kZSwgU3VidGFyZ2V0R2VvbWV0cnlMaQog
ICAgICAgICBzdWJ0YXJnZXRzLmFwcGVuZChTdWJ0YXJnZXRHZW9tZXRyeShub2RlLCAqaXQpKTsK
IH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFpvb21hYmxlU3VidGFyZ2V0cyhOb2RlKiBu
b2RlLCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3QmIHN1YnRhcmdldHMpCit7CisgICAgVmVjdG9yPEZs
b2F0UXVhZD4gcXVhZHM7CisgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJl
bmRlckJveCo+KG5vZGUtPnJlbmRlcmVyKCkpOworICAgIEFTU0VSVChyZW5kZXJlcik7CisKKyAg
ICBGbG9hdFJlY3QgYm9yZGVyQm94UmVjdCA9IHJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCk7Cisg
ICAgRmxvYXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gcmVuZGVyZXItPmNvbnRlbnRCb3hSZWN0KCk7
CisgICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGJvcmRlckJv
eFJlY3QpKTsKKyAgICBpZiAoYm9yZGVyQm94UmVjdCAhPSBjb250ZW50Qm94UmVjdCkKKyAgICAg
ICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnRlbnRCb3hS
ZWN0KSk7CisKKyAgICBBU1NFUlQocXVhZHMuc2l6ZSgpIDw9IDIpOworCisgICAgVmVjdG9yPEZs
b2F0UXVhZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcXVhZHMuYmVnaW4oKTsKKyAgICBjb25zdCBW
ZWN0b3I8RmxvYXRRdWFkPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcXVhZHMuZW5kKCk7CisgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgc3VidGFyZ2V0cy5hcHBlbmQoU3VidGFy
Z2V0R2VvbWV0cnkobm9kZSwgKml0KSk7Cit9CisKIC8vIENvbXBpbGVzIGEgbGlzdCBvZiBzdWJ0
YXJnZXRzIG9mIGFsbCB0aGUgcmVsZXZhbnQgdGFyZ2V0IG5vZGVzLgogdm9pZCBjb21waWxlU3Vi
dGFyZ2V0TGlzdChjb25zdCBOb2RlTGlzdCYgaW50ZXJzZWN0ZWROb2RlcywgU3VidGFyZ2V0R2Vv
bWV0cnlMaXN0JiBzdWJ0YXJnZXRzLCBOb2RlRmlsdGVyIG5vZGVGaWx0ZXIpCiB7CkBAIC0xNjMs
NiArMTkyLDE4IEBAIHZvaWQgY29tcGlsZVN1YnRhcmdldExpc3QoY29uc3QgTm9kZUxpc3QmIGlu
dGVyc2VjdGVkTm9kZXMsIFN1YnRhcmdldEdlb21ldHJ5TGlzCiAgICAgfQogfQogCisvLyBDb21w
aWxlcyBhIGxpc3Qgb2Ygem9vbWFibGUgc3VidGFyZ2V0cy4KK3ZvaWQgY29tcGlsZVpvb21hYmxl
U3VidGFyZ2V0cyhjb25zdCBOb2RlTGlzdCYgaW50ZXJzZWN0ZWROb2RlcywgU3VidGFyZ2V0R2Vv
bWV0cnlMaXN0JiBzdWJ0YXJnZXRzKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGludGVyc2Vj
dGVkTm9kZXMubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CisgICAgICAgIE5vZGUqIGNvbnN0IGNhbmRpZGF0ZSA9IGludGVyc2VjdGVkTm9kZXMu
aXRlbShpKTsKKyAgICAgICAgaWYgKG5vZGVJc1pvb21UYXJnZXQoY2FuZGlkYXRlKSkKKyAgICAg
ICAgICAgIGFwcGVuZFpvb21hYmxlU3VidGFyZ2V0cyhjYW5kaWRhdGUsIHN1YnRhcmdldHMpOwor
ICAgIH0KK30KKworCiBmbG9hdCBkaXN0YW5jZVNxdWFyZWRUb1RhcmdldENlbnRlckxpbmUoY29u
c3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25z
dCBTdWJ0YXJnZXRHZW9tZXRyeSYgc3VidGFyZ2V0KQogewogICAgIFVOVVNFRF9QQVJBTSh0b3Vj
aEFyZWEpOwpAQCAtMTc5LDYgKzIyMCwxOSBAQCBmbG9hdCBkaXN0YW5jZVNxdWFyZWRUb1Rhcmdl
dENlbnRlckxpbmUoY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UgogICAg
IHJldHVybiByZWN0LmRpc3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhv
dHNwb3QpOwogfQogCitmbG9hdCBhcmVhT2ZJbnRlcnNlY3Rpb24oY29uc3QgSW50UG9pbnQmIHRv
dWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBTdWJ0YXJnZXRHZW9t
ZXRyeSYgc3VidGFyZ2V0KQoreworICAgIFVOVVNFRF9QQVJBTSh0b3VjaEhvdHNwb3QpOworICAg
IEludFJlY3QgcmVjdCA9IHN1YnRhcmdldC5ib3VuZGluZ0JveCgpOworCisgICAgLy8gQ29udmVy
dCBmcm9tIGZyYW1lIGNvb3JkaW5hdGVzIHRvIHdpbmRvdyBjb29yZGluYXRlcy4KKyAgICByZWN0
ID0gc3VidGFyZ2V0Lm5vZGUoKS0+ZG9jdW1lbnQoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93
KHJlY3QpOworICAgIHJlY3QuaW50ZXJzZWN0KHRvdWNoQXJlYSk7CisKKyAgICByZXR1cm4gcmVj
dC5zaXplKCkuYXJlYSgpOworfQorCisKIC8vIEEgZ2VuZXJpYyBmdW5jdGlvbiBmb3IgZmluZGlu
ZyB0aGUgdGFyZ2V0IG5vZGUgd2l0aCB0aGUgbG93ZXN0IGRpc3RhbmNlIG1ldHJpYy4gQSBkaXN0
YW5jZSBtZXRyaWMgaGVyZSBpcyB0aGUgcmVzdWx0CiAvLyBvZiBhIGRpc3RhbmNlLWxpa2UgZnVu
Y3Rpb24sIHRoYXQgY29tcHV0ZXMgaG93IHdlbGwgdGhlIHRvdWNoIGhpdHMgdGhlIG5vZGUuCiAv
LyBEaXN0YW5jZSBmdW5jdGlvbnMgY291bGQgZm9yIGluc3RhbmNlIGJlIGRpc3RhbmNlIHNxdWFy
ZWQgb3IgYXJlYSBvZiBpbnRlcnNlY3Rpb24uCkBAIC0yMDUsNiArMjU5LDM2IEBAIGJvb2wgZmlu
ZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWMoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50
JiB0YXJnZXRQb2ludCwKICAgICByZXR1cm4gKHRhcmdldE5vZGUpOwogfQogCisvLyBTaW1pbGFy
IGdlbmVyaWMgZnVuY3Rpb24gYXMgZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWMsIGV4
Y2VwdCB0aGlzIGZpbmRzIHRoZSBpbm5lcm1vc3QgYXJlYSB3aXRoIHRoZSBsYXJnZXN0IGludGVy
c2VjdGlvbi4KK2Jvb2wgZmluZEFyZWFXaXRoTGFyZ2VzdEludGVyc2VjdGlvbihOb2RlKiYgdGFy
Z2V0Tm9kZSwgSW50UmVjdCYgdGFyZ2V0QXJlYSwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3Bv
dCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3QmIHN1YnRh
cmdldHMpCit7CisgICAgdGFyZ2V0Tm9kZSA9IDA7CisgICAgZmxvYXQgYmVzdERpc3RhbmNlTWV0
cmljID0gMC47CisgICAgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHN1YnRhcmdldHMuYmVnaW4oKTsKKyAgICBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHN1YnRhcmdldHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBOb2RlKiBub2RlID0gaXQtPm5vZGUoKTsKKyAgICAgICAgZmxv
YXQgZGlzdGFuY2VNZXRyaWMgPSBhcmVhT2ZJbnRlcnNlY3Rpb24odG91Y2hIb3RzcG90LCB0b3Vj
aEFyZWEsICppdCk7CisgICAgICAgIGlmIChkaXN0YW5jZU1ldHJpYyA+IGJlc3REaXN0YW5jZU1l
dHJpYykgeworICAgICAgICAgICAgdGFyZ2V0QXJlYSA9IGl0LT5ib3VuZGluZ0JveCgpOworICAg
ICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBiZXN0RGlzdGFuY2VNZXRy
aWMgPSBkaXN0YW5jZU1ldHJpYzsKKyAgICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZU1ldHJpYyA9
PSBiZXN0RGlzdGFuY2VNZXRyaWMpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byByZXR1cm4gdGhl
IHNtYWxsZXN0IGlubmVyLW1vc3Qgc3VidGFyZ2V0LgorICAgICAgICAgICAgaWYgKG5vZGUgPT0g
dGFyZ2V0Tm9kZSkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+Ym91bmRpbmdCb3goKS5zaXpl
KCkuYXJlYSgpIDwgdGFyZ2V0QXJlYS5zaXplKCkuYXJlYSgpKQorICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRBcmVhID0gaXQtPmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vZGUtPmlzRGVzY2VuZGFudE9mKHRhcmdldE5vZGUpKSB7CisgICAgICAgICAgICAgICAgdGFy
Z2V0QXJlYSA9IGl0LT5ib3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgIHRhcmdldE5vZGUg
PSBub2RlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICh0
YXJnZXROb2RlKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBUb3VjaEFkanVzdG1lbnQKIAogYm9v
bCBmaW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQg
JnRhcmdldFBvaW50LCBjb25zdCBJbnRQb2ludCAmdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0
ICZ0b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0JiBub2RlTGlzdCkKQEAgLTIxNCw0ICsyOTgsMTEg
QEAgYm9vbCBmaW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50
UG9pbnQgJnRhcmdldFBvaW50LCBjb25zdAogICAgIHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZp
bmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0
b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50OjpkaXN0
YW5jZVNxdWFyZWRUb1RhcmdldENlbnRlckxpbmUpOwogfQogCitib29sIGZpbmRCZXN0Wm9vbWFi
bGVBcmVhKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRSZWN0JiB0YXJnZXRBcmVhLCBjb25zdCBJbnRQ
b2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IE5vZGVM
aXN0JiBub2RlTGlzdCkKK3sKKyAgICBUb3VjaEFkanVzdG1lbnQ6OlN1YnRhcmdldEdlb21ldHJ5
TGlzdCBzdWJ0YXJnZXRzOworICAgIFRvdWNoQWRqdXN0bWVudDo6Y29tcGlsZVpvb21hYmxlU3Vi
dGFyZ2V0cyhub2RlTGlzdCwgc3VidGFyZ2V0cyk7CisgICAgcmV0dXJuIFRvdWNoQWRqdXN0bWVu
dDo6ZmluZEFyZWFXaXRoTGFyZ2VzdEludGVyc2VjdGlvbih0YXJnZXROb2RlLCB0YXJnZXRBcmVh
LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgc3VidGFyZ2V0cyk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3Rt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCmluZGV4IGQ1ZGZj
MTBmNDQ4ZjJkOWRjMDE5ZmZkMzZmZGQ4OGM2NDZmODIyMjAuLmJkNGNiOTU5MzhiNWEyNzc4YWJh
ZGM1MjdkMGFmZmUxYjFlYTg3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91
Y2hBZGp1c3RtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQu
aApAQCAtMjksNiArMjksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIGZpbmRCZXN0
Q2xpY2thYmxlQ2FuZGlkYXRlKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9p
bnQsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJl
YSwgY29uc3QgTm9kZUxpc3QmKTsKK2Jvb2wgZmluZEJlc3Rab29tYWJsZUFyZWEoTm9kZSomIHRh
cmdldE5vZGUsIEludFJlY3QmIHRhcmdldEFyZWEsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNw
b3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmKTsKIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhlIHNpbWlsYXIgZnVuY3Rpb25zIGZvciBvdGhlciBnZXN0dXJlcyBoZXJl
IGFzIHdlbGwuCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFNpemUuaAppbmRleCBmMTFmODE1Yzc0NmFhMTcyMGI2YzQ4NGMwNDA0
MzZmMTFkMDVkOGRjLi44ZWM2NTM5YTA2OTAyMjQwY2UxZGUzYTYxMjc3ZjY0YzE4ZTE5YjhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC0xMDQsNiAr
MTA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEludFNpemUoKSk7
CiAgICAgfQogCisgICAgaW50IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
d2lkdGggKiBtX2hlaWdodDsKKyAgICB9CisKICAgICBpbnQgZGlhZ29uYWxMZW5ndGhTcXVhcmVk
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1faGVp
Z2h0ICogbV9oZWlnaHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CmluZGV4IDNlNjMyYWI0ZjU3ZDVjZWYzYzMwYTA4ZDEwZDNkZTM1YWQ1ZjZjMzcuLjBhZWRhMGVi
NTk5MWEyODEwNjgwMTE5NjhmODcyMTc1MTQ1NGEwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yNDM1LDEyICsyNDM1LDEyIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IEludFBvaW50JiB0YXJnZXQsIGNvbnN0
IEludFJlY3QmIGFyCiAgICAgbV9wYWdlQ2xpZW50LT5kaWRGaW5kWm9vbWFibGVBcmVhKHRhcmdl
dCwgYXJlYSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpmaW5kWm9vbWFibGVBcmVhRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlUHJveHk6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFNpemUmIGFyZWEp
CiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmluZFpvb21hYmxlQXJlYUZvclBvaW50KHBvaW50
KSwgbV9wYWdlSUQpOworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rmlu
ZFpvb21hYmxlQXJlYUZvclBvaW50KHBvaW50LCBhcmVhKSwgbV9wYWdlSUQpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29u
c3QgU3RyaW5nJiBjb250ZW50cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAppbmRleCBiNDA5ZjA0ZmQyNGY2ZDBlMGFiZTAzNjhiYjc2MTNkYzg2NzM1MTU0Li42ODMxZjM5
NDljMTJiMmU5OTFlMzA2NGJlMjI2YWVkMjMxYmExZmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01NzYsNyArNTc2LDcgQEAgcHVibGljOgogICAgIFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzKCkgY29uc3Q7CiAKICNpZiBQ
TEFURk9STShRVCkKLSAgICB2b2lkIGZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5k
bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRs
ZXIuY3BwCmluZGV4IDEwZGFkN2E0NjQzMmMyNmNhMmUzYmEyZjA0YjUxZjJjOWIwMDJlZTYuLjNl
NzhjYTJjZjVmODRmNjQxZmJmNzE1OGNlZDU4Y2M3ZGVlMDM5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC0y
NTUsNyArMjU1LDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZVNpbmdsZVRh
cEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jgogdm9pZCBRdFdlYlBhZ2VFdmVu
dEhhbmRsZXI6OmhhbmRsZURvdWJsZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBv
aW50JiBwb2ludCkKIHsKICAgICBRVHJhbnNmb3JtIGZyb21JdGVtVHJhbnNmb3JtID0gbV93ZWJQ
YWdlLT50cmFuc2Zvcm1Gcm9tSXRlbSgpOwotICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFi
bGVBcmVhRm9yUG9pbnQoZnJvbUl0ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50
KCkpOworICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoZnJvbUl0
ZW1UcmFuc2Zvcm0ubWFwKHBvaW50LnBvcygpKS50b1BvaW50KCksIEludFNpemUocG9pbnQucmVj
dCgpLnNpemUoKS50b1NpemUoKSkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6
dGltZXJFdmVudChRVGltZXJFdmVudCogZXYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOWY4ZmI4ZTI0NmIxMWI0MjBkZWVmMGM4ZDE5Y2Qx
NmVjMDBhOTAwOS4uYzU1NDE0YmZmMmE5ZWJmZTg1NDExMDdmZjQxM2IzMWViNDc5ZWM2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMjUx
MCw5ICsyNTEwLDI3IEBAIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0KiBXZWJQYWdlOjpi
YWNrRm9yd2FyZExpc3QoKQogfQogCiAjaWYgUExBVEZPUk0oUVQpCi12b2lkIFdlYlBhZ2U6OmZp
bmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCisj
aWYgRU5BQkxFKFRPVUNIX0FESlVTVE1FTlQpCit2b2lkIFdlYlBhZ2U6OmZpbmRab29tYWJsZUFy
ZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGFyZWEpCiB7CiAgICAgRnJhbWUqIG1haW5mcmFtZSA9IG1fbWFpbkZyYW1lLT5j
b3JlRnJhbWUoKTsKKyAgICBOb2RlKiBub2RlID0gMDsKKyAgICBJbnRSZWN0IHpvb21hYmxlQXJl
YTsKKyAgICBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5iZXN0Wm9vbWFibGVBcmVhRm9yVG91
Y2hQb2ludChwb2ludCwgYXJlYSwgem9vbWFibGVBcmVhLCBub2RlKTsKKworICAgIGlmIChub2Rl
ICYmIG5vZGUtPmRvY3VtZW50KCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBub2Rl
LT5kb2N1bWVudCgpLT5mcmFtZSgpLT52aWV3KCkpIHsKKyAgICAgICAgY29uc3QgU2Nyb2xsVmll
dyogdmlldyA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgem9v
bWFibGVBcmVhID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyh6b29tYWJsZUFyZWEpOworICAgIH0K
KworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFpvb21hYmxlQXJlYShw
b2ludCwgem9vbWFibGVBcmVhKSk7Cit9CisKKyNlbHNlCit2b2lkIFdlYlBhZ2U6OmZpbmRab29t
YWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGFyZWEpCit7CisgICAgVU5VU0VEX1BBUkFNKGFyZWEpOworICAgIEZy
YW1lKiBtYWluZnJhbWUgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCk7CiAgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQgPSBtYWluZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQ
b2ludChtYWluZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhwb2ludCksIC8qYWxsb3dT
aGFkb3dDb250ZW50Ki8gZmFsc2UsIC8qaWdub3JlQ2xpcHBpbmcqLyB0cnVlKTsKIAogICAgIE5v
ZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CkBAIC0yNTQ3LDYgKzI1NjUsNyBAQCB2b2lk
IFdlYlBhZ2U6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcG9pbnQpCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kWm9vbWFi
bGVBcmVhKHBvaW50LCB6b29tYWJsZUFyZWEpKTsKIH0KICNlbmRpZgorI2VuZGlmCiAKIFdlYlBh
Z2U6OlNhbmRib3hFeHRlbnNpb25UcmFja2VyOjp+U2FuZGJveEV4dGVuc2lvblRyYWNrZXIoKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZTlk
ZTJlZGMwYzhmMzUyOTE4NWE1NjE5ZGE1NjI0ZjYxMzk0MWIzZi4uNmE4NTJkNGUzMDk1MmE0NjMx
NGJhNGNlNzUyZTJmMGZhYzE3OTZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC02MjcsNyArNjI3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
dW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBmaW5kT3B0aW9ucywgdWlu
dDMyX3QgbWF4TWF0Y2hDb3VudCk7CiAKICNpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIGZpbmRa
b29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQg
ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgYXJlYSk7CiAjZW5kaWYKIAogICAgIHZvaWQgZGlkQ2hhbmdlU2Vs
ZWN0ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShpbnQzMl90IG5ld0luZGV4KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
aW5kZXggMTkzNWZlMzMzN2Y3NTQwMGY0MzEzMWQ1MzM3ZjQ0MGJiODZjMmVkOS4uODk5ZTc1OWM2
NGY3NmFhYWJlOGQ0YmU5MGJjN2JjZTdhODVjZjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTI1NCw3ICsy
NTQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBHZXN0dXJlRGlkRW5kKCkKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKFFUKQotICAgIEZpbmRab29tYWJsZUFyZWFGb3JQb2ludChXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCkKKyAgICBGaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoV2ViQ29yZTo6
SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OkludFNpemUgYXJlYSkKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134789</attachid>
            <date>2012-03-30 05:21:30 -0700</date>
            <delta_ts>2012-03-30 08:47:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82609-20120330142140.patch</filename>
            <type>text/plain</type>
            <size>23958</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDEyZGZlYjRhMDc0ZTdl
MmMzYmZiNjVjNDQ2YjIyZTRhZmNkNzg3OS4uNzk1OWNlYjg2NTNkNDA0NWE5OGQ4Y2NjNjZjYWZl
ZTNiMjU5ZDcxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAzLTI5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFtR
dF0gRmluZCB6b29tYWJsZSBhcmVhIHVzaW5nIGFyZWEtYmFzZWQgaGl0LXRlc3RpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjA5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEFQSSBm
b3IgY2FsY3VsYXRpbmcgdGhlIGJlc3Qgem9vbWFibGUgYXJlYSBmb3IgYQorICAgICAgICB0YXAt
dG8tem9vbSBnZXN0dXJlLgorICAgICAgICBJdCBwaWNrcyB0aGUgYXJlYSB3aXRoIHRoZSBsYXJn
ZXN0IGludGVyc2VjdGlvbiB3aXRoIHRoZSB0b3VjaC4gSW4gbW9zdAorICAgICAgICBjYXNlcyB0
aGlzIHdpbGwgYmUgYWxsIGFyZWFzIGZ1bGx5IGNvbnRhaW5pbmcgdGhlIGFyZWEsIGFuZCByZXR1
cm5zIHRoZQorICAgICAgICBzbWFsbGVzdCBpbm5lci1tb3N0IG9mIHRoZXNlLgorCisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpiZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQb2ludCk6CisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVJc1pvb21UYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VG91Y2hBZGp1c3RtZW50OjphcHBlbmRab29tYWJsZVN1YnRhcmdldHMpOgorICAgICAg
ICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50Ojpjb21waWxlWm9vbWFibGVTdWJ0YXJnZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6YXJlYU9mSW50ZXJzZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6ZmluZEFyZWFXaXRoTGFyZ2VzdElu
dGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmVzdFpvb21hYmxlQXJlYSk6Cisg
ICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbnRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjphcmVhKToKKwogMjAx
Mi0wMy0yOSAgVmluZWV0IENoYXVkaGFyeSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIGN1c3RvbSBiaW5kaW5ncyBmb3JtIEludGVybmFscy5pZGwgb2YgYXR0cmlidXRl
IHR5cGUgQXJyYXkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzI2ODIxZDA5NzQ1ZmI4MzkwN2JiMTU0MGI2ZDlj
OTY5MTQ2ODMwMS4uYTlkMTgyMDlhOGI4YTM1MzYxYjNhNGI3ZTZiZGY0YjE5ZmU1YzZmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTI5ICBBbGxhbiBTYW5kZmVsZCBKZW5z
ZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFtRdF0gRmluZCB6b29tYWJs
ZSBhcmVhIHVzaW5nIGFyZWEtYmFzZWQgaGl0LXRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFyZWEgdG8gZmluZFpvb21hYmxlQXJlYUZv
clBvaW50IGFuZCB1c2UgbmV3IFRPVUNIX0FESlVTVE1FTlQKKyAgICAgICAgY29kZS1wYXRoIHRv
IGZpbmQgdGhlIGJlc3Qgem9vbWFibGUgYXJlYS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAoV2ViUGFnZVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZl
bnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRG91
YmxlVGFwRXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZpbmRab29tYWJs
ZUFyZWFGb3JQb2ludCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgKFdlYlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorCiAyMDEyLTAzLTI4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IGEgY3Jhc2ggYW5kIGFuIGFzc2VydGlvbiB3aGVuIHJl
Y292ZXJpbmcgZnJvbSBhIHdlYiBwcm9jZXNzIGNyYXNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKaW5kZXggYTcxZTg1MTU0NmZjMjBhYjg3Y2E3NzIwNTU2MTc0ZmM2NjYyZWU3Yy4u
ZDVkZTlmMTRiMGEwN2FkZDNiN2JiMjVlZDA1Njc4Y2Y3ZTdmMmM4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjQ3NSw2ICsyNDc1LDE2IEBAIHZvaWQgRXZlbnRIYW5k
bGVyOjpiZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNo
Q2VudGVyLCBjCiAgICAgICAgIHRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCk7CiAgICAgfQogfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6YmVzdFpvb21hYmxlQXJlYUZvclRv
dWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3Vj
aFJhZGl1cywgSW50UmVjdCYgdGFyZ2V0QXJlYSwgTm9kZSomIHRhcmdldE5vZGUpCit7CisgICAg
SGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVl
c3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKKyAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KHRvdWNoQ2VudGVyLCAvKmFsbG93U2hhZG93
Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gZmFsc2UsIERvbnRIaXRUZXN0U2Ny
b2xsYmFycywgaGl0VHlwZSwgdG91Y2hSYWRpdXMpOworCisgICAgSW50UmVjdCB0b3VjaFJlY3Qg
PSByZXN1bHQucmVjdEZvclBvaW50KHRvdWNoQ2VudGVyKTsKKyAgICBSZWZQdHI8U3RhdGljSGFz
aFNldE5vZGVMaXN0PiBub2RlTGlzdCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdDo6YWRvcHQocmVz
dWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSk7CisgICAgZmluZEJlc3Rab29tYWJsZUFyZWEodGFy
Z2V0Tm9kZSwgdGFyZ2V0QXJlYSwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgKm5vZGVMaXN0Lmdl
dCgpKTsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAppbmRleCA3MDFmYTJiZjk0NTU1NDk3NGJkOWRmNDZhNDc2MTkzNzk3
MzA1MzViLi5lNWExYTQxMWM0NzI4ZmYzMzU2MTIwYzU3ZjI0ZjliOGU2OWJmMzc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE2OSw2ICsxNjksNyBAQCBwdWJsaWM6CiAKICNp
ZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKICAgICB2b2lkIGJlc3RDbGlja2FibGVOb2RlRm9y
VG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRv
dWNoUmFkaXVzLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKTsKKyAg
ICB2b2lkIGJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3Vj
aENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFJlY3QmIHRhcmdldEFyZWEs
IE5vZGUqJiB0YXJnZXROb2RlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKaW5kZXggZGQwNTQ2MThkMGY4
MGE4MDI2MjY4NWQ4YjBmNGE5OTdiYjEzYjUzOC4uMWMxYjMyNzVjMWUzNDE4YmZmYmM3NmJjOGYy
ZjQ2NDE2OWI4N2FiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVz
dG1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApA
QCAtOTEsNiArOTEsMTUgQEAgYm9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9k
ZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgbm9kZUlzWm9vbVRhcmdldChOb2RlKiBu
b2RlKQoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+aXNTaGFkb3dSb290
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigp
KTsKKyAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNCb3goKTsKK30KKwogc3RhdGljIGlu
bGluZSB2b2lkIGFwcGVuZFN1YnRhcmdldHNGb3JOb2RlVG9MaXN0KE5vZGUqIG5vZGUsIFN1YnRh
cmdldEdlb21ldHJ5TGlzdCYgc3VidGFyZ2V0cykKIHsKICAgICAvLyBTaW5jZSB0aGUgbm9kZSBp
cyBhIHJlc3VsdCBvZiBhIGhpdCB0ZXN0LCB3ZSBhcmUgYWxyZWFkeSBlbnN1cmVkIGl0IGhhcyBh
IHJlbmRlcmVyLgpAQCAtMTA1LDYgKzExNCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5k
U3VidGFyZ2V0c0Zvck5vZGVUb0xpc3QoTm9kZSogbm9kZSwgU3VidGFyZ2V0R2VvbWV0cnlMaQog
ICAgICAgICBzdWJ0YXJnZXRzLmFwcGVuZChTdWJ0YXJnZXRHZW9tZXRyeShub2RlLCAqaXQpKTsK
IH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFpvb21hYmxlU3VidGFyZ2V0cyhOb2RlKiBu
b2RlLCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3QmIHN1YnRhcmdldHMpCit7CisgICAgUmVuZGVyQm94
KiByZW5kZXJlciA9IHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkpOworICAgIEFTU0VSVChy
ZW5kZXJlcik7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBGbG9hdFJlY3Qg
Ym9yZGVyQm94UmVjdCA9IHJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCk7CisgICAgRmxvYXRSZWN0
IGNvbnRlbnRCb3hSZWN0ID0gcmVuZGVyZXItPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgcXVhZHMu
YXBwZW5kKHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGJvcmRlckJveFJlY3QpKTsKKyAg
ICBpZiAoYm9yZGVyQm94UmVjdCAhPSBjb250ZW50Qm94UmVjdCkKKyAgICAgICAgcXVhZHMuYXBw
ZW5kKHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnRlbnRCb3hSZWN0KSk7CisgICAg
Ly8gRklYTUU6IEZvciBSZW5kZXJCbG9ja3MsIGFkZCBjb2x1bW4gYm94ZXMgYW5kIGNvbnRlbnQg
Ym94ZXMgY2xlYXJlZCBmb3IgZmxvYXRzLgorCisgICAgVmVjdG9yPEZsb2F0UXVhZD46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gcXVhZHMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRRdWFk
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcXVhZHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgc3VidGFyZ2V0cy5hcHBlbmQoU3VidGFyZ2V0R2VvbWV0cnkobm9k
ZSwgKml0KSk7Cit9CisKIC8vIENvbXBpbGVzIGEgbGlzdCBvZiBzdWJ0YXJnZXRzIG9mIGFsbCB0
aGUgcmVsZXZhbnQgdGFyZ2V0IG5vZGVzLgogdm9pZCBjb21waWxlU3VidGFyZ2V0TGlzdChjb25z
dCBOb2RlTGlzdCYgaW50ZXJzZWN0ZWROb2RlcywgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBzdWJ0
YXJnZXRzLCBOb2RlRmlsdGVyIG5vZGVGaWx0ZXIpCiB7CkBAIC0xNjMsNiArMTkxLDE4IEBAIHZv
aWQgY29tcGlsZVN1YnRhcmdldExpc3QoY29uc3QgTm9kZUxpc3QmIGludGVyc2VjdGVkTm9kZXMs
IFN1YnRhcmdldEdlb21ldHJ5TGlzCiAgICAgfQogfQogCisvLyBDb21waWxlcyBhIGxpc3Qgb2Yg
em9vbWFibGUgc3VidGFyZ2V0cy4KK3ZvaWQgY29tcGlsZVpvb21hYmxlU3VidGFyZ2V0cyhjb25z
dCBOb2RlTGlzdCYgaW50ZXJzZWN0ZWROb2RlcywgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBzdWJ0
YXJnZXRzKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGludGVyc2VjdGVkTm9kZXMubGVuZ3Ro
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IE5vZGUqIGNvbnN0IGNhbmRpZGF0ZSA9IGludGVyc2VjdGVkTm9kZXMuaXRlbShpKTsKKyAgICAg
ICAgaWYgKG5vZGVJc1pvb21UYXJnZXQoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgIGFwcGVuZFpv
b21hYmxlU3VidGFyZ2V0cyhjYW5kaWRhdGUsIHN1YnRhcmdldHMpOworICAgIH0KK30KKworCiBm
bG9hdCBkaXN0YW5jZVNxdWFyZWRUb1RhcmdldENlbnRlckxpbmUoY29uc3QgSW50UG9pbnQmIHRv
dWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBTdWJ0YXJnZXRHZW9t
ZXRyeSYgc3VidGFyZ2V0KQogewogICAgIFVOVVNFRF9QQVJBTSh0b3VjaEFyZWEpOwpAQCAtMTc5
LDYgKzIxOSwxOSBAQCBmbG9hdCBkaXN0YW5jZVNxdWFyZWRUb1RhcmdldENlbnRlckxpbmUoY29u
c3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UgogICAgIHJldHVybiByZWN0LmRp
c3RhbmNlU3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhvdHNwb3QpOwogfQogCitm
bG9hdCBhcmVhT2ZJbnRlcnNlY3Rpb24oY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29u
c3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeSYgc3VidGFyZ2V0
KQoreworICAgIFVOVVNFRF9QQVJBTSh0b3VjaEhvdHNwb3QpOworICAgIEludFJlY3QgcmVjdCA9
IHN1YnRhcmdldC5ib3VuZGluZ0JveCgpOworCisgICAgLy8gQ29udmVydCBmcm9tIGZyYW1lIGNv
b3JkaW5hdGVzIHRvIHdpbmRvdyBjb29yZGluYXRlcy4KKyAgICByZWN0ID0gc3VidGFyZ2V0Lm5v
ZGUoKS0+ZG9jdW1lbnQoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgIHJl
Y3QuaW50ZXJzZWN0KHRvdWNoQXJlYSk7CisKKyAgICByZXR1cm4gcmVjdC5zaXplKCkuYXJlYSgp
OworfQorCisKIC8vIEEgZ2VuZXJpYyBmdW5jdGlvbiBmb3IgZmluZGluZyB0aGUgdGFyZ2V0IG5v
ZGUgd2l0aCB0aGUgbG93ZXN0IGRpc3RhbmNlIG1ldHJpYy4gQSBkaXN0YW5jZSBtZXRyaWMgaGVy
ZSBpcyB0aGUgcmVzdWx0CiAvLyBvZiBhIGRpc3RhbmNlLWxpa2UgZnVuY3Rpb24sIHRoYXQgY29t
cHV0ZXMgaG93IHdlbGwgdGhlIHRvdWNoIGhpdHMgdGhlIG5vZGUuCiAvLyBEaXN0YW5jZSBmdW5j
dGlvbnMgY291bGQgZm9yIGluc3RhbmNlIGJlIGRpc3RhbmNlIHNxdWFyZWQgb3IgYXJlYSBvZiBp
bnRlcnNlY3Rpb24uCkBAIC0yMDUsNiArMjU4LDM2IEBAIGJvb2wgZmluZE5vZGVXaXRoTG93ZXN0
RGlzdGFuY2VNZXRyaWMoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50JiB0YXJnZXRQb2ludCwK
ICAgICByZXR1cm4gKHRhcmdldE5vZGUpOwogfQogCisvLyBTaW1pbGFyIGdlbmVyaWMgZnVuY3Rp
b24gYXMgZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWMsIGV4Y2VwdCB0aGlzIGZpbmRz
IHRoZSBpbm5lcm1vc3QgYXJlYSB3aXRoIHRoZSBsYXJnZXN0IGludGVyc2VjdGlvbi4KK2Jvb2wg
ZmluZEFyZWFXaXRoTGFyZ2VzdEludGVyc2VjdGlvbihOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UmVj
dCYgdGFyZ2V0QXJlYSwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVj
dCYgdG91Y2hBcmVhLCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3QmIHN1YnRhcmdldHMpCit7CisgICAg
dGFyZ2V0Tm9kZSA9IDA7CisgICAgZmxvYXQgYmVzdERpc3RhbmNlTWV0cmljID0gMC47CisgICAg
U3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN1YnRhcmdldHMuYmVn
aW4oKTsKKyAgICBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHN1YnRhcmdldHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBOb2RlKiBub2RlID0gaXQtPm5vZGUoKTsKKyAgICAgICAgZmxvYXQgZGlzdGFuY2VNZXRy
aWMgPSBhcmVhT2ZJbnRlcnNlY3Rpb24odG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7Cisg
ICAgICAgIGlmIChkaXN0YW5jZU1ldHJpYyA+IGJlc3REaXN0YW5jZU1ldHJpYykgeworICAgICAg
ICAgICAgdGFyZ2V0QXJlYSA9IGl0LT5ib3VuZGluZ0JveCgpOworICAgICAgICAgICAgdGFyZ2V0
Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBiZXN0RGlzdGFuY2VNZXRyaWMgPSBkaXN0YW5jZU1l
dHJpYzsKKyAgICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZU1ldHJpYyA9PSBiZXN0RGlzdGFuY2VN
ZXRyaWMpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byByZXR1cm4gdGhlIHNtYWxsZXN0IGlubmVy
LW1vc3Qgc3VidGFyZ2V0LgorICAgICAgICAgICAgaWYgKG5vZGUgPT0gdGFyZ2V0Tm9kZSkgewor
ICAgICAgICAgICAgICAgIGlmIChpdC0+Ym91bmRpbmdCb3goKS5zaXplKCkuYXJlYSgpIDwgdGFy
Z2V0QXJlYS5zaXplKCkuYXJlYSgpKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRBcmVhID0g
aXQtPmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzRGVzY2Vu
ZGFudE9mKHRhcmdldE5vZGUpKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0QXJlYSA9IGl0LT5i
b3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBub2RlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICh0YXJnZXROb2RlKTsKK30K
KworCiB9IC8vIG5hbWVzcGFjZSBUb3VjaEFkanVzdG1lbnQKIAogYm9vbCBmaW5kQmVzdENsaWNr
YWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQgJnRhcmdldFBvaW50LCBj
b25zdCBJbnRQb2ludCAmdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0ICZ0b3VjaEFyZWEsIGNv
bnN0IE5vZGVMaXN0JiBub2RlTGlzdCkKQEAgLTIxNCw0ICsyOTcsMTEgQEAgYm9vbCBmaW5kQmVz
dENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQgJnRhcmdldFBv
aW50LCBjb25zdAogICAgIHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2Vz
dERpc3RhbmNlTWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0b3VjaEhvdHNwb3QsIHRv
dWNoQXJlYSwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50OjpkaXN0YW5jZVNxdWFyZWRUb1Rh
cmdldENlbnRlckxpbmUpOwogfQogCitib29sIGZpbmRCZXN0Wm9vbWFibGVBcmVhKE5vZGUqJiB0
YXJnZXROb2RlLCBJbnRSZWN0JiB0YXJnZXRBcmVhLCBjb25zdCBJbnRQb2ludCYgdG91Y2hIb3Rz
cG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0JiBub2RlTGlzdCkK
K3sKKyAgICBUb3VjaEFkanVzdG1lbnQ6OlN1YnRhcmdldEdlb21ldHJ5TGlzdCBzdWJ0YXJnZXRz
OworICAgIFRvdWNoQWRqdXN0bWVudDo6Y29tcGlsZVpvb21hYmxlU3VidGFyZ2V0cyhub2RlTGlz
dCwgc3VidGFyZ2V0cyk7CisgICAgcmV0dXJuIFRvdWNoQWRqdXN0bWVudDo6ZmluZEFyZWFXaXRo
TGFyZ2VzdEludGVyc2VjdGlvbih0YXJnZXROb2RlLCB0YXJnZXRBcmVhLCB0b3VjaEhvdHNwb3Qs
IHRvdWNoQXJlYSwgc3VidGFyZ2V0cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCmluZGV4IGQ1ZGZjMTBmNDQ4ZjJkOWRjMDE5
ZmZkMzZmZGQ4OGM2NDZmODIyMjAuLmJkNGNiOTU5MzhiNWEyNzc4YWJhZGM1MjdkMGFmZmUxYjFl
YTg3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApAQCAtMjksNiArMjks
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlk
YXRlKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IEludFBv
aW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxp
c3QmKTsKK2Jvb2wgZmluZEJlc3Rab29tYWJsZUFyZWEoTm9kZSomIHRhcmdldE5vZGUsIEludFJl
Y3QmIHRhcmdldEFyZWEsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJl
Y3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmKTsKIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhl
IHNpbWlsYXIgZnVuY3Rpb25zIGZvciBvdGhlciBnZXN0dXJlcyBoZXJlIGFzIHdlbGwuCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFNpemUuaAppbmRleCBmMTFmODE1Yzc0NmFhMTcyMGI2YzQ4NGMwNDA0MzZmMTFkMDVkOGRjLi44
ZWM2NTM5YTA2OTAyMjQwY2UxZGUzYTYxMjc3ZjY0YzE4ZTE5YjhlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC0xMDQsNiArMTA0LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgKnRoaXMgPSBleHBhbmRlZFRvKEludFNpemUoKSk7CiAgICAgfQogCisgICAg
aW50IGFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX2hlaWdo
dDsKKyAgICB9CisKICAgICBpbnQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9oZWlnaHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZjJmMTA5ODA0MjQwNzY3ZDI1
MmE1OTY4NTQ3ZTYxMjM1NjY5OTYyOS4uOWY0MGRlNDNiMDI3NWUyMzA5NGQ3ZjQ5MTFjNDU4MWQy
NzE3MWE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNjU0LDYgKzY1
NCwyMyBAQCBOb2RlKiBJbnRlcm5hbHM6OnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxl
Tm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aAogICAgIGRvY3VtZW50LT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KHBvaW50LCByYWRp
dXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOwogICAgIHJldHVybiB0YXJnZXROb2RlOwog
fQorCitQYXNzUmVmUHRyPENsaWVudFJlY3Q+IEludGVybmFsczo6YmVzdFpvb21hYmxlQXJlYUZv
clRvdWNoUG9pbnQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1
bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAv
IDIsIGhlaWdodCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwg
eSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50
UmVjdCB6b29tYWJsZUFyZWE7CisgICAgZG9jdW1lbnQtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5iZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQb2ludChwb2ludCwgcmFkaXVzLCB6b29tYWJsZUFy
ZWEsIHRhcmdldE5vZGUpOworICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUoem9vbWFibGVB
cmVhKTsKK30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IGEw
NjEzYWMyMTdiODNlYjlmODEzZWZhOTA4NzcxM2QwMGNmOGEzYjguLjcxMTY5MmYwNmQ4MmNjNzMy
YjI5MGRiNDg2NjNlODk4NmRjNTZmZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApA
QCAtMTIxLDYgKzEyMSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkK
ICAgICBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RD
bGlja2FibGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9j
dW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgTm9kZSogdG91Y2hOb2RlQWRqdXN0ZWRUb0Jl
c3RDbGlja2FibGVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwg
RG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBi
ZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQb2ludChsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwg
bG9uZyBoZWlnaHQsIERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKICAgICBp
bnQgbGFzdFNwZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggN2Q5OGJlYWZlODVjMDYy
NzVjYjA2MjdjMjQ1YmJiMGYzOWQ1M2UxZC4uNzdkYjAzZTkzMTY1ZTFlZTU5YmZkNzEwZTRiMzM0
OTY1M2VkMmIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtOTUsNiAr
OTUsNyBAQCBtb2R1bGUgd2luZG93IHsKICNpZiBkZWZpbmVkKEVOQUJMRV9UT1VDSF9BREpVU1RN
RU5UKSAmJiBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVAogICAgICAgICBXZWJLaXRQb2ludCB0b3Vj
aFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGluIGxvbmcgeCwgaW4gbG9uZyB5
LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJh
aXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgTm9kZSB0b3VjaE5vZGVBZGp1c3RlZFRvQmVz
dENsaWNrYWJsZU5vZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgd2lkdGgsIGluIGxv
bmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwor
ICAgICAgICBDbGllbnRSZWN0IGJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGluIGxvbmcg
eCwgaW4gbG9uZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQg
ZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICNlbmRpZgogCiAgICAgICAgIGxvbmcg
bGFzdFNwZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKaW5kZXggM2U2MzJhYjRmNTdkNWNlZjNjMzBhMDhkMTBkM2RlMzVhZDVmNmMzNy4uMGFlZGEw
ZWI1OTkxYTI4MTA2ODAxMTk2OGY4NzIxNzUxNDU0YTA0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTI0MzUsMTIgKzI0MzUsMTIgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgSW50UG9pbnQmIHRhcmdldCwgY29u
c3QgSW50UmVjdCYgYXIKICAgICBtX3BhZ2VDbGllbnQtPmRpZEZpbmRab29tYWJsZUFyZWEodGFy
Z2V0LCBhcmVhKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRab29tYWJsZUFyZWFGb3JQ
b2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFpvb21h
YmxlQXJlYUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYgYXJl
YSkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQocG9p
bnQpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpG
aW5kWm9vbWFibGVBcmVhRm9yUG9pbnQocG9pbnQsIGFyZWEpLCBtX3BhZ2VJRCk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChj
b25zdCBTdHJpbmcmIGNvbnRlbnRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IGI0MDlmMDRmZDI0ZjZkMGUwYWJlMDM2OGJiNzYxM2RjODY3MzUxNTQuLjY4MzFm
Mzk0OWMxMmIyZTk5MWUzMDY0YmUyMjZhZWQyMzFiYTFmZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTU3Niw3ICs1NzYsNyBAQCBwdWJsaWM6CiAgICAgV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMoKSBjb25zdDsKIAogI2lm
IFBMQVRGT1JNKFFUKQotICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kik7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFu
ZGxlci5jcHAKaW5kZXggMTBkYWQ3YTQ2NDMyYzI2Y2EyZTNiYTJmMDRiNTFmMmM5YjAwMmVlNi4u
M2U3OGNhMmNmNWY4NGY2NDFmYmY3MTU4Y2VkNThjYzdkZWUwMzk2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKQEAg
LTI1NSw3ICsyNTUsNyBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlU2luZ2xl
VGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmCiB2b2lkIFF0V2ViUGFnZUV2
ZW50SGFuZGxlcjo6aGFuZGxlRG91YmxlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNo
UG9pbnQmIHBvaW50KQogewogICAgIFFUcmFuc2Zvcm0gZnJvbUl0ZW1UcmFuc2Zvcm0gPSBtX3dl
YlBhZ2UtPnRyYW5zZm9ybUZyb21JdGVtKCk7Ci0gICAgbV93ZWJQYWdlUHJveHktPmZpbmRab29t
YWJsZUFyZWFGb3JQb2ludChmcm9tSXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkpLnRvUG9p
bnQoKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChmcm9t
SXRlbVRyYW5zZm9ybS5tYXAocG9pbnQucG9zKCkpLnRvUG9pbnQoKSwgSW50U2l6ZShwb2ludC5y
ZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVy
Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5ZjhmYjhlMjQ2YjExYjQyMGRlZWYwYzhkMTlj
ZDE2ZWMwMGE5MDA5Li44ZWJkODFjMmVjYWEzNDE4MWQ5NDY0ODEyMGVlOWNlZDRlNzk3ZDcyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0y
NTEwLDkgKzI1MTAsMjggQEAgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QqIFdlYlBhZ2U6
OmJhY2tGb3J3YXJkTGlzdCgpCiB9CiAKICNpZiBQTEFURk9STShRVCkKLXZvaWQgV2ViUGFnZTo6
ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkK
KyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKK3ZvaWQgV2ViUGFnZTo6ZmluZFpvb21hYmxl
QXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgYXJlYSkKIHsKICAgICBGcmFtZSogbWFpbmZyYW1lID0gbV9tYWluRnJhbWUt
PmNvcmVGcmFtZSgpOworICAgIE5vZGUqIG5vZGUgPSAwOworICAgIEludFJlY3Qgem9vbWFibGVB
cmVhOworICAgIG1haW5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmJlc3Rab29tYWJsZUFyZWFGb3JU
b3VjaFBvaW50KHBvaW50LCBhcmVhLCB6b29tYWJsZUFyZWEsIG5vZGUpOworCisgICAgQVNTRVJU
KG5vZGUpOworICAgIGlmIChub2RlLT5kb2N1bWVudCgpICYmIG5vZGUtPmRvY3VtZW50KCktPmZy
YW1lKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dmlldygpKSB7CisgICAgICAgIGNv
bnN0IFNjcm9sbFZpZXcqIHZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT52aWV3KCk7
CisgICAgICAgIHpvb21hYmxlQXJlYSA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coem9vbWFibGVB
cmVhKTsKKyAgICB9CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRa
b29tYWJsZUFyZWEocG9pbnQsIHpvb21hYmxlQXJlYSkpOworfQorCisjZWxzZQordm9pZCBXZWJQ
YWdlOjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBv
aW50LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBhcmVhKQoreworICAgIFVOVVNFRF9QQVJBTShh
cmVhKTsKKyAgICBGcmFtZSogbWFpbmZyYW1lID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpOwog
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbWFpbmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0
VGVzdFJlc3VsdEF0UG9pbnQobWFpbmZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9p
bnQpLCAvKmFsbG93U2hhZG93Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1
ZSk7CiAKICAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwpAQCAtMjU0Nyw2ICsy
NTY2LDcgQEAgdm9pZCBXZWJQYWdlOjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50KQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkRmluZFpvb21hYmxlQXJlYShwb2ludCwgem9vbWFibGVBcmVhKSk7CiB9CiAjZW5kaWYKKyNl
bmRpZgogCiBXZWJQYWdlOjpTYW5kYm94RXh0ZW5zaW9uVHJhY2tlcjo6flNhbmRib3hFeHRlbnNp
b25UcmFja2VyKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCmluZGV4IGU5ZGUyZWRjMGM4ZjM1MjkxODVhNTYxOWRhNTYyNGY2MTM5NDFiM2YuLjZhODUy
ZDRlMzA5NTJhNDYzMTRiYTRjZTc1MmUyZjBmYWMxNzk2ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjI3LDcgKzYyNyw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWludDMyX3QgZmlu
ZE9wdGlvbnMsIHVpbnQzMl90IG1heE1hdGNoQ291bnQpOwogCiAjaWYgUExBVEZPUk0oUVQpCi0g
ICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKKyAgICB2b2lkIGZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGFyZWEpOwogI2VuZGlmCiAKICAgICB2b2lk
IGRpZENoYW5nZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJbmRl
eCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCmluZGV4IDE5MzVmZTMzMzdmNzU0MDBmNDMxMzFkNTMzN2Y0NDBiYjg2YzJl
ZDkuLjg5OWU3NTljNjRmNzZhYWFiZThkNGJlOTBiYzdiY2U3YTg1Y2Y1NjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CkBAIC0yNTQsNyArMjU0LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAgICAgR2VzdHVyZURp
ZEVuZCgpCiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKLSAgICBGaW5kWm9vbWFibGVBcmVhRm9y
UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCisgICAgRmluZFpvb21hYmxlQXJlYUZvclBv
aW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpJbnRTaXplIGFyZWEpCiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3pvb20tYmFzaWMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3pvb20tYmFzaWMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MzgxMzFiNzFmYjhjOTMyMTViZGY0M2JkNzAyYzQyYWQ2
MmZmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvem9v
bS1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorVGVzdCBiYXNpYyBjYXNlcyBv
ZiB0YXAtdG8tem9vbSBtZWNoYW5pY3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIHpvb21hYmxlQXJlYS50b3AgaXMgMTAwCitQQVNTIHpvb21hYmxlQXJlYS5sZWZ0IGlz
IDEwMAorUEFTUyB6b29tYWJsZUFyZWEud2lkdGggaXMgMjAwCitQQVNTIHpvb21hYmxlQXJlYS5o
ZWlnaHQgaXMgMTAwCitQQVNTIHpvb21hYmxlQXJlYS50b3AgaXMgMjEwCitQQVNTIHpvb21hYmxl
QXJlYS5sZWZ0IGlzIDExMAorUEFTUyB6b29tYWJsZUFyZWEud2lkdGggaXMgMTgwCitQQVNTIHpv
b21hYmxlQXJlYS5oZWlnaHQgaXMgODAKK1BBU1Mgem9vbWFibGVBcmVhLnRvcCBpcyAyMDAKK1BB
U1Mgem9vbWFibGVBcmVhLmxlZnQgaXMgMTAwCitQQVNTIHpvb21hYmxlQXJlYS53aWR0aCBpcyAy
MDAKK1BBU1Mgem9vbWFibGVBcmVhLmhlaWdodCBpcyAxMDAKK1BBU1Mgem9vbWFibGVBcmVhLnRv
cCBpcyA1MAorUEFTUyB6b29tYWJsZUFyZWEubGVmdCBpcyA1MAorUEFTUyB6b29tYWJsZUFyZWEu
d2lkdGggaXMgMzAwCitQQVNTIHpvb21hYmxlQXJlYS5oZWlnaHQgaXMgMzAwCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3pvb20tYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC96b29tLWJhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ4MjQ1NWM2YmU5NzQ2
ZDcyMjJhNjc2OGFhZmVkZTYxMjRhYzQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3RvdWNoYWRqdXN0bWVudC96b29tLWJhc2ljLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWw+
Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorICAgIDxzdHlsZT4KKyAgICAgICAgI2RpdjAgeyBwb3NpdGlvbjog
YWJzb2x1dGU7IGxlZnQ6IDUwcHg7IHRvcDogNTBweDsgd2lkdGg6IDMwMHB4OyBoZWlnaHQ6IDMw
MHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CisgICAgICAgICNkaXYxIHsgcG9zaXRpb246
IGFic29sdXRlOyBsZWZ0OiA1MHB4OyB0b3A6IDUwCitweDsgd2lkdGg6IDIwMHB4OyBoZWlnaHQ6
IDEwMHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CisgICAgICAgICNkaXYyIHsgcG9zaXRp
b246IGFic29sdXRlOyBsZWZ0OiA1MHB4OyB0b3A6IDE1MHB4OyB3aWR0aDogMjAwcHg7IGhlaWdo
dDogMTAwcHg7IHBhZGRpbmc6IDEwcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KKyAgICA8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBpZD1k
aXYwPgorICAgIDxkaXYgaWQ9ZGl2MT48L2Rpdj4KKyAgICA8ZGl2IGlkPWRpdjI+PC9kaXY+Cis8
L2Rpdj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rp
dj4KKworPHNjcmlwdD4KKyAgICBmdW5jdGlvbiB0ZXN0Um91bmRUb3VjaCh4LCB5LCByYWRpdXMp
CisgICAgeworICAgICAgICB2YXIgeCA9IHggLSByYWRpdXM7CisgICAgICAgIHZhciB5ID0geSAt
IHJhZGl1czsKKyAgICAgICAgdmFyIHdpZHRoID0gcmFkaXVzICogMjsKKyAgICAgICAgdmFyIGhl
aWdodCA9IHJhZGl1cyAqIDI7CisgICAgICAgIHZhciB6b29tYWJsZVJlY3QgPSBpbnRlcm5hbHMu
YmVzdFpvb21hYmxlQXJlYUZvclRvdWNoUG9pbnQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9jdW1l
bnQpOworICAgICAgICByZXR1cm4gem9vbWFibGVSZWN0OworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIHpvb21hYmxlQXJlYSA9IHRlc3RS
b3VuZFRvdWNoKDEzMCwgMTMwLCAxMCk7CisgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3pvb21h
YmxlQXJlYS50b3AnLCAxMDApOworICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCd6b29tYWJsZUFy
ZWEubGVmdCcsIDEwMCk7CisgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3pvb21hYmxlQXJlYS53
aWR0aCcsIDIwMCk7CisgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3pvb21hYmxlQXJlYS5oZWln
aHQnLCAxMDApOworCisgICAgICAgIHpvb21hYmxlQXJlYSA9IHRlc3RSb3VuZFRvdWNoKDEzMCwg
MjMwLCAxMCk7CisgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3pvb21hYmxlQXJlYS50b3AnLCAy
MTApOworICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCd6b29tYWJsZUFyZWEubGVmdCcsIDExMCk7
CisgICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3pvb21hYmxlQXJlYS53aWR0aCcsIDE4MCk7Cisg
ICAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ3pvb21hYmxlQXJlYS5oZWlnaHQnLCA4MCk7CisKKyAg
ICAgICAgem9vbWFibGVBcmVhID0gdGVzdFJvdW5kVG91Y2goMTIwLCAyMjAsIDIwKTsKKyAgICAg
ICAgc2hvdWxkRXZhbHVhdGVUbygnem9vbWFibGVBcmVhLnRvcCcsIDIwMCk7CisgICAgICAgIHNo
b3VsZEV2YWx1YXRlVG8oJ3pvb21hYmxlQXJlYS5sZWZ0JywgMTAwKTsKKyAgICAgICAgc2hvdWxk
RXZhbHVhdGVUbygnem9vbWFibGVBcmVhLndpZHRoJywgMjAwKTsKKyAgICAgICAgc2hvdWxkRXZh
bHVhdGVUbygnem9vbWFibGVBcmVhLmhlaWdodCcsIDEwMCk7CisKKyAgICAgICAgem9vbWFibGVB
cmVhID0gdGVzdFJvdW5kVG91Y2goODAsIDEwMCwgMjApOworICAgICAgICBzaG91bGRFdmFsdWF0
ZVRvKCd6b29tYWJsZUFyZWEudG9wJywgNTApOworICAgICAgICBzaG91bGRFdmFsdWF0ZVRvKCd6
b29tYWJsZUFyZWEubGVmdCcsIDUwKTsKKyAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygnem9vbWFi
bGVBcmVhLndpZHRoJywgMzAwKTsKKyAgICAgICAgc2hvdWxkRXZhbHVhdGVUbygnem9vbWFibGVB
cmVhLmhlaWdodCcsMzAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAg
eworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5pbnRl
cm5hbHMgJiYgaW50ZXJuYWxzLmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KSB7CisgICAg
ICAgICAgICBkZXNjcmlwdGlvbignVGVzdCBiYXNpYyBjYXNlcyBvZiB0YXAtdG8tem9vbSBtZWNo
YW5pY3MuJyk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQ
YXJzZWQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>