<?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>295003</bug_id>
          
          <creation_ts>2025-06-25 19:09:24 -0700</creation_ts>
          <short_desc>[css-anchor-position-1] Scrolling anchor doesn&apos;t trigger fallback when anchored box&apos;s containing block is the scroller</short_desc>
          <delta_ts>2025-08-15 12:48:00 -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>WebKit Local 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>289743</blocked>
    
    <blocked>291856</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="fantasai">fantasai.bugs</reporter>
          <assigned_to name="fantasai">fantasai.bugs</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>kiet.ho</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2125917</commentid>
    <comment_count>0</comment_count>
    <who name="fantasai">fantasai.bugs</who>
    <bug_when>2025-06-25 19:09:24 -0700</bug_when>
    <thetext>Overview:

In cases where the containing block of an anchored box is a scroll container that also contains the anchor, we are not triggering fallback as we scroll the box into to the edge of the containing block. WPTs assume that this is the required behavior, however.

Affected WPT Tests: http://wpt.live/css/css-anchor-position/
* anchor-scroll-position-try-*
* position-area-scrolling-00[567]
* position-try-fallbacks-003

Specification Notes:

It&apos;s not 100% clear what the correct behavior is, i.e. whether the anchored box is contained by the scroll container&apos;s outer padding edge, or by its inner (scrollable) padding edge. On the root element, only fixed-positioned boxes are contained by the scrollport edge; absolutely-positioned boxes are contained by the scrollable area (roughly speaking). So this might need some investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2125918</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2025-06-25 19:09:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/154349365&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2129254</commentid>
    <comment_count>2</comment_count>
    <who name="fantasai">fantasai.bugs</who>
    <bug_when>2025-07-10 23:26:28 -0700</bug_when>
    <thetext>Discussed this with Tab, we agree that the tests where the containing block is the scroller are wrong -- scrolling these should not trigger fallback. But for the tests where the containing block is an ancestor of the scroller, those should trigger fallback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2135570</commentid>
    <comment_count>3</comment_count>
      <attachid>476346</attachid>
    <who name="fantasai">fantasai.bugs</who>
    <bug_when>2025-08-10 20:38:56 -0700</bug_when>
    <thetext>Created attachment 476346
WIP

Attaching WIP. Still have a few failing tests to fix up (anchor-scroll-nested, anchor-scroll-to-sticky-002, and position-visibility-anchors-visible-change-anchor are newly failing, so I have to figure out why). But it fixes the first five anchor-scroll-position-try, and hopefully sets us up to pass the remaining ones once last-remembered-fallback is fixed, and also fixes the js-expose test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2136136</commentid>
    <comment_count>4</comment_count>
    <who name="fantasai">fantasai.bugs</who>
    <bug_when>2025-08-13 00:15:35 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/49318</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2136856</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-08-15 12:47:57 -0700</bug_when>
    <thetext>Committed 298770@main (90fc9aa7e180): &lt;https://commits.webkit.org/298770@main&gt;

Reviewed commits have been landed. Closing PR #49318 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>476346</attachid>
            <date>2025-08-10 20:38:56 -0700</date>
            <delta_ts>2025-08-10 20:38:56 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>53384</size>
            <attacher name="fantasai">fantasai.bugs</attacher>
            
              <data encoding="base64">Y29tbWl0IDQ2NTAwZTk5ZDMzMjg5ZWJjYWEyNWQ3MWUzMThkYmVmMTMzNWQwZDMKQXV0aG9yOiBF
bGlrYSBFdGVtYWQgPGZhbnRhc2FpLmJ1Z3NAaW5rZWRibGFkZS5uZXQ+CkRhdGU6ICAgVGh1IEF1
ZyA3IDEyOjAyOjA0IDIwMjUgLTA0MDAKCiAgICBBbmNob3IgU2Nyb2xsIEZhbGxiYWNrIFdJUAoK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnktMDAxLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnktMDAxLWV4
cGVjdGVkLnR4dAppbmRleCA5ZWMxODljOTUxMjguLjgzMzhmODRlZDAyOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWFuY2hv
ci1wb3NpdGlvbi9hbmNob3Itc2Nyb2xsLXBvc2l0aW9uLXRyeS0wMDEtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1h
bmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnktMDAxLWV4cGVjdGVkLnR4
dApAQCAtMSw4ICsxLDggQEAKIAogUEFTUyBTaG91bGQgYmUgYWJvdmUgdGhlIGFuY2hvciB3aGVu
IGF0IGluaXRpYWwgc2Nyb2xsIHBvc2l0aW9uCiBQQVNTIFNjcm9sbCBkb3duIHVudGlsIHRoZSB0
b3AgZWRnZSBvZiAjYW5jaG9yIHRvdWNoZXMgY29udGFpbmVyIGJ1dCBub3Qgb3ZlcmZsb3dpbmcK
LUZBSUwgU2Nyb2xsIGZ1cnRoZXIgZG93biwgbWFraW5nIHRoZSBmaXJzdCBmYWxsYmFjayBwb3Np
dGlvbiBvdmVyZmxvdyBieSAxcHggYXNzZXJ0X2VxdWFsczogQW5jaG9yZWQgZWxlbWVudCBzaG91
bGQgYmUgYXQgdGhlIGxlZnQgb2YgYW5jaG9yIGV4cGVjdGVkIDI1OCBidXQgZ290IDM1OAotRkFJ
TCBTY3JvbGwgYmFjayB1cCBzbyB0aGF0IGJvdGggdGhlIGZpcnN0IGFuZCBzZWNvbmQgb3B0aW9u
cyBmaXQuIGFzc2VydF9lcXVhbHM6IEFuY2hvcmVkIGVsZW1lbnQgc2hvdWxkIGJlIGF0IHRoZSBs
ZWZ0IG9mIGFuY2hvciBleHBlY3RlZCAyNTggYnV0IGdvdCAzNTgKK1BBU1MgU2Nyb2xsIGZ1cnRo
ZXIgZG93biwgbWFraW5nIHRoZSBmaXJzdCBmYWxsYmFjayBwb3NpdGlvbiBvdmVyZmxvdyBieSAx
cHgKK1BBU1MgU2Nyb2xsIGJhY2sgdXAgc28gdGhhdCBib3RoIHRoZSBmaXJzdCBhbmQgc2Vjb25k
IG9wdGlvbnMgZml0LgogUEFTUyBTY3JvbGwgZnVydGhlciB1cCwgd2hlcmUgdGhlIHNlY29uZCBv
cHRpb24gbm8gbG9uZ2VyIGZpdHMKLUZBSUwgU2Nyb2xsIGJvdHRvbS1yaWdodCB0byBtYWtlIHRo
ZSBmaXJzdCB0d28gb3B0aW9ucyBvdmVyZmxvdyBhc3NlcnRfZXF1YWxzOiBBbmNob3JlZCBlbGVt
ZW50IHNob3VsZCBiZSBhdCB0aGUgcmlnaHQgb2YgYW5jaG9yIGV4cGVjdGVkIDMwNyBidXQgZ290
IDIwNworUEFTUyBTY3JvbGwgYm90dG9tLXJpZ2h0IHRvIG1ha2UgdGhlIGZpcnN0IHR3byBvcHRp
b25zIG92ZXJmbG93CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3Np
dGlvbi10cnktMDAyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3Np
dGlvbi10cnktMDAyLWV4cGVjdGVkLnR4dAppbmRleCA5M2YzZWExZmEyYTQuLjdiOWI4NzNkZjll
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWFuY2hvci1wb3NpdGlvbi9hbmNob3Itc2Nyb2xsLXBvc2l0aW9uLXRyeS0wMDIt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnkt
MDAyLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKIAogUEFTUyBTaG91bGQgdXNlIHRoZSBm
aXJzdCBmYWxsYmFjayBwb3NpdGlvbiBhdCB0aGUgaW5pdGlhbCBzY3JvbGwgb2Zmc2V0Ci1GQUlM
IFNob3VsZCB1c2UgdGhlIHNlY29uZCBmYWxsYmFjayBwb3NpdGlvbiBhZnRlciBzY3JvbGxpbmcg
bGVmdCBhc3NlcnRfZXF1YWxzOiBBbmNob3JlZCBlbGVtZW50IHNob3VsZCBiZSBhdCB0aGUgbGVm
dCBvZiBhbmNob3IgZXhwZWN0ZWQgNjAxIGJ1dCBnb3QgODAxCitQQVNTIFNob3VsZCB1c2UgdGhl
IHNlY29uZCBmYWxsYmFjayBwb3NpdGlvbiBhZnRlciBzY3JvbGxpbmcgbGVmdAogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
YW5jaG9yLXBvc2l0aW9uL2FuY2hvci1zY3JvbGwtcG9zaXRpb24tdHJ5LTAwMy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
YW5jaG9yLXBvc2l0aW9uL2FuY2hvci1zY3JvbGwtcG9zaXRpb24tdHJ5LTAwMy1leHBlY3RlZC50
eHQKaW5kZXggNGQ0MmY4NjU1NTNkLi40OGFlN2E1MWM1ZTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRp
b24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnktMDAzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtYW5jaG9yLXBv
c2l0aW9uL2FuY2hvci1zY3JvbGwtcG9zaXRpb24tdHJ5LTAwMy1leHBlY3RlZC50eHQKQEAgLTEs
NCArMSw0IEBACiAKIFBBU1MgU2hvdWxkIHVzZSB0aGUgZmlyc3QgZmFsbGJhY2sgcG9zaXRpb24g
YXQgdGhlIGluaXRpYWwgc2Nyb2xsIG9mZnNldAotRkFJTCBTaG91bGQgdXNlIHRoZSBzZWNvbmQg
ZmFsbGJhY2sgcG9zaXRpb24gYWZ0ZXIgc2Nyb2xsaW5nIHVwIGFzc2VydF9lcXVhbHM6IEFuY2hv
cmVkIGVsZW1lbnQgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2YgYW5jaG9yIGV4cGVjdGVkIDIxMCBi
dXQgZ290IDQxMAorUEFTUyBTaG91bGQgdXNlIHRoZSBzZWNvbmQgZmFsbGJhY2sgcG9zaXRpb24g
YWZ0ZXIgc2Nyb2xsaW5nIHVwCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9s
bC1wb3NpdGlvbi10cnktMDA0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9s
bC1wb3NpdGlvbi10cnktMDA0LWV4cGVjdGVkLnR4dAppbmRleCA4NDMxZjg4YjQyN2YuLjU4OWY4
MzFjZWYyZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLWFuY2hvci1wb3NpdGlvbi9hbmNob3Itc2Nyb2xsLXBvc2l0aW9uLXRy
eS0wMDQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3NpdGlv
bi10cnktMDA0LWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDUgQEAKIAogUEFTUyBTaG91bGQgdXNl
IHRoZSBmaXJzdCBmYWxsYmFjayBwb3NpdGlvbiBhdCB0aGUgaW5pdGlhbCBzY3JvbGwgb2Zmc2V0
cwotRkFJTCBTaG91bGQgdXNlIHRoZSBzZWNvbmQgZmFsbGJhY2sgcG9zaXRpb24gYWZ0ZXIgc2Ny
b2xsaW5nIHZpZXdwb3J0IGRvd24gYXNzZXJ0X2VxdWFsczogQW5jaG9yZWQgZWxlbWVudCBzaG91
bGQgYmUgYXQgdGhlIGJvdHRvbSBvZiBhbmNob3IgZXhwZWN0ZWQgMTk5IGJ1dCBnb3QgLTEKLUZB
SUwgU2hvdWxkIHVzZSB0aGUgdGhpcmQgZmFsbGJhY2sgcG9zaXRpb24gYWZ0ZXIgc2Nyb2xsaW5n
IHRoZSB2cmwgc2Nyb2xsZXIgbGVmdCBhc3NlcnRfZXF1YWxzOiBBbmNob3JlZCBlbGVtZW50IHNo
b3VsZCBiZSBhdCB0aGUgbGVmdCBvZiBhbmNob3IgZXhwZWN0ZWQgNzEwIGJ1dCBnb3QgODEwCitQ
QVNTIFNob3VsZCB1c2UgdGhlIHNlY29uZCBmYWxsYmFjayBwb3NpdGlvbiBhZnRlciBzY3JvbGxp
bmcgdmlld3BvcnQgZG93bgorUEFTUyBTaG91bGQgdXNlIHRoZSB0aGlyZCBmYWxsYmFjayBwb3Np
dGlvbiBhZnRlciBzY3JvbGxpbmcgdGhlIHZybCBzY3JvbGxlciBsZWZ0CiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNo
b3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnktMDA1LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNo
b3ItcG9zaXRpb24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnktMDA1LWV4cGVjdGVkLnR4dApp
bmRleCA5M2YzZWExZmEyYTQuLjdiOWI4NzNkZjllOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWFuY2hvci1wb3NpdGlvbi9h
bmNob3Itc2Nyb2xsLXBvc2l0aW9uLXRyeS0wMDUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1hbmNob3ItcG9zaXRp
b24vYW5jaG9yLXNjcm9sbC1wb3NpdGlvbi10cnktMDA1LWV4cGVjdGVkLnR4dApAQCAtMSw0ICsx
LDQgQEAKIAogUEFTUyBTaG91bGQgdXNlIHRoZSBmaXJzdCBmYWxsYmFjayBwb3NpdGlvbiBhdCB0
aGUgaW5pdGlhbCBzY3JvbGwgb2Zmc2V0Ci1GQUlMIFNob3VsZCB1c2UgdGhlIHNlY29uZCBmYWxs
YmFjayBwb3NpdGlvbiBhZnRlciBzY3JvbGxpbmcgbGVmdCBhc3NlcnRfZXF1YWxzOiBBbmNob3Jl
ZCBlbGVtZW50IHNob3VsZCBiZSBhdCB0aGUgbGVmdCBvZiBhbmNob3IgZXhwZWN0ZWQgNjAxIGJ1
dCBnb3QgODAxCitQQVNTIFNob3VsZCB1c2UgdGhlIHNlY29uZCBmYWxsYmFjayBwb3NpdGlvbiBh
ZnRlciBzY3JvbGxpbmcgbGVmdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xv
Y2FsRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYWxGcmFtZVZpZXcuY3Bw
CmluZGV4IDc2NWMzMGZlOGFjNC4uZjA5YmZmNGZmZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0xvY2FsRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xv
Y2FsRnJhbWVWaWV3LmNwcApAQCAtNDUyNiw4ICs0NTI2LDggQEAgdm9pZCBMb2NhbEZyYW1lVmll
dzo6dXBkYXRlU2Nyb2xsQW5jaG9yaW5nUG9zaXRpb25Gb3JTY3JvbGxhYmxlQXJlYXMoKQogCiB2
b2lkIExvY2FsRnJhbWVWaWV3Ojp1cGRhdGVBbmNob3JQb3NpdGlvbmVkQWZ0ZXJTY3JvbGwoKQog
ewotICAgIGlmIChSZWZQdHIgZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAg
ICBTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OnVwZGF0ZVBvc2l0aW9uc0FmdGVyU2Ny
b2xsKCpkb2N1bWVudCk7CisgICAgaWYgKENoZWNrZWRQdHIgcmVuZGVyVmlldyA9IGNoZWNrZWRS
ZW5kZXJWaWV3KCkpCisgICAgICAgIFN0eWxlOjpBbmNob3JQb3NpdGlvbkV2YWx1YXRvcjo6dXBk
YXRlU2Nyb2xsQWRqdXN0bWVudHMoKnJlbmRlclZpZXcpOwogfQogCiBJbnRTaXplIExvY2FsRnJh
bWVWaWV3OjpzaXplRm9yUmVzaXplRXZlbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9Mb2NhbEZyYW1lVmlld0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Mb2NhbEZyYW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDY3NTQyY2NmZGY0
ZS4uZGRkMDBiY2EzNGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2FsRnJh
bWVWaWV3TGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhbEZy
YW1lVmlld0xheW91dENvbnRleHQuY3BwCkBAIC04MTUsNiArODE1LDM2IEBAIHZvaWQgTG9jYWxG
cmFtZVZpZXdMYXlvdXRDb250ZXh0OjpjaGVja0xheW91dFN0YXRlKCkKIH0KICNlbmRpZgogCitB
bmNob3JTY3JvbGxBZGp1c3RlciogTG9jYWxGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjphbmNob3JT
Y3JvbGxBZGp1c3RlckZvcihjb25zdCBSZW5kZXJCb3gmIGFuY2hvcmVkKQoreworICAgIGF1dG8g
aW5kZXggPSBtX2FuY2hvclNjcm9sbEFkanVzdGVycy5maW5kSWYoWyZdKGF1dG8mIGl0ZW0peyBy
ZXR1cm4gaXRlbS5hbmNob3JlZCgpID09ICZhbmNob3JlZDsgfSk7CisgICAgaWYgKFdURjo6bm90
Rm91bmQgPT0gaW5kZXgpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuICZtX2FuY2hv
clNjcm9sbEFkanVzdGVyc1tpbmRleF07Cit9CisKK3ZvaWQgTG9jYWxGcmFtZVZpZXdMYXlvdXRD
b250ZXh0OjpyZWdpc3RlckFuY2hvclNjcm9sbEFkanVzdGVyKEFuY2hvclNjcm9sbEFkanVzdGVy
JiYgc2Nyb2xsQWRqdXN0ZXIpCit7CisKKyAgICBhdXRvIGluZGV4ID0gbV9hbmNob3JTY3JvbGxB
ZGp1c3RlcnMuZmluZElmKFsmXShhdXRvJiBpdGVtKXsgcmV0dXJuIGl0ZW0uYW5jaG9yZWQoKSA9
PSBzY3JvbGxBZGp1c3Rlci5hbmNob3JlZCgpOyB9KTsKKyAgICBpZiAoV1RGOjpub3RGb3VuZCA9
PSBpbmRleCkKKyAgICAgICAgbV9hbmNob3JTY3JvbGxBZGp1c3RlcnMuYXBwZW5kKFdURk1vdmUo
c2Nyb2xsQWRqdXN0ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYW5jaG9yU2Nyb2xsQWRqdXN0
ZXJzW2luZGV4XSA9IFdURk1vdmUoc2Nyb2xsQWRqdXN0ZXIpOworfQorCit2b2lkIExvY2FsRnJh
bWVWaWV3TGF5b3V0Q29udGV4dDo6dW5yZWdpc3RlckFuY2hvclNjcm9sbEFkanVzdGVyRm9yKGNv
bnN0IFJlbmRlckJveCYgYW5jaG9yZWQpCit7CisgICAgbV9hbmNob3JTY3JvbGxBZGp1c3RlcnMu
cmVtb3ZlRmlyc3RNYXRjaGluZyhbJl0oYXV0byYgaXRlbSl7IHJldHVybiBpdGVtLmFuY2hvcmVk
KCkgPT0gJmFuY2hvcmVkOyB9KTsKKyAgICBBU1NFUlQoIW1fYW5jaG9yU2Nyb2xsQWRqdXN0ZXJz
LmNvbnRhaW5zSWYoWyZdKGF1dG8mIGl0ZW0peyByZXR1cm4gaXRlbS5hbmNob3JlZCgpID09ICZh
bmNob3JlZDsgfSkpOworfQorCit2b2lkIExvY2FsRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6aW52
YWxpZGF0ZUFuY2hvckRlcGVuZGVuY2llc0ZvclNjcm9sbGVyKGNvbnN0IFJlbmRlckJveCYgc2Ny
b2xsZXIpCit7CisgICAgZm9yIChhdXRvIGFkanVzdGVyIDogbV9hbmNob3JTY3JvbGxBZGp1c3Rl
cnMpCisgICAgICAgIGFkanVzdGVyLmludmFsaWRhdGVGb3JTY3JvbGxlcihzY3JvbGxlcik7Cit9
CisKIExvY2FsRnJhbWUmIExvY2FsRnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6ZnJhbWUoKSBjb25z
dAogewogICAgIHJldHVybiB2aWV3KCkuZnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvTG9jYWxGcmFtZVZpZXdMYXlvdXRDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0xvY2FsRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5oCmluZGV4IDE2Mzc4YjAyZjk3ZS4uMWFi
ODYzNmEyYmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2FsRnJhbWVWaWV3
TGF5b3V0Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYWxGcmFtZVZpZXdM
YXlvdXRDb250ZXh0LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJBbmNob3JQb3NpdGlvbkV2YWx1YXRvci5oIgogI2luY2x1ZGUgIkxheW91dFVuaXQuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
QEAgLTE2NCw2ICsxNjUsMTIgQEAgcHVibGljOgogICAgIGJvb2wgYWRkVG9EZXRhY2hlZFJlbmRl
cmVyTGlzdChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiYmIHJlbmRlcmVyKSBjb25zdCB7IHJldHVy
biBtX2RldGFjaGVkUmVuZGVyZXJMaXN0LmFwcGVuZChXVEZNb3ZlKHJlbmRlcmVyKSk7IH0KICAg
ICB2b2lkIGRlbGV0ZURldGFjaGVkUmVuZGVyZXJzTm93KCkgY29uc3QgeyBtX2RldGFjaGVkUmVu
ZGVyZXJMaXN0LmNsZWFyKCk7IH0KIAorICAgIFZlY3RvcjxBbmNob3JTY3JvbGxBZGp1c3Rlcj4m
IGFuY2hvclNjcm9sbEFkanVzdGVycygpIHsgcmV0dXJuIG1fYW5jaG9yU2Nyb2xsQWRqdXN0ZXJz
OyB9CisgICAgQW5jaG9yU2Nyb2xsQWRqdXN0ZXIqIGFuY2hvclNjcm9sbEFkanVzdGVyRm9yKGNv
bnN0IFJlbmRlckJveCYgYW5jaG9yZWQpOworICAgIHZvaWQgcmVnaXN0ZXJBbmNob3JTY3JvbGxB
ZGp1c3RlcihBbmNob3JTY3JvbGxBZGp1c3RlciYmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBbmNo
b3JTY3JvbGxBZGp1c3RlckZvcihjb25zdCBSZW5kZXJCb3gmIGFuY2hvcmVkKTsKKyAgICB2b2lk
IGludmFsaWRhdGVBbmNob3JEZXBlbmRlbmNpZXNGb3JTY3JvbGxlcihjb25zdCBSZW5kZXJCb3gm
IHNjcm9sbGVyKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGF5b3V0U2NvcGU7CiAg
ICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKQEAgLTI1MSw2ICsyNTgsNyBA
QCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXRUcmFuc2FjdGlvbj4gbV91cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbjsK
ICAgICBTaW5nbGVUaHJlYWRXZWFrSGFzaE1hcDxSZW5kZXJCbG9jaywgVmVjdG9yPFNpbmdsZVRo
cmVhZFdlYWtQdHI8UmVuZGVyQm94Pj4+IG1fY29udGFpbmVyc1dpdGhEZXNjZW5kYW50c05lZWRp
bmdUcmFuc2Zvcm1VcGRhdGU7CiAgICAgU2luZ2xlVGhyZWFkV2Vha0hhc2hTZXQ8UmVuZGVyQm94
PiBtX3BlcmNlbnRIZWlnaHRJZ25vcmVMaXN0OworICAgIFZlY3RvcjxBbmNob3JTY3JvbGxBZGp1
c3Rlcj4gbV9hbmNob3JTY3JvbGxBZGp1c3RlcnM7CiAgICAgc3RkOjpvcHRpb25hbDxUZXh0Qm94
VHJpbT4gbV90ZXh0Qm94VHJpbTsKIAogICAgIHN0cnVjdCBVcGRhdGVMYXllclBvc2l0aW9ucyB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAppbmRleCA4NzQ0Yjg1OTQ3YzQuLjUwNjY3ZGNkY2Y2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCkBAIC0yMjg0LDcgKzIyODQsOCBAQCB2b2lkIFBhZ2U6OnVwZGF0ZVJlbmRl
cmluZygpCiAgICAgfSk7CiAKICAgICBydW5Qcm9jZXNzaW5nU3RlcChSZW5kZXJpbmdVcGRhdGVT
dGVwOjpTbmFwc2hvdHRlZFNjcm9sbE9mZnNldHMsIFsmXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7
Ci0gICAgICAgIFN0eWxlOjpBbmNob3JQb3NpdGlvbkV2YWx1YXRvcjo6dXBkYXRlU25hcHNob3R0
ZWRTY3JvbGxPZmZzZXRzKGRvY3VtZW50KTsKKyAgICAgICAgaWYgKENoZWNrZWRQdHIgcmVuZGVy
VmlldyA9IGRvY3VtZW50LmNoZWNrZWRSZW5kZXJWaWV3KCkpCisgICAgICAgICAgICBTdHlsZTo6
QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OnVwZGF0ZVNjcm9sbEFkanVzdG1lbnRzKCpyZW5kZXJW
aWV3KTsKICAgICB9KTsKIAogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBpbml0aWFsRG9jdW1l
bnRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlv
dXRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQu
aAppbmRleCA3ZjU4ZDcwNzIzNjMuLmE0MTgwZDVmYjM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCkBAIC0yMjUsNSArMjI1LDEzIEBAIGlu
bGluZSBGbG9hdFNpemUgc25hcFNpemVUb0RldmljZVBpeGVsKGNvbnN0IExheW91dFNpemUmIHNp
emUsIGNvbnN0IExheW91dFBvaW50CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCitzdHJ1
Y3QgTGF5b3V0UG9pbnRMaW1pdHMgeworICAgIExheW91dFBvaW50IG1fbWluOworICAgIExheW91
dFBvaW50IG1fbWF4OworICAgIExheW91dFBvaW50IGNsYW1wKGNvbnN0IExheW91dFBvaW50JiBw
b2ludCkgeyByZXR1cm4gcG9pbnQuY29uc3RyYWluZWRCZXR3ZWVuKG1fbWluLCBtX21heCk7IH0K
KyAgICBib29sIGZpdHMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSB7IHJldHVybiBwb2ludCA9
PSBjbGFtcChwb2ludCk7IH0KKyAgICBMYXlvdXRTaXplIGRpc3RhbmNlKGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkgeyByZXR1cm4gcG9pbnQgLSBjbGFtcChwb2ludCk7IH0KK307CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTGF5b3V0U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TGF5b3V0U2l6ZS5oCmluZGV4IDJlOWRhODg3MjM1Zi4uOGVjNDEyOGZlNjg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oCkBAIC05NSw3ICs5NSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBMYXlvdXRTaXplIGNvbnN0cmFpbmVkQmV0d2Vlbihj
b25zdCBMYXlvdXRTaXplJiBtaW4sIGNvbnN0IExheW91dFNpemUmIG1heCkgY29uc3Q7Ci0gICAg
CisKICAgICBMYXlvdXRTaXplIGV4cGFuZGVkVG8oY29uc3QgTGF5b3V0U2l6ZSYgb3RoZXIpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShtX3dpZHRoID4gb3RoZXIubV93
aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLApAQCAtMjA2LDUgKzIwNiwxMyBAQCBpbmxp
bmUgRmxvYXRTaXplIHJvdW5kU2l6ZVRvRGV2aWNlUGl4ZWxzKGNvbnN0IExheW91dFNpemUmIHNp
emUsIGZsb2F0IHBpeGVsU25hcAogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTGF5b3V0U2l6ZSYpOwogCitzdHJ1Y3Qg
TGF5b3V0U2l6ZUxpbWl0cyB7CisgICAgTGF5b3V0U2l6ZSBtX21pbjsKKyAgICBMYXlvdXRTaXpl
IG1fbWF4OworICAgIExheW91dFNpemUgY2xhbXAoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBy
ZXR1cm4gc2l6ZS5jb25zdHJhaW5lZEJldHdlZW4obV9taW4sIG1fbWF4KTsgfQorICAgIGJvb2wg
Zml0cyhjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IHJldHVybiBzaXplID09IGNsYW1wKHNpemUp
OyB9CisgICAgTGF5b3V0U2l6ZSBkaXN0YW5jZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IHJl
dHVybiBzaXplIC0gY2xhbXAoc2l6ZSk7IH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Bvc2l0aW9uZWRMYXlvdXRD
b25zdHJhaW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUG9zaXRpb25lZExheW91
dENvbnN0cmFpbnRzLmNwcAppbmRleCA2OGMxMjJmYjhmMmMuLmJmNGZmOGM2ZWEwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Bvc2l0aW9uZWRMYXlvdXRDb25zdHJhaW50
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Bvc2l0aW9uZWRMYXlvdXRDb25z
dHJhaW50cy5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFBvc2l0aW9uZWRMYXlvdXRDb25z
dHJhaW50czo6Y2FwdHVyZUFuY2hvckdlb21ldHJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gU3RvcmUgdGhlIGFuY2hvciBnZW9tZXRyeS4KLSAgICBMYXlvdXRSZWN0IGFuY2hvclJlY3Qg
PSBTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OmNvbXB1dGVBbmNob3JSZWN0UmVsYXRp
dmVUb0NvbnRhaW5pbmdCbG9jaygqbV9kZWZhdWx0QW5jaG9yQm94LCAqbV9jb250YWluZXIpOwor
ICAgIExheW91dFJlY3QgYW5jaG9yUmVjdCA9IFN0eWxlOjpBbmNob3JQb3NpdGlvbkV2YWx1YXRv
cjo6Y29tcHV0ZUFuY2hvclJlY3RSZWxhdGl2ZVRvQ29udGFpbmluZ0Jsb2NrKCptX2RlZmF1bHRB
bmNob3JCb3gsICptX2NvbnRhaW5lciwgbV9yZW5kZXJlci5nZXQoKSk7CiAgICAgbV9hbmNob3JB
cmVhID0gZXh0cmFjdFJhbmdlKGFuY2hvclJlY3QpOwogCiAgICAgLy8gQWRqdXN0IGNvbnRhaW5p
bmcgYmxvY2sgZm9yIHBvc2l0aW9uLWFyZWEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUG9zaXRpb25lZExheW91dENvbnN0cmFpbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUG9zaXRpb25lZExheW91dENvbnN0cmFpbnRzLmgKaW5kZXggZjYyMGM5ZTlkZGNh
Li45NDFkMTdmMGY5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Qb3Np
dGlvbmVkTGF5b3V0Q29uc3RyYWludHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UG9zaXRpb25lZExheW91dENvbnN0cmFpbnRzLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgog
ICAgIExheW91dFVuaXQgY29udGFpbmluZ1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5p
bmdSYW5nZS5zaXplKCk7IH0KICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdJbmxpbmVTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250YWluaW5nSW5saW5lU2l6ZTsgfQogICAgIExheW91dFJhbmdl
IGNvbnRhaW5pbmdSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmluZ1JhbmdlOyB9Cisg
ICAgTGF5b3V0UmFuZ2Ugb3JpZ2luYWxDb250YWluaW5nUmFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X29yaWdpbmFsQ29udGFpbmluZ1JhbmdlOyB9CiAgICAgTGF5b3V0UmFuZ2UgZXh0cmFjdFJhbmdl
KExheW91dFJlY3QpOwogCiAgICAgQm94QXhpcyBwaHlzaWNhbEF4aXMoKSBjb25zdCB7IHJldHVy
biBtX3BoeXNpY2FsQXhpczsgfQpAQCAtODAsNiArODEsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0
VW5pdCBpbnNldEFmdGVyVmFsdWUoKSBjb25zdCB7IHJldHVybiBTdHlsZTo6ZXZhbHVhdGVNaW5p
bXVtKG1faW5zZXRBZnRlciwgY29udGFpbmluZ1NpemUoKSk7IH0KIAogICAgIExheW91dFVuaXQg
aW5zZXRNb2RpZmllZENvbnRhaW5pbmdTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnNldE1vZGlm
aWVkQ29udGFpbmluZ1JhbmdlLnNpemUoKTsgfQorICAgIExheW91dFJhbmdlIGluc2V0TW9kaWZp
ZWRDb250YWluaW5nUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc2V0TW9kaWZpZWRDb250YWlu
aW5nUmFuZ2U7IH0KICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUNvbnRlbnRTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIGluc2V0TW9kaWZpZWRDb250YWluaW5nU2l6ZSgpIC0gbWFyZ2luQmVmb3JlVmFs
dWUoKSAtIGJvcmRlcnNQbHVzUGFkZGluZygpIC0gbWFyZ2luQWZ0ZXJWYWx1ZSgpOyB9IC8vIFRo
aXMgbWF5IGJlIG5lZ2F0aXZlLgogCiAgICAgdm9pZCByZXNvbHZlUG9zaXRpb24oUmVuZGVyQm94
OjpMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKaW5kZXggM2EzNzZiN2YwMzEzLi5jYjNmOTQxOWM3OTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xNzMsNiArMTczLDEwIEBAIHZv
aWQgUmVuZGVyQm94Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgICAgICAgICAgdmlldygpLnVucmVn
aXN0ZXJBbmNob3IoKnRoaXMpOwogICAgICAgICBpZiAoIXN0eWxlKCkucG9zaXRpb25UcnlGYWxs
YmFja3MoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICB2aWV3KCkudW5yZWdpc3RlclBvc2l0aW9u
VHJ5Qm94KCp0aGlzKTsKKyAgICAgICAgaWYgKGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7IC8v
IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggc3R5bGVEaWRDaGFuZ2UoKS4KKyAgICAgICAgICAgIGlm
IChTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OmlzTGF5b3V0VGltZUFuY2hvclBvc2l0
aW9uZWQoc3R5bGUoKSkgfHwgc3R5bGUoKS51c2VzQW5jaG9yRnVuY3Rpb25zKCkpCisgICAgICAg
ICAgICAgICAgbGF5b3V0Q29udGV4dCgpLnVucmVnaXN0ZXJBbmNob3JTY3JvbGxBZGp1c3RlckZv
cigqdGhpcyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
d2lsbEJlRGVzdHJveWVkKCk7CkBAIC00MDgsNiArNDEyLDE0IEBAIHZvaWQgUmVuZGVyQm94Ojpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlCiAgICAgICAgICAgICAvLyBXaGVuIGdvaW5nIGZyb20gb3V0LW9mLWZsb3cgdG8gaW5m
bG93LCB0aGUgY29udGFpbmluZyBibG9jayBnYWlucyBuZXcgZGVzY2VuZGFudCBjb250ZW50IGFu
ZCBpdHMgcHJlZmVycmVkIHdpZHRoIGJlY29tZXMgaW52YWxpZC4KICAgICAgICAgICAgIGNvbnRh
aW5pbmdCbG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmZXJyZWRXaWR0aHNVcGRhdGUoKTsKICAg
ICAgICAgfQorICAgICAgICAvLyBPbmx5IG91dC1vZi1mbG93IGNvZGUgbWFuYWdlcyB0aGVzZSwg
c28gaWYgd2UncmUgY2hhbmdpbmcgd2UgbmVlZCB0byBjbGVhciB0aGVtLgorICAgICAgICBsYXlv
dXRDb250ZXh0KCkudW5yZWdpc3RlckFuY2hvclNjcm9sbEFkanVzdGVyRm9yKCp0aGlzKTsKKyAg
ICAgICAgaWYgKGxheWVyKCkpCisgICAgICAgICAgICBsYXllcigpLT5jbGVhckFuY2hvclNjcm9s
bEFkanVzdG1lbnQoKTsKKyAgICB9IGVsc2UgaWYgKG9sZFN0eWxlICYmIGlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmIC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggd2lsbEJlRGVzdHJveWVkKCku
CisgICAgICAgIChTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OmlzTGF5b3V0VGltZUFu
Y2hvclBvc2l0aW9uZWQoKm9sZFN0eWxlKSB8fCBvbGRTdHlsZS0+dXNlc0FuY2hvckZ1bmN0aW9u
cygpKQorICAgICAgICAmJiAhKFN0eWxlOjpBbmNob3JQb3NpdGlvbkV2YWx1YXRvcjo6aXNMYXlv
dXRUaW1lQW5jaG9yUG9zaXRpb25lZChzdHlsZSgpKSB8fCBzdHlsZSgpLnVzZXNBbmNob3JGdW5j
dGlvbnMoKSkpIHsKKyAgICAgICAgbGF5b3V0Q29udGV4dCgpLnVucmVnaXN0ZXJBbmNob3JTY3Jv
bGxBZGp1c3RlckZvcigqdGhpcyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggNmQ4ZGEzZWRlNzdiLi4zM2FhNzk5MTczZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTI1LDYgKzI1
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAK
KyNpbmNsdWRlICJBbmNob3JQb3NpdGlvbkV2YWx1YXRvci5oIgogI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJCb3JkZXJQYWludGVyLmgiCiAjaW5jbHVkZSAiQm9yZGVyU2hh
cGUuaCIKQEAgLTI3MjEsNiArMjcyMiw4IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6bGF5b3V0SWZO
ZWVkZWQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGxheW91dCgpOworICAgIGlmIChp
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgU3R5bGU6OkFuY2hvclBvc2l0aW9uRXZh
bHVhdG9yOjpjYXB0dXJlU2Nyb2xsU25hcHNob3RzKGRvd25jYXN0PFJlbmRlckJveD4oKnRoaXMp
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
OTgxYmI3YTI5ODc2Li43NjcyNDdkY2MwN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcApAQCAtMTcwMyw4ICsxNzAzLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlVHJhbnNmb3JtRnJvbVN0eWxlKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNv
bnMKICAgICAvLyA+IEFmdGVyIGxheW91dCBoYXMgYmVlbiBwZXJmb3JtZWQgZm9yIGFic3Bvcywg
aXQgaXMgYWRkaXRpb25hbGx5IHNoaWZ0ZWQgYnkKICAgICAvLyA+IHRoZSBkZWZhdWx0IHNjcm9s
bCBzaGlmdCwgYXMgaWYgYWZmZWN0ZWQgYnkgYSB0cmFuc2Zvcm0KICAgICAvLyA+ICoqIChiZWZv
cmUgYW55IG90aGVyIHRyYW5zZm9ybXMpLiAqKgotICAgIGlmIChtX3NuYXBzaG90dGVkU2Nyb2xs
T2Zmc2V0Rm9yQW5jaG9yUG9zaXRpb25pbmcpCi0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
bV9zbmFwc2hvdHRlZFNjcm9sbE9mZnNldEZvckFuY2hvclBvc2l0aW9uaW5nLT53aWR0aCgpLCBt
X3NuYXBzaG90dGVkU2Nyb2xsT2Zmc2V0Rm9yQW5jaG9yUG9zaXRpb25pbmctPmhlaWdodCgpKTsK
KyAgICBpZiAobV9hbmNob3JTY3JvbGxBZGp1c3RtZW50KQorICAgICAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlKG1fYW5jaG9yU2Nyb2xsQWRqdXN0bWVudC0+d2lkdGgoKSwgbV9hbmNob3JTY3JvbGxB
ZGp1c3RtZW50LT5oZWlnaHQoKSk7CiAKICAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSBzbmFw
UmVjdFRvRGV2aWNlUGl4ZWxzSWZOZWVkZWQocmVuZGVyZXIoKS50cmFuc2Zvcm1SZWZlcmVuY2VC
b3hSZWN0KHN0eWxlKSwgcmVuZGVyZXIoKSk7CiAgICAgcmVuZGVyZXIoKS5hcHBseVRyYW5zZm9y
bSh0cmFuc2Zvcm0sIHN0eWxlLCByZWZlcmVuY2VCb3hSZWN0LCBvcHRpb25zKTsKQEAgLTQ2Njks
MjUgKzQ2NjksMjcgQEAgYm9vbCBSZW5kZXJMYXllcjo6cGFydGljaXBhdGVzSW5QcmVzZXJ2ZTNE
KCkgY29uc3QKICAgICByZXR1cm4gYW5jZXN0b3JMYXllcklzRE9NUGFyZW50KHBhcmVudCgpKSAm
JiBwYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAodHJhbnNmb3JtKCkgfHwgcmVuZGVyZXIoKS5z
dHlsZSgpLmJhY2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNlVmlzaWJpbGl0eTo6SGlkZGVu
IHx8IHByZXNlcnZlczNEKCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpzZXRTbmFwc2hvdHRl
ZFNjcm9sbE9mZnNldEZvckFuY2hvclBvc2l0aW9uaW5nKExheW91dFNpemUgb2Zmc2V0KQorYm9v
bCBSZW5kZXJMYXllcjo6c2V0QW5jaG9yU2Nyb2xsQWRqdXN0bWVudChMYXlvdXRTaXplIG9mZnNl
dCkKIHsKLSAgICBpZiAobV9zbmFwc2hvdHRlZFNjcm9sbE9mZnNldEZvckFuY2hvclBvc2l0aW9u
aW5nID09IG9mZnNldCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2FuY2hvclNjcm9sbEFk
anVzdG1lbnQgPT0gb2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhN
RTogU2Nyb2xsIG9mZnNldCBzaG91bGQgYmUgYWRqdXN0ZWQgaW4gdGhlIHNjcm9sbGluZyB0cmVl
IHNvIGxheWVycyBzdGF5IGV4YWN0bHkgaW4gc3luYy4KLSAgICBtX3NuYXBzaG90dGVkU2Nyb2xs
T2Zmc2V0Rm9yQW5jaG9yUG9zaXRpb25pbmcgPSBvZmZzZXQ7CisgICAgbV9hbmNob3JTY3JvbGxB
ZGp1c3RtZW50ID0gb2Zmc2V0OwogICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwogCiAgICAgaWYgKGlz
Q29tcG9zaXRlZCgpKQogICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclNuYXBz
aG90dGVkU2Nyb2xsT2Zmc2V0Rm9yQW5jaG9yUG9zaXRpb25pbmcoKQordm9pZCBSZW5kZXJMYXll
cjo6Y2xlYXJBbmNob3JTY3JvbGxBZGp1c3RtZW50KCkKIHsKLSAgICBpZiAoIW1fc25hcHNob3R0
ZWRTY3JvbGxPZmZzZXRGb3JBbmNob3JQb3NpdGlvbmluZykKKyAgICBpZiAoIW1fYW5jaG9yU2Ny
b2xsQWRqdXN0bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zbmFwc2hvdHRlZFNjcm9s
bE9mZnNldEZvckFuY2hvclBvc2l0aW9uaW5nID0geyB9OworICAgIG1fYW5jaG9yU2Nyb2xsQWRq
dXN0bWVudCA9IHsgfTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKIAogICAgIGlmIChpc0NvbXBv
c2l0ZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggOGYzMDAz
MmE1NzFhLi44Mjk3YTU2MmY5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCkBAIC04MTksOSArODE5LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzVHJhbnNmb3JtZWRB
bmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcjsgfQogICAg
IGJvb2wgcGFydGljaXBhdGVzSW5QcmVzZXJ2ZTNEKCkgY29uc3Q7CiAKLSAgICBzdGQ6Om9wdGlv
bmFsPExheW91dFNpemU+IHNuYXBzaG90dGVkU2Nyb2xsT2Zmc2V0Rm9yQW5jaG9yUG9zaXRpb25p
bmcoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90dGVkU2Nyb2xsT2Zmc2V0Rm9yQW5jaG9yUG9z
aXRpb25pbmc7IH07Ci0gICAgdm9pZCBzZXRTbmFwc2hvdHRlZFNjcm9sbE9mZnNldEZvckFuY2hv
clBvc2l0aW9uaW5nKExheW91dFNpemUpOwotICAgIHZvaWQgY2xlYXJTbmFwc2hvdHRlZFNjcm9s
bE9mZnNldEZvckFuY2hvclBvc2l0aW9uaW5nKCk7CisgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRT
aXplPiBhbmNob3JTY3JvbGxBZGp1c3RtZW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JTY3Jv
bGxBZGp1c3RtZW50OyB9OworICAgIGJvb2wgc2V0QW5jaG9yU2Nyb2xsQWRqdXN0bWVudChMYXlv
dXRTaXplKTsgLy8gUmV0dXJucyB0cnVlIGlmIGNoYW5nZWQuCisgICAgdm9pZCBjbGVhckFuY2hv
clNjcm9sbEFkanVzdG1lbnQoKTsKIAogICAgIGJvb2wgaGFzRml4ZWRDb250YWluaW5nQmxvY2tB
bmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRml4ZWRDb250YWluaW5nQmxvY2tBbmNlc3Rv
cjsgfQogCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBwcml2YXRlOgogICAgIC8vIElmIHRoZSBSZW5k
ZXJMYXllciBjb250YWlucyBhbiBhbmNob3ItcG9zaXRpb25lZCBib3gsIHRoaXMgaXMgdGhlICJk
ZWZhdWx0IHNjcm9sbCBzaGlmdCIKICAgICAvLyBmb3Igc2Nyb2xsIGNvbXBlbnNhdGlvbiBwdXJw
b3NlLiBUaGlzIG9mZnNldCBhbGlnbnMgdGhlIGFuY2hvci1wb3NpdGlvbmVkIGJveCB3aXRoIHRo
ZSBhbmNob3IKICAgICAvLyBhZnRlciBzY3JvbGwsIGFuZCBpcyBhcHBsaWVkIGFzIGEgdHJhbnNm
b3JtLgotICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0U2l6ZT4gbV9zbmFwc2hvdHRlZFNjcm9sbE9m
ZnNldEZvckFuY2hvclBvc2l0aW9uaW5nOworICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0U2l6ZT4g
bV9hbmNob3JTY3JvbGxBZGp1c3RtZW50OwogCiAgICAgLy8gTWF5IHVsdGltYXRlbHkgYmUgZXh0
ZW5kZWQgdG8gbWFueSByZXBsaWNhcyAod2l0aCB0aGVpciBvd24gcGFpbnQgb3JkZXIpLgogICAg
IFJlbmRlclB0cjxSZW5kZXJSZXBsaWNhPiBtX3JlZmxlY3Rpb247CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDhmNmNhYmRjYWI1YS4u
NzZlMDM1ZjI4ZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcApAQCAtNzI2LDcgKzcyNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVUcmFuc2Zvcm0oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgICAgICAgICAg
ICAgIHQudHJhbnNsYXRlKC1zY3JvbGxQb3NpdGlvbi54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX293bmluZ0xheWVy
LmlzVHJhbnNmb3JtZWQoKSB8fCBtX293bmluZ0xheWVyLnNuYXBzaG90dGVkU2Nyb2xsT2Zmc2V0
Rm9yQW5jaG9yUG9zaXRpb25pbmcoKSkKKyAgICB9IGVsc2UgaWYgKG1fb3duaW5nTGF5ZXIuaXNU
cmFuc2Zvcm1lZCgpKQogICAgICAgICBtX293bmluZ0xheWVyLnVwZGF0ZVRyYW5zZm9ybUZyb21T
dHlsZSh0LCBzdHlsZSwgUmVuZGVyU3R5bGU6OmluZGl2aWR1YWxUcmFuc2Zvcm1PcGVyYXRpb25z
KCkpOwogICAgIAogICAgIGlmIChtX2NvbnRlbnRzQ29udGFpbm1lbnRMYXllcikgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRl
eCBhMTg1ZmY5YzEyZmIuLjkxNjVmN2MwNGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTQxMzcsNyArNDEzNyw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZs
b3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5jaG9yUG9zaXRpb25pbmcoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyKSBjb25zdAogewotICAgIHJldHVybiAhIWxheWVyLnNuYXBzaG90dGVkU2Nyb2xsT2Zm
c2V0Rm9yQW5jaG9yUG9zaXRpb25pbmcoKTsKKyAgICByZXR1cm4gISFsYXllci5hbmNob3JTY3Jv
bGxBZGp1c3RtZW50KCk7CiB9CiAKIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpjb21wdXRlSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIGJvb2wgaGFzQ29tcG9zaXRlZERlc2NlbmRhbnRzLCBib29sIGhhczNE
VHJhbnNmb3JtZWREZXNjZW5kYW50cywgYm9vbCBwYWludHNJbnRvUHJvdmlkZWRCYWNraW5nKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVySW5s
aW5lcy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVySW5saW5lcy5oCmlu
ZGV4IGU2NzVkZWQzMDU1NS4uMjM0NWM0YWEzMGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVySW5saW5lcy5oCkBAIC00OSw3ICs0OSw3IEBAIGlubGluZSBib29s
IFJlbmRlckxheWVyOjppc1RyYW5zZm9ybWVkKCkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgc2Ny
b2xsIG9mZnNldCBpcyBwcmVzZW50LCBhIHRyYW5zZm9ybSBpcyBhcHBsaWVkIG9uIHRvcCBvZiBl
eGlzdGluZwogICAgIC8vIHRyYW5zZm9ybXMgZnJvbSB0aGUgcmVuZGVyZXIuCi0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuaXNUcmFuc2Zvcm1lZCgpIHx8IG1fc25hcHNob3R0ZWRTY3JvbGxPZmZzZXRG
b3JBbmNob3JQb3NpdGlvbmluZzsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1RyYW5zZm9ybWVk
KCkgfHwgbV9hbmNob3JTY3JvbGxBZGp1c3RtZW50OwogfQogCiBpbmxpbmUgYm9vbCBSZW5kZXJM
YXllcjo6aGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNCbGVuZE1v
ZGUoKTsgfSAvLyBGSVhNRTogV2h5IGFzayB0aGUgcmVuZGVyZXIgdGhpcyBnaXZlbiB3ZSBoYXZl
IG1fYmxlbmRNb2RlPwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDA4YzdkNGUwNDg0Yy4uMjY4M2FiODk1NGNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwCkBAIC0xNTUsNiArMTU1LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0CiAgICAgICAg
ICYmICgob2xkU3R5bGUtPmlzT3JpZ2luYWxEaXNwbGF5QmxvY2tUeXBlKCkpIHx8IChvbGRTdHls
ZS0+aXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkpKSkKICAgICAgICAgICAgIHBhcmVudCgp
LT5zZXRDaGlsZE5lZWRzTGF5b3V0KCk7CiAKKyAgICBpZiAob2xkU3R5bGUgJiYgb2xkU3R5bGUt
PmlzT3ZlcmZsb3dWaXNpYmxlKCkgIT0gc3R5bGUoKS5pc092ZXJmbG93VmlzaWJsZSgpKSB7Cisg
ICAgICAgIGlmIChhdXRvKiByZW5kZXJCb3ggPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94Pih0
aGlzKSkKKyAgICAgICAgICAgIGxheW91dENvbnRleHQoKS5pbnZhbGlkYXRlQW5jaG9yRGVwZW5k
ZW5jaWVzRm9yU2Nyb2xsZXIoKnJlbmRlckJveCk7CisgICAgfQorCiAgICAgYm9vbCBnYWluZWRP
ckxvc3RMYXllciA9IGZhbHNlOwogICAgIGlmIChyZXF1aXJlc0xheWVyKCkpIHsKICAgICAgICAg
aWYgKCFsYXllcigpICYmIGxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJlZSgpKSB7CkBAIC0x
ODQsOCArMTg5LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgICAgIHNldE5l
ZWRzTGF5b3V0QW5kUHJlZmVycmVkV2lkdGhzVXBkYXRlKCk7CiAgICAgfQogCi0gICAgaWYgKGdh
aW5lZE9yTG9zdExheWVyKQorICAgIGlmIChnYWluZWRPckxvc3RMYXllcikgewogICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEFkZE9yUmVtb3ZlU2Nyb2xsYmFycygqdGhpcyk7
CisgICAgfQogCiAgICAgaWYgKGxheWVyKCkpIHsKICAgICAgICAgbGF5ZXIoKS0+c3R5bGVDaGFu
Z2VkKGRpZmYsIG9sZFN0eWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAppbmRleCBkNjU3ZDE0OWY3ZDguLjVmODA5
MGQ4ZDVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmNwcApAQCAtMjA0Nyw3ICsyMDQ3LDcgQEAgdm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQW5jaG9yaW5nRWxlbWVudCgpCiAK
IHZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQW5jaG9yUG9zaXRpb25lZEFm
dGVyU2Nyb2xsKCkKIHsKLSAgICBTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OnVwZGF0
ZVBvc2l0aW9uc0FmdGVyU2Nyb2xsKG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgpKTsKKyAg
ICBTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OnVwZGF0ZVNjcm9sbEFkanVzdG1lbnRz
KG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPEZyYW1lSWRl
bnRpZmllcj4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cm9vdEZyYW1lSUQoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA3MTk4ZmI5NDg1
ZjkuLjYxNjE3YjAyN2U1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKQEAgLTE1NTksNyArMTU1OSw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpzaG91bGRVc2VU
cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lCiB7CiAg
ICAgaWYgKGlzVHJhbnNmb3JtZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGhh
c0xheWVyKCkgJiYgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVy
KCktPnNuYXBzaG90dGVkU2Nyb2xsT2Zmc2V0Rm9yQW5jaG9yUG9zaXRpb25pbmcoKSkKKyAgICBp
ZiAoaGFzTGF5ZXIoKSAmJiBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcyku
bGF5ZXIoKS0+YW5jaG9yU2Nyb2xsQWRqdXN0bWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBpZiAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRhaW5lck9iamVjdC0+c3R5bGUoKS5oYXNQ
ZXJzcGVjdGl2ZSgpKQogICAgICAgICByZXR1cm4gY29udGFpbmVyT2JqZWN0ID09IHBhcmVudCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGJhNGM0ZWM1M2Nl
Yy4uOGFjMzkyNGI5MTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CkBAIC03MjgsNyArNzI4LDcgQEAgcHVibGljOgogCiAgICAgaW5saW5lIFJlbmRlclZpZXcmIHZp
ZXcoKSBjb25zdDsgLy8gRGVmaW5lZCBpbiBSZW5kZXJPYmplY3RJbmxpbmVzLmgKICAgICBDaGVj
a2VkUmVmPFJlbmRlclZpZXc+IGNoZWNrZWRWaWV3KCkgY29uc3Q7Ci0gICAgaW5saW5lIGNvbnN0
IExvY2FsRnJhbWVWaWV3TGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCgpIGNvbnN0OworICAg
IGlubGluZSBMb2NhbEZyYW1lVmlld0xheW91dENvbnRleHQmIGxheW91dENvbnRleHQoKSBjb25z
dDsKIAogICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdElubGluZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RJbmxpbmVzLmgKaW5kZXggZTZmN2U2N2U4ZmVh
Li43MDYxZmNiMGJiMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3RJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdElubGluZXMuaApAQCAtMzgsNyArMzgsNyBAQCBpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6
OmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLmlzRGlzcAog
aW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1RyYW5zZm9ybWVkKCkgY29uc3QgeyByZXR1cm4g
aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgJiYgKHN0eWxlKCkuYWZmZWN0c1RyYW5zZm9y
bSgpIHx8IGhhc1NWR1RyYW5zZm9ybSgpKTsgfQogaW5saW5lIERvY3VtZW50JiBSZW5kZXJPYmpl
Y3Q6OmRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpLmRvY3VtZW50KCk7IH0K
IGlubGluZSBSZWY8RG9jdW1lbnQ+IFJlbmRlck9iamVjdDo6cHJvdGVjdGVkRG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBkb2N1bWVudCgpOyB9Ci1pbmxpbmUgY29uc3QgTG9jYWxGcmFtZVZpZXdM
YXlvdXRDb250ZXh0JiBSZW5kZXJPYmplY3Q6OmxheW91dENvbnRleHQoKSBjb25zdCB7IHJldHVy
biB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpOyB9CitpbmxpbmUgTG9jYWxGcmFt
ZVZpZXdMYXlvdXRDb250ZXh0JiBSZW5kZXJPYmplY3Q6OmxheW91dENvbnRleHQoKSBjb25zdCB7
IHJldHVybiB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpOyB9CiBpbmxpbmUgYm9v
bCBSZW5kZXJPYmplY3Q6OmlzQm9keSgpIGNvbnN0IHsgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKTsgfQogaW5saW5lIGJvb2wgUmVuZGVyT2Jq
ZWN0Ojppc0hSKCkgY29uc3QgeyByZXR1cm4gbm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmhyVGFnKTsgfQogaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1BzZXVkb0Vs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5pc1BzZXVkb0VsZW1lbnQo
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRl
eCBkODM1MTdiZmYyOTYuLmFkYTQ5M2RjYzk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTEyMjAsNyArMTIyMCw3IEBAIHB1YmxpYzoKICAg
ICBpbmxpbmUgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKICAgICBpbmxpbmUgYm9vbCBp
c0luU3VidHJlZVdpdGhCbGVuZE1vZGUoKSBjb25zdDsKIAotICAgIGlubGluZSB2b2lkIHNldElz
Rm9yY2VIaWRkZW4oKTsKKyAgICBpbmxpbmUgdm9pZCBzZXRJc0ZvcmNlSGlkZGVuKGJvb2wgPSB0
cnVlKTsKICAgICBpbmxpbmUgYm9vbCBpc0ZvcmNlSGlkZGVuKCkgY29uc3Q7CiAKICAgICBpbmxp
bmUgdm9pZCBzZXRJc29sYXRpb24oSXNvbGF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZVNldHRlcnMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZVNldHRlcnMuaAppbmRleCA1YWMzMTdkMmQ1Njcu
LjliMTA2ZmI2Zjg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlU2V0dGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZVNldHRlcnMuaApAQCAtNjQ0LDcgKzY0NCw3IEBAIGlubGluZSB2b2lkIFJl
bmRlclN0eWxlOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiAgICAgU0VUKG1fcmFyZUlu
aGVyaXRlZERhdGEsIGlzSW5TdWJ0cmVlV2l0aEJsZW5kTW9kZSwgbW9kZSAhPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CiB9CiAKLWlubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRJc0ZvcmNlSGlkZGVu
KCkgeyBTRVQobV9yYXJlSW5oZXJpdGVkRGF0YSwgaXNGb3JjZUhpZGRlbiwgdHJ1ZSk7IH0KK2lu
bGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRJc0ZvcmNlSGlkZGVuKGJvb2wgaGlkZSkgeyBTRVQo
bV9yYXJlSW5oZXJpdGVkRGF0YSwgaXNGb3JjZUhpZGRlbiwgaGlkZSk7IH0KIGlubGluZSB2b2lk
IFJlbmRlclN0eWxlOjpzZXRJc29sYXRpb24oSXNvbGF0aW9uIGlzb2xhdGlvbikgeyBTRVRfTkVT
VEVEKG1fbm9uSW5oZXJpdGVkRGF0YSwgcmFyZURhdGEsIGlzb2xhdGlvbiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGlzb2xhdGlvbikpOyB9CiAKIGlubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRB
dXRvUmV2ZWFsc1doZW5Gb3VuZCgpIHsgU0VUKG1fcmFyZUluaGVyaXRlZERhdGEsIGF1dG9SZXZl
YWxzV2hlbkZvdW5kLCB0cnVlKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
QW5jaG9yUG9zaXRpb25FdmFsdWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQW5jaG9y
UG9zaXRpb25FdmFsdWF0b3IuY3BwCmluZGV4IDlkNTI2NDZlMTViOC4uMDRkNDAwZGFkOGM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9BbmNob3JQb3NpdGlvbkV2YWx1YXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQW5jaG9yUG9zaXRpb25FdmFsdWF0b3IuY3Bw
CkBAIC01Miw3ICs1MiwxNDEgQEAKICNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgogI2luY2x1ZGUg
PHJhbmdlcz4KIAotbmFtZXNwYWNlIFdlYkNvcmU6OlN0eWxlIHsKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworaW5saW5lIExheW91dFNpemUgQW5jaG9yU2Nyb2xsU25hcHNob3Q6OmFkanVzdG1lbnRG
b3JDdXJyZW50U2Nyb2xsUG9zaXRpb24oKQoreworICAgIGlmIChtX3Njcm9sbGVyKQorICAgICAg
ICByZXR1cm4gbV9zY3JvbGxTbmFwc2hvdCAtIG1fc2Nyb2xsZXItPnNjcm9sbFBvc2l0aW9uKCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworQW5jaG9yU2Nyb2xsQWRqdXN0ZXI6OkFuY2hvclNjcm9s
bEFkanVzdGVyKFJlbmRlckJveCYgYW5jaG9yZWQsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0
JiBkZWZhdWx0QW5jaG9yKQorICAgIDogbV9hbmNob3JlZCgmYW5jaG9yZWQpCit7CisgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gYW5jaG9yZWQuc3R5bGUoKTsKKworICAgIGF1dG8gY29t
cGVuc2F0ZWRBeGVzID0gc3R5bGUuYW5jaG9yRnVuY3Rpb25TY3JvbGxDb21wZW5zYXRlZEF4ZXMo
KTsKKyAgICBtX25lZWRzWEFkanVzdG1lbnQgPSBjb21wZW5zYXRlZEF4ZXMuY29udGFpbnMoQm94
QXhpc0ZsYWc6Okhvcml6b250YWwpOworICAgIG1fbmVlZHNZQWRqdXN0bWVudCA9IGNvbXBlbnNh
dGVkQXhlcy5jb250YWlucyhCb3hBeGlzRmxhZzo6VmVydGljYWwpOworCisgICAgYXV0byBjb250
YWluaW5nV3JpdGluZ01vZGUgPSBhbmNob3JlZC5jb250YWluZXIoKS0+c3R5bGUoKS53cml0aW5n
TW9kZSgpOworICAgIGlmIChhdXRvIHBvc2l0aW9uQXJlYSA9IHN0eWxlLnBvc2l0aW9uQXJlYSgp
KSB7CisgICAgICAgIG1fbmVlZHNYQWRqdXN0bWVudCB8PSBwb3NpdGlvbkFyZWEtPmNvb3JkTWF0
Y2hlZFRyYWNrRm9yQXhpcyhCb3hBeGlzOjpIb3Jpem9udGFsLCBjb250YWluaW5nV3JpdGluZ01v
ZGUsIHN0eWxlLndyaXRpbmdNb2RlKCkpICE9IFBvc2l0aW9uQXJlYVRyYWNrOjpTcGFuQWxsOwor
ICAgICAgICBtX25lZWRzWUFkanVzdG1lbnQgfD0gcG9zaXRpb25BcmVhLT5jb29yZE1hdGNoZWRU
cmFja0ZvckF4aXMoQm94QXhpczo6VmVydGljYWwsIGNvbnRhaW5pbmdXcml0aW5nTW9kZSwgc3R5
bGUud3JpdGluZ01vZGUoKSkgIT0gUG9zaXRpb25BcmVhVHJhY2s6OlNwYW5BbGw7CisgICAgfQor
ICAgIGlmICghbV9uZWVkc1hBZGp1c3RtZW50KQorICAgICAgICBtX25lZWRzWEFkanVzdG1lbnQg
PSBjb250YWluaW5nV3JpdGluZ01vZGUuaXNIb3Jpem9udGFsKCkgPyBzdHlsZS5qdXN0aWZ5U2Vs
ZigpID09IEl0ZW1Qb3NpdGlvbjo6QW5jaG9yQ2VudGVyIDogc3R5bGUuYWxpZ25TZWxmKCkgPT0g
SXRlbVBvc2l0aW9uOjpBbmNob3JDZW50ZXI7CisgICAgaWYgKCFtX25lZWRzWUFkanVzdG1lbnQp
CisgICAgICAgIG1fbmVlZHNZQWRqdXN0bWVudCA9IGNvbnRhaW5pbmdXcml0aW5nTW9kZS5pc0hv
cml6b250YWwoKSA/IHN0eWxlLmFsaWduU2VsZigpID09IEl0ZW1Qb3NpdGlvbjo6QW5jaG9yQ2Vu
dGVyIDogc3R5bGUuYWxpZ25TZWxmKCkgPT0gSXRlbVBvc2l0aW9uOjpBbmNob3JDZW50ZXI7CisK
KyAgICBtX2lzSGlkZGVuID0gc3R5bGUuaXNGb3JjZUhpZGRlbigpOworCisgICAgaWYgKGF1dG8g
YW5jaG9yQm94ID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4oZGVmYXVsdEFuY2hvcikpIHsK
KyAgICAgICAgaWYgKENoZWNrZWRQdHIgY2hhaW5lZEFuY2hvciA9IFN0eWxlOjpBbmNob3JQb3Np
dGlvbkV2YWx1YXRvcjo6ZGVmYXVsdEFuY2hvckZvckJveCgqYW5jaG9yQm94KSkKKyAgICAgICAg
ICAgIG1faGFzQ2hhaW5lZEFuY2hvciA9IHRydWU7CisgICAgfQorfQorCit2b2lkIEFuY2hvclNj
cm9sbEFkanVzdGVyOjphZGRTbmFwc2hvdChjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGVyKQorewor
ICAgIEFTU0VSVChzY3JvbGxlci5oYXNQb3RlbnRpYWxseVNjcm9sbGFibGVPdmVyZmxvdygpICYm
ICFpczxSZW5kZXJWaWV3PihzY3JvbGxlcikpOworICAgIG1fc2Nyb2xsU25hcHNob3RzLmFwcGVu
ZChBbmNob3JTY3JvbGxTbmFwc2hvdCB7ICZzY3JvbGxlciwgc2Nyb2xsZXIuc2Nyb2xsUG9zaXRp
b24oKSB9KTsKKyAgICBXVEZMb2dBbHdheXMoIi4uLiBjYXB0dXJlZCBzY3JvbGwgcG9zaXRpb24g
eD0lZCB5PSVkXG4iLCBpbnQoc2Nyb2xsZXIuc2Nyb2xsUG9zaXRpb24oKS54KCkpLCBpbnQoc2Ny
b2xsZXIuc2Nyb2xsUG9zaXRpb24oKS55KCkpKTsKK30KKwordm9pZCBBbmNob3JTY3JvbGxBZGp1
c3Rlcjo6YWRkVmlld3BvcnRTbmFwc2hvdChjb25zdCBSZW5kZXJWaWV3JiByZW5kZXJWaWV3KQor
eworICAgIGF1dG8gcG9zaXRpb24gPSByZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbFBvc2l0
aW9uUmVzcGVjdGluZ0N1c3RvbUZpeGVkUG9zaXRpb24oKTsKKyAgICBtX3Njcm9sbFNuYXBzaG90
cy5pbnNlcnQoMCwgQW5jaG9yU2Nyb2xsU25hcHNob3QgeyBudWxscHRyLCBwb3NpdGlvbiB9KTsK
KyAgICBtX2FkanVzdEZvclZpZXdwb3J0ID0gdHJ1ZTsKKyAgICBXVEZMb2dBbHdheXMoIi4uLiBj
YXB0dXJlZCB2aWV3cG9ydCBwb3NpdGlvbiB4PSVkIHk9JWRcbiIsIGludChwb3NpdGlvbi54KCkp
LCBpbnQocG9zaXRpb24ueSgpKSk7Cit9CisKK0xheW91dFNpemUgQW5jaG9yU2Nyb2xsQWRqdXN0
ZXI6OmFkanVzdG1lbnRGb3JWaWV3cG9ydChjb25zdCBSZW5kZXJWaWV3JiByZW5kZXJWaWV3KQor
eworICAgIGlmIChtX2FkanVzdEZvclZpZXdwb3J0KSB7CisgICAgICAgIC8vIFZpZXdwb3J0IHNu
YXBzaG90IGlzIHN0b3JlZCBpbiB0aGUgZmlyc3Qgc2xvdC4KKyAgICAgICAgQVNTRVJUKG1fc2Ny
b2xsU25hcHNob3RzLnNpemUoKSAmJiAhbV9zY3JvbGxTbmFwc2hvdHMuZmlyc3QoKS5tX3Njcm9s
bGVyKTsKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsU25hcHNob3RzLmZpcnN0KCkubV9zY3JvbGxT
bmFwc2hvdAorICAgICAgICAgICAgLSByZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbFBvc2l0
aW9uUmVzcGVjdGluZ0N1c3RvbUZpeGVkUG9zaXRpb24oKTsKKyAgICB9CisgICAgcmV0dXJuIHsg
fTsKK30KKworTGF5b3V0U2l6ZSBBbmNob3JTY3JvbGxBZGp1c3Rlcjo6YWNjdW11bGF0ZUFkanVz
dG1lbnRzKGNvbnN0IFJlbmRlclZpZXcmIHJlbmRlclZpZXcsIGNvbnN0IFJlbmRlckJveCYgYW5j
aG9yZWQpIC8vWFhYIG1hcmsgY29uc3QKK3sKKyAgICBBU1NFUlQobV9hbmNob3JlZCA9PSAmYW5j
aG9yZWQpOworICAgIExheW91dFNpemUgc2Nyb2xsQWRqdXN0bWVudDsKKworICAgIGlmIChtX2hh
c0NoYWluZWRBbmNob3IpIHsgLy8gVGhlIGFuY2hvciBtYXkgaXRzZWxmIGJlIHNjcm9sbC1jb21w
ZW5zYXRlZC4gUmVjdXJzZSBpZiBuZWVkZWQuCisgICAgICAgIGlmIChDaGVja2VkUHRyIGRlZmF1
bHRBbmNob3IgPSBTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OmRlZmF1bHRBbmNob3JG
b3JCb3goYW5jaG9yZWQpKSB7CisgICAgICAgICAgICBhdXRvIGRlZmF1bHRBbmNob3JCb3ggPSBk
eW5hbWljRG93bmNhc3Q8UmVuZGVyQm94PihkZWZhdWx0QW5jaG9yLmdldCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChkZWZhdWx0QW5jaG9yQm94KTsKKyAgICAgICAgICAgIGlmIChkZWZhdWx0QW5j
aG9yQm94KSB7CisgICAgICAgICAgICAgICAgaWYgKENoZWNrZWRQdHIgY2hhaW5lZEFuY2hvciA9
IFN0eWxlOjpBbmNob3JQb3NpdGlvbkV2YWx1YXRvcjo6ZGVmYXVsdEFuY2hvckZvckJveCgqZGVm
YXVsdEFuY2hvckJveCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gY2hhaW5lZEFu
Y2hvckJveCA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCb3g+KGNoYWluZWRBbmNob3IuZ2V0KCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNoYWluZWRBZGp1c3RlciA9IHJlbmRl
clZpZXcubGF5b3V0Q29udGV4dCgpLmFuY2hvclNjcm9sbEFkanVzdGVyRm9yKCpjaGFpbmVkQW5j
aG9yQm94KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFpbmVkQWRqdXN0ZXIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQWRqdXN0bWVudCArPSBjaGFpbmVkQWRq
dXN0ZXItPmFjY3VtdWxhdGVBZGp1c3RtZW50cyhyZW5kZXJWaWV3LCAqY2hhaW5lZEFuY2hvckJv
eCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gc25hcHNob3QgOiBtX3Njcm9s
bFNuYXBzaG90cykKKyAgICAgICAgIHNjcm9sbEFkanVzdG1lbnQgKz0gc25hcHNob3QuYWRqdXN0
bWVudEZvckN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOworICAgIHNjcm9sbEFkanVzdG1lbnQgKz0g
YWRqdXN0bWVudEZvclZpZXdwb3J0KHJlbmRlclZpZXcpOworCisgICAgaWYgKCFtX25lZWRzWEFk
anVzdG1lbnQpCisgICAgICAgIHNjcm9sbEFkanVzdG1lbnQuc2V0V2lkdGgoMCk7CisgICAgaWYg
KCFtX25lZWRzWUFkanVzdG1lbnQpCisgICAgICAgIHNjcm9sbEFkanVzdG1lbnQuc2V0SGVpZ2h0
KDApOworICAgIHJldHVybiBzY3JvbGxBZGp1c3RtZW50OworfQorCit2b2lkIEFuY2hvclNjcm9s
bEFkanVzdGVyOjpzZXRGYWxsYmFja0xpbWl0cyhjb25zdCBSZW5kZXJCb3gmIGFuY2hvcmVkKQor
eworICAgIGF1dG8geENvbnN0cmFpbnRzID0gUG9zaXRpb25lZExheW91dENvbnN0cmFpbnRzIHsg
YW5jaG9yZWQsIGFuY2hvcmVkLndyaXRpbmdNb2RlKCkuaXNIb3Jpem9udGFsKCkgPyBMb2dpY2Fs
Qm94QXhpczo6SW5saW5lIDogTG9naWNhbEJveEF4aXM6OkJsb2NrIH07CisgICAgYXV0byB5Q29u
c3RyYWludHMgPSBQb3NpdGlvbmVkTGF5b3V0Q29uc3RyYWludHMgeyBhbmNob3JlZCwgYW5jaG9y
ZWQud3JpdGluZ01vZGUoKS5pc0hvcml6b250YWwoKSA/IExvZ2ljYWxCb3hBeGlzOjpCbG9jayA6
IExvZ2ljYWxCb3hBeGlzOjpJbmxpbmUgfTsKKyAgICBhdXRvIHhMaW1pdHMgPSB4Q29uc3RyYWlu
dHMuY29udGFpbmluZ1JhbmdlKCk7CisgICAgYXV0byB5TGltaXRzID0geUNvbnN0cmFpbnRzLmNv
bnRhaW5pbmdSYW5nZSgpOworCisgICAgYXV0byBtYXJnaW5SZWN0ID0gYW5jaG9yZWQubWFyZ2lu
Qm94UmVjdCgpOworICAgIG1hcmdpblJlY3QubW92ZUJ5KGFuY2hvcmVkLmxvY2F0aW9uKCkpOwor
ICAgIG1fZmFsbGJhY2tMaW1pdHMubV9taW4uc2V0V2lkdGgoeExpbWl0cy5taW4oKSAtIG1hcmdp
blJlY3QueCgpKTsKKyAgICBtX2ZhbGxiYWNrTGltaXRzLm1fbWluLnNldEhlaWdodCh5TGltaXRz
Lm1pbigpIC0gbWFyZ2luUmVjdC55KCkpOworICAgIG1fZmFsbGJhY2tMaW1pdHMubV9tYXguc2V0
V2lkdGgoeExpbWl0cy5tYXgoKSAtIG1hcmdpblJlY3QubWF4WCgpKTsKKyAgICBtX2ZhbGxiYWNr
TGltaXRzLm1fbWF4LnNldEhlaWdodCh5TGltaXRzLm1heCgpIC0gbWFyZ2luUmVjdC5tYXhZKCkp
OworCisgICAgV1RGTG9nQWx3YXlzKCIgIFNldHRpbmcgZmFsbGJhY2sgbGltaXRzIHRvIG1pbiAl
ZCwlZCBtYXggJWQsJWQuXG4iLAorICAgICAgICAoaW50KW1fZmFsbGJhY2tMaW1pdHMubV9taW4u
d2lkdGgoKSwKKyAgICAgICAgKGludCltX2ZhbGxiYWNrTGltaXRzLm1fbWluLmhlaWdodCgpLAor
ICAgICAgICAoaW50KW1fZmFsbGJhY2tMaW1pdHMubV9tYXgud2lkdGgoKSwKKyAgICAgICAgKGlu
dCltX2ZhbGxiYWNrTGltaXRzLm1fbWF4LmhlaWdodCgpKTsKKworICAgIG1faGFzRmFsbGJhY2sg
PSB0cnVlOworfQorCitib29sIEFuY2hvclNjcm9sbEFkanVzdGVyOjppbnZhbGlkYXRlRm9yU2Ny
b2xsZXIoY29uc3QgUmVuZGVyQm94JiBzY3JvbGxlcikKK3sKKyAgICBib29sIGFuY2hvcmVkTmVl
ZHNJbnZhbGlkYXRpb24gPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gc25hcHNob3QgOiBtX3Njcm9s
bFNuYXBzaG90cykgeworICAgICAgICBpZiAoc25hcHNob3QubV9zY3JvbGxlciA9PSAmc2Nyb2xs
ZXIpIHsKKyAgICAgICAgICAgIGFuY2hvcmVkTmVlZHNJbnZhbGlkYXRpb24gPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFuY2hvcmVkTmVlZHNJ
bnZhbGlkYXRpb24pIHsKKyAgICAgICAgbV9hbmNob3JlZC0+c2V0TmVlZHNMYXlvdXQoKTsKKyAg
ICAgICAgQVNTRVJUKG1fYW5jaG9yZWQtPmVsZW1lbnQoKSk7CisgICAgICAgIG1fYW5jaG9yZWQt
PmVsZW1lbnQoKS0+aW52YWxpZGF0ZUZvckFuY2hvclJlY3RDaGFuZ2UoKTsKKyAgICB9CisgICAg
cmV0dXJuIGFuY2hvcmVkTmVlZHNJbnZhbGlkYXRpb247Cit9CisKK25hbWVzcGFjZSBTdHlsZSB7
CiAKIFdURl9NQUtFX1RaT05FX0FMTE9DQVRFRF9JTVBMKEFuY2hvclBvc2l0aW9uZWRTdGF0ZSk7
CiAKQEAgLTE1MCw4ICsyODQsOSBAQCBzdGF0aWMgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQW5jZXN0
b3JDb250YWluZXIoY29uc3QgUmVuZGVyRWxlbWVudCYgZGVzY2VuZGFudENvbgogICAgICAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWFuY2hvci1wb3NpdGlvbi0xLyNzY3JvbGwK
ICAgICAgICAgLy8gImFuY2hvcigpIGlzIGRlZmluZWQgdG8gYXNzdW1lIGFsbCB0aGUgc2Nyb2xs
IGNvbnRhaW5lcnMgYmV0d2VlbiB0aGUgYW5jaG9yIGVsZW1lbnQgYW5kCiAgICAgICAgIC8vIHRo
ZSBwb3NpdGlvbmVkIGVsZW1lbnTigJlzIGNvbnRhaW5pbmcgYmxvY2sgYXJlIGF0IHRoZWlyIGlu
aXRpYWwgc2Nyb2xsIHBvc2l0aW9uLCIKLSAgICAgICAgaWYgKENoZWNrZWRQdHIgYm94Q29udGFp
bmVyID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJveD4oKm5leHRDb250YWluZXIpKQotICAgICAg
ICAgICAgb2Zmc2V0ICs9IHRvTGF5b3V0U2l6ZShib3hDb250YWluZXItPnNjcm9sbFBvc2l0aW9u
KCkpOworLy9YWFggUGFzcyBzb21lIHBhcmFtZXRlciBhYm91dCB3aGV0aGVyIHRoaXMgc2hvdWxk
IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQgb3Igbm90LgorICAgICAgICAvL2lmIChDaGVja2Vk
UHRyIGJveENvbnRhaW5lciA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCb3g+KCpuZXh0Q29udGFp
bmVyKSkKKyAgICAgICAgLy8gICAgb2Zmc2V0ICs9IHRvTGF5b3V0U2l6ZShib3hDb250YWluZXIt
PnNjcm9sbFBvc2l0aW9uKCkpOwogCiAgICAgICAgIG9mZnNldCArPSBjdXJyZW50T2Zmc2V0Owog
ICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKGN1cnJlbnRPZmZzZXQpOwpAQCAtMTY5LDYgKzMw
NCw5IEBAIHN0YXRpYyBMYXlvdXRTaXplIG9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihjb25z
dCBSZW5kZXJFbGVtZW50JiBkZXNjZW5kYW50Q29uCiAgICAgICAgICAgICBvZmZzZXQgLT0gdG9M
YXlvdXRTaXplKGFuY2VzdG9ySW5saW5lLT5maXJzdElubGluZUJveFRvcExlZnQoKSk7IC8vIEZJ
WE1FOiBIYW5kbGUgUlRMLgogICAgIH0KIAorICAgIGlmIChhdXRvIGFuY2VzdG9yQm94ID0gZHlu
YW1pY0Rvd25jYXN0PFJlbmRlckJveD4oYW5jZXN0b3JDb250YWluZXIpKSAvLyBaZXJvIG91dCBj
b250YWluaW5nIGJsb2NrIHNjcm9sbCBwb3NpdGlvbi4KKyAgICAgICAgb2Zmc2V0ICs9IHRvTGF5
b3V0U2l6ZShhbmNlc3RvckJveC0+c2Nyb2xsUG9zaXRpb24oKSk7CisKICAgICByZXR1cm4gb2Zm
c2V0OwogfQogCkBAIC0xOTEsNDIgKzMyOSw5OCBAQCB2b2lkIEFuY2hvclBvc2l0aW9uRXZhbHVh
dG9yOjphZGRBbmNob3JGdW5jdGlvblNjcm9sbENvbXBlbnNhdGVkQXhpcyhSZW5kZXJTdHlsZQog
ICAgIHN0eWxlLnNldEFuY2hvckZ1bmN0aW9uU2Nyb2xsQ29tcGVuc2F0ZWRBeGVzKGF4ZXMpOwog
fQogCi1MYXlvdXRTaXplIEFuY2hvclBvc2l0aW9uRXZhbHVhdG9yOjpzY3JvbGxPZmZzZXRGcm9t
QW5jaG9yKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBhbmNob3IsIGNvbnN0IFJlbmRlckJv
eCYgYW5jaG9yZWQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJBbmNob3JTY3JvbGxTbmFwc2hv
dHMoUmVuZGVyQm94JiBhbmNob3JlZCkKIHsKLSAgICBDaGVja2VkUHRyIGNvbnRhaW5pbmdCbG9j
ayA9IGFuY2hvcmVkLmNvbnRhaW5pbmdCbG9jaygpOwotICAgIEFTU0VSVChhbmNob3IuaXNEZXNj
ZW5kYW50T2YoY29udGFpbmluZ0Jsb2NrLmdldCgpKSk7CisgICAgaWYgKCFhbmNob3JlZC5sYXll
cigpLT5hbmNob3JTY3JvbGxBZGp1c3RtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhbmNo
b3JlZC5sYXlvdXRDb250ZXh0KCkudW5yZWdpc3RlckFuY2hvclNjcm9sbEFkanVzdGVyRm9yKGFu
Y2hvcmVkKTsKKyAgICBhbmNob3JlZC5sYXllcigpLT5jbGVhckFuY2hvclNjcm9sbEFkanVzdG1l
bnQoKTsKK30KIAotICAgIGF1dG8gb2Zmc2V0ID0gTGF5b3V0U2l6ZSB7IH07Ci0gICAgYm9vbCBp
c0ZpeGVkQW5jaG9yID0gYW5jaG9yLmlzRml4ZWRQb3NpdGlvbmVkKCk7Cit2b2lkIEFuY2hvclBv
c2l0aW9uRXZhbHVhdG9yOjpjYXB0dXJlU2Nyb2xsU25hcHNob3RzKFJlbmRlckJveCYgYW5jaG9y
ZWQpCit7CisgICAgaWYgKCFTdHlsZTo6QW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OmlzTGF5b3V0
VGltZUFuY2hvclBvc2l0aW9uZWQoYW5jaG9yZWQuc3R5bGUoKSkgJiYgIWFuY2hvcmVkLnN0eWxl
KCkudXNlc0FuY2hvckZ1bmN0aW9ucygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1
dG8qIGFuY2VzdG9yID0gYW5jaG9yLmNvbnRhaW5lcigpOyBhbmNlc3RvciAmJiBhbmNlc3RvciAh
PSBjb250YWluaW5nQmxvY2s7IGFuY2VzdG9yID0gYW5jZXN0b3ItPmNvbnRhaW5lcigpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBib3ggPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQm94PihhbmNlc3Rv
cikpCi0gICAgICAgICAgICBvZmZzZXQgLT0gdG9MYXlvdXRTaXplKGJveC0+c2Nyb2xsUG9zaXRp
b24oKSk7CisgICAgaWYgKCFhbmNob3JlZC5sYXllcigpKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV1RGTG9nQWx3YXlzKCJD
YXB0dXJpbmcgc2Nyb2xsIHNuYXBzaG90cyAobWF5YmUpIGZvciAlcC4uLlxuIiwgJmFuY2hvcmVk
KTsKKworICAgIENoZWNrZWRQdHIgZGVmYXVsdEFuY2hvciA9IEFuY2hvclBvc2l0aW9uRXZhbHVh
dG9yOjpkZWZhdWx0QW5jaG9yRm9yQm94KGFuY2hvcmVkKTsKKyAgICBpZiAoIWRlZmF1bHRBbmNo
b3IpCisgICAgICAgIHJldHVybiBjbGVhckFuY2hvclNjcm9sbFNuYXBzaG90cyhhbmNob3JlZCk7
CisKKyAgICBBbmNob3JTY3JvbGxBZGp1c3RlciBhZGp1c3RlcihhbmNob3JlZCwgKmRlZmF1bHRB
bmNob3IpOworICAgIGlmICghYWRqdXN0ZXIubWF5TmVlZEFkanVzdG1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIGNsZWFyQW5jaG9yU2Nyb2xsU25hcHNob3RzKGFuY2hvcmVkKTsKKworICAgIENoZWNr
ZWRQdHIgY29udGFpbmluZ0Jsb2NrID0gYW5jaG9yZWQuY29udGFpbmluZ0Jsb2NrKCk7CisgICAg
QVNTRVJUKGRlZmF1bHRBbmNob3ItPmlzRGVzY2VuZGFudE9mKGNvbnRhaW5pbmdCbG9jay5nZXQo
KSkpOworCisgICAgYm9vbCBpc0ZpeGVkQW5jaG9yID0gZGVmYXVsdEFuY2hvci0+aXNGaXhlZFBv
c2l0aW9uZWQoKTsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gZGVmYXVsdEFuY2hvci0+Y29u
dGFpbmVyKCk7IGFuY2VzdG9yICYmIGFuY2VzdG9yICE9IGNvbnRhaW5pbmdCbG9jazsgYW5jZXN0
b3IgPSBhbmNlc3Rvci0+Y29udGFpbmVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGJveCA9IGR5
bmFtaWNEb3duY2FzdDxSZW5kZXJCb3g+KGFuY2VzdG9yKSkgeworICAgICAgICAgICAgaWYgKGJv
eC0+aGFzUG90ZW50aWFsbHlTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBh
ZGp1c3Rlci5hZGRTbmFwc2hvdCgqYm94KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYW5jZXN0
b3ItPmlzRml4ZWRQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBpc0ZpeGVkQW5jaG9yID0gdHJ1
ZTsKICAgICB9CiAKICAgICBpZiAoYW5jaG9yZWQuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiAhaXNG
aXhlZEFuY2hvcikKLSAgICAgICAgb2Zmc2V0IC09IHRvTGF5b3V0U2l6ZShhbmNob3JlZC52aWV3
KCkuZnJhbWVWaWV3KCkuc2Nyb2xsUG9zaXRpb25SZXNwZWN0aW5nQ3VzdG9tRml4ZWRQb3NpdGlv
bigpKTsKKyAgICAgICAgYWRqdXN0ZXIuYWRkVmlld3BvcnRTbmFwc2hvdChhbmNob3JlZC52aWV3
KCkpOwogCi0gICAgaWYgKGF1dG8gYW5jaG9yQm94ID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJv
eD4oYW5jaG9yKSkgewotICAgICAgICAvLyBUaGUgYW5jaG9yIG1heSBpdHNlbGYgYmUgc2Nyb2xs
LWNvbXBlbnNhdGVkLiBQcm9wYWdhdGUgdGhpcyBpZiBuZWVkZWQuCi0gICAgICAgIGlmIChhdXRv
IGNoYWluZWRBbmNob3IgPSBkZWZhdWx0QW5jaG9yRm9yQm94KCphbmNob3JCb3gpKQotICAgICAg
ICAgICAgb2Zmc2V0ICs9IHNjcm9sbE9mZnNldEZyb21BbmNob3IoKmNoYWluZWRBbmNob3IsICph
bmNob3JCb3gpOworICAgIGlmIChhZGp1c3Rlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJObyBzbmFwc2hvdHMgZm91bmQuXG4iKTsKKyAgICAgICAgcmV0dXJuIGNsZWFyQW5j
aG9yU2Nyb2xsU25hcHNob3RzKGFuY2hvcmVkKTsKICAgICB9CiAKLSAgICBhdXRvIGNvbXBlbnNh
dGVkQXhlcyA9IFsmXSB7Ci0gICAgICAgIGlmIChpc0xheW91dFRpbWVBbmNob3JQb3NpdGlvbmVk
KGFuY2hvcmVkLnN0eWxlKCkpKQotICAgICAgICAgICAgcmV0dXJuIE9wdGlvblNldDxCb3hBeGlz
RmxhZz4geyBCb3hBeGlzRmxhZzo6SG9yaXpvbnRhbCwgQm94QXhpc0ZsYWc6OlZlcnRpY2FsIH07
Ci0gICAgICAgIHJldHVybiBhbmNob3JlZC5zdHlsZSgpLmFuY2hvckZ1bmN0aW9uU2Nyb2xsQ29t
cGVuc2F0ZWRBeGVzKCk7Ci0gICAgfSgpOworICAgIFdURkxvZ0Fsd2F5cygiUmVnaXN0ZXJpbmcg
c25hcHNob3RzLlxuIik7CiAKLSAgICBpZiAoIWNvbXBlbnNhdGVkQXhlcy5jb250YWlucyhCb3hB
eGlzRmxhZzo6SG9yaXpvbnRhbCkpCi0gICAgICAgIG9mZnNldC5zZXRXaWR0aCgwKTsKLSAgICBp
ZiAoIWNvbXBlbnNhdGVkQXhlcy5jb250YWlucyhCb3hBeGlzRmxhZzo6VmVydGljYWwpKQotICAg
ICAgICBvZmZzZXQuc2V0SGVpZ2h0KDApOworICAgIGlmICghYW5jaG9yZWQuc3R5bGUoKS5wb3Np
dGlvblRyeUZhbGxiYWNrcygpLmlzRW1wdHkoKSkKKyAgICAgICAgYWRqdXN0ZXIuc2V0RmFsbGJh
Y2tMaW1pdHMoYW5jaG9yZWQpOwogCi0gICAgcmV0dXJuIG9mZnNldDsKKyAgICBhbmNob3JlZC5s
YXlvdXRDb250ZXh0KCkucmVnaXN0ZXJBbmNob3JTY3JvbGxBZGp1c3RlcihXVEZNb3ZlKGFkanVz
dGVyKSk7CisgICAgYW5jaG9yZWQubGF5ZXIoKS0+c2V0QW5jaG9yU2Nyb2xsQWRqdXN0bWVudCh7
IH0pOworfQorCit2b2lkIEFuY2hvclBvc2l0aW9uRXZhbHVhdG9yOjp1cGRhdGVTY3JvbGxBZGp1
c3RtZW50cyhSZW5kZXJWaWV3JiByZW5kZXJWaWV3KQoreworICAgIC8vIGh0dHBzOi8vZHJhZnRz
LmNzc3dnLm9yZy9jc3MtYW5jaG9yLXBvc2l0aW9uLTEvI3Njcm9sbAorICAgIGF1dG8mIGxheW91
dENvbnRleHQgPSByZW5kZXJWaWV3LmxheW91dENvbnRleHQoKTsKKworICAgIGZvciAoYXV0byBh
ZGp1c3RlciA6IGxheW91dENvbnRleHQuYW5jaG9yU2Nyb2xsQWRqdXN0ZXJzKCkpIHsKKyAgICAg
ICAgQ2hlY2tlZFB0ciBhbmNob3JlZCA9IGFkanVzdGVyLmFuY2hvcmVkKCk7CisgICAgICAgIGlm
ICghYW5jaG9yZWQgfHwgIWFuY2hvcmVkLT5sYXllcigpKSB7CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gUmVuZGVyQm94IGZhaWxlZCB0byBjbGVhbiB1cC4KKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZz
ZXQgPSBhZGp1c3Rlci5hY2N1bXVsYXRlQWRqdXN0bWVudHMocmVuZGVyVmlldywgKmFuY2hvcmVk
KTsKKyAgICAgICAgaWYgKCFhbmNob3JlZC0+bGF5ZXIoKS0+c2V0QW5jaG9yU2Nyb2xsQWRqdXN0
bWVudChzY3JvbGxPZmZzZXQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgV1RG
TG9nQWx3YXlzKCJVcGRhdGVkIHNjcm9sbCBhZGp1c3RtZW50IG9uICVwIHRvOiB4PSVkLCB5PSVk
IChyZWN0IHg9JWQgeT0lZCB3PSVkIGg9JWQpIiwgYWRqdXN0ZXIuYW5jaG9yZWQoKSwgKGludClz
Y3JvbGxPZmZzZXQud2lkdGgoKSwgKGludClzY3JvbGxPZmZzZXQuaGVpZ2h0KCksIChpbnQpYWRq
dXN0ZXIuYW5jaG9yZWQoKS0+eCgpLCAoaW50KWFkanVzdGVyLmFuY2hvcmVkKCktPnkoKSwgKGlu
dClhZGp1c3Rlci5hbmNob3JlZCgpLT53aWR0aCgpLCAoaW50KWFkanVzdGVyLmFuY2hvcmVkKCkt
PmhlaWdodCgpKTsKKworICAgICAgICBib29sIG5lZWRzSW52YWxpZGF0aW9uID0gZmFsc2U7Cisg
ICAgICAgIGlmIChhZGp1c3Rlci5oYXNGYWxsYmFja0xpbWl0cygpICYmIGFkanVzdGVyLmV4Y2Vl
ZHNGYWxsYmFja0xpbWl0cyhzY3JvbGxPZmZzZXQpKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIlRyaWdnZXJlZCBmYWxsYmFjayBvbiAlcC4gSW52YWxpZGF0aW5nLlxuIiwgYWRqdXN0ZXIu
YW5jaG9yZWQoKSk7CisgICAgICAgICAgICBhbmNob3JlZC0+c2V0TmVlZHNMYXlvdXQoKTsKKyAg
ICAgICAgICAgIEFTU0VSVChhbmNob3JlZC0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIG5lZWRz
SW52YWxpZGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbmNob3JlZC0+
c3R5bGUoKS5wb3NpdGlvblZpc2liaWxpdHkoKS5jb250YWlucyhQb3NpdGlvblZpc2liaWxpdHk6
OkFuY2hvcnNWaXNpYmxlKSkgeworICAgICAgICAgICAgYm9vbCBzaG91bGRCZUhpZGRlbiA9IEFu
Y2hvclBvc2l0aW9uRXZhbHVhdG9yOjppc0RlZmF1bHRBbmNob3JJbnZpc2libGVPckNsaXBwZWRC
eUludGVydmVuaW5nQm94ZXMoKmFuY2hvcmVkKTsgLy8gRklYTUU6IE9wdGltaXplIHRoaXMuCisg
ICAgICAgICAgICBpZiAoYWRqdXN0ZXIuaXNIaWRkZW4oKSAhPSBzaG91bGRCZUhpZGRlbikKKyAg
ICAgICAgICAgICAgICBuZWVkc0ludmFsaWRhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG5lZWRzSW52YWxpZGF0aW9uKSAvLyBGSVhNRTogT3B0aW1pemUgdGhpcy4KKyAgICAg
ICAgICAgIGFuY2hvcmVkLT5lbGVtZW50KCktPmludmFsaWRhdGVGb3JBbmNob3JSZWN0Q2hhbmdl
KCk7CisgICAgfTsKIH0KIAogc3RhdGljIExheW91dFJlY3QgYm91bmRpbmdSZWN0Rm9yRnJhZ21l
bnRlZEFuY2hvcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgYW5jaG9yQm94LCBjb25zdCBS
ZW5kZXJFbGVtZW50JiBjb250YWluaW5nQmxvY2ssIGNvbnN0IFJlbmRlckZyYWdtZW50ZWRGbG93
JiBmcmFnbWVudGVkRmxvdykKQEAgLTI1MSw3ICs0NDUsNyBAQCBzdGF0aWMgTGF5b3V0UmVjdCBi
b3VuZGluZ1JlY3RGb3JGcmFnbWVudGVkQW5jaG9yKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0
JiBhbgogCiAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0b3AgbGVmdCBsb2NhdGlvbiwgcGh5c2ljYWwg
d2lkdGgsIGFuZCBwaHlzaWNhbCBoZWlnaHQgb2YgdGhlIHNwZWNpZmllZAogLy8gYW5jaG9yIGVs
ZW1lbnQuIFRoZSBsb2NhdGlvbiBpcyBjb21wdXRlZCByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVk
IGNvbnRhaW5pbmcgYmxvY2suCi1MYXlvdXRSZWN0IEFuY2hvclBvc2l0aW9uRXZhbHVhdG9yOjpj
b21wdXRlQW5jaG9yUmVjdFJlbGF0aXZlVG9Db250YWluaW5nQmxvY2soQ2hlY2tlZFJlZjxjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdD4gYW5jaG9yQm94LCBjb25zdCBSZW5kZXJFbGVtZW50JiBj
b250YWluaW5nQmxvY2spCitMYXlvdXRSZWN0IEFuY2hvclBvc2l0aW9uRXZhbHVhdG9yOjpjb21w
dXRlQW5jaG9yUmVjdFJlbGF0aXZlVG9Db250YWluaW5nQmxvY2soQ2hlY2tlZFJlZjxjb25zdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdD4gYW5jaG9yQm94LCBjb25zdCBSZW5kZXJFbGVtZW50JiBjb250
YWluaW5nQmxvY2ssIGNvbnN0IFJlbmRlckJveCYgYW5jaG9yZWRCb3gpCiB7CiAgICAgLy8gRnJh
Z21lbnRlZCBmbG93cyBhcmUgYSBsaXR0bGUgdHJpY2t5IHRvIGRlYWwgd2l0aC4gT25lIGV4YW1w
bGUgb2YgYSBmcmFnbWVudGVkCiAgICAgLy8gZmxvdyBpcyBhIGJsb2NrIGFuY2hvciBlbGVtZW50
IHRoYXQgaXMgImZyYWdtZW50ZWQiIG9yIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBjb2x1bW5zCkBA
IC0yNjcsNiArNDYxLDE5IEBAIExheW91dFJlY3QgQW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OmNv
bXB1dGVBbmNob3JSZWN0UmVsYXRpdmVUb0NvbnRhaW5pbmdCbG9jayhDCiAgICAgYXV0byBhbmNo
b3JIZWlnaHQgPSBhbmNob3JCb3gtPm9mZnNldEhlaWdodCgpOwogICAgIGF1dG8gYW5jaG9yTG9j
YXRpb24gPSBMYXlvdXRQb2ludCB7IG9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihhbmNob3JC
b3gsIGNvbnRhaW5pbmdCbG9jaykgfTsKIAorICAgIGlmICgmY29udGFpbmluZ0Jsb2NrID09ICZj
b250YWluaW5nQmxvY2sudmlldygpICYmIGFuY2hvcmVkQm94LmlzRml4ZWRQb3NpdGlvbmVkKCkp
IHsKKyAgICAgICAgLy8gSGFuZGxlIGZpeGVkIHBvc2l0aW9uaW5nIHggc2Nyb2xsaW5nIGFuY2hv
ci4KKyAgICAgICAgYm9vbCBpc0ZpeGVkQW5jaG9yID0gZmFsc2U7CisgICAgICAgIGZvciAoY29u
c3QgUmVuZGVyRWxlbWVudCogYm94ID0gYW5jaG9yQm94LnB0cigpOyBib3ggJiYgYm94ICE9ICZj
b250YWluaW5nQmxvY2s7IGJveCA9IGJveC0+Y29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgIGlm
IChib3gtPmlzRml4ZWRQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpc0ZpeGVkQW5j
aG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWlzRml4ZWRBbmNob3IpCisgICAgICAgICAgICBhbmNob3JMb2Nh
dGlvbi5tb3ZlQnkoLWFuY2hvckJveC0+dmlldygpLmZyYW1lVmlldygpLnNjcm9sbFBvc2l0aW9u
UmVzcGVjdGluZ0N1c3RvbUZpeGVkUG9zaXRpb24oKSk7CisgICAgfQorCiAgICAgcmV0dXJuIExh
eW91dFJlY3QoYW5jaG9yTG9jYXRpb24sIExheW91dFNpemUoYW5jaG9yV2lkdGgsIGFuY2hvckhl
aWdodCkpOwogfQogCkBAIC00MzAsNyArNjM3LDcgQEAgc3RhdGljIExheW91dFVuaXQgY29tcHV0
ZUluc2V0VmFsdWUoQ1NTUHJvcGVydHlJRCBpbnNldFByb3BlcnR5SUQsIENoZWNrZWRSZWY8Y28K
IAogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrID0gYW5jaG9yUG9zaXRpb25lZFJlbmRlcmVyLT5j
b250YWluZXIoKTsKICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrKTsKLSAgICBhdXRvIGFuY2hv
clJlY3QgPSBBbmNob3JQb3NpdGlvbkV2YWx1YXRvcjo6Y29tcHV0ZUFuY2hvclJlY3RSZWxhdGl2
ZVRvQ29udGFpbmluZ0Jsb2NrKGFuY2hvckJveCwgKmNvbnRhaW5pbmdCbG9jayk7CisgICAgYXV0
byBhbmNob3JSZWN0ID0gQW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OmNvbXB1dGVBbmNob3JSZWN0
UmVsYXRpdmVUb0NvbnRhaW5pbmdCbG9jayhhbmNob3JCb3gsICpjb250YWluaW5nQmxvY2ssIGFu
Y2hvclBvc2l0aW9uZWRSZW5kZXJlci5nZXQoKSk7CiAgICAgYXV0byBhbmNob3JSYW5nZSA9IGNv
bnN0cmFpbnRzLmV4dHJhY3RSYW5nZShhbmNob3JSZWN0KTsKIAogICAgIGF1dG8gYW5jaG9yUG9z
aXRpb24gPSBhbmNob3JSYW5nZS5taW4oKSArIExheW91dFVuaXQoYW5jaG9yUmFuZ2Uuc2l6ZSgp
ICogYW5jaG9yUGVyY2VudGFnZSk7CkBAIC0xMDIyLDQ3ICsxMjI5LDYgQEAgdm9pZCBBbmNob3JQ
b3NpdGlvbkV2YWx1YXRvcjo6dXBkYXRlQW5jaG9yUG9zaXRpb25lZFN0YXRlRm9yRGVmYXVsdEFu
Y2hvcihFbGVtZW4KICAgICBzdGF0ZS0+YW5jaG9yTmFtZXMuYWRkKHJlc29sdmVkRGVmYXVsdEFu
Y2hvcik7CiB9CiAKLXZvaWQgQW5jaG9yUG9zaXRpb25FdmFsdWF0b3I6OnVwZGF0ZVNuYXBzaG90
dGVkU2Nyb2xsT2Zmc2V0cyhEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy1hbmNob3ItcG9zaXRpb24tMS8jc2Nyb2xsCi0KLSAgICBmb3Ig
KGF1dG8gZWxlbWVudEFuZEFuY2hvcnMgOiBkb2N1bWVudC5zdHlsZVNjb3BlKCkuYW5jaG9yUG9z
aXRpb25lZFRvQW5jaG9yTWFwKCkpIHsKLSAgICAgICAgQ2hlY2tlZFJlZiBhbmNob3JQb3NpdGlv
bmVkRWxlbWVudCA9IGVsZW1lbnRBbmRBbmNob3JzLmtleTsKLSAgICAgICAgaWYgKCFhbmNob3JQ
b3NpdGlvbmVkRWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIENoZWNrZWRQdHIgYW5jaG9yUG9zaXRpb25lZFJlbmRlcmVyID0gZHluYW1pY0Rvd25j
YXN0PFJlbmRlckJveD4oYW5jaG9yUG9zaXRpb25lZEVsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAg
ICAgICBpZiAoIWFuY2hvclBvc2l0aW9uZWRSZW5kZXJlciB8fCAhYW5jaG9yUG9zaXRpb25lZFJl
bmRlcmVyLT5sYXllcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gaHR0
cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1hbmNob3ItcG9zaXRpb24tMS8jc2Nyb2xsCi0gICAg
ICAgIC8vICJBbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94IGFic3BvcyBjb21wZW5zYXRlcyBm
b3Igc2Nyb2xsIGluIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGF4aXMgaWYgYm90aCBvZiB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHRydWU6Ci0gICAgICAgIC8vICAtIGFic3BvcyBo
YXMgYSBkZWZhdWx0IGFuY2hvciBib3guCi0gICAgICAgIC8vICAtIGFic3BvcyBoYXMgYW4gYW5j
aG9yIHJlZmVyZW5jZSB0byBpdHMgZGVmYXVsdCBhbmNob3IgYm94IG9yIGF0IGxlYXN0IHRvIHNv
bWV0aGluZyBpbiB0aGUgc2FtZSBzY3JvbGxpbmcgY29udGV4dCIKLSAgICAgICAgYXV0byBkZWZh
dWx0QW5jaG9yID0gZGVmYXVsdEFuY2hvckZvckJveCgqYW5jaG9yUG9zaXRpb25lZFJlbmRlcmVy
KTsKLSAgICAgICAgaWYgKCFkZWZhdWx0QW5jaG9yKSB7Ci0gICAgICAgICAgICBhbmNob3JQb3Np
dGlvbmVkUmVuZGVyZXItPmxheWVyKCktPmNsZWFyU25hcHNob3R0ZWRTY3JvbGxPZmZzZXRGb3JB
bmNob3JQb3NpdGlvbmluZygpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhdXRvIHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21BbmNob3IoKmRlZmF1
bHRBbmNob3IsICphbmNob3JQb3NpdGlvbmVkUmVuZGVyZXIpOwotCi0gICAgICAgIGlmIChzY3Jv
bGxPZmZzZXQuaXNaZXJvKCkgJiYgIWFuY2hvclBvc2l0aW9uZWRSZW5kZXJlci0+bGF5ZXIoKS0+
c25hcHNob3R0ZWRTY3JvbGxPZmZzZXRGb3JBbmNob3JQb3NpdGlvbmluZygpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgYW5jaG9yUG9zaXRpb25lZFJlbmRlcmVyLT5sYXllcigp
LT5zZXRTbmFwc2hvdHRlZFNjcm9sbE9mZnNldEZvckFuY2hvclBvc2l0aW9uaW5nKHNjcm9sbE9m
ZnNldCk7Ci0gICAgfQotfQotCi12b2lkIEFuY2hvclBvc2l0aW9uRXZhbHVhdG9yOjp1cGRhdGVQ
b3NpdGlvbnNBZnRlclNjcm9sbChEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgdXBkYXRlU25h
cHNob3R0ZWRTY3JvbGxPZmZzZXRzKGRvY3VtZW50KTsKLQotICAgIC8vIEFsc28gY2hlY2sgaWYg
c2Nyb2xsaW5nIGhhcyBjYXVzZWQgYW55IGFuY2hvciBib3hlcyB0byBtb3ZlLgotICAgIFN0eWxl
OjpTY29wZTo6TGF5b3V0RGVwZW5kZW5jeVVwZGF0ZUNvbnRleHQgY29udGV4dDsKLSAgICBkb2N1
bWVudC5zdHlsZVNjb3BlKCkuaW52YWxpZGF0ZUZvckFuY2hvckRlcGVuZGVuY2llcyhjb250ZXh0
KTsKLX0KLQogYXV0byBBbmNob3JQb3NpdGlvbkV2YWx1YXRvcjo6bWFrZUFuY2hvclBvc2l0aW9u
ZWRGb3JBbmNob3JNYXAoQW5jaG9yUG9zaXRpb25lZFRvQW5jaG9yTWFwJiB0b0FuY2hvck1hcCkg
LT4gQW5jaG9yVG9BbmNob3JQb3NpdGlvbmVkTWFwCiB7CiAgICAgQW5jaG9yVG9BbmNob3JQb3Np
dGlvbmVkTWFwIG1hcDsKQEAgLTEzMjMsNCArMTQ4OSw2IEBAIENoZWNrZWRQdHI8UmVuZGVyQm94
TW9kZWxPYmplY3Q+IEFuY2hvclBvc2l0aW9uRXZhbHVhdG9yOjpkZWZhdWx0QW5jaG9yRm9yQm94
KGNvCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmU6OlN0
eWxlCit9IC8vIG5hbWVzcGFjZSBTdHlsZQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9BbmNob3JQb3NpdGlvbkV2YWx1YXRvci5oIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvQW5jaG9yUG9zaXRpb25FdmFsdWF0b3IuaAppbmRleCA3MmMy
OGMwM2MwYTAuLmNkNzA5MGE1NWMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
QW5jaG9yUG9zaXRpb25FdmFsdWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9BbmNo
b3JQb3NpdGlvbkV2YWx1YXRvci5oCkBAIC0yNiw2ICsyNiw4IEBACiAKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJMYXlv
dXRQb2ludC5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJMYXlvdXRVbml0
LmgiCiAjaW5jbHVkZSAiUG9zaXRpb25UcnlPcmRlci5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1l
bnRJZGVudGlmaWVyLmgiCkBAIC0zNCw2ICszNiw3IEBACiAjaW5jbHVkZSAiV3JpdGluZ01vZGUu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9UWm9uZU1hbGxvYy5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nSGFzaC5oPgpAQCAtNDIsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIExheW91dFBvaW50OwogY2xhc3MgTGF5
b3V0UmVjdDsKIGNsYXNzIExheW91dFNpemU7CiBjbGFzcyBSZW5kZXJCbG9jazsKQEAgLTQ5LDkg
KzUzLDUxIEBAIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlckJveE1vZGVsT2JqZWN0Owog
Y2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgUmVuZGVyVmll
dzsKIAogZW51bSBDU1NQcm9wZXJ0eUlEIDogdWludDE2X3Q7CiAKK3N0cnVjdCBBbmNob3JTY3Jv
bGxTbmFwc2hvdCB7CisgICAgY29uc3QgUmVuZGVyQm94KiBtX3Njcm9sbGVyOworICAgIExheW91
dFBvaW50IG1fc2Nyb2xsU25hcHNob3QgeyB9OworICAgIGlubGluZSBMYXlvdXRTaXplIGFkanVz
dG1lbnRGb3JDdXJyZW50U2Nyb2xsUG9zaXRpb24oKTsKK307CisKK2NsYXNzIEFuY2hvclNjcm9s
bEFkanVzdGVyIHsKK3ByaXZhdGU6CisgICAgTGF5b3V0U2l6ZSBhZGp1c3RtZW50Rm9yVmlld3Bv
cnQoY29uc3QgUmVuZGVyVmlldyYgcmVuZGVyVmlldyk7CisKKyAgICBSZW5kZXJCb3gqIG1fYW5j
aG9yZWQ7CisgICAgVmVjdG9yPEFuY2hvclNjcm9sbFNuYXBzaG90LDE+IG1fc2Nyb2xsU25hcHNo
b3RzOworICAgIGJvb2wgbV9uZWVkc1hBZGp1c3RtZW50IDogMSB7IGZhbHNlIH07CisgICAgYm9v
bCBtX25lZWRzWUFkanVzdG1lbnQgOiAxIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYWRqdXN0Rm9y
Vmlld3BvcnQgOiAxIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzQ2hhaW5lZEFuY2hvciA6IDEg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0hpZGRlbiA6IDEgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9oYXNGYWxsYmFjayA6IDEgeyBmYWxzZSB9OworICAgIExheW91dFNpemVMaW1pdHMgbV9mYWxs
YmFja0xpbWl0czsKKworcHVibGljOgorICAgIEFuY2hvclNjcm9sbEFkanVzdGVyKFJlbmRlckJv
eCYgYW5jaG9yZWQsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBkZWZhdWx0QW5jaG9yKTsK
KyAgICBSZW5kZXJCb3gqIGFuY2hvcmVkKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JlZDsgfQor
CisgICAgYm9vbCBtYXlOZWVkQWRqdXN0bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNYQWRq
dXN0bWVudCB8IG1fbmVlZHNZQWRqdXN0bWVudDsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFtX3Njcm9sbFNuYXBzaG90cy5zaXplKCkgJiYgIW1faGFzQ2hhaW5lZEFuY2hv
cjsgfQorICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdCB7IHJldHVybiBtX2lzSGlkZGVuOyB9Cisg
ICAgdm9pZCBzZXRIaWRkZW4oYm9vbCBoaWRlKSB7IG1faXNIaWRkZW4gPSBoaWRlOyB9CisKKyAg
ICBpbmxpbmUgdm9pZCBhZGRTbmFwc2hvdChjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGVyKTsKKyAg
ICBpbmxpbmUgdm9pZCBhZGRWaWV3cG9ydFNuYXBzaG90KGNvbnN0IFJlbmRlclZpZXcmIHJlbmRl
clZpZXcpOworCisgICAgdm9pZCBzZXRGYWxsYmFja0xpbWl0cyhjb25zdCBSZW5kZXJCb3gmIGFu
Y2hvcmVkKTsKKyAgICBib29sIGhhc0ZhbGxiYWNrTGltaXRzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNGYWxsYmFjazsgfQorICAgIGJvb2wgZXhjZWVkc0ZhbGxiYWNrTGltaXRzKExheW91dFNpemUg
YWRqdXN0bWVudCkgeyByZXR1cm4gIW1fZmFsbGJhY2tMaW1pdHMuZml0cyhhZGp1c3RtZW50KTsg
fQorCisgICAgTGF5b3V0U2l6ZSBhY2N1bXVsYXRlQWRqdXN0bWVudHMoY29uc3QgUmVuZGVyVmll
dyYgcmVuZGVyVmlldywgY29uc3QgUmVuZGVyQm94JiBhbmNob3JlZCk7CisKKyAgICBib29sIGlu
dmFsaWRhdGVGb3JTY3JvbGxlcihjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGVyKTsKK307CisKIG5h
bWVzcGFjZSBTdHlsZSB7CiAKIGNsYXNzIEJ1aWxkZXJTdGF0ZTsKQEAgLTExNywxMSArMTYzLDEx
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGV2YWx1YXRlU2l6
ZShCdWlsZGVyU3RhdGUmLCBzdGQ6Om9wdGlvbmFsPFNjb3BlZE5hbWU+IGVsZW1lbnROYW1lLCBz
dGQ6Om9wdGlvbmFsPEFuY2hvclNpemVEaW1lbnNpb24+KTsKIAogICAgIHN0YXRpYyB2b2lkIHVw
ZGF0ZUFuY2hvclBvc2l0aW9uaW5nU3RhdGVzQWZ0ZXJJbnRlcmxlYXZlZExheW91dChEb2N1bWVu
dCYsIEFuY2hvclBvc2l0aW9uZWRTdGF0ZXMmKTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTbmFw
c2hvdHRlZFNjcm9sbE9mZnNldHMoRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVQ
b3NpdGlvbnNBZnRlclNjcm9sbChEb2N1bWVudCYpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNj
cm9sbEFkanVzdG1lbnRzKFJlbmRlclZpZXcmKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVBbmNo
b3JQb3NpdGlvbmVkU3RhdGVGb3JEZWZhdWx0QW5jaG9yKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJT
dHlsZSYsIEFuY2hvclBvc2l0aW9uZWRTdGF0ZXMmKTsKIAotICAgIHN0YXRpYyBMYXlvdXRSZWN0
IGNvbXB1dGVBbmNob3JSZWN0UmVsYXRpdmVUb0NvbnRhaW5pbmdCbG9jayhDaGVja2VkUmVmPGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0PiBhbmNob3JCb3gsIGNvbnN0IFJlbmRlckVsZW1lbnQm
IGNvbnRhaW5pbmdCbG9jayk7CisgICAgc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUFuY2hvclJl
Y3RSZWxhdGl2ZVRvQ29udGFpbmluZ0Jsb2NrKENoZWNrZWRSZWY8Y29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3Q+IGFuY2hvckJveCwgY29uc3QgUmVuZGVyRWxlbWVudCYgY29udGFpbmluZ0Jsb2Nr
LCBjb25zdCBSZW5kZXJCb3gmIGFuY2hvcmVkQm94KTsKKyAgICBzdGF0aWMgdm9pZCBjYXB0dXJl
U2Nyb2xsU25hcHNob3RzKFJlbmRlckJveCYgYW5jaG9yZWQpOwogCiAgICAgc3RhdGljIEFuY2hv
clRvQW5jaG9yUG9zaXRpb25lZE1hcCBtYWtlQW5jaG9yUG9zaXRpb25lZEZvckFuY2hvck1hcChB
bmNob3JQb3NpdGlvbmVkVG9BbmNob3JNYXAmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3Bl
LmNwcAppbmRleCAyZDM2OGQ4ZmYzZmEuLjY3N2NkZWUyOWI0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVTY29wZS5jcHAKQEAgLTEwMDcsNyArMTAwNyw3IEBAIGJvb2wgU2NvcGU6OmludmFsaWRh
dGVGb3JBbmNob3JEZXBlbmRlbmNpZXMoTGF5b3V0RGVwZW5kZW5jeVVwZGF0ZUNvbnRleHQmIGNv
bnRlCiAKICAgICBhdXRvIG1ha2VBbmNob3JQb3NpdGlvbiA9IFsmXShjb25zdCBSZW5kZXJCb3hN
b2RlbE9iamVjdCYgYW5jaG9yUmVuZGVyZXIpIHsKICAgICAgICAgQW5jaG9yUG9zaXRpb24gcmVz
dWx0OwotICAgICAgICByZXN1bHQuYWJzb2x1dGVSZWN0ID0gYW5jaG9yUmVuZGVyZXIuYWJzb2x1
dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICAgICAgcmVzdWx0LmFic29sdXRlUmVjdCA9IGFuY2hv
clJlbmRlcmVyLmFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CiAg
ICAgICAgIC8vIEluY2x1ZGUgY29udGFpbmluZyBibG9jayBzaXplcyBhcyBhbmNob3IgZnVuY3Rp
b24gaW5zZXRzIG1heSBiZSBjb21wdXRlZCBhZ2FpbnN0IGFueSBzaWRlIGFuZCBpZiB0aGV5IGNo
YW5nZQogICAgICAgICAvLyB3ZSBuZWVkIHRvIGludmFsaWRhdGUuCiAgICAgICAgIGZvciAoYXV0
byogY29udGFpbmluZ0Jsb2NrID0gYW5jaG9yUmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7IGNv
bnRhaW5pbmdCbG9jazsgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWlu
aW5nQmxvY2soKSkgewpAQCAtMTAzOSw2ICsxMDM5LDcgQEAgYm9vbCBTY29wZTo6aW52YWxpZGF0
ZUZvckFuY2hvckRlcGVuZGVuY2llcyhMYXlvdXREZXBlbmRlbmN5VXBkYXRlQ29udGV4dCYgY29u
dGUKIAogICAgIGZvciAoYXV0byYgdG9JbnZhbGlkYXRlIDogYW5jaG9yZWRFbGVtZW50c1RvSW52
YWxpZGF0ZSkgewogICAgICAgICBDaGVja2VkUHRyIHJlbmRlcmVyID0gdG9JbnZhbGlkYXRlLT5y
ZW5kZXJlcigpOworICAgICAgICBXVEZMb2dBbHdheXMoIkludmFsaWRhdGluZyBmb3IgYW5jaG9y
IGRlcGVuZGVuY3kgY2hhbmdlLiIpOwogICAgICAgICBpZiAocmVuZGVyZXIgJiYgQW5jaG9yUG9z
aXRpb25FdmFsdWF0b3I6OmlzTGF5b3V0VGltZUFuY2hvclBvc2l0aW9uZWQocmVuZGVyZXItPnN0
eWxlKCkpKQogICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KCk7CiAgICAgICAg
IHRvSW52YWxpZGF0ZS0+aW52YWxpZGF0ZUZvckFuY2hvclJlY3RDaGFuZ2UoKTsKQEAgLTExMDQs
NyArMTEwNSw4IEBAIEVsZW1lbnQqIGhvc3RGb3JTY29wZU9yZGluYWwoY29uc3QgRWxlbWVudCYg
ZWxlbWVudCwgU2NvcGVPcmRpbmFsIHNjb3BlT3JkaW5hbCkKIAogdm9pZCBTY29wZTo6dXBkYXRl
QW5jaG9yUG9zaXRpb25pbmdTdGF0ZUFmdGVyU3R5bGVSZXNvbHV0aW9uKCkKIHsKLSAgICBBbmNo
b3JQb3NpdGlvbkV2YWx1YXRvcjo6dXBkYXRlU25hcHNob3R0ZWRTY3JvbGxPZmZzZXRzKG1fZG9j
dW1lbnQpOworICAgIGlmIChDaGVja2VkUHRyIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5jaGVj
a2VkUmVuZGVyVmlldygpKQorICAgICAgICBBbmNob3JQb3NpdGlvbkV2YWx1YXRvcjo6dXBkYXRl
U2Nyb2xsQWRqdXN0bWVudHMoKnJlbmRlclZpZXcpOyAvL1hYWCBJcyB0aGlzIG5lY2Vzc2FyeT8g
T3Igd2lsbCB0aGUgY29tYmluYXRpb24gb2YgbGF5b3V0IGFuZCBzY3JvbGwgaW52YWxpZGF0aW9u
IGhhbmRsZSBpdCBzdWZmaWNpZW50bHk/CiAKICAgICBtX2FuY2hvclBvc2l0aW9uZWRUb0FuY2hv
ck1hcC5yZW1vdmVJZihbXShhdXRvJiBlbGVtZW50QW5kU3RhdGUpIHsKICAgICAgICAgcmV0dXJu
IGVsZW1lbnRBbmRTdGF0ZS52YWx1ZS5hbmNob3JzLmlzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAppbmRleCAxNGVmN2VjNjQ5YWMuLmE0N2ZlOTVi
YjliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApAQCAt
MTYyMyw4ICsxNjIzLDcgQEAgdm9pZCBUcmVlUmVzb2x2ZXI6OnVwZGF0ZUZvclBvc2l0aW9uVmlz
aWJpbGl0eShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0eWxlYWIKICAgICB9OwogCiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB2aWEgInZpc2liaWxpdHk6IGZvcmNlLWhpZGRlbiIuCi0gICAg
aWYgKHNob3VsZEhpZGVBbmNob3JQb3NpdGlvbmVkKCkpCi0gICAgICAgIHN0eWxlLnNldElzRm9y
Y2VIaWRkZW4oKTsKKyAgICBzdHlsZS5zZXRJc0ZvcmNlSGlkZGVuKHNob3VsZEhpZGVBbmNob3JQ
b3NpdGlvbmVkKCkpOwogfQogCiBjb25zdCBSZW5kZXJTdHlsZSogVHJlZVJlc29sdmVyOjpiZWZv
cmVSZXNvbHV0aW9uU3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgc3RkOjpvcHRpb25hbDxQ
c2V1ZG9FbGVtZW50SWRlbnRpZmllcj4gcHNldWRvKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>